diff --git a/DEPS b/DEPS
index 8b15587..9cc54a0 100644
--- a/DEPS
+++ b/DEPS
@@ -105,11 +105,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': '0c3dc59fc1c61e6f54cf3d0100e54ee0d20ec13d',
+  'skia_revision': 'e8161dd154d7b5adc3bce71a615263dc1635dfc8',
   # 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': '1b63139d35984e457e9fce65b6240b5ea3fb8208',
+  'v8_revision': 'e1220339a6c864b71394ad9f98537df0e55f3796',
   # 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.
@@ -117,7 +117,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '7359954301e131a2b1f326ef391669dbd7562d0d',
+  'angle_revision': '4d42ef39658b9808f4e18c077b10202a7b50b33b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling build tools
   # and whatever else without interference from each other.
@@ -129,7 +129,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': 'ad370480282dd788afc80563cebb492c02644998',
+  'pdfium_revision': 'aaff8f8b902ac3058b44b0f11a236df606082383',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
@@ -181,7 +181,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'feed_revision': 'b7306ddecfd12d00fad796c0db3425706850b973',
+  'feed_revision': 'e389d69f7979109f1f9109bb78b13099930b7aa8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling android_sdk_build-tools_version
   # and whatever else without interference from each other.
@@ -213,11 +213,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'spv_tools_revision': '21bcb9d8b9dba1c7b7e1d0a8f5b6ad7ea26cc5b6',
+  'spv_tools_revision': '7600fc0e19c3a99bd3ef2c24515cc508ca1d3cfb',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'spv_headers_revision': '2c512180ca03b5d4f56283efc85745775b45fdc4',
+  'spv_headers_revision': 'dcf23bdabacc3c54b83b1f9367e7a8adb27f8d87',
 }
 
 # Only these hosts are allowed for dependencies in this DEPS file.
@@ -579,7 +579,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'f23b4ab8b8898f205b65302279c1937bdb2b5674',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '23d65fd54de1bdbf5db29eb9d8a2944b3bbb6daa',
       'condition': 'checkout_linux',
   },
 
@@ -604,7 +604,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '0f5a0b4409892f575b559ca77bd9369650bd2443',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'b56a43a9064c35e81be989f5e86a19d9159d5edf',
 
   'src/third_party/devtools-node-modules':
     Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'),
@@ -848,7 +848,7 @@
     Var('chromium_git') + '/webm/libwebm.git' + '@' + '01c1d1d76f139345c442bfc8e61b4e1cba809059',
 
   'src/third_party/libyuv':
-    Var('chromium_git') + '/libyuv/libyuv.git' + '@' + 'd694f0a82b4da9d8ea37e6c453b7a34947eb5790',  # from r1714
+    Var('chromium_git') + '/libyuv/libyuv.git' + '@' + '9a07219dc8fbf2b77e390d16bd24809444838a91',  # from r1714
 
   'src/third_party/lighttpd': {
       'url': Var('chromium_git') + '/chromium/deps/lighttpd.git' + '@' + Var('lighttpd_revision'),
@@ -943,7 +943,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' +  '1d289218f53f365c35bad517c63c99160558220f',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' +  '30d7c2688aa941314bd9be8040b43e1151b92ae4',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + 'ac0d98b5cee6c024b0cffeb4f8f45b6fc5ccdb78',
@@ -1129,7 +1129,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@09307abef3ddacca9edf94cefe07e56a268bbe9e',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@77e18bee2225f222a2448d15c60c31b42d8914f2',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc
index c45f116..b7235936 100644
--- a/ash/app_list/app_list_controller_impl.cc
+++ b/ash/app_list/app_list_controller_impl.cc
@@ -20,6 +20,7 @@
 #include "ash/public/cpp/app_list/answer_card_contents_registry.h"
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/session/session_controller.h"
+#include "ash/shelf/shelf.h"
 #include "ash/shell.h"
 #include "ash/voice_interaction/voice_interaction_controller.h"
 #include "ash/wallpaper/wallpaper_controller.h"
@@ -540,6 +541,7 @@
   Show(display::Display::InternalDisplayId(), app_list::kTabletMode,
        base::TimeTicks());
   UpdateHomeLauncherVisibility();
+  Shelf::ForWindow(presenter_.GetWindow())->MaybeUpdateShelfBackground();
 }
 
 void AppListControllerImpl::OnTabletModeEnded() {
diff --git a/ash/app_list/views/search_box_view.cc b/ash/app_list/views/search_box_view.cc
index f2288be..1696d480 100644
--- a/ash/app_list/views/search_box_view.cc
+++ b/ash/app_list/views/search_box_view.cc
@@ -548,6 +548,8 @@
     return app_list_view_->HandleScroll(
         (&mouse_event)->AsMouseWheelEvent()->offset().y(), ui::ET_MOUSEWHEEL);
   }
+  if (mouse_event.type() == ui::ET_MOUSE_PRESSED)
+    AcceptAutocompleteText();
   return search_box::SearchBoxViewBase::HandleMouseEvent(sender, mouse_event);
 }
 
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index a68beb8a..3eeb138 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -146,7 +146,7 @@
         Autohide shelf
       </message>
       <message name="IDS_ASH_SHELF_CONTEXT_MENU_ALWAYS_SHOW_SHELF" desc="Title of the menu item in the context menu for always showing the shelf">
-        Always Show Shelf
+        Always show shelf
       </message>
       <message name="IDS_ASH_SHELF_CONTEXT_MENU_POSITION" desc="Title of the menu item in the context menu for aligning the shelf">
         Shelf position
diff --git a/ash/components/strings/ash_components_strings_mr.xtb b/ash/components/strings/ash_components_strings_mr.xtb
index 7041ceda..e9baf70 100644
--- a/ash/components/strings/ash_components_strings_mr.xtb
+++ b/ash/components/strings/ash_components_strings_mr.xtb
@@ -74,7 +74,7 @@
 <translation id="3710784500737332588">मदत केंद्र उघडा</translation>
 <translation id="3720939646656082033">लिंक एका नवीन टॅबमध्ये उघडा आणि नवीन टॅबवर स्विच करा</translation>
 <translation id="3725795051337497754">हा टॅब बंद करा</translation>
-<translation id="3751033133896282964">तुमची याआधीची क्रिया पूर्ववत करा</translation>
+<translation id="3751033133896282964">तुमची याआधीची क्रिया पहिल्यासारखी करा</translation>
 <translation id="3792178297143798024">तुमच्या शेल्फवरील हायलाइट केलेला आयटम उघडा</translation>
 <translation id="379295446891231126"><ph name="CTRL" /><ph name="SEPARATOR" /> एक ते आठ</translation>
 <translation id="3837047332182291558">कीबोर्ड उजळ करा (फक्त बॅकलिट कीबोर्डसाठी)</translation>
@@ -178,7 +178,7 @@
 <translation id="8537650670971624753">शोध मोडमधून बाहेर पडा</translation>
 <translation id="85690795166292698">लिंक एका नवीन टॅबमध्ये उघडा</translation>
 <translation id="8609384513243082612">नवीन टॅब उघडा</translation>
-<translation id="8644639153978066712">फायली अ‍ॅप मध्ये लपलेल्या फायली प्रदर्शित करा</translation>
+<translation id="8644639153978066712">Files अ‍ॅप मध्ये लपवलेल्या फायली डिस्प्ले करा</translation>
 <translation id="8717459106217102612">आधीचा शब्द किंवा अक्षर निवडा</translation>
 <translation id="8727232706774971183">तुमच्या सूचना पाहा</translation>
 <translation id="8855885154700222542">क्षेत्रे की</translation>
diff --git a/ash/components/strings/ash_components_strings_no.xtb b/ash/components/strings/ash_components_strings_no.xtb
index 2d1f444..d65a4bc4 100644
--- a/ash/components/strings/ash_components_strings_no.xtb
+++ b/ash/components/strings/ash_components_strings_no.xtb
@@ -165,7 +165,7 @@
 <translation id="7787242579016742662">Åpne en fil i nettleseren</translation>
 <translation id="7917881398263220094">Stopp innlastingen av den aktive siden</translation>
 <translation id="7952165122793773711">Gå til fane 1–8</translation>
-<translation id="8026334261755873520">Slett nettlesingsdata</translation>
+<translation id="8026334261755873520">Slett nettleserdata</translation>
 <translation id="8130528849632411619">Gå til begynnelsen av dokumentet</translation>
 <translation id="8147954207400281792"><ph name="CTRL" /><ph name="SEPARATOR" /><ph name="K" /> eller <ph name="E" /></translation>
 <translation id="8232835244134740473">Bytt fokus mellom statusområdet (hvor kontobildet ditt vises), appoversikten, adressefeltet, bokmerkeraden (hvis den er synlig), nettsiden som er åpen, og nedlastingsraden (hvis den er synlig).</translation>
diff --git a/ash/shelf/shelf.cc b/ash/shelf/shelf.cc
index 7028cd3..ab65fc36 100644
--- a/ash/shelf/shelf.cc
+++ b/ash/shelf/shelf.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "ash/animation/animation_change_type.h"
 #include "ash/app_list/app_list_controller_impl.h"
 #include "ash/public/cpp/shelf_item_delegate.h"
 #include "ash/public/cpp/shelf_model.h"
@@ -178,6 +179,14 @@
     shelf_layout_manager_->UpdateVisibilityState();
 }
 
+void Shelf::MaybeUpdateShelfBackground() {
+  if (!shelf_layout_manager_)
+    return;
+
+  shelf_layout_manager_->MaybeUpdateShelfBackground(
+      AnimationChangeType::ANIMATE);
+}
+
 ShelfVisibilityState Shelf::GetVisibilityState() const {
   return shelf_layout_manager_ ? shelf_layout_manager_->visibility_state()
                                : SHELF_HIDDEN;
diff --git a/ash/shelf/shelf.h b/ash/shelf/shelf.h
index 3ffaa299..9a6418d 100644
--- a/ash/shelf/shelf.h
+++ b/ash/shelf/shelf.h
@@ -91,6 +91,8 @@
 
   void UpdateVisibilityState();
 
+  void MaybeUpdateShelfBackground();
+
   ShelfVisibilityState GetVisibilityState() const;
 
   int GetAccessibilityPanelHeight() const;
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index e7f554a..1d3f42d 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -576,6 +576,17 @@
   LayoutShelf();
 }
 
+void ShelfLayoutManager::MaybeUpdateShelfBackground(AnimationChangeType type) {
+  const ShelfBackgroundType new_background_type(GetShelfBackgroundType());
+
+  if (new_background_type == shelf_background_type_)
+    return;
+
+  shelf_background_type_ = new_background_type;
+  for (auto& observer : observers_)
+    observer.OnBackgroundUpdated(shelf_background_type_, type);
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // ShelfLayoutManager, private:
 
@@ -925,17 +936,6 @@
   }
 }
 
-void ShelfLayoutManager::MaybeUpdateShelfBackground(AnimationChangeType type) {
-  const ShelfBackgroundType new_background_type(GetShelfBackgroundType());
-
-  if (new_background_type == shelf_background_type_)
-    return;
-
-  shelf_background_type_ = new_background_type;
-  for (auto& observer : observers_)
-    observer.OnBackgroundUpdated(shelf_background_type_, type);
-}
-
 void ShelfLayoutManager::UpdateAutoHideStateNow() {
   SetState(state_.visibility_state);
 
diff --git a/ash/shelf/shelf_layout_manager.h b/ash/shelf/shelf_layout_manager.h
index e0b3f118..3373a0d 100644
--- a/ash/shelf/shelf_layout_manager.h
+++ b/ash/shelf/shelf_layout_manager.h
@@ -212,6 +212,9 @@
   // panel height. The Docked Magnifier appears above the ChromeVox panel.
   void SetDockedMagnifierHeight(int height);
 
+  // Updates the background of the shelf if it has changed.
+  void MaybeUpdateShelfBackground(AnimationChangeType change_type);
+
  private:
   class UpdateShelfObserver;
   friend class PanelLayoutManagerTest;
@@ -275,9 +278,6 @@
   // used by |CalculateTargetBounds()|.
   void UpdateTargetBoundsForGesture(TargetBounds* target_bounds) const;
 
-  // Updates the background of the shelf if it has changed.
-  void MaybeUpdateShelfBackground(AnimationChangeType change_type);
-
   // Updates the auto hide state immediately.
   void UpdateAutoHideStateNow();
 
diff --git a/ash/shelf/shelf_layout_manager_unittest.cc b/ash/shelf/shelf_layout_manager_unittest.cc
index ed5a67d..08f0297 100644
--- a/ash/shelf/shelf_layout_manager_unittest.cc
+++ b/ash/shelf/shelf_layout_manager_unittest.cc
@@ -2017,6 +2017,35 @@
   EXPECT_EQ(SHELF_BACKGROUND_DEFAULT, GetShelfWidget()->GetBackgroundType());
 }
 
+// Tests that the shelf background gets updated when the AppList stays open
+// during the tablet mode transition with a visible window.
+TEST_F(ShelfLayoutManagerTest, TabletModeTransitionWithAppListVisible) {
+  // Home Launcher requires an internal display.
+  display::test::DisplayManagerTestApi(Shell::Get()->display_manager())
+      .SetFirstDisplayAsInternalDisplay();
+
+  // Show a window, which will later fill the whole screen.
+  std::unique_ptr<aura::Window> window(
+      AshTestBase::CreateTestWindow(gfx::Rect(0, 0, 400, 400)));
+  window->SetProperty(aura::client::kResizeBehaviorKey,
+                      ws::mojom::kResizeBehaviorCanResize |
+                          ws::mojom::kResizeBehaviorCanMaximize);
+  wm::ActivateWindow(window.get());
+
+  // Show the AppList over |window|.
+  GetAppListTestHelper()->ShowAndRunLoop(GetPrimaryDisplayId());
+
+  // Transition to tablet mode.
+  Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true);
+
+  // |window| should be maximized, and the shelf background should match the
+  // maximized state.
+  EXPECT_EQ(
+      wm::WORKSPACE_WINDOW_STATE_MAXIMIZED,
+      RootWindowController::ForWindow(window.get())->GetWorkspaceWindowState());
+  EXPECT_EQ(SHELF_BACKGROUND_MAXIMIZED, GetShelfWidget()->GetBackgroundType());
+}
+
 // Test the background color for split view mode.
 TEST_F(ShelfLayoutManagerTest, ShelfBackgroundColorInSplitView) {
   // Split view is only enabled in tablet mode.
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 7e037c3..26df59af 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -214,7 +214,7 @@
 <translation id="453661520163887813"><ph name="TIME" /> حتى اكتمال الشحن</translation>
 <translation id="4544944664594876241">لقد تغير اختصار قفل الشاشة. يُرجى استخدام <ph name="NEW_SHORTCUT" /> بدلاً من <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">خدمة الخطوط</translation>
-<translation id="4570957409596482333">زر "سماع الاختيار"</translation>
+<translation id="4570957409596482333">زر "الاختيار والاستماع"</translation>
 <translation id="4585337515783392668">إيقاف الإرسال إلى مستلم غير معروف</translation>
 <translation id="4628757576491864469">الأجهزة</translation>
 <translation id="4659419629803378708">‏تم تفعيل ChromeVox</translation>
@@ -436,7 +436,7 @@
 <translation id="8592141010104017453">عدم عرض الإشعارات على الإطلاق</translation>
 <translation id="8627191004499078455">تم الاتصال بجهاز <ph name="DEVICE_NAME" /></translation>
 <translation id="8639760480004882931">يتبقى <ph name="PERCENTAGE" /></translation>
-<translation id="8649101189709089199">سماع الاختيار</translation>
+<translation id="8649101189709089199">الاختيار والاستماع</translation>
 <translation id="8652175077544655965">غلق الإعدادات</translation>
 <translation id="8653151467777939995">عرض إعدادات الإشعارات. تم تفعيل الإشعارات</translation>
 <translation id="8664753092453405566">عرض قائمة الشبكات. <ph name="STATE_TEXT" /></translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index a80a225..9140f59 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> যোগ করা হয়েছে</translation>
 <translation id="1056775291175587022">কোনও নেটওয়ার্ক নেই</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">আমি বোর হয়ে গেছি</translation>
 <translation id="1104084341931202936">অ্যাক্সেসেবিলিটি সেটিংস দেখান</translation>
 <translation id="1104621072296271835">আপনার ডিভাইসগুলি একসাথে আরও ভাল কাজ করে</translation>
 <translation id="112308213915226829">তাককে স্বয়ংক্রিয়ভাবে লুকান</translation>
@@ -15,12 +16,14 @@
 <translation id="119944043368869598">সব পরিষ্কার করুন</translation>
 <translation id="1247372569136754018">মাইক্রোফোন (অভ্যন্তরীণ)</translation>
 <translation id="1252999807265626933"><ph name="POWER_SOURCE" /> থেকে চার্জ হচ্ছে</translation>
+<translation id="1255033239764210633">আবহাওয়া কি রকম?</translation>
 <translation id="1267032506238418139">শর্টকাটে পরিবর্তন</translation>
 <translation id="1270290102613614947">অন-স্ক্রিন কীবোর্ড অক্ষম করা রয়েছে</translation>
 <translation id="1272079795634619415">বন্ধ</translation>
 <translation id="1279938420744323401"><ph name="DISPLAY_NAME" /> (<ph name="ANNOTATION" />)</translation>
 <translation id="1290331692326790741">সিগন্যালটি ভাল নয়</translation>
 <translation id="1293264513303784526">USB-C ডিভাইস (বাঁ পোর্ট)</translation>
+<translation id="1294929383540927798">লক-স্ক্রিন বিজ্ঞপ্তির সেটিংস পরিবর্তন করুন</translation>
 <translation id="1302880136325416935">ব্লুটুথ সেটিংস দেখান। <ph name="STATE_TEXT" /></translation>
 <translation id="1346748346194534595">ডানে</translation>
 <translation id="1351937230027495976">মেনুটি আড়াল করুন</translation>
@@ -38,6 +41,7 @@
 <translation id="1570871743947603115">ব্লুটুথ টগল করুন। <ph name="STATE_TEXT" /></translation>
 <translation id="1608626060424371292">এই ব্যবহারকারীকে সরান</translation>
 <translation id="1621499497873603021">ব্যাটারি শেষ হতে <ph name="TIME_LEFT" /> সময় বাকি আছে</translation>
+<translation id="1654477262762802994">একটি ভয়েস কোয়েরি শুরু করুন</translation>
 <translation id="1658406695958299976">দুঃখিত, আপনার পাসওয়ার্ড এখনও পর্যন্ত যাচাই করা যায়নি। দ্রষ্টব্য: আপনি যদি সম্প্রতি আপনার পাসওয়ার্ড পরিবর্তন করে থাকেন, তাহলে আপনি সাইন-আউট করার পর আপনার নতুন পাসওয়ার্ড প্রয়োগ করা হবে, অনুগ্রহ করে এখানে পুরানো পাসওয়ার্ড ব্যবহার করুন।</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> বাকি আছে</translation>
 <translation id="1698760176351776263">IPv6 ঠিকানা: <ph name="ADDRESS" /></translation>
@@ -46,6 +50,7 @@
 <translation id="1746730358044914197">আপনার প্রশাসক ইনপুটের পদ্ধতিগুলি কনফিগার করে।</translation>
 <translation id="1747827819627189109">অন-স্ক্রিন কীবোর্ড সক্ষম করা রয়েছে</translation>
 <translation id="1761222317188459878">নেটওয়ার্ক কানেকশন টগল করুন। <ph name="STATE_TEXT" /></translation>
+<translation id="1812997170047690955">আমার স্ক্রিনে কী রয়েছে?</translation>
 <translation id="1823873187264960516">ইথারনেট: <ph name="ADDRESS" /></translation>
 <translation id="1836215606488044471">সহায়ক (লোড হচ্ছে...)</translation>
 <translation id="1850504506766569011">ওয়াই-ফাই বন্ধ আছে৷</translation>
@@ -121,6 +126,7 @@
 <translation id="2946119680249604491">সংযোগ জুড়ুন</translation>
 <translation id="2961963223658824723">কিছু সমস্যা হয়েছে। কয়েক সেকেন্ডের মধ্যে আবার চেষ্টা করুন।</translation>
 <translation id="2963773877003373896">mod3</translation>
+<translation id="2992931425024192067">সমস্ত বিজ্ঞপ্তির কন্টেন্ট দেখান</translation>
 <translation id="2995447421581609334">কাস্ট ডিভাইসগুলি দেখান।</translation>
 <translation id="2996462380875591307">ডক করা ম্যাগনিফায়ার চালু আছে। আবার Ctrl+Search+D প্রেস করে সেটিকে বন্ধ করুন।</translation>
 <translation id="2999742336789313416"><ph name="DISPLAY_NAME" /> হল <ph name="DOMAIN" /> এর দ্বারা পরিচালিত একটি সর্বজনীন সেশন</translation>
@@ -131,6 +137,7 @@
 <translation id="3081696990447829002">মেনুটি বড় করুন</translation>
 <translation id="3087734570205094154">নিচে</translation>
 <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (ব্লুটুথ)</translation>
+<translation id="3124698051292518391">সবসময় শেল্ফ দেখান</translation>
 <translation id="3126069444801937830">আপডেট করার জন্য পুনরারম্ভ করুন</translation>
 <translation id="3147142846278915599">লঞ্চার (অ্যাপ সিঙ্ক করা হচ্ছে...)</translation>
 <translation id="315116470104423982">মোবাইল ডেটা</translation>
@@ -138,6 +145,7 @@
 <translation id="3153444934357957346">একধিক সাইন-ইনে আপনার কেবলমাত্র <ph name="MULTI_PROFILE_USER_LIMIT" />টি পর্যন্ত অ্যাকাউন্ট থাকতে পারে।</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{একটি ডিভাইসে কানেক্ট রয়েছে}one{#টি ডিভাইসে কানেক্ট রয়েছে}other{#টি ডিভাইসে কানেক্ট রয়েছে}}</translation>
 <translation id="3236488194889173876">কোনো মোবাইল নেটওয়ার্ক উপলব্ধ নেই</translation>
+<translation id="3255483164551725916">আপনি কি করতে পারেন?</translation>
 <translation id="3294437725009624529">অতিথি</translation>
 <translation id="332587331255250389">অনুগ্রহ করে ব্যাটারি পাল্টান</translation>
 <translation id="3351879221545518001">আপনি বর্তমানে স্ক্রিন কাস্ট করছেন।</translation>
@@ -172,6 +180,7 @@
 <translation id="385051799172605136">ফিরুন</translation>
 <translation id="3891340733213178823">প্রস্থান করার জন্য দুবার Ctrl+Shift+Q টিপুন৷</translation>
 <translation id="3893630138897523026">ChromeVox (কথ্য প্রতিক্রিয়া)</translation>
+<translation id="3897533311200664389">একটি টেক্সট কোয়েরি শুরু করুন</translation>
 <translation id="3899995891769452915">ভয়েস ইনপুট</translation>
 <translation id="3900355044994618856">আপনার সেশনটি <ph name="SESSION_TIME_REMAINING" /> এ শেষ হবে</translation>
 <translation id="3901991538546252627"><ph name="NAME" />-এ সংযোগ করা হচ্ছে</translation>
@@ -181,6 +190,7 @@
 <translation id="4017989525502048489">লেজার পয়েন্টার</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{একটি অ্যাপের জন্য বন্ধ আছে}one{#টি অ্যাপের জন্য বন্ধ আছে}other{#টি অ্যাপের জন্য বন্ধ আছে}}</translation>
 <translation id="4072264167173457037">মাঝারি সিগন্যাল</translation>
+<translation id="4146833061457621061">মিউজিক চালান</translation>
 <translation id="4200057768455216496">ডক করা ম্যাগনিফায়ারের জন্য আপনি শর্টকাট প্রেস করেছেন। আপনি কি এটি চালু করতে চান?</translation>
 <translation id="4217571870635786043">ডিক্টেশন</translation>
 <translation id="4261870227682513959">বিজ্ঞপ্তি সেটিংস দেখান। বিজ্ঞপ্তি বন্ধ আছে</translation>
@@ -209,12 +219,14 @@
 <translation id="4628757576491864469">ডিভাইস</translation>
 <translation id="4659419629803378708">ChromeVox সক্ষম করা আছে</translation>
 <translation id="4734965478015604180">অনুভূমিক</translation>
+<translation id="476166673298332917">পাসওয়ার্ড এবং যোগাযোগ সহ সমস্ত অ্যাক্টিভিটির অ্যাক্সেস এই ডিভাইসের অ্যাডমিনিস্ট্রেটরের কাছে আছে।</translation>
 <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" />-এর জন্য পাসওয়ার্ড</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">সংযোগ বিচ্ছিন্ন</translation>
 <translation id="4849058404725798627">কিবোর্ড ফোকাসের মাধ্যমে হাইলাইট করুন</translation>
 <translation id="4872237917498892622">Alt+Search অথবা Shift</translation>
 <translation id="4890187583552566966">আপনার প্রশাসকের দ্বারা Google সহায়ক অক্ষম করা হয়েছে।</translation>
+<translation id="4893522937062257019">লক স্ক্রিনে</translation>
 <translation id="4895488851634969361">ব্যাটারি পূর্ণ৷</translation>
 <translation id="490375751687810070">উল্লম্ব</translation>
 <translation id="4905614135390995787">উচ্চ কনট্রাস্ট মোড টগল করার শর্টকাটটি পরিবর্তিত হয়েছে। <ph name="OLD_SHORTCUT" /> এর পরিবর্তে অনুগ্রহ করে <ph name="NEW_SHORTCUT" /> ব্যবহার করুন।</translation>
@@ -230,6 +242,7 @@
 <translation id="523505283826916779">অ্যাক্সেসযোগ্যতার সেটিংস</translation>
 <translation id="5313326810920013265">ব্লুটুথ সেটিংস</translation>
 <translation id="5331975486040154427">USB-C ডিভাইস (বাঁ দিকের পিছনের পোর্ট)</translation>
+<translation id="5379115545237091094">অনেক বেশি চেষ্টা করেছেন</translation>
 <translation id="5397578532367286026">chrome.com এ পরিচালক (<ph name="MANAGER_EMAIL" />) এই ব্যবহারকারীর ব্যবহার এবং ইতিহাস পর্যালোচনা করতে পারেন৷</translation>
 <translation id="5430931332414098647">ঝটপট টিথারিং</translation>
 <translation id="5431825016875453137">OpenVPN / L2TP</translation>
@@ -261,6 +274,7 @@
 <translation id="5895138241574237353">পুনর্সূচনা</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
 <translation id="5911533659001334206">শর্টকাট ভিউয়ার</translation>
+<translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
 <translation id="5916664084637901428">চালু</translation>
 <translation id="592343074608792716">Chromebook এবং আপনার ফোন নিজে থেকেই কানেক্ট করবে</translation>
 <translation id="5947494881799873997">ফেরান</translation>
@@ -336,6 +350,7 @@
 <translation id="7037152028959403492">উচ্চ কনট্রাস্টের জন্য আপনি শর্টকাট প্রেস করেছেন। আপনি কি এটি চালু করতে চান?</translation>
 <translation id="7066646422045619941">এই নেটওয়ার্কটি আপনার প্রশাসকের দ্বারা অক্ষম করা হয়েছে৷</translation>
 <translation id="7067196344162293536">স্বতঃ ঘূর্ণন</translation>
+<translation id="7068360136237591149">ফাইল খুলুন</translation>
 <translation id="7076293881109082629">প্রবেশ করুন হচ্ছে</translation>
 <translation id="7092922358121866860">নাইট লাইট সেটিংস দেখান</translation>
 <translation id="7098389117866926363">USB-C ডিভাইস (পিছনের বাঁ পোর্ট)</translation>
@@ -351,6 +366,7 @@
 <translation id="7398254312354928459">নেটওয়ার্ক সংযোগ পরিবর্তন করা হয়েছে</translation>
 <translation id="742594950370306541">ক্যামেরা ব্যবহার করা হচ্ছে।</translation>
 <translation id="743058460480092004">ক্যামেরা এবং মাইক্রোফোন ব্যবহার করা হচ্ছে।</translation>
+<translation id="7497767806359279797">ভাষা এবং কীবোর্ড বেছে নিন</translation>
 <translation id="7510334386202674593">Ctrl+Shift+L</translation>
 <translation id="7526573455193969409">নেটওয়ার্কের উপরে নজর রাখা হতে পারে</translation>
 <translation id="7536035074519304529">IP ঠিকানা: <ph name="ADDRESS" /></translation>
@@ -360,6 +376,7 @@
 <translation id="7569509451529460200">ব্রেল এবং ChromeVox সক্ষম করেছেন</translation>
 <translation id="7593891976182323525">Search অথবা Shift</translation>
 <translation id="7604942372593434070">আপনার ব্রাউজিং অ্যাক্টিভিটি অ্যাক্সেস করুন</translation>
+<translation id="7642778300616172920">সংবেদনশীল কন্টেন্ট লুকান</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (মালিক)</translation>
 <translation id="7647488630410863958">আপনার বিজ্ঞপ্তিগুলি দেখতে ডিভাইস আনলক করুন</translation>
 <translation id="7649070708921625228">সহায়তা</translation>
@@ -375,6 +392,8 @@
 <translation id="7842211907556571265"><ph name="NETWORK_NAME" />-এ কানেক্ট করা হচ্ছে</translation>
 <translation id="7842569679327885685">সতর্কতা: পরীক্ষামূলক বৈশিষ্ট্য</translation>
 <translation id="7846634333498149051">কীবোর্ড</translation>
+<translation id="7886277072580235377">আপনি সাইন-আউট করলে আপনার ইন্টারনেট সেশন মুছে ফেলা হবে। <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">একটি ইমেল পাঠান</translation>
 <translation id="7904094684485781019">এই অ্যাকাউন্টের প্রশাসক একাধিক প্রবেশ করুন অননুমোদিত করেছেন৷</translation>
 <translation id="7933084174919150729">Google সহায়ক শুধুমাত্র প্রাথমিক প্রোফাইলেই ব্যবহার করা যায়।</translation>
 <translation id="79341161159229895">অ্যাকাউন্টটি <ph name="FIRST_PARENT_EMAIL" /> এবং <ph name="SECOND_PARENT_EMAIL" /> পরিচালনা করছেন</translation>
@@ -414,6 +433,7 @@
 <translation id="8484916590211895857"><ph name="NAME" />: আবার সংযোগ করছে...</translation>
 <translation id="8513108775083588393">নিজে থেকে ঘুরবে</translation>
 <translation id="8517041960877371778">আপনার <ph name="DEVICE_TYPE" /> চালু থাকা অবস্থায় চার্জ নাও হতে পারে।</translation>
+<translation id="8592141010104017453">কোনও বিজ্ঞপ্তি দেখাবেন না</translation>
 <translation id="8627191004499078455"><ph name="DEVICE_NAME" />-এর সাথে কানেক্ট হয়েছে</translation>
 <translation id="8639760480004882931"><ph name="PERCENTAGE" /> বাকি আছে</translation>
 <translation id="8649101189709089199">বাছুন ও শুনুন</translation>
@@ -435,6 +455,7 @@
 <translation id="8850991929411075241">Search+Esc</translation>
 <translation id="8870509716567206129">অ্যাপ্লিকেশনটি বিভক্ত-স্ক্রিন সমর্থন করে না৷</translation>
 <translation id="8874184842967597500">সংযুক্ত নয়</translation>
+<translation id="8877788021141246043">রিমাইন্ডার সেট করুন</translation>
 <translation id="8878886163241303700">স্ক্রিন সম্প্রসারণ করা হচ্ছে</translation>
 <translation id="8921624153894383499">Google সহায়ক এই ভাষায় কথা বলে না।</translation>
 <translation id="8938800817013097409">USB-C ডিভাইস (পিছনের ডান পোর্ট)</translation>
@@ -444,6 +465,7 @@
 <translation id="8995603266996330174">পরিচালনা করেছেন <ph name="DOMAIN" /> </translation>
 <translation id="9029474291399787231">Adobe Flash Player-এর আপডেট উপলভ্য</translation>
 <translation id="9056839673611986238">ডিভাইস রোল ব্যাক করা হবে</translation>
+<translation id="9070640332319875144">অ্যাসিস্ট্যান্ট সেটিংস</translation>
 <translation id="9074739597929991885">ব্লুটুথ</translation>
 <translation id="9079731690316798640">ওয়াই ফাই: <ph name="ADDRESS" /></translation>
 <translation id="9080206825613744995">মাইক্রোফোন ব্যবহার করা হচ্ছে।</translation>
@@ -458,6 +480,7 @@
 <translation id="9210037371811586452">সমন্বিত ডেস্কটপ মোড থেকে প্রস্থান করছে</translation>
 <translation id="9215934040295798075">ওয়ালপেপার সেট করুন</translation>
 <translation id="923686485342484400">প্রস্থান করার জন্য দুবার Control Shift Q টিপুন৷</translation>
+<translation id="938963181863597773">আমার ক্যালেন্ডারে কী কী আছে?</translation>
 <translation id="945522503751344254">মতামত জানান</translation>
 <translation id="98515147261107953">ল্যান্ডস্কেপ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index 4f7be8b2..716d33a 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -23,7 +23,7 @@
 <translation id="1279938420744323401"><ph name="DISPLAY_NAME" /> (<ph name="ANNOTATION" />)</translation>
 <translation id="1290331692326790741">Schwaches Signal</translation>
 <translation id="1293264513303784526">USB-C-Gerät (Port links)</translation>
-<translation id="1294929383540927798">Hier können Sie die Benachrichtigungseinstellungen für den Sperrbildschirm ändern</translation>
+<translation id="1294929383540927798">Benachrichtigungseinstellungen für den Sperrbildschirm ändern</translation>
 <translation id="1302880136325416935">Bluetooth-Einstellungen anzeigen. <ph name="STATE_TEXT" /></translation>
 <translation id="1346748346194534595">Rechts</translation>
 <translation id="1351937230027495976">Menü minimieren</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index bad8ec3..ddde45f4 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -110,6 +110,7 @@
 <translation id="2727977024730340865">Plugged in to a low-power charger. Battery charging may not be reliable.</translation>
 <translation id="2761704814324807722">Status tray, time <ph name="TIME" />, <ph name="BATTERY" /></translation>
 <translation id="277257480934873581">Reconnecting to <ph name="NAME" /></translation>
+<translation id="2790844815106384441">Choose whether websites can use location services or the device’s microphone, camera or other features</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
 <translation id="2805756323405976993">Apps</translation>
 <translation id="2808012452536866044">Better Together switched to a new phone</translation>
@@ -194,6 +195,7 @@
 <translation id="4200057768455216496">You pressed the shortcut for the docked magnifier. Do you want to turn it on?</translation>
 <translation id="4217571870635786043">Dictation</translation>
 <translation id="4261870227682513959">Show notification settings. Notifications are off</translation>
+<translation id="4269883910223712419">The admin of this device has the ability to:</translation>
 <translation id="4274921305979314545">Connect your Chromebook with your phone</translation>
 <translation id="4279490309300973883">Mirroring</translation>
 <translation id="4292681942966152062">Activating <ph name="NETWORK_NAME" /></translation>
@@ -221,6 +223,7 @@
 <translation id="4734965478015604180">Horizontal</translation>
 <translation id="476166673298332917">The administrator of this device has access to all activity, including passwords and communications.</translation>
 <translation id="4776917500594043016">Password for <ph name="USER_EMAIL_ADDRESS" /></translation>
+<translation id="4778095205580009397">The Google Assistant is not available in a demo session.</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4804818685124855865">Disconnect</translation>
 <translation id="4849058404725798627">Highlight object with keyboard focus</translation>
@@ -336,6 +339,7 @@
 <translation id="6751826523481687655">Performance tracing is turned on</translation>
 <translation id="6785414152754474415">Battery is <ph name="PERCENTAGE" />% full and charging.</translation>
 <translation id="6803622936009808957">Could not mirror displays since no supported resolutions found. Entered extended desktop instead.</translation>
+<translation id="6814658242098378692">Manage apps, extensions and themes</translation>
 <translation id="6820676911989879663">Take a break!</translation>
 <translation id="683971173229319003">Search+L</translation>
 <translation id="6857811139397017780">Activate <ph name="NETWORKSERVICE" /></translation>
@@ -359,6 +363,7 @@
 <translation id="7168224885072002358">Reverting to old resolution in <ph name="TIMEOUT_SECONDS" /></translation>
 <translation id="7256634071279256947">Rear microphone</translation>
 <translation id="726276584504105859">Drag here to use split screen</translation>
+<translation id="7303365578352795231">Answering on another device.</translation>
 <translation id="7348093485538360975">On-Screen Keyboard</translation>
 <translation id="735745346212279324">VPN disconnected</translation>
 <translation id="7377169924702866686">Caps Lock is on.</translation>
@@ -391,6 +396,7 @@
 <translation id="7842211907556571265">Connecting to <ph name="NETWORK_NAME" /></translation>
 <translation id="7842569679327885685">Warning: Experimental feature</translation>
 <translation id="7846634333498149051">Keyboard</translation>
+<translation id="7886169021410746335">Adjust privacy settings</translation>
 <translation id="7886277072580235377">Your Internet session will be cleared when you sign out. <ph name="LEARN_MORE" /></translation>
 <translation id="788781083998633524">Send an email</translation>
 <translation id="7904094684485781019">The administrator for this account has disallowed multiple sign-in.</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index b688beb..ea372aa 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -23,6 +23,7 @@
 <translation id="1279938420744323401"><ph name="DISPLAY_NAME" /> (<ph name="ANNOTATION" />)</translation>
 <translation id="1290331692326790741">Señal débil</translation>
 <translation id="1293264513303784526">Dispositivo USB-C (puerto izquierdo)</translation>
+<translation id="1294929383540927798">Cambia la configuración de notificaciones de pantalla bloqueada</translation>
 <translation id="1302880136325416935">Mostrar la configuración de Bluetooth: <ph name="STATE_TEXT" /></translation>
 <translation id="1346748346194534595">Derecha</translation>
 <translation id="1351937230027495976">Contraer menú</translation>
@@ -40,6 +41,7 @@
 <translation id="1570871743947603115">Activar o desactivar Bluetooth: <ph name="STATE_TEXT" /></translation>
 <translation id="1608626060424371292">Eliminar este usuario</translation>
 <translation id="1621499497873603021">Tiempo restante hasta que se agote la batería: <ph name="TIME_LEFT" /></translation>
+<translation id="1654477262762802994">Iniciar una búsqueda por voz</translation>
 <translation id="1658406695958299976">Todavía no se pudo verificar tu contraseña. Ten en cuenta que, si cambiaste tu contraseña recientemente, podrás usar la nueva cuando salgas. Aquí deberás usar la contraseña anterior.</translation>
 <translation id="1677472565718498478">Tiempo restante <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Dirección IPv6: <ph name="ADDRESS" /></translation>
@@ -135,6 +137,7 @@
 <translation id="3081696990447829002">Expandir menú</translation>
 <translation id="3087734570205094154">Inferior</translation>
 <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation>
+<translation id="3124698051292518391">Mostrar siempre la biblioteca</translation>
 <translation id="3126069444801937830">Reinicia para actualizar.</translation>
 <translation id="3147142846278915599">Selector (sincronizando aplicaciones…)</translation>
 <translation id="315116470104423982">Datos móviles</translation>
@@ -178,6 +181,7 @@
 <translation id="385051799172605136">Atrás</translation>
 <translation id="3891340733213178823">Presiona Ctrl + Mayús + Q dos veces para salir.</translation>
 <translation id="3893630138897523026">ChromeVox (comentarios por voz)</translation>
+<translation id="3897533311200664389">Iniciar una búsqueda de texto</translation>
 <translation id="3899995891769452915">Entrada de voz</translation>
 <translation id="3900355044994618856">Tu sesión finalizará en <ph name="SESSION_TIME_REMAINING" /></translation>
 <translation id="3901991538546252627">Conectando con: <ph name="NAME" /></translation>
@@ -461,6 +465,7 @@
 <translation id="8995603266996330174">Administrado por <ph name="DOMAIN" /></translation>
 <translation id="9029474291399787231">La actualización de Adobe Flash Player está disponible</translation>
 <translation id="9056839673611986238">Se restablecerá el dispositivo</translation>
+<translation id="9070640332319875144">Configuración del Asistente</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9079731690316798640">Wi-Fi: <ph name="ADDRESS" /></translation>
 <translation id="9080206825613744995">El micrófono está en uso.</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index 7084510..aa8e132 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -415,7 +415,7 @@
 <translation id="8192202700944119416">सूचनाएं छिपी हुई हैं.</translation>
 <translation id="8261506727792406068">हटाएं</translation>
 <translation id="8297006494302853456">कमज़ोर</translation>
-<translation id="8308637677604853869">पिछला मेनू</translation>
+<translation id="8308637677604853869">पिछला मेन्यू</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8351131234907093545">नोट बनाएं</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> के लिए विकल्प मेनू</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index dd443c2..7132457 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -2,7 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="mr">
 <translation id="1012876632442809908">USB-C डिव्‍हाइस (पुढील बाजूचे पोर्ट)</translation>
-<translation id="1013923882670373915">"<ph name="DEVICE_NAME" />" Bluetooth डिव्हाइस जोडण्यासाठी परवानगी घेऊ इच्छिते. कृपया त्या डिव्हाइसवर हा पिन एंटर करा: <ph name="PINCODE" /></translation>
+<translation id="1013923882670373915">"<ph name="DEVICE_NAME" />" ब्लूटूथ डिव्हाइस पेअरिंगसाठी परवानगी घेऊ इच्छिते. कृपया त्या डिव्हाइसवर हा पिन एंटर करा: <ph name="PINCODE" /></translation>
 <translation id="1032891413405719768">स्टायलस बॅटरी कमी आहे</translation>
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> जोडले</translation>
 <translation id="1056775291175587022">कोणतीही नेटवर्क नाहीत</translation>
@@ -79,22 +79,22 @@
 <translation id="2208323208084708176">एकीकृत डेस्कटॉप मोड</translation>
 <translation id="2220572644011485463">पिन किंवा पासवर्ड</translation>
 <translation id="225680501294068881">डिव्हाइसेससाठी स्कॅन करत आहे...</translation>
-<translation id="2268130516524549846">Bluetooth अक्षम</translation>
+<translation id="2268130516524549846">ब्लूटूथ अक्षम</translation>
 <translation id="2268813581635650749">सर्व साइन आउट करा</translation>
 <translation id="2292698582925480719">स्केल दाखवा</translation>
 <translation id="2303600792989757991">विंडो विहंगावलोकन टॉगल करा</translation>
-<translation id="2338501278241028356">जवळपासचे डिव्हाइस शोधण्यासाठी ब्लुटूथ चालू करा</translation>
+<translation id="2338501278241028356">जवळपासचे डिव्हाइस शोधण्यासाठी ब्लूटूथ सुरू करा</translation>
 <translation id="2339073806695260576">नोट व स्क्रीनशॉट घेण्यासाठी, तसेच लेझर पॉइंटर किंवा भिंग वापरण्यासाठी शेल्फवरील स्टायलस बटणावर टॅप करा.</translation>
 <translation id="2341729377289034582">उभ्या दिशेने लॉक केले</translation>
 <translation id="2352467521400612932">लेखणी सेटिंग्ज</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> सक्रिय करत आहे</translation>
 <translation id="2359808026110333948">सुरू ठेवा</translation>
-<translation id="2365393535144473978">मोबाइल डेटा चालू केल्याने ब्लूटूथ चालू होईल.</translation>
+<translation id="2365393535144473978">मोबाइल डेटा सुरू केल्याने ब्लूटूथ सुरू होईल.</translation>
 <translation id="2391579633712104609">180°</translation>
 <translation id="239188844683466770">व्यत्यय आणू नका टॉगल करा</translation>
 <translation id="2412593942846481727">अपडेट उपलब्ध आहे</translation>
 <translation id="2416346634399901812"><ph name="NETWORK_NAME" /> शी कनेक्ट केले</translation>
-<translation id="2429753432712299108">"<ph name="DEVICE_NAME" />" Bluetooth डिव्हाइस जोडण्यासाठी परवानगी घेऊ इच्छिते. स्वीकार करण्यापूर्वी, कृपया त्या डिव्हाइसवर ही पासकी दर्शविली असल्याची पुष्टी करा: <ph name="PASSKEY" /></translation>
+<translation id="2429753432712299108">"<ph name="DEVICE_NAME" />" ब्लूटूथ डिव्हाइस पेअरिंगसाठी परवानगी घेऊ इच्छिते. स्वीकार करण्यापूर्वी, कृपया त्या डिव्हाइसवर ही पासकी दाखवली असल्याची पुष्टी करा: <ph name="PASSKEY" /></translation>
 <translation id="2482878487686419369">सूचना</translation>
 <translation id="2484513351006226581">कीबोर्डचा लेआउट स्विच करण्यासाठी <ph name="KEYBOARD_SHORTCUT" /> दाबा.</translation>
 <translation id="2501920221385095727">स्टिकी की</translation>
@@ -136,9 +136,9 @@
 <translation id="3077734595579995578">shift</translation>
 <translation id="3081696990447829002">मेनूचा विस्तार करा</translation>
 <translation id="3087734570205094154">तळाकडील</translation>
-<translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation>
+<translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (ब्लूटूथ)</translation>
 <translation id="3124698051292518391">नेहमी शेल्फ दाखवा</translation>
-<translation id="3126069444801937830">अद्यतनासाठी पुनर्प्रारंभ करा</translation>
+<translation id="3126069444801937830">अपडेट करण्यासाठी रीस्टार्ट करा</translation>
 <translation id="3147142846278915599">लाँचर (संकालन अॅप्स...)</translation>
 <translation id="315116470104423982">मोबाइल डेटा</translation>
 <translation id="3151786313568798007">अभिमुखता</translation>
@@ -162,7 +162,7 @@
 <translation id="3513798432020909783">खाते <ph name="MANAGER_EMAIL" /> ने व्‍यवस्‍थापित केले आहे</translation>
 <translation id="3573179567135747900">"<ph name="FROM_LOCALE" />" मध्ये परत बदला (रीस्टार्ट करणे आवश्यक)</translation>
 <translation id="3595596368722241419">बॅटरी पूर्ण चार्ज</translation>
-<translation id="3606978283550408104">ब्रेल प्रदर्शन कनेक्ट केले.</translation>
+<translation id="3606978283550408104">ब्रेल डिस्प्ले कनेक्ट केला.</translation>
 <translation id="3621202678540785336">इनपुट</translation>
 <translation id="3626281679859535460">ब्राइटनेस</translation>
 <translation id="3631369015426612114">यांना सूचना पाठवू द्या</translation>
@@ -210,7 +210,7 @@
 <translation id="4481530544597605423">जोडणी वेगळी केलेली डिव्हाइस</translation>
 <translation id="4508225577814909926"><ph name="NAME" />: कनेक्ट करत आहे...</translation>
 <translation id="4513946894732546136">अभिप्राय</translation>
-<translation id="4527045527269911712">"<ph name="DEVICE_NAME" />" Bluetooth डिव्हाइस जोडण्यासाठी परवानगी घेऊ इच्छिते.</translation>
+<translation id="4527045527269911712">"<ph name="DEVICE_NAME" />" ब्लूटूथ डिव्हाइस पेअरिंगसाठी परवानगी घेऊ इच्छिते.</translation>
 <translation id="453661520163887813">पूर्ण होण्यात <ph name="TIME" /></translation>
 <translation id="4544944664594876241">स्क्रीन लॉक करण्‍याचा शॉर्टकट बदलला आहे. कृपया <ph name="OLD_SHORTCUT" /> ऐवजी <ph name="NEW_SHORTCUT" /> वापरा.</translation>
 <translation id="4564869809620998694">फॉन्ट सेवा</translation>
@@ -240,7 +240,7 @@
 <translation id="5207949376430453814">मजकूर कॅरेट हायलाइट करा</translation>
 <translation id="5222676887888702881">साइन आउट करा</translation>
 <translation id="523505283826916779">प्रवेशयोग्यता सेटिंग्ज</translation>
-<translation id="5313326810920013265">Bluetooth सेटिंग्ज</translation>
+<translation id="5313326810920013265">ब्लूटूथ सेटिंग्ज</translation>
 <translation id="5331975486040154427">USB-C डिव्‍हाइस (डाव्या बाजूचे मागील पोर्ट)</translation>
 <translation id="5379115545237091094">खूप जास्त प्रयत्न</translation>
 <translation id="5397578532367286026">या वापरकर्त्याच्या वापर आणि इतिहासाचे chrome.com वरील व्यवस्थापकाद्वारे (<ph name="MANAGER_EMAIL" />) पुनरावलोकन केले जाऊ शकते.</translation>
@@ -254,10 +254,10 @@
 <translation id="5537725057119320332">कास्ट करा</translation>
 <translation id="5548285847212963613">या नेटवर्कवर कनेक्ट करण्यात "<ph name="EXTENSION_NAME" />" विस्तार मदत करू शकतो.</translation>
 <translation id="554893713779400387">डिक्टेशन टॉगल करा</translation>
-<translation id="5571066253365925590">Bluetooth सक्षम</translation>
+<translation id="5571066253365925590">ब्लूटूथ सक्षम</translation>
 <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation>
 <translation id="5598551463564921617">Better Together सुरू आहे</translation>
-<translation id="5600837773213129531">बोलता अभिप्राय देणे बंद करण्यासाठी Ctrl + Alt + Z दाबा.</translation>
+<translation id="5600837773213129531">वाचिक फीडबॅक देणे बंद करण्यासाठी Ctrl + Alt + Z दाबा.</translation>
 <translation id="5648021990716966815">माइक जॅक</translation>
 <translation id="5669267381087807207">सक्रिय करीत आहे </translation>
 <translation id="5673434351075758678">तुमच्या सेटिंग्ज सिंक केल्यानंतर "<ph name="FROM_LOCALE" />" पासून "<ph name="TO_LOCALE" />" पर्यंत.</translation>
@@ -293,7 +293,7 @@
 <translation id="6047696787498798094">आपण दुसर्‍या वापरकर्त्यावर स्‍विच करता तेव्‍हा स्क्रीन सामायिकरण थांबेल. आपण सुरु ठेवू इच्छिता?</translation>
 <translation id="6062360702481658777">आपल्याला <ph name="LOGOUT_TIME_LEFT" /> मधून स्वयंचलितपणे साइन आउट केले जाईल.</translation>
 <translation id="6064337552080329342">सॉरी, तुमच्या पासवर्डची पडताळणी होऊ शकत नाही. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
-<translation id="607652042414456612">आपला कॉंप्युटर जवळपासच्या Bluetooth डिव्हाइसेसवर शोधण्यायोग्य आहे आणि <ph name="ADDRESS" /> पत्त्यासह "<ph name="NAME" />" म्हणून दिसेल</translation>
+<translation id="607652042414456612">तुमचा कॉंप्युटर जवळपासच्या ब्लूटूथ डिव्हाइसवर शोधता येऊ शकतो आणि <ph name="ADDRESS" /> पत्त्यासह "<ph name="NAME" />" म्हणून दिसेल</translation>
 <translation id="6106745654298855237"><ph name="POWER_SOURCE" /> चार्ज करीत आहे</translation>
 <translation id="615957422585914272">ऑन-स्‍क्रीन कीबोर्ड दर्शवा</translation>
 <translation id="6164005077879661055">एकदा हा पर्यवेक्षी वापरकर्ता काढल्यानंतर पर्यवेक्षी वापरकर्त्याशी संबद्ध सर्व फायली आणि स्थानिक डेटा कायमचा हटवला जाईल. या पर्यवेक्षी वापरकर्त्यासाठी भेट दिलेल्या वेबसाइट आणि सेटिंग्ज तरीही <ph name="MANAGEMENT_URL" /> वर व्यवस्थापकाद्वारे दृश्यमान असू शकतात.</translation>
@@ -323,12 +323,12 @@
 <translation id="6542521951477560771"><ph name="RECEIVER_NAME" /> वर कास्ट करत आहे</translation>
 <translation id="6585808820553845416"><ph name="SESSION_TIME_REMAINING" /> मध्ये सत्र समाप्त होते.</translation>
 <translation id="6627638273713273709">Search+Shift+K</translation>
-<translation id="6650933572246256093">"<ph name="DEVICE_NAME" />" Bluetooth डिव्हाइस जोडण्यासाठी परवानगी घेऊ इच्छिते. कृपया त्या डिव्हाइसवर ही पासकी एंटर करा: <ph name="PASSKEY" /></translation>
+<translation id="6650933572246256093">"<ph name="DEVICE_NAME" />" ब्लूटूथ डिव्हाइस पेअरिंगसाठी परवानगी घेऊ इच्छिते. कृपया त्या डिव्हाइसवर ही पासकी एंटर करा: <ph name="PASSKEY" /></translation>
 <translation id="6657585470893396449">पासवर्ड</translation>
 <translation id="6691659475504239918">Search+Shift+H</translation>
-<translation id="6696025732084565524">तुमच्या वेगळ्या करण्यायोग्य कीबोर्डला गंभीर अपडेटची आवश्यकता आहे</translation>
+<translation id="6696025732084565524">तुमच्या वेगळ्या करण्यायोग्य कीबोर्डला महत्त्वाच्या अपडेटची आवश्यकता आहे</translation>
 <translation id="6700713906295497288">IME मेनू बटण</translation>
-<translation id="6713285437468012787">"<ph name="DEVICE_NAME" />" Bluetooth डिव्हाइस जोडले गेले आहे आणि सर्व वापरकर्त्यांसाठी आता उपलब्ध आहे. आपण सेटिंग्ज वापरून ही जोडणी काढू शकता.</translation>
+<translation id="6713285437468012787">"<ph name="DEVICE_NAME" />" ब्लूटूथ डिव्हाइस जोडले गेले आहे आणि सर्व वापरकर्त्यांसाठी आता उपलब्ध आहे. तुम्ही सेटिंग्ज वापरून हे पेअरिंग काढू शकता.</translation>
 <translation id="6715542151869432661">कोणतेही मोबाइल डिव्हाइस आढळले नाहीत.</translation>
 <translation id="671928215901716392">लॉक स्क्रीन</translation>
 <translation id="6723839937902243910">सामर्थ्य</translation>
@@ -379,7 +379,7 @@
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (मालक)</translation>
 <translation id="7647488630410863958">आपल्या सूचना पाहण्यासाठी डिव्हाइस अनलॉक करा</translation>
 <translation id="7649070708921625228">मदत</translation>
-<translation id="7654687942625752712">बोललेला फीडबॅक बंद करण्यासाठी दोन्ही व्हॉल्युम की पाच सेकंदांसाठी दाबा आणि धरून ठेवा.</translation>
+<translation id="7654687942625752712">वाचिक फीडबॅक बंद करण्यासाठी दोन्ही व्हॉल्युम की पाच सेकंदांसाठी दाबा आणि धरून ठेवा.</translation>
 <translation id="7658239707568436148">रद्द करा</translation>
 <translation id="7692480393933218409">कनेक्ट केलेले USB-C डिव्‍हाइसेस चार्ज करीत आहे</translation>
 <translation id="7705524343798198388">VPN</translation>
@@ -426,7 +426,7 @@
 <translation id="8433186206711564395">नेटवर्क सेटिंग्ज</translation>
 <translation id="8433977262951327081">शेल्फमधील इनपुट पर्याय मेनू दर्शविण्यासाठीचा शॉर्टकट बदलला आहे. कृपया <ph name="OLD_SHORTCUT" /> ऐवजी <ph name="NEW_SHORTCUT" /> वापरा.</translation>
 <translation id="8452135315243592079">गहाळ सिम कार्ड</translation>
-<translation id="8454013096329229812">वाय-फाय चालू आहे.</translation>
+<translation id="8454013096329229812">वाय-फाय सुरू आहे.</translation>
 <translation id="847056008324733326">स्केल सेटिंग्‍ज दाखवा</translation>
 <translation id="8477270416194247200">रद्द करण्यासाठी Alt+Search किंवा Shift दाबा.</translation>
 <translation id="8484916590211895857"><ph name="NAME" />: पुन्हा कनेक्ट करीत आहे...</translation>
@@ -465,20 +465,20 @@
 <translation id="9029474291399787231">Adobe Flash Player अपडेट उपलब्ध आहे</translation>
 <translation id="9056839673611986238">डिव्हाइस रोल बॅक केले जाईल</translation>
 <translation id="9070640332319875144">असिस्टंट सेटिंग्ज</translation>
-<translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9074739597929991885">ब्लूटूथ</translation>
 <translation id="9079731690316798640">वाय-फाय: <ph name="ADDRESS" /></translation>
 <translation id="9080206825613744995">मायक्रोफोन वापरात आहे.</translation>
 <translation id="9089416786594320554">इनपुट पद्धती</translation>
-<translation id="9091626656156419976"><ph name="DISPLAY_NAME" /> प्रदर्शन काढले</translation>
+<translation id="9091626656156419976"><ph name="DISPLAY_NAME" /> डिस्प्ले काढले</translation>
 <translation id="9111102763498581341">अनलॉक करा</translation>
-<translation id="9151726767154816831">अद्यतनासाठी रीस्टार्ट करा आणि powerwash करा</translation>
+<translation id="9151726767154816831">अपडेटसाठी रीस्टार्ट करा आणि powerwash करा</translation>
 <translation id="9179259655489829027">हे वैशिष्ट्य तुम्हाला पासवर्ड शिवाय कोणत्याही साइन-इन केलेल्या वापरकर्त्यास जलदपणे अॅक्सेस करण्याची अनुमती देते. तुमचा विश्वास असलेल्या खात्यांसाठीच फक्त या वैशिष्ट्याचा वापर करा.</translation>
 <translation id="9193626018745640770">एका अज्ञात मिळवणाऱ्यावर कास्ट करत आहे</translation>
 <translation id="9194617393863864469">दुसरा वापरकर्ता साइन इन करा...</translation>
 <translation id="9201131092683066720">बॅटरी <ph name="PERCENTAGE" />% भरली आहे.</translation>
 <translation id="9210037371811586452">एकीकृत डेस्कटॉप मोड मधून बाहेर पडत आहे</translation>
 <translation id="9215934040295798075">वॉलपेपर सेट करा</translation>
-<translation id="923686485342484400">दोनदा साइन आउट करण्यासाठी Control Shift Q दोनदा दाबा.</translation>
+<translation id="923686485342484400">साइन आउट करण्यासाठी Control Shift Q दोनदा दाबा.</translation>
 <translation id="938963181863597773">माझ्या कॅलेंडरमधील इव्हेंट काय आहेत?</translation>
 <translation id="945522503751344254">अभिप्राय पाठवा</translation>
 <translation id="98515147261107953">लँडस्केप</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index c34d0689..bf722e1 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -180,7 +180,7 @@
 <translation id="385051799172605136">Voltar</translation>
 <translation id="3891340733213178823">Pressione Ctrl+Shift+Q duas vezes para sair.</translation>
 <translation id="3893630138897523026">ChromeVox (feedback falado)</translation>
-<translation id="3897533311200664389">Iniciar uma consulta de texto</translation>
+<translation id="3897533311200664389">Iniciar uma consulta por texto</translation>
 <translation id="3899995891769452915">Entrada de texto por voz</translation>
 <translation id="3900355044994618856">Sua sessão terminará em <ph name="SESSION_TIME_REMAINING" /></translation>
 <translation id="3901991538546252627">Conectando-se a <ph name="NAME" /></translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index b2283f3..4e210260 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -464,7 +464,7 @@
 <translation id="8995603266996330174">Hanteras av <ph name="DOMAIN" /></translation>
 <translation id="9029474291399787231">En uppdatering av Adobe Flash Player är tillgänglig</translation>
 <translation id="9056839673611986238">Enheten återställs</translation>
-<translation id="9070640332319875144">Inställningar för Assistent</translation>
+<translation id="9070640332319875144">Inställningar för Google-assistenten</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9079731690316798640">Wi-Fi: <ph name="ADDRESS" /></translation>
 <translation id="9080206825613744995">Mikrofonen används.</translation>
diff --git a/base/BUILD.gn b/base/BUILD.gn
index f474554b..788913c 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -197,6 +197,7 @@
     "compiler_specific.h",
     "component_export.h",
     "containers/adapters.h",
+    "containers/checked_iterators.h",
     "containers/circular_deque.h",
     "containers/flat_map.h",
     "containers/flat_set.h",
diff --git a/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java b/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java
index d1c4693..5336906b 100644
--- a/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java
+++ b/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java
@@ -702,4 +702,13 @@
         options.setLaunchDisplayId(displayId);
         return options.toBundle();
     }
+
+    /**
+     * @see View#setAccessibilityTraversalBefore(int)
+     */
+    public static void setAccessibilityTraversalBefore(View view, int viewFocusedAfter) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
+            view.setAccessibilityTraversalBefore(viewFocusedAfter);
+        }
+    }
 }
diff --git a/base/containers/checked_iterators.h b/base/containers/checked_iterators.h
new file mode 100644
index 0000000..ba1158c
--- /dev/null
+++ b/base/containers/checked_iterators.h
@@ -0,0 +1,276 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_CONTAINERS_CHECKED_ITERATORS_H_
+#define BASE_CONTAINERS_CHECKED_ITERATORS_H_
+
+#include <iterator>
+#include <memory>
+
+#include "base/logging.h"
+
+namespace base {
+
+template <typename T>
+class CheckedRandomAccessConstIterator;
+
+template <typename T>
+class CheckedRandomAccessIterator {
+ public:
+  using difference_type = std::ptrdiff_t;
+  using value_type = typename std::iterator_traits<T*>::value_type;
+  using pointer = T*;
+  using reference = T&;
+  using iterator_category = std::random_access_iterator_tag;
+
+  friend class CheckedRandomAccessConstIterator<T>;
+
+  CheckedRandomAccessIterator() = default;
+  CheckedRandomAccessIterator(T* start, const T* end)
+      : CheckedRandomAccessIterator(start, start, end) {}
+  CheckedRandomAccessIterator(T* start, T* current, const T* end)
+      : start_(start), current_(current), end_(end) {
+    CHECK(start <= current);
+    CHECK(current <= end);
+  }
+  CheckedRandomAccessIterator(const CheckedRandomAccessIterator& other) =
+      default;
+  ~CheckedRandomAccessIterator() = default;
+
+  CheckedRandomAccessIterator& operator=(
+      const CheckedRandomAccessIterator& other) = default;
+
+  bool operator==(const CheckedRandomAccessIterator& other) const {
+    CHECK_EQ(start_, other.start_);
+    CHECK_EQ(end_, other.end_);
+    return current_ == other.current_;
+  }
+
+  bool operator!=(const CheckedRandomAccessIterator& other) const {
+    CHECK_EQ(start_, other.start_);
+    CHECK_EQ(end_, other.end_);
+    return current_ != other.current_;
+  }
+
+  bool operator<(const CheckedRandomAccessIterator& other) const {
+    CHECK_EQ(start_, other.start_);
+    CHECK_EQ(end_, other.end_);
+    return current_ < other.current_;
+  }
+
+  CheckedRandomAccessIterator& operator++() {
+    CHECK(current_ != end_);
+    ++current_;
+    return *this;
+  }
+
+  CheckedRandomAccessIterator operator++(int) {
+    CheckedRandomAccessIterator old = *this;
+    ++*this;
+    return old;
+  }
+
+  CheckedRandomAccessIterator& operator--() {
+    CHECK(current_ != start_);
+    --current_;
+    return *this;
+  }
+
+  CheckedRandomAccessIterator& operator--(int) {
+    CheckedRandomAccessIterator old = *this;
+    --*this;
+    return old;
+  }
+
+  CheckedRandomAccessIterator& operator+=(difference_type rhs) {
+    if (rhs > 0) {
+      CHECK_LE(rhs, end_ - current_);
+    } else {
+      CHECK_LE(-rhs, current_ - start_);
+    }
+    current_ += rhs;
+    return *this;
+  }
+
+  CheckedRandomAccessIterator operator+(difference_type rhs) const {
+    CheckedRandomAccessIterator it = *this;
+    it += rhs;
+    return it;
+  }
+
+  CheckedRandomAccessIterator& operator-=(difference_type rhs) {
+    if (rhs < 0) {
+      CHECK_LE(rhs, end_ - current_);
+    } else {
+      CHECK_LE(-rhs, current_ - start_);
+    }
+    current_ -= rhs;
+    return *this;
+  }
+
+  CheckedRandomAccessIterator operator-(difference_type rhs) const {
+    CheckedRandomAccessIterator it = *this;
+    it -= rhs;
+    return it;
+  }
+
+  friend difference_type operator-(const CheckedRandomAccessIterator& lhs,
+                                   const CheckedRandomAccessIterator& rhs) {
+    CHECK(lhs.start_ == rhs.start_);
+    CHECK(lhs.end_ == rhs.end_);
+    return lhs.current_ - rhs.current_;
+  }
+
+  reference operator*() const {
+    CHECK(current_ != end_);
+    return *current_;
+  }
+
+  pointer operator->() const {
+    CHECK(current_ != end_);
+    return current_;
+  }
+
+ private:
+  const T* start_ = nullptr;
+  T* current_ = nullptr;
+  const T* end_ = nullptr;
+};
+
+template <typename T>
+class CheckedRandomAccessConstIterator {
+ public:
+  using difference_type = std::ptrdiff_t;
+  using value_type = typename std::iterator_traits<T*>::value_type;
+  using pointer = const T*;
+  using reference = const T&;
+  using iterator_category = std::random_access_iterator_tag;
+
+  CheckedRandomAccessConstIterator() = default;
+  CheckedRandomAccessConstIterator(T* start, const T* end)
+      : CheckedRandomAccessConstIterator(start, start, end) {}
+  CheckedRandomAccessConstIterator(T* start, T* current, const T* end)
+      : start_(start), current_(current), end_(end) {
+    CHECK(start <= current);
+    CHECK(current <= end);
+  }
+  CheckedRandomAccessConstIterator(
+      const CheckedRandomAccessConstIterator& other) = default;
+  CheckedRandomAccessConstIterator(const CheckedRandomAccessIterator<T>& other)
+      : start_(other.start_), current_(other.current_), end_(other.end_) {
+    // We explicitly don't delegate to the 3-argument constructor here. Its
+    // CHECKs would be redundant, since we expect |other| to maintain its own
+    // invariant. However, DCHECKs never hurt anybody. Presumably.
+    DCHECK(other.start_ <= other.current_);
+    DCHECK(other.current_ <= other.end_);
+  }
+  ~CheckedRandomAccessConstIterator() = default;
+
+  CheckedRandomAccessConstIterator& operator=(
+      const CheckedRandomAccessConstIterator& other) = default;
+
+  CheckedRandomAccessConstIterator& operator=(
+      CheckedRandomAccessConstIterator& other) = default;
+
+  bool operator==(const CheckedRandomAccessConstIterator& other) const {
+    CHECK_EQ(start_, other.start_);
+    CHECK_EQ(end_, other.end_);
+    return current_ == other.current_;
+  }
+
+  bool operator!=(const CheckedRandomAccessConstIterator& other) const {
+    CHECK_EQ(start_, other.start_);
+    CHECK_EQ(end_, other.end_);
+    return current_ != other.current_;
+  }
+
+  bool operator<(const CheckedRandomAccessConstIterator& other) const {
+    CHECK_EQ(start_, other.start_);
+    CHECK_EQ(end_, other.end_);
+    return current_ < other.current_;
+  }
+
+  CheckedRandomAccessConstIterator& operator++() {
+    CHECK(current_ != end_);
+    ++current_;
+    return *this;
+  }
+
+  CheckedRandomAccessConstIterator operator++(int) {
+    CheckedRandomAccessConstIterator old = *this;
+    ++*this;
+    return old;
+  }
+
+  CheckedRandomAccessConstIterator& operator--() {
+    CHECK(current_ != start_);
+    --current_;
+    return *this;
+  }
+
+  CheckedRandomAccessConstIterator& operator--(int) {
+    CheckedRandomAccessConstIterator old = *this;
+    --*this;
+    return old;
+  }
+
+  CheckedRandomAccessConstIterator& operator+=(difference_type rhs) {
+    if (rhs > 0) {
+      CHECK_LE(rhs, end_ - current_);
+    } else {
+      CHECK_LE(-rhs, current_ - start_);
+    }
+    current_ += rhs;
+    return *this;
+  }
+
+  CheckedRandomAccessConstIterator operator+(difference_type rhs) const {
+    CheckedRandomAccessConstIterator it = *this;
+    it += rhs;
+    return it;
+  }
+
+  CheckedRandomAccessConstIterator& operator-=(difference_type rhs) {
+    if (rhs < 0) {
+      CHECK_LE(rhs, end_ - current_);
+    } else {
+      CHECK_LE(-rhs, current_ - start_);
+    }
+    current_ -= rhs;
+    return *this;
+  }
+
+  CheckedRandomAccessConstIterator operator-(difference_type rhs) const {
+    CheckedRandomAccessConstIterator it = *this;
+    it -= rhs;
+    return it;
+  }
+
+  friend difference_type operator-(
+      const CheckedRandomAccessConstIterator& lhs,
+      const CheckedRandomAccessConstIterator& rhs) {
+    CHECK(lhs.start_ == rhs.start_);
+    CHECK(lhs.end_ == rhs.end_);
+    return lhs.current_ - rhs.current_;
+  }
+
+  reference operator*() const {
+    CHECK(current_ != end_);
+    return *current_;
+  }
+
+  pointer operator->() const {
+    CHECK(current_ != end_);
+    return current_;
+  }
+
+ private:
+  const T* start_ = nullptr;
+  const T* current_ = nullptr;
+  const T* end_ = nullptr;
+};
+
+}  // namespace base
+
+#endif  // BASE_CONTAINERS_CHECKED_ITERATORS_H_
diff --git a/base/containers/span.h b/base/containers/span.h
index 2f01162..f3cdd2f7 100644
--- a/base/containers/span.h
+++ b/base/containers/span.h
@@ -13,6 +13,7 @@
 #include <type_traits>
 #include <utility>
 
+#include "base/containers/checked_iterators.h"
 #include "base/logging.h"
 #include "base/stl_util.h"
 
@@ -221,8 +222,8 @@
   using difference_type = ptrdiff_t;
   using pointer = T*;
   using reference = T&;
-  using iterator = T*;
-  using const_iterator = const T*;
+  using iterator = CheckedRandomAccessIterator<T>;
+  using const_iterator = CheckedRandomAccessConstIterator<T>;
   using reverse_iterator = std::reverse_iterator<iterator>;
   using const_reverse_iterator = std::reverse_iterator<const_iterator>;
   static constexpr index_type extent = Extent;
@@ -392,8 +393,10 @@
   constexpr T* data() const noexcept { return data_; }
 
   // [span.iter], span iterator support
-  constexpr iterator begin() const noexcept { return data(); }
-  constexpr iterator end() const noexcept { return data() + size(); }
+  iterator begin() const noexcept { return iterator(data_, data_ + size()); }
+  iterator end() const noexcept {
+    return iterator(data_, data_ + size(), data_ + size());
+  }
 
   constexpr const_iterator cbegin() const noexcept { return begin(); }
   constexpr const_iterator cend() const noexcept { return end(); }
diff --git a/base/containers/span_unittest.cc b/base/containers/span_unittest.cc
index d9499fd..ae73954 100644
--- a/base/containers/span_unittest.cc
+++ b/base/containers/span_unittest.cc
@@ -236,6 +236,8 @@
 
   span<int> int_span(vector.data(), vector.size());
   span<const int> const_span(int_span);
+  EXPECT_EQ(int_span.size(), const_span.size());
+
   EXPECT_THAT(const_span, Pointwise(Eq(), int_span));
 
   span<int, 6> static_int_span(vector.data(), vector.size());
diff --git a/base/memory/platform_shared_memory_region_win.cc b/base/memory/platform_shared_memory_region_win.cc
index efc9dc7..5eec9c7 100644
--- a/base/memory/platform_shared_memory_region_win.cc
+++ b/base/memory/platform_shared_memory_region_win.cc
@@ -16,6 +16,7 @@
 #include "base/process/process_handle.h"
 #include "base/rand_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/win/windows_version.h"
 
 namespace base {
 namespace subtle {
@@ -300,19 +301,24 @@
     return {};
   }
 
-  // Windows ignores DACLs on unnamed shared section. Generate a random name in
-  // order to be able to enforce read-only.
-  uint64_t rand_values[4];
-  RandBytes(&rand_values, sizeof(rand_values));
-  string16 name =
-      StringPrintf(L"CrSharedMem_%016llx%016llx%016llx%016llx", rand_values[0],
-                   rand_values[1], rand_values[2], rand_values[3]);
+  string16 name;
+  if (base::win::GetVersion() < base::win::VERSION_WIN8_1) {
+    // Windows < 8.1 ignores DACLs on certain unnamed objects (like shared
+    // sections). So, we generate a random name when we need to enforce
+    // read-only.
+    uint64_t rand_values[4];
+    RandBytes(&rand_values, sizeof(rand_values));
+    name = StringPrintf(L"CrSharedMem_%016llx%016llx%016llx%016llx",
+                        rand_values[0], rand_values[1], rand_values[2],
+                        rand_values[3]);
+    DCHECK(!name.empty());
+  }
 
   SECURITY_ATTRIBUTES sa = {sizeof(sa), &sd, FALSE};
   // Ask for the file mapping with reduced permisions to avoid passing the
   // access control permissions granted by default into unpriviledged process.
-  HANDLE h =
-      CreateFileMappingWithReducedPermissions(&sa, rounded_size, name.c_str());
+  HANDLE h = CreateFileMappingWithReducedPermissions(
+      &sa, rounded_size, name.empty() ? nullptr : name.c_str());
   if (h == nullptr) {
     // The error is logged within CreateFileMappingWithReducedPermissions().
     return {};
diff --git a/base/values.cc b/base/values.cc
index cab1fed..b2892e4 100644
--- a/base/values.cc
+++ b/base/values.cc
@@ -374,12 +374,12 @@
 }
 
 Value* Value::SetPath(span<const StringPiece> path, Value value) {
-  DCHECK_NE(path.begin(), path.end());  // Can't be empty path.
+  DCHECK(path.begin() != path.end());  // Can't be empty path.
 
   // Walk/construct intermediate dictionaries. The last element requires
   // special handling so skip it in this loop.
   Value* cur = this;
-  const StringPiece* cur_path = path.begin();
+  auto cur_path = path.begin();
   for (; (cur_path + 1) < path.end(); ++cur_path) {
     if (!cur->is_dict())
       return nullptr;
diff --git a/build/android/gyp/compile_resources.py b/build/android/gyp/compile_resources.py
index cda03e60..56785946 100755
--- a/build/android/gyp/compile_resources.py
+++ b/build/android/gyp/compile_resources.py
@@ -303,7 +303,7 @@
     '-o', options.apk_path,
   ]
 
-  for j in options.android_sdk_jars:
+  for j in options.include_resources:
     link_command += ['-I', j]
   if options.proguard_file:
     link_command += ['--proguard', options.proguard_file]
@@ -375,16 +375,19 @@
     except build_utils.CalledProcessError:
       return None
 
-  extract_all = [maybe_extract_version(j) for j in options.android_sdk_jars]
+  android_sdk_jars = [j for j in options.include_resources
+                      if os.path.basename(j) in ('android.jar',
+                                                 'android_system.jar')]
+  extract_all = [maybe_extract_version(j) for j in android_sdk_jars]
   successful_extractions = [x for x in extract_all if x]
   if len(successful_extractions) == 0:
     raise Exception(
         'Unable to find android SDK jar among candidates: %s'
-            % ', '.join(options.android_sdk_jars))
+            % ', '.join(android_sdk_jars))
   elif len(successful_extractions) > 1:
     raise Exception(
         'Found multiple android SDK jars among candidates: %s'
-            % ', '.join(options.android_sdk_jars))
+            % ', '.join(android_sdk_jars))
   version_code, version_name = successful_extractions.pop()
 
   # ElementTree.find does not work if the required tag is the root.
@@ -657,7 +660,7 @@
     options.android_manifest,
     options.shared_resources_whitelist,
   ]
-  possible_input_paths += options.android_sdk_jars
+  possible_input_paths += options.include_resources
   input_paths = [x for x in possible_input_paths if x]
   input_paths.extend(options.dependencies_res_zips)
   input_paths.extend(options.extra_r_text_files)
diff --git a/build/android/gyp/prepare_resources.py b/build/android/gyp/prepare_resources.py
index ae7f53d0..e1236e18 100755
--- a/build/android/gyp/prepare_resources.py
+++ b/build/android/gyp/prepare_resources.py
@@ -140,7 +140,7 @@
                      '--auto-add-overlay',
                      '--no-version-vectors',
                     ]
-  for j in options.android_sdk_jars:
+  for j in options.include_resources:
     package_command += ['-I', j]
 
   package_command += [
@@ -268,7 +268,7 @@
     options.aapt_path,
     options.android_manifest,
   ]
-  possible_input_paths += options.android_sdk_jars
+  possible_input_paths += options.include_resources
   input_paths = [x for x in possible_input_paths if x]
   input_paths.extend(options.dependencies_res_zips)
   input_paths.extend(options.extra_r_text_files)
diff --git a/build/android/gyp/util/resource_utils.py b/build/android/gyp/util/resource_utils.py
index 875fd126..73ab0853 100644
--- a/build/android/gyp/util/resource_utils.py
+++ b/build/android/gyp/util/resource_utils.py
@@ -449,8 +449,9 @@
 
   build_utils.AddDepfileOption(output_opts)
 
-  input_opts.add_argument('--android-sdk-jars', required=True,
-                        help='Path to the android.jar file.')
+  input_opts.add_argument('--include-resources', required=True, action="append",
+                        help='Paths to arsc resource files used to link '
+                             'against. Can be specified multiple times.')
 
   input_opts.add_argument('--aapt-path', required=True,
                          help='Path to the Android aapt tool')
@@ -489,7 +490,11 @@
     options: the result of parse_args() on the parser returned by
         ResourceArgsParser(). This function updates a few common fields.
   """
-  options.android_sdk_jars = build_utils.ParseGnList(options.android_sdk_jars)
+  options.include_resources = [build_utils.ParseGnList(r) for r in
+                               options.include_resources]
+  # Flatten list of include resources list to make it easier to use.
+  options.include_resources = [r for resources in options.include_resources
+                               for r in resources]
 
   options.dependencies_res_zips = (
       build_utils.ParseGnList(options.dependencies_res_zips))
diff --git a/build/chromeos/run_vm_test.py b/build/chromeos/run_vm_test.py
index f13faa4b..12e5a26 100755
--- a/build/chromeos/run_vm_test.py
+++ b/build/chromeos/run_vm_test.py
@@ -168,16 +168,6 @@
     # Build the shell script that will be used on the VM to invoke the test.
     vm_test_script_contents = ['#!/bin/sh']
 
-    # Clear out directories that persist logs and crash dumps. These can
-    # accumulate over a VM's lifetime and consume disk space.
-    # TODO(crbug.com/878526): Remove this once cros_run_vm_test handles it.
-    vm_test_script_contents += [
-        # We run tests as chronos, but need to be root to rm the files. So pass
-        # in the public plaintext root password to sudo via stdin.
-        'echo "test0000" | sudo -S find /var/spool/crash/ -type f -delete',
-        'echo "test0000" | sudo -S find /var/log/chrome/ -type f -delete',
-    ]
-
     # /home is mounted with "noexec" in the VM, but some of our tools
     # and tests use the home dir as a workspace (eg: vpython downloads
     # python binaries to ~/.vpython-root). /tmp doesn't have this
@@ -207,10 +197,27 @@
       test_invocation += ' --test-launcher-summary-output=%s' % vm_result_file
     if self._additional_args:
       test_invocation += ' %s' % ' '.join(self._additional_args)
-    vm_test_script_contents.append(test_invocation)
+    vm_test_script_contents += [
+        test_invocation,
+        'test_retcode=$?',
+    ]
+
+    # Clear out directories that persist logs and crash dumps. These can
+    # accumulate over a VM's lifetime and consume disk space, so remove any
+    # that the test generated.
+    # TODO(crbug.com/878526): Remove this once cros_run_vm_test handles it.
+    vm_test_script_contents += [
+        # We run tests as chronos, but need to be root to rm the files. So pass
+        # in the public plaintext root password to sudo via stdin.
+        'echo "test0000" | sudo -S find /var/spool/crash/ -type f -delete',
+        'echo "test0000" | sudo -S find /var/log/chrome/ -type f -delete',
+        # Make sure the exit code is that of the test, and not the post-test
+        # cleanup.
+        'exit $test_retcode',
+    ]
 
     logging.info('Running the following command in the VM:')
-    logging.info('\n'.join(vm_test_script_contents))
+    logging.info('\n' + '\n'.join(vm_test_script_contents))
     fd, tmp_path = tempfile.mkstemp(suffix='.sh', dir=self._path_to_outdir)
     os.fchmod(fd, 0755)
     with os.fdopen(fd, 'wb') as f:
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index 46c6dae..da01fd6 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -1588,7 +1588,7 @@
       args = [
         "--depfile",
         rebase_path(depfile, root_build_dir),
-        "--android-sdk-jars=@FileArg($_rebased_build_config:android:sdk_jars)",
+        "--include-resources=@FileArg($_rebased_build_config:android:sdk_jars)",
         "--aapt-path",
         rebase_path(_android_aapt_path, root_build_dir),
         "--dependencies-res-zips=@FileArg($_rebased_build_config:resources:dependency_zips)",
@@ -1795,7 +1795,7 @@
       args = [
         "--depfile",
         rebase_path(depfile, root_build_dir),
-        "--android-sdk-jars=@FileArg($_rebased_build_config:android:sdk_jars)",
+        "--include-resources=@FileArg($_rebased_build_config:android:sdk_jars)",
         "--aapt-path",
         rebase_path(_android_aapt_path, root_build_dir),
         "--dependencies-res-zips=@FileArg($_rebased_build_config:resources:dependency_zips)",
@@ -1952,6 +1952,12 @@
         args += [ "--support-zh-hk" ]
       }
 
+      if (defined(invoker.include_resource)) {
+        _rebased_include_resources =
+            rebase_path(invoker.include_resource, root_build_dir)
+        args += [ "--include-resources=$_rebased_include_resources" ]
+      }
+
       if (defined(invoker.args)) {
         args += invoker.args
       }
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index 25a320d..47a6f359 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -1919,6 +1919,7 @@
 
     _is_bundle_module =
         defined(invoker.is_bundle_module) && invoker.is_bundle_module
+    _is_base_module = defined(invoker.is_base_module) && invoker.is_base_module
 
     _enable_multidex =
         defined(invoker.enable_multidex) && invoker.enable_multidex
@@ -2135,6 +2136,12 @@
       _deps += [ invoker.product_version_resources_dep ]
     }
 
+    if (defined(invoker.alternative_android_sdk_dep)) {
+      _android_sdk_dep = invoker.alternative_android_sdk_dep
+    } else {
+      _android_sdk_dep = "//third_party/android_tools:android_sdk_java"
+    }
+
     _compile_resources_target = "${_template_name}__compile_resources"
     compile_resources(_compile_resources_target) {
       forward_variables_from(invoker,
@@ -2161,21 +2168,24 @@
       if (_enable_multidex) {
         proguard_file_main_dex = _generated_proguard_main_dex_config
       }
-      if (_is_bundle_module) {
-        proto_format = true
-      }
       output = _packaged_resources_path
 
       build_config = _build_config
       deps = _deps + [
                ":$_merge_manifest_target",
                ":$_build_config_target",
+               _android_sdk_dep,
              ]
-      if (defined(invoker.alternative_android_sdk_dep)) {
-        deps += [ invoker.alternative_android_sdk_dep ]
-      } else {
-        deps += [ "//third_party/android_tools:android_sdk_java" ]
+
+      if (_is_bundle_module) {
+        proto_format = true
+        if (defined(invoker.base_module_arsc_resource_target)) {
+          assert(defined(invoker.base_module_arsc_resource))
+          include_resource = "${invoker.base_module_arsc_resource}"
+          deps += [ invoker.base_module_arsc_resource_target ]
+        }
       }
+
       if (defined(invoker.shared_resources_whitelist_target)) {
         _whitelist_gen_dir =
             get_label_info(invoker.shared_resources_whitelist_target,
@@ -2190,6 +2200,39 @@
         ]
       }
     }
+
+    if (_is_base_module && _is_bundle_module) {
+      # Bundle modules have to reference resources from the base module.
+      # However, to compile the bundle module's resources we have to give it an
+      # arsc resource to link against (aapt2 fails with proto resources). Thus,
+      # add an arsc resource compilation step to make the bundle module's link
+      # step work.
+      compile_resources("${_template_name}__compile_arsc_resources") {
+        forward_variables_from(invoker,
+                               [
+                                 "support_zh_hk",
+                                 "aapt_locale_whitelist",
+                                 "exclude_xxxhdpi",
+                                 "png_to_webp",
+                                 "xxxhdpi_whitelist",
+                                 "no_xml_namespaces",
+                               ])
+        android_manifest = _android_manifest
+        version_code = _version_code
+        version_name = _version_name
+
+        proto_format = false
+        output = "$target_gen_dir/$_template_name.arsc.ap_"
+
+        build_config = _build_config
+        deps = _deps + [
+                 ":$_merge_manifest_target",
+                 ":$_build_config_target",
+                 _android_sdk_dep,
+               ]
+      }
+    }
+
     _srcjar_deps += [ ":$_compile_resources_target" ]
 
     if (_native_libs_deps != []) {
@@ -2878,19 +2921,33 @@
   #   module_name: Name of the module.
   #   is_base_module: If defined and true, indicates that this is the bundle's
   #     base module (optional).
+  #   base_module_target: Base module target of the bundle this module will be
+  #     added to (optional). Can only be specified for non-base modules.
   template("android_app_bundle_module") {
     _is_base_module = defined(invoker.is_base_module) && invoker.is_base_module
 
-    if (!_is_base_module) {
-      assert(!defined(write_asset_list))
-      assert(!defined(firebase_app_id))
-      assert(!defined(app_as_shared_lib))
-      assert(!defined(shared_resources))
-      assert(!defined(shared_resources_whitelist_target))
-      assert(!defined(build_hooks_android_impl_deps))
-      assert(!defined(shared_libraries))
+    if (_is_base_module) {
+      assert(!defined(invoker.base_module_target))
+    } else {
+      assert(!defined(invoker.write_asset_list))
+      assert(!defined(invoker.firebase_app_id))
+      assert(!defined(invoker.app_as_shared_lib))
+      assert(!defined(invoker.shared_resources))
+      assert(!defined(invoker.shared_resources_whitelist_target))
+      assert(!defined(invoker.build_hooks_android_impl_deps))
+      assert(!defined(invoker.shared_libraries))
+      assert(defined(invoker.base_module_target))
     }
 
+    # TODO(tiborg): We have several flags that are necessary for workarounds
+    # that come from the fact that the resources get compiled in the bundle
+    # module target, but bundle modules have to have certain flags in
+    # common or bundle modules have to know information about the base module.
+    # Those flags include version_code, version_name,
+    # base_module_arsc_resource and base_module_arsc_resource_target. It would
+    # be better to move the resource compile target into the bundle target. By
+    # doing so we can keep the bundle modules independent from the bundle and
+    # potentially reuse the same bundle modules for multiple bundles.
     android_apk_or_module(target_name) {
       forward_variables_from(invoker,
                              [
@@ -2900,6 +2957,8 @@
                                "android_manifest",
                                "android_manifest_dep",
                                "app_as_shared_lib",
+                               "base_module_arsc_resource",
+                               "base_module_arsc_resource_target",
                                "chromium_code",
                                "classpath_deps",
                                "data",
@@ -2911,6 +2970,7 @@
                                "exclude_xxxhdpi",
                                "firebase_app_id",
                                "input_jars_paths",
+                               "is_base_module",
                                "java_files",
                                "javac_args",
                                "load_library_from_apk",
@@ -2948,6 +3008,16 @@
       if (defined(invoker.module_name)) {
         name = invoker.module_name
       }
+      if (defined(invoker.base_module_target)) {
+        _base_module_target = invoker.base_module_target
+        _base_module_target_gen_dir =
+            get_label_info(_base_module_target, "target_gen_dir")
+        _base_module_target_name = get_label_info(_base_module_target, "name")
+        base_module_arsc_resource =
+            "$_base_module_target_gen_dir/$_base_module_target_name.arsc.ap_"
+        base_module_arsc_resource_target =
+            "${_base_module_target}__compile_arsc_resources"
+      }
     }
   }
 
diff --git a/build/config/fuchsia/build_manifest.py b/build/config/fuchsia/build_manifest.py
index 0ef175d..f5129d48 100644
--- a/build/config/fuchsia/build_manifest.py
+++ b/build/config/fuchsia/build_manifest.py
@@ -197,7 +197,6 @@
       in_package_path = MakePackagePath(os.path.join(out_dir, current_file),
                                         [gen_dir, root_dir, out_dir])
       if in_package_path == app_filename:
-        in_package_path = 'bin/app'
         app_found = True
 
       # The source path is relativized so that it can be used on multiple
@@ -220,7 +219,7 @@
     with open(os.path.join(os.path.dirname(output_path),
                            app_name + '.cmx'), 'w') as component_manifest_file:
       component_manifest = {
-          'program': { 'binary': 'bin/app' },
+          'program': { 'binary': app_filename },
           'sandbox': json.load(open(sandbox_policy_path, 'r')),
       }
       json.dump(component_manifest, component_manifest_file)
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index ed918b5a..2e32fef 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-67b3be457e9c7eadbf520f8b5ac7ddf14b0099c4
\ No newline at end of file
+da3570aa52f2202d28e56910a0766acee0b68e75
\ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index 93cb4e4..86a07d9 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-547ec104560d59cecaeaac6b3be268dff4482ee0
\ No newline at end of file
+c52f17eadc6cdb14e6342a0460843293421c5f7f
\ No newline at end of file
diff --git a/build/secondary/third_party/android_tools/apk_proguard.flags b/build/secondary/third_party/android_tools/apk_proguard.flags
deleted file mode 100644
index 953e8b99..0000000
--- a/build/secondary/third_party/android_tools/apk_proguard.flags
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Keep all Parcelables, since Play Services has some that are used only by
-# reflection.
-# TODO(agrieve): Remove this once proguard flags provided by play services via
-#     .aars are used.  https://crbug.com/640836
--keep class * implements android.os.Parcelable
-
diff --git a/build/secondary/third_party/android_tools/google_play_services_auth_api_phone_java.info b/build/secondary/third_party/android_tools/google_play_services_auth_api_phone_java.info
deleted file mode 100644
index a2ebd4a..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_auth_api_phone_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = false
-has_r_text_file = false
-is_manifest_empty = true
-resources = [  ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_auth_base_java.info b/build/secondary/third_party/android_tools/google_play_services_auth_base_java.info
deleted file mode 100644
index a2ebd4a..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_auth_base_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = false
-has_r_text_file = false
-is_manifest_empty = true
-resources = [  ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_auth_java.info b/build/secondary/third_party/android_tools/google_play_services_auth_java.info
deleted file mode 100644
index 5c44fcb..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_auth_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = false
-has_r_text_file = false
-is_manifest_empty = false
-resources = [ "res/drawable-watch-v20/common_google_signin_btn_text_dark_normal.xml", "res/drawable-watch-v20/common_google_signin_btn_text_disabled.xml", "res/drawable-watch-v20/common_google_signin_btn_text_light_normal.xml", "res/values-watch-v20/values.xml" ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_base_java.info b/build/secondary/third_party/android_tools/google_play_services_base_java.info
deleted file mode 100644
index b85a72d..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_base_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = true
-has_r_text_file = false
-is_manifest_empty = false
-resources = [ "res/color/common_google_signin_btn_text_dark.xml", "res/color/common_google_signin_btn_text_light.xml", "res/color/common_google_signin_btn_tint.xml", "res/drawable-hdpi-v4/common_full_open_on_phone.png", "res/drawable-hdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png", "res/drawable-hdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png", "res/drawable-hdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png", "res/drawable-hdpi-v4/common_google_signin_btn_text_light_normal_background.9.png", "res/drawable-hdpi-v4/googleg_disabled_color_18.png", "res/drawable-hdpi-v4/googleg_standard_color_18.png", "res/drawable-mdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png", "res/drawable-mdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png", "res/drawable-mdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png", "res/drawable-mdpi-v4/common_google_signin_btn_text_light_normal_background.9.png", "res/drawable-mdpi-v4/googleg_disabled_color_18.png", "res/drawable-mdpi-v4/googleg_standard_color_18.png", "res/drawable-xhdpi-v4/common_full_open_on_phone.png", "res/drawable-xhdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png", "res/drawable-xhdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png", "res/drawable-xhdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png", "res/drawable-xhdpi-v4/common_google_signin_btn_text_light_normal_background.9.png", "res/drawable-xhdpi-v4/googleg_disabled_color_18.png", "res/drawable-xhdpi-v4/googleg_standard_color_18.png", "res/drawable-xxhdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png", "res/drawable-xxhdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png", "res/drawable-xxhdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png", "res/drawable-xxhdpi-v4/common_google_signin_btn_text_light_normal_background.9.png", "res/drawable-xxhdpi-v4/googleg_disabled_color_18.png", "res/drawable-xxhdpi-v4/googleg_standard_color_18.png", "res/drawable/common_google_signin_btn_icon_dark.xml", "res/drawable/common_google_signin_btn_icon_dark_focused.xml", "res/drawable/common_google_signin_btn_icon_dark_normal.xml", "res/drawable/common_google_signin_btn_icon_disabled.xml", "res/drawable/common_google_signin_btn_icon_light.xml", "res/drawable/common_google_signin_btn_icon_light_focused.xml", "res/drawable/common_google_signin_btn_icon_light_normal.xml", "res/drawable/common_google_signin_btn_text_dark.xml", "res/drawable/common_google_signin_btn_text_dark_focused.xml", "res/drawable/common_google_signin_btn_text_dark_normal.xml", "res/drawable/common_google_signin_btn_text_disabled.xml", "res/drawable/common_google_signin_btn_text_light.xml", "res/drawable/common_google_signin_btn_text_light_focused.xml", "res/drawable/common_google_signin_btn_text_light_normal.xml", "res/values-af/values.xml", "res/values-am/values.xml", "res/values-ar/values.xml", "res/values-az/values.xml", "res/values-b+sr+Latn/values.xml", "res/values-be/values.xml", "res/values-bg/values.xml", "res/values-bn/values.xml", "res/values-bs/values.xml", "res/values-ca/values.xml", "res/values-cs/values.xml", "res/values-da/values.xml", "res/values-de/values.xml", "res/values-el/values.xml", "res/values-en-rGB/values.xml", "res/values-es-rUS/values.xml", "res/values-es/values.xml", "res/values-et/values.xml", "res/values-eu/values.xml", "res/values-fa/values.xml", "res/values-fi/values.xml", "res/values-fr-rCA/values.xml", "res/values-fr/values.xml", "res/values-gl/values.xml", "res/values-gu/values.xml", "res/values-hi/values.xml", "res/values-hr/values.xml", "res/values-hu/values.xml", "res/values-hy/values.xml", "res/values-in/values.xml", "res/values-is/values.xml", "res/values-it/values.xml", "res/values-iw/values.xml", "res/values-ja/values.xml", "res/values-ka/values.xml", "res/values-kk/values.xml", "res/values-km/values.xml", "res/values-kn/values.xml", "res/values-ko/values.xml", "res/values-ky/values.xml", "res/values-lo/values.xml", "res/values-lt/values.xml", "res/values-lv/values.xml", "res/values-mk/values.xml", "res/values-ml/values.xml", "res/values-mn/values.xml", "res/values-mr/values.xml", "res/values-ms/values.xml", "res/values-my/values.xml", "res/values-nb/values.xml", "res/values-ne/values.xml", "res/values-nl/values.xml", "res/values-pa/values.xml", "res/values-pl/values.xml", "res/values-pt-rBR/values.xml", "res/values-pt-rPT/values.xml", "res/values-ro/values.xml", "res/values-ru/values.xml", "res/values-si/values.xml", "res/values-sk/values.xml", "res/values-sl/values.xml", "res/values-sq/values.xml", "res/values-sr/values.xml", "res/values-sv/values.xml", "res/values-sw/values.xml", "res/values-ta/values.xml", "res/values-te/values.xml", "res/values-th/values.xml", "res/values-tl/values.xml", "res/values-tr/values.xml", "res/values-uk/values.xml", "res/values-ur/values.xml", "res/values-uz/values.xml", "res/values-vi/values.xml", "res/values-zh-rCN/values.xml", "res/values-zh-rHK/values.xml", "res/values-zh-rTW/values.xml", "res/values-zu/values.xml", "res/values/values.xml" ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_basement_java.info b/build/secondary/third_party/android_tools/google_play_services_basement_java.info
deleted file mode 100644
index ac3ce23..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_basement_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = true
-has_r_text_file = true
-is_manifest_empty = false
-resources = [ "res/values-af/values.xml", "res/values-am/values.xml", "res/values-ar/values.xml", "res/values-az/values.xml", "res/values-b+sr+Latn/values.xml", "res/values-be/values.xml", "res/values-bg/values.xml", "res/values-bn/values.xml", "res/values-bs/values.xml", "res/values-ca/values.xml", "res/values-cs/values.xml", "res/values-da/values.xml", "res/values-de/values.xml", "res/values-el/values.xml", "res/values-en-rGB/values.xml", "res/values-es-rUS/values.xml", "res/values-es/values.xml", "res/values-et/values.xml", "res/values-eu/values.xml", "res/values-fa/values.xml", "res/values-fi/values.xml", "res/values-fr-rCA/values.xml", "res/values-fr/values.xml", "res/values-gl/values.xml", "res/values-gu/values.xml", "res/values-hi/values.xml", "res/values-hr/values.xml", "res/values-hu/values.xml", "res/values-hy/values.xml", "res/values-in/values.xml", "res/values-is/values.xml", "res/values-it/values.xml", "res/values-iw/values.xml", "res/values-ja/values.xml", "res/values-ka/values.xml", "res/values-kk/values.xml", "res/values-km/values.xml", "res/values-kn/values.xml", "res/values-ko/values.xml", "res/values-ky/values.xml", "res/values-lo/values.xml", "res/values-lt/values.xml", "res/values-lv/values.xml", "res/values-mk/values.xml", "res/values-ml/values.xml", "res/values-mn/values.xml", "res/values-mr/values.xml", "res/values-ms/values.xml", "res/values-my/values.xml", "res/values-nb/values.xml", "res/values-ne/values.xml", "res/values-nl/values.xml", "res/values-pa/values.xml", "res/values-pl/values.xml", "res/values-pt-rBR/values.xml", "res/values-pt-rPT/values.xml", "res/values-ro/values.xml", "res/values-ru/values.xml", "res/values-si/values.xml", "res/values-sk/values.xml", "res/values-sl/values.xml", "res/values-sq/values.xml", "res/values-sr/values.xml", "res/values-sv/values.xml", "res/values-sw/values.xml", "res/values-ta/values.xml", "res/values-te/values.xml", "res/values-th/values.xml", "res/values-tl/values.xml", "res/values-tr/values.xml", "res/values-uk/values.xml", "res/values-ur/values.xml", "res/values-uz/values.xml", "res/values-vi/values.xml", "res/values-zh-rCN/values.xml", "res/values-zh-rHK/values.xml", "res/values-zh-rTW/values.xml", "res/values-zu/values.xml", "res/values/values.xml" ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_cast_framework_java.info b/build/secondary/third_party/android_tools/google_play_services_cast_framework_java.info
deleted file mode 100644
index 285379a..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_cast_framework_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = false
-has_r_text_file = false
-is_manifest_empty = false
-resources = [ "res/drawable-hdpi-v4/cast_abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-hdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-hdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-hdpi-v4/cast_abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-hdpi-v4/cast_ic_stop_circle_filled_grey600.png", "res/drawable-hdpi-v4/cast_ic_stop_circle_filled_white.png", "res/drawable-hdpi-v4/quantum_ic_art_track_grey600_48.png", "res/drawable-hdpi-v4/quantum_ic_bigtop_updates_white_24.png", "res/drawable-hdpi-v4/quantum_ic_cast_connected_white_24.png", "res/drawable-hdpi-v4/quantum_ic_cast_white_36.png", "res/drawable-hdpi-v4/quantum_ic_clear_white_24.png", "res/drawable-hdpi-v4/quantum_ic_closed_caption_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_closed_caption_white_36.png", "res/drawable-hdpi-v4/quantum_ic_forward_10_white_24.png", "res/drawable-hdpi-v4/quantum_ic_forward_30_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_forward_30_white_24.png", "res/drawable-hdpi-v4/quantum_ic_forward_30_white_36.png", "res/drawable-hdpi-v4/quantum_ic_keyboard_arrow_down_white_36.png", "res/drawable-hdpi-v4/quantum_ic_pause_circle_filled_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_pause_circle_filled_white_36.png", "res/drawable-hdpi-v4/quantum_ic_pause_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_pause_grey600_48.png", "res/drawable-hdpi-v4/quantum_ic_pause_white_24.png", "res/drawable-hdpi-v4/quantum_ic_play_arrow_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_play_arrow_grey600_48.png", "res/drawable-hdpi-v4/quantum_ic_play_arrow_white_24.png", "res/drawable-hdpi-v4/quantum_ic_play_circle_filled_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_play_circle_filled_white_36.png", "res/drawable-hdpi-v4/quantum_ic_refresh_white_24.png", "res/drawable-hdpi-v4/quantum_ic_replay_10_white_24.png", "res/drawable-hdpi-v4/quantum_ic_replay_30_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_replay_30_white_24.png", "res/drawable-hdpi-v4/quantum_ic_replay_30_white_36.png", "res/drawable-hdpi-v4/quantum_ic_replay_white_24.png", "res/drawable-hdpi-v4/quantum_ic_skip_next_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_skip_next_white_24.png", "res/drawable-hdpi-v4/quantum_ic_skip_next_white_36.png", "res/drawable-hdpi-v4/quantum_ic_skip_previous_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_skip_previous_white_24.png", "res/drawable-hdpi-v4/quantum_ic_skip_previous_white_36.png", "res/drawable-hdpi-v4/quantum_ic_stop_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_stop_grey600_48.png", "res/drawable-hdpi-v4/quantum_ic_stop_white_24.png", "res/drawable-hdpi-v4/quantum_ic_volume_off_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_volume_off_white_36.png", "res/drawable-hdpi-v4/quantum_ic_volume_up_grey600_36.png", "res/drawable-hdpi-v4/quantum_ic_volume_up_white_36.png", "res/drawable-mdpi-v4/cast_abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-mdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-mdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-mdpi-v4/cast_abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-mdpi-v4/cast_ic_stop_circle_filled_grey600.png", "res/drawable-mdpi-v4/cast_ic_stop_circle_filled_white.png", "res/drawable-mdpi-v4/quantum_ic_art_track_grey600_48.png", "res/drawable-mdpi-v4/quantum_ic_bigtop_updates_white_24.png", "res/drawable-mdpi-v4/quantum_ic_cast_connected_white_24.png", "res/drawable-mdpi-v4/quantum_ic_cast_white_36.png", "res/drawable-mdpi-v4/quantum_ic_clear_white_24.png", "res/drawable-mdpi-v4/quantum_ic_closed_caption_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_closed_caption_white_36.png", "res/drawable-mdpi-v4/quantum_ic_forward_10_white_24.png", "res/drawable-mdpi-v4/quantum_ic_forward_30_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_forward_30_white_24.png", "res/drawable-mdpi-v4/quantum_ic_forward_30_white_36.png", "res/drawable-mdpi-v4/quantum_ic_keyboard_arrow_down_white_36.png", "res/drawable-mdpi-v4/quantum_ic_pause_circle_filled_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_pause_circle_filled_white_36.png", "res/drawable-mdpi-v4/quantum_ic_pause_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_pause_grey600_48.png", "res/drawable-mdpi-v4/quantum_ic_pause_white_24.png", "res/drawable-mdpi-v4/quantum_ic_play_arrow_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_play_arrow_grey600_48.png", "res/drawable-mdpi-v4/quantum_ic_play_arrow_white_24.png", "res/drawable-mdpi-v4/quantum_ic_play_circle_filled_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_play_circle_filled_white_36.png", "res/drawable-mdpi-v4/quantum_ic_refresh_white_24.png", "res/drawable-mdpi-v4/quantum_ic_replay_10_white_24.png", "res/drawable-mdpi-v4/quantum_ic_replay_30_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_replay_30_white_24.png", "res/drawable-mdpi-v4/quantum_ic_replay_30_white_36.png", "res/drawable-mdpi-v4/quantum_ic_replay_white_24.png", "res/drawable-mdpi-v4/quantum_ic_skip_next_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_skip_next_white_24.png", "res/drawable-mdpi-v4/quantum_ic_skip_next_white_36.png", "res/drawable-mdpi-v4/quantum_ic_skip_previous_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_skip_previous_white_24.png", "res/drawable-mdpi-v4/quantum_ic_skip_previous_white_36.png", "res/drawable-mdpi-v4/quantum_ic_stop_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_stop_grey600_48.png", "res/drawable-mdpi-v4/quantum_ic_stop_white_24.png", "res/drawable-mdpi-v4/quantum_ic_volume_off_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_volume_off_white_36.png", "res/drawable-mdpi-v4/quantum_ic_volume_up_grey600_36.png", "res/drawable-mdpi-v4/quantum_ic_volume_up_white_36.png", "res/drawable-nodpi-v4/cast_album_art_placeholder.png", "res/drawable-nodpi-v4/cast_album_art_placeholder_large.png", "res/drawable-xhdpi-v4/cast_abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-xhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-xhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-xhdpi-v4/cast_abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/cast_ic_stop_circle_filled_grey600.png", "res/drawable-xhdpi-v4/cast_ic_stop_circle_filled_white.png", "res/drawable-xhdpi-v4/quantum_ic_art_track_grey600_48.png", "res/drawable-xhdpi-v4/quantum_ic_bigtop_updates_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_cast_connected_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_cast_white_36.png", "res/drawable-xhdpi-v4/quantum_ic_clear_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_closed_caption_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_closed_caption_white_36.png", "res/drawable-xhdpi-v4/quantum_ic_forward_10_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_forward_30_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_forward_30_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_forward_30_white_36.png", "res/drawable-xhdpi-v4/quantum_ic_keyboard_arrow_down_white_36.png", "res/drawable-xhdpi-v4/quantum_ic_pause_circle_filled_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_pause_circle_filled_white_36.png", "res/drawable-xhdpi-v4/quantum_ic_pause_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_pause_grey600_48.png", "res/drawable-xhdpi-v4/quantum_ic_pause_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_play_arrow_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_play_arrow_grey600_48.png", "res/drawable-xhdpi-v4/quantum_ic_play_arrow_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_play_circle_filled_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_play_circle_filled_white_36.png", "res/drawable-xhdpi-v4/quantum_ic_refresh_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_replay_10_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_replay_30_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_replay_30_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_replay_30_white_36.png", "res/drawable-xhdpi-v4/quantum_ic_replay_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_skip_next_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_skip_next_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_skip_next_white_36.png", "res/drawable-xhdpi-v4/quantum_ic_skip_previous_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_skip_previous_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_skip_previous_white_36.png", "res/drawable-xhdpi-v4/quantum_ic_stop_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_stop_grey600_48.png", "res/drawable-xhdpi-v4/quantum_ic_stop_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_volume_off_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_volume_off_white_36.png", "res/drawable-xhdpi-v4/quantum_ic_volume_up_grey600_36.png", "res/drawable-xhdpi-v4/quantum_ic_volume_up_white_36.png", "res/drawable-xxhdpi-v4/cast_abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-xxhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-xxhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-xxhdpi-v4/cast_abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/cast_ic_stop_circle_filled_grey600.png", "res/drawable-xxhdpi-v4/cast_ic_stop_circle_filled_white.png", "res/drawable-xxhdpi-v4/quantum_ic_art_track_grey600_48.png", "res/drawable-xxhdpi-v4/quantum_ic_bigtop_updates_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_cast_connected_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_cast_white_36.png", "res/drawable-xxhdpi-v4/quantum_ic_clear_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_closed_caption_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_closed_caption_white_36.png", "res/drawable-xxhdpi-v4/quantum_ic_forward_10_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_forward_30_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_forward_30_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_forward_30_white_36.png", "res/drawable-xxhdpi-v4/quantum_ic_keyboard_arrow_down_white_36.png", "res/drawable-xxhdpi-v4/quantum_ic_pause_circle_filled_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_pause_circle_filled_white_36.png", "res/drawable-xxhdpi-v4/quantum_ic_pause_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_pause_grey600_48.png", "res/drawable-xxhdpi-v4/quantum_ic_pause_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_play_arrow_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_play_arrow_grey600_48.png", "res/drawable-xxhdpi-v4/quantum_ic_play_arrow_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_play_circle_filled_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_play_circle_filled_white_36.png", "res/drawable-xxhdpi-v4/quantum_ic_refresh_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_replay_10_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_replay_30_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_replay_30_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_replay_30_white_36.png", "res/drawable-xxhdpi-v4/quantum_ic_replay_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_skip_next_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_skip_next_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_skip_next_white_36.png", "res/drawable-xxhdpi-v4/quantum_ic_skip_previous_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_skip_previous_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_skip_previous_white_36.png", "res/drawable-xxhdpi-v4/quantum_ic_stop_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_stop_grey600_48.png", "res/drawable-xxhdpi-v4/quantum_ic_stop_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_volume_off_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_volume_off_white_36.png", "res/drawable-xxhdpi-v4/quantum_ic_volume_up_grey600_36.png", "res/drawable-xxhdpi-v4/quantum_ic_volume_up_white_36.png", "res/drawable-xxxhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-xxxhdpi-v4/cast_abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-xxxhdpi-v4/cast_ic_stop_circle_filled_grey600.png", "res/drawable-xxxhdpi-v4/cast_ic_stop_circle_filled_white.png", "res/drawable-xxxhdpi-v4/quantum_ic_art_track_grey600_48.png", "res/drawable-xxxhdpi-v4/quantum_ic_bigtop_updates_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_cast_connected_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_cast_white_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_clear_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_closed_caption_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_closed_caption_white_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_forward_10_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_forward_30_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_forward_30_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_forward_30_white_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_keyboard_arrow_down_white_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_pause_circle_filled_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_pause_circle_filled_white_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_pause_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_pause_grey600_48.png", "res/drawable-xxxhdpi-v4/quantum_ic_pause_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_play_arrow_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_play_arrow_grey600_48.png", "res/drawable-xxxhdpi-v4/quantum_ic_play_arrow_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_play_circle_filled_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_play_circle_filled_white_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_refresh_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_replay_10_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_replay_30_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_replay_30_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_replay_30_white_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_replay_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_skip_next_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_skip_next_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_skip_next_white_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_skip_previous_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_skip_previous_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_skip_previous_white_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_stop_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_stop_grey600_48.png", "res/drawable-xxxhdpi-v4/quantum_ic_stop_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_volume_off_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_volume_off_white_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_volume_up_grey600_36.png", "res/drawable-xxxhdpi-v4/quantum_ic_volume_up_white_36.png", "res/drawable/cast_expanded_controller_actionbar_bg_gradient_light.xml", "res/drawable/cast_expanded_controller_bg_gradient_light.xml", "res/drawable/cast_expanded_controller_seekbar_thumb.xml", "res/drawable/cast_expanded_controller_seekbar_track.xml", "res/drawable/cast_ic_expanded_controller_closed_caption.xml", "res/drawable/cast_ic_expanded_controller_forward30.xml", "res/drawable/cast_ic_expanded_controller_mute.xml", "res/drawable/cast_ic_expanded_controller_pause.xml", "res/drawable/cast_ic_expanded_controller_play.xml", "res/drawable/cast_ic_expanded_controller_rewind30.xml", "res/drawable/cast_ic_expanded_controller_skip_next.xml", "res/drawable/cast_ic_expanded_controller_skip_previous.xml", "res/drawable/cast_ic_expanded_controller_stop.xml", "res/drawable/cast_ic_mini_controller_closed_caption.xml", "res/drawable/cast_ic_mini_controller_forward30.xml", "res/drawable/cast_ic_mini_controller_mute.xml", "res/drawable/cast_ic_mini_controller_pause.xml", "res/drawable/cast_ic_mini_controller_pause_large.xml", "res/drawable/cast_ic_mini_controller_play.xml", "res/drawable/cast_ic_mini_controller_play_large.xml", "res/drawable/cast_ic_mini_controller_rewind30.xml", "res/drawable/cast_ic_mini_controller_skip_next.xml", "res/drawable/cast_ic_mini_controller_skip_prev.xml", "res/drawable/cast_ic_mini_controller_stop.xml", "res/drawable/cast_ic_mini_controller_stop_large.xml", "res/drawable/cast_ic_notification_disconnect.xml", "res/drawable/cast_ic_notification_forward.xml", "res/drawable/cast_ic_notification_forward10.xml", "res/drawable/cast_ic_notification_forward30.xml", "res/drawable/cast_ic_notification_pause.xml", "res/drawable/cast_ic_notification_play.xml", "res/drawable/cast_ic_notification_rewind.xml", "res/drawable/cast_ic_notification_rewind10.xml", "res/drawable/cast_ic_notification_rewind30.xml", "res/drawable/cast_ic_notification_skip_next.xml", "res/drawable/cast_ic_notification_skip_prev.xml", "res/drawable/cast_ic_notification_small_icon.xml", "res/drawable/cast_ic_notification_stop_live_stream.xml", "res/drawable/cast_mini_controller_gradient_light.xml", "res/drawable/cast_mini_controller_progress_drawable.xml", "res/drawable/cast_skip_ad_label_border.xml", "res/layout/cast_expanded_controller_activity.xml", "res/layout/cast_help_text.xml", "res/layout/cast_intro_overlay.xml", "res/layout/cast_mini_controller.xml", "res/layout/cast_tracks_chooser_dialog_layout.xml", "res/layout/cast_tracks_chooser_dialog_row_layout.xml", "res/values-af/values.xml", "res/values-am/values.xml", "res/values-ar/values.xml", "res/values-az/values.xml", "res/values-b+sr+Latn/values.xml", "res/values-be/values.xml", "res/values-bg/values.xml", "res/values-bn/values.xml", "res/values-bs/values.xml", "res/values-ca/values.xml", "res/values-cs/values.xml", "res/values-da/values.xml", "res/values-de/values.xml", "res/values-el/values.xml", "res/values-en-rGB/values.xml", "res/values-es-rUS/values.xml", "res/values-es/values.xml", "res/values-et/values.xml", "res/values-eu/values.xml", "res/values-fa/values.xml", "res/values-fi/values.xml", "res/values-fr-rCA/values.xml", "res/values-fr/values.xml", "res/values-gl/values.xml", "res/values-gu/values.xml", "res/values-hi/values.xml", "res/values-hr/values.xml", "res/values-hu/values.xml", "res/values-hy/values.xml", "res/values-in/values.xml", "res/values-is/values.xml", "res/values-it/values.xml", "res/values-iw/values.xml", "res/values-ja/values.xml", "res/values-ka/values.xml", "res/values-kk/values.xml", "res/values-km/values.xml", "res/values-kn/values.xml", "res/values-ko/values.xml", "res/values-ky/values.xml", "res/values-land/values.xml", "res/values-lo/values.xml", "res/values-lt/values.xml", "res/values-lv/values.xml", "res/values-mk/values.xml", "res/values-ml/values.xml", "res/values-mn/values.xml", "res/values-mr/values.xml", "res/values-ms/values.xml", "res/values-my/values.xml", "res/values-nb/values.xml", "res/values-ne/values.xml", "res/values-nl/values.xml", "res/values-pa/values.xml", "res/values-pl/values.xml", "res/values-pt-rBR/values.xml", "res/values-pt-rPT/values.xml", "res/values-ro/values.xml", "res/values-ru/values.xml", "res/values-si/values.xml", "res/values-sk/values.xml", "res/values-sl/values.xml", "res/values-sq/values.xml", "res/values-sr/values.xml", "res/values-sv/values.xml", "res/values-sw/values.xml", "res/values-ta/values.xml", "res/values-te/values.xml", "res/values-th/values.xml", "res/values-tl/values.xml", "res/values-tr/values.xml", "res/values-uk/values.xml", "res/values-ur/values.xml", "res/values-uz/values.xml", "res/values-vi/values.xml", "res/values-zh-rCN/values.xml", "res/values-zh-rHK/values.xml", "res/values-zh-rTW/values.xml", "res/values-zu/values.xml", "res/values/values.xml" ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_cast_java.info b/build/secondary/third_party/android_tools/google_play_services_cast_java.info
deleted file mode 100644
index 492ffdcf..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_cast_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = false
-has_r_text_file = false
-is_manifest_empty = true
-resources = [ "res/drawable-hdpi-v4/cast_ic_notification_0.png", "res/drawable-hdpi-v4/cast_ic_notification_1.png", "res/drawable-hdpi-v4/cast_ic_notification_2.png", "res/drawable-hdpi-v4/cast_ic_notification_on.png", "res/drawable-mdpi-v4/cast_ic_notification_0.png", "res/drawable-mdpi-v4/cast_ic_notification_1.png", "res/drawable-mdpi-v4/cast_ic_notification_2.png", "res/drawable-mdpi-v4/cast_ic_notification_on.png", "res/drawable-xhdpi-v4/cast_ic_notification_0.png", "res/drawable-xhdpi-v4/cast_ic_notification_1.png", "res/drawable-xhdpi-v4/cast_ic_notification_2.png", "res/drawable-xhdpi-v4/cast_ic_notification_on.png", "res/drawable-xxhdpi-v4/cast_ic_notification_0.png", "res/drawable-xxhdpi-v4/cast_ic_notification_1.png", "res/drawable-xxhdpi-v4/cast_ic_notification_2.png", "res/drawable-xxhdpi-v4/cast_ic_notification_on.png", "res/drawable/cast_ic_notification_connecting.xml", "res/values-af/values.xml", "res/values-am/values.xml", "res/values-ar/values.xml", "res/values-az/values.xml", "res/values-b+sr+Latn/values.xml", "res/values-be/values.xml", "res/values-bg/values.xml", "res/values-bn/values.xml", "res/values-bs/values.xml", "res/values-ca/values.xml", "res/values-cs/values.xml", "res/values-da/values.xml", "res/values-de/values.xml", "res/values-el/values.xml", "res/values-en-rGB/values.xml", "res/values-es-rUS/values.xml", "res/values-es/values.xml", "res/values-et/values.xml", "res/values-eu/values.xml", "res/values-fa/values.xml", "res/values-fi/values.xml", "res/values-fr-rCA/values.xml", "res/values-fr/values.xml", "res/values-gl/values.xml", "res/values-gu/values.xml", "res/values-hi/values.xml", "res/values-hr/values.xml", "res/values-hu/values.xml", "res/values-hy/values.xml", "res/values-in/values.xml", "res/values-is/values.xml", "res/values-it/values.xml", "res/values-iw/values.xml", "res/values-ja/values.xml", "res/values-ka/values.xml", "res/values-kk/values.xml", "res/values-km/values.xml", "res/values-kn/values.xml", "res/values-ko/values.xml", "res/values-ky/values.xml", "res/values-lo/values.xml", "res/values-lt/values.xml", "res/values-lv/values.xml", "res/values-mk/values.xml", "res/values-ml/values.xml", "res/values-mn/values.xml", "res/values-mr/values.xml", "res/values-ms/values.xml", "res/values-my/values.xml", "res/values-nb/values.xml", "res/values-ne/values.xml", "res/values-nl/values.xml", "res/values-pa/values.xml", "res/values-pl/values.xml", "res/values-pt-rBR/values.xml", "res/values-pt-rPT/values.xml", "res/values-ro/values.xml", "res/values-ru/values.xml", "res/values-si/values.xml", "res/values-sk/values.xml", "res/values-sl/values.xml", "res/values-sq/values.xml", "res/values-sr/values.xml", "res/values-sv/values.xml", "res/values-sw/values.xml", "res/values-ta/values.xml", "res/values-te/values.xml", "res/values-th/values.xml", "res/values-tl/values.xml", "res/values-tr/values.xml", "res/values-uk/values.xml", "res/values-ur/values.xml", "res/values-uz/values.xml", "res/values-vi/values.xml", "res/values-zh-rCN/values.xml", "res/values-zh-rHK/values.xml", "res/values-zh-rTW/values.xml", "res/values-zu/values.xml", "res/values/values.xml" ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_fido_java.info b/build/secondary/third_party/android_tools/google_play_services_fido_java.info
deleted file mode 100644
index 0dfcb237..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_fido_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = true
-has_r_text_file = false
-is_manifest_empty = true
-resources = [  ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_gcm_java.info b/build/secondary/third_party/android_tools/google_play_services_gcm_java.info
deleted file mode 100644
index 020cd823..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_gcm_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = true
-has_r_text_file = false
-is_manifest_empty = false
-resources = [ "res/values-af/values.xml", "res/values-am/values.xml", "res/values-ar/values.xml", "res/values-az/values.xml", "res/values-b+sr+Latn/values.xml", "res/values-be/values.xml", "res/values-bg/values.xml", "res/values-bn/values.xml", "res/values-bs/values.xml", "res/values-ca/values.xml", "res/values-cs/values.xml", "res/values-da/values.xml", "res/values-de/values.xml", "res/values-el/values.xml", "res/values-en-rGB/values.xml", "res/values-es-rUS/values.xml", "res/values-es/values.xml", "res/values-et/values.xml", "res/values-eu/values.xml", "res/values-fa/values.xml", "res/values-fi/values.xml", "res/values-fr-rCA/values.xml", "res/values-fr/values.xml", "res/values-gl/values.xml", "res/values-gu/values.xml", "res/values-hi/values.xml", "res/values-hr/values.xml", "res/values-hu/values.xml", "res/values-hy/values.xml", "res/values-in/values.xml", "res/values-is/values.xml", "res/values-it/values.xml", "res/values-iw/values.xml", "res/values-ja/values.xml", "res/values-ka/values.xml", "res/values-kk/values.xml", "res/values-km/values.xml", "res/values-kn/values.xml", "res/values-ko/values.xml", "res/values-ky/values.xml", "res/values-lo/values.xml", "res/values-lt/values.xml", "res/values-lv/values.xml", "res/values-mk/values.xml", "res/values-ml/values.xml", "res/values-mn/values.xml", "res/values-mr/values.xml", "res/values-ms/values.xml", "res/values-my/values.xml", "res/values-nb/values.xml", "res/values-ne/values.xml", "res/values-nl/values.xml", "res/values-pa/values.xml", "res/values-pl/values.xml", "res/values-pt-rBR/values.xml", "res/values-pt-rPT/values.xml", "res/values-ro/values.xml", "res/values-ru/values.xml", "res/values-si/values.xml", "res/values-sk/values.xml", "res/values-sl/values.xml", "res/values-sq/values.xml", "res/values-sr/values.xml", "res/values-sv/values.xml", "res/values-sw/values.xml", "res/values-ta/values.xml", "res/values-te/values.xml", "res/values-th/values.xml", "res/values-tl/values.xml", "res/values-tr/values.xml", "res/values-uk/values.xml", "res/values-ur/values.xml", "res/values-uz/values.xml", "res/values-vi/values.xml", "res/values-zh-rCN/values.xml", "res/values-zh-rHK/values.xml", "res/values-zh-rTW/values.xml", "res/values-zu/values.xml", "res/values/values.xml" ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_iid_java.info b/build/secondary/third_party/android_tools/google_play_services_iid_java.info
deleted file mode 100644
index 2307336..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_iid_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = false
-has_r_text_file = false
-is_manifest_empty = false
-resources = [  ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_location_java.info b/build/secondary/third_party/android_tools/google_play_services_location_java.info
deleted file mode 100644
index a2ebd4a..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_location_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = false
-has_r_text_file = false
-is_manifest_empty = true
-resources = [  ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_tasks_java.info b/build/secondary/third_party/android_tools/google_play_services_tasks_java.info
deleted file mode 100644
index a2ebd4a..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_tasks_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = false
-has_r_text_file = false
-is_manifest_empty = true
-resources = [  ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_vision_common_java.info b/build/secondary/third_party/android_tools/google_play_services_vision_common_java.info
deleted file mode 100644
index a2ebd4a..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_vision_common_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = false
-has_r_text_file = false
-is_manifest_empty = true
-resources = [  ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_vision_java.info b/build/secondary/third_party/android_tools/google_play_services_vision_java.info
deleted file mode 100644
index a2ebd4a..0000000
--- a/build/secondary/third_party/android_tools/google_play_services_vision_java.info
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated by //build/android/gyp/aar.py
-# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen".
-
-aidl = [  ]
-assets = [  ]
-has_classes_jar = true
-has_native_libraries = false
-has_proguard_flags = false
-has_r_text_file = false
-is_manifest_empty = true
-resources = [  ]
-subjar_tuples = [  ]
-subjars = [  ]
diff --git a/cc/layers/surface_layer.cc b/cc/layers/surface_layer.cc
index 7f90bd5d..6b9e900 100644
--- a/cc/layers/surface_layer.cc
+++ b/cc/layers/surface_layer.cc
@@ -103,7 +103,16 @@
   if (surface_hit_testable_ == surface_hit_testable)
     return;
   surface_hit_testable_ = surface_hit_testable;
+}
+
+void SurfaceLayer::SetHasPointerEventsNone(bool has_pointer_events_none) {
+  if (has_pointer_events_none_ == has_pointer_events_none)
+    return;
+  has_pointer_events_none_ = has_pointer_events_none;
   SetNeedsPushProperties();
+  // Change of pointer-events property triggers an update of viz hit test data,
+  // we need to commit in order to submit the new data with compositor frame.
+  SetNeedsCommit();
 }
 
 void SurfaceLayer::SetMayContainVideo(bool may_contain_video) {
@@ -145,6 +154,7 @@
   deadline_in_frames_ = 0u;
   layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_);
   layer_impl->SetSurfaceHitTestable(surface_hit_testable_);
+  layer_impl->SetHasPointerEventsNone(has_pointer_events_none_);
 }
 
 }  // namespace cc
diff --git a/cc/layers/surface_layer.h b/cc/layers/surface_layer.h
index 1d1d474..8a832fba 100644
--- a/cc/layers/surface_layer.h
+++ b/cc/layers/surface_layer.h
@@ -39,7 +39,8 @@
   }
 
   void SetSurfaceHitTestable(bool surface_hit_testable);
-  bool surface_hit_testable() const { return surface_hit_testable_; }
+
+  void SetHasPointerEventsNone(bool has_pointer_events_none);
 
   void SetMayContainVideo(bool);
 
@@ -84,6 +85,12 @@
   // be surface hit testable (e.g., a surface layer created by video).
   bool surface_hit_testable_ = false;
 
+  // Whether or not the surface can accept pointer events. It is set to true if
+  // the frame owner has pointer-events: none property.
+  // TODO(sunxd): consider renaming it to oopif_has_pointer_events_none_ for
+  // disambiguation.
+  bool has_pointer_events_none_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(SurfaceLayer);
 };
 
diff --git a/cc/layers/surface_layer_impl.cc b/cc/layers/surface_layer_impl.cc
index b86a128..ad3031e 100644
--- a/cc/layers/surface_layer_impl.cc
+++ b/cc/layers/surface_layer_impl.cc
@@ -86,6 +86,14 @@
   NoteLayerPropertyChanged();
 }
 
+void SurfaceLayerImpl::SetHasPointerEventsNone(bool has_pointer_events_none) {
+  if (has_pointer_events_none_ == has_pointer_events_none)
+    return;
+
+  has_pointer_events_none_ = has_pointer_events_none;
+  NoteLayerPropertyChanged();
+}
+
 void SurfaceLayerImpl::PushPropertiesTo(LayerImpl* layer) {
   LayerImpl::PushPropertiesTo(layer);
   SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer);
@@ -95,6 +103,7 @@
   deadline_in_frames_ = 0u;
   layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_);
   layer_impl->SetSurfaceHitTestable(surface_hit_testable_);
+  layer_impl->SetHasPointerEventsNone(has_pointer_events_none_);
 }
 
 bool SurfaceLayerImpl::WillDraw(
diff --git a/cc/layers/surface_layer_impl.h b/cc/layers/surface_layer_impl.h
index f67e362..64ff796 100644
--- a/cc/layers/surface_layer_impl.h
+++ b/cc/layers/surface_layer_impl.h
@@ -54,7 +54,12 @@
   }
 
   void SetSurfaceHitTestable(bool surface_hit_testable);
-  bool surface_hit_testable() const { return surface_hit_testable_; }
+  bool ShouldGenerateSurfaceHitTestData() const {
+    return surface_hit_testable_ && !has_pointer_events_none_;
+  }
+
+  void SetHasPointerEventsNone(bool has_pointer_events_none);
+  bool has_pointer_events_none() const { return has_pointer_events_none_; }
 
   // LayerImpl overrides.
   std::unique_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override;
@@ -84,6 +89,7 @@
 
   bool stretch_content_to_fill_bounds_ = false;
   bool surface_hit_testable_ = false;
+  bool has_pointer_events_none_ = false;
   bool will_draw_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(SurfaceLayerImpl);
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index 370762d..a7d7f4ee 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -429,9 +429,7 @@
     test_hooks_->BeginMainFrame(args);
   }
 
-  void UpdateLayerTreeHost(VisualStateUpdate requested_update) override {
-    test_hooks_->UpdateLayerTreeHost(requested_update);
-  }
+  void UpdateLayerTreeHost() override { test_hooks_->UpdateLayerTreeHost(); }
 
   void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta,
                            const gfx::Vector2dF& outer_delta,
diff --git a/cc/test/stub_layer_tree_host_client.h b/cc/test/stub_layer_tree_host_client.h
index 100bb4f..57d56ffc 100644
--- a/cc/test/stub_layer_tree_host_client.h
+++ b/cc/test/stub_layer_tree_host_client.h
@@ -19,7 +19,7 @@
   void BeginMainFrame(const viz::BeginFrameArgs& args) override {}
   void BeginMainFrameNotExpectedSoon() override {}
   void BeginMainFrameNotExpectedUntil(base::TimeTicks time) override {}
-  void UpdateLayerTreeHost(VisualStateUpdate requested_update) override {}
+  void UpdateLayerTreeHost() override {}
   void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta,
                            const gfx::Vector2dF& outer_delta,
                            const gfx::Vector2dF& elastic_overscroll_delta,
diff --git a/cc/test/test_hooks.h b/cc/test/test_hooks.h
index a189423..48262161 100644
--- a/cc/test/test_hooks.h
+++ b/cc/test/test_hooks.h
@@ -8,7 +8,6 @@
 #include "base/macros.h"
 #include "cc/animation/animation_delegate.h"
 #include "cc/trees/layer_tree_host.h"
-#include "cc/trees/layer_tree_host_client.h"
 #include "cc/trees/layer_tree_host_impl.h"
 
 namespace gfx {
@@ -106,8 +105,7 @@
   virtual void BeginMainFrame(const viz::BeginFrameArgs& args) {}
   virtual void WillBeginMainFrame() {}
   virtual void DidBeginMainFrame() {}
-  virtual void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) {}
+  virtual void UpdateLayerTreeHost() {}
   virtual void DidInitializeLayerTreeFrameSink() {}
   virtual void DidFailToInitializeLayerTreeFrameSink() {}
   virtual void DidAddAnimation() {}
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index 36d7e771..e86fd3c 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -277,8 +277,8 @@
   return debug_state_;
 }
 
-void LayerTreeHost::RequestMainFrameUpdate(VisualStateUpdate requested_update) {
-  client_->UpdateLayerTreeHost(requested_update);
+void LayerTreeHost::RequestMainFrameUpdate() {
+  client_->UpdateLayerTreeHost();
 }
 
 // This function commits the LayerTreeHost to an impl tree. When modifying
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h
index 2e27402..93e1ae7 100644
--- a/cc/trees/layer_tree_host.h
+++ b/cc/trees/layer_tree_host.h
@@ -487,9 +487,7 @@
   void BeginMainFrameNotExpectedSoon();
   void BeginMainFrameNotExpectedUntil(base::TimeTicks time);
   void AnimateLayers(base::TimeTicks monotonic_frame_begin_time);
-  using VisualStateUpdate = LayerTreeHostClient::VisualStateUpdate;
-  void RequestMainFrameUpdate(
-      VisualStateUpdate requested_update = VisualStateUpdate::kAll);
+  void RequestMainFrameUpdate();
   void FinishCommitOnImplThread(LayerTreeHostImpl* host_impl);
   void WillCommit();
   void CommitComplete();
diff --git a/cc/trees/layer_tree_host_client.h b/cc/trees/layer_tree_host_client.h
index 1c2e7fff5..8950d17b 100644
--- a/cc/trees/layer_tree_host_client.h
+++ b/cc/trees/layer_tree_host_client.h
@@ -63,11 +63,7 @@
   // state. (The "compositing state" will result in a mutated layer tree on the
   // LayerTreeHost via additional interface indirections which lead back to
   // mutations on the LayerTreeHost.)
-  //
-  // If |requested_update| is kPrePaint, the client should apply layout and
-  // animation updates and their side effects, but can skip painting stages.
-  enum class VisualStateUpdate { kPrePaint, kAll };
-  virtual void UpdateLayerTreeHost(VisualStateUpdate requested_update) = 0;
+  virtual void UpdateLayerTreeHost() = 0;
 
   virtual void ApplyViewportDeltas(
       const gfx::Vector2dF& inner_delta,
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 6413b3b..a8a272e00 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -2592,9 +2592,18 @@
 
     if (layer->is_surface_layer()) {
       const auto* surface_layer = static_cast<const SurfaceLayerImpl*>(layer);
-      if (!surface_layer->surface_hit_testable()) {
-        overlapping_region.Union(MathUtil::MapEnclosingClippedRect(
-            layer->ScreenSpaceTransform(), gfx::Rect(surface_layer->bounds())));
+      // If a surface layer is created not by child frame compositor or the
+      // frame owner has pointer-events: none property, the surface layer
+      // becomes not hit testable. We should not generate data for it.
+      if (!surface_layer->ShouldGenerateSurfaceHitTestData()) {
+        // If a surface layer is created due to video or offscreen canvas, it
+        // can still block overlapped surface layers from getting events, we
+        // need to account for all layers that don't have pointer-events: none.
+        if (!surface_layer->has_pointer_events_none()) {
+          overlapping_region.Union(MathUtil::MapEnclosingClippedRect(
+              layer->ScreenSpaceTransform(),
+              gfx::Rect(surface_layer->bounds())));
+        }
         continue;
       }
 
diff --git a/cc/trees/layer_tree_host_perftest.cc b/cc/trees/layer_tree_host_perftest.cc
index fe6ad78..1c95b6fc 100644
--- a/cc/trees/layer_tree_host_perftest.cc
+++ b/cc/trees/layer_tree_host_perftest.cc
@@ -255,8 +255,7 @@
     ASSERT_TRUE(scrollable_.get());
   }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     if (TestEnded())
       return;
     static const gfx::Vector2d delta = gfx::Vector2d(0, 10);
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 9d76c5a..c61405b 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -125,8 +125,7 @@
  protected:
   void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     // This shouldn't cause a second commit to happen.
     layer_tree_host()->SetNeedsCommit();
   }
@@ -172,8 +171,7 @@
 
   void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     EXPECT_TRUE(CheckStep(MAIN_LAYOUT, &main_));
   }
 
@@ -263,8 +261,7 @@
  protected:
   void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     // This shouldn't cause a second commit to happen.
     layer_tree_host()->SetNeedsUpdateLayers();
   }
@@ -3570,7 +3567,7 @@
     LayerTreeHostTestDeferCommitsInsideBeginMainFrameWithCommitAfter);
 
 // This verifies that animate_only BeginFrames only run animation/layout
-// updates, i.e. abort commits after the animate stage and only request layer
+// updates, i.e. abort commits after the paint stage and only request layer
 // tree updates for layout.
 //
 // The tests sends four Begin(Main)Frames in sequence: three animate_only
@@ -3655,21 +3652,7 @@
     }
   }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
-    ++update_layer_tree_host_count_;
-
-    if (begin_frame_count_ < 4) {
-      // First three BeginFrames are animate_only, so only kPrePaint updates are
-      // requested.
-      EXPECT_EQ(LayerTreeHostClient::VisualStateUpdate::kPrePaint,
-                requested_update);
-    } else {
-      EXPECT_EQ(4, begin_frame_count_);
-      // Last BeginFrame is normal, so all updates are requested.
-      EXPECT_EQ(LayerTreeHostClient::VisualStateUpdate::kAll, requested_update);
-    }
-  }
+  void UpdateLayerTreeHost() override { ++update_layer_tree_host_count_; }
 
   void DidCommit() override {
     ++commit_count_;
diff --git a/cc/trees/layer_tree_host_unittest_animation.cc b/cc/trees/layer_tree_host_unittest_animation.cc
index 0b935c7..d50a4cc 100644
--- a/cc/trees/layer_tree_host_unittest_animation.cc
+++ b/cc/trees/layer_tree_host_unittest_animation.cc
@@ -638,8 +638,7 @@
       layer_tree_host()->SetNeedsAnimate();
   }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     layer_tree_host()->SetNeedsCommitWithForcedRedraw();
   }
 
@@ -2242,8 +2241,7 @@
 
   void DidCommit() override { PostSetNeedsCommitToMainThread(); }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     if (layer_tree_host()->SourceFrameNumber() == 2) {
       // Destroy animation.
       timeline_->DetachAnimation(animation_.get());
@@ -2320,8 +2318,7 @@
       PostSetNeedsCommitToMainThread();
   }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     if (layer_tree_host()->SourceFrameNumber() == 1) {
       EXPECT_FALSE(layer_tree_host()->property_trees()->needs_rebuild);
       AddAnimatedTransformToAnimation(animation_child_.get(), 1.0, 5, 5);
diff --git a/cc/trees/layer_tree_host_unittest_scroll.cc b/cc/trees/layer_tree_host_unittest_scroll.cc
index d5fa8c4..c234d9f 100644
--- a/cc/trees/layer_tree_host_unittest_scroll.cc
+++ b/cc/trees/layer_tree_host_unittest_scroll.cc
@@ -104,8 +104,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     Layer* scroll_layer = layer_tree_host()->outer_viewport_scroll_layer();
     if (!layer_tree_host()->SourceFrameNumber()) {
       EXPECT_VECTOR_EQ(initial_scroll_, scroll_layer->CurrentScrollOffset());
@@ -642,8 +641,7 @@
     num_scrolls_++;
   }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     EXPECT_VECTOR_EQ(gfx::Vector2d(),
                      expected_no_scroll_layer_->CurrentScrollOffset());
 
@@ -846,8 +844,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     Layer* scroll_layer = layer_tree_host()->outer_viewport_scroll_layer();
     if (!layer_tree_host()->SourceFrameNumber()) {
       EXPECT_VECTOR_EQ(initial_scroll_, scroll_layer->CurrentScrollOffset());
@@ -1123,8 +1120,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     Layer* root = layer_tree_host()->root_layer();
     Layer* scroll_layer = layer_tree_host()->outer_viewport_scroll_layer();
     switch (layer_tree_host()->SourceFrameNumber()) {
@@ -1495,8 +1491,7 @@
     num_commits_++;
   }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     Layer* scroll_layer = layer_tree_host()->outer_viewport_scroll_layer();
     switch (layer_tree_host()->SourceFrameNumber()) {
       case 0:
@@ -2000,8 +1995,7 @@
     PostSetNeedsCommitToMainThread();
   }
 
-  void UpdateLayerTreeHost(
-      LayerTreeHostClient::VisualStateUpdate requested_update) override {
+  void UpdateLayerTreeHost() override {
     Layer* scroll_layer = layer_tree_host()->inner_viewport_scroll_layer();
     if (layer_tree_host()->SourceFrameNumber() == 0) {
       EXPECT_VECTOR_EQ(initial_scroll_, scroll_layer->CurrentScrollOffset());
diff --git a/cc/trees/proxy_main.cc b/cc/trees/proxy_main.cc
index 334c323..c84c480f 100644
--- a/cc/trees/proxy_main.cc
+++ b/cc/trees/proxy_main.cc
@@ -146,10 +146,9 @@
   max_requested_pipeline_stage_ = NO_PIPELINE_STAGE;
 
   // When we don't need to produce a CompositorFrame, there's also no need to
-  // paint or commit our updates. We still need to run layout though, as it can
+  // commit our updates. We still need to run layout and paint though, as it can
   // have side effects on page loading behavior.
-  bool skip_paint_and_commit =
-      begin_main_frame_state->begin_frame_args.animate_only;
+  bool skip_commit = begin_main_frame_state->begin_frame_args.animate_only;
 
   // If commits are deferred, skip the entire pipeline.
   bool skip_full_pipeline = defer_commits_;
@@ -158,7 +157,7 @@
   // now, and there was no intermediate request for a commit since the last
   // BeginMainFrame, we can skip the full pipeline.
   skip_full_pipeline |=
-      skip_paint_and_commit && final_pipeline_stage_ == NO_PIPELINE_STAGE;
+      skip_commit && final_pipeline_stage_ == NO_PIPELINE_STAGE;
 
   if (skip_full_pipeline) {
     TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommit",
@@ -220,15 +219,13 @@
 
   // See LayerTreeHostClient::MainFrameUpdate for more documentation on
   // what this does.
-  layer_tree_host_->RequestMainFrameUpdate(
-      skip_paint_and_commit ? LayerTreeHost::VisualStateUpdate::kPrePaint
-                            : LayerTreeHost::VisualStateUpdate::kAll);
+  layer_tree_host_->RequestMainFrameUpdate();
 
   // At this point the main frame may have deferred commits to avoid committing
   // right now.
-  skip_paint_and_commit |= defer_commits_;
+  skip_commit |= defer_commits_;
 
-  if (skip_paint_and_commit) {
+  if (skip_commit) {
     TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommit_InsideBeginMainFrame",
                          TRACE_EVENT_SCOPE_THREAD);
     std::vector<std::unique_ptr<SwapPromise>> empty_swap_promises;
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index 1d199d2f..38e774a2 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -773,10 +773,7 @@
   layer_tree_host_->WillBeginMainFrame();
   layer_tree_host_->BeginMainFrame(begin_frame_args);
   layer_tree_host_->AnimateLayers(begin_frame_args.frame_time);
-  layer_tree_host_->RequestMainFrameUpdate(
-      begin_frame_args.animate_only
-          ? LayerTreeHost::VisualStateUpdate::kPrePaint
-          : LayerTreeHost::VisualStateUpdate::kAll);
+  layer_tree_host_->RequestMainFrameUpdate();
 }
 
 void SingleThreadProxy::DoPainting() {
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index c6b141a..16f5df3 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -1731,6 +1731,7 @@
   ar_module_tmpl("ar_public_module") {
     manifest_package = manifest_package
     module_name = "ArPublic"
+    base_module_target = ":monochrome_public_base_module"
   }
 }
 
@@ -1738,6 +1739,7 @@
   vr_module_tmpl("vr_public_module") {
     manifest_package = manifest_package
     module_name = "VrPublic"
+    base_module_target = ":chrome_modern_public_base_module"
   }
 }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
index 590587b..2ed881c1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -247,6 +247,8 @@
     public static final String NTP_MODERN_LAYOUT = "NTPModernLayout";
     public static final String NTP_SNIPPETS_INCREASED_VISIBILITY = "NTPSnippetsIncreasedVisibility";
     public static final String OFFLINE_INDICATOR = "OfflineIndicator";
+    public static final String OFFLINE_INDICATOR_ALWAYS_HTTP_PROBE =
+            "OfflineIndicatorAlwaysHttpProbe";
     public static final String OFFLINE_PAGES_DESCRIPTIVE_FAIL_STATUS =
             "OfflinePagesDescriptiveFailStatus";
     public static final String OFFLINE_PAGES_DESCRIPTIVE_PENDING_STATUS =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/PageViewTimer.java b/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/PageViewTimer.java
index 3b75042b..3169add 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/PageViewTimer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/PageViewTimer.java
@@ -192,9 +192,7 @@
     private void maybeReportViewTime() {
         if (mLastUrl != null && mStartTimeMs != 0 && mPageDidPaint) {
             long durationMs = SystemClock.uptimeMillis() - mStartTimeMs - mPauseDuration;
-            RecordHistogram.recordLongTimesHistogram100(
-                    "ContextualSuggestions.PageViewTime", durationMs, TimeUnit.MILLISECONDS);
-
+            reportDurationRaw(durationMs);
             reportDurationBucket(calculateDurationBucket(durationMs));
         }
 
@@ -209,6 +207,20 @@
         mPauseStartTimeMs = 0;
     }
 
+    private void reportDurationRaw(long durationMs) {
+        RecordHistogram.recordLongTimesHistogram100(
+                "ContextualSuggestions.PageViewTime", durationMs, TimeUnit.MILLISECONDS);
+        if (mNavigationSource == NavigationSource.CONTEXTUAL_SUGGESTIONS) {
+            RecordHistogram.recordLongTimesHistogram100(
+                    "ContextualSuggestions.PageViewTime.ContextualSuggestions", durationMs,
+                    TimeUnit.MILLISECONDS);
+            return;
+        }
+
+        RecordHistogram.recordLongTimesHistogram100(
+                "ContextualSuggestions.PageViewTime.Other", durationMs, TimeUnit.MILLISECONDS);
+    }
+
     private void reportDurationBucket(@DurationBucket int durationBucket) {
         if (mNavigationSource == NavigationSource.CONTEXTUAL_SUGGESTIONS) {
             RecordHistogram.recordEnumeratedHistogram(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/ConnectivityDetector.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/ConnectivityDetector.java
index 74fc4d8..e983bcf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/ConnectivityDetector.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/ConnectivityDetector.java
@@ -19,6 +19,7 @@
 import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
 import org.chromium.base.VisibleForTesting;
+import org.chromium.chrome.browser.ChromeFeatureList;
 import org.chromium.chrome.browser.content.ContentUtils;
 import org.chromium.net.ConnectionType;
 import org.chromium.net.NetworkChangeNotifier;
@@ -161,6 +162,12 @@
     private static @ConnectionState int getConnectionStateFromSystem() {
         if (sSkipSystemCheckForTesting) return ConnectionState.NONE;
 
+        // Skip the system check below in order to force the HTTP probes. This is used for manual
+        // testing purposes.
+        if (ChromeFeatureList.isEnabled(ChromeFeatureList.OFFLINE_INDICATOR_ALWAYS_HTTP_PROBE)) {
+            return ConnectionState.NONE;
+        }
+
         // NET_CAPABILITY_VALIDATED and NET_CAPABILITY_CAPTIVE_PORTAL are only available on
         // Marshmallow and later versions.
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return ConnectionState.NONE;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorController.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorController.java
index 39906d59..4dd38aaa 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorController.java
@@ -44,17 +44,19 @@
     public static final int OFFLINE_INDICATOR_CTR_CLICKED = 1;
     public static final int OFFLINE_INDICATOR_CTR_COUNT = 2;
 
+    // Field trial params.
+    public static final String PARAM_BOTTOM_OFFLINE_INDICATOR_ENABLED = "bottom_offline_indicator";
+    public static final String PARAM_STABLE_OFFLINE_WAIT_SECONDS = "stable_offline_wait_s";
+
     private static final int SNACKBAR_DURATION_MS = 10000;
 
-    // Time in milliseconds to wait until the offline state is stablized in the case of flaky
+    // Default time in seconds to wait until the offline state is stablized in the case of flaky
     // connections.
-    private static final int TIME_TO_WAIT_FOR_STABLE_OFFLINE = 3 * 60 * 1000;
+    private static final int STABLE_OFFLINE_DEFAULT_WAIT_SECONDS = 3 * 60;
 
     @SuppressLint("StaticFieldLeak")
     private static OfflineIndicatorController sInstance;
 
-    private static int sTimeToWaitForStableOffline = TIME_TO_WAIT_FOR_STABLE_OFFLINE;
-
     private boolean mIsShowingOfflineIndicator;
     // Set to true if the offline indicator has been shown once.
     private boolean mHasOfflineIndicatorShown;
@@ -221,7 +223,8 @@
         // back to being offline.
         // TODO(jianli): keep these values in shared prefernces. (http://crbug.com/879725)
         if (mHasOfflineIndicatorShown
-                && SystemClock.elapsedRealtime() - mLastOnlineTime < sTimeToWaitForStableOffline) {
+                && SystemClock.elapsedRealtime() - mLastOnlineTime
+                        < getTimeToWaitForStableOffline()) {
             return;
         }
 
@@ -265,9 +268,18 @@
         }
     }
 
+    int getTimeToWaitForStableOffline() {
+        int seconds = ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
+                ChromeFeatureList.OFFLINE_INDICATOR, PARAM_STABLE_OFFLINE_WAIT_SECONDS,
+                STABLE_OFFLINE_DEFAULT_WAIT_SECONDS);
+        return seconds * 1000;
+    }
+
     @VisibleForTesting
     static boolean isUsingTopSnackbar() {
-        return true;
+        boolean useBottomSnackbar = ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean(
+                ChromeFeatureList.OFFLINE_INDICATOR, PARAM_BOTTOM_OFFLINE_INDICATOR_ENABLED, false);
+        return !useBottomSnackbar;
     }
 
     @VisibleForTesting
@@ -279,9 +291,4 @@
     TopSnackbarManager getTopSnackbarManagerForTesting() {
         return mTopSnackbarManager;
     }
-
-    @VisibleForTesting
-    static void overrideTimeToWaitForStableOfflineForTesting(int time) {
-        sTimeToWaitForStableOffline = time;
-    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index b143b63..de5e41e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -23,6 +23,7 @@
 import android.view.View.OnAttachStateChangeListener;
 import android.view.View.OnClickListener;
 
+import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.Callback;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.VisibleForTesting;
@@ -892,8 +893,8 @@
                 maybeShowDuetHelpBubble(currentTab);
 
                 // Allow the bottom toolbar to be focused in accessibility after the top toolbar.
-                mLocationBar.getContainerView().setAccessibilityTraversalBefore(
-                        R.id.bottom_toolbar);
+                ApiCompatibilityUtils.setAccessibilityTraversalBefore(
+                        mLocationBar.getContainerView(), R.id.bottom_toolbar);
             }
 
             onNativeLibraryReady();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/SilenceLintErrors.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/SilenceLintErrors.java
index 4cfcaf3..91acaca1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr/SilenceLintErrors.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/SilenceLintErrors.java
@@ -16,7 +16,7 @@
             R.string.vr_services_check_infobar_update_text,
             R.string.vr_services_check_infobar_install_button,
             R.string.vr_services_check_infobar_update_button, R.anim.stay_hidden,
-            R.drawable.vr_services,
+            R.drawable.vr_services, R.string.ar_module_title, R.string.vr_module_title,
     };
 
     private SilenceLintErrors() {}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java
index 71bf20d..9e3d61b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java
@@ -91,15 +91,16 @@
     }
 
     @Override
-    @TargetApi(Build.VERSION_CODES.M)
+    @TargetApi(Build.VERSION_CODES.N)
     public void isUserVerifyingPlatformAuthenticatorAvailable(
             IsUserVerifyingPlatformAuthenticatorAvailableResponse callback) {
         Context context = ChromeActivity.fromWebContents(mWebContents);
-        if (PackageUtils.getPackageVersion(context, GMSCORE_PACKAGE_NAME)
-            < GMSCORE_MIN_VERSION) {
+        if (PackageUtils.getPackageVersion(context, GMSCORE_PACKAGE_NAME) < GMSCORE_MIN_VERSION
+                || Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
             callback.call(false);
             return;
         }
+
         if (!ChromeFeatureList.isEnabled(ChromeFeatureList.WEB_AUTH)) {
             callback.call(false);
             return;
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
index 9ed68a25..7c0ba4a 100644
--- a/chrome/android/java/strings/android_chrome_strings.grd
+++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -3602,6 +3602,9 @@
         <message name="IDS_VR_SERVICES_CHECK_INFOBAR_UPDATE_BUTTON" desc="Text to be displayed in the VR Services check infobar confirm button for updating.">
           Update
         </message>
+        <message name="IDS_VR_MODULE_TITLE" desc="Title of the Virtual Reality (VR) dynamic feature module. Used, for instance, in the text of dialogs confirming to download the module.">
+          VR
+        </message>
       </if>
 
       <!-- ARCore check infobar -->
@@ -3612,6 +3615,9 @@
         <message name="IDS_AR_CORE_CHECK_INFOBAR_UPDATE_TEXT" desc="Text to be displayed in the ARCore check infobar. When a WebXR page is loaded, if ARCore is needed to display AR content and the installed ARCore is not up to date to the version needed by the implementation, an infobar will be shown to the user prompting them to update ARCore.">
           To view augmented reality content, update ARCore
         </message>
+        <message name="IDS_AR_MODULE_TITLE" desc="Title of the Augmented Reality (AR) dynamic feature module. Used, for instance, in the text of dialogs confirming to download the module.">
+          AR
+        </message>
       </if>
 
       <!-- Custom Context Menu Informations -->
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 9c74270..cea5fb8 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
@@ -374,6 +374,7 @@
 
 የፍለጋ ቃልዎን ለማስተካከል ለመምረጥ ተጭነው ይያዙ። ፍለጋዎን ይበልጥ ለማጥራት ፓነሉን እስከ ላይ ድረስ ያንሸራትቱትና የፍለጋ ሳጥኑን ይንኩ።</translation>
 <translation id="4056223980640387499">ቀይ ቡናማ</translation>
+<translation id="4060598801229743805">አማራጮች ከማያ ገጹ ግርጌ አጠገብ ይገኛሉ</translation>
 <translation id="4062305924942672200">የህግ መረጃ</translation>
 <translation id="4084682180776658562">ዕልባት</translation>
 <translation id="4084712963632273211">ከ<ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />በGoogle የተላከ<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />ን ይክፈቱ</translation>
 <translation id="4634124774493850572">የይለፍ ቃል ይጠቀሙ</translation>
 <translation id="4645575059429386691">በእርስዎ ወላጅ የሚቀናበር</translation>
+<translation id="4660011489602794167">የቁልፍ ሰሌዳን አሳይ</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> ዕልባቶች ተሰርዘዋል</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ወደ እርስዎ መነሻ ገፅ ታክሏል</translation>
 <translation id="4684427112815847243">ሁሉንም ያመሳስሉ</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">የዚህ መተግበሪያ ዩአርኤል ለመቅዳት መታ ያድርጉ</translation>
 <translation id="5765780083710877561">መግለጫ</translation>
 <translation id="5777170031995031090">Google ፍለጋን፣ ማስታወቂያዎችን እና ሌሎች የGoogle አገልግሎቶችን ግላዊነት ለማላበስ ብሎ የአሰሳ ታሪክዎን እንዴት እንደሚጠቀምበት ይቆጣጠሩት።</translation>
-<translation id="5779929835642192302">የሚገኙ የአስተያየት ጥቆማዎች</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> ከ<ph name="SPACE_AVAILABLE" /> በመጠቀም ላይ</translation>
 <translation id="5804241973901381774">ፍቃዶች</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{ከ# ሰዓት በፊት}one{ከ# ሰዓቶች በፊት}other{ከ# ሰዓቶች በፊት}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">ከአንዳንድ ጣቢያዎች ታግደዋል</translation>
 <translation id="7253272406652746122">በመሣሪያዎ ቅንብሮች መተግበሪያ ውስጥ ካለው የመለያዎች ገጽ ሆነው የGoogle መለያ ያክሉ።</translation>
 <translation id="7274013316676448362">የታገደ ጣቢያ</translation>
-<translation id="72867290065237936">በይለፍ ቃል ጥቆማዎች እና ቁልፍ ሰሌዳ መካከል ለመቀያየር መታ ያድርጉ</translation>
 <translation id="729975465115245577">የእርስዎ መሣሪያ የይለፍ ቃላት ፋይሉን የሚያከማችበት መተግበሪያ የለውም።</translation>
 <translation id="7302081693174882195">ዝርዝሮች፦ በተቀመጠው የውሂብ መጠን ተደርድረዋል</translation>
 <translation id="7333031090786104871">አሁንም ቀዳሚ ጣቢያን በማከል ላይ</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 33e7908..00a499b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -374,6 +374,7 @@
 
 لضبط عبارة البحث، يُرجى الضغط مع الاستمرار للتحديد. لتحسين البحث، يُرجى تمرير اللوحة للأعلى والنقر على مربّع البحث.</translation>
 <translation id="4056223980640387499">بني داكن</translation>
+<translation id="4060598801229743805">الخيارات متاحة بالقرب من أعلى الشاشة</translation>
 <translation id="4062305924942672200">المعلومات القانونية</translation>
 <translation id="4084682180776658562">إشارة</translation>
 <translation id="4084712963632273211">‏من <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />تعرضه Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -447,6 +448,7 @@
 <translation id="4616150815774728855">فتح <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">استخدام كلمة المرور</translation>
 <translation id="4645575059429386691">يديره والداك</translation>
+<translation id="4660011489602794167">عرض لوحة المفاتيح</translation>
 <translation id="4663756553811254707">تم حذف <ph name="NUMBER_OF_BOOKMARKS" /> من الإشارات المرجعية</translation>
 <translation id="4665282149850138822">تمت إضافة <ph name="NAME" /> إلى صفحتك الرئيسية</translation>
 <translation id="4684427112815847243">مزامنة كل شيء</translation>
@@ -604,7 +606,6 @@
 <translation id="5763514718066511291">‏النقر لنسخ عنوان URL لهذا التطبيق</translation>
 <translation id="5765780083710877561">الوصف:</translation>
 <translation id="5777170031995031090">‏التحكم في الطريقة التي تتبعها Google عند استخدام سجل التصفح لتخصيص البحث، والإعلانات، وخدمات Google الأخرى.</translation>
-<translation id="5779929835642192302">الاقتراحات المتاحة</translation>
 <translation id="5793665092639000975">استخدام <ph name="SPACE_USED" /> من <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">الأذونات</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{قبل ساعة واحدة (#)}zero{قبل # ساعة}two{قبل ساعتين (#)}few{قبل # ساعات}many{قبل # ساعة}other{قبل # ساعة}}</translation>
@@ -796,7 +797,6 @@
 <translation id="7251326866581677552">تم الحظر من بعض المواقع</translation>
 <translation id="7253272406652746122">‏أضف حساب Google من صفحة "الحسابات" في تطبيق إعدادات جهازك.</translation>
 <translation id="7274013316676448362">الموقع المحظور</translation>
-<translation id="72867290065237936">انقر للتبديل بين اقتراحات كلمة المرور ولوحة المفاتيح</translation>
 <translation id="729975465115245577">لا يتضمن جهازك تطبيقًا لتخزين ملف كلمات المرور.</translation>
 <translation id="7302081693174882195">التفاصيل: تم الترتيب بحسب مقدار البيانات المحفوظة</translation>
 <translation id="7333031090786104871">لا تزال عملية إضافة موقع الويب السابق جارية</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 d5e8df0..e338792 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -374,6 +374,7 @@
 
 За да коригирате думата си за търсене, натиснете продължително за избор. За да прецизирате заявката, плъзнете панела нагоре докрай и докоснете полето за търсене.</translation>
 <translation id="4056223980640387499">Сепия</translation>
+<translation id="4060598801229743805">Опциите са в горната част на екрана</translation>
 <translation id="4062305924942672200">Правна информация</translation>
 <translation id="4084682180776658562">Отметка</translation>
 <translation id="4084712963632273211">От <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />показва се от Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Отваряне на <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Използване на паролата</translation>
 <translation id="4645575059429386691">Управлява се от ваш родител</translation>
+<translation id="4660011489602794167">Показване на клавиатурата</translation>
 <translation id="4663756553811254707">Изтрихте <ph name="NUMBER_OF_BOOKMARKS" /> отметки</translation>
 <translation id="4665282149850138822">Добавихте <ph name="NAME" /> към началния екран</translation>
 <translation id="4684427112815847243">Синхронизиране на всичко</translation>
@@ -604,7 +606,6 @@
 <translation id="5763514718066511291">Докоснете, за да копирате URL адреса за това приложение</translation>
 <translation id="5765780083710877561">Описание:</translation>
 <translation id="5777170031995031090">Контролирайте начина, по който използваме историята ви на сърфиране, за да персонализираме търсенето, рекламите и други услуги на Google.</translation>
-<translation id="5779929835642192302">Налице са предложения</translation>
 <translation id="5793665092639000975">Използвано място: <ph name="SPACE_USED" /> от <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Разрешения</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{преди # час}other{преди # часа}}</translation>
@@ -796,7 +797,6 @@
 <translation id="7251326866581677552">Блокиране за някои сайтове</translation>
 <translation id="7253272406652746122">Добавете профил в Google от страницата „Профили“ в приложението Настройки на устройството ви.</translation>
 <translation id="7274013316676448362">Блокиран сайт</translation>
-<translation id="72867290065237936">Докоснете, за да превключите между предложенията за парола и клавиатурата</translation>
 <translation id="729975465115245577">На устройството ви няма приложение за съхраняване на файла с паролите.</translation>
 <translation id="7302081693174882195">Подробности: сортирани по количество спестени данни</translation>
 <translation id="7333031090786104871">Още се добавя предишният сайт</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 cedc4bd..0a5a713 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -374,6 +374,7 @@
 
 Per ajustar el terme de cerca, mantén-lo premut per seleccionar-lo. Per definir millor la cerca, fes lliscar el tauler cap amunt tot el que puguis i toca el quadre de cerca.</translation>
 <translation id="4056223980640387499">Sèpia</translation>
+<translation id="4060598801229743805">Hi ha opcions disponibles a prop de la part superior de la pantalla</translation>
 <translation id="4062305924942672200">Informació legal</translation>
 <translation id="4084682180776658562">Adreça d'interès</translation>
 <translation id="4084712963632273211">Publicada originalment per <ph name="PUBLISHER_ORIGIN" />, <ph name="BEGIN_DEEMPHASIZED" />amb la tecnologia de Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Obre <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Fes servir la contrasenya</translation>
 <translation id="4645575059429386691">Gestionat pels pares</translation>
+<translation id="4660011489602794167">Mostra el teclat</translation>
 <translation id="4663756553811254707">S'han suprimit <ph name="NUMBER_OF_BOOKMARKS" /> adreces d'interès</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> s'ha afegit a la pantalla d'inici</translation>
 <translation id="4684427112815847243">Sincronitza-ho tot</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Toca per copiar l'URL d'aquesta aplicació</translation>
 <translation id="5765780083710877561">Descripció:</translation>
 <translation id="5777170031995031090">Controleu com utilitza Google el vostre historial de navegació per personalitzar la Cerca, els anuncis i altres serveis de Google.</translation>
-<translation id="5779929835642192302">Suggeriments disponibles</translation>
 <translation id="5793665092639000975">S'estan utilitzant <ph name="SPACE_USED" /> de <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Permisos</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{fa # hora}other{fa # hores}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">S'ha bloquejat en alguns llocs web</translation>
 <translation id="7253272406652746122">Afegeix un compte de Google des de la pàgina Comptes de l'aplicació Configuració del dispositiu.</translation>
 <translation id="7274013316676448362">Lloc bloquejat</translation>
-<translation id="72867290065237936">Toca per canviar entre els suggeriments de contrasenya i el teclat</translation>
 <translation id="729975465115245577">El dispositiu no té cap aplicació per emmagatzemar el fitxer de contrasenyes.</translation>
 <translation id="7302081693174882195">Detalls: files ordenades per quantitat de dades estalviades</translation>
 <translation id="7333031090786104871">Encara s'hi està afegint el lloc anterior</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 1eaf006..140ea78 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -374,6 +374,7 @@
 
 Chcete-li vyhledávací dotaz upravit, proveďte výběr dlouhým stisknutím. Chcete-li upřesnit vyhledávací dotaz, přejeďte po panelu až nahoru a klepněte na vyhledávací pole.</translation>
 <translation id="4056223980640387499">Sépie</translation>
+<translation id="4060598801229743805">Možnosti jsou k dispozici u horního okraje obrazovky</translation>
 <translation id="4062305924942672200">Právní informace</translation>
 <translation id="4084682180776658562">Záložka</translation>
 <translation id="4084712963632273211">Zdroj: <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />poskytováno společností Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Do aplikace <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Použít heslo</translation>
 <translation id="4645575059429386691">Spravováno vaším rodičem</translation>
+<translation id="4660011489602794167">Zobrazit klávesnici</translation>
 <translation id="4663756553811254707">Smazané záložky: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Na plochu byl přidán web <ph name="NAME" /></translation>
 <translation id="4684427112815847243">Synchronizovat vše</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Klepnutím zkopírujete adresu URL této aplikace</translation>
 <translation id="5765780083710877561">Popis:</translation>
 <translation id="5777170031995031090">Nastavte, jak má Google využívat vaši historii procházení k personalizaci Vyhledávání, reklam a dalších služeb Google.</translation>
-<translation id="5779929835642192302">Jsou k dispozici návrhy</translation>
 <translation id="5793665092639000975">Je využito <ph name="SPACE_USED" /> z <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Oprávnění</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{před # hodinou}few{před # hodinami}many{před # hodiny}other{před # hodinami}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Blokováno na všech webech</translation>
 <translation id="7253272406652746122">Přidejte účet Google ze stránky Účty v aplikaci Nastavení svého zařízení.</translation>
 <translation id="7274013316676448362">Blokovaný web</translation>
-<translation id="72867290065237936">Klepnutím můžete přepínat mezi návrhy hesel a klávesnicí</translation>
 <translation id="729975465115245577">V zařízení není žádná aplikace, pomocí které by soubor s hesly bylo možné uložit.</translation>
 <translation id="7302081693174882195">Podrobnosti: Seřazeno podle množství uspořených dat</translation>
 <translation id="7333031090786104871">Předchozí web se stále přidává</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 fcc75ba..b71fc474 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -374,6 +374,7 @@
 
 Tryk længe på din søgeterm for at vælge den og tilpasse den. Du kan afgrænse din søgning ved at skyde panelet hele vejen op og trykke i søgefeltet.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Du finder de tilgængelige valgmuligheder øverst på skærmen</translation>
 <translation id="4062305924942672200">Juridiske oplysninger</translation>
 <translation id="4084682180776658562">Bogmærke</translation>
 <translation id="4084712963632273211">Fra <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />leveret af Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Åbn <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Brug adgangskode</translation>
 <translation id="4645575059429386691">Administreret af en af dine forældre</translation>
+<translation id="4660011489602794167">Vis tastatur</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bogmærker blev slettet</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> blev føjet til din startskærm</translation>
 <translation id="4684427112815847243">Synkroniser alt</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Tryk for at kopiere webadressen til denne app</translation>
 <translation id="5765780083710877561">Beskrivelse:</translation>
 <translation id="5777170031995031090">Kontrollér, hvordan Google bruger din browserhistorik til at personliggøre Søgning, annoncer og andre Google-tjenester.</translation>
-<translation id="5779929835642192302">Tilgængelige forslag</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> af <ph name="SPACE_AVAILABLE" /> i brug</translation>
 <translation id="5804241973901381774">Tilladelser</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{For 1 time siden}one{For # time siden}other{For # timer siden}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Blokeret fra nogle websites</translation>
 <translation id="7253272406652746122">Tilføj en Google-konto fra siden Konti i appen Indstillinger på din enhed.</translation>
 <translation id="7274013316676448362">Blokeret website</translation>
-<translation id="72867290065237936">Tryk for at skifte mellem adgangskodeforslag og tastatur</translation>
 <translation id="729975465115245577">Der er ikke nogen app på din enhed, hvor filen med adgangskoder kan gemmes.</translation>
 <translation id="7302081693174882195">Oplysninger: Sorteret efter mængden af sparede data</translation>
 <translation id="7333031090786104871">Det forrige website er stadig ved at blive tilføjet</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 521c4ea7..3e3db4ab 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -374,6 +374,7 @@
 
 Wenn Sie den Suchbegriff anpassen möchten, halten Sie den entsprechenden Begriff etwas länger gedrückt. Sie können Ihre Suche auch verfeinern, indem Sie das Feld ganz nach oben schieben und auf das Suchfeld tippen.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Optionen sind oben auf dem Bildschirm verfügbar</translation>
 <translation id="4062305924942672200">Rechtliche Hinweise</translation>
 <translation id="4084682180776658562">Lesezeichen</translation>
 <translation id="4084712963632273211">Von <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />bereitgestellt durch Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> öffnen</translation>
 <translation id="4634124774493850572">Passwort verwenden</translation>
 <translation id="4645575059429386691">Von deinen Eltern verwaltet</translation>
+<translation id="4660011489602794167">Tastatur anzeigen</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> Lesezeichen gelöscht</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> wurde Ihrem Startbildschirm hinzugefügt.</translation>
 <translation id="4684427112815847243">Alles synchronisieren</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Tippen, um die URL für diese App zu kopieren</translation>
 <translation id="5765780083710877561">Beschreibung:</translation>
 <translation id="5777170031995031090">Sie können festlegen, wie Google Ihren Browserverlauf nutzt, um die Suche, Werbung und andere Google-Dienste zu personalisieren.</translation>
-<translation id="5779929835642192302">Vorschläge verfügbar</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> von <ph name="SPACE_AVAILABLE" /> werden verwendet</translation>
 <translation id="5804241973901381774">Berechtigungen</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Vor # Stunde}other{Vor # Stunden}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Auf einigen Websites blockiert</translation>
 <translation id="7253272406652746122">Fügen Sie ein Google-Konto über die Seite "Konten" der App "Einstellungen" Ihres Geräts hinzu.</translation>
 <translation id="7274013316676448362">Blockierte Website</translation>
-<translation id="72867290065237936">Tippen, um zwischen Passwort-Vorschlägen und der Tastatur zu wechseln</translation>
 <translation id="729975465115245577">Auf Ihrem Gerät befindet sich keine App zum Speichern der Passwortdatei.</translation>
 <translation id="7302081693174882195">Details: Nach der Menge der gespeicherten Daten sortiert</translation>
 <translation id="7333031090786104871">Vorherige Website wird noch hinzugefügt</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 a8a4725d..a1529da 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -374,6 +374,7 @@
 
 Για να τροποποιήσετε τον όρο αναζήτησης, πατήστε παρατεταμένα για να τον επιλέξετε. Για να κάνετε την αναζήτησή σας πιο συγκεκριμένη, σύρετε το παράθυρο εντελώς προς τα επάνω και πατήστε το πλαίσιο αναζήτησης.</translation>
 <translation id="4056223980640387499">Σέπια</translation>
+<translation id="4060598801229743805">Διαθέσιμες επιλογές κοντά στην κορυφή της οθόνης</translation>
 <translation id="4062305924942672200">Νομικές πληροφορίες</translation>
 <translation id="4084682180776658562">Σελιδοδείκτης</translation>
 <translation id="4084712963632273211">Από <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />παρέχεται από την Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Ανοίξτε <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Χρήση κωδικού πρόσβασης</translation>
 <translation id="4645575059429386691">Διαχειρίζεται από τους γονείς σου</translation>
+<translation id="4660011489602794167">Εμφάνιση πληκτρολογίου</translation>
 <translation id="4663756553811254707">Διαγράφηκαν <ph name="NUMBER_OF_BOOKMARKS" /> σελιδοδείκτες</translation>
 <translation id="4665282149850138822">Ο ιστότοπος <ph name="NAME" /> προστέθηκε στην αρχική οθόνη σας</translation>
 <translation id="4684427112815847243">Συγχρονισμός όλων</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Πατήστε για αντιγραφή του URL για αυτήν την εφαρμογή</translation>
 <translation id="5765780083710877561">Περιγραφή:</translation>
 <translation id="5777170031995031090">Ελέγξτε τον τρόπο με τον οποίο η Google χρησιμοποιεί το ιστορικό περιήγησής σας για την εξατομίκευση της Αναζήτησης, των διαφημίσεων και άλλων υπηρεσιών Google.</translation>
-<translation id="5779929835642192302">Διαθέσιμες προτάσεις</translation>
 <translation id="5793665092639000975">Χρήση <ph name="SPACE_USED" /> από <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Άδειες</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Πριν από # ώρα}other{Πριν από # ώρες}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Αποκλεισμός από ορισμένους ιστοτόπους</translation>
 <translation id="7253272406652746122">Προσθέστε έναν Λογαριασμό Google από τη σελίδα "Λογαριασμοί" της εφαρμογής Ρυθμίσεις της συσκευής σας.</translation>
 <translation id="7274013316676448362">Αποκλεισμένος ιστότοπος</translation>
-<translation id="72867290065237936">Πατήστε για εναλλαγή μεταξύ προτάσεων για κωδικούς πρόσβασης και πληκτρολογίου</translation>
 <translation id="729975465115245577">Η συσκευή σας δεν διαθέτει κάποια εφαρμογή για την αποθήκευση του αρχείου κωδικών πρόσβασης.</translation>
 <translation id="7302081693174882195">Λεπτομέρειες: Ταξινομήθηκαν βάσει του όγκου των δεδομένων που αποθηκεύτηκαν</translation>
 <translation id="7333031090786104871">Η προσθήκη του προηγούμενου ιστοτόπου δεν έχει ολοκληρωθεί</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 7d1faf8..6ae8df8 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
@@ -24,6 +24,7 @@
 <translation id="1157102636231978136">Your browsing data and activity, synced to your Google account</translation>
 <translation id="116280672541001035">Used</translation>
 <translation id="1172593791219290334">Startup Page</translation>
+<translation id="1175310183703641346">Your bookmarks, history, passwords and more will no longer be synced to your Google account</translation>
 <translation id="1178581264944972037">Pause</translation>
 <translation id="1181037720776840403">Remove</translation>
 <translation id="1197267115302279827">Move bookmarks</translation>
@@ -48,6 +49,7 @@
 <translation id="129553762522093515">Recently closed</translation>
 <translation id="1326317727527857210">To get your tabs from your other devices, sign in to Chrome.</translation>
 <translation id="1332501820983677155">Google Chrome feature shortcuts</translation>
+<translation id="1360432990279830238">Sign out and turn off sync?</translation>
 <translation id="136248372334525878">Preload pages for faster loading and offline reading</translation>
 <translation id="1369915414381695676">Site <ph name="SITE_NAME" /> added</translation>
 <translation id="1373696734384179344">Insufficient memory to download the selected content.</translation>
@@ -159,6 +161,7 @@
 <translation id="2131665479022868825"><ph name="DATA" /> saved</translation>
 <translation id="213279576345780926">Closed <ph name="TAB_TITLE" /></translation>
 <translation id="2139186145475833000">Add to Home screen</translation>
+<translation id="2142289305367051020">Your favourite pages are here</translation>
 <translation id="2146738493024040262">Open Instant App</translation>
 <translation id="2148716181193084225">Today</translation>
 <translation id="2154484045852737596">Edit card</translation>
@@ -349,6 +352,7 @@
 <translation id="3822502789641063741">Clear site storage?</translation>
 <translation id="385051799172605136">Back</translation>
 <translation id="3859306556332390985">Seek forward</translation>
+<translation id="3868004864571585162">Cookies, media licences and site data</translation>
 <translation id="3894427358181296146">Add folder</translation>
 <translation id="3895926599014793903">Force enable zoom</translation>
 <translation id="3927692899758076493">Sans Serif</translation>
@@ -374,6 +378,7 @@
 
 To adjust your search term, long press to select. To refine your search, slide the panel all the way up and tap the search box.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Options available near the top of the screen</translation>
 <translation id="4062305924942672200">Legal information</translation>
 <translation id="4084682180776658562">Bookmark</translation>
 <translation id="4084712963632273211">From <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />delivered by Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +451,7 @@
 <translation id="4616150815774728855">Open <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Use password</translation>
 <translation id="4645575059429386691">Managed by your parent</translation>
+<translation id="4660011489602794167">Show keyboard</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bookmarks deleted</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> was added to your Home screen</translation>
 <translation id="4684427112815847243">Sync everything</translation>
@@ -603,7 +609,6 @@
 <translation id="5763514718066511291">Tap to copy the URL for this app</translation>
 <translation id="5765780083710877561">Description:</translation>
 <translation id="5777170031995031090">Control how Google uses your browsing history to personalise Search, ads and other Google services.</translation>
-<translation id="5779929835642192302">Suggestions available</translation>
 <translation id="5793665092639000975">Using <ph name="SPACE_USED" /> of <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Permissions</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# hour ago}other{# hours ago}}</translation>
@@ -795,7 +800,6 @@
 <translation id="7251326866581677552">Blocked from some sites</translation>
 <translation id="7253272406652746122">Add a Google account from the Accounts page in your device’s Settings app.</translation>
 <translation id="7274013316676448362">Blocked site</translation>
-<translation id="72867290065237936">Tap to toggle between password suggestions and keyboard</translation>
 <translation id="729975465115245577">Your device doesn’t have an app to store the passwords file.</translation>
 <translation id="7302081693174882195">Details: Sorted by amount of data saved</translation>
 <translation id="7333031090786104871">Still adding previous site</translation>
@@ -811,6 +815,7 @@
 <translation id="7413229368719586778">Start date <ph name="DATE" /></translation>
 <translation id="7423098979219808738">Ask first</translation>
 <translation id="7423538860840206698">Blocked from reading clipboard</translation>
+<translation id="7431991332293347422">Control how your browsing history is used to personalise Search and more</translation>
 <translation id="7437998757836447326">Sign out of Chrome</translation>
 <translation id="7444811645081526538">More categories</translation>
 <translation id="7445411102860286510">Allow sites to automatically play muted videos (recommended)</translation>
@@ -879,6 +884,7 @@
 <translation id="7963646190083259054">Vendor:</translation>
 <translation id="7981313251711023384">Preload pages for faster browsing and searching</translation>
 <translation id="79859296434321399">To view augmented reality content, install ARCore</translation>
+<translation id="7986741934819883144">Select a contact</translation>
 <translation id="7987073022710626672">Chrome Terms of Service</translation>
 <translation id="7987764905897278458">Get more Google smarts</translation>
 <translation id="7998918019931843664">Re-open closed tab</translation>
@@ -907,6 +913,7 @@
 <translation id="8109613176066109935">To get your bookmarks on all your devices, turn on sync</translation>
 <translation id="8116925261070264013">Muted</translation>
 <translation id="813082847718468539">View site information</translation>
+<translation id="8156139159503939589">What languages do you read?</translation>
 <translation id="8168435359814927499">Content</translation>
 <translation id="8186512483418048923"><ph name="FILES" /> files left</translation>
 <translation id="8190358571722158785">1 day left</translation>
@@ -919,6 +926,7 @@
 <translation id="8260126382462817229">Try signing in again</translation>
 <translation id="8261506727792406068">Delete</translation>
 <translation id="8266862848225348053">Download location</translation>
+<translation id="8274165955039650276">See downloads</translation>
 <translation id="8283853025636624853">Syncing to <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8310344678080805313">Standard tabs</translation>
 <translation id="8313455859591948645">Edit startup page</translation>
@@ -935,6 +943,7 @@
 <translation id="8441146129660941386">Seek backward</translation>
 <translation id="8445448999790540984">Can’t export passwords</translation>
 <translation id="8447861592752582886">Revoke device permission</translation>
+<translation id="8477071352266846533">Sync off for <ph name="SYNC_ACCOUNT_USER_NAME" /></translation>
 <translation id="8487700953926739672">Available offline</translation>
 <translation id="8489271220582375723">Open the history page</translation>
 <translation id="8493948351860045254">Free up space</translation>
@@ -972,6 +981,7 @@
 <translation id="8728487861892616501">By using this application, you agree to Chrome’s <ph name="BEGIN_LINK1" />Terms of Service<ph name="END_LINK1" /> and <ph name="BEGIN_LINK2" />Privacy Notice<ph name="END_LINK2" />, and the <ph name="BEGIN_LINK3" />Privacy Notice for Google Accounts Managed with Family Link<ph name="END_LINK3" />.</translation>
 <translation id="8730621377337864115">Done</translation>
 <translation id="8748850008226585750">Contents hidden</translation>
+<translation id="8751914237388039244">Select an image</translation>
 <translation id="8788968922598763114">Reopen the last closed tab</translation>
 <translation id="8812260976093120287">On some websites, you can pay with above supported payment apps on your device.</translation>
 <translation id="8816439037877937734"><ph name="APP_NAME" /> will open in Chrome. By continuing, you agree to Chrome's <ph name="BEGIN_LINK1" />Terms of Service<ph name="END_LINK1" /> and <ph name="BEGIN_LINK2" />Privacy Notice<ph name="END_LINK2" />, and the <ph name="BEGIN_LINK3" />Privacy Notice for Google Accounts Managed with Family Link<ph name="END_LINK3" />.</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 b95009a0..6a86729 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
@@ -249,6 +249,7 @@
 <translation id="2900528713135656174">Crear evento</translation>
 <translation id="2902702728133930130">Se produjo un error inesperado durante el inicio de Chrome.</translation>
 <translation id="290376772003165898">¿La página no está en <ph name="LANGUAGE" />?</translation>
+<translation id="2910701580606108292">Preguntar antes de permitir que los sitios reproduzcan contenido protegido</translation>
 <translation id="2913331724188855103">Permitir que todos los sitios guarden y lean datos de cookies (recomendado)</translation>
 <translation id="2932150158123903946">Almacenamiento de Google <ph name="APP_NAME" /></translation>
 <translation id="2943166482989655199">Para mejorar Chrome y su seguridad, envía información a Google sobre el sistema y el uso</translation>
@@ -373,6 +374,7 @@
 
 Para ajustar el término de búsqueda, mantén presionado el texto y selecciónalo. Para perfeccionar la búsqueda, desliza el panel hacia arriba y presiona el cuadro de búsqueda.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Opciones disponibles cerca de la parte superior de la pantalla</translation>
 <translation id="4062305924942672200">Información legal</translation>
 <translation id="4084682180776658562">Marcador</translation>
 <translation id="4084712963632273211">De <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />publicado por Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -445,6 +447,7 @@
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Usar contraseña</translation>
 <translation id="4645575059429386691">Administrado por tus padres</translation>
+<translation id="4660011489602794167">Mostrar teclado</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> favoritos eliminados</translation>
 <translation id="4665282149850138822">Se agregó <ph name="NAME" /> a la pantalla principal</translation>
 <translation id="4684427112815847243">Sincronizar todo</translation>
@@ -602,7 +605,6 @@
 <translation id="5763514718066511291">Presiona para copiar la URL para esta app</translation>
 <translation id="5765780083710877561">Descripción:</translation>
 <translation id="5777170031995031090">Controla la forma en que Google usa tu historial de navegación para personalizar Búsqueda, Ads y otros servicios de Google.</translation>
-<translation id="5779929835642192302">Sugerencias disponibles</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> de <ph name="SPACE_AVAILABLE" /> en uso</translation>
 <translation id="5804241973901381774">Permisos</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Hace # hora}other{Hace # horas}}</translation>
@@ -667,6 +669,7 @@
 <translation id="6277522088822131679">Se produjo un error al imprimir la página. Vuelve a intentarlo.</translation>
 <translation id="6295158916970320988">Todos los sitios</translation>
 <translation id="629730747756840877">Cuenta</translation>
+<translation id="6303969859164067831">Salir y desactivar la sincronización</translation>
 <translation id="6320088164292336938">Vibrar</translation>
 <translation id="6324034347079777476">Sincronización del sistema Android inhabilitada</translation>
 <translation id="6333140779060797560">Compartir mediante <ph name="APPLICATION" /></translation>
@@ -793,7 +796,6 @@
 <translation id="7251326866581677552">Bloqueados de algunos sitios</translation>
 <translation id="7253272406652746122">Agrega una cuenta de Google desde la página Cuentas en la app de Configuración del dispositivo.</translation>
 <translation id="7274013316676448362">Sitio bloqueado</translation>
-<translation id="72867290065237936">Presiona este botón para cambiar entre las sugerencias de contraseña y el teclado</translation>
 <translation id="729975465115245577">Tu dispositivo no tiene una app que pueda almacenar el archivo de contraseñas.</translation>
 <translation id="7302081693174882195">Detalles: Ordenados por cantidad de datos ahorrados</translation>
 <translation id="7333031090786104871">Aún se está agregando el sitio anterior</translation>
@@ -829,6 +831,7 @@
 <translation id="7542481630195938534">No se pueden obtener sugerencias</translation>
 <translation id="7562080006725997899">Borrando datos de navegación</translation>
 <translation id="756809126120519699">Datos de Chrome borrados</translation>
+<translation id="757524316907819857">Impedir que los sitios reproduzcan contenido protegido</translation>
 <translation id="7589445247086920869">Bloquear el motor de búsqueda actual</translation>
 <translation id="7593557518625677601">Para iniciar la Sincronización de Chrome, abre la configuración de Android y vuelve a habilitar la sincronización del sistema Android</translation>
 <translation id="7596558890252710462">Sistema operativo</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 c17bc28..b09e1203 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -199,7 +199,7 @@
 <translation id="2436117022029368436">Se comunican con Google para mejorar la navegación y Chrome</translation>
 <translation id="2440823041667407902">Acceso a la ubicación</translation>
 <translation id="2450083983707403292">¿Quieres empezar a descargar <ph name="FILE_NAME" /> de nuevo?</translation>
-<translation id="2476578072172137802">Configuración del sitio</translation>
+<translation id="2476578072172137802">Configuración del sitio web</translation>
 <translation id="2482878487686419369">Notificaciones</translation>
 <translation id="2496180316473517155">Historial de navegación</translation>
 <translation id="2498359688066513246">Ayuda y sugerencias</translation>
@@ -374,6 +374,7 @@
 
 Para ajustar el término de búsqueda, mantén pulsado el texto para seleccionarlo. Para restringir la búsqueda, desliza el panel hasta arriba y toca el cuadro de búsqueda.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Opciones disponibles junto a la parte superior de la pantalla</translation>
 <translation id="4062305924942672200">Información legal</translation>
 <translation id="4084682180776658562">Marcador</translation>
 <translation id="4084712963632273211">De <ph name="PUBLISHER_ORIGIN" /> (<ph name="BEGIN_DEEMPHASIZED" />ofrecida por Google<ph name="END_DEEMPHASIZED" />)</translation>
@@ -388,7 +389,7 @@
 <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d marcador}other{%1$d marcadores}}</translation>
 <translation id="4149994727733219643">Vista simplificada de páginas web</translation>
 <translation id="4159800535322890630">No permitir que los sitios web accedan a tus sensores</translation>
-<translation id="4165986682804962316">Configuración de sitios web</translation>
+<translation id="4165986682804962316">Configuración del sitio web</translation>
 <translation id="4170011742729630528">El servicio no está disponible. Vuelve a intentarlo más tarde.</translation>
 <translation id="4179980317383591987">Usados: <ph name="AMOUNT" /></translation>
 <translation id="4181841719683918333">Idiomas</translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utilizar contraseña</translation>
 <translation id="4645575059429386691">Administrado por uno de tus padres</translation>
+<translation id="4660011489602794167">Mostrar teclado</translation>
 <translation id="4663756553811254707">Se han eliminado <ph name="NUMBER_OF_BOOKMARKS" /> marcadores</translation>
 <translation id="4665282149850138822">Se ha añadido <ph name="NAME" /> a la pantalla de inicio</translation>
 <translation id="4684427112815847243">Sincronizar todo</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Toca para copiar la URL de esta aplicación</translation>
 <translation id="5765780083710877561">Descripción:</translation>
 <translation id="5777170031995031090">Controla cómo utiliza Google tu historial de navegación para personalizar la Búsqueda, los anuncios y otros servicios de Google.</translation>
-<translation id="5779929835642192302">Sugerencias disponibles</translation>
 <translation id="5793665092639000975">Usando <ph name="SPACE_USED" /> de <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Permisos</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Hace # hora}other{Hace # horas}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Bloqueados en algunos sitios web</translation>
 <translation id="7253272406652746122">Añade una cuenta de Google desde la sección Cuentas de la aplicación de ajustes de tu dispositivo.</translation>
 <translation id="7274013316676448362">Sitio web bloqueado</translation>
-<translation id="72867290065237936">Toca para alternar entre las sugerencias de contraseña y el teclado</translation>
 <translation id="729975465115245577">Tu dispositivo no tiene ninguna aplicación para almacenar el archivo de contraseñas.</translation>
 <translation id="7302081693174882195">Detalles: ordenados por cantidad de datos ahorrados</translation>
 <translation id="7333031090786104871">Aún se está añadiendo el sitio web anterior</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 9d1cd554..25f1a2ab 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -374,6 +374,7 @@
 
 عبارت جستجو را با فشار طولانی انتخاب و تنظیم کنید. برای تصحیح جستجویتان، پانل را به‌طور کامل به بالا بلغزانید و روی کادر جستجو ضربه بزنید.</translation>
 <translation id="4056223980640387499">سپیا</translation>
+<translation id="4060598801229743805">گزینه‌هایی در نزدیکی بالای صفحه دردسترس هستند</translation>
 <translation id="4062305924942672200">اطلاعات حقوقی</translation>
 <translation id="4084682180776658562">نشانک</translation>
 <translation id="4084712963632273211">‏از<ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />توسط Google ارائه می‌شود<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">باز کردن <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">استفاده از گذرواژه</translation>
 <translation id="4645575059429386691">مدیریت شده توسط والدین شما</translation>
+<translation id="4660011489602794167">نمایش صفحه‌کلید</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> نشانک حذف شد</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> به صفحه اصلی شما اضافه شد</translation>
 <translation id="4684427112815847243">همگام‌سازی همه</translation>
@@ -602,7 +604,6 @@
 <translation id="5763514718066511291">برای کپی کردن نشانی وب این برنامه ضربه بزنید</translation>
 <translation id="5765780083710877561">توضیح:</translation>
 <translation id="5777170031995031090">‏نحوه استفاده Google را از سابقه مرورتان برای شخصی‌سازی جستجو، آگهی‌ها و سایر سرویس‌های Google کنترل کنید.</translation>
-<translation id="5779929835642192302">پیشنهادهایی در دسترس هستند</translation>
 <translation id="5793665092639000975">درحال استفاده از <ph name="SPACE_USED" /> از <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">مجوزها</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{۱ ساعت قبل}one{# ساعت قبل}other{# ساعت قبل}}</translation>
@@ -794,7 +795,6 @@
 <translation id="7251326866581677552">در برخی از سایت‌ها مسدود شد</translation>
 <translation id="7253272406652746122">‏از صفحه «حساب‌ها» در برنامه «تنظیمات» دستگاه، یک حساب Google اضافه کنید.</translation>
 <translation id="7274013316676448362">سایت مسدودشده</translation>
-<translation id="72867290065237936">برای جابه‌جایی بین پیشنهاد گذرواژه و صفحه‌کلید، ضربه بزنید</translation>
 <translation id="729975465115245577">دستگاه شما برنامه‌ای برای ذخیره فایل گذرواژه‌ها ندارد.</translation>
 <translation id="7302081693174882195">جزئیات: مرتب‌شده براساس مقدار داده صرفه‌جویی‌شده</translation>
 <translation id="7333031090786104871">همچنان درحال افزودن سایت قبلی</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 c408b04..3ab1ce0 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -374,6 +374,7 @@
 
 Muokkaa hakutermiä valitsemalla se pitkällä painalluksella. Tarkenna hakua liu'uttamalla paneeli yläasentoon ja napauttamalla hakukenttää.</translation>
 <translation id="4056223980640387499">Seepia</translation>
+<translation id="4060598801229743805">Toimintoja on käytettävissä näytön yläosassa.</translation>
 <translation id="4062305924942672200">Oikeudelliset tiedot</translation>
 <translation id="4084682180776658562">Kirjanmerkki</translation>
 <translation id="4084712963632273211">Lähde: <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />Googlen toimittama<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Avaa <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Käytä salasanaa</translation>
 <translation id="4645575059429386691">Vanhempasi hallinnoima</translation>
+<translation id="4660011489602794167">Näytä näppäimistö</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> kirjanmerkkiä poistettiin</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> lisättiin aloitusnäytölle.</translation>
 <translation id="4684427112815847243">Synkronoi kaikki</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Kosketa kopioidaksesi tämän sovelluksen URL-osoite</translation>
 <translation id="5765780083710877561">Kuvaus:</translation>
 <translation id="5777170031995031090">Hallinnoi tapaa, jolla Google käyttää selaushistoriaasi haun, mainosten ja muiden Googlen palveluiden muokkaamiseen.</translation>
-<translation id="5779929835642192302">Ehdotuksia on saatavilla.</translation>
 <translation id="5793665092639000975">Käytössä <ph name="SPACE_USED" /> / <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Käyttöluvat</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# tunti sitten}other{# tuntia sitten}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Joidenkin sivustojen mainokset estetty</translation>
 <translation id="7253272406652746122">Lisää Google-tili laitteen Asetukset-sovelluksen Tilit-sivulla.</translation>
 <translation id="7274013316676448362">Estetty sivusto</translation>
-<translation id="72867290065237936">Vaihtele salasanaehdotusten ja näppäimistön välillä napauttamalla</translation>
 <translation id="729975465115245577">Laitteella ei ole sovellusta, johon salasanatiedoston voisi tallentaa.</translation>
 <translation id="7302081693174882195">Lisätiedot: Lajiteltu säästetyn datan mukaan</translation>
 <translation id="7333031090786104871">Edellisen sivuston lisääminen kesken</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 a46cedd..ef8331c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -374,6 +374,7 @@
 
 Para isaayos ang iyong termino para sa paghahanap, pumindot nang matagal para pumili. Para pinuhin ang iyong paghahanap, i-slide ang panel hanggang sa pinakaitaas at i-tap ang box para sa paghahanap.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Available ang mga opsyon malapit sa bandang itaas ng screen</translation>
 <translation id="4062305924942672200">Impormasyong legal</translation>
 <translation id="4084682180776658562">Bookmark</translation>
 <translation id="4084712963632273211">Mula sa <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />ihinatid ng Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Buksan ang <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Gamitin ang password</translation>
 <translation id="4645575059429386691">Pinamamahalaan ng iyong magulang</translation>
+<translation id="4660011489602794167">Ipakita ang keyboard</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> (na) bookmark ang na-delete</translation>
 <translation id="4665282149850138822">Idinagdag ang <ph name="NAME" /> sa iyong Home screen</translation>
 <translation id="4684427112815847243">I-sync lahat</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">I-tap upang kopyahin ang URL para sa app na ito</translation>
 <translation id="5765780083710877561">Paglalarawan:</translation>
 <translation id="5777170031995031090">Kontrolin kung paano ginagamit ng Google ang iyong history ng pagba-browse upang i-personalize ang Search, mga ad at iba pang mga serbisyo ng Google.</translation>
-<translation id="5779929835642192302">May available na mga suhestyon</translation>
 <translation id="5793665092639000975">Gumagamit ng <ph name="SPACE_USED" /> ng <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Mga Pahintulot</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# oras ang nakalipas}one{# oras ang nakalipas}other{# na oras ang nakalipas}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Naka-block sa ilang site</translation>
 <translation id="7253272406652746122">Magdagdag ng Google Account mula sa page na Mga Account sa app na Mga Setting ng iyong device.</translation>
 <translation id="7274013316676448362">Naka-block na site</translation>
-<translation id="72867290065237936">I-tap para mag-toggle sa pagitan ng mga suhestyon ng password at keyboard</translation>
 <translation id="729975465115245577">Walang app sa iyong device upang ma-store ang file ng mga password.</translation>
 <translation id="7302081693174882195">Mga detalye: Pinagbukud-bukod ayon sa laki ng natipid na data</translation>
 <translation id="7333031090786104871">Nagdaragdag pa rin ng nakaraang site</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 e7ba532..22f75ad 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -374,6 +374,7 @@
 
 Pour modifier le terme de recherche, appuyez dessus de manière prolongée afin de le sélectionner. Pour affiner la recherche, faites glisser le panneau jusqu'en haut et appuyez sur le champ de recherche.</translation>
 <translation id="4056223980640387499">Sépia</translation>
+<translation id="4060598801229743805">Options disponibles à proximité du haut de l'écran</translation>
 <translation id="4062305924942672200">Informations légales</translation>
 <translation id="4084682180776658562">Favori</translation>
 <translation id="4084712963632273211">De <ph name="PUBLISHER_ORIGIN" />, <ph name="BEGIN_DEEMPHASIZED" />proposé par Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Ouvrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utiliser le mot de passe</translation>
 <translation id="4645575059429386691">Géré par ton papa/ta maman</translation>
+<translation id="4660011489602794167">Afficher le clavier</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> favoris ont été supprimés.</translation>
 <translation id="4665282149850138822">Le site "<ph name="NAME" />" a bien été ajouté à votre écran d'accueil.</translation>
 <translation id="4684427112815847243">Tout synchroniser</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Appuyez pour copier l'URL pour cette application</translation>
 <translation id="5765780083710877561">Description :</translation>
 <translation id="5777170031995031090">Contrôlez la façon dont Google utilise votre historique de navigation pour personnaliser la recherche, les annonces et d'autres services Google.</translation>
-<translation id="5779929835642192302">Suggestions disponibles</translation>
 <translation id="5793665092639000975">Utilisation de <ph name="SPACE_USED" /> sur <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Autorisations</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Il y a # heure}one{Il y a # heure}other{Il y a # heures}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Bloqué sur certains sites</translation>
 <translation id="7253272406652746122">Ajoutez un compte Google depuis la page "Comptes" dans l'application "Paramètres" de votre appareil.</translation>
 <translation id="7274013316676448362">Site bloqué</translation>
-<translation id="72867290065237936">Appuyez pour basculer entre les suggestions de mots de passe et le clavier</translation>
 <translation id="729975465115245577">Aucune application n'est installée sur votre appareil pour stocker le fichier de mots de passe.</translation>
 <translation id="7302081693174882195">Détails : tri effectué par volume de données enregistrées</translation>
 <translation id="7333031090786104871">L'ajout du site précédent est toujours en cours</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 807a2ca..afd76d7f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -374,6 +374,7 @@
 
 अपने खोज के शब्द को एडजस्‍ट करने के लिए उसे चुनें. चुनने के लिए उसे देर तक दबाकर रखें. अपनी खोज को बेहतर बनाने के लिए, पैनल को सीधे ऊपर स्‍लाइड करें और 'खोज बॉक्‍स' पर टैप करें.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">स्क्रीन के शीर्ष भाग में मौजूद विकल्प</translation>
 <translation id="4062305924942672200">कानूनी जानकारी</translation>
 <translation id="4084682180776658562">बुकमार्क</translation>
 <translation id="4084712963632273211">प्रकाशक: <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />Google की ओर से डिलीवर किया गया<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> को खोलें</translation>
 <translation id="4634124774493850572">पासवर्ड का इस्तेमाल करें</translation>
 <translation id="4645575059429386691">आपके अभिभावक द्वारा प्रबंधित</translation>
+<translation id="4660011489602794167">कीबोर्ड दिखाएं</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> बुकमार्क का पता लगा</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> को आपकी होम स्क्रीन में जोड़ा गया था</translation>
 <translation id="4684427112815847243">सब कुछ समन्‍वयित करें</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">इस ऐप्लिकेशन का यूआरएल कॉपी करने के लिए टैप करें</translation>
 <translation id="5765780083710877561">वर्णन:</translation>
 <translation id="5777170031995031090">नियंत्रित करें कि खोज, विज्ञापन और अन्य Google सेवाओं को वैयक्तिकृत करने के लिए Google आपके ब्राउज़िंग इतिहास का उपयोग कैसे करता है.</translation>
-<translation id="5779929835642192302">सुझाव उपलब्ध हैं</translation>
 <translation id="5793665092639000975"><ph name="SPACE_AVAILABLE" /> में से <ph name="SPACE_USED" /> का इस्तेमाल किया जा रहा है</translation>
 <translation id="5804241973901381774">अनुमतियां</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# घंटा पहले}one{# घंटे पहले}other{# घंटे पहले}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">कुछ साइटों से ब्लॉक है</translation>
 <translation id="7253272406652746122">अपने डिवाइस के सेटिंग ऐप्लिकेशन में खाते पेज से कोई Google खाता जोड़ें.</translation>
 <translation id="7274013316676448362">अवरोधित साइट</translation>
-<translation id="72867290065237936">पासवर्ड सुझावों और कीबोर्ड के बीच टॉगल करने के लिए टैप करें</translation>
 <translation id="729975465115245577">आपके डिवाइस में पासवर्ड फ़ाइल को संग्रहित करने वाला कोई ऐप्लिकेशन नहीं है.</translation>
 <translation id="7302081693174882195">जानकारी: बचाए गए डेटा की मात्रा के अनुसार क्रम से लगाया गया</translation>
 <translation id="7333031090786104871">पिछली साइट अभी भी जोड़ी जा रही है</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 f8aca13..1bb25311 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -374,6 +374,7 @@
 
 Da biste prilagodili pojam za pretraživanje, odaberite ga tako što ćete ga dugo pritisnuti. Da biste precizirali pretraživanje, kliznite ploču prema gore do vrha i dodirnite okvir za pretraživanje.</translation>
 <translation id="4056223980640387499">Sepija</translation>
+<translation id="4060598801229743805">Opcije su dostupne pri vrhu zaslona</translation>
 <translation id="4062305924942672200">Pravne informacije</translation>
 <translation id="4084682180776658562">Oznaka</translation>
 <translation id="4084712963632273211">Objavio <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />omogućio Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Otvori <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Upotrijebi zaporku</translation>
 <translation id="4645575059429386691">Upravlja tvoj roditelj</translation>
+<translation id="4660011489602794167">Prikaži tipkovnicu</translation>
 <translation id="4663756553811254707">Oznake su izbrisane (<ph name="NUMBER_OF_BOOKMARKS" />)</translation>
 <translation id="4665282149850138822">Web-lokacija <ph name="NAME" /> dodana je na početni zaslon</translation>
 <translation id="4684427112815847243">Sinkroniziraj sve</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Dodirnite da biste kopirali URL za tu aplikaciju</translation>
 <translation id="5765780083710877561">Opis:</translation>
 <translation id="5777170031995031090">Upravljajte načinom na koji Google upotrebljava vašu povijest pregledavanja za prilagodbu Pretraživanja, oglasa i drugih Googleovih usluga.</translation>
-<translation id="5779929835642192302">Dostupni su prijedlozi</translation>
 <translation id="5793665092639000975">Upotrebljava se <ph name="SPACE_USED" /> od <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Dozvoljeno</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{prije # sata}one{prije # sata}few{prije # sata}other{prije # sati}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Blokirano na nekim web-lokacijama</translation>
 <translation id="7253272406652746122">Dodajte Google račun putem stranice Računi u aplikaciji Postavke na uređaju.</translation>
 <translation id="7274013316676448362">Blokirana web-lokacija</translation>
-<translation id="72867290065237936">Dodirnite za prebacivanje između prijedloga zaporke i tipkovnice</translation>
 <translation id="729975465115245577">Vaš uređaj nema aplikaciju za spremanje datoteke zaporki.</translation>
 <translation id="7302081693174882195">Pojedinosti: poredano prema količini ušteđenih podataka</translation>
 <translation id="7333031090786104871">I dalje se dodaje prethodna web-lokacija</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 177b4d5..b716c35 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -374,6 +374,7 @@
 
 A keresési kifejezés módosításához hosszú nyomva tartással hajthat végre kiválasztást. A keresés finomításához csúsztassa a panelt teljesen fel, majd érintse meg a keresőmezőt.</translation>
 <translation id="4056223980640387499">Szépia</translation>
+<translation id="4060598801229743805">A lehetőségek a képernyő tetején találhatók</translation>
 <translation id="4062305924942672200">Jogi információk</translation>
 <translation id="4084682180776658562">Könyvjelző</translation>
 <translation id="4084712963632273211">A következőtől: <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />megjelenítette a Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> megnyitása</translation>
 <translation id="4634124774493850572">Jelszó használata</translation>
 <translation id="4645575059429386691">A szülő kezeli</translation>
+<translation id="4660011489602794167">Billentyűzet megjelenítése</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> könyvjelző törölve</translation>
 <translation id="4665282149850138822">A(z) <ph name="NAME" /> felkerült a kezdőképernyőre</translation>
 <translation id="4684427112815847243">Minden szinkronizálása</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Koppintson az alkalmazás URL-jének másolásához</translation>
 <translation id="5765780083710877561">Leírás:</translation>
 <translation id="5777170031995031090">Annak szabályozása, hogy a Google hogyan használhatja fel az Ön böngészési előzményeit a Keresés, a hirdetések és más Google-szolgáltatások személyre szabására.</translation>
-<translation id="5779929835642192302">Javaslatok állnak rendelkezésre</translation>
 <translation id="5793665092639000975"><ph name="SPACE_AVAILABLE" />/<ph name="SPACE_USED" /> használatban</translation>
 <translation id="5804241973901381774">Engedélyek</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# órája}other{# órája}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Letiltva egyes webhelyeknél</translation>
 <translation id="7253272406652746122">Adjon hozzá Google-fiókot az eszköz Beállítások alkalmazásának Fiókok oldalán.</translation>
 <translation id="7274013316676448362">Letiltott oldal</translation>
-<translation id="72867290065237936">Koppintson a jelszójavaslatok és a billentyűzet közti váltáshoz</translation>
 <translation id="729975465115245577">Az eszközön nincs olyan alkalmazás, amely tárolni tudja a jelszavakat tartalmazó fájlt.</translation>
 <translation id="7302081693174882195">Részletek: Megtakarított adatmennyiség szerinti rendezés</translation>
 <translation id="7333031090786104871">Az előző webhely hozzáadása még folyamatban van</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 d283cedb1..9464a60 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -96,7 +96,7 @@
 <translation id="1671236975893690980">Proses download tertunda...</translation>
 <translation id="1672586136351118594">Jangan tampilkan lagi</translation>
 <translation id="1709438864123551175">Penghemat Kuota Internet</translation>
-<translation id="1718835860248848330">Jam terakhir</translation>
+<translation id="1718835860248848330">1 jam terakhir</translation>
 <translation id="1729516292547892356">Untuk melihat konten realitas maya, update Layanan Google VR</translation>
 <translation id="1733116627827457509"><ph name="FILE_SIZE" /> - Diupdate <ph name="TIME_SINCE_UPDATE" /></translation>
 <translation id="1736419249208073774">Jelajahi</translation>
@@ -374,6 +374,7 @@
 
 Untuk menyesuaikan istilah penelusuran, tekan lama untuk memilih. Untuk mempersempit penelusuran, geser panel ke atas, lalu tap kotak penelusuran.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Opsi yang tersedia di dekat bagian atas layar</translation>
 <translation id="4062305924942672200">Informasi hukum</translation>
 <translation id="4084682180776658562">Bookmark</translation>
 <translation id="4084712963632273211">Dari <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />dikirim oleh Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Buka <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Gunakan sandi</translation>
 <translation id="4645575059429386691">Dikelola oleh orang tua Anda</translation>
+<translation id="4660011489602794167">Tampilkan keyboard</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bookmark dihapus</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> telah ditambahkan ke layar Utama</translation>
 <translation id="4684427112815847243">Sinkronkan semua</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Tap untuk menyalin URL aplikasi ini</translation>
 <translation id="5765780083710877561">Deskripsi:</translation>
 <translation id="5777170031995031090">Kontrol cara Google menggunakan histori penjelajahan Anda untuk mempersonalisasi Penelusuran, iklan, dan layanan Google lainnya.</translation>
-<translation id="5779929835642192302">Saran yang tersedia</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> terpakai dari <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Izin</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# jam yang lalu}other{# jam yang lalu}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Diblokir dari beberapa situs</translation>
 <translation id="7253272406652746122">Tambahkan Akun Google dari halaman Akun di aplikasi Setelan pada perangkat.</translation>
 <translation id="7274013316676448362">Situs yang diblokir</translation>
-<translation id="72867290065237936">Tap untuk beralih antara saran sandi dan keyboard</translation>
 <translation id="729975465115245577">Perangkat Anda tidak memiliki aplikasi untuk menyimpan file sandi.</translation>
 <translation id="7302081693174882195">Detail: Diurutkan menurut jumlah kuota yang dihemat</translation>
 <translation id="7333031090786104871">Masih menambahkan situs sebelumnya</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 c274d92..817cf10 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -374,6 +374,7 @@
 
 Per modificare il termine di ricerca, premi a lungo per selezionarlo. Per perfezionare la ricerca, fai scorrere completamente il riquadro verso l'alto e tocca la casella di ricerca.</translation>
 <translation id="4056223980640387499">Seppia</translation>
+<translation id="4060598801229743805">Opzioni disponibili nella parte superiore dello schermo</translation>
 <translation id="4062305924942672200">Informazioni legali</translation>
 <translation id="4084682180776658562">Aggiungi ai Preferiti</translation>
 <translation id="4084712963632273211">Di <ph name="PUBLISHER_ORIGIN" /> - <ph name="BEGIN_DEEMPHASIZED" />pubblicata da Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Apri <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utilizza password</translation>
 <translation id="4645575059429386691">Gestito da un genitore</translation>
+<translation id="4660011489602794167">Mostra tastiera</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> Preferiti eliminati</translation>
 <translation id="4665282149850138822">Il sito <ph name="NAME" /> è stato aggiunto alla schermata Home</translation>
 <translation id="4684427112815847243">Sincronizza tutto</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Tocca per copiare l'URL di quest'app</translation>
 <translation id="5765780083710877561">Descrizione:</translation>
 <translation id="5777170031995031090">Controlla il modo in cui Google utilizza la tua cronologia di navigazione per personalizzare la Ricerca, gli annunci e altri servizi Google.</translation>
-<translation id="5779929835642192302">Suggerimenti disponibili</translation>
 <translation id="5793665092639000975">Spazio utilizzato: <ph name="SPACE_USED" /> di <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Autorizzazioni</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# ora fa}other{# ore fa}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Bloccati su alcuni siti</translation>
 <translation id="7253272406652746122">Aggiungi un account Google dalla pagina Account nell'app Impostazioni del dispositivo.</translation>
 <translation id="7274013316676448362">Sito bloccato</translation>
-<translation id="72867290065237936">Tocca per spostarti tra i suggerimenti delle password e la tastiera</translation>
 <translation id="729975465115245577">Il tuo dispositivo non ha un'app per archiviare il file di password.</translation>
 <translation id="7302081693174882195">Dettagli: ordinati per quantità di dati salvati</translation>
 <translation id="7333031090786104871">Aggiunta del sito precedente ancora in corso</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 1f49d04..dfb2b46 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -374,6 +374,7 @@
 
 כדי לשנות את מונח החיפוש שלך, צריך לגעת נגיעה ממושכת במונח כדי לבחור בו. כדי לצמצם את החיפוש, מסיטים את החלונית עד למעלה ומקישים על תיבת החיפוש.</translation>
 <translation id="4056223980640387499">חום-ספיה</translation>
+<translation id="4060598801229743805">האפשרויות זמינות בחלק העליון של המסך</translation>
 <translation id="4062305924942672200">מידע משפטי</translation>
 <translation id="4084682180776658562">סימניה</translation>
 <translation id="4084712963632273211">‏מאת <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />מוגש על-ידי Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">פתיחה של <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">שימוש בסיסמה</translation>
 <translation id="4645575059429386691">מנוהל על-ידי ההורה שלך</translation>
+<translation id="4660011489602794167">הצגת מקלדת</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> סימניות נמחקו</translation>
 <translation id="4665282149850138822">האתר <ph name="NAME" /> נוסף למסך דף הבית שלך</translation>
 <translation id="4684427112815847243">סנכרן הכל</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">הקשה מעתיקה את כתובת האתר של האפליקציה הזו</translation>
 <translation id="5765780083710877561">תיאור:</translation>
 <translation id="5777170031995031090">‏שלוט באופן שבו חברת Google משתמשת בהיסטוריית הגלישה לצורך התאמה אישית של חיפוש Google, מודעות Google ושירותי Google אחרים.</translation>
-<translation id="5779929835642192302">הצעות זמינות</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> מתוך <ph name="SPACE_AVAILABLE" /> נמצאים בשימוש</translation>
 <translation id="5804241973901381774">הרשאות</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{לפני שעה}two{לפני שעתיים}many{לפני # שעות}other{לפני # שעות}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">חסומות באתרים מסוימים</translation>
 <translation id="7253272406652746122">‏הוסף חשבון Google מהדף 'חשבונות' שבאפליקציית ההגדרות של המכשיר.</translation>
 <translation id="7274013316676448362">אתר חסום</translation>
-<translation id="72867290065237936">הקשה מעבירה אותך בין ההצעות לסיסמה לבין המקלדת</translation>
 <translation id="729975465115245577">אין במכשיר אפליקציה לאחסון קובץ הסיסמאות.</translation>
 <translation id="7302081693174882195">פרטים: מיון לפי נפח הנתונים שנחסכו</translation>
 <translation id="7333031090786104871">עדיין מוסיף את האתר הקודם</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 823f849..698de52d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -374,6 +374,7 @@
 
 検索用語を押し続けるとその用語が選択され、選択範囲を調整できます。検索結果を絞り込むには、パネルを上にスライドして検索ボックスをタップします。</translation>
 <translation id="4056223980640387499">セピア</translation>
+<translation id="4060598801229743805">画面の上部にあるオプション</translation>
 <translation id="4062305924942672200">法的情報</translation>
 <translation id="4084682180776658562">ブックマーク</translation>
 <translation id="4084712963632273211"><ph name="PUBLISHER_ORIGIN" /> のコンテンツ - <ph name="BEGIN_DEEMPHASIZED" />Google により配信<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> を起動</translation>
 <translation id="4634124774493850572">パスワードを使用</translation>
 <translation id="4645575059429386691">保護者により管理されています</translation>
+<translation id="4660011489602794167">キーボードを表示</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> 件のブックマークを削除しました</translation>
 <translation id="4665282149850138822">「<ph name="NAME" />」がホーム画面に追加されました</translation>
 <translation id="4684427112815847243">すべてを同期する</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">タップすると、このアプリの URL がコピーされます</translation>
 <translation id="5765780083710877561">説明:</translation>
 <translation id="5777170031995031090">検索、広告、その他の Google サービスをカスタマイズするために Google が閲覧履歴をどのような方法で使用するかを設定します。</translation>
-<translation id="5779929835642192302">候補があります</translation>
 <translation id="5793665092639000975"><ph name="SPACE_AVAILABLE" /> 中 <ph name="SPACE_USED" /> を使用中</translation>
 <translation id="5804241973901381774">権限</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# 時間前}other{# 時間前}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">一部のサイトでブロックされています</translation>
 <translation id="7253272406652746122">端末の設定アプリのアカウント ページで Google アカウントを追加してください。</translation>
 <translation id="7274013316676448362">ブロック中のサイト</translation>
-<translation id="72867290065237936">タップするとパスワード候補表示とキーボードが切り替わります</translation>
 <translation id="729975465115245577">お使いの端末にはパスワード ファイルを保存するためのアプリがインストールされていません。</translation>
 <translation id="7302081693174882195">詳細: データ節約量の順</translation>
 <translation id="7333031090786104871">前のサイトを追加中です</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 7d38a96..8a87fc5 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -374,6 +374,7 @@
 
 검색어를 조정하려면 길게 눌러 선택하세요. 더욱 상세히 검색하려면 패널을 위로 끝까지 슬라이드한 다음 검색창을 탭하세요.</translation>
 <translation id="4056223980640387499">세피아</translation>
+<translation id="4060598801229743805">화면 상단에서 옵션을 선택할 수 있습니다.</translation>
 <translation id="4062305924942672200">법적 정보</translation>
 <translation id="4084682180776658562">북마크</translation>
 <translation id="4084712963632273211">발신자: <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />Google 제공<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> 열기</translation>
 <translation id="4634124774493850572">비밀번호 사용</translation>
 <translation id="4645575059429386691">부모님이 관리합니다.</translation>
+<translation id="4660011489602794167">키보드 표시</translation>
 <translation id="4663756553811254707">북마크 <ph name="NUMBER_OF_BOOKMARKS" />개 삭제됨</translation>
 <translation id="4665282149850138822"><ph name="NAME" />이(가) 홈 화면에 추가됨</translation>
 <translation id="4684427112815847243">모두 동기화</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">탭하여 이 앱의 URL 복사하기</translation>
 <translation id="5765780083710877561">설명:</translation>
 <translation id="5777170031995031090">Google이 검색, 광고 및 다른 Google 서비스를 맞춤설정하기 위하여 내 인터넷 사용 기록을 사용하는 방법을 제어하세요.</translation>
-<translation id="5779929835642192302">제안 사용 가능</translation>
 <translation id="5793665092639000975"><ph name="SPACE_AVAILABLE" /> 중 <ph name="SPACE_USED" /> 사용 중</translation>
 <translation id="5804241973901381774">권한</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{#시간 전}other{#시간 전}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">일부 사이트에서 차단됨</translation>
 <translation id="7253272406652746122">기기 설정 앱의 계정 페이지에서 Google 계정을 추가하세요.</translation>
 <translation id="7274013316676448362">차단된 사이트</translation>
-<translation id="72867290065237936">탭하여 비밀번호 추천과 키보드 간에 전환하세요.</translation>
 <translation id="729975465115245577">기기에 비밀번호 파일을 저장할 수 있는 앱이 없습니다.</translation>
 <translation id="7302081693174882195">세부정보: 저장된 데이터 양에 따라 정렬</translation>
 <translation id="7333031090786104871">아직 이전 사이트 추가 중</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 b11222e..452140d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -374,6 +374,7 @@
 
 Jei norite koreguoti paieškos terminą, paspauskite ir laikykite, kad jį pasirinktumėte. Kad patikslintumėte paiešką, slinkite skydeliu į viršų ir palieskite paieškos laukelį.</translation>
 <translation id="4056223980640387499">Sepija</translation>
+<translation id="4060598801229743805">Parinktys pasiekiamos netoli ekrano viršaus</translation>
 <translation id="4062305924942672200">Teisinė informacija</translation>
 <translation id="4084682180776658562">Žymė</translation>
 <translation id="4084712963632273211">Nuo <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />pateikė „Google“<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Atidaryti „<ph name="WEBAPK_NAME" />“</translation>
 <translation id="4634124774493850572">Naudoti slaptažodį</translation>
 <translation id="4645575059429386691">Tvarko vienas iš jūsų tėvų</translation>
+<translation id="4660011489602794167">Rodyti klaviatūrą</translation>
 <translation id="4663756553811254707">Ištrinta žymių: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Svetainė „<ph name="NAME" />“ pridėta prie pagrindinio ekrano</translation>
 <translation id="4684427112815847243">Viską sinchronizuoti</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Palieskite, jei norite nukopijuoti šios programos URL</translation>
 <translation id="5765780083710877561">Aprašas:</translation>
 <translation id="5777170031995031090">Valdykite, kaip „Google“ turėtų naudoti jūsų naršymo istoriją, kad suasmenintų Paiešką, skelbimus ir kitas „Google“ paslaugas.</translation>
-<translation id="5779929835642192302">Pasiekiami pasiūlymai</translation>
 <translation id="5793665092639000975">Naudojama <ph name="SPACE_USED" /> iš <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Leidimai</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Prieš 1 valandą}one{Prieš # valandą}few{Prieš # valandas}many{Prieš # valandos}other{Prieš # valandų}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Užblokuota iš kelių svetainių</translation>
 <translation id="7253272406652746122">Pridėkite „Google“ paskyrą iš įrenginio Nustatymų programos puslapio „Paskyros“.</translation>
 <translation id="7274013316676448362">Užblokuota svetainė</translation>
-<translation id="72867290065237936">Norėdami perjungti tarp slaptažodžio pasiūlymų ir klaviatūros, palieskite</translation>
 <translation id="729975465115245577">Įrenginyje nėra slaptažodžių failo saugojimo programos.</translation>
 <translation id="7302081693174882195">Išsami informacija: surūšiuota pagal išsaugotų duomenų kiekį</translation>
 <translation id="7333031090786104871">Vis dar pridedama ankstesnė svetainė</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 e51b506..2ae37b7 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -374,6 +374,7 @@
 
 Lai pielāgotu meklēšanas vienumu, nospiediet un turiet to. Lai veiktu precīzāku meklēšanu, velciet paneli augšup līdz galam un pieskarieties meklēšanas lodziņam.</translation>
 <translation id="4056223980640387499">Sēpija</translation>
+<translation id="4060598801229743805">Opcijas, kas pieejamas ekrāna augšdaļā</translation>
 <translation id="4062305924942672200">Juridiskā informācija</translation>
 <translation id="4084682180776658562">Grāmatzīme</translation>
 <translation id="4084712963632273211">No izdevēja <ph name="PUBLISHER_ORIGIN" /> — <ph name="BEGIN_DEEMPHASIZED" />nodrošina Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Atvērt <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Izmantot paroli</translation>
 <translation id="4645575059429386691">Pārvalda viens no jūsu vecākiem</translation>
+<translation id="4660011489602794167">Rādīt tastatūru</translation>
 <translation id="4663756553811254707">Dzēstas <ph name="NUMBER_OF_BOOKMARKS" /> grāmatzīmes</translation>
 <translation id="4665282149850138822">Vietne <ph name="NAME" /> tika pievienota sākuma ekrānam.</translation>
 <translation id="4684427112815847243">Sinhronizēt visu</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Pieskarieties, lai kopētu šīs lietotnes URL.</translation>
 <translation id="5765780083710877561">Apraksts:</translation>
 <translation id="5777170031995031090">Kontrolējiet to, kā Google izmanto jūsu pārlūkošanas vēsturi, lai personalizētu Meklēšanu, reklāmas un citus Google pakalpojumus.</translation>
-<translation id="5779929835642192302">Pieejami ieteikumi</translation>
 <translation id="5793665092639000975">Izmantotais apjoms: <ph name="SPACE_USED" /> no <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Atļaujas</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{pirms # stundas}zero{pirms # stundām}one{pirms # stundas}other{pirms # stundām}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Bloķētas dažās vietnēs.</translation>
 <translation id="7253272406652746122">Pievienojiet Google kontu no lapas Konti savas ierīces lietotnē Iestatījumi.</translation>
 <translation id="7274013316676448362">Bloķēta vietne</translation>
-<translation id="72867290065237936">Pieskarieties, lai pārslēgtu starp paroles ieteikumiem un tastatūru</translation>
 <translation id="729975465115245577">Ierīcē nav lietotnes, kurā uzglabāt paroļu failu.</translation>
 <translation id="7302081693174882195">Detalizēta informācija: kārtota pēc ietaupīto datu apjoma</translation>
 <translation id="7333031090786104871">Joprojām notiek iepriekšējās vietnes pievienošana</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 13db0cef..7e1ec1c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -374,6 +374,7 @@
 
 Als je de zoekterm wilt aanpassen, houd je deze aangeraakt om de term te selecteren. Als je je zoekopdracht wilt verfijnen, veeg je het deelvenster helemaal naar boven en tik je op het zoekvak.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Opties beschikbaar boven aan het scherm</translation>
 <translation id="4062305924942672200">Juridische informatie</translation>
 <translation id="4084682180776658562">Bladwijzer maken</translation>
 <translation id="4084712963632273211">Van <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />geleverd door Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> openen</translation>
 <translation id="4634124774493850572">Wachtwoord gebruiken</translation>
 <translation id="4645575059429386691">Beheerd door je ouder</translation>
+<translation id="4660011489602794167">Toetsenbord weergeven</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bladwijzers verwijderd</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> is toegevoegd aan je startscherm</translation>
 <translation id="4684427112815847243">Alles synchroniseren</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Tik om de URL voor deze app te kopiëren</translation>
 <translation id="5765780083710877561">Beschrijving:</translation>
 <translation id="5777170031995031090">Beheer hoe Google je browsegeschiedenis gebruikt om Google Zoeken, advertenties en andere Google-services te personaliseren.</translation>
-<translation id="5779929835642192302">Beschikbare suggesties</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> van <ph name="SPACE_AVAILABLE" /> wordt gebruikt</translation>
 <translation id="5804241973901381774">Rechten</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# uur geleden}other{# uur geleden}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Geblokkeerd voor bepaalde sites</translation>
 <translation id="7253272406652746122">Voeg een Google-account toe via de pagina Accounts in de app Instellingen van je apparaat.</translation>
 <translation id="7274013316676448362">Geblokkeerde site</translation>
-<translation id="72867290065237936">Tik om te schakelen tussen wachtwoordsuggesties en het toetsenbord</translation>
 <translation id="729975465115245577">Je apparaat bevat geen app om het wachtwoordbestand in op te slaan.</translation>
 <translation id="7302081693174882195">Details: gesorteerd op de hoeveelheid bespaarde data</translation>
 <translation id="7333031090786104871">Nog steeds bezig met toevoegen van vorige site</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 98330d6..fd15458c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
@@ -201,7 +201,7 @@
 <translation id="2450083983707403292">Vil du laste ned <ph name="FILE_NAME" /> på nytt?</translation>
 <translation id="2476578072172137802">Nettstedsinnstillinger</translation>
 <translation id="2482878487686419369">Varsler</translation>
-<translation id="2496180316473517155">Nettlesingslogg</translation>
+<translation id="2496180316473517155">Nettleserlogg</translation>
 <translation id="2498359688066513246">Hjelp og tilbakemelding</translation>
 <translation id="2501278716633472235">Gå tilbake</translation>
 <translation id="2513403576141822879">Se <ph name="BEGIN_LINK" />Synkronisering og Google tjenester<ph name="END_LINK" /> for flere innstillinger knyttet til personvern, sikkerhet og datainnsamling.</translation>
@@ -374,6 +374,7 @@
 
 Hvis du vil endre søkeordet, kan du trykke og holde inne for å merke. Hvis du vil avgrense søket, drar du panelet hele veien opp og trykker på søkeboksen.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Du finner alternativene oppe på skjermen</translation>
 <translation id="4062305924942672200">Juridisk informasjon</translation>
 <translation id="4084682180776658562">Legg til bokmerke</translation>
 <translation id="4084712963632273211">Fra <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />levert av Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Åpne <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Bruk passord</translation>
 <translation id="4645575059429386691">Administreres av foreldrene dine</translation>
+<translation id="4660011489602794167">Vis tastatur</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bokmerker ble slettet</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> ble lagt til på startskjermen</translation>
 <translation id="4684427112815847243">Synkroniser alt</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Trykk for å kopiere nettadressen for denne appen</translation>
 <translation id="5765780083710877561">Beskrivelse:</translation>
 <translation id="5777170031995031090">Kontrollér hvordan Google bruker nettlesingsloggen din for å gi Søk, annonser og andre Google-tjenester et personlig preg.</translation>
-<translation id="5779929835642192302">Det finnes tilgjengelige forslag</translation>
 <translation id="5793665092639000975">Bruker <ph name="SPACE_USED" /> av <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Tillatelser</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{for # time siden}other{for # timer siden}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Blokkert på noen nettsteder</translation>
 <translation id="7253272406652746122">Legg til en Google-konto på Kontoer-siden i Innstillinger-appen på enheten din.</translation>
 <translation id="7274013316676448362">Blokkert nettsted</translation>
-<translation id="72867290065237936">Trykk for å bytte mellom passordforslag og tastatur</translation>
 <translation id="729975465115245577">Enheten din har ingen app som kan lagre passordfilen.</translation>
 <translation id="7302081693174882195">Informasjon: Sortert etter mengden data som er lagret</translation>
 <translation id="7333031090786104871">Holder fortsatt på å legge til det forrige nettstedet</translation>
@@ -841,7 +841,7 @@
 <translation id="7624880197989616768"><ph name="BEGIN_LINK1" />Få hjelp<ph name="END_LINK1" /> eller <ph name="BEGIN_LINK2" />skann på nytt<ph name="END_LINK2" /></translation>
 <translation id="7626032353295482388">Velkommen til Chrome</translation>
 <translation id="7638584964844754484">Feil passordfrase</translation>
-<translation id="7641339528570811325">Slett nettlesingsdata…</translation>
+<translation id="7641339528570811325">Slett nettleserdata</translation>
 <translation id="7648422057306047504">Kryptér passord med Google-legitimasjonen din</translation>
 <translation id="7649070708921625228">Hjelp</translation>
 <translation id="7658239707568436148">Avbryt</translation>
@@ -887,7 +887,7 @@
 <translation id="8007176423574883786">Slått av for denne enheten</translation>
 <translation id="8015452622527143194">Tilbakestill alt på siden til standardstørrelsen</translation>
 <translation id="802154636333426148">Nedlastingen mislyktes</translation>
-<translation id="8026334261755873520">Slett nettlesingsdata</translation>
+<translation id="8026334261755873520">Slett nettleserdata</translation>
 <translation id="8035133914807600019">Ny mappe</translation>
 <translation id="8037686209485537503">Mer av dette</translation>
 <translation id="8037750541064988519"><ph name="DAYS" /> dager igjen</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 4ed3c65..6243ba9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -374,6 +374,7 @@
 
 Jeśli chcesz dostosować wyszukiwane hasło, naciśnij je i przytrzymaj, by je zaznaczyć. Aby doprecyzować wyszukiwanie, przesuń panel do samej góry i kliknij pole wyszukiwania.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Opcje dostępne na górze ekranu</translation>
 <translation id="4062305924942672200">Informacje prawne</translation>
 <translation id="4084682180776658562">Dodaj do zakładek</translation>
 <translation id="4084712963632273211">Opublikowane na <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />wyświetlone przez Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Otwórz <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Użyj hasła</translation>
 <translation id="4645575059429386691">Zarządzany przez Twojego rodzica</translation>
+<translation id="4660011489602794167">Pokaż klawiaturę</translation>
 <translation id="4663756553811254707">Usunięte zakładki: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Strona <ph name="NAME" /> została dodana do ekranu głównego</translation>
 <translation id="4684427112815847243">Synchronizuj wszystko</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Kliknij, by skopiować URL tej aplikacji</translation>
 <translation id="5765780083710877561">Opis:</translation>
 <translation id="5777170031995031090">Określ, jak Google może korzystać z Twojej historii przeglądania, by dostosowywać wyniki wyszukiwania, reklamy i działanie innych usług.</translation>
-<translation id="5779929835642192302">Dostępne są sugestie</translation>
 <translation id="5793665092639000975">Zajmują <ph name="SPACE_USED" /> z <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Uprawnienia</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# godzinę temu}few{# godziny temu}many{# godzin temu}other{# godziny temu}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Blokowane na niektórych stronach</translation>
 <translation id="7253272406652746122">Otwórz aplikację Ustawienia na urządzeniu, przejdź na stronę Konta i dodaj konto Google.</translation>
 <translation id="7274013316676448362">Zablokowana witryna</translation>
-<translation id="72867290065237936">Kliknij, by przełączyć się między sugestiami haseł i klawiaturą</translation>
 <translation id="729975465115245577">Na urządzeniu nie ma aplikacji umożliwiającej zapisanie pliku z hasłami.</translation>
 <translation id="7302081693174882195">Szczegóły: posortowane według zaoszczędzonych danych</translation>
 <translation id="7333031090786104871">Nadal dodaję poprzednią stronę</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 58e969b..79ea6f4 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
@@ -374,6 +374,7 @@
 
 Para ajustar o termo de pesquisa, toque nele e mantenha-o pressionado. Para refinar a pesquisa, deslize o painel totalmente para cima e toque na caixa de pesquisa.</translation>
 <translation id="4056223980640387499">Sépia</translation>
+<translation id="4060598801229743805">Opções disponíveis perto da parte superior da tela</translation>
 <translation id="4062305924942672200">Informações legais</translation>
 <translation id="4084682180776658562">Favorito</translation>
 <translation id="4084712963632273211">De <ph name="PUBLISHER_ORIGIN" />: <ph name="BEGIN_DEEMPHASIZED" />veiculado pelo Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -447,6 +448,7 @@
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Usar senha</translation>
 <translation id="4645575059429386691">Gerenciado pelos seus pais</translation>
+<translation id="4660011489602794167">Mostrar teclado</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> favoritos excluídos</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> foi adicionado à sua tela inicial</translation>
 <translation id="4684427112815847243">Sincronizar tudo</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Toque para copiar o URL desse app</translation>
 <translation id="5765780083710877561">Descrição:</translation>
 <translation id="5777170031995031090">Controle a maneira como o Google usa seu histórico de navegação para personalizar a Pesquisa Google, os anúncios e outros serviços nossos.</translation>
-<translation id="5779929835642192302">Sugestões disponíveis</translation>
 <translation id="5793665092639000975">Usando <ph name="SPACE_USED" /> de <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Permissões</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# hora atrás}one{# horas atrás}other{# horas atrás}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Bloqueados em alguns sites</translation>
 <translation id="7253272406652746122">Adicione uma Conta do Google na página de "Contas" do app "Config." do seu dispositivo.</translation>
 <translation id="7274013316676448362">Site bloqueado</translation>
-<translation id="72867290065237936">Toque para alternar entre sugestões de senha e teclado</translation>
 <translation id="729975465115245577">Seu dispositivo não tem um app para armazenar o arquivo de senhas.</translation>
 <translation id="7302081693174882195">Detalhes: classificados pela quantidade de dados economizados</translation>
 <translation id="7333031090786104871">Ainda adicionando o site anterior</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 b0c98216..5691584 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
@@ -374,6 +374,7 @@
 
 Para ajustar o termo de pesquisa, mantenha-o premido para selecionar. Para refinar a pesquisa, deslize lentamente o painel totalmente para cima e toque na caixa de pesquisa.</translation>
 <translation id="4056223980640387499">Sépia</translation>
+<translation id="4060598801229743805">Opções disponíveis junto à parte superior do ecrã</translation>
 <translation id="4062305924942672200">Informações legais</translation>
 <translation id="4084682180776658562">Marcar</translation>
 <translation id="4084712963632273211">De <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />fornecido pela Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Abrir <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Utilizar palavra-passe</translation>
 <translation id="4645575059429386691">Gerido pelos teus pais</translation>
+<translation id="4660011489602794167">Mostrar teclado</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> marcadores eliminados</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> foi adicionado ao seu Ecrã principal</translation>
 <translation id="4684427112815847243">Sincronizar tudo</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Toque para copiar o URL desta aplicação.</translation>
 <translation id="5765780083710877561">Descrição:</translation>
 <translation id="5777170031995031090">Controle a forma como a Google utiliza o seu histórico de navegação para personalizar a Pesquisa Google, os anúncios e outros serviços Google.</translation>
-<translation id="5779929835642192302">Sugestões disponíveis</translation>
 <translation id="5793665092639000975">A utilizar <ph name="SPACE_USED" /> de <ph name="SPACE_AVAILABLE" />.</translation>
 <translation id="5804241973901381774">Permissões</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Há # hora}other{Há # horas}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Bloqueados em alguns sites</translation>
 <translation id="7253272406652746122">Adicione uma Conta Google na página Contas na aplicação Definições do dispositivo.</translation>
 <translation id="7274013316676448362">Site bloqueado</translation>
-<translation id="72867290065237936">Toque para alternar entre as sugestões de palavras-passe e o teclado.</translation>
 <translation id="729975465115245577">O dispositivo não tem uma aplicação para armazenar o ficheiro de palavras-passe.</translation>
 <translation id="7302081693174882195">Detalhes: ordenado por quantidade de dados guardados</translation>
 <translation id="7333031090786104871">Ainda a adicionar o site anterior…</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 0fbb81b8..77ac949 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -374,6 +374,7 @@
 
 Pentru a ajusta termenul de căutare, apasă lung pentru a selecta. Pentru a rafina căutarea, glisează panoul până în partea de sus și atinge caseta de căutare.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Opțiunile sunt disponibile în partea de sus a ecranului</translation>
 <translation id="4062305924942672200">Informații juridice</translation>
 <translation id="4084682180776658562">Marcaj</translation>
 <translation id="4084712963632273211">De la <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />livrată de Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Deschide <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Folosește parola</translation>
 <translation id="4645575059429386691">Gestionat de părintele tău</translation>
+<translation id="4660011489602794167">Afișează tastatura</translation>
 <translation id="4663756553811254707">S-au șters <ph name="NUMBER_OF_BOOKMARKS" /> (de) marcaje</translation>
 <translation id="4665282149850138822">Site-ul <ph name="NAME" /> a fost adăugat pe ecranul de pornire</translation>
 <translation id="4684427112815847243">Sincronizare totală</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Atinge pentru a copia adresa URL pentru această aplicație</translation>
 <translation id="5765780083710877561">Descriere:</translation>
 <translation id="5777170031995031090">Stabilește cum poate folosi Google istoricul de navigare pentru a personaliza Căutarea, anunțurile și alte servicii Google.</translation>
-<translation id="5779929835642192302">Sugestii disponibile</translation>
 <translation id="5793665092639000975">Se utilizează <ph name="SPACE_USED" /> din <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Permisiuni</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Acum # oră}few{Acum # ore}other{Acum # de ore}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Blocate pe anumite site-uri</translation>
 <translation id="7253272406652746122">Adaugă un Cont Google din pagina Conturi din aplicația Setări a dispozitivului.</translation>
 <translation id="7274013316676448362">Site blocat</translation>
-<translation id="72867290065237936">Atinge pentru a comuta între sugestiile de parole și tastatură</translation>
 <translation id="729975465115245577">Dispozitivul nu are o aplicație pentru stocarea fișierului parolelor.</translation>
 <translation id="7302081693174882195">Detalii: sortate după volumul de date salvate</translation>
 <translation id="7333031090786104871">Încă se adaugă site-ul anterior</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 7c410c7..8e1ffd24 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -374,6 +374,7 @@
 
 Чтобы задать новый поисковый запрос, нажмите на нужное слово и не отпускайте палец. Чтобы уточнить запрос, прокрутите панель вверх и коснитесь окна поиска.</translation>
 <translation id="4056223980640387499">Сепия</translation>
+<translation id="4060598801229743805">Меню доступно в верхней части экрана</translation>
 <translation id="4062305924942672200">Юридическая информация</translation>
 <translation id="4084682180776658562">Закладка</translation>
 <translation id="4084712963632273211">Контент сайта <ph name="PUBLISHER_ORIGIN" />. <ph name="BEGIN_DEEMPHASIZED" />Получен с помощью Google<ph name="END_DEEMPHASIZED" />.</translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Открыть <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Использовать пароль</translation>
 <translation id="4645575059429386691">Управляется вашими родителями</translation>
+<translation id="4660011489602794167">Показать клавиатуру</translation>
 <translation id="4663756553811254707">Удалено закладок: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Сайт <ph name="NAME" /> добавлен на главный экран</translation>
 <translation id="4684427112815847243">Синхронизировать все</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Нажмите, чтобы скопировать URL этого приложения.</translation>
 <translation id="5765780083710877561">Описание:</translation>
 <translation id="5777170031995031090">Укажите, как Google может использовать историю просмотров для персонализации Поиска, Рекламы и других сервисов.</translation>
-<translation id="5779929835642192302">Доступны подходящие варианты</translation>
 <translation id="5793665092639000975">Использовано: <ph name="SPACE_USED" /> из <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Разрешения</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# час назад}one{# час назад}few{# часа назад}many{# часов назад}other{# часа назад}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Заблокировано на определенных сайтах</translation>
 <translation id="7253272406652746122">Добавьте аккаунт Google в настройках устройства (раздел "Аккаунты").</translation>
 <translation id="7274013316676448362">Заблокированный сайт</translation>
-<translation id="72867290065237936">Нажмите для переключения между подсказками пароля и клавиатурой</translation>
 <translation id="729975465115245577">На устройстве не установлено приложение для хранения файлов паролей.</translation>
 <translation id="7302081693174882195">Сортировка по объему сэкономленного трафика</translation>
 <translation id="7333031090786104871">Предыдущий сайт ещё не добавлен</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 9f4bcc5d..b2ec5f6 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -374,6 +374,7 @@
 
 Ak chcete upraviť hľadaný výraz, vyberte ho dlhým stlačením. Ak chcete vyhľadávanie spresniť, posuňte panel úplne hore a klepnite na vyhľadávacie pole.</translation>
 <translation id="4056223980640387499">Sépia</translation>
+<translation id="4060598801229743805">Možnosti sú k dispozícii v hornej časti obrazovky</translation>
 <translation id="4062305924942672200">Právne informácie</translation>
 <translation id="4084682180776658562">Záložka</translation>
 <translation id="4084712963632273211">Od: <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />doručené Googlom<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Otvoriť <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Použiť heslo</translation>
 <translation id="4645575059429386691">Spravované vaším rodičom</translation>
+<translation id="4660011489602794167">Zobraziť klávesnicu</translation>
 <translation id="4663756553811254707">Počet odstránených záložiek: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Stránky <ph name="NAME" /> boli pridané na plochu</translation>
 <translation id="4684427112815847243">Synchronizovať všetko</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Klepnutím skopírujete webovú adresu tejto aplikácie</translation>
 <translation id="5765780083710877561">Popis:</translation>
 <translation id="5777170031995031090">Ovládajte, ako Google môže používať vašu históriu prehliadania na prispôsobenie Vyhľadávania, reklám a ďalších služieb Google.</translation>
-<translation id="5779929835642192302">Sú k dispozícii návrhy</translation>
 <translation id="5793665092639000975">Využité: <ph name="SPACE_USED" /> z <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Povolenia</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{pred # hodinou}few{pred # hodinami}many{pred # hodinou}other{pred # hodinami}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Blokovanie reklám z niektorých webov</translation>
 <translation id="7253272406652746122">Pridajte účet Google zo stránky Účty v aplikácii Nastavenia na vašom zariadení.</translation>
 <translation id="7274013316676448362">Blokovaný web</translation>
-<translation id="72867290065237936">Medzi návrhmi hesiel a klávesnicou môžete prepínať klepnutím</translation>
 <translation id="729975465115245577">Vaše zariadenie nemá aplikáciu na uloženie súboru s heslami.</translation>
 <translation id="7302081693174882195">Podrobnosti: zoradené podľa množstva ušetrených dát</translation>
 <translation id="7333031090786104871">Pridávanie predchádzajúceho webu stále prebieha</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 5cdfe7d..814a881 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -374,6 +374,7 @@
 
 Če želite prilagoditi iskalno poizvedbo, jo izberite z daljšim dotikom. Če želite podrobneje nastaviti iskanje, potisnite podokno povsem navzgor in se dotaknite iskalnega polja.</translation>
 <translation id="4056223980640387499">Sepija</translation>
+<translation id="4060598801229743805">Možnosti so na voljo blizu vrha zaslona</translation>
 <translation id="4062305924942672200">Pravne informacije</translation>
 <translation id="4084682180776658562">Zaznamek</translation>
 <translation id="4084712963632273211">Vsebino objavil <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />prikazuje jo Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -603,7 +604,6 @@
 <translation id="5763514718066511291">Dotaknite se, če želite kopirati URL za to aplikacijo</translation>
 <translation id="5765780083710877561">Opis:</translation>
 <translation id="5777170031995031090">Nadzirajte, kako Google na podlagi vaše zgodovine brskanja prilagaja Iskanje Google, oglase in druge Googlove storitve.</translation>
-<translation id="5779929835642192302">Predlogi so na voljo</translation>
 <translation id="5793665092639000975">Uporaba <ph name="SPACE_USED" /> od <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Dovoljenja</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Pred # uro}one{Pred # uro}two{Pred # urama}few{Pred # urami}other{Pred # urami}}</translation>
@@ -795,7 +795,6 @@
 <translation id="7251326866581677552">Blokirano na nekaterih spletnih mestih</translation>
 <translation id="7253272406652746122">Na strani za račune v aplikaciji Nastavitve dodajte Google Račun.</translation>
 <translation id="7274013316676448362">Blokirano spletno mesto</translation>
-<translation id="72867290065237936">Dotaknite se, če želite preklapljati med predlogi za geslo in tipkovnico</translation>
 <translation id="729975465115245577">V napravi ni aplikacije za shranjevanje datoteke z gesli.</translation>
 <translation id="7302081693174882195">Podrobnosti: razvrščeno po količini prihranjenih podatkov</translation>
 <translation id="7333031090786104871">Dodajanje prejšnjega spletnega mesta še vedno poteka</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 fd08b91..0b51a46 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -374,6 +374,7 @@
 
 Да бисте прилагодили термин за претрагу, притисните и задржите да бисте га изабрали. Да бисте претрагу учинили прецизнијом, превуците таблу нагоре до краја и додирните оквир за претрагу.</translation>
 <translation id="4056223980640387499">Сепија</translation>
+<translation id="4060598801229743805">Опције су доступне при врху екрана</translation>
 <translation id="4062305924942672200">Правне информације</translation>
 <translation id="4084682180776658562">Обележивач</translation>
 <translation id="4084712963632273211">Од објављивача <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />приказује Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Отвори <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Користи лозинку</translation>
 <translation id="4645575059429386691">Овим управља твој родитељ</translation>
+<translation id="4660011489602794167">Прикажи тастатуру</translation>
 <translation id="4663756553811254707">Избрисали сте <ph name="NUMBER_OF_BOOKMARKS" /> обележивача</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> је додат на почетни екран</translation>
 <translation id="4684427112815847243">Синхронизуј све</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Додирните да бисте копирали URL за ову апликацију</translation>
 <translation id="5765780083710877561">Опис:</translation>
 <translation id="5777170031995031090">Контролишите како Google користи историју прегледања за персонализацију Претраге, огласа и других Google услуга.</translation>
-<translation id="5779929835642192302">Доступни су предлози</translation>
 <translation id="5793665092639000975">Користи се <ph name="SPACE_USED" /> од <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Дозволе</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Пре # сата}one{Пре # сата}few{Пре # сата}other{Пре # сати}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Блокирано са неких сајтова</translation>
 <translation id="7253272406652746122">Додајте Google налог са странице Налози у апликацији Подешавања на уређају.</translation>
 <translation id="7274013316676448362">Сајт је блокиран</translation>
-<translation id="72867290065237936">Додирните да бисте укључили/искључили предлоге лозинки или тастатуру</translation>
 <translation id="729975465115245577">Уређај нема апликацију за чување датотеке са лозинкама.</translation>
 <translation id="7302081693174882195">Детаљи: сортирано према количини уштеђених података</translation>
 <translation id="7333031090786104871">Још увек додајемо претходни сајт</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 37e5a77..f503c33 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
@@ -374,6 +374,7 @@
 
 Om du vill ändra söktermen trycker du länge för att välja. Om du vill finjustera sökningen drar du panelen ända upp och trycker på sökrutan.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Alternativ finns högt upp på skärmen</translation>
 <translation id="4062305924942672200">Juridisk information</translation>
 <translation id="4084682180776658562">Infoga bokmärke</translation>
 <translation id="4084712963632273211">Från <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />via Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Öppna <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Använd lösenordet</translation>
 <translation id="4645575059429386691">Hanteras av din förälder</translation>
+<translation id="4660011489602794167">Visa tangentbord</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> bokmärken har raderats</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> har lagts till på startskärmen.</translation>
 <translation id="4684427112815847243">Synkronisera allt</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Tryck om du vill kopiera webbadressen till appen</translation>
 <translation id="5765780083710877561">Beskrivning:</translation>
 <translation id="5777170031995031090">Styr hur Google anpassar Sök, annonser och andra Google-tjänster utifrån webbhistoriken.</translation>
-<translation id="5779929835642192302">Förslag tillgängliga</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> av <ph name="SPACE_AVAILABLE" /> används</translation>
 <translation id="5804241973901381774">Behörigheter</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{för # timme sedan}other{för # timmar sedan}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Blockeras från vissa webbplatser</translation>
 <translation id="7253272406652746122">Lägg till ett Google-konto från kontosidan i appen Inställningar på enheten.</translation>
 <translation id="7274013316676448362">Blockerad webbplats</translation>
-<translation id="72867290065237936">Byt mellan lösenordsförslag och tangentbordet genom att trycka här</translation>
 <translation id="729975465115245577">Det finns ingen app som kan spara lösenordsfilen på enheten.</translation>
 <translation id="7302081693174882195">Mer information: Sorterad efter databesparing</translation>
 <translation id="7333031090786104871">Processen pågår fortfarande för den förra webbplatsen</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 9a8220ca..d9799b5 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
@@ -374,6 +374,7 @@
 
 Ili kurekebisha hoja yako ya utafutaji, bonyeza kwa muda mrefu ili ulichague. Ili kuchuja utafutaji wako, telezesha kidirisha hadi juu na uguse kisanduku cha utafutaji.</translation>
 <translation id="4056223980640387499">Sepia</translation>
+<translation id="4060598801229743805">Chaguo zinapatikana karibu na sehemu ya juu ya skrini</translation>
 <translation id="4062305924942672200">Maelezo ya kisheria</translation>
 <translation id="4084682180776658562">Alamisho</translation>
 <translation id="4084712963632273211">Kutoka <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />imesafirishwa na Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Fungua <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Tumia nenosiri</translation>
 <translation id="4645575059429386691">Inadhibitiwa na wazazi wako</translation>
+<translation id="4660011489602794167">Onyesha kibodi</translation>
 <translation id="4663756553811254707">Alamisho <ph name="NUMBER_OF_BOOKMARKS" /> zimefutwa</translation>
 <translation id="4665282149850138822"><ph name="NAME" /> iliongezwa kwenye Skrini yako ya kwanza</translation>
 <translation id="4684427112815847243">Sawazisha kila kitu</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Gusa ili unakili URL ya programu hii</translation>
 <translation id="5765780083710877561">Maelezo:</translation>
 <translation id="5777170031995031090">Dhibiti namna Google inavyotumia historia ya jinsi unavyovinjari ili kuweka mapendeleo kwenye huduma ya Tafuta na Google, matangazo na huduma nyingine za Google.</translation>
-<translation id="5779929835642192302">Mapendekezo yanapatikana</translation>
 <translation id="5793665092639000975">Inatumia <ph name="SPACE_USED" /> kati ya <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Idhini</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{Saa # iliyopita}other{Saa # zilizopita}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Imezuiwa kwenye baadhi ya tovuti</translation>
 <translation id="7253272406652746122">Ongeza Akaunti ya Google kutoka kwenye ukurasa wa Akaunti katika programu ya Mipangilio ya kifaa chako.</translation>
 <translation id="7274013316676448362">Tovuti imezuiwa</translation>
-<translation id="72867290065237936">Gusa ili ubadili kati ya kibodi na mapendekezo ya nenosiri</translation>
 <translation id="729975465115245577">Kifaa chako hakina programu ya kuhifadhi faili ya manenosiri.</translation>
 <translation id="7302081693174882195">Maelezo: Imepangwa kulingana na kiasi cha data kilichookolewa</translation>
 <translation id="7333031090786104871">Bado inaongeza tovuti ya awali</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 f7d7c79..679e2f8 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -374,6 +374,7 @@
 
 หากต้องการปรับเปลี่ยนข้อความค้นหา ให้กดค้างไว้เพื่อเลือก หากต้องการปรับแต่งการค้นหา ให้เลื่อนแผงควบคุมขึ้นจนสุดแล้วแตะช่องค้นหา</translation>
 <translation id="4056223980640387499">ซีเปีย</translation>
+<translation id="4060598801229743805">ตัวเลือกอยู่ตรงบริเวณด้านบนของหน้าจอ</translation>
 <translation id="4062305924942672200">ข้อมูลทางกฎหมาย</translation>
 <translation id="4084682180776658562">บุ๊กมาร์ก</translation>
 <translation id="4084712963632273211">จาก <ph name="PUBLISHER_ORIGIN" /> - <ph name="BEGIN_DEEMPHASIZED" />แสดงโดย Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">เปิด <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">ใช้รหัสผ่าน</translation>
 <translation id="4645575059429386691">มีการจัดการโดยผู้ปกครอง</translation>
+<translation id="4660011489602794167">แสดงแป้นพิมพ์</translation>
 <translation id="4663756553811254707">ลบบุ๊กมาร์ก <ph name="NUMBER_OF_BOOKMARKS" /> รายการแล้ว</translation>
 <translation id="4665282149850138822">เพิ่ม <ph name="NAME" /> ลงในหน้าแรกแล้ว</translation>
 <translation id="4684427112815847243">ซิงค์ทุกอย่าง</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">แตะเพื่อคัดลอก URL สำหรับแอปนี้</translation>
 <translation id="5765780083710877561">คำอธิบาย:</translation>
 <translation id="5777170031995031090">ควบคุมวิธีที่ Google ใช้ประวัติการท่องเว็บของคุณเพื่อปรับเปลี่ยนการค้นหา โฆษณา และบริการอื่นๆ ของ Google ในแบบของคุณ</translation>
-<translation id="5779929835642192302">มีคำแนะนำ</translation>
 <translation id="5793665092639000975">ใช้ไป <ph name="SPACE_USED" /> จาก <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">การอนุญาต</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# ชั่วโมงที่ผ่านมา}other{# ชั่วโมงที่ผ่านมา}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">บล็อกจากบางไซต์</translation>
 <translation id="7253272406652746122">เพิ่มบัญชี Google จากหน้า "บัญชี" ในแอปการตั้งค่าของอุปกรณ์</translation>
 <translation id="7274013316676448362">เว็บไซต์ที่ถูกบล็อก</translation>
-<translation id="72867290065237936">แตะเพื่อสลับระหว่างคำแนะนำรหัสผ่านกับแป้นพิมพ์</translation>
 <translation id="729975465115245577">อุปกรณ์ของคุณไม่มีแอปไว้จัดเก็บไฟล์รหัสผ่าน</translation>
 <translation id="7302081693174882195">รายละเอียด: จัดเรียงตามปริมาณเน็ตมือถือที่ประหยัดได้</translation>
 <translation id="7333031090786104871">ยังเพิ่มไซต์ก่อนหน้าอยู่</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 eb358f83..54780268 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -374,6 +374,7 @@
 
 Arama teriminizi düzeltmek için uzun basarak terimi seçin. Aramanızı ayrıntılı hale getirmek için paneli tümüyle yukarı kaydırın ve arama kutusuna dokunun.</translation>
 <translation id="4056223980640387499">Sepya Tonu</translation>
+<translation id="4060598801229743805">Ekranın üst kısmına yakın bir yerde seçenekler vardır</translation>
 <translation id="4062305924942672200">Yasal bilgiler</translation>
 <translation id="4084682180776658562">Yer İşareti</translation>
 <translation id="4084712963632273211"><ph name="PUBLISHER_ORIGIN" /> web sitesinden - <ph name="BEGIN_DEEMPHASIZED" />Google tarafından yayınlandı<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> APK'sını aç</translation>
 <translation id="4634124774493850572">Şifre kullan</translation>
 <translation id="4645575059429386691">Ebeveyniniz tarafından yönetiliyor</translation>
+<translation id="4660011489602794167">Klavyeyi göster</translation>
 <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> yer işareti silindi</translation>
 <translation id="4665282149850138822"><ph name="NAME" />, Ana ekranınıza eklendi</translation>
 <translation id="4684427112815847243">Her şeyi senkronize et</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Bu uygulamanın URL'sini kopyalamak için dokunun</translation>
 <translation id="5765780083710877561">Açıklama:</translation>
 <translation id="5777170031995031090">Google'ın Arama, reklamlar ve diğer Google hizmetlerini kişiselleştirmek için tarama geçmişinizi nasıl kullanacağını kontrol edin.</translation>
-<translation id="5779929835642192302">Öneri mevcut</translation>
 <translation id="5793665092639000975"><ph name="SPACE_USED" /> / <ph name="SPACE_AVAILABLE" /> kullanılıyor</translation>
 <translation id="5804241973901381774">İzinler</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# saat önce}other{# saat önce}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Bazı sitelerde engellendi</translation>
 <translation id="7253272406652746122">Cihazınızın Ayarlar uygulamasındaki Hesaplar sayfasından bir Google Hesabı ekleyin.</translation>
 <translation id="7274013316676448362">Engellenmiş site</translation>
-<translation id="72867290065237936">Şifre önerileri ve klavye arasında geçiş yapmak için dokunun</translation>
 <translation id="729975465115245577">Cihazınızda şifreler dosyasını depolayacak bir uygulama yok.</translation>
 <translation id="7302081693174882195">Ayrıntılar: Tasarruf edilen veri miktarına göre sıralı</translation>
 <translation id="7333031090786104871">Önceki siteyi ekleme işlemi devam ediyor.</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 d5f6b88..167e675 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -374,6 +374,7 @@
 
 Щоб змінити пошуковий термін, натисніть і втримуйте його. Щоб уточнити пошуковий запит, пересуньте панель угору й торкніться вікна пошуку.</translation>
 <translation id="4056223980640387499">Сепія</translation>
+<translation id="4060598801229743805">Панель інструментів розташовано вгорі екрана</translation>
 <translation id="4062305924942672200">Правова інформація</translation>
 <translation id="4084682180776658562">Закладка</translation>
 <translation id="4084712963632273211">Видавець: <ph name="PUBLISHER_ORIGIN" />, <ph name="BEGIN_DEEMPHASIZED" />доставлено Google<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Відкрити файл <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Прийняти пароль</translation>
 <translation id="4645575059429386691">Керується одним із батьків</translation>
+<translation id="4660011489602794167">Показати клавіатуру</translation>
 <translation id="4663756553811254707">Видалено закладок: <ph name="NUMBER_OF_BOOKMARKS" /></translation>
 <translation id="4665282149850138822">Веб-сайт <ph name="NAME" /> додано на головний екран</translation>
 <translation id="4684427112815847243">Синхронізувати все</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Торкніться, щоб скопіювати URL-адресу цього додатка</translation>
 <translation id="5765780083710877561">Опис:</translation>
 <translation id="5777170031995031090">Укажіть, як Google має використовувати вашу історію веб-перегляду, щоб персоналізувати Пошук, оголошення й інші служби Google.</translation>
-<translation id="5779929835642192302">Є пропозиції</translation>
 <translation id="5793665092639000975">Використано <ph name="SPACE_USED" /> з <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Дозволи</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# годину тому}one{# годину тому}few{# години тому}many{# годин тому}other{# години тому}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Заблоковано на деяких сайтах</translation>
 <translation id="7253272406652746122">Додайте обліковий запис Google зі сторінки "Облікові записи" в додатку Налаштування на пристрої.</translation>
 <translation id="7274013316676448362">Заблокований сайт</translation>
-<translation id="72867290065237936">Торкайтеся, щоб перемикатися між пропозиціями паролів і клавіатурою</translation>
 <translation id="729975465115245577">На пристрої немає додатка для зберігання файлу з паролями.</translation>
 <translation id="7302081693174882195">Деталі: відсортовано за кількістю заощадженого трафіку</translation>
 <translation id="7333031090786104871">Попередній сайт ще додається</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 6850efb..125df18 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -374,6 +374,7 @@
 
 Để điều chỉnh cụm từ tìm kiếm của bạn, hãy nhấn và giữ để chọn cụm từ đó. Để tinh chỉnh cụm từ tìm kiếm của bạn, hãy trượt bảng điều khiển lên hết cỡ và nhấn vào hộp tìm kiếm.</translation>
 <translation id="4056223980640387499">Màu nâu đỏ</translation>
+<translation id="4060598801229743805">Có các tùy chọn ở gần đầu màn hình</translation>
 <translation id="4062305924942672200">Thông tin pháp lý</translation>
 <translation id="4084682180776658562">Dấu trang</translation>
 <translation id="4084712963632273211">Từ <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />Do Google phân phối<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">Mở <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Sử dụng mật khẩu</translation>
 <translation id="4645575059429386691">Do cha mẹ của bạn quản lý</translation>
+<translation id="4660011489602794167">Hiển thị bàn phím</translation>
 <translation id="4663756553811254707">Đã xóa <ph name="NUMBER_OF_BOOKMARKS" /> dấu trang</translation>
 <translation id="4665282149850138822">Đã thêm <ph name="NAME" /> vào Màn hình chính của bạn</translation>
 <translation id="4684427112815847243">Đồng bộ hóa mọi thứ</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">Nhấn để sao chép URL cho ứng dụng này</translation>
 <translation id="5765780083710877561">Mô tả:</translation>
 <translation id="5777170031995031090">Kiểm soát cách Google sử dụng lịch sử duyệt web của bạn để cá nhân hóa Tìm kiếm, quảng cáo và các dịch vụ khác của Google.</translation>
-<translation id="5779929835642192302">Có đề xuất</translation>
 <translation id="5793665092639000975">Sử dụng <ph name="SPACE_USED" />/<ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">Quyền</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# giờ trước}other{# giờ trước}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">Đã chặn khỏi một số trang web</translation>
 <translation id="7253272406652746122">Thêm Tài khoản Google từ trang Tài khoản trong ứng dụng Cài đặt trên thiết bị của bạn.</translation>
 <translation id="7274013316676448362">Trang web bị chặn</translation>
-<translation id="72867290065237936">Nhấn để chuyển đổi giữa các mục đề xuất mật khẩu và bàn phím</translation>
 <translation id="729975465115245577">Thiết bị của bạn không có ứng dụng để lưu trữ tệp mật khẩu.</translation>
 <translation id="7302081693174882195">Thông tin chi tiết: Sắp xếp theo lượng dữ liệu đã tiết kiệm được</translation>
 <translation id="7333031090786104871">Vẫn đang thêm trang web trước</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 d20a0a6e9..bb492b11 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
@@ -374,6 +374,7 @@
 
 要调整您的搜索字词,长按即可选中所需内容。要缩小您的搜索范围,请向上滑动到面板顶部,然后点按搜索框。</translation>
 <translation id="4056223980640387499">棕色调</translation>
+<translation id="4060598801229743805">选项位于屏幕顶部附近</translation>
 <translation id="4062305924942672200">法律信息</translation>
 <translation id="4084682180776658562">已保存的书签</translation>
 <translation id="4084712963632273211">来自 <ph name="PUBLISHER_ORIGIN" /> - <ph name="BEGIN_DEEMPHASIZED" />由 Google 提供<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">打开<ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">使用密码</translation>
 <translation id="4645575059429386691">由您父母管理</translation>
+<translation id="4660011489602794167">显示键盘</translation>
 <translation id="4663756553811254707">已删除 <ph name="NUMBER_OF_BOOKMARKS" /> 个书签</translation>
 <translation id="4665282149850138822"><ph name="NAME" />已添加到您的主屏幕</translation>
 <translation id="4684427112815847243">同步所有数据类型</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">点按即可复制该应用的网址</translation>
 <translation id="5765780083710877561">说明:</translation>
 <translation id="5777170031995031090">控制 Google 如何利用您的浏览记录为您提供个性化的 Google 搜索、广告和其他 Google 服务。</translation>
-<translation id="5779929835642192302">有自动填充建议</translation>
 <translation id="5793665092639000975">已使用 <ph name="SPACE_USED" />,共 <ph name="SPACE_AVAILABLE" /></translation>
 <translation id="5804241973901381774">权限</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# 小时前}other{# 小时前}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">已阻止在部分网站中显示广告</translation>
 <translation id="7253272406652746122">请在设备的“设置”应用中,通过“帐号”页面添加 Google 帐号。</translation>
 <translation id="7274013316676448362">禁止访问的网站</translation>
-<translation id="72867290065237936">点按即可在密码建议和键盘之间切换</translation>
 <translation id="729975465115245577">您的设备上没有可以存储密码文件的应用。</translation>
 <translation id="7302081693174882195">详细信息:按已节省的数据流量排序</translation>
 <translation id="7333031090786104871">仍在添加先前的网站</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 22864ae8..a735b41ba 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
@@ -374,6 +374,7 @@
 
 如要調整搜尋字詞,直接長按即可選取。如要修正搜尋,請將面板滑動到最上方,再輕觸搜尋框。</translation>
 <translation id="4056223980640387499">深褐色調</translation>
+<translation id="4060598801229743805">選項位於畫面頂端</translation>
 <translation id="4062305924942672200">法律資訊</translation>
 <translation id="4084682180776658562">書籤</translation>
 <translation id="4084712963632273211">發佈者:<ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />由 Google 所提供<ph name="END_DEEMPHASIZED" /></translation>
@@ -446,6 +447,7 @@
 <translation id="4616150815774728855">開啟 <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">使用密碼</translation>
 <translation id="4645575059429386691">你的家長已停用這項功能</translation>
+<translation id="4660011489602794167">顯示鍵盤</translation>
 <translation id="4663756553811254707">已刪除 <ph name="NUMBER_OF_BOOKMARKS" /> 個書籤</translation>
 <translation id="4665282149850138822">「<ph name="NAME" />」已加入您的主畫面</translation>
 <translation id="4684427112815847243">同步處理所有資料</translation>
@@ -603,7 +605,6 @@
 <translation id="5763514718066511291">輕觸即可複製這個應用程式的網址</translation>
 <translation id="5765780083710877561">說明:</translation>
 <translation id="5777170031995031090">控管 Google 使用您瀏覽記錄的方式,針對 Google 所提供的個人化搜尋服務、廣告內容和其他各項 Google 服務調整相關設定。</translation>
-<translation id="5779929835642192302">有自動填入建議</translation>
 <translation id="5793665092639000975">使用量:<ph name="SPACE_USED" /> (共 <ph name="SPACE_AVAILABLE" />)</translation>
 <translation id="5804241973901381774">權限</translation>
 <translation id="5809361687334836369">{HOURS,plural, =1{# 小時前}other{# 小時前}}</translation>
@@ -795,7 +796,6 @@
 <translation id="7251326866581677552">封鎖部分網站的廣告</translation>
 <translation id="7253272406652746122">在裝置的「設定」應用程式中,透過「帳戶」頁面新增 Google 帳戶。</translation>
 <translation id="7274013316676448362">已封鎖網站</translation>
-<translation id="72867290065237936">輕觸即可在密碼建議和鍵盤之間切換</translation>
 <translation id="729975465115245577">你的裝置沒有可儲存密碼檔案的應用程式。</translation>
 <translation id="7302081693174882195">詳細資料:依儲存資料量排序</translation>
 <translation id="7333031090786104871">仍在新增先前的網站</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerTest.java
index 947ec3b6..ba4c907 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineIndicatorControllerTest.java
@@ -48,7 +48,10 @@
 /** Unit tests for offline indicator interacting with chrome activity. */
 @RunWith(ChromeJUnit4ClassRunner.class)
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
-        "enable-features=" + ChromeFeatureList.OFFLINE_INDICATOR})
+        "enable-features=" + ChromeFeatureList.OFFLINE_INDICATOR + "<FakeStudy",
+        "force-fieldtrials=FakeStudy/FakeGroup",
+        "force-fieldtrial-params=FakeStudy.FakeGroup:"
+                + OfflineIndicatorController.PARAM_STABLE_OFFLINE_WAIT_SECONDS + "/1"})
 // TODO(jianli): Add test for disabled feature.
 public class OfflineIndicatorControllerTest {
     @Rule
@@ -72,8 +75,6 @@
             }
             NetworkChangeNotifier.forceConnectivityState(true);
             OfflineIndicatorController.initialize();
-            OfflineIndicatorController.getInstance().overrideTimeToWaitForStableOfflineForTesting(
-                    1500);
         });
     }
 
diff --git a/chrome/android/modules/ar/AndroidManifest.xml b/chrome/android/modules/ar/AndroidManifest.xml
index 21065659..920f8523 100644
--- a/chrome/android/modules/ar/AndroidManifest.xml
+++ b/chrome/android/modules/ar/AndroidManifest.xml
@@ -14,10 +14,9 @@
 
     <!-- TODO(crbug.com/863068): Set dist:onDemand="true" once we can on-demand
          install modules. -->
-    <!-- TODO(crbug.com/871912): Use @string reference for dist:title. -->
     <dist:module
         dist:onDemand="false"
-        dist:title="AR">
+        dist:title="@string/ar_module_title">
         <dist:fusing dist:include="false" />
     </dist:module>
 
diff --git a/chrome/android/modules/ar/ar_module_tmpl.gni b/chrome/android/modules/ar/ar_module_tmpl.gni
index 1dc63547..a4a0c27 100644
--- a/chrome/android/modules/ar/ar_module_tmpl.gni
+++ b/chrome/android/modules/ar/ar_module_tmpl.gni
@@ -23,6 +23,14 @@
   }
 
   android_app_bundle_module(target_name) {
+    if (defined(invoker.base_module_target)) {
+      _base_module_target = invoker.base_module_target
+    } else {
+      # TODO(tiborg): This is here to not break the downstream bots. Remove once
+      # we have set the flag for downstream as well.
+      _base_module_target = "//clank/java:monochrome_base_module"
+    }
+
     forward_variables_from(invoker,
                            [
                              "module_name",
@@ -30,6 +38,7 @@
                            ])
     android_manifest = _manifest
     android_manifest_dep = ":$_manifest_target"
+    base_module_target = _base_module_target
     deps = [
       "//third_party/arcore-android-sdk:libdynamite_client_java",
     ]
diff --git a/chrome/android/modules/vr/AndroidManifest.xml b/chrome/android/modules/vr/AndroidManifest.xml
index 085c8f86..4be5316 100644
--- a/chrome/android/modules/vr/AndroidManifest.xml
+++ b/chrome/android/modules/vr/AndroidManifest.xml
@@ -14,10 +14,9 @@
 
     <!-- TODO(crbug.com/862689): Set dist:onDemand="true" once we can on-demand
          install modules. -->
-    <!-- TODO(crbug.com/875059): Use @string reference for dist:title. -->
     <dist:module
         dist:onDemand="false"
-        dist:title="VR">
+        dist:title="@string/vr_module_title">
         <dist:fusing dist:include="false" />
     </dist:module>
 
diff --git a/chrome/android/modules/vr/vr_module_tmpl.gni b/chrome/android/modules/vr/vr_module_tmpl.gni
index a73f13a..0ebd5e2 100644
--- a/chrome/android/modules/vr/vr_module_tmpl.gni
+++ b/chrome/android/modules/vr/vr_module_tmpl.gni
@@ -24,6 +24,14 @@
   }
 
   android_app_bundle_module(target_name) {
+    if (defined(invoker.base_module_target)) {
+      _base_module_target = invoker.base_module_target
+    } else {
+      # TODO(tiborg): This is here to not break the downstream bots. Remove once
+      # we have set the flag for downstream as well.
+      _base_module_target = "//clank/java:chrome_modern_base_module"
+    }
+
     forward_variables_from(invoker,
                            [
                              "module_name",
@@ -31,6 +39,7 @@
                            ])
     android_manifest = _manifest
     android_manifest_dep = ":${_manifest_target}"
+    base_module_target = _base_module_target
     deps = [
       "//chrome/browser/android/vr:java",
     ]
diff --git a/chrome/app/resources/chromium_strings_bn.xtb b/chrome/app/resources/chromium_strings_bn.xtb
index 18596004e..2ab7af86 100644
--- a/chrome/app/resources/chromium_strings_bn.xtb
+++ b/chrome/app/resources/chromium_strings_bn.xtb
@@ -118,6 +118,7 @@
 <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="5398878173008909840">Chromium-এর একটি নতুন সংস্করণ উপলব্ধ আছে৷</translation>
+<translation id="5416696090975899932">বিল্ট-ইন পিডিএফ ভিউয়ার অনুপস্থিত থাকলে Chromium প্রিন্ট প্রিভিউ দেখাতে পারে না৷</translation>
 <translation id="5427571867875391349">Chromium কে আপনার ডিফল্ট ব্রাউজার হিসাবে সেট করুন</translation>
 <translation id="5438241569118040789"><ph name="PAGE_TITLE" /> - Chromium বিটা</translation>
 <translation id="5466153949126434691">Chromium স্বয়ংক্রিয়ভাবে আপডেট হয় তাই আপনার কাছে সর্বদা নবীনতম সংস্করণটি থাকে৷ এই ডাউনলোডটি সম্পূর্ণ হলে, Chromium আবার চালু হবে এবং আপনি আবার আগের মতো Chrome ব্যবহার করতে পারবেন৷</translation>
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb
index ecf4186..1deabea 100644
--- a/chrome/app/resources/chromium_strings_en-GB.xtb
+++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -18,6 +18,7 @@
 <translation id="1502360822835740515">Make Chromium your default browser</translation>
 <translation id="151962892725702025">Chromium OS could not sync your data because Sync is not available for your domain.</translation>
 <translation id="1585657529869845941">Click <ph name="BEGIN_BOLD" />Switch anyway<ph name="END_BOLD" />, if it appears</translation>
+<translation id="1662639173275167396">Chrome OS is made possible by additional <ph name="BEGIN_LINK_CROS_OSS" />open source software<ph name="END_LINK_CROS_OSS" />, as is <ph name="BEGIN_LINK_LINUX_OSS" />Linux (Beta)<ph name="END_LINK_LINUX_OSS" />.</translation>
 <translation id="1668054258064581266">After removing your account from Chromium, you may need to reload your open tabs to take effect.</translation>
 <translation id="1688750314291223739">Set up Sync to save your personalised browser features to the web and access them from Chromium on any computer.</translation>
 <translation id="1708666629004767631">There's a new, safer version of Chromium available.</translation>
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb
index 2a3cd9f..ad3a4bda 100644
--- a/chrome/app/resources/chromium_strings_mr.xtb
+++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -4,9 +4,9 @@
 <translation id="1065672644894730302">तुमची प्राधान्ये वाचता आली नाहीत.
 काही वैशिष्‍ट्ये अनुपलब्ध असू शकतात आणि प्राधान्यांमधील बदल सेव्ह केले जाणार नाहीत.</translation>
 <translation id="1104942323762546749">Chromium ला तुमचे पासवर्ड निर्यात करायचे आहेत. हे करू देण्यासाठी तुमचा Windows पासवर्ड टाइप करा.</translation>
-<translation id="1115445892567829615">Chromium आपला डेटा संकालित करू शकले नाही. कृपया आपला संकालन वाक्यांश अपडेट करा.</translation>
+<translation id="1115445892567829615">Chromium तुमचा डेटा सिंक करू शकले नाही. कृपया तुमची सिंक पासफ्रेझ अपडेट करा.</translation>
 <translation id="113122355610423240">Chromium आपला डीफॉल्ट ब्राउझर आहे</translation>
-<translation id="1170115874949214249">आपल्या फोनवर Chromium इंस्टॉल करा. आम्ही आपल्या खाते पुनर्प्राप्ती फोन नंबरवर एक SMS पाठवू.</translation>
+<translation id="1170115874949214249">तुमच्या फोनवर Chromium इंस्टॉल करा. आम्ही तुमच्या खाते रिकव्हरी फोन नंबरवर एक SMS पाठवू.</translation>
 <translation id="1174473354587728743">एक कॉंप्युटर सामायिक करायचा? आपल्याला आवडते त्या प्रकारे आपण आता Chromium सेट करू शकता.</translation>
 <translation id="1185134272377778587">Chromium बद्दल</translation>
 <translation id="1209657686917656928">{0,plural, =0{Chromium आता पुन्हा लाँच होईल}=1{Chromium एका सेकंदाने पुन्हा लाँच होईल}one{Chromium # सेकंदांने पुन्हा लाँच होईल}other{Chromium # सेकंदांनी पुन्हा लाँच होईल}}</translation>
@@ -20,7 +20,7 @@
 <translation id="1668054258064581266">Chromium वरून आपले खाते काढल्यानंतर, प्रभावी होण्यासाठी आपल्याला आपले उघडे टॅब रीलोड करण्याची आवश्यकता असू शकते.</translation>
 <translation id="1688750314291223739">वेबवर तुमची वैयक्तीकृत केलेली ब्राउझर वैशिष्ट्ये सेव्ह करण्यासाठी समक्रमण सेट करा आणि कोणत्याही संगणकावरील Chromium वरून त्यात प्रवेश करा.</translation>
 <translation id="1708666629004767631">Chromium ची नवीन, सुरक्षित आवृत्ती उपलब्ध आहे.</translation>
-<translation id="1766096484055239003">तुमच्या अॅडमिनिस्ट्रेटरला अपडेट लागू करता यावी यासाठी तुम्ही Chrome पुन्हा लाँच करण्याची आवश्यकता आहे</translation>
+<translation id="1766096484055239003">तुमच्या अॅडमिनिस्ट्रेटरला अपडेट लागू करता यावे यासाठी तुम्ही Chrome पुन्हा लाँच करण्याची आवश्यकता आहे</translation>
 <translation id="1774152462503052664">Chromium पार्श्वभूमीवर चालू द्या</translation>
 <translation id="1779356040007214683">Chromium अधिक सुरक्षित बनविण्‍यासाठी, आम्‍ही <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> मध्‍ये सूचीबद्ध नसलेले आणि आपल्‍या माहिती शिवाय कदाचित जोडले गेलेले काही विस्‍तार अक्षम केले.</translation>
 <translation id="1808667845054772817">Chromium पुनर्स्थापित करा</translation>
@@ -43,7 +43,7 @@
 <translation id="2560420686485554789">फायली डाउनलोड करण्यासाठी Chromium ला स्टोरेज अॅक्सेस हवा आहे</translation>
 <translation id="2572494885440352020">Chromium मदतनीस</translation>
 <translation id="2587578672395088481">अपडेट लागू करण्यासाठी Chromium OS रीस्टार्ट करणे आवश्यक आहे.</translation>
-<translation id="2647554856022461007">Chromium आपला ब्राउझिंग अनुभव सुधारण्यासाठी वेब सेवा वापरू शकते. आपण या सेवा वैकल्पिकपणे अक्षम करू शकता. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
+<translation id="2647554856022461007">Chromium तुमचा ब्राउझिंग अनुभवात सुधारणा करण्यासाठी वेब सेवा वापरू शकते. तुमच्याकडे या सेवा बंद करण्याचा पर्याय आहे. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="2648074677641340862">स्‍थापनेदरम्‍यान ऑपरेटिंग प्रणाली एरर आली. कृपया Chromium पुन्‍हा डाउनलोड करा.</translation>
 <translation id="2711502716910134313">Chromium टॅब</translation>
 <translation id="2718390899429598676">अतिरिक्त सुरक्षिततेसाठी, Chromium आपला डेटा कूटबद्ध करेल.</translation>
@@ -51,7 +51,7 @@
 <translation id="2799223571221894425">पुन्हा लाँच करा</translation>
 <translation id="2847479871509788944">Chromium मधून काढा...</translation>
 <translation id="2886012850691518054">पर्यायी: स्वयंचलितपणे वापर आकडेवारी आणि क्रॅश अहवाल Google कडे पाठवून Chromium ला अधिक चांगले करण्यात मदत करा.</translation>
-<translation id="2898082584336937987">आपल्या फोनवर Chromium इंस्टॉल करा. आम्ही आपल्या या फोनवर एक SMS पाठवू: <ph name="PHONE_NUMBER" /></translation>
+<translation id="2898082584336937987">तुमच्या फोनवर Chromium इंस्टॉल करा. आम्ही तुमच्या या फोनवर एक SMS पाठवू: <ph name="PHONE_NUMBER" /></translation>
 <translation id="2910007522516064972">&amp;Chromium बद्दल</translation>
 <translation id="2977470724722393594">Chromium अद्ययावत आहे</translation>
 <translation id="3032787606318309379">Chromium वर जोडत आहे...</translation>
@@ -130,18 +130,18 @@
 <translation id="5631814766731275228">Chromium नाव आणि फोटो</translation>
 <translation id="5634636535844844681">Chromium साठी Windows 7 किंवा नंतरची आवृत्ती आवश्यक आहे.</translation>
 <translation id="5680901439334282664">Chromium वर साइन इन करा</translation>
-<translation id="5698481217667032250">Chromium या भाषेत प्रदर्शि‍त करा</translation>
+<translation id="5698481217667032250">Chromium या भाषेत डिस्प्ले करा</translation>
 <translation id="5712253116097046984">तुमचा अॅडमिनिस्ट्रेटर हे अपडेट लागू करण्यासाठी तुम्हाला Chrome OS ला रीस्टार्ट करण्याची विनंती करत आहे</translation>
 <translation id="5726838626470692954">आपल्या व्यवस्थापकाने आपल्याला Chromium वरून काढणे आणि परत जोडणे आवश्यक आहे.</translation>
-<translation id="5768914737813585044">Chromium OS या भाषेत प्रदर्शि‍त करा</translation>
+<translation id="5768914737813585044">Chromium OS या भाषेत डिस्प्ले करा</translation>
 <translation id="5796460469508169315">Chromium जवळजवळ तयार आहे</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5862307444128926510">Chromium वर आपले स्‍वागत आहे</translation>
 <translation id="5877064549588274448">चॅनेल बदलले. बदल लागू करण्यासाठी आपले डिव्हाइस रीस्टार्ट करा.</translation>
 <translation id="5895138241574237353">रीस्टार्ट करा</translation>
-<translation id="5902536751647951209">प्रमाणीकरण प्रमाणपत्र अयशस्वी झाले. कृपया Chromium मध्ये पुन्हा साइन इन करा किंवा आणखी माहितीसाठी तुमच्या प्रशासकाशी संपर्क साधा. <ph name="ADDITIONAL_EXPLANATION" /></translation>
+<translation id="5902536751647951209">अॉथेंटिकेशन सर्टिफिकेट अयशस्वी झाले. कृपया Chromium मध्ये पुन्हा साइन इन करा किंवा आणखी माहितीसाठी तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा. <ph name="ADDITIONAL_EXPLANATION" /></translation>
 <translation id="5906655207909574370">अद्ययावत करणे जवळजवळ पूर्ण झाले! अपडेट करणे समाप्त करण्यासाठी आपले डिव्हाइस रीस्टार्ट करा.</translation>
-<translation id="5987687638152509985">संकालित करण्यासाठी Chromium अपडेट करा</translation>
+<translation id="5987687638152509985">सिंक करण्यासाठी Chromium अपडेट करा</translation>
 <translation id="6040143037577758943">बंद करा</translation>
 <translation id="6055895534982063517">Chromium ची नवीन आवृत्ती उपलब्ध आहे आणि ही नेहमीपेक्षा जलद आहे.</translation>
 <translation id="6063093106622310249">आणि Chromium मध्ये उघडा</translation>
@@ -165,7 +165,7 @@
 <translation id="641451971369018375">ब्राउझ करण्यासाठी आणि Chromium मध्ये सुधारणा करण्यासाठी Google शी संवाद साधते</translation>
 <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium १ सेकंदात रीस्टार्ट होईल}one{Chromium # सेकंदात रीस्टार्ट होईल}other{Chromium # सेकंदांत रीस्टार्ट होईल}}</translation>
 <translation id="6475912303565314141">आपण Chromium सुरू करता तेव्हा कोणते पृष्ठ दर्शविले जाते हे देखील हे नियंत्रित करते.</translation>
-<translation id="6485906693002546646">आपण तुमची Chromium सामग्री संकालित करण्यासाठी <ph name="PROFILE_EMAIL" /> वापरत आहात. आपले संकालन प्राधान्य अपडेट करण्यासाठी किंवा Google खाते न सोडता Chromium वापरण्यासाठी, <ph name="SETTINGS_LINK" /> ला भेट द्या.</translation>
+<translation id="6485906693002546646">तुम्ही तुमची Chromium आशय सिंक करण्यासाठी <ph name="PROFILE_EMAIL" /> वापरत आहात. तुमचे सिंक प्राधान्य अपडेट करण्यासाठी किंवा Google खाते न सोडता Chromium वापरण्यासाठी, <ph name="SETTINGS_LINK" /> ला भेट द्या.</translation>
 <translation id="6510925080656968729">Chromium विस्‍थापित करा</translation>
 <translation id="6570579332384693436">शब्दलेखनाच्या चुकांमध्ये सुधारणा करण्यासाठी Chromium तुम्ही मजकूर भागामध्ये टाइप केलेला मजकूर Google ला पाठवते</translation>
 <translation id="6598877126913850652">Chromium च्या सूचना सेटिंग्जमध्ये जा</translation>
@@ -183,7 +183,7 @@
 <translation id="6970811910055250180">आपले डिव्हाइस अपडेट करीत आहे...</translation>
 <translation id="6990124437352146030">या साइटसाठी Chromium ला तुमचा मायक्रोफोन अॅक्सेस करण्याची परवानगी हवी आहे</translation>
 <translation id="705851970750939768">Chromium अपडेट करा</translation>
-<translation id="7066436765290594559">Chromium OS आपला डेटा संकालित करू शकले नाही. कृपया आपला संकालन सांकेतिक वाक्यांश अपडेट करा.</translation>
+<translation id="7066436765290594559">Chromium OS तुमचा डेटा सिंक करू शकले नाही. कृपया तुमचा सिंक सांकेतिक पासफ्रेझ अपडेट करा.</translation>
 <translation id="7162152143154757523">आपण ब्राउझरमध्‍ये जे टाइप करता ते Google सर्व्हरला पाठवून, आपल्याला Google शोध द्वारे वापरलेल्या शब्दलेखन-तंत्रज्ञानासारखेच तंत्रज्ञान वापरण्याची अनुमती देऊन Chromium चाणाक्ष शब्दलेखन-तपासणी प्रदान करु शकते.</translation>
 <translation id="7196312274710523067">Chromium लाँच करता आले नाही. पुन्हा प्रयत्न करा.</translation>
 <translation id="7205698830395646142">Chromium मेनूमध्‍ये लपवा</translation>
@@ -194,7 +194,7 @@
 <translation id="7318036098707714271">तुमची प्राधान्ये फाइल दूषित किंवा अवैध आहे.
 
 Chromium तुमची सेटिंग्ज पुनर्प्राप्त करण्‍यात अक्षम आहे.</translation>
-<translation id="7331920710658926971">आपल्या फोनवर Chromium इंस्टॉल करा. आम्ही आपल्या फोनवर एक SMS पाठवू.</translation>
+<translation id="7331920710658926971">तुमच्या फोनवर Chromium इंस्टॉल करा. आम्ही तुमच्या फोनवर एक SMS पाठवू.</translation>
 <translation id="7337881442233988129">Chromium</translation>
 <translation id="7339898014177206373">नवीन विंडो</translation>
 <translation id="734373864078049451">आपले वेब, बुकमार्क आणि अन्य Chromium सामग्री येथे थेट आहे.</translation>
@@ -209,7 +209,7 @@
 <translation id="7471302858145901434">{0,plural, =1{Chromium OS एका दिवसात रीस्टार्ट करा}one{Chromium OS # दिवसात रीस्टार्ट करा}other{Chromium OS # दिवसांमध्ये रीस्टार्ट करा}}</translation>
 <translation id="7483335560992089831">सध्‍या चालू असलेल्‍या सारख्याच Chromium आवृत्तीची स्‍थापना होऊ शकत नाही. कृपया Chromium बंद करा आणि पुन्‍हा प्रयत्‍न करा.</translation>
 <translation id="7549178288319965365">Chromium OS बद्दल</translation>
-<translation id="7577193603922410712">Chromium साठी विशिष्ट सुरक्षा अपडेट आत्ताच लागू केले; ते प्रभावी होण्यासाठी आपण आता रीस्टार्ट करावे (आम्ही आपले टॅब पुनर्संचयित करू).</translation>
+<translation id="7577193603922410712">Chromium साठी विशिष्ट सुरक्षा अपडेट आत्ताच लागू केले; ते प्रभावी होण्यासाठी तुम्ही आता रीस्टार्ट करावे (आम्ही तुमचे टॅब रिस्टोअर करू).</translation>
 <translation id="761356813943268536">Chromium आपला कॅमेरा आणि मायक्रोफोन वापरत आहे.</translation>
 <translation id="7617377681829253106">Chromium आता उत्कृष्ट झाले आहे</translation>
 <translation id="7686590090926151193">Chromium तुमचा डीफॉल्ट ब्राउझर नाही</translation>
@@ -218,10 +218,10 @@
 <translation id="7745317241717453663">हे या डिव्‍हाइस मधून आपला ब्राउझिंग डेटा हटवेल. नंतर आपला डेटा पुनर्प्राप्त करण्‍यासाठी, Chromium मध्ये <ph name="USER_EMAIL" /> म्हणून साइन इन करा.</translation>
 <translation id="7747138024166251722">इन्स्टॉलर तात्पुरती निर्देशिका तयार करू शकत नाही. कृपया सॉफ्टवेअर स्थापन करण्यासाठी रिक्त डिस्क स्थान आणि परवानगी करिता पहा.</translation>
 <translation id="7756122083761163394">या व्यक्तीचा ब्राउझिंग डेटा या डिव्हाइसवरून हटवला जाईल. डेटा पुन्हा मिळवण्यासाठी, Chrome वर $2 म्हणून साइन इन करा.</translation>
-<translation id="7773960292263897147">चेतावणी: Chromium हे एक्सटेंशनना तुमचा ब्राउझिंग इतिहास रेकॉर्ड करून ठेवण्यापासून रोखू शकत नाही. हे एक्सटेंशन बंद करण्यासाठी गुप्त मोडमधील या पर्यायाची निवड रद्द करा.</translation>
-<translation id="7774736947049807614">प्रमाणीकरण प्रमाणपत्र अयशस्वी झाले. कृपया Chromium मध्ये <ph name="USER_NAME" /> म्हणून पुन्हा साइन इन करा किंवा आणखी माहितीसाठी तुमच्या प्रशासकाशी संपर्क साधा. <ph name="ADDITIONAL_EXPLANATION" /></translation>
+<translation id="7773960292263897147">चेतावणी: Chromium हे एक्स्टेंशनना तुमचा ब्राउझिंग इतिहास रेकॉर्ड करून ठेवण्यापासून रोखू शकत नाही. हे एक्स्टेंशन बंद करण्यासाठी गुप्त मोडमधील या पर्यायाची निवड रद्द करा.</translation>
+<translation id="7774736947049807614">अॉथेंटिकेशन सर्टिफिकेट अयशस्वी झाले. कृपया Chromium मध्ये <ph name="USER_NAME" /> म्हणून पुन्हा साइन इन करा किंवा आणखी माहितीसाठी तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा. <ph name="ADDITIONAL_EXPLANATION" /></translation>
 <translation id="7790626492778995050"><ph name="PAGE_TITLE" /> - Chromium कॅनरी</translation>
-<translation id="7867198900892795913">Chromium नवीनतम आवृत्तीवर अपडेट होऊ शकले नाही, त्यामुळे तुम्ही नवीन वैशिष्ट्ये आणि सुरक्षितता निराकरणे गमावत आहात.</translation>
+<translation id="7867198900892795913">Chromium नवीनतम आवृत्तीवर अपडेट होऊ शकले नाही, त्यामुळे तुम्ही नवीन वैशिष्ट्ये आणि सीक्युरिटी निराकरणे गमावत आहात.</translation>
 <translation id="7901117350626490574">Chromium साठी नवीन अपडेट उपलब्ध आहे आणि तुम्ही रीलाँच करताच ते लागू केले जाईल.</translation>
 <translation id="7937630085815544518">आपण <ph name="USER_EMAIL_ADDRESS" /> या रुपात Chromium मध्ये साइन इन केले होते. कृपया पुन्हा साइन इन करण्यासाठी समान खाते वापरा.</translation>
 <translation id="7962572577636132072">Chromium स्वयंचलितपणे अपडेट होते जेणेकरून आपल्याकडे नेहमी सर्वात नवीन आवृत्ती असते.</translation>
@@ -231,7 +231,7 @@
 <translation id="8030318113982266900"><ph name="CHANNEL_NAME" /> चॅनेलवर आपले डीव्हाइस अपडेट करत आहे...</translation>
 <translation id="8157153840442649507">Chromium या भाषेत प्रदर्शित केले आहे</translation>
 <translation id="81770708095080097">ही फाईल धोकादायक आहे, त्यामुळे Chromium ने अवरोधित केली आहे.</translation>
-<translation id="8222496066431494154">आपल्या फोनवर Chromium इंस्टॉल करा. आम्ही आपल्या या खाते पुनर्प्राप्ती फोन नंबरवर एक SMS पाठवू: <ph name="PHONE_NUMBER" /></translation>
+<translation id="8222496066431494154">तुमच्या फोनवर Chromium इंस्टॉल करा. आम्ही तुमच्या या खाते रिकव्हरी फोन नंबरवर एक SMS पाठवू: <ph name="PHONE_NUMBER" /></translation>
 <translation id="825412236959742607">हे पेज खूप जास्त मेमरी वापरत असल्यामुळे, Chrome ने काही आशय काढून टाकला आहे.</translation>
 <translation id="8269379391216269538">Chromium उत्कृष्ट करण्यात मदत करा</translation>
 <translation id="8290862415967981663">ही फाईल कदाचित धोकादायक असू शकते, त्यामुळे Chromium ने ती अवरोधित केली आहे.</translation>
@@ -255,7 +255,7 @@
 <translation id="8862326446509486874">आपल्‍याकडे सिस्टम-स्तर स्थापनेसाठी उचित अधिकार नाहीत. प्रशासक म्हणून पुन्हा इन्स्टॉलर चालविण्याचा प्रयत्न करा.</translation>
 <translation id="8897323336392112261">आपण Chromium सुरू करता किंवा होम बटण क्लिक करता तेव्हा कोणते पृष्ठ दर्शविले जाते हे देखील हे नियंत्रित करते.</translation>
 <translation id="8907580949721785412">Chromium संकेतशब्‍द दर्शविण्‍याचा प्रयत्‍न करत आहे. यास अनुमती देण्‍यासाठी आपला Windows संकेतशब्‍द टाइप करा.</translation>
-<translation id="8941642502866065432">Chromium अपडेट करू शकत नाही</translation>
+<translation id="8941642502866065432">Chromium अपडेट करता आले नाही</translation>
 <translation id="8974095189086268230">अतिरिक्त <ph name="BEGIN_LINK_CROS_OSS" />खुले स्रोत सॉफ्‍टवेअर<ph name="END_LINK_CROS_OSS" /> द्वारे Chromium OS बनवणे शक्‍य झाले.</translation>
 <translation id="8985587603644336029">कोणीतरी यापूर्वी या संगणकावरील Chromium मध्ये <ph name="ACCOUNT_EMAIL_LAST" /> या रुपात साइन इन केले होते. ते आपले खाते नसल्यास, तुमची माहिती स्वतंत्र ठेवण्यासाठी एक नवीन Chromium वापरकर्ता तयार करा.
 
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 9448a02..e90529d 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -2180,7 +2180,6 @@
 <translation id="4296575653627536209">ክትትል የሚደረግበት ተጠቃሚ አክል</translation>
 <translation id="4297219207642690536">ዳግም ይጀምሩ እና ዳግም ያቀናብሩ</translation>
 <translation id="4297322094678649474">ቋንቋዎችን ይቀይሩ</translation>
-<translation id="4300305918532693141">ይህን ቅንብር ለመለወጥ <ph name="BEGIN_LINK" />ስምረትን ዳግም ያስጀምሩ<ph name="END_LINK" /></translation>
 <translation id="4305227814872083840">ረጅም (2 ሴ)</translation>
 <translation id="4306119971288449206">መተግበሪያዎች በይዘት አይነት «<ph name="CONTENT_TYPE" />» ሊቀርቡ ይገባል</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K በቀጥታ)</translation>
@@ -5115,7 +5114,7 @@
 <translation id="8775404590947523323">አርትዖትዎችዎ በራስ-ሰር ተቀምጠዋል።<ph name="BREAKS" />የመጀመሪያው ምስል ቅጂ ለማስቀመጥ «የመጀመሪያውን ተካ» የሚለው ላይ ያለውን ምልክት ያንሱ</translation>
 <translation id="8777628254805677039">የስር ይለፍ ቃል</translation>
 <translation id="8780443667474968681">የድምጽ ፍለጋ ጠፍቷል።</translation>
-<translation id="878068003854005405">እንጀምር። የእርስዎን ጥእት በዳሳሹ ላይ ያስቀምጡ።</translation>
+<translation id="878068003854005405">እንጀምር። የእርስዎን ጣት በዳሳሹ ላይ ያስቀምጡ።</translation>
 <translation id="878069093594050299">ይህ ሰርቲፊኬት ለሚከተሉት አገልግሎቶች ተረጋግጧል፦</translation>
 <translation id="8781980678064919987">ክዳኑ ሲዘጋ አጥፋ</translation>
 <translation id="8782565991310229362">የኪዮስክ መተግበሪያ ማስጀመር ተሰርዟል።</translation>
@@ -5156,7 +5155,6 @@
 <translation id="8834164572807951958">የ«<ph name="DESTINATION_NAME" />» አባላት የእነዚህ ንጥሎች ቅጂ መዳረሻ ያገኛሉ።</translation>
 <translation id="8838770651474809439">ሃምበርገር</translation>
 <translation id="883911313571074303">ምስልን አብራራ</translation>
-<translation id="8844690305858050198">ተከናውኗል! ጎጂ ሶፍትዌር ተወግዷል። ቅጥያዎችን መልሶ ለማብራት፣ &lt;a href="chrome://extensions"&gt;ቅጥያዎች&lt;/a&gt;ን ይጎብኙ።</translation>
 <translation id="8845001906332463065">እገዛ ያግኙ</translation>
 <translation id="8846141544112579928">የቁልፍ ሰሌዳን በመፈለግ ላይ...</translation>
 <translation id="8847988622838149491">ዩ ኤስ ቢ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 6557594..3fdbfdb 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1358,7 +1358,7 @@
 <translation id="3020990233660977256">الرقم التسلسلي: <ph name="SERIAL_NUMBER" /></translation>
 <translation id="3021678814754966447">عرض م&amp;صدر الإطار</translation>
 <translation id="3022978424994383087">لم يتم استيعاب هذا.</translation>
-<translation id="3023464535986383522">سماع الاختيار</translation>
+<translation id="3023464535986383522">الاختيار والاستماع</translation>
 <translation id="3024374909719388945">استخدام تنسيق 24 ساعة</translation>
 <translation id="302781076327338683">إعادة تحميل تجاوز ذاكرة التخزين المؤقت</translation>
 <translation id="3031417829280473749">‏الوكيل X</translation>
@@ -1377,7 +1377,7 @@
 <translation id="304826556400666995">إلغاء تجاهل علامات التبويب</translation>
 <translation id="3053013834507634016">استخدام مفتاح الشهادة</translation>
 <translation id="3057861065630527966">نسخ الصور والفيديوهات احتياطيًا</translation>
-<translation id="3060379269883947824">تفعيل سماع الاختيار</translation>
+<translation id="3060379269883947824">تفعيل الاختيار والاستماع</translation>
 <translation id="3061707000357573562">خدمة رمز التصحيح</translation>
 <translation id="3065041951436100775">التعليقات المرتبطة بعلامة التبويب المعطلة.</translation>
 <translation id="3067198179881736288">هل تريد تثبيت التطبيق؟</translation>
@@ -2177,7 +2177,6 @@
 <translation id="4296575653627536209">إضافة مستخدم تحت الإشراف</translation>
 <translation id="4297219207642690536">إعادة التشغيل وإعادة الضبط</translation>
 <translation id="4297322094678649474">تغيير اللغات</translation>
-<translation id="4300305918532693141">لتغيير هذا الإعداد، يمكنك <ph name="BEGIN_LINK" />إعادة تعيين المزامنة<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">طويل (ثانيتين)</translation>
 <translation id="4306119971288449206">يجب عرض التطبيقات باستخدام نوع المحتوى "<ph name="CONTENT_TYPE" />".</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />كيلوبايت (<ph name="NUM_KILOBYTES_LIVE" />كيلوبايت مباشرة)</translation>
@@ -3260,7 +3259,7 @@
 <translation id="5955282598396714173">انتهت صلاحية كلمة المرور. يُرجى الخروج ثم تسجيل الدخول مجددًا لتغييرها.</translation>
 <translation id="5956585768868398362">هل هذه هي صفحة البحث التي كنت تتوقع ظهورها؟</translation>
 <translation id="5957613098218939406">خيارات إضافية</translation>
-<translation id="5957987129450536192">يمكنك النقر على رمز"سماع الاختيار" بالقرب من الملف الشخصي، ثم اختيار ما ترغب بسماعه.</translation>
+<translation id="5957987129450536192">يمكنك النقر على رمز"الاختيار والاستماع" بالقرب من الملف الشخصي، ثم اختيار ما ترغب بسماعه.</translation>
 <translation id="5958529069007801266">مستخدم يخضع للإدارة</translation>
 <translation id="5959471481388474538">الشبكة غير متاحة</translation>
 <translation id="595959584676692139">يُرجى إعادة تحميل الصفحة لاستخدام هذه الإضافة</translation>
@@ -4495,7 +4494,7 @@
 <translation id="7839051173341654115">وسائط العرض/النسخ الاحتياطي</translation>
 <translation id="7839192898639727867">معرّف مفتاح صاحب الشهادة</translation>
 <translation id="7839804798877833423">سيؤدي جلب هذه الملفات إلى استخدام حوالي <ph name="FILE_SIZE" /> من بيانات الجوال.</translation>
-<translation id="7844553762889824470">‏حدّد النص الذي تريد سماعه، ثم اضغط على زر "البحث + S". كما يمكنك الضغط مع الاستمرار على مفتاح "البحث" أو النقر على رمز "سماع الاختيار" بالقرب من صورة ملفك الشخصي لتحديد النص.</translation>
+<translation id="7844553762889824470">‏حدّد النص الذي تريد سماعه، ثم اضغط على زر "البحث + S". كما يمكنك الضغط مع الاستمرار على مفتاح "البحث" أو النقر على رمز "الاختيار والاستماع" بالقرب من صورة ملفك الشخصي لتحديد النص.</translation>
 <translation id="7844992432319478437">تحديث الاختلافات</translation>
 <translation id="7846076177841592234">إلغاء التحديد</translation>
 <translation id="7846634333498149051">لوحة المفاتيح</translation>
@@ -5150,7 +5149,6 @@
 <translation id="8834164572807951958">سيحصل أعضاء '<ph name="DESTINATION_NAME" />' على إمكانية الوصول إلى نسخة من هذه العناصر.</translation>
 <translation id="8838770651474809439">هامبورجر</translation>
 <translation id="883911313571074303">إضافة تعليق توضيحي على الصورة</translation>
-<translation id="8844690305858050198">‏انتهى الإجراء، وتمت إزالة البرامج الضارة. لتفعيل الإضافات مرة أخرى، يُرجى زيارة &lt;a href="chrome://extensions"&gt;الإضافات.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">الحصول على مساعدة</translation>
 <translation id="8846141544112579928">جارٍ البحث عن لوحة المفاتيح...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5184,7 +5182,7 @@
 <translation id="8898786835233784856">تحديد علامة التبويب التالية</translation>
 <translation id="8898840733695078011">قوة الإشارة</translation>
 <translation id="8899851313684471736">&amp;فتح الرّابط في نافذة جديدة</translation>
-<translation id="8902667442496790482">فتح إعدادات سماع الاختيار</translation>
+<translation id="8902667442496790482">فتح إعدادات الاختيار والاستماع</translation>
 <translation id="8903921497873541725">تكبير</translation>
 <translation id="8904976895050290827">‏مزامنة Chrome</translation>
 <translation id="8909833622202089127">تتبّع موقع الويب موقعك الجغرافي.</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 5fcf6f0..b6d9bd36 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -2181,7 +2181,6 @@
 <translation id="4296575653627536209">Добавяне на контролиран потребител</translation>
 <translation id="4297219207642690536">Рестартиране и нулиране</translation>
 <translation id="4297322094678649474">Промяна на езиците</translation>
-<translation id="4300305918532693141">За да промените тази настройка, <ph name="BEGIN_LINK" />нулирайте синхронизирането<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">дълго (2 сек)</translation>
 <translation id="4306119971288449206">Приложенията трябва да се показват с тип съдържание „<ph name="CONTENT_TYPE" />“</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> КБ (<ph name="NUM_KILOBYTES_LIVE" /> КБ активни)</translation>
@@ -5154,7 +5153,6 @@
 <translation id="8834164572807951958">Членовете на „<ph name="DESTINATION_NAME" />“ ще получат достъп до копието на тези елементи.</translation>
 <translation id="8838770651474809439">Хамбургер</translation>
 <translation id="883911313571074303">Добавяне на пояснение към изображението</translation>
-<translation id="8844690305858050198">Готово! Опасният софтуер е премахнат. За да включите отново разширенията, посетете &lt;a href="chrome://extensions"&gt;Разширения&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Получете помощ</translation>
 <translation id="8846141544112579928">Търси се клавиатура...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 4b6f7b0..baf8400 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -42,6 +42,7 @@
 <translation id="1056775291175587022">কোনও নেটওয়ার্ক নেই</translation>
 <translation id="1056898198331236512">সতর্কতা</translation>
 <translation id="1058262162121953039">PUK</translation>
+<translation id="1059855432287631118">আঙুলের ছাপ রেজিস্টার করুন</translation>
 <translation id="1061904396131502319">বিরতির সময় হতে চলেছে</translation>
 <translation id="1062407476771304334">প্রতিস্থাপন করুন</translation>
 <translation id="1067048845568873861">তৈরি হয়েছে</translation>
@@ -74,6 +75,7 @@
 <translation id="1114202307280046356">ডায়মন্ড</translation>
 <translation id="1114335938027186412">আপনার কম্পিউটারে একটি  বিশ্বস্ত প্ল্যাটফর্ম মডিউল (TPM) নিরাপত্তা ডিভাইস রয়েছে, যা Chrome OS এ অনেকগুলি জটিল সুরক্ষা বৈশিষ্ট্য প্রয়োগ করতে ব্যবহৃত হয়। আরও জানতে Chromebook সহায়তা কেন্দ্রে : https://support.google.com/chromebook/?p=tpm যান</translation>
 <translation id="1114525161406758033">ঢাকনা বন্ধ থাকলে স্লীপ মোডে চলে যাবে</translation>
+<translation id="1115324527092594775">Better Together সেট-আপ করুন</translation>
 <translation id="1116694919640316211">সম্পর্কে</translation>
 <translation id="1116779635164066733">এই সেটিংসটি "<ph name="NAME" />" এক্সটেনশন দ্বারা প্রয়োগ করা হয়েছে।</translation>
 <translation id="111844081046043029">আপনি এই পৃষ্ঠাটি ছেড়ে যাওয়ার ব্যাপারে কি নিশ্চিত?</translation>
@@ -109,6 +111,7 @@
 <translation id="1156488781945104845">বর্তমান সময়</translation>
 <translation id="1157102636231978136">আপনার ব্রাউজ করা ডেটা ও অ্যাক্টিভিটি আপনার Google অ্যাকাউন্টের সাথে সিঙ্ক করা আছে</translation>
 <translation id="1161575384898972166">ক্লায়েন্ট শংসাপত্র রপ্তানি করতে অনুগ্রহ করে <ph name="TOKEN_NAME" />-এ প্রবেশ করুন৷</translation>
+<translation id="1161699061380012396">Chrome OS ইনপুট পদ্ধতি</translation>
 <translation id="1163931534039071049">ফ্রেম উৎস &amp;দেখুন</translation>
 <translation id="1164674268730883318"><ph name="DEVICE_TYPE" /> এর জন্য Smart Lock বন্ধ করবেন?</translation>
 <translation id="1164899421101904659">পিন আনলক কী লিখুন</translation>
@@ -164,6 +167,7 @@
 <translation id="1225211345201532184">তাকের আইটেম নম্বর ৫</translation>
 <translation id="1227507814927581609">"<ph name="DEVICE_NAME" />" এর সাথে সংযুক্ত হওয়ার সময় প্রমাণীকরণ ব্যার্থ হয়েছে৷</translation>
 <translation id="1230807973377071856">সিস্টেম মেনু</translation>
+<translation id="123186018454553812">একটি ভিন্ন উপায়ে চেষ্টা করুন</translation>
 <translation id="1232569758102978740">শিরোনামহীন</translation>
 <translation id="1233721473400465416">স্থানীয়</translation>
 <translation id="1234808891666923653">সার্ভিস ওয়ার্কার্স</translation>
@@ -211,6 +215,7 @@
 <translation id="1303671224831497365">কোনো ব্লুটুথ ডিভাইস পাওয়া যায়নি</translation>
 <translation id="1306606229401759371">সেটিংস পরিবর্তন করুন</translation>
 <translation id="1307559529304613120">ওহো! সিস্টেমটি এই ডিভাইসের জন্য দীর্ঘমেয়াদি API অ্যাক্সেস টোকেন সঞ্চয় করতে ব্যর্থ হয়েছে৷</translation>
+<translation id="1307931752636661898">Linux ফাইল দেখা যায়নি</translation>
 <translation id="1313405956111467313">স্বয়ংক্রিয় প্রক্সি কনফিগারেশন</translation>
 <translation id="131364520783682672">Caps Lock</translation>
 <translation id="1313705515580255288">আপনার বুকমার্ক, ইতিহাস এবং অন্যান্য সেটিংস আপনার Google অ্যাকাউন্টে সিঙ্ক হবে৷</translation>
@@ -330,6 +335,7 @@
 <translation id="1485141095922496924">সংস্করণ <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">পাসওয়ার্ড খুঁজুন</translation>
 <translation id="1487335504823219454">চালু - কাস্টম সেটিংস</translation>
+<translation id="1489664337021920575">অন্য বিকল্প বেছে নিন</translation>
 <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" />এর জন্য প্রতীক্ষারত...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" />টি অন্যান্য উপলব্ধ ডিভাইস৷</translation>
 <translation id="1497522201463361063">"<ph name="FILE_NAME" />" পুনঃনাম দিতে অসমর্থ৷ <ph name="ERROR_MESSAGE" /></translation>
@@ -364,6 +370,8 @@
 <translation id="1530838837447122178">মাউস এবং টাচপ্যাড ডিভাইস সেটিংস খুলুন</translation>
 <translation id="1531004739673299060">অ্যাপ্লিকেশান উইন্ডো</translation>
 <translation id="15373452373711364">বড় মাউস কার্সার</translation>
+<translation id="1538729222189715449">Linux ফাইল খোলা হচ্ছে...</translation>
+<translation id="153933193410874873">আমরা এই ডিভাইসে আপনার পরিচয় যাচাই করতে পারিনি</translation>
 <translation id="1540605929960647700">ডেমো মোড চালু করুন</translation>
 <translation id="1543284117603151572">Edge থেকে আমদানি করা</translation>
 <translation id="1545177026077493356">স্বয়ংক্রিয় Kiosk মোড</translation>
@@ -380,6 +388,7 @@
 <translation id="1564414980088536597">এই ইমেজটি ব্যবহার করা যাবে না। অন্য একটি ইমেজ পছন্দ করুন।</translation>
 <translation id="1566049601598938765">ওয়েবসাইট</translation>
 <translation id="1567387640189251553">আপনি যখন শেষবার পাসওয়ার্ডটি লিখেছিলেন তার পরে অন্য একটি কীবোর্ডে কানেক্ট করা হয়েছিল। এটি আপনার পাসওয়ার্ড চুরি করার চেষ্টা করতে পারে।</translation>
+<translation id="1567750922576943685">আপনার পরিচয় যাচাই করলে তা আপনার ব্যক্তিগত তথ্য রক্ষা করতে সহায়তা করে</translation>
 <translation id="1567993339577891801">JavaScript কনসোল</translation>
 <translation id="1568067597247500137">সাইটটি মিউট করুন</translation>
 <translation id="1568323446248056064">প্রদর্শন ডিভাইস সেটিংস খুলুন</translation>
@@ -785,6 +794,7 @@
 <translation id="2178098616815594724"><ph name="PEPPER_PLUGIN_DOMAIN" /> এ <ph name="PEPPER_PLUGIN_NAME" /> আপনার কম্পিউটার অ্যাক্সেস করতে চায়</translation>
 <translation id="2178614541317717477">CA আপোস</translation>
 <translation id="218070003709087997">কতগুলি কপি প্রিন্ট হবে তা নির্দিষ্ট করতে একটি সংখ্যা ব্যবহার করুন (১ থেকে ৯৯৯)।</translation>
+<translation id="2184515124301515068">সাইটটি কখন সাউন্ড চালাতে পারবে তা Chrome-কে বেছে নিতে দিন (প্রস্তাবিত)</translation>
 <translation id="2187895286714876935">সার্ভার শংসাপত্র  আমদানি  ত্রুটি</translation>
 <translation id="2187906491731510095">এক্সটেনশনগুলি আপডেট করা হয়েছে</translation>
 <translation id="2188881192257509750"><ph name="APPLICATION" /> খুলুন</translation>
@@ -829,6 +839,7 @@
 <translation id="2241053333139545397">কয়েকটি ওয়েবসাইটে আপনার ডেটা পড়ুন এবং পরিবর্তন করুন</translation>
 <translation id="2242687258748107519">ফাইল তথ্য</translation>
 <translation id="2243194103992005307">অ্যাপগুলি সরাতে, সেটিংস &gt; অ্যাপ বা অ্যাপ্লিকেশন ম্যানেজারে যান। তারপরে আপনি যে অ্যাপটি আনইনস্টল করতে চান সেটি ট্যাপ করুন (অ্যাপটি খোঁজার জন্য আপনাকে ডান বা বাঁদিকে সোয়াইপ করতে হতে পারে)। তারপরে 'আনইনস্টল বা বন্ধ করুন' বিকল্পে ট্যাপ করুন।</translation>
+<translation id="224940702122312781">এই পৃষ্ঠাটি প্রচুর ডেটা ব্যবহার করবে।</translation>
 <translation id="2249605167705922988">উদাঃ 1-5, 8, 11-13</translation>
 <translation id="2251218783371366160">সিস্টেম প্রদর্শকের মাধ্যমে খুলুন</translation>
 <translation id="225163402930830576">নেটওয়ার্কগুলি রিফ্রেশ করুন</translation>
@@ -869,6 +880,7 @@
 <translation id="2307462900900812319">নেটওয়ার্ক কনফিগার করুন</translation>
 <translation id="230927227160767054">এই পৃষ্ঠাটি একটি পরিষেবা নিয়ন্ত্রক ইনস্টল করতে চায়৷</translation>
 <translation id="2309620859903500144">এই সাইটটি আপনার মোশন এবং লাইট সেন্সর অ্যাক্সেস করতে পারবে না।</translation>
+<translation id="2315414688463285945">Linux কনফিগার করতে সমস্যা হচ্ছে। আবার চেষ্টা করুন।</translation>
 <translation id="2315821125498993513">ফোনের সাথে কানেক্ট করা যায়নি। <ph name="LINK_BEGIN" />আরও জানুন।<ph name="LINK_END" /></translation>
 <translation id="2316129865977710310">না, ধন্যবাদ</translation>
 <translation id="2317842250900878657"><ph name="PROGRESS_PERCENT" />% হয়েছে</translation>
@@ -1041,6 +1053,7 @@
 <translation id="2580924999637585241">মোট: <ph name="NUMBER_OF_SHEETS" /> <ph name="SHEETS_LABEL" /></translation>
 <translation id="258095186877893873">দীর্ঘ সময়</translation>
 <translation id="2582253231918033891"><ph name="PRODUCT_NAME" /> <ph name="PRODUCT_VERSION" /> (প্ল্যাটফর্ম <ph name="PLATFORM_VERSION" />) <ph name="DEVICE_SERIAL_NUMBER" /></translation>
+<translation id="2585724835339714757">এই ট্যাবটি আপনার স্ক্রিন শেয়ার করছে।</translation>
 <translation id="2586657967955657006">ক্লিপবোর্ড</translation>
 <translation id="2586672484245266891">এর থেকে ছোট URL লিখুন</translation>
 <translation id="2587922270115112871">তত্ত্বাবধানে থাকা ব্যবহারকারী তৈরি করলে Google অ্যাকাউন্ট তৈরি হয় না এবং সেগুলির ডেটা ও সেটিংস
@@ -1186,6 +1199,7 @@
 <translation id="2783298271312924866">ডাউনলোড হয়েছে</translation>
 <translation id="2783321960289401138">শর্টকাট তৈরি করুন...</translation>
 <translation id="2783829359200813069">এনক্রিপশনের ধরন বেছে নিন</translation>
+<translation id="2783952358106015700"><ph name="APP_NAME" />-এ আপনার নিরাপত্তা কী ব্যবহার করুন</translation>
 <translation id="2784407158394623927">আপনার মোবাইল ডেটা পরিষেবাকে সক্রিয় করা হচ্ছে</translation>
 <translation id="2785873697295365461">ফাইল বর্ণনাকারী</translation>
 <translation id="2787047795752739979">মূল লেখা পুনর্লিখন করুন</translation>
@@ -1346,6 +1360,7 @@
 <translation id="3020990233660977256">ক্রমিক সংখ্যা: <ph name="SERIAL_NUMBER" /></translation>
 <translation id="3021678814754966447">ফ্রেম উৎস &amp;দেখুন</translation>
 <translation id="3022978424994383087">বুঝতে পারিনি।</translation>
+<translation id="3023464535986383522">বাছুন ও শুনুন</translation>
 <translation id="3024374909719388945">24-ঘন্টার ঘড়ি ব্যবহার করুন</translation>
 <translation id="302781076327338683">ক্যাশে বাইপাস করা আবার লোড করুন</translation>
 <translation id="3031417829280473749">এজেন্ট X</translation>
@@ -1499,6 +1514,7 @@
 <translation id="3285322247471302225">নতুন &amp;ট্যাব</translation>
 <translation id="3288047731229977326">ডেভেলপার মোডে চলমান এক্সটেনশানগুলি আপনার কম্পিউটারের ক্ষতি করতে পারে৷ যদি আপনি একজন ডেভেলপার না হন, তবে সুরক্ষিত থাকার জন্য আপনার এই এক্সটেনশানগুলিকে ডেভেলপার মোডে চালানো অক্ষম করা উচিৎ৷</translation>
 <translation id="3289856944988573801">আপডেটগুলি পরীক্ষা করার জন্য, দয়া করে Ethernet বা ওয়াই-ফাই ব্যবহার করুন৷</translation>
+<translation id="3292421191230118801">মোবাইল থেকে আপনার Chromebook-এ সাইটগুলি আবার দেখা শুরু করুন</translation>
 <translation id="32939749466444286">Linux কন্টেনারটি শুরু হয়নি। আবার চেষ্টা করুন।</translation>
 <translation id="3294437725009624529">অতিথি</translation>
 <translation id="329838636886466101">মেরামত</translation>
@@ -1538,6 +1554,7 @@
 <translation id="3348038390189153836">সরানোযোগ্য ডিভাইস শনাক্ত করা হয়েছে</translation>
 <translation id="3348459612390503954">অভিনন্দন</translation>
 <translation id="3349933790966648062">মেমরি ফুটপ্রিন্ট</translation>
+<translation id="3350117557200012647">যুক্ত করার মোডে যান</translation>
 <translation id="3353984535370177728">আপলোড করতে একটি ফোল্ডার বেছে নিন</translation>
 <translation id="3355936511340229503">সংযোগ ত্রুটি</translation>
 <translation id="3356797067524893661">Hangouts Meet ব্যবহার চালিয়ে যেতে আপনি প্রস্তুত</translation>
@@ -1677,6 +1694,7 @@
 <translation id="3556000484321257665">আপনার সার্চ ইঞ্জিন <ph name="URL" /> এ পরিবর্তন করা হয়েছে।</translation>
 <translation id="3563432852173030730">কিয়স্ক অ্যাপ্লিকেশানটি ডাউনলোড করা যাবে না।</translation>
 <translation id="3564334271939054422">আপনি যে (<ph name="NETWORK_ID" />) ওয়াই-ফাই নেটওয়ার্ক ব্যবহার করছেন তার জন্য লগ ইন পৃষ্ঠা দেখার প্রয়োজন হতে পারে৷</translation>
+<translation id="3564848315152754834">ইউএসবি নিরাপত্তা কী</translation>
 <translation id="3566721612727112615">কোনো সাইট যোগ করা হয়নি</translation>
 <translation id="3569382839528428029">আপনি কি <ph name="APP_NAME" /> এর দ্বারা আপনার স্ক্রিন শেয়ার করতে চান?</translation>
 <translation id="3570985609317741174">ওয়েব সামগ্রী</translation>
@@ -1727,6 +1745,7 @@
 <translation id="3627588569887975815">লিঙ্কটি ছ&amp;দ্মবেশী উইন্ডোতে খুলুন</translation>
 <translation id="3627671146180677314">Netscape শংসাপত্র পুনর্নবীকরণ সময়</translation>
 <translation id="3627879631695760395"><ph name="APP" /> ইনস্টল করুন...</translation>
+<translation id="3630132874740063857">আপনার ফোন</translation>
 <translation id="3630995161997703415">যেকোনও সময় ব্যবহার করার জন্য এই সাইটটিকে আপনার শেল্ফে যোগ করুন</translation>
 <translation id="3635030235490426869">ট্যাব ১</translation>
 <translation id="3636096452488277381"><ph name="USER_GIVEN_NAME" />, কেমন আছেন?</translation>
@@ -1735,6 +1754,7 @@
 <translation id="363903084947548957">পরবর্তী ইনপুট পদ্ধতি</translation>
 <translation id="3640214691812501263"><ph name="USER_NAME" /> এর জন্য "<ph name="EXTENSION_NAME" />" জুড়বেন?</translation>
 <translation id="3644896802912593514">প্রস্থ</translation>
+<translation id="3645372836428131288">আঙ্গুলের ছাপের বিভিন্ন অংশ ক্যাপচার করতে একটু এদিক-ওদিক সরান</translation>
 <translation id="3648348069317717750"><ph name="USB_DEVICE_NAME" /> শনাক্ত হয়েছে</translation>
 <translation id="3649138363871392317">ফটো তোলা হয়েছে</translation>
 <translation id="3650952250015018111">"<ph name="APP_NAME" />" অ্যাপকে এগুলি অ্যাক্সেস করতে দিন:</translation>
@@ -1748,6 +1768,7 @@
 <translation id="3664511988987167893">এক্সটেনশনের আইকন</translation>
 <translation id="3665589677786828986">Chrome শনাক্ত করেছে যে অন্য কোনো প্রোগ্রাম আপনার কিছু সেটিংস ক্ষতিগ্রস্ত করেছে এবং সেগুলিকে তাদের মূল ডিফল্টে আবার সেট করেছে।</translation>
 <translation id="3668570675727296296">ভাষা সেটিংস</translation>
+<translation id="3668801437375206837">ব্লুটুথ সমস্যাকে আরও ভালভাবে নির্ধারন করতে, Googlers তাদের ফিডব্যাক রিপোর্টের সাথে অতিরিক্ত ব্লুটুথ লগও অন্তর্ভুক্ত করতে পারে। এই বিকল্পটি বেছে নিলে PII যতখানি সম্ভব বাদ দিয়ে আপনার বর্তমান সেশন থেকে btsnoop এবং HCI লগ এই রিপোর্টে অন্তর্ভুক্ত করা হয়। শুধুমাত্র Listnr-এ Chrome OS প্রোডাক্ট গ্রুপের ম্যানেজাররা এই লগ অ্যাক্সেস করতে পারবেন। ৯০ দিন পরে লগ স্থায়ীভাবে মুছে ফেলা হবে।</translation>
 <translation id="3668823961463113931">হ্যান্ডলার</translation>
 <translation id="3670229581627177274">ব্লুটুথ চালু করুন</translation>
 <translation id="3672681487849735243">একটি ফ্যাক্টরি ত্রুটি শনাক্ত করা হয়েছে</translation>
@@ -1766,6 +1787,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> আপনার স্ক্রিন শেয়ার করতে চায়</translation>
 <translation id="3693415264595406141">পাসওয়ার্ড:</translation>
 <translation id="3694027410380121301">পূর্ববর্তী ট্যাব বেছে নিন</translation>
+<translation id="369489984217678710">পাসওয়ার্ড এবং অন্যান্য সাইন-ইন ডেটা</translation>
 <translation id="3699624789011381381">ইমেল আইডি</translation>
 <translation id="3699920817649120894">সিঙ্ক এবং নিজের মতো সাজিয়ে নেওয়ার বিকল্পগুলি বন্ধ করবেন?</translation>
 <translation id="3700888195348409686">(<ph name="PAGE_ORIGIN" />) উপস্থাপনা করা হচ্ছে</translation>
@@ -1789,6 +1811,7 @@
 <translation id="3727148787322499904">এই সেটিং পরিবর্তন করা হলে শেয়ার করা সব নেটওয়ার্ক প্রভাবিত হবে</translation>
 <translation id="3727187387656390258">পপআপ সংবীক্ষণ</translation>
 <translation id="3729506734996624908">অনুমোদিত সাইট</translation>
+<translation id="3731997362820527097">আপনার নিরাপত্তা কী বেছে নিন</translation>
 <translation id="3732078975418297900"><ph name="ERROR_LINE" /> নম্বর লাইনে কোনও ভুল আছে</translation>
 <translation id="3733127536501031542">স্টেপ-আপ সহ SSL সার্ভার</translation>
 <translation id="3735740477244556633">এই অনুসারে সাজান</translation>
@@ -1887,7 +1910,9 @@
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: সিঙ্ক থামানো হয়েছে</translation>
 <translation id="3860381078714302691">Hangouts Meet এ স্বাগতম</translation>
+<translation id="3861241522664181545">পৃষ্ঠাতে লোড করা থামানো হয়েছে।</translation>
 <translation id="3862134173397075045">Chrome এ কাস্ট অভিজ্ঞতা নিতে স্বাগতম!</translation>
+<translation id="3862693525629180217">বিল্ট-ইন সেন্সর দ্বারা যাচাই করুন</translation>
 <translation id="3862788408946266506">'Kiosk_only' ম্যানিফেস্ট অ্যাট্রিবিউটের সাথে অ্যাপকে অবশ্যই Chrome OS কিয়স্ক মোডে ইনস্টল করতে হবে</translation>
 <translation id="3865414814144988605">রেজোলিউশন</translation>
 <translation id="386548886866354912"><ph name="EXTENSION_NAME" /> দিয়ে প্যাক করুন</translation>
@@ -2011,6 +2036,7 @@
 <translation id="4055023634561256217">আপনার যন্ত্র পাওয়ারওয়াশের মাধ্যমে আবার সেট করার আগে একটি পুনারম্ভ করা দরকার৷</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">দোকানে দেখুন</translation>
+<translation id="4058647953897694817">ব্লুটুথ দিয়ে যাচাই করুন</translation>
 <translation id="4058720513957747556">অ্যাপ্লিকেশান সকেট (TCP/IP)</translation>
 <translation id="4058793769387728514">এখন দস্তাবেজ চেক করুন</translation>
 <translation id="406070391919917862">পৃষ্ঠভূমি অ্যাপ্লিকেশান</translation>
@@ -2024,6 +2050,7 @@
 <translation id="407520071244661467">স্কেল</translation>
 <translation id="4075639477629295004"><ph name="FILE_NAME" /> কে কাস্ট করা যায়নি।</translation>
 <translation id="4077917118009885966">এই সাইটে বিজ্ঞাপন ব্লক করা হয়েছে</translation>
+<translation id="4079799245038595838">আপনার ফোনে একটি বিজ্ঞপ্তি পাঠানো হয়েছে। এটি যে আপনি তা নিশ্চিত করতে প্রম্পটটি অনুসরণ করুন।</translation>
 <translation id="4081242589061676262">ফাইলটি কাস্ট করতে অক্ষম।</translation>
 <translation id="4084682180776658562">বুকমার্ক</translation>
 <translation id="4084835346725913160"><ph name="TAB_NAME" /> বন্ধ করুন</translation>
@@ -2123,6 +2150,7 @@
 <translation id="4250229828105606438">স্ক্রীনশট</translation>
 <translation id="4250680216510889253">না</translation>
 <translation id="4252852543720145436">সুরক্ষিত কন্টেন্ট শনাক্তকারী</translation>
+<translation id="4252899949534773101">ব্লুটুথ বন্ধ করা আছে</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - ট্যাব সামগ্রী শেয়ার করা হয়েছে</translation>
 <translation id="4254813446494774748">অনুবাদের ভাষা:</translation>
 <translation id="425573743389990240">ওয়াটে ব্যাটারি ডিসচার্জের হার (ঋণাত্মক মানের অর্থ হল ব্যাটারি চার্জ হচ্ছে)</translation>
@@ -2151,7 +2179,6 @@
 <translation id="4296575653627536209">তত্ত্বাবধানে থাকা ব্যবহারকারীকে যোগ করুন</translation>
 <translation id="4297219207642690536">রিস্টার্ট করুন এবং রিসেট করুন</translation>
 <translation id="4297322094678649474">ভাষাগুলি পরিবর্তন করুন</translation>
-<translation id="4300305918532693141">এই সেটিং পরিবর্তন করার জন্য, <ph name="BEGIN_LINK" />সিঙ্ক পুনরায় সেট করুন<ph name="END_LINK" />।</translation>
 <translation id="4305227814872083840">দীর্ঘ সময় (২সে.)</translation>
 <translation id="4306119971288449206">অ্যাপ "<ph name="CONTENT_TYPE" />" কন্টেন্ট-প্রকার সহ হওয়া উচিত</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K লাইভ)</translation>
@@ -2196,9 +2223,11 @@
 <translation id="438503109373656455">সারাটোগা</translation>
 <translation id="4387004326333427325">দূরবর্তী লোকেশন থেকে প্রমাণীকরণ শংসাপত্র প্রত্যাখ্যান করা হয়েছে</translation>
 <translation id="4389091756366370506">ব্যবহারকারী<ph name="VALUE" /></translation>
+<translation id="439266289085815679"><ph name="USER_EMAIL" /> এর মাধ্যমে ব্লুটুথ কনফিগারেশনটি নিয়ন্ত্রিত হয়।</translation>
 <translation id="4394049700291259645">অক্ষম</translation>
 <translation id="4400367121200150367">যে সাইটগুলি কখনও পাসওয়ার্ড সংরক্ষণ করে না সেগুলি এখানে দেখা যাবে</translation>
 <translation id="4400632832271803360">সবথেকে উপরের-সারির কীগুলির আচরণ পরিবর্তন করতে লঞ্চার কী ধরে থাকুন</translation>
+<translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation>
 <translation id="4408599188496843485">স&amp;হায়তা</translation>
 <translation id="4409697491990005945">মার্জিনসমূহ</translation>
 <translation id="4411578466613447185">কোড চিহ্নপ্রদানকারী</translation>
@@ -2247,6 +2276,7 @@
 <translation id="4481530544597605423">বিযুক্ত করা ডিভাইসগুলি</translation>
 <translation id="4482194545587547824">সার্চ এবং অন্যান্য Google পরিষেবাগুলি ব্যক্তিগতকৃত করতে Google আপনার ব্রাউজিং ইতিহাস ব্যবহার করতে পারে</translation>
 <translation id="4495419450179050807">এই পৃষ্ঠাতে দেখাবেন না</translation>
+<translation id="449938344715680828">বেরিয়ে যাওয়ার জন্য |<ph name="ACCELERATOR3" />| এর পর |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| প্রেস করুন</translation>
 <translation id="4499718683476608392">এক ক্লিকে ফর্মগুলি পূরণ করার জন্য ক্রেডিট কার্ড অটোফিল চালু করুন</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ক্র্যাশ করে গেছে</translation>
 <translation id="450099669180426158">বিস্ময়বোধক চিহ্ন আইকন</translation>
@@ -2267,6 +2297,7 @@
 <translation id="4522600456902129422">সাইটটিকে ক্লিপবোর্ড দেখার অনুমতি চালু রাখুন</translation>
 <translation id="4530494379350999373">উৎস</translation>
 <translation id="4533985347672295764">CPU সময়</translation>
+<translation id="4534661889221639075">আবার চেষ্টা করুন।</translation>
 <translation id="4535127706710932914">ডিফল্ট প্রোফাইল</translation>
 <translation id="4538417792467843292">শব্দ মুছুন </translation>
 <translation id="4538684596480161368"><ph name="HOST" /> এ সর্বদা আনস্যান্ডবক্সড প্লাগ ইন অবরুদ্ধ করুন</translation>
@@ -2322,6 +2353,7 @@
 <translation id="4611114513649582138">ডেটা সংযোগ পাওয়া যাচ্ছে</translation>
 <translation id="4613271546271159013">আপনি যখন একটি নতুন ট্যাব খুলবেন তখন কি পৃষ্ঠা দেখানো হবে, একটি এক্সটেনশান তার পরিবর্তন করেছে।</translation>
 <translation id="4615586811063744755">কোনও কুকি বেছে নেওয়া হয়নি</translation>
+<translation id="4615618657481886098">আপনি আগেই এই কী টি রেজিস্টার করেছেন। আপনাকে এটি আবার রেজিস্টার করতে হবে না।</translation>
 <translation id="4617270414136722281">এক্সটেনশান বিকল্পগুলি</translation>
 <translation id="4619615317237390068">অন্যান্য ডিভাইসগুলি থেকে ট্যাব</translation>
 <translation id="4620809267248568679">একটি এক্সটেনশন দ্বারা এই সেটিংটি প্রয়োগ করা হয়৷</translation>
@@ -2431,6 +2463,7 @@
 <translation id="4790972063719531840">স্বয়ংক্রিয়ভাবে Google এ ডায়াগনস্টিক এবং ব্যবহারের তথ্য পাঠান</translation>
 <translation id="4792711294155034829">&amp;কোনও সমস্যা অভিযোগ করুন...</translation>
 <translation id="479536056609751218">ওয়েবপৃষ্ঠা, কেবলমাত্রHTML </translation>
+<translation id="4798236378408895261"><ph name="BEGIN_LINK" />ব্লুটুথ লগ<ph name="END_LINK" /> যোগ করুন (Google ইন্টারনাল)</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4801448226354548035">অ্যাকাউন্টগুলি লুকান</translation>
 <translation id="4801512016965057443">মোবাইল ডেটা রোমিংয়ের অনুমতি দিন</translation>
@@ -2447,6 +2480,7 @@
 <translation id="4821935166599369261">&amp;প্রোফাইলিং সক্ষমিত</translation>
 <translation id="4823484602432206655">ব্যবহারকারী এবং ডিভাইস সেটিংস পড়ুন ও পরিবর্তন করুন</translation>
 <translation id="4823651846660089135">ডিভাইস শুধুমাত্র পঠনযোগ্য</translation>
+<translation id="4823955295535347797">আপনার স্ক্রিন চালু থাকাকালীন "OK Google" বলে যেকোনও সময়ে আপনার অ্যাসিস্ট্যান্ট অ্যাক্সেস করুন।</translation>
 <translation id="4828937774870308359">অস্ট্রেলীয়</translation>
 <translation id="4829768588131278040">পিন সেট আপ করুন</translation>
 <translation id="4830502475412647084">OS আপডেট ইনস্টল করা হচ্ছে</translation>
@@ -2487,14 +2521,17 @@
 <translation id="4876273079589074638">এই ক্র্যাশ বা সমস্যাটির বিষয়ে সার্চ করে সেটি ঠিক করতে আমাদের ইঞ্জিনিয়ারদের সাহায্য করুন। কোনও বিবরণ যত ছোটই হোক না কেন সেটি গুরুত্বপূর্ণ!</translation>
 <translation id="4876895919560854374">স্ক্রীণ লক ও আনলক করুন</translation>
 <translation id="4877017884043316611">Chromebox এর সাথে যুক্ত করা</translation>
+<translation id="4879491255372875719">অটোমেটিক (ডিফল্ট)</translation>
 <translation id="4880214202172289027">ভলিউম স্লাইডার</translation>
 <translation id="4880328057631981605">অ্যাক্সেস পয়েন্ট নাম</translation>
 <translation id="4880520557730313061">স্বতঃ-ফিক্স</translation>
 <translation id="4880827082731008257">সার্চের ইতিহাস</translation>
 <translation id="4881695831933465202">খুলুন</translation>
+<translation id="4882312758060467256">এই সাইটটিতে অ্যাক্সেস আছে</translation>
 <translation id="4882473678324857464">বুকমার্কগুলি ফোকাস করুন</translation>
 <translation id="4882831918239250449">সার্চ, বিজ্ঞাপনসহ আরও অনেক কিছু ব্যক্তিগতকৃত করার জন্য আপনার ব্রাউজিং ইতিহাস কিভাবে ব্যবহার হবে তা নিয়ন্ত্রণ করুন</translation>
 <translation id="4883178195103750615">বুকমার্কগুলিকে HTML ফাইলে রপ্তানি করুন...</translation>
+<translation id="4883274597792587930">আপনার কী এর পিছনে প্রিন্ট করা নামটি খুঁজুন</translation>
 <translation id="4883436287898674711">সব <ph name="WEBSITE_1" /> সাইট</translation>
 <translation id="48838266408104654">&amp;কার্য পরিচালক</translation>
 <translation id="4883898390143004266">অ্যাপকে লোকেশন নির্ধারন করতে দিন। অ্যাপের জন্য লোকেশন নির্ধারন উন্নত করতে Google-এর লোকেশন পরিষেবা ব্যবহার করুন। এই পরিষেবার অংশ হিসেবে Google মাঝে মাঝে লোকেশন ডেটা সংগ্রহ করতে পারে এবং আরও সঠিকভাবে লোকেশন নির্ধারণ ও লোকেশন ভিত্তিক পরিষেবার উন্নতির জন্য সেই ডেটা আপনার পরিচয় গোপন রেখেই ব্যবহার করতে পারে। <ph name="BEGIN_LINK1" />আরও জানুন<ph name="END_LINK1" /></translation>
@@ -2556,6 +2593,7 @@
 <translation id="4969785127455456148">অ্যালবাম</translation>
 <translation id="4971412780836297815">সম্পন্ন হলে খুলুন</translation>
 <translation id="4972129977812092092">প্রিন্টার এডিট করুন</translation>
+<translation id="4972164225939028131">ভুল পাসওয়ার্ড</translation>
 <translation id="497287958838527945">Google Pay ব্যবহার করে এমন ক্রেডিট কার্ড ও ঠিকানা।</translation>
 <translation id="4973307593867026061">প্রিন্টার জুড়ুন</translation>
 <translation id="4973523518332075481">এমন একটি নাম ব্যবহার করুন যেটিতে <ph name="MAX_LENGTH" /> বা তার কম অক্ষর আছে</translation>
@@ -2790,6 +2828,7 @@
 <translation id="532776649628038357">আমি রাজি</translation>
 <translation id="532943162177641444">এই ডিভাইসে ব্যবহার করার জন্য মোবাইল হটস্পট সেট আপ করতে আপনার <ph name="PHONE_NAME" /> এ বিজ্ঞপ্তিটির উপরে ক্লিক করুন।</translation>
 <translation id="5329858601952122676">&amp;মুছুন</translation>
+<translation id="5329945517224105597">আপনার অ্যাসিস্ট্যান্ট আপনার স্ক্রিনে যা রয়েছে সেই বিষয়ে আরও সম্পর্কিত সাজেশন এবং নির্দিষ্ট অ্যাকশন প্রস্তাব করতে পারে। আপনি অ্যাসিস্ট্যান্ট সেটিংসে এটি পরিবর্তন করতে পারেন</translation>
 <translation id="5330145655348521461">এই ফাইলগুলি একটি আলাদা ডেস্কটপে খোলা রয়েছে৷ এটিকে দেখতে <ph name="USER_NAME" /> (<ph name="MAIL_ADDRESS" />) এ সরান৷</translation>
 <translation id="5330512191124428349">তথ্য পান</translation>
 <translation id="5331069282670671859">এই বিভাগে আপনার কোনও শংসাপত্র নেই</translation>
@@ -2962,6 +3001,7 @@
 <translation id="55601339223879446">প্রদর্শনের মধ্যে আপনার ডেস্কটপ সীমানার সামঞ্জস্যবিধান করুন</translation>
 <translation id="5562781907504170924">এই ট্যাবটি একটি ব্লুটুথ ডিভাইসে সংযুক্ত হয়ে আছে।</translation>
 <translation id="5563234215388768762">Google-এ সার্চ করুন অথবা URL টাইপ করুন</translation>
+<translation id="5567950944308676169">আপনার নিরাপত্তা কী প্লাগ-ইন করুন এবং এটি চালু করুন</translation>
 <translation id="5567989639534621706">অ্যাপ্লিকেশন ক্যাশে</translation>
 <translation id="5568069709869097550">প্রবেশ করতে পারছেন না</translation>
 <translation id="5568144734023334204">Android সঞ্চয়স্থান</translation>
@@ -2979,6 +3019,7 @@
 <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation>
 <translation id="558918721941304263">অ্যাপ্লিকেশানগুলি লোড হচ্ছে...</translation>
 <translation id="5592595402373377407">এখনও যথেষ্ট ডেটা উপলব্ধ নেই৷</translation>
+<translation id="5593357315997824387">'আমার ফাইল' সিঙ্ক করুন</translation>
 <translation id="5595152862129936745">অনেক দূরে</translation>
 <translation id="5595485650161345191">ঠিকানা সম্পাদনা করুন</translation>
 <translation id="5596627076506792578">আরও বিকল্পগুলি</translation>
@@ -3042,6 +3083,7 @@
    <ph name="LINE_BREAKS" />
    আর্কাইভ বা ভার্চুয়াল ডিস্কের সমস্ত ফাইল বন্ধ করে আবার চেষ্টা করুন।</translation>
 <translation id="5687326903064479980">সময় অঞ্চল</translation>
+<translation id="568824803367507355">"Ok Google" শনাক্তকরণ</translation>
 <translation id="5689516760719285838">লোকেশন</translation>
 <translation id="56907980372820799">ডেটা লিঙ্ক করুন</translation>
 <translation id="5691511426247308406">পরিবারিক</translation>
@@ -3208,6 +3250,7 @@
 <translation id="5931146425219109062">আপনার দ্বারা পরিদর্শন করা ওয়েবসাইটগুলিতে আপনার সমস্ত ডেটা পড়ুন ও সংশোধন করুন</translation>
 <translation id="5932881020239635062">ক্রমিক নং</translation>
 <translation id="5933376509899483611">সময় অঞ্চল</translation>
+<translation id="5938002010494270685">নিরাপত্তার আপগ্রেড উপলভ্য</translation>
 <translation id="5939518447894949180">রিসেট করুন</translation>
 <translation id="5939847200023027600">পিডিএফ কম্পোজিটর পরিষেবা</translation>
 <translation id="5941153596444580863">ব্যক্তিকে যোগ করুন...</translation>
@@ -3244,6 +3287,7 @@
 <translation id="6006484371116297560">ক্লাসিক</translation>
 <translation id="6007237601604674381">স্থানান্তরণ ব্যর্থ হয়েছে৷ <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">আপনার ভাষায় ভয়েস সার্চ করা যাবে না।</translation>
+<translation id="6009781704028455063">বিল্ট-ইন সেন্সর</translation>
 <translation id="6010869025736512584">ভিডিও ইনপুট অ্যাক্সেস করা হচ্ছে</translation>
 <translation id="6011193465932186973">আঙ্গুলের ছাপ</translation>
 <translation id="6011449291337289699">সাইট ডেটা সাফ করুন</translation>
@@ -3254,6 +3298,7 @@
 <translation id="6020431688553761150">সার্ভার আপনাকে এই রিসোর্স অ্যাক্সেস করার অনুমতি দেয়নি।</translation>
 <translation id="602251597322198729">এই সাইটটি একাধিক ফাইল ডাউনলোডের প্রয়াস করছে৷ আপনি কি এটি মঞ্জুরি দিতে চান?</translation>
 <translation id="6022526133015258832">পূর্ণ স্ক্রিন খুলুন</translation>
+<translation id="6022705094403139349">আপনার নিরাপত্তা কী যোগ করতে প্রস্তুত?</translation>
 <translation id="6023643151125006053"><ph name="SAML_DOMAIN" />-এর অ্যাডমিনিস্ট্রেটর (SN: <ph name="SERIAL_NUMBER" />) ডিভাইসটি লক করেছেন।</translation>
 <translation id="6025215716629925253">ট্রেস স্ট্যাক</translation>
 <translation id="6026047032548434446">অ্যাপ ইনস্টল করবেন?</translation>
@@ -3317,6 +3362,7 @@
 <translation id="6105877918873366097">শেষবার অ্যাক্সেস করা হয়েছে</translation>
 <translation id="6107012941649240045">একে ইস্যু করা হয়েছিল</translation>
 <translation id="6112294629795967147">সাইজ পরিবর্তন করতে টাচ করুন</translation>
+<translation id="6112931163620622315">আপনার ফোনে দেখুন</translation>
 <translation id="6112952769866305444">ব্যক্তি <ph name="PROFILE_NAME" />, <ph name="USERNAME" /> এর সম্পাদনা করুন</translation>
 <translation id="6116338172782435947">ক্লিপবোর্ডে কপি করা টেক্সট এবং ছবি দেখতে</translation>
 <translation id="6116921718742659598">ভাষা এবং ইনপুট সেটিংস পরিবর্তন করুন</translation>
@@ -3363,6 +3409,7 @@
 <translation id="6169666352732958425">ডেস্কটপ কাস্ট করতে ব্যর্থ হয়েছে।</translation>
 <translation id="6171948306033499786">মুদ্রণে বিরাম দিন</translation>
 <translation id="6175314957787328458">Microsoft Domain GUID</translation>
+<translation id="6176043333338857209">আপনার নিরাপত্তা কী ব্যবহার করে যোগাযোগ করার জন্য ব্লুটুথ অস্থায়ীভাবে চালু করা হবে</translation>
 <translation id="6178664161104547336">একটি শংসাপত্র বেছে নিন</translation>
 <translation id="6181431612547969857">ডাউনলোড অবরুদ্ধ রয়েছে</translation>
 <translation id="6185132558746749656">ডিভাইসের লোকেশন</translation>
@@ -3450,6 +3497,7 @@
 <translation id="6311220991371174222">আপনার প্রোফাইল খোলার সময় কোনো সমস্যা হওয়ার কারণে Chrome চালু করা যাচ্ছে না। Chrome আবার চালু করার চেষ্টা করুন।</translation>
 <translation id="6312400084708441752">ক্ষতিকর সফ্টওয়্যার, সিস্টেম সেটিংস এবং কম্পিটারের বিভিন্ন প্রক্রিয়ার তথ্য এতে অন্তর্ভুক্ত</translation>
 <translation id="6312403991423642364">অজানা নেটওয়ার্ক ত্রুটি</translation>
+<translation id="6313320178014547270">আপনি এমন একটি কী ব্যবহার করছেন যা এই ওয়েবসাইটের সাথে রেজিস্টার করা নেই</translation>
 <translation id="6313641880021325787">VR থেকে বেরিয়ে যান</translation>
 <translation id="6314819609899340042">আপনি সফলভাবে এই <ph name="IDS_SHORT_PRODUCT_NAME" /> ডিভাইসে ডিবাগিং বৈশিষ্ট্যগুলি সক্ষম করেছেন৷</translation>
 <translation id="6315493146179903667">সমস্ত সামনে আনুন</translation>
@@ -3499,11 +3547,13 @@
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />সিস্টেমের তথ্য<ph name="END_LINK1" /> এবং <ph name="BEGIN_LINK2" />মেট্রিক্স<ph name="END_LINK2" /> পাঠান</translation>
 <translation id="6397094776139756010">সিঙ্ক এবং নিজের মতো সাজিয়ে নেওয়ার বিকল্পগুলি</translation>
 <translation id="6397592254427394018">ছ্দ্মবেশী উইন্ডোতে &amp;সকল বুকমার্ক খুলুন</translation>
+<translation id="639777613761517128">$1-ব্যবহার করে ফাইল খুলতে আগে সেগুলি Linux ফাইল ফোল্ডারে কপি করুন।</translation>
 <translation id="6398715114293939307">Google Play স্টোর সরান</translation>
 <translation id="6398765197997659313">পূর্ণ স্ক্রীণ বন্ধ করুন</translation>
 <translation id="6399774419735315745">গুপ্তচর</translation>
 <translation id="6401445054534215853">তাকের আইটেম নম্বর ১</translation>
 <translation id="6404511346730675251">বুকমার্ক সম্পাদনা করুন</translation>
+<translation id="6405510437656969977">পিন লেখার জন্য প্রস্তুত হলে চালিয়ে যান</translation>
 <translation id="6406303162637086258">ব্রাউজার আরম্ভ অনুকরণ করুন</translation>
 <translation id="6406506848690869874">সিঙ্ক</translation>
 <translation id="6408118934673775994"><ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, ও <ph name="WEBSITE_3" /> এ আপনার ডেটা পড়ুন এবং পরিবর্তন করুন</translation>
@@ -3621,6 +3671,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - ডেস্কটপ কন্টেন্ট শেয়ার করেছে</translation>
 <translation id="6580151766480067746">ARC সংস্করণ</translation>
 <translation id="6581162200855843583">Google ড্রাইভ লিঙ্ক</translation>
+<translation id="6582080224869403177">আপনার নিরাপত্তা আপগ্রেড করতে <ph name="DEVICE_TYPE" /> রিসেট করুন।</translation>
 <translation id="6582421931165117398">আপনার ব্যক্তিগত তথ্য রক্ষা করতে, এখনই এখনই আপনার পাসওয়ার্ড পরিবর্তন করুন। আপনার পাসওয়ার্ড পরিবর্তন করার আগে, আপনাকে সাইন ইন করতে বলা হবে।</translation>
 <translation id="6583851739559471707">যে সমস্ত সাইটে বিরক্তিকরভাবে বিজ্ঞাপন (প্রস্তাবিত) দেখানো হয়, সেগুলিতে ব্লক করা হয়েছে</translation>
 <translation id="6584878029876017575">Microsoft Lifetime Signing</translation>
@@ -3669,6 +3720,7 @@
 <translation id="6644846457769259194">আপনার ডিভাইস আপডেট করা হচ্ছে (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">Netscape শংসাপত্র কর্তৃপক্ষ নাকচের URL</translation>
 <translation id="6647838571840953560">বর্তমানে <ph name="CHANNEL_NAME" /> এ</translation>
+<translation id="6648051959475508072">নিরাপত্তা কী চালু করা হয়েছে...</translation>
 <translation id="6648911618876616409">একটি গুরুত্বপূর্ণ আপডেট ইনস্টল করার জন্য তৈরি। শুরু করার জন্য সাইন-ইন করুন।</translation>
 <translation id="6649018507441623493">একটু অপেক্ষা করুন…</translation>
 <translation id="6649563841575838401">আর্কাইভ ফর্ম্যাটটি সমর্থিত নয় অথবা ফাইলটি ভেঙ্গে গেছে।</translation>
@@ -3684,6 +3736,7 @@
 <translation id="6664237456442406323">দুর্ভাগ্যবশত, আপনার কম্পিউটার একটি ত্রুটিপূর্ণ হার্ডওয়্যার ID এর মাধ্যমে কনফিগার করা হয়েছে৷ এটি Chrome OS কে সাম্প্রতিক সুরক্ষা সমাধানে আপডেট করা থেকে বিরত করেছে এবং আপনার কম্পিউটার <ph name="BEGIN_BOLD" />অনিষ্টকারী আক্রমণগুলির ফলে অরক্ষিত হতে পারে<ph name="END_BOLD" />৷</translation>
 <translation id="6664774537677393800">আপনার প্রোফাইল খোলার সময় কোনো সমস্যা হয়েছে। দয়া সাইন আউট করে আবার সাইন ইন করুন।</translation>
 <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation>
+<translation id="6674412557034343536">টাইমার থামান</translation>
 <translation id="667517062706956822">আপনি কি চান যে Google এই পৃষ্ঠাটি <ph name="SOURCE_LANGUAGE" /> থেকে <ph name="TARGET_LANGUAGE" /> এ অনুবাদ করুক?</translation>
 <translation id="6675665718701918026">পয়েন্টিং ডিভাইস সংযুক্ত হয়েছে</translation>
 <translation id="6678717876183468697">কুয়েরি URL</translation>
@@ -3744,6 +3797,7 @@
 <translation id="6759193508432371551">ফ্যাক্টরি রিসেট</translation>
 <translation id="6767639283522617719">ডোমেনে যোগ করা যাবে না। প্রতিষ্ঠানের ইউনিটের জন্য সেটিংস সঠিক কিনা ভাল করে দেখে নিন।</translation>
 <translation id="6769712124046837540">প্রিন্টার যোগ করা হচ্ছে...</translation>
+<translation id="6770664076092644100">NFC এর মাধ্যমে যাচাই করুন</translation>
 <translation id="6771503742377376720">একটি শংসাপত্রের কর্তৃপক্ষ</translation>
 <translation id="6777817260680419853">রিডাইরেক্ট ব্লক করা হয়েছে</translation>
 <translation id="6778959797435875428">সাইটগুলি আনমিউট করুন</translation>
@@ -3779,6 +3833,7 @@
 <translation id="6823506025919456619">আপনার ডিভাইসগুলি দেখতে আপনাকে Chrome-এ প্রবেশ করতে হবে</translation>
 <translation id="6824564591481349393">&amp;ইমেল আইডি কপি করুন</translation>
 <translation id="6825184156888454064">নাম অনুসারে সাজান</translation>
+<translation id="6826872289184051766">USB এর মাধ্যমে যাচাই করুন</translation>
 <translation id="6827236167376090743">পাশাপাশি এই ভিডিওটি দীর্ঘ সময় ধরে চলতে থাকবে৷</translation>
 <translation id="6828153365543658583">সাইন-ইনকে নিম্নলিখিত ব্যবহারকারীদের মধ্যে সীমাবদ্ধ রাখুন:</translation>
 <translation id="6828860976882136098">সকল ব্যবহারকারীর জন্য স্বয়ংক্রিয় আপডেট সেট আপ করতে ব্যর্থ হয়েছে (ফ্লাইটপূর্ব সম্পাদন ত্রুটি: <ph name="ERROR_NUMBER" />)</translation>
@@ -3812,6 +3867,7 @@
 <translation id="6880587130513028875">এই পৃষ্ঠাতে ছবিগুলি ব্লক করা হয়েছে৷</translation>
 <translation id="6883319974225028188">ওহো! সিস্টেম ডিভাইস কনফিগারেশন সংরক্ষণ করতে ব্যর্থ হয়েছে।</translation>
 <translation id="6885771755599377173">সিস্টেম তথ্যের পূর্বরূপ</translation>
+<translation id="6886476658664859389">NFC নিরাপত্তা কী</translation>
 <translation id="6886871292305414135">নতুন &amp;ট্যাবে লিঙ্ক খুলুন</translation>
 <translation id="6892812721183419409"><ph name="USER" /> হিসেবে লিঙ্ক খুলুন</translation>
 <translation id="6896758677409633944">অনুলিপি</translation>
@@ -3832,6 +3888,7 @@
 <translation id="6915804003454593391">ব্যবহারকারী:</translation>
 <translation id="6916590542764765824">এক্সটেনশানগুলি পরিচালনা করুন</translation>
 <translation id="6920989436227028121">নিয়মিত ট্যাব রূপে খুলুন</translation>
+<translation id="6921709132208495314">এই পৃষ্ঠাটিতে ডেটা ব্যবহার করা বন্ধ করুন</translation>
 <translation id="6922128026973287222">Google ডেটা সেভার ব্যবহার করে তথ্য সেভ করুন এবং দ্রুত ব্রাউস করুন৷ আরও জানতে ক্লিক করুন৷</translation>
 <translation id="6923132443355966645">স্ক্রোল / ক্লিক করুন</translation>
 <translation id="6930242544192836755">সময়কাল</translation>
@@ -3865,6 +3922,7 @@
 <translation id="6978121630131642226">সার্চ ইঞ্জিনসমূহ</translation>
 <translation id="6978611942794658017">Windows সফ্টওয়্যার ব্যবহার করে এমন একটি কম্পিউটারের জন্য এই ফাইলটি ডিজাইন করা হয়েছে৷ Chrome OS দ্বারা চালিত আপনার ডিভাইসটির সাথে এটি সামঞ্জস্যপূর্ণ নয়৷ একটি উপযুক্ত প্রতিস্থাপনযোগ্য অ্যাপের জন্য অনুগ্রহ করে Chrome ওয়েব স্টোর-এ সার্চ করুন৷</translation>
 <translation id="6979158407327259162">Google ড্রাইভ</translation>
+<translation id="6979440798594660689">মিউট (ডিফল্ট)</translation>
 <translation id="6979737339423435258">শুরু থেকে</translation>
 <translation id="6980462514016882061">সার্চ, বিজ্ঞাপন এবং অন্যান্য Google পরিষেবা ব্যক্তিগতকৃত করতে Google আপনার ব্রাউজিং ইতিহাস ব্যবহার করতে পারে</translation>
 <translation id="6981982820502123353">অ্যাক্সেযোগ্যতা</translation>
@@ -3973,6 +4031,7 @@
 <translation id="713122686776214250">&amp;পৃষ্ঠা জুড়ুন...</translation>
 <translation id="7133578150266914903">আপনার অ্যাডমিনিস্ট্রেটর আপনার এই ডিভাইসটি (<ph name="PROGRESS_PERCENT" />) রোল ব্যাক করছেন</translation>
 <translation id="7134098520442464001">পাঠ্যকে আরও ছোট করুন</translation>
+<translation id="7135729336746831607">ব্লুটুথ চালু করবেন?</translation>
 <translation id="7136694880210472378">ডিফল্ট করুন</translation>
 <translation id="7136984461011502314"><ph name="PRODUCT_NAME" />-তে আপনাকে স্বাগতম</translation>
 <translation id="7136993520339022828">একটি সমস্যা হয়েছে। অনুগ্রহ করে অন্য একটি ছবি বেছে নিয়ে আবার চেষ্টা করুন।</translation>
@@ -4004,6 +4063,7 @@
 <translation id="7186088072322679094">টুলবারের মধ্যে রাখুন</translation>
 <translation id="7187428571767585875">যে রেজিস্ট্রি এন্ট্রি সরিয়ে দেওয়া হবে অথবা পরিবর্তন করা হবে:</translation>
 <translation id="7189234443051076392">আপনার ডিভাইসে পর্যাপ্ত জায়গা আছে কিনা দেখে নিন</translation>
+<translation id="7189965711416741966">আঙ্গুলের ছাপ যোগ করা হয়েছে।</translation>
 <translation id="7191159667348037">অজানা প্রিন্টার (USB)</translation>
 <translation id="7191454237977785534">ফাইল এই রূপে সেভ করুন</translation>
 <translation id="7193374945610105795"><ph name="ORIGIN" /> এর জন্য কোনও পাসওয়ার্ড সেভ করা হয়নি</translation>
@@ -4011,12 +4071,14 @@
 <translation id="7197160646667308890"><ph name="BEGIN_PARAGRAPH1" />এগুলি আপনার ডিভাইস সংক্রান্ত কিছু সার্বিক তথ্য সমগ্র এবং ব্যবহারের নির্দেশাবলী (যেমন আপনার ব্যাটারির লেবেল, অ্যাপ ব্যবহারের প্রক্রিয়া এবং নেটওয়ার্কের কানেকশন-প্রবণতা)। এই সংগৃহীত তথ্যগুলি পরবর্তীকালে Google-এর বিভিন্ন প্রোডাক্ট এবং পরিষেবার উন্নতিকরণের জন্য ব্যবহৃত হবে। এই সার্বিক তথ্যগুলি কিছু সহযোগীদের, যেমন Android ডেভেলপারদেরও সাহায্য করবে, তাদের অ্যাপ এবং প্রোডাক্টগুলি উন্নতমানের করে তুলতে।<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />এই বৈশিষ্ট্য বন্ধ করা হলে আপনার ডিভাইসের প্রয়োজনীয় তথ্য যেমন সিস্টেম আপডেট এবং নিরাপত্তা হিসাবে প্রয়োজনীয় তথ্য পাঠানোর ক্ষেত্রে অসুবিধা হবে না।<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />আপনি এই বৈশিষ্ট্যটি সেটিংস &gt; Google থেকে নিয়ন্ত্রণ করতে পারেন। মেনু থেকে ব্যবহার ও ডায়গনস্টিক বেছে নিন।<ph name="END_PARAGRAPH3" /></translation>
+<translation id="7197632491113152433">আমরা আপনার অ্যাকাউন্ট থেকে <ph name="NUMBER_OF_APPS" />টি অ্যাপ পেয়েছি যা এই ডিভাইসে ব্যবহার করা যাবে।</translation>
 <translation id="7199158086730159431">সহায়তা পান</translation>
 <translation id="7200083590239651963">কনফিগারেশন বেছে নিন</translation>
 <translation id="720110658997053098">স্থায়ীভাবে এই ডিভাইসটিকে কিয়স্ক মোডে রাখুন</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' মুছে ফেলা হয়েছে</translation>
 <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> ডাউনলোড হচ্ছে ...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{পৃষ্ঠাটি ছেড়ে যান}one{পৃষ্ঠাগুলি ছেড়ে যান}other{পৃষ্ঠাগুলি ছেড়ে যান}}</translation>
+<translation id="721467499098558573">অন্তত ৫ সেকেন্ড আপনার 'নিরাপত্তা কী' বোতামটি প্রেস করে ধরে রাখুন</translation>
 <translation id="7216409898977639127">মোবাইল পরিষেবা প্রদানকারী</translation>
 <translation id="7216595297012131718">আপনার পছন্দের উপর ভিত্তি করে ভাষাগুলি সাজান</translation>
 <translation id="7220019174139618249">"<ph name="FOLDER" />" এ পাসওয়ার্ড এক্সপোর্ট করাযাবে না</translation>
@@ -4052,6 +4114,7 @@
 <translation id="7256710573727326513">একটি ট্যাবে খুলুন</translation>
 <translation id="725758059478686223">প্রিন্টিং পরিষেবা</translation>
 <translation id="7257666756905341374">আপনি যে ডেটা প্রতিলিপি ও লেপন করেন তা পড়ুন</translation>
+<translation id="7260764918845374269">আপনার নিরাপত্তা কী দেখতে, এটি যুক্ত করার মোডে থাকা প্রয়োজন। অন্তত ৫ সেকেন্ড আপনার 'নিরাপত্তা কী' বোতামটি প্রেস করে ধরে রাখুন।</translation>
 <translation id="7262004276116528033">এই প্রবেশ করা পরিষেবাটি <ph name="SAML_DOMAIN" /> দ্বারা হোস্ট করা হয়</translation>
 <translation id="7268365133021434339">ট্যাবগুলি বন্ধ করুন</translation>
 <translation id="7268659760406822741">উপলব্ধ পরিষেবাসমূহ</translation>
@@ -4101,6 +4164,7 @@
 <translation id="7339898014177206373">নতুন উইন্ডো</translation>
 <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> এখন পূর্ণ পর্দায় রয়েছে৷</translation>
 <translation id="7340650977506865820">সাইটটি আপনার স্ক্রিন শেয়ার করছে</translation>
+<translation id="7341834142292923918">এই সাইটে অ্যাক্সেস চায়</translation>
 <translation id="7345706641791090287">আপনার পাসওয়ার্ড নিশ্চিত করুন</translation>
 <translation id="7346909386216857016">ঠিক আছে, বুঝেছি</translation>
 <translation id="7347751611463936647">এই এক্সটেনশনটি ব্যবহার করতে, "<ph name="EXTENSION_KEYWORD" />" তারপরে TAB, এরপরে আপনার command বা search টাইপ করুন৷</translation>
@@ -4169,6 +4233,7 @@
 <translation id="7464490149090366184">জিপ করা ব্যর্থ হয়েছে, আইটেম বিদ্যমান: "$1"</translation>
 <translation id="7465778193084373987">Netscape শংসাপত্র রদকরণ  URL</translation>
 <translation id="7469406957790636836">এটি চালু করার জন্য, প্রথমে <ph name="BEGIN_LINK" />ভাষা এবং ইনপুটে <ph name="END_LINK" /> বানান পরীক্ষার বিকল্প চালু করুন</translation>
+<translation id="7469518857922439236">মেসেজের জন্য এই কম্পিউটারটি মনে রাখতে বিজ্ঞপ্তি এবং ডিফল্ট পাঠান</translation>
 <translation id="7469894403370665791">স্বয়ংক্রিয়ভাবে এই নেটওয়ার্কে সংযোগ করুন</translation>
 <translation id="747114903913869239">ত্রুটি: এক্সটেনশানের অর্থোদ্ধার করতে ব্যর্থ</translation>
 <translation id="7473891865547856676">না থাক</translation>
@@ -4216,6 +4281,7 @@
 <translation id="7531779363494549572">সেটিংস &gt; অ্যাপ এবং বিজ্ঞপ্তি &gt; বিজ্ঞপ্তিতে যান।</translation>
 <translation id="7536709149194614609">দয়া করে ডিভাইসটি পুনরায় চালু করে পরে আবার চেষ্টা করুন।</translation>
 <translation id="7537601449003285327">কার্যদণ্ডে পিন করুন</translation>
+<translation id="7539856059004947393">ব্লুটুথ নিরাপত্তা কী</translation>
 <translation id="7540972813190816353">আপডেট পরীক্ষা করার সময় একটি ত্রুটি হয়েছে: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">এই <ph name="IDS_SHORT_PRODUCT_NAME" /> ডিভাইসে ডিবাগিং বৈশিষ্ট্যগুলি সক্ষম করুন৷</translation>
 <translation id="7544853251252956727">শাফল করুন</translation>
@@ -4318,6 +4384,7 @@
 <translation id="7709152031285164251">ব্যর্থ হয়েছে - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;কাস্ট করুন...</translation>
 <translation id="7711920809702896782">ছবির তথ্য</translation>
+<translation id="7712740978240882272">আপনার ফোন ব্যবহার করে Chromebook আনলক করুন। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503"><ph name="EXTENSION_ID" /> আইডি যুক্ত অজানা এক্সটেনশন</translation>
 <translation id="7714307061282548371"><ph name="DOMAIN" /> এর কুকি ব্যবহার করার অনুমতি দেওয়া হয়েছে</translation>
 <translation id="7714464543167945231">শংসাপত্র</translation>
@@ -4518,6 +4585,7 @@
 <translation id="7973962044839454485">একটি ভুল ইউজারনেম বা পাসওয়ার্ডের কারণে PPP প্রমাণীকরণ করা যায়নি</translation>
 <translation id="7974566588408714340"><ph name="EXTENSIONNAME" /> ব্যবহার করার জন্য আবার চেষ্টা করুন</translation>
 <translation id="7974936243149753750">ওভারস্ক্যান</translation>
+<translation id="79766959863778284">XR আইসোলেটেড ডিভাইস পরিষেবা</translation>
 <translation id="7977551819349545646">Chromebox আপডেট করা হচ্ছে...</translation>
 <translation id="7978412674231730200">ব্যক্তিগত কী</translation>
 <translation id="7978450511781612192">এটি আপনাকে আপনার Google অ্যাকাউন্ট থেকে সাইন-আউট করিয়ে দেবে। আপনার বুকমার্ক, ইতিহাস, পাসওয়ার্ড এবং আরও অনেক কিছু আর সিঙ্ক করা হবে না।</translation>
@@ -4530,6 +4598,7 @@
 <translation id="7984068253310542383">মিরর <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">সংরক্ষিত পাসওয়ার্ড সেটিংস পড়ুন ও পরিবর্তন করুন</translation>
 <translation id="7987764905897278458">Google স্মার্ট থেকে আরও অনেক কিছু পান</translation>
+<translation id="798835209536175951">Chromebook থেকে টেক্সট মেসেজ পাঠান ও পান। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">অ্যাক্সেসযোগ্যতার বৈশিষ্ট্যগুলি সক্ষম করুন</translation>
 <translation id="7994702968232966508">EAP পদ্ধতি</translation>
 <translation id="799547531016638432">ডেস্কটপ সরান</translation>
@@ -4662,6 +4731,7 @@
 <translation id="8185331656081929126">নেটওয়ার্কে নতুন মুদ্রণগুলি শণাক্ত করা হলে বিজ্ঞপ্তিগুলি দেখান</translation>
 <translation id="8186609076106987817">সার্ভার ফাইলটি খুঁজে পায়নি৷</translation>
 <translation id="8188120771410500975">&amp;পাঠ্য ক্ষেত্রগুলির বানান চেক করুন</translation>
+<translation id="8188389033983459049">আপনার ডিভাইসের সেটিংস চেক করুন এবং চালিয়ে যেতে এটি চালু করুন</translation>
 <translation id="8190193592390505034"><ph name="PROVIDER_NAME" />-তে সংযুক্ত হচ্ছে</translation>
 <translation id="8191230140820435481">আপনার অ্যাপ্লিকেশন, এক্সটেনশন, এবং থিম পরিচালনা করুন</translation>
 <translation id="8191453843330043793">V8 প্রক্সি সমাধানকারী</translation>
@@ -4680,6 +4750,7 @@
 <translation id="8214962590150211830">এই ব্যক্তিকে সরান</translation>
 <translation id="8217399928341212914">একাধিক ফাইলের স্বয়ংক্রিয় ডাউনলোডগুলির অবরুদ্ধ করা অবিরত রাখুন</translation>
 <translation id="8223479393428528563">অফলাইনে ব্যবহারের জন্য এই ফাইলগুলি সংরক্ষণ করতে, অনলাইনে ফিরে আসুন, ফাইলগুলিতে ডান-ক্লিক করুন এবং <ph name="OFFLINE_CHECKBOX_NAME" /> বিকল্পটি নির্বাচন করুন৷</translation>
+<translation id="8225753906568652947">আপনার অফার রিডিম করুন</translation>
 <translation id="8226222018808695353">নিষিদ্ধ</translation>
 <translation id="8226619461731305576">অপেক্ষমাণ</translation>
 <translation id="8226742006292257240">আপনার কম্পিউটারে অ্যাসাইন করা হয়েছে এমন এলোমেলোভাবে জেনারেট হওয়া TPM পাসওয়ার্ডটি নিচে:</translation>
@@ -4726,6 +4797,7 @@
 <translation id="8286036467436129157">প্রবেশ করুন</translation>
 <translation id="8286963743045814739">আপনি ছদ্মবেশী উইন্ডো ব্যবহার করে গোপনে ব্রাউজ করতে পারেন</translation>
 <translation id="82871696630048499">ওয়েব পৃষ্ঠাটি আবার লোড করা হয়েছে কারণ সেটির জন্য পর্যাপ্ত মেমরি নেই।</translation>
+<translation id="8288032458496410887"><ph name="APP" /> আনইনস্টল করুন...</translation>
 <translation id="8291967909914612644">হোম পরিষেবা প্রদানকারী দেশ</translation>
 <translation id="8294431847097064396">উৎস</translation>
 <translation id="8297006494302853456">দুর্বল</translation>
@@ -4740,6 +4812,7 @@
 <translation id="8320459152843401447">আপনার সম্পূর্ণ স্ক্রিন</translation>
 <translation id="8322814362483282060">এই পৃষ্ঠাটিকে আপনার মাইক্রোফোন অ্যাক্সেস করা থেকে অবরুদ্ধ করা হয়েছে৷</translation>
 <translation id="8326478304147373412">PKCS #7, শংসাপত্র শৃঙ্খল</translation>
+<translation id="8327039559959785305">Linux ফাইল মাউন্ট করার সময় সমস্যা। আবার চেষ্টা করুন।</translation>
 <translation id="8329978297633540474">সাধারণ পাঠ</translation>
 <translation id="8335587457941836791">তাক থেকে আনপিন করুন</translation>
 <translation id="8336153091935557858">গতলাক <ph name="YESTERDAY_DAYTIME" /></translation>
@@ -4756,6 +4829,7 @@
 <translation id="8353683614194668312">এটি করতে পারে:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">পৃষ্ঠাগুলি পুনরুদ্ধার করবেন?</translation>
+<translation id="8362993567435070757">আপনার কী এর পিছনে ৬ সংখ্যার পিনটি দেখুন</translation>
 <translation id="8363095875018065315">স্থায়ী</translation>
 <translation id="8363142353806532503">মাইক্রোফোনের ব্যবহার ব্লক করা হয়েছে</translation>
 <translation id="8366396658833131068">আপনার নেটওয়ার্ক সংযোগের পুনঃস্থাপন করা হয়েছে৷ আপনার কিয়স্ক অ্যাপ্লিকেশান লঞ্চ করার জন্য দয়া করে একটি ভিন্ন নেটওয়ার্ক বেছে নিন অথবা নীচের 'অবিরত থাকুন' বোতাম টিপুন৷</translation>
@@ -4764,6 +4838,7 @@
 <translation id="8371695176452482769">এখনই বলুন</translation>
 <translation id="8372369524088641025">খারাপ WEP কী</translation>
 <translation id="8373553483208508744">ট্যাবগুলি মিউট করুন</translation>
+<translation id="8379878387931047019">এই ওয়েবসাইটটি খুলতে যে নিরাপত্তা কী প্রয়োজন সেটি এই ডিভাইসে কাজ করে না</translation>
 <translation id="8382913212082956454">&amp;ইমেল ঠিকানা কপি করুন</translation>
 <translation id="8386903983509584791">স্ক্যান করা সম্পন্ন হয়েছে</translation>
 <translation id="8389492867173948260">আপনার দেখা ওয়েবসাইটে আপনার সমস্ত ডেটা পড়ার এবং পরিবর্তন করার জন্য এই এক্সটেনশনটিকে অনুমতি দিন:</translation>
@@ -4785,6 +4860,7 @@
 <translation id="8413385045638830869">প্রথমে জিজ্ঞাসা করুন (প্রস্তাবিত)</translation>
 <translation id="8418445294933751433">ট্যাব রূপে &amp;দেখান</translation>
 <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' এর সার্চ ফলাফল</translation>
+<translation id="8419368276599091549"><ph name="DEVICE_TYPE" /> এ আপনাকে স্বাগত!</translation>
 <translation id="8420060421540670057">Google দস্তাবেজ ফাইলগুলি দেখান</translation>
 <translation id="8424039430705546751">নিচে</translation>
 <translation id="8425213833346101688">পরিবর্তন</translation>
@@ -4881,6 +4957,7 @@
 <translation id="8557930019681227453">ম্যানিফেস্ট</translation>
 <translation id="8559694214572302298">ছবি সঙ্কেতমোচক</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">পড়তে থাকুন</translation>
 <translation id="8565650234829130278">অ্যাপ্লিকেশন ডাউনগ্রেড করার প্রয়াস করেছেন৷</translation>
 <translation id="8569002732135253578">এখন <ph name="DOCUMENT_NAME" /> প্রিন্ট করা হচ্ছে</translation>
 <translation id="8569682776816196752">কোনো গন্তব্যস্থল পাওয়া যায়নি</translation>
@@ -4910,6 +4987,7 @@
 <translation id="8620765578342452535">নেটওয়ার্ক সংযোগ কনফিগার করুন</translation>
 <translation id="8624205858755890468">আপনাকে সম্পর্কিত তথ্য, অ্যাপ এবং অ্যাকশন দেখাতে সহায়ককে সক্ষম করে।</translation>
 <translation id="862542460444371744">&amp;এক্সটেনশনস</translation>
+<translation id="8626219642120025691">টাইমারের কাজ হয়ে গেছে</translation>
 <translation id="8627151598708688654">উৎস বেছে নিন</translation>
 <translation id="862727964348362408">সাসপেন্ড</translation>
 <translation id="862750493060684461">CSS ক্যাশে</translation>
@@ -4935,6 +5013,7 @@
 <translation id="8655295600908251630">চ্যানেল</translation>
 <translation id="8655319619291175901">ওহো, কিছু সমস্যা হয়েছে৷</translation>
 <translation id="8655972064210167941">আপনার পাসওয়ার্ড যাচাই করতে না পারায় প্রবেশ করুন ব্যর্থ হয়েছে। দয়া করে আপনার প্রশাসকের সাথে যোগাযোগ করুন অথবা আবার চেষ্টা করুন।</translation>
+<translation id="8656619792520327915">অন্য একটি ব্লুটুথ নিরাপত্তা কী যোগ করুন</translation>
 <translation id="8656768832129462377">চেক করবেন না</translation>
 <translation id="8658595122208653918">প্রিন্টের বিকল্পগুলি পরিবর্তন করুন...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> <ph name="TAB_NAME" /> এর সঙ্গে আপনার স্ক্রিন এবং অডিও শেয়ার করছে।</translation>
@@ -4988,6 +5067,7 @@
 <translation id="8714154114375107944">আর সহায়তা পাওয়া যাবে না</translation>
 <translation id="8714838604780058252">পটভূমির গ্রাফিক্স</translation>
 <translation id="8715480913140015283">ব্যাকগ্রাউন্ড ট্যাব আপনার ক্যামেরা ব্যবহার করছে</translation>
+<translation id="8716931980467311658">এই <ph name="DEVICE_TYPE" /> থেকে Linux ফাইল ফোল্ডারের মধ্যে থাকা Linux অ্যাপ এবং সমস্ত ডেটা মুছে ফেলবেন?</translation>
 <translation id="8719653885894320876"><ph name="PLUGIN_NAME" /> ডাউনলোড ব্যর্থ হয়েছে</translation>
 <translation id="8723829621484579639"><ph name="PARENT_SITE" /> এর জন্য ছদ্মবেশী উপফ্রেম</translation>
 <translation id="8724859055372736596">ফোল্ডারে &amp;দেখান</translation>
@@ -5028,6 +5108,7 @@
 <translation id="8775404590947523323">আপনার সম্পাদনাগুলি স্বয়ংক্রিয়ভাবে সংরক্ষিত হয়৷ আসল চিত্রের একটি কপি রাখতে <ph name="BREAKS" /> করুন , "মূল লেখা পুনর্লিখন করুন" চিহ্ন মুছে দিন</translation>
 <translation id="8777628254805677039">রুট পাসওয়ার্ড</translation>
 <translation id="8780443667474968681">ভয়েস সার্চ বন্ধ করা হয়েছে।</translation>
+<translation id="878068003854005405">শুরু করা যাক। আপনার আঙুলটি সেন্সরের ওপর রাখুন।</translation>
 <translation id="878069093594050299">এই শংসাপত্রটি নিম্নলিখিত ব্যবহারগুলির জন্য যাচাইকৃত:</translation>
 <translation id="8781980678064919987">যখন ঢাকনাটি বন্ধ থাকবে তখন বন্ধ করুন</translation>
 <translation id="8782565991310229362">Kiosk অ্যাপ্লিকেশান লঞ্চ বাতিল হয়েছে৷</translation>
@@ -5055,6 +5136,7 @@
 <translation id="8814687660896548945">অনুগ্রহ করে অপেক্ষা করুন, আর্কাইভ স্ক্যান করা হচ্ছে...</translation>
 <translation id="881799181680267069">অন্যদের লুকান</translation>
 <translation id="8818152010000655963">ওয়ালপেপার</translation>
+<translation id="8818958672113348984">আপনার ফোনের মাধ্যমে যাচাই করুন</translation>
 <translation id="8820817407110198400">বুকমার্কস</translation>
 <translation id="8821045908425223359">IP ঠিকানা স্বয়ংক্রিয়ভাবে কনফিগার করুন</translation>
 <translation id="882204272221080310">নিরাপত্তা আরও সুরক্ষার জন্য ফার্মওয়্যার আপডেট করুন।</translation>
@@ -5067,7 +5149,6 @@
 <translation id="8834164572807951958">'<ph name="DESTINATION_NAME" />' এর সদস্যরা এই আইটেমগুলির কপিতে অ্যাক্সেস পাবেন।</translation>
 <translation id="8838770651474809439">হ্যামবার্গার</translation>
 <translation id="883911313571074303">চিত্রের জন্য টিকা লিখুন</translation>
-<translation id="8844690305858050198">হয়ে গেছে! ক্ষতিকারক সফ্টওয়্যার সরানো হয়েছে। এক্সটেনশন আবার চালু করতে, &lt;a href="chrome://extensions"&gt;এক্সটেনশন&lt;/a&gt; -এ যান।</translation>
 <translation id="8845001906332463065">সহায়তা পান</translation>
 <translation id="8846141544112579928">কীবোর্ডের জন্য সার্চ করা হচ্ছে...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5085,11 +5166,13 @@
 <translation id="8872155268274985541">বহিরাগত কিয়স্ক আপডেট ম্যানিফেস্ট অবৈধ ফাইল পাওয়া গেছে৷ কিয়স্ক অ্যাপ্লিকেশান আপডেট করতে ব্যর্থ হয়েছে৷ দয়া করে USB স্টিক সরিয়ে দিন৷</translation>
 <translation id="8874184842967597500">সংযুক্ত নয়</translation>
 <translation id="8876215549894133151">ফর্ম্যাট:</translation>
+<translation id="8876307312329369159">ডেমো সেশনে এই সেটিংটি পরিবর্তন করা যাবে না।</translation>
 <translation id="8876309039915144086">পাসওয়ার্ড তৈরি করুন...</translation>
 <translation id="8877448029301136595">[পেরেন্ট ডাইরেক্টরি]</translation>
 <translation id="8879284080359814990">ট্যাব রূপে &amp;দেখান</translation>
 <translation id="8883847527783433352">অন্য অ্যাকাউন্টে সিঙ্ক করুন</translation>
 <translation id="8885197664446363138">Smart Lock অনুপলব্ধ</translation>
+<translation id="88870264962436283"><ph name="APP_NAME" /> অ্যাপে টাচ আইডি ব্যবহার করুন</translation>
 <translation id="8888432776533519951">রঙ:</translation>
 <translation id="8890516388109605451">উৎস</translation>
 <translation id="8892168913673237979">সমস্ত সেট আছে!</translation>
@@ -5110,6 +5193,7 @@
 <translation id="8915370057835397490">লোড করার প্রস্তাব</translation>
 <translation id="8916476537757519021">ছদ্মবেশী সাবফ্রেম: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">সব ডিভাইসে আপনার পাসওয়ার্ড পেতে, সাইন-ইন করুন এবং সিঙ্ক চালু করুন।</translation>
+<translation id="8921366488406707015">আপনার নিরাপত্তা কী যাচাই করা হচ্ছে...</translation>
 <translation id="8922013791253848639">এই সাইটে সবসময় বিজ্ঞাপন দেখানোর অনুমতি দিন</translation>
 <translation id="8925458182817574960">&amp;সেটিংস</translation>
 <translation id="8926389886865778422">আর জিজ্ঞাসা করবেন না</translation>
@@ -5201,6 +5285,7 @@
 <translation id="9050666287014529139">পাসফ্রেজ</translation>
 <translation id="9052208328806230490">আপনি আপনার মুদ্রকগুলি <ph name="EMAIL" /> অ্যাকাউন্টটি ব্যবহার করে <ph name="CLOUD_PRINT_NAME" />তে নিবন্ধীকৃত করেছেন</translation>
 <translation id="9052404922357793350">ব্লক করা চালিয়ে যান</translation>
+<translation id="9053091947372579468">আপনার ডিভাইসে একটি Chrome লাইসেন্স রয়েছে, কিন্তু আপনার ব্যবহারকারীর নামের অ্যাডমিন কনসোলের সাথে অ্যাসোসিয়েটেড নয়। রেজিস্টার করার জন্য একটি অ্যাডমিন কনসোল অ্যাকাউন্ট তৈরি করুন। দ্রষ্টব্য: যদি আপনি একটি নতুন অ্যাডমিন কনসোল অ্যাকাউন্ট তৈরি করতে আপনার নিজস্ব ডোমেনটি ব্যবহার করতে চান, তাহলে https://g.co/ChromeEnterpriseAccount-এ সাইন- আপ করার পর আপনাকে ডোমেন যাচাই করার কাজটি সম্পূর্ণ করতে হবে।</translation>
 <translation id="9053893665344928494">আমার পছন্দ মনে রাখুন</translation>
 <translation id="9055636786322918818">RC4 এনক্রিপশন চালু করুন। এই বিকল্পটির ব্যবহার ঝুঁকি বাড়ায় কারণ RC4 সাইফারটি নিরাপদ নয়।</translation>
 <translation id="9056034633062863292">Chromebox আপডেট করা হচ্ছে</translation>
@@ -5218,6 +5303,7 @@
 <translation id="9066782832737749352">পাঠ্য থেকে ভাষ্য</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> স্বয়ংক্রিয়ভাবে আপনার সংরক্ষণ করা পাসওয়ার্ড দিয়ে উপযুক্ত সাইট এবং অ্যাপ্লিকেশানগুলিতে আপনাকে প্রবেশ করায়।</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">এই ডিভাইসের সাথে আপনার কী যুক্ত করুন যাতে আপনার অ্যাকাউন্টে সাইন-ইন করার সময় আপনি এটি ব্যবহার করতে পারেন</translation>
 <translation id="9074739597929991885">ব্লুটুথ</translation>
 <translation id="9074836595010225693">USB মাউস সংযুক্ত হয়েছে</translation>
 <translation id="9076523132036239772">আপনার ইমেল আইডি বা পাসওয়ার্ড যাচাই করা যায়নি৷ প্রথমে একটি নেটওয়ার্কের সঙ্গে সংযোগ করার চেষ্টা করুন৷</translation>
@@ -5303,6 +5389,7 @@
 <translation id="9218430445555521422">ডিফল্ট হিসেবে সেট করুন</translation>
 <translation id="9219103736887031265">ছবিগুলি</translation>
 <translation id="9220525904950070496">অ্যাকাউন্ট সরান</translation>
+<translation id="9220820413868316583">তুলে নিন এবং আবার চেষ্টা করুন।</translation>
 <translation id="923467487918828349">সকল দেখান</translation>
 <translation id="928985544179707652">এক্সটেনশন:</translation>
 <translation id="930268624053534560">বিস্তারিত টাইমস্ট্যাম্প</translation>
@@ -5342,6 +5429,7 @@
 <translation id="971774202801778802">বুকমার্ক URL</translation>
 <translation id="973473557718930265">প্রস্থান করুন</translation>
 <translation id="974555521953189084">সিঙ্ক শুরু করার জন্য আপনার পাসফ্রেজ লিখুন</translation>
+<translation id="977640333593638907">বেশিরভাগ কী ব্যবহার করতে শুধু বোতামে প্রেস করুন</translation>
 <translation id="981121421437150478">অফলাইন</translation>
 <translation id="983511809958454316">এই বৈশিষ্ট্য VR এ সমর্থিত নয়</translation>
 <translation id="984275831282074731">পেমেন্ট পদ্ধতি</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 11926d2c..689faa12 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -2179,7 +2179,6 @@
 <translation id="4296575653627536209">Afegeix un usuari supervisat</translation>
 <translation id="4297219207642690536">Reinicia i restableix</translation>
 <translation id="4297322094678649474">Canvia els idiomes</translation>
-<translation id="4300305918532693141">Per canviar aquesta configuració, <ph name="BEGIN_LINK" />restableix la sincronització<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">llarg (2 s)</translation>
 <translation id="4306119971288449206">Les aplicacions s'han de distribuir amb el tipus de contingut "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K actius)</translation>
@@ -5151,7 +5150,6 @@
 <translation id="8834164572807951958">Els membres de la unitat <ph name="DESTINATION_NAME" /> obtindran accés a la còpia d'aquests elements.</translation>
 <translation id="8838770651474809439">Hamburguesa</translation>
 <translation id="883911313571074303">Afegeix una anotació a la imatge</translation>
-<translation id="8844690305858050198">Fet! S'ha suprimit el programari maliciós. Per tornar a activar les extensions, ves a &lt;a href="chrome://extensions"&gt;Extensions&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Obteniu ajuda</translation>
 <translation id="8846141544112579928">S'està cercant el teclat...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 0894cd2..da35cbe 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -2179,7 +2179,6 @@
 <translation id="4296575653627536209">Přidat dozorovaného uživatele</translation>
 <translation id="4297219207642690536">Restartovat a resetovat</translation>
 <translation id="4297322094678649474">Změnit jazyky</translation>
-<translation id="4300305918532693141">Chcete-li toto nastavení změnit, <ph name="BEGIN_LINK" />resetujte synchronizaci<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">dlouhá (2 s)</translation>
 <translation id="4306119971288449206">Aplikace musí být poskytovány s typem obsahu <ph name="CONTENT_TYPE" /></translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB aktivních)</translation>
@@ -5148,7 +5147,6 @@
 <translation id="8834164572807951958">Členové týmu <ph name="DESTINATION_NAME" /> získají přístup ke kopii těchto položek.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Přidat k obrázku poznámku</translation>
-<translation id="8844690305858050198">Hotovo! Škodlivý software byl odstraněn. Budete-li chtít rozšíření znovu zapnout, přejděte na stránku &lt;a href="chrome://extensions"&gt;Rozšíření&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Nápověda</translation>
 <translation id="8846141544112579928">Vyhledávání klávesnice...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index ed70a28..2cfd9b3 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -2180,7 +2180,6 @@
 <translation id="4296575653627536209">Tilføj en administreret bruger</translation>
 <translation id="4297219207642690536">Genstart og nulstil</translation>
 <translation id="4297322094678649474">Skift sprog</translation>
-<translation id="4300305918532693141">Hvis du vil ændre denne indstilling, skal du<ph name="BEGIN_LINK" />nulstille synkroniseringen<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">lang (2 sek.)</translation>
 <translation id="4306119971288449206">Apps skal downloades med indholdstypen "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K live)</translation>
@@ -5153,7 +5152,6 @@
 <translation id="8834164572807951958">Medlemmer af "<ph name="DESTINATION_NAME" />" får adgang til kopien af disse elementer.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Annoter billede</translation>
-<translation id="8844690305858050198">Den skadelige software blev fjernet. Du kan aktivere udvidelser igen ved at gå til &lt;a href="chrome://extensions"&gt;Udvidelser.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Få hjælp</translation>
 <translation id="8846141544112579928">Søger efter tastatur...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 4d0fd70..b944099 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -2178,7 +2178,6 @@
 <translation id="4296575653627536209">Betreuten Nutzer hinzufügen</translation>
 <translation id="4297219207642690536">Neu starten und zurücksetzen</translation>
 <translation id="4297322094678649474">Sprachen ändern</translation>
-<translation id="4300305918532693141">Wenn Sie diese Einstellung ändern möchten, <ph name="BEGIN_LINK" />setzen Sie die Synchronisierung zurück<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">lang (2 s)</translation>
 <translation id="4306119971288449206">Für Apps muss der Inhaltstyp "<ph name="CONTENT_TYPE" />" bereitgestellt werden</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB live)</translation>
@@ -5151,7 +5150,6 @@
 <translation id="8834164572807951958">Mitglieder von "<ph name="DESTINATION_NAME" />" erhalten Zugriff auf die Kopie dieser Elemente.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Bild mit Anmerkung versehen</translation>
-<translation id="8844690305858050198">Fertig! Die schädliche Software wurde entfernt. Sie können Ihre Erweiterungen jetzt wieder aktivieren, indem Sie die &lt;a href="chrome://extensions"&gt;Erweiterungen&lt;/a&gt; aufrufen.</translation>
 <translation id="8845001906332463065">Hilfe aufrufen</translation>
 <translation id="8846141544112579928">Suche nach Tastatur läuft...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 4355039a..738f3e04 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Προσθήκη εποπτευόμενου χρήστη</translation>
 <translation id="4297219207642690536">Επανεκκίνηση και επαναφορά</translation>
 <translation id="4297322094678649474">Αλλαγή γλωσσών</translation>
-<translation id="4300305918532693141">Για να αλλάξετε αυτήν τη ρύθμιση, <ph name="BEGIN_LINK" />επαναφέρετε τον συγχρονισμό<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">μεγάλη (2 δ.)</translation>
 <translation id="4306119971288449206">Οι εφαρμογές θα πρέπει να προβάλλονται με τον τύπο περιεχομένου "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (πραγματικά <ph name="NUM_KILOBYTES_LIVE" />K)</translation>
@@ -5153,7 +5152,6 @@
 <translation id="8834164572807951958">Τα μέλη του "<ph name="DESTINATION_NAME" />" θα αποκτήσουν πρόσβαση στο αντίγραφο αυτών των στοιχείων.</translation>
 <translation id="8838770651474809439">Χάμπουργκερ</translation>
 <translation id="883911313571074303">Σχολιασμός εικόνας</translation>
-<translation id="8844690305858050198">Η διαδικασία ολοκληρώθηκε! Το επιβλαβές λογισμικό καταργήθηκε. Για να ενεργοποιήσετε ξανά τις επεκτάσεις, μεταβείτε στις &lt;a href="chrome://extensions"&gt;Επεκτάσεις.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Λήψη βοήθειας</translation>
 <translation id="8846141544112579928">Αναζήτηση για πληκτρολόγιο…</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index a8e2769..512ee9e 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -247,6 +247,7 @@
 <translation id="1358741672408003399">Spelling and Grammar</translation>
 <translation id="1361164813881551742">Add Manually</translation>
 <translation id="1361655923249334273">Unused</translation>
+<translation id="1361872463926621533">Play sound on startup</translation>
 <translation id="1363028406613469049">Track</translation>
 <translation id="1367951781824006909">Choose a file</translation>
 <translation id="1368265273904755308">Report issue</translation>
@@ -570,6 +571,7 @@
 <translation id="1817310072033858383">Set up Smart Lock for your <ph name="DEVICE_TYPE" /></translation>
 <translation id="1817871734039893258">Microsoft File Recovery</translation>
 <translation id="1818007989243628752">Delete password for <ph name="USERNAME" /></translation>
+<translation id="1818913467757368489">Log upload underway.</translation>
 <translation id="1819721979226826163">Tap App notifications &gt; Google Play services.</translation>
 <translation id="1826516787628120939">Checking</translation>
 <translation id="1828378091493947763">This plug-in is not supported on this device</translation>
@@ -618,11 +620,13 @@
 <translation id="1890674179660343635">&lt;span&gt;ID: &lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
 <translation id="189210018541388520">Open full screen</translation>
 <translation id="189358972401248634">Other languages</translation>
+<translation id="1894591787927543791">Save card to use Google Pay</translation>
 <translation id="1895658205118569222">Shutdown</translation>
 <translation id="1895934970388272448">You must confirm registration on your printer to finish this process - check it now.</translation>
 <translation id="1897762215429052132">Setup network connection, language, keyboard layout...</translation>
 <translation id="1901303067676059328">Select &amp;all</translation>
 <translation id="1902576642799138955">Validity Period</translation>
+<translation id="1904518222538904133">One of your cards can only be used on this device</translation>
 <translation id="1905375423839394163">Chromebook device name</translation>
 <translation id="1905710495812624430">Maximum allowed attempts exceeded.</translation>
 <translation id="1909880997794698664">Are you sure you want to permanently keep this device in kiosk mode?</translation>
@@ -659,6 +663,7 @@
 <translation id="1962969542251276847">Lock Screen</translation>
 <translation id="1963227389609234879">Remove All</translation>
 <translation id="1965624977906726414">Has no special permissions.</translation>
+<translation id="1969654639948595766">WebRTC text logs (<ph name="WEBRTC_TEXT_LOG_COUNT" />)</translation>
 <translation id="1970368523891847084">Video mode entered</translation>
 <translation id="197288927597451399">Keep</translation>
 <translation id="1974043046396539880">CRL Distribution Points</translation>
@@ -802,6 +807,7 @@
 <translation id="2190069059097339078">Wi-Fi Credentials Getter</translation>
 <translation id="219008588003277019">Native Client module: <ph name="NEXE_NAME" /></translation>
 <translation id="2190355936436201913">(empty)</translation>
+<translation id="2191223688506386601">One last thing</translation>
 <translation id="2192505247865591433">From:</translation>
 <translation id="2193365732679659387">Trust settings</translation>
 <translation id="2195729137168608510">Email Protection</translation>
@@ -1025,6 +1031,7 @@
 <translation id="2534460670861217804">Secure HTTP Proxy</translation>
 <translation id="253557089021624350">Keepalive count</translation>
 <translation id="2538361623464451692">Sync disabled</translation>
+<translation id="2539876824180063438">Move your index finger slightly to add the different parts of your fingerprint.</translation>
 <translation id="2541002089857695151">Optimise full-screen casting?</translation>
 <translation id="2542049655219295786">Google table</translation>
 <translation id="2544853746127077729">Authentication certificate rejected by network</translation>
@@ -1257,7 +1264,9 @@
 <translation id="287286579981869940">Add <ph name="PROVIDER_NAME" />...</translation>
 <translation id="2874343608108773609">To get your passwords on all your devices, sign in to Chrome.</translation>
 <translation id="2875698561019555027">(Chrome error pages)</translation>
+<translation id="2876336351874743617">Finger 2</translation>
 <translation id="288042212351694283">Access your Universal 2nd Factor devices</translation>
+<translation id="2881076733170862447">When you click the extension</translation>
 <translation id="2881966438216424900">Last accessed:</translation>
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> will restart and reset momentarily</translation>
 <translation id="2885378588091291677">Task Manager</translation>
@@ -1443,6 +1452,7 @@
 <translation id="3154429428035006212">Offline for more than a month</translation>
 <translation id="3156531245809797194">To use Chrome, please sign in</translation>
 <translation id="3157931365184549694">Restore</translation>
+<translation id="3158033540161634471">Set up your fingerprint</translation>
 <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (hardware-backed)</translation>
 <translation id="316125635462764134">Remove app</translation>
 <translation id="3161522574479303604">All languages</translation>
@@ -1515,6 +1525,8 @@
 <translation id="3292421191230118801">Resume viewing sites from mobile on your Chromebook</translation>
 <translation id="32939749466444286">The Linux container didn't start. Please try again.</translation>
 <translation id="3294437725009624529">Guest</translation>
+<translation id="329703603001918157">Can’t edit shortcut</translation>
+<translation id="3297951628821704004">Remove account from this device</translation>
 <translation id="329838636886466101">Repair</translation>
 <translation id="3298789223962368867">Invalid URL entered.</translation>
 <translation id="32991397311664836">Devices:</translation>
@@ -1681,6 +1693,7 @@
 <translation id="3534879087479077042">What is a supervised user?</translation>
 <translation id="3538066758857505094">Error uninstalling Linux. Please try again.</translation>
 <translation id="354060433403403521">AC adaptor</translation>
+<translation id="354068948465830244">This can read and change site data</translation>
 <translation id="3541661933757219855">Type Ctrl+Alt+/ or Escape to hide</translation>
 <translation id="3543393733900874979">Update failed (error: <ph name="ERROR_NUMBER" />)</translation>
 <translation id="3543597750097719865">X9.62 ECDSA Signature with SHA-512</translation>
@@ -1726,6 +1739,7 @@
 <translation id="3606712892509067288">Remove from Better Together</translation>
 <translation id="3608454375274108141">F10</translation>
 <translation id="3608576286259426129">User image preview</translation>
+<translation id="3609446736023031597">Get the latest updates and recommendations on Play Store apps</translation>
 <translation id="3609785682760573515">Syncing...</translation>
 <translation id="3609895557594655134">Add Android VPN…</translation>
 <translation id="361106536627977100">Flash data</translation>
@@ -1758,6 +1772,7 @@
 <translation id="3645372836428131288">Move slightly to capture a different part of the fingerprint.</translation>
 <translation id="3648348069317717750"><ph name="USB_DEVICE_NAME" /> detected</translation>
 <translation id="3649138363871392317">Photo was captured</translation>
+<translation id="3650845953328929506">Log upload pending.</translation>
 <translation id="3650952250015018111">Allow '<ph name="APP_NAME" />' to access:</translation>
 <translation id="3651488188562686558">Disconnect from Wi-Fi</translation>
 <translation id="3652817283076144888">Initialising</translation>
@@ -1909,6 +1924,7 @@
 <translation id="3856800405688283469">Select Time Zone</translation>
 <translation id="3857228364945137633">Try Smart Lock to unlock your <ph name="DEVICE_TYPE" /> without a password when your phone is nearby.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
+<translation id="3857807444929313943">Lift, then touch again</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Sync paused</translation>
 <translation id="3860381078714302691">Welcome to Hangouts Meet</translation>
 <translation id="3861241522664181545">Page paused.</translation>
@@ -1927,6 +1943,7 @@
 <translation id="3873315167136380065">To turn this on, <ph name="BEGIN_LINK" />reset sync<ph name="END_LINK" /> to remove your sync passphrase</translation>
 <translation id="3878840326289104869">Creating supervised user</translation>
 <translation id="3879748587602334249">Download manager</translation>
+<translation id="3885455691202481064">Touch the sensor with your index finger. It's on the top left of your Chromebook.</translation>
 <translation id="3888550877729210209">Taking notes with <ph name="LOCK_SCREEN_APP_NAME" /></translation>
 <translation id="3892414795099177503">Add OpenVPN/L2TP...</translation>
 <translation id="3893536212201235195">Read and change your accessibility settings</translation>
@@ -1979,6 +1996,7 @@
 <translation id="3950820424414687140">Sign in</translation>
 <translation id="3954354850384043518">In progress</translation>
 <translation id="3954469006674843813"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hertz)</translation>
+<translation id="3954953195017194676">You have no recently captured WebRTC event logs.</translation>
 <translation id="3955193568934677022">Allow sites to play protected content (recommended)</translation>
 <translation id="3956702100721821638">Couldn't reach Google Play</translation>
 <translation id="3958088479270651626">Import bookmarks and settings</translation>
@@ -2181,7 +2199,6 @@
 <translation id="4296575653627536209">Add Supervised User</translation>
 <translation id="4297219207642690536">Restart and reset</translation>
 <translation id="4297322094678649474">Change Languages</translation>
-<translation id="4300305918532693141">To change this setting, <ph name="BEGIN_LINK" />reset sync<ph name="END_LINK" /></translation>
 <translation id="4305227814872083840">long (2s)</translation>
 <translation id="4306119971288449206">Apps must be served with content-type '<ph name="CONTENT_TYPE" />'</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K live)</translation>
@@ -2233,6 +2250,7 @@
 <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation>
 <translation id="4408599188496843485">H&amp;elp</translation>
 <translation id="4409697491990005945">Margins</translation>
+<translation id="4410545552906060960">Use a number (PIN) instead of a password to unlock your device. To set your PIN later, go to Settings.</translation>
 <translation id="4411578466613447185">Code Signer</translation>
 <translation id="4412698727486357573">Help Centre</translation>
 <translation id="44141919652824029">Allow '<ph name="APP_NAME" />' to get the list of your attached USB devices?</translation>
@@ -2324,8 +2342,10 @@
 <translation id="4555769855065597957">Shadow</translation>
 <translation id="4556110439722119938">Your bookmarks, history, passwords and other settings will be synced to your Google Account so that you can use them on all your devices</translation>
 <translation id="4558426062282641716">Auto-launch permission requested</translation>
+<translation id="4558491878126948419">Get <ph name="DEVICE_TYPE" /> tips and updates on Google products and share feedback. Unsubscribe at any time.</translation>
 <translation id="4559617833001311418">This site is accessing your motion or light sensors.</translation>
 <translation id="4562155214028662640">Add Fingerprint</translation>
+<translation id="4563880231729913339">Finger 3</translation>
 <translation id="4565377596337484307">Hide password</translation>
 <translation id="4567772783389002344">Add word</translation>
 <translation id="4568213207643490790">Sorry, Google accounts are not allowed on this device.</translation>
@@ -2400,6 +2420,7 @@
 <translation id="4681930562518940301">Open original image in new tab</translation>
 <translation id="4682551433947286597">Wallpapers appear on the Sign-in Screen.</translation>
 <translation id="4684427112815847243">Sync everything</translation>
+<translation id="4688036121858134881">Local log ID: <ph name="WEBRTC_EVENT_LOG_LOCAL_ID" />.</translation>
 <translation id="4689235506267737042">Choose your demo preferences</translation>
 <translation id="4689421377817139245">Sync this bookmark to your iPhone</translation>
 <translation id="4690091457710545971">&lt;Four files generated by Intel Wi-Fi firmware: csr.lst, fh_regs.lst, radio_reg.lst, monitor.lst.sysmon. The first three are binary files containing register dumps, and are asserted by Intel to contain no personal or device-identifying information. The last file is an execution trace from the Intel firmware; it has been scrubbed of any personal or device-identifying information, but is too large to display here. These files were generated in response to recent Wi-Fi problems with your device, and will be shared with Intel to help troubleshoot these problems.&gt;</translation>
@@ -2584,6 +2605,7 @@
 <translation id="4945444280533270988">Smart Lock is on</translation>
 <translation id="4953689047182316270">Respond to Accessibility Events</translation>
 <translation id="4953808748584563296">Default orange avatar</translation>
+<translation id="4955710816792587366">Choose your PIN</translation>
 <translation id="4955814292505481804">Annual</translation>
 <translation id="4957949153200969297">Only enable features related to <ph name="IDS_SHORT_PRODUCT_NAME" /> Sync</translation>
 <translation id="4959262764292427323">Passwords are saved in your Google account so that you can use them on any device</translation>
@@ -2649,6 +2671,7 @@
 <translation id="5050042263972837708">Group name</translation>
 <translation id="5052499409147950210">Edit site</translation>
 <translation id="5053604404986157245">The randomly generated TPM password is not available. This is normal after a Powerwash.</translation>
+<translation id="5057110919553308744">When you click the extension</translation>
 <translation id="5061347216700970798">{NUM_BOOKMARKS,plural, =1{This folder contains a bookmark. Are you sure that you want to delete it?}other{This folder contains # bookmarks. Are you sure that you want to delete it?}}</translation>
 <translation id="5061708541166515394">Contrast</translation>
 <translation id="5062930723426326933">Sign-in failed, please connect to the Internet and try again.</translation>
@@ -2824,6 +2847,7 @@
 <translation id="5315873049536339193">Identity</translation>
 <translation id="5316716239522500219">Mirror monitors</translation>
 <translation id="5317780077021120954">Save</translation>
+<translation id="5318819489018851358">Share with Linux</translation>
 <translation id="5319359161174645648">Google recommends Chrome</translation>
 <translation id="5319566035256672173">This device will no longer receive the latest software updates. Please consider upgrading.</translation>
 <translation id="532247166573571973">The server may be unreachable. Try again later.</translation>
@@ -3164,6 +3188,7 @@
 <translation id="5804241973901381774">Permissions</translation>
 <translation id="580571955903695899">Reorder by Title</translation>
 <translation id="5807290661599647102">Set a Screen Lock</translation>
+<translation id="5811750797187914944">All set</translation>
 <translation id="5814126672212206791">Connection type</translation>
 <translation id="5815645614496570556">X.400 Address</translation>
 <translation id="5816434091619127343">Requested printer changes would make the printer unusable.</translation>
@@ -3201,6 +3226,7 @@
 <translation id="5855773610748894548">Oops, secure module error.</translation>
 <translation id="5856721540245522153">Enable debugging features</translation>
 <translation id="5857090052475505287">New Folder</translation>
+<translation id="5858490737742085133">Terminal</translation>
 <translation id="585979798156957858">External Meta</translation>
 <translation id="5860033963881614850">Off</translation>
 <translation id="5860209693144823476">Tab 3</translation>
@@ -3223,6 +3249,7 @@
 <translation id="5882919346125742463">Known Networks</translation>
 <translation id="5884474295213649357">This tab is connected to a USB device.</translation>
 <translation id="5885324376209859881">Manage media settings...</translation>
+<translation id="5886009770935151472">Finger 1</translation>
 <translation id="5889282057229379085">Maximum number of intermediate CAs: <ph name="NUM_INTERMEDIATE_CA" /></translation>
 <translation id="5895138241574237353">Restart</translation>
 <translation id="5895187275912066135">Issued On</translation>
@@ -3307,6 +3334,7 @@
 <translation id="6025215716629925253">Stack Trace</translation>
 <translation id="6026047032548434446">Install App?</translation>
 <translation id="6026819612896463875"><ph name="WINDOW_TITLE" /> – USB device connected</translation>
+<translation id="6028117231645531007">Add fingerprint</translation>
 <translation id="6029027682598229313">Linux installation is complete.</translation>
 <translation id="6029587122245504742">Slowest</translation>
 <translation id="6032912588568283682">File system</translation>
@@ -3321,6 +3349,7 @@
 <translation id="6042308850641462728">More</translation>
 <translation id="6043317578411397101"><ph name="APP_NAME" /> is sharing a Chrome tab with <ph name="TAB_NAME" />.</translation>
 <translation id="6044805581023976844"><ph name="APP_NAME" /> is sharing a Chrome tab and audio with <ph name="TAB_NAME" />.</translation>
+<translation id="6047938872139769630">You can use PIN to unlock your device when signed out</translation>
 <translation id="6049004884579590341">Press and hold |<ph name="ACCELERATOR" />| to exit full screen</translation>
 <translation id="6049065490165456785">Photo from internal camera</translation>
 <translation id="6051354611314852653">Oops!  The system failed to authorise API access for this device.</translation>
@@ -3343,6 +3372,7 @@
 <translation id="6075907793831890935">Exchange data with the device named <ph name="HOSTNAME" /></translation>
 <translation id="6076448957780543068">Include this screenshot</translation>
 <translation id="6077131872140550515">Remove from preferred</translation>
+<translation id="6077189836672154517">Tips and updates on <ph name="DEVICE_TYPE" /></translation>
 <translation id="6078323886959318429">Add shortcut</translation>
 <translation id="6078752646384677957">Please check your microphone and audio levels.</translation>
 <translation id="6080515710685820702">Using a shared computer? Try opening an incognito window.</translation>
@@ -3392,6 +3422,7 @@
 <translation id="6144938890088808325">Help Us Improve Chromebooks</translation>
 <translation id="6146563240635539929">Videos</translation>
 <translation id="6147020289383635445">Print preview failed.</translation>
+<translation id="6148052338549899048">No eligible devices. <ph name="LINK_BEGIN" />Find out more.<ph name="LINK_END" /></translation>
 <translation id="614940544461990577">Try:</translation>
 <translation id="6150853954427645995">To save this file for offline use, get back online, right-click the file and select the <ph name="OFFLINE_CHECKBOX_NAME" /> option.</translation>
 <translation id="6151323131516309312">Press <ph name="SEARCH_KEY" /> to search <ph name="SITE_NAME" /></translation>
@@ -3411,6 +3442,7 @@
 <translation id="6169040057125497443">Please check your microphone.</translation>
 <translation id="6169666352732958425">Unable to cast desktop.</translation>
 <translation id="6171948306033499786">Pause printing</translation>
+<translation id="6173623053897475761">Type your PIN again</translation>
 <translation id="6175314957787328458">Microsoft Domain GUID</translation>
 <translation id="6176043333338857209">Bluetooth will be temporarily turned on to communicate with your security key</translation>
 <translation id="6178664161104547336">Select a certificate</translation>
@@ -3600,11 +3632,13 @@
 <translation id="6456394469623773452">Fine</translation>
 <translation id="6456631036739229488">Smart Lock phone changed. Enter your password to update Smart Lock. Next time, your phone will unlock your <ph name="DEVICE_TYPE" />. Turn off Smart Lock in Settings.</translation>
 <translation id="645705751491738698">Continue blocking JavaScript</translation>
+<translation id="6458701200018867744">Upload failed (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation>
 <translation id="6459488832681039634">Use Selection for Find</translation>
 <translation id="6459799433792303855">Active window moved to another display.</translation>
 <translation id="6460601847208524483">Find Next</translation>
 <translation id="6463795194797719782">&amp;Edit</translation>
 <translation id="6466988389784393586">&amp;Open All Bookmarks</translation>
+<translation id="6467304607960172345">Optimise full-screen videos</translation>
 <translation id="6468485451923838994">Fonts</translation>
 <translation id="6472207088655375767">OTP</translation>
 <translation id="6472893788822429178">Show Home button</translation>
@@ -3780,6 +3814,7 @@
 <translation id="6725206449694821596">Internet Printing Protocol (IPP)</translation>
 <translation id="6727005317916125192">Previous pane</translation>
 <translation id="6732801395666424405">Certificates not loaded</translation>
+<translation id="6732900235521116609">Can’t remove shortcut</translation>
 <translation id="6735304988756581115">Show cookies and other site data...</translation>
 <translation id="6736045498964449756">Whoops, passwords do not match!</translation>
 <translation id="6736243959894955139">Address</translation>
@@ -3863,6 +3898,7 @@
 <translation id="6860427144121307915">Open in a Tab</translation>
 <translation id="6862635236584086457">All files saved in this folder are backed up online automatically</translation>
 <translation id="6865313869410766144">Autofill form data</translation>
+<translation id="6865708901122695652">WebRTC event logs (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation>
 <translation id="686664946474413495">Colour temperature</translation>
 <translation id="6870888490422746447">Choose an app to share to:</translation>
 <translation id="6871644448911473373">OCSP Responder: <ph name="LOCATION" /></translation>
@@ -3907,6 +3943,7 @@
 <translation id="694592694773692225">Redirect blocked on this page.</translation>
 <translation id="6949306908218145636">Bookmark Open Pages...</translation>
 <translation id="6950627417367801484">Restore apps</translation>
+<translation id="6950943362443484797">We'll install that app for you</translation>
 <translation id="6951153907720526401">Payment Handlers</translation>
 <translation id="6955446738988643816">Inspect Pop-up</translation>
 <translation id="6957231940976260713">Service name</translation>
@@ -3942,6 +3979,7 @@
 <translation id="6998711733709403587"><ph name="SELCTED_FOLDERS_COUNT" /> folders selected</translation>
 <translation id="6998793565256476099">Enrol device for video conferencing</translation>
 <translation id="7000347579424117903">Include Ctrl, Alt or Search</translation>
+<translation id="700203306553508933">Save cards to use Google Pay</translation>
 <translation id="7002055706763150362">To set up Smart Lock for Chromebook, Google needs to make sure that it’s you – type your password to get started.</translation>
 <translation id="7002454948392136538">Choose the manager for this supervised user</translation>
 <translation id="7003339318920871147">Web Databases</translation>
@@ -3989,6 +4027,7 @@
 <translation id="706626672220389329">Error mounting share. The specified share is already mounted.</translation>
 <translation id="7066944511817949584">Failed to connect to "<ph name="DEVICE_NAME" />".</translation>
 <translation id="7067725467529581407">Never show this again.</translation>
+<translation id="7070484045139057854">This can read and change site data</translation>
 <translation id="7072010813301522126">Shortcut name</translation>
 <translation id="707392107419594760">Select your keyboard:</translation>
 <translation id="7075513071073410194">PKCS #1 MD5 With RSA Encryption</translation>
@@ -4118,6 +4157,7 @@
 <translation id="7256710573727326513">Open in a tab</translation>
 <translation id="725758059478686223">Printing Service</translation>
 <translation id="7257666756905341374">Read data that you copy and paste</translation>
+<translation id="7258697411818564379">Your PIN is added</translation>
 <translation id="7260764918845374269">To see your security key, it needs to be in pairing mode. Press the button on your key for at least 5 seconds.</translation>
 <translation id="7262004276116528033">This sign-in service is hosted by <ph name="SAML_DOMAIN" /></translation>
 <translation id="7268365133021434339">Close Tabs</translation>
@@ -4265,6 +4305,7 @@
 <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="7495778526395737099">Forgot your old password?</translation>
 <translation id="7497215489070763236">Server CA certificate</translation>
+<translation id="7497981768003291373">You have no recently captured WebRTC text logs.</translation>
 <translation id="7502658306369382406">IPv6 address</translation>
 <translation id="7503191893372251637">Netscape Certificate Type</translation>
 <translation id="7503821294401948377">Could not load icon '<ph name="ICON" />' for browser action.</translation>
@@ -4307,6 +4348,7 @@
 <translation id="7564847347806291057">End process</translation>
 <translation id="7566118625369982896">Manage Play app links</translation>
 <translation id="7566723889363720618">F12</translation>
+<translation id="7567772679638539078">Place your finger</translation>
 <translation id="756809126120519699">Cleared Chrome data</translation>
 <translation id="7568790562536448087">Updating</translation>
 <translation id="7571643774869182231">Not enough storage for update</translation>
@@ -4469,6 +4511,7 @@
     <ph name="LINE_BREAK2" />
     Try selecting fewer photos.</translation>
 <translation id="782590969421016895">Use current pages</translation>
+<translation id="7826346148677309647">You can find more apps for your device in the Play Store.</translation>
 <translation id="7826790948326204519"><ph name="BEGIN_H3" />Debugging Features<ph name="END_H3" />
     <ph name="BR" />
     You can enable the debugging features on your Chrome OS Device in order to install and test customised code on your device. This will allow you to:<ph name="BR" />
@@ -4665,6 +4708,7 @@
 <translation id="8059417245945632445">&amp;Inspect devices</translation>
 <translation id="8063235345342641131">Default green avatar</translation>
 <translation id="8064671687106936412">Key:</translation>
+<translation id="8065485338434000013">Some of your cards can only be used on this device</translation>
 <translation id="806812017500012252">Reorder by title</translation>
 <translation id="8068253693380742035">Touch to sign in</translation>
 <translation id="8069615408251337349">Google Cloud Print</translation>
@@ -4742,6 +4786,7 @@
 <translation id="8191453843330043793">V8 Proxy Resolver</translation>
 <translation id="8193175696669055101">Device model</translation>
 <translation id="8195027750202970175">Size on disk</translation>
+<translation id="8198323535106903877">We'll install those <ph name="NUMBER_OF_APPS" /> apps for you</translation>
 <translation id="8199300056570174101">Network (Service) and Device properties</translation>
 <translation id="8200772114523450471">Resume</translation>
 <translation id="8202160505685531999">Please re-enter your password to update your <ph name="DEVICE_TYPE" /> profile.</translation>
@@ -5074,6 +5119,8 @@
 <translation id="8716931980467311658">Delete all Linux applications and data in your Linux files folder from this <ph name="DEVICE_TYPE" />?</translation>
 <translation id="8719653885894320876"><ph name="PLUGIN_NAME" /> download failed</translation>
 <translation id="8723829621484579639">Incognito subframes for: <ph name="PARENT_SITE" /></translation>
+<translation id="8724405322205516354">When you see this icon, use your fingerprint for identification or to approve purchases.</translation>
+<translation id="8724409975248965964">Fingerprint added</translation>
 <translation id="8724859055372736596">&amp;Show in Folder</translation>
 <translation id="8725066075913043281">Try again</translation>
 <translation id="8725178340343806893">Favourites/bookmarks</translation>
@@ -5153,8 +5200,8 @@
 <translation id="8834164572807951958">Members of '<ph name="DESTINATION_NAME" />' will gain access to the copy of these items.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Annotate image</translation>
-<translation id="8844690305858050198">Done! Harmful software removed. To turn extensions back on, visit &lt;a href="chrome://extensions"&gt;Extensions.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Get help</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>
 <translation id="8859057652521303089">Select your language:</translation>
@@ -5368,6 +5415,7 @@
 <translation id="9161070040817969420">Subframes for: <ph name="PARENT_SITE" /></translation>
 <translation id="916501514001398070">Send system data. This device automatically sends diagnostic and device and app usage data currently to Google. This setting is enforced by the owner. If you turned on additional Web &amp; App Activity, this information will be stored with your account so that you can manage it in My Activity. <ph name="BEGIN_LINK1" />Learn More<ph name="END_LINK1" /></translation>
 <translation id="916607977885256133">Picture in Picture</translation>
+<translation id="9168436347345867845">Do it later</translation>
 <translation id="9169496697824289689">View keyboard shortcuts</translation>
 <translation id="9169931577761441333">Add <ph name="APP_NAME" /> to Home screen</translation>
 <translation id="9170848237812810038">&amp;Undo</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 6d88ac3..ed4fff999 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -42,6 +42,7 @@
 <translation id="1056775291175587022">No hay redes</translation>
 <translation id="1056898198331236512">Advertencia</translation>
 <translation id="1058262162121953039">PUK</translation>
+<translation id="1059855432287631118">Registro de huella digital</translation>
 <translation id="1061904396131502319">Casi es hora de un descanso</translation>
 <translation id="1062407476771304334">Reemplazar</translation>
 <translation id="1067048845568873861">Creada</translation>
@@ -74,6 +75,7 @@
 <translation id="1114202307280046356">Diamante</translation>
 <translation id="1114335938027186412">La computadora contiene un dispositivo de seguridad del Módulo de plataforma segura (TPM) que se usa para implementar varias funciones clave de seguridad en el Sistema operativo Chrome. Para obtener más información, visita el Centro de ayuda de Chromebook: https://support.google.com/chromebook/?p=tpm.</translation>
 <translation id="1114525161406758033">Suspender cuando se cierre la tapa</translation>
+<translation id="1115324527092594775">Configura "Mejor juntos"</translation>
 <translation id="1116694919640316211">Acerca de</translation>
 <translation id="1116779635164066733">La extensión "<ph name="NAME" />" administra esta configuración.</translation>
 <translation id="111844081046043029">¿Estás seguro de que deseas abandonar esta página?</translation>
@@ -109,6 +111,7 @@
 <translation id="1156488781945104845">Hora actual</translation>
 <translation id="1157102636231978136">Tus datos de navegación y actividad, sincronizados con tu cuenta de Google</translation>
 <translation id="1161575384898972166">Accede a <ph name="TOKEN_NAME" /> para exportar el certificado de cliente.</translation>
+<translation id="1161699061380012396">Método de entrada del Sistema operativo Chrome</translation>
 <translation id="1163931534039071049">&amp;Ver fuente de marco</translation>
 <translation id="1164674268730883318">¿Deseas desactivar Smart Lock para el dispositivo <ph name="DEVICE_TYPE" />?</translation>
 <translation id="1164899421101904659">Ingresa la clave de desbloqueo de PIN</translation>
@@ -1353,6 +1356,7 @@
 <translation id="3020990233660977256">Número de serie: <ph name="SERIAL_NUMBER" /></translation>
 <translation id="3021678814754966447">&amp;Ver fuente del marco</translation>
 <translation id="3022978424994383087">No entendí.</translation>
+<translation id="3023464535986383522">Seleccionar para pronunciar</translation>
 <translation id="3024374909719388945">Utilizar reloj de 24 horas</translation>
 <translation id="302781076327338683">Volver a cargar sin almacenar en caché</translation>
 <translation id="3031417829280473749">Agente X</translation>
@@ -1749,6 +1753,7 @@
 <translation id="363903084947548957">Siguiente método de entrada</translation>
 <translation id="3640214691812501263">¿Quieres agregar "<ph name="EXTENSION_NAME" />" para <ph name="USER_NAME" />?</translation>
 <translation id="3644896802912593514">Ancho</translation>
+<translation id="3645372836428131288">Mueve el dedo ligeramente para capturar otra parte de la huella digital.</translation>
 <translation id="3648348069317717750">Se detectó <ph name="USB_DEVICE_NAME" /></translation>
 <translation id="3649138363871392317">Se capturó la foto.</translation>
 <translation id="3650952250015018111">Permitir que "<ph name="APP_NAME" />" acceda a:</translation>
@@ -2174,7 +2179,6 @@
 <translation id="4296575653627536209">Agregar usuario supervisado</translation>
 <translation id="4297219207642690536">Reiniciar y restablecer</translation>
 <translation id="4297322094678649474">Cambiar idiomas</translation>
-<translation id="4300305918532693141">Para cambiar esta configuración, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">largo (2 s)</translation>
 <translation id="4306119971288449206">Las apps deben incluir el encabezado content-type "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K en vivo)</translation>
@@ -2219,6 +2223,7 @@
 <translation id="438503109373656455">Rocinante</translation>
 <translation id="4387004326333427325">Certificado de autenticación rechazado de forma remota</translation>
 <translation id="4389091756366370506">Usuario <ph name="VALUE" /></translation>
+<translation id="439266289085815679"><ph name="USER_EMAIL" /> controla la configuración de Bluetooth.</translation>
 <translation id="4394049700291259645">Inhabilitar</translation>
 <translation id="4400367121200150367">Aquí aparecerán los sitios que nunca guardan las contraseñas</translation>
 <translation id="4400632832271803360">Mantén presionada la tecla de Launcher para cambiar el comportamiento de las teclas en la fila superior</translation>
@@ -2292,6 +2297,7 @@
 <translation id="4522600456902129422">Seguir permitiendo que este sitio vea el portapapeles</translation>
 <translation id="4530494379350999373">Origen</translation>
 <translation id="4533985347672295764">Tiempo de CPU</translation>
+<translation id="4534661889221639075">Vuelve a intentarlo.</translation>
 <translation id="4535127706710932914">Perfil predeterminado</translation>
 <translation id="4538417792467843292">Eliminar palabra</translation>
 <translation id="4538684596480161368">Siempre bloquear los complementos no incluidos en la zona de pruebas en <ph name="HOST" /></translation>
@@ -2521,6 +2527,7 @@
 <translation id="4880520557730313061">Autocorrección</translation>
 <translation id="4880827082731008257">Buscar historial</translation>
 <translation id="4881695831933465202">Abrir</translation>
+<translation id="4882312758060467256">Tiene acceso a este sitio</translation>
 <translation id="4882473678324857464">Enfocar favoritos</translation>
 <translation id="4882831918239250449">Controlar cómo se usa tu historial de navegación para personalizar la Búsqueda, los anuncios y mucho más</translation>
 <translation id="4883178195103750615">Exportar favoritos a un archivo HTML...</translation>
@@ -2586,6 +2593,7 @@
 <translation id="4969785127455456148">Álbum</translation>
 <translation id="4971412780836297815">Abrir al finalizar</translation>
 <translation id="4972129977812092092">Editar impresora</translation>
+<translation id="4972164225939028131">Contraseña incorrecta</translation>
 <translation id="497287958838527945">Tarjetas de crédito y direcciones con Google Pay</translation>
 <translation id="4973307593867026061">Agregar impresoras</translation>
 <translation id="4973523518332075481">Usa un nombre con <ph name="MAX_LENGTH" /> caracteres o menos</translation>
@@ -3013,6 +3021,7 @@
 <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation>
 <translation id="558918721941304263">Cargando apps…</translation>
 <translation id="5592595402373377407">Aún no hay suficientes datos disponibles.</translation>
+<translation id="5593357315997824387">Sincronizar mis archivos</translation>
 <translation id="5595152862129936745">Demasiado lejos</translation>
 <translation id="5595485650161345191">Editar dirección</translation>
 <translation id="5596627076506792578">Más opciones</translation>
@@ -3728,6 +3737,7 @@
 <translation id="6664237456442406323">Desafortunadamente, la computadora está configurada con un identificador de hardware incorrecto. Esto impide que el Sistema operativo Chrome se actualice con las últimas correcciones de seguridad, y la computadora <ph name="BEGIN_BOLD" />puede quedar vulnerable a ataques maliciosos<ph name="END_BOLD" />.</translation>
 <translation id="6664774537677393800">Se produjo un error al abrir tu perfil. Sal de tu cuenta y vuelve a acceder.</translation>
 <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation>
+<translation id="6674412557034343536">detener temporizador</translation>
 <translation id="667517062706956822">¿Deseas que Google traduzca esta página de <ph name="SOURCE_LANGUAGE" /> a <ph name="TARGET_LANGUAGE" />?</translation>
 <translation id="6675665718701918026">Dispositivo señalador conectado</translation>
 <translation id="6678717876183468697">URL de consulta</translation>
@@ -4054,6 +4064,7 @@
 <translation id="7186088072322679094">Mantener en la barra de herramientas</translation>
 <translation id="7187428571767585875">Entradas de registro que se quitarán o cambiarán:</translation>
 <translation id="7189234443051076392">Asegúrate de que haya espacio suficiente en tu dispositivo</translation>
+<translation id="7189965711416741966">Se agregó una huella digital.</translation>
 <translation id="7191159667348037">Impresora desconocida (USB)</translation>
 <translation id="7191454237977785534">Guardar archivo como</translation>
 <translation id="7193374945610105795">No se guardó ninguna contraseña para <ph name="ORIGIN" /></translation>
@@ -4154,6 +4165,7 @@
 <translation id="7339898014177206373">Nueva ventana</translation>
 <translation id="7340431621085453413">Visualización de <ph name="FULLSCREEN_ORIGIN" /> en pantalla completa.</translation>
 <translation id="7340650977506865820">El sitio está compartiendo la pantalla</translation>
+<translation id="7341834142292923918">Requiere acceso a este sitio</translation>
 <translation id="7345706641791090287">Confirma tu contraseña</translation>
 <translation id="7346909386216857016">Entendido</translation>
 <translation id="7347751611463936647">Para usar esta extensión, escribe "<ph name="EXTENSION_KEYWORD" />", luego TAB, luego tu comando o búsqueda.</translation>
@@ -4740,6 +4752,7 @@
 <translation id="8214962590150211830">Eliminar a esta persona</translation>
 <translation id="8217399928341212914">Seguir bloqueando las descargas automáticas de varios archivos</translation>
 <translation id="8223479393428528563">Para guardar estos archivos para su uso sin conexión, conéctate nuevamente, haz clic con el botón derecho en los archivos y selecciona la opción <ph name="OFFLINE_CHECKBOX_NAME" />.</translation>
+<translation id="8225753906568652947">Canjear tus ofertas</translation>
 <translation id="8226222018808695353">Prohibido</translation>
 <translation id="8226619461731305576">Cola</translation>
 <translation id="8226742006292257240">A continuación verás la contraseña TPM, generada al azar, que se le ha asignado a tu equipo:</translation>
@@ -4786,6 +4799,7 @@
 <translation id="8286036467436129157">Iniciar sesión</translation>
 <translation id="8286963743045814739">Puedes navegar de forma privada con una ventana de incógnito</translation>
 <translation id="82871696630048499">Se volvió a cargar la página web porque se quedó sin memoria.</translation>
+<translation id="8288032458496410887">Desinstalar <ph name="APP" />…</translation>
 <translation id="8291967909914612644">País del proveedor de origen</translation>
 <translation id="8294431847097064396">Fuente</translation>
 <translation id="8297006494302853456">Débil</translation>
@@ -4848,6 +4862,7 @@
 <translation id="8413385045638830869">Preguntar primero (recomendado)</translation>
 <translation id="8418445294933751433">Mo&amp;strar como pestaña</translation>
 <translation id="8419098111404128271">Resultados de la búsqueda para "<ph name="SEARCH_TEXT" />"</translation>
+<translation id="8419368276599091549">Te damos la bienvenida a tu <ph name="DEVICE_TYPE" /></translation>
 <translation id="8420060421540670057">Mostrar archivos de Documentos de Google</translation>
 <translation id="8424039430705546751">abajo</translation>
 <translation id="8425213833346101688">Cambiar</translation>
@@ -4974,6 +4989,7 @@
 <translation id="8620765578342452535">Configurar las conexiones de red</translation>
 <translation id="8624205858755890468">Permite que el Asistente te muestre información relacionada, apps y acciones.</translation>
 <translation id="862542460444371744">&amp;Extensiones</translation>
+<translation id="8626219642120025691">Temporizador listo</translation>
 <translation id="8627151598708688654">Seleccionar la fuente</translation>
 <translation id="862727964348362408">En suspensión</translation>
 <translation id="862750493060684461">Caché CSS</translation>
@@ -5094,6 +5110,7 @@
 <translation id="8775404590947523323">Los cambios se guardan automáticamente.<ph name="BREAKS" />Para mantener una copia de la imagen original, desactiva la opción Sobrescribir en el original.</translation>
 <translation id="8777628254805677039">contraseña de raíz</translation>
 <translation id="8780443667474968681">Se desactivó la búsqueda por voz.</translation>
+<translation id="878068003854005405">Comencemos. Coloca tu dedo en el sensor.</translation>
 <translation id="878069093594050299">Este certificado se verificó para los siguientes usos:</translation>
 <translation id="8781980678064919987">Apagar cuando se cierra la tapa</translation>
 <translation id="8782565991310229362">Se canceló el inicio de la aplicación del kiosco.</translation>
@@ -5134,7 +5151,6 @@
 <translation id="8834164572807951958">Los miembros de "<ph name="DESTINATION_NAME" />" tendrán acceso a la copia de estos elementos.</translation>
 <translation id="8838770651474809439">Hamburguesa</translation>
 <translation id="883911313571074303">Escribir en la imagen</translation>
-<translation id="8844690305858050198">Se quitó el software dañino. Para volver a activar las extensiones, visita la sección &lt;a href="chrome://extensions"&gt;Extensiones&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Obtener ayuda</translation>
 <translation id="8846141544112579928">Buscando teclado…</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5271,6 +5287,7 @@
 <translation id="9050666287014529139">Frase de contraseña</translation>
 <translation id="9052208328806230490">Registraste tus impresoras con <ph name="CLOUD_PRINT_NAME" /> utilizando la cuenta <ph name="EMAIL" /></translation>
 <translation id="9052404922357793350">Seguir bloqueando</translation>
+<translation id="9053091947372579468">Tu dispositivo incluye una licencia de Chrome, pero tu nombre de usuario no está asociado a una consola del administrador. Para continuar con la inscripción, crea una cuenta de consola del administrador. Nota: Si eliges usar tu propio dominio para crear una nueva cuenta de consola del administrador, también deberás completar la verificación del dominio después del registro. https://g.co/ChromeEnterpriseAccount</translation>
 <translation id="9053893665344928494">Recordar mi selección</translation>
 <translation id="9055636786322918818">Aplica la encriptación RC4. Esta opción es riesgosa, ya que los cifrados RC4 son inseguros.</translation>
 <translation id="9056034633062863292">Actualizando la Chromebox</translation>
@@ -5374,6 +5391,7 @@
 <translation id="9218430445555521422">Establecer como predeterminado</translation>
 <translation id="9219103736887031265">Imágenes</translation>
 <translation id="9220525904950070496">Eliminar cuenta</translation>
+<translation id="9220820413868316583">Levanta el dedo y vuelve a intentarlo.</translation>
 <translation id="923467487918828349">Mostrar todo</translation>
 <translation id="928985544179707652">Extensiones:</translation>
 <translation id="930268624053534560">Marcas de tiempo detalladas</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 740d807b..c711e56 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -977,7 +977,7 @@
 <translation id="2470702053775288986">Extensiones no admitidas inhabilitadas</translation>
 <translation id="2473195200299095979">Traducir esta página</translation>
 <translation id="2475982808118771221">Se ha producido un error.</translation>
-<translation id="2476578072172137802">Configuración del sitio</translation>
+<translation id="2476578072172137802">Configuración del sitio web</translation>
 <translation id="2478176599153288112">Permisos de archivos multimedia para "<ph name="EXTENSION" />"</translation>
 <translation id="247949520305900375">Compartir audio</translation>
 <translation id="2480868415629598489">Modificar los datos que se copian y se pegan</translation>
@@ -2179,7 +2179,6 @@
 <translation id="4296575653627536209">Añadir usuario supervisado</translation>
 <translation id="4297219207642690536">Reiniciar y restablecer</translation>
 <translation id="4297322094678649474">Cambiar idiomas</translation>
-<translation id="4300305918532693141">Para cambiar esta opción, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">largo (2 s)</translation>
 <translation id="4306119971288449206">Las aplicaciones deben incluir el encabezado content-type "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K activos)</translation>
@@ -2659,7 +2658,7 @@
 <translation id="5075131525758602494">Introducir el PIN de la tarjeta SIM</translation>
 <translation id="5078490485380754244">Olvidar dispositivo</translation>
 <translation id="5078638979202084724">Añadir todas las pestañas a marcadores</translation>
-<translation id="5079950360618752063">Utiliza la contraseña sugerida</translation>
+<translation id="5079950360618752063">Utilizar contraseña sugerida</translation>
 <translation id="5084230410268011727">Permitir que los sitios web usen los sensores de luz y movimiento</translation>
 <translation id="5085162214018721575">Buscando actualizaciones...</translation>
 <translation id="5086082738160935172">Dispositivos de interfaz humana (HID)</translation>
@@ -2880,7 +2879,7 @@
 <translation id="5398772614898833570">Anuncios bloqueados</translation>
 <translation id="5402815541704507626">Descargar la actualización con datos móviles</translation>
 <translation id="540296380408672091">Bloquear siempre cookies en <ph name="HOST" /></translation>
-<translation id="5405146885510277940">Recuperar configuración</translation>
+<translation id="5405146885510277940">Restablecer configuración</translation>
 <translation id="5408750356094797285">Zoom: <ph name="PERCENT" /></translation>
 <translation id="5409029099497331039">Sorpréndeme</translation>
 <translation id="5411472733320185105">No utilizar la configuración de proxy para estos hosts y dominios:</translation>
@@ -5149,7 +5148,6 @@
 <translation id="8834164572807951958">Los miembros de "<ph name="DESTINATION_NAME" />" obtendrán acceso a la copia de estos elementos.</translation>
 <translation id="8838770651474809439">Hamburguesa</translation>
 <translation id="883911313571074303">Anotar imagen</translation>
-<translation id="8844690305858050198">Listo. Se ha eliminado el software malicioso. Para volver a activar las extensiones, accede a &lt;a href="chrome://extensions"&gt;Extensiones&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Obtener ayuda</translation>
 <translation id="8846141544112579928">Buscando teclado...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index a3d2e5c..4f9376d 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Jälgitava kasutaja lisamine</translation>
 <translation id="4297219207642690536">Taaskäivita ja lähtesta</translation>
 <translation id="4297322094678649474">Keelte vahetamine</translation>
-<translation id="4300305918532693141">Selle seade muutmiseks tuleb teil <ph name="BEGIN_LINK" />sünkroonimine lähtestada<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">pikk (2 s)</translation>
 <translation id="4306119971288449206">Rakendusi tuleb esitada sisu tüübiga „<ph name="CONTENT_TYPE" />”</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />kB (<ph name="NUM_KILOBYTES_LIVE" />kB reaalajas)</translation>
@@ -5155,7 +5154,6 @@
 <translation id="8834164572807951958">Sihtkoha „<ph name="DESTINATION_NAME" />” liikmed saavad juurdepääsu nende üksuste koopiatele.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Lisa kujutisele märkused</translation>
-<translation id="8844690305858050198">Valmis! Ohtlik tarkvara eemaldati. Laienduste uuesti sisselülitamiseks avage leht &lt;a href="chrome://extensions"&gt;Laiendused.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Otsige abi</translation>
 <translation id="8846141544112579928">Klaviatuuri otsimine ...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index a95b7669..797be04 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -2178,7 +2178,6 @@
 <translation id="4296575653627536209">افزودن کاربر تحت نظارت</translation>
 <translation id="4297219207642690536">بازراه‌اندازی و بازنشانی</translation>
 <translation id="4297322094678649474">تغییر زبان‌ها</translation>
-<translation id="4300305918532693141">برای تغییر این تنظیم، <ph name="BEGIN_LINK" />همگام‌سازی را بازنشانی کنید<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">طولانی (۲ ثانیه)</translation>
 <translation id="4306119971288449206">نوع محتوای برنامه باید «<ph name="CONTENT_TYPE" />» باشد</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> کیلوبایت (<ph name="NUM_KILOBYTES_LIVE" />کیلوبایت زنده)</translation>
@@ -5150,7 +5149,6 @@
 <translation id="8834164572807951958">اعضای «<ph name="DESTINATION_NAME" />»، برای کپی کردن این موارد، دسترسی پیدا می‌کنند.</translation>
 <translation id="8838770651474809439">همبرگر</translation>
 <translation id="883911313571074303">حاشیه‌نویسی تصویر</translation>
-<translation id="8844690305858050198">‏تمام شد! نرم‌افزار مضر پاک شد. برای اینکه دوباره افزونه‌ها را روشن کنید، به &lt;a href="chrome://extensions"&gt;افزونه‌ها&lt;/a&gt; بروید.</translation>
 <translation id="8845001906332463065">دریافت راهنمایی</translation>
 <translation id="8846141544112579928">در حال جستجو برای صفحه‌کلید...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 5e27de01..6e7834d 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -2180,7 +2180,6 @@
 <translation id="4296575653627536209">Lisää valvottu käyttäjä</translation>
 <translation id="4297219207642690536">Käynnistä uudelleen ja palauta</translation>
 <translation id="4297322094678649474">Vaihda kieltä</translation>
-<translation id="4300305918532693141">Jos haluat muuttaa tätä asetusta, <ph name="BEGIN_LINK" />nollaa synkronointi<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">pitkä (2 s)</translation>
 <translation id="4306119971288449206">Sovellusten näyttämiseen tulee käyttää sisältötyyppiä <ph name="CONTENT_TYPE" />.</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kt (<ph name="NUM_KILOBYTES_LIVE" /> kt live)</translation>
@@ -5153,7 +5152,6 @@
 <translation id="8834164572807951958">Paikan <ph name="DESTINATION_NAME" /> jäsenet saavat käyttöoikeuden näiden kohteiden kopioon.</translation>
 <translation id="8838770651474809439">Hampurilainen</translation>
 <translation id="883911313571074303">Lisää kuvaan muistiinpano</translation>
-<translation id="8844690305858050198">Valmista. Haittaohjelmat poistettiin. Voit ottaa laajennukset taas käyttöön avaamalla &lt;a href="chrome://extensions"&gt;Laajennukset&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Hae ohjeita</translation>
 <translation id="8846141544112579928">Näppäimistöä etsitään…</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 9a50fc3..c5d7ef2 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Magdagdag ng Pinapangasiwaang User</translation>
 <translation id="4297219207642690536">I-restart at i-reset</translation>
 <translation id="4297322094678649474">Palitan ang Mga Wika</translation>
-<translation id="4300305918532693141">Upang baguhin ang setting na ito, <ph name="BEGIN_LINK" />i-reset ang pag-sync<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">mahaba (2s)</translation>
 <translation id="4306119971288449206">Dapat maihatid ang mga app gamit ang uri ng content na "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K live)</translation>
@@ -2752,7 +2751,7 @@
 <translation id="5227808808023563348">Hanapin ang nakaraang teksto</translation>
 <translation id="5228076606934445476">Nagkaroon ng problema sa device. Upang makabawi mula sa error na ito kakailanganin mong i-reboot ang device at subukang muli.</translation>
 <translation id="5229189185761556138">Pamahalaan ang mga paraan ng pag-input</translation>
-<translation id="5230516054153933099">Power window</translation>
+<translation id="5230516054153933099">Window</translation>
 <translation id="5233019165164992427">NaCl debug port</translation>
 <translation id="5233231016133573565">ID ng proseso</translation>
 <translation id="5233638681132016545">Bagong tab</translation>
@@ -5155,7 +5154,6 @@
 <translation id="8834164572807951958">Magkakaroon ng access ang mga miyembro ng '<ph name="DESTINATION_NAME" />' sa mga kopya ng mga item na ito.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">I-annotate ang larawan</translation>
-<translation id="8844690305858050198">Tapos na! Naalis na ang mapanganib na software. Para i-on muli ang mga extension, bisitahin ang &lt;a href="chrome://extensions"&gt;Mga Extension.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Humingi ng tulong</translation>
 <translation id="8846141544112579928">Naghahanap ng keyboard...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 1a12999..e7bdd61 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Ajouter un utilisateur supervisé</translation>
 <translation id="4297219207642690536">Redémarrer et réinitialiser</translation>
 <translation id="4297322094678649474">Modifier les langues</translation>
-<translation id="4300305918532693141">Pour modifier ce paramètre, <ph name="BEGIN_LINK" />réinitialisez la synchronisation<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">long (2 s)</translation>
 <translation id="4306119971288449206">Les applications doivent être diffusées avec le type de contenu <ph name="CONTENT_TYPE" /></translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> Ko (<ph name="NUM_KILOBYTES_LIVE" /> Ko effectifs)</translation>
@@ -5155,7 +5154,6 @@
 <translation id="8834164572807951958">Les membres de "<ph name="DESTINATION_NAME" />" auront accès à la copie de ces éléments.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Annoter l'image</translation>
-<translation id="8844690305858050198">Le logiciel malveillant a été supprimé. Pour réactiver les extensions, rendez-vous sur la page &lt;a href="chrome://extensions"&gt;Extensions&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Obtenir de l'aide</translation>
 <translation id="8846141544112579928">Recherche du clavier en cours…</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index dcc7b22..48c132a 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1760,7 +1760,7 @@
 <translation id="3664511988987167893">એક્સ્ટેંશન આઇકન</translation>
 <translation id="3665589677786828986">Chrome ને જાણ થઈ છે કે તમારી કેટલીક સેટિંગ્સ બીજા પ્રોગ્રામ દ્વારા દૂષિત કરવામાં આવેલી અને તેમને તેમના મૂળ ડિફોલ્ટ્સ પર ફરીથી સેટ કરી છે.</translation>
 <translation id="3668570675727296296">ભાષા સેટિંગ્સ</translation>
-<translation id="3668801437375206837">બ્લૂટૂથ સમસ્યાઓ અંગે વધુ સારી તપાસ કરવા માટે, Googleનાં કર્મચારીઓ તેમના પ્રતિસાદમાં વધારાના બ્લૂટૂથ લૉગનો સમાવેશ કરી શકે છે. જ્યારે આ વિકલ્પને ચેક કરેલ હોય, ત્યારે તમારા રિપોર્ટમાં તમારા વર્તમાન સત્રમાંથી btsnoop અને HCI લૉગનો સમાવેશ થશે અને તેમાંથી શક્ય હોય તેટલાં PII ને દૂર કરવામાં આવશે. આ લૉગ સુધીના ઍક્સેસને Listnrમાં Chrome OS પ્રોડક્ટ ગૃપના મેનેજરો સુધી જ નિયંત્રિત રાખવામાં આવશે. એ બધા લૉગ 90 દિવસ બાદ કાઢી નાખવામાં આવશે.</translation>
+<translation id="3668801437375206837">બ્લૂટૂથ સમસ્યાઓ અંગે વધુ સારી તપાસ કરવા માટે, Googleનાં કર્મચારીઓ તેમના પ્રતિસાદમાં વધારાના બ્લૂટૂથ લૉગનો સમાવેશ કરી શકે છે. જ્યારે આ વિકલ્પને ચેક કરેલ હોય, ત્યારે તમારા રિપોર્ટમાં તમારા વર્તમાન સત્રમાંથી btsnoop અને HCI લૉગનો સમાવેશ થશે અને તેમાંથી શક્ય હોય તેટલાં PIIને દૂર કરવામાં આવશે. આ લૉગ સુધીના ઍક્સેસને Listnrમાં Chrome OS પ્રોડક્ટ જૂથના મેનેજરો સુધી જ નિયંત્રિત રાખવામાં આવશે. એ બધા લૉગ 90 દિવસ બાદ કાઢી નાખવામાં આવશે.</translation>
 <translation id="3668823961463113931">હેન્ડલર્સ</translation>
 <translation id="3670229581627177274">Bluetooth ચાલુ કરો</translation>
 <translation id="3672681487849735243">એક ફેક્ટરી ભૂલ શોધવામાં આવી છે</translation>
@@ -2042,7 +2042,7 @@
 <translation id="407520071244661467">સ્કેલ</translation>
 <translation id="4075639477629295004"><ph name="FILE_NAME" />ને કાસ્ટ કરવામાં અસમર્થ.</translation>
 <translation id="4077917118009885966">આ સાઇટ પર જાહેરાતો અવરોધિત કરી</translation>
-<translation id="4079799245038595838">તમારા ફોન પર એક નોટિફિકેશન મોકલવામાં આવેલ. તે તમે જ છો તે કન્ફર્મ કરવા માટે સંકેતોને અનુસરો.</translation>
+<translation id="4079799245038595838">તમારા ફોન પર એક નોટિફિકેશન મોકલવામાં આવ્યું હતું. તે તમે જ છો તે કન્ફર્મ કરવા માટે સંકેતોને અનુસરો.</translation>
 <translation id="4081242589061676262">ફાઇલ કાસ્ટ કરવામાં અસમર્થ.</translation>
 <translation id="4084682180776658562">બુકમાર્ક</translation>
 <translation id="4084835346725913160"><ph name="TAB_NAME" /> બંધ કરો</translation>
@@ -2171,7 +2171,6 @@
 <translation id="4296575653627536209">નિરીક્ષિત વપરાશકર્તા ઉમેરો</translation>
 <translation id="4297219207642690536">ફરી શરૂ કરો અને રીસેટ કરો</translation>
 <translation id="4297322094678649474">ભાષાઓ બદલો</translation>
-<translation id="4300305918532693141">આ સેટિંગ બદલવા માટે, <ph name="BEGIN_LINK" />સમન્વયનને ફરીથી સેટ કરો<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">લાંબો વિલંબ (2 સે)</translation>
 <translation id="4306119971288449206">ઍપ "<ph name="CONTENT_TYPE" />" કન્ટેન્ટ-પ્રકાર સાથે ઉપલબ્ધ કરાવવી જોઈએ</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K લાઇવ)</translation>
@@ -2738,7 +2737,7 @@
 <translation id="5227808808023563348">પાછલો ટેક્સ્ટ શોધો</translation>
 <translation id="5228076606934445476">ઉપકરણમાં કંઈક ખોટું થયું છે. આ ભૂલથી પુનઃપ્રાપ્ત કરવા માટે તમારે ઉપકરણને રીબૂટ કરી અને ફરી પ્રયાસ કરવાની જરૂર પડશે.</translation>
 <translation id="5229189185761556138">ઇનપુટ પદ્ધતિઓને સંચાલિત કરો</translation>
-<translation id="5230516054153933099">પાવર વિંડો</translation>
+<translation id="5230516054153933099">વિંડો</translation>
 <translation id="5233019165164992427">NaCl ડીબગ પોર્ટ</translation>
 <translation id="5233231016133573565">પ્રક્રિયા ID</translation>
 <translation id="5233638681132016545">નવું ટૅબ</translation>
@@ -5127,7 +5126,6 @@
 <translation id="8834164572807951958">'<ph name="DESTINATION_NAME" />'ના સભ્યો આ આઇટમની કૉપિનો ઍક્સેસ મેળવશે.</translation>
 <translation id="8838770651474809439">હૅમ્બર્ગર</translation>
 <translation id="883911313571074303">છબીમાં ટીકા કરો</translation>
-<translation id="8844690305858050198">પૂર્ણ થયું! નુકસાનકારક સૉફ્ટવેર કાઢી નાખ્યું. એક્સ્ટેન્શન ફરી ચાલુ કરવા માટે, &lt;a href="chrome://extensions"&gt;એક્સ્ટેન્શન&lt;/a&gt;ની મુલાકાત લો.</translation>
 <translation id="8845001906332463065">સહાય મેળવો</translation>
 <translation id="8846141544112579928">કીબોર્ડ માટે શોધ કરી રહ્યું છે...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5151,7 +5149,7 @@
 <translation id="8879284080359814990">ટૅબ તરીકે &amp;બતાવો</translation>
 <translation id="8883847527783433352">બીજા એકાઉન્ટ સાથે સિંક કરો</translation>
 <translation id="8885197664446363138">Smart Lock અનુપલબ્ધ છે</translation>
-<translation id="88870264962436283"><ph name="APP_NAME" />ની સ્પર્શ IDનો ઉપયોગ કરો</translation>
+<translation id="88870264962436283"><ph name="APP_NAME" />ના ટચ IDનો ઉપયોગ કરો</translation>
 <translation id="8888432776533519951">રંગ:</translation>
 <translation id="8890516388109605451">સ્રોતો</translation>
 <translation id="8892168913673237979">બધું સેટ છે!</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 506ab760..72088961 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1788,7 +1788,7 @@
 <translation id="3691231116639905343">कीबोर्ड ऐप्लिकेशन</translation>
 <translation id="3691267899302886494"><ph name="HOST" /> आपकी स्क्रीन शेयर करना चाहता है</translation>
 <translation id="3693415264595406141">पासवर्ड:</translation>
-<translation id="3694027410380121301">पिछला टैब को चुनें</translation>
+<translation id="3694027410380121301">'पिछला टैब' चुनें</translation>
 <translation id="369489984217678710">पासवर्ड और दूसरे साइन-इन डेटा</translation>
 <translation id="3699624789011381381">ईमेल पता</translation>
 <translation id="3699920817649120894">सिंक करना और मनमुताबिक बनाना बंद करें?</translation>
@@ -2181,7 +2181,6 @@
 <translation id="4296575653627536209">'निगरानी में रखा गया उपयोगकर्ता' जोड़ें</translation>
 <translation id="4297219207642690536">रीस्टार्ट करें और रीसेट करें</translation>
 <translation id="4297322094678649474">भाषाएं बदलें</translation>
-<translation id="4300305918532693141">यह सेटिंग बदलने के लिए, <ph name="BEGIN_LINK" />सिंक रीसेट करें<ph name="END_LINK" /></translation>
 <translation id="4305227814872083840">लंबा (2 सेकंड)</translation>
 <translation id="4306119971288449206">एप्लिकेशन को सामग्री-प्रकार "<ph name="CONTENT_TYPE" />" के साथ दिया जाना चाहिए</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K लाइव)</translation>
@@ -2987,7 +2986,7 @@
 <translation id="5534520101572674276">आकार की गणना कर रहा है</translation>
 <translation id="5535941515421698170">इस डिवाइस से अपना मौजूदा डेटा भी निकालें</translation>
 <translation id="5537725057119320332">कास्‍ट करें</translation>
-<translation id="5539221284352502426">आपने जो पासवर्ड डाला है उसे सर्वर ने अस्वीकार कर दिया है. संभावित कारण ये हो सकते हैं: पासवर्ड बहुत छोटा है. पासवर्ड में संख्याएं या चिह्न होने चाहिए. पासवर्ड, पिछले पासवर्ड से अलग होना चाहिए.</translation>
+<translation id="5539221284352502426">आपने जो पासवर्ड डाला है, उसे सर्वर ने अस्वीकार कर दिया है. संभावित कारण ये हो सकते हैं: पासवर्ड बहुत छोटा है. पासवर्ड में संख्याएं या चिह्न होने चाहिए. पासवर्ड, पिछले पासवर्ड से अलग होना चाहिए.</translation>
 <translation id="5541687815721799001">ऐप्लिकेशन का उपयोग करें</translation>
 <translation id="5542132724887566711">प्रोफ़ाइल</translation>
 <translation id="5542750926112347543"><ph name="DOMAIN" /> की कुकी ब्लॉक की गई हैं</translation>
@@ -3296,7 +3295,7 @@
 <translation id="6011193465932186973">फ़िंगरप्रिंट</translation>
 <translation id="6011449291337289699">साइट डेटा साफ़ करें</translation>
 <translation id="6015796118275082299">वर्ष</translation>
-<translation id="6016551720757758985">पिछले वर्ज़न पर वापस लौटने के साथ ही पावरवॉश की पुष्‍टि करें</translation>
+<translation id="6016551720757758985">पिछले वर्शन पर वापस लौटने के साथ ही पावरवॉश की पुष्‍टि करें</translation>
 <translation id="6016972670657536680">भाषा और कीबोर्ड बटन चुनें. इस समय चुनी गई भाषा <ph name="LANGUAGE" /> है.</translation>
 <translation id="6019169947004469866">काटें</translation>
 <translation id="6020431688553761150">सर्वर ने इस स्रोत को एक्सेस करने के लिए आपको प्राधिकृत नहीं किया था.</translation>
@@ -4184,7 +4183,7 @@
 <translation id="7364796246159120393">फ़ाइल चुनें</translation>
 <translation id="7366415735885268578">साइट जोड़ें</translation>
 <translation id="7366909168761621528">ब्राउज़िंग डेटा</translation>
-<translation id="7371006317849674875">प्रारंभ समय</translation>
+<translation id="7371006317849674875">शुरू करने का समय</translation>
 <translation id="737439367876257440">Google को सिस्टम और इस्तेमाल से जुड़ी जानकारी भेजकर Chrome और उसकी सुरक्षा को बेहतर बनाएं</translation>
 <translation id="7374989181012106167">आपका Chromebook आपके फ़ोन के साथ और भी बेहतर काम करता है. <ph name="LINK_BEGIN" />ज़्यादा जानें.<ph name="LINK_END" /></translation>
 <translation id="7375053625150546623">EAP</translation>
@@ -4490,7 +4489,7 @@
 <translation id="7829298379596169484">ऑडियो इनपुट ऐक्सेस हो रहा है</translation>
 <translation id="7831491651892296503">नेटवर्क कॉन्फ़िगर करने में गड़बड़ी</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
-<translation id="7832084384634357321">समाप्ति समय</translation>
+<translation id="7832084384634357321">खत्म होने का समय</translation>
 <translation id="7832327313660264358">Google में सिंक किए गए डेटा और आपके इस्तेमाल किए जा रहे फ़ीचर में कोई बदलाव नहीं होगा</translation>
 <translation id="7833720883933317473">सहेजे गए कस्टम शब्द यहां दिखाई देंगे</translation>
 <translation id="7837307963048806839">•  $1</translation>
@@ -5153,7 +5152,6 @@
 <translation id="8834164572807951958">'<ph name="DESTINATION_NAME" />' के सदस्यों को इन आइटम की कॉपी का एक्सेस मिल जाएगा.</translation>
 <translation id="8838770651474809439">हैमबर्गर</translation>
 <translation id="883911313571074303">व्याख्या चित्र</translation>
-<translation id="8844690305858050198">हो गया! नुकसान पहुंचाने वाला सॉफ़्टवेयर हटा दिया गया है. एक्सटेंशन वापस चालू करने के लिए, &lt;a href="chrome://extensions"&gt;एक्सटेंशन&lt;/a&gt; पर जाएं.</translation>
 <translation id="8845001906332463065">सहायता प्राप्त करें</translation>
 <translation id="8846141544112579928">कीबोर्ड खोजा जा रहा है...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index f6bc060..7b02bfa3 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Dodaj nadziranog korisnika</translation>
 <translation id="4297219207642690536">Ponovo pokreni i vrati na prethodno</translation>
 <translation id="4297322094678649474">Promijeni jezike</translation>
-<translation id="4300305918532693141">Da biste promijenili tu postavku, <ph name="BEGIN_LINK" />poništite sinkronizaciju<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">duga (2 s)</translation>
 <translation id="4306119971288449206">Aplikacije moraju biti poslužene s vrstom sadržaja "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K izravno)</translation>
@@ -5155,7 +5154,6 @@
 <translation id="8834164572807951958">Članovi grupe "<ph name="DESTINATION_NAME" />" dobit će pristup kopiji tih stavki.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Dodaj napomenu slici</translation>
-<translation id="8844690305858050198">Gotovo! Štetni je softver uklonjen. Za ponovno uključivanje proširenja otvorite &lt;a href="chrome://extensions"&gt;Proširenja&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Zatražite pomoć</translation>
 <translation id="8846141544112579928">Traženje tipkovnice...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 509be36..4ab52fa 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Felügyelt felhasználók hozzáadása</translation>
 <translation id="4297219207642690536">Újraindítás és visszaállítás</translation>
 <translation id="4297322094678649474">Nyelvek módosítása</translation>
-<translation id="4300305918532693141">A beállítás módosításához <ph name="BEGIN_LINK" />állítsa alaphelyzetbe a szinkronizálást<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">hosszú (2 mp)</translation>
 <translation id="4306119971288449206">Az alkalmazásokat „<ph name="CONTENT_TYPE" />” tartalomtípussal kell ellátni</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K élő)</translation>
@@ -5156,7 +5155,6 @@
 <translation id="8834164572807951958">A(z) „<ph name="DESTINATION_NAME" />” tagjai hozzá fognak férni ezen elemek másolatához.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Megjegyzés fűzése a képhez</translation>
-<translation id="8844690305858050198">Kész! Eltávolítottuk a kártékony szoftvert. A bővítmények visszakapcsolásához lépjen a &lt;a href="chrome://extensions"&gt;Bővítmények&lt;/a&gt; oldalra.</translation>
 <translation id="8845001906332463065">Súgó</translation>
 <translation id="8846141544112579928">Billentyűzet keresése…</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 2d39759..f743c89a 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -495,7 +495,7 @@
 <translation id="1711973684025117106">Gagal membuat file zip, kesalahan tidak terduga: $1</translation>
 <translation id="1712349894969001173">Dapatkan sandi ini di iPhone</translation>
 <translation id="1712552549805331520"><ph name="URL" /> ingin menyimpan data di komputer lokal Anda secara permanen</translation>
-<translation id="1718835860248848330">Jam terakhir</translation>
+<translation id="1718835860248848330">1 jam terakhir</translation>
 <translation id="1719312230114180055">Catatan: Sidik jari mungkin kurang aman dibandingkan dengan PIN atau sandi yang kuat.</translation>
 <translation id="1720318856472900922">Autentikasi Server TLS WWW</translation>
 <translation id="1721937473331968728">Anda dapat menambahkan printer klasik yang terhubung ke komputer Anda ke <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Tambahkan Pengguna yang Dilindungi</translation>
 <translation id="4297219207642690536">Mulai ulang dan setel ulang</translation>
 <translation id="4297322094678649474">Ubah Bahasa</translation>
-<translation id="4300305918532693141">Untuk mengubah setelan ini, <ph name="BEGIN_LINK" />setel ulang sinkronisasi<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">lama (2 dtk)</translation>
 <translation id="4306119971288449206">Aplikasi harus disediakan dengan jenis konten "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K langsung)</translation>
@@ -5154,7 +5153,6 @@
 <translation id="8834164572807951958">Anggota '<ph name="DESTINATION_NAME" />' akan mendapatkan akses ke salinan item berikut.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Gambar anotasi</translation>
-<translation id="8844690305858050198">Selesai! Software berbahaya telah dihapus. Untuk mengaktifkan kembali ekstensi, buka &lt;a href="chrome://extensions"&gt;Ekstensi.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Dapatkan bantuan</translation>
 <translation id="8846141544112579928">Mencari keyboard...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 22879bd..60c14f66 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -2179,7 +2179,6 @@
 <translation id="4296575653627536209">Aggiungi utente supervisionato</translation>
 <translation id="4297219207642690536">Riavvia e reimposta</translation>
 <translation id="4297322094678649474">Cambia le lingue</translation>
-<translation id="4300305918532693141">Per modificare questa impostazione, <ph name="BEGIN_LINK" />reimposta la sincronizzazione<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">lungo (2 s)</translation>
 <translation id="4306119971288449206">Le app devono essere installate con il tipo di contenuto "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB effettivi)</translation>
@@ -5148,7 +5147,6 @@
 <translation id="8834164572807951958">I membri di "<ph name="DESTINATION_NAME" />" avranno accesso alla copia di questi elementi.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Annota immagine</translation>
-<translation id="8844690305858050198">Fatto! Software dannoso rimosso. Per riattivare le estensioni, visita la pagina &lt;a href="chrome://extensions"&gt;Estensioni.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Richiedi assistenza</translation>
 <translation id="8846141544112579928">Ricerca tastiera in corso...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index b1901e2..7413521 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -2179,7 +2179,6 @@
 <translation id="4296575653627536209">הוסף משתמש בפיקוח</translation>
 <translation id="4297219207642690536">הפעלה מחדש ואתחול</translation>
 <translation id="4297322094678649474">החלפת שפות</translation>
-<translation id="4300305918532693141"><ph name="BEGIN_LINK" />אפס את הסנכרון<ph name="END_LINK" /> כדי לשנות את ההגדרה הזו.</translation>
 <translation id="4305227814872083840">ארוכה (שתי שניות)</translation>
 <translation id="4306119971288449206">הפעלת אפליקציות חייבת להתבצע עם סוג תוכן "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243">‏‎<ph name="NUM_KILOBYTES" />K ‏‎(<ph name="NUM_KILOBYTES_LIVE" />K בשימוש)‎‎</translation>
@@ -2749,7 +2748,7 @@
 <translation id="5227808808023563348">חפש את הטקסט הקודם</translation>
 <translation id="5228076606934445476">משהו השתבש במכשיר.  כדי להתאושש משגיאה זו יהיה עליך לאתחל את המכשיר ולנסות שוב.</translation>
 <translation id="5229189185761556138">נהל שיטות קלט</translation>
-<translation id="5230516054153933099">חלון חשמלי</translation>
+<translation id="5230516054153933099">חלון</translation>
 <translation id="5233019165164992427">‏יציאת ניפוי באגים של NaCl</translation>
 <translation id="5233231016133573565">זיהוי תהליך</translation>
 <translation id="5233638681132016545">כרטיסייה חדשה</translation>
@@ -5149,7 +5148,6 @@
 <translation id="8834164572807951958">חברים באחסון השיתופי '<ph name="DESTINATION_NAME" />' יקבלו גישה ויוכלו להעתיק את הפריטים האלה.</translation>
 <translation id="8838770651474809439">המבורגר</translation>
 <translation id="883911313571074303">רשום הערה לתמונה</translation>
-<translation id="8844690305858050198">‏סיימנו! התוכנות המזיקות הוסרו. כדי להפעיל מחדש את התוספים, צריך לעבור אל &lt;a href="chrome://extensions"&gt;תוספים.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">קבל עזרה</translation>
 <translation id="8846141544112579928">מחפש מקלדת...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 63f45af..e647f9c 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">監視対象ユーザーを追加</translation>
 <translation id="4297219207642690536">再起動してリセット</translation>
 <translation id="4297322094678649474">言語を変更</translation>
-<translation id="4300305918532693141">この設定を変更するには、<ph name="BEGIN_LINK" />同期をリセット<ph name="END_LINK" />します。</translation>
 <translation id="4305227814872083840">長い(2 秒)</translation>
 <translation id="4306119971288449206">アプリはコンテンツタイプ「<ph name="CONTENT_TYPE" />」で配信される必要があります</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K(<ph name="NUM_KILOBYTES_LIVE" /> K ライブ)</translation>
@@ -5155,7 +5154,6 @@
 <translation id="8834164572807951958">「<ph name="DESTINATION_NAME" />」のメンバーが、これらのアイテムのコピーにアクセスできるようになります。</translation>
 <translation id="8838770651474809439">ハンバーガー</translation>
 <translation id="883911313571074303">画像に注釈を付ける</translation>
-<translation id="8844690305858050198">有害なソフトウェアが削除されました。拡張機能をもう一度使用するには、&lt;a href="chrome://extensions"&gt;拡張機能&lt;/a&gt;のページにアクセスしてください。</translation>
 <translation id="8845001906332463065">ヘルプ</translation>
 <translation id="8846141544112579928">キーボードを探しています...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 598a4e24..c1c1f44a 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -2179,7 +2179,6 @@
 <translation id="4296575653627536209">ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿ</translation>
 <translation id="4297219207642690536">ಮರುಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಮರುಹೊಂದಿಸಿ</translation>
 <translation id="4297322094678649474">ಭಾಷೆಗಳನ್ನು ಬದಲಾಯಿಸಿ</translation>
-<translation id="4300305918532693141">ಈ ಸೆಟ್ಟಿಂಗ್ ಬದಲಾಯಿಸಲು, <ph name="BEGIN_LINK" />ಸಿಂಕ್ ಮರುಹೊಂದಿಸಿ<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">ದೀರ್ಘ (2s)</translation>
 <translation id="4306119971288449206">"<ph name="CONTENT_TYPE" />" ಪ್ರಕಾರದ ವಿಷಯದೊಂದಿಗೆ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಒದಗಿಸಬೇಕು</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K ಲೈವ್)</translation>
@@ -5145,7 +5144,6 @@
 <translation id="8834164572807951958">ಈ ಐಟಂಗಳನ್ನು ನಕಲಿಸಲು '<ph name="DESTINATION_NAME" />' ನ ಸದಸ್ಯರು ಪ್ರವೇಶವನ್ನು ಪಡೆದುಕೊಂಡಿರುತ್ತಾರೆ.</translation>
 <translation id="8838770651474809439">ಹ್ಯಾಂಬರ್ಗರ್</translation>
 <translation id="883911313571074303">ಚಿತ್ರವನ್ನು ಟಿಪ್ಪಣಿ ಮಾಡಿ</translation>
-<translation id="8844690305858050198">ಮುಗಿದಿದೆ! ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ. ವಿಸ್ತರಣೆಗಳನ್ನು ಪುನಃ ಆನ್ ಮಾಡಲು, &lt;a href="chrome://extensions"&gt;ವಿಸ್ತರಣೆಗಳು&lt;/a&gt; ಎಂಬಲ್ಲಿಗೆ ಭೇಟಿ ನೀಡಿ.</translation>
 <translation id="8845001906332463065">ಸಹಾಯ ಪಡೆಯಿರಿ</translation>
 <translation id="8846141544112579928">ಕೀಬೋರ್ಡ್‍ಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 0c99094c..1339887 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -2180,7 +2180,6 @@
 <translation id="4296575653627536209">관리 대상 사용자 추가</translation>
 <translation id="4297219207642690536">다시 시작 및 재설정</translation>
 <translation id="4297322094678649474">언어 변경</translation>
-<translation id="4300305918532693141">이 설정을 변경하려면 <ph name="BEGIN_LINK" />동기화를 재설정<ph name="END_LINK" />합니다.</translation>
 <translation id="4305227814872083840">길게(2초)</translation>
 <translation id="4306119971288449206">앱은 '<ph name="CONTENT_TYPE" />' 콘텐츠 유형으로 제공되어야 합니다</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K(<ph name="NUM_KILOBYTES_LIVE" />K 활성)</translation>
@@ -2225,7 +2224,7 @@
 <translation id="438503109373656455">말</translation>
 <translation id="4387004326333427325">인증서가 원격으로 거부됨</translation>
 <translation id="4389091756366370506">사용자 <ph name="VALUE" /></translation>
-<translation id="439266289085815679">네트워크 구성은 <ph name="USER_EMAIL" />님이 관리합니다.</translation>
+<translation id="439266289085815679">블루투스 구성은 <ph name="USER_EMAIL" />님이 관리합니다.</translation>
 <translation id="4394049700291259645">사용 중지</translation>
 <translation id="4400367121200150367">비밀번호를 저장하지 않는 사이트가 표시됩니다.</translation>
 <translation id="4400632832271803360">맨 윗 줄 키의 동작을 전환하려면 런처 키를 길게 누르세요.</translation>
@@ -4863,7 +4862,7 @@
 <translation id="8413385045638830869">우선 확인(권장)</translation>
 <translation id="8418445294933751433">탭으로 표시(&amp;S)</translation>
 <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />'에 대한 검색결과</translation>
-<translation id="8419368276599091549"><ph name="DEVICE_TYPE" /> 시작</translation>
+<translation id="8419368276599091549"><ph name="DEVICE_TYPE" /> 시작하기</translation>
 <translation id="8420060421540670057">Google 문서도구 파일 표시</translation>
 <translation id="8424039430705546751">아래</translation>
 <translation id="8425213833346101688">변경</translation>
@@ -5152,7 +5151,6 @@
 <translation id="8834164572807951958">'<ph name="DESTINATION_NAME" />' 멤버에게 이 항목의 사본에 액세스할 수 있는 권한이 부여됩니다.</translation>
 <translation id="8838770651474809439">햄버거</translation>
 <translation id="883911313571074303">이미지에 주석 달기</translation>
-<translation id="8844690305858050198">유해한 소프트웨어 삭제가 완료되었습니다. 확장 프로그램을 다시 사용 설정하려면 &lt;a href="chrome://extensions"&gt;확장 프로그램&lt;/a&gt;으로 이동하세요.</translation>
 <translation id="8845001906332463065">도움말 보기</translation>
 <translation id="8846141544112579928">키보드 검색 중...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5289,7 +5287,7 @@
 <translation id="9050666287014529139">암호</translation>
 <translation id="9052208328806230490"><ph name="EMAIL" /> 계정을 사용하여 프린터를 <ph name="CLOUD_PRINT_NAME" />에 등록했습니다.</translation>
 <translation id="9052404922357793350">차단 계속</translation>
-<translation id="9053091947372579468">기기에 Chrome 라이선스가 포함되어 있지만 사용자 이름이 관리 콘솔과 연결되어 있지 않습니다. 등록을 계속하려면 관리 콘솔 계정을 만드세요. 참고: 내 도메인을 사용해 새로운 관리 콘솔 계정을 만들려면 가입 후 도메인을 확인해야 합니다. https://g.co/ChromeEnterpriseAccount</translation>
+<translation id="9053091947372579468">기기에 Chrome 라이선스가 포함되어 있지만 사용자 이름이 관리 콘솔과 연결되어 있지 않습니다. 등록을 계속하려면 관리 콘솔 계정을 만드세요. 참고: 내 도메인을 사용해 새로운 관리 콘솔 계정을 만들려면 가입 후 도메인 확인 절차를 완료해야 합니다. https://g.co/ChromeEnterpriseAccount</translation>
 <translation id="9053893665344928494">내 선택 기억하기</translation>
 <translation id="9055636786322918818">RC4 암호화를 적용합니다. RC4 암호화는 안전하지 않으므로 이 옵션을 사용하면 보안 위험도가 높아집니다.</translation>
 <translation id="9056034633062863292">Chromebox 업데이트 중</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 8fc261b..62d819c 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Pridėti prižiūrimą naudotoją</translation>
 <translation id="4297219207642690536">Paleisti ir nustatyti iš naujo</translation>
 <translation id="4297322094678649474">Keisti kalbas</translation>
-<translation id="4300305918532693141">Kad pakeistumėte šį nustatymą, <ph name="BEGIN_LINK" />iš naujo nustatykite sinchronizavimą<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">ilga (2 sek.)</translation>
 <translation id="4306119971288449206">Teikiamų programų turinio tipas turi būti „<ph name="CONTENT_TYPE" />“</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB tiesiogiai)</translation>
@@ -5155,7 +5154,6 @@
 <translation id="8834164572807951958">„<ph name="DESTINATION_NAME" />“ nariai galės pasiekti šių elementų kopiją.</translation>
 <translation id="8838770651474809439">Mėsainis</translation>
 <translation id="883911313571074303">Komentuoti vaizdą</translation>
-<translation id="8844690305858050198">Atlikta! Žalinga programinė įranga pašalinta. Norėdami vėl įjungti plėtinius apsilankykite puslapyje &lt;a href="chrome://extensions"&gt;„Plėtiniai“&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Gauti pagalbos</translation>
 <translation id="8846141544112579928">Ieškoma klaviatūros...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 47988da..aef78d53aa 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Pievienot uzraudzītu lietotāju</translation>
 <translation id="4297219207642690536">Restartēt un atiestatīt</translation>
 <translation id="4297322094678649474">Mainīt valodas</translation>
-<translation id="4300305918532693141">Lai mainītu šo iestatījumu, <ph name="BEGIN_LINK" />atiestatiet sinhronizāciju<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">ilga (2 s)</translation>
 <translation id="4306119971288449206">Instalētajām lietotnēm ir jābūt ar šāda veida saturu: <ph name="CONTENT_TYPE" />.</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB tiešsaistē)</translation>
@@ -5154,7 +5153,6 @@
 <translation id="8834164572807951958">“<ph name="DESTINATION_NAME" />” dalībnieki iegūs piekļuvi šo vienumu kopijām.</translation>
 <translation id="8838770651474809439">Hamburgers</translation>
 <translation id="883911313571074303">Anotēt attēlu</translation>
-<translation id="8844690305858050198">Gatavs! Kaitīgā programmatūra ir noņemta. Lai atkal ieslēgtu paplašinājumus, dodieties uz lapu &lt;a href="chrome://extensions"&gt;Paplašinājumi&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Saņemt palīdzību</translation>
 <translation id="8846141544112579928">Notiek tastatūras meklēšana...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index df3262c9..27c931a8 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -2178,7 +2178,6 @@
 <translation id="4296575653627536209">സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താവിനെ ചേർക്കുക</translation>
 <translation id="4297219207642690536">പുനഃരാരംഭിച്ച് പുനഃസജ്ജീകരിക്കുക</translation>
 <translation id="4297322094678649474">ഭാഷകൾ മാറ്റുക</translation>
-<translation id="4300305918532693141">ഈ ക്രമീകരണം മാറ്റാൻ, <ph name="BEGIN_LINK" />സമന്വയം റീസെറ്റുചെയ്യുക<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">ദൈർഘ്യമേറിയത്‌ (2 സെക്കൻഡ്‌)</translation>
 <translation id="4306119971288449206">"<ph name="CONTENT_TYPE" />" എന്ന ഉള്ളടക്ക തരത്തിനൊപ്പം ആപ്പുകൾ നൽകേണ്ടതുണ്ട്</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K ലൈവ്)</translation>
@@ -5151,7 +5150,6 @@
 <translation id="8834164572807951958">'<ph name="DESTINATION_NAME" />' എന്നതിലെ അംഗങ്ങൾ ഈ ഇനങ്ങളുടെ പകർപ്പിലേക്ക് ആക്‌സസ് ‌കരസ്ഥമാക്കും.</translation>
 <translation id="8838770651474809439">ഹാംബർഗർ</translation>
 <translation id="883911313571074303">ചിത്രം വ്യാഖ്യാനിക്കുക</translation>
-<translation id="8844690305858050198">പൂർത്തിയായി! ദോഷകരമായ സോഫ്‌റ്റ്‌വെയർ നീക്കം ചെയ്‌തു. വിപുലീകരണം വീണ്ടും ഓണാക്കാൻ, &lt;a href="chrome://extensions"&gt;വിപുലീകരണങ്ങൾ&lt;/a&gt; സന്ദർശിക്കുക.</translation>
 <translation id="8845001906332463065">സഹായം സ്വീകരിക്കുക</translation>
 <translation id="8846141544112579928">കീബോർഡിനായി തിരയുന്നു...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 24220d4a..49aa965f 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -7,7 +7,7 @@
 <translation id="1007408791287232274">डिव्हाइसेस लोड करू शकलो नाही.</translation>
 <translation id="1008186147501209563">बुकमार्क निर्यात करा</translation>
 <translation id="1010833424573920260">{NUM_PAGES,plural, =1{अप्रतिसादात्मक पृष्‍ठ}one{अप्रतिसादात्मक पृष्‍ठ}other{अप्रतिसादात्मक पृष्‍ठे}}</translation>
-<translation id="1012794136286421601">आपले दस्तऐवज, पत्रके, स्लाइड्स आणि रेखाचित्र फायली संकालित केल्या जात आहेत. त्यावर ऑनलाइन किंवा ऑफलाइन प्रवेश करण्यासाठी Google ड्राइव्ह अॅप उघडा.</translation>
+<translation id="1012794136286421601">तुमचे दस्तऐवज, पत्रके, स्लाइड्स आणि रेखाचित्र फायली सिंक केल्या जात आहेत. त्यावर ऑनलाइन किंवा ऑफलाइन अॅक्सेस करण्यासाठी Google ड्राइव्ह अॅप उघडा.</translation>
 <translation id="1013707859758800957">या पृष्ठावर चालण्यासाठी सॅन्डबॉक्स न केलेल्या प्लगिनला अनुमती देण्यात आली.</translation>
 <translation id="1015318665228971643">फोल्डर नाव एडिट करा</translation>
 <translation id="1016437870506746108">{COUNT,plural, =0{सर्व नवीन विंडोमध्ये उघडा}=1{नवीन विंडोमध्ये उघडा}one{सर्व (#) नवीन विंडोमध्ये उघडा}other{सर्व (#) नवीन विंडोमध्ये उघडा}}</translation>
@@ -38,7 +38,7 @@
 <translation id="1049795001945932310">&amp;भाषा सेटिंग्ज</translation>
 <translation id="1049926623896334335">Word दस्तऐवज</translation>
 <translation id="1054153489933238809">नवीन टॅबमध्‍ये मूळ &amp;प्रतिमा उघडा</translation>
-<translation id="1055806300943943258">Bluetooth आणि USB डिव्हाइसेस शोधत आहे...</translation>
+<translation id="1055806300943943258">ब्लूटूथ आणि USB डिव्हाइस शोधत आहे...</translation>
 <translation id="1056775291175587022">कोणतीही नेटवर्क नाहीत</translation>
 <translation id="1056898198331236512">चेतावणी</translation>
 <translation id="1058262162121953039">PUK</translation>
@@ -56,7 +56,7 @@
 <translation id="1076698951459398590">थीम सक्षम करा</translation>
 <translation id="1076818208934827215">Microsoft Internet Explorer</translation>
 <translation id="1079766198702302550">कॅमेरा प्रवेश नेहमी अवरोधित करा</translation>
-<translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> आपल्‍या Chrome सेटिंग्ज त्यांच्या मूळ डीफॉल्टवर पुनर्संचयित करू इच्छित आहे. हे आपले मुख्यपृष्ठ, नवीन टॅब पृष्ठ आणि शोध इंजिन रीसेट करेल, आपल्‍या विस्तारांना अक्षम करेल आणि सर्व टॅबना अनपिन करेल. ते कुकीज, सामग्री आणि साइट डेटासारखा इतर तात्पुरता आणि कॅश   केलेला डेटा देखील साफ करेल.</translation>
+<translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> तुमच्या Chrome सेटिंग्ज त्यांच्या मूळ डीफॉल्टवर रिस्टोअर करू इच्छित आहे. हे तुमचे मुख्यपेज, नवीन टॅब पेज आणि शोध इंजिन रीसेट करेल, तुमच्या एक्स्टेंशनांना अक्षम करेल आणि सर्व टॅबना अनपिन करेल. ते कुकीज, सामग्री आणि साइट डेटासारखा इतर तात्पुरता आणि कॅश केलेला डेटा देखील साफ करेल.</translation>
 <translation id="1082725763867769612">ऑफलाइन फायली</translation>
 <translation id="1084824384139382525">दुवा प&amp;त्ता कॉपी करा</translation>
 <translation id="1085697365578766383">व्हर्च्युअल मशीन सुरू करताना एरर आली. कृपया पुन्हा प्रयत्न करा.</translation>
@@ -82,7 +82,7 @@
 <translation id="1119069657431255176">Bzip2 संकीर्ण tar संग्रहण</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="1123187597739372905">सिंक सेटिंग्ज दाखवा</translation>
 <translation id="1124772482545689468">वापरकर्ता</translation>
@@ -93,9 +93,9 @@
 <translation id="1134009406053225289">गुप्त विंडोमध्ये उघडा</translation>
 <translation id="1136155683023653803">पासवर्ड, बुकमार्क, इतिहास आणि बरेच काही तुमच्या खात्यावर सिंक केले जाते</translation>
 <translation id="1137673463384776352">लिंक <ph name="APP" /> मध्ये उघडा</translation>
-<translation id="1140351953533677694">आपल्या Bluetooth आणि अनुक्रमिक डिव्हाइसेसवर प्रवेश करा</translation>
+<translation id="1140351953533677694">तुमच्या ब्लूटूथ आणि अनुक्रमिक डिव्हाइसवर अॅक्सेस करा</translation>
 <translation id="1140610710803014750">तुमच्या सर्व डिव्हाइसवर तुमचे बुकमार्क मिळवण्यासाठी, साइन इन करा आणि सिंक चालू करा.</translation>
-<translation id="1143142264369994168">प्रमाणपत्र स्वाक्षरीकर्ता</translation>
+<translation id="1143142264369994168">सर्टिफिकेट स्वाक्षरीकर्ता</translation>
 <translation id="1145292499998999162">प्लगिन अवरोधित</translation>
 <translation id="1145532888383813076">तुमच्या डिव्हाइस, अॅप्स आणि वेबवर शोधा.</translation>
 <translation id="1146204723345436916">HTML फायलीवरुन बुकमार्क आयात करा...</translation>
@@ -110,7 +110,7 @@
 <translation id="1153356358378277386">जोडलेली डीव्हाइस</translation>
 <translation id="1156488781945104845">वर्तमान वेळ</translation>
 <translation id="1157102636231978136">तुमच्या Google खात्याशी सिंक केलेला, तुमचा ब्राउझ केलेला डेटा आणि अॅक्टिव्हिटी</translation>
-<translation id="1161575384898972166">कृपया क्लायंट प्रमाणपत्र निर्यात करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation>
+<translation id="1161575384898972166">कृपया क्लायंट सर्टिफिकेट निर्यात करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation>
 <translation id="1161699061380012396">Chrome OS इनपुट पद्धत</translation>
 <translation id="1163931534039071049">फ्रेम स्त्रोत &amp;पहा</translation>
 <translation id="1164674268730883318"><ph name="DEVICE_TYPE" /> साठी Smart Lock बंंद करायचे?</translation>
@@ -158,7 +158,7 @@
     पुढील स्क्रीनवर, कृपया समस्येचे निराकरण करण्यात आम्हाला मदत करण्यासाठी अभिप्राय पाठवा.</translation>
 <translation id="121783623783282548">पासवर्ड जुळत नाहीत.</translation>
 <translation id="1218860753635451122">"मी सहमती दर्शवतो" या बटणावर क्लिक करून तुम्ही या Google सेवांसाठी वर वर्णन केलेल्या प्रक्रियांना सहमती दर्शवता.</translation>
-<translation id="122082903575839559">प्रमाणपत्र स्वाक्षरी अल्गोरिदम</translation>
+<translation id="122082903575839559">सर्टिफिकेट स्वाक्षरी अल्गोरिदम</translation>
 <translation id="1221024147024329929">PKCS #1 RSA कूटबद्धीकरणासह MD2</translation>
 <translation id="1221825588892235038">केवळ निवड</translation>
 <translation id="1223853788495130632">या सेटिंगसाठी आपला प्रशासक विशिष्‍ट मूल्याची शिफारस करतो.</translation>
@@ -205,14 +205,14 @@
 <translation id="1293177648337752319">साइट सशब्द करा</translation>
 <translation id="1293556467332435079">फायली</translation>
 <translation id="1295794900245526845">साइन इन करण्यासाठी <ph name="PASSWORD_MANAGER_BRAND" /> सह सेव्ह केलेले आपले खाते निवडा</translation>
-<translation id="1296497012903089238">प्रमाणपत्र प्रकार</translation>
+<translation id="1296497012903089238">सर्टिफिकेट प्रकार</translation>
 <translation id="1297175357211070620">गंतव्य</translation>
 <translation id="1297922636971898492">Google ड्राइव्ह आत्ता उपलब्ध नाही. Google ड्राइव्ह एकदा परत आल्यानंतर अपलोड करणे स्वयंचलितपणे रीस्टार्ट होईल.</translation>
 <translation id="1300415640239881824">संरक्षित आशयाची अधिक चांगल्या प्लेबॅकसाठी पात्रता निर्धारित करण्यासाठी <ph name="DOMAIN" /> ला तुमच्या डिव्हाइसची Google कडून ओळख पडताळणी करून हवी आहे.</translation>
 <translation id="1300806585489372370">हे सेटिंग बदलण्यासाठी, प्रथम <ph name="BEGIN_LINK" />आयडेंटिफायर चालू करा<ph name="END_LINK" /></translation>
 <translation id="1302227299132585524">Apple इव्हेंट वरून JavaScript ला अनुमती द्या</translation>
 <translation id="1303101771013849280">HTML फाईल बुकमार्क करते</translation>
-<translation id="1303671224831497365">Bluetooth डिव्हाइसेस सापडली नाहीत</translation>
+<translation id="1303671224831497365">ब्लूटूथ डिव्हाइस सापडली नाहीत</translation>
 <translation id="1306606229401759371">सेटिंग्ज बदला</translation>
 <translation id="1307559529304613120">अरेरे! या डिव्हाइससाठी दीर्घ-मुदतीचे API प्रवेश टोकन संचयित करण्यात सिस्टम अयशस्वी झाली.</translation>
 <translation id="1307931752636661898">Linux फायली पाहू शकत नाही</translation>
@@ -254,7 +254,7 @@
 <translation id="1371301976177520732">तुमच्या सर्व डिव्हाइसवर तुमचे बुकमार्क, पासवर्ड, इतिहास आणि बरेच काही</translation>
 <translation id="1372681413396468867">{NUM_ITEMS,plural, =1{काढण्यासाठी 1 आयटम}one{काढण्यासाठी # आयटम}other{काढण्यासाठी # आयटम}}</translation>
 <translation id="1372841398847029212">तुमच्या खात्याशी सिंक करा</translation>
-<translation id="1374844444528092021">नेटवर्क "<ph name="NETWORK_NAME" />" द्वारे आवश्यक प्रमाणपत्र एकतर इंस्टॉल झाले नाही किंवा यापुढे वैध नाही. कृपया एक नवीन प्रमाणपत्र मिळवा आणि पुन्हा कनेक्ट करण्याचा प्रयत्न करा.</translation>
+<translation id="1374844444528092021">नेटवर्क "<ph name="NETWORK_NAME" />" द्वारे आवश्यक सर्टिफिकेट एकतर स्थापित झाले नाही किंवा यापुढे वैध नाही. कृपया एक नवीन सर्टिफिकेट मिळवा आणि पुन्हा कनेक्ट करण्याचा प्रयत्न करा.</translation>
 <translation id="1375321115329958930">सेव्ह केलेले पासवर्ड</translation>
 <translation id="137651782282853227">सेव्ह केलेले पत्ते येथे दिसून येतील</translation>
 <translation id="1377600615067678409">तूर्त वगळा</translation>
@@ -300,7 +300,7 @@
 <translation id="1430915738399379752">प्रिंट</translation>
 <translation id="1432581352905426595">शोध इंजिन व्यवस्थापित करा</translation>
 <translation id="1433811987160647649">प्रवेश करण्यापूर्वी विचारा</translation>
-<translation id="1434696352799406980">हे आपले प्रारंभ पृष्ठ, नवीन टॅब पृष्ठ, शोध इंजिन आणि पिन केलेले टॅब रीसेट करेल. हे सर्व विस्तार अक्षम करेल आणि कुकीज सारखा तात्पुरता डेटा साफ करेल. आपले बुकमार्क, इतिहास आणि सेव्ह केलेले पासवर्ड साफ केले जाणार नाहीत.</translation>
+<translation id="1434696352799406980">हे तुमचे सुरू पेज, नवीन टॅब पेज, शोध इंजिन आणि पिन केलेले टॅब रीसेट करेल. हे सर्व एक्स्टेंशन अक्षम करेल आणि कुकीज सारखा तात्पुरता डेटा साफ करेल. तुमचे बुकमार्क, इतिहास आणि सेव्ह केलेले पासवर्ड साफ केले जाणार नाहीत.</translation>
 <translation id="1434886155212424586">होमपेज हे नवीन टॅब पृष्ठ आहे</translation>
 <translation id="1436671784520050284">सेटअप सुरू ठेवा</translation>
 <translation id="1436784010935106834">काढली</translation>
@@ -391,12 +391,12 @@
 <translation id="1567750922576943685">तुमची ओळख पडताळल्याने तुमच्या वैयक्तिक माहितीचे संरक्षण करण्यात मदत होते</translation>
 <translation id="1567993339577891801">JavaScript कन्सोल</translation>
 <translation id="1568067597247500137">साइट निःशब्द करा</translation>
-<translation id="1568323446248056064">प्रदर्शन डीव्हाइस सेटिंग्ज उघडा</translation>
+<translation id="1568323446248056064">डिस्प्ले डीव्हाइस सेटिंग्ज उघडा</translation>
 <translation id="1572266655485775982">वाय-फाय सक्षम</translation>
 <translation id="1572876035008611720">आपला ईमेल एंटर करा</translation>
 <translation id="1576594961618857597">डीफॉल्ट पांढरा अवतार</translation>
 <translation id="1581962803218266616">फाइंडर मध्ये दर्शवा</translation>
-<translation id="1584990664401018068">आपण वापरत असलेल्या वाय-फाय नेटवर्कला (<ph name="NETWORK_ID" />) प्रमाणीकरणाची आवश्यकता असू शकते.</translation>
+<translation id="1584990664401018068">तुम्ही वापरत असलेल्या वाय-फाय नेटवर्कला (<ph name="NETWORK_ID" />) अॉथेंटिकेशनची आवश्यकता असू शकते.</translation>
 <translation id="1585238069289523942">तुमच्या Chromebook वर अॅप्स इंस्टॉल करा</translation>
 <translation id="1585717515139318619">आपल्‍या संगणकावरील दुसर्‍या प्रोग्रामने एक थीम जोडली जी Chrome ची कार्य करण्‍याची पद्धत कदाचित बदलू शकते.
 <ph name="EXTENSION_NAME" /></translation>
@@ -406,7 +406,7 @@
 <translation id="1588870296199743671">यासह दुवा उघडा...</translation>
 <translation id="1589055389569595240">शुद्धलेखन आणि व्याकरण दर्शवा</translation>
 <translation id="1593594475886691512">स्वरूपन करत आहे...</translation>
-<translation id="159359590073980872">इमेज कॅश  </translation>
+<translation id="159359590073980872">इमेज कॅश</translation>
 <translation id="1593926297800505364">पेमेंट पद्धत सेव्ह करा</translation>
 <translation id="1598233202702788831">आपल्‍या प्रशासकाने अपडेट अक्षम केली आहेत.</translation>
 <translation id="1600857548979126453">पृष्‍ठ ‍डीबगर बॅकएंडवर प्रवेश करा</translation>
@@ -417,7 +417,7 @@
 <translation id="1609170755653088773">आपल्या iPhone वर हा पासवर्ड संकालित करा</translation>
 <translation id="1609862759711084604">मागील वापरकर्ता</translation>
 <translation id="1611584202130317952">तरतूद प्रवाहात व्यत्यय आला होता. कृपया पुन्हा प्रयत्न करा किंवा तुमच्या डिव्हाइसच्या मालकाशी किंवा अ‍ॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
-<translation id="1611649489706141841">अग्रेषित करा</translation>
+<translation id="1611649489706141841">फॉरवर्ड करा</translation>
 <translation id="1611704746353331382">HTML फायलीमध्‍ये बुकमार्क निर्यात करा...</translation>
 <translation id="161460670679785907">तुमचा फोन शोधता आला नाही</translation>
 <translation id="1616206807336925449">या विस्तारास कोणत्याही विशिष्ट परवानग्यांची आवश्यकता नाही.</translation>
@@ -444,8 +444,8 @@
 <translation id="1644574205037202324">इतिहास</translation>
 <translation id="1645516838734033527">तुमचा <ph name="DEVICE_TYPE" /> सुरक्षित ठेवण्यासाठी Smart Lockला तुमच्या फोनवर स्क्रीन लॉकची आवश्यकता आहे.</translation>
 <translation id="1646102270785326155">एकदा हा वापरकर्ता काढल्यानंतर या वापरकर्त्याशी संबद्ध सर्व फायली आणि स्थानिक डेटा कायमचा हटवला जाईल. $1 अद्याप नंतर साइन इन करू शकतो.</translation>
-<translation id="1646982517418478057">कृपया हे प्रमाणपत्र कूटबद्ध करण्यासाठी एक पासवर्ड एंटर करा</translation>
-<translation id="164814987133974965">आपल्या मार्गदर्शनाने एक पर्यवेक्षी वापरकर्ता वेब एक्सप्लोर करू शकतो. पर्यवेक्षी वापरकर्त्याचे व्यवस्थापक म्हणून, आपण विशिष्ट वेबसाइट
+<translation id="1646982517418478057">कृपया हे सर्टिफिकेट कूटबद्ध करण्यासाठी एक पासवर्ड एंटर करा</translation>
+<translation id="164814987133974965">तुमच्या मार्गदर्शनाने एक पर्यवेक्षी वापरकर्ता वेब एक्सप्लोर करू शकतो. पर्यवेक्षी वापरकर्त्याचे व्यवस्थापक म्हणून, तुम्ही विशिष्ट वेबसाइट
     <ph name="BEGIN_BOLD" />अनुमत किंवा प्रतिबंधित<ph name="END_BOLD" /> करू शकता,
     पर्यवेक्षी वापरकर्त्याने भेट दिलेल्या वेबसाइटचे <ph name="BEGIN_BOLD" />पुनरावलोकन<ph name="END_BOLD" /> करू शकता आणि अन्य सेटिंग्ज
     <ph name="BEGIN_BOLD" />व्यवस्थापित<ph name="END_BOLD" /> करू शकता.</translation>
@@ -532,7 +532,7 @@
 <translation id="176587472219019965">&amp;नवीन विंडो</translation>
 <translation id="1768278914020124551">अरेरे! लॉगऑन सर्व्हरशी संपर्क साधताना समस्या आली. कृपया तुमचे नेटवर्क कनेक्शन आणि डोमेन नाव तपासा, नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="1769104665586091481">दुवा नवीन &amp;विंडोमध्ये उघडा</translation>
-<translation id="1773212559869067373">प्रमाणीकरण प्रमाणपत्र स्थानिकपणे नाकारले</translation>
+<translation id="1773212559869067373">अॉथेंटिकेशन सर्टिफिकेट स्थानिकपणे नाकारले</translation>
 <translation id="177336675152937177">होस्ट केलेला अ‍ॅप डेटा</translation>
 <translation id="1774349594977710164">सर्व आपोआप सिंक करण्यात आले असल्यामुळे तुमचा फोन तुमचे इतर <ph name="DEVICE_TYPE" /> सुद्धा अनलॉक करतो.</translation>
 <translation id="1774833706453699074">उघडी पेज बुकमार्क करा...</translation>
@@ -546,12 +546,12 @@
 <translation id="1782530111891678861">स्पर्श HUD मोड बदला</translation>
 <translation id="1784849162047402014">डिव्हाइसवर डिस्क स्‍थान कमी आहे</translation>
 <translation id="1786636458339910689">टीम ड्राइव्ह</translation>
-<translation id="1792619191750875668">विस्तारित प्रदर्शन</translation>
+<translation id="1792619191750875668">एक्स्टेंशनित डिस्प्ले</translation>
 <translation id="1794791083288629568">या समस्येचे निराकरण करण्यात आम्हाला मदत करण्यासाठी अभिप्राय पाठवा.</translation>
 <translation id="1795214765651529549">क्लासिक वापरा</translation>
 <translation id="179793358054765055">Chromebook डिव्हाइसचे नाव (<ph name="REGEX" />)</translation>
 <translation id="1799071797295057738">"<ph name="EXTENSION_NAME" />" विस्तार स्वयंचलितपणे अक्षम केला.</translation>
-<translation id="180035236176489073">या फायलींमध्ये प्रवेश करण्‍यासाठी आपण ऑनलाइन असणे आवश्यक आहे.</translation>
+<translation id="180035236176489073">या फायलींमध्ये अॅक्सेस करण्‍यासाठी तुम्ही ऑनलाइन असणे आवश्यक आहे.</translation>
 <translation id="1802687198411089702">पेज प्रतिसाद देत नाही. तुम्ही वाट पाहू शकता किंवा बाहेर पडू शकता.</translation>
 <translation id="1802931390041703523">या पेजवर फ्लॅश ब्लॉक केले आहे</translation>
 <translation id="1805738995123446102">बॅकग्राउंड टॅब तुमचा मायक्रोफोन वापरत आहे</translation>
@@ -594,7 +594,7 @@
 <translation id="1853692000353488670">नवीन गुप्त टॅब</translation>
 <translation id="1856715684130786728">स्थान जोडा...</translation>
 <translation id="1856813161013948396">फक्त फिंगरप्रिंट सेन्सरवर टॅप करून लॉक स्क्रीन वगळा. कॉन्फिगर करण्‍यासाठी क्लिक करा.</translation>
-<translation id="1858585891038687145">सॉफ्टवेअर निर्मात्यांना ओळखण्याकरिता या प्रमाणपत्रावर विश्वास ठेवा</translation>
+<translation id="1858585891038687145">सॉफ्टवेअर निर्मात्यांना ओळखण्याकरिता या सर्टिफिकेटवर विश्वास ठेवा</translation>
 <translation id="1861262398884155592">हे फोल्डर रिक्त आहे</translation>
 <translation id="1864111464094315414">लॉगिन</translation>
 <translation id="1864400682872660285">थंड</translation>
@@ -609,7 +609,7 @@
 <translation id="1875387611427697908">हे केवळ <ph name="CHROME_WEB_STORE" /> वरून जोडले जाऊ शकते</translation>
 <translation id="1877520246462554164">प्रमाणीकरण टोकन मिळविण्यात अयशस्वी. कृपया साइन आउट करा नंतर पुन्हा प्रयत्न करण्यासाठी साइन इन करा.</translation>
 <translation id="1878302395768190018">तुम्ही Chrome सेटिंग्जमध्ये हे कधीही कस्टमाइझ करू शकता</translation>
-<translation id="1880905663253319515">प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
+<translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" सर्टिफिकेट हटवायचे?</translation>
 <translation id="1886996562706621347">प्रोटोकॉलकरिता डीफॉल्ट हँडलर होण्यासाठी साइटना विचारण्याची अनुमती द्या</translation>
 <translation id="1887442540531652736">साइन-इन एरर</translation>
 <translation id="1887850431809612466">हार्डवेअर पुनरावृत्ती</translation>
@@ -643,7 +643,7 @@
 <translation id="1931152874660185993">कोणतेही घटक इंस्टॉल केले नाहीत.</translation>
 <translation id="1932026958134051332">प्रवेश पर्याय स्विच करा</translation>
 <translation id="1932098463447129402">पूर्वी नाही</translation>
-<translation id="1933809209549026293">कृपया एक माउस किंवा एक कीबोर्ड कनेक्ट करा. आपण Bluetooth डिव्हाइस वापरत असल्यास, जोडण्यासाठी ते तयार असल्याचे सुनिश्चित करा.</translation>
+<translation id="1933809209549026293">कृपया एक माउस किंवा एक कीबोर्ड कनेक्ट करा. तुम्ही ब्लूटूथ डिव्हाइस वापरत असल्यास, पेअरिंगसाठी ते तयार असल्याचे खात्री करा.</translation>
 <translation id="1936157145127842922">फोल्डरमध्ये दर्शवा</translation>
 <translation id="1938351510777341717">बाह्य कमांड</translation>
 <translation id="1940546824932169984">कनेक्‍ट केलेले डिव्हाइस</translation>
@@ -688,7 +688,7 @@
 <translation id="2006638907958895361">लिंक <ph name="APP" /> मध्ये उघडा</translation>
 <translation id="2007404777272201486">समस्या नोंदवा...</translation>
 <translation id="2016430552235416146">पारंपारिक</translation>
-<translation id="2017334798163366053">कार्यप्रदर्शन डेटा संकलन अक्षम करा</translation>
+<translation id="2017334798163366053">कार्यडिस्प्ले डेटा संकलन अक्षम करा</translation>
 <translation id="2017836877785168846">अॅड्रेस बारमधील इतिहास आणि आपोआप पूर्ण केलेले साफ करते.</translation>
 <translation id="2018352199541442911">क्षमस्व, आपले बाह्य स्टोरेज डीव्हाइस आत्ता समर्थन करत नाही.</translation>
 <translation id="2019718679933488176">नवीन टॅबमध्ये ऑडिओ &amp;उघडा</translation>
@@ -724,7 +724,7 @@
 <translation id="2077129598763517140">उपलब्ध असेल तेव्हा हार्डवेअर ऍक्सीलरेशन वापरा</translation>
 <translation id="2078019350989722914">(<ph name="KEY_EQUIVALENT" />) मधून बाहेर येण्यापूर्वी चेतावणी द्या</translation>
 <translation id="2079053412993822885">आपण आपल्या मालकीच्या प्रमाणपत्रांपैकी एखादे हटविल्यास, आपण यापुढे आपल्या स्वतःच्या ओळखीसाठी ते वापरू शकणार नाही.</translation>
-<translation id="2079545284768500474">पूर्ववत करा</translation>
+<translation id="2079545284768500474">पहिल्यासारखे करा</translation>
 <translation id="2080070583977670716">अधिक सेटिंग्ज</translation>
 <translation id="2084108471225856927">डिव्हाइस सेटिंग्ज</translation>
 <translation id="2085470240340828803">"<ph name="FILENAME" />" नावाची फाईल आधीपासूनच विद्यमान आहे. आपण काय करू इच्छिता?</translation>
@@ -739,7 +739,7 @@
 <translation id="2097372108957554726">नवीन डिव्हाइसेसची नोंदणी करण्यासाठी आपल्याला Chrome वर साइन इन करणे आवश्यक आहे</translation>
 <translation id="2098305189700762159">आढळली नाही</translation>
 <translation id="2099172618127234427">आपण Chrome OS डीबगिंग वैशिष्ट्ये सक्षम करत आहात जी sshd daemon सेट आणि USB ड्राइव्हवरून बूट करणे सक्षम करतील.</translation>
-<translation id="2099686503067610784">सर्व्हर प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
+<translation id="2099686503067610784">सर्व्हर सर्टिफिकेट "<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
 <translation id="2100273922101894616">स्वयं साइन इन करा</translation>
 <translation id="2101225219012730419">आवृत्ती:</translation>
 <translation id="2112877397266219826">मला सेट करण्यासाठी आपला स्पर्श नियंत्रक चालू करा</translation>
@@ -756,7 +756,7 @@
 <translation id="2126167708562367080">आपल्या प्रशासकाने संकालन अक्षम केले आहे.</translation>
 <translation id="2127372758936585790">निम्न-उर्जेचे चार्जर</translation>
 <translation id="212862741129535676">फ्रिक्वेन्सी स्थिती कब्जा टक्केवारी</translation>
-<translation id="2129825002735785149">प्लगिन अपडेट करा</translation>
+<translation id="2129825002735785149">प्लग-इन अपडेट करा</translation>
 <translation id="2131077480075264">"<ph name="IMPORT_NAME" />" द्वारे "<ph name="APP_NAME" />" ला अनुमती नसल्‍याने तो स्‍थापित करण्‍यात अक्षम</translation>
 <translation id="2135456203358955318">डॉक केलेले भिंग</translation>
 <translation id="2135787500304447609">&amp;पुन्हा करा</translation>
@@ -769,7 +769,7 @@
 <translation id="214353449635805613">स्क्रीनशॉट प्रदेश</translation>
 <translation id="2143765403545170146">टूलबार नेहमी पूर्ण स्क्रीनमध्ये दर्शवा</translation>
 <translation id="2143778271340628265">व्यक्तिचलित प्रॉक्झी कॉन्फिगरेशन</translation>
-<translation id="2144536955299248197">प्रमाणपत्र दर्शक: <ph name="CERTIFICATE_NAME" /></translation>
+<translation id="2144536955299248197">सर्टिफिकेट दर्शक: <ph name="CERTIFICATE_NAME" /></translation>
 <translation id="2148219725039824548">शेअर माउंट करताना एरर आली. नेटवर्कमध्ये निर्दिष्ट केलेला शेअर आढळला नाही.</translation>
 <translation id="2148756636027685713">स्वरुपण समाप्त</translation>
 <translation id="2148892889047469596">टॅब कास्ट करा</translation>
@@ -795,7 +795,7 @@
 <translation id="2178614541317717477">CA तडजोड</translation>
 <translation id="218070003709087997">किती प्रती प्रिंट करायच्या ते सूचित करण्यासाठी संख्या वापरा (1 ते 999).</translation>
 <translation id="2184515124301515068">जेव्हा साइट आवाज प्ले करेल तेव्हा Chrome ला निवड करू दे (शिफारस केलेले)</translation>
-<translation id="2187895286714876935">सर्व्हर प्रमाणपत्र आयात एरर</translation>
+<translation id="2187895286714876935">सर्व्हर सर्टिफिकेट आयात एरर</translation>
 <translation id="2187906491731510095">विस्तार अपडेट केले</translation>
 <translation id="2188881192257509750"><ph name="APPLICATION" /> उघडा</translation>
 <translation id="2190069059097339078">WiFi क्रेडेन्शियल मिळविणारा</translation>
@@ -829,16 +829,16 @@
 <translation id="2230051135190148440">CHAP</translation>
 <translation id="2230062665678605299">फोल्डर "<ph name="FOLDER_NAME" />" तयार करण्‍यात अक्षम. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="223106756035922488">आजचे डुडल पाहण्यासाठी क्लिक करा</translation>
-<translation id="2231238007119540260">आपण एक सर्व्हर प्रमाणपत्र हटविल्यास, आपण त्या सर्व्हरसाठी नेहमीचे सुरक्षा चेक पुनर्संचयित करता आणि त्यास एक वैध प्रमाणपत्र वापरणे आवश्यक आहे.</translation>
+<translation id="2231238007119540260">तुम्ही एक सर्व्हर सर्टिफिकेट हटविल्यास, तुम्ही त्या सर्व्हरसाठी नेहमीचे सुरक्षा चेक पुनर्संचयित करता आणि त्यास एक वैध सर्टिफिकेट वापरणे आवश्यक आहे.</translation>
 <translation id="2232379019872353004">Google ला थोडी सिस्टम माहिती आणि पेज आशय स्वयंचलितपणे पाठवा</translation>
-<translation id="2232876851878324699">फाइलमध्ये एक प्रमाणपत्र आहे, जे आयात झाले नाही:</translation>
+<translation id="2232876851878324699">फाइलमध्ये एक सर्टिफिकेट आहे, जे आयात झाले नाही:</translation>
 <translation id="2233502537820838181">&amp;अधिक माहिती</translation>
 <translation id="2234876718134438132">सिंक आणि Google सेवा</translation>
 <translation id="2238379619048995541">फ्रिक्वेन्सी स्थिती डेटा</translation>
 <translation id="2239921694246509981">पर्यवेक्षी व्यक्ती जोडा</translation>
 <translation id="2241053333139545397">अनेक वेबसाइटवर आपला डेटा वाचा आणि बदला</translation>
 <translation id="2242687258748107519">फाईल माहिती</translation>
-<translation id="2243194103992005307">अॅप्स काढण्यासाठी, सेटिंग्ज &gt; अॅप्स किंवा अ‍ॅप्लिकेशन व्यवस्थापकावर जा. नंतर तुम्हाला अनइंस्टॉल करायच्या असलेल्या अॅपवर टॅप करा (अॅप शोधण्‍यासाठी तुम्हाला कदाचित उजवीकडे किंवा डावीकडे स्वाइप करावे लागेल). नंतर अनइंस्टॉल करा किंंवा बंद करावर टॅप करा.</translation>
+<translation id="2243194103992005307">अॅप्स काढण्यासाठी, सेटिंग्ज &gt; अॅप्स किंवा अ‍ॅप्लिकेशन व्यवस्थापक वर जा. नंतर तुम्हाला अनइंस्टॉल करायच्या असलेल्या अॅपवर टॅप करा (अॅप शोधण्‍यासाठी तुम्हाला कदाचित उजवीकडे किंवा डावीकडे स्वाइप करावे लागेल). नंतर अनइंस्टॉल करा किंंवा बंद करावर टॅप करा.</translation>
 <translation id="224940702122312781">हे पेज खूप डेटा वापरेल.</translation>
 <translation id="2249605167705922988">उदा. 1-5, 8, 11-13</translation>
 <translation id="2251218783371366160">सिस्टम दर्शकासह उघडा</translation>
@@ -885,7 +885,7 @@
 <translation id="2316129865977710310">नाही, नको</translation>
 <translation id="2317842250900878657"><ph name="PROGRESS_PERCENT" />% पूर्ण झाले</translation>
 <translation id="2318143611928805047">कागदाचा आकार</translation>
-<translation id="2318817390901984578">Android अॅप्स वापरण्यासाठी, आपले <ph name="DEVICE_TYPE" /> चार्ज करा आणि अपडेट करा.</translation>
+<translation id="2318817390901984578">Android अॅप्स वापरण्यासाठी, तुमचे <ph name="DEVICE_TYPE" /> चार्ज करा आणि अपडेट करा.</translation>
 <translation id="2318923050469484167">वर्तमान गुप्त सत्र (<ph name="EMBEDDING" />)</translation>
 <translation id="2322193970951063277">शीर्षक आणि अधोलेख</translation>
 <translation id="2325650632570794183">हा फाईल प्रकार समर्थित नाही. कृपया या प्रकारची फाईल उघडू शकणारा अ‍ॅप शोधण्यासाठी Chrome वेब स्टोअरला भेट द्या.</translation>
@@ -903,7 +903,7 @@
 <translation id="2345723121311404059">1 पेज <ph name="PRINTER_NAME" />वर</translation>
 <translation id="2347644257713614136">Hangouts आणि Cast for Education चा वापर Google गोपनीयता धोरण संचालित करते.</translation>
 <translation id="2348176352564285430">अॅप: <ph name="ARC_PROCESS_NAME" /></translation>
-<translation id="2350182423316644347">अॅप्लिकेशन प्रारंभ करत आहे...</translation>
+<translation id="2350182423316644347">अॅप्लिकेशन सुरू करत आहे...</translation>
 <translation id="2350796302381711542"><ph name="HANDLER_HOSTNAME" /> ला <ph name="REPLACED_HANDLER_TITLE" /> ऐवजी सर्व <ph name="PROTOCOL" /> दुवे उघडण्यासाठी अनुमती द्यायची?</translation>
 <translation id="2351266942280602854">भाषा आणि इनपुट</translation>
 <translation id="2352662711729498748">&lt; 1 MB</translation>
@@ -911,7 +911,7 @@
 <translation id="2352947182261340447">स्थानिक स्टोरेजमध्ये पुरेशी जागा उपलब्ध नाही.</translation>
 <translation id="2353297238722298836">कॅमेरा आणि मायक्रोफोनला अनुमती आहे</translation>
 <translation id="2356070529366658676">विचारा</translation>
-<translation id="2357949918965361754">आपण या वैशिष्ट्याचा वापर Chrome वरील सामग्री आपल्या टीव्ही वर किंवा इतर डिव्हाइसेसवर प्रदर्शित करण्यासाठी करू शकता.</translation>
+<translation id="2357949918965361754">तुम्ही या वैशिष्ट्याचा वापर Chrome वरील आशय तुमच्या टीव्ही वर किंवा इतर डिव्हाइसेसवर डिस्प्ले करण्यासाठी करू शकता.</translation>
 <translation id="2359345697448000899">टूल मेनूमध्‍ये विस्तारांवर क्लिक करुन आपले विस्तार व्यवस्थापित करा.</translation>
 <translation id="2359808026110333948">सुरू ठेवा</translation>
 <translation id="236117173274098341">ऑप्टिमाइझ करा</translation>
@@ -983,7 +983,7 @@
 <translation id="2482878487686419369">सूचना</translation>
 <translation id="2485422356828889247">अनइन्स्टॉल करणे</translation>
 <translation id="2487067538648443797">नवीन बुकमार्क जोडा</translation>
-<translation id="248861575772995840">तुमचा फोन आढळला नाही. तुमच्या <ph name="DEVICE_TYPE" /> चे ब्लुटूथ चालू असल्याची खात्री करा. &lt;a&gt;आणखी जाणून घ्या&lt;/a&gt;</translation>
+<translation id="248861575772995840">तुमचा फोन आढळला नाही. तुमच्या <ph name="DEVICE_TYPE" /> चे ब्लूटूथ सुरू असल्याची खात्री करा. &lt;a&gt;आणखी जाणून घ्या&lt;/a&gt;</translation>
 <translation id="2489918096470125693">&amp;फोल्डर जोडा...</translation>
 <translation id="249113932447298600">क्षमस्व, <ph name="DEVICE_LABEL" /> डिव्हाइस आत्ता समर्थित नाही.</translation>
 <translation id="2493021387995458222">"एका वेळी एक शब्द" निवडा</translation>
@@ -997,7 +997,7 @@
 <translation id="2498765460639677199">विशाल</translation>
 <translation id="2499747912851752301">पासवर्ड निर्यात करत आहे...</translation>
 <translation id="2500471369733289700">तुमची गोपनीयता संरक्षित करण्यासाठी ब्लॉक केले</translation>
-<translation id="2501173422421700905">राखून ठेवलेले प्रमाणपत्र</translation>
+<translation id="2501173422421700905">राखून ठेवलेले सर्टिफिकेट</translation>
 <translation id="2501278716633472235">परत जा</translation>
 <translation id="2501797496290880632">शॉर्टकट टाइप करा</translation>
 <translation id="2502441965851148920">स्वयंचलित अपडेट सक्षम केली आहेत. आपल्‍या प्रशासकाने व्यक्तिचलित अपडेट अक्षम केली आहेत.</translation>
@@ -1014,10 +1014,10 @@
 <translation id="252219247728877310">घटक अद्ययावत केला नाही</translation>
 <translation id="2522791476825452208">अगदी जवळ</translation>
 <translation id="2523184218357549926">तुम्ही भेट दिलेल्या पेजच्या URL Google ला पाठवते</translation>
-<translation id="2525250408503682495">Kryptonite! कियोस्क अनुप्रयोगासाठी cryptohome माउंट केले जाऊ शकले नाही.</translation>
+<translation id="2525250408503682495">Kryptonite! कियोस्क अॅप्ससाठी cryptohome माउंट केले जाऊ शकले नाही.</translation>
 <translation id="2526277209479171883">इंस्टॉल करा आणि सुरू ठेवा</translation>
 <translation id="2526590354069164005">डेस्कटॉप</translation>
-<translation id="2526619973349913024">अद्यतनासाठी तपासा</translation>
+<translation id="2526619973349913024">अपडेटसाठी तपासा</translation>
 <translation id="2527167509808613699">कोणत्याही प्रकारचे कनेक्शन</translation>
 <translation id="2532589005999780174">उच्च तीव्रता मोड</translation>
 <translation id="253434972992662860">&amp;विराम द्या</translation>
@@ -1026,7 +1026,7 @@
 <translation id="2538361623464451692">सिंक बंद केले आहे</translation>
 <translation id="2541002089857695151">फुलस्क्रीन कास्टिंग ऑप्टिमाइझ करायचे?</translation>
 <translation id="2542049655219295786">Google सारणी</translation>
-<translation id="2544853746127077729">प्रमाणीकरण प्रमाणपत्र नेटवर्कद्वारे नाकारले</translation>
+<translation id="2544853746127077729">अॉथेंटिकेशन सर्टिफिकेट नेटवर्कद्वारे नाकारले</translation>
 <translation id="2547921442987553570"><ph name="EXTENSION_NAME" /> मध्ये जोडा</translation>
 <translation id="2550212893339833758">स्वॅप केलेली मेमरी</translation>
 <translation id="2550596535588364872"><ph name="EXTENSION_NAME" /> ला <ph name="FILE_NAME" /> उघडू द्यायचे?</translation>
@@ -1056,8 +1056,8 @@
 <translation id="2585724835339714757">हा टॅब तुमची स्क्रीन शेअर करत आहे.</translation>
 <translation id="2586657967955657006">क्लिपबोर्ड</translation>
 <translation id="2586672484245266891">कृपया एक लहान URL टाका</translation>
-<translation id="2587922270115112871">पर्यवेक्षी वापरकर्ता तयार करण्याने Google खाते तयार होत नाही आणि त्यांच्या सेटिंग्ज आणि डेटा
-    Chrome Sync सह इतर डिव्हाइसवर त्यांचे फॉलो करणार नाही. पर्यवेक्षी वापरकर्ता केवळ या डिव्हाइसवर लागू होतो.</translation>
+<translation id="2587922270115112871">व्यवस्थापित वापरकर्ता तयार करण्याने Google खाते तयार होत नाही आणि त्यांच्या सेटिंग्ज आणि डेटा
+    Chrome Sync सह इतर डिव्हाइसवर त्यांचे फॉलो करणार नाही. व्यवस्थापित वापरकर्ता केवळ या डिव्हाइसवर लागू होतो.</translation>
 <translation id="258932246702879617"><ph name="BEGIN_BOLD" />टास्कबारवर पिन करा<ph name="END_BOLD" /> निवडा</translation>
 <translation id="259421303766146093">विशालित करू नका</translation>
 <translation id="2594999711683503743">Google वर शोधा किंवा URL टाइप करा</translation>
@@ -1088,9 +1088,9 @@
 <translation id="2631498379019108537">शेल्फ मधील इनपुट पर्याय दर्शवा</translation>
 <translation id="2633199387167390344"><ph name="NAME" /> <ph name="USAGE" /> MB डिस्क स्थान वापरत आहे.</translation>
 <translation id="2633212996805280240">"<ph name="EXTENSION_NAME" />" काढायचे?</translation>
-<translation id="263325223718984101"><ph name="PRODUCT_NAME" /> स्थापना पूर्ण करू शकत नाही, परंतु ते त्याच्या डिस्क प्रतिमेवरून चालत राहील.</translation>
+<translation id="263325223718984101"><ph name="PRODUCT_NAME" /> स्थापना पूर्ण करू शकत नाही, परंतु ते त्याच्या डिस्क इमेजवरून चालत राहील.</translation>
 <translation id="2635276683026132559">साइन करत आहे</translation>
-<translation id="2636625531157955190">Chrome प्रतिमेवर प्रवेश करू शकत नाही.</translation>
+<translation id="2636625531157955190">Chrome इमेज अॅक्सेस करू शकत नाही.</translation>
 <translation id="2638087589890736295">संकालन प्रारंभ करण्यासाठी सांकेतिक वाक्यांश आवश्यक आहे</translation>
 <translation id="2638942478653899953">Google ड्राइव्ह पर्यंत पोहोचणे शक्य नाही. कृपया <ph name="BEGIN_LINK" />लॉग आउट करा<ph name="END_LINK" /> आणि परत लॉग इन करा.</translation>
 <translation id="2642111877055905627">सॉकर बॉल</translation>
@@ -1098,16 +1098,16 @@
 <translation id="2647142853114880570">रीलोड करा</translation>
 <translation id="264810637653812429">कोणतीही कंपॅटिबल डिव्हाइस आढळली नाहीत.</translation>
 <translation id="2648831393319960979">आपल्या खात्यास डिव्हाइस जोडत आहे - यास एक क्षण लागू शकतो...</translation>
-<translation id="2649045351178520408">Base64-encoded ASCII, प्रमाणपत्र श्रृंखला</translation>
+<translation id="2649045351178520408">Base64-encoded ASCII, सर्टिफिकेट श्रृंखला</translation>
 <translation id="2651353619134567122">सिस्टम डेटा पाठवा. हे डिव्हाइस सध्या आपोआप निदान आणि डिव्हाइस आणि अ‍ॅप वापर डेटा Google ला पाठवेल. तुम्ही तुमच्या डिव्हाइसच्या <ph name="BEGIN_LINK1" />सेटिंग्ज<ph name="END_LINK1" /> मध्ये कधीही हे बदलू शकता. तुम्ही अतिरिक्त वेब आणि अ‍ॅप अ‍ॅक्टिव्हिटी सुरू केल्यास, ही माहिती तुमच्या खात्यासह स्टोअर केली जाईल जेणेकरून तुम्ही ती माझी अ‍ॅक्टिव्हिटीमध्ये व्यवस्थापित करू शकाल. <ph name="BEGIN_LINK2" />अधिक जाणून घ्या<ph name="END_LINK2" /></translation>
 <translation id="2653033005692233957">शोधता आले नाही</translation>
-<translation id="2653266418988778031">आपण एक प्रमाणन अधिकृतता (CA) प्रमाणपत्र हटविल्यास, आपला ब्राउझर त्या CA द्वारे जारी केलेल्या कोणत्याही प्रमाणपत्रावर यापुढे विश्वास ठेवणार नाही.</translation>
+<translation id="2653266418988778031">तुम्ही एक प्रमाणन अधिकृतता (CA) सर्टिफिकेट हटविल्यास, तुमचा ब्राउझर त्या CA द्वारे जारी केलेल्या कोणत्याही सर्टिफिकेटवर यापुढे विश्वास ठेवणार नाही.</translation>
 <translation id="2653659639078652383">सबमिट करा</translation>
 <translation id="265390580714150011">फील्ड मूल्य</translation>
 <translation id="2654166010170466751">पेमेंट हँडलर इंस्टॉल करण्यासाठी साइटना अनुमती द्या</translation>
 <translation id="2659381484350128933"><ph name="FOOTNOTE_POINTER" />वैशिष्ट्ये डिव्हाइसनुसार बदलतात</translation>
 <translation id="2660779039299703961">इव्‍हेंट</translation>
-<translation id="266079277508604648">प्रिंटरशी कनेक्ट करू शकत नाही. प्रिंटर चालू आहे का आणि तो वाय-फाय किंवा USB ने तुमच्या Chromebook शी कनेक्ट केला आहे का ते तपासा.</translation>
+<translation id="266079277508604648">प्रिंटरशी कनेक्ट करू शकत नाही. प्रिंटर सुरू आहे का आणि तो वाय-फाय किंवा USB ने तुमच्या Chromebook शी कनेक्ट केला आहे का ते तपासा.</translation>
 <translation id="2661146741306740526">16x9</translation>
 <translation id="2662876636500006917">Chrome वेब बाजार</translation>
 <translation id="2663302507110284145">भाषा</translation>
@@ -1204,7 +1204,7 @@
 <translation id="2787354132612937472">—</translation>
 <translation id="2788135150614412178">+</translation>
 <translation id="2789486458103222910">ठीक आहे</translation>
-<translation id="2791952154587244007">एक एरर आली. कियोस्क अॅप्लिकेशन या डिव्हाइसवर स्वयं-लाँच होण्यात सक्षम होणार नाही.</translation>
+<translation id="2791952154587244007">एक एरर आली. कियोस्क अॅप्लिकेशन या डिव्हाइसवर ऑटो लॉँच करू शकणार नाही.</translation>
 <translation id="2792290659606763004">Android अॅप्स काढायचे?</translation>
 <translation id="2796424461616874739">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना प्रमाणीकरण कालबाह्य.</translation>
 <translation id="2796740370559399562">कुकीजना अनुमती देणे सुरु ठेवा</translation>
@@ -1245,7 +1245,7 @@
 <translation id="2853916256216444076">$1 व्हिडिओ</translation>
 <translation id="2857608528410806398">QU वैशिष्‍ट्य सूचनेेचा मुख्य भाग येथे असेल. QU वैशिष्‍ट्य सूचनेेचा मुख्य भाग येथे असेल. QU वैशिष्‍ट्य सूचनेेचा मुख्य भाग येथे असेल. QU वैशिष्‍ट्य सूचनेेचा मुख्य भाग येथे असेल.</translation>
 <translation id="2860150991415616761">खूप दीर्घ (4s)</translation>
-<translation id="2861301611394761800">सिस्टम अपडेट पूर्ण. कृपया सिस्टम रीस्टार्ट करा. </translation>
+<translation id="2861301611394761800">सिस्टम अपडेट पूर्ण. कृपया सिस्टम रीस्टार्ट करा.</translation>
 <translation id="2861941300086904918">नेटिव्ह क्लायंट सुरक्षा व्यवस्थापक</translation>
 <translation id="2864601841139725659">तुमचे प्रोफाइल चित्र सेट करा</translation>
 <translation id="2867768963760577682">पिन केलेला टॅब म्हणून उघडा</translation>
@@ -1262,7 +1262,7 @@
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> रीस्टार्ट होईल आणि क्षणभरात रीसेट होईल</translation>
 <translation id="2885378588091291677">कार्य व्यवस्थापक</translation>
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
-<translation id="2887525882758501333">PDF दस्तऐवज</translation>
+<translation id="2887525882758501333">पीडीएफ दस्तऐवज</translation>
 <translation id="2888807692577297075">कोणतेही आयटम &lt;b&gt;"<ph name="SEARCH_STRING" />"&lt;/b&gt; शी जुळत नाहीत</translation>
 <translation id="2889064240420137087">यासह दुवा उघडा...</translation>
 <translation id="2889925978073739256">सॅन्डबॉक्स न केलेले प्लगिन अवरोधित करणे सुरू ठेवा</translation>
@@ -1297,7 +1297,7 @@
 <translation id="2932483646085333864">साइन आउट करा नंतर संकालन सुरू करण्यासाठी पुन्हा साइन इन करा</translation>
 <translation id="2932883381142163287">दुरुपयोगाची तक्रार नोंदवा</translation>
 <translation id="2938225289965773019"><ph name="PROTOCOL" /> दुवे उघडा</translation>
-<translation id="2939938020978911855">उपलब्ध असलेले Bluetooth डिव्हाइस दर्शवा</translation>
+<translation id="2939938020978911855">उपलब्ध असलेले ब्लूटूथ डिव्हाइस दर्शवा</translation>
 <translation id="2941112035454246133">निम्न</translation>
 <translation id="2942560570858569904">वाट पाहत आहे…</translation>
 <translation id="2942581856830209953">हे पेज कस्टमाइझ करा</translation>
@@ -1325,7 +1325,7 @@
 <translation id="2984337792991268709">आज <ph name="TODAY_DAYTIME" /></translation>
 <translation id="2986010903908656993">MIDI डिव्हाइसचे पूर्ण नियंत्रण असण्यापासून हे पृष्ठ अवरोधित केले गेले आहे.</translation>
 <translation id="2989474696604907455">संलग्न केले नाही</translation>
-<translation id="2989786307324390836">DER-एन्कोडेड बायनरी, एकल प्रमाणपत्र</translation>
+<translation id="2989786307324390836">DER-एन्कोडेड बायनरी, एकल सर्टिफिकेट</translation>
 <translation id="2993517869960930405">अॅप माहिती</translation>
 <translation id="2994669386200004489"><ph name="FILE_NAME" /> चा बॅकअप घेऊ शकलो नाही</translation>
 <translation id="299483336428448530">आपल्‍या पालकाद्वारे इंस्टॉल केले.</translation>
@@ -1334,7 +1334,7 @@
 <translation id="3003623123441819449">CSS कॅश  </translation>
 <translation id="3003633581067744647">थंबनेल व्ह्यू वर स्विच करा</translation>
 <translation id="3003828226041301643">डिव्हाइस डोमेनशी जोडू शकत नाही. तुम्हाला डिव्हाइस जोडण्याचे विशेषाधिकार आहेत याची खात्री करण्यासाठी तुमचे खाते तपासा.</translation>
-<translation id="3003967365858406397">आपले <ph name="PHONE_NAME" /> एक खाजगी वाय-फाय कनेक्शन तयार करेल.</translation>
+<translation id="3003967365858406397">तुमचे <ph name="PHONE_NAME" /> एक खाजगी वाय-फाय कनेक्शन तयार करेल.</translation>
 <translation id="3004391367407090544">कृपया नंतर परत या</translation>
 <translation id="3006881078666935414">वापराचा कोणताही डेटा नाही</translation>
 <translation id="3007214526293698309">गुणोत्तराचे निराकरण करा</translation>
@@ -1355,7 +1355,7 @@
 <translation id="3016641847947582299">घटक अपडेट केला</translation>
 <translation id="3016780570757425217">आपले स्थान जाणून घ्या</translation>
 <translation id="3020183492814296499">शॉर्टकट</translation>
-<translation id="3020990233660977256">अनुक्रमांक: <ph name="SERIAL_NUMBER" /></translation>
+<translation id="3020990233660977256">सिरिअल नंबर: <ph name="SERIAL_NUMBER" /></translation>
 <translation id="3021678814754966447">फ्रेम स्त्रोत &amp;पहा</translation>
 <translation id="3022978424994383087">ते समजू शकले नाही.</translation>
 <translation id="3023464535986383522">बोलण्यासाठी निवडा</translation>
@@ -1375,7 +1375,7 @@
 <translation id="3046910703532196514">वेबपृष्‍ठ, संपूर्ण</translation>
 <translation id="304747341537320566">स्पीच इंजिन</translation>
 <translation id="304826556400666995">टॅब सशब्द करा</translation>
-<translation id="3053013834507634016">प्रमाणपत्र की वापर</translation>
+<translation id="3053013834507634016">सर्टिफिकेट की वापर</translation>
 <translation id="3057861065630527966">आपले फोटो आणि व्हिडिओंचा बॅकअप घ्या</translation>
 <translation id="3060379269883947824">बोलण्यासाठी निवडा सुरू करा</translation>
 <translation id="3061707000357573562">पॅच सेवा</translation>
@@ -1388,7 +1388,7 @@
 <translation id="3076909148546628648"><ph name="DOWNLOAD_RECEIVED" />/<ph name="DOWNLOAD_TOTAL" /></translation>
 <translation id="3077734595579995578">shift</translation>
 <translation id="3078461028045006476"><ph name="EXTENSION_NAME" /> सह शेअर करा</translation>
-<translation id="3081564097391116951">आपोआप अपडेट होणे हे फक्त इथरनेट किंवा वाय-फाय वापरत असताना चालू असते.</translation>
+<translation id="3081564097391116951">आपोआप अपडेट होणे हे फक्त इथरनेट किंवा वाय-फाय वापरत असताना सुरू असते.</translation>
 <translation id="3082374807674020857"><ph name="PAGE_TITLE" /> - <ph name="PAGE_URL" /></translation>
 <translation id="308268297242056490">URI</translation>
 <translation id="3082780749197361769">हा टॅब आपला कॅमेरा किंवा मायक्रोफोन वापरत आहे.</translation>
@@ -1405,12 +1405,12 @@
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" जोडले</translation>
 <translation id="3101709781009526431">तारीख आणि वेळ</translation>
 <translation id="310671807099593501">साइट ब्लूटूथ वापरत आहे</translation>
-<translation id="3115128645424181617">तुमचा फोन आढळला नाही. तो सोयीस्कर असल्याची आणि ब्लुटूथ चालू असल्याची खात्री करा.</translation>
+<translation id="3115128645424181617">तुमचा फोन आढळला नाही. तो सोयीस्कर असल्याची आणि ब्लूटूथ सुरू असल्याची खात्री करा.</translation>
 <translation id="3115147772012638511">कॅशेसाठी प्रतीक्षा करीत आहे...</translation>
 <translation id="3118319026408854581"><ph name="PRODUCT_NAME" /> मदत</translation>
 <translation id="3120430004221004537">दिलेल्या ऑपरेशनसाठी यावर अपुरे कूटबद्धीकरण: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="3121793941267913344">हा <ph name="IDS_SHORT_PRODUCT_NAME" /> डिव्हाइस रीसेट करा</translation>
-<translation id="3122464029669770682">CPU</translation>
+<translation id="3122464029669770682">सीपीयू</translation>
 <translation id="3122496702278727796">डेटा निर्देशिका तयार करण्यात अयशस्वी</translation>
 <translation id="3124111068741548686">वापरकर्ता हँडल</translation>
 <translation id="3126026824346185272">Ctrl</translation>
@@ -1479,7 +1479,7 @@
 <translation id="3232318083971127729">मूल्य:</translation>
 <translation id="3236289833370040187">मालकी <ph name="DESTINATION_DOMAIN" /> कडे हस्तांतरित केली जाईल.</translation>
 <translation id="323803881985677942">विस्तार पर्याय उघडा</translation>
-<translation id="3241680850019875542">पॅक करण्यासाठी विस्ताराची मूळ निर्देशिका निवडा. एक विस्तार अपडेट करण्याकरिता, पुनर्वापरासाठी खाजगी की फाइल देखील निवडा.</translation>
+<translation id="3241680850019875542">पॅक करण्यासाठी एक्सटेंशनाची मूळ डिरेक्टरी निवडा. एक एक्सटेंशन अपडेट करण्याकरिता, पुनर्वापरासाठी खाजगी की फाइल देखील निवडा.</translation>
 <translation id="3244294424315804309">आवाज म्यूट करणे सुरू ठेवा</translation>
 <translation id="3245321423178950146">अज्ञात कलाकार</translation>
 <translation id="3246097286174000800">Smart Lock वापरून पहा</translation>
@@ -1510,7 +1510,7 @@
 <translation id="3280431534455935878">तयारी करीत आहे</translation>
 <translation id="3282568296779691940">Chrome वर साइन इन करा</translation>
 <translation id="3285322247471302225">नवीन &amp;टॅब</translation>
-<translation id="3288047731229977326">विकासक मोडमध्‍ये चालणारे विस्‍तार आपल्‍या संगणकास हानी पोहचवू शकतात. आपण विकासक नसल्‍यास, सुरक्षित राहाण्‍यासाठी विकासक मोडमध्‍ये चालणारे हे विस्‍तार आपण अक्षम करावे.</translation>
+<translation id="3288047731229977326">डेव्हलपर मोडमध्‍ये चालणारे विस्‍तार तुमच्या कॉंप्युटरास हानी पोहचवू शकतात. तुम्ही डेव्हलपर नसल्‍यास, सुरक्षित राहाण्‍यासाठी डेव्हलपर मोडमध्‍ये चालणारे हे विस्‍तार तुम्ही अक्षम करावे.</translation>
 <translation id="3289856944988573801">अपडेट तपासण्यासाठी, कृपया इथरनेट किंवा वाय-फाय वापरा.</translation>
 <translation id="3292421191230118801">तुमच्या Chromebook वर मोबाइलवरून सायटी पाहणे पुन्हा सुरू करा</translation>
 <translation id="32939749466444286">Linux कंटेनर सुरू झाले नाही. कृपया पुन्हा प्रयत्न करा.</translation>
@@ -1524,7 +1524,7 @@
 <translation id="3303855915957856445">कोणतेही शोध परिणाम आढळले नाहीत</translation>
 <translation id="3305329619209039989">स्पर्श बिंदू दाखवा</translation>
 <translation id="3305389145870741612">स्वरूपन प्रक्रियेस दोन सेकंद लागू शकतात. कृपया प्रतीक्षा करा.</translation>
-<translation id="3305661444342691068">पूर्वावलोकनात PDF उघडा</translation>
+<translation id="3305661444342691068">पूर्वावलोकनात पीडीएफ उघडा</translation>
 <translation id="3306684685104080068">Google Hangouts सारख्या क्लाउड-आधारित सेवांवर कास्ट करणे सक्षम करा.</translation>
 <translation id="3308006649705061278">संस्थात्मक एकक (OU)</translation>
 <translation id="3308116878371095290">हे पृष्ठ कुकीज सेट करण्यापासून प्रतिबंधित केलेले होते.</translation>
@@ -1536,7 +1536,7 @@
     आपण डीफॉल्ट सेटिंग्ज बदलत नसल्यास, 
 <ph name="USER_DISPLAY_NAME" />
     वेबवरील सर्व साइट ब्राउझ करू शकतो.</translation>
-<translation id="3313622045786997898">प्रमाणपत्र स्वाक्षरी मूल्य</translation>
+<translation id="3313622045786997898">सर्टिफिकेट स्वाक्षरी मूल्य</translation>
 <translation id="3315158641124845231"><ph name="PRODUCT_NAME" /> लपवा</translation>
 <translation id="3317459757438853210">दोन्ही बाजूंनी</translation>
 <translation id="3317678681329786349">कॅमेरा आणि मायक्रोफोन ब्लॉक केले आहेत</translation>
@@ -1561,14 +1561,14 @@
 <translation id="3355936511340229503">कनेक्शन एरर</translation>
 <translation id="3356797067524893661">Hangouts Meetवर सुरू ठेवण्यासाठी तुम्ही पूर्ण सज्ज आहात</translation>
 <translation id="3358935496594837302">तुमचा फोन आढळला नाही. तुम्ही सुसंगत Android फोन वापरत असल्याची आणि तो चालू व सोयीस्कर असल्याची खात्री करा. &lt;a&gt;आणखी जाणून घ्या&lt;/a&gt;</translation>
-<translation id="3359256513598016054">प्रमाणपत्र धोरण प्रतिबंध</translation>
+<translation id="3359256513598016054">सर्टिफिकेट धोरण प्रतिबंध</translation>
 <translation id="3360297538363969800">प्रिंट अयशस्वी. कृपया आपला प्रिंटर तपासा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="3364721542077212959">लेखणी साधने</translation>
 <translation id="3365598184818502391">एकतर Ctrl किंवा Alt वापरा</translation>
 <translation id="3367047597842238025">तुम्हाला जसे हवे तसे तुमचे <ph name="DEVICE_TYPE" /> सेट करा आणि सहजरीत्या सर्व अद्भूत क्षमता शोधा.</translation>
 <translation id="3368922792935385530">कनेक्ट केले</translation>
 <translation id="3369624026883419694">होस्टचे निराकरण करीत आहे...</translation>
-<translation id="337286756654493126">अनुप्रयोगामध्ये आपण उघडता ती फोल्डर वाचा</translation>
+<translation id="337286756654493126">अॅप्समध्ये तुम्ही उघडता ती फोल्डर वाचा</translation>
 <translation id="3378503599595235699">आपण आपला ब्राउझर सोडेपर्यंत फक्त स्थानिक डेटा ठेवा</translation>
 <translation id="3378572629723696641">हा विस्तार दूषित झालेला असू शकतो.</translation>
 <translation id="3378630551672149129">साइन इन करा, इनपुट घटकांसह संवाद साधण्यासाठी टॅब की दाबा</translation>
@@ -1613,7 +1613,7 @@
 <translation id="3437801641691368414">तयार केल्याची वेळ</translation>
 <translation id="3438633801274389918">निन्जा</translation>
 <translation id="3439153939049640737">आपल्या मायक्रोफोनवर प्रवेश करण्यासाठी <ph name="HOST" /> ला नेहमी अनुमती द्या</translation>
-<translation id="3439970425423980614">पूर्वावलोकनात PDF उघडत आहे</translation>
+<translation id="3439970425423980614">पूर्वावलोकनात पीडीएफ उघडत आहे</translation>
 <translation id="3440663250074896476"><ph name="BOOKMARK_NAME" /> साठी अधिक क्रिया</translation>
 <translation id="3440761377721825626">एखादी साइट आपल्या संगणकावर प्रवेश करण्यासाठी प्लगिन वापरू इच्छिते तेव्हा विचारा</translation>
 <translation id="3441653493275994384">तपासा</translation>
@@ -1648,7 +1648,7 @@
 <translation id="3479552764303398839">सध्या नाही</translation>
 <translation id="3480892288821151001">विंडो डावीकडे आणा</translation>
 <translation id="3484273680291419129">धोकादायक सॉफ्टवेअर काढत आहे...</translation>
-<translation id="3484869148456018791">नवीन प्रमाणपत्र मिळवा</translation>
+<translation id="3484869148456018791">नवीन सर्टिफिकेट मिळवा</translation>
 <translation id="3487007233252413104">अनामित कार्य</translation>
 <translation id="348780365869651045">AppCache ची प्रतिक्षा करीत आहे...</translation>
 <translation id="3488065109653206955">आंशिक रूपात सक्रिय </translation>
@@ -1694,8 +1694,8 @@
 <translation id="3552780134252864554">बाहेर पडताना साफ केले</translation>
 <translation id="3555812735919707620">विस्तार काढा</translation>
 <translation id="3556000484321257665">आपले शोध इंजिन <ph name="URL" /> मध्‍ये बदलले.</translation>
-<translation id="3563432852173030730">कियोस्क अॅप्लिकेशन डाउनलोड केला जाऊ शकला नाही.</translation>
-<translation id="3564334271939054422">आपण वापरत असलेल्या (<ph name="NETWORK_ID" />) वाय-फाय नेटवर्कला आपण त्याच्या लॉग इन पृष्ठास भेट देणे आवश्यक असू शकते.</translation>
+<translation id="3563432852173030730">कियोस्क अॅप्लिकेशन डाउनलोड केले जाऊ शकले नाही.</translation>
+<translation id="3564334271939054422">तुम्ही वापरत असलेल्या (<ph name="NETWORK_ID" />) वाय-फाय नेटवर्कला तुम्ही त्याच्या लॉग इन पेजला भेट देणे आवश्यक असू शकते.</translation>
 <translation id="3564848315152754834">USB सिक्युरिटी की</translation>
 <translation id="3566721612727112615">कोणत्याही साइट जोडल्या नाहीत</translation>
 <translation id="3569382839528428029"><ph name="APP_NAME" /> नी तुमची स्क्रीन सामायिक करावी असे आपण इच्छिता?</translation>
@@ -1714,14 +1714,14 @@
 <translation id="3590194807845837023">प्रोफाईल अनलॉक करा आणि रीलाँच करा</translation>
 <translation id="3592260987370335752">&amp;अधिक जाणून घ्या</translation>
 <translation id="359283478042092570">एंटर करा</translation>
-<translation id="3593965109698325041">प्रमाणपत्र नाव प्रतिबंध</translation>
+<translation id="3593965109698325041">सर्टिफिकेट नाव प्रतिबंध</translation>
 <translation id="3594089623005973443">प्रति पत्रक पेज</translation>
 <translation id="3596235046596950091">क्लाउड सेवा सक्षम करा</translation>
 <translation id="3599863153486145794">साइन-इन केलेल्या सर्व डिव्हाइसमधून इतिहास साफ करते. तुमच्या Google खात्यामध्ये <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> वर कदाचित ब्राउझिंगचे इतर फॉर्म असतील.</translation>
 <translation id="3600792891314830896">ध्वनी प्ले करणाऱ्या साइट म्यूट करा</translation>
 <translation id="3602290021589620013">पूर्वावलोकन</translation>
 <translation id="3603533104205588786">तुम्ही पेज बुकमार्क करण्यासाठी तारावर क्लिक करू शकता</translation>
-<translation id="3603622770190368340">नेटवर्क प्रमाणपत्र प्राप्त करा</translation>
+<translation id="3603622770190368340">नेटवर्क सर्टिफिकेट प्राप्त करा</translation>
 <translation id="3604048165392640554">कोणतेही मोबाइल कनेक्शन सापडले नाही. तुमच्या दुसऱ्या डीव्हाइसवर इन्स्टंट टेदरिंग चालू करा आणि पुन्हा प्रयत्न करा. &lt;a target="_blank" href="<ph name="URL" />"&gt;अधिक जाणून घ्या&lt;/a&gt;</translation>
 <translation id="3605780360466892872">बटनडाउन</translation>
 <translation id="3606712892509067288">Better Together वरून काढा</translation>
@@ -1745,7 +1745,7 @@
 <translation id="3626281679859535460">ब्राइटनेस</translation>
 <translation id="3627320433825461852">1 मिनिटापेक्षा कमी बाकी</translation>
 <translation id="3627588569887975815">गु&amp;प्त विंडोमध्ये दुवा उघडा</translation>
-<translation id="3627671146180677314">Netscape प्रमाणपत्र नूतनीकरण वेळ</translation>
+<translation id="3627671146180677314">Netscape सर्टिफिकेट रिन्यूअल वेळ</translation>
 <translation id="3627879631695760395"><ph name="APP" /> इंस्टॉल करा...</translation>
 <translation id="3630132874740063857">तुमचा फोन</translation>
 <translation id="3630995161997703415">कधीही वापरण्‍यासाठी ही साइट तुमच्या शेल्‍फवर जोडा</translation>
@@ -1772,17 +1772,17 @@
 <translation id="3668570675727296296">भाषा सेटिंग्ज</translation>
 <translation id="3668801437375206837">ब्लूटूथ समस्यांचे निदान चांगल्या प्रकारे करण्यासाठी, Googlers त्यांच्या फीडबॅक अहवालासह अतिरिक्त ब्लूटूथ लॉगचा समावेश करू शकतात. हा पर्याय निवडल्यास, तुमच्या अहवालात तुमच्या सध्याच्या सत्रातून शक्य तेवढे PII काढून टाकण्यासाठी btsnoop आणि HCI लॉगचा समावेश असेल. या लॉगचा अॅक्सेस Listnr मधील Chrome OS उत्पादन गटाच्या व्यवस्थापकांपर्यंत मर्यादित राहिल. ९० दिवसांनंतर लॉग कायमचे काढून टाकले जातील.</translation>
 <translation id="3668823961463113931">हँडलर</translation>
-<translation id="3670229581627177274">Bluetooth चालू करा</translation>
+<translation id="3670229581627177274">ब्लूटूथ सुरू करा</translation>
 <translation id="3672681487849735243">एक फॅक्टरी एरर शोधली गेली</translation>
-<translation id="367645871420407123">आपण डीफॉल्ट चाचणी इमेज मूल्यामध्ये मूळ पासवर्ड सेट करू इच्छित असल्यास रिक्त सोडा</translation>
+<translation id="367645871420407123">तुम्ही डीफॉल्ट चाचणी इमेज मूल्यामध्ये मूळ पासवर्ड सेट करू इच्छित असल्यास रिक्त सोडा</translation>
 <translation id="3677657024345889897">सर्वात शांत</translation>
 <translation id="3678156199662914018">विस्तारः <ph name="EXTENSION_NAME" /></translation>
-<translation id="3681311097828166361">आपल्या अभिप्रायाबद्दल धन्यवाद. आपण आता ऑफलाइन आहात आणि आपला अहवाल नंतर पाठविला जाईल.</translation>
+<translation id="3681311097828166361">तुमच्या फीडबॅकाबद्दल धन्यवाद. तुम्ही आता ऑफलाइन आहात आणि तुमचा अहवाल नंतर पाठविला जाईल.</translation>
 <translation id="3683023058278427253">आम्ही तुमच्या डोमेनसाठी असलेले एकाधिक परवाने प्रकार शोधले आहेत. कृपया सुरू ठेवण्यासाठी एक निवडा.</translation>
 <translation id="3683524264665795342"><ph name="APP_NAME" /> स्क्रीन सामायिकरण विनंती</translation>
 <translation id="3685122418104378273">मोबाईल डेटा वापरला जातो, तेव्हा Google ड्राइव्ह संकालन डीफॉल्टनुसार अक्षम केले जाते.</translation>
 <translation id="368789413795732264">ही फाइल राइट करण्याचा प्रयत्न करताना एखादी एरर आली:<ph name="ERROR_TEXT" />.</translation>
-<translation id="3688507211863392146">आपण अनुप्रयोगामध्ये उघडता त्या फायलींमध्ये आणि फोल्डरमध्ये लिहा</translation>
+<translation id="3688507211863392146">तुम्ही अॅप्समध्ये उघडता त्या फायलींमध्ये आणि फोल्डरमध्ये लिहा</translation>
 <translation id="3688526734140524629">चॅनेल बदला</translation>
 <translation id="3688578402379768763">अद्ययावत</translation>
 <translation id="3691231116639905343">कीबोर्ड अॅप्स</translation>
@@ -1857,7 +1857,7 @@
 <translation id="3783640748446814672">alt</translation>
 <translation id="3785308913036335955">अ‍ॅप्स शॉर्टकट दर्शवा</translation>
 <translation id="3785727820640310185">या साइटसाठी सेव्ह केलेले पासवर्ड</translation>
-<translation id="3786301125658655746">आपण ऑफलाइन आहात</translation>
+<translation id="3786301125658655746">तुम्ही ऑफलाइन आहात</translation>
 <translation id="3788401245189148511">ते करू शकले असते:</translation>
 <translation id="3789841737615482174">स्थापना करा</translation>
 <translation id="379082410132524484">तुमचे कार्ड एक्सपायर झालेले आहे</translation>
@@ -1867,7 +1867,7 @@
 <translation id="3798449238516105146">आवृत्ती</translation>
 <translation id="3799201711591988491">{COUNT,plural, =0{आणि सर्व उघडा}=1{आणि बुकमार्क उघडा}one{आणि सर्व (#) उघडा}other{आणि सर्व (#) उघडा}}</translation>
 <translation id="3800806661949714323">सर्व दर्शवा (शिफारस केलेले)</translation>
-<translation id="380408572480438692">कार्यप्रदर्शन डेटाचे संकलन सक्षम केल्याने वेळोवेळी सिस्टम सुधारण्यात Google ला मदत होईल. आपण एक अभिप्राय अहवाल दाखल करेपर्यंत (Alt-Shift-I) आणि कार्यप्रदर्शन डेटा समाविष्ट करेपर्यंत कोणताही डेटा पाठविला जात नाही. आपण संकलन अक्षम करण्यासाठी या स्क्रीनवर कधीही परत येऊ शकता.</translation>
+<translation id="380408572480438692">कार्यडिस्प्ले डेटाचे संकलन सक्षम केल्याने वेळोवेळी सिस्टम सुधारण्यात Google ला मदत होईल. तुम्ही एक फीडबॅक अहवाल दाखल करेपर्यंत (Alt-Shift-I) आणि कार्यडिस्प्ले डेटा समाविष्ट करेपर्यंत कोणताही डेटा पाठविला जात नाही. तुम्ही संकलन अक्षम करण्यासाठी या स्क्रीनवर कधीही परत येऊ शकता.</translation>
 <translation id="3806965327722135869">हानिकारक सॉफ्टवेअर शोधा आणि काढा</translation>
 <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> लॉगिन स्क्रीनवर (विस्तार आयडी "<ph name="EXTENSION_ID" />") ची अनुमती नाही.</translation>
 <translation id="3807747707162121253">&amp;रद्द करा</translation>
@@ -1875,7 +1875,7 @@
 <translation id="3810973564298564668">व्यवस्थापित करा</translation>
 <translation id="3811494700605067549">1 फाईल निवडली</translation>
 <translation id="381202950560906753">दुसरे जोडा</translation>
-<translation id="3812525830114410218">खराब प्रमाणपत्र</translation>
+<translation id="3812525830114410218">खराब सर्टिफिकेट</translation>
 <translation id="3813296892522778813">आपण जे शोधत आहात ते आपल्याला सापडले नसेल तर <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome मदत<ph name="END_LINK_CHROMIUM" /> वर जा</translation>
 <translation id="3813984289128269159">Ok Google</translation>
 <translation id="3817579325494460411">प्रदान केले नाही</translation>
@@ -1892,7 +1892,7 @@
 <translation id="3831436149286513437">Google ड्राइव्ह शोध सूचना</translation>
 <translation id="3831486154586836914">विंडो विहंगावलोकन मोड एंटर केला</translation>
 <translation id="383161972796689579">या डिव्हाइसच्या मालकाने नवीन वापरकर्त्यांना जोडले जाण्यापासून अक्षम केले आहे</translation>
-<translation id="3834775135533257713">"<ph name="INSTALLED_APP_NAME" />" सह संघर्ष असल्याने "<ph name="TO_INSTALL_APP_NAME" />" मध्ये अॅप्लिकेशन जोडणे शक्य झाले नाही.</translation>
+<translation id="3834775135533257713">"<ph name="INSTALLED_APP_NAME" />" सह संघर्ष असल्याने "<ph name="TO_INSTALL_APP_NAME" />" मध्ये अॅप्स जोडणे शक्य झाले नाही.</translation>
 <translation id="3835522725882634757">ओहो! हा सर्व्हर <ph name="PRODUCT_NAME" /> समजू शकत नाही असा डेटा पाठवित आहे. कृपया <ph name="BEGIN_LINK" />एक दोष नोंदवा<ph name="END_LINK" /> आणि <ph name="BEGIN2_LINK" />मूळ सूची<ph name="END2_LINK" /> समाविष्ट करा.</translation>
 <translation id="3838085852053358637">विस्तार लोड करण्‍यात अयशस्वी झाले</translation>
 <translation id="3838486795898716504">अधिक <ph name="PAGE_TITLE" /></translation>
@@ -1919,7 +1919,7 @@
 <translation id="3865414814144988605">रिझोल्यूशन</translation>
 <translation id="386548886866354912"><ph name="EXTENSION_NAME" /> सह पॅक</translation>
 <translation id="3866249974567520381">वर्णन</translation>
-<translation id="3867944738977021751">प्रमाणपत्र फील्ड</translation>
+<translation id="3867944738977021751">सर्टिफिकेट फील्ड</translation>
 <translation id="3869917919960562512">चुकीची अनुक्रमणिका</translation>
 <translation id="3870931306085184145"><ph name="DOMAIN" /> साठी सेव्ह केलेले पासवर्ड नाहीत</translation>
 <translation id="3871092408932389764">सर्वात कमी</translation>
@@ -1949,7 +1949,7 @@
 <translation id="3915280005470252504">व्हॉइसनुसार शोधा</translation>
 <translation id="3916445069167113093">या प्रकारची फाइल आपल्या संगणकास हानी पोहचवू शकते. आपण तरीसुद्धा <ph name="FILE_NAME" /> ठेवू इच्छिता?</translation>
 <translation id="3918972485393593704">Googleला तपशील द्या</translation>
-<translation id="3920504717067627103">प्रमाणपत्र धोरणे</translation>
+<translation id="3920504717067627103">सर्टिफिकेट धोरणे</translation>
 <translation id="392089482157167418">ChromeVox (बोललेला अभिप्राय) सक्षम करा</translation>
 <translation id="3924145049010392604">Meta</translation>
 <translation id="3925573269917483990">कॅमेराः</translation>
@@ -1961,15 +1961,15 @@
 <translation id="3933283459331715412"><ph name="USERNAME" /> चा हटवलेला पासवर्ड रिस्‍टोअर करा</translation>
 <translation id="3936335337858561470">हे डिव्हाइस विसरा</translation>
 <translation id="3936390757709632190">नवीन टॅबमध्ये ऑडिओ &amp;उघडा</translation>
-<translation id="3936925983113350642">आपण निवडता तो पासवर्ड नंतर हे प्रमाणपत्र पुनर्संचयित करण्यासाठी आवश्यक आहे. कृपया एखाद्या सुरक्षित स्थानावर त्याची नोंद ठेवा.</translation>
-<translation id="3937640725563832867">प्रमाणपत्र जारीकर्ता वैकल्पिक नाव</translation>
+<translation id="3936925983113350642">तुम्ही निवडता तो पासवर्ड नंतर हे सर्टिफिकेट पुनर्संचयित करण्यासाठी आवश्यक आहे. कृपया एखाद्या सुरक्षित स्थानावर त्याची नोंद ठेवा.</translation>
+<translation id="3937640725563832867">सर्टिफिकेट जारीकर्ता वैकल्पिक नाव</translation>
 <translation id="3937734102568271121">नेहमी <ph name="LANGUAGE" /> मध्‍ये भाषांतर करा</translation>
 <translation id="3940233957883229251">स्वयं-पुनरावृत्ती सक्षम करा</translation>
 <translation id="3941357410013254652">चॅनेल आयडी</translation>
-<translation id="3941565636838060942">या प्रोग्रामवरील प्रवेश लपविण्यासाठी, आपल्याला नियंत्रण पॅनेलमधील
+<translation id="3941565636838060942">या प्रोग्रामवरील अॅक्सेस लपविण्यासाठी, तुम्हाला नियंत्रण पॅनेलमधील
   <ph name="CONTROL_PANEL_APPLET_NAME" /> वापरून तो अनइंस्टॉल करण्याची आवश्यकता आहे.
 
-  आपण <ph name="CONTROL_PANEL_APPLET_NAME" /> प्रारंभ करू इच्छिता?</translation>
+  तुम्ही <ph name="CONTROL_PANEL_APPLET_NAME" /> सुरू करू इच्छिता?</translation>
 <translation id="394183848452296464">शॉर्टकट तयार करू शकत नाही</translation>
 <translation id="3943582379552582368">&amp;मागील</translation>
 <translation id="3943857333388298514">पेस्ट करा</translation>
@@ -2031,7 +2031,7 @@
 <translation id="4037889604535939429">व्यक्ती संपादित करा</translation>
 <translation id="4042264909745389898">Google Chrome OS अटी</translation>
 <translation id="4042863763121826131">{NUM_PAGES,plural, =1{पेजमधून बाहेर या}one{पेजमधून बाहेर या}other{पेजमधून बाहेर या}}</translation>
-<translation id="4044612648082411741">आपला प्रमाणपत्र पासवर्ड एंटर करा</translation>
+<translation id="4044612648082411741">तुमचा सर्टिफिकेट पासवर्ड एंटर करा</translation>
 <translation id="404493185430269859">डीफॉल्ट शोध इंजिन</translation>
 <translation id="4047112090469382184">हे कसे सुरक्षित आहे</translation>
 <translation id="4051049974203704184">स्क्रीनवर काय आहे याबाबत माहिती मिळवा</translation>
@@ -2044,13 +2044,13 @@
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">त्वरित दस्तऐवज तपासा</translation>
 <translation id="406070391919917862">पार्श्वभूमी अॅप्लिकेशन</translation>
-<translation id="4063283930106169759">तुमचा फोन जवळपास असल्याची खात्री करा. तुमचा फोन शोधण्यासाठी तुमच्या खात्यामधील सर्व डीव्हाइसचे ब्लुटूथ सुरू करण्यात येईल. &lt;a&gt;आणखी जाणून घ्या&lt;/a&gt;</translation>
+<translation id="4063283930106169759">तुमचा फोन जवळपास असल्याची खात्री करा. तुमचा फोन शोधण्यासाठी तुमच्या खात्यामधील सर्व डीव्हाइसचे ब्लूटूथ सुरू करण्यात येईल. &lt;a&gt;आणखी जाणून घ्या&lt;/a&gt;</translation>
 <translation id="4065876735068446555">आपण वापरत असलेल्या (<ph name="NETWORK_ID" />) नेटवर्कला त्याच्या लॉग इन पृष्ठास भेट देण्याची आवश्यकता असू शकते.</translation>
 <translation id="4068506536726151626">या पृष्ठावर आपले स्थान ट्रॅक करणार्‍या खालील साइटवरील घटक समाविष्ट आहेत:</translation>
 <translation id="4068776064906523561">फिंगरप्रिंट सेव्ह केले</translation>
 <translation id="407173827865827707">क्लिकवर</translation>
 <translation id="4071770069230198275"><ph name="PROFILE_NAME" />: साइन इन एरर</translation>
-<translation id="4074900173531346617">ईमेल स्वाक्षरीकर्ता प्रमाणपत्र</translation>
+<translation id="4074900173531346617">ईमेल स्वाक्षरीकर्ता सर्टिफिकेट</translation>
 <translation id="407520071244661467">स्केल</translation>
 <translation id="4075639477629295004"><ph name="FILE_NAME" /> कास्ट करू शकलो नाही.</translation>
 <translation id="4077917118009885966">या साइटवर जाहिराती ब्लॉक केल्या आहेत</translation>
@@ -2067,9 +2067,9 @@
 <translation id="4090947011087001172"><ph name="SITE" /> साठी साइट परवानग्या रीसेट करायच्या?</translation>
 <translation id="4091434297613116013">कागदी पत्रके</translation>
 <translation id="4093955363990068916">स्थानिक फाईल:</translation>
-<translation id="4095507791297118304">प्राथमिक प्रदर्शन</translation>
+<translation id="4095507791297118304">प्राथमिक डिस्प्ले</translation>
 <translation id="409579654357498729">क्लाउड प्रिंट वर जोडा</translation>
-<translation id="4096508467498758490">विकासक मोड विस्तार अक्षम करा</translation>
+<translation id="4096508467498758490">डेव्हलपर मोड एक्स्टेंशन अक्षम करा</translation>
 <translation id="4096824249111507322">सुरक्षित मॉड्यूल तयार केले जात आहे, कृपया थांबा (यासाठी काही मिनिटे लागू शकतात)...</translation>
 <translation id="4099060993766194518">डीफॉल्ट शोध इंजिन पुनर्संचयित करायचे?</translation>
 <translation id="4100733287846229632">डिव्हाइस वरील स्थान खूप कमी आहे</translation>
@@ -2097,7 +2097,7 @@
 <translation id="4146026355784316281">नेहमी सिस्टम दर्शकासह उघडा</translation>
 <translation id="4146785383423576110">रीसेट करा आणि साफ करा</translation>
 <translation id="4147897805161313378">Google फोटो</translation>
-<translation id="4150201353443180367">डिस्प्ले</translation>
+<translation id="4150201353443180367">डिस्प्ले करा</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 टॅब}one{# टॅब}other{# टॅब}}</translation>
 <translation id="4154664944169082762">बोटाचा ठसा</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -2109,10 +2109,10 @@
 <translation id="4172051516777682613">नेहमी दर्शवा</translation>
 <translation id="4175737294868205930">सातत्यपूर्ण स्टोरेज</translation>
 <translation id="4176463684765177261">अक्षम</translation>
-<translation id="4180788401304023883">CA प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
+<translation id="4180788401304023883">CA सर्टिफिकेट "<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
 <translation id="4181602000363099176">२०x</translation>
 <translation id="4181841719683918333">भाषा</translation>
-<translation id="4184885522552335684">प्रदर्शन हलविण्यासाठी ड्रॅग करा</translation>
+<translation id="4184885522552335684">डिस्प्ले हलविण्यासाठी ड्रॅग करा</translation>
 <translation id="4192273449750167573">पुढील स्क्रीनवरील तुमच्या सेटिंग्जचे पुनरावलोकन करा</translation>
 <translation id="4193154014135846272">Google दस्तऐवज</translation>
 <translation id="4194570336751258953">टॅप-टू-क्लिक सक्षम करा</translation>
@@ -2129,7 +2129,7 @@
 <translation id="4208390505124702064"><ph name="SITE_NAME" /> शोधा</translation>
 <translation id="4209092469652827314">मोठा</translation>
 <translation id="4209464433672152343">दस्तऐवज प्रिंट करण्यासाठी <ph name="BEGIN_LINK_HELP" />Google कडे पाठवले<ph name="END_LINK_HELP" /> आहेत. <ph name="BEGIN_LINK_DASHBOARD" />Google क्लाउड प्रिंट डॅशबोर्ड<ph name="END_LINK_DASHBOARD" /> वर तुमचे प्रिंटर आणि प्रिंटर इतिहास पहा, संपादित करा आणि व्यवस्थापित करा.</translation>
-<translation id="421017592316736757">या फाइलमध्ये प्रवेश करण्‍यासाठी आपण ऑनलाइन असणे आवश्यक आहे.</translation>
+<translation id="421017592316736757">या फाइलमध्ये अॅक्सेस करण्‍यासाठी तुम्ही ऑनलाइन असणे आवश्यक आहे.</translation>
 <translation id="421182450098841253">बुकमार्क बार &amp;दर्शवा</translation>
 <translation id="42126664696688958">निर्यात</translation>
 <translation id="42137655013211669">सर्व्हरद्वारे या स्त्रोतामधील प्रवेश निषिद्ध केला होता.</translation>
@@ -2181,7 +2181,6 @@
 <translation id="4296575653627536209">पर्यवेक्षी वापरकर्ता जोडा</translation>
 <translation id="4297219207642690536">रीस्टार्ट करा आणि रीसेट करा</translation>
 <translation id="4297322094678649474">भाषा बदला</translation>
-<translation id="4300305918532693141">ही सेटिंग बदलण्यासाठी, <ph name="BEGIN_LINK" />संकालन रीसेट करा<ph name="END_LINK" /></translation>
 <translation id="4305227814872083840">मोठा (2s)</translation>
 <translation id="4306119971288449206">अॅप्स "<ph name="CONTENT_TYPE" />" आशय प्रकारासह दिली जाणे आवश्यक आहे</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K लाइव्ह)</translation>
@@ -2207,24 +2206,24 @@
 <translation id="4356334633973342967">किंवा आपल्या स्वत:चा ड्राइव्हर निर्दिष्ट करा:</translation>
 <translation id="4358353773267946514"><ph name="LANGUAGE_1" />, <ph name="LANGUAGE_2" /></translation>
 <translation id="4359408040881008151">अवलंबून असलेल्या विस्तारा(रां) मुळे इंस्टॉल केले.</translation>
-<translation id="4361142739114356624">या क्लायंट प्रमाणपत्रासाठी खाजगी की गहाळ किंवा अवैध आहे</translation>
+<translation id="4361142739114356624">या क्लायंट सर्टिफिकेटसाठी खाजगी की गहाळ किंवा अवैध आहे</translation>
 <translation id="4363771538994847871">कोणतीही कास्ट गंतव्यस्थाने सापडली नाहीत. मदत हवी आहे?</translation>
 <translation id="4364567974334641491"><ph name="APP_NAME" /> विंडो सामायिक करीत आहे.</translation>
-<translation id="4364830672918311045">सूचना प्रदर्शित करा</translation>
+<translation id="4364830672918311045">सूचना डिस्प्ले करा</translation>
 <translation id="4365673000813822030">अरेरे, समक्रमणाने काम करणे थांबवले आहे.</translation>
 <translation id="4370975561335139969">आपण एंटर केलेला ईमेल आणि पासवर्ड जुळत नाही</translation>
 <translation id="437184764829821926">प्रगत फॉन्ट सेटिंग्ज</translation>
 <translation id="4372884569765913867">1x1</translation>
 <translation id="4374831787438678295">Linux इंस्टॉलर</translation>
 <translation id="4375035964737468845">डाउनलोड केलेल्या फायली उघडा</translation>
-<translation id="4377363674125277448">सर्व्हरच्या प्रमाणपत्रास समस्या आली.</translation>
+<translation id="4377363674125277448">सर्व्हरच्या सर्टिफिकेटस समस्या आली.</translation>
 <translation id="4378154925671717803">फोन</translation>
 <translation id="4378551569595875038">कनेक्ट करीत आहे...</translation>
 <translation id="4378556263712303865">डीव्हाइसची मागणी</translation>
 <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="439266289085815679">ब्लूटूथ कॉन्फिगरेशन <ph name="USER_EMAIL" /> नियंत्रित करते.</translation>
 <translation id="4394049700291259645">अक्षम करा</translation>
@@ -2299,7 +2298,7 @@
 <translation id="4522570452068850558">तपशील</translation>
 <translation id="4522600456902129422">या साइटला क्लिपबोर्ड पाहण्याची नेहमी अनुमती द्या</translation>
 <translation id="4530494379350999373">मूळ</translation>
-<translation id="4533985347672295764">CPU वेळ</translation>
+<translation id="4533985347672295764">सीपीयू वेळ</translation>
 <translation id="4534661889221639075">पुन्हा प्रयत्न करा.</translation>
 <translation id="4535127706710932914">डीफॉल्ट प्रोफाइल</translation>
 <translation id="4538417792467843292">शब्द हटवा </translation>
@@ -2308,7 +2307,7 @@
 <translation id="4539754285405390318">Better Together हे करू शकते:</translation>
 <translation id="4542520061254486227"><ph name="WEBSITE_1" /> आणि <ph name="WEBSITE_2" /> वर आपला डेटा वाचा</translation>
 <translation id="4543733025292526486">esc</translation>
-<translation id="4543778593405494224">प्रमाणपत्र व्यवस्थापक</translation>
+<translation id="4543778593405494224">सर्टिफिकेट व्यवस्थापक</translation>
 <translation id="4544174279960331769">डीफॉल्ट निळा अवतार</translation>
 <translation id="4545028762441890696">पुन्हा चालू करण्यासाठी, नवीन परवानग्या मंजूर करा:</translation>
 <translation id="454547174531670764">दुसर्‍या खात्याशी सिंक करा</translation>
@@ -2334,7 +2333,7 @@
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना प्रमाणीकरण रद्द झाले.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> फाइल</translation>
 <translation id="457386861538956877">अधिक...</translation>
-<translation id="4576541033847873020">Bluetooth डिव्हाइस जोडा</translation>
+<translation id="4576541033847873020">ब्लूटूथ डिव्हाइस जोडा</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> कास्ट करण्यात अक्षम.</translation>
 <translation id="4580526846085481512">तुमची खात्री आहे की आपण $1 आयटम हटवू इच्छिता?</translation>
 <translation id="4582497162516204941">Linux (बीटा) इंस्टॉल करा</translation>
@@ -2347,7 +2346,7 @@
 <translation id="4595560905247879544">अॅप्स आणि विस्तार केवळ (<ph name="CUSTODIAN_NAME" />) व्यवस्थापकाद्वारे सुधारित केले जाऊ शकतात.</translation>
 <translation id="4596295440756783523">आपल्‍याकडे फाईलवर अशी प्रमाणपत्रे आहेत जी या सर्व्हरला ओळखतात</translation>
 <translation id="4598556348158889687">स्टोरेज व्यवस्थापन</translation>
-<translation id="4598776695426288251">एकाधिक डिव्हाइसद्वारे वाय-फाय उपलब्ध आहे</translation>
+<translation id="4598776695426288251">एकाहून अधिक डिव्हाइसद्वारे वाय-फाय उपलब्ध आहे</translation>
 <translation id="4602466770786743961">नेहमी <ph name="HOST" /> ला आपल्या कॅमेरा आणि मायक्रोफोनवर प्रवेश करण्‍यास अनुमती द्या</translation>
 <translation id="4608500690299898628">&amp;शोधा...</translation>
 <translation id="4608520674724523647">यशस्वी नोंदणीचे उदाहरण</translation>
@@ -2413,7 +2412,7 @@
 <translation id="4699172675775169585">कॅश   इमेज आणि फायली</translation>
 <translation id="4699357559218762027">(स्वयं-लाँच केलेले)</translation>
 <translation id="4707302005824653064">chrome.com वरील व्यवस्थापकाद्वारे (<ph name="CUSTODIAN_EMAIL" />) वापर आणि इतिहासाचे पुनरावलोकन केले जाऊ शकते.</translation>
-<translation id="4707579418881001319">L2TP/IPsec + वापरकर्ता प्रमाणपत्र</translation>
+<translation id="4707579418881001319">L2TP/IPsec + वापरकर्ता सर्टिफिकेट</translation>
 <translation id="4707934200082538898">कृपया पुढील सूचनांसाठी <ph name="BEGIN_BOLD" /><ph name="MANAGER_EMAIL" /><ph name="END_BOLD" /> येथे आपले ईमेल तपासा.</translation>
 <translation id="4708794300267213770">निष्क्रियवरून सक्रिय होताना लॉक स्क्रीन दर्शवा</translation>
 <translation id="4708849949179781599"><ph name="PRODUCT_NAME" /> मधून बाहेर या</translation>
@@ -2550,7 +2549,7 @@
 <translation id="4890773143211625964">प्रगत प्रिंटर पर्याय दर्शवा</translation>
 <translation id="4891089016822695758">बीटा फोरम</translation>
 <translation id="4893336867552636863">हे या डिव्‍हाइस वरून आपला ब्राउझिंग डेटा कायमचा हटवेल.</translation>
-<translation id="4898011734382862273">प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" प्रमाणन अधिकृतता प्रस्तुत करते</translation>
+<translation id="4898011734382862273">सर्टिफिकेट "<ph name="CERTIFICATE_NAME" />" प्रमाणन अधिकृतता प्रस्तुत करते</translation>
 <translation id="489985760463306091">धोकादायक सॉफ्टवेअर काढणे पूर्ण करण्यासाठी तुमचा काँप्युटर रीस्टार्ट करा</translation>
 <translation id="4900392736118574277">आपले प्रारंभ पृष्ठ <ph name="URL" /> मध्‍ये बदलले.</translation>
 <translation id="490074449735753175">शब्दलेखन त्रुटींच्या निराकरणात मदतीसाठी वेब सेवा वापरा</translation>
@@ -2623,7 +2622,7 @@
 <translation id="499955951116857523">फाईल व्यवस्थापक</translation>
 <translation id="5000922062037820727">अवरोधित केली (शिफारस केलेले)</translation>
 <translation id="5004584466530475658"><ph name="FILE_COUNT" /> नवीन फोटो</translation>
-<translation id="5010043101506446253">प्रमाणपत्र अधिकारी</translation>
+<translation id="5010043101506446253">सर्टिफिकेट अधिकारी</translation>
 <translation id="5010929733229908807"><ph name="TIME" />
 
           वाजता सर्व डेटा आपल्या संकालित संकेतशब्दासह कूटबद्ध केला गेला</translation>
@@ -2634,7 +2633,7 @@
 <translation id="5018207570537526145">विस्तार वेबसाइट उघडा</translation>
 <translation id="5024856940085636730">ऑपरेशनला अपेक्षेपेक्षा जास्त वेळ लागत आहे. आपण हे निरस्त करू इच्छिता?</translation>
 <translation id="5026874946691314267">हे पुन्हा दर्शवू नका</translation>
-<translation id="5027550639139316293">ईमेल प्रमाणपत्र</translation>
+<translation id="5027550639139316293">ईमेल सर्टिफिकेट</translation>
 <translation id="5027562294707732951">विस्तार जोडा</translation>
 <translation id="5029568752722684782">कॉपी साफ करा</translation>
 <translation id="5030338702439866405">द्वारा जारी</translation>
@@ -2678,7 +2677,7 @@
 <translation id="5094721898978802975">मूळ अनुप्रयोगांना सहकार्य करून संवाद प्रस्थापित करा</translation>
 <translation id="5097002363526479830">'<ph name="NAME" />': नेटवर्कशी कनेक्ट करण्यात अयशस्वी. <ph name="DETAILS" /></translation>
 <translation id="5099354524039520280">वर</translation>
-<translation id="5100114659116077956">तुमच्यासाठी नवीनतम वैशिष्ट्ये आणण्यासाठी, आपला Chromebox अपडेट करण्‍याची आवश्यकता आहे.</translation>
+<translation id="5100114659116077956">तुमच्यासाठी नवीनतम वैशिष्ट्ये आणण्यासाठी, तुमचा Chromebox अपडेट करण्‍याची आवश्यकता आहे.</translation>
 <translation id="5101042277149003567">सर्व बुकमार्क उघडा</translation>
 <translation id="5105855035535475848">पिन टॅब</translation>
 <translation id="5108967062857032718">सेटिंग्ज - Android अॅप्स काढा</translation>
@@ -2705,8 +2704,8 @@
 <translation id="5143374789336132547">आपण होम बटण क्लिक करता तेव्हा कोणते पृष्ठ दर्शविले जाते हे "<ph name="EXTENSION_NAME" />" विस्ताराने बदलले आहे.</translation>
 <translation id="5143712164865402236">पूर्ण स्क्रीनमध्ये जा</translation>
 <translation id="5145331109270917438">सुधारणा तारीख</translation>
-<translation id="514575469079499857">स्थान निर्धारित करण्यासाठी तुमचा आयपी अॅड्रेस वापरा (डिफॉल्ट)</translation>
-<translation id="5150254825601720210">Netscape प्रमाणपत्र SSL सर्व्हर नाव</translation>
+<translation id="514575469079499857">स्थान निर्धारित करण्यासाठी तुमचा आयपी अॅड्रेस वापरा (डीफॉल्ट)</translation>
+<translation id="5150254825601720210">Netscape सर्टिफिकेट SSL सर्व्हर नाव</translation>
 <translation id="5151354047782775295">डिस्क स्थान मोकळे करा किंवा निवडलेला डेटा स्वयंचलितपणे हटवला जाऊ शकतो</translation>
 <translation id="5153297660536091054">पिन अनलॉक वैशिष्ट्य</translation>
 <translation id="5154108062446123722"><ph name="PRINTING_DESTINATION" /> यासाठी प्रगत सेटिंग्ज</translation>
@@ -2734,12 +2733,12 @@
 <translation id="5184063094292164363">&amp;JavaScript कन्सोल</translation>
 <translation id="5184662919967270437">आपले डिव्हाइस अपडेट करीत आहे</translation>
 <translation id="5185386675596372454">"<ph name="EXTENSION_NAME" />" ची नवीनतम आवृत्ती अक्षम केली गेली कारण यासाठी अधिक परवानग्या आवश्यक आहेत.</translation>
-<translation id="5186650237607254032">आपल्या फोनचा स्क्रीन लॉक अपडेट करा जेणे करून आपण जवळपास असताना तो बंद होईल. आपण फोन जलद अनलॉक कराल आणि आपल्या <ph name="DEVICE_TYPE" /> वर एक उत्कृष्ट Smart Lock चा अनुभवाचा आनंद घ्याल.</translation>
+<translation id="5186650237607254032">तुमच्या फोनचा स्क्रीन लॉक अपडेट करा जेणे करून तुम्ही जवळपास असताना तो बंद होईल. तुम्ही फोन जलद अनलॉक कराल आणि तुमच्या <ph name="DEVICE_TYPE" /> वर एक उत्कृष्ट Smart Lock चा अनुभवाचा आनंद घ्याल.</translation>
 <translation id="5187295959347858724">आपण आता <ph name="SHORT_PRODUCT_NAME" />मध्‍ये साइन इन केले आहे. आपले बुकमार्क, इतिहास, आणि इतर सेटिंग्ज आपल्या Google खात्यात समक्रमीत केल्या जात आहेत.</translation>
 <translation id="5187826826541650604"><ph name="KEY_NAME" /> (<ph name="DEVICE" />)</translation>
 <translation id="5204967432542742771">पासवर्ड एंटर करा</translation>
 <translation id="5206215183583316675">"<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
-<translation id="520621735928254154">प्रमाणपत्र आया‍त एरर</translation>
+<translation id="520621735928254154">सर्टिफिकेट आया‍त एरर</translation>
 <translation id="5209320130288484488">कोणतीही डिव्हाइसेस आढळली नाहीत</translation>
 <translation id="5209518306177824490">SHA-1 बोटाचा ठसा</translation>
 <translation id="5210365745912300556">टॅब बंद करा</translation>
@@ -2780,10 +2779,10 @@
 <translation id="5256861893479663409">सर्व साइटवर</translation>
 <translation id="5260508466980570042">क्षमस्व, आपले ईमेल किंवा पासवर्ड सत्यापित करणे शक्य नाही. कृपया पुन्हा प्रयत्न करा.</translation>
 <translation id="5261683757250193089">वेब स्टोअर मध्ये उघडा</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" />
+    <ph name="MARKUP_4" />तुमच्या फायली सुरक्षित ठेवा.<ph name="MARKUP_5" />
+    तुमच्या डिव्हाइसला काहीही झाले तरीही, तुमच्या फायली Google ड्राइव्ह मध्ये सुरक्षितपणे स्टोअर केल्या आहेत.<ph name="MARKUP_6" />
     <ph name="MARKUP_7" />फायलींवर इतरांसह सर्व एकाच ठिकाणी<ph name="MARKUP_8" />
     शेअर करा, तयार करा आणि सहयोग करा.<ph name="MARKUP_9" /></translation>
 <translation id="5264148714798105376">यास मिनिटभर किंवा त्‍याहून अधिक वेळ लागू शकतो.</translation>
@@ -2797,9 +2796,9 @@
 <translation id="527605719918376753">टॅब नि:शब्द करा</translation>
 <translation id="527605982717517565"><ph name="HOST" /> वर JavaScript ला नेहमी परवानगी द्या</translation>
 <translation id="5280426389926346830">शॉर्टकट तयार करायचा?</translation>
-<translation id="528208740344463258">Android अॅप्स डाउनलोड करण्यासाठी आणि वापरण्यासाठी, अगोदर तुम्ही हा आवश्यक अपडेट इंस्टॉल करणे गरजेचे आहे. तुमचे <ph name="DEVICE_TYPE" /> अपडेट होत असताना, तुम्ही त्याचा वापर करू शकत नाही. इंस्टॉल झाल्यानंतर तुमचे <ph name="DEVICE_TYPE" /> रीस्टार्ट होईल.</translation>
+<translation id="528208740344463258">Android अॅप्स डाउनलोड करण्यासाठी आणि वापरण्यासाठी, तुम्ही हा आवश्यक अपडेट इंस्टॉल करणे गरजेचे आहे. तुमचे <ph name="DEVICE_TYPE" /> अपडेट होत असताना, तुम्ही त्याचा वापर करता आले नाही. इंस्टॉल झाल्यानंतर तुमचे <ph name="DEVICE_TYPE" /> रीस्टार्ट होईल.</translation>
 <translation id="5282733140964383898">''Do Not Track'' सक्षम करणे अर्थात आपल्या ब्राउझिंग रहदारीसह एक विनंती समाविष्ट‍ केली जाईल. कोणताही प्रभाव यावर अवलंबून असतो कि वेबसाइट विनंतीस प्रतिसाद देते किंवा नाही आणि विनंतीचा निष्कर्ष कसा काढला जातो. उदाहरणार्थ, काही वेबसाइट आपण भेट दिलेल्या इतर वेबसाइटवर आधारित नसलेल्या जाहिराती आपल्याला दर्शवून या विनंतीस प्रतिसाद देऊ शकतात. अनेक वेबसाइट अद्यापही आपला ब्राउझिंग डेटा संकलित करून त्याचा वापर करतील - उदाहरणार्थ सुरक्षितता सुधारणे, सामग्री प्रदान करणे, त्यांच्या वेबसाइटवर जाहिराती आणि शिफारशी आणि अहवाल आकडेवारी व्युत्पन्न करणे. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
-<translation id="5283677936944177147">अरेरे! डिव्हाइस मॉडेल किंवा अनुक्रमांक निर्धारित करण्‍यात सिस्टम अयशस्वी झाली.</translation>
+<translation id="5283677936944177147">अरेरे! डिव्हाइस मॉडेल किंवा सिरीअल नंबर निर्धारित करण्‍यात सिस्टम अयशस्वी झाली.</translation>
 <translation id="5284445933715251131">डाउनलोड करायला सुरुवात करा</translation>
 <translation id="528468243742722775">समाप्त</translation>
 <translation id="5285635972691565180">डिस्‍प्‍ले <ph name="DISPLAY_ID" /></translation>
@@ -2848,7 +2847,7 @@
 <translation id="5338503421962489998">स्‍थानिक संचयन</translation>
 <translation id="5340217413897845242">शेल्फ आयटम 6</translation>
 <translation id="5340638867532133571">पेमेंट हँडलर इंस्टॉल करण्यासाठी साइटना अनुमती द्या (शिफारस केलेले)</translation>
-<translation id="5341793073192892252">पुढील कुकी ब्लॉक केल्या होत्‍या (तृतीय पक्षाच्या कुकी कोणत्याही अपवादाशिवाय ब्लॉक केलेल्या आहेत)</translation>
+<translation id="5341793073192892252">पुढील कुकी ब्लॉक केल्या होत्‍या (तृतीय पक्षाच्या कुकी कोणत्याही एक्सेप्शनाशिवाय ब्लॉक केलेल्या आहेत)</translation>
 <translation id="5341980496415249280">कृपया वाट पहा, पॅकिंग करत आहे...</translation>
 <translation id="5342091991439452114">पिन किमान <ph name="MINIMUM" /> अंकांचा असणे आवश्यक आहे</translation>
 <translation id="5352033265844765294">वेळ स्टॅम्पिंग</translation>
@@ -2870,7 +2869,7 @@
 <translation id="5376931455988532197">फाईल खूप मोठी आहे</translation>
 <translation id="537813040452600081">या विंडोमध्ये आपण पाहत असलेली पेज ब्राउझर इतिहासात दिसणार नाहीत आणि आपण साइन आउट केल्यानंतर, संगणकावर कुकीज सारखे, अन्य ट्रेस ते सोडणार नाहीत. आपण डाउनलोड करता त्या फायली आणि आपण तयार करता ते बुकमार्क संरक्षित केले जाणार नाहीत.</translation>
 <translation id="5379140238605961210">मायक्रोफोन प्रवेश अवरोधित करणे सुरू ठेवा</translation>
-<translation id="5379268888377976432">हटवणे पूर्ववत करा</translation>
+<translation id="5379268888377976432">हटवणे पहिल्यासारखी करा</translation>
 <translation id="5380103295189760361">अशा सुधारकांचे कीबोर्ड शॉर्टकट पाहण्यासाठी Control, Alt, Shift, किंवा शोध दाबून ठेवा.</translation>
 <translation id="5382591305415226340">समर्थित दुवे व्यवस्थापित करा</translation>
 <translation id="5384883051496921101">ही साइट गुप्त मोडच्या बाहेरील एखाद्या अ‍ॅपबरोबर ही माहिती शेअर करणार आहे.</translation>
@@ -2896,7 +2895,7 @@
 <translation id="5422781158178868512">क्षमस्व, आपले बाह्य स्टोरेज डीव्हाइस ओळखले जाऊ शकले नाही.</translation>
 <translation id="5423849171846380976">सक्रिय</translation>
 <translation id="5425042808445046667">डाउनलोड करायला सुरुवात करा</translation>
-<translation id="5425722269016440406">हे सेटिंग आपल्या फोनवर आणि अन्य डिव्हाइसेसवर संकालित केली असल्यामुळे Smart Lock बंद करण्यासाठी आपण ऑनलाइन असणे आवश्यक आहे. कृपया सर्वप्रथम एका नेटवर्कशी कनेक्ट करा.</translation>
+<translation id="5425722269016440406">हे सेटिंग तुमच्या फोनवर आणि अन्य डिव्हाइसवर सिंक केली असल्यामुळे Smart Lock बंद करण्यासाठी तुम्ही ऑनलाइन असणे आवश्यक आहे. कृपया सर्वप्रथम एका नेटवर्कशी कनेक्ट करा.</translation>
 <translation id="5425863515030416387">डिव्हाइसेसवर स्वयंचलितपणे साइन इन करा</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> ला तुम्हाला सूचना पाठवायची आहे</translation>
 <translation id="5427278936122846523">नेहमी भाषांतर करा</translation>
@@ -2964,12 +2963,12 @@
 <translation id="5509693895992845810">&amp;म्हणून सेव्ह करा...</translation>
 <translation id="5509914365760201064">जारी केले: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5511823366942919280">आपल्याला खात्री आहे की आपण "शार्क" म्हणून हे डिव्हाइस सेट इच्छिता?</translation>
-<translation id="5512653252560939721">वापरकर्ता प्रमाणपत्र हार्डवेअर-बॅक्ड असणे आवश्यक आहे.</translation>
+<translation id="5512653252560939721">वापरकर्ता सर्टिफिकेट हार्डवेअर-बॅक्ड असणे आवश्यक आहे.</translation>
 <translation id="5513242761114685513">संदर्भ मेनू</translation>
 <translation id="5516183516694518900">आपल्या सर्व डिव्हाइसेसवर आपले बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज मिळविण्यासाठी आपल्या Google खात्यासह Chrome मध्ये साइन इन करा.</translation>
 <translation id="551752069230578406">आपल्या खात्यास प्रिंटर जोडत आहे - यास थोडा वेळ लागू शकतो...</translation>
 <translation id="5518219166343146486">साइटला क्लिपबोर्डवर कॉपी केलेला मजकूर आणि इमेज पाहायच्या असतील, तेव्हा विचारा</translation>
-<translation id="5518584115117143805">ईमेल कूटबद्धीकरण प्रमाणपत्र</translation>
+<translation id="5518584115117143805">ईमेल कूटबद्धीकरण सर्टिफिकेट</translation>
 <translation id="5521078259930077036">आपण अपेक्षा करत होता हे तेच होमपेज आहे?</translation>
 <translation id="5522156646677899028">या विस्‍तारामध्‍ये एक गंभीर सुरक्षा भेद्यता आहे.</translation>
 <translation id="5524517123096967210">फाइल वाचली जाऊ शकली नाही.</translation>
@@ -2977,7 +2976,7 @@
 <translation id="5525695896049981561">होय, मला तो दिसला</translation>
 <translation id="5526701598901867718">सर्व (असुरक्षित)</translation>
 <translation id="5526745900034778153">सिंक पुन्हा पुढे चालू करण्यासाठी पुन्हा साइन इन करा</translation>
-<translation id="5527463195266282916">विस्तार डाउनग्रेड करण्याचा प्रयत्न केला.</translation>
+<translation id="5527463195266282916">एक्सटेंशन डाउनग्रेड करण्याचा प्रयत्न केला.</translation>
 <translation id="5527474464531963247">आपण वेगळे नेटवर्क देखील निवडू शकता.</translation>
 <translation id="5528368756083817449">बुकमार्क व्यवस्थापक</translation>
 <translation id="5530160549030561969">प्रत्येक वैशिष्ट्यासाठी सेटिंग्जचे परीक्षण करा आणि तुम्हाला वाटल्यास त्यात बदल करा</translation>
@@ -2996,19 +2995,19 @@
 <translation id="554517032089923082">GTC</translation>
 <translation id="5546865291508181392">शोधा</translation>
 <translation id="5551573675707792127">कीबोर्ड आणि मजकूर इनपुट</translation>
-<translation id="5553089923092577885">प्रमाणपत्र धोरण मॅपिंग</translation>
+<translation id="5553089923092577885">सर्टिफिकेट धोरण मॅपिंग</translation>
 <translation id="5554489410841842733">जेव्हा विस्तार वर्तमान पृष्ठावर कार्य करेल तेव्हा हे प्रतीक दृश्यमान होईल.</translation>
 <translation id="5554720593229208774">ईमेल प्रमाणन अधिकृतता</translation>
 <translation id="5556206011531515970">आपले डीफॉल्ट ब्राउझर निवडण्यासाठी पुढील क्लिक करा.</translation>
 <translation id="5556459405103347317">रीलोड करा</translation>
 <translation id="555746285996217175">लॉक / पॉवर</translation>
-<translation id="5557991081552967863">निष्क्रिय असताना वाय-फाय चालू ठेवा</translation>
+<translation id="5557991081552967863">निष्क्रिय असताना वाय-फाय सुरू ठेवा</translation>
 <translation id="5558129378926964177">झूम &amp;वाढवा</translation>
-<translation id="55601339223879446">प्रदर्शनामध्ये आपल्या डेस्कटॉपच्या सीमा समायोजित करा</translation>
-<translation id="5562781907504170924">हा टॅब Bluetooth डिव्हाइसशी कनेक्ट केला आहे.</translation>
+<translation id="55601339223879446">डिस्प्लेामध्ये तुमच्या डेस्कटॉपच्या सीमा समायोजित करा</translation>
+<translation id="5562781907504170924">हा टॅब ब्लूटूथ डिव्हाइसशी कनेक्ट केला आहे.</translation>
 <translation id="5563234215388768762">Google वर शोधा किंवा URL टाइप करा</translation>
 <translation id="5567950944308676169">तुमची सिक्युरिटी की प्लग-इन करा आणि ती अॅक्टिव्हेट करा</translation>
-<translation id="5567989639534621706">अॅप्लिकेशन कॅश  </translation>
+<translation id="5567989639534621706">अॅप्लिकेशन कॅश</translation>
 <translation id="5568069709869097550">साइन इन करणे शक्य नाही</translation>
 <translation id="5568144734023334204">Android स्टोरेज</translation>
 <translation id="5569544776448152862"><ph name="BEGIN_BOLD" /><ph name="DOMAIN_NAME" /><ph name="END_BOLD" /> मध्‍ये नोंदणी करीत आहे...</translation>
@@ -3030,19 +3029,19 @@
 <translation id="5595485650161345191">पत्ता संपादित करा</translation>
 <translation id="5596627076506792578">अधिक पर्याय</translation>
 <translation id="5598551463564921617">Better Together सुरू आहे</translation>
-<translation id="5600706100022181951">अपडेट <ph name="UPDATE_SIZE_MB" /> MB मोबाइल डेटा वापरून डाउनलोड केले जाईल. आपल्याला सुरू ठेवायचे आहे का?</translation>
+<translation id="5600706100022181951">अपडेट <ph name="UPDATE_SIZE_MB" /> MB मोबाइल डेटा वापरून डाउनलोड केले जाईल. तुम्हाला सुरू ठेवायचे आहे का?</translation>
 <translation id="5601503069213153581">पिन</translation>
 <translation id="5602765853043467355">या डिव्हाइसमधून बुकमार्क, इतिहास, पासवर्ड आणि बरेच काही साफ करा</translation>
 <translation id="5605623530403479164">इतर शोध इंजिने</translation>
 <translation id="5608580678041221894">क्रॉप करण्‍याचे क्षेत्र समायोजित करण्‍यासाठी किंवा हलविण्‍यासाठी खालील की टॅप करा</translation>
-<translation id="5609231933459083978">अॅप्लिकेशन अवैध असल्याचे दिसते.</translation>
+<translation id="5609231933459083978">अॅप्लिकेशन चुकीचे असल्याचे दिसते.</translation>
 <translation id="5610038042047936818">कॅमेरा मोडवर स्विच करा</translation>
 <translation id="5612720917913232150"><ph name="URL" /> ला तुमच्या काँप्युटरचे स्थान वापरायचे आहे</translation>
 <translation id="5612734644261457353">क्षमस्व, आपला पासवर्ड अद्याप सत्यापित होऊ शकला नाही. टीप: आपण अलीकडेच आपला पासवर्ड बदलला असल्यास, एकदा आपण साइन आउट केल्यानंतर आपला नवीन पासवर्ड लागू केला जाईल, कृपया येथे जुना पासवर्ड वापरा.</translation>
 <translation id="5614190747811328134">वापरकर्ता सूचना</translation>
 <translation id="5614553682702429503">पासवर्ड सेव्ह करायचा आहे का?</translation>
 <translation id="561698261642843490">Firefox बंद करा</translation>
-<translation id="5618075537869101857">अरेरे, कियोस्क अॅप्लिकेशन लाँच केला जाऊ शकला नाही.</translation>
+<translation id="5618075537869101857">अरेरे, कियोस्क अॅप्लिकेशन लाँच केले जाऊ शकले नाही.</translation>
 <translation id="5618333180342767515">(यास काही मिनिटे लागू शकतील)</translation>
 <translation id="5618972959246891967">प्रणाली तारीख</translation>
 <translation id="56197088284879152">दूरस्थ डिव्हाइसवरील कनेक्शनमध्ये अडथळा आहे: " <ph name="DEVICE_NAME" /> ".</translation>
@@ -3123,7 +3122,7 @@
 <translation id="5739458112391494395">खूप मोठा</translation>
 <translation id="5740331643563157105"><ph name="LANGUAGE_1" />, <ph name="LANGUAGE_2" /> आणि अन्य <ph name="NUM_ADDITIONAL_LANGUAGES" /></translation>
 <translation id="574209121243317957">पिच</translation>
-<translation id="5746169159649715125">PDF म्हणून सेव्ह करा</translation>
+<translation id="5746169159649715125">पीडीएफ म्हणून सेव्ह करा</translation>
 <translation id="5747552184818312860">कालबाह्य होईल</translation>
 <translation id="5747785204778348146">विकासक - अस्थिर</translation>
 <translation id="5750324801516359607">दूर आहे</translation>
@@ -3186,8 +3185,8 @@
 <translation id="5835486486592033703"><ph name="WINDOW_TITLE" /> - कॅमेरा किंवा मायक्रोफोन रेकॉर्डिंग</translation>
 <translation id="5835754902560991078">अत्यंत कमी (0.6s)</translation>
 <translation id="5838456317242088717">वर्तमान गुप्त सत्र</translation>
-<translation id="5842497610951477805">Bluetooth सक्षम आहे</translation>
-<translation id="5843250171025351504">तुमच्या प्रशासकाने निर्दिष्ट केलेल्या किमान क्लायंट आवृत्तीसह तुमचे डिव्हाइस आता सुसंगत नाही. कृपया लॉग इन करण्यासाठी अपडेट करा.</translation>
+<translation id="5842497610951477805">ब्लूटूथ सक्षम आहे</translation>
+<translation id="5843250171025351504">तुमच्या अॅडमिनिस्ट्रेटराने नमूद केलेल्या किमान क्लायंट आवृत्तीसह तुमचे डिव्हाइस आता सुसंगत नाही. कृपया लॉग इन करण्यासाठी अपडेट करा.</translation>
 <translation id="5846929185714966548">टॅब 4</translation>
 <translation id="5849212445710944278">आधीच जोडला आहे</translation>
 <translation id="5849570051105887917">मुख्यपृष्ठ प्रदाता कोड</translation>
@@ -3210,7 +3209,7 @@
 <translation id="5862109781435984885">शेल्फमधील लेखणी साधने दर्शवा</translation>
 <translation id="5863445608433396414">डीबगिंग वैशिष्ट्ये सक्षम करा</translation>
 <translation id="5864471791310927901">DHCP लुकअप अयशस्वी</translation>
-<translation id="586567932979200359">आपण <ph name="PRODUCT_NAME" /> त्याच्या डिस्क प्रतिमेवरून चालवित आहात. आपल्‍या संगणकावर हे इंस्टॉल केल्याने ते आपण डिस्क प्रतिमेशिवाय चालवू शकाल आणि हे अद्य‍तनित राहील हे सुनिश्चित करते.</translation>
+<translation id="586567932979200359">तुम्ही <ph name="PRODUCT_NAME" /> त्याच्या डिस्क इमेजवरून चालवत आहात. तुमच्या कॉंप्युटरवर ते स्थापित केल्यामुळे तुम्हाला ते डिस्क इमेजशिवाय चालवू देते आणि ते अद्ययावत ठेवले जाईल याची खात्री करते.</translation>
 <translation id="5866557323934807206">भविष्यातील भेटींसाठी या सेटिंग्ज साफ करा</translation>
 <translation id="5866840822086176774">खूप मजबूत</translation>
 <translation id="5867841422488265304">वेब पत्ता शोधा किंवा टाइप करा</translation>
@@ -3232,7 +3231,7 @@
 <translation id="5906732635754427568">या डिव्हाइस वरून या अॅपसह संबद्ध असलेला डेटा काढला जाईल.</translation>
 <translation id="5908769186679515905">साइटला फ्लॅश चालवण्यापासून अवरोधित करा</translation>
 <translation id="5910363049092958439">म्हणून इमेज ज&amp;तन करा...</translation>
-<translation id="5911737117543891828">Google ड्राइव्ह ऑफलाइन फायली तात्पुरत्या हटविल्या जातील. ऑफलाइन उपलब्ध म्हणून आपण सेट केलेल्या फायली या डिव्हाइस मधून हटविल्या जाणार नाहीत.</translation>
+<translation id="5911737117543891828">Google ड्राइव्ह ऑफलाइन फायली तात्पुरत्या हटविल्या जातील. ऑफलाइन उपलब्ध म्हणून तुम्ही सेट केलेल्या फायली या डिव्हाइस मधून हटविल्या जाणार नाहीत.</translation>
 <translation id="5911887972742538906">तुमच्या Linux अॅप्लिकेशनच्या इंस्टॉलेशन दरम्यान एरर आली आहे.</translation>
 <translation id="5912378097832178659">शोध इंजिन &amp;संपादित करा...</translation>
 <translation id="5914724413750400082">मॉड्यूलस (<ph name="MODULUS_NUM_BITS" /> बिट):
@@ -3252,13 +3251,13 @@
     <ph name="LINE_BREAK" />
     हे पिक्चर Chromebook च्या साइन इन स्क्रीन आणि लॉक स्क्रीनवर दिसेल.</translation>
 <translation id="5925147183566400388">प्रमाणपत्र सराव विधान पॉइंटर</translation>
-<translation id="592880897588170157">PDF फायली Chromeमध्ये आपोआप उघडण्यापेक्षा त्या डाउनलोड करा</translation>
+<translation id="592880897588170157">पीडीएफ फायली Chromeमध्ये आपोआप उघडण्यापेक्षा त्या डाउनलोड करा</translation>
 <translation id="5931146425219109062">आपण भेट देत असलेल्या वेबसाइटवर आपला सर्वे डेटा वाचा आणि बदला</translation>
 <translation id="5932881020239635062">अनुक्रमांक</translation>
 <translation id="5933376509899483611">टाइमझोन</translation>
 <translation id="5938002010494270685">सुरक्षितता अपग्रेड उपलब्ध आहे</translation>
 <translation id="5939518447894949180">रीसेट करा</translation>
-<translation id="5939847200023027600">PDF कंपोझिटर सेवा</translation>
+<translation id="5939847200023027600">पीडीएफ कंपोझिटर सेवा</translation>
 <translation id="5941153596444580863">व्यक्ती जोडा...</translation>
 <translation id="5941343993301164315">कृपया <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation>
 <translation id="5941711191222866238">लहान करा</translation>
@@ -3267,13 +3266,13 @@
 <translation id="5955282598396714173">तुमचा पासवर्ड एक्सपायर झाला आहे. तो बदलण्यासाठी कृपया साइन आऊट करा आणि पुन्हा साइन इन करा.</translation>
 <translation id="5956585768868398362">आपण अपेक्षा करत होता हे तेच शोध पृष्ठ आहे?</translation>
 <translation id="5957613098218939406">अधिक पर्याय</translation>
-<translation id="5957987129450536192">तुमच्या प्रोफाइल इमेज जवळच्या बोलण्यासाठी निवडा आयकनवर टॅप करा, त्यानंतर तुम्हाला जे ऐकायचे आहे ते निवडा.</translation>
+<translation id="5957987129450536192">तुमच्या प्रोफाइल इमेज जवळच्या बोलण्यासाठी निवडा या आयकनवर टॅप करा, त्यानंतर तुम्हाला जे ऐकायचे आहे ते निवडा.</translation>
 <translation id="5958529069007801266">पर्यवेक्षी वापरकर्ता</translation>
 <translation id="5959471481388474538">नेटवर्क उपलब्ध नाही</translation>
 <translation id="595959584676692139">हे एक्स्टेंशन वापरण्यासाठी पेज रीलोड करा</translation>
 <translation id="5963453369025043595"><ph name="NUM_HANDLES" /> (<ph name="NUM_KILOBYTES_LIVE" /> सर्वोच्च)</translation>
 <translation id="5965661248935608907">आपण होम बटण क्लिक करता किंवा ओम्निबॉक्समधून शोध घेता तेव्हा कोणते पृष्ठ दर्शविले जाते हे देखील हे नियंत्रित करते.</translation>
-<translation id="5971037678316050792">Bluetooth अडाप्टर स्थिती आणि जोडणी नियंत्रित करा</translation>
+<translation id="5971037678316050792">ब्लूटूथ अडाप्टर स्थिती आणि पेअरिंग नियंत्रित करा</translation>
 <translation id="5972017421290582825">MIDI सेटिंग्ज व्यवस्थापित करा...</translation>
 <translation id="5972708806901999743">शीर्षस्थानी हलवा</translation>
 <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> प्रारंभ करा</translation>
@@ -3287,7 +3286,7 @@
 <translation id="5984222099446776634">अलीकडे भेट दिलेले</translation>
 <translation id="5990386583461751448">भाषांतर केले</translation>
 <translation id="5991049340509704927">विशालित करा</translation>
-<translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{तुमचे वेब ब्राउझिंग चालू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}one{तुमचे वेब ब्राउझिंग चालू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}other{तुमचे वेब ब्राउझिंग चालू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}}</translation>
+<translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{तुमचे वेब ब्राउझिंग सुरू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}one{तुमचे वेब ब्राउझिंग सुरू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}other{तुमचे वेब ब्राउझिंग सुरू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}}</translation>
 <translation id="6002458620803359783">प्राधान्य दिलेली व्हॉइस</translation>
 <translation id="6005695835120147974">मीडिया राउटर</translation>
 <translation id="6006484371116297560">क्लासिक</translation>
@@ -3332,10 +3331,10 @@
 <translation id="6055392876709372977">PKCS #1 RSA कूटबद्धीकरणासह SHA-256</translation>
 <translation id="6056710589053485679">सामान्‍य रीलोड</translation>
 <translation id="6057381398996433816">या साइटला तुमचे गती किंवा प्रकाश सेन्सर वापरण्यापासून ब्लॉक केले गेले आहे.</translation>
-<translation id="6059652578941944813">प्रमाणपत्र पदानुक्रम</translation>
+<translation id="6059652578941944813">सर्टिफिकेट पदानुक्रम</translation>
 <translation id="6059925163896151826">USB डिव्हाइसेस</translation>
 <translation id="6064217302520318294">स्क्रीन लॉक</translation>
-<translation id="6065289257230303064">प्रमाणपत्र विषय निर्देशिका विशेषता</translation>
+<translation id="6065289257230303064">सर्टिफिकेट विषय निर्देशिका विशेषता</translation>
 <translation id="6068338049763724728">रिमोट नोंदणी चालू करा</translation>
 <translation id="6069671174561668781">वॉलपेपर सेट करा</translation>
 <translation id="6071181508177083058">संकेतशब्दाची पुष्टी करा</translation>
@@ -3380,14 +3379,14 @@
 <translation id="6125479973208104919">दुर्दैवाने, तुम्हाला या <ph name="DEVICE_TYPE" /> वर तुमचे खाते पुन्हा जोडावे लागेल.</translation>
 <translation id="612596694132302162">साइट सशब्द करा</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="6129938384427316298">Netscape सर्टिफिकेट टिप्पणी</translation>
 <translation id="6129953537138746214">जागा</translation>
 <translation id="6132383530370527946">लहान प्रिंट</translation>
 <translation id="6133173853026656527"><ph name="FILE_NAME" /> हलवित आहे...</translation>
 <translation id="6135622770221372891">चॅनेल आय़डी</translation>
 <translation id="6136114942382973861">डाउनलोड बार बंद करा</translation>
 <translation id="6136285399872347291">backspace</translation>
-<translation id="6137767437444130246">वापरकर्ता प्रमाणपत्र</translation>
+<translation id="6137767437444130246">वापरकर्ता सर्टिफिकेट</translation>
 <translation id="6138680304137685902">SHA-384 सह X9.62 ECDSA स्वाक्षरी</translation>
 <translation id="6141988275892716286">डाउनलोड करण्याचे निश्चित करा</translation>
 <translation id="6143186082490678276">मदत मिळवा</translation>
@@ -3395,7 +3394,7 @@
 <translation id="6146563240635539929">व्हिडिओ</translation>
 <translation id="6147020289383635445">प्रिंट पूर्वावलोकन अयशस्वी.</translation>
 <translation id="614940544461990577">हे करून पहा:</translation>
-<translation id="6150853954427645995">ऑफलाइन वापराकरिता ही फाईल सेव्ह करण्‍यासाठी, परत ऑनलाइन व्‍हा, फाईलवर उजवे-क्लिक करा आणि <ph name="OFFLINE_CHECKBOX_NAME" /> पर्याय निवडा.</translation>
+<translation id="6150853954427645995">ऑफलाइन वापराकरिता ही फाइल सेव्ह करण्‍यासाठी, परत ऑनलाइन व्‍हा, फाइलवर राइट-क्लिक करा आणि <ph name="OFFLINE_CHECKBOX_NAME" /> पर्याय निवडा.</translation>
 <translation id="6151323131516309312"><ph name="SITE_NAME" /> शोधण्यासाठी <ph name="SEARCH_KEY" /> दाबा</translation>
 <translation id="6151771661215463137">फाइल तुमच्या डाउनलोड फोल्डरमध्ये आधीपासून आहे.</translation>
 <translation id="615436196126345398">प्रोटोकॉल</translation>
@@ -3415,7 +3414,7 @@
 <translation id="6171948306033499786">मुद्रणास विराम द्या</translation>
 <translation id="6175314957787328458">Microsoft Domain GUID</translation>
 <translation id="6176043333338857209">तुमच्या सिक्युरिटी की सह संवाद साधण्यासाठी, ब्लूटूथ तात्पुरते सुरू केले जाईल</translation>
-<translation id="6178664161104547336">एक प्रमाणपत्र निवडा</translation>
+<translation id="6178664161104547336">एक सर्टिफिकेट निवडा</translation>
 <translation id="6181431612547969857">डाउनलोड अवरोधित केले</translation>
 <translation id="6185132558746749656">डिव्‍हाइस स्‍थान</translation>
 <translation id="6185617499004995178">CUPS IPP व्हॅलिडेटर</translation>
@@ -3423,7 +3422,7 @@
 <translation id="6189273858858366896">नेटवर्क फाइल शेअर सेट किंवा व्यवस्थापित करा</translation>
 <translation id="6189412234224385711"><ph name="EXTENSION_NAME" /> मध्ये उघडा</translation>
 <translation id="6196640612572343990">तृतीय-पक्ष कुकीज अवरोधित करा</translation>
-<translation id="6196854373336333322">"<ph name="EXTENSION_NAME" />" विस्ताराने आपल्या प्रॉक्सी सेटिंग्जचे नियंत्रण घेतले आहे, याचा अर्थ हे आपण ऑनलाइन करता ती कोणतीही गोष्ट बदलू शकते, खंडित करू शकते किंवा चोरून ऐकू शकते. हा बदल का झाला, याबद्दल आपण सुनिश्चित नसल्यास, आपल्याला कदाचित तो नको आहे.</translation>
+<translation id="6196854373336333322">"<ph name="EXTENSION_NAME" />" एक्स्टेंशनने तुमच्या प्रॉक्सी सेटिंग्जचे नियंत्रण घेतले आहे, याचा अर्थ हे तुम्ही ऑनलाइन करता ती कोणतीही गोष्ट बदलू शकते, खंडित करू शकते किंवा चोरून ऐकू शकते. हा बदल का झाला, याबद्दल तुम्ही खात्री नसल्यास, तुम्हाला कदाचित तो नको आहे.</translation>
 <translation id="6198102561359457428">साइन आउट करा नंतर पुन्हा साइन इन करा...</translation>
 <translation id="6198252989419008588">पिन बदला</translation>
 <translation id="6199801702437275229">स्थान माहितीसाठी प्रतीक्षा करत आहे...</translation>
@@ -3440,7 +3439,7 @@
 <translation id="6212752530110374741">ईमेल लिंक</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ऑफलाइन आहे. इंटरनेटशी कनेक्ट करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="6220413761270491930">विस्तार लोड करताना एरर</translation>
-<translation id="6223447490656896591">सानुकूल इमेज:</translation>
+<translation id="6223447490656896591">कस्टम इमेज:</translation>
 <translation id="62243461820985415">Chrome हा वॉलपेपर डाउनलोड करू शकत नाही.</translation>
 <translation id="6224481128663248237">स्वरुपन यशस्वीरित्या समाप्त!</translation>
 <translation id="6225475702458870625">आपल्या <ph name="PHONE_NAME" /> वरून डेटा कनेक्शन उपलब्ध आहे</translation>
@@ -3455,7 +3454,7 @@
 <translation id="6237816943013845465">आपले स्क्रीन रिझोल्यूशन समायोजित करण्याची आपल्याला अनुमती देते</translation>
 <translation id="6238923052227198598">लॉक स्क्रीनवर नवीनतम टीप ठेवा</translation>
 <translation id="6239558157302047471">रीलोड आणि फ्रेम करा</translation>
-<translation id="6241530762627360640">आपल्या सिस्टीमशी जोडलेल्या Bluetooth डिव्हाइसविषयीच्या माहितीवर प्रवेश करा आणि जवळपासचे Bluetooth डिव्हाइसेस शोधा.</translation>
+<translation id="6241530762627360640">तुमच्या सिस्टीमशी जोडलेल्या ब्लूटूथ डिव्हाइसविषयीच्या माहितीवर अॅक्सेस करा आणि जवळपासचे ब्लूटूथ डिव्हाइस शोधा.</translation>
 <translation id="6243280677745499710">सध्या सेट केला आहे</translation>
 <translation id="6243774244933267674">सर्व्हर अनुपलब्ध</translation>
 <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation>
@@ -3471,7 +3470,7 @@
 <translation id="6263284346895336537">गंभीर नाही</translation>
 <translation id="6264365405983206840">&amp;सर्व निवडा</translation>
 <translation id="6264422956566238156">तुम्ही सिंक सुरू केले आहे</translation>
-<translation id="6267166720438879315"><ph name="HOST_NAME" /> वर आपल्या स्वतःस प्रमाणीकृत करण्यासाठी एक प्रमाणपत्र निवडा</translation>
+<translation id="6267166720438879315"><ph name="HOST_NAME" /> वर तुमच्या स्वतःस प्रमाणीकृत करण्यासाठी एक सर्टिफिकेट निवडा</translation>
 <translation id="6268252012308737255"><ph name="APP" /> सह उघडा</translation>
 <translation id="6268747994388690914">HTML फायलीवरुन बुकमार्क आयात करा...</translation>
 <translation id="6270770586500173387"><ph name="BEGIN_LINK1" />सिस्टम आणि अॅप माहिती<ph name="END_LINK1" /> आणि <ph name="BEGIN_LINK2" />मेट्रिक्स<ph name="END_LINK2" /> पाठवा</translation>
@@ -3489,7 +3488,7 @@
 <translation id="6286708577777130801">सेव्ह केलेले पासवर्ड तपशील</translation>
 <translation id="6287852322318138013">ही फाईल उघडण्यासाठी अॅप निवडा</translation>
 <translation id="6289452883081499048">Play सारख्या पर्सनलाइझ Google सेवा</translation>
-<translation id="6290556621549272952">आपण या वैशिष्ट्याचा वापर Chromium वरील सामग्री आपल्या टीव्ही वर किंवा इतर डिव्‍हाइसेसवर प्रदर्शित करण्यासाठी करू शकता.</translation>
+<translation id="6290556621549272952">तुम्ही या वैशिष्ट्याचा वापर Chromium वरील आशय तुमच्या टीव्ही वर किंवा इतर डिव्‍हाइसेसवर डिस्प्ले करण्यासाठी करू शकता.</translation>
 <translation id="6291949900244949761">साइटला केव्हा USB डिव्हाइस अॅक्सेस करायचे आहेत हे विचारा (शिफारस केलेले)</translation>
 <translation id="6291953229176937411">फाइंडर मध्ये &amp;दर्शवा</translation>
 <translation id="6295158916970320988">सर्व साइट</translation>
@@ -3580,7 +3579,7 @@
 <translation id="642469772702851743">हे डिव्हाइस (SN: <ph name="SERIAL_NUMBER" />) मालकाने लॉक केले होते.</translation>
 <translation id="6426200009596957090">ChromeVox सेटिंग्‍ज उघडा</translation>
 <translation id="6429384232893414837">अपडेट एरर</translation>
-<translation id="6430814529589430811">Base64-encoded ASCII, एकल प्रमाणपत्र</translation>
+<translation id="6430814529589430811">Base64-encoded ASCII, एकल सर्टिफिकेट</translation>
 <translation id="6431217872648827691"><ph name="TIME" />
 
           पासून सर्व डेटा आपल्या Google संकेतशब्दासह कूटबद्ध केला गेला</translation>
@@ -3639,7 +3638,7 @@
 <translation id="6513247462497316522">आपण इतर नेटवर्कशी कनेक्टेड नसल्यास Google Chrome मोबाइल डेटाचा वापर करेल.</translation>
 <translation id="6514010653036109809">उपलब्ध डिव्हाइस:</translation>
 <translation id="6514565641373682518">या पृष्‍ठाने आपला माऊस कर्सर अक्षम केला आहे.</translation>
-<translation id="6518014396551869914">इमेज कॉ&amp;पी करा</translation>
+<translation id="6518014396551869914">इमेज कॉपी&amp; करा</translation>
 <translation id="651942933739530207">आपण <ph name="APP_NAME" /> नी तुमची स्क्रीन आणि ऑडिओ इनपुट सामायिक करावी असे इच्छिता?</translation>
 <translation id="6519437681804756269">[<ph name="TIMESTAMP" />]
         <ph name="FILE_INFO" />
@@ -3718,7 +3717,7 @@
 <translation id="6624687053722465643">गोडवा</translation>
 <translation id="6628328486509726751">अपलोड केलेली <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6629841649550503054"><ph name="BEGIN_LINK" />Google ड्राइव्ह!<ph name="END_LINK" /> वर सर्व बॅकअप घेतला</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>
@@ -3728,11 +3727,11 @@
 <translation id="6647228709620733774">Netscape प्रमाणन अधिकृतता निरस्तीकरण URL</translation>
 <translation id="6647838571840953560">सध्या <ph name="CHANNEL_NAME" /> वर</translation>
 <translation id="6648051959475508072">सिक्युरिटी की अॅक्टिव्हेट केली आहे…</translation>
-<translation id="6648911618876616409">महत्वाचा अपडेट इंस्टॉल करण्यासाठी तयार आहे. सुरूवात करण्यासाठी साइन इन करा.</translation>
+<translation id="6648911618876616409">महत्वाचे अपडेट इंस्टॉल करण्यासाठी तयार आहे. सुरूवात करण्यासाठी साइन इन करा.</translation>
 <translation id="6649018507441623493">फक्त एक सेकंद…</translation>
 <translation id="6649563841575838401">या संग्रह फॉर्मेटला सपोर्ट करत नाही किंवा फाइल खंडित आहे.</translation>
 <translation id="665061930738760572">&amp;नवीन विंडोमध्ये उघडा</translation>
-<translation id="6651237644330755633">वेबसाइट ओळखण्‍यासाठी या प्रमाणपत्रावर विश्‍वास ठेवा</translation>
+<translation id="6651237644330755633">वेबसाइट ओळखण्‍यासाठी या सर्टिफिकेटवर विश्‍वास ठेवा</translation>
 <translation id="6653525630739667879">$1 वर सेव्ह करु शकत नाही. सर्व संपादने डाउनलोड फोल्‍डरमधील $2 मध्ये सेव्ह केली जातील.</translation>
 <translation id="665355505818177700">Chrome <ph name="MS_AD_NAME" /> संकलन फक्‍त x86_64 प्‍लॅटफॉर्मला सपोर्ट करते. कोणत्‍याही ARM किंवा x86 प्‍लॅटफॉर्मवर बनवलेले Chromebooks ही सुविधा देत नाही.</translation>
 <translation id="6655190889273724601">विकसक मोड</translation>
@@ -3827,7 +3826,7 @@
 <translation id="6802031077390104172"><ph name="USAGE" /> (<ph name="OID" />)</translation>
 <translation id="6804671422566312077">सर्व बुकमार्क &amp;नवीन विंडोमध्ये उघडा</translation>
 <translation id="6805038906417219576">ठीक आहे</translation>
-<translation id="6805647936811177813">कृपया <ph name="HOST_NAME" /> वरून क्लायंट प्रमाणपत्र आयात करण्यासाठी <ph name="TOKEN_NAME" />  वर साइन इन करा. </translation>
+<translation id="6805647936811177813">कृपया <ph name="HOST_NAME" /> वरून क्लायंट सर्टिफिकेट आयात करण्यासाठी <ph name="TOKEN_NAME" /> वर साइन इन करा.</translation>
 <translation id="680572642341004180"><ph name="SHORT_PRODUCT_OS_NAME" /> वरील RLZ ट्रॅकिंग सक्षम करा.</translation>
 <translation id="6807889908376551050">सर्व दर्शवा...</translation>
 <translation id="6810613314571580006">संचयित क्रेडेन्शियल वापरून वेबसाइटवर स्वयंचलितपणे साइन इन करा. वैशिष्ट्य अक्षम केले असते तेव्हा, वेबसाइटवर साइन इन करण्यापूर्वी प्रत्येकवेळी आपल्याला पुष्टीकरणासाठी विचारले जाईल.</translation>
@@ -3849,8 +3848,8 @@
 <translation id="682971198310367122">Google गोपनीयता धोरण</translation>
 <translation id="6831043979455480757">भाषांतर करा</translation>
 <translation id="683373380308365518">स्मार्ट आणि सुरक्षित ब्राउझरवर बदला</translation>
-<translation id="6835762382653651563">कृपया आपले <ph name="DEVICE_TYPE" /> अपडेट करण्‍यासाठी इंटरनेटशी कनेक्ट करा.</translation>
-<translation id="6839225236531462745">प्रमाणपत्र हटविणे एरर</translation>
+<translation id="6835762382653651563">कृपया तुमचे <ph name="DEVICE_TYPE" /> अपडेट करण्‍यासाठी इंटरनेटशी कनेक्ट करा.</translation>
+<translation id="6839225236531462745">सर्टिफिकेट हटवणे एरर</translation>
 <translation id="6840155290835956714">पाठविण्यापूर्वी विचारा</translation>
 <translation id="6840184929775541289">प्रमाणन अधिकृतता नाही</translation>
 <translation id="6840313690797192085">$1 PB</translation>
@@ -3864,7 +3863,7 @@
 <translation id="6856623341093082836">आपल्या टचस्क्रीनची अचूकता सेट करा आणि समायोजित करा</translation>
 <translation id="6860097299815761905">प्रॉक्सी सेटिंग्ज...</translation>
 <translation id="6860427144121307915">एका टॅबमध्ये उघडा</translation>
-<translation id="6862635236584086457">या फोल्डरमध्ये सेव्ह केलेल्या सर्व फायलींचा स्वयंचलितपणे ऑनलाइन बॅक अप घेतला जातो</translation>
+<translation id="6862635236584086457">या फोल्डरमध्ये सेव्ह केलेल्या सर्व फायलींचा आपोआप ऑनलाइन बॅक अप घेतला जातो</translation>
 <translation id="6865313869410766144">स्वयं-भरण फॉर्म डेटा</translation>
 <translation id="686664946474413495">रंगाचे तापमान</translation>
 <translation id="6870888490422746447">यासह सामायिक करण्‍यासाठी एक अॅप निवडा:</translation>
@@ -3903,7 +3902,7 @@
     <ph name="LINE_BREAK1" />
     <ph name="FILE_COUNT" /> आढळले</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>
@@ -3935,7 +3934,7 @@
 <translation id="6981982820502123353">प्रवेशयोग्यता</translation>
 <translation id="6983783921975806247">नोंदणीकृत OID</translation>
 <translation id="6983991971286645866">सर्व संपादने $1 वर सेव्ह केली जातील.</translation>
-<translation id="6984299437918708277">साइन-इन स्क्रीनवर आपल्या खात्यासाठी प्रदर्शित करण्याकरिता एक चित्र निवडा</translation>
+<translation id="6984299437918708277">साइन-इन स्क्रीनवर तुमच्या खात्यासाठी डिस्प्ले करण्याकरिता एक चित्र निवडा</translation>
 <translation id="6985235333261347343">Microsoft Key Recovery Agent</translation>
 <translation id="6985607387932385770">प्रिंटर</translation>
 <translation id="6990081529015358884">तुमची जागा समाप्त झाली आहे</translation>
@@ -4004,7 +4003,7 @@
 <translation id="708278670402572152">स्कॅनिंग सुरू करण्यासाठी डिस्कनेक्ट करा</translation>
 <translation id="7084192839369222683">फक्त महत्वाची सामग्री चालवा</translation>
 <translation id="7085389578340536476">Chrome ला ऑडिओ रेकॉर्ड करण्‍याची अनुमती द्यायची का?</translation>
-<translation id="7088434364990739311">अपडेट तपासणी प्रारंभ होण्‍यात अयशस्वी (एरर कोड <ph name="ERROR" />).</translation>
+<translation id="7088434364990739311">अपडेट तपासणी सुरू होण्‍यात अयशस्वी (एरर कोड <ph name="ERROR" />).</translation>
 <translation id="7088561041432335295">Zip Archiver - Files अॅपमध्ये झिप फायली उघडा आणि पॅक करा.</translation>
 <translation id="7088674813905715446">हे डिव्‍हाइस प्रशासकाद्वारे तरतूद नसलेल्‍या स्‍थितीमध्ये ठेवले गेले आहे. ते नोंदणीकरिता सक्षम करण्‍यासाठी, कृपया आपल्‍या प्रशासकाने डिव्‍हाइस एका प्रलंबित स्‍थितीमध्‍ये ठेवावे.</translation>
 <translation id="7093434536568905704">GTK+</translation>
@@ -4043,7 +4042,7 @@
 <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> मध्ये स्वागत आहे</translation>
 <translation id="7136993520339022828">एक एरर आली आहे. कृपया दुसऱ्या इमेज निवडून पुन्हा प्रयत्न करा.</translation>
 <translation id="7138678301420049075">इतर</translation>
-<translation id="713888829801648570">क्षमस्‍व, आपण ऑफलाइन असल्‍याने आपला पासवर्ड सत्यापित करणे शक्य झाले नाही.</translation>
+<translation id="713888829801648570">क्षमस्‍व, तुम्ही ऑफलाइन असल्‍याने तुमचा पासवर्ड पडताळणी करणे शक्य झाले नाही.</translation>
 <translation id="7140928199327930795">कोणतीही अन्य उपलब्ध डिव्हाइसेस नाहीत.</translation>
 <translation id="7141105143012495934">आपले खाते तपशील प्राप्त करणे शक्य झाले नसल्याने साइन-इन अयशस्वी झाले. कृपया आपल्‍या प्रशासकाशी संपर्क साधा किंवा पुन्हा प्रयत्न करा.</translation>
 <translation id="7143092389027215216">डेमो मोड सुरू करत आहे</translation>
@@ -4103,9 +4102,9 @@
 <translation id="7232750842195536390">नाव बदलण्यात अयशस्वी</translation>
 <translation id="7234406375359457793">शेअर माउंट करताना एरर आली. निर्दिष्ट शेअरला सपोर्ट नाही.</translation>
 <translation id="7238585580608191973">SHA-256 बोटाचा ठसा</translation>
-<translation id="7240120331469437312">प्रमाणपत्र विषय वैकल्पिक नाव</translation>
+<translation id="7240120331469437312">सर्टिफिकेट विषय वैकल्पिक नाव</translation>
 <translation id="7240339475467890413">नवीन हॉटस्पॉटशी कनेक्ट करायचे?</translation>
-<translation id="7241389281993241388">कृपया क्लायंट प्रमाणपत्र आयात करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation>
+<translation id="7241389281993241388">कृपया क्लायंट सर्टिफिकेट आयात करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation>
 <translation id="7243632151880336635">साफ करा आणि साइन आउट करा</translation>
 <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (उत्कृष्‍ट)</translation>
 <translation id="7246339268451149667">फिंगरप्रिंट अनलॉक सक्षम करायचे?</translation>
@@ -4150,7 +4149,7 @@
 <translation id="7297443947353982503">वापरकर्तानाव/पासवर्ड चुकीचा किंवा EAP-प्रमाणीकरण अयशस्वी</translation>
 <translation id="729761647156315797">तुमची भाषा आणि कीबोर्ड निवडा</translation>
 <translation id="7299337219131431707">अतिथी ब्राउझिंग सक्षम करा</translation>
-<translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{हे अ‍ॅप्लिकेशन Chrome ला योग्यरीत्या कार्य करण्यापासून रोखू शकते.}one{हे अ‍ॅप्लिकेशन Chrome ला योग्यरीत्या कार्य करण्यापासून रोखू शकते.}other{ही अ‍ॅप्लिकेशन Chrome ला योग्यरीत्या कार्य करण्यापासून रोखू शकतात.}}</translation>
+<translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{हे अ‍ॅप्लिकेशन Chrome ला योग्यरीत्या कार्य करण्यापासून रोखू शकते.}one{हे अ‍ॅप्लिकेशन Chrome ला योग्यरीत्या कार्य करण्यापासून रोखू शकते.}other{हे अ‍ॅप्लिकेशन Chrome ला योग्यरीत्या कार्य करण्यापासून रोखू शकते.}}</translation>
 <translation id="7303900363563182677">या साइटला क्लिपबोर्डवर कॉपी केलेला मजकूर आणि इमेज पाहण्यापासून ब्लॉक केले आहे</translation>
 <translation id="730515362922783851">स्थानिक नेटवर्क किंवा इंटरनेटवरील कोणत्याही डिव्हाइससह डेटा अदलाबदल करा</translation>
 <translation id="7307129035224081534">थांबवले</translation>
@@ -4166,7 +4165,7 @@
 <translation id="7329154610228416156">सुरक्षित-नसलेली URL (<ph name="BLOCKED_URL" />) वापरण्यासाठी साइन-इन कॉन्फिगर केल्यामुळे ते अयशस्वी झाले. कृपया आपल्या प्रशासकाशी संपर्क साधा.</translation>
 <translation id="7334190995941642545">Smart Lock सध्या अनुपलब्ध आहे. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="7334274148831027933">डॉक केलेले भिंग सुरू करा</translation>
-<translation id="7339763383339757376">PKCS #7, एकल प्रमाणपत्र</translation>
+<translation id="7339763383339757376">PKCS #7, एकल सर्टिफिकेट</translation>
 <translation id="7339785458027436441">टाइप करताना शब्दलेखन तपासा</translation>
 <translation id="7339898014177206373">नवीन विंडो</translation>
 <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> आता फुल स्क्रीन आहे.</translation>
@@ -4238,7 +4237,7 @@
 <translation id="7461924472993315131">पिन</translation>
 <translation id="7463006580194749499">व्यक्ती जोडा</translation>
 <translation id="7464490149090366184">झिप करणे अयशस्वी, आयटम विद्यमान: "$1"</translation>
-<translation id="7465778193084373987">Netscape प्रमाणपत्र निरस्तीकरण URL</translation>
+<translation id="7465778193084373987">Netscape सर्टिफिकेट रिव्होकीकरण URL</translation>
 <translation id="7469406957790636836">हे सुरू करण्यासाठी, प्रथम <ph name="BEGIN_LINK" />भाषा आणि इनपुट<ph name="END_LINK" /> मध्ये स्पेल चेक सुरू करा</translation>
 <translation id="7469518857922439236">Messages साठी हा कॉंप्युटर डीफॉल्ट म्हणून लक्षात ठेवण्याकरता तुम्हाला सूचना पाठवेल</translation>
 <translation id="7469894403370665791">या नेटवर्कशी स्वयंचलितपणे कनेक्ट व्हा</translation>
@@ -4247,9 +4246,9 @@
 <translation id="747459581954555080">सर्व पुनर्संचयित करा</translation>
 <translation id="7475671414023905704">Netscape पासवर्ड URL गमावली</translation>
 <translation id="7476454130948140105">अपडेटसाठी बॅटरी खूप कमी (<ph name="BATTERY_PERCENT" />%) आहे</translation>
-<translation id="7478485216301680444">कियोस्क अॅप्लिकेशन इंस्टॉल केला जाऊ शकला नाही.</translation>
+<translation id="7478485216301680444">कियोस्क अॅप्लिकेशन इंस्टॉल केले जाऊ शकले नाही.</translation>
 <translation id="7481312909269577407">पुढील</translation>
-<translation id="748138892655239008">प्रमाणपत्र मूळ प्रतिबंध</translation>
+<translation id="748138892655239008">सर्टिफिकेट मूळ प्रतिबंध</translation>
 <translation id="7484964289312150019">सर्व बुकमार्क &amp;नवीन विंडोमध्ये उघडा</translation>
 <translation id="7485236722522518129">F4</translation>
 <translation id="7487067081878637334">तंत्रज्ञान</translation>
@@ -4267,18 +4266,18 @@
 <translation id="7494065396242762445">Windows सेटिंग्ज उघडा</translation>
 <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="7495778526395737099">आपला जुना पासवर्ड विसरला?</translation>
-<translation id="7497215489070763236">सर्व्हर CA प्रमाणपत्र</translation>
+<translation id="7497215489070763236">सर्व्हर CA सर्टिफिकेट</translation>
 <translation id="7502658306369382406">IPv6 पत्ता</translation>
-<translation id="7503191893372251637">Netscape प्रमाणपत्र प्रकार</translation>
+<translation id="7503191893372251637">Netscape सर्टिफिकेट प्रकार</translation>
 <translation id="7503821294401948377">ब्राउझर क्रियांसाठी '<ph name="ICON" />' प्रतीक लोड करणे शक्य नाही.</translation>
 <translation id="750509436279396091">डाउनलोड फोल्डर उघडा</translation>
 <translation id="7505167922889582512">लपविलेल्या फायली दर्शवा</translation>
 <translation id="7506541170099744506">एंटरप्राइझ व्यवस्थापनासाठी आपल्या <ph name="DEVICE_TYPE" /> ची यशस्वीरित्या नोंदणी केली गेली.</translation>
-<translation id="7507930499305566459">स्थिती प्रतिसादकर्ता प्रमाणपत्र</translation>
+<translation id="7507930499305566459">स्थिती प्रतिसादकर्ता सर्टिफिकेट</translation>
 <translation id="7508545000531937079">स्लाइडशो</translation>
 <translation id="7513029293694390567">संचयित क्रेडेन्शियल वापरून वेबसाइटवर स्वयंचलितपणे साइन इन करा. अक्षम केले असल्यास, वेबसाइटवर साइन इन करण्यापूर्वी प्रत्येकवेळी आपल्याला पुष्टीकरणासाठी विचारले जाईल.</translation>
 <translation id="7515154058529101840"><ph name="BEGIN_PARAGRAPH1" />स्थान शोधण्यास अ‍ॅप्सला मदत करा. अ‍ॅप्ससाठी स्थान सुधारण्यात मदत करण्यासाठी Google ची स्थान सेवा वापरा. Google अधूनमधून स्थान डेटा गोळा करू शकतो आणि स्थान अचूकता आणि स्थान-आधारित सेवा सुधारित करण्यासाठी अनामिक मार्गाने डेटा वापरू शकतो.<ph name="END_PARAGRAPH1" />
-    <ph name="BEGIN_PARAGRAPH2" />तुमच्या डिव्हाइसच्या स्थानाचा अंदाज घेण्यात मदत करण्यासाठी Google ची स्थान सेवा वाय फाय, मोबाईल नेटवर्क आणि सेन्सर सारखे स्त्रोत वापरते. तुमच्या डिव्हाइसची स्थान सेटिंग चालू असताना ही सेवा सुरू असेल.<ph name="END_PARAGRAPH2" />
+    <ph name="BEGIN_PARAGRAPH2" />तुमच्या डिव्हाइसच्या स्थानाचा अंदाज घेण्यात मदत करण्यासाठी Google ची स्थान सेवा वाय फाय, मोबाईल नेटवर्क आणि सेन्सर सारखे स्त्रोत वापरते. तुमच्या डिव्हाइसची स्थान सेटिंग सुरू असताना ही सेवा सुरू असेल.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />तुमच्या डिव्हाइसवर मुख्य स्थान सेटिंग बंद करून तुम्ही स्थान बंद करू शकता. तुम्ही स्थान सेटिंग्जमध्ये वाय फाय, मोबाईल नेटवर्क आणि स्थानासाठी सेन्सरचा वापर देखील बंद करू शकता.<ph name="END_PARAGRAPH3" /></translation>
 <translation id="7517786267097410259">एक पासवर्ड तयार करा -</translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -4360,10 +4359,10 @@
 <translation id="7658239707568436148">रद्द करा</translation>
 <translation id="7659584679870740384">आपण हे डिव्हाइस वापरण्यासाठी प्राधिकृत नाही. कृपया साइन इन करण्याच्या परवानगीसाठी प्रशासकाशी संपर्क साधा.</translation>
 <translation id="7661259717474717992">कुकी डेटा सेव्ह करण्यास आणि वाचण्यास साइटना अनुमती द्या</translation>
-<translation id="7661451191293163002">नोंदणी प्रमाणपत्र प्राप्त करणे शक्य झाले नाही.</translation>
+<translation id="7661451191293163002">नोंदणी सर्टिफिकेट प्राप्त करणे शक्य झाले नाही.</translation>
 <translation id="7662283695561029522">कॉन्फिगर करण्यासाठी टॅप करा</translation>
 <translation id="7663719505383602579">प्राप्तकर्ता: <ph name="ARC_PROCESS_NAME" /></translation>
-<translation id="7664620655576155379">असमर्थित Bluetooth डिव्हाइस: "<ph name="DEVICE_NAME" />".</translation>
+<translation id="7664620655576155379">असमर्थित ब्लूटूथ डिव्हाइस: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="7665369617277396874">खाते जोडा</translation>
 <translation id="7671130400130574146">सिस्टम शीर्षक बार आणि किनारी वापरा</translation>
 <translation id="7672520070349703697"><ph name="PAGE_TITLE" /> मध्ये <ph name="HUNG_IFRAME_URL" />.</translation>
@@ -4394,7 +4393,7 @@
 <translation id="7712740978240882272">तुमचा फोन वापरून तुमचे Chromebook अनलॉक करा. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503"><ph name="EXTENSION_ID" /> आयडीसह अज्ञात एक्स्टेंशन</translation>
 <translation id="7714307061282548371"><ph name="DOMAIN" /> वरील कुकीजना अनुमती आहे</translation>
-<translation id="7714464543167945231">प्रमाणपत्र</translation>
+<translation id="7714464543167945231">सर्टिफिकेट</translation>
 <translation id="7716781361494605745">Netscape प्रमाणपत्र अधिकृतता धोरण URL</translation>
 <translation id="7717014941119698257">डाउनलोड करत आहे: <ph name="STATUS" /></translation>
 <translation id="7717845620320228976">अपडेट तपासा</translation>
@@ -4415,7 +4414,7 @@
 <translation id="7751260505918304024">सर्व दर्शवा</translation>
 <translation id="7754704193130578113">डाउनलोड करण्यापूर्वी प्रत्येक फाइल कोठे सेव्ह करावी ते विचारा</translation>
 <translation id="7758143121000533418">Family Link</translation>
-<translation id="7758450972308449809">आपल्या प्रदर्शनाच्या सीमा समायोजित करा</translation>
+<translation id="7758450972308449809">तुमच्या डिस्प्लेच्या सीमा समायोजित करा</translation>
 <translation id="7760004034676677601">आपण अपेक्षा करत होता हे तेच प्रारंभ पृष्ठ आहे?</translation>
 <translation id="7764225426217299476">पत्ता जोडा</translation>
 <translation id="7764256770584298012"><ph name="DOWNLOAD_DOMAIN" /> वरून <ph name="DOWNLOAD_RECEIVED" /></translation>
@@ -4436,10 +4435,10 @@
 <translation id="778480864305029524">इंस्टंट टेदरिंग वापरण्यासाठी, Google Play सेवा च्या सूचना चालू करा.</translation>
 <translation id="7786207843293321886">अतिथी निर्गमन</translation>
 <translation id="7786889348652477777">&amp;अ‍ॅप रीलोड करा</translation>
-<translation id="7787308148023287649">दुसऱ्या स्क्रीनवर प्रदर्शित करा</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_4" />आपल्या डाउनलोड फोल्डरमधून फायली हटवा<ph name="MARKUP_5" /></translation>
+<translation id="7787308148023287649">दुसऱ्या स्क्रीनवर डिस्प्ले करा</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_4" />तुमच्या डाउनलोड फोल्डरमधून फायली हटवा<ph name="MARKUP_5" /></translation>
 <translation id="7788298548579301890">आपल्‍या संगणकावरील दुसर्‍या प्रोग्रामने एक अ‍ॅप जोडला जो Chrome ची कार्य करण्‍याची पद्धत कदाचित बदलू शकतो.
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="7788383851298063850">काय होत आहे ते आम्हाला सांगा</translation>
@@ -4470,24 +4469,24 @@
     <ph name="LINE_BREAK2" />
     अगदी थोडे फोटो निवडण्याचा प्रयत्न करा.</translation>
 <translation id="782590969421016895">वर्तमान पेज वापरा</translation>
-<translation id="7826790948326204519"><ph name="BEGIN_H3" />डीबगिंग वैशिष्ट्ये<ph name="END_H3" />
+<translation id="7826790948326204519"><ph name="BEGIN_H3" />डिबगिंग वैशिष्ट्ये<ph name="END_H3" />
     <ph name="BR" />
-तुमच्या डिव्हाइसवर कस्टम कोडची चाचणी करण्यासाठी व इंस्टॉल करण्यासाठी तुम्ही तुमच्या Chrome OS डिव्हाइसवर डीबगिंग वैशिष्ट्ये सुरू करू शकता. यामुळे तुम्हाला याची अनुमती मिळेल:<ph name="BR" />
+    तुम्ही तुमच्या डिव्हाइसवर कस्टम कोड इंस्टॉल करण्यासाठी आणि त्याची चाचणी घेण्यासाठी तुमच्या Chrome OS डिव्हाइसवर डिबगिंग वैशिष्ट्ये सक्षम करू शकता. हे तुम्हाला याची अनुमती देईल:<ph name="BR" />
     <ph name="BEGIN_LIST" />
-      <ph name="LIST_ITEM" /> रूटएफएस पडताळणी काढून टाका जेणेकरून तुम्ही OS फायलींमध्ये बदल करू शकता
-      <ph name="LIST_ITEM" />मानक चाचणी कीचा वापर करून SSH अ‍ॅक्सेस सुरु करा जेणेकरून तुम्ही डिव्हाइस अ‍ॅक्सेस करण्यासाठी <ph name="BEGIN_CODE" />'क्रॉस फ्लॅश'<ph name="END_CODE" /> सारख्या टूल्सचा वापर करू शकता 
-      <ph name="LIST_ITEM" /> USB मधून बूटिंग करणे सुरू करा जेणेकरून तुम्ही USB ड्राइव्हमधून एक OS इमेज इंस्टॉल करू शकता
-      <ph name="LIST_ITEM" />डेव्ह आणि सिस्टम रूट लॉग इन अशा दोन्ही पासवर्डला एका कस्टम मूल्याला सेट करा जेणेकरून तुम्ही डिव्हाइसमध्ये वैयक्तिकरीत्या SSH करू शकता
+      <ph name="LIST_ITEM" />rootfs पडताळणी काढा जेणेकरून तुम्ही OS फायलीमध्ये सुधारणा करू शकता
+      <ph name="LIST_ITEM" />मानक चाचणी की वापरून डिव्हाइसवर SSH अॅक्सेस सक्षम करा जेणेकरून डिव्हाइस अॅक्सेस करण्यासाठी तुम्ही <ph name="BEGIN_CODE" />'cros flash'<ph name="END_CODE" /> सारखी टूल वापरू शकता
+      <ph name="LIST_ITEM" />USB वरून बूट करणे सक्षम करा जेणेकरून तुम्ही USB ड्राइव्हवरून OS इमेज इंस्टॉल करू शकता
+      <ph name="LIST_ITEM" />एका कस्टम मूल्यावर तुमचे dev आणि सिस्टम दोन्ही मूळ लॉग इन पासवर्ड सेट करा जेणेकरून तुम्ही डिव्हाइसवर मॅन्युअली SSH करू शकता
     <ph name="END_LIST" />
     <ph name="BR" />
-    एकदा का सुरू केले की, एंटरप्राइज व्यवस्थापित डिव्हाइसवरील बहुतांश डिबगिंग वैशिष्ट्ये पॉवरवॉश किंवा डेटा पुसून टाकल्यानंतरदेखील सुरु राहतील. सर्व डिबगिंग वैशिष्ट्यांना पूर्णपणे बंद करण्यासाठी Chrome OS रिकव्हरी प्रक्रिया पूर्ण करा (https://support.google.com/chromebook/answer/1080595).
+    एकदा सक्षम केल्यानंतर, एन्टरप्राइझ व्यवस्थापित डिव्हाइसवर Powerwash केल्यानंतर किंवा डेटा पुसल्यानंतर सर्वाधिक डीबगिंग वैशिष्ट्ये सक्षम केलेली राहतील.  सर्व डीबगिंग वैशिष्ट्ये पूर्णपणे अक्षम करण्यासाठी, Chrome OS रिकव्हरी प्रक्रिया पूर्ण करा (https://support.google.com/chromebook/answer/1080595).
     <ph name="BR" />
     <ph name="BR" />
-    डीबगिंग वैशिष्ट्यांबद्दलच्या अधिक माहितीसाठी पहा:<ph name="BR" />
-    https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-features
+    डीबगिंग वैशिष्ट्यांविषयी अधिक माहितीसाठी हे पहा:<ph name="BR" />
+    http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-features
     <ph name="BR" />
     <ph name="BR" />
-    <ph name="BEGIN_BOLD" />सूचना:<ph name="END_BOLD" /> प्रक्रियेदरम्यान सिस्टम रीबूट होईल.</translation>
+    <ph name="BEGIN_BOLD" />टीप:<ph name="END_BOLD" />  प्रक्रियेदरम्यान सिस्टम रीबूट होईल.</translation>
 <translation id="7829298379596169484">ऑडिओ इनपुटमध्‍ये प्रवेश करीत आहे</translation>
 <translation id="7831491651892296503">नेटवर्क कॉन्फिगर करताना एरर आली</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -4497,7 +4496,7 @@
 <translation id="7837307963048806839">•  $1</translation>
 <translation id="7837776265184002579">आपले मुख्यपृष्‍ठ <ph name="URL" /> मध्‍ये बदलले.</translation>
 <translation id="7839051173341654115">पहा/बॅकअप घ्‍या मीडिया</translation>
-<translation id="7839192898639727867">प्रमाणपत्र विषय की आयडी</translation>
+<translation id="7839192898639727867">सर्टिफिकेट विषय की आयडी</translation>
 <translation id="7839804798877833423">या फायली प्राप्त करताना अंदाजे <ph name="FILE_SIZE" /> मोबाइल डेटा वापरला जाईल.</translation>
 <translation id="7844553762889824470">तुम्हाला जे ऐकायचे आहे ते हायलाइट करा, त्यानंतर शोध + S दाबा. निवड करण्यासाठी तुम्ही शोध कीदेखील दाबून आणि धरून ठेवू शकता किंवा तुमच्या प्रोफाइल इमेजजवळच्या बोलण्यासाठी निवडा आयकनवर टॅप करू शकता.</translation>
 <translation id="7844992432319478437">फरक अपडेट करत आहे</translation>
@@ -4512,7 +4511,7 @@
 <translation id="7851716364080026749">नेहमी कॅमेरा आणि मायक्रोफोन प्रवेश अवरोधित करा</translation>
 <translation id="7853747251428735">अधिक साध&amp;ने</translation>
 <translation id="7856006446339184955">सिस्टम डेटा पाठवा. हे डिव्हाइस सध्या आपोआप निदान आणि डिव्हाइस आणि अ‍ॅप वापर डेटा Google ला पाठवेल. ही <ph name="BEGIN_LINK1" />सेटिंग<ph name="END_LINK1" /> मालकाद्वारे लागू केली आहे. तुम्ही अतिरिक्त वेब आणि अ‍ॅप अ‍ॅक्टिव्हिटी सुरू केल्यास, ही माहिती तुमच्या खात्यासह स्टोअर केली जाईल जेणेकरून तुम्ही ती माझी अ‍ॅक्टिव्हिटीमध्ये व्यवस्थापित करू शकाल. <ph name="BEGIN_LINK2" />अधिक जाणून घ्या<ph name="END_LINK2" /></translation>
-<translation id="7857117644404132472">अपवाद जोडा</translation>
+<translation id="7857117644404132472">एक्सेप्शन जोडा</translation>
 <translation id="7857949311770343000">आपण अपेक्षा करत होता ते हे नवीन पृष्ठ आहे?</translation>
 <translation id="786073089922909430">सेवा: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;डाउनलोड</translation>
@@ -4520,7 +4519,7 @@
 <translation id="7868378670806575181">{NUM_COOKIES,plural, =1{एक कुकी}one{# कुकी}other{# कुकी}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - जोडणी केली</translation>
 <translation id="7870730066603611552">सेटअपनंतर सिंक पर्यायांचे परीक्षण करा</translation>
-<translation id="7870790288828963061">नवीन आवृत्तीसह कोणतेही कियोस्क अॅप्स आढळले नाहीत. काहीही अपडेट करू नका. कृपया USB स्टिक काढा.</translation>
+<translation id="7870790288828963061">नवीन आवृत्तीसह कोणतेही कियोस्क अॅप्स आढळले नाहीत. काहीही अपडेट करू नका. कृपया USB स्टिक काढून टाका.</translation>
 <translation id="7874257161694977650">Chrome बॅकग्राउंड</translation>
 <translation id="7877451762676714207">अज्ञात सर्व्हर एरर. कृपया पुन्हा प्रयत्न करा किंवा सर्व्हर प्रशासकाशी संपर्क साधा.</translation>
 <translation id="7877680364634660272">टूर</translation>
@@ -4530,12 +4529,12 @@
 <translation id="7882358943899516840">प्रदाता प्रकार</translation>
 <translation id="7885253890047913815">अलीकडील गंतव्ये</translation>
 <translation id="7887334752153342268">डुप्लिकेट</translation>
-<translation id="7887864092952184874">Bluetooth माउस जोडला</translation>
+<translation id="7887864092952184874">ब्लूटूथ माउस जोडला</translation>
 <translation id="7889565820482017512">डिस्प्ले आकार</translation>
 <translation id="7889966925761734854">शोधा</translation>
 <translation id="7892100671754994880">पुढील वापरकर्ता</translation>
 <translation id="7893008570150657497">आपल्या संगणकावरील फोटो, संगीत आणि इतर माध्यमांमध्ये प्रवेश करा</translation>
-<translation id="7893153962594818789">या <ph name="DEVICE_TYPE" /> वर ब्लुटूथ बंद आहे. तुमचा पासवर्ड टाका आणि ब्लुटूथ चालू करा.</translation>
+<translation id="7893153962594818789">या <ph name="DEVICE_TYPE" /> वर ब्लूटूथ बंद आहे. तुमचा पासवर्ड टाका आणि ब्लूटूथ सुरू करा.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (डीफॉल्ट)</translation>
 <translation id="78957024357676568">डावे</translation>
 <translation id="7897900149154324287">भविष्यात, आपण फायली अॅप मधील आपला काढण्यायोग्य डिव्हाइस अनप्लग करण्यापूर्वी तो निष्कासित करण्याचे सुनिश्चित करा. अन्यथा, आपण डेटा गमावू शकता.</translation>
@@ -4544,7 +4543,7 @@
 <translation id="790040513076446191">गोपनीयतेशी-संबद्ध सेटिंग्ज कुशलतेने हाताळा</translation>
 <translation id="7902874111237641165">अडथळा नसलेली हालचाल [बीटा]</translation>
 <translation id="7903345046358933331">पृष्ठ असंवादी झाले आहे. आपण ते संवादी होईपर्यंत प्रतीक्षा करू शकता किंवा ते बंद करू शकता.</translation>
-<translation id="7903742244674067440">आपल्याकडे फाईलवर अशी प्रमाणपत्रे आहेत जी या प्रमाणपत्र अधिकार्‍यांना ओळखतात</translation>
+<translation id="7903742244674067440">तुमच्याकडे फाइलवर अशी सर्टिफिकेट आहेत जी या सर्टिफिकेट अधिकार्‍यांची ओळख पटवतात</translation>
 <translation id="7903925330883316394">उयुक्तता: <ph name="UTILITY_TYPE" /></translation>
 <translation id="7904094684485781019">या खात्याच्या प्रशासकाने एकाधिक साइन इन ची अनुमती रद्द केली आहे.</translation>
 <translation id="7904402721046740204">प्रमाणीकरण करीत आहे</translation>
@@ -4629,7 +4628,7 @@
 <translation id="8017335670460187064"><ph name="LABEL" /></translation>
 <translation id="8017679124341497925">शॉर्टकट संपादित केला</translation>
 <translation id="8018313076035239964">वेबसाइट कोणती माहिती वापरू शकतात आणि कोणती सामग्री आपल्याला दर्शवू शकतात ते नियंत्रित करा</translation>
-<translation id="8023801379949507775">त्वरित विस्तार अपडेट करा</translation>
+<translation id="8023801379949507775">तातडीने एक्सटेंशन अपडेट करा</translation>
 <translation id="8024483450737722621">आपण Google Play वरून डाउनलोड केलेले अॅप्स या Chromebook वरून हटविले जातील.
       <ph name="LINE_BREAKS1" />
       आपण खरेदी केलेली सामग्री जसे की चित्रपट, टीव्ही शो, संगीत, पुस्तके किंवा अन्य अॅप-मधील खरेदी हटविल्या जाऊ शकतात.
@@ -4719,7 +4718,7 @@
 <translation id="8154790740888707867">फाईल नाही</translation>
 <translation id="815491593104042026">अरेरे! प्रमाणीकरण अ-सुरक्षित (<ph name="BLOCKED_URL" />) URL वापरण्यासाठी कॉन्फिगर केल्यामुळे ते अयशस्वी झाले. कृपया आपल्या प्रशासकाशी संपर्क साधा.</translation>
 <translation id="8157939133946352716">7x5</translation>
-<translation id="816055135686411707">प्रमाणपत्र विश्वास सेट करताना एरर</translation>
+<translation id="816055135686411707">सर्टिफिकेट विश्वास सेट करताना एरर</translation>
 <translation id="816095449251911490"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" />, <ph name="TIME_REMAINING" /></translation>
 <translation id="8162857629993139764">नवीन टीप तयार करा</translation>
 <translation id="8168435359814927499">सामग्री</translation>
@@ -4745,7 +4744,7 @@
 <translation id="8195027750202970175">डिस्क वरील आकार</translation>
 <translation id="8199300056570174101">नेटवर्क (सेवा) आणि डिव्हाइसचे गुणधर्म</translation>
 <translation id="8200772114523450471">रेझ्युमे</translation>
-<translation id="8202160505685531999">कृपया आपले <ph name="DEVICE_TYPE" /> प्रोफाईल अपडेट करण्‍यासाठी आपला पासवर्ड पु्न्हा-प्रविष्‍ट करा.</translation>
+<translation id="8202160505685531999">कृपया तुमचे <ph name="DEVICE_TYPE" /> प्रोफाइल अपडेट करण्‍यासाठी तुमचा पासवर्ड पुन्हा एंटर करा.</translation>
 <translation id="8206354486702514201">या सेटिंगची अंमलबजावणी आपल्या प्रशासकाकडून होते.</translation>
 <translation id="8206745257863499010">Bluesy</translation>
 <translation id="8209677645716428427">एक पर्यवेक्षी वापरकर्ता आपल्या मार्गदर्शनाने वेब एक्सप्लोर करू शकतो. Chrome मधील पर्यवेक्षी वापरकर्त्याचा व्यवस्थापक म्हणून, आपण हे करू शकता:</translation>
@@ -4755,7 +4754,7 @@
 <translation id="8214489666383623925">फाइल उघडा...</translation>
 <translation id="8214962590150211830">या व्यक्तीस काढा</translation>
 <translation id="8217399928341212914">एकाधिक फायलींचे स्वयंचलित डाउनलोड अवरोधित करणे सुरू ठेवा</translation>
-<translation id="8223479393428528563">ऑफलाइन वापराकरिता या फायली सेव्ह करण्यासाठी, परत ऑनलाइन व्‍हा, फायलींवर उजवे-क्लिक करा आणि <ph name="OFFLINE_CHECKBOX_NAME" /> पर्याय निवडा.</translation>
+<translation id="8223479393428528563">ऑफलाइन वापराकरिता या फायली सेव्ह करण्यासाठी, परत ऑनलाइन व्‍हा, फायलींवर राइट-क्लिक करा आणि <ph name="OFFLINE_CHECKBOX_NAME" /> पर्याय निवडा.</translation>
 <translation id="8225753906568652947">तुमच्या ऑफर रिडीम करा</translation>
 <translation id="8226222018808695353">निषिद्ध केलेले</translation>
 <translation id="8226619461731305576">रांग</translation>
@@ -4788,7 +4787,7 @@
 <translation id="8261506727792406068">हटवा</translation>
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> नी आपला माउस कर्सर अक्षम केला आहे.</translation>
 <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" प्रवर्तित क्षेत्रे.</translation>
-<translation id="8270242299912238708">PDF दस्तऐवज</translation>
+<translation id="8270242299912238708">पीडीएफ दस्तऐवज</translation>
 <translation id="827097179112817503">मुख्यपृष्ठ बटण दर्शवा</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{1 बुकमार्क हटवला}one{# बुकमार्क हटवला}other{# बुकमार्क हटवले}}</translation>
 <translation id="8272443605911821513">"अधिक साधने" मेनूमधील विस्तार क्लिक करून आपले विस्तार व्यवस्थापित करा.</translation>
@@ -4807,17 +4806,17 @@
 <translation id="8291967909914612644">मुख्यपृष्ठ प्रदाता देश</translation>
 <translation id="8294431847097064396">स्रोत</translation>
 <translation id="8297006494302853456">कमकुवत</translation>
-<translation id="8299319456683969623">आपण सध्या ऑफलाइन आहात.</translation>
+<translation id="8299319456683969623">तुम्ही सध्या ऑफलाइन आहात.</translation>
 <translation id="8300849813060516376">OTASP बिघडले</translation>
 <translation id="8308179586020895837"><ph name="HOST" /> आपल्या कॅमेर्‍यावर प्रवेश करू इच्छित असल्यास विचारा</translation>
 <translation id="830868413617744215">बीटा</translation>
-<translation id="8309458809024885768">प्रमाणपत्र आधीपासूनच विद्यमान आहे</translation>
+<translation id="8309458809024885768">सर्टिफिकेट आधीपासूनच अस्तित्वात आहे</translation>
 <translation id="8312871300878166382">फोल्डरमध्ये पेस्ट करा</translation>
 <translation id="8317671367883557781">नेटवर्क कनेक्शन जोडा</translation>
 <translation id="8319414634934645341">विस्तारित की वापर</translation>
 <translation id="8320459152843401447">तुमची संपूर्ण स्क्रीन</translation>
 <translation id="8322814362483282060">या पृष्ठाला आपल्या मायक्रोफोनवर प्रवेश करण्यापासून अवरोधित केले गेले आहे.</translation>
-<translation id="8326478304147373412">PKCS #7, प्रमाणपत्र श्रृंखला</translation>
+<translation id="8326478304147373412">PKCS #7, सर्टिफिकेट श्रृंखला</translation>
 <translation id="8327039559959785305">Linux फायलींमध्ये एरर आली. कृपया पुन्हा प्रयत्न करा.</translation>
 <translation id="8329978297633540474">साधा मजकूर</translation>
 <translation id="8335587457941836791">शेल्फपासून अनपिन करा</translation>
@@ -4829,7 +4828,7 @@
 <translation id="8342861492835240085">संकलन निवडा</translation>
 <translation id="8343956361364550006">सर्वोत्तम व्हिडिओ किंवा अॅनिमेशनसाठी उच्च बँडविड्थ वापरा. मंद कनेक्शन असलेल्या इतर लोकांना कदाचित तुमचा आशय दिसणार नाही.</translation>
 <translation id="8349826889576450703">लाँचर</translation>
-<translation id="8351419472474436977">या विस्ताराने आपल्या प्रॉक्सी सेटिंग्जचे नियंत्रण घेतले आहे, याचा अर्थ ही बदलू शकते, खंडित होवू शकते किंवा आपण ऑनलाइन करता ती कोणतीहीगोष्ट चोरून एकू शकतो. हा बदल का झाला, याबद्दल आपण निश्चित नसल्यास, आपल्याला कदाचित तो नको आहे.</translation>
+<translation id="8351419472474436977">या एक्स्टेंशनने तुमच्या प्रॉक्सी सेटिंग्जचे नियंत्रण घेतले आहे, याचा अर्थ ही बदलू शकते, खंडित होवू शकते किंवा तुम्ही ऑनलाइन करता ती कोणतीहीगोष्ट चोरून एकू शकतो. हा बदल का झाला, याबद्दल तुम्ही निश्चित नसल्यास, तुम्हाला कदाचित तो नको आहे.</translation>
 <translation id="8352772353338965963">एकाधिक साइन इन वर खाते जोडा. सर्व साइन इन केलेल्या खात्यांवर संकेतशब्दाशिवाय प्रवेश केला जाऊ शकतो, म्हणून हे वैशिष्ट्य केवळ विश्वसनीय खात्यांसह वापरले जावे.</translation>
 <translation id="8353683614194668312">ते करू शकते:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
@@ -4921,7 +4920,7 @@
 <translation id="8487678622945914333">झूम इन करा</translation>
 <translation id="8487693399751278191">त्वरित बुकमार्क आयात करा...</translation>
 <translation id="8487700953926739672">ऑफलाइन उपलब्ध</translation>
-<translation id="8490896350101740396">खालील कियोस्क अॅप्स "<ph name="UPDATED_APPS" />" अपडेटित करण्यात आले आहेत. कृपया अपडेट प्रक्रिया पूर्ण करण्यासाठी डिव्हाइस रीबूट करा.</translation>
+<translation id="8490896350101740396">खालील कियोस्क अॅप्स <ph name="UPDATED_APPS" /> "UPDATED_APPS" अपडेट करण्यात आले आहेत. कृपया अपडेट प्रक्रिया पूर्ण करण्यासाठी डिव्हाइस रीबूट करा.</translation>
 <translation id="8493236660459102203">मायक्रोफोन:</translation>
 <translation id="8496717697661868878">हे प्लगइन चालवा</translation>
 <translation id="8497219075884839166">Windows सुविधा</translation>
@@ -4942,13 +4941,13 @@
 <translation id="8529026713753283969">तुम्हाला या फोनवर सूचना मिळेल त्यामुळे फोन जवळपास ठेवा.</translation>
 <translation id="8529925957403338845">झटपट टिथरिंग कनेक्‍शन अयशस्वी झाले</translation>
 <translation id="8534656636775144800">अरेरे! डोमेनमध्ये सामील होण्याचा प्रयत्न करताना काहीतरी गडबड झाली. कृपया पुन्हा प्रयत्न करा.</translation>
-<translation id="8535005006684281994">Netscape प्रमाणपत्र नूतनीकरण URL</translation>
+<translation id="8535005006684281994">Netscape सर्टिफिकेट रिन्यूअल URL</translation>
 <translation id="8538358978858059843">Cast साठी क्लाउड सेवा सुरू करायच्या?</translation>
 <translation id="8539727552378197395">नाही (HttpOnly)</translation>
 <translation id="8541166929715485291">सिस्टम डेटा पाठवा. आपोआप निदान आणि डिव्हाइस आणि अ‍ॅप वापर डेटा Google ला पाठवा. या डिव्हाइससाठी निदान आणि वापर डेटा Google ला पाठवण्याचे मालक निवडू शकतो. तुम्ही हे <ph name="BEGIN_LINK1" />सेटिंग्ज<ph name="END_LINK1" /> मध्ये पाहू शकता. तुम्ही अतिरिक्त वेब आणि अ‍ॅप अॅक्टिव्हिटी चालू केली असल्यास, ही माहिती तुमच्या खात्यात स्टोअर केली जाईल जेणेकरून तुम्ही ती माझी अॅक्टिव्हिटी मध्ये व्यवस्थापित करू शकाल. <ph name="BEGIN_LINK2" />अधिक जाणून घ्या<ph name="END_LINK2" /></translation>
 <translation id="8545575359873600875">क्षमस्व, आपला पासवर्ड सत्यापित केला जाऊ शकला नाही. या पर्यवेक्षी वापरकर्त्याच्या व्यवस्थापकाने अलीकडे संकेतश्द बदलला असू शकतो. तसे असल्यास, आपण पुढील वेळी साइन इन कराल तेव्हा नवीन पासवर्ड लागू केला जाईल. आपला जुना पासवर्ड वापरून पहा.</translation>
 <translation id="8546186510985480118">डिव्हाइसवर स्थान कमी आहे</translation>
-<translation id="8546306075665861288">इमेज कॅश  </translation>
+<translation id="8546306075665861288">इमेज कॅश</translation>
 <translation id="8546541260734613940">[*.]example.com</translation>
 <translation id="854655314928502177">वेब प्रॉक्सी स्वयं शोध URL:</translation>
 <translation id="8546930481464505581">स्पर्श बार कस्टमाइझ करा</translation>
@@ -4963,7 +4962,7 @@
 <translation id="8559694214572302298">इमेज डीकोडर</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
 <translation id="8562084399541316921">वाचन सुरू ठेवा</translation>
-<translation id="8565650234829130278">अ‍ॅप श्रेणीअवनत करण्याचा प्रयत्न.</translation>
+<translation id="8565650234829130278">अ‍ॅप डाउनग्रेड करण्याचा प्रयत्न.</translation>
 <translation id="8569002732135253578"><ph name="DOCUMENT_NAME" /> प्रिंट करत आहे</translation>
 <translation id="8569682776816196752">कोणतीही गंतव्ये आढळली नाहीत</translation>
 <translation id="8569764466147087991">उघडण्यासाठी फाइल निवडा</translation>
@@ -4973,7 +4972,7 @@
 <translation id="8578639784464423491">९९ पेक्षा जास्‍त अक्षरे असू शकत नाहीत</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> आयटम संकालित करीत आहे...</translation>
 <translation id="857943718398505171">अनुमती दिली (शिफारस केलेले)</translation>
-<translation id="8581809080475256101">पुढे जाण्‍यासाठी दाबा, इतिहास पाहण्‍यासाठी संदर्भ मेनूवर जा</translation>
+<translation id="8581809080475256101">पुढे जाण्‍यासाठी दाबा, इतिहास पाहण्‍यासाठी काँटेक्स्ट मेनूवर जा</translation>
 <translation id="8584280235376696778">नवीन टॅबमध्ये व्हिडिओ &amp;उघडा</translation>
 <translation id="8588866096426746242">प्रोफाइल आकडेवारी दर्शवा</translation>
 <translation id="8590375307970699841">स्वयंचलित अपडेट सेट करा</translation>
@@ -5031,7 +5030,7 @@
 <translation id="8662978096466608964">Chrome वॉलपेपर सेट करू शकत नाही.</translation>
 <translation id="8663099077749055505"><ph name="HOST" /> वरील एकाधिक स्वयंचलित डाउनलोड नेहमी अवरोधित करा</translation>
 <translation id="8664389313780386848">पृष्ठ स्त्रोत &amp;पहा</translation>
-<translation id="866611985033792019">ईमेल वापरकर्त्यांना ओळखण्यासाठी या प्रमाणपत्रावर विश्वास ठेवा</translation>
+<translation id="866611985033792019">ईमेल वापरकर्त्यांना ओळखण्यासाठी या सर्टिफिकेटवर विश्वास ठेवा</translation>
 <translation id="8666584013686199826">साइटला केव्हा USB डिव्हाइस अॅक्सेस करायचे आहेत हे विचारा</translation>
 <translation id="8667328578593601900"><ph name="FULLSCREEN_ORIGIN" /> आता फुलस्क्रीन असून आपला माऊस कर्सर अक्षम केला आहे.</translation>
 <translation id="8669284339312441707">गरम</translation>
@@ -5060,7 +5059,7 @@
 <translation id="870073306461175568">नेटवर्क फाइल शेअर</translation>
 <translation id="8701677791353449257">डिव्हाइसचे नाव रेग्युलर एक्स्प्रेशन <ph name="REGEX" /> शी जुळणे आवश्यक आहे.</translation>
 <translation id="8704521619148782536">यास नेहमीपेक्षा जास्त वेळ लागत आहे. आपण प्रतीक्षा करु शकता किंवा रद्द करा आणि नंतर पुन्हा प्रयत्न करा.</translation>
-<translation id="8705331520020532516">अनुक्रमांक</translation>
+<translation id="8705331520020532516">सिरीअल नंबर</translation>
 <translation id="8705580154597116082">फोनद्वारे वाय-फाय उपलब्ध आहे</translation>
 <translation id="8708000541097332489">बाहर पडताना साफ करा</translation>
 <translation id="870805141700401153">Microsoft Individual Code Signing</translation>
@@ -5105,16 +5104,16 @@
 <translation id="8758418656925882523">डिक्टेशन सुरू करा (टाइप करण्यासाठी बोला)</translation>
 <translation id="8759408218731716181">एकाधिक साइन इन सेट करू शकत नाही</translation>
 <translation id="8759753423332885148">अधिक जाणून घ्या.</translation>
-<translation id="8767621466733104912">सर्व वापरकर्त्यांसाठी Chrome स्वयंचलितपणे अपडेट करा</translation>
+<translation id="8767621466733104912">सर्व वापरकर्त्यांसाठी Chrome आपोआप अपडेट करा</translation>
 <translation id="8770406935328356739">विस्तार मूळ निर्देशिका</translation>
 <translation id="8770507190024617908">लोकांना व्यवस्थापित करा</translation>
 <translation id="8774934320277480003">शीर्ष समास</translation>
 <translation id="8775144690796719618">अवैध URL</translation>
-<translation id="8775404590947523323">तुमची संपादने स्वयंचलितपणे सेव्ह केली जातात.<ph name="BREAKS" /> मूळ प्रतिमेची प्रत ठेवण्यासाठी ''मूळवर खाडाखोड करा'' अनचेक करा</translation>
+<translation id="8775404590947523323">तुमची संपादने आपोआप सेव्ह केली जातात. <ph name="BREAKS" /> मूळ इमेजची प्रत ठेवण्यासाठी मूळ ओव्हरराइट करा अनचेक करा</translation>
 <translation id="8777628254805677039">मूळ संकतेशब्द</translation>
 <translation id="8780443667474968681">व्हॉइस शोध बंद केले गेले आहे.</translation>
 <translation id="878068003854005405">चला सुरुवात करूया. तुमचे बोट सेन्सरवर ठेवा.</translation>
-<translation id="878069093594050299">हे प्रमाणपत्र खालील वापरासाठी सत्यापित केलेले आहे:</translation>
+<translation id="878069093594050299">हे सर्टिफिकेट खालील वापरासाठी पडताळणी केलेले आहे:</translation>
 <translation id="8781980678064919987">झाकण बंद असताना बंद करा</translation>
 <translation id="8782565991310229362">कियोस्क अॅप्लिकेशन लाँच रद्द झाले.</translation>
 <translation id="8783093612333542422">&lt;strong&gt;<ph name="SENDER" />&lt;/strong&gt; आपल्याशी एक &lt;strong&gt;<ph name="PRINTER_NAME" />&lt;/strong&gt; प्रिंटर सामायिक करू इच्छितात.</translation>
@@ -5143,19 +5142,18 @@
 <translation id="8818152010000655963">वॉलपेपर</translation>
 <translation id="8818958672113348984">तुमचा फोन वापरून पडताळणी करा</translation>
 <translation id="8820817407110198400">Bookmarks</translation>
-<translation id="8821045908425223359">IP पत्ता स्वयंचलितपणे कॉन्फिगर करा</translation>
+<translation id="8821045908425223359">IP पत्ता आपोआप कॉन्फिगर करा</translation>
 <translation id="882204272221080310">अतिरिक्त सुरक्षिततेसाठी फर्मवेअर अपडेट करा.</translation>
 <translation id="8823514049557262177">दुवा मजकूर कॉपी करा</translation>
 <translation id="8824701697284169214">पृ&amp;ष्ठ जोडा...</translation>
 <translation id="8827752199525959199">आणखी कृती, <ph name="DOMAIN" /> वरील <ph name="USERNAME" /> साठीचा पासवर्ड</translation>
 <translation id="8828933418460119530">DNS नाव</translation>
-<translation id="8830796635868321089">वर्तमान प्रॉक्सी सेटिंग्ज वापरून अपडेट तपासणी अयशस्वी झाली. कृपया आपल्या <ph name="PROXY_SETTINGS_LINK_START" />प्रॉक्सी 
-सेटिंग्ज<ph name="PROXY_SETTINGS_LINK_END" /> समायोजित करा.</translation>
+<translation id="8830796635868321089">वर्तमान प्रॉक्सी सेटिंग्ज वापरून अपडेट तपासणी अयशस्वी झाली. कृपया तुमच्या <ph name="PROXY_SETTINGS_LINK_START" />प्रॉक्सी 
+सेटिंग्ज<ph name="PROXY_SETTINGS_LINK_END" /> अॅडजेस्ट करा.</translation>
 <translation id="8834039744648160717"><ph name="USER_EMAIL" /> ने नेटवर्क कॉन्फिगरेशन नियंत्रित केले आहे.</translation>
 <translation id="8834164572807951958">या आयटमच्या कॉपीवर '<ph name="DESTINATION_NAME" />' चे सदस्य अॅक्सेस मिळवतील.</translation>
 <translation id="8838770651474809439">हॅमबर्गर</translation>
-<translation id="883911313571074303">प्रतिमेवर भाष्य करा</translation>
-<translation id="8844690305858050198">पूर्ण झाले! धोकादायक सॉफ्टवेअर काढून टाकले. एक्स्टेंशन परत सुरू करण्यासाठी &lt;a href="chrome://extensions"&gt;Extensions&lt;/a&gt; ला भेट द्या.</translation>
+<translation id="883911313571074303">इमेजवर भाष्य करा</translation>
 <translation id="8845001906332463065">मदत मिळवा</translation>
 <translation id="8846141544112579928">कीबोर्डचा शोध घेत आहे...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5170,7 +5168,7 @@
 <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="8876215549894133151">स्वरूप:</translation>
 <translation id="8876307312329369159">हे सेटिंग डेमो सत्रामध्ये बदलले जाऊ शकत नाही.</translation>
@@ -5245,7 +5243,7 @@
 <translation id="8986494364107987395">Google ला वापर आकडेवारी आणि क्रॅश अहवाल स्वयंचलितपणे पाठवा</translation>
 <translation id="8987927404178983737">महिना</translation>
 <translation id="8991520179165052608">साइट तुमचा मायक्रोफोन वापरू शकते</translation>
-<translation id="899403249577094719">Netscape प्रमाणपत्र मूळ URL</translation>
+<translation id="899403249577094719">Netscape सर्टिफिकेट मूळ URL</translation>
 <translation id="8995603266996330174"><ph name="DOMAIN" /> द्वारे व्यवस्थापित</translation>
 <translation id="8996526648899750015">खाते जोडा...</translation>
 <translation id="9003647077635673607">सर्व वेबसाइटवर अनुमती द्या</translation>
@@ -5275,7 +5273,7 @@
 <translation id="9030515284705930323">आपल्या संस्थेने आपल्या खात्यासाठी Google Play स्टोअर सक्षम केले नाही. अधिक माहितीसाठी आपल्या प्रशासकाशी संपर्क साधा.</translation>
 <translation id="9033857511263905942">&amp;पेस्ट करा</translation>
 <translation id="9034924485347205037">Linux फायली</translation>
-<translation id="9035012421917565900">हे आयटम '<ph name="DESTINATION_NAME" />' मध्ये परत हलवणे शक्य नाही, म्हणून ही क्रिया पूर्ववत केली जाणार नाही.</translation>
+<translation id="9035012421917565900">हे आयटम '<ph name="DESTINATION_NAME" />' मध्ये परत हलवणे शक्य नाही, म्हणून ही क्रिया पहिल्यासारखी केली जाणार नाही.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">मूळ दर्शवा</translation>
 <translation id="9038430547971207796">पुढील वेळेस तुमचा फोन तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करेल. सेटिंग्जमधून Smart Lock बंद करा.</translation>
@@ -5311,7 +5309,7 @@
 <translation id="9072550133391925347">आपण सेव्ह केलेल्या संकेतशब्दासह <ph name="PASSWORD_MANAGER_BRAND" /> स्वयंचलितपणे आपल्याला पात्र असलेल्या साइट आणि अॅप्समध्ये साइन इन करते.</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="90737709606140813">या डिव्हाइसशी तुमची की पेअर करा जेणेकरून तुम्ही ती तुमच्या खात्यामध्ये साइन इन करण्यासाठी वापरू शकाल</translation>
-<translation id="9074739597929991885">Bluetooth</translation>
+<translation id="9074739597929991885">ब्लूटूथ</translation>
 <translation id="9074836595010225693">USB माउस कनेक्ट केला</translation>
 <translation id="9076523132036239772">क्षमस्व, आपले ईमेल किंवा पासवर्ड सत्यापित करणे शक्य नाही. प्रथम एखाद्या नेटवर्कशी कनेक्ट करण्याचा प्रयत्न करा.</translation>
 <translation id="9084064520949870008">विंडो म्हणून उघडा</translation>
@@ -5346,7 +5344,7 @@
 <translation id="9129010913019873477"><ph name="PERCENTAGE" /> (डीफॉल्ट)</translation>
 <translation id="9130015405878219958">अवैध मोड एंटर केले.</translation>
 <translation id="9130775360844693113">'<ph name="DESTINATION_NAME" />' चे सदस्य या आयटमचा अॅक्सेस मिळवतील.</translation>
-<translation id="9131487537093447019">Bluetooth डिव्हाइसेस वर संदेश पाठवा आणि त्यावरून प्राप्त करा.</translation>
+<translation id="9131487537093447019">ब्लूटूथ डिव्हाइस वर मेसेज पाठवा आणि त्यावरून मिळवा.</translation>
 <translation id="9131598836763251128">एक किंवा अधिक फायली निवडा</translation>
 <translation id="9133055936679483811">झिप करणे अयशस्वी. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="9134304429738380103">होय, मला मान्य आहे.</translation>
@@ -5375,12 +5373,12 @@
 <translation id="9170848237812810038">&amp;पूर्ववत करा</translation>
 <translation id="9170884462774788842">आपल्या संगणकावरील दुसऱ्या प्रोग्रामने Chrome च्या कार्य करण्याचा मार्ग बदलू शकणारी थीम जोडली.</translation>
 <translation id="9173995187295789444">ब्लूटूथ डिव्हाइससाठी स्कॅन करत आहे...</translation>
-<translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Bluetooth डिव्हाइस कनेक्ट केले</translation>
+<translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - ब्लूटूथ डिव्हाइस कनेक्ट केले</translation>
 <translation id="9177499212658576372">आपण सध्या <ph name="NETWORK_TYPE" /> नेटवर्कशी कनेक्ट केले आहे.</translation>
 <translation id="9179734824669616955">तुमच्या <ph name="DEVICE_TYPE" /> वर Linux (बीटा) सेट करा</translation>
 <translation id="9180281769944411366">या प्रक्रियेला काही मिनिटे लागू शकतात. Linux कंटेनर सुरू करत आहे.</translation>
 <translation id="9180380851667544951">साइट तुमची स्क्रीन शेअर करू शकते</translation>
-<translation id="9188441292293901223">कृपया हा <ph name="DEVICE_TYPE" /> अनलॉक करण्यासाठी Android च्या नवीनतम आवृत्तीवर आपला फोन अपडेट करा.</translation>
+<translation id="9188441292293901223">कृपया हा <ph name="DEVICE_TYPE" /> अनलॉक करण्यासाठी Android च्या नवीनतम आवृत्तीवर तुमचा फोन अपडेट करा.</translation>
 <translation id="9190063653747922532">L2TP/IPSec + पूर्व-सामायिक की</translation>
 <translation id="920045321358709304"><ph name="SEARCH_ENGINE" /> शोध</translation>
 <translation id="9201220332032049474">स्क्रीन लॉक पर्याय</translation>
@@ -5409,7 +5407,7 @@
 <translation id="936801553271523408">सिस्टम निदान डेटा</translation>
 <translation id="93766956588638423">विस्तार दुरुस्त करा</translation>
 <translation id="938339467127511841">Linux (Beta) स्टोरेज</translation>
-<translation id="938470336146445890">कृपया वापरकर्ता प्रमाणपत्र इंस्टॉल करा.</translation>
+<translation id="938470336146445890">कृपया वापरकर्ता सर्टिफिकेट इंस्टॉल करा.</translation>
 <translation id="938582441709398163">कीबोर्ड आच्छादन</translation>
 <translation id="939252827960237676">स्क्रीनशॉट सेव्ह करण्यात अयशस्वी</translation>
 <translation id="939519157834106403">SSID</translation>
@@ -5430,7 +5428,7 @@
 <translation id="967007123645306417">हे तुम्हाला तुमच्या Google खात्यांवरून साइन आउट करेल. तुमचे बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्जमध्ये केलेले बदल तुमच्या Google खात्याशी सिंक केले जाणार नाहीत. मात्र तुमचा सद्य डेटा तुमच्या Google खात्यामध्ये स्टोअर केलेला राहील आणि तो <ph name="BEGIN_LINK" />Google डॅशबोर्ड<ph name="END_LINK" /> वर व्यवस्थापित करता येईल.</translation>
 <translation id="967624055006145463">डेटा स्टोअर केला</translation>
 <translation id="968000525894980488">Google Play सेवा चालू करा.</translation>
-<translation id="968174221497644223">अॅप्लिकेशन कॅश  </translation>
+<translation id="968174221497644223">अॅप्लिकेशन कॅशे</translation>
 <translation id="969096075394517431">भाषा बदला</translation>
 <translation id="970047733946999531">{NUM_TABS,plural, =1{1 टॅब}one{# टॅब}other{# टॅब}}</translation>
 <translation id="971774202801778802">बुकमार्क URL</translation>
@@ -5445,7 +5443,7 @@
 <translation id="987897973846887088">इमेज उपलब्ध नाहीत</translation>
 <translation id="988978206646512040">रिक्त सांकेतिक वाक्यांशाची परवानगी नाही</translation>
 <translation id="992032470292211616">विस्‍तार, अॅप्स आणि थीम आपल्‍या डिव्‍हाइसची हानी करू शकतात. आपल्‍याला खात्री आहे की आपण सुरू ठेवू इच्‍छिता?</translation>
-<translation id="992592832486024913">ChromeVox (बोललेला अभिप्राय) अक्षम करा</translation>
+<translation id="992592832486024913">ChromeVox (वाचिक फीडबॅक) अक्षम करा</translation>
 <translation id="993540765962421562">इंस्टॉलेशन प्रगतीपथावर आहे</translation>
 <translation id="994289308992179865">&amp;वळण</translation>
 <translation id="996250603853062861">सुरक्षित कनेक्शन इंस्टॉल करत आहे...</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 991ad3a..5aedf4c 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -2183,7 +2183,6 @@
 <translation id="4296575653627536209">Tambahkan Pengguna di Bawah Seliaan</translation>
 <translation id="4297219207642690536">Mulakan semula dan tetapkan semula</translation>
 <translation id="4297322094678649474">Tukar Bahasa</translation>
-<translation id="4300305918532693141">Untuk menukar tetapan ini, <ph name="BEGIN_LINK" />tetapkan semula penyegerakan<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">panjang (2s)</translation>
 <translation id="4306119971288449206">Apl mesti disampaikan dengan jenis kandungan "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K langsung)</translation>
@@ -2532,7 +2531,7 @@
 <translation id="4880520557730313061">Autobaiki</translation>
 <translation id="4880827082731008257">Sejarah carian</translation>
 <translation id="4881695831933465202">Buka</translation>
-<translation id="4882312758060467256">Mempunyai akses ke tapak ini</translation>
+<translation id="4882312758060467256">Boleh mengakses tapak ini</translation>
 <translation id="4882473678324857464">Tumpukan penanda halaman</translation>
 <translation id="4882831918239250449">Kawal cara sejarah penyemakan imbas anda digunakan untuk memperibadikan Carian, iklan dan pelbagai lagi</translation>
 <translation id="4883178195103750615">Eksport penanda halaman ke fail HTML...</translation>
@@ -5156,7 +5155,6 @@
 <translation id="8834164572807951958">Ahli '<ph name="DESTINATION_NAME" />' akan mendapat akses ke salinan item ini.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Anotasikan imej</translation>
-<translation id="8844690305858050198">Selesai! Perisian berbahaya telah dialih keluar. Untuk menghidupkan semula sambungan, lawati &lt;a href="chrome://extensions"&gt;Sambungan.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Dapatkan bantuan</translation>
 <translation id="8846141544112579928">Mencari papan kekunci...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 7a1cae2..50d8102 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Gebruiker met beperkte rechten toevoegen</translation>
 <translation id="4297219207642690536">Opnieuw opstarten en resetten</translation>
 <translation id="4297322094678649474">Talen wijzigen</translation>
-<translation id="4300305918532693141">Als je deze instelling wilt wijzigen, moet je de <ph name="BEGIN_LINK" />synchronisatie resetten<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">lang (2 sec.)</translation>
 <translation id="4306119971288449206">Apps moeten worden weergegeven met inhoudstype '<ph name="CONTENT_TYPE" />'</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K live)</translation>
@@ -5155,7 +5154,6 @@
 <translation id="8834164572807951958">Leden van '<ph name="DESTINATION_NAME" />' krijgen toegang tot de kopie van deze items.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Afbeelding annoteren</translation>
-<translation id="8844690305858050198">Klaar. Schadelijke software is verwijderd. Als je de extensies weer wilt inschakelen, ga je naar &lt;a href="chrome://extensions"&gt;Extensies.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Hulp nodig?</translation>
 <translation id="8846141544112579928">Toetsenbord zoeken...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index f7b09c0e..abb300f9 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -42,7 +42,7 @@
 <translation id="1056775291175587022">Ingen nettverk</translation>
 <translation id="1056898198331236512">Advarsel</translation>
 <translation id="1058262162121953039">PUK</translation>
-<translation id="1059855432287631118">Registrerer fingeravtrykk</translation>
+<translation id="1059855432287631118">Registrering av fingeravtrykk</translation>
 <translation id="1061904396131502319">Snart tid for en pause</translation>
 <translation id="1062407476771304334">Erstatt</translation>
 <translation id="1067048845568873861">Opprettet</translation>
@@ -987,7 +987,7 @@
 <translation id="2493021387995458222">Velg «ord om gangen»</translation>
 <translation id="249303669840926644">Kunne ikke fullføre registreringen</translation>
 <translation id="2495777824269688114">Oppdag flere funksjoner eller få svar. Velg «?» for å få hjelp.</translation>
-<translation id="2496180316473517155">Nettlesingslogg</translation>
+<translation id="2496180316473517155">Nettleserlogg</translation>
 <translation id="2497229222757901769">Musehastighet</translation>
 <translation id="2497852260688568942">Administratoren din har slått av synkronisering</translation>
 <translation id="249819058197909513">Ikke advar om denne appen igjen</translation>
@@ -2175,7 +2175,6 @@
 <translation id="4296575653627536209">Legg til en administrert bruker</translation>
 <translation id="4297219207642690536">Start på nytt og tilbakestill</translation>
 <translation id="4297322094678649474">Endre språk</translation>
-<translation id="4300305918532693141">For å endre denne innstillingen, <ph name="BEGIN_LINK" />tilbakestill synkroniseringen<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">lang (2 s)</translation>
 <translation id="4306119971288449206">Apper må leveres med innholdstypen «<ph name="CONTENT_TYPE" />»</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB ubrukt)</translation>
@@ -4624,7 +4623,7 @@
       Det kan hende innhold du har kjøpt (for eksempel filmer, TV-serier, musikk, bøker eller andre kjøp i apper) også slettes.
       <ph name="LINE_BREAKS2" />
       Dette har ikke innvirkning på apper eller innhold på andre enheter.</translation>
-<translation id="8026334261755873520">Slett nettlesingsdata</translation>
+<translation id="8026334261755873520">Slett nettleserdata</translation>
 <translation id="8028060951694135607">Microsoft nøkkelgjenoppretting</translation>
 <translation id="8028134359912645720">Hold nede Control, Alt og Shift eller Appoversikt for å se hurtigtaster for disse modifikatorene.</translation>
 <translation id="8028803902702117856">Laster ned <ph name="SIZE" />, <ph name="FILE_NAME" /></translation>
@@ -5143,7 +5142,6 @@
 <translation id="8834164572807951958">Medlemmer av «<ph name="DESTINATION_NAME" />» får tilgang til kopier av disse elementene.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Kommenter bildet</translation>
-<translation id="8844690305858050198">Ferdig! Skadelig programvare er fjernet. For å slå på utvidelser igjen, besøk &lt;a href="chrome://extensions"&gt;Utvidelser&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Få hjelp</translation>
 <translation id="8846141544112579928">Søker etter tastatur …</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 29cd6bb..dadf553 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Dodaj nadzorowanego użytkownika</translation>
 <translation id="4297219207642690536">Uruchom ponownie i zresetuj</translation>
 <translation id="4297322094678649474">Zmień języki</translation>
-<translation id="4300305918532693141">Aby zmienić to ustawienie, <ph name="BEGIN_LINK" />zresetuj synchronizację<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">długie (2 s)</translation>
 <translation id="4306119971288449206">Aplikacje muszą być udostępniane z parametrem content-type „<ph name="CONTENT_TYPE" />”</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (aktywne <ph name="NUM_KILOBYTES_LIVE" /> KB)</translation>
@@ -5155,7 +5154,6 @@
 <translation id="8834164572807951958">Osoby z uprawnieniami do: „<ph name="DESTINATION_NAME" />” uzyskają dostęp do kopii tych elementów.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Dodaj notatkę na grafice</translation>
-<translation id="8844690305858050198">Gotowe. Szkodliwe oprogramowanie zostało usunięte. Aby z powrotem włączyć rozszerzenia, otwórz &lt;a href="chrome://extensions"&gt;Rozszerzenia&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Uzyskaj pomoc</translation>
 <translation id="8846141544112579928">Szukam klawiatury...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index da78637..743c13f 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Adicionar usuário supervisionado</translation>
 <translation id="4297219207642690536">Reiniciar e redefinir</translation>
 <translation id="4297322094678649474">Alterar idiomas</translation>
-<translation id="4300305918532693141">Para alterar essa configuração, <ph name="BEGIN_LINK" />redefina a sincronização<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">longo (2 seg)</translation>
 <translation id="4306119971288449206">Os apps precisam ser veiculados com o tipo de conteúdo "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K ativos)</translation>
@@ -4995,7 +4994,7 @@
 <translation id="8620765578342452535">Configurar conexões de rede</translation>
 <translation id="8624205858755890468">Permite que o Assistente mostre informações, ações e apps relacionados para você.</translation>
 <translation id="862542460444371744">&amp;Extensões</translation>
-<translation id="8626219642120025691">Timer concluído</translation>
+<translation id="8626219642120025691">Timer finalizado</translation>
 <translation id="8627151598708688654">Selecionar fonte</translation>
 <translation id="862727964348362408">Em suspensão</translation>
 <translation id="862750493060684461">Cache CSS</translation>
@@ -5157,7 +5156,6 @@
 <translation id="8834164572807951958">Membros de '<ph name="DESTINATION_NAME" />' terão acesso à cópia desses itens.</translation>
 <translation id="8838770651474809439">Hambúrger</translation>
 <translation id="883911313571074303">Fazer anotações na imagem</translation>
-<translation id="8844690305858050198">Pronto! Um software perigoso foi removido. Para reativar as extensões, visite &lt;a href="chrome://extensions"&gt;Extensões.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Ajuda</translation>
 <translation id="8846141544112579928">Procurando teclado...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index ef7f1d4c..0e0d9f4 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -2183,7 +2183,6 @@
 <translation id="4296575653627536209">Adicionar utilizador supervisionado</translation>
 <translation id="4297219207642690536">Reiniciar e repor</translation>
 <translation id="4297322094678649474">Alterar idiomas</translation>
-<translation id="4300305918532693141">Para alterar esta definição, <ph name="BEGIN_LINK" />reponha a sincronização<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">longo (2 seg)</translation>
 <translation id="4306119971288449206">As aplicações têm de ser publicadas com o tipo de conteúdo "<ph name="CONTENT_TYPE" />".</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K em directo)</translation>
@@ -4030,7 +4029,7 @@
 <translation id="7120865473764644444">Não foi possível estabelecer ligação ao servidor de sincronização. A tentar novamente…</translation>
 <translation id="7121362699166175603">Limpa o histórico e os preenchimentos automáticos na barra de endereço. A sua Conta Google pode ter outras formas do histórico de navegação em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="7123360114020465152">Já não é suportada.</translation>
-<translation id="71243390042171582">Atualizada há <ph name="MINUTES" /> min.</translation>
+<translation id="71243390042171582">Atualizada há <ph name="MINUTES" /> min</translation>
 <translation id="7124929488592184705">Erro ao imprimir <ph name="DOCUMENT_NAME" /></translation>
 <translation id="7126604456862387217">"&lt;b&gt;<ph name="SEARCH_STRING" />&lt;/b&gt;" – &lt;em&gt;pesquisar no Google Drive&lt;/em&gt;</translation>
 <translation id="7127980134843952133">Histórico de transferências</translation>
@@ -5156,7 +5155,6 @@
 <translation id="8834164572807951958">Os membros de "<ph name="DESTINATION_NAME" />" obterão acesso à cópia destes itens.</translation>
 <translation id="8838770651474809439">Hambúrguer</translation>
 <translation id="883911313571074303">Anotar imagem</translation>
-<translation id="8844690305858050198">Concluído! Software prejudicial removido. Para voltar a ativar as extensões, aceda a &lt;a href="chrome://extensions"&gt;Extensões&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Obter ajuda</translation>
 <translation id="8846141544112579928">A pesquisar teclado...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index a44e0d6..341298ce 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Adaugă un utilizator monitorizat</translation>
 <translation id="4297219207642690536">Repornește și resetează</translation>
 <translation id="4297322094678649474">Schimbă limbile</translation>
-<translation id="4300305918532693141">Pentru a modifica această setare, <ph name="BEGIN_LINK" />resetează sincronizarea<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">lungă (2 sec.)</translation>
 <translation id="4306119971288449206">Aplicațiile trebuie să fie difuzate utilizând antetul content-type „<ph name="CONTENT_TYPE" />”</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB live)</translation>
@@ -5154,7 +5153,6 @@
 <translation id="8834164572807951958">Membrii „<ph name="DESTINATION_NAME" />” vor obține acces la copia acestor articole.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Adnotează imaginea</translation>
-<translation id="8844690305858050198">Gata! Software-ul dăunător a fost eliminat. Pentru a reactiva extensiile, accesează &lt;a href="chrome://extensions"&gt;Extensii.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Obține ajutor</translation>
 <translation id="8846141544112579928">Se caută tastatura...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index b2a8f78..85cb083 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -2183,7 +2183,6 @@
 <translation id="4296575653627536209">Создать контролируемый профиль</translation>
 <translation id="4297219207642690536">Перезапустить и сбросить настройки</translation>
 <translation id="4297322094678649474">Настройки перевода</translation>
-<translation id="4300305918532693141">Чтобы изменить эту настройку, <ph name="BEGIN_LINK" />сбросьте параметры синхронизации<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">длинная (2 с)</translation>
 <translation id="4306119971288449206">Приложения должны иметь тип контента "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> КБ (<ph name="NUM_KILOBYTES_LIVE" /> КБ активно)</translation>
@@ -5155,7 +5154,6 @@
 <translation id="8834164572807951958">Пользователи общего диска "<ph name="DESTINATION_NAME" />" получат доступ к копиям этих объектов.</translation>
 <translation id="8838770651474809439">Гамбургер</translation>
 <translation id="883911313571074303">Добавить примечание к изображению</translation>
-<translation id="8844690305858050198">Готово! Вредоносное ПО удалено. Вы можете снова включить расширения на &lt;a href="chrome://extensions"&gt;этой странице&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Справка</translation>
 <translation id="8846141544112579928">Поиск клавиатуры…</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index be3d3c9cf..8f73286 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Pridať kontrolovaného používateľa</translation>
 <translation id="4297219207642690536">Reštartovať a resetovať</translation>
 <translation id="4297322094678649474">Zmeniť jazyky</translation>
-<translation id="4300305918532693141">Ak chcete zmeniť toto nastavenie, <ph name="BEGIN_LINK" />resetujte synchronizáciu<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">dlhé (2 s)</translation>
 <translation id="4306119971288449206">Aplikácie musia byť poskytované s typom obsahu „<ph name="CONTENT_TYPE" />“</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (aktívne: <ph name="NUM_KILOBYTES_LIVE" /> kB)</translation>
@@ -5154,7 +5153,6 @@
 <translation id="8834164572807951958">Členovia cieľa <ph name="DESTINATION_NAME" /> získajú prístup ku kópii týchto položiek.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Pridať k obrázku poznámku</translation>
-<translation id="8844690305858050198">Hotovo! Škodlivý softvér bol odstránený. Ak budete chcieť rozšírenia znova zapnúť, prejdite na stránku &lt;a href="chrome://extensions"&gt;Rozšírenia&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Získať pomoc</translation>
 <translation id="8846141544112579928">Hľadá sa klávesnica...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 1f71047..07a598a 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Dodajanje zaščitenega uporabnika</translation>
 <translation id="4297219207642690536">Znova zaženi in ponastavi</translation>
 <translation id="4297322094678649474">Spreminjanje jezikov</translation>
-<translation id="4300305918532693141">Če želite spremeniti to nastavitev, <ph name="BEGIN_LINK" />ponastavite sinhronizacijo<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">dolga (2 s)</translation>
 <translation id="4306119971288449206">Aplikacije morajo biti opremljene z vrsto vsebine »<ph name="CONTENT_TYPE" />«</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB dejavno)</translation>
@@ -5154,7 +5153,6 @@
 <translation id="8834164572807951958">Člani skupine »<ph name="DESTINATION_NAME" />« bodo imeli dostop do kopije teh elementov.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Dodaj pripis sliki</translation>
-<translation id="8844690305858050198">Končano. Škodljiva programska oprema je odstranjena. Če želite znova vklopiti razširitve, obiščite &lt;a href="chrome://extensions"&gt;Razširitve&lt;/a&gt;.</translation>
 <translation id="8845001906332463065">Poiščite pomoč</translation>
 <translation id="8846141544112579928">Iskanje tipkovnice ...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 7a57dce48..832c9645 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -2178,7 +2178,6 @@
 <translation id="4296575653627536209">Додај корисника под надзором</translation>
 <translation id="4297219207642690536">Рестартуј и ресетуј</translation>
 <translation id="4297322094678649474">Промените језике</translation>
-<translation id="4300305918532693141">Да бисте променили ово подешавање, <ph name="BEGIN_LINK" />ресетујте синхронизацију<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">Дуго (2 с)</translation>
 <translation id="4306119971288449206">Апликације морају да се приказују са типом садржаја „<ph name="CONTENT_TYPE" />“</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB уживо)</translation>
@@ -5151,7 +5150,6 @@
 <translation id="8834164572807951958">Чланови из „<ph name="DESTINATION_NAME" />“ ће добити приступ копији ових ставки.</translation>
 <translation id="8838770651474809439">Хамбургер</translation>
 <translation id="883911313571074303">Додај напомену у слику</translation>
-<translation id="8844690305858050198">Готово! Штетни софтвер је уклоњен. Да бисте поново укључили додатке, посетите &lt;a href="chrome://extensions"&gt;Додаци.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Затражите помоћ</translation>
 <translation id="8846141544112579928">Тражимо тастатуру...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 77e6d10..167495d 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -2181,7 +2181,6 @@
 <translation id="4296575653627536209">Lägg till kontrollerad användare</translation>
 <translation id="4297219207642690536">Starta om och återställ</translation>
 <translation id="4297322094678649474">Ändra språk</translation>
-<translation id="4300305918532693141"><ph name="BEGIN_LINK" />Återställ synkroniseringen<ph name="END_LINK" /> om du vill ändra den här inställningen</translation>
 <translation id="4305227814872083840">lång (2 s)</translation>
 <translation id="4306119971288449206">Apparna måste visas med content-type <ph name="CONTENT_TYPE" /></translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K aktiva)</translation>
@@ -5153,7 +5152,6 @@
 <translation id="8834164572807951958">De som använder <ph name="DESTINATION_NAME" /> får åtkomst till en kopia av dessa objekt.</translation>
 <translation id="8838770651474809439">Hamburgare</translation>
 <translation id="883911313571074303">Kommentera bild</translation>
-<translation id="8844690305858050198">Klart! Skadlig programvara har tagits bort. Om du vill aktivera tilläggen på nytt besöker du &lt;a href="chrome://extensions"&gt;Tillägg.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Få hjälp</translation>
 <translation id="8846141544112579928">Söker efter tangentbord …</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 7987ff4..8c8294d 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -2173,7 +2173,6 @@
 <translation id="4296575653627536209">Ongeza Mtumiaji Anayesimamiwa</translation>
 <translation id="4297219207642690536">Zima kisha uwashe na uweke upya</translation>
 <translation id="4297322094678649474">Badilisha Lugha</translation>
-<translation id="4300305918532693141">Ili kubadilisha mipangilio hii, <ph name="BEGIN_LINK" />weka upya usawazishaji<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">mrefu (sekunde 2)</translation>
 <translation id="4306119971288449206">Ni lazima programu zikabidhiwe aina ya maudhui "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K live)</translation>
@@ -5147,7 +5146,6 @@
 <translation id="8834164572807951958">Wanachama wa '<ph name="DESTINATION_NAME" />' watapata idhini ya kufikia nakala ya vipengee hivi.</translation>
 <translation id="8838770651474809439">Hambaga</translation>
 <translation id="883911313571074303">Eleza kuhusu picha</translation>
-<translation id="8844690305858050198">Imemaliza! Imeondoa programu hatari. Ili uwashe viendelezi, tembelea &lt;a href="chrome://extensions"&gt;Viendelezi.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Pata usaidizi</translation>
 <translation id="8846141544112579928">Inatafuta kibodi...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 5b7064b..b5e00a80 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">கண்காணிக்கப்படும் பயனரைச் சேர்</translation>
 <translation id="4297219207642690536">மீண்டும் தொடங்கி, மீட்டமை</translation>
 <translation id="4297322094678649474">மொழிகளை மாற்று</translation>
-<translation id="4300305918532693141">இந்த அமைப்பை மாற்ற,<ph name="BEGIN_LINK" />ஒத்திசைவை மீட்டமைக்கவும்<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">நீண்டது (2வி)</translation>
 <translation id="4306119971288449206">பயன்பாடுகள் "<ph name="CONTENT_TYPE" />" எனும் உள்ளடக்க வகையுடனேயே வழங்கப்பட வேண்டும்</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K பயன்பாட்டில்)</translation>
@@ -2752,7 +2751,7 @@
 <translation id="5227808808023563348">முந்தைய உரையைக் கண்டறி</translation>
 <translation id="5228076606934445476">சாதனத்தில் ஏதோ தவறு உள்ளது. இந்தப் பிழையிலிருந்து மீட்டமைக்க நீங்கள் சாதனத்தை மறுதொடக்கம் செய்து மீண்டும் முயற்சிக்கவும்.</translation>
 <translation id="5229189185761556138">உள்ளீட்டு முறைகளை நிர்வகி</translation>
-<translation id="5230516054153933099">ஜன்னல்</translation>
+<translation id="5230516054153933099">விண்டோ</translation>
 <translation id="5233019165164992427">NaCl பிழைத்திருத்தப் போர்ட்</translation>
 <translation id="5233231016133573565">செயலாக்க ID</translation>
 <translation id="5233638681132016545">புதிய தாவல்</translation>
@@ -5157,7 +5156,6 @@
 <translation id="8834164572807951958">'<ph name="DESTINATION_NAME" />' இன் உறுப்பினர்கள், இந்தக் கோப்புகளின் நகலுக்கான அணுகலைப் பெறுவார்கள்.</translation>
 <translation id="8838770651474809439">ஹம்பர்கர்</translation>
 <translation id="883911313571074303">படத்தைக் குறிப்பிடு</translation>
-<translation id="8844690305858050198">முடிந்தது! தீங்கிழைக்கும் மென்பொருள் அகற்றப்பட்டது. நீட்டிப்புகளை மீண்டும் இயக்க, &lt;a href="chrome://extensions"&gt;நீட்டிப்புகள் பிரிவுக்குச் செல்லவும்.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">உதவி பெறுக</translation>
 <translation id="8846141544112579928">விசைப்பலகையைத் தேடுகிறது...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 3039771..71e59fc 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">పర్యవేక్షించబడే వినియోగదారును జోడించు</translation>
 <translation id="4297219207642690536">మళ్లీ ప్రారంభించి, రీసెట్ చేయండి</translation>
 <translation id="4297322094678649474">భాషలను మార్చు</translation>
-<translation id="4300305918532693141">ఈ సెట్టింగ్‌ను మార్చడానికి, <ph name="BEGIN_LINK" />సమకాలీకరణను రీసెట్ చేయండి<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">దీర్ఘసమయం (2s)</translation>
 <translation id="4306119971288449206">యాప్‌లు తప్పనిసరిగా "<ph name="CONTENT_TYPE" />" కంటెంట్-రకంతో అందించబడాలి</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K ప్రత్యక్షంగా)</translation>
@@ -2752,7 +2751,7 @@
 <translation id="5227808808023563348">మునుపటి వచనం కనుగొను</translation>
 <translation id="5228076606934445476">పరికరంలో ఏదో తప్పు ఉంది.  ఈ లోపాన్ని పునరుద్ధరించడానికి మీరు పరికరాన్ని రీబూట్ చేసి, మళ్లీ ప్రయత్నించాలి.</translation>
 <translation id="5229189185761556138">ఇన్‌పుట్ పద్ధతులను నిర్వహించు</translation>
-<translation id="5230516054153933099">విండో</translation>
+<translation id="5230516054153933099">కిటికీ</translation>
 <translation id="5233019165164992427">NaCl డీబగ్ పోర్ట్</translation>
 <translation id="5233231016133573565">ప్రాసెస్ ID</translation>
 <translation id="5233638681132016545">క్రొత్త టాబ్</translation>
@@ -5151,7 +5150,6 @@
 <translation id="8834164572807951958">'<ph name="DESTINATION_NAME" />' యొక్క సభ్యులు ఈ అంశాల కాపీకి ప్రాప్యతను పొందుతారు.</translation>
 <translation id="8838770651474809439">హాంబర్గర్</translation>
 <translation id="883911313571074303">చిత్రాన్ని అనులేఖించు</translation>
-<translation id="8844690305858050198">పూర్తయింది! హానికరమైన సాఫ్ట్‌వేర్ తీసివేయబడింది. ఎక్స్‌టెన్షన్‌లను తిరిగి ఆన్ చేయడానికి, &lt;a href="chrome://extensions"&gt;ఎక్స్‌టెన్షన్‌లు&lt;/a&gt;ను సందర్శించండి.</translation>
 <translation id="8845001906332463065">సహాయం పొందండి</translation>
 <translation id="8846141544112579928">కీబోర్డ్ కోసం శోధిస్తోంది...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index abb258b..29acfe6e 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">เพิ่มผู้ใช้ภายใต้การดูแล</translation>
 <translation id="4297219207642690536">รีสตาร์ทและรีเซ็ต</translation>
 <translation id="4297322094678649474">เปลี่ยนภาษา</translation>
-<translation id="4300305918532693141">หากต้องการเปลี่ยนการตั้งค่านี้ ให้<ph name="BEGIN_LINK" />รีเซ็ตการซิงค์<ph name="END_LINK" /></translation>
 <translation id="4305227814872083840">นาน (2 วินาที)</translation>
 <translation id="4306119971288449206">แอปต้องได้รับบริการจากประเภทเนื้อหา "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (แสดงอยู่ <ph name="NUM_KILOBYTES_LIVE" />K)</translation>
@@ -5154,7 +5153,6 @@
 <translation id="8834164572807951958">สมาชิกของ "<ph name="DESTINATION_NAME" />" จะได้รับสิทธิ์เข้าถึงสำเนารายการเหล่านี้</translation>
 <translation id="8838770651474809439">แฮมเบอร์เกอร์</translation>
 <translation id="883911313571074303">ใส่หมายเหตุในรูปภาพ</translation>
-<translation id="8844690305858050198">เสร็จแล้ว! นำซอฟต์แวร์ที่เป็นอันตรายออกแล้ว หากต้องการเปิดส่วนขยายอีกครั้ง โปรดไปที่&lt;a href="chrome://extensions"&gt;ส่วนขยาย&lt;/a&gt;</translation>
 <translation id="8845001906332463065">ขอความช่วยเหลือ</translation>
 <translation id="8846141544112579928">กำลังค้นหาแป้นพิมพ์...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index f777bac..168150f 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Denetlenen Kullanıcı Ekle</translation>
 <translation id="4297219207642690536">Yeniden başlat ve sıfırla</translation>
 <translation id="4297322094678649474">Dilleri Değiştir</translation>
-<translation id="4300305918532693141">Bu ayarı değiştirmek için <ph name="BEGIN_LINK" />senkronizasyonu sıfırlayın<ph name="END_LINK" /></translation>
 <translation id="4305227814872083840">uzun (2 sn.)</translation>
 <translation id="4306119971288449206">Uygulamalar "<ph name="CONTENT_TYPE" />" içerik türüyle yayınlanmalıdır</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K aktif)</translation>
@@ -5154,7 +5153,6 @@
 <translation id="8834164572807951958">"<ph name="DESTINATION_NAME" />" hedefinin üyeleri, bu öğelerin kopyasına erişim hakkı kazanacaktır.</translation>
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Resme açıklama ekle</translation>
-<translation id="8844690305858050198">Bitti! Zararlı yazılım kaldırıldı. Uzantıları tekrar açmak için &lt;a href="chrome://extensions"&gt;Uzantılar&lt;/a&gt; sayfasını ziyaret edin.</translation>
 <translation id="8845001906332463065">Yardım alın</translation>
 <translation id="8846141544112579928">Klavye aranıyor...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 95bb8e5..3ba1e548 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Додати контрольованого користувача</translation>
 <translation id="4297219207642690536">Перезапустити й скинути</translation>
 <translation id="4297322094678649474">Змінити мови</translation>
-<translation id="4300305918532693141">Щоб змінити це налаштування, <ph name="BEGIN_LINK" />скиньте синхронізацію<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">довга затримка (2 с)</translation>
 <translation id="4306119971288449206">Додатки мають наповнюватися вмістом типу "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> КБ (<ph name="NUM_KILOBYTES_LIVE" /> КБ у реальному часі)</translation>
@@ -5154,7 +5153,6 @@
 <translation id="8834164572807951958">Учасники, які мають доступ до розташування "<ph name="DESTINATION_NAME" />", отримають доступ до копій цих елементів.</translation>
 <translation id="8838770651474809439">Гамбургер</translation>
 <translation id="883911313571074303">Додати нотатку до зображення</translation>
-<translation id="8844690305858050198">Готово! Шкідливе програмне забезпечення видалено. Щоб знову ввімкнути розширення, перейдіть на сторінку &lt;a href="chrome://extensions"&gt;Розширення.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Отримати довідку</translation>
 <translation id="8846141544112579928">Пошук клавіатури…</translation>
 <translation id="8847988622838149491">Сповіщення щодо USB</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index de2cc86..c737b21 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -2182,7 +2182,6 @@
 <translation id="4296575653627536209">Thêm người dùng được giám sát</translation>
 <translation id="4297219207642690536">Khởi động lại và đặt lại</translation>
 <translation id="4297322094678649474">Thay đổi ngôn ngữ</translation>
-<translation id="4300305918532693141">Để thay đổi cài đặt này, hãy <ph name="BEGIN_LINK" />đặt lại đồng bộ hóa<ph name="END_LINK" />.</translation>
 <translation id="4305227814872083840">lâu (2 giây)</translation>
 <translation id="4306119971288449206">Ứng dụng phải được cung cấp loại nội dung "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K hiện có)</translation>
@@ -5154,7 +5153,6 @@
 <translation id="8834164572807951958">Thành viên của '<ph name="DESTINATION_NAME" />' sẽ có quyền truy cập vào bản sao của các tệp này.</translation>
 <translation id="8838770651474809439">Bánh hamburger</translation>
 <translation id="883911313571074303">Chú thích hình ảnh</translation>
-<translation id="8844690305858050198">Xong! Đã xóa phần mềm độc hại. Để bật lại tiện ích, hãy truy cập vào mục &lt;a href="chrome://extensions"&gt;Tiện ích.&lt;/a&gt;</translation>
 <translation id="8845001906332463065">Nhận trợ giúp</translation>
 <translation id="8846141544112579928">Đang tìm kiếm bàn phím...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 9809a3e..e6c1906e 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -2175,7 +2175,6 @@
 <translation id="4296575653627536209">添加受监管用户</translation>
 <translation id="4297219207642690536">重启并重置</translation>
 <translation id="4297322094678649474">更改语言</translation>
-<translation id="4300305918532693141">要更改此设置,请<ph name="BEGIN_LINK" />重置同步<ph name="END_LINK" />。</translation>
 <translation id="4305227814872083840">长(2 秒)</translation>
 <translation id="4306119971288449206">应用必须以“<ph name="CONTENT_TYPE" />”这种内容类型提供</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K(实际大小为 <ph name="NUM_KILOBYTES_LIVE" /> K)</translation>
@@ -2744,7 +2743,7 @@
 <translation id="5227808808023563348">查找上一文字</translation>
 <translation id="5228076606934445476">设备出现问题。要从此错误下恢复,您需要重启设备,然后重试。</translation>
 <translation id="5229189185761556138">管理输入法</translation>
-<translation id="5230516054153933099">电动窗</translation>
+<translation id="5230516054153933099">窗</translation>
 <translation id="5233019165164992427">NaCl调试端口</translation>
 <translation id="5233231016133573565">进程 ID</translation>
 <translation id="5233638681132016545">打开新的标签页</translation>
@@ -5138,7 +5137,6 @@
 <translation id="8834164572807951958">“<ph name="DESTINATION_NAME" />”的成员将会有权访问这些内容的副本。</translation>
 <translation id="8838770651474809439">汉堡</translation>
 <translation id="883911313571074303">为图片添加注释</translation>
-<translation id="8844690305858050198">好了!有害软件已被移除。要重新开启扩展程序,请前往&lt;a href="chrome://extensions"&gt;扩展程序&lt;/a&gt;部分。</translation>
 <translation id="8845001906332463065">获取帮助</translation>
 <translation id="8846141544112579928">正在搜索键盘…</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 9978b8f5..bdf8851 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -2181,7 +2181,6 @@
 <translation id="4296575653627536209">新增受監管的使用者</translation>
 <translation id="4297219207642690536">重新啟動並重設</translation>
 <translation id="4297322094678649474">變更語言</translation>
-<translation id="4300305918532693141">如要變更這項設定,請<ph name="BEGIN_LINK" />重設同步功能<ph name="END_LINK" />。</translation>
 <translation id="4305227814872083840">長 (2 秒)</translation>
 <translation id="4306119971288449206">應用程式的內容類型應設為「<ph name="CONTENT_TYPE" />」</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K 作用中)</translation>
@@ -5150,7 +5149,6 @@
 <translation id="8834164572807951958">「<ph name="DESTINATION_NAME" />」的成員將可存取這些項目的複本。</translation>
 <translation id="8838770651474809439">漢堡</translation>
 <translation id="883911313571074303">為圖片加註</translation>
-<translation id="8844690305858050198">大功告成!有害軟體已移除。如要重新啟用擴充功能,請造訪&lt;a href="chrome://extensions"&gt;擴充功能&lt;/a&gt;。</translation>
 <translation id="8845001906332463065">尋求協助</translation>
 <translation id="8846141544112579928">正在搜尋鍵盤...</translation>
 <translation id="8847988622838149491">USB</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb
index b95a7cf..d0745ff 100644
--- a/chrome/app/resources/google_chrome_strings_en-GB.xtb
+++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -28,6 +28,7 @@
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> is dangerous, so Chrome has blocked it.</translation>
 <translation id="1619887657840448962">To make Chrome safer, we disabled the following extension that isn't listed in the <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> and may have been added without your knowledge.</translation>
 <translation id="1628000112320670027">Get help with Chrome</translation>
+<translation id="1662639173275167396">Chrome OS is made possible by additional <ph name="BEGIN_LINK_CROS_OSS" />open source software<ph name="END_LINK_CROS_OSS" />, as is <ph name="BEGIN_LINK_LINUX_OSS" />Linux (Beta)<ph name="END_LINK_LINUX_OSS" />.</translation>
 <translation id="1674870198290878346">Open Link in Chrome Inco&amp;gnito Window</translation>
 <translation id="1682634494516646069">Google Chrome cannot read and write to its data directory:
 
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb
index 6f6f843..808cb2f 100644
--- a/chrome/app/resources/google_chrome_strings_mr.xtb
+++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -9,9 +9,9 @@
 <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> पूर्वी Chrome वापरत होते</translation>
 <translation id="1104959162601287462">&amp;Chrome OS विषयी</translation>
 <translation id="110877069173485804">हा आपला Chrome आहे</translation>
-<translation id="1142745911746664600">Chrome अपडेट करू शकत नाही</translation>
+<translation id="1142745911746664600">Chrome अपडेट करता आले नाही</translation>
 <translation id="1154147086299354128">Chrome मध्‍ये &amp;उघडा</translation>
-<translation id="123620459398936149">Chrome OS आपला डेटा संकालित करू शकले नाही. कृपया आपला संकालन सांकेतिक वाक्यांश अपडेट करा.</translation>
+<translation id="123620459398936149">Chrome OS तुमचा डेटा सिंक करू शकले नाही. कृपया तुमचा सिंक सांकेतिक पासफ्रेझ अपडेट करा.</translation>
 <translation id="127345590676626841">Chrome स्वयंचलितपणे अपडेट होते जेणेकरून आपल्याकडे नेहमी सर्वात नवीन आवृत्ती असते. जेव्हा हे डाउनलोड पूर्ण होते, तेव्हा Chrome रीस्टार्ट होईल आणि आपण आपल्या मार्गावर असाल.</translation>
 <translation id="1302523850133262269">कृपया Chrome नवीनतम सिस्टम अपडेट इंस्टॉल करताना प्रतीक्षा करा.</translation>
 <translation id="1312676208694947750">{0,plural, =0{Chrome OS अपडेट उपलब्ध आहे}=1{Chrome OS अपडेट उपलब्ध आहे}one{Chrome OS अपडेट # दिवसासाठी उपलब्ध आहे}other{Chrome अपडेट # दिवसांसाठी उपलब्ध आहे}}</translation>
@@ -37,7 +37,7 @@
 <translation id="174539241580958092">साइन इन करण्यात एरर आल्यामुळे Google Chrome आपला डेटा संकालित करू शकले नाही.</translation>
 <translation id="1759842336958782510">Chrome</translation>
 <translation id="1773601347087397504">Chrome OS वापरून मदत मिळवा </translation>
-<translation id="1795405610103747296">Chrome आपल्या फोनवर स्‍थापित करा. आम्ही आपल्या या फोनवर एक SMS पाठवू: <ph name="PHONE_NUMBER" /></translation>
+<translation id="1795405610103747296">Chrome तुमच्या फोनवर इंस्टॉल करा. आम्ही तुमच्या या फोनवर एक SMS पाठवू: <ph name="PHONE_NUMBER" /></translation>
 <translation id="1860536484129686729">या साइटसाठी Chrome ला तुमचा कॅमेरा अॅक्सेस करण्याची परवानगी हवी आहे</translation>
 <translation id="1873233029667955273">Google Chrome तुमचा डीफॉल्ट ब्राउझर नाही</translation>
 <translation id="1874309113135274312">Google Chrome बीटा (mDNS-In)</translation>
@@ -48,8 +48,8 @@
 <translation id="2094919256425865063">तरीही Chrome बंद करायचे?</translation>
 <translation id="2120620239521071941">हे या डिव्‍हाइस मधून <ph name="ITEMS_COUNT" /> आयटम हटवेल. नंतर आपला डेटा पुनर्प्राप्त करण्‍यासाठी Chrome मध्ये <ph name="USER_EMAIL" /> म्हणून साइन इन करा.</translation>
 <translation id="2123055963409958220"><ph name="BEGIN_LINK" />वर्तमान सेटिंग्ज<ph name="END_LINK" /> चा अहवाल देऊन Chrome ला आणखी चांगले बनविण्यात मदत करा</translation>
-<translation id="216054706567564023">Chrome आपल्या फोनवर स्‍थापित करा. आम्ही आपल्या खाते पुनर्प्राप्ती फोन नंबरवर एक SMS पाठवू.</translation>
-<translation id="2246246234298806438">बिल्ट-इन PDF दर्शक गहाळ असताना Google Chrome प्रिंट पूर्वावलोकन दर्शवू शकत नाही.</translation>
+<translation id="216054706567564023">Chrome तुमच्या फोनवर इंस्टॉल करा. आम्ही तुमच्या खाते रिकव्हरी फोन नंबरवर एक SMS पाठवू.</translation>
+<translation id="2246246234298806438">बिल्ट-इन पीडीएफ व्ह्यूअर गहाळ असताना Google Chrome प्रिंट पूर्वावलोकन दाखवू शकत नाही.</translation>
 <translation id="2252923619938421629">वर्तमान सेटिंग्जचा अहवाल देऊन Google Chrome उत्कृष्ट बनविण्यास मदत करा</translation>
 <translation id="225363235161345695">{0,plural, =1{Chrome एका तासामध्ये पुन्हा लाँच होईल}one{Chrome # तासामध्ये पुन्हा लाँच होईल}other{Chrome # तासांमध्ये पुन्हा लाँच होईल}}</translation>
 <translation id="2286950485307333924">आपण आता Chrome वर साइन इन केले आहे</translation>
@@ -77,7 +77,7 @@
 <translation id="2765403129283291972">या साइटसाठी Chrome ला तुमचा मायक्रोफोन अॅक्सेस करण्याची परवानगी हवी आहे</translation>
 <translation id="2770231113462710648">डीफॉल्ट ब्राउझर यावर बदला:</translation>
 <translation id="2799223571221894425">पुन्हा लाँच करा</translation>
-<translation id="2847461019998147611">Google Chrome या भाषेत प्रदर्शि‍त करा</translation>
+<translation id="2847461019998147611">Google Chrome या भाषेत डिस्प्ले करा</translation>
 <translation id="2857540653560290388">Chrome लाँच करत आहे...</translation>
 <translation id="2871893339301912279">आपण Chrome मध्‍ये साइन इन केले आहे!</translation>
 <translation id="2888126860611144412">Chrome बद्दल</translation>
@@ -136,10 +136,10 @@
 <translation id="4567424176335768812">आपण <ph name="USER_EMAIL_ADDRESS" /> म्हणून साइन इन केले आहे. आता आपण आपल्या सर्व साइन इन केलेल्या डिव्हाइसेसवरील आपल्या बुकमार्क, इतिहास आणि अन्य सेटिंग्जवर प्रवेश करू शकता.</translation>
 <translation id="4571503333518166079">Chrome सूचना सेटिंग्जवर जा</translation>
 <translation id="459622048091363950">एकदा का Chrome ला अॅक्सेस मिळाला की, वेबसाइट तुम्हाला अॅक्सेससाठी विचारतील.</translation>
-<translation id="4600710005438004015">Chrome नवीनतम आवृत्तीवर अपडेट होऊ शकले नाही, त्यामुळे तुम्ही नवीन वैशिष्ट्ये आणि सुरक्षितता निराकरणे गमावत आहात.</translation>
+<translation id="4600710005438004015">Chrome नवीनतम आवृत्तीवर अपडेट होऊ शकले नाही, त्यामुळे तुम्ही नवीन वैशिष्ट्ये आणि सीक्युरिटी निराकरणे गमावत आहात.</translation>
 <translation id="4631713731678262610">Chrome मेनूमध्‍ये लपवा</translation>
 <translation id="4633000520311261472">Chrome ला अधिक सुरक्षित करण्यासाठी, आम्ही <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> मध्ये सूचीबद्ध नसलेले काही विस्तार अक्षम केले आणि ते कदाचित आपल्या माहिती शिवाय जोडले गेले असावेत.</translation>
-<translation id="4664415150087723341">Google Chromium साठी विशिष्ट सुरक्षा अपडेट आत्ताच लागू केले; ते प्रभावी होण्यासाठी आपण आता रीस्टार्ट करावे (आम्ही आपले टॅब पुनर्संचयित करू).</translation>
+<translation id="4664415150087723341">Google Chromium साठी विशिष्ट सुरक्षा अपडेट आत्ताच लागू केले; ते प्रभावी होण्यासाठी तुम्ही आता रीस्टार्ट करावे (आम्ही तुमचे टॅब रिस्टोअर करू).</translation>
 <translation id="4700157086864140907">आपण ब्राउझरमध्‍ये जे टाइप करता ते Google सर्व्हरला पाठवून Google Chrome चाणाक्ष शब्दलेखन-तपासणी प्रदान करु शकते, जेणेकरुन आपल्याला Google शोधात जे शब्दलेखन-तपासणी तंत्रज्ञान वापरले जाते तेच आपल्याला वापरण्‍याची अनुमती मिळते.</translation>
 <translation id="4728575227883772061">अनिर्दिष्ट त्रुटीमुळे स्थापना अयशस्वी. जर Google Chrome सध्या चालू असेल तर, कृपया त्यास बंद करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="4750550185319565338"><ph name="PLUGIN_NAME" /> सक्षम करण्‍यासाठी Chrome रीस्टार्ट करा</translation>
@@ -154,7 +154,7 @@
 <translation id="4953650215774548573">आपला डीफॉल्ट ब्राउझर म्हणून Google Chrome सेट करा</translation>
 <translation id="495931528404527476">Chrome मध्ये</translation>
 <translation id="4990567037958725628">Google Chrome कॅनरी</translation>
-<translation id="5028489144783860647">Google Chrome आपला डेटा संकालित करू शकले नाही. कृपया आपला संकालन वाक्यांश अपडेट करा.</translation>
+<translation id="5028489144783860647">Google Chrome तुमचा डेटा सिंक करू शकले नाही. कृपया तुमची सिंक पासफ्रेझ अपडेट करा.</translation>
 <translation id="5062123544085870375">Chrome OS रीस्टार्ट करा</translation>
 <translation id="5090044601776247154">Google Chrome 70 सह सुरू झालेले व्यवस्थापित वापरकर्ता प्रोफाइल यापुढे उपलब्ध होणार नाहीत.</translation>
 <translation id="5132929315877954718">Google Chrome साठी उत्कृष्ट अॅप, खेळ, विस्तार आणि थीम शोधा.</translation>
@@ -198,7 +198,7 @@
 <translation id="6468844726266617801">{0,plural, =1{एका दिवसामध्ये Chrome पुन्हा लाँच करा}one{# दिवसामध्ये Chrome पुन्हा लाँच करा}other{# दिवसांमध्ये Chrome पुन्हा लाँच करा}}</translation>
 <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome डेव्हलपर</translation>
 <translation id="6566149418543181476">Google Chrome अपडेट करीत आहे (<ph name="PROGRESS_PERCENT" />)</translation>
-<translation id="6598387184982954187">आपण तुमची Chrome सामग्री संकालित करण्यासाठी <ph name="PROFILE_EMAIL" /> वापरत आहात. आपले संकालन प्राधान्य अपडेट करण्यासाठी किंवा Google खात्याशिवाय Chrome वापरण्यासाठी, <ph name="SETTINGS_LINK" /> ला भेट द्या.</translation>
+<translation id="6598387184982954187">तुम्ही तुमची Chrome आशय सिंक करण्यासाठी <ph name="PROFILE_EMAIL" /> वापरत आहात. तुमचे सिंक प्राधान्य अपडेट करण्यासाठी किंवा Google खात्याशिवाय Chrome वापरण्यासाठी, <ph name="SETTINGS_LINK" /> ला भेट द्या.</translation>
 <translation id="6600954340915313787">Chrome वर कॉपी केले</translation>
 <translation id="6634887557811630702">Google Chrome अद्ययावत आहे.</translation>
 <translation id="6676384891291319759">इंटरनेटमध्ये प्रवेश करा</translation>
@@ -218,7 +218,7 @@
 <translation id="7164397146364144019">आपण Google कडे संभाव्य सुरक्षितता घटनांच्या तपशीलांचा स्वयंचलितपणे अहवाल देऊन Chrome वापरणे अधिक सुरक्षित आणि सुलभ बनविण्यात मदत करू शकता.</translation>
 <translation id="7242029209006116544">आपण एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि आपल्या Google Chrome प्रोफाईलवर त्याच्या प्रशासकास नियंत्रण देत आहात. आपला Chrome डेटा, जसे की आपले अॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. आपण Google खाती डॅशबोर्डद्वारे हा डेटा हटविण्यात सक्षम व्हाल, परंतु आपण दुसर्‍या खात्यासह हा डेटा संबद्ध करण्यात सक्षम होणार नाही. आपण आपला विद्यमान Chrome डेटा विभक्त ठेवण्यासाठी एक नवीन प्रोफाईल वैकल्पिकपणे तयार करू शकता. <ph name="LEARN_MORE" /></translation>
 <translation id="7308322188646931570">फायली डाउनलोड करण्यासाठी Chrome ला स्टोरेजचा अॅक्सेस हवा आहे</translation>
-<translation id="7330164299247909639">प्रमाणीकरण प्रमाणपत्र अयशस्वी झाले. कृपया Google Chrome मध्ये <ph name="USER_NAME" /> म्हणून पुन्हा साइन इन करा किंवा आणखी माहितीसाठी तुमच्या प्रशासकाशी संपर्क साधा. <ph name="ADDITIONAL_EXPLANATION" /></translation>
+<translation id="7330164299247909639">अॉथेंटिकेशन सर्टिफिकेट अयशस्वी झाले. कृपया Google Chrome मध्ये <ph name="USER_NAME" /> म्हणून पुन्हा साइन इन करा किंवा आणखी माहितीसाठी तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा. <ph name="ADDITIONAL_EXPLANATION" /></translation>
 <translation id="7339898014177206373">नवीन विंडो</translation>
 <translation id="7398801000654795464">आपण <ph name="USER_EMAIL_ADDRESS" /> या रुपात Chrome मध्ये साइन इन केले होते. कृपया पुन्हा साइन इन करण्यासाठी समान खाते वापरा.</translation>
 <translation id="7408085963519505752">Chrome OS अटी</translation>
@@ -227,7 +227,7 @@
 <translation id="7473136999113284234">Chrome स्वयंचलितपणे अपडेट होते जेणेकरून आपल्याकडे नेहमी सर्वात नवीन आवृत्ती असते.</translation>
 <translation id="7486227612705979895">अॅड्रेस बारमध्ये सूचना देण्यासाठी Chrome तुमची ड्राइव्ह अॅक्सेस करेल</translation>
 <translation id="7535429826459677826">Google Chrome विकासक</translation>
-<translation id="7552219221109926349">Chrome OS या भाषेत प्रदर्शि‍त करा</translation>
+<translation id="7552219221109926349">Chrome OS या भाषेत डिस्प्ले करा</translation>
 <translation id="7561940363513215021">{0,plural, =1{Chrome एका मिनिटानंतर पुन्हा लाँँच होईल}one{Chrome # मिनिटानंतर पुन्हा लाँँच होईल}other{Chrome # मिनिटांनंतर पुन्हा लाँँच होईल}}</translation>
 <translation id="7589360514048265910">यापुढे Mac OS X 10.9 ला सपोर्ट नसल्यामुळे, या कॉंप्युटरला इथून पुढे Google Chrome चे अपडेट मिळणार नाहीत.</translation>
 <translation id="7592736734348559088">आपले खाते साइन इन तपशील कालबाह्य झाल्यामुळे Google Chrome आपला डेटा संकालित करू शकले नाही.</translation>
@@ -252,7 +252,7 @@
 <translation id="8032142183999901390">Chrome वरून आपले खाते काढल्यानंतर, आपल्याला हे प्रभावी होण्यासाठी आपले उघडे टॅब रीलोड करण्याची आवश्यकता असू शकते.</translation>
 <translation id="8077352834923175128">हे अपडेट लागू करण्यासाठी तुमचा अॅडमिनिस्ट्रेटर तुम्हाला Chrome OS रीस्टार्ट करण्यास सांगेल</translation>
 <translation id="8129812357326543296">&amp;Google Chrome विषयी</translation>
-<translation id="8179874765710681175">आपल्या फोनवर Chrome इंस्टॉल करा. आम्ही आपल्या फोनवर एक SMS पाठवू.</translation>
+<translation id="8179874765710681175">तुमच्या फोनवर Chrome इंस्टॉल करा. आम्ही तुमच्या फोनवर एक SMS पाठवू.</translation>
 <translation id="8183957050892517584">Chrome आपले वैयक्तिक तपशील सुरक्षितपणे संचयित करेल जेणेकरून आपल्याला ते पुन्हा टाइप करण्याची आवश्यकता नसेल.</translation>
 <translation id="8226081633851087288">{0,plural, =0{Chrome OS आता रीस्टार्ट होईल}=1{Chrome OS एका सेकंदात रीस्टार्ट होईल}one{Chrome OS # सेकंदात रीस्टार्ट होईल}other{Chrome OS # सेकंदामध्ये रीस्टार्ट होईल}}</translation>
 <translation id="825412236959742607">हे पेज खूप जास्त मेमरी वापरत असल्यामुळे, Chrome ने काही आशय काढून टाकला आहे.</translation>
@@ -264,13 +264,13 @@
 <translation id="840084489713044809">Google Chrome ला तुमचे पासवर्ड निर्यात करायचे आहेत.</translation>
 <translation id="8406086379114794905">Chrome उत्कृष्ट बनविण्यात मदत करा</translation>
 <translation id="8455999171311319804">पर्यायी: निदान आणि वापर डेटा Google कडे स्वयंचलितपणे पाठवून Chrome OS ला आणखी चांगले बनविण्‍यात मदत करा.</translation>
-<translation id="8478823064122749032">Chrome आपल्या फोनवर स्‍थापित करा. आम्ही आपल्या या खाते पुनर्प्राप्ती फोन नंबरवर एक SMS पाठवू: <ph name="PHONE_NUMBER" /></translation>
+<translation id="8478823064122749032">Chrome तुमच्या फोनवर इंस्टॉल करा. आम्ही तुमच्या या खाते रिकव्हरी फोन नंबरवर एक SMS पाठवू: <ph name="PHONE_NUMBER" /></translation>
 <translation id="8521348052903287641">Google Chrome विकासकाने mDNS रहदारीस अनुमती देण्यासाठी इनबाउंड नियम.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
 <translation id="8547799825197623713">Chrome App Launcher Canary</translation>
 <translation id="8556340503434111824">Google Chrome ची नवीन आवृत्ती उपलब्ध आहे, आणि ही नेहमीपेक्षा द्रुत आहे. </translation>
 <translation id="8568392309447938879">अ‍ॅप्स वापरण्यासाठी आपण Chrome मध्ये साइन इन केलेले असणे आवश्यक आहे. हे Chrome ला डिव्हाइसेसवर आपले अ‍ॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज संकालित करण्याची अनुमती देते.</translation>
-<translation id="8606668294522778825">Google Chrome आपला ब्राउझिंग अनुभव सुधारण्यासाठी वेब सेवा वापरू शकते. आपण या सेवा वैकल्पिकपणे अक्षम करू शकता. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
+<translation id="8606668294522778825">Google Chrome तुमच्या ब्राउझिंग अनुभवात सुधारणा करण्यासाठी वेब सेवा वापरू शकते. तुमच्याकडे या सेवा बंद करण्याचा पर्याय आहे. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="8614913330719544658">Google Chrome प्रतिसाद देत नाही. त्वरित पुन्हा लाँच करायचा?</translation>
 <translation id="8667808506758191620">आपले <ph name="DEVICE_TYPE" /> अद्ययावत आहे.</translation>
 <translation id="8669527147644353129">Google Chrome मदतनीस</translation>
@@ -286,10 +286,10 @@
 <translation id="8914504000324227558">Chrome रीलाँच करा</translation>
 <translation id="9026991721384951619">आपले खाते साइन इन तपशील कालबाह्य झाल्यामुळे Chrome OS आपला डेटा संकालित करू शकले नाही.</translation>
 <translation id="9067395829937117663">Google Chrome साठी Windows 7 किंवा त्यानंतरची आवृत्ती आवश्यक आहे.</translation>
-<translation id="9084668267983921457">प्रमाणीकरण प्रमाणपत्र अयशस्वी झाले. कृपया Google Chrome मध्ये पुन्हा साइन इन करा किंवा आणखी माहितीसाठी तुमच्या प्रशासकाशी संपर्क साधा. <ph name="ADDITIONAL_EXPLANATION" /></translation>
+<translation id="9084668267983921457">अॉथेंटिकेशन सर्टिफिकेट अयशस्वी झाले. कृपया Google Chrome मध्ये पुन्हा साइन इन करा किंवा आणखी माहितीसाठी तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा. <ph name="ADDITIONAL_EXPLANATION" /></translation>
 <translation id="909149346112452267">{0,plural, =1{ Chrome OS एका तासात रीस्टार्ट होईल}one{ Chrome OS # तासात रीस्टार्ट होईल}other{ Chrome OS # तासांमध्ये रीस्टार्ट होईल}}</translation>
 <translation id="911206726377975832">आपला ब्राउझिंग डेटा देखील हटवायचा?</translation>
-<translation id="919706545465235479">संकालन सुरू करण्यासाठी अपडेट करा</translation>
+<translation id="919706545465235479">सिंक सुरू करण्यासाठी अपडेट करा</translation>
 <translation id="924447568950697217">Chrome ला आपला डीफॉल्ट ब्राउझर बनवा</translation>
 <translation id="989369509083708165">Google Chrome आपला डीफॉल्ट ब्राउझर आहे</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 0c9ba88..d1afdc79 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -3132,6 +3132,10 @@
 
   if (is_win) {
     sources += [
+      "browser_switcher/alternative_browser_driver.cc",
+      "browser_switcher/alternative_browser_driver.h",
+      "browser_switcher/alternative_browser_launcher.cc",
+      "browser_switcher/alternative_browser_launcher.h",
       "browser_switcher/browser_switcher_prefs.cc",
       "browser_switcher/browser_switcher_prefs.h",
       "browser_switcher/browser_switcher_sitelist.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 3491fd8..5153d6e 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1306,6 +1306,15 @@
      base::size(kAutofillDropdownLayoutTrailingIcon), nullptr}};
 #endif  // !defined(OS_ANDROID)
 
+#if defined(OS_ANDROID)
+const FeatureEntry::FeatureParam kBottomOfflineIndicatorEnabled[] = {
+    {"bottom_offline_indicator", "true"}};
+
+const FeatureEntry::FeatureVariation kOfflineIndicatorFeatureVariations[] = {
+    {"(bottom)", kBottomOfflineIndicatorEnabled,
+     base::size(kBottomOfflineIndicatorEnabled), nullptr}};
+#endif  // OS_ANDROID
+
 // RECORDING USER METRICS FOR FLAGS:
 // -----------------------------------------------------------------------------
 // The first line of the entry is the internal name.
@@ -2514,9 +2523,17 @@
      kOsAndroid,
      FEATURE_VALUE_TYPE(
          offline_pages::kOfflinePagesShowAlternateDinoPageFeature)},
-    {"offline-indicator", flag_descriptions::kOfflineIndicatorName,
-     flag_descriptions::kOfflineIndicatorDescription, kOsAndroid,
-     FEATURE_VALUE_TYPE(offline_pages::kOfflineIndicatorFeature)},
+    {"offline-indicator-choice", flag_descriptions::kOfflineIndicatorChoiceName,
+     flag_descriptions::kOfflineIndicatorChoiceDescription, kOsAndroid,
+     FEATURE_WITH_PARAMS_VALUE_TYPE(
+         offline_pages::kOfflineIndicatorFeature,
+         kOfflineIndicatorFeatureVariations,
+         offline_pages::kOfflineIndicatorFeature.name)},
+    {"offline-indicator-always-http-probe",
+     flag_descriptions::kOfflineIndicatorAlwaysHttpProbeName,
+     flag_descriptions::kOfflineIndicatorAlwaysHttpProbeDescription, kOsAndroid,
+     FEATURE_VALUE_TYPE(
+         offline_pages::kOfflineIndicatorAlwaysHttpProbeFeature)},
 #endif  // OS_ANDROID
     {"disallow-doc-written-script-loads",
      flag_descriptions::kDisallowDocWrittenScriptsUiName,
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
index aeb6ca2..922664e8 100644
--- a/chrome/browser/android/chrome_feature_list.cc
+++ b/chrome/browser/android/chrome_feature_list.cc
@@ -157,6 +157,7 @@
     &ntp_tiles::kSiteExplorationUiFeature,
     &offline_pages::kBackgroundLoaderForDownloadsFeature,
     &offline_pages::kOfflineIndicatorFeature,
+    &offline_pages::kOfflineIndicatorAlwaysHttpProbeFeature,
     &offline_pages::kOfflinePagesCTFeature,    // See crbug.com/620421.
     &offline_pages::kOfflinePagesCTV2Feature,  // See crbug.com/734753.
     &offline_pages::kOfflinePagesDescriptiveFailStatusFeature,
diff --git a/chrome/browser/android/vr/BUILD.gn b/chrome/browser/android/vr/BUILD.gn
index a5deea7..20825d4 100644
--- a/chrome/browser/android/vr/BUILD.gn
+++ b/chrome/browser/android/vr/BUILD.gn
@@ -25,6 +25,8 @@
     "gvr_keyboard_delegate.cc",
     "gvr_keyboard_delegate.h",
     "gvr_keyboard_shim.cc",
+    "gvr_scheduler_delegate.cc",
+    "gvr_scheduler_delegate.h",
     "gvr_util.cc",
     "gvr_util.h",
     "mailbox_to_surface_bridge.cc",
diff --git a/chrome/browser/android/vr/android_vsync_helper.cc b/chrome/browser/android/vr/android_vsync_helper.cc
index 8eb104a6..3eca7ae 100644
--- a/chrome/browser/android/vr/android_vsync_helper.cc
+++ b/chrome/browser/android/vr/android_vsync_helper.cc
@@ -4,8 +4,9 @@
 
 #include "chrome/browser/android/vr/android_vsync_helper.h"
 
+#include <utility>
+
 #include "base/android/jni_android.h"
-#include "base/callback_helpers.h"
 #include "base/logging.h"
 #include "jni/AndroidVSyncHelper_jni.h"
 
@@ -14,7 +15,8 @@
 
 namespace vr {
 
-AndroidVSyncHelper::AndroidVSyncHelper() {
+AndroidVSyncHelper::AndroidVSyncHelper(Callback callback)
+    : callback_(std::move(callback)) {
   JNIEnv* env = AttachCurrentThread();
   j_object_.Reset(
       Java_AndroidVSyncHelper_create(env, reinterpret_cast<jlong>(this)));
@@ -31,33 +33,30 @@
                                  const JavaParamRef<jobject>& obj,
                                  jlong time_nanos) {
   // See WindowAndroid::OnVSync.
+  DCHECK(vsync_requested_);
+  vsync_requested_ = false;
   DCHECK_EQ(base::TimeTicks::GetClock(),
             base::TimeTicks::Clock::LINUX_CLOCK_MONOTONIC);
-  DCHECK(!callback_.is_null());
   base::TimeTicks frame_time =
-      base::TimeTicks() +
-      base::TimeDelta::FromMicroseconds(time_nanos /
-                                        base::Time::kNanosecondsPerMicrosecond);
+      base::TimeTicks() + base::TimeDelta::FromNanoseconds(time_nanos);
   last_interval_ = frame_time - last_vsync_;
   last_vsync_ = frame_time;
-  base::ResetAndReturn(&callback_).Run(frame_time);
+  callback_.Run(frame_time);
 }
 
-void AndroidVSyncHelper::RequestVSync(
-    const base::RepeatingCallback<void(base::TimeTicks)>& callback) {
-  DCHECK(callback_.is_null());
-  DCHECK(!callback.is_null());
-  callback_ = callback;
+void AndroidVSyncHelper::RequestVSync() {
+  DCHECK(!vsync_requested_);
+  vsync_requested_ = true;
   JNIEnv* env = AttachCurrentThread();
   Java_AndroidVSyncHelper_requestVSync(env, j_object_);
 }
 
 void AndroidVSyncHelper::CancelVSyncRequest() {
-  if (callback_.is_null())
+  if (!vsync_requested_)
     return;
+  vsync_requested_ = false;
   JNIEnv* env = AttachCurrentThread();
   Java_AndroidVSyncHelper_cancelVSyncRequest(env, j_object_);
-  callback_.Reset();
 }
 
 }  // namespace vr
diff --git a/chrome/browser/android/vr/android_vsync_helper.h b/chrome/browser/android/vr/android_vsync_helper.h
index 0241812..0530e15b 100644
--- a/chrome/browser/android/vr/android_vsync_helper.h
+++ b/chrome/browser/android/vr/android_vsync_helper.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_ANDROID_VR_ANDROID_VSYNC_HELPER_H_
 
 #include <jni.h>
+#include <utility>
 
 #include "base/android/jni_weak_ref.h"
 #include "base/callback.h"
@@ -16,14 +17,13 @@
 
 class AndroidVSyncHelper {
  public:
-  AndroidVSyncHelper();
+  using Callback = base::RepeatingCallback<void(base::TimeTicks)>;
+  explicit AndroidVSyncHelper(Callback callback);
   ~AndroidVSyncHelper();
   void OnVSync(JNIEnv* env,
                const base::android::JavaParamRef<jobject>& obj,
                jlong time_nanos);
-
-  void RequestVSync(
-      const base::RepeatingCallback<void(base::TimeTicks)>& callback);
+  void RequestVSync();
   void CancelVSyncRequest();
 
   // The last interval will be a multiple of the actual refresh interval, use
@@ -37,7 +37,8 @@
   base::TimeTicks last_vsync_;
   base::TimeDelta last_interval_;
   base::TimeDelta display_vsync_interval_;
-  base::RepeatingCallback<void(base::TimeTicks)> callback_;
+  Callback callback_;
+  bool vsync_requested_ = false;
 
   base::android::ScopedJavaGlobalRef<jobject> j_object_;
 
diff --git a/chrome/browser/android/vr/gvr_scheduler_delegate.cc b/chrome/browser/android/vr/gvr_scheduler_delegate.cc
new file mode 100644
index 0000000..7c054b1d
--- /dev/null
+++ b/chrome/browser/android/vr/gvr_scheduler_delegate.cc
@@ -0,0 +1,1385 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/android/vr/gvr_scheduler_delegate.h"
+
+#include <utility>
+#include <vector>
+
+#include "base/android/android_hardware_buffer_compat.h"
+#include "base/metrics/field_trial_params.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "base/trace_event/trace_event_argument.h"
+#include "chrome/browser/android/vr/gl_browser_interface.h"
+#include "chrome/browser/android/vr/mailbox_to_surface_bridge.h"
+#include "chrome/browser/android/vr/metrics_util_android.h"
+#include "chrome/browser/android/vr/scoped_gpu_trace.h"
+#include "chrome/browser/vr/scheduler_render_loop_interface.h"
+#include "chrome/browser/vr/scheduler_ui_interface.h"
+#include "content/public/common/content_features.h"
+#include "device/vr/android/gvr/gvr_delegate.h"
+#include "gpu/config/gpu_driver_bug_workaround_type.h"
+#include "gpu/ipc/common/gpu_memory_buffer_impl_android_hardware_buffer.h"
+#include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr.h"
+#include "ui/gl/gl_fence_android_native_fence_sync.h"
+#include "ui/gl/gl_image_ahardwarebuffer.h"
+
+namespace {
+constexpr int kWebVrInitialFrameTimeoutSeconds = 5;
+constexpr int kWebVrSpinnerTimeoutSeconds = 2;
+
+// Heuristic time limit to detect overstuffed GVR buffers for a
+// >60fps capable web app.
+constexpr base::TimeDelta kWebVrSlowAcquireThreshold =
+    base::TimeDelta::FromMilliseconds(2);
+
+// If running too fast, allow dropping frames occasionally to let GVR catch up.
+// Drop at most one frame in MaxDropRate.
+constexpr int kWebVrUnstuffMaxDropRate = 7;
+
+// Timeout for checking for the WebVR rendering GL fence. If the timeout is
+// reached, yield to let other tasks execute before rechecking.
+constexpr base::TimeDelta kWebVRFenceCheckTimeout =
+    base::TimeDelta::FromMicroseconds(2000);
+
+// Polling interval for checking for the WebVR rendering GL fence. Used as
+// an alternative to kWebVRFenceCheckTimeout if the GPU workaround is active.
+// The actual interval may be longer due to PostDelayedTask's resolution.
+constexpr base::TimeDelta kWebVRFenceCheckPollInterval =
+    base::TimeDelta::FromMicroseconds(500);
+
+bool ValidateRect(const gfx::RectF& bounds) {
+  // Bounds should be between 0 and 1, with positive width/height.
+  // We simply clamp to [0,1], but still validate that the bounds are not NAN.
+  return !std::isnan(bounds.width()) && !std::isnan(bounds.height()) &&
+         !std::isnan(bounds.x()) && !std::isnan(bounds.y());
+}
+
+}  // namespace
+
+namespace vr {
+
+GvrSchedulerDelegate::GvrSchedulerDelegate(GlBrowserInterface* browser,
+                                           SchedulerUiInterface* ui,
+                                           gvr::GvrApi* gvr_api,
+                                           VrShellGl* graphics,
+                                           bool start_in_web_xr_mode,
+                                           bool cardboard_gamepad,
+                                           size_t sliding_time_size)
+    : browser_(browser),
+      gvr_api_(gvr_api),
+      ui_(ui),
+      webvr_vsync_align_(
+          base::FeatureList::IsEnabled(features::kWebVrVsyncAlign)),
+      web_xr_mode_(start_in_web_xr_mode),
+      cardboard_gamepad_(cardboard_gamepad),
+      vsync_helper_(base::BindRepeating(&GvrSchedulerDelegate::OnVSync,
+                                        base::Unretained(this))),
+      task_runner_(base::ThreadTaskRunnerHandle::Get()),
+      presentation_binding_(this),
+      frame_data_binding_(this),
+      graphics_(graphics),
+      webvr_render_time_(sliding_time_size),
+      webvr_js_time_(sliding_time_size),
+      webvr_js_wait_time_(sliding_time_size),
+      weak_ptr_factory_(this) {
+  if (cardboard_gamepad_ && web_xr_mode_)
+    browser_->ToggleCardboardGamepad(true);
+}
+
+GvrSchedulerDelegate::~GvrSchedulerDelegate() {
+  ClosePresentationBindings();
+  webxr_.EndPresentation();
+}
+
+void GvrSchedulerDelegate::SetRenderLoop(
+    SchedulerRenderLoopInterface* render_loop) {
+  render_loop_ = render_loop;
+}
+
+gfx::Transform GvrSchedulerDelegate::GetHeadPose() {
+  return head_pose_;
+}
+
+void GvrSchedulerDelegate::AddInputSourceState(
+    device::mojom::XRInputSourceStatePtr state) {
+  input_states_.push_back(std::move(state));
+}
+
+void GvrSchedulerDelegate::OnPause() {
+  vsync_helper_.CancelVSyncRequest();
+  gvr_api_->PauseTracking();
+  webvr_frame_timeout_.Cancel();
+  webvr_spinner_timeout_.Cancel();
+}
+
+void GvrSchedulerDelegate::OnResume() {
+  gvr_api_->RefreshViewerProfile();
+  gvr_api_->ResumeTracking();
+  OnVSync(base::TimeTicks::Now());
+  if (web_xr_mode_)
+    ScheduleOrCancelWebVrFrameTimeout();
+}
+
+void GvrSchedulerDelegate::OnExitPresent() {
+  webvr_frame_timeout_.Cancel();
+  webvr_spinner_timeout_.Cancel();
+}
+
+void GvrSchedulerDelegate::OnTriggerEvent(bool pressed) {
+  if (pressed) {
+    cardboard_trigger_pressed_ = true;
+  } else if (cardboard_trigger_pressed_) {
+    cardboard_trigger_pressed_ = false;
+    cardboard_trigger_clicked_ = true;
+  }
+}
+
+void GvrSchedulerDelegate::SetWebXrMode(bool enabled) {
+  web_xr_mode_ = enabled;
+
+  if (web_xr_mode_ && submit_client_) {
+    ScheduleOrCancelWebVrFrameTimeout();
+  } else {
+    webvr_frame_timeout_.Cancel();
+    webvr_frames_received_ = 0;
+  }
+
+  if (cardboard_gamepad_)
+    browser_->ToggleCardboardGamepad(enabled);
+
+  if (!web_xr_mode_) {
+    // Closing presentation bindings ensures we won't get any mojo calls such
+    // as SubmitFrame from this session anymore. This makes it legal to cancel
+    // an outstanding animating frame (if any).
+    ClosePresentationBindings();
+    // Ensure that re-entering VR later gets a fresh start by clearing out the
+    // current session's animating frame state.
+    webxr_.EndPresentation();
+    // Do not clear pending_frames_ here, need to track Surface state across
+    // sessions.
+    if (!pending_frames_.empty()) {
+      // There's a leftover pending frame. Need to wait for that to arrive on
+      // the Surface, and that will clear webvr_frame_processing_ once it's
+      // done. Until then, webvr_frame_processing_ will stay true to block a
+      // new session from starting processing.
+      // TODO(acondor): Move these DCHECKs into a unittest.
+      DCHECK(webxr_.HaveProcessingFrame());
+      DCHECK(webxr_.GetProcessingFrame()->state_locked);
+      DCHECK(webxr_.GetProcessingFrame()->recycle_once_unlocked);
+    }
+  }
+}
+
+void GvrSchedulerDelegate::SetShowingVrDialog(bool showing) {
+  showing_vr_dialog_ = showing;
+  ScheduleOrCancelWebVrFrameTimeout();
+}
+
+void GvrSchedulerDelegate::ConnectPresentingService(
+    device::mojom::VRDisplayInfoPtr display_info,
+    device::mojom::XRRuntimeSessionOptionsPtr options) {
+  ClosePresentationBindings();
+
+  device::mojom::XRPresentationProviderPtr presentation_provider;
+  presentation_binding_.Bind(mojo::MakeRequest(&presentation_provider));
+  device::mojom::XRFrameDataProviderPtr frame_data_provider;
+  frame_data_binding_.Bind(mojo::MakeRequest(&frame_data_provider));
+
+  gfx::Size webxr_size(
+      display_info->leftEye->renderWidth + display_info->rightEye->renderWidth,
+      display_info->leftEye->renderHeight);
+  DVLOG(1) << __func__ << ": resize initial to " << webxr_size.width() << "x"
+           << webxr_size.height();
+
+  // Decide which transport mechanism we want to use. This sets
+  // the webxr_use_* options as a side effect.
+  device::mojom::XRPresentationTransportOptionsPtr transport_options =
+      GetWebXrFrameTransportOptions(options);
+
+  if (webxr_use_shared_buffer_draw_) {
+    // Create the mailbox bridge if it doesn't exist yet. We can continue
+    // reusing the existing one if it does, its resources such as mailboxes
+    // are still valid.
+    if (!mailbox_bridge_)
+      CreateSurfaceBridge(nullptr);
+  } else {
+    CreateOrResizeWebXrSurface(webxr_size);
+  }
+
+  ScheduleOrCancelWebVrFrameTimeout();
+
+  auto submit_frame_sink = device::mojom::XRPresentationConnection::New();
+  submit_frame_sink->client_request = mojo::MakeRequest(&submit_client_);
+  submit_frame_sink->provider = presentation_provider.PassInterface();
+  submit_frame_sink->transport_options = std::move(transport_options);
+
+  auto session = device::mojom::XRSession::New();
+  session->data_provider = frame_data_provider.PassInterface();
+  session->submit_frame_sink = std::move(submit_frame_sink);
+  session->display_info = std::move(display_info);
+
+  browser_->SendRequestPresentReply(std::move(session));
+}
+
+device::mojom::XRPresentationTransportOptionsPtr
+GvrSchedulerDelegate::GetWebXrFrameTransportOptions(
+    const device::mojom::XRRuntimeSessionOptionsPtr& options) {
+  DVLOG(1) << __func__;
+
+  MetricsUtilAndroid::XRRenderPath render_path =
+      MetricsUtilAndroid::XRRenderPath::kClientWait;
+  webxr_use_shared_buffer_draw_ = false;
+  webxr_use_gpu_fence_ = false;
+
+  std::string render_path_string = base::GetFieldTrialParamValueByFeature(
+      features::kWebXrRenderPath, features::kWebXrRenderPathParamName);
+  DVLOG(1) << __func__ << ": WebXrRenderPath=" << render_path_string;
+  if (render_path_string == features::kWebXrRenderPathParamValueClientWait) {
+    // Use the baseline kClientWait.
+  } else if (render_path_string ==
+             features::kWebXrRenderPathParamValueGpuFence) {
+    // Use GpuFence if available. If not, fall back to kClientWait.
+    if (gl::GLFence::IsGpuFenceSupported()) {
+      webxr_use_gpu_fence_ = true;
+
+      render_path = MetricsUtilAndroid::XRRenderPath::kGpuFence;
+    }
+  } else {
+    // Default aka features::kWebXrRenderPathParamValueSharedBuffer.
+    // Use that if supported, otherwise fall back to GpuFence or
+    // ClientWait.
+    if (gl::GLFence::IsGpuFenceSupported()) {
+      webxr_use_gpu_fence_ = true;
+      if (base::AndroidHardwareBufferCompat::IsSupportAvailable() &&
+          !options->use_legacy_webvr_render_path) {
+        // Currently, SharedBuffer mode is only supported for WebXR via
+        // XRWebGlDrawingBuffer, WebVR 1.1 doesn't use that.
+        webxr_use_shared_buffer_draw_ = true;
+        render_path = MetricsUtilAndroid::XRRenderPath::kSharedBuffer;
+      } else {
+        render_path = MetricsUtilAndroid::XRRenderPath::kGpuFence;
+      }
+    }
+  }
+  DVLOG(1) << __func__ << ": render_path=" << static_cast<int>(render_path);
+  MetricsUtilAndroid::LogXrRenderPathUsed(render_path);
+
+  device::mojom::XRPresentationTransportOptionsPtr transport_options =
+      device::mojom::XRPresentationTransportOptions::New();
+  // Only set boolean options that we need. Default is false, and we should be
+  // able to safely ignore ones that our implementation doesn't care about.
+  transport_options->wait_for_transfer_notification = true;
+  if (webxr_use_shared_buffer_draw_) {
+    transport_options->transport_method =
+        device::mojom::XRPresentationTransportMethod::DRAW_INTO_TEXTURE_MAILBOX;
+    DCHECK(webxr_use_gpu_fence_);
+    transport_options->wait_for_gpu_fence = true;
+  } else {
+    transport_options->transport_method =
+        device::mojom::XRPresentationTransportMethod::SUBMIT_AS_MAILBOX_HOLDER;
+    transport_options->wait_for_transfer_notification = true;
+    if (webxr_use_gpu_fence_) {
+      transport_options->wait_for_gpu_fence = true;
+    } else {
+      transport_options->wait_for_render_notification = true;
+    }
+  }
+  graphics_->set_webxr_use_shared_buffer_draw(webxr_use_shared_buffer_draw_);
+  return transport_options;
+}
+
+void GvrSchedulerDelegate::CreateOrResizeWebXrSurface(const gfx::Size& size) {
+  if (!graphics_->CreateOrResizeWebXrSurface(
+          size,
+          base::BindRepeating(&GvrSchedulerDelegate::OnWebXrFrameAvailable,
+                              weak_ptr_factory_.GetWeakPtr()))) {
+    return;
+  }
+  if (mailbox_bridge_)
+    mailbox_bridge_->ResizeSurface(size.width(), size.height());
+  else
+    CreateSurfaceBridge(graphics_->webxr_surface_texture());
+}
+
+void GvrSchedulerDelegate::OnGpuProcessConnectionReady() {
+  DVLOG(1) << __func__;
+  CHECK(mailbox_bridge_);
+
+  DCHECK(!webxr_.HaveAnimatingFrame());
+
+  // See if we can send a VSync.
+  webxr_.NotifyMailboxBridgeReady();
+  WebXrTryStartAnimatingFrame(false);
+}
+
+void GvrSchedulerDelegate::CreateSurfaceBridge(
+    gl::SurfaceTexture* surface_texture) {
+  DCHECK(!mailbox_bridge_);
+  DCHECK(!webxr_.mailbox_bridge_ready());
+  mailbox_bridge_ = std::make_unique<MailboxToSurfaceBridge>();
+  if (surface_texture)
+    mailbox_bridge_->CreateSurface(surface_texture);
+  mailbox_bridge_->CreateAndBindContextProvider(
+      base::BindOnce(&GvrSchedulerDelegate::OnGpuProcessConnectionReady,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void GvrSchedulerDelegate::OnWebXrFrameAvailable() {
+  // This is called each time a frame that was drawn on the WebVR Surface
+  // arrives on the SurfaceTexture.
+
+  // This event should only occur in response to a SwapBuffers from
+  // an incoming SubmitFrame call.
+  DCHECK(!pending_frames_.empty()) << ": Frame arrived before SubmitFrame";
+
+  // LIFECYCLE: we should have exactly one pending frame. This is true
+  // even after exiting a session with a not-yet-surfaced frame.
+  DCHECK_EQ(pending_frames_.size(), 1U);
+
+  int frame_index = pending_frames_.front();
+  TRACE_EVENT1("gpu", __func__, "frame", frame_index);
+  pending_frames_.pop();
+
+  graphics_->OnWebXrFrameAvailable();
+
+  // LIFECYCLE: we should be in processing state.
+  DCHECK(webxr_.HaveProcessingFrame());
+  WebXrFrame* processing_frame = webxr_.GetProcessingFrame();
+
+  // Frame should be locked. Unlock it.
+  DCHECK(processing_frame->state_locked);
+  processing_frame->state_locked = false;
+
+  if (ShouldDrawWebVr() && !processing_frame->recycle_once_unlocked) {
+    DCHECK_EQ(processing_frame->index, frame_index);
+    DrawFrame(frame_index, base::TimeTicks::Now());
+  } else {
+    // Silently consume a frame if we don't want to draw it. This can happen
+    // due to an active exclusive UI such as a permission prompt, or after
+    // exiting a presentation session when a pending frame arrives late.
+    DVLOG(1) << __func__ << ": discarding frame, "
+             << (web_xr_mode_ ? "UI is active" : "not presenting");
+    WebXrCancelProcessingFrameAfterTransfer();
+    // We're no longer in processing state, unblock pending processing frames.
+    webxr_.TryDeferredProcessing();
+  }
+}
+
+void GvrSchedulerDelegate::WebXrCancelProcessingFrameAfterTransfer() {
+  DVLOG(2) << __func__;
+  DCHECK(webxr_.HaveProcessingFrame());
+  bool did_recycle = webxr_.RecycleProcessingFrameIfPossible();
+  DCHECK(did_recycle);
+  if (submit_client_) {
+    // We've already sent the transferred notification.
+    // Just report rendering complete.
+    WebVrSendRenderNotification(false);
+  }
+}
+
+void GvrSchedulerDelegate::ScheduleOrCancelWebVrFrameTimeout() {
+  // TODO(mthiesse): We should also timeout after the initial frame to prevent
+  // bad experiences, but we have to be careful to handle things like splash
+  // screens correctly. For now just ensure we receive a first frame.
+  if (!web_xr_mode_ || webvr_frames_received_ > 0) {
+    if (!webvr_frame_timeout_.IsCancelled())
+      webvr_frame_timeout_.Cancel();
+    if (!webvr_spinner_timeout_.IsCancelled())
+      webvr_spinner_timeout_.Cancel();
+    return;
+  }
+  if (CanSendWebXrVSync() && submit_client_) {
+    webvr_spinner_timeout_.Reset(base::BindOnce(
+        &GvrSchedulerDelegate::OnWebXrTimeoutImminent, base::Unretained(this)));
+    task_runner_->PostDelayedTask(
+        FROM_HERE, webvr_spinner_timeout_.callback(),
+        base::TimeDelta::FromSeconds(kWebVrSpinnerTimeoutSeconds));
+    webvr_frame_timeout_.Reset(base::BindOnce(
+        &GvrSchedulerDelegate::OnWebXrFrameTimedOut, base::Unretained(this)));
+    task_runner_->PostDelayedTask(
+        FROM_HERE, webvr_frame_timeout_.callback(),
+        base::TimeDelta::FromSeconds(kWebVrInitialFrameTimeoutSeconds));
+  }
+}
+
+bool GvrSchedulerDelegate::CanSendWebXrVSync() const {
+  return web_xr_mode_ && !showing_vr_dialog_;
+}
+
+void GvrSchedulerDelegate::OnWebXrFrameTimedOut() {
+  DCHECK(ui_);
+  ui_->OnWebXrTimedOut();
+}
+
+void GvrSchedulerDelegate::OnWebXrTimeoutImminent() {
+  DCHECK(ui_);
+  ui_->OnWebXrTimeoutImminent();
+}
+
+void GvrSchedulerDelegate::OnVSync(base::TimeTicks frame_time) {
+  TRACE_EVENT0("gpu", __func__);
+  // Create a synthetic VSync trace event for the reported last-VSync time. Use
+  // this specific type since it appears to be the only one which supports
+  // supplying a timestamp different from the current time, which is useful //
+  // since we seem to be >1ms behind the vsync time when we receive this call.
+  //
+  // See third_party/catapult/tracing/tracing/extras/vsync/vsync_auditor.html
+  std::unique_ptr<base::trace_event::TracedValue> args =
+      std::make_unique<base::trace_event::TracedValue>();
+  args->SetDouble(
+      "frame_time_us",
+      static_cast<double>((frame_time - base::TimeTicks()).InMicroseconds()));
+  TRACE_EVENT_INSTANT1("viz", "DisplayScheduler::BeginFrame",
+                       TRACE_EVENT_SCOPE_THREAD, "args", std::move(args));
+
+  vsync_helper_.RequestVSync();
+
+  pending_vsync_ = true;
+  pending_time_ = frame_time;
+  WebXrTryStartAnimatingFrame(true);
+
+  if (ShouldDrawWebVr()) {
+    // When drawing WebVR, controller input doesn't need to be synchronized with
+    // rendering as WebVR uses the gamepad api. To ensure we always handle input
+    // like app button presses, process the controller here.
+    device::GvrDelegate::GetGvrPoseWithNeckModel(gvr_api_, &head_pose_);
+    DCHECK(render_loop_);
+    render_loop_->ProcessControllerInputForWebXr(frame_time);
+  } else {
+    DrawFrame(-1, frame_time);
+  }
+}
+
+void GvrSchedulerDelegate::DrawFrame(int16_t frame_index,
+                                     base::TimeTicks current_time) {
+  // TODO(acondor): Move this logic to RenderLoop::Draw.
+  TRACE_EVENT1("gpu", __func__, "frame", frame_index);
+  bool is_webxr_frame = frame_index >= 0;
+  if (!webxr_delayed_gvr_submit_.IsCancelled()) {
+    // The last submit to GVR didn't complete, we have an acquired frame. This
+    // is normal when exiting WebVR, in that case we just want to reuse the
+    // frame. It's not supposed to happen during WebVR presentation.
+    DCHECK(!is_webxr_frame)
+        << "Unexpected WebXR DrawFrame during acquired frame";
+    webxr_delayed_gvr_submit_.Cancel();
+    render_loop_->DrawBrowserFrame(current_time);
+  }
+  DCHECK(render_loop_);
+
+  if (web_xr_mode_ && !ShouldDrawWebVr()) {
+    // We're in a WebVR session, but don't want to draw WebVR frames, i.e.
+    // because UI has taken over for a permissions prompt. Do state cleanup if
+    // needed.
+    if (webxr_.HaveAnimatingFrame() &&
+        webxr_.GetAnimatingFrame()->deferred_start_processing) {
+      // We have an animating frame. Cancel it if it's waiting to start
+      // processing. If not, keep it to receive the incoming SubmitFrame.
+      DVLOG(1) << __func__ << ": cancel waiting WebVR frame, UI is active";
+      WebXrCancelAnimatingFrame();
+    }
+  }
+
+  // From this point on, the current frame is either a pure UI frame
+  // (frame_index==-1), or a WebVR frame (frame_index >= 0). If it's a WebVR
+  // frame, it must be the current processing frame. Careful, we may still have
+  // a processing frame in UI mode that couldn't be cancelled yet. For example
+  // when showing a permission prompt, ShouldDrawWebVr() may have become false
+  // in the time between SubmitFrame and OnWebXrFrameAvailable or
+  // OnWebVRTokenSignaled. In that case we continue handling the current frame
+  // as a WebVR frame. Also, WebVR frames can still have overlay UI drawn on top
+  // of them.
+  DCHECK(!is_webxr_frame || webxr_.HaveProcessingFrame());
+
+  // When using async reprojection, we need to know which pose was
+  // used in the WebVR app for drawing this frame and supply it when
+  // submitting. Technically we don't need a pose if not reprojecting,
+  // but keeping it uninitialized seems likely to cause problems down
+  // the road. Copying it is cheaper than fetching a new one.
+  if (is_webxr_frame) {
+    // Copy into render info for overlay UI. WebVR doesn't use this.
+    DCHECK(webxr_.HaveProcessingFrame());
+    WebXrFrame* frame = webxr_.GetProcessingFrame();
+    head_pose_ = frame->head_pose;
+  } else {
+    device::GvrDelegate::GetGvrPoseWithNeckModel(gvr_api_, &head_pose_);
+  }
+
+  graphics_->UpdateViewports();
+
+  if (is_webxr_frame) {
+    UpdatePendingBounds(frame_index);
+    if (!graphics_->ResizeForWebXr())
+      return;
+  } else {
+    graphics_->ResizeForBrowser();
+  }
+
+  if (!graphics_->AcquireGvrFrame(frame_index))
+    return;
+
+  if (is_webxr_frame)
+    render_loop_->DrawWebXrFrame(current_time);
+  else
+    render_loop_->DrawBrowserFrame(current_time);
+
+  SubmitDrawnFrame(is_webxr_frame);
+}
+
+void GvrSchedulerDelegate::UpdatePendingBounds(int16_t frame_index) {
+  // Process all pending_bounds_ changes targeted for before this frame, being
+  // careful of wrapping frame indices.
+  static constexpr unsigned max =
+      std::numeric_limits<WebXrPresentationState::FrameIndexType>::max();
+  static_assert(max > WebXrPresentationState::kWebXrFrameCount * 2,
+                "To detect wrapping, kPoseRingBufferSize must be smaller "
+                "than half of next_frame_index_ range.");
+  while (!pending_bounds_.empty()) {
+    uint16_t index = pending_bounds_.front().first;
+    // If index is less than the frame_index it's possible we've wrapped, so we
+    // extend the range and 'un-wrap' to account for this.
+    if (index < frame_index)
+      index += max + 1;
+    // If the pending bounds change is for an upcoming frame within our buffer
+    // size, wait to apply it. Otherwise, apply it immediately. This guarantees
+    // that even if we miss many frames, the queue can't fill up with stale
+    // bounds.
+    if (index > frame_index &&
+        index <= frame_index + WebXrPresentationState::kWebXrFrameCount)
+      break;
+
+    const WebVrBounds& bounds = pending_bounds_.front().second;
+    graphics_->SetWebXrBounds(bounds);
+    DVLOG(1) << __func__ << ": resize from pending_bounds to "
+             << bounds.source_size.width() << "x"
+             << bounds.source_size.height();
+    CreateOrResizeWebXrSurface(bounds.source_size);
+    pending_bounds_.pop();
+  }
+}
+
+void GvrSchedulerDelegate::SubmitDrawnFrame(bool is_webxr_frame) {
+  // GVR submit needs the exact head pose that was used for rendering.
+  gfx::Transform submit_head_pose;
+  if (is_webxr_frame) {
+    // Don't use render_info_.head_pose here, that may have been
+    // overwritten by OnVSync's controller handling. We need the pose that was
+    // sent to JS.
+    submit_head_pose = webxr_.GetProcessingFrame()->head_pose;
+  } else {
+    submit_head_pose = head_pose_;
+  }
+  std::unique_ptr<gl::GLFenceEGL> fence = nullptr;
+  if (is_webxr_frame && graphics_->DoesSurfacelessRendering()) {
+    webxr_.GetProcessingFrame()->time_copied = base::TimeTicks::Now();
+    if (webxr_use_gpu_fence_) {
+      // Continue with submit once the previous frame's GL fence signals that
+      // it is done rendering. This avoids blocking in GVR's Submit. Fence is
+      // null for the first frame, in that case the fence wait is skipped.
+      if (webvr_prev_frame_completion_fence_ &&
+          webvr_prev_frame_completion_fence_->HasCompleted()) {
+        // The fence had already signaled. We can get the signaled time from the
+        // fence and submit immediately.
+        AddWebVrRenderTimeEstimate(
+            webvr_prev_frame_completion_fence_->GetStatusChangeTime());
+        webvr_prev_frame_completion_fence_.reset();
+      } else {
+        fence = std::move(webvr_prev_frame_completion_fence_);
+      }
+    } else {
+      // Continue with submit once a GL fence signals that current drawing
+      // operations have completed.
+      fence = gl::GLFenceEGL::Create();
+    }
+  }
+  if (fence) {
+    webxr_delayed_gvr_submit_.Reset(
+        base::BindRepeating(&GvrSchedulerDelegate::DrawFrameSubmitWhenReady,
+                            base::Unretained(this)));
+    task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(webxr_delayed_gvr_submit_.callback(), is_webxr_frame,
+                       submit_head_pose, base::Passed(&fence)));
+  } else {
+    // Continue with submit immediately.
+    DrawFrameSubmitNow(is_webxr_frame, submit_head_pose);
+  }
+}
+
+void GvrSchedulerDelegate::DrawFrameSubmitWhenReady(
+    bool is_webxr_frame,
+    const gfx::Transform& head_pose,
+    std::unique_ptr<gl::GLFenceEGL> fence) {
+  TRACE_EVENT1("gpu", __func__, "is_webxr_frame", is_webxr_frame);
+  DVLOG(2) << __func__ << ": is_webxr_frame=" << is_webxr_frame;
+  bool use_polling = webxr_.mailbox_bridge_ready() &&
+                     mailbox_bridge_->IsGpuWorkaroundEnabled(
+                         gpu::DONT_USE_EGLCLIENTWAITSYNC_WITH_TIMEOUT);
+  if (fence) {
+    if (!use_polling) {
+      // Use wait-with-timeout to find out as soon as possible when rendering
+      // is complete.
+      fence->ClientWaitWithTimeoutNanos(
+          kWebVRFenceCheckTimeout.InNanoseconds());
+    }
+    if (!fence->HasCompleted()) {
+      webxr_delayed_gvr_submit_.Reset(
+          base::BindRepeating(&GvrSchedulerDelegate::DrawFrameSubmitWhenReady,
+                              base::Unretained(this)));
+      if (use_polling) {
+        // Poll the fence status at a short interval. This burns some CPU, but
+        // avoids excessive waiting on devices which don't handle timeouts
+        // correctly. Downside is that the completion status is only detected
+        // with a delay of up to one polling interval.
+        task_runner_->PostDelayedTask(
+            FROM_HERE,
+            base::BindOnce(webxr_delayed_gvr_submit_.callback(), is_webxr_frame,
+                           head_pose, base::Passed(&fence)),
+            kWebVRFenceCheckPollInterval);
+      } else {
+        task_runner_->PostTask(
+            FROM_HERE,
+            base::BindOnce(webxr_delayed_gvr_submit_.callback(), is_webxr_frame,
+                           head_pose, base::Passed(&fence)));
+      }
+      return;
+    }
+  }
+
+  if (fence && webxr_use_gpu_fence_) {
+    // We were waiting for the fence, so the time now is the actual
+    // finish time for the previous frame's rendering.
+    AddWebVrRenderTimeEstimate(base::TimeTicks::Now());
+  }
+
+  webxr_delayed_gvr_submit_.Cancel();
+  DrawFrameSubmitNow(is_webxr_frame, head_pose);
+}
+
+void GvrSchedulerDelegate::AddWebVrRenderTimeEstimate(
+    base::TimeTicks fence_complete_time) {
+  if (!webxr_.HaveRenderingFrame())
+    return;
+
+  WebXrFrame* rendering_frame = webxr_.GetRenderingFrame();
+  base::TimeTicks prev_js_submit = rendering_frame->time_js_submit;
+  if (webxr_use_gpu_fence_ && !prev_js_submit.is_null() &&
+      !fence_complete_time.is_null()) {
+    webvr_render_time_.AddSample(fence_complete_time - prev_js_submit);
+  }
+}
+
+void GvrSchedulerDelegate::DrawFrameSubmitNow(bool is_webxr_frame,
+                                              const gfx::Transform& head_pose) {
+  TRACE_EVENT1("gpu", "VrShellGl::DrawFrameSubmitNow", "is_webxr_frame",
+               is_webxr_frame);
+
+  {
+    std::unique_ptr<ScopedGpuTrace> browser_gpu_trace;
+    if (gl::GLFence::IsGpuFenceSupported() && is_webxr_frame) {
+      // This fence instance is created for the tracing side effect. Insert it
+      // before GVR submit. Then replace the previous instance below after GVR
+      // submit completes, at which point the previous fence (if any) should be
+      // complete. Doing this in two steps avoids a race condition - a fence
+      // that was inserted after Submit may not be complete yet when the next
+      // Submit finishes.
+      browser_gpu_trace = std::make_unique<ScopedGpuTrace>(
+          "gpu", "VrShellGl::PostSubmitDrawOnGpu");
+    }
+    graphics_->SubmitToGvr(head_pose);
+
+    if (browser_gpu_trace) {
+      // Replacing the previous instance will record the trace result for
+      // the previous instance.
+      DCHECK(!gpu_trace_ || gpu_trace_->fence()->HasCompleted());
+      gpu_trace_ = std::move(browser_gpu_trace);
+    }
+  }
+
+  // At this point, ShouldDrawWebVr and webvr_frame_processing_ may have become
+  // false for a WebVR frame. Ignore the ShouldDrawWebVr status to ensure we
+  // send render notifications while paused for exclusive UI mode. Skip the
+  // steps if we lost the processing state, that means presentation has ended.
+  if (is_webxr_frame && webxr_.HaveProcessingFrame()) {
+    // Report rendering completion to the Renderer so that it's permitted to
+    // submit a fresh frame. We could do this earlier, as soon as the frame
+    // got pulled off the transfer surface, but that results in overstuffed
+    // buffers.
+    WebVrSendRenderNotification(true);
+
+    base::TimeTicks pose_time = webxr_.GetProcessingFrame()->time_pose;
+    base::TimeTicks js_submit_time =
+        webxr_.GetProcessingFrame()->time_js_submit;
+    webvr_js_time_.AddSample(js_submit_time - pose_time);
+    if (!webxr_use_gpu_fence_) {
+      // Estimate render time from wallclock time, we waited for the pre-submit
+      // render fence to signal.
+      base::TimeTicks now = base::TimeTicks::Now();
+      webvr_render_time_.AddSample(now - js_submit_time);
+    }
+
+    if (webxr_.HaveRenderingFrame()) {
+      webxr_.EndFrameRendering();
+    }
+    webxr_.TransitionFrameProcessingToRendering();
+  }
+
+  // After saving the timestamp, fps will be available via GetFPS().
+  // TODO(vollick): enable rendering of this framerate in a HUD.
+  vr_ui_fps_meter_.AddFrame(base::TimeTicks::Now());
+  DVLOG(1) << "fps: " << vr_ui_fps_meter_.GetFPS();
+  TRACE_COUNTER1("gpu", "VR UI FPS", vr_ui_fps_meter_.GetFPS());
+
+  if (is_webxr_frame) {
+    // We finished processing a frame, this may make pending WebVR
+    // work eligible to proceed.
+    webxr_.TryDeferredProcessing();
+  }
+
+  if (ShouldDrawWebVr()) {
+    // See if we can animate a new WebVR frame. Intentionally using
+    // ShouldDrawWebVr here since we also want to run this check after
+    // UI frames, i.e. transitioning from transient UI to WebVR.
+    WebXrTryStartAnimatingFrame(false);
+  }
+}
+
+bool GvrSchedulerDelegate::WebVrCanAnimateFrame(bool is_from_onvsync) {
+  // This check needs to be first to ensure that we start the WebVR
+  // first-frame timeout on presentation start.
+  bool can_send_webvr_vsync = CanSendWebXrVSync();
+  if (!webxr_.last_ui_allows_sending_vsync && can_send_webvr_vsync) {
+    // We will start sending vsync to the WebVR page, so schedule the incoming
+    // frame timeout.
+    ScheduleOrCancelWebVrFrameTimeout();
+  }
+  webxr_.last_ui_allows_sending_vsync = can_send_webvr_vsync;
+  if (!can_send_webvr_vsync) {
+    DVLOG(2) << __func__ << ": waiting for can_send_webvr_vsync";
+    return false;
+  }
+
+  // If we want to send vsync-aligned frames, we only allow animation to start
+  // when called from OnVSync, so if we're called from somewhere else we can
+  // skip all the other checks. Legacy Cardboard mode (not surfaceless) doesn't
+  // use vsync aligned frames, and there's a flag to disable it for surfaceless
+  // mode.
+  if (graphics_->DoesSurfacelessRendering() && webvr_vsync_align_ &&
+      !is_from_onvsync) {
+    DVLOG(3) << __func__ << ": waiting for onvsync (vsync aligned)";
+    return false;
+  }
+
+  if (!web_xr_mode_) {
+    DVLOG(2) << __func__ << ": no active session, ignore";
+    return false;
+  }
+
+  if (get_frame_data_callback_.is_null()) {
+    DVLOG(2) << __func__ << ": waiting for get_frame_data_callback_";
+    return false;
+  }
+
+  if (!pending_vsync_) {
+    DVLOG(2) << __func__ << ": waiting for pending_vsync (too fast)";
+    return false;
+  }
+
+  // If we already have a JS frame that's animating, don't send another one.
+  // This check depends on the Renderer calling either SubmitFrame or
+  // SubmitFrameMissing for each animated frame.
+  if (webxr_.HaveAnimatingFrame()) {
+    DVLOG(2) << __func__
+             << ": waiting for current animating frame to start processing";
+    return false;
+  }
+  if (webxr_use_shared_buffer_draw_ && !webxr_.mailbox_bridge_ready()) {
+    // For exclusive scheduling, we need the mailbox bridge before the first
+    // frame so that we can place a sync token. For shared buffer draw, we
+    // need it to set up buffers before starting client rendering.
+    DVLOG(2) << __func__ << ": waiting for mailbox_bridge_ready";
+    return false;
+  }
+  if (webxr_use_shared_buffer_draw_ &&
+      graphics_->webxr_surface_size().IsEmpty()) {
+    // For shared buffer draw, wait for a nonzero size before creating
+    // the shared buffer for use as a drawing destination.
+    DVLOG(2) << __func__ << ": waiting for nonzero size";
+    return false;
+  }
+
+  // Keep the heuristic tests last since they update a trace counter, they
+  // should only be run if the remaining criteria are already met. There's no
+  // corresponding WebVrTryStartAnimating call for this, the retries happen
+  // via OnVSync.
+  bool still_rendering = WebVrHasSlowRenderingFrame();
+  bool overstuffed = WebVrHasOverstuffedBuffers();
+  TRACE_COUNTER2("gpu", "WebVR frame skip", "still rendering", still_rendering,
+                 "overstuffed", overstuffed);
+  if (still_rendering || overstuffed) {
+    DVLOG(2) << __func__ << ": waiting for backlogged frames,"
+             << " still_rendering=" << still_rendering
+             << " overstuffed=" << overstuffed;
+    return false;
+  }
+
+  DVLOG(2) << __func__ << ": ready to animate frame";
+  return true;
+}
+
+void GvrSchedulerDelegate::WebXrTryStartAnimatingFrame(bool is_from_onvsync) {
+  if (WebVrCanAnimateFrame(is_from_onvsync)) {
+    SendVSync();
+  }
+}
+
+bool GvrSchedulerDelegate::ShouldDrawWebVr() {
+  return web_xr_mode_ && !showing_vr_dialog_ && webvr_frames_received_ > 0;
+}
+
+void GvrSchedulerDelegate::WebXrCancelAnimatingFrame() {
+  DVLOG(2) << __func__;
+  webxr_.RecycleUnusedAnimatingFrame();
+  if (submit_client_) {
+    // We haven't written to the Surface yet. Mark as transferred and rendered.
+    submit_client_->OnSubmitFrameTransferred(true);
+    WebVrSendRenderNotification(false);
+  }
+}
+
+void GvrSchedulerDelegate::WebVrSendRenderNotification(bool was_rendered) {
+  if (!submit_client_)
+    return;
+
+  TRACE_EVENT0("gpu", __func__);
+  if (webxr_use_gpu_fence_) {
+    // Renderer is waiting for a frame-separating GpuFence.
+
+    if (was_rendered) {
+      // Save a fence for local completion checking.
+      webvr_prev_frame_completion_fence_ =
+          gl::GLFenceAndroidNativeFenceSync::CreateForGpuFence();
+    }
+
+    // Create a local GpuFence and pass it to the Renderer via IPC.
+    std::unique_ptr<gl::GLFence> gl_fence = gl::GLFence::CreateForGpuFence();
+    std::unique_ptr<gfx::GpuFence> gpu_fence = gl_fence->GetGpuFence();
+    submit_client_->OnSubmitFrameGpuFence(
+        gfx::CloneHandleForIPC(gpu_fence->GetGpuFenceHandle()));
+  } else {
+    // Renderer is waiting for the previous frame to render, unblock it now.
+    submit_client_->OnSubmitFrameRendered();
+  }
+}
+
+bool GvrSchedulerDelegate::WebVrHasSlowRenderingFrame() {
+  // Disable heuristic for traditional render path where we submit completed
+  // frames.
+  if (!webxr_use_gpu_fence_)
+    return false;
+
+  base::TimeDelta frame_interval = vsync_helper_.DisplayVSyncInterval();
+  base::TimeDelta mean_render_time =
+      webvr_render_time_.GetAverageOrDefault(frame_interval);
+
+  // Check estimated completion of the rendering frame, that's two frames back.
+  // It might not exist, i.e. for the first couple of frames when starting
+  // presentation, or if the app failed to submit a frame in its rAF loop.
+  // Also, AddWebVrRenderTimeEstimate zeroes the submit time once the rendered
+  // frame is complete. In all of those cases, we don't need to wait for render
+  // completion.
+  if (webxr_.HaveRenderingFrame() && webxr_.HaveProcessingFrame()) {
+    base::TimeTicks prev_js_submit = webxr_.GetRenderingFrame()->time_js_submit;
+    base::TimeDelta mean_js_time = webvr_js_time_.GetAverage();
+    base::TimeDelta mean_js_wait = webvr_js_wait_time_.GetAverage();
+    base::TimeDelta prev_render_time_left =
+        mean_render_time - (base::TimeTicks::Now() - prev_js_submit);
+    // We don't want the next animating frame to arrive too early. Estimated
+    // time-to-submit is the net JavaScript time, not counting time spent
+    // waiting. JS is blocked from submitting if the rendering frame (two
+    // frames back) is not complete yet, so there's no point submitting earlier
+    // than that. There's also a processing frame (one frame back), so we have
+    // at least a VSync interval spare time after that. Aim for submitting 3/4
+    // of a VSync interval after the rendering frame completes to keep a bit of
+    // safety margin. We're currently scheduling at VSync granularity, so skip
+    // this VSync if we'd arrive a full VSync interval early.
+    if (mean_js_time - mean_js_wait + frame_interval <
+        prev_render_time_left + frame_interval * 3 / 4) {
+      return true;
+    }
+  }
+  return false;
+}
+
+bool GvrSchedulerDelegate::WebVrHasOverstuffedBuffers() {
+  base::TimeDelta frame_interval = vsync_helper_.DisplayVSyncInterval();
+  base::TimeDelta mean_render_time =
+      webvr_render_time_.GetAverageOrDefault(frame_interval);
+
+  if (webvr_unstuff_ratelimit_frames_ > 0) {
+    --webvr_unstuff_ratelimit_frames_;
+  } else if (graphics_->GetAcquireTimeAverage() >= kWebVrSlowAcquireThreshold &&
+             mean_render_time < frame_interval) {
+    // This is a fast app with average render time less than the frame
+    // interval. If GVR acquire is slow, that means its internal swap chain was
+    // already full when we tried to give it the next frame. We can skip a
+    // SendVSync to drain one frame from the GVR queue. That should reduce
+    // latency by one frame.
+    webvr_unstuff_ratelimit_frames_ = kWebVrUnstuffMaxDropRate;
+    return true;
+  }
+  return false;
+}
+
+void GvrSchedulerDelegate::SendVSync() {
+  DCHECK(!get_frame_data_callback_.is_null());
+  DCHECK(pending_vsync_);
+
+  // Mark the VSync as consumed.
+  pending_vsync_ = false;
+
+  device::mojom::XRFrameDataPtr frame_data = device::mojom::XRFrameData::New();
+
+  // The internal frame index is an uint8_t that generates a wrapping 0.255
+  // frame number. We store it in an int16_t to match mojo APIs, and to avoid
+  // it appearing as a char in debug logs.
+  frame_data->frame_id = webxr_.StartFrameAnimating();
+  DVLOG(2) << __func__ << " frame=" << frame_data->frame_id;
+
+  if (webxr_use_shared_buffer_draw_) {
+    WebXrPrepareSharedBuffer();
+
+    CHECK(webxr_.mailbox_bridge_ready());
+    CHECK(webxr_.HaveAnimatingFrame());
+    WebXrSharedBuffer* buffer = webxr_.GetAnimatingFrame()->shared_buffer.get();
+    DCHECK(buffer);
+    frame_data->buffer_holder = *buffer->mailbox_holder;
+  }
+
+  int64_t prediction_nanos = GetPredictedFrameTime().InMicroseconds() * 1000;
+
+  gfx::Transform head_mat;
+  TRACE_EVENT_BEGIN0("gpu", "VrShellGl::GetVRPosePtrWithNeckModel");
+  device::mojom::VRPosePtr pose =
+      device::GvrDelegate::GetVRPosePtrWithNeckModel(gvr_api_, &head_mat,
+                                                     prediction_nanos);
+  TRACE_EVENT_END0("gpu", "VrShellGl::GetVRPosePtrWithNeckModel");
+
+  // Process all events. Check for ones we wish to react to.
+  gvr::Event last_event;
+  while (gvr_api_->PollEvent(&last_event)) {
+    pose->pose_reset |= last_event.type == GVR_EVENT_RECENTER;
+  }
+
+  TRACE_EVENT0("gpu", "VrShellGl::XRInput");
+  if (cardboard_gamepad_) {
+    std::vector<device::mojom::XRInputSourceStatePtr> input_states;
+    input_states.push_back(GetGazeInputSourceState());
+    pose->input_state = std::move(input_states);
+  } else {
+    pose->input_state = std::move(input_states_);
+  }
+
+  frame_data->pose = std::move(pose);
+
+  WebXrFrame* frame = webxr_.GetAnimatingFrame();
+  frame->head_pose = head_mat;
+  frame->time_pose = base::TimeTicks::Now();
+
+  frame_data->time_delta = pending_time_ - base::TimeTicks();
+
+  TRACE_EVENT0("gpu", "VrShellGl::RunCallback");
+  std::move(get_frame_data_callback_).Run(std::move(frame_data));
+}
+
+void GvrSchedulerDelegate::WebXrPrepareSharedBuffer() {
+  TRACE_EVENT0("gpu", __func__);
+  const auto& webxr_surface_size = graphics_->webxr_surface_size();
+  DVLOG(2) << __func__ << ": size=" << webxr_surface_size.width() << "x"
+           << webxr_surface_size.height();
+  CHECK(webxr_.mailbox_bridge_ready());
+  CHECK(webxr_.HaveAnimatingFrame());
+
+  WebXrSharedBuffer* buffer;
+  if (webxr_.GetAnimatingFrame()->shared_buffer) {
+    buffer = webxr_.GetAnimatingFrame()->shared_buffer.get();
+  } else {
+    // Create buffer and do one-time setup for resources that stay valid after
+    // size changes.
+    webxr_.GetAnimatingFrame()->shared_buffer =
+        std::make_unique<WebXrSharedBuffer>();
+    buffer = webxr_.GetAnimatingFrame()->shared_buffer.get();
+
+    // Remote resources
+    buffer->mailbox_holder = std::make_unique<gpu::MailboxHolder>();
+    buffer->mailbox_holder->texture_target = GL_TEXTURE_2D;
+    buffer->remote_texture =
+        mailbox_bridge_->CreateMailboxTexture(&buffer->mailbox_holder->mailbox);
+
+    // Local resources
+    glGenTextures(1, &buffer->local_texture);
+  }
+
+  if (webxr_surface_size != buffer->size) {
+    // Don't need the image for zero copy mode.
+    WebXrCreateOrResizeSharedBufferImage(buffer, webxr_surface_size);
+    // We always need a valid sync token, even if not using
+    // the image. The Renderer waits for it before using the
+    // mailbox. Technically we don't need to update it
+    // after resize for zero copy mode, but we do need it
+    // after initial creation.
+    mailbox_bridge_->GenSyncToken(&buffer->mailbox_holder->sync_token);
+
+    // Save the size to avoid expensive reallocation next time.
+    buffer->size = webxr_surface_size;
+  }
+}
+
+void GvrSchedulerDelegate::WebXrCreateOrResizeSharedBufferImage(
+    WebXrSharedBuffer* buffer,
+    const gfx::Size& size) {
+  TRACE_EVENT0("gpu", __func__);
+  // Unbind previous image (if any).
+  if (buffer->remote_image) {
+    DVLOG(2) << ": UnbindSharedBuffer, remote_image=" << buffer->remote_image;
+    mailbox_bridge_->UnbindSharedBuffer(buffer->remote_image,
+                                        buffer->remote_texture);
+    buffer->remote_image = 0;
+  }
+
+  DVLOG(2) << __func__ << ": width=" << size.width()
+           << " height=" << size.height();
+  // Remove reference to previous image (if any).
+  buffer->local_glimage = nullptr;
+
+  const gfx::BufferFormat format = gfx::BufferFormat::RGBA_8888;
+  const gfx::BufferUsage usage = gfx::BufferUsage::SCANOUT;
+
+  gfx::GpuMemoryBufferId kBufferId(webxr_.next_memory_buffer_id++);
+  buffer->gmb = gpu::GpuMemoryBufferImplAndroidHardwareBuffer::Create(
+      kBufferId, size, format, usage,
+      gpu::GpuMemoryBufferImpl::DestructionCallback());
+
+  buffer->remote_image = mailbox_bridge_->BindSharedBufferImage(
+      buffer->gmb.get(), size, format, usage, buffer->remote_texture);
+  DVLOG(2) << ": BindSharedBufferImage, remote_image=" << buffer->remote_image;
+
+  scoped_refptr<gl::GLImageAHardwareBuffer> img(
+      new gl::GLImageAHardwareBuffer(graphics_->webxr_surface_size()));
+
+  base::android::ScopedHardwareBufferHandle ahb =
+      buffer->gmb->CloneHandle().android_hardware_buffer;
+  bool ret = img->Initialize(ahb.get(), false /* preserved */);
+  if (!ret) {
+    DLOG(WARNING) << __func__ << ": ERROR: failed to initialize image!";
+    // Exiting VR is a bit drastic, but this error shouldn't occur under normal
+    // operation. If it's an issue in practice, look into other recovery
+    // options such as shutting down the WebVR/WebXR presentation session.
+    browser_->ForceExitVr();
+    return;
+  }
+  glBindTexture(GL_TEXTURE_EXTERNAL_OES, buffer->local_texture);
+  img->BindTexImage(GL_TEXTURE_EXTERNAL_OES);
+  buffer->local_glimage = std::move(img);
+}
+
+base::TimeDelta GvrSchedulerDelegate::GetPredictedFrameTime() {
+  base::TimeDelta frame_interval = vsync_helper_.DisplayVSyncInterval();
+  // If we aim to submit at vsync, that frame will start scanning out
+  // one vsync later. Add a half frame to split the difference between
+  // left and right eye.
+  base::TimeDelta js_time = webvr_js_time_.GetAverageOrDefault(frame_interval);
+  base::TimeDelta render_time =
+      webvr_render_time_.GetAverageOrDefault(frame_interval);
+  base::TimeDelta overhead_time = frame_interval * 3 / 2;
+  base::TimeDelta expected_frame_time = js_time + render_time + overhead_time;
+  TRACE_COUNTER2("gpu", "WebVR frame time (ms)", "javascript",
+                 js_time.InMilliseconds(), "rendering",
+                 render_time.InMilliseconds());
+  graphics_->RecordFrameTimeTraces();
+  TRACE_COUNTER1("gpu", "WebVR pose prediction (ms)",
+                 expected_frame_time.InMilliseconds());
+  return expected_frame_time;
+}
+
+device::mojom::XRInputSourceStatePtr
+GvrSchedulerDelegate::GetGazeInputSourceState() {
+  device::mojom::XRInputSourceStatePtr state =
+      device::mojom::XRInputSourceState::New();
+
+  // Only one gaze input source to worry about, so it can have a static id.
+  state->source_id = 1;
+
+  // Report any trigger state changes made since the last call and reset the
+  // state here.
+  state->primary_input_pressed = cardboard_trigger_pressed_;
+  state->primary_input_clicked = cardboard_trigger_clicked_;
+  cardboard_trigger_clicked_ = false;
+
+  state->description = device::mojom::XRInputSourceDescription::New();
+
+  // It's a gaze-cursor-based device.
+  state->description->target_ray_mode = device::mojom::XRTargetRayMode::GAZING;
+  state->description->emulated_position = true;
+
+  // No implicit handedness
+  state->description->handedness = device::mojom::XRHandedness::NONE;
+
+  // Pointer and grip transforms are omitted since this is a gaze-based source.
+
+  return state;
+}
+
+void GvrSchedulerDelegate::ClosePresentationBindings() {
+  webvr_frame_timeout_.Cancel();
+  submit_client_.reset();
+  if (!get_frame_data_callback_.is_null()) {
+    // When this Presentation provider is going away we have to respond to
+    // pending callbacks, so instead of providing a VSync, tell the requester
+    // the connection is closing.
+    std::move(get_frame_data_callback_).Run(nullptr);
+  }
+  presentation_binding_.Close();
+  frame_data_binding_.Close();
+}
+
+void GvrSchedulerDelegate::GetFrameData(
+    device::mojom::XRFrameDataProvider::GetFrameDataCallback callback) {
+  TRACE_EVENT0("gpu", __func__);
+  if (!get_frame_data_callback_.is_null()) {
+    DLOG(WARNING) << ": previous get_frame_data_callback_ was not used yet";
+    mojo::ReportBadMessage(
+        "Requested VSync before waiting for response to previous request.");
+    ClosePresentationBindings();
+    return;
+  }
+
+  get_frame_data_callback_ = std::move(callback);
+  WebXrTryStartAnimatingFrame(false);
+}
+
+void GvrSchedulerDelegate::SubmitFrameMissing(
+    int16_t frame_index,
+    const gpu::SyncToken& sync_token) {
+  TRACE_EVENT1("gpu", "VrShellGl::SubmitWebVRFrame", "frame", frame_index);
+
+  if (!IsSubmitFrameExpected(frame_index))
+    return;
+
+  // Renderer didn't submit a frame. Wait for the sync token to ensure
+  // that any mailbox_bridge_ operations for the next frame happen after
+  // whatever drawing the Renderer may have done before exiting.
+  if (webxr_.mailbox_bridge_ready())
+    mailbox_bridge_->WaitSyncToken(sync_token);
+
+  DVLOG(2) << __func__ << ": recycle unused animating frame";
+  DCHECK(webxr_.HaveAnimatingFrame());
+  webxr_.RecycleUnusedAnimatingFrame();
+}
+
+void GvrSchedulerDelegate::SubmitFrame(int16_t frame_index,
+                                       const gpu::MailboxHolder& mailbox,
+                                       base::TimeDelta time_waited) {
+  if (!SubmitFrameCommon(frame_index, time_waited))
+    return;
+
+  webxr_.ProcessOrDefer(
+      base::BindOnce(&GvrSchedulerDelegate::ProcessWebVrFrameFromMailbox,
+                     weak_ptr_factory_.GetWeakPtr(), frame_index, mailbox));
+}
+
+void GvrSchedulerDelegate::SubmitFrameWithTextureHandle(
+    int16_t frame_index,
+    mojo::ScopedHandle texture_handle) {
+  NOTREACHED();
+}
+
+void GvrSchedulerDelegate::SubmitFrameDrawnIntoTexture(
+    int16_t frame_index,
+    const gpu::SyncToken& sync_token,
+    base::TimeDelta time_waited) {
+  if (!SubmitFrameCommon(frame_index, time_waited))
+    return;
+
+  webxr_.ProcessOrDefer(
+      base::BindOnce(&GvrSchedulerDelegate::ProcessWebVrFrameFromGMB,
+                     weak_ptr_factory_.GetWeakPtr(), frame_index, sync_token));
+}
+
+void GvrSchedulerDelegate::UpdateLayerBounds(int16_t frame_index,
+                                             const gfx::RectF& left_bounds,
+                                             const gfx::RectF& right_bounds,
+                                             const gfx::Size& source_size) {
+  if (!ValidateRect(left_bounds) || !ValidateRect(right_bounds)) {
+    mojo::ReportBadMessage("UpdateLayerBounds called with invalid bounds");
+    presentation_binding_.Close();
+    frame_data_binding_.Close();
+    return;
+  }
+
+  if (frame_index >= 0 && !webxr_.HaveAnimatingFrame()) {
+    // The optional UpdateLayerBounds call must happen before SubmitFrame.
+    mojo::ReportBadMessage("UpdateLayerBounds called without animating frame");
+    presentation_binding_.Close();
+    frame_data_binding_.Close();
+    return;
+  }
+
+  WebVrBounds webxr_bounds(left_bounds, right_bounds, source_size);
+  if (frame_index < 0) {
+    graphics_->SetWebXrBounds(webxr_bounds);
+    CreateOrResizeWebXrSurface(source_size);
+    pending_bounds_ = {};
+  } else {
+    pending_bounds_.emplace(frame_index, webxr_bounds);
+  }
+}
+
+bool GvrSchedulerDelegate::IsSubmitFrameExpected(int16_t frame_index) {
+  // submit_client_ could be null when we exit presentation, if there were
+  // pending SubmitFrame messages queued.  XRSessionClient::OnExitPresent
+  // will clean up state in blink, so it doesn't wait for
+  // OnSubmitFrameTransferred or OnSubmitFrameRendered. Similarly,
+  // the animating frame state is cleared when exiting presentation,
+  // and we should ignore a leftover queued SubmitFrame.
+  if (!submit_client_.get() || !webxr_.HaveAnimatingFrame())
+    return false;
+
+  WebXrFrame* animating_frame = webxr_.GetAnimatingFrame();
+
+  if (animating_frame->index != frame_index) {
+    DVLOG(1) << __func__ << ": wrong frame index, got " << frame_index
+             << ", expected " << animating_frame->index;
+    mojo::ReportBadMessage("SubmitFrame called with wrong frame index");
+    presentation_binding_.Close();
+    frame_data_binding_.Close();
+    return false;
+  }
+
+  // Frame looks valid.
+  return true;
+}
+
+bool GvrSchedulerDelegate::SubmitFrameCommon(int16_t frame_index,
+                                             base::TimeDelta time_waited) {
+  TRACE_EVENT1("gpu", "VrShellGl::SubmitWebVRFrame", "frame", frame_index);
+  DVLOG(2) << __func__ << ": frame=" << frame_index;
+
+  if (!IsSubmitFrameExpected(frame_index))
+    return false;
+
+  // If we get here, treat as a valid submit.
+  DCHECK(webxr_.HaveAnimatingFrame());
+  WebXrFrame* animating_frame = webxr_.GetAnimatingFrame();
+
+  animating_frame->time_js_submit = base::TimeTicks::Now();
+
+  // The JavaScript wait time is supplied externally and not trustworthy. Clamp
+  // to a reasonable range to avoid math errors.
+  if (time_waited < base::TimeDelta())
+    time_waited = base::TimeDelta();
+  if (time_waited > base::TimeDelta::FromSeconds(1))
+    time_waited = base::TimeDelta::FromSeconds(1);
+  webvr_js_wait_time_.AddSample(time_waited);
+  TRACE_COUNTER1("gpu", "WebVR JS wait (ms)",
+                 webvr_js_wait_time_.GetAverage().InMilliseconds());
+
+  // Always tell the UI that we have a new WebVR frame, so that it can
+  // transition the UI state to "presenting" and cancel any pending timeouts.
+  // That's a prerequisite for ShouldDrawWebVr to become true, which is in turn
+  // required to complete a processing frame.
+  OnNewWebXrFrame();
+
+  if (!ShouldDrawWebVr()) {
+    DVLOG(1) << "Discarding received frame, UI is active";
+    WebXrCancelAnimatingFrame();
+    return false;
+  }
+
+  return true;
+}
+
+void GvrSchedulerDelegate::OnNewWebXrFrame() {
+  ui_->OnWebXrFrameAvailable();
+
+  if (web_xr_mode_) {
+    ++webvr_frames_received_;
+
+    webxr_fps_meter_.AddFrame(base::TimeTicks::Now());
+    TRACE_COUNTER1("gpu", "WebVR FPS", webxr_fps_meter_.GetFPS());
+  }
+
+  ScheduleOrCancelWebVrFrameTimeout();
+}
+
+void GvrSchedulerDelegate::ProcessWebVrFrameFromMailbox(
+    int16_t frame_index,
+    const gpu::MailboxHolder& mailbox) {
+  TRACE_EVENT0("gpu", __func__);
+
+  // LIFECYCLE: pending_frames_ should be empty when there's no processing
+  // frame. It gets one element here, and then is emptied again before leaving
+  // processing state. Swapping twice on a Surface without calling
+  // updateTexImage in between can lose frames, so don't draw+swap if we
+  // already have a pending frame we haven't consumed yet.
+  DCHECK(pending_frames_.empty());
+
+  // LIFECYCLE: We shouldn't have gotten here unless mailbox_bridge_ is ready.
+  DCHECK(webxr_.mailbox_bridge_ready());
+
+  // Don't allow any state changes for this processing frame until it
+  // arrives on the Surface. See OnWebXrFrameAvailable.
+  DCHECK(webxr_.HaveProcessingFrame());
+  webxr_.GetProcessingFrame()->state_locked = true;
+
+  bool swapped = mailbox_bridge_->CopyMailboxToSurfaceAndSwap(mailbox);
+  DCHECK(swapped);
+  // Tell OnWebXrFrameAvailable to expect a new frame to arrive on
+  // the SurfaceTexture, and save the associated frame index.
+  pending_frames_.emplace(frame_index);
+
+  // LIFECYCLE: we should have a pending frame now.
+  DCHECK_EQ(pending_frames_.size(), 1U);
+
+  // Notify the client that we're done with the mailbox so that the underlying
+  // image is eligible for destruction.
+  submit_client_->OnSubmitFrameTransferred(true);
+
+  // Unblock the next animating frame in case it was waiting for this
+  // one to start processing.
+  WebXrTryStartAnimatingFrame(false);
+}
+
+void GvrSchedulerDelegate::OnWebXrTokenSignaled(
+    int16_t frame_index,
+    std::unique_ptr<gfx::GpuFence> gpu_fence) {
+  TRACE_EVENT1("gpu", __func__, "frame", frame_index);
+  DVLOG(2) << __func__ << ": frame=" << frame_index;
+
+  // Ignore if not processing a frame. This can happen on exiting presentation.
+  if (!webxr_.HaveProcessingFrame())
+    return;
+
+  webxr_.GetProcessingFrame()->gvr_handoff_fence =
+      gl::GLFence::CreateFromGpuFence(*gpu_fence);
+
+  base::TimeTicks now = base::TimeTicks::Now();
+  DrawFrame(frame_index, now);
+}
+
+void GvrSchedulerDelegate::ProcessWebVrFrameFromGMB(
+    int16_t frame_index,
+    const gpu::SyncToken& sync_token) {
+  TRACE_EVENT0("gpu", __func__);
+
+  mailbox_bridge_->CreateGpuFence(
+      sync_token, base::BindOnce(&GvrSchedulerDelegate::OnWebXrTokenSignaled,
+                                 weak_ptr_factory_.GetWeakPtr(), frame_index));
+
+  // Unblock the next animating frame in case it was waiting for this
+  // one to start processing.
+  WebXrTryStartAnimatingFrame(false);
+}
+
+}  // namespace vr
diff --git a/chrome/browser/android/vr/gvr_scheduler_delegate.h b/chrome/browser/android/vr/gvr_scheduler_delegate.h
new file mode 100644
index 0000000..0335f71e
--- /dev/null
+++ b/chrome/browser/android/vr/gvr_scheduler_delegate.h
@@ -0,0 +1,274 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ANDROID_VR_GVR_SCHEDULER_DELEGATE_H_
+#define CHROME_BROWSER_ANDROID_VR_GVR_SCHEDULER_DELEGATE_H_
+
+#include <limits>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "base/cancelable_callback.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "chrome/browser/android/vr/android_vsync_helper.h"
+#include "chrome/browser/android/vr/vr_shell_gl.h"
+#include "chrome/browser/android/vr/web_xr_presentation_state.h"
+#include "chrome/browser/vr/fps_meter.h"
+#include "chrome/browser/vr/scheduler_delegate.h"
+#include "chrome/browser/vr/sliding_average.h"
+#include "device/vr/public/mojom/vr_service.mojom.h"
+#include "mojo/public/cpp/bindings/binding.h"
+#include "ui/gfx/transform.h"
+
+namespace base {
+class SingleThreadTaskRunner;
+}
+
+namespace gfx {
+class GpuFence;
+}
+
+namespace gl {
+class GLFenceAndroidNativeFenceSync;
+class GLFenceEGL;
+class SurfaceTexture;
+}  // namespace gl
+
+namespace gvr {
+class GvrApi;
+}
+
+namespace vr {
+
+class GlBrowserInterface;
+class MailboxToSurfaceBridge;
+class SchedulerUiInterface;
+class ScopedGpuTrace;
+class SlidingTimeDeltaAverage;
+
+// Apart from scheduling, this class implements the XR providers and the
+// transport logic.
+class GvrSchedulerDelegate : public SchedulerDelegate,
+                             device::mojom::XRPresentationProvider,
+                             device::mojom::XRFrameDataProvider {
+ public:
+  GvrSchedulerDelegate(GlBrowserInterface* browser,
+                       SchedulerUiInterface* ui,
+                       gvr::GvrApi* gvr_api,
+                       VrShellGl* graphics,
+                       bool start_in_web_xr_mode,
+                       bool cardboard_gamepad,
+                       size_t sliding_time_size);
+  ~GvrSchedulerDelegate() override;
+
+  WebXrPresentationState* webxr() { return &webxr_; }
+
+ private:
+  // SchedulerDelegate overrides.
+  gfx::Transform GetHeadPose() override;
+  void AddInputSourceState(device::mojom::XRInputSourceStatePtr state) override;
+  void OnPause() override;
+  void OnResume() override;
+  void OnExitPresent() override;
+  void OnTriggerEvent(bool pressed) override;
+  void SetWebXrMode(bool enabled) override;
+  void SetShowingVrDialog(bool showing) override;
+  void SetRenderLoop(SchedulerRenderLoopInterface* render_loop) override;
+  void ConnectPresentingService(
+      device::mojom::VRDisplayInfoPtr display_info,
+      device::mojom::XRRuntimeSessionOptionsPtr options) override;
+
+  void GvrInit();
+  void ScheduleOrCancelWebVrFrameTimeout();
+  bool CanSendWebXrVSync() const;
+  void OnWebXrTimeoutImminent();
+  void OnWebXrFrameTimedOut();
+  void OnVSync(base::TimeTicks frame_time);
+  void DrawFrame(int16_t frame_index, base::TimeTicks current_time);
+  void WebVrSendRenderNotification(bool was_rendered);
+  void UpdatePendingBounds(int16_t frame_index);
+  void SubmitDrawnFrame(bool is_webxr_frame);
+  void DrawFrameSubmitWhenReady(bool is_webxr_frame,
+                                const gfx::Transform& head_pose,
+                                std::unique_ptr<gl::GLFenceEGL> fence);
+  void DrawFrameSubmitNow(bool is_webxr_frame, const gfx::Transform& head_pose);
+
+  // Used for discarding unwanted WebXR frames while UI is showing. We can't
+  // safely cancel frames from processing start until they show up in
+  // OnWebXrFrameAvailable, so only support cancelling them before or after
+  // that lifecycle segment.
+  void WebXrCancelAnimatingFrame();
+  void WebXrCancelProcessingFrameAfterTransfer();
+
+  // Sends a GetFrameData response to the presentation client.
+  void SendVSync();
+  void WebXrPrepareSharedBuffer();
+  void WebXrCreateOrResizeSharedBufferImage(WebXrSharedBuffer* buffer,
+                                            const gfx::Size& size);
+
+  // Checks if we're in a valid state for starting animation of a new frame.
+  // Invalid states include a previous animating frame that's not complete
+  // yet (including deferred processing not having started yet), or timing
+  // heuristics indicating that it should be retried later.
+  bool WebVrCanAnimateFrame(bool is_from_onvsync);
+  // Call this after state changes that could result in WebVrCanAnimateFrame
+  // becoming true.
+  void WebXrTryStartAnimatingFrame(bool is_from_onvsync);
+
+  bool ShouldDrawWebVr();
+
+  // Heuristics to avoid excessive backlogged frames.
+  bool WebVrHasSlowRenderingFrame();
+  bool WebVrHasOverstuffedBuffers();
+
+  base::TimeDelta GetPredictedFrameTime();
+
+  device::mojom::XRInputSourceStatePtr GetGazeInputSourceState();
+
+  device::mojom::XRPresentationTransportOptionsPtr
+  GetWebXrFrameTransportOptions(
+      const device::mojom::XRRuntimeSessionOptionsPtr&);
+  void CreateOrResizeWebXrSurface(const gfx::Size& size);
+  void OnWebXrFrameAvailable();
+  void CreateSurfaceBridge(gl::SurfaceTexture* surface_texture);
+  void OnGpuProcessConnectionReady();
+
+  void ClosePresentationBindings();
+
+  // XRFrameDataProvider
+  void GetFrameData(device::mojom::XRFrameDataProvider::GetFrameDataCallback
+                        callback) override;
+
+  // XRPresentationProvider
+  void SubmitFrameMissing(int16_t frame_index, const gpu::SyncToken&) override;
+  void SubmitFrame(int16_t frame_index,
+                   const gpu::MailboxHolder& mailbox,
+                   base::TimeDelta time_waited) override;
+  void SubmitFrameWithTextureHandle(int16_t frame_index,
+                                    mojo::ScopedHandle texture_handle) override;
+  void SubmitFrameDrawnIntoTexture(int16_t frame_index,
+                                   const gpu::SyncToken&,
+                                   base::TimeDelta time_waited) override;
+  void UpdateLayerBounds(int16_t frame_index,
+                         const gfx::RectF& left_bounds,
+                         const gfx::RectF& right_bounds,
+                         const gfx::Size& source_size) override;
+
+  // Shared logic for SubmitFrame variants, including sanity checks.
+  // Returns true if OK to proceed.
+  bool SubmitFrameCommon(int16_t frame_index, base::TimeDelta time_waited);
+  bool IsSubmitFrameExpected(int16_t frame_index);
+
+  void OnNewWebXrFrame();
+  void OnWebXrTokenSignaled(int16_t frame_index,
+                            std::unique_ptr<gfx::GpuFence> gpu_fence);
+
+  // Transition a frame from animating to processing.
+  void ProcessWebVrFrameFromMailbox(int16_t frame_index,
+                                    const gpu::MailboxHolder& mailbox);
+  void ProcessWebVrFrameFromGMB(int16_t frame_index,
+                                const gpu::SyncToken& sync_token);
+
+  void AddWebVrRenderTimeEstimate(base::TimeTicks fence_complete_time);
+
+  GlBrowserInterface* browser_;
+  gvr::GvrApi* gvr_api_;
+
+  SchedulerUiInterface* ui_ = nullptr;
+  SchedulerRenderLoopInterface* render_loop_ = nullptr;
+
+  // Set from feature flags.
+  const bool webvr_vsync_align_;
+
+  WebXrPresentationState webxr_;
+  bool web_xr_mode_ = false;
+  bool showing_vr_dialog_ = false;
+  bool cardboard_gamepad_ = false;
+  // TODO(acondor): Move trigger data to controller delegate.
+  bool cardboard_trigger_pressed_ = false;
+  bool cardboard_trigger_clicked_ = false;
+
+  // WebXR currently supports multiple render path choices, with runtime
+  // selection based on underlying support being available and feature flags.
+  // The webxr_use_* booleans choose among the implementations. Please don't
+  // check WebXrRenderPath or other feature flags in individual code paths
+  // directly to avoid inconsistent logic.
+  bool webxr_use_gpu_fence_ = false;
+  bool webxr_use_shared_buffer_draw_ = false;
+
+  AndroidVSyncHelper vsync_helper_;
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+
+  base::CancelableOnceClosure webvr_frame_timeout_;
+  base::CancelableOnceClosure webvr_spinner_timeout_;
+
+  gfx::Transform head_pose_;
+
+  mojo::Binding<device::mojom::XRPresentationProvider> presentation_binding_;
+  mojo::Binding<device::mojom::XRFrameDataProvider> frame_data_binding_;
+
+  std::vector<device::mojom::XRInputSourceStatePtr> input_states_;
+  device::mojom::XRPresentationClientPtr submit_client_;
+  uint64_t webvr_frames_received_ = 0;
+  base::queue<uint16_t> pending_frames_;
+
+  base::queue<std::pair<WebXrPresentationState::FrameIndexType, WebVrBounds>>
+      pending_bounds_;
+
+  int webvr_unstuff_ratelimit_frames_ = 0;
+
+  VrShellGl* graphics_;
+
+  // Attributes tracking WebVR rAF/VSync animation loop state. Blink schedules
+  // a callback using the GetFrameData mojo call which is stored in
+  // get_frame_data_callback_. The callback is executed by SendVSync once
+  // WebVrCanAnimateFrame returns true.
+  //
+  // pending_vsync_ is set to true in OnVSync and false in SendVSync. It
+  // throttles animation to no faster than the VSync rate. The pending_time_ is
+  // updated in OnVSync and used as the rAF animation timer in SendVSync.
+  base::TimeTicks pending_time_;
+  bool pending_vsync_ = false;
+  device::mojom::XRFrameDataProvider::GetFrameDataCallback
+      get_frame_data_callback_;
+
+  // A fence used to avoid overstuffed GVR buffers in WebVR mode.
+  std::unique_ptr<gl::GLFenceAndroidNativeFenceSync>
+      webvr_prev_frame_completion_fence_;
+
+  // WebXR defers submitting a frame to GVR by scheduling a closure
+  // for later. If we exit WebVR before it is executed, we need to
+  // cancel it to avoid inconsistent state.
+  base::CancelableOnceCallback<
+      void(bool, const gfx::Transform&, std::unique_ptr<gl::GLFenceEGL>)>
+      webxr_delayed_gvr_submit_;
+
+  std::unique_ptr<MailboxToSurfaceBridge> mailbox_bridge_;
+  std::unique_ptr<ScopedGpuTrace> gpu_trace_;
+
+  FPSMeter vr_ui_fps_meter_;
+  FPSMeter webxr_fps_meter_;
+
+  // Render time is from JS submitFrame to estimated render completion.
+  // This is an estimate when submitting incomplete frames to GVR.
+  // If submitFrame blocks, that means the previous frame wasn't done
+  // rendering yet.
+  SlidingTimeDeltaAverage webvr_render_time_;
+  // JS time is from SendVSync (pose time) to incoming JS submitFrame.
+  SlidingTimeDeltaAverage webvr_js_time_;
+  // JS wait time is spent waiting for the previous frame to complete
+  // rendering, as reported from the Renderer via mojo.
+  SlidingTimeDeltaAverage webvr_js_wait_time_;
+
+  base::WeakPtrFactory<GvrSchedulerDelegate> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(GvrSchedulerDelegate);
+};
+
+}  // namespace vr
+
+#endif  // CHROME_BROWSER_ANDROID_VR_GVR_SCHEDULER_DELEGATE_H_
diff --git a/chrome/browser/android/vr/render_loop_factory.cc b/chrome/browser/android/vr/render_loop_factory.cc
index 9d96194..59529469 100644
--- a/chrome/browser/android/vr/render_loop_factory.cc
+++ b/chrome/browser/android/vr/render_loop_factory.cc
@@ -6,8 +6,10 @@
 
 #include <utility>
 
+#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/android/vr/gvr_controller_delegate.h"
 #include "chrome/browser/android/vr/gvr_keyboard_delegate.h"
+#include "chrome/browser/android/vr/gvr_scheduler_delegate.h"
 #include "chrome/browser/android/vr/vr_gl_thread.h"
 #include "chrome/browser/android/vr/vr_shell_gl.h"
 #include "chrome/browser/vr/render_loop.h"
@@ -27,7 +29,7 @@
     gvr::GvrApi* gvr_api,
     const UiInitialState& ui_initial_state,
     bool reprojected_rendering,
-    bool daydream_support,
+    bool cardboard_gamepad,
     bool pause_content,
     bool low_density,
     base::WaitableEvent* gl_surface_created_event,
@@ -35,7 +37,7 @@
     : gvr_api(gvr_api),
       ui_initial_state(ui_initial_state),
       reprojected_rendering(reprojected_rendering),
-      daydream_support(daydream_support),
+      cardboard_gamepad(cardboard_gamepad),
       pause_content(pause_content),
       low_density(low_density),
       gl_surface_created_event(gl_surface_created_event),
@@ -64,28 +66,27 @@
       params->ui_initial_state);
   auto controller_delegate =
       std::make_unique<GvrControllerDelegate>(params->gvr_api, vr_gl_thread);
-  auto vr_shell_gl = std::make_unique<VrShellGl>(
-      vr_gl_thread, params->gvr_api, params->reprojected_rendering,
-      params->daydream_support, params->ui_initial_state.in_web_vr,
-      params->pause_content, params->low_density, kSlidingAverageSize);
-  vr_gl_thread->task_runner()->PostTask(
+  auto compositor_delegate = std::make_unique<VrShellGl>(
+      vr_gl_thread,
+      base::BindOnce(&UiInterface::OnGlInitialized, base::Unretained(ui.get())),
+      params->gvr_api, params->reprojected_rendering, params->pause_content,
+      params->low_density, kSlidingAverageSize);
+  auto scheduler_delegate = std::make_unique<GvrSchedulerDelegate>(
+      vr_gl_thread, ui.get(), params->gvr_api, compositor_delegate.get(),
+      params->ui_initial_state.in_web_vr, params->cardboard_gamepad,
+      kSlidingAverageSize);
+  compositor_delegate->set_webxr_presentation_state(
+      scheduler_delegate->webxr());
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
-      base::BindOnce(&VrShellGl::Init, vr_shell_gl->GetWeakPtr(),
+      base::BindOnce(&VrShellGl::Init, compositor_delegate->GetWeakPtr(),
                      base::Unretained(params->gl_surface_created_event),
-                     base::Passed(std::move(params->surface_callback))));
-  SchedulerDelegate* scheduler_delegate = vr_shell_gl.get();
+                     base::Passed(std::move(params->surface_callback)),
+                     params->ui_initial_state.in_web_vr));
   auto render_loop = std::make_unique<RenderLoop>(
-      std::move(ui), std::move(vr_shell_gl), scheduler_delegate,
-      std::move(controller_delegate), vr_gl_thread, kSlidingAverageSize);
-  scheduler_delegate->SetDrawWebXrCallback(base::BindRepeating(
-      &RenderLoop::Draw, base::Unretained(render_loop.get()),
-      CompositorDelegate::kWebXrFrame));
-  scheduler_delegate->SetDrawBrowserCallback(base::BindRepeating(
-      &RenderLoop::Draw, base::Unretained(render_loop.get()),
-      CompositorDelegate::kUiFrame));
-  scheduler_delegate->SetWebXrInputCallback(
-      base::BindRepeating(&RenderLoop::ProcessControllerInputForWebXr,
-                          base::Unretained(render_loop.get())));
+      std::move(ui), std::move(scheduler_delegate),
+      std::move(compositor_delegate), std::move(controller_delegate),
+      vr_gl_thread, kSlidingAverageSize);
   return render_loop;
 }
 
diff --git a/chrome/browser/android/vr/render_loop_factory.h b/chrome/browser/android/vr/render_loop_factory.h
index 4c2cdb9..b116eca 100644
--- a/chrome/browser/android/vr/render_loop_factory.h
+++ b/chrome/browser/android/vr/render_loop_factory.h
@@ -32,7 +32,7 @@
     Params(gvr::GvrApi* gvr_api,
            const UiInitialState& ui_initial_state,
            bool reprojected_rendering,
-           bool daydream_support,
+           bool cardboard_gamepad,
            bool pause_content,
            bool low_density,
            base::WaitableEvent* gl_surface_created_event,
@@ -41,7 +41,7 @@
     gvr::GvrApi* gvr_api;
     UiInitialState ui_initial_state;
     bool reprojected_rendering;
-    bool daydream_support;
+    bool cardboard_gamepad;
     bool pause_content;
     bool low_density;
     base::WaitableEvent* gl_surface_created_event;
diff --git a/chrome/browser/android/vr/vr_gl_thread.cc b/chrome/browser/android/vr/vr_gl_thread.cc
index e3828025..f3445b5f 100644
--- a/chrome/browser/android/vr/vr_gl_thread.cc
+++ b/chrome/browser/android/vr/vr_gl_thread.cc
@@ -8,18 +8,20 @@
 
 #include "base/strings/string16.h"
 #include "base/version.h"
+#include "chrome/browser/android/vr/metrics_util_android.h"
 #include "chrome/browser/android/vr/vr_input_connection.h"
 #include "chrome/browser/android/vr/vr_shell.h"
-#include "chrome/browser/android/vr/vr_shell_gl.h"
 #include "chrome/browser/vr/assets_loader.h"
 #include "chrome/browser/vr/browser_ui_interface.h"
 #include "chrome/browser/vr/model/assets.h"
 #include "chrome/browser/vr/model/omnibox_suggestions.h"
 #include "chrome/browser/vr/model/toolbar_state.h"
+#include "chrome/browser/vr/render_loop.h"
 #include "chrome/browser/vr/sounds_manager_audio_delegate.h"
 #include "chrome/browser/vr/ui_factory.h"
 #include "chrome/browser/vr/ui_test_input.h"
 #include "chrome/common/chrome_features.h"
+#include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
 namespace vr {
@@ -43,11 +45,14 @@
           gvr_api_.get(),
           ui_initial_state,
           reprojected_rendering,
-          daydream_support,
+          gvr_api_->GetViewerType() ==
+              gvr::ViewerType::GVR_VIEWER_TYPE_CARDBOARD,
           pause_content,
           low_density,
           gl_surface_created_event,
-          std::move(surface_callback))) {}
+          std::move(surface_callback))) {
+  MetricsUtilAndroid::LogVrViewerType(gvr_api_->GetViewerType());
+}
 
 VrGLThread::~VrGLThread() {
   Stop();
diff --git a/chrome/browser/android/vr/vr_shell_gl.cc b/chrome/browser/android/vr/vr_shell_gl.cc
index 0a95595..af1fc81 100644
--- a/chrome/browser/android/vr/vr_shell_gl.cc
+++ b/chrome/browser/android/vr/vr_shell_gl.cc
@@ -5,57 +5,20 @@
 #include "chrome/browser/android/vr/vr_shell_gl.h"
 
 #include <algorithm>
-#include <limits>
-#include <string>
 
-#include "base/android/android_hardware_buffer_compat.h"
-#include "base/android/jni_android.h"
-#include "base/callback_helpers.h"
-#include "base/containers/queue.h"
-#include "base/metrics/field_trial_params.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/optional.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/task/post_task.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event_argument.h"
 #include "chrome/browser/android/vr/gl_browser_interface.h"
 #include "chrome/browser/android/vr/gvr_util.h"
-#include "chrome/browser/android/vr/mailbox_to_surface_bridge.h"
-#include "chrome/browser/android/vr/metrics_util_android.h"
-#include "chrome/browser/android/vr/scoped_gpu_trace.h"
-#include "chrome/browser/android/vr/vr_controller.h"
-#include "chrome/browser/android/vr/vr_shell.h"
-#include "chrome/browser/vr/assets_loader.h"
-#include "chrome/browser/vr/compositor_ui_interface.h"
-#include "chrome/browser/vr/controller_delegate.h"
 #include "chrome/browser/vr/gl_texture_location.h"
-#include "chrome/browser/vr/metrics/session_metrics_helper.h"
-#include "chrome/browser/vr/model/assets.h"
-#include "chrome/browser/vr/model/camera_model.h"
-#include "chrome/browser/vr/pose_util.h"
-#include "chrome/browser/vr/ui_interface.h"
-#include "chrome/browser/vr/ui_test_input.h"
 #include "chrome/browser/vr/vr_geometry_util.h"
 #include "chrome/browser/vr/vr_gl_util.h"
-#include "chrome/common/chrome_features.h"
-#include "content/public/common/content_features.h"
-#include "device/vr/android/gvr/gvr_delegate.h"
-#include "device/vr/android/gvr/gvr_device.h"
-#include "device/vr/android/gvr/gvr_gamepad_data_provider.h"
-#include "gpu/config/gpu_driver_bug_workaround_type.h"
-#include "gpu/ipc/common/gpu_memory_buffer_impl_android_hardware_buffer.h"
 #include "ui/gfx/geometry/angle_conversions.h"
-#include "ui/gfx/gpu_fence.h"
 #include "ui/gl/android/scoped_java_surface.h"
 #include "ui/gl/android/surface_texture.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
-#include "ui/gl/gl_fence_android_native_fence_sync.h"
 #include "ui/gl/gl_fence_egl.h"
-#include "ui/gl/gl_image_ahardwarebuffer.h"
-#include "ui/gl/gl_share_group.h"
 #include "ui/gl/gl_surface.h"
 #include "ui/gl/init/gl_factory.h"
 
@@ -84,29 +47,6 @@
 // Use 2 for now, we can probably make the buffer even smaller.
 constexpr float kWebVrBrowserUiSizeFactor = 2.f;
 
-// Timeout for checking for the WebVR rendering GL fence. If the timeout is
-// reached, yield to let other tasks execute before rechecking.
-constexpr base::TimeDelta kWebVRFenceCheckTimeout =
-    base::TimeDelta::FromMicroseconds(2000);
-
-// Polling interval for checking for the WebVR rendering GL fence. Used as
-// an alternative to kWebVRFenceCheckTimeout if the GPU workaround is active.
-// The actual interval may be longer due to PostDelayedTask's resolution.
-constexpr base::TimeDelta kWebVRFenceCheckPollInterval =
-    base::TimeDelta::FromMicroseconds(500);
-
-constexpr int kWebVrInitialFrameTimeoutSeconds = 5;
-constexpr int kWebVrSpinnerTimeoutSeconds = 2;
-
-// Heuristic time limit to detect overstuffed GVR buffers for a
-// >60fps capable web app.
-constexpr base::TimeDelta kWebVrSlowAcquireThreshold =
-    base::TimeDelta::FromMilliseconds(2);
-
-// If running too fast, allow dropping frames occasionally to let GVR catch up.
-// Drop at most one frame in MaxDropRate.
-constexpr int kWebVrUnstuffMaxDropRate = 7;
-
 // Taken from the GVR source code, this is the default vignette border fraction.
 constexpr float kContentVignetteBorder = 0.04;
 constexpr float kContentVignetteScale = 1.0 + (kContentVignetteBorder * 2.0);
@@ -182,53 +122,39 @@
 
 }  // namespace
 
+// TODO(acondor): Rename to GvrGraphicsDelegate.
 VrShellGl::VrShellGl(GlBrowserInterface* browser,
+                     TexturesInitializedCallback textures_initialized_callback,
                      gvr::GvrApi* gvr_api,
                      bool reprojected_rendering,
-                     bool daydream_support,
-                     bool start_in_web_vr_mode,
                      bool pause_content,
                      bool low_density,
                      size_t sliding_time_size)
-    : webvr_vsync_align_(
-          base::FeatureList::IsEnabled(features::kWebVrVsyncAlign)),
-      gvr_api_(gvr_api),
+    : gvr_api_(gvr_api),
       low_density_(low_density),
-      web_vr_mode_(start_in_web_vr_mode),
       surfaceless_rendering_(reprojected_rendering),
-      daydream_support_(daydream_support),
       content_paused_(pause_content),
-      task_runner_(base::ThreadTaskRunnerHandle::Get()),
-      presentation_binding_(this),
-      frame_data_binding_(this),
       browser_(browser),
-      vr_ui_fps_meter_(),
-      webvr_fps_meter_(),
-      webvr_js_time_(sliding_time_size),
-      webvr_render_time_(sliding_time_size),
-      webvr_js_wait_time_(sliding_time_size),
+      textures_initialized_callback_(std::move(textures_initialized_callback)),
       webvr_acquire_time_(sliding_time_size),
       webvr_submit_time_(sliding_time_size),
-      weak_ptr_factory_(this) {
-  GvrInit();
-}
+      weak_ptr_factory_(this) {}
 
-VrShellGl::~VrShellGl() {
-  ClosePresentationBindings();
-  webxr_.EndPresentation();
-}
+VrShellGl::~VrShellGl() = default;
 
 void VrShellGl::Init(base::WaitableEvent* gl_surface_created_event,
-                     base::OnceCallback<gfx::AcceleratedWidget()> callback) {
+                     base::OnceCallback<gfx::AcceleratedWidget()> callback,
+                     bool start_in_webxr_mode) {
   if (surfaceless_rendering_) {
-    InitializeGl(nullptr);
+    InitializeGl(nullptr, start_in_webxr_mode);
   } else {
     gl_surface_created_event->Wait();
-    InitializeGl(std::move(callback).Run());
+    InitializeGl(std::move(callback).Run(), start_in_webxr_mode);
   }
 }
 
-void VrShellGl::InitializeGl(gfx::AcceleratedWidget window) {
+void VrShellGl::InitializeGl(gfx::AcceleratedWidget window,
+                             bool start_in_webxr_mode) {
   if (gl::GetGLImplementation() == gl::kGLImplementationNone &&
       !gl::init::InitializeGLOneOff()) {
     LOG(ERROR) << "gl::init::InitializeGLOneOff failed";
@@ -262,12 +188,12 @@
   webvr_texture_id_ = textures[0];
   unsigned int content_texture_id = textures[1];
   unsigned int content_overlay_texture_id = textures[2];
-  unsigned int ui_texture_id = textures[3];
+  unsigned int platform_ui_texture_id = textures[3];
 
   content_surface_texture_ = gl::SurfaceTexture::Create(content_texture_id);
   content_overlay_surface_texture_ =
       gl::SurfaceTexture::Create(content_overlay_texture_id);
-  ui_surface_texture_ = gl::SurfaceTexture::Create(ui_texture_id);
+  ui_surface_texture_ = gl::SurfaceTexture::Create(platform_ui_texture_id);
 
   content_surface_ =
       std::make_unique<gl::ScopedJavaSurface>(content_surface_texture_.get());
@@ -299,396 +225,56 @@
 
   // InitializeRenderer calls GvrDelegateReady which triggers actions such as
   // responding to RequestPresent.
-  InitializeRenderer();
+  InitializeRenderer(start_in_webxr_mode);
 
-  ui_->OnGlInitialized(content_texture_id, kGlTextureLocationExternal,
-                       content_overlay_texture_id, kGlTextureLocationExternal,
-                       ui_texture_id);
+  DCHECK(textures_initialized_callback_);
+  std::move(textures_initialized_callback_)
+      .Run(kGlTextureLocationExternal, content_texture_id,
+           content_overlay_texture_id, platform_ui_texture_id);
 }
 
-void VrShellGl::OnGpuProcessConnectionReady() {
-  DVLOG(1) << __func__;
-  CHECK(mailbox_bridge_);
-
-  webxr_.set_mailbox_bridge_ready(true);
-  // We might have a deferred submit that was waiting for
-  // mailbox_bridge_ready.
-  webxr_.TryDeferredProcessing();
-
-  // See if we can send a VSync.
-  WebVrTryStartAnimatingFrame(false);
-}
-
-void VrShellGl::CreateSurfaceBridge(gl::SurfaceTexture* surface_texture) {
-  DCHECK(!mailbox_bridge_);
-  webxr_.set_mailbox_bridge_ready(false);
-  mailbox_bridge_ = std::make_unique<MailboxToSurfaceBridge>();
-  if (surface_texture) {
-    mailbox_bridge_->CreateSurface(surface_texture);
-  }
-  mailbox_bridge_->CreateAndBindContextProvider(base::BindOnce(
-      &VrShellGl::OnGpuProcessConnectionReady, weak_ptr_factory_.GetWeakPtr()));
-}
-
-void VrShellGl::CreateOrResizeWebVRSurface(const gfx::Size& size) {
+bool VrShellGl::CreateOrResizeWebXrSurface(
+    const gfx::Size& size,
+    base::RepeatingClosure on_webxr_frame_available) {
   DVLOG(2) << __func__ << ": size=" << size.width() << "x" << size.height();
-  if (!webvr_surface_texture_) {
-    if (webxr_use_shared_buffer_draw_) {
-      // We don't have a surface in SharedBuffer mode, just update the size.
-      webvr_surface_size_ = size;
-      return;
-    }
-    DLOG(ERROR) << "No WebVR surface texture available";
-    return;
+  if (webxr_use_shared_buffer_draw_) {
+    DCHECK(!webxr_surface_texture_);
+    // We don't have a surface in SharedBuffer mode, just update the size.
+    webxr_surface_size_ = size;
+    return true;
+  }
+  if (!webxr_surface_texture_) {
+    DCHECK(on_webxr_frame_available)
+        << "A callback must be provided to create the surface texture";
+    webxr_surface_texture_ = gl::SurfaceTexture::Create(webvr_texture_id_);
+    webxr_surface_texture_->SetFrameAvailableCallback(
+        std::move(on_webxr_frame_available));
   }
 
   // ContentPhysicalBoundsChanged is getting called twice with
   // identical sizes? Avoid thrashing the existing context.
-  if (mailbox_bridge_ && (size == webvr_surface_size_)) {
+  if (webxr_->mailbox_bridge_ready() && size == webxr_surface_size_) {
     DVLOG(1) << "Ignore resize, size is unchanged";
-    return;
+    return false;
   }
 
-  if (!size.width() || !size.height()) {
+  if (size.IsEmpty()) {
     // Defer until a new size arrives on a future bounds update.
     DVLOG(1) << "Ignore resize, invalid size";
-    return;
-  }
-
-  webvr_surface_texture_->SetDefaultBufferSize(size.width(), size.height());
-  webvr_surface_size_ = size;
-
-  if (mailbox_bridge_) {
-    mailbox_bridge_->ResizeSurface(size.width(), size.height());
-  } else {
-    CreateSurfaceBridge(webvr_surface_texture_.get());
-  }
-}
-
-void VrShellGl::WebVrCreateOrResizeSharedBufferImage(WebXrSharedBuffer* buffer,
-                                                     const gfx::Size& size) {
-  TRACE_EVENT0("gpu", __func__);
-  // Unbind previous image (if any).
-  if (buffer->remote_image) {
-    DVLOG(2) << ": UnbindSharedBuffer, remote_image=" << buffer->remote_image;
-    mailbox_bridge_->UnbindSharedBuffer(buffer->remote_image,
-                                        buffer->remote_texture);
-    buffer->remote_image = 0;
-  }
-
-  DVLOG(2) << __func__ << ": width=" << size.width()
-           << " height=" << size.height();
-  // Remove reference to previous image (if any).
-  buffer->local_glimage = nullptr;
-
-  const gfx::BufferFormat format = gfx::BufferFormat::RGBA_8888;
-  const gfx::BufferUsage usage = gfx::BufferUsage::SCANOUT;
-
-  gfx::GpuMemoryBufferId kBufferId(webxr_.next_memory_buffer_id++);
-  buffer->gmb = gpu::GpuMemoryBufferImplAndroidHardwareBuffer::Create(
-      kBufferId, size, format, usage,
-      gpu::GpuMemoryBufferImpl::DestructionCallback());
-
-  buffer->remote_image = mailbox_bridge_->BindSharedBufferImage(
-      buffer->gmb.get(), size, format, usage, buffer->remote_texture);
-  DVLOG(2) << ": BindSharedBufferImage, remote_image=" << buffer->remote_image;
-
-  scoped_refptr<gl::GLImageAHardwareBuffer> img(
-      new gl::GLImageAHardwareBuffer(webvr_surface_size_));
-
-  base::android::ScopedHardwareBufferHandle ahb =
-      buffer->gmb->CloneHandle().android_hardware_buffer;
-  bool ret = img->Initialize(ahb.get(), false /* preserved */);
-  if (!ret) {
-    DLOG(WARNING) << __func__ << ": ERROR: failed to initialize image!";
-    // Exiting VR is a bit drastic, but this error shouldn't occur under normal
-    // operation. If it's an issue in practice, look into other recovery
-    // options such as shutting down the WebVR/WebXR presentation session.
-    browser_->ForceExitVr();
-    return;
-  }
-  glBindTexture(GL_TEXTURE_EXTERNAL_OES, buffer->local_texture);
-  img->BindTexImage(GL_TEXTURE_EXTERNAL_OES);
-  buffer->local_glimage = std::move(img);
-}
-
-void VrShellGl::WebVrPrepareSharedBuffer(const gfx::Size& size) {
-  TRACE_EVENT0("gpu", __func__);
-
-  DVLOG(2) << __func__ << ": size=" << size.width() << "x" << size.height();
-  CHECK(webxr_.mailbox_bridge_ready());
-  CHECK(webxr_.HaveAnimatingFrame());
-
-  WebXrSharedBuffer* buffer;
-  if (webxr_.GetAnimatingFrame()->shared_buffer) {
-    buffer = webxr_.GetAnimatingFrame()->shared_buffer.get();
-  } else {
-    // Create buffer and do one-time setup for resources that stay valid after
-    // size changes.
-    webxr_.GetAnimatingFrame()->shared_buffer =
-        std::make_unique<WebXrSharedBuffer>();
-    buffer = webxr_.GetAnimatingFrame()->shared_buffer.get();
-
-    // Remote resources
-    buffer->mailbox_holder = std::make_unique<gpu::MailboxHolder>();
-    buffer->mailbox_holder->texture_target = GL_TEXTURE_2D;
-    buffer->remote_texture =
-        mailbox_bridge_->CreateMailboxTexture(&buffer->mailbox_holder->mailbox);
-
-    // Local resources
-    glGenTextures(1, &buffer->local_texture);
-  }
-
-  if (size != buffer->size) {
-    // Don't need the image for zero copy mode.
-    WebVrCreateOrResizeSharedBufferImage(buffer, size);
-    // We always need a valid sync token, even if not using
-    // the image. The Renderer waits for it before using the
-    // mailbox. Technically we don't need to update it
-    // after resize for zero copy mode, but we do need it
-    // after initial creation.
-    mailbox_bridge_->GenSyncToken(&buffer->mailbox_holder->sync_token);
-
-    // Save the size to avoid expensive reallocation next time.
-    buffer->size = size;
-  }
-}
-
-void VrShellGl::OnWebVRTokenSignaled(int16_t frame_index,
-                                     std::unique_ptr<gfx::GpuFence> gpu_fence) {
-  TRACE_EVENT1("gpu", "VrShellGl::OnWebVRTokenSignaled", "frame", frame_index);
-  DVLOG(2) << __func__ << ": frame=" << frame_index;
-
-  // Ignore if not processing a frame. This can happen on exiting presentation.
-  if (!webxr_.HaveProcessingFrame())
-    return;
-
-  webxr_.GetProcessingFrame()->gvr_handoff_fence =
-      gl::GLFence::CreateFromGpuFence(*gpu_fence);
-
-  base::TimeTicks now = base::TimeTicks::Now();
-  DrawFrame(frame_index, now);
-}
-
-bool VrShellGl::IsSubmitFrameExpected(int16_t frame_index) {
-  // submit_client_ could be null when we exit presentation, if there were
-  // pending SubmitFrame messages queued.  XRSessionClient::OnExitPresent
-  // will clean up state in blink, so it doesn't wait for
-  // OnSubmitFrameTransferred or OnSubmitFrameRendered. Similarly,
-  // the animating frame state is cleared when exiting presentation,
-  // and we should ignore a leftover queued SubmitFrame.
-  if (!submit_client_.get() || !webxr_.HaveAnimatingFrame())
-    return false;
-
-  WebXrFrame* animating_frame = webxr_.GetAnimatingFrame();
-
-  if (animating_frame->index != frame_index) {
-    DVLOG(1) << __func__ << ": wrong frame index, got " << frame_index
-             << ", expected " << animating_frame->index;
-    mojo::ReportBadMessage("SubmitFrame called with wrong frame index");
-    presentation_binding_.Close();
-    frame_data_binding_.Close();
     return false;
   }
 
-  // Frame looks valid.
+  webxr_surface_texture_->SetDefaultBufferSize(size.width(), size.height());
+  webxr_surface_size_ = size;
   return true;
 }
 
-void VrShellGl::SubmitFrameMissing(int16_t frame_index,
-                                   const gpu::SyncToken& sync_token) {
-  TRACE_EVENT1("gpu", "VrShellGl::SubmitWebVRFrame", "frame", frame_index);
-
-  if (!IsSubmitFrameExpected(frame_index))
-    return;
-
-  // Renderer didn't submit a frame. Wait for the sync token to ensure
-  // that any mailbox_bridge_ operations for the next frame happen after
-  // whatever drawing the Renderer may have done before exiting.
-  if (webxr_.mailbox_bridge_ready())
-    mailbox_bridge_->WaitSyncToken(sync_token);
-
-  DVLOG(2) << __func__ << ": recycle unused animating frame";
-  DCHECK(webxr_.HaveAnimatingFrame());
-  webxr_.RecycleUnusedAnimatingFrame();
-}
-
-bool VrShellGl::SubmitFrameCommon(int16_t frame_index,
-                                  base::TimeDelta time_waited) {
-  TRACE_EVENT1("gpu", "VrShellGl::SubmitWebVRFrame", "frame", frame_index);
-  DVLOG(2) << __func__ << ": frame=" << frame_index;
-
-  if (!IsSubmitFrameExpected(frame_index))
-    return false;
-
-  // If we get here, treat as a valid submit.
-  DCHECK(webxr_.HaveAnimatingFrame());
-  WebXrFrame* animating_frame = webxr_.GetAnimatingFrame();
-
-  animating_frame->time_js_submit = base::TimeTicks::Now();
-
-  // The JavaScript wait time is supplied externally and not trustworthy. Clamp
-  // to a reasonable range to avoid math errors.
-  if (time_waited < base::TimeDelta())
-    time_waited = base::TimeDelta();
-  if (time_waited > base::TimeDelta::FromSeconds(1))
-    time_waited = base::TimeDelta::FromSeconds(1);
-  webvr_js_wait_time_.AddSample(time_waited);
-  TRACE_COUNTER1("gpu", "WebVR JS wait (ms)",
-                 webvr_js_wait_time_.GetAverage().InMilliseconds());
-
-  // Always tell the UI that we have a new WebVR frame, so that it can
-  // transition the UI state to "presenting" and cancel any pending timeouts.
-  // That's a prerequisite for ShouldDrawWebVr to become true, which is in turn
-  // required to complete a processing frame.
-  OnNewWebVRFrame();
-
-  if (!ShouldDrawWebVr()) {
-    DVLOG(1) << "Discarding received frame, UI is active";
-    WebVrCancelAnimatingFrame();
-    return false;
-  }
-
-  return true;
-}
-
-void VrShellGl::SubmitFrameDrawnIntoTexture(int16_t frame_index,
-                                            const gpu::SyncToken& sync_token,
-                                            base::TimeDelta time_waited) {
-  if (!SubmitFrameCommon(frame_index, time_waited))
-    return;
-
-  webxr_.ProcessOrDefer(base::BindOnce(&VrShellGl::ProcessWebVrFrameFromGMB,
-                                       weak_ptr_factory_.GetWeakPtr(),
-                                       frame_index, sync_token));
-}
-
-void VrShellGl::ProcessWebVrFrameFromGMB(int16_t frame_index,
-                                         const gpu::SyncToken& sync_token) {
-  TRACE_EVENT0("gpu", __func__);
-
-  mailbox_bridge_->CreateGpuFence(
-      sync_token, base::BindOnce(&VrShellGl::OnWebVRTokenSignaled,
-                                 weak_ptr_factory_.GetWeakPtr(), frame_index));
-
-  // Unblock the next animating frame in case it was waiting for this
-  // one to start processing.
-  WebVrTryStartAnimatingFrame(false);
-}
-
-void VrShellGl::SubmitFrame(int16_t frame_index,
-                            const gpu::MailboxHolder& mailbox,
-                            base::TimeDelta time_waited) {
-  if (!SubmitFrameCommon(frame_index, time_waited))
-    return;
-
-  webxr_.ProcessOrDefer(base::BindOnce(&VrShellGl::ProcessWebVrFrameFromMailbox,
-                                       weak_ptr_factory_.GetWeakPtr(),
-                                       frame_index, mailbox));
-}
-
-void VrShellGl::ProcessWebVrFrameFromMailbox(
-    int16_t frame_index,
-    const gpu::MailboxHolder& mailbox) {
-  TRACE_EVENT0("gpu", __func__);
-
-  // LIFECYCLE: pending_frames_ should be empty when there's no processing
-  // frame. It gets one element here, and then is emptied again before leaving
-  // processing state. Swapping twice on a Surface without calling
-  // updateTexImage in between can lose frames, so don't draw+swap if we
-  // already have a pending frame we haven't consumed yet.
-  DCHECK(pending_frames_.empty());
-
-  // LIFECYCLE: We shouldn't have gotten here unless mailbox_bridge_ is ready.
-  DCHECK(webxr_.mailbox_bridge_ready());
-
-  // Don't allow any state changes for this processing frame until it
-  // arrives on the Surface. See OnWebXrFrameAvailable.
-  DCHECK(webxr_.HaveProcessingFrame());
-  webxr_.GetProcessingFrame()->state_locked = true;
-
-  bool swapped = mailbox_bridge_->CopyMailboxToSurfaceAndSwap(mailbox);
-  DCHECK(swapped);
-  // Tell OnWebXrFrameAvailable to expect a new frame to arrive on
-  // the SurfaceTexture, and save the associated frame index.
-  pending_frames_.emplace(frame_index);
-
-  // LIFECYCLE: we should have a pending frame now.
-  DCHECK_EQ(pending_frames_.size(), 1U);
-
-  // Notify the client that we're done with the mailbox so that the underlying
-  // image is eligible for destruction.
-  submit_client_->OnSubmitFrameTransferred(true);
-
-  // Unblock the next animating frame in case it was waiting for this
-  // one to start processing.
-  WebVrTryStartAnimatingFrame(false);
-}
-
-void VrShellGl::SubmitFrameWithTextureHandle(
-    int16_t frame_index,
-    mojo::ScopedHandle texture_handle) {
-  NOTREACHED();
-}
-
-void VrShellGl::ConnectPresentingService(
-    device::mojom::VRDisplayInfoPtr display_info,
-    device::mojom::XRRuntimeSessionOptionsPtr options) {
-  ClosePresentationBindings();
-
-  device::mojom::XRPresentationProviderPtr presentation_provider;
-  presentation_binding_.Bind(mojo::MakeRequest(&presentation_provider));
-  device::mojom::XRFrameDataProviderPtr frame_data_provider;
-  frame_data_binding_.Bind(mojo::MakeRequest(&frame_data_provider));
-
-  gfx::Size webvr_size(
-      display_info->leftEye->renderWidth + display_info->rightEye->renderWidth,
-      display_info->leftEye->renderHeight);
-  DVLOG(1) << __func__ << ": resize initial to " << webvr_size.width() << "x"
-           << webvr_size.height();
-
-  // Decide which transport mechanism we want to use. This sets
-  // the webxr_use_* options as a side effect.
-  device::mojom::XRPresentationTransportOptionsPtr transport_options =
-      GetWebVrFrameTransportOptions(options);
-
-  if (webxr_use_shared_buffer_draw_) {
-    // Create the mailbox bridge if it doesn't exist yet. We can continue
-    // reusing the existing one if it does, its resources such as mailboxes
-    // are still valid.
-    if (!mailbox_bridge_)
-      CreateSurfaceBridge(nullptr);
-  } else {
-    if (!webvr_surface_texture_) {
-      webvr_surface_texture_ = gl::SurfaceTexture::Create(webvr_texture_id_);
-      webvr_surface_texture_->SetFrameAvailableCallback(base::BindRepeating(
-          &VrShellGl::OnWebXrFrameAvailable, weak_ptr_factory_.GetWeakPtr()));
-    }
-    CreateOrResizeWebVRSurface(webvr_size);
-  }
-
-  ScheduleOrCancelWebVrFrameTimeout();
-
-  auto submit_frame_sink = device::mojom::XRPresentationConnection::New();
-  submit_frame_sink->client_request = mojo::MakeRequest(&submit_client_);
-  submit_frame_sink->provider = presentation_provider.PassInterface();
-  submit_frame_sink->transport_options = std::move(transport_options);
-
-  auto session = device::mojom::XRSession::New();
-  session->data_provider = frame_data_provider.PassInterface();
-  session->submit_frame_sink = std::move(submit_frame_sink);
-  session->display_info = std::move(display_info);
-
-  browser_->SendRequestPresentReply(std::move(session));
-}
-
-void VrShellGl::SetShowingVrDialog(bool showing) {
-  showing_vr_dialog_ = showing;
-  ScheduleOrCancelWebVrFrameTimeout();
+base::TimeDelta VrShellGl::GetAcquireTimeAverage() const {
+  return webvr_acquire_time_.GetAverage();
 }
 
 int VrShellGl::GetContentBufferWidth() {
-  return web_vr_mode_ ? 0 : content_tex_buffer_size_.width();
+  return content_tex_buffer_size_.width();
 }
 
 void VrShellGl::ResumeContentRendering() {
@@ -716,186 +302,25 @@
 }
 
 void VrShellGl::OnWebXrFrameAvailable() {
-  // This is called each time a frame that was drawn on the WebVR Surface
-  // arrives on the SurfaceTexture.
-
-  // This event should only occur in response to a SwapBuffers from
-  // an incoming SubmitFrame call.
-  DCHECK(!pending_frames_.empty()) << ": Frame arrived before SubmitFrame";
-
-  // LIFECYCLE: we should have exactly one pending frame. This is true
-  // even after exiting a session with a not-yet-surfaced frame.
-  DCHECK_EQ(pending_frames_.size(), 1U);
-
-  webvr_surface_texture_->UpdateTexImage();
-  int frame_index = pending_frames_.front();
-  TRACE_EVENT1("gpu", "VrShellGl::OnWebXrFrameAvailable", "frame", frame_index);
-  pending_frames_.pop();
-
+  webxr_surface_texture_->UpdateTexImage();
   // The usual transform matrix we get for the Surface flips Y, so we need to
   // apply it in the copy shader to get the correct image orientation:
   //  {1,  0, 0, 0,
   //   0, -1, 0, 0,
   //   0,  0, 1, 0,
   //   0,  1, 0, 1}
-  webvr_surface_texture_->GetTransformMatrix(
+  webxr_surface_texture_->GetTransformMatrix(
       &webvr_surface_texture_uv_transform_[0]);
-
-  // LIFECYCLE: we should be in processing state.
-  DCHECK(webxr_.HaveProcessingFrame());
-  WebXrFrame* processing_frame = webxr_.GetProcessingFrame();
-
-  // Frame should be locked. Unlock it.
-  DCHECK(processing_frame->state_locked);
-  processing_frame->state_locked = false;
-
-  if (ShouldDrawWebVr() && !processing_frame->recycle_once_unlocked) {
-    DCHECK_EQ(processing_frame->index, frame_index);
-    DrawFrame(frame_index, base::TimeTicks::Now());
-  } else {
-    // Silently consume a frame if we don't want to draw it. This can happen
-    // due to an active exclusive UI such as a permission prompt, or after
-    // exiting a presentation session when a pending frame arrives late.
-    DVLOG(1) << __func__ << ": discarding frame, "
-             << (web_vr_mode_ ? "UI is active" : "not presenting");
-    WebVrCancelProcessingFrameAfterTransfer();
-    // We're no longer in processing state, unblock pending processing frames.
-    webxr_.TryDeferredProcessing();
-  }
 }
 
-void VrShellGl::OnNewWebVRFrame() {
-  ui_->OnWebXrFrameAvailable();
-
-  if (web_vr_mode_) {
-    ++webvr_frames_received_;
-
-    webvr_fps_meter_.AddFrame(base::TimeTicks::Now());
-    TRACE_COUNTER1("gpu", "WebVR FPS", webvr_fps_meter_.GetFPS());
-  }
-
-  ScheduleOrCancelWebVrFrameTimeout();
-}
-
-bool VrShellGl::CanSendWebXrVSync() const {
-  return web_vr_mode_ && !showing_vr_dialog_;
-}
-
-void VrShellGl::ScheduleOrCancelWebVrFrameTimeout() {
-  // TODO(mthiesse): We should also timeout after the initial frame to prevent
-  // bad experiences, but we have to be careful to handle things like splash
-  // screens correctly. For now just ensure we receive a first frame.
-  if (!web_vr_mode_ || webvr_frames_received_ > 0 || showing_vr_dialog_) {
-    if (!webvr_frame_timeout_.IsCancelled())
-      webvr_frame_timeout_.Cancel();
-    if (!webvr_spinner_timeout_.IsCancelled())
-      webvr_spinner_timeout_.Cancel();
-    return;
-  }
-  if (CanSendWebXrVSync() && submit_client_) {
-    webvr_spinner_timeout_.Reset(base::BindOnce(
-        &VrShellGl::OnWebXrTimeoutImminent, base::Unretained(this)));
-    task_runner_->PostDelayedTask(
-        FROM_HERE, webvr_spinner_timeout_.callback(),
-        base::TimeDelta::FromSeconds(kWebVrSpinnerTimeoutSeconds));
-    webvr_frame_timeout_.Reset(base::BindOnce(&VrShellGl::OnWebXrFrameTimedOut,
-                                              base::Unretained(this)));
-    task_runner_->PostDelayedTask(
-        FROM_HERE, webvr_frame_timeout_.callback(),
-        base::TimeDelta::FromSeconds(kWebVrInitialFrameTimeoutSeconds));
-  }
-}
-
-void VrShellGl::OnWebXrFrameTimedOut() {
-  ui_->OnWebXrTimedOut();
-}
-
-void VrShellGl::OnWebXrTimeoutImminent() {
-  ui_->OnWebXrTimeoutImminent();
-}
-
-void VrShellGl::GvrInit() {
-  MetricsUtilAndroid::LogVrViewerType(gvr_api_->GetViewerType());
-
-  cardboard_ =
-      (gvr_api_->GetViewerType() == gvr::ViewerType::GVR_VIEWER_TYPE_CARDBOARD);
-  if (cardboard_ && web_vr_mode_) {
-    browser_->ToggleCardboardGamepad(true);
-  }
-}
-
-device::mojom::XRPresentationTransportOptionsPtr
-VrShellGl::GetWebVrFrameTransportOptions(
-    const device::mojom::XRRuntimeSessionOptionsPtr& options) {
-  DVLOG(1) << __func__;
-
-  MetricsUtilAndroid::XRRenderPath render_path =
-      MetricsUtilAndroid::XRRenderPath::kClientWait;
-  webxr_use_shared_buffer_draw_ = false;
-  webxr_use_gpu_fence_ = false;
-
-  std::string render_path_string = base::GetFieldTrialParamValueByFeature(
-      features::kWebXrRenderPath, features::kWebXrRenderPathParamName);
-  DVLOG(1) << __func__ << ": WebXrRenderPath=" << render_path_string;
-  if (render_path_string == features::kWebXrRenderPathParamValueClientWait) {
-    // Use the baseline kClientWait.
-  } else if (render_path_string ==
-             features::kWebXrRenderPathParamValueGpuFence) {
-    // Use GpuFence if available. If not, fall back to kClientWait.
-    if (gl::GLFence::IsGpuFenceSupported()) {
-      webxr_use_gpu_fence_ = true;
-
-      render_path = MetricsUtilAndroid::XRRenderPath::kGpuFence;
-    }
-  } else {
-    // Default aka features::kWebXrRenderPathParamValueSharedBuffer.
-    // Use that if supported, otherwise fall back to GpuFence or
-    // ClientWait.
-    if (gl::GLFence::IsGpuFenceSupported()) {
-      webxr_use_gpu_fence_ = true;
-      if (base::AndroidHardwareBufferCompat::IsSupportAvailable() &&
-          !options->use_legacy_webvr_render_path) {
-        // Currently, SharedBuffer mode is only supported for WebXR via
-        // XRWebGlDrawingBuffer, WebVR 1.1 doesn't use that.
-        webxr_use_shared_buffer_draw_ = true;
-        render_path = MetricsUtilAndroid::XRRenderPath::kSharedBuffer;
-      } else {
-        render_path = MetricsUtilAndroid::XRRenderPath::kGpuFence;
-      }
-    }
-  }
-  DVLOG(1) << __func__ << ": render_path=" << static_cast<int>(render_path);
-  MetricsUtilAndroid::LogXrRenderPathUsed(render_path);
-
-  device::mojom::XRPresentationTransportOptionsPtr transport_options =
-      device::mojom::XRPresentationTransportOptions::New();
-  // Only set boolean options that we need. Default is false, and we should be
-  // able to safely ignore ones that our implementation doesn't care about.
-  transport_options->wait_for_transfer_notification = true;
-  if (webxr_use_shared_buffer_draw_) {
-    transport_options->transport_method =
-        device::mojom::XRPresentationTransportMethod::DRAW_INTO_TEXTURE_MAILBOX;
-    DCHECK(webxr_use_gpu_fence_);
-    transport_options->wait_for_gpu_fence = true;
-  } else {
-    transport_options->transport_method =
-        device::mojom::XRPresentationTransportMethod::SUBMIT_AS_MAILBOX_HOLDER;
-    transport_options->wait_for_transfer_notification = true;
-    if (webxr_use_gpu_fence_) {
-      transport_options->wait_for_gpu_fence = true;
-    } else {
-      transport_options->wait_for_render_notification = true;
-    }
-  }
-  return transport_options;
-}
-
-void VrShellGl::InitializeRenderer() {
+void VrShellGl::InitializeRenderer(bool start_in_webxr_mode) {
   gvr_api_->InitializeGl();
 
+  std::vector<gvr::BufferSpec> specs;
+
   // Create multisampled and non-multisampled buffers.
-  specs_.push_back(gvr_api_->CreateBufferSpec());
-  specs_.push_back(gvr_api_->CreateBufferSpec());
+  specs.push_back(gvr_api_->CreateBufferSpec());
+  specs.push_back(gvr_api_->CreateBufferSpec());
 
   gvr::Sizei max_size = gvr_api_->GetMaximumEffectiveRenderTargetSize();
   float scale = low_density_ ? kLowDpiDefaultRenderTargetSizeScale
@@ -905,24 +330,24 @@
   render_size_webvr_ui_ = {max_size.width / kWebVrBrowserUiSizeFactor,
                            max_size.height / kWebVrBrowserUiSizeFactor};
 
-  specs_[kMultiSampleBuffer].SetSamples(2);
-  specs_[kMultiSampleBuffer].SetDepthStencilFormat(
+  specs[kMultiSampleBuffer].SetSamples(2);
+  specs[kMultiSampleBuffer].SetDepthStencilFormat(
       GVR_DEPTH_STENCIL_FORMAT_NONE);
-  if (web_vr_mode_) {
-    specs_[kMultiSampleBuffer].SetSize(render_size_webvr_ui_.width(),
-                                       render_size_webvr_ui_.height());
+  if (start_in_webxr_mode) {
+    specs[kMultiSampleBuffer].SetSize(render_size_webvr_ui_.width(),
+                                      render_size_webvr_ui_.height());
   } else {
-    specs_[kMultiSampleBuffer].SetSize(render_size_default_.width(),
-                                       render_size_default_.height());
+    specs[kMultiSampleBuffer].SetSize(render_size_default_.width(),
+                                      render_size_default_.height());
   }
 
-  specs_[kNoMultiSampleBuffer].SetSamples(1);
-  specs_[kNoMultiSampleBuffer].SetDepthStencilFormat(
+  specs[kNoMultiSampleBuffer].SetSamples(1);
+  specs[kNoMultiSampleBuffer].SetDepthStencilFormat(
       GVR_DEPTH_STENCIL_FORMAT_NONE);
-  specs_[kNoMultiSampleBuffer].SetSize(render_size_default_.width(),
-                                       render_size_default_.height());
+  specs[kNoMultiSampleBuffer].SetSize(render_size_default_.width(),
+                                      render_size_default_.height());
 
-  swap_chain_ = gvr_api_->CreateSwapChain(specs_);
+  swap_chain_ = gvr_api_->CreateSwapChain(specs);
 
   UpdateViewports();
 
@@ -965,40 +390,14 @@
   content_underlay_viewport_.SetSourceUv(kContentUv);
 }
 
-bool VrShellGl::ResizeForWebVR(int16_t frame_index) {
-  // Process all pending_bounds_ changes targeted for before this frame, being
-  // careful of wrapping frame indices.
-  static constexpr unsigned max =
-      std::numeric_limits<WebXrPresentationState::FrameIndexType>::max();
-  static_assert(max > WebXrPresentationState::kWebXrFrameCount * 2,
-                "To detect wrapping, kPoseRingBufferSize must be smaller "
-                "than half of next_frame_index_ range.");
-  while (!pending_bounds_.empty()) {
-    uint16_t index = pending_bounds_.front().first;
-    // If index is less than the frame_index it's possible we've wrapped, so we
-    // extend the range and 'un-wrap' to account for this.
-    if (index < frame_index)
-      index += max + 1;
-    // If the pending bounds change is for an upcoming frame within our buffer
-    // size, wait to apply it. Otherwise, apply it immediately. This guarantees
-    // that even if we miss many frames, the queue can't fill up with stale
-    // bounds.
-    if (index > frame_index &&
-        index <= frame_index + WebXrPresentationState::kWebXrFrameCount)
-      break;
+void VrShellGl::SetWebXrBounds(const WebVrBounds& bounds) {
+  webvr_viewport_.left.SetSourceUv(UVFromGfxRect(bounds.left_bounds));
+  webvr_viewport_.right.SetSourceUv(UVFromGfxRect(bounds.right_bounds));
+  current_webvr_frame_bounds_ =
+      bounds;  // If we recreate the viewports, keep these bounds.
+}
 
-    const WebVrBounds& bounds = pending_bounds_.front().second;
-    webvr_viewport_.left.SetSourceUv(UVFromGfxRect(bounds.left_bounds));
-    webvr_viewport_.right.SetSourceUv(UVFromGfxRect(bounds.right_bounds));
-    current_webvr_frame_bounds_ =
-        bounds;  // If we recreate the viewports, keep these bounds.
-    DVLOG(1) << __func__ << ": resize from pending_bounds to "
-             << bounds.source_size.width() << "x"
-             << bounds.source_size.height();
-    CreateOrResizeWebVRSurface(bounds.source_size);
-    pending_bounds_.pop();
-  }
-
+bool VrShellGl::ResizeForWebXr() {
   // Resize the webvr overlay buffer, which may have been used by the content
   // quad buffer previously.
   gvr::Sizei size = swap_chain_.GetBufferSize(kMultiSampleBuffer);
@@ -1010,7 +409,7 @@
   }
 
   size = swap_chain_.GetBufferSize(kNoMultiSampleBuffer);
-  target_size = webvr_surface_size_;
+  target_size = webxr_surface_size_;
   if (!target_size.width()) {
     // Don't try to resize to 0x0 pixels, drop frames until we get a valid
     // size.
@@ -1024,6 +423,24 @@
   return true;
 }
 
+void VrShellGl::ResizeForBrowser() {
+  gvr::Sizei size = swap_chain_.GetBufferSize(kMultiSampleBuffer);
+  gfx::Size target_size = render_size_default_;
+  if (size.width != target_size.width() ||
+      size.height != target_size.height()) {
+    swap_chain_.ResizeBuffer(kMultiSampleBuffer,
+                             {target_size.width(), target_size.height()});
+  }
+  size = swap_chain_.GetBufferSize(kNoMultiSampleBuffer);
+  target_size = {content_tex_buffer_size_.width() * kContentVignetteScale,
+                 content_tex_buffer_size_.height() * kContentVignetteScale};
+  if (size.width != target_size.width() ||
+      size.height != target_size.height()) {
+    swap_chain_.ResizeBuffer(kNoMultiSampleBuffer,
+                             {target_size.width(), target_size.height()});
+  }
+}
+
 void VrShellGl::UpdateEyeInfos(const gfx::Transform& head_pose,
                                const Viewport& viewport,
                                const gfx::Size& render_size,
@@ -1072,108 +489,21 @@
   }
 }
 
-void VrShellGl::DrawFrame(int16_t frame_index, base::TimeTicks current_time) {
-  TRACE_EVENT1("gpu", "VrShellGl::DrawFrame", "frame", frame_index);
-  DCHECK(browser_draw_callback_);
-  DCHECK(web_xr_draw_callback_);
-  if (!webxr_delayed_gvr_submit_.IsCancelled()) {
-    // The last submit to GVR didn't complete, we have an acquired frame. This
-    // is normal when exiting WebVR, in that case we just want to reuse the
-    // frame. It's not supposed to happen during WebVR presentation.
-    DCHECK_LT(frame_index, 0)
-        << "Unexpected WebXR DrawFrame during acquired frame";
-    webxr_delayed_gvr_submit_.Cancel();
-    browser_draw_callback_.Run(current_time);
-    return;
-  }
-
-  if (web_vr_mode_ && !ShouldDrawWebVr()) {
-    // We're in a WebVR session, but don't want to draw WebVR frames, i.e.
-    // because UI has taken over for a permissions prompt. Do state cleanup if
-    // needed.
-    if (webxr_.HaveAnimatingFrame() &&
-        webxr_.GetAnimatingFrame()->deferred_start_processing) {
-      // We have an animating frame. Cancel it if it's waiting to start
-      // processing. If not, keep it to receive the incoming SubmitFrame.
-      DVLOG(1) << __func__ << ": cancel waiting WebVR frame, UI is active";
-      WebVrCancelAnimatingFrame();
-    }
-  }
-
-  // From this point on, the current frame is either a pure UI frame
-  // (frame_index==-1), or a WebVR frame (frame_index >= 0). If it's a WebVR
-  // frame, it must be the current processing frame. Careful, we may still have
-  // a processing frame in UI mode that couldn't be cancelled yet. For example
-  // when showing a permission prompt, ShouldDrawWebVr() may have become false
-  // in the time between SubmitFrame and OnWebXrFrameAvailable or
-  // OnWebVRTokenSignaled. In that case we continue handling the current frame
-  // as a WebVR frame. Also, WebVR frames can still have overlay UI drawn on top
-  // of them.
-  bool is_webxr_frame = frame_index >= 0;
-  DCHECK(!is_webxr_frame || webxr_.HaveProcessingFrame());
-  CHECK(!acquired_frame_);
-
-  // When using async reprojection, we need to know which pose was
-  // used in the WebVR app for drawing this frame and supply it when
-  // submitting. Technically we don't need a pose if not reprojecting,
-  // but keeping it uninitialized seems likely to cause problems down
-  // the road. Copying it is cheaper than fetching a new one.
-  if (is_webxr_frame) {
-    // Copy into render info for overlay UI. WebVR doesn't use this.
-    DCHECK(webxr_.HaveProcessingFrame());
-    WebXrFrame* frame = webxr_.GetProcessingFrame();
-    render_info_.head_pose = frame->head_pose;
-  } else {
-    device::GvrDelegate::GetGvrPoseWithNeckModel(gvr_api_,
-                                                 &render_info_.head_pose);
-  }
-
-  UpdateViewports();
-
-  // If needed, resize the primary buffer for use with WebVR. Resizing
-  // needs to happen before acquiring a frame.
-  if (is_webxr_frame) {
-    if (!ResizeForWebVR(frame_index)) {
-      // We don't have a valid size yet, can't draw.
-      return;
-    }
-  } else {
-    gvr::Sizei size = swap_chain_.GetBufferSize(kMultiSampleBuffer);
-    gfx::Size target_size = render_size_default_;
-    if (size.width != target_size.width() ||
-        size.height != target_size.height()) {
-      swap_chain_.ResizeBuffer(kMultiSampleBuffer,
-                               {target_size.width(), target_size.height()});
-    }
-    size = swap_chain_.GetBufferSize(kNoMultiSampleBuffer);
-    target_size = {content_tex_buffer_size_.width() * kContentVignetteScale,
-                   content_tex_buffer_size_.height() * kContentVignetteScale};
-    if (size.width != target_size.width() ||
-        size.height != target_size.height()) {
-      swap_chain_.ResizeBuffer(kNoMultiSampleBuffer,
-                               {target_size.width(), target_size.height()});
-    }
-  }
-
-  TRACE_EVENT_BEGIN0("gpu", "VrShellGl::AcquireFrame");
+bool VrShellGl::AcquireGvrFrame(int frame_index) {
+  TRACE_EVENT0("gpu", __func__);
+  DCHECK(!acquired_frame_);
   base::TimeTicks acquire_start = base::TimeTicks::Now();
   acquired_frame_ = swap_chain_.AcquireFrame();
   webvr_acquire_time_.AddSample(base::TimeTicks::Now() - acquire_start);
-  TRACE_EVENT_END0("gpu", "VrShellGl::AcquireFrame");
-  if (!acquired_frame_)
-    return;
-
-  if (is_webxr_frame)
-    web_xr_draw_callback_.Run(current_time);
-  else
-    browser_draw_callback_.Run(current_time);
+  return !!acquired_frame_;
 }
 
-RenderInfo VrShellGl::GetRenderInfo(FrameType frame_type) {
+RenderInfo VrShellGl::GetRenderInfo(FrameType frame_type,
+                                    const gfx::Transform& head_pose) {
   gfx::Size render_size =
       frame_type == kWebXrFrame ? render_size_webvr_ui_ : render_size_default_;
-  UpdateEyeInfos(render_info_.head_pose, main_viewport_, render_size,
-                 &render_info_);
+  UpdateEyeInfos(head_pose, main_viewport_, render_size, &render_info_);
+  render_info_.head_pose = head_pose;
   return render_info_;
 }
 
@@ -1188,7 +518,7 @@
   acquired_frame_.BindBuffer(kNoMultiSampleBuffer);
   if (webxr_use_shared_buffer_draw_) {
     WebVrWaitForServerFence();
-    CHECK(webxr_.HaveProcessingFrame());
+    CHECK(webxr_->HaveProcessingFrame());
   }
   // We're redrawing over the entire viewport, but it's generally more
   // efficient on mobile tiling GPUs to clear anyway as a hint that
@@ -1203,7 +533,7 @@
   glDisable(GL_BLEND);
   glDisable(GL_POLYGON_OFFSET_FILL);
 
-  glViewport(0, 0, webvr_surface_size_.width(), webvr_surface_size_.height());
+  glViewport(0, 0, webxr_surface_size_.width(), webxr_surface_size_.height());
 }
 
 void VrShellGl::PrepareBufferForWebXrOverlayElements() {
@@ -1297,7 +627,7 @@
 void VrShellGl::GetWebXrDrawParams(int* texture_id, Transform* uv_transform) {
   if (webxr_use_shared_buffer_draw_) {
     WebXrSharedBuffer* buffer =
-        webxr_.GetProcessingFrame()->shared_buffer.get();
+        webxr_->GetProcessingFrame()->shared_buffer.get();
     CHECK(buffer);
     *texture_id = buffer->local_texture;
     // Use an identity UV transform, the image is already oriented correctly.
@@ -1314,58 +644,11 @@
   }
 }
 
-void VrShellGl::SubmitFrame(FrameType frame_type) {
-  // GVR submit needs the exact head pose that was used for rendering.
-  gfx::Transform submit_head_pose;
-  if (frame_type == kWebXrFrame) {
-    // Don't use render_info_.head_pose here, that may have been
-    // overwritten by OnVSync's controller handling. We need the pose that was
-    // sent to JS.
-    submit_head_pose = webxr_.GetProcessingFrame()->head_pose;
-  } else {
-    submit_head_pose = render_info_.head_pose;
-  }
-  std::unique_ptr<gl::GLFenceEGL> fence = nullptr;
-  if (frame_type == kWebXrFrame && surfaceless_rendering_) {
-    webxr_.GetProcessingFrame()->time_copied = base::TimeTicks::Now();
-    if (webxr_use_gpu_fence_) {
-      // Continue with submit once the previous frame's GL fence signals that
-      // it is done rendering. This avoids blocking in GVR's Submit. Fence is
-      // null for the first frame, in that case the fence wait is skipped.
-      if (webvr_prev_frame_completion_fence_ &&
-          webvr_prev_frame_completion_fence_->HasCompleted()) {
-        // The fence had already signaled. We can get the signaled time from the
-        // fence and submit immediately.
-        AddWebVrRenderTimeEstimate(
-            webvr_prev_frame_completion_fence_->GetStatusChangeTime());
-        webvr_prev_frame_completion_fence_.reset();
-      } else {
-        fence.reset(webvr_prev_frame_completion_fence_.release());
-      }
-    } else {
-      // Continue with submit once a GL fence signals that current drawing
-      // operations have completed.
-      fence = gl::GLFenceEGL::Create();
-    }
-  }
-  if (fence) {
-    webxr_delayed_gvr_submit_.Reset(base::BindRepeating(
-        &VrShellGl::DrawFrameSubmitWhenReady, base::Unretained(this)));
-    task_runner_->PostTask(
-        FROM_HERE,
-        base::BindOnce(webxr_delayed_gvr_submit_.callback(), frame_type,
-                       submit_head_pose, base::Passed(&fence)));
-  } else {
-    // Continue with submit immediately.
-    DrawFrameSubmitNow(frame_type, submit_head_pose);
-  }
-}
-
 void VrShellGl::WebVrWaitForServerFence() {
-  DCHECK(webxr_.HaveProcessingFrame());
+  DCHECK(webxr_->HaveProcessingFrame());
 
   std::unique_ptr<gl::GLFence> gpu_fence(
-      webxr_.GetProcessingFrame()->gvr_handoff_fence.release());
+      webxr_->GetProcessingFrame()->gvr_handoff_fence.release());
 
   DCHECK(gpu_fence);
   // IMPORTANT: wait as late as possible to insert the server wait. Doing so
@@ -1378,260 +661,24 @@
   return;
 }
 
-void VrShellGl::DrawFrameSubmitWhenReady(
-    FrameType frame_type,
-    const gfx::Transform& head_pose,
-    std::unique_ptr<gl::GLFenceEGL> fence) {
-  TRACE_EVENT1("gpu", "VrShellGl::DrawFrameSubmitWhenReady", "frame_type",
-               frame_type);
-  DVLOG(2) << __func__ << ": frame_type=" << static_cast<int>(frame_type);
-  bool use_polling = webxr_.mailbox_bridge_ready() &&
-                     mailbox_bridge_->IsGpuWorkaroundEnabled(
-                         gpu::DONT_USE_EGLCLIENTWAITSYNC_WITH_TIMEOUT);
-  if (fence) {
-    if (!use_polling) {
-      // Use wait-with-timeout to find out as soon as possible when rendering
-      // is complete.
-      fence->ClientWaitWithTimeoutNanos(
-          kWebVRFenceCheckTimeout.InMicroseconds() * 1000);
-    }
-    if (!fence->HasCompleted()) {
-      webxr_delayed_gvr_submit_.Reset(base::BindRepeating(
-          &VrShellGl::DrawFrameSubmitWhenReady, base::Unretained(this)));
-      if (use_polling) {
-        // Poll the fence status at a short interval. This burns some CPU, but
-        // avoids excessive waiting on devices which don't handle timeouts
-        // correctly. Downside is that the completion status is only detected
-        // with a delay of up to one polling interval.
-        task_runner_->PostDelayedTask(
-            FROM_HERE,
-            base::BindOnce(webxr_delayed_gvr_submit_.callback(), frame_type,
-                           head_pose, base::Passed(&fence)),
-            kWebVRFenceCheckPollInterval);
-      } else {
-        task_runner_->PostTask(
-            FROM_HERE,
-            base::BindOnce(webxr_delayed_gvr_submit_.callback(), frame_type,
-                           head_pose, base::Passed(&fence)));
-      }
-      return;
-    }
-  }
-
-  if (fence && webxr_use_gpu_fence_) {
-    // We were waiting for the fence, so the time now is the actual
-    // finish time for the previous frame's rendering.
-    AddWebVrRenderTimeEstimate(base::TimeTicks::Now());
-  }
-
-  webxr_delayed_gvr_submit_.Cancel();
-  DrawFrameSubmitNow(frame_type, head_pose);
-}
-
-void VrShellGl::AddWebVrRenderTimeEstimate(
-    const base::TimeTicks& fence_complete_time) {
-  if (!webxr_.HaveRenderingFrame())
-    return;
-
-  WebXrFrame* rendering_frame = webxr_.GetRenderingFrame();
-  base::TimeTicks prev_js_submit = rendering_frame->time_js_submit;
-  if (webxr_use_gpu_fence_ && !prev_js_submit.is_null() &&
-      !fence_complete_time.is_null()) {
-    webvr_render_time_.AddSample(fence_complete_time - prev_js_submit);
-  }
-}
-
-void VrShellGl::WebVrSendRenderNotification(bool was_rendered) {
-  if (!submit_client_)
-    return;
-
+void VrShellGl::SubmitToGvr(const gfx::Transform& head_pose) {
   TRACE_EVENT0("gpu", __func__);
-  if (webxr_use_gpu_fence_) {
-    // Renderer is waiting for a frame-separating GpuFence.
-
-    if (was_rendered) {
-      // Save a fence for local completion checking.
-      webvr_prev_frame_completion_fence_ =
-          gl::GLFenceAndroidNativeFenceSync::CreateForGpuFence();
-    }
-
-    // Create a local GpuFence and pass it to the Renderer via IPC.
-    std::unique_ptr<gl::GLFence> gl_fence = gl::GLFence::CreateForGpuFence();
-    std::unique_ptr<gfx::GpuFence> gpu_fence = gl_fence->GetGpuFence();
-    submit_client_->OnSubmitFrameGpuFence(
-        gfx::CloneHandleForIPC(gpu_fence->GetGpuFenceHandle()));
-  } else {
-    // Renderer is waiting for the previous frame to render, unblock it now.
-    submit_client_->OnSubmitFrameRendered();
-  }
-}
-
-void VrShellGl::DrawFrameSubmitNow(FrameType frame_type,
-                                   const gfx::Transform& head_pose) {
-  TRACE_EVENT1("gpu", "VrShellGl::DrawFrameSubmitNow", "frame_type",
-               frame_type);
-
   gvr::Mat4f mat;
   TransformToGvrMat(head_pose, &mat);
-  {
-    std::unique_ptr<ScopedGpuTrace> browser_gpu_trace;
-    if (gl::GLFence::IsGpuFenceSupported() && frame_type == kUiFrame) {
-      // This fence instance is created for the tracing side effect. Insert it
-      // before GVR submit. Then replace the previous instance below after GVR
-      // submit completes, at which point the previous fence (if any) should be
-      // complete. Doing this in two steps avoids a race condition - a fence
-      // that was inserted after Submit may not be complete yet when the next
-      // Submit finishes.
-      browser_gpu_trace = std::make_unique<ScopedGpuTrace>(
-          "gpu", "VrShellGl::PostSubmitDrawOnGpu");
-    }
-
-    TRACE_EVENT0("gpu", "VrShellGl::SubmitToGvr");
-    base::TimeTicks submit_start = base::TimeTicks::Now();
-    acquired_frame_.Submit(viewport_list_, mat);
-    base::TimeTicks submit_done = base::TimeTicks::Now();
-    webvr_submit_time_.AddSample(submit_done - submit_start);
-    CHECK(!acquired_frame_);
-
-    if (browser_gpu_trace) {
-      // Replacing the previous instance will record the trace result for
-      // the previous instance.
-      DCHECK(!gpu_trace_ || gpu_trace_->fence()->HasCompleted());
-      gpu_trace_ = std::move(browser_gpu_trace);
-    }
-  }
-
+  base::TimeTicks submit_start = base::TimeTicks::Now();
+  acquired_frame_.Submit(viewport_list_, mat);
+  base::TimeTicks submit_done = base::TimeTicks::Now();
+  webvr_submit_time_.AddSample(submit_done - submit_start);
+  CHECK(!acquired_frame_);
   // No need to swap buffers for surfaceless rendering.
   if (!surfaceless_rendering_) {
     // TODO(mthiesse): Support asynchronous SwapBuffers.
     SwapSurfaceBuffers();
   }
-
-  // At this point, ShouldDrawWebVr and webvr_frame_processing_ may have become
-  // false for a WebVR frame. Ignore the ShouldDrawWebVr status to ensure we
-  // send render notifications while paused for exclusive UI mode. Skip the
-  // steps if we lost the processing state, that means presentation has ended.
-  if (frame_type == kWebXrFrame && webxr_.HaveProcessingFrame()) {
-    // Report rendering completion to the Renderer so that it's permitted to
-    // submit a fresh frame. We could do this earlier, as soon as the frame
-    // got pulled off the transfer surface, but that results in overstuffed
-    // buffers.
-    WebVrSendRenderNotification(true);
-
-    base::TimeTicks pose_time = webxr_.GetProcessingFrame()->time_pose;
-    base::TimeTicks js_submit_time =
-        webxr_.GetProcessingFrame()->time_js_submit;
-    webvr_js_time_.AddSample(js_submit_time - pose_time);
-    if (!webxr_use_gpu_fence_) {
-      // Estimate render time from wallclock time, we waited for the pre-submit
-      // render fence to signal.
-      base::TimeTicks now = base::TimeTicks::Now();
-      webvr_render_time_.AddSample(now - js_submit_time);
-    }
-
-    if (webxr_.HaveRenderingFrame()) {
-      webxr_.EndFrameRendering();
-    }
-    webxr_.TransitionFrameProcessingToRendering();
-  }
-
-  // After saving the timestamp, fps will be available via GetFPS().
-  // TODO(vollick): enable rendering of this framerate in a HUD.
-  vr_ui_fps_meter_.AddFrame(base::TimeTicks::Now());
-  DVLOG(1) << "fps: " << vr_ui_fps_meter_.GetFPS();
-  TRACE_COUNTER1("gpu", "VR UI FPS", vr_ui_fps_meter_.GetFPS());
-
-  if (frame_type == kWebXrFrame) {
-    // We finished processing a frame, this may make pending WebVR
-    // work eligible to proceed.
-    webxr_.TryDeferredProcessing();
-  }
-
-  if (ShouldDrawWebVr()) {
-    // See if we can animate a new WebVR frame. Intentionally using
-    // ShouldDrawWebVr here since we also want to run this check after
-    // UI frames, i.e. transitioning from transient UI to WebVR.
-    WebVrTryStartAnimatingFrame(false);
-  }
-}
-
-bool VrShellGl::ShouldDrawWebVr() {
-  return web_vr_mode_ && !showing_vr_dialog_ && webvr_frames_received_ > 0;
-}
-
-void VrShellGl::OnPause() {
-  vsync_helper_.CancelVSyncRequest();
-  gvr_api_->PauseTracking();
-  webvr_frame_timeout_.Cancel();
-  webvr_spinner_timeout_.Cancel();
 }
 
 void VrShellGl::OnResume() {
-  gvr_api_->RefreshViewerProfile();
   viewports_need_updating_ = true;
-  gvr_api_->ResumeTracking();
-  vsync_helper_.CancelVSyncRequest();
-  OnVSync(base::TimeTicks::Now());
-  if (web_vr_mode_)
-    ScheduleOrCancelWebVrFrameTimeout();
-}
-
-void VrShellGl::SetUiInterface(CompositorUiInterface* ui) {
-  ui_ = ui;
-}
-
-void VrShellGl::SetDrawWebXrCallback(DrawCallback callback) {
-  web_xr_draw_callback_ = std::move(callback);
-}
-
-void VrShellGl::SetDrawBrowserCallback(DrawCallback callback) {
-  browser_draw_callback_ = std::move(callback);
-}
-
-void VrShellGl::SetWebXrInputCallback(WebXrInputCallback callback) {
-  webxr_input_callback_ = std::move(callback);
-}
-
-void VrShellGl::OnExitPresent() {
-  webvr_frame_timeout_.Cancel();
-  webvr_spinner_timeout_.Cancel();
-}
-
-void VrShellGl::SetWebXrMode(bool enabled) {
-  web_vr_mode_ = enabled;
-
-  if (web_vr_mode_ && submit_client_) {
-    ScheduleOrCancelWebVrFrameTimeout();
-  } else {
-    webvr_frame_timeout_.Cancel();
-    webvr_frames_received_ = 0;
-  }
-
-  if (cardboard_)
-    browser_->ToggleCardboardGamepad(enabled);
-
-  if (!web_vr_mode_) {
-    // Closing presentation bindings ensures we won't get any mojo calls such
-    // as SubmitFrame from this session anymore. This makes it legal to cancel
-    // an outstanding animating frame (if any).
-    ClosePresentationBindings();
-
-    // Ensure that re-entering VR later gets a fresh start by clearing out the
-    // current session's animating frame state.
-    webxr_.EndPresentation();
-    // Do not clear pending_frames_ here, need to track Surface state across
-    // sessions.
-    if (!pending_frames_.empty()) {
-      // There's a leftover pending frame. Need to wait for that to arrive on
-      // the Surface, and that will clear webvr_frame_processing_ once it's
-      // done. Until then, webvr_frame_processing_ will stay true to block a
-      // new session from starting processing.
-      // TODO(acondor): Move these DCHECKs into a unittest.
-      DCHECK(webxr_.HaveProcessingFrame());
-      DCHECK(webxr_.GetProcessingFrame()->state_locked);
-      DCHECK(webxr_.GetProcessingFrame()->recycle_once_unlocked);
-    }
-  }
 }
 
 void VrShellGl::BufferBoundsChanged(const gfx::Size& content_buffer_size,
@@ -1643,409 +690,14 @@
   return weak_ptr_factory_.GetWeakPtr();
 }
 
-bool VrShellGl::WebVrCanAnimateFrame(bool is_from_onvsync) {
-  // This check needs to be first to ensure that we start the WebVR
-  // first-frame timeout on presentation start.
-  bool can_send_webvr_vsync = CanSendWebXrVSync();
-  if (!webxr_.last_ui_allows_sending_vsync && can_send_webvr_vsync) {
-    // We will start sending vsync to the WebVR page, so schedule the incoming
-    // frame timeout.
-    ScheduleOrCancelWebVrFrameTimeout();
-  }
-  webxr_.last_ui_allows_sending_vsync = can_send_webvr_vsync;
-  if (!can_send_webvr_vsync) {
-    DVLOG(2) << __func__ << ": waiting for can_send_webvr_vsync";
-    return false;
-  }
-
-  // If we want to send vsync-aligned frames, we only allow animation to start
-  // when called from OnVSync, so if we're called from somewhere else we can
-  // skip all the other checks. Legacy Cardboard mode (not surfaceless) doesn't
-  // use vsync aligned frames, and there's a flag to disable it for surfaceless
-  // mode.
-  if (surfaceless_rendering_ && webvr_vsync_align_ && !is_from_onvsync) {
-    DVLOG(3) << __func__ << ": waiting for onvsync (vsync aligned)";
-    return false;
-  }
-
-  if (!web_vr_mode_) {
-    DVLOG(2) << __func__ << ": no active session, ignore";
-    return false;
-  }
-
-  if (get_frame_data_callback_.is_null()) {
-    DVLOG(2) << __func__ << ": waiting for get_frame_data_callback_";
-    return false;
-  }
-
-  if (!pending_vsync_) {
-    DVLOG(2) << __func__ << ": waiting for pending_vsync (too fast)";
-    return false;
-  }
-
-  // If we already have a JS frame that's animating, don't send another one.
-  // This check depends on the Renderer calling either SubmitFrame or
-  // SubmitFrameMissing for each animated frame.
-  if (webxr_.HaveAnimatingFrame()) {
-    DVLOG(2) << __func__
-             << ": waiting for current animating frame to start processing";
-    return false;
-  }
-
-  if (webxr_use_shared_buffer_draw_ && !webxr_.mailbox_bridge_ready()) {
-    // For exclusive scheduling, we need the mailbox bridge before the first
-    // frame so that we can place a sync token. For shared buffer draw, we
-    // need it to set up buffers before starting client rendering.
-    DVLOG(2) << __func__ << ": waiting for mailbox_bridge_ready";
-    return false;
-  }
-
-  if (webxr_use_shared_buffer_draw_ &&
-      !(webvr_surface_size_.width() && webvr_surface_size_.height())) {
-    // For shared buffer draw, wait for a nonzero size before creating
-    // the shared buffer for use as a drawing destination.
-    DVLOG(2) << __func__ << ": waiting for nonzero size";
-    return false;
-  }
-
-  // Keep the heuristic tests last since they update a trace counter, they
-  // should only be run if the remaining criteria are already met. There's no
-  // corresponding WebVrTryStartAnimating call for this, the retries happen
-  // via OnVSync.
-  bool still_rendering = WebVrHasSlowRenderingFrame();
-  bool overstuffed = WebVrHasOverstuffedBuffers();
-  TRACE_COUNTER2("gpu", "WebVR frame skip", "still rendering", still_rendering,
-                 "overstuffed", overstuffed);
-  if (still_rendering || overstuffed) {
-    DVLOG(2) << __func__ << ": waiting for backlogged frames,"
-             << " still_rendering=" << still_rendering
-             << " overstuffed=" << overstuffed;
-    return false;
-  }
-
-  DVLOG(2) << __func__ << ": ready to animate frame";
-  return true;
+bool VrShellGl::DoesSurfacelessRendering() const {
+  return surfaceless_rendering_;
 }
 
-void VrShellGl::WebVrTryStartAnimatingFrame(bool is_from_onvsync) {
-  if (WebVrCanAnimateFrame(is_from_onvsync)) {
-    SendVSync();
-  }
-}
-
-void VrShellGl::WebVrCancelAnimatingFrame() {
-  DVLOG(2) << __func__;
-  webxr_.RecycleUnusedAnimatingFrame();
-  if (submit_client_) {
-    // We haven't written to the Surface yet. Mark as transferred and rendered.
-    submit_client_->OnSubmitFrameTransferred(true);
-    WebVrSendRenderNotification(false);
-  }
-}
-
-void VrShellGl::WebVrCancelProcessingFrameAfterTransfer() {
-  DVLOG(2) << __func__;
-  DCHECK(webxr_.HaveProcessingFrame());
-  bool did_recycle = webxr_.RecycleProcessingFrameIfPossible();
-  DCHECK(did_recycle);
-  if (submit_client_) {
-    // We've already sent the transferred notification.
-    // Just report rendering complete.
-    WebVrSendRenderNotification(false);
-  }
-}
-
-void VrShellGl::OnVSync(base::TimeTicks frame_time) {
-  TRACE_EVENT0("gpu", "VrShellGl::OnVSync");
-  // Create a synthetic VSync trace event for the reported last-VSync time. Use
-  // this specific type since it appears to be the only one which supports
-  // supplying a timestamp different from the current time, which is useful
-  // since we seem to be >1ms behind the vsync time when we receive this call.
-  //
-  // See third_party/catapult/tracing/tracing/extras/vsync/vsync_auditor.html
-  std::unique_ptr<base::trace_event::TracedValue> args =
-      std::make_unique<base::trace_event::TracedValue>();
-  args->SetDouble(
-      "frame_time_us",
-      static_cast<double>((frame_time - base::TimeTicks()).InMicroseconds()));
-  TRACE_EVENT_INSTANT1("viz", "DisplayScheduler::BeginFrame",
-                       TRACE_EVENT_SCOPE_THREAD, "args", std::move(args));
-
-  vsync_helper_.RequestVSync(
-      base::BindRepeating(&VrShellGl::OnVSync, base::Unretained(this)));
-
-  pending_vsync_ = true;
-  pending_time_ = frame_time;
-  WebVrTryStartAnimatingFrame(true);
-
-  if (ShouldDrawWebVr()) {
-    // When drawing WebVR, controller input doesn't need to be synchronized with
-    // rendering as WebVR uses the gamepad api. To ensure we always handle input
-    // like app button presses, process the controller here.
-    device::GvrDelegate::GetGvrPoseWithNeckModel(gvr_api_,
-                                                 &render_info_.head_pose);
-    DCHECK(webxr_input_callback_);
-    webxr_input_callback_.Run(render_info_.head_pose, frame_time);
-  } else {
-    DrawFrame(-1, frame_time);
-  }
-}
-
-void VrShellGl::AddInputSourceState(
-    device::mojom::XRInputSourceStatePtr state) {
-  input_states_.push_back(std::move(state));
-}
-
-void VrShellGl::GetFrameData(
-    device::mojom::XRFrameDataProvider::GetFrameDataCallback callback) {
-  TRACE_EVENT0("gpu", __func__);
-  if (!get_frame_data_callback_.is_null()) {
-    DLOG(WARNING) << ": previous get_frame_data_callback_ was not used yet";
-    mojo::ReportBadMessage(
-        "Requested VSync before waiting for response to previous request.");
-    ClosePresentationBindings();
-    return;
-  }
-
-  get_frame_data_callback_ = std::move(callback);
-  WebVrTryStartAnimatingFrame(false);
-}
-
-namespace {
-bool ValidateRect(const gfx::RectF& bounds) {
-  // Bounds should be between 0 and 1, with positive width/height.
-  // We simply clamp to [0,1], but still validate that the bounds are not NAN.
-  return !std::isnan(bounds.width()) && !std::isnan(bounds.height()) &&
-         !std::isnan(bounds.x()) && !std::isnan(bounds.y());
-}
-
-}  // namespace
-
-void VrShellGl::UpdateLayerBounds(int16_t frame_index,
-                                  const gfx::RectF& left_bounds,
-                                  const gfx::RectF& right_bounds,
-                                  const gfx::Size& source_size) {
-  if (!ValidateRect(left_bounds) || !ValidateRect(right_bounds)) {
-    mojo::ReportBadMessage("UpdateLayerBounds called with invalid bounds");
-    presentation_binding_.Close();
-    frame_data_binding_.Close();
-    return;
-  }
-
-  if (frame_index >= 0 && !webxr_.HaveAnimatingFrame()) {
-    // The optional UpdateLayerBounds call must happen before SubmitFrame.
-    mojo::ReportBadMessage("UpdateLayerBounds called without animating frame");
-    presentation_binding_.Close();
-    frame_data_binding_.Close();
-    return;
-  }
-
-  if (frame_index < 0) {
-    current_webvr_frame_bounds_ =
-        WebVrBounds(left_bounds, right_bounds, source_size);
-    webvr_viewport_.left.SetSourceUv(UVFromGfxRect(ClampRect(left_bounds)));
-    webvr_viewport_.right.SetSourceUv(UVFromGfxRect(ClampRect(right_bounds)));
-    CreateOrResizeWebVRSurface(source_size);
-
-    // clear all pending bounds
-    pending_bounds_ = base::queue<
-        std::pair<WebXrPresentationState::FrameIndexType, WebVrBounds>>();
-  } else {
-    pending_bounds_.emplace(
-        frame_index, WebVrBounds(left_bounds, right_bounds, source_size));
-  }
-}
-
-base::TimeDelta VrShellGl::GetPredictedFrameTime() {
-  base::TimeDelta frame_interval = vsync_helper_.DisplayVSyncInterval();
-  // If we aim to submit at vsync, that frame will start scanning out
-  // one vsync later. Add a half frame to split the difference between
-  // left and right eye.
-  base::TimeDelta js_time = webvr_js_time_.GetAverageOrDefault(frame_interval);
-  base::TimeDelta render_time =
-      webvr_render_time_.GetAverageOrDefault(frame_interval);
-  base::TimeDelta overhead_time = frame_interval * 3 / 2;
-  base::TimeDelta expected_frame_time = js_time + render_time + overhead_time;
-  TRACE_COUNTER2("gpu", "WebVR frame time (ms)", "javascript",
-                 js_time.InMilliseconds(), "rendering",
-                 render_time.InMilliseconds());
+void VrShellGl::RecordFrameTimeTraces() const {
   TRACE_COUNTER2("gpu", "GVR frame time (ms)", "acquire",
                  webvr_acquire_time_.GetAverage().InMilliseconds(), "submit",
                  webvr_submit_time_.GetAverage().InMilliseconds());
-  TRACE_COUNTER1("gpu", "WebVR pose prediction (ms)",
-                 expected_frame_time.InMilliseconds());
-  return expected_frame_time;
-}
-
-bool VrShellGl::WebVrHasSlowRenderingFrame() {
-  // Disable heuristic for traditional render path where we submit completed
-  // frames.
-  if (!webxr_use_gpu_fence_)
-    return false;
-
-  base::TimeDelta frame_interval = vsync_helper_.DisplayVSyncInterval();
-  base::TimeDelta mean_render_time =
-      webvr_render_time_.GetAverageOrDefault(frame_interval);
-
-  // Check estimated completion of the rendering frame, that's two frames back.
-  // It might not exist, i.e. for the first couple of frames when starting
-  // presentation, or if the app failed to submit a frame in its rAF loop.
-  // Also, AddWebVrRenderTimeEstimate zeroes the submit time once the rendered
-  // frame is complete. In all of those cases, we don't need to wait for render
-  // completion.
-  if (webxr_.HaveRenderingFrame() && webxr_.HaveProcessingFrame()) {
-    base::TimeTicks prev_js_submit = webxr_.GetRenderingFrame()->time_js_submit;
-    base::TimeDelta mean_js_time = webvr_js_time_.GetAverage();
-    base::TimeDelta mean_js_wait = webvr_js_wait_time_.GetAverage();
-    base::TimeDelta prev_render_time_left =
-        mean_render_time - (base::TimeTicks::Now() - prev_js_submit);
-    // We don't want the next animating frame to arrive too early. Estimated
-    // time-to-submit is the net JavaScript time, not counting time spent
-    // waiting. JS is blocked from submitting if the rendering frame (two
-    // frames back) is not complete yet, so there's no point submitting earlier
-    // than that. There's also a processing frame (one frame back), so we have
-    // at least a VSync interval spare time after that. Aim for submitting 3/4
-    // of a VSync interval after the rendering frame completes to keep a bit of
-    // safety margin. We're currently scheduling at VSync granularity, so skip
-    // this VSync if we'd arrive a full VSync interval early.
-    if (mean_js_time - mean_js_wait + frame_interval <
-        prev_render_time_left + frame_interval * 3 / 4) {
-      return true;
-    }
-  }
-  return false;
-}
-
-bool VrShellGl::WebVrHasOverstuffedBuffers() {
-  base::TimeDelta frame_interval = vsync_helper_.DisplayVSyncInterval();
-  base::TimeDelta mean_render_time =
-      webvr_render_time_.GetAverageOrDefault(frame_interval);
-
-  if (webvr_unstuff_ratelimit_frames_ > 0) {
-    --webvr_unstuff_ratelimit_frames_;
-  } else if (webvr_acquire_time_.GetAverage() >= kWebVrSlowAcquireThreshold &&
-             mean_render_time < frame_interval) {
-    // This is a fast app with average render time less than the frame
-    // interval. If GVR acquire is slow, that means its internal swap chain was
-    // already full when we tried to give it the next frame. We can skip a
-    // SendVSync to drain one frame from the GVR queue. That should reduce
-    // latency by one frame.
-    webvr_unstuff_ratelimit_frames_ = kWebVrUnstuffMaxDropRate;
-    return true;
-  }
-  return false;
-}
-
-void VrShellGl::SendVSync() {
-  DCHECK(!get_frame_data_callback_.is_null());
-  DCHECK(pending_vsync_);
-
-  // Mark the VSync as consumed.
-  pending_vsync_ = false;
-
-  device::mojom::XRFrameDataPtr frame_data = device::mojom::XRFrameData::New();
-
-  // The internal frame index is an uint8_t that generates a wrapping 0.255
-  // frame number. We store it in an int16_t to match mojo APIs, and to avoid
-  // it appearing as a char in debug logs.
-  frame_data->frame_id = webxr_.StartFrameAnimating();
-  DVLOG(2) << __func__ << " frame=" << frame_data->frame_id;
-
-  if (webxr_use_shared_buffer_draw_) {
-    WebVrPrepareSharedBuffer(webvr_surface_size_);
-  }
-
-  if (webxr_use_shared_buffer_draw_) {
-    CHECK(webxr_.mailbox_bridge_ready());
-    CHECK(webxr_.HaveAnimatingFrame());
-    WebXrSharedBuffer* buffer = webxr_.GetAnimatingFrame()->shared_buffer.get();
-    DCHECK(buffer);
-    frame_data->buffer_holder = *buffer->mailbox_holder;
-  }
-
-  int64_t prediction_nanos = GetPredictedFrameTime().InMicroseconds() * 1000;
-
-  gfx::Transform head_mat;
-  TRACE_EVENT_BEGIN0("gpu", "VrShellGl::GetVRPosePtrWithNeckModel");
-  device::mojom::VRPosePtr pose =
-      device::GvrDelegate::GetVRPosePtrWithNeckModel(gvr_api_, &head_mat,
-                                                     prediction_nanos);
-  TRACE_EVENT_END0("gpu", "VrShellGl::GetVRPosePtrWithNeckModel");
-
-  // Process all events. Check for ones we wish to react to.
-  gvr::Event last_event;
-  while (gvr_api_->PollEvent(&last_event)) {
-    pose->pose_reset |= last_event.type == GVR_EVENT_RECENTER;
-  }
-
-  TRACE_EVENT0("gpu", "VrShellGl::XRInput");
-  if (cardboard_) {
-    std::vector<device::mojom::XRInputSourceStatePtr> input_states;
-    input_states.push_back(GetGazeInputSourceState());
-    pose->input_state = std::move(input_states);
-  } else {
-    pose->input_state = std::move(input_states_);
-  }
-
-  frame_data->pose = std::move(pose);
-
-  WebXrFrame* frame = webxr_.GetAnimatingFrame();
-  frame->head_pose = head_mat;
-  frame->time_pose = base::TimeTicks::Now();
-
-  frame_data->time_delta = pending_time_ - base::TimeTicks();
-
-  TRACE_EVENT0("gpu", "VrShellGl::RunCallback");
-  base::ResetAndReturn(&get_frame_data_callback_).Run(std::move(frame_data));
-}
-
-void VrShellGl::ClosePresentationBindings() {
-  webvr_frame_timeout_.Cancel();
-  submit_client_.reset();
-  if (!get_frame_data_callback_.is_null()) {
-    // When this Presentation provider is going away we have to respond to
-    // pending callbacks, so instead of providing a VSync, tell the requester
-    // the connection is closing.
-    base::ResetAndReturn(&get_frame_data_callback_).Run(nullptr);
-  }
-  presentation_binding_.Close();
-  frame_data_binding_.Close();
-}
-
-device::mojom::XRInputSourceStatePtr VrShellGl::GetGazeInputSourceState() {
-  device::mojom::XRInputSourceStatePtr state =
-      device::mojom::XRInputSourceState::New();
-
-  // Only one gaze input source to worry about, so it can have a static id.
-  state->source_id = 1;
-
-  // Report any trigger state changes made since the last call and reset the
-  // state here.
-  state->primary_input_pressed = cardboard_trigger_pressed_;
-  state->primary_input_clicked = cardboard_trigger_clicked_;
-  cardboard_trigger_clicked_ = false;
-
-  state->description = device::mojom::XRInputSourceDescription::New();
-
-  // It's a gaze-cursor-based device.
-  state->description->target_ray_mode = device::mojom::XRTargetRayMode::GAZING;
-  state->description->emulated_position = true;
-
-  // No implicit handedness
-  state->description->handedness = device::mojom::XRHandedness::NONE;
-
-  // Pointer and grip transforms are omitted since this is a gaze-based source.
-
-  return state;
-}
-
-void VrShellGl::OnTriggerEvent(bool pressed) {
-  if (pressed) {
-    cardboard_trigger_pressed_ = true;
-  } else if (cardboard_trigger_pressed_) {
-    cardboard_trigger_pressed_ = false;
-    cardboard_trigger_clicked_ = true;
-  }
 }
 
 }  // namespace vr
diff --git a/chrome/browser/android/vr/vr_shell_gl.h b/chrome/browser/android/vr/vr_shell_gl.h
index a5558ea..e6f92b2 100644
--- a/chrome/browser/android/vr/vr_shell_gl.h
+++ b/chrome/browser/android/vr/vr_shell_gl.h
@@ -13,24 +13,15 @@
 #include "base/cancelable_callback.h"
 #include "base/containers/queue.h"
 #include "base/macros.h"
-#include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
-#include "base/single_thread_task_runner.h"
-#include "chrome/browser/android/vr/android_vsync_helper.h"
 #include "chrome/browser/android/vr/web_xr_presentation_state.h"
 #include "chrome/browser/vr/base_compositor_delegate.h"
 #include "chrome/browser/vr/fps_meter.h"
-#include "chrome/browser/vr/model/controller_model.h"
 #include "chrome/browser/vr/render_info.h"
-#include "chrome/browser/vr/render_loop.h"
-#include "chrome/browser/vr/scheduler_delegate.h"
 #include "chrome/browser/vr/sliding_average.h"
-#include "chrome/browser/vr/ui_test_input.h"
-#include "device/vr/vr_device.h"
-#include "mojo/public/cpp/bindings/binding.h"
 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr.h"
 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr_types.h"
-#include "ui/gfx/geometry/quaternion.h"
+#include "ui/gfx/geometry/point3_f.h"
 #include "ui/gfx/geometry/rect_f.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/native_widget_types.h"
@@ -39,32 +30,20 @@
 class WaitableEvent;
 }
 
+namespace gfx {
+class GpuFence;
+}
+
 namespace gl {
-class GLFenceAndroidNativeFenceSync;
-class GLFenceEGL;
 class GLSurface;
 class ScopedJavaSurface;
 class SurfaceTexture;
 }  // namespace gl
 
-namespace gfx {
-class GpuFence;
-}  // namespace gfx
-
-namespace gpu {
-struct MailboxHolder;
-struct SyncToken;
-}  // namespace gpu
-
 namespace vr {
 
-class CompositorUiInterface;
-class FPSMeter;
 class GlBrowserInterface;
-class MailboxToSurfaceBridge;
-class ScopedGpuTrace;
 class SlidingTimeDeltaAverage;
-class VrShell;
 
 struct WebVrBounds {
   WebVrBounds(const gfx::RectF& left,
@@ -91,30 +70,56 @@
   }
 };
 
-// This class manages all GLThread owned objects and GL rendering for VrShell.
-// It is not threadsafe and must only be used on the GL thread.
-class VrShellGl : public BaseCompositorDelegate,
-                  public SchedulerDelegate,
-                  public device::mojom::XRPresentationProvider,
-                  public device::mojom::XRFrameDataProvider {
+class VrShellGl : public BaseCompositorDelegate {
  public:
+  using WebXrTokenSignaledCallback =
+      base::OnceCallback<void(std::unique_ptr<gfx::GpuFence>)>;
   VrShellGl(GlBrowserInterface* browser,
+            TexturesInitializedCallback textures_initialized_callback,
             gvr::GvrApi* gvr_api,
             bool reprojected_rendering,
-            bool daydream_support,
-            bool start_in_web_vr_mode,
             bool pause_content,
             bool low_density,
             size_t sliding_time_size);
   ~VrShellGl() override;
 
+  void set_webxr_presentation_state(WebXrPresentationState* webxr) {
+    webxr_ = webxr;
+  }
   void Init(base::WaitableEvent* gl_surface_created_event,
-            base::OnceCallback<gfx::AcceleratedWidget()> callback);
+            base::OnceCallback<gfx::AcceleratedWidget()> callback,
+            bool start_in_webxr_mode);
+  base::WeakPtr<VrShellGl> GetWeakPtr();
 
+  // GvrSchedulerDelegate communicates with this class through these functions.
+  bool DoesSurfacelessRendering() const;
+  void RecordFrameTimeTraces() const;
+  void SetWebXrBounds(const WebVrBounds& bounds);
+  base::TimeDelta GetAcquireTimeAverage() const;
+  void OnWebXrFrameAvailable();
+  void UpdateViewports();
+  bool AcquireGvrFrame(int frame_index);
+  void SubmitToGvr(const gfx::Transform& head_pose);
+  bool CreateOrResizeWebXrSurface(
+      const gfx::Size& size,
+      base::RepeatingClosure on_webxr_frame_available);
+  void set_webxr_use_shared_buffer_draw(bool use) {
+    webxr_use_shared_buffer_draw_ = use;
+  }
+  bool ResizeForWebXr();
+  void ResizeForBrowser();
+  gl::SurfaceTexture* webxr_surface_texture() {
+    return webxr_surface_texture_.get();
+  }
+  gfx::Size webxr_surface_size() const { return webxr_surface_size_; }
+
+ private:
   // CompositorDelegate overrides.
+  void OnResume() override;
   FovRectangles GetRecommendedFovs() override;
   float GetZNear() override;
-  RenderInfo GetRenderInfo(FrameType frame_type) override;
+  RenderInfo GetRenderInfo(FrameType frame_type,
+                           const gfx::Transform& head_pose) override;
   RenderInfo GetOptimizedRenderInfoForFovs(const FovRectangles& fovs) override;
   void InitializeBuffers() override;
   void PrepareBufferForWebXr() override;
@@ -128,151 +133,40 @@
   void GetContentQuadDrawParams(Transform* uv_transform,
                                 float* border_x,
                                 float* border_y) override;
-  void SubmitFrame(FrameType frame_type) override;
-  void SetUiInterface(CompositorUiInterface* ui) override;
-  void SetShowingVrDialog(bool showing) override;
   int GetContentBufferWidth() override;
-  void ConnectPresentingService(
-      device::mojom::VRDisplayInfoPtr display_info,
-      device::mojom::XRRuntimeSessionOptionsPtr options) override;
   void BufferBoundsChanged(const gfx::Size& content_buffer_size,
                            const gfx::Size& overlay_buffer_size) override;
   void ResumeContentRendering() override;
+  // End CompositorDelegate overrides.
 
-  // SchedulerDelegate overrides.
-  void SetDrawWebXrCallback(DrawCallback callback) override;
-  void SetDrawBrowserCallback(DrawCallback callback) override;
-  void SetWebXrInputCallback(WebXrInputCallback callback) override;
-  void AddInputSourceState(device::mojom::XRInputSourceStatePtr state) override;
-  void OnPause() override;
-  void OnResume() override;
-  void OnExitPresent() override;
-  void OnTriggerEvent(bool pressed) override;
-  void SetWebXrMode(bool enabled) override;
-
-  void CreateSurfaceBridge(gl::SurfaceTexture* surface_texture);
-  void CreateOrResizeWebVRSurface(const gfx::Size& size);
-  void WebVrCreateOrResizeSharedBufferImage(WebXrSharedBuffer* buffer,
-                                            const gfx::Size& size);
-  void WebVrPrepareSharedBuffer(const gfx::Size& size);
   void UIBoundsChanged(int width, int height);
 
-  base::WeakPtr<VrShellGl> GetWeakPtr();
+  void InitializeGl(gfx::AcceleratedWidget surface, bool start_in_webxr_mode);
+  void InitializeRenderer(bool start_in_webxr_mode);
 
- private:
-  void InitializeGl(gfx::AcceleratedWidget surface);
-  void GvrInit();
-
-  device::mojom::XRPresentationTransportOptionsPtr
-  GetWebVrFrameTransportOptions(
-      const device::mojom::XRRuntimeSessionOptionsPtr&);
-
-  void InitializeRenderer();
-  void UpdateViewports();
-  void OnGpuProcessConnectionReady();
-  // Returns true if successfully resized.
-  bool ResizeForWebVR(int16_t frame_index);
-  void UpdateSamples();
   void UpdateEyeInfos(const gfx::Transform& head_pose,
                       const Viewport& viewport,
                       const gfx::Size& render_size,
                       RenderInfo* out_render_info);
   void UpdateContentViewportTransforms(const gfx::Transform& head_pose);
-  void DrawFrame(int16_t frame_index, base::TimeTicks current_time);
-  void DrawFrameSubmitWhenReady(FrameType frame_type,
-                                const gfx::Transform& head_pose,
-                                std::unique_ptr<gl::GLFenceEGL> fence);
-  void DrawFrameSubmitNow(FrameType frame_type,
-                          const gfx::Transform& head_pose);
-  bool ShouldDrawWebVr();
   bool WebVrPoseByteIsValid(int pose_index_byte);
 
   void OnContentFrameAvailable();
   void OnContentOverlayFrameAvailable();
   void OnUiFrameAvailable();
-  void OnWebXrFrameAvailable();
-  void OnNewWebVRFrame();
-  void ScheduleOrCancelWebVrFrameTimeout();
-  void OnWebXrTimeoutImminent();
-  void OnWebXrFrameTimedOut();
 
-  base::TimeDelta GetPredictedFrameTime();
-  void AddWebVrRenderTimeEstimate(const base::TimeTicks& fence_complete_time);
+  void WebVrWaitForServerFence();
 
-  void OnVSync(base::TimeTicks frame_time);
-
-  bool IsSubmitFrameExpected(int16_t frame_index);
-
-  // XRFrameDataProvider
-  void GetFrameData(device::mojom::XRFrameDataProvider::GetFrameDataCallback
-                        callback) override;
-
-  // XRPresentationProvider
-  void SubmitFrameMissing(int16_t frame_index, const gpu::SyncToken&) override;
-  void SubmitFrame(int16_t frame_index,
-                   const gpu::MailboxHolder& mailbox,
-                   base::TimeDelta time_waited) override;
-  void SubmitFrameWithTextureHandle(int16_t frame_index,
-                                    mojo::ScopedHandle texture_handle) override;
-  void SubmitFrameDrawnIntoTexture(int16_t frame_index,
-                                   const gpu::SyncToken&,
-                                   base::TimeDelta time_waited) override;
-  void UpdateLayerBounds(int16_t frame_index,
-                         const gfx::RectF& left_bounds,
-                         const gfx::RectF& right_bounds,
-                         const gfx::Size& source_size) override;
-
-  // Shared logic for SubmitFrame variants, including sanity checks.
-  // Returns true if OK to proceed.
-  bool SubmitFrameCommon(int16_t frame_index, base::TimeDelta time_waited);
-
-  // Sends a GetFrameData response to the presentation client.
-  void SendVSync();
-
-  // Heuristics to avoid excessive backlogged frames.
-  bool WebVrHasSlowRenderingFrame();
-  bool WebVrHasOverstuffedBuffers();
-
-  // Checks if we're in a valid state for starting animation of a new frame.
-  // Invalid states include a previous animating frame that's not complete
-  // yet (including deferred processing not having started yet), or timing
-  // heuristics indicating that it should be retried later.
-  bool WebVrCanAnimateFrame(bool is_from_onvsync);
-  // Call this after state changes that could result in WebVrCanAnimateFrame
-  // becoming true.
-  void WebVrTryStartAnimatingFrame(bool is_from_onvsync);
-
-  // Transition a frame from animating to processing.
-  void ProcessWebVrFrameFromGMB(int16_t frame_index,
-                                const gpu::SyncToken& sync_token);
-  void ProcessWebVrFrameFromMailbox(int16_t frame_index,
-                                    const gpu::MailboxHolder& mailbox);
-
-  bool CanSendWebXrVSync() const;
-  // Used for discarding unwanted WebVR frames while UI is showing. We can't
-  // safely cancel frames from processing start until they show up in
-  // OnWebXrFrameAvailable, so only support cancelling them before or after
-  // that lifecycle segment.
-  void WebVrCancelAnimatingFrame();
-  void WebVrCancelProcessingFrameAfterTransfer();
-
-  void WebVrSendRenderNotification(bool was_rendered);
-
-  void ClosePresentationBindings();
-
-  device::mojom::XRInputSourceStatePtr GetGazeInputSourceState();
+  WebXrPresentationState* webxr_;
 
   // samplerExternalOES texture data for WebVR content image.
   int webvr_texture_id_ = 0;
 
-  // Set from feature flags.
-  bool webvr_vsync_align_;
-
   scoped_refptr<gl::GLSurface> surface_;
   scoped_refptr<gl::SurfaceTexture> content_surface_texture_;
   scoped_refptr<gl::SurfaceTexture> content_overlay_surface_texture_;
   scoped_refptr<gl::SurfaceTexture> ui_surface_texture_;
-  scoped_refptr<gl::SurfaceTexture> webvr_surface_texture_;
+  scoped_refptr<gl::SurfaceTexture> webxr_surface_texture_;
   float webvr_surface_texture_uv_transform_[16];
   std::unique_ptr<gl::ScopedJavaSurface> content_surface_;
   std::unique_ptr<gl::ScopedJavaSurface> ui_surface_;
@@ -287,92 +181,27 @@
   bool viewports_need_updating_ = true;
   gvr::SwapChain swap_chain_;
   gvr::Frame acquired_frame_;
-  base::queue<std::pair<WebXrPresentationState::FrameIndexType, WebVrBounds>>
-      pending_bounds_;
   WebVrBounds current_webvr_frame_bounds_ =
       WebVrBounds(gfx::RectF(), gfx::RectF(), gfx::Size());
-  base::queue<uint16_t> pending_frames_;
-  std::unique_ptr<MailboxToSurfaceBridge> mailbox_bridge_;
-
-  // A fence used to avoid overstuffed GVR buffers in WebVR mode.
-  std::unique_ptr<gl::GLFenceAndroidNativeFenceSync>
-      webvr_prev_frame_completion_fence_;
-  std::unique_ptr<ScopedGpuTrace> gpu_trace_;
 
   // The default size for the render buffers.
   gfx::Size render_size_default_;
   gfx::Size render_size_webvr_ui_;
   const bool low_density_;
 
-  // WebXR currently supports multiple render path choices, with runtime
-  // selection based on underlying support being available and feature flags.
-  // The webxr_use_* booleans choose among the implementations. Please don't
-  // check WebXrRenderPath or other feature flags in individual code paths
-  // directly to avoid inconsistent logic.
-  bool webxr_use_gpu_fence_ = false;
   bool webxr_use_shared_buffer_draw_ = false;
 
-  void WebVrWaitForServerFence();
-  void OnWebVRTokenSignaled(int16_t frame_index,
-                            std::unique_ptr<gfx::GpuFence>);
-
-  int webvr_unstuff_ratelimit_frames_ = 0;
-
-  bool cardboard_ = false;
-
   gfx::Size content_tex_buffer_size_ = {0, 0};
-  gfx::Size webvr_surface_size_ = {0, 0};
+  gfx::Size webxr_surface_size_ = {0, 0};
 
-  WebXrPresentationState webxr_;
-
-  bool web_vr_mode_ = false;
   const bool surfaceless_rendering_;
-  bool daydream_support_;
   bool content_paused_;
-  bool cardboard_trigger_pressed_ = false;
-  bool cardboard_trigger_clicked_ = false;
-
-  std::vector<device::mojom::XRInputSourceStatePtr> input_states_;
-
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
-
-  // Attributes tracking WebVR rAF/VSync animation loop state. Blink schedules
-  // a callback using the GetFrameData mojo call which is stored in
-  // get_frame_data_callback_. The callback is executed by SendVSync once
-  // WebVrCanAnimateFrame returns true.
-  //
-  // pending_vsync_ is set to true in OnVSync and false in SendVSync. It
-  // throttles animation to no faster than the VSync rate. The pending_time_ is
-  // updated in OnVSync and used as the rAF animation timer in SendVSync.
-  base::TimeTicks pending_time_;
-  bool pending_vsync_ = false;
-  device::mojom::XRFrameDataProvider::GetFrameDataCallback
-      get_frame_data_callback_;
-
-  mojo::Binding<device::mojom::XRPresentationProvider> presentation_binding_;
-  mojo::Binding<device::mojom::XRFrameDataProvider> frame_data_binding_;
-  device::mojom::XRPresentationClientPtr submit_client_;
 
   GlBrowserInterface* browser_;
-  CompositorUiInterface* ui_;
 
-  uint64_t webvr_frames_received_ = 0;
-
-  FPSMeter vr_ui_fps_meter_;
-  FPSMeter webvr_fps_meter_;
-
-  // JS time is from SendVSync (pose time) to incoming JS submitFrame.
-  SlidingTimeDeltaAverage webvr_js_time_;
-
-  // Render time is from JS submitFrame to estimated render completion.
-  // This is an estimate when submitting incomplete frames to GVR.
-  // If submitFrame blocks, that means the previous frame wasn't done
-  // rendering yet.
-  SlidingTimeDeltaAverage webvr_render_time_;
-
-  // JS wait time is spent waiting for the previous frame to complete
-  // rendering, as reported from the Renderer via mojo.
-  SlidingTimeDeltaAverage webvr_js_wait_time_;
+  // This callback should be called once a GL context is active and textures
+  // have been created.
+  TexturesInitializedCallback textures_initialized_callback_;
 
   // GVR acquire/submit times for scheduling heuristics.
   SlidingTimeDeltaAverage webvr_acquire_time_;
@@ -382,28 +211,8 @@
 
   RenderInfo render_info_;
 
-  AndroidVSyncHelper vsync_helper_;
-
-  base::CancelableOnceCallback<void()> webvr_frame_timeout_;
-  base::CancelableOnceCallback<void()> webvr_spinner_timeout_;
-
-  // WebVR defers submitting a frame to GVR by scheduling a closure
-  // for later. If we exit WebVR before it is executed, we need to
-  // cancel it to avoid inconsistent state.
-  base::CancelableOnceCallback<
-      void(FrameType, const gfx::Transform&, std::unique_ptr<gl::GLFenceEGL>)>
-      webxr_delayed_gvr_submit_;
-
-  DrawCallback web_xr_draw_callback_;
-  DrawCallback browser_draw_callback_;
-  WebXrInputCallback webxr_input_callback_;
-
   std::vector<gvr::BufferSpec> specs_;
 
-  ControllerModel controller_model_;
-
-  bool showing_vr_dialog_ = false;
-
   base::WeakPtrFactory<VrShellGl> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(VrShellGl);
diff --git a/chrome/browser/android/vr/web_xr_presentation_state.cc b/chrome/browser/android/vr/web_xr_presentation_state.cc
index 9ca763a..ddfecd7 100644
--- a/chrome/browser/android/vr/web_xr_presentation_state.cc
+++ b/chrome/browser/android/vr/web_xr_presentation_state.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/android/vr/web_xr_presentation_state.h"
 
-#include "base/callback_helpers.h"
 #include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/common/mailbox_holder.h"
 #include "gpu/ipc/common/gpu_memory_buffer_impl_android_hardware_buffer.h"
@@ -119,10 +118,6 @@
 void WebXrPresentationState::EndPresentation() {
   TRACE_EVENT0("gpu", __FUNCTION__);
 
-  if (end_presentation_callback) {
-    base::ResetAndReturn(&end_presentation_callback).Run();
-  }
-
   if (HaveRenderingFrame()) {
     rendering_frame_->Recycle();
     idle_frames_.push(rendering_frame_);
@@ -155,7 +150,7 @@
   DCHECK(animating_frame_ && !animating_frame_->deferred_start_processing);
   if (CanProcessFrame()) {
     TransitionFrameAnimatingToProcessing();
-    base::ResetAndReturn(&callback).Run();
+    std::move(callback).Run();
   } else {
     DVLOG(2) << "Deferring processing frame, not ready";
     animating_frame_->deferred_start_processing = std::move(callback);
@@ -171,7 +166,7 @@
   // Run synchronously, not via PostTask, to ensure we don't
   // get a new SendVSync scheduling in between.
   TransitionFrameAnimatingToProcessing();
-  base::ResetAndReturn(&animating_frame_->deferred_start_processing).Run();
+  std::move(animating_frame_->deferred_start_processing).Run();
 }
 
 }  // namespace vr
diff --git a/chrome/browser/android/vr/web_xr_presentation_state.h b/chrome/browser/android/vr/web_xr_presentation_state.h
index 702f250..efb8622 100644
--- a/chrome/browser/android/vr/web_xr_presentation_state.h
+++ b/chrome/browser/android/vr/web_xr_presentation_state.h
@@ -6,8 +6,9 @@
 #define CHROME_BROWSER_ANDROID_VR_WEB_XR_PRESENTATION_STATE_H_
 
 #include <memory>
+#include <utility>
 
-#include "base/cancelable_callback.h"
+#include "base/callback.h"
 #include "base/containers/queue.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
@@ -167,15 +168,15 @@
   // becoming true.
   void TryDeferredProcessing();
 
-  bool HaveAnimatingFrame() { return animating_frame_; }
+  bool HaveAnimatingFrame() const { return animating_frame_; }
   WebXrFrame* GetAnimatingFrame();
-  bool HaveProcessingFrame() { return processing_frame_; }
+  bool HaveProcessingFrame() const { return processing_frame_; }
   WebXrFrame* GetProcessingFrame();
-  bool HaveRenderingFrame() { return rendering_frame_; }
+  bool HaveRenderingFrame() const { return rendering_frame_; }
   WebXrFrame* GetRenderingFrame();
 
-  void set_mailbox_bridge_ready(bool ready) { mailbox_bridge_ready_ = ready; }
-  bool mailbox_bridge_ready() const { return mailbox_bridge_ready_; }
+  bool mailbox_bridge_ready() { return mailbox_bridge_ready_; }
+  void NotifyMailboxBridgeReady() { mailbox_bridge_ready_ = true; }
 
   // Used by WebVrCanAnimateFrame() to detect when ui_->CanSendWebVrVSync()
   // transitions from false to true, as part of starting the incoming frame
@@ -186,8 +187,6 @@
   // this, but try to keep it unique to avoid confusion.
   int next_memory_buffer_id = 0;
 
-  base::OnceClosure end_presentation_callback;
-
  private:
   // Checks if we're in a valid state for processing the current animating
   // frame. Invalid states include mailbox_bridge_ready_ being false, or an
diff --git a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
index 4e98d83d..627b1bd7 100644
--- a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
@@ -200,31 +200,6 @@
 
   bool ShowAutofillSuggestion(content::RenderFrameHost* frame,
                               const std::string& target_element_xpath) {
-    const std::string get_target_field_x_js(base::StringPrintf(
-        "window.domAutomationController.send("
-        "    (function() {"
-        "       try {"
-        "         const element = automation_helper.getElementByXpath(`%s`);"
-        "         const rect = element.getBoundingClientRect();"
-        "         console.log(`Window href x: ${location.href}`);"
-        "         return Math.floor(rect.left + rect.width / 2);"
-        "       } catch(ex) {}"
-        "       return -1;"
-        "    })());",
-        target_element_xpath.c_str()));
-    const std::string get_target_field_y_js(base::StringPrintf(
-        "window.domAutomationController.send("
-        "    (function() {"
-        "       try {"
-        "         const element = automation_helper.getElementByXpath(`%s`);"
-        "         const rect = element.getBoundingClientRect();"
-        "         console.log(`Window href y: ${location.href}`);"
-        "         return Math.floor(rect.top + rect.height / 2);"
-        "       } catch(ex) {}"
-        "       return -1;"
-        "    })());",
-        target_element_xpath.c_str()));
-
     // First, automation should focus on the frame containg the autofill form.
     // Doing so ensures that Chrome scrolls the element into view if the
     // element is off the page.
@@ -232,16 +207,10 @@
             frame, target_element_xpath))
       return false;
 
-    int x;
-    if (!content::ExecuteScriptAndExtractInt(frame, get_target_field_x_js, &x))
-      return false;
-    if (x == -1)
-      return false;
-
-    int y;
-    if (!content::ExecuteScriptAndExtractInt(frame, get_target_field_y_js, &y))
-      return false;
-    if (y == -1)
+    int x, y;
+    if (!captured_sites_test_utils::TestRecipeReplayer::
+            GetCenterCoordinateOfTargetElement(frame, target_element_xpath, x,
+                                               y))
       return false;
 
     test_delegate()->Reset();
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc
index d0ad0c4..16289d8 100644
--- a/chrome/browser/autofill/autofill_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -230,12 +230,8 @@
 //                         features and field trials.
 class AutofillInteractiveTestBase : public AutofillUiTest {
  protected:
-  explicit AutofillInteractiveTestBase(bool popup_views_enabled)
-      : https_server_(net::EmbeddedTestServer::TYPE_HTTPS),
-        popup_views_enabled_(popup_views_enabled) {
-    scoped_feature_list_.InitWithFeatureState(
-        features::kAutofillExpandedPopupViews, popup_views_enabled_);
-  }
+  AutofillInteractiveTestBase()
+      : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {}
 
   ~AutofillInteractiveTestBase() override {}
 
@@ -623,9 +619,6 @@
   // with it.
   content::RenderWidgetHost::KeyPressEventCallback key_press_event_sink_;
 
-  // Indicates if AutofillExpandedPopupViews is enabled.
-  const bool popup_views_enabled_;
-
   base::test::ScopedFeatureList scoped_feature_list_;
 
   std::unique_ptr<net::test_server::ControllableHttpResponse>
@@ -636,13 +629,9 @@
 
 // AutofillInteractiveTest ----------------------------------------------------
 
-// Test params:
-//  - bool popup_views_enabled: whether feature AutofillExpandedPopupViews
-//        is enabled for testing.
-class AutofillInteractiveTest : public AutofillInteractiveTestBase,
-                                public testing::WithParamInterface<bool> {
+class AutofillInteractiveTest : public AutofillInteractiveTestBase {
  protected:
-  AutofillInteractiveTest() : AutofillInteractiveTestBase(GetParam()) {}
+  AutofillInteractiveTest() = default;
   ~AutofillInteractiveTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -655,7 +644,7 @@
 };
 
 // Test that basic form fill is working.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, BasicFormFill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, BasicFormFill) {
   CreateTestProfile();
 
   // Load the test page.
@@ -666,7 +655,7 @@
   TryBasicFormFill();
 }
 
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, BasicClear) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, BasicClear) {
   CreateTestProfile();
 
   // Load the test page.
@@ -678,7 +667,7 @@
   TryClearForm();
 }
 
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, ClearTwoSection) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, ClearTwoSection) {
   CreateTestProfile();
 
   // Load the test page.
@@ -714,7 +703,7 @@
 
 // Test that autofill doesn't refill a text field initially modified by the
 // user.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, ModifyTextFieldAndFill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, ModifyTextFieldAndFill) {
   CreateTestProfile();
 
   // Load the test page.
@@ -742,7 +731,7 @@
 
 // Test that autofill doesn't refill a select field initially modified by the
 // user.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, ModifySelectFieldAndFill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, ModifySelectFieldAndFill) {
   CreateTestProfile();
 
   // Load the test page.
@@ -769,7 +758,7 @@
 }
 
 // Test that autofill works when the website prefills the form.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, PrefillFormAndFill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, PrefillFormAndFill) {
   const char kPrefillScript[] =
       "<script>"
       "document.getElementById('firstname').value = 'Seb';"
@@ -797,7 +786,7 @@
 }
 
 // Test that autofill doesn't refill a field modified by the user.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        FillChangeSecondFieldRefillAndClearFirstFill) {
   CreateTestProfile();
 
@@ -857,7 +846,7 @@
 }
 
 // Test that multiple autofillings work.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        FillChangeSecondFieldRefillAndClearSecondField) {
   CreateTestProfile();
 
@@ -897,7 +886,7 @@
 }
 
 // Test that multiple autofillings work.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        FillChangeSecondFieldRefillSecondFieldClearFirst) {
   CreateTestProfile();
 
@@ -938,7 +927,7 @@
 }
 
 // Test that multiple autofillings work.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        FillThenFillSomeWithAnotherProfileThenClear) {
   CreateTestProfile();
   CreateSecondTestProfile();
@@ -973,7 +962,7 @@
 }
 
 // Test that form filling can be initiated by pressing the down arrow.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, AutofillViaDownArrow) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillViaDownArrow) {
   CreateTestProfile();
 
   // Load the test page.
@@ -989,7 +978,7 @@
   ExpectFilledTestForm();
 }
 
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, AutofillSelectViaTab) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillSelectViaTab) {
   CreateTestProfile();
 
   // Load the test page.
@@ -1005,7 +994,7 @@
   ExpectFilledTestForm();
 }
 
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, AutofillViaClick) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillViaClick) {
   CreateTestProfile();
 
   // Load the test page.
@@ -1032,16 +1021,11 @@
 }
 
 // Test params:
-//  - bool popup_views_enabled_: whether feature AutofillExpandedPopupViews
-//        is enabled.
 //  - bool single_click_enabled_: whether AutofillSingleClick is enabled.
-class AutofillSingleClickTest
-    : public AutofillInteractiveTestBase,
-      public testing::WithParamInterface<std::tuple<bool, bool>> {
+class AutofillSingleClickTest : public AutofillInteractiveTestBase,
+                                public testing::WithParamInterface<bool> {
  protected:
-  AutofillSingleClickTest()
-      : AutofillInteractiveTestBase(std::get<0>(GetParam())),
-        single_click_enabled_(std::get<1>(GetParam())) {}
+  AutofillSingleClickTest() : single_click_enabled_(GetParam()) {}
 
   void SetUp() override {
     scoped_feature_list_.InitWithFeatureState(features::kSingleClickAutofill,
@@ -1095,7 +1079,7 @@
 
 // Makes sure that clicking outside the focused field doesn't activate
 // the popup.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, DontAutofillForOutsideClick) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DontAutofillForOutsideClick) {
   CreateTestProfile();
 
   // Load the test page.
@@ -1119,7 +1103,7 @@
 
 // Test that a field is still autofillable after the previously autofilled
 // value is deleted.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, OnDeleteValueAfterAutofill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnDeleteValueAfterAutofill) {
   CreateTestProfile();
 
   // Load the test page.
@@ -1161,7 +1145,7 @@
 #else
 #define MAYBE_OnSelectOptionFromDatalist OnSelectOptionFromDatalist
 #endif
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        MAYBE_OnSelectOptionFromDatalist) {
   // Load the test page.
   ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
@@ -1190,7 +1174,7 @@
 }
 
 // Test that a JavaScript oninput event is fired after auto-filling a form.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, OnInputAfterAutofill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnInputAfterAutofill) {
   CreateTestProfile();
 
   const char kOnInputScript[] =
@@ -1261,7 +1245,7 @@
 }
 
 // Test that a JavaScript onchange event is fired after auto-filling a form.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, OnChangeAfterAutofill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnChangeAfterAutofill) {
   CreateTestProfile();
 
   const char kOnChangeScript[] =
@@ -1331,7 +1315,7 @@
   EXPECT_FALSE(unchanged_select_fired);
 }
 
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, InputFiresBeforeChange) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, InputFiresBeforeChange) {
   CreateTestProfile();
 
   const char kInputFiresBeforeChangeScript[] =
@@ -1408,7 +1392,7 @@
 }
 
 // Test that we can autofill forms distinguished only by their |id| attribute.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        AutofillFormsDistinguishedById) {
   CreateTestProfile();
 
@@ -1434,7 +1418,7 @@
 // In the wild, the repeated fields are typically either email fields
 // (duplicated for "confirmation"); or variants that are hot-swapped via
 // JavaScript, with only one actually visible at any given time.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, AutofillFormWithRepeatedField) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillFormWithRepeatedField) {
   CreateTestProfile();
 
   // Load the test page.
@@ -1479,7 +1463,7 @@
 }
 
 // Test that we properly autofill forms with non-autofillable fields.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        AutofillFormWithNonAutofillableField) {
   CreateTestProfile();
 
@@ -1523,7 +1507,7 @@
 }
 
 // Test that we can Autofill dynamically generated forms.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, DynamicFormFill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DynamicFormFill) {
   CreateTestProfile();
 
   // Load the test page.
@@ -1611,7 +1595,7 @@
 }
 
 // Test that form filling works after reloading the current page.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, AutofillAfterReload) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterReload) {
   CreateTestProfile();
 
   // Load the test page.
@@ -1629,7 +1613,7 @@
 
 // Test that filling a form sends all the expected events to the different
 // fields being filled.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, AutofillEvents) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillEvents) {
   CreateTestProfile();
 
   // Load the test page.
@@ -1732,7 +1716,7 @@
 #else
 #define MAYBE_AutofillAfterTranslate AutofillAfterTranslate
 #endif  // ADDRESS_SANITIZER
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, MAYBE_AutofillAfterTranslate) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, MAYBE_AutofillAfterTranslate) {
   ASSERT_TRUE(TranslateService::IsTranslateBubbleEnabled());
 
   translate::TranslateManager::SetIgnoreMissingKeyForTesting(true);
@@ -1814,7 +1798,7 @@
 // The high level key presses execute the following: Select the first text
 // field, invoke the autofill popup list, select the first profile within the
 // list, and commit to the profile to populate the form.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, ComparePhoneNumbers) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, ComparePhoneNumbers) {
   AutofillProfile profile;
   profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob"));
   profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith"));
@@ -1862,7 +1846,7 @@
 }
 
 // Test that Autofill does not fill in read-only fields.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, NoAutofillForReadOnlyFields) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, NoAutofillForReadOnlyFields) {
   std::string addr_line1("1234 H St.");
 
   AutofillProfile profile;
@@ -1891,7 +1875,7 @@
 //   1. Fill form using a saved profile.
 //   2. Reset the form.
 //   3. Fill form using a saved profile.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, FormFillableOnReset) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, FormFillableOnReset) {
   CreateTestProfile();
 
   GURL url =
@@ -1916,7 +1900,7 @@
 }
 
 // Test Autofill distinguishes a middle initial in a name.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        DistinguishMiddleInitialWithinName) {
   CreateTestProfile();
 
@@ -1930,7 +1914,7 @@
 
 // Test forms with multiple email addresses are filled properly.
 // Entire form should be filled with one user gesture.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        MultipleEmailFilledByOneUserGesture) {
   std::string email("bsmith@gmail.com");
 
@@ -1955,7 +1939,7 @@
 // that consists of thousands of profiles, the form does not hang after being
 // submitted.
 // Flakily times out creating 1500 profiles: http://crbug.com/281527
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        DISABLED_FormFillLatencyAfterSubmit) {
   std::vector<std::string> cities;
   cities.push_back("San Jose");
@@ -2011,7 +1995,7 @@
 // Test that Chrome doesn't crash when autocomplete is disabled while the user
 // is interacting with the form.  This is a regression test for
 // http://crbug.com/160476
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
                        DisableAutocompleteWhileFilling) {
   CreateTestProfile();
 
@@ -2038,7 +2022,7 @@
 }
 
 // Test that dynamic forms don't get filled when the feature is disabled.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, DynamicChangingFormFill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DynamicChangingFormFill) {
   // Explicitly disable the filling of dynamic forms.
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndDisableFeature(features::kAutofillDynamicForms);
@@ -2069,7 +2053,7 @@
 
 // Test that we can Autofill forms where some fields name change during the
 // fill.
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, FieldsChangeName) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, FieldsChangeName) {
   CreateTestProfile();
 
   GURL url = embedded_test_server()->GetURL(
@@ -2094,12 +2078,9 @@
   ExpectFieldValue("phone", "15125551234");
 }
 
-class AutofillCreditCardInteractiveTest
-    : public AutofillInteractiveTestBase,
-      public testing::WithParamInterface<bool> {
+class AutofillCreditCardInteractiveTest : public AutofillInteractiveTestBase {
  protected:
-  AutofillCreditCardInteractiveTest()
-      : AutofillInteractiveTestBase(GetParam()) {}
+  AutofillCreditCardInteractiveTest() = default;
   ~AutofillCreditCardInteractiveTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -2120,7 +2101,7 @@
 };
 
 // Test that credit card autofill works.
-IN_PROC_BROWSER_TEST_P(AutofillCreditCardInteractiveTest, FillLocalCreditCard) {
+IN_PROC_BROWSER_TEST_F(AutofillCreditCardInteractiveTest, FillLocalCreditCard) {
   CreateTestCreditCart();
 
   // Navigate to the page.
@@ -2139,17 +2120,13 @@
 }
 
 // Test params:
-//  - bool popup_views_enabled_: whether feature AutofillExpandedPopupViews
-//        is enabled.
 //  - bool restrict_unowned_fields_: whether autofill of unowned fields is
 //        restricted to checkout related pages.
 class AutofillRestrictUnownedFieldsTest
     : public AutofillInteractiveTestBase,
-      public testing::WithParamInterface<std::tuple<bool, bool>> {
+      public testing::WithParamInterface<bool> {
  protected:
-  AutofillRestrictUnownedFieldsTest()
-      : AutofillInteractiveTestBase(std::get<0>(GetParam())),
-        restrict_unowned_fields_(std::get<1>(GetParam())) {
+  AutofillRestrictUnownedFieldsTest() : restrict_unowned_fields_(GetParam()) {
     std::vector<base::Feature> enabled;
     std::vector<base::Feature> disabled = {
         features::kAutofillEnforceMinRequiredFieldsForHeuristics,
@@ -2334,12 +2311,9 @@
 // Test params:
 //  - bool popup_views_enabled: whether feature AutofillExpandedPopupViews
 //        is enabled for testing.
-class AutofillInteractiveIsolationTest
-    : public AutofillInteractiveTestBase,
-      public testing::WithParamInterface<bool> {
+class AutofillInteractiveIsolationTest : public AutofillInteractiveTestBase {
  protected:
-  AutofillInteractiveIsolationTest()
-      : AutofillInteractiveTestBase(GetParam()) {}
+  AutofillInteractiveIsolationTest() = default;
   ~AutofillInteractiveIsolationTest() override = default;
 
   bool IsPopupShown() {
@@ -2359,7 +2333,7 @@
   }
 };
 
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveIsolationTest, SimpleCrossSiteFill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveIsolationTest, SimpleCrossSiteFill) {
   CreateTestProfile();
 
   // Main frame is on a.com, iframe is on b.com.
@@ -2407,7 +2381,7 @@
 #else
 #define MAYBE_CrossSitePaymentForms CrossSitePaymentForms
 #endif
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveTest, MAYBE_CrossSitePaymentForms) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, MAYBE_CrossSitePaymentForms) {
   CreateTestCreditCart();
   // Main frame is on a.com, iframe is on b.com.
   GURL url = embedded_test_server()->GetURL(
@@ -2440,7 +2414,7 @@
                        {ObservedUiEvents::kSuggestionShown});
 }
 
-IN_PROC_BROWSER_TEST_P(AutofillInteractiveIsolationTest,
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveIsolationTest,
                        DeletingFrameUnderSuggestion) {
   CreateTestProfile();
 
@@ -2485,15 +2459,9 @@
   EXPECT_FALSE(IsPopupShown());
 }
 
-// Test params:
-//  - bool popup_views_enabled: whether feature AutofillExpandedPopupViews
-//        is enabled for testing.
-class AutofillDynamicFormInteractiveTest
-    : public AutofillInteractiveTestBase,
-      public testing::WithParamInterface<bool> {
+class AutofillDynamicFormInteractiveTest : public AutofillInteractiveTestBase {
  protected:
-  AutofillDynamicFormInteractiveTest()
-      : AutofillInteractiveTestBase(GetParam()) {
+  AutofillDynamicFormInteractiveTest() {
     // Setup that the test expects a re-fill to happen.
     test_delegate()->SetIsExpectingDynamicRefill(true);
   }
@@ -2524,7 +2492,7 @@
 };
 
 // Test that we can Autofill dynamically generated forms.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill) {
   CreateTestProfile();
 
@@ -2550,7 +2518,7 @@
   ExpectFieldValue("phone_form1", "15125551234");
 }
 
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        TwoDynamicChangingFormsFill) {
   // Setup that the test expects a re-fill to happen.
   test_delegate()->SetIsExpectingDynamicRefill(true);
@@ -2597,7 +2565,7 @@
 }
 
 // Test that forms that dynamically change a second time do not get filled.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill_SecondChange) {
   CreateTestProfile();
 
@@ -2624,7 +2592,7 @@
 }
 
 // Test that forms that dynamically change after a second do not get filled.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill_AfterDelay) {
   CreateTestProfile();
 
@@ -2651,7 +2619,7 @@
 }
 
 // Test that only field of a type group that was filled initially get refilled.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill_AddsNewFieldTypeGroups) {
   CreateTestProfile();
 
@@ -2685,7 +2653,7 @@
 
 // Test that we can autofill forms that dynamically change select fields to text
 // fields by changing the visibilities.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicFormFill_SelectToText) {
   CreateTestProfile();
 
@@ -2711,7 +2679,7 @@
 
 // Test that we can autofill forms that dynamically change the visibility of a
 // field after it's autofilled.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicFormFill_VisibilitySwitch) {
   CreateTestProfile();
 
@@ -2739,7 +2707,7 @@
 
 // Test that we can autofill forms that dynamically change the element that
 // has been clicked on.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicFormFill_FirstElementDisappears) {
   CreateTestProfile();
 
@@ -2765,7 +2733,7 @@
 
 // Test that we can autofill forms that dynamically change the element that
 // has been clicked on, even though the form has no name.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicFormFill_FirstElementDisappearsNoNameForm) {
   CreateTestProfile();
 
@@ -2791,7 +2759,7 @@
 
 // Test that we can autofill forms that dynamically change the element that
 // has been clicked on, even though the elements are unowned.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicFormFill_FirstElementDisappearsUnowned) {
   CreateTestProfile();
 
@@ -2816,7 +2784,7 @@
 }
 
 // Test that credit card fields are never re-filled.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill_NotForCreditCard) {
   CreateTestCreditCart();
 
@@ -2849,7 +2817,7 @@
 
 // Test that we can Autofill dynamically changing selects that have options
 // added and removed.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill_SelectUpdated) {
   CreateTestProfile();
 
@@ -2877,7 +2845,7 @@
 
 // Test that we can Autofill dynamically changing selects that have options
 // added and removed only once.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill_DoubleSelectUpdated) {
   CreateTestProfile();
 
@@ -2905,7 +2873,7 @@
 
 // Test that we can Autofill dynamically generated forms with no name if the
 // NameForAutofill of the first field matches.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill_FormWithoutName) {
   CreateTestProfile();
 
@@ -2934,7 +2902,7 @@
 // Test that we can Autofill dynamically changing selects that have options
 // added and removed for forms with no names if the NameForAutofill of the first
 // field matches.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill_SelectUpdated_FormWithoutName) {
   CreateTestProfile();
 
@@ -2963,7 +2931,7 @@
 
 // Test that we can Autofill dynamically generated synthetic forms if the
 // NameForAutofill of the first field matches.
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill_SyntheticForm) {
   CreateTestProfile();
 
@@ -2991,7 +2959,7 @@
 
 // Test that we can Autofill dynamically synthetic forms when the select options
 // change if the NameForAutofill of the first field matches
-IN_PROC_BROWSER_TEST_P(AutofillDynamicFormInteractiveTest,
+IN_PROC_BROWSER_TEST_F(AutofillDynamicFormInteractiveTest,
                        DynamicChangingFormFill_SelectUpdated_SyntheticForm) {
   CreateTestProfile();
 
@@ -3017,22 +2985,11 @@
   ExpectFieldValue("phone", "15125551234");
 }
 
-INSTANTIATE_TEST_CASE_P(All, AutofillInteractiveTest, testing::Bool());
-INSTANTIATE_TEST_CASE_P(All,
-                        AutofillCreditCardInteractiveTest,
-                        testing::Bool());
-
 INSTANTIATE_TEST_CASE_P(All,
                         AutofillSingleClickTest,
-                        testing::Combine(testing::Bool(), testing::Bool()));
-
-INSTANTIATE_TEST_CASE_P(All, AutofillInteractiveIsolationTest, testing::Bool());
-
-INSTANTIATE_TEST_CASE_P(All,
-                        AutofillDynamicFormInteractiveTest,
                         testing::Bool());
 
 INSTANTIATE_TEST_CASE_P(All,
                         AutofillRestrictUnownedFieldsTest,
-                        testing::Combine(testing::Bool(), testing::Bool()));
+                        testing::Bool());
 }  // namespace autofill
diff --git a/chrome/browser/autofill/captured_sites_test_utils.cc b/chrome/browser/autofill/captured_sites_test_utils.cc
index cb8599e1..17f445f 100644
--- a/chrome/browser/autofill/captured_sites_test_utils.cc
+++ b/chrome/browser/autofill/captured_sites_test_utils.cc
@@ -16,9 +16,12 @@
 #include "base/time/time.h"
 #include "base/values.h"
 #include "build/build_config.h"
+#include "chrome/browser/permissions/permission_request_manager.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/test/base/interactive_test_utils.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/app_modal/javascript_app_modal_dialog.h"
+#include "components/app_modal/native_app_modal_dialog.h"
 #include "content/public/browser/browsing_data_remover.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_process_host.h"
@@ -32,6 +35,9 @@
 #include "ipc/ipc_logging.h"
 #include "ipc/ipc_message_macros.h"
 #include "ipc/ipc_sync_message.h"
+#include "ui/events/keycodes/dom/dom_key.h"
+#include "ui/events/keycodes/keyboard_code_conversion.h"
+#include "ui/events/keycodes/keyboard_codes.h"
 
 namespace {
 // The maximum amount of time to wait for Chrome to finish autofilling a form.
@@ -44,7 +50,6 @@
 // Automation Framework will retry an autofill action a couple times before
 // concluding that Chrome Autofill does not work.
 const int kAutofillActionNumRetries = 5;
-
 }  // namespace
 
 namespace captured_sites_test_utils {
@@ -81,7 +86,7 @@
         web_contents()->IsWaitingForResponse() || web_contents()->IsLoading();
     if (page_is_loading) {
       finished_load_time = base::TimeTicks::Now();
-    } else if (base::TimeTicks::Now() - finished_load_time >
+    } else if ((base::TimeTicks::Now() - finished_load_time) >
                continuous_paint_timeout) {
       // |continuous_paint_timeout| has expired since Chrome loaded the page.
       // During this period of time, Chrome has been continuously painting
@@ -93,6 +98,20 @@
   } while (page_is_loading || paint_occurred_during_last_loop_);
 }
 
+bool PageActivityObserver::WaitForVisualUpdate(base::TimeDelta timeout) {
+  base::TimeTicks start_time = base::TimeTicks::Now();
+  while (!paint_occurred_during_last_loop_) {
+    base::RunLoop heart_beat;
+    base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+        FROM_HERE, heart_beat.QuitClosure(), kPaintEventCheckInterval);
+    heart_beat.Run();
+    if ((base::TimeTicks::Now() - start_time) > timeout) {
+      return false;
+    }
+  }
+  return true;
+}
+
 void PageActivityObserver::DidCommitAndDrawCompositorFrame() {
   paint_occurred_during_last_loop_ = true;
 }
@@ -219,6 +238,10 @@
       << "Cannot install the root certificate "
       << "for the local web page replay server.";
   CleanupSiteData();
+
+  // Bypass permission dialogs.
+  PermissionRequestManager::FromWebContents(GetWebContents())
+      ->set_auto_response_for_test(PermissionRequestManager::ACCEPT_ALL);
 }
 
 void TestRecipeReplayer::Cleanup() {
@@ -237,6 +260,10 @@
   return feature_action_executor_;
 }
 
+Browser* TestRecipeReplayer::browser() {
+  return browser_;
+}
+
 content::WebContents* TestRecipeReplayer::GetWebContents() {
   return browser_->tab_strip_model()->GetActiveWebContents();
 }
@@ -464,12 +491,21 @@
     } else if (base::CompareCaseInsensitiveASCII(type, "click") == 0) {
       if (!ExecuteClickAction(*action))
         return false;
+    } else if (base::CompareCaseInsensitiveASCII(type, "hover") == 0) {
+      if (!ExecuteHoverAction(*action))
+        return false;
+    } else if (base::CompareCaseInsensitiveASCII(type, "pressEnter") == 0) {
+      if (!ExecutePressEnterAction(*action))
+        return false;
     } else if (base::CompareCaseInsensitiveASCII(type, "select") == 0) {
       if (!ExecuteSelectDropdownAction(*action))
         return false;
     } else if (base::CompareCaseInsensitiveASCII(type, "type") == 0) {
       if (!ExecuteTypeAction(*action))
         return false;
+    } else if (base::CompareCaseInsensitiveASCII(type, "typePassword") == 0) {
+      if (!ExecuteTypePasswordAction(*action))
+        return false;
     } else if (base::CompareCaseInsensitiveASCII(type, "validateField") == 0) {
       if (!ExecuteValidateFieldValueAction(*action))
         return false;
@@ -480,6 +516,13 @@
       ADD_FAILURE() << "Unrecognized action type: " << type;
     }
   }  // end foreach action
+
+  // Dismiss the beforeUnloadDialog if the last page of the test has a
+  // beforeUnload function.
+  if (recipe->FindKey("dismissBeforeUnload")) {
+    NavigateAwayAndDismissBeforeUnloadDialog();
+  }
+
   return true;
 }
 
@@ -573,6 +616,116 @@
   return true;
 }
 
+bool TestRecipeReplayer::ExecuteHoverAction(
+    const base::DictionaryValue& action) {
+  std::string xpath;
+  if (!GetTargetHTMLElementXpathFromAction(action, &xpath))
+    return false;
+
+  content::RenderFrameHost* frame;
+  if (!GetTargetFrameFromAction(action, &frame))
+    return false;
+
+  if (!WaitForElementToBeReady(frame, xpath))
+    return false;
+
+  VLOG(1) << "Hovering over `" << xpath << "`.";
+  PageActivityObserver page_activity_observer(frame);
+
+  int x, y;
+  if (!GetCenterCoordinateOfTargetElement(frame, xpath, x, y))
+    return false;
+
+  if (!SimulateMouseHoverAt(frame, gfx::Point(x, y)))
+    return false;
+
+  if (!page_activity_observer.WaitForVisualUpdate()) {
+    ADD_FAILURE() << "The page did not respond to a mouse hover action!";
+    return false;
+  }
+
+  return true;
+}
+
+bool TestRecipeReplayer::ExecutePressEnterAction(
+    const base::DictionaryValue& action) {
+  std::string xpath;
+  if (!GetTargetHTMLElementXpathFromAction(action, &xpath))
+    return false;
+
+  content::RenderFrameHost* frame;
+  if (!GetTargetFrameFromAction(action, &frame))
+    return false;
+
+  if (!WaitForElementToBeReady(frame, xpath))
+    return false;
+
+  VLOG(1) << "Press 'Enter' on `" << xpath << "`.";
+  PageActivityObserver page_activity_observer(frame);
+  if (!PlaceFocusOnElement(frame, xpath))
+    return false;
+
+  ui::DomKey key = ui::DomKey::ENTER;
+  ui::KeyboardCode key_code = ui::NonPrintableDomKeyToKeyboardCode(key);
+  ui::DomCode code = ui::UsLayoutKeyboardCodeToDomCode(key_code);
+  SimulateKeyPress(content::WebContents::FromRenderFrameHost(frame), key, code,
+                   key_code, false, false, false, false);
+  page_activity_observer.WaitTillPageIsIdle();
+  return true;
+}
+
+bool TestRecipeReplayer::ExecuteRunCommandAction(
+    const base::DictionaryValue& action) {
+  // Extract the list of JavaScript commands into a vector.
+  std::vector<std::string> commands;
+
+  const base::Value* commands_list_container = action.FindKey("commands");
+  if (!commands_list_container) {
+    ADD_FAILURE()
+        << "Failed to extract the list of commands from the run command "
+        << "action!";
+    return false;
+  }
+
+  if (base::Value::Type::LIST != commands_list_container->type()) {
+    ADD_FAILURE() << "commands is not an array!";
+    return false;
+  }
+
+  const base::Value::ListStorage& commands_list =
+      commands_list_container->GetList();
+  for (base::ListValue::const_iterator it_command = commands_list.begin();
+       it_command != commands_list.end(); ++it_command) {
+    if (base::Value::Type::STRING != it_command->type()) {
+      ADD_FAILURE() << "command is not a string!";
+      return false;
+    }
+    commands.push_back(it_command->GetString());
+  }
+
+  content::RenderFrameHost* frame;
+  if (!GetTargetFrameFromAction(action, &frame)) {
+    return false;
+  }
+
+  VLOG(1) << "Running JavaScript commands on the page.";
+
+  // Execute the commands.
+  PageActivityObserver page_activity_observer(frame);
+  for (const std::string& command : commands) {
+    if (!content::ExecuteScript(frame, command)) {
+      ADD_FAILURE() << "Failed to execute JavaScript command `" << command
+                    << "`!";
+      return false;
+    }
+    // Wait in case the JavaScript command triggers page load or layout
+    // changes.
+    page_activity_observer.WaitTillPageIsIdle();
+  }
+
+  return true;
+}
+
 bool TestRecipeReplayer::ExecuteSelectDropdownAction(
     const base::DictionaryValue& action) {
   const base::Value* index_container = action.FindKey("index");
@@ -657,6 +810,58 @@
   return true;
 }
 
+bool TestRecipeReplayer::ExecuteTypePasswordAction(
+    const base::DictionaryValue& action) {
+  std::string xpath;
+  if (!GetTargetHTMLElementXpathFromAction(action, &xpath))
+    return false;
+
+  content::RenderFrameHost* frame;
+  if (!GetTargetFrameFromAction(action, &frame))
+    return false;
+
+  if (!WaitForElementToBeReady(frame, xpath))
+    return false;
+
+  const base::Value* value_container = action.FindKey("value");
+  if (!value_container) {
+    ADD_FAILURE() << "Failed to extract the value from the type password"
+                  << " action!";
+    return false;
+  }
+
+  if (base::Value::Type::STRING != value_container->type()) {
+    ADD_FAILURE() << "Value is not a string!";
+    return false;
+  }
+
+  std::string value = value_container->GetString();
+
+  // Clear the password field first, in case a previous value is there.
+  if (!ExecuteJavaScriptOnElementByXpath(
+          frame, xpath,
+          "automation_helper.setInputElementValue(target, ``);")) {
+    ADD_FAILURE() << "Failed to execute JavaScript to clear the input value!";
+    return false;
+  }
+
+  if (!PlaceFocusOnElement(frame, xpath))
+    return false;
+
+  VLOG(1) << "Typing '" << value << "' inside `" << xpath << "`.";
+
+  const char* c_array = value.c_str();
+  for (size_t index = 0; index < value.size(); index++) {
+    ui::DomKey key = ui::DomKey::FromCharacter(c_array[index]);
+    ui::KeyboardCode key_code = ui::NonPrintableDomKeyToKeyboardCode(key);
+    ui::DomCode code = ui::UsLayoutKeyboardCodeToDomCode(key_code);
+    SimulateKeyPress(content::WebContents::FromRenderFrameHost(frame), key,
+                     code, key_code, false, false, false, false);
+  }
+
+  return true;
+}
+
 bool TestRecipeReplayer::ExecuteValidateFieldValueAction(
     const base::DictionaryValue& action) {
   std::string xpath;
@@ -986,9 +1191,66 @@
   }
 }
 
+bool TestRecipeReplayer::GetCenterCoordinateOfTargetElement(
+    content::RenderFrameHost* frame,
+    const std::string& target_element_xpath,
+    int& x,
+    int& y) {
+  const std::string get_target_field_x_js(base::StringPrintf(
+      "window.domAutomationController.send("
+      "    (function() {"
+      "       try {"
+      "         const element = automation_helper.getElementByXpath(`%s`);"
+      "         const rect = element.getBoundingClientRect();"
+      "         console.log(`Window href x: ${location.href}`);"
+      "         return Math.floor(rect.left + rect.width / 2);"
+      "       } catch(ex) {}"
+      "       return -1;"
+      "    })());",
+      target_element_xpath.c_str()));
+  const std::string get_target_field_y_js(base::StringPrintf(
+      "window.domAutomationController.send("
+      "    (function() {"
+      "       try {"
+      "         const element = automation_helper.getElementByXpath(`%s`);"
+      "         const rect = element.getBoundingClientRect();"
+      "         console.log(`Window href y: ${location.href}`);"
+      "         return Math.floor(rect.top + rect.height / 2);"
+      "       } catch(ex) {}"
+      "       return -1;"
+      "    })());",
+      target_element_xpath.c_str()));
+  if (!content::ExecuteScriptAndExtractInt(frame, get_target_field_x_js, &x)) {
+    ADD_FAILURE()
+        << "Failed to run script to extract target element's x coordinate!";
+    return false;
+  }
+
+  if (x == -1) {
+    ADD_FAILURE() << "Failed to extract target element's x coordinate!";
+    return false;
+  }
+
+  if (!content::ExecuteScriptAndExtractInt(frame, get_target_field_y_js, &y)) {
+    ADD_FAILURE()
+        << "Failed to run script to extract target element's y coordinate!";
+    return false;
+  }
+
+  if (y == -1) {
+    ADD_FAILURE() << "Failed to extract target element's y coordinate!";
+    return false;
+  }
+
+  return true;
+}
+
 bool TestRecipeReplayer::SimulateLeftMouseClickAt(
     content::RenderFrameHost* render_frame_host,
     const gfx::Point& point) {
+  if (!SimulateMouseHoverAt(render_frame_host, point))
+    return false;
+
   blink::WebMouseEvent mouse_event(
       blink::WebInputEvent::kMouseDown, blink::WebInputEvent::kNoModifiers,
       blink::WebInputEvent::GetStaticTimeStampForTests());
@@ -1005,20 +1267,37 @@
   content::RenderWidgetHost* widget =
       render_frame_host->GetView()->GetRenderWidgetHost();
 
-  gfx::Point reset_mouse(offset.origin());
-  reset_mouse =
-      gfx::Point(reset_mouse.x() + point.x(), reset_mouse.y() + point.y());
-  if (!ui_test_utils::SendMouseMoveSync(reset_mouse)) {
-    ADD_FAILURE() << "Failed to position the mouse!";
-    return false;
-  }
-
   widget->ForwardMouseEvent(mouse_event);
   mouse_event.SetType(blink::WebInputEvent::kMouseUp);
   widget->ForwardMouseEvent(mouse_event);
   return true;
 }
 
+bool TestRecipeReplayer::SimulateMouseHoverAt(
+    content::RenderFrameHost* render_frame_host,
+    const gfx::Point& point) {
+  gfx::Rect offset =
+      content::WebContents::FromRenderFrameHost(render_frame_host)
+          ->GetContainerBounds();
+  gfx::Point reset_mouse =
+      gfx::Point(offset.x() + point.x(), offset.y() + point.y());
+  if (!ui_test_utils::SendMouseMoveSync(reset_mouse)) {
+    ADD_FAILURE() << "Failed to position the mouse!";
+    return false;
+  }
+  return true;
+}
+
+void TestRecipeReplayer::NavigateAwayAndDismissBeforeUnloadDialog() {
+  content::PrepContentsForBeforeUnloadTest(GetWebContents());
+  ui_test_utils::NavigateToURLWithDisposition(
+      browser(), GURL(url::kAboutBlankURL), WindowOpenDisposition::CURRENT_TAB,
+      ui_test_utils::BROWSER_TEST_NONE);
+  app_modal::JavaScriptAppModalDialog* alert =
+      ui_test_utils::WaitForAppModalDialog();
+  alert->native_dialog()->AcceptAppModalDialog();
+}
+
 // TestRecipeReplayChromeFeatureActionExecutor --------------------------------
 TestRecipeReplayChromeFeatureActionExecutor::
     TestRecipeReplayChromeFeatureActionExecutor() {}
diff --git a/chrome/browser/autofill/captured_sites_test_utils.h b/chrome/browser/autofill/captured_sites_test_utils.h
index 93e80264..5b8a3b92 100644
--- a/chrome/browser/autofill/captured_sites_test_utils.h
+++ b/chrome/browser/autofill/captured_sites_test_utils.h
@@ -27,6 +27,10 @@
 //    has expired for the page to load or for the page to respond to the last
 //    user action.
 const base::TimeDelta default_action_timeout = base::TimeDelta::FromSeconds(30);
+// The amount of time to wait for a page to trigger a paint in response to a
+// an ation. The Captured Site Automation Framework uses this timeout to
+// break out of a wait loop after a hover action.
+const base::TimeDelta visual_update_timeout = base::TimeDelta::FromSeconds(5);
 
 std::string FilePathToUTF8(const base::FilePath::StringType& str);
 
@@ -68,6 +72,9 @@
   // finished loading the page.
   void WaitTillPageIsIdle(
       base::TimeDelta continuous_paint_timeout = default_action_timeout);
+  // Wait until Chrome makes at least 1 visual update, or until timeout
+  // expires.
+  bool WaitForVisualUpdate(base::TimeDelta timeout = visual_update_timeout);
 
  private:
   // PageActivityObserver determines if Chrome stopped painting by checking if
@@ -185,11 +192,19 @@
   static void SetUpCommandLine(base::CommandLine* command_line);
   static bool PlaceFocusOnElement(content::RenderFrameHost* frame,
                                   const std::string& element_xpath);
+  static bool GetCenterCoordinateOfTargetElement(
+      content::RenderFrameHost* frame,
+      const std::string& target_element_xpath,
+      int& x,
+      int& y);
   static bool SimulateLeftMouseClickAt(
       content::RenderFrameHost* render_frame_host,
       const gfx::Point& point);
+  static bool SimulateMouseHoverAt(content::RenderFrameHost* render_frame_host,
+                                   const gfx::Point& point);
 
  private:
+  Browser* browser();
   TestRecipeReplayChromeFeatureActionExecutor* feature_action_executor();
   content::WebContents* GetWebContents();
   void CleanupSiteData();
@@ -209,8 +224,12 @@
       std::unique_ptr<base::DictionaryValue>& recipe);
   bool ExecuteAutofillAction(const base::DictionaryValue& action);
   bool ExecuteClickAction(const base::DictionaryValue& action);
+  bool ExecuteHoverAction(const base::DictionaryValue& action);
+  bool ExecutePressEnterAction(const base::DictionaryValue& action);
+  bool ExecuteRunCommandAction(const base::DictionaryValue& action);
   bool ExecuteSelectDropdownAction(const base::DictionaryValue& action);
   bool ExecuteTypeAction(const base::DictionaryValue& action);
+  bool ExecuteTypePasswordAction(const base::DictionaryValue& action);
   bool ExecuteValidateFieldValueAction(const base::DictionaryValue& action);
   bool ExecuteWaitForStateAction(const base::DictionaryValue& action);
   bool GetTargetHTMLElementXpathFromAction(const base::DictionaryValue& action,
@@ -236,6 +255,7 @@
       const std::string& get_property_function_body,
       const std::string& expected_value,
       const bool ignoreCase = false);
+  void NavigateAwayAndDismissBeforeUnloadDialog();
 
   Browser* browser_;
   TestRecipeReplayChromeFeatureActionExecutor* feature_action_executor_;
diff --git a/chrome/browser/browser_switcher/alternative_browser_driver.cc b/chrome/browser/browser_switcher/alternative_browser_driver.cc
new file mode 100644
index 0000000..2460d6014
--- /dev/null
+++ b/chrome/browser/browser_switcher/alternative_browser_driver.cc
@@ -0,0 +1,214 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/browser_switcher/alternative_browser_driver.h"
+
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/process/launch.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/win/registry.h"
+#include "chrome/browser/browser_switcher/alternative_browser_launcher.h"
+#include "url/gurl.h"
+
+#include <ddeml.h>
+#include <shellapi.h>
+#include <shlobj.h>
+#include <windows.h>
+#include <wininet.h>
+
+namespace browser_switcher {
+
+namespace {
+
+const wchar_t kUrlVarName[] = L"${url}";
+
+const wchar_t kIExploreKey[] =
+    L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\IEXPLORE.EXE";
+const wchar_t kFirefoxKey[] =
+    L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\firefox.exe";
+// Opera does not register itself here for now but it's no harm to keep this.
+const wchar_t kOperaKey[] =
+    L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\opera.exe";
+const wchar_t kSafariKey[] =
+    L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\safari.exe";
+const wchar_t kChromeKey[] =
+    L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.exe";
+
+const wchar_t kIExploreDdeHost[] = L"IExplore";
+
+const wchar_t kChromeVarName[] = L"${chrome}";
+const wchar_t kIEVarName[] = L"${ie}";
+const wchar_t kFirefoxVarName[] = L"${firefox}";
+const wchar_t kOperaVarName[] = L"${opera}";
+const wchar_t kSafariVarName[] = L"${safari}";
+
+const struct {
+  const wchar_t* var_name;
+  const wchar_t* registry_key;
+  const wchar_t* dde_host;
+} kBrowserVarMappings[] = {
+    {kChromeVarName, kChromeKey, L""},
+    {kIEVarName, kIExploreKey, kIExploreDdeHost},
+    {kFirefoxVarName, kFirefoxKey, L""},
+    {kOperaVarName, kOperaKey, L""},
+    {kSafariVarName, kSafariKey, L""},
+};
+
+// DDE Callback function which is not used in our case at all.
+HDDEDATA CALLBACK DdeCallback(UINT type,
+                              UINT format,
+                              HCONV handle,
+                              HSZ string1,
+                              HSZ string2,
+                              HDDEDATA data,
+                              ULONG_PTR data1,
+                              ULONG_PTR data2) {
+  return NULL;
+}
+
+void PercentEncodeCommas(std::wstring* url) {
+  size_t pos = url->find(L",");
+  while (pos != std::wstring::npos) {
+    url->replace(pos, 1, L"%2C");
+    pos = url->find(L",", pos);
+  }
+}
+
+std::wstring CompileCommandLine(const std::wstring& raw_command_line,
+                                const GURL& url) {
+  std::wstring url_spec = base::UTF8ToWide(GURL(url).spec());
+  std::wstring command_line = raw_command_line;
+  size_t pos = command_line.find(kUrlVarName);
+  if (pos != command_line.npos) {
+    command_line = command_line.replace(pos, wcslen(kUrlVarName), url_spec);
+  } else {
+    if (command_line.empty())
+      command_line = url_spec;
+    else
+      command_line.append(L" ").append(url_spec);
+  }
+  return command_line;
+}
+
+std::wstring GetBrowserLocation(const wchar_t* regkey_name) {
+  DCHECK(regkey_name);
+  base::win::RegKey key;
+  if (ERROR_SUCCESS != key.Open(HKEY_LOCAL_MACHINE, regkey_name, KEY_READ) &&
+      ERROR_SUCCESS != key.Open(HKEY_CURRENT_USER, regkey_name, KEY_READ)) {
+    LOG(ERROR) << "Could not open registry key " << regkey_name
+               << "! Error Code:" << GetLastError();
+    return std::wstring();
+  }
+  std::wstring location;
+  if (ERROR_SUCCESS != key.ReadValue(NULL, &location))
+    return std::wstring();
+  return location;
+}
+
+}  // namespace
+
+AlternativeBrowserDriver::~AlternativeBrowserDriver() {}
+
+AlternativeBrowserDriverImpl::AlternativeBrowserDriverImpl() {}
+AlternativeBrowserDriverImpl::~AlternativeBrowserDriverImpl() {}
+
+void AlternativeBrowserDriverImpl::SetBrowserPath(base::StringPiece path) {
+  browser_path_ = base::UTF8ToWide(path);
+  dde_host_ = std::wstring();
+  if (browser_path_.empty()) {
+    browser_path_ = GetBrowserLocation(kIExploreKey);
+    dde_host_ = kIExploreDdeHost;
+    return;
+  }
+  for (const auto& mapping : kBrowserVarMappings) {
+    if (browser_path_.compare(mapping.var_name)) {
+      browser_path_ = GetBrowserLocation(mapping.registry_key);
+      dde_host_ = mapping.dde_host;
+    }
+  }
+}
+
+void AlternativeBrowserDriverImpl::SetBrowserParameters(
+    base::StringPiece parameters) {
+  browser_params_ = base::UTF8ToWide(parameters);
+}
+
+bool AlternativeBrowserDriverImpl::TryLaunch(const GURL& url) {
+  VLOG(2) << "Launching alternative browser...";
+  VLOG(2) << "  path = " << browser_path_;
+  VLOG(2) << "  parameters = " << browser_params_;
+  VLOG(2) << "  dde_host = " << dde_host_;
+  VLOG(2) << "  url = " << url.spec();
+  return (TryLaunchWithDde(url) || TryLaunchWithExec(url));
+}
+
+bool AlternativeBrowserDriverImpl::TryLaunchWithDde(const GURL& url) {
+  DWORD dde_instance = 0;
+  if (DdeInitialize(&dde_instance, DdeCallback, CBF_FAIL_ALLSVRXACTIONS, 0) !=
+      DMLERR_NO_ERROR) {
+    return false;
+  }
+
+  bool success = false;
+  HCONV openurl_service_instance;
+  HCONV activate_service_instance;
+  {
+    HSZ service =
+        DdeCreateStringHandle(dde_instance, dde_host_.c_str(), CP_WINUNICODE);
+    HSZ openurl_topic =
+        DdeCreateStringHandle(dde_instance, L"WWW_OpenURL", CP_WINUNICODE);
+    HSZ activate_topic =
+        DdeCreateStringHandle(dde_instance, L"WWW_Activate", CP_WINUNICODE);
+    openurl_service_instance =
+        DdeConnect(dde_instance, service, openurl_topic, NULL);
+    activate_service_instance =
+        DdeConnect(dde_instance, service, activate_topic, NULL);
+    DdeFreeStringHandle(dde_instance, service);
+    DdeFreeStringHandle(dde_instance, openurl_topic);
+    DdeFreeStringHandle(dde_instance, activate_topic);
+  }
+
+  if (openurl_service_instance) {
+    // Percent-encode commas and spaces because those mean something else
+    // for the WWW_OpenURL verb and the url is trimmed on the first one.
+    // Spaces are already encoded by GURL.
+    std::wstring encoded_url(base::UTF8ToWide(url.spec()));
+    PercentEncodeCommas(&encoded_url);
+
+    success =
+        DdeClientTransaction(
+            reinterpret_cast<LPBYTE>(const_cast<wchar_t*>(encoded_url.data())),
+            encoded_url.size() * sizeof(wchar_t), openurl_service_instance, 0,
+            0, XTYP_EXECUTE, TIMEOUT_ASYNC, NULL) != 0;
+    DdeDisconnect(openurl_service_instance);
+    if (activate_service_instance) {
+      if (success) {
+        // Bring window to the front.
+        wchar_t cmd[] = L"0xFFFFFFFF,0x0";
+        DdeClientTransaction(reinterpret_cast<LPBYTE>(cmd), sizeof(cmd),
+                             activate_service_instance, 0, 0, XTYP_EXECUTE,
+                             TIMEOUT_ASYNC, NULL);
+      }
+      DdeDisconnect(activate_service_instance);
+    }
+  }
+  DdeUninitialize(dde_instance);
+  return success;
+}
+
+bool AlternativeBrowserDriverImpl::TryLaunchWithExec(const GURL& url) {
+  base::CommandLine cmd_line = base::CommandLine(base::FilePath(browser_path_));
+  cmd_line.AppendArgNative(
+      base::WideToUTF16(CompileCommandLine(browser_params_, url)));
+  base::LaunchOptions options;
+  if (!base::LaunchProcess(cmd_line, options).IsValid()) {
+    LOG(ERROR) << "Could not start the alternative browser! Error: "
+               << GetLastError();
+    return false;
+  }
+  return true;
+}
+
+}  // namespace browser_switcher
diff --git a/chrome/browser/browser_switcher/alternative_browser_driver.h b/chrome/browser/browser_switcher/alternative_browser_driver.h
new file mode 100644
index 0000000..4f76d07d
--- /dev/null
+++ b/chrome/browser/browser_switcher/alternative_browser_driver.h
@@ -0,0 +1,66 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_BROWSER_SWITCHER_ALTERNATIVE_BROWSER_DRIVER_H_
+#define CHROME_BROWSER_BROWSER_SWITCHER_ALTERNATIVE_BROWSER_DRIVER_H_
+
+#include "base/macros.h"
+#include "base/strings/string_piece_forward.h"
+
+class GURL;
+
+namespace browser_switcher {
+
+// Interface for a helper class that does I/O operations for an
+// |AlternativeBrowserLauncher|.
+//
+// - Reading from the Windows Registry
+// - Communicating with an external process using the DDE protocol
+// - Launching an external process
+class AlternativeBrowserDriver {
+ public:
+  virtual ~AlternativeBrowserDriver();
+
+  // Updates the executable path that will be used for the browser when it is
+  // launched. |path| is not necessarily a valid file path. It may be a
+  // placeholder such as "${ie}".
+  virtual void SetBrowserPath(base::StringPiece path) = 0;
+
+  // Updates the command-line parameters to give to the browser when it is
+  // launched.
+  virtual void SetBrowserParameters(base::StringPiece parameters) = 0;
+
+  // Tries to launch |browser| at the specified URL with DDE, using whatever
+  // method is most appropriate.
+  virtual bool TryLaunch(const GURL& url) = 0;
+};
+
+// Default concrete implementation for |AlternativeBrowserDriver|. This uses
+// Windows primitives to access
+class AlternativeBrowserDriverImpl : public AlternativeBrowserDriver {
+ public:
+  AlternativeBrowserDriverImpl();
+  ~AlternativeBrowserDriverImpl() override;
+
+  // AlternativeBrowserDriver
+  void SetBrowserPath(base::StringPiece path) override;
+  void SetBrowserParameters(base::StringPiece parameters) override;
+  bool TryLaunch(const GURL& url) override;
+
+ private:
+  // Tries to launch |browser| at the specified URL with DDE, using whatever
+  bool TryLaunchWithDde(const GURL& url);
+  bool TryLaunchWithExec(const GURL& url);
+
+  // Info on how to launch the currently-selected alternate browser.
+  std::wstring browser_path_;
+  std::wstring browser_params_;
+  std::wstring dde_host_;
+
+  DISALLOW_COPY_AND_ASSIGN(AlternativeBrowserDriverImpl);
+};
+
+}  // namespace browser_switcher
+
+#endif  // CHROME_BROWSER_BROWSER_SWITCHER_ALTERNATIVE_BROWSER_DRIVER_H_
diff --git a/chrome/browser/browser_switcher/alternative_browser_launcher.cc b/chrome/browser/browser_switcher/alternative_browser_launcher.cc
new file mode 100644
index 0000000..51acc5c
--- /dev/null
+++ b/chrome/browser/browser_switcher/alternative_browser_launcher.cc
@@ -0,0 +1,60 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/browser_switcher/alternative_browser_launcher.h"
+
+#include "base/bind.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
+#include "components/prefs/pref_service.h"
+#include "url/gurl.h"
+
+namespace browser_switcher {
+
+AlternativeBrowserLauncher::AlternativeBrowserLauncher(PrefService* prefs)
+    : AlternativeBrowserLauncher(
+          prefs,
+          std::make_unique<AlternativeBrowserDriverImpl>()) {}
+
+AlternativeBrowserLauncher::AlternativeBrowserLauncher(
+    PrefService* prefs,
+    std::unique_ptr<AlternativeBrowserDriver> driver)
+    : prefs_(prefs), driver_(std::move(driver)) {
+  DCHECK(prefs_);
+  DCHECK(driver_);
+  change_registrar_.Init(prefs);
+  change_registrar_.Add(
+      prefs::kAlternativeBrowserPath,
+      base::BindRepeating(&AlternativeBrowserLauncher::OnAltBrowserPathChanged,
+                          base::Unretained(this)));
+  change_registrar_.Add(
+      prefs::kAlternativeBrowserParameters,
+      base::BindRepeating(
+          &AlternativeBrowserLauncher::OnAltBrowserParametersChanged,
+          base::Unretained(this)));
+  // Ensure |alt_browser_| is initialized.
+  OnAltBrowserPathChanged();
+  OnAltBrowserParametersChanged();
+}
+
+AlternativeBrowserLauncher::~AlternativeBrowserLauncher() {}
+
+void AlternativeBrowserLauncher::OnAltBrowserPathChanged() {
+  // This string could be a variable, e.g. "${ie}". Let the driver decide what
+  // to do with it.
+  driver_->SetBrowserPath(prefs_->GetString(prefs::kAlternativeBrowserPath));
+}
+
+void AlternativeBrowserLauncher::OnAltBrowserParametersChanged() {
+  // This string could contain a placeholder, e.g. "${url}". Let the driver
+  // decide what to do with it.
+  driver_->SetBrowserParameters(
+      prefs_->GetString(prefs::kAlternativeBrowserParameters));
+}
+
+bool AlternativeBrowserLauncher::Launch(const GURL& url) const {
+  return driver_->TryLaunch(url);
+}
+
+}  // namespace browser_switcher
diff --git a/chrome/browser/browser_switcher/alternative_browser_launcher.h b/chrome/browser/browser_switcher/alternative_browser_launcher.h
new file mode 100644
index 0000000..d5c873c
--- /dev/null
+++ b/chrome/browser/browser_switcher/alternative_browser_launcher.h
@@ -0,0 +1,48 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_BROWSER_SWITCHER_ALTERNATIVE_BROWSER_LAUNCHER_H_
+#define CHROME_BROWSER_BROWSER_SWITCHER_ALTERNATIVE_BROWSER_LAUNCHER_H_
+
+#include "base/macros.h"
+
+#include "chrome/browser/browser_switcher/alternative_browser_driver.h"
+#include "components/prefs/pref_change_registrar.h"
+#include "content/public/browser/web_contents_observer.h"
+
+class PrefService;
+class GURL;
+
+namespace browser_switcher {
+
+// Used to launch an appropriate alternative browser based on policy/pref
+// values.
+//
+// Delegates I/O operations to an |AlternativeBrowserDriver|.
+class AlternativeBrowserLauncher : public content::WebContentsObserver {
+ public:
+  explicit AlternativeBrowserLauncher(PrefService* prefs);
+  AlternativeBrowserLauncher(PrefService* prefs,
+                             std::unique_ptr<AlternativeBrowserDriver> driver);
+  ~AlternativeBrowserLauncher() override;
+
+  // Opens |url| in an alternative browser.  Returns true on success, false on
+  // error.
+  bool Launch(const GURL& url) const;
+
+ private:
+  void OnAltBrowserPathChanged();
+  void OnAltBrowserParametersChanged();
+
+  PrefService* const prefs_;
+  PrefChangeRegistrar change_registrar_;
+
+  const std::unique_ptr<AlternativeBrowserDriver> driver_;
+
+  DISALLOW_COPY_AND_ASSIGN(AlternativeBrowserLauncher);
+};
+
+}  // namespace browser_switcher
+
+#endif  // CHROME_BROWSER_BROWSER_SWITCHER_ALTERNATIVE_BROWSER_LAUNCHER_H_
diff --git a/chrome/browser/browser_switcher/alternative_browser_launcher_unittest.cc b/chrome/browser/browser_switcher/alternative_browser_launcher_unittest.cc
new file mode 100644
index 0000000..52b8f9a
--- /dev/null
+++ b/chrome/browser/browser_switcher/alternative_browser_launcher_unittest.cc
@@ -0,0 +1,86 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/browser_switcher/alternative_browser_launcher.h"
+
+#include "base/values.h"
+#include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
+#include "components/prefs/pref_registry_simple.h"
+#include "components/prefs/testing_pref_service.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+using ::testing::Invoke;
+using ::testing::Return;
+using ::testing::_;
+
+namespace browser_switcher {
+
+namespace {
+
+const char kExampleDotCom[] = "http://example.com/";
+
+class MockAlternativeBrowserDriver : public AlternativeBrowserDriver {
+ public:
+  MockAlternativeBrowserDriver() = default;
+  ~MockAlternativeBrowserDriver() override = default;
+
+  MOCK_METHOD1(SetBrowserPath, void(base::StringPiece));
+  MOCK_METHOD1(SetBrowserParameters, void(base::StringPiece));
+  MOCK_METHOD1(TryLaunch, bool(const GURL&));
+};
+
+}  // namespace
+
+class AlternativeBrowserLauncherTest : public testing::Test {
+ public:
+  void SetUp() override {
+    prefs_.registry()->RegisterStringPref(prefs::kAlternativeBrowserPath, "");
+    prefs_.registry()->RegisterStringPref(prefs::kAlternativeBrowserParameters,
+                                          "");
+    driver_ = new MockAlternativeBrowserDriver();
+    EXPECT_CALL(*driver_, SetBrowserPath(_));
+    EXPECT_CALL(*driver_, SetBrowserParameters(_));
+    launcher_ = std::make_unique<AlternativeBrowserLauncher>(
+        &prefs_, std::unique_ptr<AlternativeBrowserDriver>(driver_));
+  }
+
+  PrefService* prefs() { return &prefs_; }
+  AlternativeBrowserLauncher* launcher() { return launcher_.get(); }
+  MockAlternativeBrowserDriver& driver() { return *driver_; }
+
+ private:
+  TestingPrefServiceSimple prefs_;
+
+  std::unique_ptr<AlternativeBrowserLauncher> launcher_;
+  MockAlternativeBrowserDriver* driver_;
+};
+
+TEST_F(AlternativeBrowserLauncherTest, LaunchSucceeds) {
+  EXPECT_CALL(driver(), TryLaunch(_)).WillOnce(Invoke([](const GURL& url) {
+    EXPECT_EQ(kExampleDotCom, url.spec());
+    return true;
+  }));
+  EXPECT_TRUE(launcher()->Launch(GURL(kExampleDotCom)));
+}
+
+TEST_F(AlternativeBrowserLauncherTest, LaunchFails) {
+  EXPECT_CALL(driver(), TryLaunch(_)).WillOnce(Return(false));
+  EXPECT_FALSE(launcher()->Launch(GURL(kExampleDotCom)));
+}
+
+TEST_F(AlternativeBrowserLauncherTest, LaunchPicksUpPrefChanges) {
+  EXPECT_CALL(driver(), SetBrowserPath(_))
+      .WillOnce(
+          Invoke([](base::StringPiece path) { EXPECT_EQ("bogus.exe", path); }));
+  prefs()->SetString(prefs::kAlternativeBrowserPath, "bogus.exe");
+  EXPECT_CALL(driver(), SetBrowserParameters(_))
+      .WillOnce(Invoke([](base::StringPiece parameters) {
+        EXPECT_EQ("--single-process", parameters);
+      }));
+  prefs()->SetString(prefs::kAlternativeBrowserParameters, "--single-process");
+}
+
+}  // namespace browser_switcher
diff --git a/chrome/browser/browser_switcher/browser_switcher_prefs.cc b/chrome/browser/browser_switcher/browser_switcher_prefs.cc
index f5d9c3e..a85088c 100644
--- a/chrome/browser/browser_switcher/browser_switcher_prefs.cc
+++ b/chrome/browser/browser_switcher/browser_switcher_prefs.cc
@@ -9,6 +9,16 @@
 namespace browser_switcher {
 namespace prefs {
 
+// Path to the executable of the alternative browser, or one of "${chrome}",
+// "${ie}", "${firefox}", "${opera}", "${safari}".
+const char kAlternativeBrowserPath[] =
+    "browser_switcher.alternative_browser_path";
+
+// Arguments to pass to the alternative browser when invoking it via
+// |ShellExecute()|.
+const char kAlternativeBrowserParameters[] =
+    "browser_switcher.alternative_browser_parameters";
+
 // List of host domain names to be opened in an alternative browser.
 const char kUrlList[] = "browser_switcher.url_list";
 
@@ -16,6 +26,8 @@
 const char kUrlGreylist[] = "browser_switcher.url_greylist";
 
 void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
+  registry->RegisterStringPref(prefs::kAlternativeBrowserPath, "");
+  registry->RegisterStringPref(prefs::kAlternativeBrowserParameters, "");
   registry->RegisterListPref(prefs::kUrlList);
   registry->RegisterListPref(prefs::kUrlGreylist);
 }
diff --git a/chrome/browser/browser_switcher/browser_switcher_prefs.h b/chrome/browser/browser_switcher/browser_switcher_prefs.h
index 8fdcafe..4d83d4a 100644
--- a/chrome/browser/browser_switcher/browser_switcher_prefs.h
+++ b/chrome/browser/browser_switcher/browser_switcher_prefs.h
@@ -12,6 +12,8 @@
 namespace browser_switcher {
 namespace prefs {
 
+extern const char kAlternativeBrowserPath[];
+extern const char kAlternativeBrowserParameters[];
 extern const char kUrlList[];
 extern const char kUrlGreylist[];
 
diff --git a/chrome/browser/browser_switcher/browser_switcher_sitelist.cc b/chrome/browser/browser_switcher/browser_switcher_sitelist.cc
index 46b233c..155a519 100644
--- a/chrome/browser/browser_switcher/browser_switcher_sitelist.cc
+++ b/chrome/browser/browser_switcher/browser_switcher_sitelist.cc
@@ -85,7 +85,7 @@
 
 BrowserSwitcherSitelist::~BrowserSwitcherSitelist() {}
 
-bool BrowserSwitcherSitelist::ShouldRedirect(const GURL& url) const {
+bool BrowserSwitcherSitelist::ShouldSwitch(const GURL& url) const {
   // Translated from the LBS extension:
   // https://github.com/LegacyBrowserSupport/legacy-browser-support/blob/8caa623692b94dc0154074ce904de8f60ee8a404/chrome_extension/js/extension_logic.js#L205
   if (!url.SchemeIsHTTPOrHTTPS() && !url.SchemeIsFile()) {
diff --git a/chrome/browser/browser_switcher/browser_switcher_sitelist.h b/chrome/browser/browser_switcher/browser_switcher_sitelist.h
index 2ac12f8..d117f088 100644
--- a/chrome/browser/browser_switcher/browser_switcher_sitelist.h
+++ b/chrome/browser/browser_switcher/browser_switcher_sitelist.h
@@ -21,7 +21,7 @@
   ~BrowserSwitcherSitelist();
 
   // Returns true if the given URL should be open in an alternative browser.
-  bool ShouldRedirect(const GURL& url) const;
+  bool ShouldSwitch(const GURL& url) const;
 
  private:
   PrefService* const prefs_;
diff --git a/chrome/browser/browser_switcher/browser_switcher_sitelist_unittest.cc b/chrome/browser/browser_switcher/browser_switcher_sitelist_unittest.cc
index e22bd15..ecccc16 100644
--- a/chrome/browser/browser_switcher/browser_switcher_sitelist_unittest.cc
+++ b/chrome/browser/browser_switcher/browser_switcher_sitelist_unittest.cc
@@ -45,84 +45,81 @@
 TEST_F(BrowserSwitcherSitelistTest, ShouldRedirectWildcard) {
   // A "*" by itself means everything matches.
   Initialize({"*"}, {});
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("http://example.com/")));
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("https://example.com/foobar/")));
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("http://example.com/foobar/")));
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("http://google.com/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://example.com/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("https://example.com/foobar/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://example.com/foobar/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://google.com/")));
 }
 
 TEST_F(BrowserSwitcherSitelistTest, ShouldRedirectHost) {
   // A string without slashes means compare the URL's host (case-insensitive).
   Initialize({"example.com"}, {});
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("http://example.com/")));
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("https://example.com/")));
-  EXPECT_TRUE(
-      sitelist()->ShouldRedirect(GURL("http://subdomain.example.com/")));
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("http://example.com/foobar/")));
-  EXPECT_FALSE(sitelist()->ShouldRedirect(GURL("http://google.com/")));
-  EXPECT_FALSE(sitelist()->ShouldRedirect(GURL("http://example.ca/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://example.com/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("https://example.com/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://subdomain.example.com/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://example.com/foobar/")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("http://google.com/")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("http://example.ca/")));
 
   // For backwards compatibility, this should also match, even if it's not the
   // same host.
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("https://notexample.com/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("https://notexample.com/")));
 }
 
 TEST_F(BrowserSwitcherSitelistTest, ShouldRedirectHostNotLowerCase) {
   // Host is not in lowercase form, but we compare ignoring case.
   Initialize({"eXaMpLe.CoM"}, {});
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("http://example.com/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://example.com/")));
 }
 
 TEST_F(BrowserSwitcherSitelistTest, ShouldRedirectWrongScheme) {
   Initialize({"example.com"}, {});
   // Scheme is not one of 'http', 'https' or 'file'.
-  EXPECT_FALSE(sitelist()->ShouldRedirect(GURL("ftp://example.com/")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("ftp://example.com/")));
 }
 
 TEST_F(BrowserSwitcherSitelistTest, ShouldRedirectPrefix) {
   // A string with slashes means check if it's a prefix (case-sensitive).
   Initialize({"http://example.com/foobar"}, {});
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("http://example.com/foobar")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://example.com/foobar")));
   EXPECT_TRUE(
-      sitelist()->ShouldRedirect(GURL("http://example.com/foobar/subroute/")));
+      sitelist()->ShouldSwitch(GURL("http://example.com/foobar/subroute/")));
   EXPECT_TRUE(
-      sitelist()->ShouldRedirect(GURL("http://example.com/foobar#fragment")));
-  EXPECT_TRUE(sitelist()->ShouldRedirect(
-      GURL("http://example.com/foobar?query=param")));
-  EXPECT_FALSE(sitelist()->ShouldRedirect(GURL("http://example.com/")));
-  EXPECT_FALSE(sitelist()->ShouldRedirect(GURL("https://example.com/foobar")));
-  EXPECT_FALSE(sitelist()->ShouldRedirect(GURL("HTTP://EXAMPLE.COM/FOOBAR")));
-  EXPECT_FALSE(
-      sitelist()->ShouldRedirect(GURL("http://subdomain.example.com/")));
-  EXPECT_FALSE(sitelist()->ShouldRedirect(GURL("http://google.com/")));
+      sitelist()->ShouldSwitch(GURL("http://example.com/foobar#fragment")));
+  EXPECT_TRUE(
+      sitelist()->ShouldSwitch(GURL("http://example.com/foobar?query=param")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("http://example.com/")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("https://example.com/foobar")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("HTTP://EXAMPLE.COM/FOOBAR")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("http://subdomain.example.com/")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("http://google.com/")));
 }
 
 TEST_F(BrowserSwitcherSitelistTest, ShouldRedirectPrefixNotLowerCase) {
   // The scheme and host are case-insensitive, but the rest is case-sensitive.
   Initialize({"HTTP://EXAMPLE.COM/SUBROUTE"}, {});
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("http://example.com/SUBROUTE")));
-  EXPECT_FALSE(sitelist()->ShouldRedirect(GURL("http://example.com/subroute")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://example.com/SUBROUTE")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("http://example.com/subroute")));
 }
 
 TEST_F(BrowserSwitcherSitelistTest, ShouldRedirectInvertedMatch) {
   // The most specific (i.e., longest string) rule should have priority.
   Initialize({"!subdomain.example.com", "example.com"}, {});
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("http://example.com/")));
-  EXPECT_FALSE(
-      sitelist()->ShouldRedirect(GURL("http://subdomain.example.com/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://example.com/")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("http://subdomain.example.com/")));
 }
 
 TEST_F(BrowserSwitcherSitelistTest, ShouldRedirectGreylist) {
   // The most specific (i.e., longest string) rule should have priority.
   Initialize({"example.com"}, {"http://example.com/login/"});
-  EXPECT_TRUE(sitelist()->ShouldRedirect(GURL("http://example.com/")));
-  EXPECT_FALSE(sitelist()->ShouldRedirect(GURL("http://example.com/login/")));
+  EXPECT_TRUE(sitelist()->ShouldSwitch(GURL("http://example.com/")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("http://example.com/login/")));
 }
 
 TEST_F(BrowserSwitcherSitelistTest, ShouldRedirectGreylistWildcard) {
   Initialize({"*"}, {"*"});
   // If both are wildcards, prefer the greylist.
-  EXPECT_FALSE(sitelist()->ShouldRedirect(GURL("http://example.com/")));
+  EXPECT_FALSE(sitelist()->ShouldSwitch(GURL("http://example.com/")));
 }
 
 }  // namespace browser_switcher
diff --git a/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc b/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc
index 712b820..32a92c93 100644
--- a/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc
+++ b/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc
@@ -66,7 +66,8 @@
   explicit FakeEasyUnlockService(Profile* profile)
       : EasyUnlockServiceRegular(profile,
                                  nullptr /* secure_channel_client */,
-                                 nullptr /* device_sync_client */),
+                                 nullptr /* device_sync_client */,
+                                 nullptr /* multidevice_setup_client */),
         reauth_count_(0) {}
   ~FakeEasyUnlockService() override {}
 
diff --git a/chrome/browser/chromeos/login/configuration_keys.cc b/chrome/browser/chromeos/login/configuration_keys.cc
index 61da12d..dc125e8 100644
--- a/chrome/browser/chromeos/login/configuration_keys.cc
+++ b/chrome/browser/chromeos/login/configuration_keys.cc
@@ -34,9 +34,8 @@
 
 // == Update screen:
 
-// Boolean value, indicating that update check should be skipped entirely
-// (it might be required for future version pinning)
-const char kUpdateSkipUpdate[] = "updateSkip";
+// Boolean value, indicating that all non-critical updates should be skipped.
+const char kUpdateSkipUpdate[] = "updateSkipNonCritical";
 
 // == Wizard controller:
 
@@ -79,7 +78,7 @@
      ConfigurationHandlerSide::HANDLER_JS},
     {kEULAAutoAccept, ValueType::BOOLEAN, ConfigurationHandlerSide::HANDLER_JS},
     {kUpdateSkipUpdate, ValueType::BOOLEAN,
-     ConfigurationHandlerSide::HANDLER_CPP},
+     ConfigurationHandlerSide::HANDLER_JS},
     {kWizardAutoEnroll, ValueType::BOOLEAN,
      ConfigurationHandlerSide::HANDLER_CPP},
     {kDeviceRequisition, ValueType::STRING,
diff --git a/chrome/browser/chromeos/login/demo_mode/demo_extensions_external_loader_unittest.cc b/chrome/browser/chromeos/login/demo_mode/demo_extensions_external_loader_unittest.cc
index 0bbce2e6..7b427fe 100644
--- a/chrome/browser/chromeos/login/demo_mode/demo_extensions_external_loader_unittest.cc
+++ b/chrome/browser/chromeos/login/demo_mode/demo_extensions_external_loader_unittest.cc
@@ -176,7 +176,8 @@
                          bool wait_for_offline_resources_load) {
     if (mount_demo_resources) {
       image_loader_client_->SetMountPathForComponent(
-          "demo-mode-resources", offline_demo_resources_.GetPath());
+          DemoSession::kDemoModeResourcesComponentName,
+          offline_demo_resources_.GetPath());
     }
     ASSERT_TRUE(DemoSession::StartIfInDemoMode());
 
diff --git a/chrome/browser/chromeos/login/demo_mode/demo_mode_resources_remover_unittest.cc b/chrome/browser/chromeos/login/demo_mode/demo_mode_resources_remover_unittest.cc
index 76a96c7..f91af1d 100644
--- a/chrome/browser/chromeos/login/demo_mode/demo_mode_resources_remover_unittest.cc
+++ b/chrome/browser/chromeos/login/demo_mode/demo_mode_resources_remover_unittest.cc
@@ -68,9 +68,10 @@
     ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir());
     components_path_override_ = std::make_unique<base::ScopedPathOverride>(
         chromeos::DIR_PREINSTALLED_COMPONENTS, scoped_temp_dir_.GetPath());
-    demo_resources_path_ = scoped_temp_dir_.GetPath()
-                               .AppendASCII("cros-components")
-                               .AppendASCII("demo-mode-resources");
+    demo_resources_path_ =
+        scoped_temp_dir_.GetPath()
+            .AppendASCII("cros-components")
+            .AppendASCII(DemoSession::kDemoModeResourcesComponentName);
 
     scoped_user_manager_ = std::make_unique<user_manager::ScopedUserManager>(
         std::make_unique<FakeChromeUserManager>());
diff --git a/chrome/browser/chromeos/login/demo_mode/demo_session.cc b/chrome/browser/chromeos/login/demo_mode/demo_session.cc
index 88cf9182f..91093ed 100644
--- a/chrome/browser/chromeos/login/demo_mode/demo_session.cc
+++ b/chrome/browser/chromeos/login/demo_mode/demo_session.cc
@@ -48,9 +48,6 @@
 // Type of demo config forced on for tests.
 base::Optional<DemoSession::DemoModeConfig> g_force_demo_config;
 
-// The name of the offline demo resource image loader component.
-constexpr char kDemoResourcesComponentName[] = "demo-mode-resources";
-
 // Path relative to the path at which offline demo resources are loaded that
 // contains image with demo Android apps.
 constexpr base::FilePath::CharType kDemoAppsPath[] =
@@ -121,12 +118,16 @@
 }  // namespace
 
 // static
+const char DemoSession::kDemoModeResourcesComponentName[] =
+    "demo-mode-resources";
+
+// static
 base::FilePath DemoSession::GetPreInstalledDemoResourcesPath() {
   base::FilePath preinstalled_components_root;
   base::PathService::Get(DIR_PREINSTALLED_COMPONENTS,
                          &preinstalled_components_root);
   return preinstalled_components_root.AppendASCII("cros-components")
-      .AppendASCII(kDemoResourcesComponentName);
+      .AppendASCII(kDemoModeResourcesComponentName);
 }
 
 // static
@@ -257,11 +258,16 @@
     return;
   offline_resources_load_requested_ = true;
 
+  if (offline_enrolled_) {
+    LoadPreinstalledOfflineResources();
+    return;
+  }
+
   component_updater::CrOSComponentManager* cros_component_manager =
       g_browser_process->platform_part()->cros_component_manager();
   if (cros_component_manager) {
     g_browser_process->platform_part()->cros_component_manager()->Load(
-        kDemoResourcesComponentName,
+        kDemoModeResourcesComponentName,
         component_updater::CrOSComponentManager::MountPolicy::kMount,
         component_updater::CrOSComponentManager::UpdatePolicy::kSkip,
         base::BindOnce(&DemoSession::InstalledComponentLoaded,
@@ -270,6 +276,8 @@
     // Cros component manager may be unset in tests - if that is the case,
     // report component install failure, so DemoSession attempts loading the
     // component directly from the pre-installed component path.
+    // TODO(michaelpg): Rework tests to require the online component to load in
+    // online-enrolled demo mode.
     InstalledComponentLoaded(
         component_updater::CrOSComponentManager::Error::INSTALL_FAILURE,
         base::FilePath());
@@ -341,10 +349,14 @@
     return;
   }
 
+  LoadPreinstalledOfflineResources();
+}
+
+void DemoSession::LoadPreinstalledOfflineResources() {
   chromeos::DBusThreadManager::Get()
       ->GetImageLoaderClient()
       ->LoadComponentAtPath(
-          kDemoResourcesComponentName, GetPreInstalledDemoResourcesPath(),
+          kDemoModeResourcesComponentName, GetPreInstalledDemoResourcesPath(),
           base::BindOnce(&DemoSession::OnOfflineResourcesLoaded,
                          weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/chrome/browser/chromeos/login/demo_mode/demo_session.h b/chrome/browser/chromeos/login/demo_mode/demo_session.h
index 894e8de..24b5179d 100644
--- a/chrome/browser/chromeos/login/demo_mode/demo_session.h
+++ b/chrome/browser/chromeos/login/demo_mode/demo_session.h
@@ -29,6 +29,7 @@
 
 // Tracks global demo session state. For example, whether the demo session has
 // started, and whether the demo session offline resources have been loaded.
+// TODO(michaelpg): Componentize the logic for providing offline resources.
 class DemoSession : public session_manager::SessionManagerObserver,
                     extensions::ExtensionRegistryObserver {
  public:
@@ -48,6 +49,10 @@
     kLast = kOffline,
   };
 
+  // The name of the demo mode resources CrOS component or preinstalled
+  // imageloader image.
+  static const char kDemoModeResourcesComponentName[];
+
   // Location on disk where pre-installed demo mode resources are expected to be
   // found.
   static base::FilePath GetPreInstalledDemoResourcesPath();
@@ -140,6 +145,9 @@
       component_updater::CrOSComponentManager::Error error,
       const base::FilePath& path);
 
+  // Loads the preinstalled offline resources image.
+  void LoadPreinstalledOfflineResources();
+
   // Callback for the image loader request to load offline demo mode resources.
   // |mount_path| is the path at which the resources were loaded.
   void OnOfflineResourcesLoaded(base::Optional<base::FilePath> mounted_path);
diff --git a/chrome/browser/chromeos/login/demo_mode/demo_session_unittest.cc b/chrome/browser/chromeos/login/demo_mode/demo_session_unittest.cc
index 3a49d322..45d426c 100644
--- a/chrome/browser/chromeos/login/demo_mode/demo_session_unittest.cc
+++ b/chrome/browser/chromeos/login/demo_mode/demo_session_unittest.cc
@@ -24,6 +24,8 @@
 
 namespace {
 
+// TODO(michaelpg): Clean up tests for offline resources and differentiate
+// between the CrOS component and the preinstalled resources image.
 constexpr char kOfflineResourcesComponent[] = "demo-mode-resources";
 constexpr char kTestDemoModeResourcesMountPoint[] =
     "/run/imageloader/demo_mode_resources";
diff --git a/chrome/browser/chromeos/login/demo_mode/demo_setup_controller.cc b/chrome/browser/chromeos/login/demo_mode/demo_setup_controller.cc
index 16aae78..6958f659 100644
--- a/chrome/browser/chromeos/login/demo_mode/demo_setup_controller.cc
+++ b/chrome/browser/chromeos/login/demo_mode/demo_setup_controller.cc
@@ -11,7 +11,9 @@
 #include "base/files/file_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
+#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/browser_process_platform_part.h"
 #include "chrome/browser/chromeos/login/startup_utils.h"
 #include "chrome/browser/chromeos/login/wizard_controller.h"
 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
@@ -21,6 +23,7 @@
 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h"
 #include "chrome/common/pref_names.h"
 #include "chromeos/chromeos_switches.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
 #include "components/arc/arc_util.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
@@ -155,7 +158,7 @@
 
   switch (demo_config_) {
     case DemoSession::DemoModeConfig::kOnline:
-      EnrollOnline();
+      LoadDemoResourcesCrOSComponent();
       return;
     case DemoSession::DemoModeConfig::kOffline: {
       const base::FilePath offline_data_dir =
@@ -169,9 +172,40 @@
   }
 }
 
-void DemoSetupController::EnrollOnline() {
+void DemoSetupController::LoadDemoResourcesCrOSComponent() {
+  component_updater::CrOSComponentManager* cros_component_manager =
+      g_browser_process->platform_part()->cros_component_manager();
+  // In tests, use the desired error code.
+  if (!cros_component_manager ||
+      chromeos::DBusThreadManager::Get()->IsUsingFakes()) {
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE,
+        base::BindOnce(&DemoSetupController::OnDemoResourcesCrOSComponentLoaded,
+                       weak_ptr_factory_.GetWeakPtr(),
+                       component_error_for_tests_, base::FilePath()));
+    return;
+  }
+
+  cros_component_manager->Load(
+      DemoSession::kDemoModeResourcesComponentName,
+      component_updater::CrOSComponentManager::MountPolicy::kMount,
+      component_updater::CrOSComponentManager::UpdatePolicy::kDontForce,
+      base::BindOnce(&DemoSetupController::OnDemoResourcesCrOSComponentLoaded,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void DemoSetupController::OnDemoResourcesCrOSComponentLoaded(
+    component_updater::CrOSComponentManager::Error error,
+    const base::FilePath& path) {
   DCHECK_EQ(demo_config_, DemoSession::DemoModeConfig::kOnline);
 
+  if (error != component_updater::CrOSComponentManager::Error::NONE) {
+    SetupFailed("Failed to load demo resources CrOS component with error: " +
+                    std::to_string(static_cast<int>(error)),
+                DemoSetupError::kRecoverable);
+    return;
+  }
+
   policy::BrowserPolicyConnectorChromeOS* connector =
       g_browser_process->platform_part()->browser_policy_connector_chromeos();
   connector->GetDeviceCloudPolicyManager()->SetDeviceRequisition(
@@ -277,6 +311,11 @@
   NOTREACHED();
 }
 
+void DemoSetupController::SetCrOSComponentLoadErrorForTest(
+    component_updater::CrOSComponentManager::Error error) {
+  component_error_for_tests_ = error;
+}
+
 void DemoSetupController::SetDeviceLocalAccountPolicyStoreForTest(
     policy::CloudPolicyStore* store) {
   device_local_account_policy_store_ = store;
diff --git a/chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h b/chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h
index ba1f5b3..63b8b00 100644
--- a/chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h
+++ b/chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h
@@ -13,6 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/chromeos/login/demo_mode/demo_session.h"
 #include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper.h"
+#include "chrome/browser/component_updater/cros_component_installer_chromeos.h"
 #include "components/policy/core/common/cloud/cloud_policy_store.h"
 
 class PrefRegistrySimple;
@@ -84,13 +85,23 @@
   void OnMultipleLicensesAvailable(
       const EnrollmentLicenseMap& licenses) override;
 
+  void SetCrOSComponentLoadErrorForTest(
+      component_updater::CrOSComponentManager::Error error);
   void SetDeviceLocalAccountPolicyStoreForTest(policy::CloudPolicyStore* store);
   void SetOfflineDataDirForTest(const base::FilePath& offline_dir);
 
  private:
-  // Initiates online enrollment that registers and sets up the device in the
-  // demo mode domain.
-  void EnrollOnline();
+  // Attempts to load the CrOS component with demo resources for online
+  // enrollment and passes the result to OnDemoResourcesCrOSComponentLoaded().
+  void LoadDemoResourcesCrOSComponent();
+
+  // Callback to initiate online enrollment once the CrOS component has loaded.
+  // If the component loaded successfully, registers and sets up the device in
+  // the demo mode domain. If |error| indicates the component couldn't be
+  // loaded, demo setup will fail.
+  void OnDemoResourcesCrOSComponentLoaded(
+      component_updater::CrOSComponentManager::Error error,
+      const base::FilePath& path);
 
   // Initiates offline enrollment that locks the device and sets up offline
   // policies required by demo mode. It requires no network connectivity since
@@ -123,6 +134,11 @@
   // Should be set explicitly.
   DemoSession::DemoModeConfig demo_config_ = DemoSession::DemoModeConfig::kNone;
 
+  // Error code to use when attempting to load the demo resources CrOS
+  // component.
+  component_updater::CrOSComponentManager::Error component_error_for_tests_ =
+      component_updater::CrOSComponentManager::Error::NONE;
+
   // Callback to call when enrollment finishes with an error.
   OnSetupError on_setup_error_;
 
diff --git a/chrome/browser/chromeos/login/demo_mode/demo_setup_controller_unittest.cc b/chrome/browser/chromeos/login/demo_mode/demo_setup_controller_unittest.cc
index 1ce6bfb..cb000fd 100644
--- a/chrome/browser/chromeos/login/demo_mode/demo_setup_controller_unittest.cc
+++ b/chrome/browser/chromeos/login/demo_mode/demo_setup_controller_unittest.cc
@@ -17,6 +17,7 @@
 #include "chrome/browser/chromeos/login/demo_mode/demo_setup_test_utils.h"
 #include "chrome/browser/chromeos/settings/device_settings_service.h"
 #include "chrome/browser/chromeos/settings/stub_install_attributes.h"
+#include "chrome/browser/component_updater/cros_component_installer_chromeos.h"
 #include "chrome/test/base/scoped_testing_local_state.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chromeos/cryptohome/system_salt_getter.h"
@@ -257,6 +258,24 @@
   EXPECT_FALSE(helper_->IsErrorFatal());
 }
 
+TEST_F(DemoSetupControllerTest, OnlineComponentError) {
+  EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
+      &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>);
+
+  tested_controller_->set_demo_config(DemoSession::DemoModeConfig::kOnline);
+  tested_controller_->SetCrOSComponentLoadErrorForTest(
+      component_updater::CrOSComponentManager::Error::
+          COMPATIBILITY_CHECK_FAILED);
+  tested_controller_->Enroll(
+      base::BindOnce(&DemoSetupControllerTestHelper::OnSetupSuccess,
+                     base::Unretained(helper_.get())),
+      base::BindOnce(&DemoSetupControllerTestHelper::OnSetupError,
+                     base::Unretained(helper_.get())));
+
+  EXPECT_TRUE(helper_->WaitResult(false));
+  EXPECT_FALSE(helper_->IsErrorFatal());
+}
+
 TEST_F(DemoSetupControllerTest, EnrollTwice) {
   EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
       &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>);
diff --git a/chrome/browser/chromeos/login/demo_setup_browsertest.cc b/chrome/browser/chromeos/login/demo_setup_browsertest.cc
index 2605160..c64f6cd 100644
--- a/chrome/browser/chromeos/login/demo_setup_browsertest.cc
+++ b/chrome/browser/chromeos/login/demo_setup_browsertest.cc
@@ -27,6 +27,7 @@
 #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h"
 #include "chrome/browser/chromeos/login/ui/login_display_host.h"
 #include "chrome/browser/chromeos/login/wizard_controller.h"
+#include "chrome/browser/component_updater/cros_component_installer_chromeos.h"
 #include "chrome/grit/generated_resources.h"
 #include "chromeos/chromeos_switches.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
@@ -618,6 +619,62 @@
   EXPECT_FALSE(StartupUtils::IsDeviceRegistered());
 }
 
+IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowCrosComponentFailure) {
+  // Simulate failure to load demo resources CrOS component.
+  EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
+      &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>);
+  SimulateNetworkConnected();
+
+  InvokeDemoModeWithAccelerator();
+  ClickOkOnConfirmationDialog();
+
+  // Set the component to fail to install when requested.
+  WizardController::default_controller()
+      ->demo_setup_controller()
+      ->SetCrOSComponentLoadErrorForTest(
+          component_updater::CrOSComponentManager::Error::INSTALL_FAILURE);
+
+  OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait();
+  EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES));
+
+  ClickOobeButton(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES, OobeButton::kText,
+                  JSExecution::kAsync);
+
+  OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
+  EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK));
+  EXPECT_TRUE(IsScreenDialogElementEnabled(
+      OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork,
+      ButtonToStringId(OobeButton::kNext)));
+
+  ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext,
+                  JSExecution::kAsync);
+
+  OobeScreenWaiter(OobeScreen::SCREEN_OOBE_EULA).Wait();
+  EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_EULA));
+
+  ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_EULA, DemoSetupDialog::kEula,
+                          OobeButton::kText, JSExecution::kAsync);
+
+  OobeScreenWaiter(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE).Wait();
+  EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE));
+
+  SetPlayStoreTermsForTesting();
+  ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
+                        "#arc-tos-next-button", JSExecution::kSync);
+  ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
+                        "#arc-tos-accept-button", JSExecution::kAsync);
+
+  OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait();
+
+  OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
+  // TODO(agawronska): Progress dialog transition is async - extra work is
+  // needed to be able to check it reliably.
+  WaitForScreenDialog(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
+                      DemoSetupDialog::kError);
+  EXPECT_FALSE(StartupUtils::IsOobeCompleted());
+  EXPECT_FALSE(StartupUtils::IsDeviceRegistered());
+}
+
 IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) {
   // Simulate offline setup success.
   EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_factory.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_factory.cc
index 8d8154fd..0f4d345 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_factory.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_factory.cc
@@ -14,6 +14,7 @@
 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.h"
 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.h"
 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_tpm_key_manager_factory.h"
+#include "chrome/browser/chromeos/multidevice_setup/multidevice_setup_client_factory.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/chromeos/secure_channel/secure_channel_client_provider.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
@@ -71,6 +72,7 @@
       extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
   DependsOn(EasyUnlockTpmKeyManagerFactory::GetInstance());
   DependsOn(device_sync::DeviceSyncClientFactory::GetInstance());
+  DependsOn(multidevice_setup::MultiDeviceSetupClientFactory::GetInstance());
 }
 
 EasyUnlockServiceFactory::~EasyUnlockServiceFactory() {}
@@ -100,6 +102,8 @@
         Profile::FromBrowserContext(context),
         secure_channel::SecureChannelClientProvider::GetInstance()->GetClient(),
         device_sync::DeviceSyncClientFactory::GetForProfile(
+            Profile::FromBrowserContext(context)),
+        multidevice_setup::MultiDeviceSetupClientFactory::GetForProfile(
             Profile::FromBrowserContext(context)));
     manifest_id = IDR_EASY_UNLOCK_MANIFEST;
   }
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc
index 7a4d27a..08609f2 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc
@@ -106,18 +106,21 @@
 EasyUnlockServiceRegular::EasyUnlockServiceRegular(
     Profile* profile,
     secure_channel::SecureChannelClient* secure_channel_client,
-    device_sync::DeviceSyncClient* device_sync_client)
+    device_sync::DeviceSyncClient* device_sync_client,
+    multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client)
     : EasyUnlockServiceRegular(
           profile,
           secure_channel_client,
           std::make_unique<EasyUnlockNotificationController>(profile),
-          device_sync_client) {}
+          device_sync_client,
+          multidevice_setup_client) {}
 
 EasyUnlockServiceRegular::EasyUnlockServiceRegular(
     Profile* profile,
     secure_channel::SecureChannelClient* secure_channel_client,
     std::unique_ptr<EasyUnlockNotificationController> notification_controller,
-    device_sync::DeviceSyncClient* device_sync_client)
+    device_sync::DeviceSyncClient* device_sync_client,
+    multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client)
     : EasyUnlockService(profile, secure_channel_client),
       turn_off_flow_status_(EasyUnlockService::IDLE),
       scoped_crypt_auth_device_manager_observer_(this),
@@ -126,6 +129,7 @@
       deferring_device_load_(false),
       notification_controller_(std::move(notification_controller)),
       device_sync_client_(device_sync_client),
+      multidevice_setup_client_(multidevice_setup_client),
       shown_pairing_changed_notification_(false),
       weak_ptr_factory_(this) {
   if (base::FeatureList::IsEnabled(chromeos::features::kMultiDeviceApi)) {
@@ -135,15 +139,17 @@
       OnReady();
 
     device_sync_client_->AddObserver(this);
+
+    if (base::FeatureList::IsEnabled(
+            chromeos::features::kEnableUnifiedMultiDeviceSetup)) {
+      OnFeatureStatesChanged(multidevice_setup_client_->GetFeatureStates());
+
+      multidevice_setup_client_->AddObserver(this);
+    }
   }
 }
 
-EasyUnlockServiceRegular::~EasyUnlockServiceRegular() {
-  registrar_.RemoveAll();
-
-  if (base::FeatureList::IsEnabled(chromeos::features::kMultiDeviceApi))
-    device_sync_client_->RemoveObserver(this);
-}
+EasyUnlockServiceRegular::~EasyUnlockServiceRegular() = default;
 
 // TODO(jhawkins): This method with |has_unlock_keys| == true is the only signal
 // that SmartLock setup has completed successfully. Make this signal more
@@ -158,6 +164,18 @@
     return;
   }
 
+  if (base::FeatureList::IsEnabled(
+          chromeos::features::kEnableUnifiedMultiDeviceSetup) &&
+      feature_state_ !=
+          multidevice_setup::mojom::FeatureState::kEnabledByUser) {
+    // OnFeatureStatesChanged() will call back on this method when feature state
+    // changes.
+    PA_LOG(INFO) << "Smart Lock is disabled; aborting.";
+    SetProximityAuthDevices(GetAccountId(), cryptauth::RemoteDeviceRefList(),
+                            base::nullopt /* local_device */);
+    return;
+  }
+
   bool has_unlock_keys;
   if (base::FeatureList::IsEnabled(chromeos::features::kMultiDeviceApi)) {
     has_unlock_keys = !GetUnlockKeys().empty();
@@ -504,7 +522,7 @@
   proximity_auth::ScreenlockBridge::Get()->AddObserver(this);
 
   pref_manager_.reset(new proximity_auth::ProximityAuthProfilePrefManager(
-      profile()->GetPrefs()));
+      profile()->GetPrefs(), multidevice_setup_client_));
 
   // TODO(tengs): Due to badly configured browser_tests, Chrome crashes during
   // shutdown. Revisit this condition after migration is fully completed.
@@ -538,10 +556,20 @@
   turn_off_flow_status_ = EasyUnlockService::IDLE;
   proximity_auth::ScreenlockBridge::Get()->RemoveObserver(this);
 
-  if (base::FeatureList::IsEnabled(chromeos::features::kMultiDeviceApi))
-    device_sync_client_->RemoveObserver(this);
-  else
+  if (!base::FeatureList::IsEnabled(chromeos::features::kMultiDeviceApi)) {
     scoped_crypt_auth_device_manager_observer_.RemoveAll();
+  }
+
+  registrar_.RemoveAll();
+
+  if (base::FeatureList::IsEnabled(chromeos::features::kMultiDeviceApi)) {
+    device_sync_client_->RemoveObserver(this);
+
+    if (base::FeatureList::IsEnabled(
+            chromeos::features::kEnableUnifiedMultiDeviceSetup)) {
+      multidevice_setup_client_->RemoveObserver(this);
+    }
+  }
 }
 
 bool EasyUnlockServiceRegular::IsAllowedInternal() const {
@@ -558,6 +586,13 @@
   if (!ProfileHelper::IsPrimaryProfile(profile()))
     return false;
 
+  if (base::FeatureList::IsEnabled(
+          chromeos::features::kEnableUnifiedMultiDeviceSetup) &&
+      feature_state_ ==
+          multidevice_setup::mojom::FeatureState::kProhibitedByPolicy) {
+    return false;
+  }
+
   if (!profile()->GetPrefs()->GetBoolean(prefs::kEasyUnlockAllowed))
     return false;
 
@@ -565,6 +600,12 @@
 }
 
 bool EasyUnlockServiceRegular::IsEnabled() const {
+  if (base::FeatureList::IsEnabled(
+          chromeos::features::kEnableUnifiedMultiDeviceSetup)) {
+    return feature_state_ ==
+           multidevice_setup::mojom::FeatureState::kEnabledByUser;
+  }
+
   return pref_manager_ && pref_manager_->IsEasyUnlockEnabled();
 }
 
@@ -652,6 +693,21 @@
   remote_device_unlock_keys_before_sync_ = remote_device_unlock_keys_after_sync;
 }
 
+void EasyUnlockServiceRegular::OnFeatureStatesChanged(
+    const multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap&
+        feature_states_map) {
+  const auto it =
+      feature_states_map.find(multidevice_setup::mojom::Feature::kSmartLock);
+  if (it == feature_states_map.end()) {
+    feature_state_ =
+        multidevice_setup::mojom::FeatureState::kUnavailableNoVerifiedHost;
+    return;
+  }
+  feature_state_ = it->second;
+
+  LoadRemoteDevices();
+}
+
 void EasyUnlockServiceRegular::ShowNotificationIfNewDevicePresent(
     const std::set<std::string>& public_keys_before_sync,
     const std::set<std::string>& public_keys_after_sync) {
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.h b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.h
index 1d2a4b0b..3307276 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.h
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.h
@@ -18,6 +18,7 @@
 #include "chrome/browser/chromeos/login/easy_unlock/short_lived_user_context.h"
 #include "chromeos/components/proximity_auth/screenlock_bridge.h"
 #include "chromeos/services/device_sync/public/cpp/device_sync_client.h"
+#include "chromeos/services/multidevice_setup/public/cpp/multidevice_setup_client.h"
 #include "components/cryptauth/cryptauth_device_manager.h"
 #include "components/cryptauth/network_request_error.h"
 #include "components/cryptauth/remote_device_ref.h"
@@ -56,19 +57,22 @@
     : public EasyUnlockService,
       public proximity_auth::ScreenlockBridge::Observer,
       public cryptauth::CryptAuthDeviceManager::Observer,
-      public device_sync::DeviceSyncClient::Observer {
+      public device_sync::DeviceSyncClient::Observer,
+      public multidevice_setup::MultiDeviceSetupClient::Observer {
  public:
   EasyUnlockServiceRegular(
       Profile* profile,
       secure_channel::SecureChannelClient* secure_channel_client,
-      device_sync::DeviceSyncClient* device_sync_client);
+      device_sync::DeviceSyncClient* device_sync_client,
+      multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client);
 
   // Constructor for tests.
   EasyUnlockServiceRegular(
       Profile* profile,
       secure_channel::SecureChannelClient* secure_channel_client,
       std::unique_ptr<EasyUnlockNotificationController> notification_controller,
-      device_sync::DeviceSyncClient* device_sync_client);
+      device_sync::DeviceSyncClient* device_sync_client,
+      multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client);
 
   ~EasyUnlockServiceRegular() override;
 
@@ -120,6 +124,11 @@
   void OnEnrollmentFinished() override;
   void OnNewDevicesSynced() override;
 
+  // multidevice_setup::MultiDeviceSetupClient::Observer:
+  void OnFeatureStatesChanged(
+      const multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap&
+          feature_states_map) override;
+
   void ShowNotificationIfNewDevicePresent(
       const std::set<std::string>& public_keys_before_sync,
       const std::set<std::string>& public_keys_after_sync);
@@ -210,13 +219,23 @@
   // Responsible for showing all the notifications used for EasyUnlock.
   std::unique_ptr<EasyUnlockNotificationController> notification_controller_;
 
+  // Used to fetch local device and remote device data.
   device_sync::DeviceSyncClient* device_sync_client_;
 
+  // Used to determine the FeatureState of Smart Lock. See |feature_state_|.
+  multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client_;
+
   // Stores the unlock keys for EasyUnlock before the current device sync, so we
   // can compare it to the unlock keys after syncing.
   std::vector<cryptauth::ExternalDeviceInfo> unlock_keys_before_sync_;
   cryptauth::RemoteDeviceRefList remote_device_unlock_keys_before_sync_;
 
+  // Caches feature state of Smart Lock. This service should only actively be
+  // running if its value is kEnabledByUser. Populated by using
+  // |multidevice_setup_client_|.
+  multidevice_setup::mojom::FeatureState feature_state_ =
+      multidevice_setup::mojom::FeatureState::kUnavailableNoVerifiedHost;
+
   // True if the pairing changed notification was shown, so that the next time
   // the Chromebook is unlocked, we can show the subsequent 'pairing applied'
   // notification.
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_unittest_chromeos.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_unittest_chromeos.cc
index 761841b..7bb4ae41 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_unittest_chromeos.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_unittest_chromeos.cc
@@ -213,7 +213,7 @@
           Profile::FromBrowserContext(context),
           nullptr /* secure_channel_client */,
           std::make_unique<MockEasyUnlockNotificationController>(),
-          fake_device_sync_client));
+          fake_device_sync_client, nullptr /* multidevice_setup_client */));
   service->Initialize(std::move(app_manager));
   return std::move(service);
 }
diff --git a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc
index 16f216e..98ee538e 100644
--- a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc
+++ b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc
@@ -4,10 +4,12 @@
 
 #include "chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.h"
 
+#include "chrome/browser/chromeos/arc/arc_util.h"
 #include "chrome/browser/chromeos/login/screens/assistant_optin_flow_screen_view.h"
 #include "chrome/browser/chromeos/login/screens/base_screen_delegate.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chromeos/assistant/buildflags.h"
 
 namespace chromeos {
 namespace {
@@ -35,7 +37,15 @@
   if (!view_)
     return;
 
-  view_->Show();
+#if BUILDFLAG(ENABLE_CROS_ASSISTANT)
+  if (arc::IsAssistantAllowedForProfile(
+          ProfileManager::GetActiveUserProfile()) ==
+      ash::mojom::AssistantAllowedState::ALLOWED) {
+    view_->Show();
+    return;
+  }
+#endif
+  Finish(ScreenExitCode::ASSISTANT_OPTIN_FLOW_FINISHED);
 }
 
 void AssistantOptInFlowScreen::Hide() {
diff --git a/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle.cc b/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle.cc
index 2e5b1af..7e8ce168 100644
--- a/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle.cc
+++ b/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle.cc
@@ -40,7 +40,7 @@
 
 MergeSessionNavigationThrottle::MergeSessionNavigationThrottle(
     content::NavigationHandle* handle)
-    : NavigationThrottle(handle) {
+    : NavigationThrottle(handle), login_manager_observer_(this) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 }
 
@@ -87,7 +87,7 @@
   chromeos::OAuth2LoginManager* manager =
       GetOAuth2LoginManager(navigation_handle()->GetWebContents());
   if (manager && manager->ShouldBlockTabLoading()) {
-    manager->AddObserver(this);
+    login_manager_observer_.Add(manager);
     proceed_timer_.Start(FROM_HERE, kTotalWaitTime, this,
                          &MergeSessionNavigationThrottle::Proceed);
     return true;
@@ -100,7 +100,7 @@
   chromeos::OAuth2LoginManager* manager =
       GetOAuth2LoginManager(navigation_handle()->GetWebContents());
   if (manager) {
-    manager->RemoveObserver(this);
+    login_manager_observer_.Remove(manager);
   }
   Resume();
 }
diff --git a/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle.h b/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle.h
index 611e85d..ffa3dec 100644
--- a/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle.h
+++ b/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle.h
@@ -9,6 +9,7 @@
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
+#include "base/scoped_observer.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/chromeos/login/signin/oauth2_login_manager.h"
 #include "content/public/browser/navigation_throttle.h"
@@ -52,6 +53,10 @@
   // navigation.
   void Proceed();
 
+  ScopedObserver<chromeos::OAuth2LoginManager,
+                 chromeos::OAuth2LoginManager::Observer>
+      login_manager_observer_;
+
   base::OneShotTimer proceed_timer_;
 
   DISALLOW_COPY_AND_ASSIGN(MergeSessionNavigationThrottle);
diff --git a/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle_unittest.cc b/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle_unittest.cc
index 9bdab67..0c896a1 100644
--- a/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle_unittest.cc
+++ b/chrome/browser/chromeos/login/signin/merge_session_navigation_throttle_unittest.cc
@@ -29,6 +29,15 @@
  public:
   MergeSessionNavigationThrottleTest() = default;
 
+  bool ManagerHasObservers() {
+    OAuth2LoginManager* manager = GetOAuth2LoginManager();
+    if (!manager) {
+      ADD_FAILURE();
+      return false;
+    }
+    return manager->observer_list_.might_have_observers();
+  }
+
  protected:
   void SetUp() override {
     ChromeRenderViewHostTestHarness::SetUp();
@@ -89,6 +98,7 @@
       GURL(kURL), web_contents());
   navigation->Start();
   EXPECT_FALSE(navigation->IsDeferred());
+  EXPECT_FALSE(ManagerHasObservers());
 }
 
 // Tests navigations are deferred when merge session is in progress, and
@@ -104,6 +114,7 @@
   SetMergeSessionState(OAuth2LoginManager::SESSION_RESTORE_DONE);
   navigation->Wait();
   EXPECT_FALSE(navigation->IsDeferred());
+  EXPECT_FALSE(ManagerHasObservers());
 }
 
 // Tests navigations are not deferred if merge session started over 60
@@ -116,6 +127,7 @@
       GURL(kURL), web_contents());
   navigation->Start();
   EXPECT_FALSE(navigation->IsDeferred());
+  EXPECT_FALSE(ManagerHasObservers());
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc
index 6f24bc90..41c8046d 100644
--- a/chrome/browser/chromeos/login/wizard_controller.cc
+++ b/chrome/browser/chromeos/login/wizard_controller.cc
@@ -44,6 +44,7 @@
 #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h"
 #include "chrome/browser/chromeos/login/screens/app_downloading_screen.h"
 #include "chrome/browser/chromeos/login/screens/arc_terms_of_service_screen.h"
+#include "chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.h"
 #include "chrome/browser/chromeos/login/screens/demo_preferences_screen.h"
 #include "chrome/browser/chromeos/login/screens/demo_setup_screen.h"
 #include "chrome/browser/chromeos/login/screens/device_disabled_screen.h"
@@ -509,6 +510,9 @@
   } else if (screen == OobeScreen::SCREEN_UPDATE_REQUIRED) {
     return std::make_unique<UpdateRequiredScreen>(
         this, oobe_ui->GetUpdateRequiredScreenView());
+  } else if (screen == OobeScreen::SCREEN_ASSISTANT_OPTIN_FLOW) {
+    return std::make_unique<AssistantOptInFlowScreen>(
+        this, oobe_ui->GetAssistantOptInFlowScreenView());
   } else if (screen == OobeScreen::SCREEN_DISCOVER) {
     return std::make_unique<DiscoverScreen>(this,
                                             oobe_ui->GetDiscoverScreenView());
@@ -711,7 +715,7 @@
           arc::prefs::kArcTermsShownInOobe, true);
     }
   } else {
-    ShowUserImageScreen();
+    ShowAssistantOptInFlowScreen();
   }
 }
 
@@ -823,6 +827,11 @@
   SetCurrentScreen(GetScreen(OobeScreen::SCREEN_UPDATE_REQUIRED));
 }
 
+void WizardController::ShowAssistantOptInFlowScreen() {
+  UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_ASSISTANT_OPTIN_FLOW);
+  SetCurrentScreen(GetScreen(OobeScreen::SCREEN_ASSISTANT_OPTIN_FLOW));
+}
+
 void WizardController::ShowDiscoverScreen() {
   VLOG(1) << "Showing Discover screen.";
   UpdateStatusAreaVisibilityForScreen(OobeScreen::SCREEN_DISCOVER);
@@ -1092,8 +1101,8 @@
     return;
   }
   // If the user finished with the PlayStore Terms of Service, advance to the
-  // user image screen.
-  ShowUserImageScreen();
+  // assistant opt-in flow screen.
+  ShowAssistantOptInFlowScreen();
 }
 
 void WizardController::OnArcTermsOfServiceAccepted() {
@@ -1109,11 +1118,11 @@
 
   // If the feature flag for recommend app screen is on, show it after the user
   // finished with the PlayStore Terms of Service. Otherwise, advance to the
-  // user image screen.
+  // assistant opt-in flow screen.
   if (ShouldShowRecommendAppsScreen()) {
     ShowRecommendAppsScreen();
   } else {
-    ShowUserImageScreen();
+    ShowAssistantOptInFlowScreen();
   }
 }
 
@@ -1124,7 +1133,7 @@
 }
 
 void WizardController::OnRecommendAppsSkipped() {
-  ShowUserImageScreen();
+  ShowAssistantOptInFlowScreen();
 }
 
 void WizardController::OnRecommendAppsSelected() {
@@ -1132,7 +1141,7 @@
 }
 
 void WizardController::OnAppDownloadingFinished() {
-  ShowUserImageScreen();
+  ShowAssistantOptInFlowScreen();
 }
 
 void WizardController::OnVoiceInteractionValuePropSkipped() {
@@ -1152,6 +1161,10 @@
   StartVoiceInteractionSetupWizard();
 }
 
+void WizardController::OnAssistantOptInFlowFinished() {
+  ShowUserImageScreen();
+}
+
 void WizardController::OnControllerPairingFinished() {
   ShowAutoEnrollmentCheckScreen();
 }
@@ -1262,18 +1275,6 @@
 }
 
 void WizardController::StartOOBEUpdate() {
-  bool skip_update = false;
-  auto* skip_update_value = oobe_configuration_.FindKeyOfType(
-      configuration::kUpdateSkipUpdate, base::Value::Type::BOOLEAN);
-  if (skip_update_value)
-    skip_update = skip_update_value->GetBool();
-
-  if (skip_update) {
-    VLOG(1) << "Skip OOBE Update because of configuration";
-    OnUpdateCompleted();
-    return;
-  }
-
   VLOG(1) << "StartOOBEUpdate";
   SetCurrentScreenSmooth(GetScreen(OobeScreen::SCREEN_OOBE_UPDATE), true);
   UpdateScreen::Get(screen_manager())->StartNetworkCheck();
@@ -1423,11 +1424,7 @@
 }
 
 void WizardController::OnOobeConfigurationChanged() {
-  oobe_configuration_ = base::Value(base::Value::Type::DICTIONARY);
-  chromeos::configuration::FilterConfiguration(
-      OobeConfiguration::Get()->GetConfiguration(),
-      chromeos::configuration::ConfigurationHandlerSide::HANDLER_CPP,
-      oobe_configuration_);
+  oobe_configuration_ = OobeConfiguration::Get()->GetConfiguration().Clone();
   if (current_screen_) {
     current_screen_->SetConfiguration(&oobe_configuration_, true /*notify */);
   }
@@ -1508,6 +1505,8 @@
     ShowWaitForContainerReadyScreen();
   } else if (screen == OobeScreen::SCREEN_UPDATE_REQUIRED) {
     ShowUpdateRequiredScreen();
+  } else if (screen == OobeScreen::SCREEN_ASSISTANT_OPTIN_FLOW) {
+    ShowAssistantOptInFlowScreen();
   } else if (screen == OobeScreen::SCREEN_DISCOVER) {
     ShowDiscoverScreen();
   } else if (screen == OobeScreen::SCREEN_FINGERPRINT_SETUP) {
@@ -1690,6 +1689,9 @@
     case ScreenExitCode::MARKETING_OPT_IN_FINISHED:
       OnMarketingOptInFinished();
       break;
+    case ScreenExitCode::ASSISTANT_OPTIN_FLOW_FINISHED:
+      OnAssistantOptInFlowFinished();
+      break;
     default:
       NOTREACHED();
   }
diff --git a/chrome/browser/chromeos/login/wizard_controller.h b/chrome/browser/chromeos/login/wizard_controller.h
index c4214d97..b197464c 100644
--- a/chrome/browser/chromeos/login/wizard_controller.h
+++ b/chrome/browser/chromeos/login/wizard_controller.h
@@ -194,6 +194,7 @@
   void ShowVoiceInteractionValuePropScreen();
   void ShowWaitForContainerReadyScreen();
   void ShowUpdateRequiredScreen();
+  void ShowAssistantOptInFlowScreen();
   void ShowDiscoverScreen();
   void ShowMarketingOptInScreen();
 
@@ -242,6 +243,7 @@
   void OnDemoPreferencesContinued();
   void OnDemoPreferencesCanceled();
   void OnWaitForContainerReadyFinished();
+  void OnAssistantOptInFlowFinished();
   void OnOobeFlowFinished();
   void OnMarketingOptInFinished();
 
diff --git a/chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.cc b/chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.cc
index 71fabab..0843dea 100644
--- a/chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.cc
+++ b/chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.cc
@@ -9,10 +9,15 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "chrome/browser/chromeos/android_sms/android_sms_urls.h"
+#include "chrome/browser/extensions/extension_util.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/extensions/app_launch_params.h"
+#include "chrome/browser/ui/extensions/application_launch.h"
 #include "chrome/browser/web_applications/components/pending_app_manager.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chromeos/components/proximity_auth/logging/logging.h"
+#include "extensions/common/constants.h"
+#include "ui/base/window_open_disposition.h"
 
 namespace chromeos {
 
@@ -22,6 +27,7 @@
     Profile* profile)
     : pending_app_manager_(
           &web_app::WebAppProvider::Get(profile)->pending_app_manager()),
+      profile_(profile),
       weak_ptr_factory_(this) {}
 
 AndroidSmsAppHelperDelegateImpl::AndroidSmsAppHelperDelegateImpl(
@@ -42,6 +48,24 @@
                      weak_ptr_factory_.GetWeakPtr()));
 }
 
+bool AndroidSmsAppHelperDelegateImpl::LaunchAndroidSmsApp() {
+  const extensions::Extension* android_sms_pwa =
+      extensions::util::GetInstalledPwaForUrl(
+          profile_, chromeos::android_sms::GetAndroidMessagesURL());
+  if (!android_sms_pwa) {
+    PA_LOG(ERROR) << "No Messages app found.";
+    return false;
+  }
+
+  PA_LOG(INFO) << "Messages app Launching...";
+  AppLaunchParams params(
+      profile_, android_sms_pwa, extensions::LAUNCH_CONTAINER_WINDOW,
+      WindowOpenDisposition::NEW_WINDOW, extensions::SOURCE_CHROME_INTERNAL);
+  // OpenApplications() is defined in application_launch.h.
+  OpenApplication(params);
+  return true;
+}
+
 void AndroidSmsAppHelperDelegateImpl::OnAppInstalled(
     const GURL& app_url,
     const base::Optional<std::string>& app_id) {
diff --git a/chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.h b/chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.h
index dde921fb..2f47736 100644
--- a/chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.h
+++ b/chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.h
@@ -30,6 +30,10 @@
  private:
   friend class AndroidSmsAppHelperDelegateImplTest;
 
+  // Note: This constructor should only be used in testing. Right now, objects
+  // built using this constructor will segfault on profile_ if
+  // LaunchAndroidSmsApp is called. We'll need to fix this once tests for that
+  // function are added. See https://crbug.com/876972.
   explicit AndroidSmsAppHelperDelegateImpl(
       web_app::PendingAppManager* pending_app_manager);
   void OnAppInstalled(const GURL& app_url,
@@ -37,9 +41,11 @@
 
   // AndroidSmsAppHelperDelegate:
   void InstallAndroidSmsApp() override;
+  bool LaunchAndroidSmsApp() override;
 
   static const char kMessagesWebAppUrl[];
   web_app::PendingAppManager* pending_app_manager_;
+  Profile* profile_;
   base::WeakPtrFactory<AndroidSmsAppHelperDelegateImpl> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(AndroidSmsAppHelperDelegateImpl);
diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc
index 75215783d..d5defb18 100644
--- a/chrome/browser/devtools/devtools_sanity_browsertest.cc
+++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc
@@ -1625,32 +1625,6 @@
   DISALLOW_COPY_AND_ASSIGN(AutofillManagerTestDelegateDevtoolsImpl);
 };
 
-// Test params:
-//  - bool popup_views_enabled: whether feature AutofillExpandedPopupViews
-//        is enabled for testing.
-//
-// This test is parametrized to ensure that it runs for the
-// AutofillExpandedPopupViews feature either enabled or disabled, while it's
-// rolled out.
-// TODO(crbug.com/831603): This can be merged into DevToolsSanityTest when
-//                         AutofillExpandedPopupViews becomes the default
-//                         behavior and is no longer used.
-class AutofillDevToolsSanityTest : public DevToolsSanityTest,
-                                   public ::testing::WithParamInterface<bool> {
- public:
-  AutofillDevToolsSanityTest() = default;
-  ~AutofillDevToolsSanityTest() override = default;
-
-  void SetUpOnMainThread() override {
-    const bool popup_views_enabled = GetParam();
-    scoped_feature_list_.InitWithFeatureState(
-        autofill::features::kAutofillExpandedPopupViews, popup_views_enabled);
-  }
-
- private:
-  base::test::ScopedFeatureList scoped_feature_list_;
-};
-
 // Disabled. Failing on MacOS MSAN. See https://crbug.com/849129.
 #if defined(OS_MACOSX)
 #define MAYBE_TestDispatchKeyEventShowsAutoFill \
@@ -1659,7 +1633,7 @@
 #define MAYBE_TestDispatchKeyEventShowsAutoFill \
   TestDispatchKeyEventShowsAutoFill
 #endif
-IN_PROC_BROWSER_TEST_P(AutofillDevToolsSanityTest,
+IN_PROC_BROWSER_TEST_F(DevToolsSanityTest,
                        MAYBE_TestDispatchKeyEventShowsAutoFill) {
   OpenDevToolsWindow(kDispatchKeyEventShowsAutoFill, false);
 
@@ -1676,8 +1650,6 @@
   CloseDevToolsWindow();
 }
 
-INSTANTIATE_TEST_CASE_P(All, AutofillDevToolsSanityTest, ::testing::Bool());
-
 // Tests that settings are stored in profile correctly.
 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestSettings) {
   OpenDevToolsWindow("about:blank", true);
diff --git a/chrome/browser/download/chrome_download_manager_delegate_unittest.cc b/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
index d9767e0..ce9ae7a 100644
--- a/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
+++ b/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
@@ -7,7 +7,6 @@
 
 #include <string>
 
-#include "base/at_exit.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -257,8 +256,6 @@
   void GetNextId(uint32_t next_id) { download_ids_.emplace_back(next_id); }
 
  private:
-  // Resets the global cached DefaultDownloadDirectory instance.
-  base::ShadowingAtExitManager at_exit_manager_;
   base::ScopedPathOverride download_dir_override_{
       chrome::DIR_DEFAULT_DOWNLOADS};
   sync_preferences::TestingPrefServiceSyncable* pref_service_;
@@ -273,6 +270,7 @@
 }
 
 void ChromeDownloadManagerDelegateTest::SetUp() {
+  DownloadPrefs::ReinitializeDefaultDownloadDirectoryForTesting();
   ChromeRenderViewHostTestHarness::SetUp();
 
   CHECK(profile());
diff --git a/chrome/browser/download/download_prefs.cc b/chrome/browser/download/download_prefs.cc
index 24b096f..88a737f1 100644
--- a/chrome/browser/download/download_prefs.cc
+++ b/chrome/browser/download/download_prefs.cc
@@ -13,9 +13,9 @@
 #include "base/bind_helpers.h"
 #include "base/feature_list.h"
 #include "base/files/file_util.h"
-#include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/no_destructor.h"
 #include "base/path_service.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
@@ -86,10 +86,7 @@
  public:
   const base::FilePath& path() const { return path_; }
 
- private:
-  friend struct base::LazyInstanceTraitsBase<DefaultDownloadDirectory>;
-
-  DefaultDownloadDirectory() {
+  void Initialize() {
     if (!base::PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &path_)) {
       NOTREACHED();
     }
@@ -102,13 +99,20 @@
     }
   }
 
+ private:
+  friend class base::NoDestructor<DefaultDownloadDirectory>;
+
+  DefaultDownloadDirectory() { Initialize(); }
+
   base::FilePath path_;
 
   DISALLOW_COPY_AND_ASSIGN(DefaultDownloadDirectory);
 };
 
-base::LazyInstance<DefaultDownloadDirectory>::DestructorAtExit
-    g_default_download_directory = LAZY_INSTANCE_INITIALIZER;
+DefaultDownloadDirectory& GetDefaultDownloadDirectorySingleton() {
+  static base::NoDestructor<DefaultDownloadDirectory> instance;
+  return *instance;
+}
 
 }  // namespace
 
@@ -263,8 +267,13 @@
 }
 
 // static
+void DownloadPrefs::ReinitializeDefaultDownloadDirectoryForTesting() {
+  GetDefaultDownloadDirectorySingleton().Initialize();
+}
+
+// static
 const base::FilePath& DownloadPrefs::GetDefaultDownloadDirectory() {
-  return g_default_download_directory.Get().path();
+  return GetDefaultDownloadDirectorySingleton().path();
 }
 
 // static
diff --git a/chrome/browser/download/download_prefs.h b/chrome/browser/download/download_prefs.h
index f591f9a..db1f3f5 100644
--- a/chrome/browser/download/download_prefs.h
+++ b/chrome/browser/download/download_prefs.h
@@ -43,6 +43,8 @@
 
   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
 
+  static void ReinitializeDefaultDownloadDirectoryForTesting();
+
   // Returns the default download directory.
   static const base::FilePath& GetDefaultDownloadDirectory();
 
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 6b5cc01..2f6a37b6 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2573,9 +2573,15 @@
 const char kOfflineBookmarksDescription[] =
     "Enable saving bookmarked pages for offline viewing.";
 
-const char kOfflineIndicatorName[] = "Enable offline indicator";
-const char kOfflineIndicatorDescription[] =
-    "Enable showing offline indicator while offline.";
+const char kOfflineIndicatorAlwaysHttpProbeName[] = "Always http probe";
+const char kOfflineIndicatorAlwaysHttpProbeDescription[] =
+    "Always do http probe to detect network connectivity for offline indicator "
+    "as opposed to just taking the connection state from the system."
+    "Used for testing.";
+
+const char kOfflineIndicatorChoiceName[] = "Offline indicator choices";
+const char kOfflineIndicatorChoiceDescription[] =
+    "Show an offline indicator while offline.";
 
 const char kOfflinePagesCtName[] = "Enable Offline Pages CT features.";
 const char kOfflinePagesCtDescription[] = "Enable Offline Pages CT features.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 16c0b56..ca1bf03 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1553,8 +1553,11 @@
 extern const char kOfflineBookmarksName[];
 extern const char kOfflineBookmarksDescription[];
 
-extern const char kOfflineIndicatorName[];
-extern const char kOfflineIndicatorDescription[];
+extern const char kOfflineIndicatorAlwaysHttpProbeName[];
+extern const char kOfflineIndicatorAlwaysHttpProbeDescription[];
+
+extern const char kOfflineIndicatorChoiceName[];
+extern const char kOfflineIndicatorChoiceDescription[];
 
 extern const char kOfflinePagesCtName[];
 extern const char kOfflinePagesCtDescription[];
diff --git a/chrome/browser/global_keyboard_shortcuts_mac.mm b/chrome/browser/global_keyboard_shortcuts_mac.mm
index 0cfb801..f00d6430 100644
--- a/chrome/browser/global_keyboard_shortcuts_mac.mm
+++ b/chrome/browser/global_keyboard_shortcuts_mac.mm
@@ -166,6 +166,7 @@
     {true, true,  false, false, kVK_ANSI_M,             IDC_SHOW_AVATAR_MENU},
     {true, false, false, true,  kVK_ANSI_L,             IDC_SHOW_DOWNLOADS},
     {true,  true,  false, false, kVK_ANSI_C,            IDC_DEV_TOOLS_INSPECT},
+    {true,  false,  false, true, kVK_ANSI_C,            IDC_DEV_TOOLS_INSPECT},
   });
   // clang-format on
   return *keys;
diff --git a/chrome/browser/media/autoplay_metrics_browsertest.cc b/chrome/browser/media/autoplay_metrics_browsertest.cc
index 5d909f34..028912f 100644
--- a/chrome/browser/media/autoplay_metrics_browsertest.cc
+++ b/chrome/browser/media/autoplay_metrics_browsertest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/task/post_task.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/ukm/test_ukm_recorder.h"
@@ -18,15 +19,25 @@
 
 class AutoplayMetricsBrowserTest : public InProcessBrowserTest {
  public:
+  using Entry = ukm::builders::Media_Autoplay_Attempt;
+  using CreatedEntry = ukm::builders::DocumentCreated;
+
   void SetUpOnMainThread() override {
     host_resolver()->AddRule("*", "127.0.0.1");
     content::SetupCrossSiteRedirector(embedded_test_server());
     ASSERT_TRUE(embedded_test_server()->Start());
   }
 
-  void TryAutoplay(const content::ToRenderFrameHost& adapter) {
+  void TryAutoplay(ukm::TestUkmRecorder& ukm_recorder,
+                   const content::ToRenderFrameHost& adapter) {
+    base::RunLoop run_loop;
+    base::PostDelayedTask(FROM_HERE, run_loop.QuitClosure(),
+                          base::TimeDelta::FromSeconds(10));
+    ukm_recorder.SetOnAddEntryCallback(Entry::kEntryName,
+                                       run_loop.QuitClosure());
     EXPECT_TRUE(ExecuteScriptWithoutUserGesture(adapter.render_frame_host(),
                                                 "tryPlayback();"));
+    run_loop.Run();
   }
 
   void NavigateFrameAndWait(content::RenderFrameHost* rfh, const GURL& url) {
@@ -70,9 +81,6 @@
 
 IN_PROC_BROWSER_TEST_F(AutoplayMetricsBrowserTest, RecordAutoplayAttemptUkm) {
   ukm::TestAutoSetUkmRecorder test_ukm_recorder;
-  using Entry = ukm::builders::Media_Autoplay_Attempt;
-  using CreatedEntry = ukm::builders::DocumentCreated;
-
   GURL main_url(embedded_test_server()->GetURL("example.com",
                                                "/media/autoplay_iframe.html"));
   GURL foo_url(
@@ -82,25 +90,25 @@
 
   // Navigate main frame, try play.
   NavigateFrameAndWait(web_contents()->GetMainFrame(), main_url);
-  TryAutoplay(web_contents());
+  TryAutoplay(test_ukm_recorder, web_contents());
 
   // Check that we recorded a UKM event using the main frame URL.
   {
     auto ukm_entries = test_ukm_recorder.GetEntriesByName(Entry::kEntryName);
 
-    EXPECT_EQ(1u, ukm_entries.size());
+    ASSERT_EQ(1u, ukm_entries.size());
     test_ukm_recorder.ExpectEntrySourceHasUrl(ukm_entries[0], main_url);
   }
 
   // Navigate sub frame, try play.
   NavigateFrameAndWait(first_child(), foo_url);
-  TryAutoplay(first_child());
+  TryAutoplay(test_ukm_recorder, first_child());
 
   // Check that we recorded a UKM event that is not keyed to any URL.
   {
     auto ukm_entries = test_ukm_recorder.GetEntriesByName(Entry::kEntryName);
 
-    EXPECT_EQ(2u, ukm_entries.size());
+    ASSERT_EQ(2u, ukm_entries.size());
     EXPECT_FALSE(
         test_ukm_recorder.GetSourceForSourceId(ukm_entries[1]->source_id));
 
@@ -122,13 +130,13 @@
 
   // Navigate sub sub frame, try play.
   NavigateFrameAndWait(second_child(), bar_url);
-  TryAutoplay(second_child());
+  TryAutoplay(test_ukm_recorder, second_child());
 
   // Check that we recorded a UKM event that is not keyed to any url.
   {
     auto ukm_entries = test_ukm_recorder.GetEntriesByName(Entry::kEntryName);
 
-    EXPECT_EQ(3u, ukm_entries.size());
+    ASSERT_EQ(3u, ukm_entries.size());
     EXPECT_FALSE(
         test_ukm_recorder.GetSourceForSourceId(ukm_entries[2]->source_id));
 
@@ -150,13 +158,13 @@
 
   // Navigate top frame, try play.
   NavigateFrameAndWait(web_contents()->GetMainFrame(), foo_url);
-  TryAutoplay(web_contents());
+  TryAutoplay(test_ukm_recorder, web_contents());
 
   // Check that we recorded a UKM event using the main frame URL.
   {
     auto ukm_entries = test_ukm_recorder.GetEntriesByName(Entry::kEntryName);
 
-    EXPECT_EQ(4u, ukm_entries.size());
+    ASSERT_EQ(4u, ukm_entries.size());
     test_ukm_recorder.ExpectEntrySourceHasUrl(ukm_entries[3], foo_url);
   }
 }
diff --git a/chrome/browser/media/cast_remoting_connector.cc b/chrome/browser/media/cast_remoting_connector.cc
index aa524f5d4..a632376 100644
--- a/chrome/browser/media/cast_remoting_connector.cc
+++ b/chrome/browser/media/cast_remoting_connector.cc
@@ -133,17 +133,12 @@
   CastRemotingConnector* connector =
       static_cast<CastRemotingConnector*>(contents->GetUserData(kUserDataKey));
   if (!connector) {
-    // TODO(xjz): Use TabAndroid::GetAndroidId() to get the tab ID when support
-    // remoting on Android.
-    const SessionID tab_id = SessionTabHelper::IdForTab(contents);
-    if (!tab_id.is_valid())
-      return nullptr;
     if (!media_router::MediaRouterEnabled(contents->GetBrowserContext()))
       return nullptr;
     connector = new CastRemotingConnector(
         media_router::MediaRouterFactory::GetApiForBrowserContext(
             contents->GetBrowserContext()),
-        tab_id,
+        SessionTabHelper::IdForTab(contents),
 #if defined(TOOLKIT_VIEWS) && \
     (!defined(OS_MACOSX) || defined(MAC_VIEWS_BROWSER))
         base::BindRepeating(
@@ -199,7 +194,15 @@
       binding_(this),
       weak_factory_(this) {
   DCHECK(permission_request_callback_);
-  media_router_->RegisterRemotingSource(tab_id_, this);
+#if !defined(OS_ANDROID)
+  if (!media_router::ShouldUseMirroringService() && tab_id_.is_valid()) {
+    // Register this remoting source only when Mirroring Service is not used.
+    // Note: If mirroring service is not used, remoting is not supported for
+    // OffscreenTab mirroring as there is no valid tab_id associated with an
+    // OffscreenTab.
+    media_router_->RegisterRemotingSource(tab_id_, this);
+  }
+#endif  // !defined(OS_ANDROID)
 }
 
 CastRemotingConnector::~CastRemotingConnector() {
@@ -212,7 +215,10 @@
     notifyee->OnSinkGone();
     notifyee->OnCastRemotingConnectorDestroyed();
   }
-  media_router_->UnregisterRemotingSource(tab_id_);
+#if !defined(OS_ANDROID)
+  if (!media_router::ShouldUseMirroringService() && tab_id_.is_valid())
+    media_router_->UnregisterRemotingSource(tab_id_);
+#endif  // !defined(OS_ANDROID)
 }
 
 void CastRemotingConnector::ConnectToService(
diff --git a/chrome/browser/media/webrtc/webrtc_browsertest.cc b/chrome/browser/media/webrtc/webrtc_browsertest.cc
index 94cd801f..07ff206 100644
--- a/chrome/browser/media/webrtc/webrtc_browsertest.cc
+++ b/chrome/browser/media/webrtc/webrtc_browsertest.cc
@@ -18,6 +18,11 @@
 #include "content/public/test/browser_test_utils.h"
 #include "media/base/media_switches.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
+#include "services/network/public/cpp/features.h"
+
+#if defined(OS_MACOSX)
+#include "base/mac/mac_util.h"
+#endif
 
 static const char kMainWebrtcTestHtmlPage[] =
     "/webrtc/webrtc_jsep01_test.html";
@@ -138,6 +143,15 @@
         "(test \"OK\")";
     return;
   }
+
+#if defined(OS_MACOSX)
+  // TODO(jam): this test fails with network service only on 10.12.
+  if (base::FeatureList::IsEnabled(network::features::kNetworkService) &&
+      base::mac::IsOS10_12()) {
+    return;
+  }
+#endif
+
   RunsAudioVideoWebRTCCallInTwoTabs("H264", true /* prefer_hw_video_codec */);
 }
 
diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc
index 31bd332..92b67ed 100644
--- a/chrome/browser/net/system_network_context_manager.cc
+++ b/chrome/browser/net/system_network_context_manager.cc
@@ -32,6 +32,7 @@
 #include "chrome/common/pref_names.h"
 #include "components/certificate_transparency/ct_known_logs.h"
 #include "components/network_session_configurator/common/network_features.h"
+#include "components/os_crypt/os_crypt.h"
 #include "components/policy/core/common/policy_namespace.h"
 #include "components/policy/core/common/policy_service.h"
 #include "components/policy/policy_constants.h"
@@ -489,6 +490,10 @@
   chrome::GetDefaultUserDataDirectory(&config->user_data_path);
   content::GetNetworkService()->SetCryptConfig(std::move(config));
 #endif
+#if defined(OS_MACOSX)
+  content::GetNetworkService()->SetEncryptionKey(
+      OSCrypt::GetRawEncryptionKey());
+#endif
 
   // Asynchronously reapply the most recently received CRLSet (if any).
   component_updater::CRLSetPolicy::ReconfigureAfterNetworkRestart();
diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
index 5901c7ff..9af79d2f 100644
--- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
@@ -145,8 +145,10 @@
     return STOP_OBSERVING;
   data_reduction_proxy::DataReductionProxyData* data =
       chrome_navigation_data->GetDataReductionProxyData();
-  if (!data || !data->used_data_reduction_proxy())
+  if (!data || !(data->used_data_reduction_proxy() ||
+                 data->was_cached_data_reduction_proxy_response())) {
     return STOP_OBSERVING;
+  }
   data_ = data->DeepCopy();
 
   previews::PreviewsUserData* previews_data =
diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_unittest.cc
index 6eebed1e..4072d2d5d 100644
--- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer_unittest.cc
@@ -127,11 +127,13 @@
   TestDataReductionProxyMetricsObserver(content::WebContents* web_contents,
                                         TestPingbackClient* pingback_client,
                                         bool data_reduction_proxy_used,
+                                        bool cached_data_reduction_proxy_used,
                                         bool lite_page_used,
                                         bool black_listed)
       : web_contents_(web_contents),
         pingback_client_(pingback_client),
         data_reduction_proxy_used_(data_reduction_proxy_used),
+        cached_data_reduction_proxy_used_(cached_data_reduction_proxy_used),
         lite_page_used_(lite_page_used),
         black_listed_(black_listed) {}
 
@@ -143,6 +145,8 @@
     DataReductionProxyData* data =
         DataForNavigationHandle(web_contents_, navigation_handle);
     data->set_used_data_reduction_proxy(data_reduction_proxy_used_);
+    data->set_was_cached_data_reduction_proxy_response(
+        cached_data_reduction_proxy_used_);
     data->set_request_url(GURL(kDefaultTestUrl));
     data->set_lite_page_received(lite_page_used_);
 
@@ -180,6 +184,7 @@
   content::WebContents* web_contents_;
   TestPingbackClient* pingback_client_;
   bool data_reduction_proxy_used_;
+  bool cached_data_reduction_proxy_used_;
   bool lite_page_used_;
   bool black_listed_;
 
@@ -329,12 +334,13 @@
     histogram_tester().ExpectTotalCount(
         std::string(internal::kHistogramDataReductionProxyPrefix)
             .append(histogram_suffix),
-        data_reduction_proxy_used_ ? 1 : 0);
+        data_reduction_proxy_used_ || cached_data_reduction_proxy_used_ ? 1
+                                                                        : 0);
     histogram_tester().ExpectTotalCount(
         std::string(internal::kHistogramDataReductionProxyLitePagePrefix)
             .append(histogram_suffix),
         is_using_lite_page_ ? 1 : 0);
-    if (!data_reduction_proxy_used_)
+    if (!(data_reduction_proxy_used_ || cached_data_reduction_proxy_used_))
       return;
     histogram_tester().ExpectUniqueSample(
         std::string(internal::kHistogramDataReductionProxyPrefix)
@@ -427,12 +433,15 @@
     tracker->AddObserver(
         std::make_unique<TestDataReductionProxyMetricsObserver>(
             web_contents(), pingback_client_.get(), data_reduction_proxy_used_,
-            is_using_lite_page_, black_listed_));
+            cached_data_reduction_proxy_used_, is_using_lite_page_,
+            black_listed_));
   }
 
   std::unique_ptr<TestPingbackClient> pingback_client_;
   page_load_metrics::mojom::PageLoadTiming timing_;
 
+  bool cached_data_reduction_proxy_used_ = false;
+
  private:
   bool data_reduction_proxy_used_;
   bool is_using_lite_page_;
@@ -550,6 +559,12 @@
   EXPECT_FALSE(pingback_client_->send_pingback_called());
 
   ResetTest();
+  cached_data_reduction_proxy_used_ = true;
+  RunTestAndNavigateToUntrackedUrl(false, false, false);
+  EXPECT_TRUE(pingback_client_->send_pingback_called());
+  cached_data_reduction_proxy_used_ = false;
+
+  ResetTest();
   // Verify that when the holdback experiment is enabled, a pingback is sent.
   base::FieldTrialList field_trial_list(nullptr);
   ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
diff --git a/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc b/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc
index f686f103..38819a3 100644
--- a/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc
@@ -50,7 +50,7 @@
     return STOP_OBSERVING;
   data_reduction_proxy::DataReductionProxyData* data =
       chrome_navigation_data->GetDataReductionProxyData();
-  if (data && data->used_data_reduction_proxy() && data->lite_page_received()) {
+  if (data && data->lite_page_received()) {
     lite_page_seen_ = true;
   }
   content::PreviewsState previews_state =
diff --git a/chrome/browser/previews/previews_browsertest.cc b/chrome/browser/previews/previews_browsertest.cc
index d00b9e5..ca3f0e7 100644
--- a/chrome/browser/previews/previews_browsertest.cc
+++ b/chrome/browser/previews/previews_browsertest.cc
@@ -10,6 +10,7 @@
 #include "base/metrics/field_trial_params.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/utf_string_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
@@ -28,6 +29,7 @@
 #include "components/optimization_guide/proto/hints.pb.h"
 #include "components/optimization_guide/test_component_creator.h"
 #include "components/previews/core/previews_features.h"
+#include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test_utils.h"
 #include "net/http/http_request_headers.h"
 #include "net/http/http_status_code.h"
@@ -75,7 +77,6 @@
   void SetUpOnMainThread() override {
     noscript_css_requested_ = false;
     noscript_js_requested_ = false;
-    https_url_count_ = 0;
 
     // Set up https server with resource monitor.
     https_server_.reset(
@@ -88,6 +89,10 @@
     https_url_ = https_server_->GetURL("/previews/noscript_test.html");
     ASSERT_TRUE(https_url_.SchemeIs(url::kHttpsScheme));
 
+    base_https_lite_page_url_ =
+        https_server_->GetURL("/previews/lite_page_test.html");
+    ASSERT_TRUE(base_https_lite_page_url_.SchemeIs(url::kHttpsScheme));
+
     https_no_transform_url_ = https_server_->GetURL(
         "/previews/noscript_test_with_no_transform_header.html");
     ASSERT_TRUE(https_no_transform_url_.SchemeIs(url::kHttpsScheme));
@@ -108,7 +113,11 @@
     http_url_ = http_server_->GetURL("/previews/noscript_test.html");
     ASSERT_TRUE(http_url_.SchemeIs(url::kHttpScheme));
 
-    subframe_url_ = http_server_->GetURL("/iframe_blank.html");
+    base_http_lite_page_url_ =
+        http_server_->GetURL("/previews/lite_page_test.html");
+    ASSERT_TRUE(base_http_lite_page_url_.SchemeIs(url::kHttpScheme));
+
+    subframe_url_ = http_server_->GetURL("/previews/iframe_blank.html");
     ASSERT_TRUE(subframe_url_.SchemeIs(url::kHttpScheme));
 
     redirect_url_ = http_server_->GetURL("/previews/redirect.html");
@@ -126,19 +135,23 @@
   }
 
   const GURL& https_url() const { return https_url_; }
+  const GURL& base_https_lite_page_url() const {
+    return base_https_lite_page_url_;
+  }
   const GURL& https_no_transform_url() const { return https_no_transform_url_; }
   const GURL& https_media_url() const { return https_media_url_; }
   const GURL& http_url() const { return http_url_; }
+  const GURL& base_http_lite_page_url() const {
+    return base_http_lite_page_url_;
+  }
   const GURL& redirect_url() const { return redirect_url_; }
   const GURL& subframe_url() const { return subframe_url_; }
   bool noscript_css_requested() const { return noscript_css_requested_; }
   bool noscript_js_requested() const { return noscript_js_requested_; }
-  int https_url_count() const { return https_url_count_; }
 
  private:
   // Called by |https_server_|.
   void MonitorResourceRequest(const net::test_server::HttpRequest& request) {
-    https_url_count_++;
     if (request.GetURL().spec().find("noscript_test.css") !=
         std::string::npos) {
       noscript_css_requested_ = true;
@@ -162,14 +175,15 @@
   std::unique_ptr<net::EmbeddedTestServer> https_server_;
   std::unique_ptr<net::EmbeddedTestServer> http_server_;
   GURL https_url_;
+  GURL base_https_lite_page_url_;
   GURL https_no_transform_url_;
   GURL https_media_url_;
   GURL http_url_;
+  GURL base_http_lite_page_url_;
   GURL redirect_url_;
   GURL subframe_url_;
   bool noscript_css_requested_;
   bool noscript_js_requested_;
-  int https_url_count_;
 };
 
 // Loads a webpage that has both script and noscript tags and also requests
@@ -474,7 +488,7 @@
       query += "&headers=" + *headers;
     GURL::Replacements replacements;
     replacements.SetQuery(query.c_str(), url::Component(0, query.length()));
-    return http_url().ReplaceComponents(replacements);
+    return base_http_lite_page_url().ReplaceComponents(replacements);
   }
 
   GURL https_lite_page_url(int return_code, std::string* headers = nullptr) {
@@ -483,13 +497,15 @@
       query += "&headers=" + *headers;
     GURL::Replacements replacements;
     replacements.SetQuery(query.c_str(), url::Component(0, query.length()));
-    return https_url().ReplaceComponents(replacements);
+    return base_https_lite_page_url().ReplaceComponents(replacements);
   }
 
-  GURL NavigatedURL() {
-    return browser()->tab_strip_model()->GetActiveWebContents()->GetURL();
+  content::WebContents* GetWebContents() {
+    return browser()->tab_strip_model()->GetActiveWebContents();
   }
 
+  GURL NavigatedURL() { return GetWebContents()->GetURL(); }
+
   void VerifyPreviewLoaded() {
     const GURL navigated_url = NavigatedURL();
     const GURL previews_host = previews_server();
@@ -522,48 +538,137 @@
 
 IN_PROC_BROWSER_TEST_F(PreviewsLitePageServerBrowserTest,
                        MAYBE_LitePagePreviewsTriggering) {
-  // Verify the preview is not triggered on HTTP pageloads.
-  ui_test_utils::NavigateToURL(browser(), http_lite_page_url(200));
-  VerifyPreviewNotLoaded();
+  // TODO(crbug.com/874150): Use ExpectUniqueSample in these tests.
+  // The histograms in these tests can only be checked by the expected bucket,
+  // and not by a unique sample. This is because each navigation to a preview
+  // will cause two navigations and two records, one for the original navigation
+  // under test, and another one for loading the preview.
 
-  // Verify the preview is triggered on HTTPS pageloads.
-  ui_test_utils::NavigateToURL(browser(), https_lite_page_url(200));
-  VerifyPreviewLoaded();
+  {
+    // Verify the preview is not triggered on HTTP pageloads.
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), http_lite_page_url(200));
+    VerifyPreviewNotLoaded();
+    histogram_tester.ExpectBucketCount(
+        "Previews.ServerLitePage.IneligibleReasons",
+        PreviewsLitePageNavigationThrottle::IneligibleReason::kNonHttpsScheme,
+        1);
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       false, 1);
+  }
 
-  // Verify the preview is not triggered when loading a media resource.
-  ui_test_utils::NavigateToURL(browser(), https_media_url());
-  VerifyPreviewNotLoaded();
+  {
+    // Verify the preview is triggered on HTTPS pageloads.
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), https_lite_page_url(200));
+    VerifyPreviewLoaded();
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       true, 1);
+  }
 
-  // Verify the preview is not triggered for POST navigations.
-  std::string post_data = "helloworld";
-  NavigateParams params(browser(), https_url(), ui::PAGE_TRANSITION_LINK);
-  params.window_action = NavigateParams::SHOW_WINDOW;
-  params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB;
-  params.is_renderer_initiated = false;
-  params.uses_post = true;
-  params.post_data = network::ResourceRequestBody::CreateFromBytes(
-      post_data.data(), post_data.size());
-  ui_test_utils::NavigateToURL(&params);
-  VerifyPreviewNotLoaded();
+  {
+    // Verify the preview is not triggered when loading a media resource.
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), https_media_url());
+    VerifyPreviewNotLoaded();
+    histogram_tester.ExpectBucketCount(
+        "Previews.ServerLitePage.BlacklistReasons",
+        PreviewsLitePageNavigationThrottle::BlacklistReason::
+            kPathSuffixBlacklisted,
+        1);
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       false, 1);
+  }
 
-  // Verify the preview is not triggered when navigating to the previews server.
-  ui_test_utils::NavigateToURL(browser(), previews_server());
-  EXPECT_EQ(NavigatedURL(), previews_server());
+  {
+    // Verify the preview is not triggered for POST navigations.
+    base::HistogramTester histogram_tester;
+    std::string post_data = "helloworld";
+    NavigateParams params(browser(), https_url(), ui::PAGE_TRANSITION_LINK);
+    params.window_action = NavigateParams::SHOW_WINDOW;
+    params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB;
+    params.is_renderer_initiated = false;
+    params.uses_post = true;
+    params.post_data = network::ResourceRequestBody::CreateFromBytes(
+        post_data.data(), post_data.size());
+    ui_test_utils::NavigateToURL(&params);
+    VerifyPreviewNotLoaded();
+    histogram_tester.ExpectBucketCount(
+        "Previews.ServerLitePage.IneligibleReasons",
+        PreviewsLitePageNavigationThrottle::IneligibleReason::kHttpPost, 1);
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       false, 1);
+  }
 
-  // Verify the preview is not triggered when navigating to a private IP.
-  ui_test_utils::NavigateToURL(browser(), GURL("https://0.0.0.0/"));
-  VerifyPreviewNotLoaded();
+  {
+    // Verify the preview is not triggered when navigating to the previews
+    // server.
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), previews_server());
+    EXPECT_EQ(NavigatedURL(), previews_server());
+    histogram_tester.ExpectBucketCount(
+        "Previews.ServerLitePage.BlacklistReasons",
+        PreviewsLitePageNavigationThrottle::BlacklistReason::
+            kNavigationToPreviewsDomain,
+        1);
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       false, 1);
+  }
 
-  // Verify the preview is not triggered when navigating to a domain without a
-  // dot.
-  ui_test_utils::NavigateToURL(browser(), GURL("https://no-dots-here/"));
-  VerifyPreviewNotLoaded();
+  {
+    // Verify the preview is not triggered when navigating to a private IP.
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), GURL("https://0.0.0.0/"));
+    histogram_tester.ExpectBucketCount(
+        "Previews.ServerLitePage.BlacklistReasons",
+        PreviewsLitePageNavigationThrottle::BlacklistReason::
+            kNavigationToPrivateDomain,
+        1);
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       false, 1);
+    VerifyPreviewNotLoaded();
+  }
 
-  // Verify a subframe navigation does not trigger a preview.
-  const int starting_https_url_count = https_url_count();
-  ui_test_utils::NavigateToURL(browser(), subframe_url());
-  ExecuteScript("window.open(\"" + https_url().spec() + "\", \"subframe\")");
-  EXPECT_EQ(https_url_count(), starting_https_url_count + 1);
+  {
+    // Verify the preview is not triggered when navigating to a domain without a
+    // dot.
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), GURL("https://no-dots-here/"));
+    VerifyPreviewNotLoaded();
+    histogram_tester.ExpectBucketCount(
+        "Previews.ServerLitePage.BlacklistReasons",
+        PreviewsLitePageNavigationThrottle::BlacklistReason::
+            kNavigationToPrivateDomain,
+        1);
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       false, 1);
+  }
+
+  {
+    // Verify a subframe navigation does not trigger a preview.
+    const base::string16 kSubframeTitle = base::ASCIIToUTF16("Subframe");
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), subframe_url());
+
+    // Navigate in the subframe and wait for it to finish. The waiting is
+    // accomplished by |ExecuteScriptAndExtractString| which waits for
+    // |window.domAutomationController.send| in the HTML page.
+    std::string result;
+    EXPECT_TRUE(ExecuteScriptAndExtractString(
+        GetWebContents()->GetMainFrame(),
+        "window.open(\"" + base_https_lite_page_url().spec() +
+            "\", \"subframe\")",
+        &result));
+    EXPECT_EQ(kSubframeTitle, base::ASCIIToUTF16(result));
+
+    histogram_tester.ExpectBucketCount(
+        "Previews.ServerLitePage.IneligibleReasons",
+        PreviewsLitePageNavigationThrottle::IneligibleReason::
+            kSubframeNavigation,
+        1);
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       false, 2);
+  }
 }
 
 // Previews InfoBar (which these tests trigger) does not work on Mac.
@@ -576,13 +681,23 @@
 #endif
 IN_PROC_BROWSER_TEST_F(PreviewsLitePageServerBrowserTest,
                        MAYBE_LitePagePreviewsRedirect) {
-  // Verify the preview is triggered when an HTTP page redirects to HTTPS.
-  ui_test_utils::NavigateToURL(browser(), redirect_url());
-  VerifyPreviewLoaded();
+  {
+    // Verify the preview is triggered when an HTTP page redirects to HTTPS.
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), redirect_url());
+    VerifyPreviewLoaded();
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       true, 1);
+  }
 
-  // Verify the preview is triggered when an HTTPS page redirects to HTTPS.
-  ui_test_utils::NavigateToURL(browser(), https_lite_page_url(307));
-  VerifyPreviewLoaded();
+  {
+    // Verify the preview is triggered when an HTTPS page redirects to HTTPS.
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), https_lite_page_url(307));
+    VerifyPreviewLoaded();
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       true, 2);
+  }
 }
 
 // Previews InfoBar (which these tests trigger) does not work on Mac.
@@ -595,13 +710,35 @@
 #endif
 IN_PROC_BROWSER_TEST_F(PreviewsLitePageServerBrowserTest,
                        MAYBE_LitePagePreviewsResponse) {
-  // Verify the preview is not triggered when the server responds with 404.
-  ui_test_utils::NavigateToURL(browser(), https_lite_page_url(404));
-  VerifyPreviewNotLoaded();
+  {
+    // Verify the preview is not triggered when the server responds with 404.
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), https_lite_page_url(404));
+    VerifyPreviewNotLoaded();
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       true, 1);
+    histogram_tester.ExpectTotalCount(
+        "Previews.ServerLitePage.HttpOnlyFallbackPenalty", 1);
+    histogram_tester.ExpectBucketCount(
+        "Previews.ServerLitePage.ServerResponse",
+        PreviewsLitePageNavigationThrottle::ServerResponse::kPreviewUnavailable,
+        1);
+  }
 
-  // Verify the preview is not triggered when the server responds with 503.
-  ui_test_utils::NavigateToURL(browser(), https_lite_page_url(503));
-  VerifyPreviewNotLoaded();
+  {
+    // Verify the preview is not triggered when the server responds with 503.
+    base::HistogramTester histogram_tester;
+    ui_test_utils::NavigateToURL(browser(), https_lite_page_url(503));
+    VerifyPreviewNotLoaded();
+    histogram_tester.ExpectBucketCount("Previews.ServerLitePage.Triggered",
+                                       true, 1);
+    histogram_tester.ExpectTotalCount(
+        "Previews.ServerLitePage.HttpOnlyFallbackPenalty", 1);
+    histogram_tester.ExpectBucketCount(
+        "Previews.ServerLitePage.ServerResponse",
+        PreviewsLitePageNavigationThrottle::ServerResponse::kServiceUnavailable,
+        1);
+  }
 }
 
 // Previews InfoBar (which these tests trigger) does not work on Mac.
diff --git a/chrome/browser/previews/previews_lite_page_navigation_throttle.cc b/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
index 3ecfc865..620ba03 100644
--- a/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
+++ b/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
@@ -5,8 +5,10 @@
 #include "chrome/browser/previews/previews_lite_page_navigation_throttle.h"
 
 #include <string>
+#include <vector>
 
 #include "base/memory/weak_ptr.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
@@ -103,40 +105,60 @@
     default;
 
 bool PreviewsLitePageNavigationThrottle::IsEligibleForPreview() const {
+  // Check if the parameters of the navigation are not eligible for the preview.
+  std::vector<IneligibleReason> ineligible_reasons;
   const GURL& url = navigation_handle()->GetURL();
   if (!url.SchemeIs(url::kHttpsScheme))
-    return false;
+    ineligible_reasons.push_back(IneligibleReason::kNonHttpsScheme);
 
   if (navigation_handle()->IsPost())
-    return false;
+    ineligible_reasons.push_back(IneligibleReason::kHttpPost);
 
   if (!navigation_handle()->IsInMainFrame())
-    return false;
+    ineligible_reasons.push_back(IneligibleReason::kSubframeNavigation);
 
   if (manager_->IsServerUnavailable())
+    ineligible_reasons.push_back(IneligibleReason::kServerUnavailable);
+
+  // Record UMA.
+  for (IneligibleReason reason : ineligible_reasons) {
+    UMA_HISTOGRAM_ENUMERATION("Previews.ServerLitePage.IneligibleReasons",
+                              reason);
+  }
+  if (!ineligible_reasons.empty())
     return false;
 
+  // Check dynamic blacklists.
+  std::vector<BlacklistReason> blacklist_reasons;
+
   if (IsPreviewsDomain(url))
-    return false;
+    blacklist_reasons.push_back(BlacklistReason::kNavigationToPreviewsDomain);
 
   if (IsPrivateDomain(url))
-    return false;
+    blacklist_reasons.push_back(BlacklistReason::kNavigationToPrivateDomain);
 
   std::vector<std::string> blacklisted_path_suffixes =
       previews::params::LitePagePreviewsBlacklistedPathSuffixes();
-  for (std::string suffix : blacklisted_path_suffixes) {
+  for (const std::string& suffix : blacklisted_path_suffixes) {
     if (base::EndsWith(url.path(), suffix,
                        base::CompareCase::INSENSITIVE_ASCII)) {
-      return false;
+      blacklist_reasons.push_back(BlacklistReason::kPathSuffixBlacklisted);
+      break;
     }
   }
 
-  return true;
+  // Record UMA
+  for (BlacklistReason reason : blacklist_reasons) {
+    UMA_HISTOGRAM_ENUMERATION("Previews.ServerLitePage.BlacklistReasons",
+                              reason);
+  }
+
+  return blacklist_reasons.empty();
 }
 
 // static
 bool PreviewsLitePageNavigationThrottle::GetOriginalURL(
-    GURL url,
+    const GURL& url,
     std::string* original_url) {
   if (!url.is_valid())
     return false;
@@ -202,15 +224,13 @@
 
 content::NavigationThrottle::ThrottleCheckResult
 PreviewsLitePageNavigationThrottle::MaybeNavigateToPreview() const {
-  const GURL url = navigation_handle()->GetURL();
-  if (!IsEligibleForPreview())
-    return content::NavigationThrottle::PROCEED;
-
-  // Make sure we're not trying to bypass this navigation.
-  if (manager_->CheckSingleBypass(url.spec()))
-    return content::NavigationThrottle::PROCEED;
-
-  return TriggerPreview();
+  const bool trigger =
+      IsEligibleForPreview() &&
+      !manager_->CheckSingleBypass(navigation_handle()->GetURL().spec());
+  UMA_HISTOGRAM_BOOLEAN("Previews.ServerLitePage.Triggered", trigger);
+  if (trigger)
+    return TriggerPreview();
+  return content::NavigationThrottle::PROCEED;
 }
 
 content::NavigationThrottle::ThrottleCheckResult
@@ -229,6 +249,9 @@
   if (!GetOriginalURL(navigation_handle()->GetURL(), &original_url))
     return content::NavigationThrottle::PROCEED;
 
+  UMA_HISTOGRAM_ENUMERATION("Previews.ServerLitePage.ServerResponse",
+                            ServerResponse::kFailed);
+
   // The Preview was triggered but there was some irrecoverable issue (like
   // there is no network connection). Load the original page and let it go
   // through the normal process for whatever error it is.
@@ -243,8 +266,7 @@
 PreviewsLitePageNavigationThrottle::WillProcessResponse() {
   const net::HttpResponseHeaders* response_headers =
       navigation_handle()->GetResponseHeaders();
-  if (!response_headers)
-    return content::NavigationThrottle::PROCEED;
+  DCHECK(response_headers);
 
   std::string original_url;
   if (!GetOriginalURL(navigation_handle()->GetURL(), &original_url)) {
@@ -260,9 +282,31 @@
 
   const int response_code = response_headers->response_code();
 
-  if (response_code == net::HTTP_OK ||
-      response_code == net::HTTP_TEMPORARY_REDIRECT)
+  if (response_code == net::HTTP_OK) {
+    UMA_HISTOGRAM_ENUMERATION("Previews.ServerLitePage.ServerResponse",
+                              ServerResponse::kOk);
     return content::NavigationThrottle::PROCEED;
+  }
+
+  if (response_code == net::HTTP_TEMPORARY_REDIRECT) {
+    UMA_HISTOGRAM_ENUMERATION("Previews.ServerLitePage.ServerResponse",
+                              ServerResponse::kRedirect);
+    return content::NavigationThrottle::PROCEED;
+  }
+
+  const base::TimeDelta penalty =
+      base::TimeTicks::Now() - navigation_handle()->NavigationStart();
+  UMA_HISTOGRAM_MEDIUM_TIMES("Previews.ServerLitePage.HttpOnlyFallbackPenalty",
+                             penalty);
+  manager_->AddSingleBypass(original_url);
+  content::OpenURLParams original_url_params =
+      MakeOpenURLParams(navigation_handle(), GURL(original_url));
+
+  if (response_code == net::HTTP_NOT_FOUND) {
+    UMA_HISTOGRAM_ENUMERATION("Previews.ServerLitePage.ServerResponse",
+                              ServerResponse::kPreviewUnavailable);
+    return CreateNewNavigation(original_url_params);
+  }
 
   if (response_code == net::HTTP_SERVICE_UNAVAILABLE) {
     std::string retry_after_header;
@@ -274,13 +318,15 @@
                                            base::Time::Now(), &retry_after);
     }
     manager_->SetServerUnavailableFor(retry_after);
+
+    UMA_HISTOGRAM_ENUMERATION("Previews.ServerLitePage.ServerResponse",
+                              ServerResponse::kServiceUnavailable);
+    return CreateNewNavigation(original_url_params);
   }
 
-  manager_->AddSingleBypass(original_url);
-  content::OpenURLParams url_params =
-      MakeOpenURLParams(navigation_handle(), GURL(original_url));
-
-  return CreateNewNavigation(url_params);
+  UMA_HISTOGRAM_ENUMERATION("Previews.ServerLitePage.ServerResponse",
+                            ServerResponse::kOther);
+  return CreateNewNavigation(original_url_params);
 }
 
 const char* PreviewsLitePageNavigationThrottle::GetNameForLogging() {
diff --git a/chrome/browser/previews/previews_lite_page_navigation_throttle.h b/chrome/browser/previews/previews_lite_page_navigation_throttle.h
index 1ec8cc91..7c2a41c 100644
--- a/chrome/browser/previews/previews_lite_page_navigation_throttle.h
+++ b/chrome/browser/previews/previews_lite_page_navigation_throttle.h
@@ -20,6 +20,40 @@
 // new one to the Previews Server.
 class PreviewsLitePageNavigationThrottle : public content::NavigationThrottle {
  public:
+  // Reasons that a navigation is blacklisted from this preview. This enum must
+  // remain synchronized with the enum |PreviewsServerLitePageBlacklistReason|
+  // in metrics/histograms/enums.xml.
+  enum class BlacklistReason {
+    kPathSuffixBlacklisted = 0,
+    kNavigationToPreviewsDomain = 1,
+    kNavigationToPrivateDomain = 2,
+    kMaxValue = kNavigationToPrivateDomain,
+  };
+
+  // Reasons that a navigation is not eligible for this preview. This enum must
+  // remain synchronized with the enum |PreviewsServerLitePageIneligibleReason|
+  // in metrics/histograms/enums.xml.
+  enum class IneligibleReason {
+    kNonHttpsScheme = 0,
+    kHttpPost = 1,
+    kSubframeNavigation = 2,
+    kServerUnavailable = 3,
+    kMaxValue = kServerUnavailable,
+  };
+
+  // The response type from the previews server. This enum must
+  // remain synchronized with the enum |PreviewsServerLitePageServerResponse| in
+  // metrics/histograms/enums.xml.
+  enum class ServerResponse {
+    kOk = 0,
+    kRedirect = 1,
+    kPreviewUnavailable = 2,
+    kServiceUnavailable = 3,
+    kOther = 4,
+    kFailed = 5,
+    kMaxValue = kFailed,
+  };
+
   PreviewsLitePageNavigationThrottle(
       content::NavigationHandle* handle,
       PreviewsLitePageNavigationThrottleManager* manager);
@@ -29,7 +63,7 @@
   // Attempts to extract the original URL from the given Previews URL. Returns
   // false if |url| is not a valid Preview URL. It is ok to pass nullptr for
   // |original_url| if you only want the boolean return value.
-  static bool GetOriginalURL(GURL url, std::string* original_url);
+  static bool GetOriginalURL(const GURL& url, std::string* original_url);
 
  private:
   FRIEND_TEST_ALL_PREFIXES(PreviewsLitePageNavigationThrottleTest,
diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc
index a384ac8..3e3e758 100644
--- a/chrome/browser/profiles/profile_impl_io_data.cc
+++ b/chrome/browser/profiles/profile_impl_io_data.cc
@@ -469,7 +469,6 @@
       data_reduction_proxy_io_data()->CreateInterceptor());
   data_reduction_proxy_io_data()->SetDataUseAscriber(
       io_thread_globals->data_use_ascriber.get());
-  data_reduction_proxy_io_data()->SetPreviewsDecider(previews_decider_impl());
   SetUpJobFactoryDefaultsForBuilder(
       builder, std::move(request_interceptors),
       std::move(profile_params->protocol_handler_interceptor));
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bn.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bn.xtb
index 8a7d61af..8fb7dd04 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bn.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bn.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">অবৈধ ইনপুট</translation>
 <translation id="1080471004309605942">তেরছা অক্ষর শেষ</translation>
 <translation id="1082209053475788238">কোনো পূর্ববর্তী স্তর ৬ শিরোনাম নেই৷</translation>
+<translation id="1087788677726983142">ইভেন্ট স্ট্রিম ফিল্টার লুকান</translation>
 <translation id="1088219014394087294">কোনো শিরোলেখ নেই৷</translation>
 <translation id="1106741348836243114">শব্দ প্রতিক্রিয়া  (earcons) চালু বা বন্ধ করুন৷</translation>
 <translation id="1108651818222110612">সাবটাইটেল</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">বর্তমান অবস্থানটির একটি সম্পূর্ণ বিবরণ ঘোষণা করে</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{বৃহত্তম}one{#টি বৃহত্তম চিহ্ন}other{#টি বৃহত্তম চিহ্ন}}</translation>
 <translation id="1653266918374749391">পূর্ববর্তী স্তর ৩ শিরোনাম</translation>
+<translation id="1657616855184033958">ইভেন্ট স্ট্রিম ফিল্টার দেখান</translation>
 <translation id="1659072772017912254">চেক করা হয়নি</translation>
 <translation id="1669290819662866522">সপ্তাহ</translation>
 <translation id="1674262202423278359">ChromeVox নেভিগেশান</translation>
@@ -137,6 +139,7 @@
 <translation id="2267945578749931355">পরবর্তী অক্ষর</translation>
 <translation id="2281234842553884450">পূর্ববর্তী স্লাইডার</translation>
 <translation id="2294136146931447363">তেরছা অক্ষর শুরু</translation>
+<translation id="2311237334957139798">পরবর্তী ধাপে যান</translation>
 <translation id="2318372665160196757">প্রধান</translation>
 <translation id="2329324941084714723">ট্যাব প্যানেল</translation>
 <translation id="2344193891939537199">তারিখ সময় নিয়ন্ত্রণ</translation>
@@ -412,6 +415,7 @@
 <translation id="4255943572433203166">ChromeVox কাস্টমাইজ করতে নীচের বিকল্পগুলি ব্যবহার করুন৷ পরিবর্তনগুলি তাত্ক্ষণিকভাবে প্রভাবিত হয়৷</translation>
 <translation id="4271220233568730077">পরবর্তী গাণিতিক</translation>
 <translation id="4271521365602459209">আর কোনো ফলাফল নেই৷</translation>
+<translation id="4275397969489577657">ইভেন্ট স্ট্রিম লগ-ইন চালু করুন</translation>
 <translation id="4287520460805643128">এরপরে কোনো নিবন্ধ নেই৷</translation>
 <translation id="4289540628985791613">ওভারভিউ</translation>
 <translation id="4300318234632215983">একটি লিঙ্কের পিছনের URL ঘোষণা করুন</translation>
@@ -490,6 +494,7 @@
 <translation id="4973762002207131920"><ph name="KEY" /> এ স্যুইচ করেছে৷</translation>
 <translation id="4975416682604111799">মিলিসেকেন্ড</translation>
 <translation id="49787999531187221">ChromeVox বর্তমানে নিষ্ক্রিয় রয়েছে৷</translation>
+<translation id="4979263087381759787">ডেভেলপারের বিকল্প</translation>
 <translation id="4979404613699303341">পূর্ববর্তী বোতাম</translation>
 <translation id="4982773647088557172"><ph name="VALUE" />, <ph name="NAME" />, তালিকা বাক্স</translation>
 <translation id="4983588134362688868">পৃষ্ঠাটির শীর্ষে ফিরে যান</translation>
@@ -501,6 +506,7 @@
 <translation id="5000760171916499057">কোনো ফর্ম নেই৷</translation>
 <translation id="5005670136041063723">কোনো অনুরূপ উপাদান নেই৷</translation>
 <translation id="501473567976723023">জানুয়ারি</translation>
+<translation id="5020651427400641814">ভাষ্য লগ-ইন বিকল্প চালু করুন</translation>
 <translation id="5041394372352067729">পৃষ্ঠার উপরের দিকে ব্রেইল প্রদর্শন সরান</translation>
 <translation id="5042770794184672516">কথন ভলিউম বাড়ান</translation>
 <translation id="5050015258024679800">পূর্ববর্তী স্তর ৫ শিরোনাম</translation>
@@ -515,6 +521,7 @@
 <translation id="5106547198195128110">এই নতুন রিলিজে আমরা কিছু আকর্ষণীয় পরিবর্তন নিয়ে এসেছি; নতুন কি আছে তা এখানে দেওয়া হল:</translation>
 <translation id="5110983769041734144">কোনো পরবর্তী ফর্ম ক্ষেত্র নেই৷</translation>
 <translation id="5111640677200759579">কলাম শিরোলেখ</translation>
+<translation id="5115892389597951922">ChromeVox লগ</translation>
 <translation id="5136967254288895616">কোনো পূর্ববর্তী লিঙ্ক নেই৷</translation>
 <translation id="513774504516943387">lnk</translation>
 <translation id="5158275234811857234">কভার</translation>
@@ -548,6 +555,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{সেমিকোলন}one{#টি সেমিকোলন}other{#টি সেমিকোলন}}</translation>
 <translation id="5411891038905756502">কোনো পূর্ববর্তী জাম্প বিন্দু নেই৷</translation>
 <translation id="5417034931411865818">রাউটিং কী $1 এর নিচের আইটেমটি ক্লিক করুন</translation>
+<translation id="5435274640623994081">ইয়ারকন লগ-ইন চালু করুন</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{ক্ষুদ্রতম}one{#টি ক্ষুদ্রতম চিহ্ন}other{#টি ক্ষুদ্রতম চিহ্ন}}</translation>
 <translation id="5444587279251314700">(সক্রিয়)</translation>
 <translation id="5446809554778706307">কোনও ফোকাস নেই। একটি নতুন ট্যাব খুলতে Ctrl+T টিপুন।</translation>
@@ -681,6 +689,7 @@
 <translation id="6540201937398578274">ChromeVox এ, সার্চ বোতাম হল পরিবর্তক বোতাম। বেশিরভাগ ChromeVox শর্টকাটগুলি সার্চ বোতাম দিয়ে শুরু হয়। এছাড়াও, নেভিগেশনের জন্য আপনি তীরচিহ্নগুলি ব্যবহার করবেন।</translation>
 <translation id="6550720799683018100">নিচের তালিকা থেকে একটি বিকল্প নির্বাচনের মাধ্যমে বর্তমান কীম্যাপটি পরিবর্তন করুন৷</translation>
 <translation id="6561818612645211875">বর্তমান সারির শুরুতে যান</translation>
+<translation id="6583174818554398774">পরবর্তী ধাপে যান</translation>
 <translation id="6587021927234520429">কোনো পূর্ববর্তী স্তর ৪ শিরোনাম নেই৷</translation>
 <translation id="6601344353291556895">ভার্বোস বিবরণগুলি সক্ষম করুন৷</translation>
 <translation id="6615602925644411249">পৃষ্ঠায় খুঁজুন৷</translation>
@@ -897,6 +906,7 @@
 <translation id="8650576015643545550">কোনো পূর্ববর্তী তালিকা নেই৷</translation>
 <translation id="8651481478098336970">ভলিউম মিউট</translation>
 <translation id="8653646212587894517">লিঙ্কের তালিকাগুলি দেখান</translation>
+<translation id="8656888282555543604">ব্রেইল লগ-ইন চালু করুন</translation>
 <translation id="8664519043722036194">সেকেন্ড</translation>
 <translation id="867187640362843212">শিরোনাম ৫</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{পাইপ}one{#টি উলম্ব পাইপ}other{#টি উলম্ব পাইপ}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb
index 91e4c5af..7a79462 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb
@@ -139,7 +139,7 @@
 <translation id="2267945578749931355">Επόμενος χαρακτήρας</translation>
 <translation id="2281234842553884450">Προηγούμενο ρυθμιστικό</translation>
 <translation id="2294136146931447363">Αρχή πλάγιας γραφής</translation>
-<translation id="2311237334957139798">Μετακίνηση στο προηγούμενο σε επίπεδο ευαισθησίας</translation>
+<translation id="2311237334957139798">Μετακίνηση στο προηγούμενο επίπεδο ευαισθησίας</translation>
 <translation id="2318372665160196757">Κύριο</translation>
 <translation id="2329324941084714723">Παράθυρο καρτέλας</translation>
 <translation id="2344193891939537199">Έλεγχος ημερομηνίας και ώρας</translation>
@@ -689,7 +689,7 @@
 <translation id="6540201937398578274">Στο ChromeVox, το πλήκτρο αναζήτησης είναι το πλήκτρο τροποποίησης. Οι περισσότερες συντομεύσεις του ChromeVox ξεκινούν με το πλήκτρο αναζήτησης. Μπορείτε επίσης να χρησιμοποιήστε τα πλήκτρα βέλους για πλοήγηση.</translation>
 <translation id="6550720799683018100">Αλλάξτε την τρέχουσα αντιστοίχιση πλήκτρων ορίζοντας μια επιλογή από την παρακάτω λίστα.</translation>
 <translation id="6561818612645211875">Μετάβαση στην αρχή της τρέχουσας σειράς</translation>
-<translation id="6583174818554398774">Μετακίνηση στο επόμενο σε επίπεδο ευαισθησίας</translation>
+<translation id="6583174818554398774">Μετακίνηση στο επόμενο επίπεδο ευαισθησίας</translation>
 <translation id="6587021927234520429">Δεν υπάρχει επόμενη επικεφαλίδα επιπέδου 4.</translation>
 <translation id="6601344353291556895">Ενεργοποίηση περιγραφών verbose.</translation>
 <translation id="6615602925644411249">Εύρεση στη σελίδα.</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_en-GB.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_en-GB.xtb
index 4223c6f..34a09ca6 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_en-GB.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_en-GB.xtb
@@ -5,6 +5,7 @@
 <translation id="1011903154582639569">Find a key, then lift to type</translation>
 <translation id="1012173283529841972">List item</translation>
 <translation id="1013742170491673792">srched</translation>
+<translation id="1014370462248694370">Swipe two fingers right</translation>
 <translation id="1022586497894531524">Are you using ChromeVox spoken feedback for the first time? This quick tutorial explains the essentials for getting started with ChromeVox.</translation>
 <translation id="1023866615269196768">Spanned.</translation>
 <translation id="1025074108959230262">Sticky mode disabled</translation>
@@ -21,6 +22,7 @@
 <translation id="1106741348836243114">Turn sound feedback (earcons) on or off.</translation>
 <translation id="1108651818222110612">subti</translation>
 <translation id="1120743664840974483">{"a": "alpha", "b": "bravo", "c": "charlie", "d": "delta", "e": "echo", "f": "foxtrot", "g": "golf", "h": "hotel", "i": "india", "j": "juliet","k": "kilo", "l": "lima", "m": "mike", "n": "november", "o": "oscar","p": "papa", "q": "quebec", "r": "romeo", "s": "sierra", "t": "tango", "u": "uniform", "v": "victor", "w": "whiskey","x": "xray", "y": "yankee", "z": "zulu"}</translation>
+<translation id="1120938014254001895">Swipe two fingers up</translation>
 <translation id="1124771028211010580">Current display style is side by side.</translation>
 <translation id="113582498867142724"><ph name="TAG" /> collection with <ph name="NUM" /> items</translation>
 <translation id="1155043339247954670">No next list item.</translation>
@@ -91,6 +93,7 @@
 <translation id="1722567105086139392">Link</translation>
 <translation id="1727806147743597030">ftr</translation>
 <translation id="174268867904053074">Next graphic</translation>
+<translation id="1765245556747822181">Swipe one finger up</translation>
 <translation id="1781173782405573156">Pass through key</translation>
 <translation id="1787176709638001873">Password edit text</translation>
 <translation id="1802710350767629429">Show update notes</translation>
@@ -137,6 +140,7 @@
 <translation id="2223693656926968778">Take action on current item</translation>
 <translation id="225732394367814946">Increase rate of speech</translation>
 <translation id="2267945578749931355">Next Character</translation>
+<translation id="2278490101488436824">Swipe three fingers left</translation>
 <translation id="2281234842553884450">Previous slider</translation>
 <translation id="2294136146931447363">Italic start</translation>
 <translation id="2311237334957139798">Move to previous at granularity</translation>
@@ -209,17 +213,20 @@
 <translation id="2864481629947106776">Previous link</translation>
 <translation id="2867808975387772810">Bibliography</translation>
 <translation id="2873259058405069099">Go to beginning of table</translation>
+<translation id="2879867157561757640">Swipe three fingers down</translation>
 <translation id="288178314850623291">Use jump commands to skip to specific types of elements. To jump forward between headings, press Search + H, or to jump backward, press Search + Shift + H.</translation>
 <translation id="2894654529758326923">Information</translation>
 <translation id="2899328121302785497">{COUNT,plural, =1{left brace}other{# left braces}}</translation>
 <translation id="2909478709401302630">Superscript start</translation>
 <translation id="2911433807131383493">Open ChromeVox tutorial</translation>
+<translation id="2912405967290226587">Swipe three fingers right</translation>
 <translation id="2932083475399492303">Toggle line type between structural or layout</translation>
 <translation id="2944762337049891859">Automatically read page after it finishes loading.</translation>
 <translation id="2964026537669811554">Heading group</translation>
 <translation id="296951647852255825">{COUNT,plural, =1{tab}other{# tabs}}</translation>
 <translation id="2972078295414139404">No previous visited link.</translation>
 <translation id="2972205263822847197">Tool tip</translation>
+<translation id="297825089465017871">Swipe two fingers left</translation>
 <translation id="2998131015536248178">Previous Character</translation>
 <translation id="2999559350546931576">Decrease pitch</translation>
 <translation id="2999945368667127852">No next media widget.</translation>
@@ -231,6 +238,7 @@
 <translation id="3046838483509668188">ChromeVox Options</translation>
 <translation id="3047143736589213134">Experimental keymap</translation>
 <translation id="3060756054951570867"><ph name="TITLE" /> menu opened</translation>
+<translation id="3070245424257836917">Swipe three fingers up</translation>
 <translation id="3078345202707391975">Next level 2 heading</translation>
 <translation id="3078740164268491126">table</translation>
 <translation id="3082249673510793544">Scroll back</translation>
@@ -343,6 +351,7 @@
 <translation id="3599054940393788245">Not inside math</translation>
 <translation id="360241989769010433">Acknowledgements</translation>
 <translation id="3616113530831147358">Audio</translation>
+<translation id="3622350485154495700">Double tap with one finger</translation>
 <translation id="3646890046000188562">{COUNT,plural, =1{backtick}other{# backticks}}</translation>
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dollar}other{# dollar signs}}</translation>
@@ -462,6 +471,7 @@
 <translation id="4688873778442829762">grd</translation>
 <translation id="4693675773662933727">Previous landmark</translation>
 <translation id="4696413482802371445">No next level 5 heading.</translation>
+<translation id="4710166929009737753">Swipe one finger right</translation>
 <translation id="4729095194763193578">Previous table row</translation>
 <translation id="4736221692378411923">August</translation>
 <translation id="4740661827607246557">Help Commands</translation>
@@ -474,6 +484,7 @@
 <translation id="4826415162591436065">Navigate forward</translation>
 <translation id="4826604887384865800">Next jump</translation>
 <translation id="4827410568042294688">unselected</translation>
+<translation id="4838490795649708173">Tap with four fingers</translation>
 <translation id="4839925464551908214">Go to the previous row</translation>
 <translation id="4842108708071771135">No next block quote.</translation>
 <translation id="4844625982113518938">Press any key to learn its name. Ctrl+W will close learn mode.</translation>
@@ -610,6 +621,7 @@
 <translation id="5750633686117194034">No modifier pressed; please press and hold one or more modifiers; lift your fingers once done and you will hear the keys set. Tab to exit.</translation>
 <translation id="5760594853119905566">Appendix</translation>
 <translation id="5788275253279308023">incognito window <ph name="TITLE" /> tab</translation>
+<translation id="5805940204952508776">Tap with two fingers</translation>
 <translation id="5806206155699461681">Enhance specific sites (like Google Search).</translation>
 <translation id="5819072574982403430">Tree item</translation>
 <translation id="5826479389509458994">row <ph name="ROW" /> column <ph name="COL" /></translation>
@@ -714,8 +726,10 @@
 <translation id="6786800275320335305">Article</translation>
 <translation id="6787839852456839824">Keyboard shortcuts</translation>
 <translation id="6793101435925451627">lstbx</translation>
+<translation id="6826226459053491773">Swipe two fingers down</translation>
 <translation id="6833103209700200188">Footer</translation>
 <translation id="6858047746862060282">Prologue</translation>
+<translation id="6859876496651143278">Swipe one finger left</translation>
 <translation id="6871161210040114857">Ignoring case.</translation>
 <translation id="6877435256196695200">No next graphic.</translation>
 <translation id="6897341342232909480">Move left</translation>
@@ -965,6 +979,7 @@
 <translation id="923331726185079994">ChromeVox Updated</translation>
 <translation id="930275611743429116">Start or end selection.</translation>
 <translation id="948171205378458592">Decrease rate of speech</translation>
+<translation id="958854023026327378">Swipe one finger down</translation>
 <translation id="962913030769097253">Next level 1 heading</translation>
 <translation id="973955474346881951">Enable / Disable sticky mode</translation>
 <translation id="976849232629612000">No items.</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
index 88e08d6..8ceaea5 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
@@ -139,6 +139,7 @@
 <translation id="2267945578749931355">Carácter siguiente</translation>
 <translation id="2281234842553884450">Control deslizante anterior</translation>
 <translation id="2294136146931447363">Inicio del texto en cursiva</translation>
+<translation id="2311237334957139798">Ir al gesto del nivel de detalle anterior</translation>
 <translation id="2318372665160196757">Principales</translation>
 <translation id="2329324941084714723">Panel de pestañas</translation>
 <translation id="2344193891939537199">Control de hora y fecha</translation>
@@ -520,6 +521,7 @@
 <translation id="5106547198195128110">Tenemos algunos cambios en la versión nueva. Estas son las novedades:</translation>
 <translation id="5110983769041734144">No hay ningún campo de formulario anterior.</translation>
 <translation id="5111640677200759579">Encabezado de columna</translation>
+<translation id="5115892389597951922">Registro de ChromeVox</translation>
 <translation id="5136967254288895616">No hay ningún vínculo anterior.</translation>
 <translation id="513774504516943387">vncl</translation>
 <translation id="5158275234811857234">Portada</translation>
@@ -687,6 +689,7 @@
 <translation id="6540201937398578274">En ChromeVox, la tecla de búsqueda es la tecla modificadora. La mayoría de las combinaciones de tecla de ChromeVox comienzan con la tecla de búsqueda. También se usan las teclas de flechas para la navegación.</translation>
 <translation id="6550720799683018100">Para cambiar el mapa de teclado, selecciona una de las opciones de la lista que aparece a continuación.</translation>
 <translation id="6561818612645211875">Ir al principio de la fila actual</translation>
+<translation id="6583174818554398774">Ir al gesto del nivel de detalle siguiente</translation>
 <translation id="6587021927234520429">No hay ningún encabezado de nivel 4 posterior.</translation>
 <translation id="6601344353291556895">Habilitar descripciones más detalladas</translation>
 <translation id="6615602925644411249">Buscar en la página</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hi.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hi.xtb
index 48ce54b..16f88b1 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hi.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hi.xtb
@@ -46,7 +46,7 @@
 <translation id="1321576897702511272">ChromeVox सहायता छिपाएं</translation>
 <translation id="1331702245475014624"><ph name="TOTAL" /> में से <ph name="INDEX" /></translation>
 <translation id="1334095593597963605">वर्ण तथा शब्द इको</translation>
-<translation id="1339428534620983148">पिछला तालिका स्तंभ</translation>
+<translation id="1339428534620983148">पिछला तालिका कॉलम</translation>
 <translation id="1342835525016946179">लेख</translation>
 <translation id="1346748346194534595">दाएं</translation>
 <translation id="135978014023467274">आपको ChromeVox 63 में अपडेट किया गया है!</translation>
@@ -120,7 +120,7 @@
 <translation id="207477615537953741">शब्दार्थ विज्ञान बंद</translation>
 <translation id="2086961585857038472">अगला शब्‍द</translation>
 <translation id="2089387485033699258">hi</translation>
-<translation id="2091933974477985526">पिछला संपादन-योग्‍य लेख क्षेत्र</translation>
+<translation id="2091933974477985526">बदलाव करने लायक पिछला टेक्स्ट एरिया</translation>
 <translation id="2100350898815792233">सभी विराम चिह्न</translation>
 <translation id="2110480898214777136">किसी पेज, संवाद या अन्य कंटेनर के भीतर शुरुआत से अंत तक ले जाएं या अंत से शुरुआत तक ले जाएं</translation>
 <translation id="2119965627982867824">spnbtn</translation>
@@ -259,7 +259,7 @@
 <translation id="3226035351387556942">chk</translation>
 <translation id="3229375994964697375">देखा गया लिंक</translation>
 <translation id="3232388865800379423">पॉप-अप बटन</translation>
-<translation id="3241052487511142956">पहले देखा गया लिंक</translation>
+<translation id="3241052487511142956">देखा गया पिछला लिंक</translation>
 <translation id="3241638166094654466">हर एक पंक्ति में सेल:</translation>
 <translation id="3286372614333682499">पोर्ट्रेट</translation>
 <translation id="3286390186030710347">स्लाइडर</translation>
@@ -271,7 +271,7 @@
 <translation id="3313245066383501820">ChromeVox बदलने वाली की</translation>
 <translation id="3317212938060708859">स्लाइडर</translation>
 <translation id="3321460131042519426">शब्द लपेटना सक्षम करें</translation>
-<translation id="3322936298410871309">पिछले स्‍तर 1 का शीर्षक</translation>
+<translation id="3322936298410871309">पिछला लेवल 1 शीर्षक</translation>
 <translation id="3323447499041942178">टेक्स्ट बॉक्‍स</translation>
 <translation id="3338224621010291843"><ph name="VALUE" /> <ph name="NAME" /> स्‍लाइडर</translation>
 <translation id="3353420241558113817">{"ar": "अरबी",
@@ -378,7 +378,7 @@
 <translation id="4038349100599457191">माह नियंत्रण</translation>
 <translation id="4039983576244166038">खाली पंक्ति शीर्षलेख</translation>
 <translation id="4042843249978639960">कोई अगला स्तर 2 शीर्षक नहीं.</translation>
-<translation id="4043348641337972076">कोई पिछला ARIA स्थानचिह्न नहीं.</translation>
+<translation id="4043348641337972076">कोई पिछला ARIA लैंडमार्क नहीं.</translation>
 <translation id="4045764028670444336">गलत वर्तनी शुरू</translation>
 <translation id="4047216625641135770">मार्क</translation>
 <translation id="404803211695627272"><ph name="V1" />-<ph name="V2" /></translation>
@@ -480,7 +480,7 @@
 <translation id="4846428657345567687">ChromeVox में आपका स्वागत है!</translation>
 <translation id="4846487886195635104">स्ट्राइक-थ्रू समाप्त</translation>
 <translation id="4848993367330139335">tmr</translation>
-<translation id="4850023505158945298">पिछला समान तत्व.</translation>
+<translation id="4850023505158945298">पिछली एलिमेंट कमांड</translation>
 <translation id="4866956062845190338">rdmnuitm</translation>
 <translation id="4867316986324544967">TTS लॉगिंग सक्षम करें</translation>
 <translation id="4877261390094455813">खोज क्वेरी डालें.</translation>
@@ -489,7 +489,7 @@
 <translation id="492295894462528572">भूमिका</translation>
 <translation id="495170559598752135">क्रियाएं</translation>
 <translation id="4953585991029886728">लेख संपादित करें</translation>
-<translation id="4954534434583049121">पिछला ब्‍लॉक कोट</translation>
+<translation id="4954534434583049121">पिछला ब्‍लॉक क्वोट</translation>
 <translation id="4973717656530883744">न्‍यूनतम <ph name="X" /></translation>
 <translation id="4973762002207131920"><ph name="KEY" /> पर स्विच किया गया.</translation>
 <translation id="4975416682604111799">मिलीसेकंड</translation>
@@ -509,7 +509,7 @@
 <translation id="5020651427400641814">'बोलकर लॉग करना' चालू करें</translation>
 <translation id="5041394372352067729">ब्रेल प्रदर्शन को पेज के शीर्ष पर ले जाएं</translation>
 <translation id="5042770794184672516">बोली वॉल्‍यूम बढ़ाएं</translation>
-<translation id="5050015258024679800">पिछले स्‍तर 4 का शीर्षक</translation>
+<translation id="5050015258024679800">पिछला लेवल 4 का शीर्षक</translation>
 <translation id="5054047268577924192">पिछला सूची आइटम</translation>
 <translation id="5075936896689244141">अगला कीमैप</translation>
 <translation id="5078661581131202757">फ़ाइल चयन</translation>
@@ -565,7 +565,7 @@
 <translation id="5485036206801896268">कोई पिछला ग्राफ़िक नहीं.</translation>
 <translation id="5486947920110100234">कोई अगला जंप बिंदु नहीं.</translation>
 <translation id="549602578321198708">शब्‍द</translation>
-<translation id="5500932716852106146">कोई पिछला संपादन-योग्य लेख फ़ील्ड नहीं.</translation>
+<translation id="5500932716852106146">बदलाव करने लायक कोई पिछला टेक्स्ट एरिया नहीं</translation>
 <translation id="5502713021410870035">सितंबर</translation>
 <translation id="5507663321906818013">बेंचमार्क को डीबग करें</translation>
 <translation id="5518443085409638729">लेख (जैसे Mac OS X) को संपादित करते समय कर्सर को वर्णों के बीच रखें.</translation>
@@ -606,7 +606,7 @@
 <translation id="5728409797179002635">कोई तालिका नहीं मिली.</translation>
 <translation id="5729047866208036762">गणित के बारे में और जानने के लिए ऊपर, नीचे, बाएं या दाएं वाले तीर दबाएं.</translation>
 <translation id="5732189279857692565">यह दूसरा शीर्षक है. आगे बढ़ते रहें; Search+H या Search+Shift+H दबाएं</translation>
-<translation id="5748623122140342504">पिछले स्‍तर 5 का शीर्षक</translation>
+<translation id="5748623122140342504">पिछला लेवल 5 का शीर्षक</translation>
 <translation id="5750633686117194034">कोई संशोधक नहीं दबाया गया; कृपया एक या अधिक संशोधक दबाकर रखें; पूर्ण हो जाने पर अपनी अंगुलियां उठा लें और आपको सुनाई देगा कि कुंजियां सेट हो गई हैं. बाहर निकलने के लिए टैब दबाएं.</translation>
 <translation id="5760594853119905566">परिशिष्ट</translation>
 <translation id="5788275253279308023">गुप्‍त विंडो, <ph name="TITLE" />, टैब</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb
index bc8a40c1..4bd4c028 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb
@@ -139,7 +139,7 @@
 <translation id="2267945578749931355">다음 문자</translation>
 <translation id="2281234842553884450">이전 슬라이더</translation>
 <translation id="2294136146931447363">기울임꼴 시작 부분</translation>
-<translation id="2311237334957139798">이전 세부사항으로 이동</translation>
+<translation id="2311237334957139798">이전 세부 수준으로 이동</translation>
 <translation id="2318372665160196757">기본</translation>
 <translation id="2329324941084714723">탭 패널</translation>
 <translation id="2344193891939537199">날짜 시간 컨트롤</translation>
@@ -689,7 +689,7 @@
 <translation id="6540201937398578274">ChromeVox에서 검색 키는 특수키입니다. 대부분의 ChromeVox 단축키는 검색 키로 시작합니다. 탐색하려면 화살표 키를 사용합니다.</translation>
 <translation id="6550720799683018100">아래 목록에서 옵션을 선택하여 현재 키맵을 변경합니다.</translation>
 <translation id="6561818612645211875">현재 행의 처음으로 이동</translation>
-<translation id="6583174818554398774">다음 세부사항으로 이동</translation>
+<translation id="6583174818554398774">다음 세부 수준으로 이동</translation>
 <translation id="6587021927234520429">다음 수준 4 제목이 없습니다.</translation>
 <translation id="6601344353291556895">상세한 설명을 사용합니다.</translation>
 <translation id="6615602925644411249">페이지에서 찾습니다.</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb
index 7f15714..0ab8022 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb
@@ -139,7 +139,7 @@
 <translation id="2267945578749931355">Nākamā rakstzīme</translation>
 <translation id="2281234842553884450">Iepriekšējais slīdnis</translation>
 <translation id="2294136146931447363">Sākas teksts slīprakstā</translation>
-<translation id="2311237334957139798">Pāriet pie iepriekšējās precizitātes</translation>
+<translation id="2311237334957139798">Pāriet pie iepriekšējā precizitātes līmeņa</translation>
 <translation id="2318372665160196757">Galvenais</translation>
 <translation id="2329324941084714723">Ciļņu panelis</translation>
 <translation id="2344193891939537199">Datuma/laika vadīkla</translation>
@@ -689,7 +689,7 @@
 <translation id="6540201937398578274">ChromeVox meklēšanas taustiņš ir modificētājtaustiņš. Lielākā daļa ChromeVox īsinājumtaustiņu sākas ar meklēšanas taustiņu. Navigācijai izmantojiet arī bulttaustiņus.</translation>
 <translation id="6550720799683018100">Mainiet pašreizējo taustiņu piesaisti, tālāk esošajā sarakstā atlasot vēlamo opciju.</translation>
 <translation id="6561818612645211875">Pāriet uz pašreizējās rindas sākumu</translation>
-<translation id="6583174818554398774">Pāriet pie nākamās precizitātes</translation>
+<translation id="6583174818554398774">Pāriet pie nākamā precizitātes līmeņa</translation>
 <translation id="6587021927234520429">Tālāk nav neviena 4. līmeņa virsraksta.</translation>
 <translation id="6601344353291556895">Iespējot izvērstus aprakstus</translation>
 <translation id="6615602925644411249">Meklēšana lapā.</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 d8aff0c..5838a4d 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="mr">
-<translation id="100812568230599391">प्रदर्शन शैली इंटरलीववर बदला.</translation>
+<translation id="100812568230599391">डिस्प्ले शैली इंटरलीव्हवर बदला.</translation>
 <translation id="1011903154582639569">की शोधा, नंतर टाइप करण्यासाठी उचला</translation>
 <translation id="1012173283529841972">सूची आयटम</translation>
 <translation id="1013742170491673792">srched</translation>
@@ -10,7 +10,7 @@
 <translation id="1025074108959230262">रोचक मोड अक्षम</translation>
 <translation id="1031961866430398710">नंतर</translation>
 <translation id="1038643060055067718">रेखा:</translation>
-<translation id="1038795173450935438">पृष्‍ठावरील आयटम मधून पुढे जाण्याकरिता, शोध + उजवा बाण किंवा परत मागे जाण्यासाठी शोध + डावा बाण दाबा. पुढील ओळीवर जाण्यासाठी, शोध + खाली बाण दाबा. मागील ओळीवर जाण्यासाठी शोध + वर बाण वापरा. आपण क्लिक करू इच्छित आयटमवर पोहचल्यास, शोध + Space दाबा.</translation>
+<translation id="1038795173450935438">पेजवरील आयटम मधून पुढे जाण्याकरिता, शोध + उजवा बाण किंवा परत मागे जाण्यासाठी शोध + डावा बाण दाबा. पुढील ओळीवर जाण्यासाठी, शोध + खाली बाण दाबा. मागील ओळीवर जाण्यासाठी शोध + वर बाण वापरा. तुम्ही क्लिक करू इच्छित आयटमवर पोहचल्यास, शोध + Space दाबा.</translation>
 <translation id="1044777062731150180">कोणतेही शीर्षलेख नाहीत</translation>
 <translation id="106222400312645156">rwhdr</translation>
 <translation id="1065552602950927991">अवैध इनपुट</translation>
@@ -21,7 +21,7 @@
 <translation id="1106741348836243114">ध्वनी अभिप्राय (इअरकॉन) चालू किंवा बंद करा.</translation>
 <translation id="1108651818222110612">उपशीर्षक</translation>
 <translation id="1120743664840974483">{"a": "alpha", "b": "bravo", "c": "charlie", "d": "delta", "e": "echo", "f": "foxtrot", "g": "golf", "h": "hotel", "i": "india", "j": "juliet","k": "kilo", "l": "lima", "m": "mike", "n": "november", "o": "oscar","p": "papa", "q": "quebec", "r": "romeo", "s": "sierra", "t": "tango", "u": "uniform", "v": "victor", "w": "whiskey","x": "xray", "y": "yankee", "z": "zulu"}</translation>
-<translation id="1124771028211010580">वर्तमान प्रदर्शन आकार शेजारी शेजारी आहे.</translation>
+<translation id="1124771028211010580">वर्तमान डिस्प्ले आकार शेजारी-शेजारी आहे.</translation>
 <translation id="113582498867142724"><ph name="NUM" /> आयटमसह <ph name="TAG" /> संकलन</translation>
 <translation id="1155043339247954670">पुढील सूची आयटम नाही.</translation>
 <translation id="1157782847298808853">कीबोर्ड मदत</translation>
@@ -51,7 +51,7 @@
 <translation id="1346748346194534595">उजवे</translation>
 <translation id="135978014023467274">तुम्हाला ChromeVox 63 वर अपडेट केले गेले आहे!</translation>
 <translation id="136718599399906424">पुढील सारणी पंक्ती</translation>
-<translation id="1377925789329510816">हे अंतिम शीर्षक आहे. पहिल्या शीर्षकावर वेष्टन घालण्‍यासाठी Search+H दाबा किंवा या पृष्ठावरील दुसर्‍या शीर्षकावर जाण्यासाठी Search+Shift+H दाबा.</translation>
+<translation id="1377925789329510816">हे अंतिम शीर्षक आहे. पहिल्या शीर्षकावर वेष्टन घालण्‍यासाठी Search+H दाबा किंवा या पेजवरील दुसर्‍या शीर्षकावर जाण्यासाठी Search+Shift+H दाबा.</translation>
 <translation id="1383876407941801731">शोधा</translation>
 <translation id="1385214448885562192">स्‍वीकार करण्‍यासाठी enter किंवा रद्द करण्‍यासाठी escape, पुढीलसाठी down आणि मागीलसाठी up दाबा.</translation>
 <translation id="1396114365388024581">tablst</translation>
@@ -74,7 +74,7 @@
 <translation id="1594072653727561613">mnu</translation>
 <translation id="1610130962244179598">6 बिंदू ब्रेलवर स्विच करा</translation>
 <translation id="1611168825862729585">स्‍तंभ शीर्षलेख:</translation>
-<translation id="1611649489706141841">अग्रेषित करा</translation>
+<translation id="1611649489706141841">फॉरवर्ड करा</translation>
 <translation id="1613476421962910979">इअरकॉन चालू आहेत</translation>
 <translation id="1618597272655350600">वर्तमान स्‍थितीबद्दल पूर्ण वर्णन घोषित करते</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{पेक्षा मोठे}one{# पेक्षा मोठे चिन्हे}other{# पेक्षा मोठे चिन्हे}}</translation>
@@ -125,7 +125,7 @@
 <translation id="2110480898214777136">पृष्‍ठ, संवाद किंवा अन्य कंटेनरमध्ये प्रारंभापासून समाप्तीपर्यंत किंवा समाप्तीपासून प्रारंभापर्यंत पूर्ण करा</translation>
 <translation id="2119965627982867824">spnbtn</translation>
 <translation id="2121067395472282800">प्रवेश की:<ph name="KEY" /></translation>
-<translation id="2138345533858834403">स्क्रीनच्या वर ChromeVox पॅनेलमध्ये रिफ्रेश करता येण्यासारख्या ब्रेल प्रदर्शनाच्या आउटपुटची बतावणी करेल.</translation>
+<translation id="2138345533858834403">स्क्रीनच्या वर ChromeVox पॅनेलमध्ये रिफ्रेश करता येण्यासारख्या ब्रेल डिस्प्लेच्या आउटपुटचे सिम्युलेशन करेल.</translation>
 <translation id="2163782704988363449">शुद्धिपत्रक</translation>
 <translation id="2169714232367507776">वर्तमान आयटमवर क्लिक करा</translation>
 <translation id="2179452035581866348">आपल्याला आवश्यक आणि अतिरिक्त माहिती देण्यासाठी ChromeVox ध्वनींचा वापर करते. प्रत्येक ध्वनीचा अर्थ काय आहे ते जाणून घेऊन अधिक जलद नेव्हिगेट करण्यासाठी आपण या ध्वनींचा वापर करू शकता. आपल्याला सोयीस्कर असल्यास, आपण उच्चारामधील अनावश्यक शाब्दिक वर्णने बंद करू शकता आणि पृष्‍ठाविषयी अतिरिक्त माहितीसाठी त्यांच्यावर अवलंबून राहू शकता. येथे संपूर्ण ध्वनींची आणि त्यांच्या अर्थाची सूची आहे.</translation>
@@ -198,7 +198,7 @@
 <translation id="2800780099804980316">मागील स्‍तर 1 मथळा नाही.</translation>
 <translation id="280499067616661124">पृष्ठामध्ये ChromeVox शोधा</translation>
 <translation id="2808001342598757276">स्क्रीन चालू करा</translation>
-<translation id="2811019999044652585">टूलबार किंवा सिस्टम ट्रे सारख्या स्क्रीनच्या अन्य भागांवर जाण्यासाठी, Control+पुढे जा की दाबा. Chromebook वर, पुढे जा की अंक 2 की च्या वर असते.</translation>
+<translation id="2811019999044652585">टूलबार किंवा सिस्टम ट्रे सारख्या स्क्रीनच्या अन्य भागांवर जाण्यासाठी, Control+पुढे जा की दाबा. Chromebook वर, पुढे जा की अंक २ की च्या वर असतो.</translation>
 <translation id="2811204574343810641">पंक्ती</translation>
 <translation id="2816654101880605877">पुढील स्‍लायडर नाही.</translation>
 <translation id="2841013758207633010">वेळ</translation>
@@ -208,7 +208,7 @@
 <translation id="2864481629947106776">मागील दुवा</translation>
 <translation id="2867808975387772810">ग्रंथसूची</translation>
 <translation id="2873259058405069099">सारणीच्या सुरवातीस जा</translation>
-<translation id="288178314850623291">विशिष्ट प्रकारच्या घटकांवर जाण्यासाठी यावर जा आदेशांचा वापर करा. शीर्षलेखांमध्ये पुढे जाण्यासाठी, शोध + H किंवा मागे जाण्यासाठी शोध + Shift + H दाबा.</translation>
+<translation id="288178314850623291">विशिष्ट प्रकारच्या घटकांवर जाण्यासाठी यावर जा आदेशांचा वापर करा. शीर्षलेखांमध्ये पुढे जाण्यासाठी, Search + H किंवा मागे जाण्यासाठी Search + Shift + H दाबा.</translation>
 <translation id="2894654529758326923">माहिती</translation>
 <translation id="2899328121302785497">{COUNT,plural, =1{डावा महिरपी कंस}one{# डावे महिरपी कंस}other{# डावे महिरपी कंस}}</translation>
 <translation id="2909478709401302630">सुपरस्क्रिप्टची सुरुवात</translation>
@@ -446,7 +446,7 @@
 <translation id="4591507479202817876">, निवडले</translation>
 <translation id="4597532268155981612">फॉर्म</translation>
 <translation id="4597896406374528575">एप्रिल</translation>
-<translation id="460018603901637538">प्रदर्शन आकार शेजारी शेजारी वर बदला.</translation>
+<translation id="460018603901637538">डिस्प्ले आकार शेजारी-शेजारी वर बदला.</translation>
 <translation id="4601367666219428522">tbl <ph name="TABLENAME" /> <ph name="TABLEROWS" />x<ph name="TABLECOLS" /></translation>
 <translation id="4615592953348396470">पुढील की दाबणे दुर्लक्षित करत आहे</translation>
 <translation id="461613135510474570">वाक्य</translation>
@@ -470,7 +470,7 @@
 <translation id="4764692524839457597">डीफॉल्ट</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="481165870889056555">वर्तमान पृष्‍ठाचे शीर्षक घोषित करा</translation>
-<translation id="4826415162591436065">अग्रेषित करणे नेव्हिगेट करा</translation>
+<translation id="4826415162591436065">फॉरवर्ड करणे नेव्हिगेट करा</translation>
 <translation id="4826604887384865800">पुढील जंप</translation>
 <translation id="4827410568042294688">न निवडलेले</translation>
 <translation id="4839925464551908214">मागील ओळीवर जा</translation>
@@ -506,7 +506,7 @@
 <translation id="5005670136041063723">आणखी सारखे घटक नाहीत.</translation>
 <translation id="501473567976723023">जानेवारी</translation>
 <translation id="5020651427400641814">स्पीच लॉगिंग सुरू करा</translation>
-<translation id="5041394372352067729">पृष्ठाच्या शीर्षस्थानी ब्रेल प्रदर्शन हलवा</translation>
+<translation id="5041394372352067729">ब्रेल डिस्प्ले पेजच्या सर्वात वर हलवा</translation>
 <translation id="5042770794184672516">बोलण्‍याचा आवाज वाढवा</translation>
 <translation id="5050015258024679800">मागील स्तर 4 शीर्षक</translation>
 <translation id="5054047268577924192">मागील सूची आयटम</translation>
@@ -636,7 +636,7 @@
 <translation id="5999630716831179808">व्हॉइस</translation>
 <translation id="6006050241733874051">फॉर्म</translation>
 <translation id="6006064078185310784">{COUNT,plural, =1{बॅकस्लॅश}one{# बॅकस्लॅश}other{# बॅकस्लॅश}}</translation>
-<translation id="6037602951055904232">अग्रेषित करणे पॅन करा</translation>
+<translation id="6037602951055904232">फॉरवर्ड करणे पॅन करा</translation>
 <translation id="6042826534790431634">सक्रिय करण्यासाठी Search+Space दाबा.</translation>
 <translation id="6044160928851315051">स्क्रीन बंद करा</translation>
 <translation id="605761629541007221">ठळक संपले</translation>
@@ -683,7 +683,7 @@
 <translation id="6468049171101508116">पुढील बटण</translation>
 <translation id="646954774886932461">अनुक्रमणिका</translation>
 <translation id="6493991254603208962">चकाकी कमी करा</translation>
-<translation id="6508059270146105198">पृष्ठाच्या तळाशी ब्रेल प्रदर्शन हलवा</translation>
+<translation id="6508059270146105198">पेजच्या तळाशी ब्रेल डिस्प्ले हलवा</translation>
 <translation id="6536864053412760904">Math ML टोकन</translation>
 <translation id="6540201937398578274">ChromeVox मध्ये, शोध की ही मॉडिफायर की असते. बहुतांश ChromeVox शॉर्टकटची सुरुवात शोध की ने होते. तुम्ही नेव्हिगेशनसाठी बाण की देखील वापरू शकाल.</translation>
 <translation id="6550720799683018100">खाली असलेल्या सूचीमधील पर्याय निवडून वर्तमान मुख्य नकाशा बदला.</translation>
@@ -734,7 +734,7 @@
 <translation id="7041173719775863268">निवड समाप्त करा</translation>
 <translation id="7048792632163898198">पुढील काही शॉर्टकट ChromeVox कमांड नाहीत, परंतु तरीही Chrome मधून बरेच काही मिळवण्यासाठी ते खूप उपयुक्त आहेत.
 बटणे आणि लिंक यांसारख्या कृती करण्यायोग्य आयटममधून पुढे नेव्हिगेट करण्यासाठी, Tab की दाबा. मागे नेव्हिगेट करण्यासाठी, Shift+Tab दाबा.
-Chrome ब्राउझरच्या, ऑम्निबॉक्स देखील म्हणवल्या जाणाऱ्या, अॅड्रेस बॉक्समध्ये प्रवेश करण्यासाठी Control + L दाबा.
+Chrome ब्राउझरच्या, ऑम्निबॉक्स देखील म्हणवल्या जाणाऱ्या, अॅड्रेस बॉक्समध्ये अॅक्सेस करण्यासाठी Control + L दाबा.
 नवीन टॅब उघडण्यासाठी आणि त्यामध्ये आपोआप जाण्यासाठी, Control+T दाबा. तुमचा कर्सर ऑम्निबॉक्समध्ये असेल.
 टॅब बंद करण्यासाठी, Control+W दाबा.
 उघडलेल्या टॅबमध्ये पुढे जाण्यासाठी, Control+Tab वापरा.
@@ -749,9 +749,9 @@
 <translation id="7157306005867877619">अमूर्त</translation>
 <translation id="7161425887892204659">जुळणारा मजकूर संपला</translation>
 <translation id="7161771961008409533">पॉप-अप बटण</translation>
-<translation id="7165714724802225287">वर्तमान प्रदर्शन शैली इंटरलीव आहे.</translation>
+<translation id="7165714724802225287">वर्तमान डिस्प्ले शैली इंटरलीव्ह्ह आहे.</translation>
 <translation id="7167657087543110">वर्ण प्रतिध्वनी</translation>
-<translation id="7170733337935166589">सतत वाचन करताना समोरील वगळा</translation>
+<translation id="7170733337935166589">वाचन सुरू ठेवताना समोरील वगळा</translation>
 <translation id="7181697990050180700">वारंवार वापरलेल्या आदेशांसाठी ते खाली असलेल्या संबंधित फील्डमध्ये टाइप करून कीबोर्ड शॉर्टकट सानुकूल करा.</translation>
 <translation id="7203150201908454328">विस्‍तृत केलेले</translation>
 <translation id="7210211103303402262">मिनिटे</translation>
@@ -786,7 +786,7 @@
 <translation id="739763518212184081">मागील रेखा</translation>
 <translation id="7400575256015741911">शब्दलेखन चूक आढळली</translation>
 <translation id="7408482676469142474">tbl</translation>
-<translation id="7420313809195758138">एखाद्या आयटमचा संदर्भ इतर माहितीपूर्वी प्रदर्शित करा (जसे की त्याचे नाव).</translation>
+<translation id="7420313809195758138">एखाद्या आयटमचा संदर्भ इतर माहितीपूर्वी डिस्प्ले करा (जसे की त्याचे नाव).</translation>
 <translation id="7425395583360211003">मिळालेले</translation>
 <translation id="7434509671034404296">विकसक</translation>
 <translation id="743783356331413498">उदाहरण</translation>
@@ -830,7 +830,7 @@
 <translation id="7839679365527550018">मागील शब्द</translation>
 <translation id="7851816175263618915">काही विरामचिन्‍ह</translation>
 <translation id="7870596830398826354">Math ML ट्री</translation>
-<translation id="7871691770940645922">व्हर्च्युअल ब्रेल प्रदर्शन</translation>
+<translation id="7871691770940645922">व्हर्च्युअल ब्रेल डिस्प्ले</translation>
 <translation id="78826985582142166">sldr</translation>
 <translation id="7894517696028036636">ChromeVox क्लासिक टॉगल करा.</translation>
 <translation id="7895896691902835279">अज्ञात दुवा</translation>
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_update.js b/chrome/browser/resources/chromeos/login/oobe_screen_update.js
index cd0558c..e4b0e75 100644
--- a/chrome/browser/resources/chromeos/login/oobe_screen_update.js
+++ b/chrome/browser/resources/chromeos/login/oobe_screen_update.js
@@ -54,6 +54,12 @@
       this.context.addObserver(
           CONTEXT_KEY_CANCEL_UPDATE_SHORTCUT_ENABLED, function(enabled) {
             $('oobe-update-md').cancelAllowed = enabled;
+            var configuration = Oobe.getInstance().getOobeConfiguration();
+            if (!configuration)
+              return;
+            if (configuration.updateSkipNonCritical && enabled) {
+              self.cancel();
+            }
           });
     },
 
diff --git a/chrome/browser/resources/chromeos/login/oobe_types.js b/chrome/browser/resources/chromeos/login/oobe_types.js
index cb331b4..fd4ac25 100644
--- a/chrome/browser/resources/chromeos/login/oobe_types.js
+++ b/chrome/browser/resources/chromeos/login/oobe_types.js
@@ -71,6 +71,7 @@
  * @typedef {{
  *   welcomeNext: boolean|undefined,
  *   networkSelectGuid: string|undefined,
+ *   updateSkipNonCritical: boolean|undefined,
  * }}
  */
 OobeTypes.OobeConfiguration;
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_am.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_am.xtb
index b060a63e..8346e4b 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_am.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_am.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">ጨለማ ጀርባ</translation>
 <translation id="27349076983469322">ፈዛዝ ያለ ጀርባ</translation>
 <translation id="335581015389089642">ንግግር</translation>
+<translation id="4004802134384979325">ምልክት ተደርጎበታል</translation>
+<translation id="4827410568042294688">አልተመረጠም</translation>
 <translation id="5901630391730855834">ቢጫ</translation>
 <translation id="6017514345406065928">አረንጓዴ</translation>
 <translation id="6475604559827479857">የቃል ድምቀቶች ቀለም፦</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">የስርዓት ጽሑፍ-ወደ-ንግግር ድምጽ</translation>
 <translation id="7768784765476638775">ለመናገር-ይምረጡ</translation>
 <translation id="7914870167134465181">ማድመቅ</translation>
+<translation id="8033827949643255796">ተመርጧል</translation>
 <translation id="8324974933005349667">የጽሑፍ-ወደ-ንግግር ቅንብሮችን ግላዊነት አላብስ</translation>
 <translation id="992256792861109788">ሮዝ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ar.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ar.xtb
index 10b499c..67f7b4a 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ar.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ar.xtb
@@ -4,19 +4,22 @@
 <translation id="1197088940767939838">برتقالي</translation>
 <translation id="1273314450961659276">إعدادات ميزة "تحويل النص إلى كلام"</translation>
 <translation id="1555130319947370107">أزرق</translation>
-<translation id="1666326070478924810">إعدادات "سماع الاختيار"</translation>
+<translation id="1666326070478924810">إعدادات "الاختيار والاستماع"</translation>
 <translation id="1966649499058910679">تحديد كل كلمة أثناء نطقها</translation>
 <translation id="2089387485033699258">ar</translation>
 <translation id="2714180132046334502">خلفية معتمة</translation>
 <translation id="27349076983469322">خلفية فاتحة</translation>
 <translation id="335581015389089642">الحديث</translation>
+<translation id="4004802134384979325">تم التحديد</translation>
+<translation id="4827410568042294688">تم إلغاء التحديد</translation>
 <translation id="5901630391730855834">أصفر</translation>
 <translation id="6017514345406065928">أخضر</translation>
 <translation id="6475604559827479857">لون لتمييز الكلمة:</translation>
 <translation id="6837853484260746864">تحديد صوت:</translation>
 <translation id="7261612856573623172">اسم الصوت المستخدَم في ميزة "تحويل النص إلى كلام" في النظام</translation>
-<translation id="7768784765476638775">سماع الاختيار</translation>
+<translation id="7768784765476638775">الاختيار والاستماع</translation>
 <translation id="7914870167134465181">التمييز</translation>
+<translation id="8033827949643255796">تم التحديد</translation>
 <translation id="8324974933005349667">تخصيص إعدادات ميزة "تحويل النص إلى كلام"</translation>
 <translation id="992256792861109788">وردي</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bg.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bg.xtb
index 065e740..175d77c 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bg.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bg.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Тъмен фон</translation>
 <translation id="27349076983469322">Светъл фон</translation>
 <translation id="335581015389089642">Speech</translation>
+<translation id="4004802134384979325">с отметка</translation>
+<translation id="4827410568042294688">отмяна на открояването</translation>
 <translation id="5901630391730855834">жълто</translation>
 <translation id="6017514345406065928">зелено</translation>
 <translation id="6475604559827479857">Цвят за открояване на думи:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Системен глас за синтезиран говор</translation>
 <translation id="7768784765476638775">Прочитане на глас</translation>
 <translation id="7914870167134465181">Открояване</translation>
+<translation id="8033827949643255796">откроени</translation>
 <translation id="8324974933005349667">Персонализиране на настройките за синтезиран говор</translation>
 <translation id="992256792861109788">розово</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb
index 5f26956..a3eb685 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">গাঢ় ব্যাকগ্রাউন্ড</translation>
 <translation id="27349076983469322">হালকা ব্যাকগ্রাউন্ড</translation>
 <translation id="335581015389089642">স্পিচ</translation>
+<translation id="4004802134384979325">চেক করা</translation>
+<translation id="4827410568042294688">অনির্বাচিত</translation>
 <translation id="5901630391730855834">হলুদ</translation>
 <translation id="6017514345406065928">সবুজ</translation>
 <translation id="6475604559827479857">শব্দ হাইলাইট করার জন্য রং:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">সিস্টেম টেক্সট টু স্পিচ ভয়েস</translation>
 <translation id="7768784765476638775">বাছুন ও শুনুন</translation>
 <translation id="7914870167134465181">হাইলাইট করা</translation>
+<translation id="8033827949643255796">নির্বাচিত</translation>
 <translation id="8324974933005349667">টেক্সট টু স্পিচ সেটিংস ব্যক্তিগতকৃত করুন</translation>
 <translation id="992256792861109788">গোলাপী</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ca.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ca.xtb
index 6beafdb..37da3ce 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ca.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ca.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Fons fosc</translation>
 <translation id="27349076983469322">Fons clar</translation>
 <translation id="335581015389089642">Veu</translation>
+<translation id="4004802134384979325">marcada</translation>
+<translation id="4827410568042294688">no seleccionat</translation>
 <translation id="5901630391730855834">Groc</translation>
 <translation id="6017514345406065928">Verd</translation>
 <translation id="6475604559827479857">Color per destacar paraules:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Veu de la síntesi de veu del sistema</translation>
 <translation id="7768784765476638775">Escolta la selecció</translation>
 <translation id="7914870167134465181">Opcions per destacar</translation>
+<translation id="8033827949643255796">seleccionats</translation>
 <translation id="8324974933005349667">Personalitza la configuració de síntesi de veu</translation>
 <translation id="992256792861109788">Rosa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_cs.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_cs.xtb
index 33391f604..9540b5662 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_cs.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_cs.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Tmavé pozadí</translation>
 <translation id="27349076983469322">Světlé pozadí</translation>
 <translation id="335581015389089642">Řeč</translation>
+<translation id="4004802134384979325">zaškrtnuto</translation>
+<translation id="4827410568042294688">nevybráno</translation>
 <translation id="5901630391730855834">Žlutá</translation>
 <translation id="6017514345406065928">Zelená</translation>
 <translation id="6475604559827479857">Barva zvýraznění slov:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Hlas systémového převodu textu na řeč</translation>
 <translation id="7768784765476638775">Poslech vybraného textu</translation>
 <translation id="7914870167134465181">Zvýrazňování</translation>
+<translation id="8033827949643255796">vybráno</translation>
 <translation id="8324974933005349667">Upravit nastavení převodu textu na řeč</translation>
 <translation id="992256792861109788">Růžová</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_da.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_da.xtb
index b4b3d02..f2a6ad1e1 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_da.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_da.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Mørk baggrund</translation>
 <translation id="27349076983469322">Lys baggrund</translation>
 <translation id="335581015389089642">Tale</translation>
+<translation id="4004802134384979325">markeret</translation>
+<translation id="4827410568042294688">fravalgt</translation>
 <translation id="5901630391730855834">Gul</translation>
 <translation id="6017514345406065928">Grøn</translation>
 <translation id="6475604559827479857">Farve til markering af ord:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Systemstemme for oplæsning</translation>
 <translation id="7768784765476638775">Tekstoplæsning</translation>
 <translation id="7914870167134465181">Fremhævning</translation>
+<translation id="8033827949643255796">valgt</translation>
 <translation id="8324974933005349667">Tilpas indstillinger for tekstoplæsning</translation>
 <translation id="992256792861109788">Lyserød</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_de.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_de.xtb
index 0784e596..fc41ff3 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_de.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_de.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Dunkler Hintergrund</translation>
 <translation id="27349076983469322">Heller Hintergrund</translation>
 <translation id="335581015389089642">Sprachausgabe</translation>
+<translation id="4004802134384979325">Aktiviert</translation>
+<translation id="4827410568042294688">nicht ausgewählt</translation>
 <translation id="5901630391730855834">Gelb</translation>
 <translation id="6017514345406065928">Grün</translation>
 <translation id="6475604559827479857">Farbe zum Hervorheben von Wörtern:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Sprachausgabe-Stimme des Systems</translation>
 <translation id="7768784765476638775">Vorlesen</translation>
 <translation id="7914870167134465181">Hervorhebung</translation>
+<translation id="8033827949643255796">Ausgewählt</translation>
 <translation id="8324974933005349667">Einstellungen für Sprachausgabe personalisieren</translation>
 <translation id="992256792861109788">Rosa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_el.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_el.xtb
index bb3e299b..ca31fde 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_el.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_el.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Σκούρο φόντο</translation>
 <translation id="27349076983469322">Ανοιχτόχρωμο φόντο</translation>
 <translation id="335581015389089642">Ομιλία</translation>
+<translation id="4004802134384979325">επιλεγμένο</translation>
+<translation id="4827410568042294688">μη επιλεγμένο</translation>
 <translation id="5901630391730855834">Κίτρινο</translation>
 <translation id="6017514345406065928">Πράσινο</translation>
 <translation id="6475604559827479857">Χρώμα επισήμανσης λέξεων:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Φωνή συστήματος μετατροπής κειμένου σε ομιλία</translation>
 <translation id="7768784765476638775">Επιλέξτε για εκφώνηση</translation>
 <translation id="7914870167134465181">Επισήμανση</translation>
+<translation id="8033827949643255796">επιλεγμένο</translation>
 <translation id="8324974933005349667">Εξατομίκευση ρυθμίσεων μετατροπής κειμένου σε ομιλία</translation>
 <translation id="992256792861109788">Ροζ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_en-GB.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_en-GB.xtb
index 08ebcb1..e33ffd0 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_en-GB.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_en-GB.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Dark background</translation>
 <translation id="27349076983469322">Light background</translation>
 <translation id="335581015389089642">Speech</translation>
+<translation id="4004802134384979325">ticked</translation>
+<translation id="4827410568042294688">unselected</translation>
 <translation id="5901630391730855834">Yellow</translation>
 <translation id="6017514345406065928">Green</translation>
 <translation id="6475604559827479857">Colour for word highlights:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">System Text-to-Speech voice</translation>
 <translation id="7768784765476638775">Select to Speak</translation>
 <translation id="7914870167134465181">Highlighting</translation>
+<translation id="8033827949643255796">selected</translation>
 <translation id="8324974933005349667">Personalise Text-to-Speech settings</translation>
 <translation id="992256792861109788">Pink</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es-419.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es-419.xtb
index 156e906a0..23f6275 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es-419.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es-419.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Fondo oscuro</translation>
 <translation id="27349076983469322">Fondo claro</translation>
 <translation id="335581015389089642">Voz</translation>
+<translation id="4004802134384979325">seleccionada</translation>
+<translation id="4827410568042294688">sin seleccionar</translation>
 <translation id="5901630391730855834">Amarillo</translation>
 <translation id="6017514345406065928">Verde</translation>
 <translation id="6475604559827479857">Color para destacar palabras:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Voz en la función de texto a voz del sistema</translation>
 <translation id="7768784765476638775">Seleccionar para pronunciar</translation>
 <translation id="7914870167134465181">Destacar</translation>
+<translation id="8033827949643255796">seleccionados</translation>
 <translation id="8324974933005349667">Personalizar la configuración de texto a voz</translation>
 <translation id="992256792861109788">Rosa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es.xtb
index 73d76841..f827dce 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Fondo oscuro</translation>
 <translation id="27349076983469322">Fondo claro</translation>
 <translation id="335581015389089642">Voz</translation>
+<translation id="4004802134384979325">marcada</translation>
+<translation id="4827410568042294688">no seleccionado</translation>
 <translation id="5901630391730855834">Amarillo</translation>
 <translation id="6017514345406065928">Verde</translation>
 <translation id="6475604559827479857">Color para destacar palabras:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Nombre de la síntesis de voz del sistema</translation>
 <translation id="7768784765476638775">Enunciar Selección</translation>
 <translation id="7914870167134465181">Destacar</translation>
+<translation id="8033827949643255796">seleccionados</translation>
 <translation id="8324974933005349667">Personalizar la configuración de síntesis de voz</translation>
 <translation id="992256792861109788">Rosa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_et.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_et.xtb
index e282cabe..c660d0e 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_et.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_et.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Tume taust</translation>
 <translation id="27349076983469322">Hele taust</translation>
 <translation id="335581015389089642">Kõne</translation>
+<translation id="4004802134384979325">märgitud</translation>
+<translation id="4827410568042294688">valimata</translation>
 <translation id="5901630391730855834">Kollane</translation>
 <translation id="6017514345406065928">Roheline</translation>
 <translation id="6475604559827479857">Sõna esiletõstude värv:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Süsteemi kõnesünteesi hääl</translation>
 <translation id="7768784765476638775">Vali ja kuula</translation>
 <translation id="7914870167134465181">Esiletõstmine</translation>
+<translation id="8033827949643255796">valitud</translation>
 <translation id="8324974933005349667">Isikupärastage kõnesünteesi seadeid</translation>
 <translation id="992256792861109788">Roosa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fa.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fa.xtb
index b02c3c928..d7a55d7d 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fa.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fa.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">پس‌زمینه تیره</translation>
 <translation id="27349076983469322">پس‌زمینه روشن</translation>
 <translation id="335581015389089642">صدا</translation>
+<translation id="4004802134384979325">علامت‌دار</translation>
+<translation id="4827410568042294688">انتخاب لغو شد</translation>
 <translation id="5901630391730855834">زرد</translation>
 <translation id="6017514345406065928">سبز</translation>
 <translation id="6475604559827479857">رنگ برای برجسته کردن کلمه‌:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">صدای سیستم نوشتار به گفتار</translation>
 <translation id="7768784765476638775">انتخاب برای شنیدن</translation>
 <translation id="7914870167134465181">برجسته کردن</translation>
+<translation id="8033827949643255796">انتخاب شد</translation>
 <translation id="8324974933005349667">شخصی کردن تنظیمات «نوشتار به گفتار»</translation>
 <translation id="992256792861109788">صورتی</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fi.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fi.xtb
index 34c893f..348d0058 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fi.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fi.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Tumma tausta</translation>
 <translation id="27349076983469322">Vaalea tausta</translation>
 <translation id="335581015389089642">Puhe</translation>
+<translation id="4004802134384979325">valittu</translation>
+<translation id="4827410568042294688">ei valittu</translation>
 <translation id="5901630391730855834">Keltainen</translation>
 <translation id="6017514345406065928">Vihreä</translation>
 <translation id="6475604559827479857">Sanojen korostusväri:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Järjestelmän Tekstistä puheeksi ‑ääni</translation>
 <translation id="7768784765476638775">Teksti puhuttuna</translation>
 <translation id="7914870167134465181">Korostus</translation>
+<translation id="8033827949643255796">valittu</translation>
 <translation id="8324974933005349667">Personoi Tekstistä puheeksi ‑asetukset</translation>
 <translation id="992256792861109788">Vaaleanpunainen</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fil.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fil.xtb
index 39ff559e..7766ee3a 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fil.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fil.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Madilim na background</translation>
 <translation id="27349076983469322">Maliwanag na background</translation>
 <translation id="335581015389089642">Pananalita</translation>
+<translation id="4004802134384979325">nilagyan ng check</translation>
+<translation id="4827410568042294688">hindi napili</translation>
 <translation id="5901630391730855834">Dilaw</translation>
 <translation id="6017514345406065928">Berde</translation>
 <translation id="6475604559827479857">Kulay para sa mga pag-highlight ng salita:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Text-to-Speech voice ng system</translation>
 <translation id="7768784765476638775">Select to Speak</translation>
 <translation id="7914870167134465181">Pag-highlight</translation>
+<translation id="8033827949643255796">pinili</translation>
 <translation id="8324974933005349667">I-personalize ang mga setting ng Text-to-Speech</translation>
 <translation id="992256792861109788">Pink</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fr.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fr.xtb
index 83996ea..48a1376 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fr.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fr.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Arrière-plan sombre</translation>
 <translation id="27349076983469322">Arrière-plan clair</translation>
 <translation id="335581015389089642">Voix</translation>
+<translation id="4004802134384979325">cochée</translation>
+<translation id="4827410568042294688">désélectionné</translation>
 <translation id="5901630391730855834">Jaune</translation>
 <translation id="6017514345406065928">Vert</translation>
 <translation id="6475604559827479857">Couleur pour la mise en surbrillance des mots :</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Voix de la synthèse vocale du système</translation>
 <translation id="7768784765476638775">Sélectionner pour prononcer</translation>
 <translation id="7914870167134465181">Mise en surbrillance</translation>
+<translation id="8033827949643255796">sélectionné</translation>
 <translation id="8324974933005349667">Personnaliser les paramètres de synthèse vocale</translation>
 <translation id="992256792861109788">Rose</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_gu.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_gu.xtb
index 7fc55818..b7e0e66 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_gu.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_gu.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">ઘાટું બૅકગ્રાઉન્ડ</translation>
 <translation id="27349076983469322">આછું બૅકગ્રાઉન્ડ</translation>
 <translation id="335581015389089642">ભાષા</translation>
+<translation id="4004802134384979325">તપાસેલું</translation>
+<translation id="4827410568042294688">પસંદ ન કરેલ</translation>
 <translation id="5901630391730855834">પીળો</translation>
 <translation id="6017514345406065928">લીલો</translation>
 <translation id="6475604559827479857">શબ્દ હાઇલાઇટ કરવા માટેનો રંગ:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">સિસ્ટમ ટેક્સ્ટ-ટુ-સ્પીચ વૉઇસ</translation>
 <translation id="7768784765476638775">સાંભળવા માટે પસંદ કરો</translation>
 <translation id="7914870167134465181">હાઇલાઇટિંગ</translation>
+<translation id="8033827949643255796">પસંદ કરેલ</translation>
 <translation id="8324974933005349667">'ટેક્સ્ટ-ટૂ-સ્પીચ' સેટિંગને વ્યક્તિગત કરો</translation>
 <translation id="992256792861109788">ગુલાબી</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hi.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hi.xtb
index 2378c24..abf425e4 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hi.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hi.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">गहरा बैकग्राउंड</translation>
 <translation id="27349076983469322">हल्का बैकग्राउंड</translation>
 <translation id="335581015389089642">बोली</translation>
+<translation id="4004802134384979325">चेक किया गया</translation>
+<translation id="4827410568042294688">अचयनित</translation>
 <translation id="5901630391730855834">पीला</translation>
 <translation id="6017514345406065928">हरा</translation>
 <translation id="6475604559827479857">शब्द हाइलाइट करने का रंग:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">लिखाई को बोली में बदलने वाली सिस्टम की आवाज़</translation>
 <translation id="7768784765476638775">चुनें और सुनें</translation>
 <translation id="7914870167134465181">हाइलाइट करना</translation>
+<translation id="8033827949643255796">चयनित</translation>
 <translation id="8324974933005349667">लिखाई को बोली में बदलने की सेटिंग पसंद के मुताबिक बनाएं</translation>
 <translation id="992256792861109788">गुलाबी</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hr.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hr.xtb
index ece8d857..a6d8a601 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hr.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hr.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Tamna pozadina</translation>
 <translation id="27349076983469322">Svijetla pozadina</translation>
 <translation id="335581015389089642">Govor</translation>
+<translation id="4004802134384979325">označen</translation>
+<translation id="4827410568042294688">neodabran</translation>
 <translation id="5901630391730855834">Žuta</translation>
 <translation id="6017514345406065928">Zelena</translation>
 <translation id="6475604559827479857">Boja za isticanja riječi:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Glas sustava za pretvaranje teksta u govor</translation>
 <translation id="7768784765476638775">Odabir za govor</translation>
 <translation id="7914870167134465181">Isticanje</translation>
+<translation id="8033827949643255796">odabrano</translation>
 <translation id="8324974933005349667">Prilagodite postavke pretvaranja teksta u govor</translation>
 <translation id="992256792861109788">Ružičasta</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hu.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hu.xtb
index dbf66ea..49aa80e 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hu.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_hu.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Sötét háttér</translation>
 <translation id="27349076983469322">Világos háttér</translation>
 <translation id="335581015389089642">Beszéd</translation>
+<translation id="4004802134384979325">bejelölve</translation>
+<translation id="4827410568042294688">nincs kijelölve</translation>
 <translation id="5901630391730855834">Sárga</translation>
 <translation id="6017514345406065928">Zöld</translation>
 <translation id="6475604559827479857">Szókiemeléshez tartozó szín:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Alapértelmezett szövegfelolvasó hang</translation>
 <translation id="7768784765476638775">Felolvasás</translation>
 <translation id="7914870167134465181">Kiemelés</translation>
+<translation id="8033827949643255796">kijelölve</translation>
 <translation id="8324974933005349667">A szövegfelolvasóhoz tartozó beállítások személyre szabása</translation>
 <translation id="992256792861109788">Rózsaszín</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_id.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_id.xtb
index e054a172..96901d3e 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_id.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_id.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Latar belakang gelap</translation>
 <translation id="27349076983469322">Latar belakang terang</translation>
 <translation id="335581015389089642">Ucapan</translation>
+<translation id="4004802134384979325">dicentang</translation>
+<translation id="4827410568042294688">tidak dipilih</translation>
 <translation id="5901630391730855834">Kuning</translation>
 <translation id="6017514345406065928">Hijau</translation>
 <translation id="6475604559827479857">Warna untuk highlight kata:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Suara Text-to-Speech sistem</translation>
 <translation id="7768784765476638775">Klik untuk diucapkan</translation>
 <translation id="7914870167134465181">Menyoroti</translation>
+<translation id="8033827949643255796">dipilih</translation>
 <translation id="8324974933005349667">Personalisasi setelan Text-to-Speech</translation>
 <translation id="992256792861109788">Pink</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_it.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_it.xtb
index b323f42..d588bbb41 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_it.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_it.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Sfondo scuro</translation>
 <translation id="27349076983469322">Sfondo chiaro</translation>
 <translation id="335581015389089642">Voce</translation>
+<translation id="4004802134384979325">selezionata</translation>
+<translation id="4827410568042294688">non selezionato</translation>
 <translation id="5901630391730855834">Giallo</translation>
 <translation id="6017514345406065928">Verde</translation>
 <translation id="6475604559827479857">Colore di evidenziazione delle parole</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Voce del sistema per la sintesi vocale</translation>
 <translation id="7768784765476638775">Seleziona per ascoltare</translation>
 <translation id="7914870167134465181">Evidenziazione</translation>
+<translation id="8033827949643255796">selezionati</translation>
 <translation id="8324974933005349667">Personalizza le impostazioni di sintesi vocale</translation>
 <translation id="992256792861109788">Rosa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_iw.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_iw.xtb
index 5ea44d6a0..f487758 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_iw.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_iw.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">רקע כהה</translation>
 <translation id="27349076983469322">רקע בהיר</translation>
 <translation id="335581015389089642">דיבור</translation>
+<translation id="4004802134384979325">מסומנת</translation>
+<translation id="4827410568042294688">בחירה בוטלה</translation>
 <translation id="5901630391730855834">צהוב</translation>
 <translation id="6017514345406065928">ירוק</translation>
 <translation id="6475604559827479857">הצבע של הדגשת המילים:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">קול ברירת המחדל של המרת טקסט לדיבור</translation>
 <translation id="7768784765476638775">הקראה</translation>
 <translation id="7914870167134465181">הדגשה</translation>
+<translation id="8033827949643255796">מסומן</translation>
 <translation id="8324974933005349667">התאמת ההגדרות של המרת טקסט לדיבור</translation>
 <translation id="992256792861109788">ורוד</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ja.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ja.xtb
index 5fa8ddf4..33397b6 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ja.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ja.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">暗い背景</translation>
 <translation id="27349076983469322">明るい背景</translation>
 <translation id="335581015389089642">スピーチ</translation>
+<translation id="4004802134384979325">オン</translation>
+<translation id="4827410568042294688">選択していません</translation>
 <translation id="5901630391730855834">黄</translation>
 <translation id="6017514345406065928">緑</translation>
 <translation id="6475604559827479857">次の色で単語をハイライト表示:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">システムのテキスト読み上げの音声</translation>
 <translation id="7768784765476638775">選択して読み上げ</translation>
 <translation id="7914870167134465181">強調表示</translation>
+<translation id="8033827949643255796">選択しました</translation>
 <translation id="8324974933005349667">テキスト読み上げの設定をカスタマイズする</translation>
 <translation id="992256792861109788">ピンク</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_kn.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_kn.xtb
index 1aba4bf..bd846f9 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_kn.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_kn.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">ದಟ್ಟ ಬೆಳಕಿನ ಹಿನ್ನೆಲೆ</translation>
 <translation id="27349076983469322">ಮಂದ ಬೆಳಕಿನ ಹಿನ್ನೆಲೆ</translation>
 <translation id="335581015389089642">ಧ್ವನಿ</translation>
+<translation id="4004802134384979325">ಗುರುತಿಸಲಾಗಿದೆ</translation>
+<translation id="4827410568042294688">ಆಯ್ಕೆ ಮಾಡಲಾಗಿಲ್ಲ</translation>
 <translation id="5901630391730855834">ಹಳದಿ</translation>
 <translation id="6017514345406065928">ಹಸಿರು</translation>
 <translation id="6475604559827479857">ಪದಗಳ ಹೈಲೈಟ್‌ಗಳಿಗಾಗಿ ಬಣ್ಣ:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">ಪಠ್ಯದಿಂದ ಧ್ವನಿ ವೈಶಿಷ್ಟ್ಯಕ್ಕಾಗಿ ಸಿಸ್ಟಂ ಧ್ವನಿ</translation>
 <translation id="7768784765476638775">ಧ್ವನಿ ಆಯ್ಕೆ ಮಾಡಿ</translation>
 <translation id="7914870167134465181">ಹೈಲೈಟ್ ಮಾಡುವಿಕೆ</translation>
+<translation id="8033827949643255796">ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="8324974933005349667">ಪಠ್ಯದಿಂದ ಧ್ವನಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ವೈಯಕ್ತೀಕರಿಸಿ</translation>
 <translation id="992256792861109788">ಗುಲಾಬಿ ಬಣ್ಣ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ko.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ko.xtb
index 4a2f6fc..8ef2cca 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ko.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ko.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">어두운 배경</translation>
 <translation id="27349076983469322">밝은 배경</translation>
 <translation id="335581015389089642">음성</translation>
+<translation id="4004802134384979325">선택됨</translation>
+<translation id="4827410568042294688">선택되지 않음</translation>
 <translation id="5901630391730855834">노란색</translation>
 <translation id="6017514345406065928">녹색</translation>
 <translation id="6475604559827479857">단어 하이라이트 색상:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">시스템 TTS(텍스트 음성 변환) 음성</translation>
 <translation id="7768784765476638775">텍스트 읽어주기</translation>
 <translation id="7914870167134465181">강조표시</translation>
+<translation id="8033827949643255796">선택됨</translation>
 <translation id="8324974933005349667">TTS(텍스트 음성 변환) 설정 맞춤설정</translation>
 <translation id="992256792861109788">분홍색</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lt.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lt.xtb
index 067f5ba..4340fc5 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lt.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lt.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Tamsus fonas</translation>
 <translation id="27349076983469322">Šviesus fonas</translation>
 <translation id="335581015389089642">Kalba</translation>
+<translation id="4004802134384979325">pažymėta</translation>
+<translation id="4827410568042294688">nepasirinkta</translation>
 <translation id="5901630391730855834">Geltona</translation>
 <translation id="6017514345406065928">Žalia</translation>
 <translation id="6475604559827479857">Žodžių paryškinimo spalva:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Sistemos teksto į kalbą balsas</translation>
 <translation id="7768784765476638775">Teksto ištarimas</translation>
 <translation id="7914870167134465181">Paryškinimas</translation>
+<translation id="8033827949643255796">pasirinkta</translation>
 <translation id="8324974933005349667">Suasmeninkite teksto į kalbą nustatymus</translation>
 <translation id="992256792861109788">Rožinė</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lv.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lv.xtb
index dfad979..6c8f0d880 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lv.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lv.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Tumšs fons</translation>
 <translation id="27349076983469322">Gaišs fons</translation>
 <translation id="335581015389089642">Runa</translation>
+<translation id="4004802134384979325">atzīmēts</translation>
+<translation id="4827410568042294688">nav atlasīts</translation>
 <translation id="5901630391730855834">Dzeltena</translation>
 <translation id="6017514345406065928">Zaļa</translation>
 <translation id="6475604559827479857">Krāsa vārdu izcelšanai:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Sistēmas Teksta pārvēršanas runā iestatījumi</translation>
 <translation id="7768784765476638775">Atlasīt, lai izrunātu</translation>
 <translation id="7914870167134465181">Iezīmēšana</translation>
+<translation id="8033827949643255796">atlasīti</translation>
 <translation id="8324974933005349667">Personalizēt pakalpojuma Teksta pārvēršana runā iestatījumus</translation>
 <translation id="992256792861109788">Rozā</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ml.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ml.xtb
index ee938f3a..d76517a1 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ml.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ml.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">ഇരുണ്ട പശ്ചാത്തലം</translation>
 <translation id="27349076983469322">ലൈറ്റ് പശ്ചാത്തലം</translation>
 <translation id="335581015389089642">സംഭാഷണം</translation>
+<translation id="4004802134384979325">ചെക്കുചെയ്‌തു</translation>
+<translation id="4827410568042294688">തിരഞ്ഞെടുത്തത് ഒഴിവാക്കി</translation>
 <translation id="5901630391730855834">മഞ്ഞ</translation>
 <translation id="6017514345406065928">പച്ച</translation>
 <translation id="6475604559827479857">പദ ഹൈലൈറ്റുകളുടെ നിറം:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">സിസ്‌റ്റം ടെക്‌സ്‌റ്റ്-ടു-സ്‌പീച്ച് ശബ്‌ദം</translation>
 <translation id="7768784765476638775">വായിച്ചുകേൾക്കാൻ തിരഞ്ഞെടുക്കുക</translation>
 <translation id="7914870167134465181">ഹൈലൈറ്റ് ചെയ്യുന്നു</translation>
+<translation id="8033827949643255796">തിരഞ്ഞെടുത്തു</translation>
 <translation id="8324974933005349667">ടെക്‌സ്‌റ്റ്-ടു-സ്‌പീച്ച് ക്രമീകരണം വ്യക്തിപരമാക്കുക</translation>
 <translation id="992256792861109788">പിങ്ക്</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_mr.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_mr.xtb
index 06762236..1afb13c 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_mr.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_mr.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">गडद बॅकग्राउंड</translation>
 <translation id="27349076983469322">फिकट बॅकग्राउंड</translation>
 <translation id="335581015389089642">भाषण</translation>
+<translation id="4004802134384979325">चेक केलेले</translation>
+<translation id="4827410568042294688">न निवडलेले</translation>
 <translation id="5901630391730855834">पिवळा</translation>
 <translation id="6017514345406065928">हिरवा</translation>
 <translation id="6475604559827479857">शब्द हायलाइट करण्यासाठी रंग:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">सिस्टम टेक्‍स्‍ट टू स्‍पीच व्हॉइस</translation>
 <translation id="7768784765476638775">बोलण्यासाठी निवडा</translation>
 <translation id="7914870167134465181">हायलाइट करणे</translation>
+<translation id="8033827949643255796">निवडलेले</translation>
 <translation id="8324974933005349667">टेक्‍स्‍ट टू स्‍पीच सेटिंग्ज पर्सनलाइझ करा</translation>
 <translation id="992256792861109788">गुलाबी</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ms.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ms.xtb
index efa61b0..9ba39f9a 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ms.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ms.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Latar belakang gelap</translation>
 <translation id="27349076983469322">Latar belakang cerah</translation>
 <translation id="335581015389089642">Pertuturan</translation>
+<translation id="4004802134384979325">ditandai</translation>
+<translation id="4827410568042294688">dinyahpilih</translation>
 <translation id="5901630391730855834">Kuning</translation>
 <translation id="6017514345406065928">Hijau</translation>
 <translation id="6475604559827479857">Warna untuk serlahan perkataan:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Suara Teks ke Pertuturan Sistem</translation>
 <translation id="7768784765476638775">Pilih untuk bercakap</translation>
 <translation id="7914870167134465181">Penyerlahan</translation>
+<translation id="8033827949643255796">dipilih</translation>
 <translation id="8324974933005349667">Peribadikan tetapan Teks ke Pertuturan</translation>
 <translation id="992256792861109788">Merah Jambu</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_nl.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_nl.xtb
index 7dfdc7d..d18d93c8 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_nl.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_nl.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Donkere achtergrond</translation>
 <translation id="27349076983469322">Lichte achtergrond</translation>
 <translation id="335581015389089642">Spraak</translation>
+<translation id="4004802134384979325">aangevinkt</translation>
+<translation id="4827410568042294688">niet geselecteerd</translation>
 <translation id="5901630391730855834">Geel</translation>
 <translation id="6017514345406065928">Groen</translation>
 <translation id="6475604559827479857">Kleur voor woordmarkeringen:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Systeemstem voor tekst-naar-spraak</translation>
 <translation id="7768784765476638775">Selecteer om uitgesproken te worden</translation>
 <translation id="7914870167134465181">Markeren</translation>
+<translation id="8033827949643255796">geselecteerd</translation>
 <translation id="8324974933005349667">Tekst-naar-spraak-instellingen personaliseren</translation>
 <translation id="992256792861109788">Roze</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_no.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_no.xtb
index b5adf3f7..ff8e1ba1 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_no.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_no.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Mørk bakgrunn</translation>
 <translation id="27349076983469322">Lys bakgrunn</translation>
 <translation id="335581015389089642">Tale</translation>
+<translation id="4004802134384979325">merket av</translation>
+<translation id="4827410568042294688">fjernet fra utvalget</translation>
 <translation id="5901630391730855834">Gul</translation>
 <translation id="6017514345406065928">Grønn</translation>
 <translation id="6475604559827479857">Farge for fremheving av ord:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Systemstemme for tekst til tale</translation>
 <translation id="7768784765476638775">Tekstopplesing</translation>
 <translation id="7914870167134465181">Fremheving</translation>
+<translation id="8033827949643255796">valgt</translation>
 <translation id="8324974933005349667">Gi innstillingene for tekst til tale et personlig preg</translation>
 <translation id="992256792861109788">Rosa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pl.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pl.xtb
index 7549880..6453a72 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pl.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pl.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Ciemne tło</translation>
 <translation id="27349076983469322">Jasne tło</translation>
 <translation id="335581015389089642">Mowa</translation>
+<translation id="4004802134384979325">zaznaczone</translation>
+<translation id="4827410568042294688">nie wybrano</translation>
 <translation id="5901630391730855834">Żółty</translation>
 <translation id="6017514345406065928">Zielony</translation>
 <translation id="6475604559827479857">Kolor zaznaczenia słów:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Systemowy głos zamiany tekstu na mowę</translation>
 <translation id="7768784765476638775">Przeczytaj na głos</translation>
 <translation id="7914870167134465181">Zaznaczanie</translation>
+<translation id="8033827949643255796">wybrano</translation>
 <translation id="8324974933005349667">Dostosuj ustawienia zamiany tekstu na mowę</translation>
 <translation id="992256792861109788">Różowy</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-BR.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-BR.xtb
index 2f7c9bdd..7741a88 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-BR.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-BR.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Plano de fundo escuro</translation>
 <translation id="27349076983469322">Plano de fundo claro</translation>
 <translation id="335581015389089642">Voz</translation>
+<translation id="4004802134384979325">marcada</translation>
+<translation id="4827410568042294688">unselected</translation>
 <translation id="5901630391730855834">Amarelo</translation>
 <translation id="6017514345406065928">Verde</translation>
 <translation id="6475604559827479857">Cor para destaque de palavras:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Voz do sistema da conversão de texto em voz</translation>
 <translation id="7768784765476638775">Selecionar para ouvir</translation>
 <translation id="7914870167134465181">Destaque</translation>
+<translation id="8033827949643255796">selecionado</translation>
 <translation id="8324974933005349667">Personalizar configurações de conversão de texto em voz</translation>
 <translation id="992256792861109788">Rosa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-PT.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-PT.xtb
index d9a2392..25e1bc0 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-PT.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-PT.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Fundo escuro</translation>
 <translation id="27349076983469322">Fundo claro</translation>
 <translation id="335581015389089642">Voz</translation>
+<translation id="4004802134384979325">marcada</translation>
+<translation id="4827410568042294688">não selecionado</translation>
 <translation id="5901630391730855834">Amarelo</translation>
 <translation id="6017514345406065928">Verde</translation>
 <translation id="6475604559827479857">Cor para os realces das palavras:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Voz da síntese de voz do sistema</translation>
 <translation id="7768784765476638775">Selecionar para ativar voz</translation>
 <translation id="7914870167134465181">Realce</translation>
+<translation id="8033827949643255796">selecionado</translation>
 <translation id="8324974933005349667">Personalizar as definições da síntese de voz</translation>
 <translation id="992256792861109788">Rosa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ro.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ro.xtb
index 1dc221c..4da15a6 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ro.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ro.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Fundal întunecat</translation>
 <translation id="27349076983469322">Fundal deschis</translation>
 <translation id="335581015389089642">Voce</translation>
+<translation id="4004802134384979325">bifată</translation>
+<translation id="4827410568042294688">neselectat</translation>
 <translation id="5901630391730855834">Galben</translation>
 <translation id="6017514345406065928">Verde</translation>
 <translation id="6475604559827479857">Culoare pentru evidențierea cuvintelor:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Vocea sistemului de redare vocală a textului</translation>
 <translation id="7768784765476638775">Selectează și ascultă</translation>
 <translation id="7914870167134465181">Evidențiere</translation>
+<translation id="8033827949643255796">selectate</translation>
 <translation id="8324974933005349667">Personalizează setările redării vocale a textului</translation>
 <translation id="992256792861109788">Roz</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ru.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ru.xtb
index 4b858c3..b88984d 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ru.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ru.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Темный фон</translation>
 <translation id="27349076983469322">Светлый фон</translation>
 <translation id="335581015389089642">Озвучить</translation>
+<translation id="4004802134384979325">установлен</translation>
+<translation id="4827410568042294688">Выделение отменено.</translation>
 <translation id="5901630391730855834">Желтый</translation>
 <translation id="6017514345406065928">Зеленый</translation>
 <translation id="6475604559827479857">Цвет, которым будут выделяться слова:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Голос для озвучивания текста по умолчанию</translation>
 <translation id="7768784765476638775">Озвучивание при нажатии</translation>
 <translation id="7914870167134465181">Выделение</translation>
+<translation id="8033827949643255796">Выделено.</translation>
 <translation id="8324974933005349667">Открыть настройки озвучивания текста</translation>
 <translation id="992256792861109788">Розовый</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sk.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sk.xtb
index 609dab6..00d8b44 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sk.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sk.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Tmavé pozadie</translation>
 <translation id="27349076983469322">Svetlé pozadie</translation>
 <translation id="335581015389089642">Reč</translation>
+<translation id="4004802134384979325">začiarknuté</translation>
+<translation id="4827410568042294688">nevybrané</translation>
 <translation id="5901630391730855834">Žltá</translation>
 <translation id="6017514345406065928">Zelená</translation>
 <translation id="6475604559827479857">Farba zvýrazňovania slov:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Hlas prevodu textu na reč systému</translation>
 <translation id="7768784765476638775">Vyslovenie položky po vybratí</translation>
 <translation id="7914870167134465181">Zvýraznenie</translation>
+<translation id="8033827949643255796">vybrané</translation>
 <translation id="8324974933005349667">Prispôsobiť nastavenia prevodu textu na reč</translation>
 <translation id="992256792861109788">Ružová</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sl.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sl.xtb
index 7f68ebd3..1a4f13f 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sl.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sl.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Temno ozadje</translation>
 <translation id="27349076983469322">Svetlo ozadje</translation>
 <translation id="335581015389089642">Speech</translation>
+<translation id="4004802134384979325">potrjeno</translation>
+<translation id="4827410568042294688">neizbrano</translation>
 <translation id="5901630391730855834">Rumena</translation>
 <translation id="6017514345406065928">Zelena</translation>
 <translation id="6475604559827479857">Barva za označevanje besed:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Sistemski glas pretvorbe besedila v govor</translation>
 <translation id="7768784765476638775">Izberite in poslušajte</translation>
 <translation id="7914870167134465181">Označevanje</translation>
+<translation id="8033827949643255796">izbrani</translation>
 <translation id="8324974933005349667">Prilagajanje nastavitev pretvorbe besedila v govor</translation>
 <translation id="992256792861109788">Rožnata</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sr.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sr.xtb
index ce9d56a..46cf6345 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sr.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sr.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Тамна позадина</translation>
 <translation id="27349076983469322">Светла позадина</translation>
 <translation id="335581015389089642">Говор</translation>
+<translation id="4004802134384979325">означено</translation>
+<translation id="4827410568042294688">избор је опозван</translation>
 <translation id="5901630391730855834">Жута</translation>
 <translation id="6017514345406065928">Зелена</translation>
 <translation id="6475604559827479857">Боја за истицање речи:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Системски глас за претварање текста у говор</translation>
 <translation id="7768784765476638775">Изаберите за говор</translation>
 <translation id="7914870167134465181">Истицање</translation>
+<translation id="8033827949643255796">изабрано</translation>
 <translation id="8324974933005349667">Персонализујте подешавања претварања текста у говор</translation>
 <translation id="992256792861109788">Ружичаста</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sv.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sv.xtb
index 86e2fe9..bc828c7 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sv.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sv.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Mörk bakgrund</translation>
 <translation id="27349076983469322">Ljus bakgrund</translation>
 <translation id="335581015389089642">Tal</translation>
+<translation id="4004802134384979325">markerad</translation>
+<translation id="4827410568042294688">omarkerad</translation>
 <translation id="5901630391730855834">Gul</translation>
 <translation id="6017514345406065928">Grön</translation>
 <translation id="6475604559827479857">Markera ord med färgen:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Systemets röst för text till tal</translation>
 <translation id="7768784765476638775">Textuppläsning</translation>
 <translation id="7914870167134465181">Markeringar</translation>
+<translation id="8033827949643255796">markerat</translation>
 <translation id="8324974933005349667">Anpassa inställningarna för text till tal</translation>
 <translation id="992256792861109788">Rosa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sw.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sw.xtb
index 48d1b9a..0792545 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sw.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_sw.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Mandhari-nyuma meusi</translation>
 <translation id="27349076983469322">Mandhari-nyuma meupe</translation>
 <translation id="335581015389089642">Usemi</translation>
+<translation id="4004802134384979325">kimeteuliwa</translation>
+<translation id="4827410568042294688">yameondolewa uteuzi</translation>
 <translation id="5901630391730855834">Manjano</translation>
 <translation id="6017514345406065928">Kijani</translation>
 <translation id="6475604559827479857">Rangi ya maneno yanayoangaziwa:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Sauti ya mfumo wa Ubadilishaji wa Maandishi kwenda Usemi</translation>
 <translation id="7768784765476638775">Chagua ili uzungumze</translation>
 <translation id="7914870167134465181">Kuangazia</translation>
+<translation id="8033827949643255796">kimechaguliwa</translation>
 <translation id="8324974933005349667">Weka mapendeleo kwenye mipangilio ya Ubadilishaji wa Maandishi kwenda Usemi</translation>
 <translation id="992256792861109788">Waridi</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ta.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ta.xtb
index 0d855574..7a21615 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ta.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ta.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">அடர்த்தியான பின்புலம்</translation>
 <translation id="27349076983469322">வெளிர் பின்புலம்</translation>
 <translation id="335581015389089642">பேச்சு</translation>
+<translation id="4004802134384979325">தேர்ந்தெடுக்கப்பட்டது</translation>
+<translation id="4827410568042294688">தேர்ந்தெடுக்கப்படவில்லை</translation>
 <translation id="5901630391730855834">மஞ்சள்</translation>
 <translation id="6017514345406065928">பச்சை</translation>
 <translation id="6475604559827479857">சொல்லைத் தனிப்படுத்திக் காட்டுவதற்கான வண்ணம்:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">சாதனத்தின் இயல்பு ‘உரையிலிருந்து பேச்சுக்கான' குரல்</translation>
 <translation id="7768784765476638775">பேசும் திரை</translation>
 <translation id="7914870167134465181">தனிப்படுத்திக் காட்டுதல்</translation>
+<translation id="8033827949643255796">தேர்ந்தெடுக்கப்பட்டன</translation>
 <translation id="8324974933005349667">’உரையிலிருந்து பேச்சு’ அமைப்புகளைத் தனிப்பயனாக்கவும்</translation>
 <translation id="992256792861109788">பிங்க்</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_te.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_te.xtb
index 8532415..b6ceaea 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_te.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_te.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">ముదురు నేపథ్యం</translation>
 <translation id="27349076983469322">తేలికపాటి నేపథ్యం</translation>
 <translation id="335581015389089642">ప్రసంగం</translation>
+<translation id="4004802134384979325">ఎంచుకోబడింది</translation>
+<translation id="4827410568042294688">ఎంపిక తీసివేయబడింది</translation>
 <translation id="5901630391730855834">పసుపు</translation>
 <translation id="6017514345406065928">ఆకుపచ్చ</translation>
 <translation id="6475604559827479857">పదం హైలైట్‌ల కోసం రంగు:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">వచనం నుండి ప్రసంగం సిస్టమ్ వాయిస్</translation>
 <translation id="7768784765476638775">వినడానికి ఎంచుకోండి</translation>
 <translation id="7914870167134465181">హైలైటింగ్</translation>
+<translation id="8033827949643255796">ఎంచుకోబడ్డాయి</translation>
 <translation id="8324974933005349667">వచనం నుండి ప్రసంగం సెట్టింగ్‌లను వ్యక్తిగతీకరించండి</translation>
 <translation id="992256792861109788">గులాబి రంగు</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_th.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_th.xtb
index 2a18b77..a129e15 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_th.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_th.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">พื้นหลังสีเข้ม</translation>
 <translation id="27349076983469322">พื้นหลังสีสว่าง</translation>
 <translation id="335581015389089642">คำพูด</translation>
+<translation id="4004802134384979325">เลือกแล้ว</translation>
+<translation id="4827410568042294688">ไม่ได้เลือก</translation>
 <translation id="5901630391730855834">สีเหลือง</translation>
 <translation id="6017514345406065928">สีเขียว</translation>
 <translation id="6475604559827479857">สีสำหรับการไฮไลต์คำ:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">เสียงการอ่านออกเสียงข้อความของระบบ</translation>
 <translation id="7768784765476638775">เลือกเพื่อให้อ่าน</translation>
 <translation id="7914870167134465181">การไฮไลต์</translation>
+<translation id="8033827949643255796">เลือกแล้ว</translation>
 <translation id="8324974933005349667">ปรับเปลี่ยนการตั้งค่าการอ่านออกเสียงข้อความในแบบของคุณ</translation>
 <translation id="992256792861109788">สีชมพู</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_tr.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_tr.xtb
index 5d413880..c267d53 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_tr.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_tr.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Koyu renkli arka plan</translation>
 <translation id="27349076983469322">Açık renkli arka plan</translation>
 <translation id="335581015389089642">Konuşma</translation>
+<translation id="4004802134384979325">işaretli</translation>
+<translation id="4827410568042294688">seçili değil</translation>
 <translation id="5901630391730855834">Sarı</translation>
 <translation id="6017514345406065928">Yeşil</translation>
 <translation id="6475604559827479857">Kelime vurgulama rengi:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Sistem Metin Okuma sesi</translation>
 <translation id="7768784765476638775">Seç ve Dinle</translation>
 <translation id="7914870167134465181">Vurgulama</translation>
+<translation id="8033827949643255796">seçildi</translation>
 <translation id="8324974933005349667">Metin Okuma ayarlarını kişiselleştir</translation>
 <translation id="992256792861109788">Pembe</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_uk.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_uk.xtb
index da8d626..b07d75f 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_uk.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_uk.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Темний фон</translation>
 <translation id="27349076983469322">Світлий фон</translation>
 <translation id="335581015389089642">Speech</translation>
+<translation id="4004802134384979325">з прапорцем</translation>
+<translation id="4827410568042294688">виділення скасовано</translation>
 <translation id="5901630391730855834">Жовтий</translation>
 <translation id="6017514345406065928">Зелений</translation>
 <translation id="6475604559827479857">Колір виділеного слова:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Системний голос для синтезу мовлення</translation>
 <translation id="7768784765476638775">Читання з екрана</translation>
 <translation id="7914870167134465181">Виділення</translation>
+<translation id="8033827949643255796">виділено</translation>
 <translation id="8324974933005349667">Персоналізувати налаштування синтезу мовлення</translation>
 <translation id="992256792861109788">Рожевий</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_vi.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_vi.xtb
index 3d56c3c..560dd74 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_vi.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_vi.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">Nền tối</translation>
 <translation id="27349076983469322">Nền sáng</translation>
 <translation id="335581015389089642">Giọng nói</translation>
+<translation id="4004802134384979325">đã chọn</translation>
+<translation id="4827410568042294688">đã bỏ chọn</translation>
 <translation id="5901630391730855834">Vàng</translation>
 <translation id="6017514345406065928">Xanh lục</translation>
 <translation id="6475604559827479857">Màu đánh dấu cho từ:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">Giọng nói của tính năng chuyển văn bản sang lời nói trong hệ thống</translation>
 <translation id="7768784765476638775">Chọn để nói</translation>
 <translation id="7914870167134465181">Đánh dấu</translation>
+<translation id="8033827949643255796">đã chọn</translation>
 <translation id="8324974933005349667">Cá nhân hóa các tùy chọn cài đặt Văn bản sang lời nói</translation>
 <translation id="992256792861109788">Màu hồng</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-CN.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-CN.xtb
index 3fe619f8..576b64b 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-CN.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-CN.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">深色背景</translation>
 <translation id="27349076983469322">浅色背景</translation>
 <translation id="335581015389089642">语音</translation>
+<translation id="4004802134384979325">已选中</translation>
+<translation id="4827410568042294688">已取消选中</translation>
 <translation id="5901630391730855834">黄色</translation>
 <translation id="6017514345406065928">绿色</translation>
 <translation id="6475604559827479857">字词的突出显示颜色:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">系统默认文字转语音声音</translation>
 <translation id="7768784765476638775">随选朗读</translation>
 <translation id="7914870167134465181">突出显示</translation>
+<translation id="8033827949643255796">已选中</translation>
 <translation id="8324974933005349667">个性化文字转语音设置</translation>
 <translation id="992256792861109788">粉色</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-TW.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-TW.xtb
index 42c4653..96cb5e9 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-TW.xtb
+++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-TW.xtb
@@ -10,6 +10,8 @@
 <translation id="2714180132046334502">深色背景</translation>
 <translation id="27349076983469322">淺色背景</translation>
 <translation id="335581015389089642">語音</translation>
+<translation id="4004802134384979325">已勾選</translation>
+<translation id="4827410568042294688">已取消選取</translation>
 <translation id="5901630391730855834">黃色</translation>
 <translation id="6017514345406065928">綠色</translation>
 <translation id="6475604559827479857">文字醒目顯示顏色:</translation>
@@ -17,6 +19,7 @@
 <translation id="7261612856573623172">系統預設文字轉語音聲音</translation>
 <translation id="7768784765476638775">隨選朗讀</translation>
 <translation id="7914870167134465181">醒目顯示</translation>
+<translation id="8033827949643255796">已選取</translation>
 <translation id="8324974933005349667">個人化文字轉語音設定</translation>
 <translation id="992256792861109788">粉紅色</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/resources/settings/internet_page/internet_page.js b/chrome/browser/resources/settings/internet_page/internet_page.js
index 7ca43026..1036246 100644
--- a/chrome/browser/resources/settings/internet_page/internet_page.js
+++ b/chrome/browser/resources/settings/internet_page/internet_page.js
@@ -84,7 +84,8 @@
       value: null,
     },
 
-    /** Whether a managed network is available in the visible network list.
+    /**
+     * Whether a managed network is available in the visible network list.
      * @private {boolean}
      */
     managedNetworkAvailable: {
@@ -256,7 +257,9 @@
       // iron-list makes the correct timing to focus an item in the list
       // very complicated, and the item may not exist, so just focus the
       // entire list for now.
-      element = this.$$('settings-internet-subpage').$$('#networkList');
+      let subPage = this.$$('settings-internet-subpage');
+      if (subPage)
+        element = subPage.$$('#networkList');
     } else if (this.detailType_) {
       element = this.$$('network-summary')
                     .$$(`#${this.detailType_}`)
@@ -287,10 +290,14 @@
    */
   onShowConfig_: function(event) {
     const properties = event.detail;
-    let configAndConnect = !properties.GUID;  // New configuration
-    this.showConfig_(
-        configAndConnect, properties.Type, properties.GUID,
-        CrOnc.getNetworkName(properties));
+    if (!properties.GUID) {
+      // New configuration
+      this.showConfig_(true /* configAndConnect */, properties.Type);
+    } else {
+      this.showConfig_(
+          false /* configAndConnect */, properties.Type, properties.GUID,
+          CrOnc.getNetworkName(properties));
+    }
   },
 
   /**
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_browser_proxy.js b/chrome/browser/resources/settings/multidevice_page/multidevice_browser_proxy.js
index 39f278b..bdc0120 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_browser_proxy.js
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_browser_proxy.js
@@ -24,6 +24,12 @@
     removeHostDevice() {}
 
     retryPendingHostSetup() {}
+
+    /**
+     * Called when the "Set Up" button is clicked to open the Android Messages
+     * PWA.
+     */
+    setUpAndroidSms() {}
   }
 
   /**
@@ -55,6 +61,11 @@
     retryPendingHostSetup() {
       chrome.send('retryPendingHostSetup');
     }
+
+    /** @override */
+    setUpAndroidSms() {
+      chrome.send('setUpAndroidSms');
+    }
   }
 
   cr.addSingletonGetter(MultiDeviceBrowserProxyImpl);
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.js b/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.js
index 9140d4d2..4179e9c 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.js
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.js
@@ -36,6 +36,26 @@
   },
 
   /**
+   * Whether the gatekeeper pref for the whole Better Together feature suite is
+   * allowed by policy.
+   * @return {boolean}
+   */
+  isSuiteAllowedByPolicy: function() {
+    return this.pageContentData.betterTogetherState !==
+        settings.MultiDeviceFeatureState.PROHIBITED_BY_POLICY;
+  },
+
+  /**
+   * Whether an individual feature is allowed by policy.
+   * @param {!settings.MultiDeviceFeature} feature
+   * @return {boolean}
+   */
+  isFeatureAllowedByPolicy: function(feature) {
+    return this.getFeatureState(feature) !==
+        settings.MultiDeviceFeatureState.PROHIBITED_BY_POLICY;
+  },
+
+  /**
    * @param {!settings.MultiDeviceFeature} feature
    * @return {boolean}
    */
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_feature_item.html b/chrome/browser/resources/settings/multidevice_page/multidevice_feature_item.html
index bd1cbcc1..2be742b 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_feature_item.html
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_feature_item.html
@@ -24,11 +24,16 @@
       iron-icon {
         padding: 2px;
       }
+
+      cr-policy-indicator {
+        padding: 0 var(--cr-controlled-by-spacing);
+      }
     </style>
     <div id="card"
         class="settings-box two-line"
         on-click="handleItemClick_"
-        actionable$="[[hasSubpageClickHandler_(subpageRoute)]]">
+        actionable$="[[hasSubpageClickHandler_(
+            subpageRoute, pageContentData, feature)]]">
       <iron-icon icon="[[getIconName(feature)]]"></iron-icon>
       <div id="item-text-container" class="middle">
         [[getFeatureName(feature)]]
@@ -37,13 +42,21 @@
             inner-h-t-m-l="[[getFeatureSummaryHtml(feature)]]">
         </div>
       </div>
-      <template is="dom-if" if="[[hasSubpageClickHandler_(subpageRoute)]]">
+      <template is="dom-if"
+          if="[[hasSubpageClickHandler_(
+              subpageRoute, pageContentData, feature)]]"
+          restamp>
         <paper-icon-button-light class="subpage-arrow">
           <button aria-label="[[getFeatureName(feature)]]"
               aria-describedby="featureSecondary"></button>
         </paper-icon-button-light>
         <div class="separator"></div>
       </template>
+      <template is="dom-if"
+          if="[[!isFeatureAllowedByPolicy(feature, pageContentData)]]"
+          restamp>
+        <cr-policy-indicator indicator-type="userPolicy"></cr-policy-indicator>
+      </template>
       <slot name="feature-controller">
         <!-- This settings-multidevice-feature-toggle is the default controller.
         If an element with slot="feature-controller" is attached, it will
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_feature_item.js b/chrome/browser/resources/settings/multidevice_page/multidevice_feature_item.js
index 9563d29d..5578350 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_feature_item.js
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_feature_item.js
@@ -35,12 +35,12 @@
    * @private
    */
   hasSubpageClickHandler_: function() {
-    return !!this.subpageRoute;
+    return !!this.subpageRoute && this.isFeatureAllowedByPolicy(this.feature);
   },
 
   /** @private */
   handleItemClick_: function(event) {
-    if (!this.subpageRoute)
+    if (!this.hasSubpageClickHandler_())
       return;
 
     // We do not navigate away if the click was on a link.
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_page.html b/chrome/browser/resources/settings/multidevice_page/multidevice_page.html
index 318785d0..527c1b2 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_page.html
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_page.html
@@ -22,7 +22,11 @@
 
 <dom-module id="settings-multidevice-page">
   <template>
-    <style include="settings-shared"></style>
+    <style include="settings-shared">
+      cr-policy-indicator {
+        padding: 0 var(--cr-controlled-by-spacing);
+      }
+    </style>
     <settings-animated-pages id="pages" section="multidevice"
         focus-config="[[focusConfig_]]">
       <neon-animatable route-path="default">
@@ -43,6 +47,16 @@
             </div>
           </div>
           <template is="dom-if"
+              if="[[!isSuiteAllowedByPolicy(pageContentData)]]"
+              restamp>
+            <cr-policy-indicator indicator-type="userPolicy">
+            </cr-policy-indicator>
+            <settings-multidevice-feature-toggle
+                feature="[[MultiDeviceFeature.BETTER_TOGETHER_SUITE]]"
+                page-content-data="[[pageContentData]]">
+            </settings-multidevice-feature-toggle>
+          </template>
+          <template is="dom-if"
               if="[[shouldShowSeparatorAndSubpageArrow_(pageContentData)]]"
               restamp>
             <template is="dom-if"
@@ -83,7 +97,6 @@
         </settings-subpage>
       </template>
     </settings-animated-pages>
-
     <template is="dom-if" if="[[showPasswordPromptDialog_]]" restamp>
       <settings-password-prompt-dialog
           id="passwordPrompt" on-close="onPasswordPromptDialogClose_"
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_page.js b/chrome/browser/resources/settings/multidevice_page/multidevice_page.js
index 3aa25fc7..31bde17 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_page.js
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_page.js
@@ -42,18 +42,12 @@
     },
 
     /**
-     * Features which the user has requested to be enabled but could not be
-     * enabled immediately because they require that the user enter a password
-     * first. This array is only set when the password prompt is visible; if the
-     * user enters a correct password, the features are enabled, and if the user
-     * closes the prompt without entering a correct password, these pending
-     * requests are dropped.
-     * @private {!Array<!settings.MultiDeviceFeature>}
+     * The feature which the user wishes to enable, but which requires
+     * authentication. Once |authToken_| is valid, this value will be passed
+     * along to |browserProxy_|, and subsequently cleared.
+     * @private {?settings.MultiDeviceFeature}
      */
-    featuresToBeEnabledOnceAuthenticated_: {
-      type: Array,
-      value: [],
-    },
+    attemptedEnabledFeature_: {type: Number, value: null},
 
     /** @private {boolean} */
     showPasswordPromptDialog_: {
@@ -100,6 +94,8 @@
    * @private
    */
   getSubLabelInnerHtml_: function() {
+    if (!this.isSuiteAllowedByPolicy())
+      return this.i18nAdvanced('multideviceSetupSummary');
     switch (this.pageContentData.mode) {
       case settings.MultiDeviceSettingsMode.NO_ELIGIBLE_HOSTS:
         return this.i18nAdvanced('multideviceNoHostText');
@@ -183,6 +179,9 @@
 
   /** @private */
   handleItemClick_: function() {
+    if (!this.isHostSet())
+      return;
+
     settings.navigateTo(settings.routes.MULTIDEVICE_FEATURES);
   },
 
@@ -202,6 +201,18 @@
     }
   },
 
+  /**
+   * Tell |this.browserProxy_| to enable |this.attemptedEnabledFeature_|.
+   * @private
+   */
+  enableAttemptedFeature_: function() {
+    if (this.attemptedEnabledFeature_ != null) {
+      this.browserProxy_.setFeatureEnabledState(
+          this.attemptedEnabledFeature_, true /* enabled */, this.authToken_);
+      this.attemptedEnabledFeature_ = null;
+    }
+  },
+
   /** @private */
   openPasswordPromptDialog_: function() {
     this.showPasswordPromptDialog_ = true;
@@ -209,22 +220,6 @@
 
   /** @private */
   onPasswordPromptDialogClose_: function() {
-    // If |this.authToken_| is set when the dialog has been closed, this means
-    // that the user entered the correct password into the dialog. Thus, send
-    // all pending features to be enabled.
-    if (this.authToken_) {
-      this.featuresToBeEnabledOnceAuthenticated_.forEach((feature) => {
-        this.browserProxy_.setFeatureEnabledState(
-            feature, true /* enabled */, this.authToken_);
-      });
-    }
-
-    // If the features were enabled above, they no longer need to be tracked.
-    // Likewise, if the features were not enabled above, the user did not enter
-    // the correct password in the dialog, so the features should not actually
-    // be enabled.
-    this.featuresToBeEnabledOnceAuthenticated_ = [];
-
     this.showPasswordPromptDialog_ = false;
   },
 
@@ -240,50 +235,33 @@
     let feature = event.detail.feature;
     let enabled = event.detail.enabled;
 
-    if (!this.isAuthenticationRequiredForChange_(feature, enabled)) {
-      this.browserProxy_.setFeatureEnabledState(
-          feature, enabled, this.authToken_);
-      return;
+    // Authentication is never required if disabling a feature; only consider it
+    // if enabling.
+    if (enabled) {
+      // TODO(crbug.com/876436): Actually determine this, when the API is
+      // available. It's fine to default to true here for now, because it errs
+      // on the side of more security.
+      let isSmartLockPrefEnabled = true;
+
+      let isPasswordPromptRequired =
+          (feature === settings.MultiDeviceFeature.SMART_LOCK) ||
+          (feature === settings.MultiDeviceFeature.BETTER_TOGETHER_SUITE &&
+           isSmartLockPrefEnabled);
+
+      if (isPasswordPromptRequired) {
+        this.attemptedEnabledFeature_ = feature;
+
+        if (this.authToken_) {
+          this.enableAttemptedFeature_();
+        } else {
+          this.openPasswordPromptDialog_();
+        }
+        return;
+      }
     }
 
-    this.featuresToBeEnabledOnceAuthenticated_.push(feature);
-    this.openPasswordPromptDialog_();
-  },
-
-  /**
-   * @param {!settings.MultiDeviceFeature} feature The feature to change.
-   * @param {boolean} enabled True if the user has requested to enable the
-   *     feature; false if the user has requested to disable the feature.
-   * @return {boolean} Whether authentication is required to change the
-   *     feature's state.
-   * @private
-   */
-  isAuthenticationRequiredForChange_: function(feature, enabled) {
-    // Disabling a feature never requires authentication.
-    if (!enabled)
-      return false;
-
-    // Enabling SmartLock always requires authentication.
-    if (feature == settings.MultiDeviceFeature.SMART_LOCK)
-      return true;
-
-    // Enabling any feature besides SmartLock and the Better Together suite does
-    // not require authentication.
-    if (feature != settings.MultiDeviceFeature.BETTER_TOGETHER_SUITE)
-      return false;
-
-    let smartLockState =
-        this.getFeatureState(settings.MultiDeviceFeature.SMART_LOCK);
-
-    // If the user is enabling the Better Together suite and this change would
-    // result in SmartLock being implicitly enabled, authentication is required.
-    // SmartLock is implicitly enabled if it is only currently not enabled due
-    // to the suite being disabled or due to the SmartLock host device not
-    // having a lock screen set.
-    return smartLockState ==
-        settings.MultiDeviceFeatureState.UNAVAILABLE_SUITE_DISABLED ||
-        smartLockState ==
-        settings.MultiDeviceFeatureState.UNAVAILABLE_INSUFFICIENT_SECURITY;
+    // No authentication is required.
+    this.browserProxy_.setFeatureEnabledState(feature, enabled);
   },
 
   /** @private */
@@ -291,4 +269,19 @@
     this.browserProxy_.removeHostDevice();
     settings.navigateTo(settings.routes.MULTIDEVICE);
   },
+
+  /**
+   * Called when the authToken_ changes. If the authToken is valid, that
+   * indicates the user authenticated successfully. If not, cancel the pending
+   * attempt to enable attemptedEnabledFeature_.
+   * @param {String} authToken
+   * @private
+   */
+  authTokenChanged_: function(authToken) {
+    if (this.authToken_) {
+      this.enableAttemptedFeature_();
+    } else {
+      this.attemptedEnabledFeature_ = null;
+    }
+  },
 });
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.js b/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.js
index e7cb3e4..a8da00c 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.js
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.js
@@ -56,9 +56,17 @@
     },
   },
 
+  /** @private {?settings.MultiDeviceBrowserProxy} */
+  browserProxy_: null,
+
+  /** @override */
+  created: function() {
+    this.browserProxy_ = settings.MultiDeviceBrowserProxyImpl.getInstance();
+  },
+
   /** @private */
   handleAndroidMessagesButtonClick_: function() {
-    this.androidMessagesRequiresSetup_ = false;
+    this.browserProxy_.setUpAndroidSms();
   },
 
   listeners: {
diff --git a/chrome/browser/resources/settings/people_page/sync_account_control.html b/chrome/browser/resources/settings/people_page/sync_account_control.html
index 3cab6aa..4536883d 100644
--- a/chrome/browser/resources/settings/people_page/sync_account_control.html
+++ b/chrome/browser/resources/settings/people_page/sync_account_control.html
@@ -54,6 +54,7 @@
       }
 
       #avatar-container {
+        height: var(--shown-avatar-size);
         position: relative;
       }
 
diff --git a/chrome/browser/resources/settings/settings_page/settings_subpage.js b/chrome/browser/resources/settings/settings_page/settings_subpage.js
index 82fecc6..0459c70 100644
--- a/chrome/browser/resources/settings/settings_page/settings_subpage.js
+++ b/chrome/browser/resources/settings/settings_page/settings_subpage.js
@@ -54,10 +54,16 @@
     active_: {
       type: Boolean,
       value: false,
-      observer: 'onActiveChanged_',
     },
   },
 
+  observers: [
+    'onActiveChanged_(active_, searchLabel)',
+  ],
+
+  /** @private {boolean} */
+  lastActiveValue_: false,
+
   /** @override */
   attached: function() {
     if (!!this.searchLabel) {
@@ -87,8 +93,9 @@
 
   /** @private */
   onActiveChanged_: function() {
-    if (!this.searchLabel)
+    if (!this.searchLabel || this.lastActiveValue_ == this.active_)
       return;
+    this.lastActiveValue_ = this.active_;
 
     if (this.active_)
       this.becomeActiveFindShortcutListener();
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
index f867e3b9..018717f 100644
--- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc
+++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -576,6 +576,7 @@
 
 bool ChromePasswordProtectionService::IsPingingEnabled(
     LoginReputationClientRequest::TriggerType trigger_type,
+    ReusedPasswordType password_type,
     RequestOutcome* reason) {
   if (!IsSafeBrowsingEnabled()) {
     *reason = RequestOutcome::SAFE_BROWSING_DISABLED;
@@ -583,6 +584,15 @@
   }
 
   if (trigger_type == LoginReputationClientRequest::PASSWORD_REUSE_EVENT) {
+    if (password_type == PasswordReuseEvent::SAVED_PASSWORD)
+      return true;
+
+    if (password_type == PasswordReuseEvent::SIGN_IN_PASSWORD &&
+        GetSyncAccountType() == PasswordReuseEvent::NOT_SIGNED_IN) {
+      *reason = RequestOutcome::USER_NOT_SIGNED_IN;
+      return false;
+    }
+
     PasswordProtectionTrigger trigger_level =
         GetPasswordProtectionWarningTriggerPref();
     if (trigger_level == PASSWORD_REUSE) {
@@ -799,6 +809,7 @@
     case RequestOutcome::DISABLED_DUE_TO_FEATURE_DISABLED:
     case RequestOutcome::DISABLED_DUE_TO_USER_POPULATION:
     case RequestOutcome::SAFE_BROWSING_DISABLED:
+    case RequestOutcome::USER_NOT_SIGNED_IN:
       MaybeLogPasswordReuseLookupResult(web_contents,
                                         PasswordReuseLookup::REQUEST_FAILURE);
       break;
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.h b/chrome/browser/safe_browsing/chrome_password_protection_service.h
index 76e9c542..82b75d03 100644
--- a/chrome/browser/safe_browsing/chrome_password_protection_service.h
+++ b/chrome/browser/safe_browsing/chrome_password_protection_service.h
@@ -202,9 +202,10 @@
 
   bool IsIncognito() override;
 
-  // Checks if pinging should be enabled based on the |trigger_type| and user
-  // state, updates |reason| accordingly.
+  // Checks if pinging should be enabled based on the |trigger_type|,
+  // |password_type| and user state, updates |reason| accordingly.
   bool IsPingingEnabled(LoginReputationClientRequest::TriggerType trigger_type,
+                        ReusedPasswordType password_type,
                         RequestOutcome* reason) override;
 
   // If user enabled history syncing.
@@ -267,7 +268,9 @@
   FRIEND_TEST_ALL_PREFIXES(ChromePasswordProtectionServiceTest,
                            VerifyUserPopulationForPasswordOnFocusPing);
   FRIEND_TEST_ALL_PREFIXES(ChromePasswordProtectionServiceTest,
-                           VerifyUserPopulationForProtectedPasswordEntryPing);
+                           VerifyUserPopulationForSyncPasswordEntryPing);
+  FRIEND_TEST_ALL_PREFIXES(ChromePasswordProtectionServiceTest,
+                           VerifyUserPopulationForSavedPasswordEntryPing);
   FRIEND_TEST_ALL_PREFIXES(ChromePasswordProtectionServiceTest,
                            VerifyPasswordReuseUserEventNotRecorded);
   FRIEND_TEST_ALL_PREFIXES(ChromePasswordProtectionServiceTest,
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc b/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc
index 763bca19..2cd29658 100644
--- a/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc
+++ b/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc
@@ -303,62 +303,121 @@
   RequestOutcome reason;
   service_->ConfigService(false /*incognito*/, false /*SBER*/);
   EXPECT_FALSE(service_->IsPingingEnabled(
-      LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, &reason));
+      LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE,
+      PasswordReuseEvent::REUSED_PASSWORD_TYPE_UNKNOWN, &reason));
   EXPECT_EQ(RequestOutcome::DISABLED_DUE_TO_USER_POPULATION, reason);
 
   service_->ConfigService(false /*incognito*/, true /*SBER*/);
   EXPECT_TRUE(service_->IsPingingEnabled(
-      LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, &reason));
+      LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE,
+      PasswordReuseEvent::REUSED_PASSWORD_TYPE_UNKNOWN, &reason));
 
   service_->ConfigService(true /*incognito*/, false /*SBER*/);
   EXPECT_FALSE(service_->IsPingingEnabled(
-      LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, &reason));
+      LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE,
+      PasswordReuseEvent::REUSED_PASSWORD_TYPE_UNKNOWN, &reason));
   EXPECT_EQ(RequestOutcome::DISABLED_DUE_TO_INCOGNITO, reason);
 
   service_->ConfigService(true /*incognito*/, true /*SBER*/);
   EXPECT_FALSE(service_->IsPingingEnabled(
-      LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, &reason));
+      LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE,
+      PasswordReuseEvent::REUSED_PASSWORD_TYPE_UNKNOWN, &reason));
   EXPECT_EQ(RequestOutcome::DISABLED_DUE_TO_INCOGNITO, reason);
 }
 
 TEST_F(ChromePasswordProtectionServiceTest,
-       VerifyUserPopulationForProtectedPasswordEntryPing) {
+       VerifyUserPopulationForSavedPasswordEntryPing) {
+  RequestOutcome reason;
+  service_->ConfigService(false /*incognito*/, false /*SBER*/);
+  EXPECT_TRUE(service_->IsPingingEnabled(
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SAVED_PASSWORD, &reason));
+
+  service_->ConfigService(false /*incognito*/, true /*SBER*/);
+  EXPECT_TRUE(service_->IsPingingEnabled(
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SAVED_PASSWORD, &reason));
+
+  service_->ConfigService(true /*incognito*/, false /*SBER*/);
+  EXPECT_TRUE(service_->IsPingingEnabled(
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SAVED_PASSWORD, &reason));
+
+  service_->ConfigService(true /*incognito*/, true /*SBER*/);
+  EXPECT_TRUE(service_->IsPingingEnabled(
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SAVED_PASSWORD, &reason));
+}
+
+TEST_F(ChromePasswordProtectionServiceTest,
+       VerifyUserPopulationForSyncPasswordEntryPing) {
+  // If user is not signed in, no ping should be sent.
+  RequestOutcome reason;
+  service_->ConfigService(false /*incognito*/, false /*SBER*/);
+  EXPECT_FALSE(service_->IsPingingEnabled(
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
+  EXPECT_EQ(RequestOutcome::USER_NOT_SIGNED_IN, reason);
+
+  service_->ConfigService(false /*incognito*/, true /*SBER*/);
+  EXPECT_FALSE(service_->IsPingingEnabled(
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
+  EXPECT_EQ(RequestOutcome::USER_NOT_SIGNED_IN, reason);
+
+  service_->ConfigService(true /*incognito*/, false /*SBER*/);
+  EXPECT_FALSE(service_->IsPingingEnabled(
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
+  EXPECT_EQ(RequestOutcome::USER_NOT_SIGNED_IN, reason);
+
+  service_->ConfigService(true /*incognito*/, true /*SBER*/);
+  EXPECT_FALSE(service_->IsPingingEnabled(
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
+  EXPECT_EQ(RequestOutcome::USER_NOT_SIGNED_IN, reason);
+
   SigninManagerFactory::GetForProfile(profile())->SetAuthenticatedAccountInfo(
       kTestGaiaID, kTestEmail);
   SetUpSyncAccount(std::string(AccountTrackerService::kNoHostedDomainFound),
                    std::string(kTestGaiaID), std::string(kTestEmail));
 
-  // Protected password entry pinging is enabled by default.
-  RequestOutcome reason;
+  // Sync password entry pinging is enabled by default.
   service_->ConfigService(false /*incognito*/, false /*SBER*/);
   EXPECT_TRUE(service_->IsPingingEnabled(
-      LoginReputationClientRequest::PASSWORD_REUSE_EVENT, &reason));
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
 
   service_->ConfigService(false /*incognito*/, true /*SBER*/);
   EXPECT_TRUE(service_->IsPingingEnabled(
-      LoginReputationClientRequest::PASSWORD_REUSE_EVENT, &reason));
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
 
   service_->ConfigService(true /*incognito*/, false /*SBER*/);
   EXPECT_TRUE(service_->IsPingingEnabled(
-      LoginReputationClientRequest::PASSWORD_REUSE_EVENT, &reason));
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
 
   service_->ConfigService(true /*incognito*/, true /*SBER*/);
   EXPECT_TRUE(service_->IsPingingEnabled(
-      LoginReputationClientRequest::PASSWORD_REUSE_EVENT, &reason));
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
 
-  // If password protection pinging is disabled by policy,
+  // If sync password entry pinging is disabled by policy,
   // |IsPingingEnabled(..)| should return false.
   profile()->GetPrefs()->SetInteger(prefs::kPasswordProtectionWarningTrigger,
                                     PASSWORD_PROTECTION_OFF);
   service_->ConfigService(false /*incognito*/, false /*SBER*/);
   EXPECT_FALSE(service_->IsPingingEnabled(
-      LoginReputationClientRequest::PASSWORD_REUSE_EVENT, &reason));
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
   EXPECT_EQ(RequestOutcome::TURNED_OFF_BY_ADMIN, reason);
 
   profile()->GetPrefs()->SetInteger(prefs::kPasswordProtectionWarningTrigger,
                                     PASSWORD_REUSE);
   EXPECT_FALSE(service_->IsPingingEnabled(
-      LoginReputationClientRequest::PASSWORD_REUSE_EVENT, &reason));
+      LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
+      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
   EXPECT_EQ(RequestOutcome::PASSWORD_ALERT_MODE, reason);
 }
 
@@ -1114,7 +1173,7 @@
   RequestOutcome reason;
   EXPECT_TRUE(service_->CanSendPing(
       LoginReputationClientRequest::PASSWORD_REUSE_EVENT, GURL("about:blank"),
-      PasswordReuseEvent::SIGN_IN_PASSWORD, &reason));
+      PasswordReuseEvent::SAVED_PASSWORD, &reason));
 }
 
 }  // namespace safe_browsing
diff --git a/chrome/browser/ui/ash/assistant/device_actions.cc b/chrome/browser/ui/ash/assistant/device_actions.cc
index 4bb1236a..a3064412 100644
--- a/chrome/browser/ui/ash/assistant/device_actions.cc
+++ b/chrome/browser/ui/ash/assistant/device_actions.cc
@@ -7,6 +7,8 @@
 #include "ash/public/cpp/ash_pref_names.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
 #include "chromeos/network/network_state_handler.h"
 #include "components/prefs/pref_service.h"
 #include "components/user_manager/user_manager.h"
@@ -35,3 +37,27 @@
   profile->GetPrefs()->SetBoolean(ash::prefs::kUserBluetoothAdapterEnabled,
                                   enabled);
 }
+
+void HandleScreenBrightnessCallback(
+    DeviceActions::GetScreenBrightnessLevelCallback callback,
+    base::Optional<double> level) {
+  if (level.has_value()) {
+    std::move(callback).Run(true, level.value() / 100.0);
+  } else {
+    std::move(callback).Run(false, 0.0);
+  }
+}
+
+void DeviceActions::GetScreenBrightnessLevel(
+    DeviceActions::GetScreenBrightnessLevelCallback callback) {
+  chromeos::DBusThreadManager::Get()
+      ->GetPowerManagerClient()
+      ->GetScreenBrightnessPercent(
+          base::BindOnce(&HandleScreenBrightnessCallback, std::move(callback)));
+}
+
+void DeviceActions::SetScreenBrightnessLevel(double level, bool gradual) {
+  chromeos::DBusThreadManager::Get()
+      ->GetPowerManagerClient()
+      ->SetScreenBrightnessPercent(level * 100.0f, gradual);
+}
diff --git a/chrome/browser/ui/ash/assistant/device_actions.h b/chrome/browser/ui/ash/assistant/device_actions.h
index a9f4169..2d830653 100644
--- a/chrome/browser/ui/ash/assistant/device_actions.h
+++ b/chrome/browser/ui/ash/assistant/device_actions.h
@@ -16,6 +16,9 @@
   // mojom::DeviceActions overrides:
   void SetWifiEnabled(bool enabled) override;
   void SetBluetoothEnabled(bool enabled) override;
+  void GetScreenBrightnessLevel(
+      GetScreenBrightnessLevelCallback callback) override;
+  void SetScreenBrightnessLevel(double level, bool gradual) override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(DeviceActions);
diff --git a/chrome/browser/ui/ash/launcher/discover_window_observer.cc b/chrome/browser/ui/ash/launcher/discover_window_observer.cc
index 8212609d..cc87068 100644
--- a/chrome/browser/ui/ash/launcher/discover_window_observer.cc
+++ b/chrome/browser/ui/ash/launcher/discover_window_observer.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/ui/ash/launcher/discover_window_observer.h"
 
 #include "ash/public/cpp/app_list/internal_app_id_constants.h"
-#include "ash/public/cpp/resources/grit/ash_public_unscaled_resources.h"
 #include "ash/public/cpp/shelf_item.h"
 #include "ash/public/cpp/window_properties.h"
 #include "chrome/browser/ui/browser.h"
@@ -14,11 +13,9 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/strings/grit/components_strings.h"
 #include "services/ws/public/mojom/window_manager.mojom.h"
-#include "ui/aura/client/aura_constants.h"
 #include "ui/aura/window.h"
 #include "ui/base/class_property.h"
 #include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
 #include "ui/gfx/image/image_skia.h"
 
 namespace {
@@ -56,10 +53,5 @@
   const ash::ShelfID shelf_id(app_list::kInternalAppIdDiscover);
   window->SetProperty(ash::kShelfIDKey, new std::string(shelf_id.Serialize()));
   window->SetProperty<int>(ash::kShelfItemTypeKey, ash::TYPE_APP);
-  ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
-  // The new gfx::ImageSkia instance is owned by the window itself.
-  window->SetProperty(
-      aura::client::kWindowIconKey,
-      new gfx::ImageSkia(*rb.GetImageSkiaNamed(IDR_DISCOVER_APP_192)));
   aura_window_tracker_->Add(window);
 }
diff --git a/chrome/browser/ui/exclusive_access/fullscreen_controller.cc b/chrome/browser/ui/exclusive_access/fullscreen_controller.cc
index 46daceb7..c967e81 100644
--- a/chrome/browser/ui/exclusive_access/fullscreen_controller.cc
+++ b/chrome/browser/ui/exclusive_access/fullscreen_controller.cc
@@ -179,16 +179,19 @@
   if (!exclusive_access_context->IsFullscreen())
     return;
 
-  if (IsFullscreenCausedByTab()) {
+  bool is_fullscreen_caused_by_tab = IsFullscreenCausedByTab();
+  if (is_fullscreen_caused_by_tab) {
     // Tab Fullscreen -> Normal.
     ToggleFullscreenModeInternal(TAB);
-    return;
   }
 
-  // Tab Fullscreen -> Browser Fullscreen.
-  if (state_prior_to_tab_fullscreen_ == STATE_BROWSER_FULLSCREEN)
-    exclusive_access_context->UpdateUIForTabFullscreen(
-        ExclusiveAccessContext::STATE_EXIT_TAB_FULLSCREEN);
+  // Exiting tab fullscreen to either non-fullscreen mode or browser fullscreen
+  // mode requires updating Top UI.
+  exclusive_access_context->UpdateUIForTabFullscreen(
+      ExclusiveAccessContext::STATE_EXIT_TAB_FULLSCREEN);
+
+  if (is_fullscreen_caused_by_tab)
+    return;
 
   // If currently there is a tab in "tab fullscreen" mode and fullscreen
   // was not caused by it (i.e., previously it was in "browser fullscreen"
diff --git a/chrome/browser/ui/exclusive_access/fullscreen_controller_browsertest.cc b/chrome/browser/ui/exclusive_access/fullscreen_controller_browsertest.cc
index 1ecac54..3b64ed5 100644
--- a/chrome/browser/ui/exclusive_access/fullscreen_controller_browsertest.cc
+++ b/chrome/browser/ui/exclusive_access/fullscreen_controller_browsertest.cc
@@ -5,16 +5,21 @@
 #include "base/test/simple_test_tick_clock.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/time/time.h"
+#include "build/build_config.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_tabstrip.h"
 #include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
+#include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
 #include "chrome/browser/ui/exclusive_access/fullscreen_controller_test.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/pref_names.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
+#include "components/prefs/pref_service.h"
 #include "content/public/browser/native_web_keyboard_event.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/url_constants.h"
@@ -541,3 +546,53 @@
   ASSERT_TRUE(
       GetExclusiveAccessManager()->mouse_lock_controller()->IsMouseLocked());
 }
+
+// Test whether the top view's status is correct during various transitions
+// among normal state, browser fullscreen mode, and tab fullscreen mode.
+IN_PROC_BROWSER_TEST_F(FullscreenControllerTest, TopViewStatusChange) {
+  ExclusiveAccessContext* context = GetExclusiveAccessManager()->context();
+#if defined(OS_MACOSX)
+  // First, set the preference to true so we expect to see the top view in
+  // fullscreen mode.
+  PrefService* prefs = browser()->profile()->GetPrefs();
+  prefs->SetBoolean(prefs::kShowFullscreenToolbar, true);
+#endif
+
+  // Test Normal state <--> Tab fullscreen mode.
+  EXPECT_FALSE(context->IsFullscreen());
+  EXPECT_FALSE(context->ShouldHideUIForFullscreen());
+
+  EnterActiveTabFullscreen();
+  EXPECT_TRUE(context->IsFullscreen());
+  EXPECT_TRUE(context->ShouldHideUIForFullscreen());
+
+  SendEscapeToFullscreenController();
+  EXPECT_FALSE(context->IsFullscreen());
+  EXPECT_FALSE(context->ShouldHideUIForFullscreen());
+
+  // Test Normal state <--> Browser fullscreen mode <--> Tab fullscreen mode.
+  chrome::ToggleFullscreenMode(browser());
+  EXPECT_TRUE(context->IsFullscreen());
+#if defined(OS_MACOSX) || defined(OS_CHROMEOS)
+  bool should_hide_top_ui = false;
+#else
+  bool should_hide_top_ui = true;
+#endif
+  EXPECT_EQ(should_hide_top_ui, context->ShouldHideUIForFullscreen());
+
+  EnterActiveTabFullscreen();
+  EXPECT_TRUE(context->IsFullscreen());
+#if defined(OS_CHROMEOS)
+  EXPECT_FALSE(context->ShouldHideUIForFullscreen());
+#else
+  EXPECT_TRUE(context->ShouldHideUIForFullscreen());
+#endif
+
+  SendEscapeToFullscreenController();
+  EXPECT_TRUE(context->IsFullscreen());
+  EXPECT_EQ(should_hide_top_ui, context->ShouldHideUIForFullscreen());
+
+  chrome::ToggleFullscreenMode(browser());
+  EXPECT_FALSE(context->IsFullscreen());
+  EXPECT_FALSE(context->ShouldHideUIForFullscreen());
+}
diff --git a/chrome/browser/ui/search/local_ntp_backgrounds_browsertest.cc b/chrome/browser/ui/search/local_ntp_backgrounds_browsertest.cc
index 997ac3c..a4a167f 100644
--- a/chrome/browser/ui/search/local_ntp_backgrounds_browsertest.cc
+++ b/chrome/browser/ui/search/local_ntp_backgrounds_browsertest.cc
@@ -5,11 +5,15 @@
 #include <string>
 
 #include "base/test/scoped_feature_list.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/extensions/extension_browsertest.h"
 #include "chrome/browser/search/instant_service.h"
 #include "chrome/browser/search/instant_service_factory.h"
 #include "chrome/browser/search/instant_service_observer.h"
 #include "chrome/browser/search/ntp_features.h"
 #include "chrome/browser/search/search.h"
+#include "chrome/browser/themes/theme_service.h"
+#include "chrome/browser/themes/theme_service_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/search/instant_test_utils.h"
@@ -19,6 +23,8 @@
 #include "chrome/common/url_constants.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/test/test_utils.h"
+#include "extensions/browser/extension_registry.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
@@ -55,20 +61,50 @@
     run_loop.Run();
   }
 
+  void WaitForThemeApplied(bool theme_installed) {
+    DCHECK(!quit_closure_);
+
+    theme_installed_ = theme_installed;
+    if (!theme_info_.using_default_theme == theme_installed) {
+      return;
+    }
+
+    base::RunLoop run_loop;
+    quit_closure_ = run_loop.QuitClosure();
+    run_loop.Run();
+  }
+
+  // Switch the exit condition for ThemeInfoChanged.
+  void SwitchCheck() {
+    wait_for_custom_background_or_theme_ =
+        !wait_for_custom_background_or_theme_;
+  }
+
+  bool IsUsingDefaultTheme() { return theme_info_.using_default_theme; }
+
  private:
   void ThemeInfoChanged(const ThemeBackgroundInfo& theme_info) override {
     theme_info_ = theme_info;
 
-    if (quit_closure_ &&
-        theme_info_.custom_background_url == expected_background_url_ &&
-        theme_info_.custom_background_attribution_line_1 ==
-            expected_attribution_1_ &&
-        theme_info_.custom_background_attribution_line_2 ==
-            expected_attribution_2_ &&
-        theme_info_.custom_background_attribution_action_url ==
-            expected_attribution_action_url_) {
-      std::move(quit_closure_).Run();
-      quit_closure_.Reset();
+    if (quit_closure_) {
+      // Exit when the custom background was applied successfully.
+      if (wait_for_custom_background_or_theme_ &&
+          theme_info_.custom_background_url == expected_background_url_ &&
+          theme_info_.custom_background_attribution_line_1 ==
+              expected_attribution_1_ &&
+          theme_info_.custom_background_attribution_line_2 ==
+              expected_attribution_2_ &&
+          theme_info_.custom_background_attribution_action_url ==
+              expected_attribution_action_url_) {
+        std::move(quit_closure_).Run();
+        quit_closure_.Reset();
+      }
+      // Exit when the theme was applied successfully.
+      else if (!wait_for_custom_background_or_theme_ &&
+               !theme_info_.using_default_theme == theme_installed_) {
+        std::move(quit_closure_).Run();
+        quit_closure_.Reset();
+      }
     }
   }
 
@@ -79,6 +115,11 @@
 
   ThemeBackgroundInfo theme_info_;
 
+  bool theme_installed_;
+  // When wait_for_custom_background_or_theme_ is true, we wait for the custom
+  // background to get applied. When wait_for_custom_background_or_theme_ is
+  // false, we wait for a theme gets applied
+  bool wait_for_custom_background_or_theme_ = true;
   std::string expected_background_url_;
   std::string expected_attribution_1_;
   std::string expected_attribution_2_;
@@ -130,7 +171,48 @@
   observer.WaitForThemeInfoUpdated("", "", "", "");
 }
 
-IN_PROC_BROWSER_TEST_F(LocalNTPCustomBackgroundsTest, SetandReset) {
+IN_PROC_BROWSER_TEST_F(LocalNTPCustomBackgroundsTest, AttributionSetAndReset) {
+  content::WebContents* active_tab =
+      local_ntp_test_utils::OpenNewTab(browser(), GURL("about:blank"));
+
+  TestThemeInfoObserver observer(
+      InstantServiceFactory::GetForProfile(browser()->profile()));
+
+  local_ntp_test_utils::NavigateToNTPAndWaitUntilLoaded(browser());
+
+  // Set a custom background attribution via the EmbeddedSearch API.
+  EXPECT_TRUE(content::ExecuteScript(active_tab,
+                                     "window.chrome.embeddedSearch.newTabPage."
+                                     "setBackgroundURLWithAttributions('https:/"
+                                     "/www.test.com/', 'attr1', 'attr2', "
+                                     "'https://www.attribution.com/')"));
+  observer.WaitForThemeInfoUpdated("https://www.test.com/", "attr1", "attr2",
+                                   "https://www.attribution.com/");
+
+  // Check that the custom background element has the correct attribution
+  // applied.
+  bool result = false;
+  EXPECT_TRUE(instant_test_utils::GetBoolFromJS(
+      active_tab,
+      "document.querySelector('.attr1').innerText === 'attr1' && "
+      "document.querySelector('.attr2').innerText === 'attr2'",
+      &result));
+  EXPECT_TRUE(result);
+
+  // Reset custom background via the EmbeddedSearch API.
+  EXPECT_TRUE(content::ExecuteScript(active_tab,
+                                     "window.chrome.embeddedSearch.newTabPage."
+                                     "setBackgroundURL('')"));
+  observer.WaitForThemeInfoUpdated("", "", "", "");
+
+  // Check that the custom background attribution was cleared.
+  EXPECT_TRUE(instant_test_utils::GetBoolFromJS(
+      active_tab, "$('custom-bg-attr').hasChildNodes()", &result));
+  EXPECT_FALSE(result);
+}
+
+IN_PROC_BROWSER_TEST_F(LocalNTPCustomBackgroundsTest,
+                       BackgroundImageSetandReset) {
   content::WebContents* active_tab =
       local_ntp_test_utils::OpenNewTab(browser(), GURL("about:blank"));
 
@@ -148,7 +230,7 @@
   observer.WaitForThemeInfoUpdated("chrome-search://local-ntp/background1.jpg",
                                    "", "", "");
 
-  // Check that the custom background element has the correct image with
+  // Check that the custom background element has the correct attribution with
   // the scrim applied.
   bool result = false;
   EXPECT_TRUE(instant_test_utils::GetBoolFromJS(
@@ -167,7 +249,96 @@
 
   // Check that the custom background was cleared.
   EXPECT_TRUE(instant_test_utils::GetBoolFromJS(
-      active_tab, "$('custom-bg').backgroundImage == ''", &result));
+      active_tab, "$('custom-bg').backgroundImage === undefined", &result));
+  EXPECT_TRUE(result);
+}
+
+class LocalNTPCustomBackgroundsThemeTest
+    : public extensions::ExtensionBrowserTest {
+ public:
+  LocalNTPCustomBackgroundsThemeTest() {
+    feature_list_.InitWithFeatures(
+        {features::kUseGoogleLocalNtp, features::kNtpBackgrounds}, {});
+  }
+
+ protected:
+  void InstallThemeAndVerify(const std::string& theme_dir,
+                             const std::string& theme_name) {
+    bool had_previous_theme =
+        !!ThemeServiceFactory::GetThemeForProfile(profile());
+
+    const base::FilePath theme_path = test_data_dir_.AppendASCII(theme_dir);
+    // Themes install asynchronously so we must check the number of enabled
+    // extensions after theme install completes.
+    size_t num_before = extensions::ExtensionRegistry::Get(profile())
+                            ->enabled_extensions()
+                            .size();
+    content::WindowedNotificationObserver theme_change_observer(
+        chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
+        content::Source<ThemeService>(
+            ThemeServiceFactory::GetForProfile(profile())));
+    ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(
+        theme_path, 1, extensions::ExtensionBrowserTest::browser()));
+    theme_change_observer.Wait();
+    size_t num_after = extensions::ExtensionRegistry::Get(profile())
+                           ->enabled_extensions()
+                           .size();
+    // If a theme was already installed, we're just swapping one for another, so
+    // no change in extension count.
+    int expected_change = had_previous_theme ? 0 : 1;
+    EXPECT_EQ(num_before + expected_change, num_after);
+
+    const extensions::Extension* new_theme =
+        ThemeServiceFactory::GetThemeForProfile(profile());
+    ASSERT_NE(nullptr, new_theme);
+    ASSERT_EQ(new_theme->name(), theme_name);
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(LocalNTPCustomBackgroundsThemeTest,
+                       RemoveAttributeAfterThemeApplied) {
+  content::WebContents* active_tab =
+      local_ntp_test_utils::OpenNewTab(browser(), GURL("about:blank"));
+
+  TestThemeInfoObserver observer(
+      InstantServiceFactory::GetForProfile(profile()));
+
+  local_ntp_test_utils::NavigateToNTPAndWaitUntilLoaded(browser());
+
+  // Set a custom background attribution via the EmbeddedSearch API.
+  EXPECT_TRUE(content::ExecuteScript(active_tab,
+                                     "window.chrome.embeddedSearch.newTabPage."
+                                     "setBackgroundURLWithAttributions('https:/"
+                                     "/www.test.com/', 'attr1', 'attr2', "
+                                     "'https://www.attribution.com/')"));
+  observer.WaitForThemeInfoUpdated("https://www.test.com/", "attr1", "attr2",
+                                   "https://www.attribution.com/");
+
+  // Check that the custom background element has the correct attribution
+  // applied.
+  bool result = false;
+  EXPECT_TRUE(instant_test_utils::GetBoolFromJS(
+      active_tab,
+      "document.querySelector('.attr1').innerText === 'attr1' && "
+      "document.querySelector('.attr2').innerText === 'attr2'",
+      &result));
+  EXPECT_TRUE(result);
+  // Apply a custom background still count as using default theme
+  EXPECT_TRUE(observer.IsUsingDefaultTheme());
+
+  // Switch to waiting for the theme to get applied.
+  observer.SwitchCheck();
+  ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme", "camo theme"));
+  observer.WaitForThemeApplied(true);
+  EXPECT_FALSE(observer.IsUsingDefaultTheme());
+
+  // Check that the custom background attribution is cleared after
+  // a theme was applied.
+  EXPECT_TRUE(instant_test_utils::GetBoolFromJS(
+      active_tab, "$('custom-bg-attr').hasChildNodes()", &result));
   EXPECT_FALSE(result);
 }
 
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
index 64f6393..1fe838ac 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
@@ -21,6 +21,15 @@
 #include "ui/base/theme_provider.h"
 #include "ui/gfx/canvas.h"
 
+namespace {
+FullscreenToolbarStyle GetUserPreferredToolbarStyle(
+    const PrefService* pref_service) {
+  return pref_service->GetBoolean(prefs::kShowFullscreenToolbar)
+             ? FullscreenToolbarStyle::TOOLBAR_PRESENT
+             : FullscreenToolbarStyle::TOOLBAR_HIDDEN;
+}
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // BrowserNonClientFrameViewMac, public:
 
@@ -30,8 +39,11 @@
     : BrowserNonClientFrameView(frame, browser_view) {
   fullscreen_toolbar_controller_.reset([[FullscreenToolbarControllerViews alloc]
       initWithBrowserView:browser_view]);
+  PrefService* pref_service = browser_view->GetProfile()->GetPrefs();
+  [fullscreen_toolbar_controller_
+      setToolbarStyle:GetUserPreferredToolbarStyle(pref_service)];
 
-  pref_registrar_.Init(browser_view->GetProfile()->GetPrefs());
+  pref_registrar_.Init(pref_service);
   pref_registrar_.Add(
       prefs::kShowFullscreenToolbar,
       base::BindRepeating(&BrowserNonClientFrameViewMac::UpdateFullscreenTopUI,
@@ -138,24 +150,24 @@
       !is_exiting_fullscreen) {
     new_style = FullscreenToolbarStyle::TOOLBAR_NONE;
   } else {
-    PrefService* prefs = browser_view()->GetProfile()->GetPrefs();
-    new_style = prefs->GetBoolean(prefs::kShowFullscreenToolbar)
-                    ? FullscreenToolbarStyle::TOOLBAR_PRESENT
-                    : FullscreenToolbarStyle::TOOLBAR_HIDDEN;
+    new_style =
+        GetUserPreferredToolbarStyle(browser_view()->GetProfile()->GetPrefs());
   }
   [fullscreen_toolbar_controller_ setToolbarStyle:new_style];
 
-  if (old_style != new_style) {
-    // Notify browser that top ui state has been changed so that we can update
-    // the bookmark bar state as well.
-    browser_view()->browser()->FullscreenTopUIStateChanged();
+  if (![fullscreen_toolbar_controller_ isInFullscreen] ||
+      old_style == new_style)
+    return;
 
-    // Re-layout if toolbar style changes in fullscreen mode.
-    if (frame()->IsFullscreen())
-      browser_view()->Layout();
+  // Notify browser that top ui state has been changed so that we can update
+  // the bookmark bar state as well.
+  browser_view()->browser()->FullscreenTopUIStateChanged();
 
-    [FullscreenToolbarController recordToolbarStyle:new_style];
-  }
+  // Re-layout if toolbar style changes in fullscreen mode.
+  if (frame()->IsFullscreen())
+    browser_view()->Layout();
+
+  [FullscreenToolbarController recordToolbarStyle:new_style];
 }
 
 bool BrowserNonClientFrameViewMac::ShouldHideTopUIForFullscreen() const {
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
index 44d40b3..a4d1a558 100644
--- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
+++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
@@ -411,8 +411,7 @@
   if (!is_animation_paused_) {
     // If there is no separator to show, then that means we want the text to
     // disappear after animating.
-    if (!ShouldShowSeparator())
-      label()->SetVisible(false);
+    ResetSlideAnimation(/*show_label=*/ShouldShowSeparator());
     parent()->Layout();
     parent()->SchedulePaint();
   }
@@ -563,9 +562,9 @@
   }
 }
 
-void IconLabelBubbleView::ResetSlideAnimation(bool show) {
-  label()->SetVisible(show);
-  slide_animation_.Reset(show);
+void IconLabelBubbleView::ResetSlideAnimation(bool show_label) {
+  label()->SetVisible(show_label);
+  slide_animation_.Reset(show_label);
 }
 
 void IconLabelBubbleView::PauseAnimation() {
diff --git a/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc b/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
index 2f271c8..1da36bc3 100644
--- a/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
@@ -641,7 +641,6 @@
     const std::string& validation_errors) {
   ResetEventWaiterForSequence(
       {DialogEvent::PROCESSING_SPINNER_HIDDEN, DialogEvent::SPEC_DONE_UPDATING,
-       DialogEvent::PROCESSING_SPINNER_HIDDEN, DialogEvent::SPEC_DONE_UPDATING,
        DialogEvent::PROCESSING_SPINNER_HIDDEN, DialogEvent::DIALOG_OPENED});
 
   ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(),
@@ -655,7 +654,6 @@
     const DialogEvent& dialog_event) {
   ResetEventWaiterForSequence(
       {DialogEvent::PROCESSING_SPINNER_HIDDEN, DialogEvent::SPEC_DONE_UPDATING,
-       DialogEvent::PROCESSING_SPINNER_HIDDEN, DialogEvent::SPEC_DONE_UPDATING,
        DialogEvent::PROCESSING_SPINNER_HIDDEN, DialogEvent::DIALOG_OPENED,
        dialog_event});
 
diff --git a/chrome/browser/ui/views/payments/profile_list_view_controller.cc b/chrome/browser/ui/views/payments/profile_list_view_controller.cc
index a5241ef2..68ffc96a 100644
--- a/chrome/browser/ui/views/payments/profile_list_view_controller.cc
+++ b/chrome/browser/ui/views/payments/profile_list_view_controller.cc
@@ -258,6 +258,8 @@
         // The error profile is known, refresh the view to display it correctly.
         PopulateList();
         UpdateContentView();
+        if (spec()->has_shipping_address_error())
+          ShowEditor(state()->selected_shipping_option_error_profile());
       }
     }
   }
diff --git a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc
index aa9533e..74e26cde 100644
--- a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc
+++ b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc
@@ -1360,4 +1360,30 @@
                                                 autofill::ADDRESS_HOME_CITY));
 }
 
+IN_PROC_BROWSER_TEST_F(PaymentRequestShippingAddressEditorTest,
+                       UpdateWithShippingAddressErrors) {
+  NavigateTo("/payment_request_dynamic_shipping_test.html");
+
+  autofill::AutofillProfile address = autofill::test::GetFullProfile();
+  address.SetRawInfo(autofill::ADDRESS_HOME_COUNTRY, base::UTF8ToUTF16("KR"));
+  AddAutofillProfile(address);
+
+  InvokePaymentRequestUI();
+  OpenShippingAddressSectionScreen();
+
+  ResetEventWaiter(DialogEvent::SHIPPING_ADDRESS_EDITOR_OPENED);
+  ResetEventWaiterForSequence({DialogEvent::PROCESSING_SPINNER_SHOWN,
+                               DialogEvent::PROCESSING_SPINNER_HIDDEN,
+                               DialogEvent::SPEC_DONE_UPDATING,
+                               DialogEvent::SHIPPING_ADDRESS_EDITOR_OPENED});
+  ClickOnChildInListViewAndWait(/*child_index=*/0, /*num_children=*/1,
+                                DialogViewID::SHIPPING_ADDRESS_SHEET_LIST_VIEW);
+  WaitForObservedEvent();
+
+  EXPECT_EQ(base::ASCIIToUTF16("ADDRESS LINE ERROR"),
+            GetErrorLabelForType(autofill::ADDRESS_HOME_STREET_ADDRESS));
+  EXPECT_EQ(base::ASCIIToUTF16("CITY ERROR"),
+            GetErrorLabelForType(autofill::ADDRESS_HOME_CITY));
+}
+
 }  // namespace payments
diff --git a/chrome/browser/ui/webui/chromeos/login/discover/discover_window_manager.cc b/chrome/browser/ui/webui/chromeos/login/discover/discover_window_manager.cc
index 8f8fcbf..c883e74 100644
--- a/chrome/browser/ui/webui/chromeos/login/discover/discover_window_manager.cc
+++ b/chrome/browser/ui/webui/chromeos/login/discover/discover_window_manager.cc
@@ -4,7 +4,9 @@
 
 #include "chrome/browser/ui/webui/chromeos/login/discover/discover_window_manager.h"
 
+#include "ash/public/cpp/resources/grit/ash_public_unscaled_resources.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/ash/window_properties.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/browser_navigator_params.h"
@@ -79,6 +81,9 @@
       .first->second = params.browser->session_id();
   DCHECK(params.browser->is_trusted_source());
 
+  auto* window = params.browser->window()->GetNativeWindow();
+  window->SetProperty(kOverrideWindowIconResourceIdKey, IDR_DISCOVER_APP_192);
+
   for (DiscoverWindowManagerObserver& observer : observers_)
     observer.OnNewDiscoverWindow(params.browser);
 }
diff --git a/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc b/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc
index ac6d62a..36ef94d 100644
--- a/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/logging.h"
+#include "chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.h"
 #include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h"
 #include "chromeos/components/proximity_auth/logging/logging.h"
 #include "content/public/browser/web_ui.h"
@@ -35,8 +36,11 @@
 }  // namespace
 
 MultideviceHandler::MultideviceHandler(
-    multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client)
+    multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
+    std::unique_ptr<multidevice_setup::AndroidSmsAppHelperDelegate>
+        android_sms_app_helper)
     : multidevice_setup_client_(multidevice_setup_client),
+      android_sms_app_helper_(std::move(android_sms_app_helper)),
       multidevice_setup_observer_(this),
       callback_weak_ptr_factory_(this) {}
 
@@ -63,6 +67,10 @@
       "retryPendingHostSetup",
       base::BindRepeating(&MultideviceHandler::HandleRetryPendingHostSetup,
                           base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
+      "setUpAndroidSms",
+      base::BindRepeating(&MultideviceHandler::HandleSetUpAndroidSms,
+                          base::Unretained(this)));
 }
 
 void MultideviceHandler::OnJavascriptAllowed() {
@@ -158,6 +166,12 @@
       base::BindOnce(&OnRetrySetHostNowResult));
 }
 
+void MultideviceHandler::HandleSetUpAndroidSms(const base::ListValue* args) {
+  PA_LOG(WARNING) << "HandlingSetupSms";
+  DCHECK(args->empty());
+  android_sms_app_helper_->LaunchAndroidSmsApp();
+}
+
 void MultideviceHandler::OnSetFeatureStateEnabledResult(
     const std::string& js_callback_id,
     bool success) {
diff --git a/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h b/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h
index 3efb6584..cc5e9037e 100644
--- a/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h
+++ b/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h
@@ -15,6 +15,10 @@
 
 namespace chromeos {
 
+namespace multidevice_setup {
+class AndroidSmsAppHelperDelegate;
+}  // namespace multidevice_setup
+
 namespace settings {
 
 // Chrome "Multidevice" (a.k.a. "Connected Devices") settings page UI handler.
@@ -23,7 +27,9 @@
       public multidevice_setup::MultiDeviceSetupClient::Observer {
  public:
   explicit MultideviceHandler(
-      multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client);
+      multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
+      std::unique_ptr<multidevice_setup::AndroidSmsAppHelperDelegate>
+          android_sms_app_helper);
   ~MultideviceHandler() override;
 
  protected:
@@ -52,6 +58,7 @@
   void HandleSetFeatureEnabledState(const base::ListValue* args);
   void HandleRemoveHostDevice(const base::ListValue* args);
   void HandleRetryPendingHostSetup(const base::ListValue* args);
+  void HandleSetUpAndroidSms(const base::ListValue* args);
 
   void OnSetFeatureStateEnabledResult(const std::string& js_callback_id,
                                       bool success);
@@ -62,6 +69,8 @@
   std::unique_ptr<base::DictionaryValue> GeneratePageContentDataDictionary();
 
   multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client_;
+  std::unique_ptr<multidevice_setup::AndroidSmsAppHelperDelegate>
+      android_sms_app_helper_;
 
   ScopedObserver<multidevice_setup::MultiDeviceSetupClient,
                  multidevice_setup::MultiDeviceSetupClient::Observer>
diff --git a/chrome/browser/ui/webui/settings/chromeos/multidevice_handler_unittest.cc b/chrome/browser/ui/webui/settings/chromeos/multidevice_handler_unittest.cc
index 61ef44a..658795d 100644
--- a/chrome/browser/ui/webui/settings/chromeos/multidevice_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/multidevice_handler_unittest.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/macros.h"
+#include "chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.h"
 #include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
 #include "components/cryptauth/remote_device_test_util.h"
 #include "content/public/test/test_web_ui.h"
@@ -21,8 +22,11 @@
 class TestMultideviceHandler : public MultideviceHandler {
  public:
   TestMultideviceHandler(
-      multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client)
-      : MultideviceHandler(multidevice_setup_client) {}
+      multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
+      std::unique_ptr<multidevice_setup::AndroidSmsAppHelperDelegate>
+          android_sms_app_helper)
+      : MultideviceHandler(multidevice_setup_client,
+                           std::move(android_sms_app_helper)) {}
   ~TestMultideviceHandler() override = default;
 
   // Make public for testing.
@@ -107,9 +111,14 @@
 
     fake_multidevice_setup_client_ =
         std::make_unique<multidevice_setup::FakeMultiDeviceSetupClient>();
+    auto fake_android_sms_app_helper_delegate =
+        std::make_unique<multidevice_setup::FakeAndroidSmsAppHelperDelegate>();
+    fake_android_sms_app_helper_delegate_ =
+        fake_android_sms_app_helper_delegate.get();
 
     handler_ = std::make_unique<TestMultideviceHandler>(
-        fake_multidevice_setup_client_.get());
+        fake_multidevice_setup_client_.get(),
+        std::move(fake_android_sms_app_helper_delegate));
     handler_->set_web_ui(test_web_ui_.get());
     handler_->RegisterMessages();
     handler_->AllowJavascript();
@@ -184,6 +193,11 @@
         success);
   }
 
+  void CallSetUpAndroidSms() {
+    base::ListValue empty_args;
+    test_web_ui()->HandleReceivedMessage("setUpAndroidSms", &empty_args);
+  }
+
   void CallSetFeatureEnabledState(multidevice_setup::mojom::Feature feature,
                                   bool enabled,
                                   const base::Optional<std::string>& auth_token,
@@ -225,6 +239,11 @@
     return fake_multidevice_setup_client_.get();
   }
 
+  multidevice_setup::FakeAndroidSmsAppHelperDelegate*
+  fake_android_sms_app_helper_delegate() {
+    return fake_android_sms_app_helper_delegate_;
+  }
+
   const cryptauth::RemoteDeviceRef test_device_;
 
  private:
@@ -244,6 +263,8 @@
       host_status_with_device_;
   multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap
       feature_states_map_;
+  multidevice_setup::FakeAndroidSmsAppHelperDelegate*
+      fake_android_sms_app_helper_delegate_;
 
   DISALLOW_COPY_AND_ASSIGN(MultideviceHandlerTest);
 };
@@ -280,6 +301,12 @@
   CallRetryPendingHostSetup(false /* success */);
 }
 
+TEST_F(MultideviceHandlerTest, SetUpAndroidSms) {
+  EXPECT_FALSE(fake_android_sms_app_helper_delegate()->HasLaunchedApp());
+  CallSetUpAndroidSms();
+  EXPECT_TRUE(fake_android_sms_app_helper_delegate()->HasLaunchedApp());
+}
+
 TEST_F(MultideviceHandlerTest, SetFeatureEnabledState) {
   CallSetFeatureEnabledState(
       multidevice_setup::mojom::Feature::kBetterTogetherSuite,
diff --git a/chrome/browser/ui/webui/settings/md_settings_ui.cc b/chrome/browser/ui/webui/settings/md_settings_ui.cc
index 368ba57..fa6dd8d8 100644
--- a/chrome/browser/ui/webui/settings/md_settings_ui.cc
+++ b/chrome/browser/ui/webui/settings/md_settings_ui.cc
@@ -77,6 +77,7 @@
 #include "chrome/browser/chromeos/crostini/crostini_util.h"
 #include "chrome/browser/chromeos/login/demo_mode/demo_session.h"
 #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h"
+#include "chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.h"
 #include "chrome/browser/chromeos/multidevice_setup/multidevice_setup_client_factory.h"
 #include "chrome/browser/signin/account_tracker_service_factory.h"
 #include "chrome/browser/ui/webui/settings/chromeos/accessibility_handler.h"
@@ -226,7 +227,10 @@
     AddSettingsPageUIHandler(
         std::make_unique<chromeos::settings::MultideviceHandler>(
             chromeos::multidevice_setup::MultiDeviceSetupClientFactory::
-                GetForProfile(profile)));
+                GetForProfile(profile),
+            std::make_unique<
+                chromeos::multidevice_setup::AndroidSmsAppHelperDelegateImpl>(
+                profile)));
   }
   AddSettingsPageUIHandler(
       std::make_unique<chromeos::settings::PointerHandler>());
diff --git a/chrome/browser/ui/webui/welcome_ui.cc b/chrome/browser/ui/webui/welcome_ui.cc
index 1a7152b..b776636 100644
--- a/chrome/browser/ui/webui/welcome_ui.cc
+++ b/chrome/browser/ui/webui/welcome_ui.cc
@@ -130,7 +130,7 @@
             profile, ServiceAccessType::EXPLICIT_ACCESS),
         BookmarkModelFactory::GetForBrowserContext(browser_context)));
 
-    nux::EmailHandler::AddSources(html_source);
+    nux::EmailHandler::AddSources(html_source, profile->GetPrefs());
   }
 
   if (base::FeatureList::IsEnabled(nux::kNuxGoogleAppsFeature)) {
diff --git a/chrome/browser/vr/BUILD.gn b/chrome/browser/vr/BUILD.gn
index edcf5ac..bd65441 100644
--- a/chrome/browser/vr/BUILD.gn
+++ b/chrome/browser/vr/BUILD.gn
@@ -213,6 +213,7 @@
     "sample_queue.cc",
     "sample_queue.h",
     "scheduler_delegate.h",
+    "scheduler_render_loop_interface.h",
     "service/browser_xr_runtime.cc",
     "service/browser_xr_runtime.h",
     "service/isolated_device_provider.cc",
@@ -278,8 +279,8 @@
     "assets_loader.cc",
     "assets_loader.h",
     "browser_ui_interface.h",
-    "compositor_ui_interface.h",
     "exit_vr_prompt_choice.h",
+    "fov_rectangle.h",
     "gl_texture_location.h",
     "input_event.cc",
     "input_event.h",
@@ -314,6 +315,7 @@
     "pose_util.cc",
     "pose_util.h",
     "render_info.h",
+    "scheduler_ui_interface.h",
     "speech_recognizer.cc",
     "speech_recognizer.h",
     "text_edit_action.cc",
diff --git a/chrome/browser/vr/compositor_delegate.h b/chrome/browser/vr/compositor_delegate.h
index fedc8eb..21e32e1 100644
--- a/chrome/browser/vr/compositor_delegate.h
+++ b/chrome/browser/vr/compositor_delegate.h
@@ -6,13 +6,12 @@
 #define CHROME_BROWSER_VR_COMPOSITOR_DELEGATE_H_
 
 #include "base/callback.h"
-#include "chrome/browser/vr/compositor_ui_interface.h"
+#include "chrome/browser/vr/fov_rectangle.h"
 #include "chrome/browser/vr/gl_texture_location.h"
 #include "chrome/browser/vr/vr_export.h"
-#include "device/vr/public/mojom/isolated_xr_service.mojom.h"
-#include "device/vr/public/mojom/vr_service.mojom.h"
 
 namespace gfx {
+class Size;
 class Transform;
 }
 
@@ -24,16 +23,24 @@
 
 struct RenderInfo;
 
+// The CompositorDelegate manages surfaces, buffers and viewports, preparing
+// them for drawing browser UI. It provides projection and view matrices for the
+// viewports.
 class VR_EXPORT CompositorDelegate {
  public:
   using Transform = float[16];
   enum FrameType { kUiFrame, kWebXrFrame };
   using SkiaContextCallback = base::OnceCallback<void()>;
+  using TexturesInitializedCallback = base::OnceCallback<
+      void(GlTextureLocation, unsigned int, unsigned int, unsigned int)>;
   virtual ~CompositorDelegate() {}
 
+  virtual void OnResume() = 0;
+
   virtual FovRectangles GetRecommendedFovs() = 0;
   virtual float GetZNear() = 0;
-  virtual RenderInfo GetRenderInfo(FrameType frame_type) = 0;
+  virtual RenderInfo GetRenderInfo(FrameType frame_type,
+                                   const gfx::Transform& head_pose) = 0;
   virtual RenderInfo GetOptimizedRenderInfoForFovs(
       const FovRectangles& fovs) = 0;
   virtual void InitializeBuffers() = 0;
@@ -51,16 +58,8 @@
   virtual void GetContentQuadDrawParams(Transform* uv_transform,
                                         float* border_x,
                                         float* border_y) = 0;
-  virtual void SubmitFrame(FrameType frame_type) = 0;
-
-  virtual void SetUiInterface(CompositorUiInterface* ui) = 0;
-  virtual void SetShowingVrDialog(bool showing) = 0;
   virtual int GetContentBufferWidth() = 0;
 
-  virtual void ConnectPresentingService(
-      device::mojom::VRDisplayInfoPtr display_info,
-      device::mojom::XRRuntimeSessionOptionsPtr options) = 0;
-
   // These methods return true when succeeded.
   virtual bool Initialize(const scoped_refptr<gl::GLSurface>& surface) = 0;
   virtual bool RunInSkiaContext(SkiaContextCallback callback) = 0;
diff --git a/chrome/browser/vr/compositor_ui_interface.h b/chrome/browser/vr/compositor_ui_interface.h
deleted file mode 100644
index 9151c56..0000000
--- a/chrome/browser/vr/compositor_ui_interface.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_VR_COMPOSITOR_UI_INTERFACE_H_
-#define CHROME_BROWSER_VR_COMPOSITOR_UI_INTERFACE_H_
-
-#include <utility>
-
-#include "chrome/browser/vr/gl_texture_location.h"
-#include "chrome/browser/vr/vr_export.h"
-
-namespace vr {
-
-struct FovRectangle {
-  float left;
-  float right;
-  float bottom;
-  float top;
-};
-
-using FovRectangles = std::pair<FovRectangle, FovRectangle>;
-
-class VR_EXPORT CompositorUiInterface {
- public:
-  virtual ~CompositorUiInterface() {}
-
-  virtual void OnGlInitialized(unsigned int content_texture_id,
-                               GlTextureLocation content_location,
-                               unsigned int content_overlay_texture_id,
-                               GlTextureLocation content_overlay_location,
-                               unsigned int ui_texture_id) = 0;
-
-  virtual void OnWebXrFrameAvailable() = 0;
-  virtual void OnWebXrTimedOut() = 0;
-  virtual void OnWebXrTimeoutImminent() = 0;
-};
-
-}  // namespace vr
-
-#endif  // CHROME_BROWSER_VR_COMPOSITOR_UI_INTERFACE_H_
diff --git a/chrome/browser/vr/fov_rectangle.h b/chrome/browser/vr/fov_rectangle.h
new file mode 100644
index 0000000..39f2a5ab
--- /dev/null
+++ b/chrome/browser/vr/fov_rectangle.h
@@ -0,0 +1,26 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_VR_FOV_RECTANGLE_H_
+#define CHROME_BROWSER_VR_FOV_RECTANGLE_H_
+
+#include <utility>
+
+#include "chrome/browser/vr/gl_texture_location.h"
+#include "chrome/browser/vr/vr_export.h"
+
+namespace vr {
+
+struct FovRectangle {
+  float left;
+  float right;
+  float bottom;
+  float top;
+};
+
+using FovRectangles = std::pair<FovRectangle, FovRectangle>;
+
+}  // namespace vr
+
+#endif  // CHROME_BROWSER_VR_FOV_RECTANGLE_H_
diff --git a/chrome/browser/vr/render_loop.cc b/chrome/browser/vr/render_loop.cc
index b6861660..249fce99f 100644
--- a/chrome/browser/vr/render_loop.cc
+++ b/chrome/browser/vr/render_loop.cc
@@ -23,28 +23,37 @@
 namespace vr {
 
 RenderLoop::RenderLoop(std::unique_ptr<UiInterface> ui,
+                       std::unique_ptr<SchedulerDelegate> scheduler_delegate,
                        std::unique_ptr<CompositorDelegate> compositor_delegate,
-                       SchedulerDelegate* scheduler_delegate,
                        std::unique_ptr<ControllerDelegate> controller_delegate,
                        RenderLoopBrowserInterface* browser,
                        size_t sliding_time_size)
     : ui_(std::move(ui)),
+      scheduler_delegate_(std::move(scheduler_delegate)),
       compositor_delegate_(std::move(compositor_delegate)),
-      scheduler_delegate_(scheduler_delegate),
       controller_delegate_(std::move(controller_delegate)),
       browser_(browser),
       ui_processing_time_(sliding_time_size),
       ui_controller_update_time_(sliding_time_size),
       weak_ptr_factory_(this) {
-  compositor_delegate_->SetUiInterface(ui_.get());
+  scheduler_delegate_->SetRenderLoop(this);
 }
 
 RenderLoop::~RenderLoop() = default;
 
+void RenderLoop::DrawBrowserFrame(base::TimeTicks current_time) {
+  Draw(CompositorDelegate::kUiFrame, current_time);
+}
+
+void RenderLoop::DrawWebXrFrame(base::TimeTicks current_time) {
+  Draw(CompositorDelegate::kWebXrFrame, current_time);
+}
+
 void RenderLoop::Draw(CompositorDelegate::FrameType frame_type,
                       base::TimeTicks current_time) {
   TRACE_EVENT1("gpu", __func__, "frame_type", frame_type);
-  const auto& render_info = compositor_delegate_->GetRenderInfo(frame_type);
+  const auto& render_info = compositor_delegate_->GetRenderInfo(
+      frame_type, scheduler_delegate_->GetHeadPose());
   UpdateUi(render_info, current_time, frame_type);
   ui_->OnProjMatrixChanged(render_info.left_eye_model.proj_matrix);
   bool use_quad_layer = ui_->IsContentVisibleAndOpaque() &&
@@ -67,7 +76,6 @@
                  ui_processing_time_.GetAverage().InMicroseconds(),
                  "controller",
                  ui_controller_update_time_.GetAverage().InMicroseconds());
-  compositor_delegate_->SubmitFrame(frame_type);
 }
 
 void RenderLoop::DrawWebXr() {
@@ -150,12 +158,13 @@
 void RenderLoop::EnableAlertDialog(PlatformInputHandler* input_handler,
                                    float width,
                                    float height) {
-  compositor_delegate_->SetShowingVrDialog(true);
+  scheduler_delegate_->SetShowingVrDialog(true);
   vr_dialog_input_delegate_ =
       std::make_unique<PlatformUiInputDelegate>(input_handler);
   vr_dialog_input_delegate_->SetSize(width, height);
-  auto content_width = compositor_delegate_->GetContentBufferWidth();
-  if (content_width) {
+  if (ui_->IsContentVisibleAndOpaque()) {
+    auto content_width = compositor_delegate_->GetContentBufferWidth();
+    DCHECK(content_width);
     ui_->SetContentOverlayAlertDialogEnabled(
         true, vr_dialog_input_delegate_.get(), width / content_width,
         height / content_width);
@@ -168,7 +177,7 @@
 void RenderLoop::DisableAlertDialog() {
   ui_->SetAlertDialogEnabled(false, nullptr, 0, 0);
   vr_dialog_input_delegate_ = nullptr;
-  compositor_delegate_->SetShowingVrDialog(false);
+  scheduler_delegate_->SetShowingVrDialog(false);
 }
 
 void RenderLoop::SetAlertDialogSize(float width, float height) {
@@ -178,8 +187,9 @@
   // ratio matters. But, if they are floating, its size should be relative to
   // the contents. During a WebXR presentation, the contents are not present
   // but, in this case, the dialogs are never floating.
-  auto content_width = compositor_delegate_->GetContentBufferWidth();
-  if (content_width) {
+  if (ui_->IsContentVisibleAndOpaque()) {
+    auto content_width = compositor_delegate_->GetContentBufferWidth();
+    DCHECK(content_width);
     ui_->SetContentOverlayAlertDialogEnabled(
         true, vr_dialog_input_delegate_.get(), width / content_width,
         height / content_width);
@@ -266,14 +276,14 @@
   ui_processing_time_.AddSample(scene_time - controller_time);
 }
 
-void RenderLoop::ProcessControllerInputForWebXr(const gfx::Transform& head_pose,
-                                                base::TimeTicks current_time) {
+void RenderLoop::ProcessControllerInputForWebXr(base::TimeTicks current_time) {
   TRACE_EVENT0("gpu", __func__);
   DCHECK(controller_delegate_);
   DCHECK(ui_);
   base::TimeTicks timing_start = base::TimeTicks::Now();
 
-  controller_delegate_->UpdateController(head_pose, current_time, true);
+  controller_delegate_->UpdateController(scheduler_delegate_->GetHeadPose(),
+                                         current_time, true);
   auto input_event_list = controller_delegate_->GetGestures(current_time);
   ui_->HandleMenuButtonEvents(&input_event_list);
 
@@ -286,8 +296,8 @@
 void RenderLoop::ConnectPresentingService(
     device::mojom::VRDisplayInfoPtr display_info,
     device::mojom::XRRuntimeSessionOptionsPtr options) {
-  compositor_delegate_->ConnectPresentingService(std::move(display_info),
-                                                 std::move(options));
+  scheduler_delegate_->ConnectPresentingService(std::move(display_info),
+                                                std::move(options));
 }
 
 base::TimeDelta RenderLoop::ProcessControllerInput(
diff --git a/chrome/browser/vr/render_loop.h b/chrome/browser/vr/render_loop.h
index 95f4acb..5b99f70 100644
--- a/chrome/browser/vr/render_loop.h
+++ b/chrome/browser/vr/render_loop.h
@@ -11,8 +11,11 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/vr/compositor_delegate.h"
 #include "chrome/browser/vr/gl_texture_location.h"
+#include "chrome/browser/vr/scheduler_render_loop_interface.h"
 #include "chrome/browser/vr/sliding_average.h"
 #include "chrome/browser/vr/vr_export.h"
+#include "device/vr/public/mojom/isolated_xr_service.mojom.h"
+#include "device/vr/public/mojom/vr_service.mojom.h"
 
 namespace base {
 class TimeDelta;
@@ -34,23 +37,19 @@
 struct UiTestActivityExpectation;
 struct UiTestState;
 
-// This abstract class handles all input/output activities during a frame.
+// The RenderLoop handles all input/output activities during a frame.
 // This includes head movement, controller movement and input, audio output and
 // rendering of the frame.
-// TODO(acondor): Move more functionality cross platform functionality from
-// VrShellGl and make this class concrete (http://crbug.com/767282).
-class VR_EXPORT RenderLoop {
+// TODO(acondor): Rename to BrowserRenderer.
+class VR_EXPORT RenderLoop : public SchedulerRenderLoopInterface {
  public:
   RenderLoop(std::unique_ptr<UiInterface> ui,
+             std::unique_ptr<SchedulerDelegate> scheduler_delegate,
              std::unique_ptr<CompositorDelegate> compositor_delegate,
-             SchedulerDelegate* scheduler_delegate,
              std::unique_ptr<ControllerDelegate> controller_delegate,
              RenderLoopBrowserInterface* browser,
              size_t sliding_time_size);
-  virtual ~RenderLoop();
-
-  void Draw(CompositorDelegate::FrameType frame_type,
-            base::TimeTicks current_time);
+  ~RenderLoop() override;
 
   void OnPause();
   void OnResume();
@@ -80,13 +79,19 @@
   void SetUiExpectingActivityForTesting(
       UiTestActivityExpectation ui_expectation);
   void AcceptDoffPromptForTesting();
-  void ProcessControllerInputForWebXr(const gfx::Transform& head_pose,
-                                      base::TimeTicks current_time);
   void ConnectPresentingService(
       device::mojom::VRDisplayInfoPtr display_info,
       device::mojom::XRRuntimeSessionOptionsPtr options);
 
+  // SchedulerRenderLoopInterface implementation.
+  void DrawBrowserFrame(base::TimeTicks current_time) override;
+  void DrawWebXrFrame(base::TimeTicks current_time) override;
+  void ProcessControllerInputForWebXr(base::TimeTicks current_time) override;
+
  private:
+  void Draw(CompositorDelegate::FrameType frame_type,
+            base::TimeTicks current_time);
+
   // Position, hide and/or show UI elements, process input and update textures.
   // Returns true if the scene changed.
   void UpdateUi(const RenderInfo& render_info,
@@ -104,8 +109,8 @@
   void ReportUiActivityResultForTesting(VrUiTestActivityResult result);
 
   std::unique_ptr<UiInterface> ui_;
+  std::unique_ptr<SchedulerDelegate> scheduler_delegate_;
   std::unique_ptr<CompositorDelegate> compositor_delegate_;
-  SchedulerDelegate* scheduler_delegate_;
   std::unique_ptr<ControllerDelegate> controller_delegate_;
   std::unique_ptr<ControllerDelegate> controller_delegate_for_testing_;
   bool using_controller_delegate_for_testing_ = false;
diff --git a/chrome/browser/vr/scheduler_delegate.h b/chrome/browser/vr/scheduler_delegate.h
index 969af4e..6d1f221 100644
--- a/chrome/browser/vr/scheduler_delegate.h
+++ b/chrome/browser/vr/scheduler_delegate.h
@@ -8,6 +8,7 @@
 #include "base/callback.h"
 #include "base/time/time.h"
 #include "chrome/browser/vr/vr_export.h"
+#include "device/vr/public/mojom/isolated_xr_service.mojom.h"
 #include "device/vr/public/mojom/vr_service.mojom.h"
 
 namespace gfx {
@@ -16,24 +17,30 @@
 
 namespace vr {
 
+class SchedulerRenderLoopInterface;
+
+// The SchedulerDelegate is responsible for starting the draw calls of the
+// RenderLoop, given different signals, such as WebXR frames submitted or VSync
+// events. It also provides head poses, obtained from the underlaying platform.
+// TODO(acondor): Move head pose logic to the ControllerDelegate.
 class VR_EXPORT SchedulerDelegate {
  public:
-  using DrawCallback = base::RepeatingCallback<void(base::TimeTicks)>;
-  using WebXrInputCallback =
-      base::RepeatingCallback<void(const gfx::Transform&, base::TimeTicks)>;
   virtual ~SchedulerDelegate() {}
 
   virtual void OnPause() = 0;
   virtual void OnResume() = 0;
 
+  virtual gfx::Transform GetHeadPose() = 0;
   virtual void OnExitPresent() = 0;
   virtual void OnTriggerEvent(bool pressed) = 0;
   virtual void SetWebXrMode(bool enabled) = 0;
-  virtual void SetDrawWebXrCallback(DrawCallback callback) = 0;
-  virtual void SetDrawBrowserCallback(DrawCallback callback) = 0;
-  virtual void SetWebXrInputCallback(WebXrInputCallback callback) = 0;
+  virtual void SetShowingVrDialog(bool showing) = 0;
+  virtual void SetRenderLoop(SchedulerRenderLoopInterface* render_loop) = 0;
   virtual void AddInputSourceState(
       device::mojom::XRInputSourceStatePtr state) = 0;
+  virtual void ConnectPresentingService(
+      device::mojom::VRDisplayInfoPtr display_info,
+      device::mojom::XRRuntimeSessionOptionsPtr transport_options) = 0;
 };
 
 }  // namespace vr
diff --git a/chrome/browser/vr/scheduler_render_loop_interface.h b/chrome/browser/vr/scheduler_render_loop_interface.h
new file mode 100644
index 0000000..0121fdd
--- /dev/null
+++ b/chrome/browser/vr/scheduler_render_loop_interface.h
@@ -0,0 +1,24 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_VR_SCHEDULER_RENDER_LOOP_INTERFACE_H_
+#define CHROME_BROWSER_VR_SCHEDULER_RENDER_LOOP_INTERFACE_H_
+
+namespace base {
+class TimeTicks;
+}
+
+namespace vr {
+
+class SchedulerRenderLoopInterface {
+ public:
+  virtual ~SchedulerRenderLoopInterface() {}
+  virtual void DrawBrowserFrame(base::TimeTicks current_time) = 0;
+  virtual void DrawWebXrFrame(base::TimeTicks current_time) = 0;
+  virtual void ProcessControllerInputForWebXr(base::TimeTicks current_time) = 0;
+};
+
+}  // namespace vr
+
+#endif  // CHROME_BROWSER_VR_SCHEDULER_RENDER_LOOP_INTERFACE_H_
diff --git a/chrome/browser/vr/scheduler_ui_interface.h b/chrome/browser/vr/scheduler_ui_interface.h
new file mode 100644
index 0000000..c8407f6
--- /dev/null
+++ b/chrome/browser/vr/scheduler_ui_interface.h
@@ -0,0 +1,26 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_VR_SCHEDULER_UI_INTERFACE_H_
+#define CHROME_BROWSER_VR_SCHEDULER_UI_INTERFACE_H_
+
+#include <utility>
+
+#include "chrome/browser/vr/gl_texture_location.h"
+#include "chrome/browser/vr/vr_export.h"
+
+namespace vr {
+
+class VR_EXPORT SchedulerUiInterface {
+ public:
+  virtual ~SchedulerUiInterface() {}
+
+  virtual void OnWebXrFrameAvailable() = 0;
+  virtual void OnWebXrTimedOut() = 0;
+  virtual void OnWebXrTimeoutImminent() = 0;
+};
+
+}  // namespace vr
+
+#endif  // CHROME_BROWSER_VR_SCHEDULER_UI_INTERFACE_H_
diff --git a/chrome/browser/vr/test/ui_pixel_test.cc b/chrome/browser/vr/test/ui_pixel_test.cc
index 884214d..2c4f147 100644
--- a/chrome/browser/vr/test/ui_pixel_test.cc
+++ b/chrome/browser/vr/test/ui_pixel_test.cc
@@ -56,8 +56,8 @@
                          const ToolbarState& toolbar_state) {
   ui_ = std::make_unique<Ui>(browser_.get(), nullptr, nullptr, nullptr, nullptr,
                              ui_initial_state);
-  ui_->OnGlInitialized(content_texture_, kGlTextureLocationLocal,
-                       content_overlay_texture_, kGlTextureLocationLocal, 0);
+  ui_->OnGlInitialized(kGlTextureLocationLocal, content_texture_,
+                       content_overlay_texture_, 0);
   ui_->GetBrowserUiWeakPtr()->SetToolbarState(toolbar_state);
 }
 
diff --git a/chrome/browser/vr/testapp/gl_renderer.cc b/chrome/browser/vr/testapp/gl_renderer.cc
index 687e21b..e32982d 100644
--- a/chrome/browser/vr/testapp/gl_renderer.cc
+++ b/chrome/browser/vr/testapp/gl_renderer.cc
@@ -42,13 +42,15 @@
 }
 
 // TODO(acondor): Provide actual implementation for the methods.
+void GlRenderer::OnResume() {}
 FovRectangles GlRenderer::GetRecommendedFovs() {
   return {{}, {}};
 }
 float GlRenderer::GetZNear() {
   return 0;
 }
-RenderInfo GlRenderer::GetRenderInfo(FrameType frame_type) {
+RenderInfo GlRenderer::GetRenderInfo(FrameType frame_type,
+                                     const gfx::Transform& head_pose) {
   return {};
 }
 RenderInfo GlRenderer::GetOptimizedRenderInfoForFovs(
@@ -72,15 +74,9 @@
 void GlRenderer::GetContentQuadDrawParams(Transform* uv_transform,
                                           float* border_x,
                                           float* border_y) {}
-void GlRenderer::SubmitFrame(FrameType frame_type) {}
-void GlRenderer::SetUiInterface(CompositorUiInterface* ui) {}
-void GlRenderer::SetShowingVrDialog(bool showing) {}
 int GlRenderer::GetContentBufferWidth() {
   return 0;
 }
-void GlRenderer::ConnectPresentingService(
-    device::mojom::VRDisplayInfoPtr display_info,
-    device::mojom::XRRuntimeSessionOptionsPtr options) {}
 
 void GlRenderer::RenderFrame() {
   // Checking and clearing GL errors can be expensive, but we can afford to do
diff --git a/chrome/browser/vr/testapp/gl_renderer.h b/chrome/browser/vr/testapp/gl_renderer.h
index f8a7001..7b1b9ba 100644
--- a/chrome/browser/vr/testapp/gl_renderer.h
+++ b/chrome/browser/vr/testapp/gl_renderer.h
@@ -27,9 +27,11 @@
 
   // CompositorDelegate implementation.
   bool Initialize(const scoped_refptr<gl::GLSurface>& surface) override;
+  void OnResume() override;
   FovRectangles GetRecommendedFovs() override;
   float GetZNear() override;
-  RenderInfo GetRenderInfo(FrameType frame_type) override;
+  RenderInfo GetRenderInfo(FrameType frame_type,
+                           const gfx::Transform& head_pose) override;
   RenderInfo GetOptimizedRenderInfoForFovs(const FovRectangles& fovs) override;
   void InitializeBuffers() override;
   void PrepareBufferForWebXr() override;
@@ -46,13 +48,7 @@
   void GetContentQuadDrawParams(Transform* uv_transform,
                                 float* border_x,
                                 float* border_y) override;
-  void SubmitFrame(FrameType frame_type) override;
-  void SetUiInterface(CompositorUiInterface* ui) override;
-  void SetShowingVrDialog(bool showing) override;
   int GetContentBufferWidth() override;
-  void ConnectPresentingService(
-      device::mojom::VRDisplayInfoPtr display_info,
-      device::mojom::XRRuntimeSessionOptionsPtr options) override;
 
   void RenderFrame();
   void PostRenderFrameTask();
diff --git a/chrome/browser/vr/testapp/vr_test_context.cc b/chrome/browser/vr/testapp/vr_test_context.cc
index 660d2c08..8704a16 100644
--- a/chrome/browser/vr/testapp/vr_test_context.cc
+++ b/chrome/browser/vr/testapp/vr_test_context.cc
@@ -165,9 +165,8 @@
 void VrTestContext::InitializeGl() {
   unsigned int content_texture_id = CreateTexture(0xFF000080);
   unsigned int ui_texture_id = CreateTexture(0xFF008000);
-  ui_->OnGlInitialized(content_texture_id, kGlTextureLocationLocal,
-                       content_texture_id, kGlTextureLocationLocal,
-                       ui_texture_id);
+  ui_->OnGlInitialized(kGlTextureLocationLocal, content_texture_id,
+                       content_texture_id, ui_texture_id);
   keyboard_delegate_->Initialize(
       ui_instance_->scene()->SurfaceProviderForTesting(),
       ui_instance_->ui_element_renderer());
diff --git a/chrome/browser/vr/ui.cc b/chrome/browser/vr/ui.cc
index 73ef0dca..0867f8d 100644
--- a/chrome/browser/vr/ui.cc
+++ b/chrome/browser/vr/ui.cc
@@ -369,11 +369,10 @@
   model_->platform_toast.reset();
 }
 
-void Ui::OnGlInitialized(unsigned int content_texture_id,
-                         GlTextureLocation content_location,
+void Ui::OnGlInitialized(GlTextureLocation textures_location,
+                         unsigned int content_texture_id,
                          unsigned int content_overlay_texture_id,
-                         GlTextureLocation content_overlay_location,
-                         unsigned int ui_texture_id) {
+                         unsigned int platform_ui_texture_id) {
   ui_element_renderer_ = std::make_unique<UiElementRenderer>();
   ui_renderer_ =
       std::make_unique<UiRenderer>(scene_.get(), ui_element_renderer_.get());
@@ -381,9 +380,9 @@
   scene_->OnGlInitialized(provider_.get());
   model_->content_texture_id = content_texture_id;
   model_->content_overlay_texture_id = content_overlay_texture_id;
-  model_->content_location = content_location;
-  model_->content_overlay_location = content_overlay_location;
-  model_->hosted_platform_ui.texture_id = ui_texture_id;
+  model_->content_location = textures_location;
+  model_->content_overlay_location = textures_location;
+  model_->hosted_platform_ui.texture_id = platform_ui_texture_id;
 }
 
 void Ui::RequestFocus(int element_id) {
diff --git a/chrome/browser/vr/ui.h b/chrome/browser/vr/ui.h
index c68b70d..dad18425 100644
--- a/chrome/browser/vr/ui.h
+++ b/chrome/browser/vr/ui.h
@@ -119,6 +119,10 @@
   void RemoveAllTabs() override;
 
   // UiInterface
+  void OnGlInitialized(GlTextureLocation textures_location,
+                       unsigned int content_texture_id,
+                       unsigned int content_overlay_texture_id,
+                       unsigned int platform_ui_texture_id) override;
   base::WeakPtr<BrowserUiInterface> GetBrowserUiWeakPtr() override;
   void SetAlertDialogEnabled(bool enabled,
                              PlatformUiInputDelegate* delegate,
@@ -177,12 +181,7 @@
       const FovRectangle& fov_recommended_right,
       float z_near) override;
 
-  // CompositorUiInterface
-  void OnGlInitialized(unsigned int content_texture_id,
-                       GlTextureLocation content_location,
-                       unsigned int content_overlay_texture_id,
-                       GlTextureLocation content_overlay_location,
-                       unsigned int ui_texture_id) override;
+  // SchedulerUiInterface
   void OnWebXrFrameAvailable() override;
   void OnWebXrTimedOut() override;
   void OnWebXrTimeoutImminent() override;
diff --git a/chrome/browser/vr/ui_interface.h b/chrome/browser/vr/ui_interface.h
index cde1a59..e6efd88cf 100644
--- a/chrome/browser/vr/ui_interface.h
+++ b/chrome/browser/vr/ui_interface.h
@@ -12,9 +12,10 @@
 
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/vr/browser_ui_interface.h"
-#include "chrome/browser/vr/compositor_ui_interface.h"
+#include "chrome/browser/vr/fov_rectangle.h"
 #include "chrome/browser/vr/gl_texture_location.h"
 #include "chrome/browser/vr/keyboard_ui_interface.h"
+#include "chrome/browser/vr/scheduler_ui_interface.h"
 
 namespace gfx {
 class Point3F;
@@ -38,13 +39,23 @@
 // also serves to make all such methods virtual for the sake of separating a UI
 // feature module.
 class UiInterface : public BrowserUiInterface,
-                    public CompositorUiInterface,
+                    public SchedulerUiInterface,
                     public KeyboardUiInterface {
  public:
   ~UiInterface() override {}
 
   virtual base::WeakPtr<BrowserUiInterface> GetBrowserUiWeakPtr() = 0;
 
+  // Textures from 2D UI that are positioned in the 3D scene.
+  // Content refers to the web contents, as coming from the Chrome compositor.
+  // Content Overlay refers to UI drawn in the same view hierarchy as the
+  // contents.
+  // Platform UI refers to popups, which are rendered in a different window.
+  virtual void OnGlInitialized(GlTextureLocation textures_location,
+                               unsigned int content_texture_id,
+                               unsigned int content_overlay_texture_id,
+                               unsigned int platform_ui_texture_id) = 0;
+
   virtual void SetAlertDialogEnabled(bool enabled,
                                      PlatformUiInputDelegate* delegate,
                                      float width,
diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json
index 345e58d..59d8079f 100644
--- a/chrome/common/extensions/api/_permission_features.json
+++ b/chrome/common/extensions/api/_permission_features.json
@@ -293,7 +293,7 @@
     "location": "policy"
   },
   "enterprise.hardwarePlatform": {
-    "channel": "canary",
+    "channel": "beta",
     "extension_types": ["extension"],
     "location": "policy"
   },
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 8fe63da..bf0bdac 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -638,7 +638,7 @@
                                    .ToSkBitmap());
 }
 
-bool ChromeContentRendererClient::IsPluginHandledByMimeHandlerView(
+bool ChromeContentRendererClient::MaybeCreateMimeHandlerView(
     content::RenderFrame* render_frame,
     const blink::WebElement& plugin_element,
     const GURL& original_url,
@@ -659,7 +659,7 @@
       render_frame->GetWebFrame()->Top()->GetSecurityOrigin(), mime_type,
       &plugin_info);
   if (plugin_info->status == chrome::mojom::PluginStatus::kNotFound ||
-      !ChromeExtensionsRendererClient::IsPluginHandledByMimeHandlerView(
+      !ChromeExtensionsRendererClient::MaybeCreateMimeHandlerView(
           plugin_element, original_url, plugin_info->actual_mime_type,
           plugin_info->plugin, instance_id_to_use)) {
     return false;
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index aa14b589..23dfbc0 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -113,11 +113,11 @@
   void RenderViewCreated(content::RenderView* render_view) override;
   SkBitmap* GetSadPluginBitmap() override;
   SkBitmap* GetSadWebViewBitmap() override;
-  bool IsPluginHandledByMimeHandlerView(content::RenderFrame* render_frame,
-                                        const blink::WebElement& plugin_element,
-                                        const GURL& original_url,
-                                        const std::string& mime_type,
-                                        int32_t instance_id_to_use) override;
+  bool MaybeCreateMimeHandlerView(content::RenderFrame* render_frame,
+                                  const blink::WebElement& plugin_element,
+                                  const GURL& original_url,
+                                  const std::string& mime_type,
+                                  int32_t instance_id_to_use) override;
   bool OverrideCreatePlugin(content::RenderFrame* render_frame,
                             const blink::WebPluginParams& params,
                             blink::WebPlugin** plugin) override;
diff --git a/chrome/renderer/extensions/chrome_extensions_renderer_client.cc b/chrome/renderer/extensions/chrome_extensions_renderer_client.cc
index 319255e..8d8834895 100644
--- a/chrome/renderer/extensions/chrome_extensions_renderer_client.cc
+++ b/chrome/renderer/extensions/chrome_extensions_renderer_client.cc
@@ -36,6 +36,7 @@
 #include "extensions/renderer/guest_view/extensions_guest_view_container.h"
 #include "extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.h"
 #include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h"
+#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_frame_container.h"
 #include "extensions/renderer/script_context.h"
 #include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/public/web/web_document.h"
@@ -327,16 +328,16 @@
 }
 
 // static
-bool ChromeExtensionsRendererClient::IsPluginHandledByMimeHandlerView(
+bool ChromeExtensionsRendererClient::MaybeCreateMimeHandlerView(
     const blink::WebElement& plugin_element,
     const GURL& resource_url,
     const std::string& mime_type,
     const content::WebPluginInfo& plugin_info,
     int32_t element_instance_id) {
   CHECK(content::MimeHandlerViewMode::UsesCrossProcessFrame());
-  // TODO(ekaramad): Implement the renderer side logic here
-  // (https://crbug.com/659750).
-  return false;
+  return extensions::MimeHandlerViewFrameContainer::Create(
+      plugin_element, resource_url, mime_type, plugin_info,
+      element_instance_id);
 }
 
 // static
diff --git a/chrome/renderer/extensions/chrome_extensions_renderer_client.h b/chrome/renderer/extensions/chrome_extensions_renderer_client.h
index 8278bad..91a083e 100644
--- a/chrome/renderer/extensions/chrome_extensions_renderer_client.h
+++ b/chrome/renderer/extensions/chrome_extensions_renderer_client.h
@@ -83,7 +83,7 @@
       const content::WebPluginInfo& info,
       const std::string& mime_type,
       const GURL& original_url);
-  static bool IsPluginHandledByMimeHandlerView(
+  static bool MaybeCreateMimeHandlerView(
       const blink::WebElement& plugin_element,
       const GURL& resource_url,
       const std::string& mime_type,
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 4e2caf9e..7f1c85b8 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -2470,7 +2470,6 @@
     "../browser/mac/exception_processor_unittest.mm",
     "../browser/mac/keystone_glue_unittest.mm",
     "../browser/media/android/router/media_router_android_unittest.cc",
-    "../browser/media/cast_remoting_connector_unittest.cc",
     "../browser/media/media_engagement_contents_observer_unittest.cc",
     "../browser/media/media_engagement_preloaded_list_unittest.cc",
     "../browser/media/media_engagement_score_unittest.cc",
@@ -2787,6 +2786,7 @@
   if (is_win) {
     assert(toolkit_views)
     sources += [
+      "../browser/browser_switcher/alternative_browser_launcher_unittest.cc",
       "../browser/browser_switcher/browser_switcher_sitelist_unittest.cc",
       "../browser/media/widevine_hardware_caps_win_unittest.cc",
       "../browser/notifications/win/mock_notification_image_retainer.cc",
@@ -3013,6 +3013,9 @@
       "../browser/importer/firefox_profile_lock_unittest.cc",
       "../browser/importer/profile_writer_unittest.cc",
 
+      # Media remoting is not supported on Android for now.
+      "../browser/media/cast_remoting_connector_unittest.cc",
+
       # In-browser discovery is not used by Android for now.
       "../browser/media/router/discovery/discovery_network_list_unittest.cc",
       "../browser/media/router/discovery/discovery_network_monitor_metric_observer_unittest.cc",
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index ffbc002e..367a2ee1 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -3825,10 +3825,10 @@
   "VirtualMachinesAllowed": {
     "os": ["chromeos"],
     "test_policy": {
-      "virtual_machines_allowed": false
+      "virtual_machines_allowed": true
     },
     "pref_mappings": [
-      { "pref": "cros.virtual_machines_allowed"}
+      { "pref": "cros.device.virtual_machines_allowed"}
     ]
   },
 
diff --git a/chrome/test/data/previews/iframe_blank.html b/chrome/test/data/previews/iframe_blank.html
new file mode 100644
index 0000000..94f1d57d
--- /dev/null
+++ b/chrome/test/data/previews/iframe_blank.html
@@ -0,0 +1,4 @@
+<html><head><title>Blank iframe test</title></head>
+<body>
+<iframe name="subframe"></iframe>
+</body></html>
diff --git a/chrome/test/data/previews/lite_page_test.html b/chrome/test/data/previews/lite_page_test.html
new file mode 100644
index 0000000..ad2c975c
--- /dev/null
+++ b/chrome/test/data/previews/lite_page_test.html
@@ -0,0 +1,16 @@
+<html>
+  <head>
+    <meta name="viewport" content="width=device-width" />
+    <script>
+      if (window == window.top) {
+        document.title = "Main frame";
+      } else {
+        document.title = "Subframe";
+        window.domAutomationController.send("Subframe");
+      }
+    </script>
+  </head>
+  <body>
+    <h1>Test page for Lite Page Server Previews.</h1>
+  </body>
+</html>
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js
index 4ea3533..41c35b5 100644
--- a/chrome/test/data/webui/settings/cr_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -1992,6 +1992,7 @@
 
   /** @override */
   extraLibraries: CrSettingsBrowserTest.prototype.extraLibraries.concat([
+    '../test_browser_proxy.js',
     'multidevice_subpage_tests.js',
   ]),
 };
diff --git a/chrome/test/data/webui/settings/multidevice_page_tests.js b/chrome/test/data/webui/settings/multidevice_page_tests.js
index 56b781e1..c4d6554 100644
--- a/chrome/test/data/webui/settings/multidevice_page_tests.js
+++ b/chrome/test/data/webui/settings/multidevice_page_tests.js
@@ -48,6 +48,12 @@
     Polymer.dom.flush();
   }
 
+  function setSuiteState(newState) {
+    multidevicePage.pageContentData = Object.assign(
+        {}, multidevicePage.pageContentData, {betterTogetherState: newState});
+    Polymer.dom.flush();
+  }
+
   suiteSetup(function() {
     ALL_MODES = Object.values(settings.MultiDeviceSettingsMode);
   });
@@ -144,4 +150,15 @@
     // Button should be disabled because UI is waiting on server.
     assertTrue(verificationButton.disabled);
   });
+
+  test('policy prohibited suite shows policy indicator', function() {
+    setPageContentData(settings.MultiDeviceSettingsMode.NO_ELIGIBLE_HOSTS);
+    assertFalse(!!multidevicePage.$$('cr-policy-indicator'));
+    // Prohibit suite by policy.
+    setSuiteState(settings.MultiDeviceFeatureState.PROHIBITED_BY_POLICY);
+    assertTrue(!!multidevicePage.$$('cr-policy-indicator'));
+    // Reallow suite.
+    setSuiteState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
+    assertFalse(!!multidevicePage.$$('cr-policy-indicator'));
+  });
 });
diff --git a/chrome/test/data/webui/settings/multidevice_subpage_tests.js b/chrome/test/data/webui/settings/multidevice_subpage_tests.js
index 76d5047..64733642 100644
--- a/chrome/test/data/webui/settings/multidevice_subpage_tests.js
+++ b/chrome/test/data/webui/settings/multidevice_subpage_tests.js
@@ -2,8 +2,25 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+/**
+ * @implements {settings.MultideviceBrowserProxy}
+ */
+class TestMultideviceBrowserProxy extends TestBrowserProxy {
+  constructor() {
+    super([
+      'setUpAndroidSms',
+    ]);
+  }
+
+  /** @override */
+  setUpAndroidSms() {
+    this.methodCalled('setUpAndroidSms');
+  }
+}
+
 suite('Multidevice', function() {
   let multideviceSubpage = null;
+  let browserProxy = null;
   // Although HOST_SET_MODES is effectively a constant, it cannot reference the
   // enum settings.MultiDeviceSettingsMode from here so its initialization is
   // deferred to the suiteSetup function.
@@ -60,6 +77,10 @@
   });
 
   setup(function() {
+    browserProxy = new TestMultideviceBrowserProxy();
+    settings.MultiDeviceBrowserProxyImpl.instance_ = browserProxy;
+
+    PolymerTest.clearBody();
     multideviceSubpage = document.createElement('settings-multidevice-subpage');
     multideviceSubpage.pageContentData = {hostDeviceName: 'Pixel XL'};
     setMode(settings.MultiDeviceSettingsMode.HOST_SET_VERIFIED);
@@ -133,4 +154,20 @@
 
     assertFalse(!!multideviceSubpage.$$(controllerSelector));
   });
+
+  test(
+      'AndroidMessages set up button calls browser proxy function', function() {
+        const messagesItem = multideviceSubpage.$$('#messagesItem');
+
+        multideviceSubpage.androidMessagesRequiresSetup_ = true;
+        Polymer.dom.flush();
+
+        const setUpButton =
+            multideviceSubpage.$$('#messagesItem > [slot=feature-controller]');
+        assertTrue(!!setUpButton);
+
+        setUpButton.click();
+
+        return browserProxy.whenCalled('setUpAndroidSms');
+      });
 });
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc
index 083f775..5a4e43b 100644
--- a/chrome/utility/chrome_content_utility_client.cc
+++ b/chrome/utility/chrome_content_utility_client.cc
@@ -303,10 +303,13 @@
       base::FeatureList::IsEnabled(features::kAudioServiceAudioStreams) &&
       base::FeatureList::IsEnabled(network::features::kNetworkService)) {
     service_manager::EmbeddedServiceInfo mirroring_info;
-    mirroring_info.factory =
-        base::BindRepeating([]() -> std::unique_ptr<service_manager::Service> {
-          return std::make_unique<mirroring::MirroringService>();
-        });
+    mirroring_info.factory = base::BindRepeating(
+        [](scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
+            -> std::unique_ptr<service_manager::Service> {
+          return std::make_unique<mirroring::MirroringService>(
+              std::move(io_task_runner));
+        },
+        content::ChildThread::Get()->GetIOTaskRunner());
     services->emplace(mirroring::mojom::kServiceName, mirroring_info);
   }
 #endif
diff --git a/chrome_elf/third_party_dlls/hook.cc b/chrome_elf/third_party_dlls/hook.cc
index af9d1e5..a0f25247 100644
--- a/chrome_elf/third_party_dlls/hook.cc
+++ b/chrome_elf/third_party_dlls/hook.cc
@@ -331,6 +331,7 @@
   if (block) {
     assert(g_nt_unmap_view_of_section_func);
     g_nt_unmap_view_of_section_func(process, *base);
+    *base = nullptr;
     ret = STATUS_UNSUCCESSFUL;
   }
 
diff --git a/chromeos/components/proximity_auth/BUILD.gn b/chromeos/components/proximity_auth/BUILD.gn
index de49964..17c9c5fd 100644
--- a/chromeos/components/proximity_auth/BUILD.gn
+++ b/chromeos/components/proximity_auth/BUILD.gn
@@ -58,6 +58,7 @@
 
     # TODO(hansberry): Remove this dependency once https://crbug.com/870123 is
     # fixed.
+    "//chromeos/services/multidevice_setup/public/cpp",
     "//chromeos/services/multidevice_setup/public/cpp:prefs",
     "//chromeos/services/secure_channel/public/cpp/client",
     "//chromeos/services/secure_channel/public/mojom",
diff --git a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.cc b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.cc
index 2d04515..c535d10 100644
--- a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/values.h"
+#include "chromeos/chromeos_features.h"
 #include "chromeos/components/proximity_auth/logging/logging.h"
 #include "chromeos/components/proximity_auth/proximity_auth_pref_names.h"
 #include "chromeos/services/multidevice_setup/public/cpp/prefs.h"
@@ -20,11 +21,27 @@
 namespace proximity_auth {
 
 ProximityAuthProfilePrefManager::ProximityAuthProfilePrefManager(
-    PrefService* pref_service)
-    : pref_service_(pref_service), weak_ptr_factory_(this) {}
+    PrefService* pref_service,
+    chromeos::multidevice_setup::MultiDeviceSetupClient*
+        multidevice_setup_client)
+    : pref_service_(pref_service),
+      multidevice_setup_client_(multidevice_setup_client),
+      weak_ptr_factory_(this) {
+  if (base::FeatureList::IsEnabled(
+          chromeos::features::kEnableUnifiedMultiDeviceSetup)) {
+    OnFeatureStatesChanged(multidevice_setup_client_->GetFeatureStates());
+
+    multidevice_setup_client_->AddObserver(this);
+  }
+}
 
 ProximityAuthProfilePrefManager::~ProximityAuthProfilePrefManager() {
   registrar_.RemoveAll();
+
+  if (base::FeatureList::IsEnabled(
+          chromeos::features::kEnableUnifiedMultiDeviceSetup)) {
+    multidevice_setup_client_->RemoveObserver(this);
+  }
 }
 
 // static
@@ -61,8 +78,9 @@
   registrar_.Init(pref_service_);
   registrar_.Add(chromeos::multidevice_setup::kSmartLockAllowedPrefName,
                  on_pref_changed_callback);
-  registrar_.Add(chromeos::multidevice_setup::kSmartLockEnabledPrefName,
-                 on_pref_changed_callback);
+  registrar_.Add(
+      chromeos::multidevice_setup::kSmartLockEnabledDeprecatedPrefName,
+      on_pref_changed_callback);
   registrar_.Add(proximity_auth::prefs::kEasyUnlockProximityThreshold,
                  on_pref_changed_callback);
   registrar_.Add(proximity_auth::prefs::kProximityAuthIsChromeOSLoginEnabled,
@@ -100,13 +118,19 @@
 void ProximityAuthProfilePrefManager::SetIsEasyUnlockEnabled(
     bool is_easy_unlock_enabled) const {
   pref_service_->SetBoolean(
-      chromeos::multidevice_setup::kSmartLockEnabledPrefName,
+      chromeos::multidevice_setup::kSmartLockEnabledDeprecatedPrefName,
       is_easy_unlock_enabled);
 }
 
 bool ProximityAuthProfilePrefManager::IsEasyUnlockEnabled() const {
+  if (base::FeatureList::IsEnabled(
+          chromeos::features::kEnableUnifiedMultiDeviceSetup)) {
+    return feature_state_ ==
+           chromeos::multidevice_setup::mojom::FeatureState::kEnabledByUser;
+  }
+
   return pref_service_->GetBoolean(
-      chromeos::multidevice_setup::kSmartLockEnabledPrefName);
+      chromeos::multidevice_setup::kSmartLockEnabledDeprecatedPrefName);
 }
 
 void ProximityAuthProfilePrefManager::SetEasyUnlockEnabledStateSet() const {
@@ -159,4 +183,20 @@
   return pref_service_->GetBoolean(prefs::kProximityAuthIsChromeOSLoginEnabled);
 }
 
+void ProximityAuthProfilePrefManager::OnFeatureStatesChanged(
+    const chromeos::multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap&
+        feature_states_map) {
+  const auto it = feature_states_map.find(
+      chromeos::multidevice_setup::mojom::Feature::kSmartLock);
+  if (it == feature_states_map.end()) {
+    feature_state_ = chromeos::multidevice_setup::mojom::FeatureState::
+        kUnavailableNoVerifiedHost;
+    return;
+  }
+  feature_state_ = it->second;
+
+  if (local_state_)
+    SyncPrefsToLocalState();
+}
+
 }  // namespace proximity_auth
diff --git a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h
index 981259e..2e4cf14 100644
--- a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h
+++ b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h
@@ -12,6 +12,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "chromeos/components/proximity_auth/proximity_auth_pref_manager.h"
+#include "chromeos/services/multidevice_setup/public/cpp/multidevice_setup_client.h"
 #include "components/account_id/account_id.h"
 #include "components/prefs/pref_change_registrar.h"
 
@@ -29,13 +30,18 @@
 
 // Implementation of ProximityAuthPrefManager for a logged in session with a
 // user profile.
-class ProximityAuthProfilePrefManager : public ProximityAuthPrefManager {
+class ProximityAuthProfilePrefManager
+    : public ProximityAuthPrefManager,
+      public chromeos::multidevice_setup::MultiDeviceSetupClient::Observer {
  public:
   // Creates a pref manager backed by preferences registered in
   // |pref_service| (persistent across browser restarts). |pref_service| should
   // have been registered using RegisterPrefs(). Not owned, must out live this
   // instance.
-  explicit ProximityAuthProfilePrefManager(PrefService* pref_service);
+  ProximityAuthProfilePrefManager(
+      PrefService* pref_service,
+      chromeos::multidevice_setup::MultiDeviceSetupClient*
+          multidevice_setup_client);
   ~ProximityAuthProfilePrefManager() override;
 
   // Initializes the manager to listen to pref changes and sync prefs to the
@@ -61,6 +67,11 @@
   void SetIsChromeOSLoginEnabled(bool is_enabled) override;
   bool IsChromeOSLoginEnabled() override;
 
+  // chromeos::multidevice_setup::MultiDeviceSetupClient::Observer:
+  void OnFeatureStatesChanged(
+      const chromeos::multidevice_setup::MultiDeviceSetupClient::
+          FeatureStatesMap& feature_states_map) override;
+
  private:
   const base::DictionaryValue* GetRemoteBleDevices() const;
 
@@ -79,6 +90,15 @@
   // The account id of the current profile.
   AccountId account_id_;
 
+  // Used to determine the FeatureState of Smart Lock. See |feature_state_|.
+  chromeos::multidevice_setup::MultiDeviceSetupClient*
+      multidevice_setup_client_;
+
+  // Caches feature state of Smart Lock. Populated by using
+  // |multidevice_setup_client_|.
+  chromeos::multidevice_setup::mojom::FeatureState feature_state_ = chromeos::
+      multidevice_setup::mojom::FeatureState::kUnavailableNoVerifiedHost;
+
   base::WeakPtrFactory<ProximityAuthProfilePrefManager> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(ProximityAuthProfilePrefManager);
diff --git a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager_unittest.cc b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager_unittest.cc
index 6689a91..29fbc5f 100644
--- a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager_unittest.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager_unittest.cc
@@ -49,7 +49,8 @@
 };
 
 TEST_F(ProximityAuthProfilePrefManagerTest, IsEasyUnlockAllowed) {
-  ProximityAuthProfilePrefManager pref_manager(&pref_service_);
+  ProximityAuthProfilePrefManager pref_manager(
+      &pref_service_, nullptr /* multidevice_setup_service */);
   EXPECT_TRUE(pref_manager.IsEasyUnlockAllowed());
 
   // Simulating setting kEasyUnlockAllowed pref through enterprise policy.
@@ -59,7 +60,8 @@
 }
 
 TEST_F(ProximityAuthProfilePrefManagerTest, IsEasyUnlockEnabled) {
-  ProximityAuthProfilePrefManager pref_manager(&pref_service_);
+  ProximityAuthProfilePrefManager pref_manager(
+      &pref_service_, nullptr /* multidevice_setup_service */);
   EXPECT_TRUE(pref_manager.IsEasyUnlockEnabled());
 
   pref_manager.SetIsEasyUnlockEnabled(true);
@@ -70,7 +72,8 @@
 }
 
 TEST_F(ProximityAuthProfilePrefManagerTest, LastPromotionCheckTimestamp) {
-  ProximityAuthProfilePrefManager pref_manager(&pref_service_);
+  ProximityAuthProfilePrefManager pref_manager(
+      &pref_service_, nullptr /* multidevice_setup_service */);
   EXPECT_EQ(0L, pref_manager.GetLastPromotionCheckTimestampMs());
   pref_manager.SetLastPromotionCheckTimestampMs(kPromotionCheckTimestampMs1);
   EXPECT_EQ(kPromotionCheckTimestampMs1,
@@ -81,7 +84,8 @@
 }
 
 TEST_F(ProximityAuthProfilePrefManagerTest, PromotionShownCount) {
-  ProximityAuthProfilePrefManager pref_manager(&pref_service_);
+  ProximityAuthProfilePrefManager pref_manager(
+      &pref_service_, nullptr /* multidevice_setup_service */);
   EXPECT_EQ(0, pref_manager.GetPromotionShownCount());
   pref_manager.SetPromotionShownCount(1);
   EXPECT_EQ(1, pref_manager.GetPromotionShownCount());
@@ -90,7 +94,8 @@
 }
 
 TEST_F(ProximityAuthProfilePrefManagerTest, ProximityThreshold) {
-  ProximityAuthProfilePrefManager pref_manager(&pref_service_);
+  ProximityAuthProfilePrefManager pref_manager(
+      &pref_service_, nullptr /* multidevice_setup_service */);
   EXPECT_EQ(1, pref_manager.GetProximityThreshold());
   pref_manager.SetProximityThreshold(kProximityThreshold1);
   EXPECT_EQ(kProximityThreshold1, pref_manager.GetProximityThreshold());
@@ -99,7 +104,8 @@
 }
 
 TEST_F(ProximityAuthProfilePrefManagerTest, IsChromeOSLoginEnabled) {
-  ProximityAuthProfilePrefManager pref_manager(&pref_service_);
+  ProximityAuthProfilePrefManager pref_manager(
+      &pref_service_, nullptr /* multidevice_setup_service */);
   EXPECT_FALSE(pref_manager.IsChromeOSLoginEnabled());
 
   pref_manager.SetIsChromeOSLoginEnabled(true);
@@ -110,7 +116,8 @@
 }
 
 TEST_F(ProximityAuthProfilePrefManagerTest, SyncsToLocalPrefOnChange) {
-  ProximityAuthProfilePrefManager profile_pref_manager(&pref_service_);
+  ProximityAuthProfilePrefManager profile_pref_manager(
+      &pref_service_, nullptr /* multidevice_setup_service */);
 
   TestingPrefServiceSimple local_state;
   AccountId account_id = AccountId::FromUserEmail(kUserEmail);
diff --git a/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc b/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc
index 6c4fcf8..92fed9e 100644
--- a/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc
@@ -77,7 +77,10 @@
 // Mock implementation of ProximityAuthProfilePrefManager.
 class MockProximityAuthPrefManager : public ProximityAuthProfilePrefManager {
  public:
-  MockProximityAuthPrefManager() : ProximityAuthProfilePrefManager(nullptr) {}
+  MockProximityAuthPrefManager()
+      : ProximityAuthProfilePrefManager(
+            nullptr,
+            nullptr /* multidevice_setup_client */) {}
   ~MockProximityAuthPrefManager() override {}
   MOCK_CONST_METHOD0(GetLastPasswordEntryTimestampMs, int64_t());
 
diff --git a/chromeos/components/proximity_auth/proximity_monitor_impl_unittest.cc b/chromeos/components/proximity_auth/proximity_monitor_impl_unittest.cc
index dafbcffb..9406f93 100644
--- a/chromeos/components/proximity_auth/proximity_monitor_impl_unittest.cc
+++ b/chromeos/components/proximity_auth/proximity_monitor_impl_unittest.cc
@@ -61,7 +61,10 @@
 
 class MockProximityAuthPrefManager : public ProximityAuthProfilePrefManager {
  public:
-  MockProximityAuthPrefManager() : ProximityAuthProfilePrefManager(nullptr) {}
+  MockProximityAuthPrefManager()
+      : ProximityAuthProfilePrefManager(
+            nullptr,
+            nullptr /* multidevice_setup_client */) {}
   ~MockProximityAuthPrefManager() override {}
 
   MOCK_CONST_METHOD0(GetProximityThreshold,
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.cc b/chromeos/services/assistant/assistant_manager_service_impl.cc
index fc7eb10..1abba35 100644
--- a/chromeos/services/assistant/assistant_manager_service_impl.cc
+++ b/chromeos/services/assistant/assistant_manager_service_impl.cc
@@ -46,12 +46,13 @@
 constexpr char kWiFiDeviceSettingId[] = "WIFI";
 constexpr char kBluetoothDeviceSettingId[] = "BLUETOOTH";
 constexpr char kVolumeLevelDeviceSettingId[] = "VOLUME_LEVEL";
+constexpr char kScreenBrightnessDeviceSettingId[] = "BRIGHTNESS_LEVEL";
 constexpr char kTimerFireNotificationGroupId[] = "assistant/timer_fire";
 constexpr char kQueryDeeplinkPrefix[] = "googleassistant://send-query?q=";
 constexpr base::Feature kAssistantTimerNotificationFeature{
     "ChromeOSAssistantTimerNotification", base::FEATURE_DISABLED_BY_DEFAULT};
 
-constexpr float kDefaultVolumeStep = 0.1f;
+constexpr float kDefaultSliderStep = 0.1f;
 }  // namespace
 
 AssistantManagerServiceImpl::AssistantManagerServiceImpl(
@@ -489,43 +490,11 @@
   LogUnsupportedChange(modify_setting_args);
 }
 
-void HandleValueChange(
-    api::client_op::ModifySettingArgs modify_setting_args,
-    std::function<void(double, api::client_op::ModifySettingArgs_Unit)>
-        set_value_handler,
-    std::function<void(bool, double, api::client_op::ModifySettingArgs_Unit)>
-        incr_decr_handler) {
-  switch (modify_setting_args.change()) {
-    case api::client_op::ModifySettingArgs_Change_SET:
-      set_value_handler(modify_setting_args.numeric_value(),
-                        modify_setting_args.unit());
-      return;
-
-    case api::client_op::ModifySettingArgs_Change_INCREASE:
-      incr_decr_handler(true, modify_setting_args.numeric_value(),
-                        modify_setting_args.unit());
-      return;
-
-    case api::client_op::ModifySettingArgs_Change_DECREASE:
-      incr_decr_handler(false, modify_setting_args.numeric_value(),
-                        modify_setting_args.unit());
-      return;
-
-    case api::client_op::ModifySettingArgs_Change_ON:
-    case api::client_op::ModifySettingArgs_Change_OFF:
-    case api::client_op::ModifySettingArgs_Change_TOGGLE:
-    case api::client_op::ModifySettingArgs_Change_UNSPECIFIED:
-      // This shouldn't happen.
-      break;
-  }
-  LogUnsupportedChange(modify_setting_args);
-}
-
-// Helper function that converts a volume value sent from the server, either
+// Helper function that converts a slider value sent from the server, either
 // absolute or a delta, from a given unit (e.g., STEP), to a percentage.
-double ConvertVolumeValueToPercent(double value,
-                                   api::client_op::ModifySettingArgs_Unit unit,
-                                   double default_value) {
+double ConvertSliderValueToLevel(double value,
+                                 api::client_op::ModifySettingArgs_Unit unit,
+                                 double default_value) {
   switch (unit) {
     case api::client_op::ModifySettingArgs_Unit_RANGE:
       // "set volume to 20%".
@@ -545,10 +514,52 @@
       // This shouldn't happen.
       break;
   }
-  LOG(ERROR) << "Unsupported volume unit: " << unit;
+  LOG(ERROR) << "Unsupported slider unit: " << unit;
   return default_value;
 }
 
+void HandleSliderChange(api::client_op::ModifySettingArgs modify_setting_args,
+                        std::function<void(double)> set_value_handler,
+                        std::function<double()> get_value_handler) {
+  switch (modify_setting_args.change()) {
+    case api::client_op::ModifySettingArgs_Change_SET: {
+      // For unsupported units, set the value to the current value, for
+      // visual feedback.
+      double new_value = ConvertSliderValueToLevel(
+          modify_setting_args.numeric_value(), modify_setting_args.unit(),
+          get_value_handler());
+      set_value_handler(new_value);
+      return;
+    }
+
+    case api::client_op::ModifySettingArgs_Change_INCREASE:
+    case api::client_op::ModifySettingArgs_Change_DECREASE: {
+      double current_value = get_value_handler();
+      double step = kDefaultSliderStep;
+      if (modify_setting_args.numeric_value() != 0.0f) {
+        // For unsupported units, use the default step percentage.
+        step = ConvertSliderValueToLevel(modify_setting_args.numeric_value(),
+                                         modify_setting_args.unit(),
+                                         kDefaultSliderStep);
+      }
+      double new_value = (modify_setting_args.change() ==
+                          api::client_op::ModifySettingArgs_Change_INCREASE)
+                             ? std::min(current_value + step, 1.0)
+                             : std::max(current_value - step, 0.0);
+      set_value_handler(new_value);
+      return;
+    }
+
+    case api::client_op::ModifySettingArgs_Change_ON:
+    case api::client_op::ModifySettingArgs_Change_OFF:
+    case api::client_op::ModifySettingArgs_Change_TOGGLE:
+    case api::client_op::ModifySettingArgs_Change_UNSPECIFIED:
+      // This shouldn't happen.
+      break;
+  }
+  LogUnsupportedChange(modify_setting_args);
+}
+
 void AssistantManagerServiceImpl::OnModifySettingsAction(
     const std::string& modify_setting_args_proto) {
   api::client_op::ModifySettingArgs modify_setting_args;
@@ -556,13 +567,13 @@
   DCHECK(IsSettingSupported(modify_setting_args.setting_id()));
 
   if (modify_setting_args.setting_id() == kWiFiDeviceSettingId) {
-    HandleOnOffChange(modify_setting_args, [this](bool enabled) {
+    HandleOnOffChange(modify_setting_args, [&](bool enabled) {
       this->service_->device_actions()->SetWifiEnabled(enabled);
     });
   }
 
   if (modify_setting_args.setting_id() == kBluetoothDeviceSettingId) {
-    HandleOnOffChange(modify_setting_args, [this](bool enabled) {
+    HandleOnOffChange(modify_setting_args, [&](bool enabled) {
       this->service_->device_actions()->SetBluetoothEnabled(enabled);
     });
   }
@@ -571,28 +582,30 @@
     assistant_client::VolumeControl& volume_control =
         this->platform_api_->GetAudioOutputProvider().GetVolumeControl();
 
-    HandleValueChange(
+    HandleSliderChange(
         modify_setting_args,
-        [&volume_control](double value,
-                          api::client_op::ModifySettingArgs_Unit unit) {
-          // For unsupported units, set the volume to the current volume, for
-          // visual feedback.
-          float new_volume = ConvertVolumeValueToPercent(
-              value, unit, volume_control.GetSystemVolume());
-          volume_control.SetSystemVolume(new_volume, true);
-        },
-        [&volume_control](bool incr, double value,
-                          api::client_op::ModifySettingArgs_Unit unit) {
-          float volume = volume_control.GetSystemVolume();
-          float step = kDefaultVolumeStep;
-          if (value != 0.0f) {
-            // For unsupported units, use the default step percentage.
-            step = ConvertVolumeValueToPercent(value, unit, step);
+        [&](double value) { volume_control.SetSystemVolume(value, true); },
+        [&]() { return volume_control.GetSystemVolume(); });
+  }
+
+  if (modify_setting_args.setting_id() == kScreenBrightnessDeviceSettingId) {
+    this->service_->device_actions()->GetScreenBrightnessLevel(base::BindOnce(
+        [](base::WeakPtr<chromeos::assistant::AssistantManagerServiceImpl>
+               this_,
+           api::client_op::ModifySettingArgs modify_setting_args, bool success,
+           double current_value) {
+          if (!success || !this_) {
+            return;
           }
-          float new_volume = incr ? std::min(volume + step, 1.0f)
-                                  : std::max(volume - step, 0.0f);
-          volume_control.SetSystemVolume(new_volume, true);
-        });
+          HandleSliderChange(
+              modify_setting_args,
+              [&](double new_value) {
+                this_->service_->device_actions()->SetScreenBrightnessLevel(
+                    new_value, true);
+              },
+              [&]() { return current_value; });
+        },
+        weak_factory_.GetWeakPtr(), modify_setting_args));
   }
 }
 
@@ -611,7 +624,8 @@
   DVLOG(2) << "IsSettingSupported=" << setting_id;
   return (setting_id == kWiFiDeviceSettingId ||
           setting_id == kBluetoothDeviceSettingId ||
-          setting_id == kVolumeLevelDeviceSettingId);
+          setting_id == kVolumeLevelDeviceSettingId ||
+          setting_id == kScreenBrightnessDeviceSettingId);
 }
 
 bool AssistantManagerServiceImpl::SupportsModifySettings() {
diff --git a/chromeos/services/assistant/public/mojom/assistant.mojom b/chromeos/services/assistant/public/mojom/assistant.mojom
index a9438f7..68c13e8 100644
--- a/chromeos/services/assistant/public/mojom/assistant.mojom
+++ b/chromeos/services/assistant/public/mojom/assistant.mojom
@@ -161,6 +161,14 @@
 
   // Enables or disables Bluetooth.
   SetBluetoothEnabled(bool enabled);
+
+  // Gets the current screen brightness level (0-1.0).
+  // The level is set to 0 in the event of an error.
+  GetScreenBrightnessLevel() => (bool success, double level);
+
+  // Sets the screen brightness level (0-1.0).  If |gradual| is true, the
+  // transition will be animated.
+  SetScreenBrightnessLevel(double level, bool gradual);
 };
 
 // Enumeration of possible completions for an Assistant interaction.
diff --git a/chromeos/services/assistant/service_unittest.cc b/chromeos/services/assistant/service_unittest.cc
index cfdca91c..767c1a7 100644
--- a/chromeos/services/assistant/service_unittest.cc
+++ b/chromeos/services/assistant/service_unittest.cc
@@ -156,6 +156,11 @@
   // mojom::DeviceActions:
   void SetWifiEnabled(bool enabled) override {}
   void SetBluetoothEnabled(bool enabled) override {}
+  void GetScreenBrightnessLevel(
+      GetScreenBrightnessLevelCallback callback) override {
+    std::move(callback).Run(true, 1.0);
+  }
+  void SetScreenBrightnessLevel(double level, bool gradual) override {}
 
   mojo::Binding<mojom::DeviceActions> binding_;
 
diff --git a/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.cc b/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.cc
index 18b9f9b..51e2b2f 100644
--- a/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.cc
+++ b/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.cc
@@ -11,6 +11,7 @@
 #include "base/no_destructor.h"
 #include "base/time/clock.h"
 #include "chromeos/components/proximity_auth/logging/logging.h"
+#include "chromeos/services/multidevice_setup/host_status_provider_impl.h"
 #include "chromeos/services/multidevice_setup/setup_flow_completion_recorder.h"
 #include "components/cryptauth/proto/cryptauth_api.pb.h"
 #include "components/cryptauth/remote_device_ref.h"
@@ -27,19 +28,6 @@
 const int64_t kTimestampNotSet = 0;
 const char kNoHost[] = "";
 
-base::Optional<std::pair<std::string, std::string>> GetHostPublicKeyAndName(
-    const cryptauth::RemoteDeviceRefList& device_ref_list) {
-  for (const auto& device_ref : device_ref_list) {
-    if (device_ref.GetSoftwareFeatureState(
-            cryptauth::SoftwareFeature::BETTER_TOGETHER_HOST) ==
-        cryptauth::SoftwareFeatureState::kEnabled) {
-      DCHECK(!device_ref.public_key().empty());
-      return std::make_pair(device_ref.public_key(), device_ref.name());
-    }
-  }
-  return base::nullopt;
-}
-
 }  // namespace
 
 // static
@@ -66,12 +54,13 @@
 
 std::unique_ptr<AccountStatusChangeDelegateNotifier>
 AccountStatusChangeDelegateNotifierImpl::Factory::BuildInstance(
-    device_sync::DeviceSyncClient* device_sync_client,
+    HostStatusProvider* host_status_provider,
     PrefService* pref_service,
     SetupFlowCompletionRecorder* setup_flow_completion_recorder,
     base::Clock* clock) {
   return base::WrapUnique(new AccountStatusChangeDelegateNotifierImpl(
-      device_sync_client, pref_service, setup_flow_completion_recorder, clock));
+      host_status_provider, pref_service, setup_flow_completion_recorder,
+      clock));
 }
 
 // static
@@ -86,17 +75,17 @@
                               kTimestampNotSet);
   registry->RegisterInt64Pref(kExistingUserChromebookAddedPrefName,
                               kTimestampNotSet);
-  registry->RegisterStringPref(kHostPublicKeyFromMostRecentSyncPrefName,
-                               kNoHost);
+  registry->RegisterStringPref(
+      kHostDeviceIdFromMostRecentHostStatusUpdatePrefName, kNoHost);
 }
 
 AccountStatusChangeDelegateNotifierImpl::
     ~AccountStatusChangeDelegateNotifierImpl() {
-  device_sync_client_->RemoveObserver(this);
+  host_status_provider_->RemoveObserver(this);
 }
 
 void AccountStatusChangeDelegateNotifierImpl::OnDelegateSet() {
-  CheckForMultiDeviceEvents();
+  CheckForMultiDeviceEvents(host_status_provider_->GetHostWithStatus());
 }
 
 // static
@@ -116,41 +105,31 @@
 
 // static
 const char AccountStatusChangeDelegateNotifierImpl::
-    kHostPublicKeyFromMostRecentSyncPrefName[] =
-        "multidevice_setup.host_public_key_from_most_recent_sync";
+    kHostDeviceIdFromMostRecentHostStatusUpdatePrefName[] =
+        "multidevice_setup.host_device_id_from_most_recent_sync";
 
 AccountStatusChangeDelegateNotifierImpl::
     AccountStatusChangeDelegateNotifierImpl(
-        device_sync::DeviceSyncClient* device_sync_client,
+        HostStatusProvider* host_status_provider,
         PrefService* pref_service,
         SetupFlowCompletionRecorder* setup_flow_completion_recorder,
         base::Clock* clock)
-    : device_sync_client_(device_sync_client),
+    : host_status_provider_(host_status_provider),
       pref_service_(pref_service),
       setup_flow_completion_recorder_(setup_flow_completion_recorder),
       clock_(clock) {
-  host_public_key_from_most_recent_sync_ =
-      LoadHostPublicKeyFromEndOfPreviousSession();
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      device_sync_client_->GetSyncedDevices();
-  base::Optional<cryptauth::RemoteDeviceRef> local_device =
-      device_sync_client_->GetLocalDeviceMetadata();
-
-  // AccountStatusChangeDelegateNotifierImpl should not be constructed if
-  // DeviceSyncClient is not initialized.
-  DCHECK(local_device);
-  local_device_is_enabled_client_ =
-      local_device->GetSoftwareFeatureState(
-          cryptauth::SoftwareFeature::BETTER_TOGETHER_CLIENT) ==
-      cryptauth::SoftwareFeatureState::kEnabled;
-  device_sync_client_->AddObserver(this);
+  host_device_id_from_most_recent_update_ =
+      LoadHostDeviceIdFromEndOfPreviousSession();
+  host_status_provider_->AddObserver(this);
 }
 
-void AccountStatusChangeDelegateNotifierImpl::OnNewDevicesSynced() {
-  CheckForMultiDeviceEvents();
+void AccountStatusChangeDelegateNotifierImpl::OnHostStatusChange(
+    const HostStatusProvider::HostStatusWithDevice& host_status_with_device) {
+  CheckForMultiDeviceEvents(host_status_with_device);
 }
 
-void AccountStatusChangeDelegateNotifierImpl::CheckForMultiDeviceEvents() {
+void AccountStatusChangeDelegateNotifierImpl::CheckForMultiDeviceEvents(
+    const HostStatusProvider::HostStatusWithDevice& host_status_with_device) {
   if (!delegate()) {
     PA_LOG(INFO) << "AccountStatusChangeDelegateNotifierImpl::"
                  << "CheckForMultiDeviceEvents(): Tried to check for potential "
@@ -158,45 +137,34 @@
     return;
   }
 
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      device_sync_client_->GetSyncedDevices();
-
   // Track and update host info.
-  base::Optional<std::string> host_public_key_before_sync =
-      host_public_key_from_most_recent_sync_;
+  base::Optional<std::string> host_device_id_before_update =
+      host_device_id_from_most_recent_update_;
 
-  base::Optional<std::pair<std::string, std::string>> public_key_and_name =
-      GetHostPublicKeyAndName(device_ref_list);
-  if (public_key_and_name) {
-    host_public_key_from_most_recent_sync_ = public_key_and_name->first;
-    pref_service_->SetString(kHostPublicKeyFromMostRecentSyncPrefName,
-                             *host_public_key_from_most_recent_sync_);
+  // Check if a host has been set.
+  if (host_status_with_device.host_device()) {
+    host_device_id_from_most_recent_update_ =
+        host_status_with_device.host_device()->GetDeviceId();
+    pref_service_->SetString(
+        kHostDeviceIdFromMostRecentHostStatusUpdatePrefName,
+        *host_device_id_from_most_recent_update_);
   } else {
-    host_public_key_from_most_recent_sync_.reset();
+    // No host set.
+    host_device_id_from_most_recent_update_.reset();
   }
 
-  // Track and update local client info.
-  bool local_device_was_enabled_client_before_sync =
-      local_device_is_enabled_client_;
-  local_device_is_enabled_client_ =
-      device_sync_client_->GetLocalDeviceMetadata()->GetSoftwareFeatureState(
-          cryptauth::SoftwareFeature::BETTER_TOGETHER_CLIENT) ==
-      cryptauth::SoftwareFeatureState::kEnabled;
-
-  CheckForNewUserPotentialHostExistsEvent(device_ref_list);
-  if (public_key_and_name) {
-    CheckForExistingUserHostSwitchedEvent(host_public_key_before_sync,
-                                          public_key_and_name->second);
-  }
-  CheckForExistingUserChromebookAddedEvent(
-      local_device_was_enabled_client_before_sync);
+  CheckForNewUserPotentialHostExistsEvent(host_status_with_device);
+  CheckForExistingUserHostSwitchedEvent(host_status_with_device,
+                                        host_device_id_before_update);
+  CheckForExistingUserChromebookAddedEvent(host_device_id_before_update);
 }
 
 void AccountStatusChangeDelegateNotifierImpl::
     CheckForNewUserPotentialHostExistsEvent(
-        const cryptauth::RemoteDeviceRefList& device_ref_list) {
+        const HostStatusProvider::HostStatusWithDevice&
+            host_status_with_device) {
   // We only check for new user events if there is no enabled host.
-  if (host_public_key_from_most_recent_sync_)
+  if (host_device_id_from_most_recent_update_)
     return;
 
   // If the observer has been notified of this event before, the user is not
@@ -206,59 +174,45 @@
     return;
   }
 
-  for (const auto& device_ref : device_ref_list) {
-    if (device_ref.GetSoftwareFeatureState(
-            cryptauth::SoftwareFeature::BETTER_TOGETHER_HOST) !=
-        cryptauth::SoftwareFeatureState::kSupported) {
-      continue;
-    }
-
-    delegate()->OnPotentialHostExistsForNewUser();
-    pref_service_->SetInt64(kNewUserPotentialHostExistsPrefName,
-                            clock_->Now().ToJavaTime());
+  // kEligibleHostExistsButNoHostSet is the only HostStatus that can describe
+  // a new user.
+  if (host_status_with_device.host_status() !=
+      mojom::HostStatus::kEligibleHostExistsButNoHostSet) {
     return;
   }
+
+  delegate()->OnPotentialHostExistsForNewUser();
+  pref_service_->SetInt64(kNewUserPotentialHostExistsPrefName,
+                          clock_->Now().ToJavaTime());
 }
 
 void AccountStatusChangeDelegateNotifierImpl::
     CheckForExistingUserHostSwitchedEvent(
-        const base::Optional<std::string>& host_public_key_before_sync,
-        const std::string& new_host_device_name) {
-  // If the local device is not an enabled client, the account's new host is not
-  // yet the local device's new host.
-  if (!local_device_is_enabled_client_)
+        const HostStatusProvider::HostStatusWithDevice& host_status_with_device,
+        const base::Optional<std::string>& host_device_id_before_update) {
+  // The host switched event requires both a pre-update and a post-update host.
+  if (!host_device_id_from_most_recent_update_ ||
+      !host_device_id_before_update) {
     return;
-
-  // The host switched event requires both a pre-sync and a post-sync host.
-  if (!host_public_key_from_most_recent_sync_ || !host_public_key_before_sync)
-    return;
-
+  }
   // If the host stayed the same, there was no switch.
-  if (host_public_key_before_sync == host_public_key_from_most_recent_sync_)
+  if (*host_device_id_from_most_recent_update_ == *host_device_id_before_update)
     return;
 
-  delegate()->OnConnectedHostSwitchedForExistingUser(new_host_device_name);
+  delegate()->OnConnectedHostSwitchedForExistingUser(
+      host_status_with_device.host_device()->name());
   pref_service_->SetInt64(kExistingUserHostSwitchedPrefName,
                           clock_->Now().ToJavaTime());
 }
 
 void AccountStatusChangeDelegateNotifierImpl::
     CheckForExistingUserChromebookAddedEvent(
-        bool local_device_was_enabled_client_before_sync) {
-  // The chromebook added event requires that the local device changed its
-  // client status in the sync from not being enabled to being enabled.
-  if (!local_device_is_enabled_client_ ||
-      local_device_was_enabled_client_before_sync) {
+        const base::Optional<std::string>& host_device_id_before_update) {
+  // The Chromebook added event requires that a set host was found by the
+  // update, i.e. there was no host before the host status update but afterward
+  // there is a set host.
+  if (!host_device_id_from_most_recent_update_ || host_device_id_before_update)
     return;
-  }
-
-  // This event only applies if the user completed the setup flow on a different
-  // device.
-  if (setup_flow_completion_recorder_->GetCompletionTimestamp())
-    return;
-
-  // Without an enabled host, the local device cannot be an enabled client.
-  DCHECK(host_public_key_from_most_recent_sync_);
 
   delegate()->OnNewChromebookAddedForExistingUser();
   pref_service_->SetInt64(kExistingUserChromebookAddedPrefName,
@@ -266,12 +220,12 @@
 }
 
 base::Optional<std::string> AccountStatusChangeDelegateNotifierImpl::
-    LoadHostPublicKeyFromEndOfPreviousSession() {
-  std::string host_public_key_from_most_recent_sync =
-      pref_service_->GetString(kHostPublicKeyFromMostRecentSyncPrefName);
-  if (host_public_key_from_most_recent_sync.empty())
+    LoadHostDeviceIdFromEndOfPreviousSession() {
+  std::string host_device_id_from_most_recent_update = pref_service_->GetString(
+      kHostDeviceIdFromMostRecentHostStatusUpdatePrefName);
+  if (host_device_id_from_most_recent_update.empty())
     return base::nullopt;
-  return host_public_key_from_most_recent_sync;
+  return host_device_id_from_most_recent_update;
 }
 
 }  // namespace multidevice_setup
diff --git a/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.h b/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.h
index e01221c..150d2246 100644
--- a/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.h
+++ b/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.h
@@ -9,8 +9,8 @@
 #include <string>
 
 #include "base/macros.h"
-#include "chromeos/services/device_sync/public/cpp/device_sync_client.h"
 #include "chromeos/services/multidevice_setup/account_status_change_delegate_notifier.h"
+#include "chromeos/services/multidevice_setup/host_status_provider.h"
 #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
 
 class PrefRegistrySimple;
@@ -27,11 +27,11 @@
 class SetupFlowCompletionRecorder;
 
 // Concrete AccountStatusChangeDelegateNotifier implementation, which uses
-// DeviceSyncClient to check for account changes and PrefStore to track previous
-// notifications.
+// HostStatusProvider to check for account changes and PrefStore to track
+// previous notifications.
 class AccountStatusChangeDelegateNotifierImpl
     : public AccountStatusChangeDelegateNotifier,
-      public device_sync::DeviceSyncClient::Observer {
+      public HostStatusProvider::Observer {
  public:
   class Factory {
    public:
@@ -39,7 +39,7 @@
     static void SetFactoryForTesting(Factory* test_factory);
     virtual ~Factory();
     virtual std::unique_ptr<AccountStatusChangeDelegateNotifier> BuildInstance(
-        device_sync::DeviceSyncClient* device_sync_client,
+        HostStatusProvider* host_status_provider,
         PrefService* pref_service,
         SetupFlowCompletionRecorder* setup_flow_completion_recorder,
         base::Clock* clock);
@@ -62,10 +62,10 @@
   static const char kExistingUserHostSwitchedPrefName[];
   static const char kExistingUserChromebookAddedPrefName[];
 
-  static const char kHostPublicKeyFromMostRecentSyncPrefName[];
+  static const char kHostDeviceIdFromMostRecentHostStatusUpdatePrefName[];
 
   AccountStatusChangeDelegateNotifierImpl(
-      device_sync::DeviceSyncClient* device_sync_client,
+      HostStatusProvider* host_status_provider,
       PrefService* pref_service,
       SetupFlowCompletionRecorder* setup_flow_completion_recorder,
       base::Clock* clock);
@@ -73,28 +73,30 @@
   // AccountStatusChangeDelegateNotifier:
   void OnDelegateSet() override;
 
-  // device_sync::DeviceSyncClient::Observer:
-  void OnNewDevicesSynced() override;
+  // HostStatusProvider::Observer:
+  void OnHostStatusChange(const HostStatusProvider::HostStatusWithDevice&
+                              host_status_with_device) override;
 
-  void CheckForMultiDeviceEvents();
+  void CheckForMultiDeviceEvents(
+      const HostStatusProvider::HostStatusWithDevice& host_status_with_device);
 
   void CheckForNewUserPotentialHostExistsEvent(
-      const cryptauth::RemoteDeviceRefList&);
+      const HostStatusProvider::HostStatusWithDevice& host_status_with_device);
   void CheckForExistingUserHostSwitchedEvent(
-      const base::Optional<std::string>& host_public_key_before_sync,
-      const std::string& new_host_device_name);
+      const HostStatusProvider::HostStatusWithDevice& host_status_with_device,
+      const base::Optional<std::string>& host_device_id_before_update);
   void CheckForExistingUserChromebookAddedEvent(
-      bool local_device_was_enabled_client_before_sync);
+      const base::Optional<std::string>& host_device_id_before_update);
 
   // Loads data from previous session using PrefService.
-  base::Optional<std::string> LoadHostPublicKeyFromEndOfPreviousSession();
+  base::Optional<std::string> LoadHostDeviceIdFromEndOfPreviousSession();
 
-  // Set to base::nullopt if there was no enabled host in the most recent sync.
-  base::Optional<std::string> host_public_key_from_most_recent_sync_;
-  bool local_device_is_enabled_client_;
+  // Set to base::nullopt if there was no enabled host in the most recent
+  // host status update.
+  base::Optional<std::string> host_device_id_from_most_recent_update_;
 
   mojom::AccountStatusChangeDelegatePtr delegate_ptr_;
-  device_sync::DeviceSyncClient* device_sync_client_;
+  HostStatusProvider* host_status_provider_;
   PrefService* pref_service_;
   SetupFlowCompletionRecorder* setup_flow_completion_recorder_;
   base::Clock* clock_;
diff --git a/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl_unittest.cc b/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl_unittest.cc
index 347bc3c5..2e7aeb6 100644
--- a/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl_unittest.cc
+++ b/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl_unittest.cc
@@ -12,7 +12,9 @@
 #include "base/time/time.h"
 #include "chromeos/services/device_sync/public/cpp/fake_device_sync_client.h"
 #include "chromeos/services/multidevice_setup/fake_account_status_change_delegate.h"
+#include "chromeos/services/multidevice_setup/fake_host_status_provider.h"
 #include "chromeos/services/multidevice_setup/fake_setup_flow_completion_recorder.h"
+#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
 #include "components/cryptauth/remote_device_test_util.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -24,36 +26,20 @@
 namespace {
 
 const int64_t kTestTimeMillis = 1500000000000;
-constexpr const char* const kDummyKeys[] = {"publicKey0", "publicKey1",
-                                            "publicKey2"};
-const char kLocalDeviceKey[] = "publicKeyOfLocalDevice";
-
-cryptauth::RemoteDeviceRef BuildHostCandidate(
-    std::string public_key,
-    cryptauth::SoftwareFeatureState better_together_host_state) {
-  return cryptauth::RemoteDeviceRefBuilder()
-      .SetPublicKey(public_key)
-      .SetSoftwareFeatureState(cryptauth::SoftwareFeature::BETTER_TOGETHER_HOST,
-                               better_together_host_state)
-      .Build();
-}
-
-cryptauth::RemoteDeviceRef BuildLocalDevice() {
-  return cryptauth::RemoteDeviceRefBuilder()
-      .SetPublicKey(kLocalDeviceKey)
-      .SetSoftwareFeatureState(
-          cryptauth::SoftwareFeature::BETTER_TOGETHER_CLIENT,
-          cryptauth::SoftwareFeatureState::kSupported)
-      .Build();
-}
+const std::string kFakePhoneKey = "fake-phone-key";
+const std::string kFakePhoneName = "Phony Phone";
+const cryptauth::RemoteDeviceRef kFakePhone =
+    cryptauth::RemoteDeviceRefBuilder()
+        .SetPublicKey(kFakePhoneKey)
+        .SetName(kFakePhoneName)
+        .Build();
 
 }  // namespace
 
 class MultiDeviceSetupAccountStatusChangeDelegateNotifierTest
     : public testing::Test {
  protected:
-  MultiDeviceSetupAccountStatusChangeDelegateNotifierTest()
-      : local_device_(BuildLocalDevice()) {}
+  MultiDeviceSetupAccountStatusChangeDelegateNotifierTest() = default;
 
   ~MultiDeviceSetupAccountStatusChangeDelegateNotifierTest() override = default;
 
@@ -64,24 +50,29 @@
         test_pref_service_->registry());
 
     fake_delegate_ = std::make_unique<FakeAccountStatusChangeDelegate>();
-
-    fake_device_sync_client_ =
-        std::make_unique<device_sync::FakeDeviceSyncClient>();
+    fake_host_status_provider_ = std::make_unique<FakeHostStatusProvider>();
     test_clock_ = std::make_unique<base::SimpleTestClock>();
     fake_setup_flow_completion_recorder_ =
         std::make_unique<FakeSetupFlowCompletionRecorder>();
-
-    fake_device_sync_client_->set_local_device_metadata(local_device_);
     test_clock_->SetNow(base::Time::FromJavaTime(kTestTimeMillis));
   }
 
   void BuildAccountStatusChangeDelegateNotifier() {
     delegate_notifier_ =
         AccountStatusChangeDelegateNotifierImpl::Factory::Get()->BuildInstance(
-            fake_device_sync_client_.get(), test_pref_service_.get(),
+            fake_host_status_provider_.get(), test_pref_service_.get(),
             fake_setup_flow_completion_recorder_.get(), test_clock_.get());
   }
 
+  // Following HostStatusWithDevice contract, this sets the device to null when
+  // there is no set host (or the default kFakePhone otherwise).
+  void SetHostWithStatus(
+      mojom::HostStatus host_status,
+      const base::Optional<cryptauth::RemoteDeviceRef>& host_device) {
+    fake_host_status_provider_->SetHostWithStatus(host_status, host_device);
+    delegate_notifier_->FlushForTesting();
+  }
+
   void SetNewUserPotentialHostExistsTimestamp(int64_t timestamp) {
     test_pref_service_->SetInt64(AccountStatusChangeDelegateNotifierImpl::
                                      kNewUserPotentialHostExistsPrefName,
@@ -95,9 +86,12 @@
   }
 
   void SetHostFromPreviousSession(std::string old_host_key) {
-    test_pref_service_->SetString(AccountStatusChangeDelegateNotifierImpl::
-                                      kHostPublicKeyFromMostRecentSyncPrefName,
-                                  old_host_key);
+    std::string old_host_device_id =
+        cryptauth::RemoteDevice::GenerateDeviceId(old_host_key);
+    test_pref_service_->SetString(
+        AccountStatusChangeDelegateNotifierImpl::
+            kHostDeviceIdFromMostRecentHostStatusUpdatePrefName,
+        old_host_device_id);
   }
 
   void SetAccountStatusChangeDelegatePtr() {
@@ -106,55 +100,6 @@
     delegate_notifier_->FlushForTesting();
   }
 
-  void RecordSetupFlowCompletionAtEarlierTime(const base::Time& earlier_time) {
-    fake_setup_flow_completion_recorder_->set_current_time(earlier_time);
-
-    SetupFlowCompletionRecorder* derived_ptr =
-        static_cast<SetupFlowCompletionRecorder*>(
-            fake_setup_flow_completion_recorder_.get());
-    derived_ptr->RecordCompletion();
-  }
-
-  void NotifyNewDevicesSynced() {
-    fake_device_sync_client_->NotifyNewDevicesSynced();
-    delegate_notifier_->FlushForTesting();
-  }
-
-  // Represents setting preexisting devices on account and therefore does not
-  // trigger a notification.
-  void SetNonLocalSyncedDevices(
-      cryptauth::RemoteDeviceRefList* device_ref_list) {
-    // The local device should always be on the device list.
-    device_ref_list->push_back(local_device_);
-    fake_device_sync_client_->set_synced_devices(*device_ref_list);
-  }
-
-  void UpdateNonLocalSyncedDevices(
-      cryptauth::RemoteDeviceRefList* device_ref_list) {
-    SetNonLocalSyncedDevices(device_ref_list);
-    NotifyNewDevicesSynced();
-  }
-
-  // Setup to simulate a the situation when the local device is ready to be
-  // Better Together client enabled (i.e. enabling and syncing would trigger a
-  // Chromebook added event) with a single enabled host.
-  void PrepareToEnableLocalDeviceAsClient() {
-    cryptauth::RemoteDeviceRefList device_ref_list =
-        cryptauth::RemoteDeviceRefList{BuildHostCandidate(
-            kDummyKeys[0], cryptauth::SoftwareFeatureState::kEnabled)};
-    SetNonLocalSyncedDevices(&device_ref_list);
-    BuildAccountStatusChangeDelegateNotifier();
-  }
-
-  // If the account as an enabled host, the local device will enable its
-  // MultiDevice client feature in the background.
-  void EnableLocalDeviceAsClient() {
-    cryptauth::GetMutableRemoteDevice(local_device_)
-        ->software_features
-            [cryptauth::SoftwareFeature::BETTER_TOGETHER_CLIENT] =
-        cryptauth::SoftwareFeatureState::kEnabled;
-  }
-
   int64_t GetNewUserPotentialHostExistsTimestamp() {
     return test_pref_service_->GetInt64(
         AccountStatusChangeDelegateNotifierImpl::
@@ -174,11 +119,8 @@
  private:
   const base::test::ScopedTaskEnvironment scoped_task_environment_;
 
-  cryptauth::RemoteDeviceRef local_device_;
-
   std::unique_ptr<FakeAccountStatusChangeDelegate> fake_delegate_;
-
-  std::unique_ptr<device_sync::FakeDeviceSyncClient> fake_device_sync_client_;
+  std::unique_ptr<FakeHostStatusProvider> fake_host_status_provider_;
   std::unique_ptr<sync_preferences::TestingPrefServiceSyncable>
       test_pref_service_;
   std::unique_ptr<FakeSetupFlowCompletionRecorder>
@@ -192,295 +134,243 @@
 };
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
-       SetObserverWithSupportedHost) {
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{
-          BuildHostCandidate(kDummyKeys[0],
-                             cryptauth::SoftwareFeatureState::kNotSupported),
-          BuildHostCandidate(kDummyKeys[1],
-                             cryptauth::SoftwareFeatureState::kSupported)};
-  SetNonLocalSyncedDevices(&device_ref_list);
+       SetObserverWithPotentialHost) {
   BuildAccountStatusChangeDelegateNotifier();
-
-  SetAccountStatusChangeDelegatePtr();
-  EXPECT_EQ(1u, fake_delegate()->num_new_user_events_handled());
-  EXPECT_EQ(kTestTimeMillis, GetNewUserPotentialHostExistsTimestamp());
-}
-
-TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
-       SupportedHostAddedLater) {
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{BuildHostCandidate(
-          kDummyKeys[0], cryptauth::SoftwareFeatureState::kNotSupported)};
-  SetNonLocalSyncedDevices(&device_ref_list);
-  BuildAccountStatusChangeDelegateNotifier();
-
   SetAccountStatusChangeDelegatePtr();
   EXPECT_EQ(0u, fake_delegate()->num_new_user_events_handled());
   EXPECT_EQ(0u, GetNewUserPotentialHostExistsTimestamp());
 
-  device_ref_list = cryptauth::RemoteDeviceRefList{
-      BuildHostCandidate(kDummyKeys[0],
-                         cryptauth::SoftwareFeatureState::kNotSupported),
-      BuildHostCandidate(kDummyKeys[1],
-                         cryptauth::SoftwareFeatureState::kSupported)};
-  UpdateNonLocalSyncedDevices(&device_ref_list);
+  SetHostWithStatus(mojom::HostStatus::kEligibleHostExistsButNoHostSet,
+                    base::nullopt /* host_device */);
   EXPECT_EQ(1u, fake_delegate()->num_new_user_events_handled());
   EXPECT_EQ(kTestTimeMillis, GetNewUserPotentialHostExistsTimestamp());
 }
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
-       ExistingEnabledHostPreventsNewUserEvent) {
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{
-          BuildHostCandidate(kDummyKeys[0],
-                             cryptauth::SoftwareFeatureState::kNotSupported),
-          BuildHostCandidate(kDummyKeys[1],
-                             cryptauth::SoftwareFeatureState::kSupported),
-          BuildHostCandidate(kDummyKeys[2],
-                             cryptauth::SoftwareFeatureState::kEnabled)};
-  SetNonLocalSyncedDevices(&device_ref_list);
+       PotentialHostAddedLater) {
   BuildAccountStatusChangeDelegateNotifier();
-
   SetAccountStatusChangeDelegatePtr();
+  SetHostWithStatus(mojom::HostStatus::kNoEligibleHosts,
+                    base::nullopt /* host_device */);
+
   EXPECT_EQ(0u, fake_delegate()->num_new_user_events_handled());
+  EXPECT_EQ(0u, GetNewUserPotentialHostExistsTimestamp());
+
+  SetHostWithStatus(mojom::HostStatus::kEligibleHostExistsButNoHostSet,
+                    base::nullopt /* host_device */);
+  EXPECT_EQ(1u, fake_delegate()->num_new_user_events_handled());
+  EXPECT_EQ(kTestTimeMillis, GetNewUserPotentialHostExistsTimestamp());
+}
+
+TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
+       OnlyPotentialHostCausesNewUserEvent) {
+  BuildAccountStatusChangeDelegateNotifier();
+  SetAccountStatusChangeDelegatePtr();
+
+  SetHostWithStatus(mojom::HostStatus::kNoEligibleHosts,
+                    base::nullopt /* host_device */);
+  EXPECT_EQ(0u, fake_delegate()->num_new_user_events_handled());
+  EXPECT_EQ(0u, GetNewUserPotentialHostExistsTimestamp());
+
+  SetHostWithStatus(
+      mojom::HostStatus::kHostSetLocallyButWaitingForBackendConfirmation,
+      kFakePhone);
+  EXPECT_EQ(0u, fake_delegate()->num_new_user_events_handled());
+  EXPECT_EQ(0u, GetNewUserPotentialHostExistsTimestamp());
+
+  SetHostWithStatus(mojom::HostStatus::kHostSetButNotYetVerified, kFakePhone);
+  EXPECT_EQ(0u, fake_delegate()->num_new_user_events_handled());
+  EXPECT_EQ(0u, GetNewUserPotentialHostExistsTimestamp());
+
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
+  EXPECT_EQ(0u, fake_delegate()->num_new_user_events_handled());
+  EXPECT_EQ(0u, GetNewUserPotentialHostExistsTimestamp());
 }
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
        NoNewUserEventWithoutObserverSet) {
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{
-          BuildHostCandidate(kDummyKeys[0],
-                             cryptauth::SoftwareFeatureState::kNotSupported),
-          BuildHostCandidate(kDummyKeys[1],
-                             cryptauth::SoftwareFeatureState::kSupported)};
-  SetNonLocalSyncedDevices(&device_ref_list);
   BuildAccountStatusChangeDelegateNotifier();
-  // All conditions for new user event are now satisfied except for setting a
+  // All conditions for new user event are satisfied except for setting a
   // delegate.
+  SetHostWithStatus(mojom::HostStatus::kEligibleHostExistsButNoHostSet,
+                    base::nullopt /* host_device */);
 
-  // No delegate is set before the sync.
-  NotifyNewDevicesSynced();
   EXPECT_EQ(0u, fake_delegate()->num_new_user_events_handled());
 }
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
        OldTimestampInPreferencesPreventsNewUserFlow) {
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{
-          BuildHostCandidate(kDummyKeys[0],
-                             cryptauth::SoftwareFeatureState::kNotSupported),
-          BuildHostCandidate(kDummyKeys[1],
-                             cryptauth::SoftwareFeatureState::kSupported)};
-  SetNonLocalSyncedDevices(&device_ref_list);
   BuildAccountStatusChangeDelegateNotifier();
   int64_t earlier_test_time_millis = kTestTimeMillis / 2;
   SetNewUserPotentialHostExistsTimestamp(earlier_test_time_millis);
-
   SetAccountStatusChangeDelegatePtr();
+
+  SetHostWithStatus(mojom::HostStatus::kEligibleHostExistsButNoHostSet,
+                    base::nullopt /* host_device */);
   EXPECT_EQ(0u, fake_delegate()->num_new_user_events_handled());
   // Timestamp was not overwritten by clock.
   EXPECT_EQ(earlier_test_time_millis, GetNewUserPotentialHostExistsTimestamp());
 }
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
-       MultipleSyncsOnlyTriggerOneNewUserEvent) {
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{BuildHostCandidate(
-          kDummyKeys[0], cryptauth::SoftwareFeatureState::kSupported)};
-  SetNonLocalSyncedDevices(&device_ref_list);
-  BuildAccountStatusChangeDelegateNotifier();
-
-  SetAccountStatusChangeDelegatePtr();
-  EXPECT_EQ(1u, fake_delegate()->num_new_user_events_handled());
-
-  NotifyNewDevicesSynced();
-  EXPECT_EQ(1u, fake_delegate()->num_new_user_events_handled());
-
-  NotifyNewDevicesSynced();
-  EXPECT_EQ(1u, fake_delegate()->num_new_user_events_handled());
-}
-
-TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
        NotifiesObserverForHostSwitchEvents) {
-  const std::string initial_host_key = kDummyKeys[0];
-  const std::string alternative_host_key_1 = kDummyKeys[1];
-  const std::string alternative_host_key_2 = kDummyKeys[2];
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{
-          BuildHostCandidate(initial_host_key,
-                             cryptauth::SoftwareFeatureState::kEnabled),
-          BuildHostCandidate(alternative_host_key_1,
-                             cryptauth::SoftwareFeatureState::kSupported)};
-  SetNonLocalSyncedDevices(&device_ref_list);
   BuildAccountStatusChangeDelegateNotifier();
-  EnableLocalDeviceAsClient();
-
   SetAccountStatusChangeDelegatePtr();
   // Verify the delegate initializes to 0.
   EXPECT_EQ(0u,
             fake_delegate()->num_existing_user_host_switched_events_handled());
 
+  // Set initial host.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
+  // Host was set but has never been switched.
+  EXPECT_EQ(0u,
+            fake_delegate()->num_existing_user_host_switched_events_handled());
+
   // Switch hosts.
-  device_ref_list = cryptauth::RemoteDeviceRefList{
-      BuildHostCandidate(initial_host_key,
-                         cryptauth::SoftwareFeatureState::kSupported),
-      BuildHostCandidate(alternative_host_key_1,
-                         cryptauth::SoftwareFeatureState::kEnabled)};
-  UpdateNonLocalSyncedDevices(&device_ref_list);
+  SetHostWithStatus(mojom::HostStatus::kHostVerified,
+                    cryptauth::RemoteDeviceRefBuilder()
+                        .SetPublicKey(kFakePhoneKey + "#1")
+                        .SetName(kFakePhoneName + "#1")
+                        .Build());
   EXPECT_EQ(1u,
             fake_delegate()->num_existing_user_host_switched_events_handled());
 
-  // Adding and enabling a new host device (counts as a switch).
-  device_ref_list = cryptauth::RemoteDeviceRefList{
-      BuildHostCandidate(initial_host_key,
-                         cryptauth::SoftwareFeatureState::kSupported),
-      BuildHostCandidate(alternative_host_key_1,
-                         cryptauth::SoftwareFeatureState::kSupported),
-      BuildHostCandidate(alternative_host_key_2,
-                         cryptauth::SoftwareFeatureState::kEnabled)};
-  UpdateNonLocalSyncedDevices(&device_ref_list);
+  // Switch to another new host.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified,
+                    cryptauth::RemoteDeviceRefBuilder()
+                        .SetPublicKey(kFakePhoneKey + "#2")
+                        .SetName(kFakePhoneName + "#2")
+                        .Build());
   EXPECT_EQ(2u,
             fake_delegate()->num_existing_user_host_switched_events_handled());
 
-  // Removing new device and switching back to initial host.
-  device_ref_list = cryptauth::RemoteDeviceRefList{
-      BuildHostCandidate(initial_host_key,
-                         cryptauth::SoftwareFeatureState::kEnabled),
-      BuildHostCandidate(alternative_host_key_1,
-                         cryptauth::SoftwareFeatureState::kSupported)};
-  UpdateNonLocalSyncedDevices(&device_ref_list);
+  // Switch back to initial host.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
   EXPECT_EQ(3u,
             fake_delegate()->num_existing_user_host_switched_events_handled());
 }
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
-       HostSwitchedBetweenSessions) {
-  const std::string old_host_key = kDummyKeys[0];
-  const std::string new_host_key = kDummyKeys[1];
-  SetHostFromPreviousSession(old_host_key);
-  // Host switched between sessions.
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{BuildHostCandidate(
-          new_host_key, cryptauth::SoftwareFeatureState::kEnabled)};
-  SetNonLocalSyncedDevices(&device_ref_list);
+       SettingSameHostTriggersNoHostSwitchedEvent) {
   BuildAccountStatusChangeDelegateNotifier();
-  EnableLocalDeviceAsClient();
+  SetAccountStatusChangeDelegatePtr();
+  // Set initial host.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
+  // Set to host with identical information.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified,
+                    cryptauth::RemoteDeviceRefBuilder()
+                        .SetPublicKey(kFakePhoneKey)
+                        .SetName(kFakePhoneName)
+                        .Build());
+  EXPECT_EQ(0u,
+            fake_delegate()->num_existing_user_host_switched_events_handled());
+}
 
+TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
+       ChangingHostDevicesTriggersHostSwitchEventWhenHostNameIsUnchanged) {
+  BuildAccountStatusChangeDelegateNotifier();
+  SetAccountStatusChangeDelegatePtr();
+  // Set initial host.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
+  // Set to host with same name but different key.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified,
+                    cryptauth::RemoteDeviceRefBuilder()
+                        .SetPublicKey(kFakePhoneKey + "alternate")
+                        .SetName(kFakePhoneName)
+                        .Build());
+  EXPECT_EQ(1u,
+            fake_delegate()->num_existing_user_host_switched_events_handled());
+}
+
+TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
+       VerifyingHostTriggersNoHostSwtichEvent) {
+  BuildAccountStatusChangeDelegateNotifier();
+  SetAccountStatusChangeDelegatePtr();
+  // Set initial host but do not verify
+  SetHostWithStatus(mojom::HostStatus::kHostSetButNotYetVerified, kFakePhone);
+  // Verify host
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
+  EXPECT_EQ(0u,
+            fake_delegate()->num_existing_user_host_switched_events_handled());
+}
+
+TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
+       HostSwitchedBetweenSessions) {
+  SetHostFromPreviousSession(kFakePhoneKey + "-old");
+  BuildAccountStatusChangeDelegateNotifier();
+  // Host switched between sessions.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
   SetAccountStatusChangeDelegatePtr();
   EXPECT_EQ(1u,
             fake_delegate()->num_existing_user_host_switched_events_handled());
 }
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
-       NoHostSwitchedEventWithoutLocalDeviceClientEnabled) {
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{
-          BuildHostCandidate(kDummyKeys[0],
-                             cryptauth::SoftwareFeatureState::kEnabled),
-          BuildHostCandidate(kDummyKeys[1],
-                             cryptauth::SoftwareFeatureState::kSupported)};
-  SetNonLocalSyncedDevices(&device_ref_list);
-  BuildAccountStatusChangeDelegateNotifier();
-
-  SetAccountStatusChangeDelegatePtr();
-
-  // Switch hosts.
-  device_ref_list = cryptauth::RemoteDeviceRefList{
-      BuildHostCandidate(kDummyKeys[0],
-                         cryptauth::SoftwareFeatureState::kSupported),
-      BuildHostCandidate(kDummyKeys[1],
-                         cryptauth::SoftwareFeatureState::kEnabled)};
-  // All conditions for host switched event are now satisfied except for the
-  // local device's Better Together client feature enabled.
-
-  // No delegate is set before the update (which includes a sync).
-  UpdateNonLocalSyncedDevices(&device_ref_list);
-  EXPECT_EQ(0u,
-            fake_delegate()->num_existing_user_host_switched_events_handled());
-}
-
-TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
        NoHostSwitchedEventWithoutExistingHost) {
-  // No enabled host initially.
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{
-          BuildHostCandidate(kDummyKeys[0],
-                             cryptauth::SoftwareFeatureState::kSupported),
-          BuildHostCandidate(kDummyKeys[1],
-                             cryptauth::SoftwareFeatureState::kSupported)};
-  SetNonLocalSyncedDevices(&device_ref_list);
   BuildAccountStatusChangeDelegateNotifier();
-
   SetAccountStatusChangeDelegatePtr();
-
-  // Enable one of the host devices.
-  device_ref_list = cryptauth::RemoteDeviceRefList{
-      BuildHostCandidate(kDummyKeys[0],
-                         cryptauth::SoftwareFeatureState::kEnabled),
-      BuildHostCandidate(kDummyKeys[1],
-                         cryptauth::SoftwareFeatureState::kSupported)};
-  EnableLocalDeviceAsClient();
-  UpdateNonLocalSyncedDevices(&device_ref_list);
+  // No enabled host initially.
+  SetHostWithStatus(mojom::HostStatus::kEligibleHostExistsButNoHostSet,
+                    base::nullopt /* host_device */);
+  // Set host.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
   EXPECT_EQ(0u,
             fake_delegate()->num_existing_user_host_switched_events_handled());
 }
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
        NoHostSwitchedEventWithoutObserverSet) {
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{
-          BuildHostCandidate(kDummyKeys[0],
-                             cryptauth::SoftwareFeatureState::kEnabled),
-          BuildHostCandidate(kDummyKeys[1],
-                             cryptauth::SoftwareFeatureState::kSupported)};
-  SetNonLocalSyncedDevices(&device_ref_list);
   BuildAccountStatusChangeDelegateNotifier();
-  EnableLocalDeviceAsClient();
-
-  // Switch hosts.
-  device_ref_list = cryptauth::RemoteDeviceRefList{
-      BuildHostCandidate(kDummyKeys[0],
-                         cryptauth::SoftwareFeatureState::kSupported),
-      BuildHostCandidate(kDummyKeys[1],
-                         cryptauth::SoftwareFeatureState::kEnabled)};
-  // All conditions for host switched event are now satisfied except for setting
-  // an delegate.
-
-  // No delegate is set before the update (which includes a sync).
-  UpdateNonLocalSyncedDevices(&device_ref_list);
+  // Set initial host.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
+  // All conditions for host switched event are satisfied except for setting a
+  // delegate.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified,
+                    cryptauth::RemoteDeviceRefBuilder()
+                        .SetPublicKey(kFakePhoneKey + "alternate")
+                        .SetName(kFakePhoneName + "alternate")
+                        .Build());
   EXPECT_EQ(0u,
             fake_delegate()->num_existing_user_host_switched_events_handled());
 }
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
        NotifiesObserverForChromebookAddedEvents) {
-  PrepareToEnableLocalDeviceAsClient();
-  EnableLocalDeviceAsClient();
-
+  BuildAccountStatusChangeDelegateNotifier();
+  SetAccountStatusChangeDelegatePtr();
   // Verify the delegate initializes to 0.
   EXPECT_EQ(
       0u, fake_delegate()->num_existing_user_chromebook_added_events_handled());
 
-  SetAccountStatusChangeDelegatePtr();
+  // Host is set from another Chromebook while this one is logged in.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
   EXPECT_EQ(
       1u, fake_delegate()->num_existing_user_chromebook_added_events_handled());
+}
 
-  // Another sync should not trigger an additional chromebook added event.
-  NotifyNewDevicesSynced();
+TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
+       ChromebookAddedBetweenSessionsTriggersEvents) {
+  BuildAccountStatusChangeDelegateNotifier();
+  // Host is set before this Chromebook is logged in.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
+
+  SetAccountStatusChangeDelegatePtr();
   EXPECT_EQ(
       1u, fake_delegate()->num_existing_user_chromebook_added_events_handled());
 }
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
        OldTimestampInPreferencesDoesNotPreventChromebookAddedEvent) {
-  PrepareToEnableLocalDeviceAsClient();
-  EnableLocalDeviceAsClient();
-
   int64_t earlier_test_time_millis = kTestTimeMillis / 2;
   SetExistingUserChromebookAddedTimestamp(earlier_test_time_millis);
+  // Check timestamp was written.
+  EXPECT_EQ(earlier_test_time_millis,
+            GetExistingUserChromebookAddedTimestamp());
 
+  BuildAccountStatusChangeDelegateNotifier();
   SetAccountStatusChangeDelegatePtr();
+
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
   EXPECT_EQ(
       1u, fake_delegate()->num_existing_user_chromebook_added_events_handled());
   // Timestamp was overwritten by clock.
@@ -488,77 +378,13 @@
 }
 
 TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
-       ChromebookAddedEventRequiresLocalDeviceToEnableClientFeature) {
-  PrepareToEnableLocalDeviceAsClient();
-
-  // Triggers event check. Note that if the local device enabled the client
-  // feature, this would trigger a Chromebook added event.
-  SetAccountStatusChangeDelegatePtr();
-  EXPECT_EQ(
-      0u, fake_delegate()->num_existing_user_chromebook_added_events_handled());
-}
-
-TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
-       NoChromebookAddedEventIfDeviceWasUsedForUnifiedSetupFlow) {
-  PrepareToEnableLocalDeviceAsClient();
-  EnableLocalDeviceAsClient();
-
-  base::Time completion_time = base::Time::FromJavaTime(kTestTimeMillis / 2);
-  RecordSetupFlowCompletionAtEarlierTime(completion_time);
-
-  // Triggers event check. Note that if the setup flow completion had not been
-  // recorded, this would trigger a Chromebook added event.
-  SetAccountStatusChangeDelegatePtr();
-  EXPECT_EQ(
-      0u, fake_delegate()->num_existing_user_chromebook_added_events_handled());
-}
-
-TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
        NoChromebookAddedEventWithoutObserverSet) {
-  PrepareToEnableLocalDeviceAsClient();
-  EnableLocalDeviceAsClient();
-  // All conditions for chromebook added event are now satisfied except for
-  // setting a delegate.
-
-  // No delegate is set before the sync.
-  NotifyNewDevicesSynced();
-  EXPECT_EQ(
-      0u, fake_delegate()->num_existing_user_chromebook_added_events_handled());
-}
-
-TEST_F(MultiDeviceSetupAccountStatusChangeDelegateNotifierTest,
-       DeviceSyncDoesNotNotifyObserverOfDisconnectedHostsAndClients) {
-  cryptauth::RemoteDeviceRefList device_ref_list =
-      cryptauth::RemoteDeviceRefList{
-          BuildHostCandidate(kDummyKeys[0],
-                             cryptauth::SoftwareFeatureState::kEnabled),
-          BuildHostCandidate(kDummyKeys[1],
-                             cryptauth::SoftwareFeatureState::kSupported),
-          cryptauth::RemoteDeviceRefBuilder()
-              .SetPublicKey(kDummyKeys[2])
-              .SetSoftwareFeatureState(
-                  cryptauth::SoftwareFeature::BETTER_TOGETHER_CLIENT,
-                  cryptauth::SoftwareFeatureState::kEnabled)
-              .Build()};
-  SetNonLocalSyncedDevices(&device_ref_list);
-  EnableLocalDeviceAsClient();
   BuildAccountStatusChangeDelegateNotifier();
-
-  SetAccountStatusChangeDelegatePtr();
-
-  NotifyNewDevicesSynced();
+  // Triggers event check. Note that all conditions for Chromebook added event
+  // are satisfied except for setting a delegate.
+  SetHostWithStatus(mojom::HostStatus::kHostVerified, kFakePhone);
   EXPECT_EQ(
       0u, fake_delegate()->num_existing_user_chromebook_added_events_handled());
-  EXPECT_EQ(0u,
-            fake_delegate()->num_existing_user_host_switched_events_handled());
-
-  device_ref_list = cryptauth::RemoteDeviceRefList{};
-  UpdateNonLocalSyncedDevices(&device_ref_list);
-  // No new events caused by removing devices.
-  EXPECT_EQ(
-      0u, fake_delegate()->num_existing_user_chromebook_added_events_handled());
-  EXPECT_EQ(0u,
-            fake_delegate()->num_existing_user_host_switched_events_handled());
 }
 
 }  // namespace multidevice_setup
diff --git a/chromeos/services/multidevice_setup/multidevice_setup_impl.cc b/chromeos/services/multidevice_setup/multidevice_setup_impl.cc
index dc3a691..cf24736 100644
--- a/chromeos/services/multidevice_setup/multidevice_setup_impl.cc
+++ b/chromeos/services/multidevice_setup/multidevice_setup_impl.cc
@@ -98,7 +98,7 @@
               base::DefaultClock::GetInstance())),
       delegate_notifier_(
           AccountStatusChangeDelegateNotifierImpl::Factory::Get()
-              ->BuildInstance(device_sync_client,
+              ->BuildInstance(host_status_provider_.get(),
                               pref_service,
                               setup_flow_completion_recorder_.get(),
                               base::DefaultClock::GetInstance())),
diff --git a/chromeos/services/multidevice_setup/multidevice_setup_impl_unittest.cc b/chromeos/services/multidevice_setup/multidevice_setup_impl_unittest.cc
index 00419a6..33ce0a5 100644
--- a/chromeos/services/multidevice_setup/multidevice_setup_impl_unittest.cc
+++ b/chromeos/services/multidevice_setup/multidevice_setup_impl_unittest.cc
@@ -307,12 +307,12 @@
     : public AccountStatusChangeDelegateNotifierImpl::Factory {
  public:
   FakeAccountStatusChangeDelegateNotifierFactory(
-      device_sync::FakeDeviceSyncClient* expected_device_sync_client,
+      FakeHostStatusProviderFactory* fake_host_status_provider_factory,
       sync_preferences::TestingPrefServiceSyncable*
           expected_testing_pref_service,
       FakeSetupFlowCompletionRecorderFactory*
           fake_setup_flow_completion_recorder_factory)
-      : expected_device_sync_client_(expected_device_sync_client),
+      : fake_host_status_provider_factory_(fake_host_status_provider_factory),
         expected_testing_pref_service_(expected_testing_pref_service),
         fake_setup_flow_completion_recorder_factory_(
             fake_setup_flow_completion_recorder_factory) {}
@@ -324,12 +324,13 @@
  private:
   // AccountStatusChangeDelegateNotifierImpl::Factory:
   std::unique_ptr<AccountStatusChangeDelegateNotifier> BuildInstance(
-      device_sync::DeviceSyncClient* device_sync_client,
+      HostStatusProvider* host_status_provider,
       PrefService* pref_service,
       SetupFlowCompletionRecorder* setup_flow_completion_recorder,
       base::Clock* clock) override {
     EXPECT_FALSE(instance_);
-    EXPECT_EQ(expected_device_sync_client_, device_sync_client);
+    EXPECT_EQ(fake_host_status_provider_factory_->instance(),
+              host_status_provider);
     EXPECT_EQ(expected_testing_pref_service_, pref_service);
     EXPECT_EQ(fake_setup_flow_completion_recorder_factory_->instance(),
               setup_flow_completion_recorder);
@@ -339,7 +340,7 @@
     return instance;
   }
 
-  device_sync::FakeDeviceSyncClient* expected_device_sync_client_;
+  FakeHostStatusProviderFactory* fake_host_status_provider_factory_;
   sync_preferences::TestingPrefServiceSyncable* expected_testing_pref_service_;
   FakeSetupFlowCompletionRecorderFactory*
       fake_setup_flow_completion_recorder_factory_;
@@ -416,7 +417,7 @@
 
     fake_account_status_change_delegate_notifier_factory_ =
         std::make_unique<FakeAccountStatusChangeDelegateNotifierFactory>(
-            fake_device_sync_client_.get(), test_pref_service_.get(),
+            fake_host_status_provider_factory_.get(), test_pref_service_.get(),
             fake_setup_flow_completion_recorder_factory_.get());
     AccountStatusChangeDelegateNotifierImpl::Factory::SetFactoryForTesting(
         fake_account_status_change_delegate_notifier_factory_.get());
diff --git a/chromeos/services/multidevice_setup/public/cpp/android_sms_app_helper_delegate.h b/chromeos/services/multidevice_setup/public/cpp/android_sms_app_helper_delegate.h
index bbc658b..96fb7572 100644
--- a/chromeos/services/multidevice_setup/public/cpp/android_sms_app_helper_delegate.h
+++ b/chromeos/services/multidevice_setup/public/cpp/android_sms_app_helper_delegate.h
@@ -17,6 +17,9 @@
 
   // Installs the Messages for Web PWA. Handles retries and errors internally.
   virtual void InstallAndroidSmsApp() = 0;
+  // Launches the Messages for Web PWA if it's installed. Returns true if the
+  // app was launched successfully, false otherwise.
+  virtual bool LaunchAndroidSmsApp() = 0;
 
  protected:
   AndroidSmsAppHelperDelegate() = default;
diff --git a/chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.cc b/chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.cc
index 21cee19..df07759 100644
--- a/chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.cc
+++ b/chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.cc
@@ -23,6 +23,15 @@
   return has_installed_;
 }
 
+bool FakeAndroidSmsAppHelperDelegate::LaunchAndroidSmsApp() {
+  has_launched_ = true;
+  return true;
+}
+
+bool FakeAndroidSmsAppHelperDelegate::HasLaunchedApp() {
+  return has_launched_;
+}
+
 }  // namespace multidevice_setup
 
 }  // namespace chromeos
diff --git a/chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.h b/chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.h
index a5df4ce9..28be5e1 100644
--- a/chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.h
+++ b/chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.h
@@ -16,12 +16,15 @@
   FakeAndroidSmsAppHelperDelegate();
   ~FakeAndroidSmsAppHelperDelegate() override;
   bool HasInstalledApp();
+  bool HasLaunchedApp();
 
   // AndroidSmsAppHelperDelegate:
   void InstallAndroidSmsApp() override;
+  bool LaunchAndroidSmsApp() override;
 
  private:
   bool has_installed_ = false;
+  bool has_launched_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(FakeAndroidSmsAppHelperDelegate);
 };
diff --git a/chromeos/services/multidevice_setup/public/cpp/prefs.cc b/chromeos/services/multidevice_setup/public/cpp/prefs.cc
index e5ef5547..f8dab8977 100644
--- a/chromeos/services/multidevice_setup/public/cpp/prefs.cc
+++ b/chromeos/services/multidevice_setup/public/cpp/prefs.cc
@@ -24,7 +24,8 @@
     "multidevice_setup.suite_enabled";
 const char kInstantTetheringEnabledPrefName[] = "tether.enabled";
 const char kMessagesEnabledPrefName[] = "multidevice.sms_connect_enabled";
-const char kSmartLockEnabledPrefName[] = "easy_unlock.enabled";
+const char kSmartLockEnabledPrefName[] = "smart_lock.enabled";
+const char kSmartLockEnabledDeprecatedPrefName[] = "easy_unlock.enabled";
 
 void RegisterFeaturePrefs(PrefRegistrySimple* registry) {
   registry->RegisterBooleanPref(kInstantTetheringAllowedPrefName, true);
@@ -34,6 +35,7 @@
   registry->RegisterBooleanPref(kBetterTogetherSuiteEnabledPrefName, true);
   registry->RegisterBooleanPref(kInstantTetheringEnabledPrefName, true);
   registry->RegisterBooleanPref(kMessagesEnabledPrefName, true);
+  registry->RegisterBooleanPref(kSmartLockEnabledDeprecatedPrefName, true);
   registry->RegisterBooleanPref(kSmartLockEnabledPrefName, true);
 }
 
diff --git a/chromeos/services/multidevice_setup/public/cpp/prefs.h b/chromeos/services/multidevice_setup/public/cpp/prefs.h
index e6cff707..90a1043 100644
--- a/chromeos/services/multidevice_setup/public/cpp/prefs.h
+++ b/chromeos/services/multidevice_setup/public/cpp/prefs.h
@@ -27,6 +27,11 @@
 extern const char kMessagesEnabledPrefName[];
 extern const char kSmartLockEnabledPrefName[];
 
+// The old pref which controlled if Smart Lock was enabled, prior to the
+// introduction of MultiDeviceSetupService. It will be removed once old Smart
+// Lock code is fully deprecated.
+extern const char kSmartLockEnabledDeprecatedPrefName[];
+
 void RegisterFeaturePrefs(PrefRegistrySimple* registry);
 bool AreAnyMultiDeviceFeaturesAllowed(PrefService* pref_service);
 
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb
index eca68d46..8ee0c9f 100644
--- a/chromeos/strings/chromeos_strings_bn.xtb
+++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -1,4 +1,6 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="bn">
+<translation id="6674412557034343536">টাইমার থামান</translation>
+<translation id="8626219642120025691">টাইমারের কাজ হয়ে গেছে</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb
index c26c55a..5eaf858 100644
--- a/chromeos/strings/chromeos_strings_en-GB.xtb
+++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -1,6 +1,10 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="en-GB">
+<translation id="2083960536266308407">Nothing found on screen</translation>
+<translation id="5212543919916444558">I can't find anything on your screen that I can help with.
+Try tapping the mic to ask me anything.</translation>
 <translation id="6674412557034343536">stop timer</translation>
 <translation id="8626219642120025691">Timer finished</translation>
+<translation id="8898978413391960553">00:00s</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index b652ed0..4457d6f 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -1,4 +1,6 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="es-419">
+<translation id="6674412557034343536">detener temporizador</translation>
+<translation id="8626219642120025691">Temporizador listo</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb
index dfcc23d..a5a4cab 100644
--- a/chromeos/strings/chromeos_strings_pt-BR.xtb
+++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -2,5 +2,5 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-BR">
 <translation id="6674412557034343536">parar timer</translation>
-<translation id="8626219642120025691">Timer concluído</translation>
+<translation id="8626219642120025691">Timer finalizado</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chromeos/test/data/oobe_configuration/TestSkipUpdate.json b/chromeos/test/data/oobe_configuration/TestSkipUpdate.json
index 7432183..6f0164a 100644
--- a/chromeos/test/data/oobe_configuration/TestSkipUpdate.json
+++ b/chromeos/test/data/oobe_configuration/TestSkipUpdate.json
@@ -3,6 +3,6 @@
   "networkSelectGuid": "eth1_guid",
   "eulaAutoAccept": true,
   "eulaSendStatistics": true,
-  "updateSkip": true,
+  "updateSkipNonCritical": true,
   "wizardAutoEnroll": true
 }
\ No newline at end of file
diff --git a/components/autofill/content/renderer/password_form_conversion_utils.cc b/components/autofill/content/renderer/password_form_conversion_utils.cc
index 36ddc614..f10ad82 100644
--- a/components/autofill/content/renderer/password_form_conversion_utils.cc
+++ b/components/autofill/content/renderer/password_form_conversion_utils.cc
@@ -820,19 +820,6 @@
   }
   password_form->other_possible_usernames = std::move(other_possible_usernames);
 
-  // Report metrics.
-  if (!username_field) {
-    // To get a better idea on how password forms without a username field
-    // look like, report the total number of text and password fields.
-    UMA_HISTOGRAM_COUNTS_100(
-        "PasswordManager.EmptyUsernames.TextAndPasswordFieldCount",
-        layout_sequence.size());
-    // For comparison, also report the number of password fields.
-    UMA_HISTOGRAM_COUNTS_100(
-        "PasswordManager.EmptyUsernames.PasswordFieldCount",
-        std::count(layout_sequence.begin(), layout_sequence.end(), 'P'));
-  }
-
   password_form->origin = std::move(form_origin);
   password_form->signon_realm = GetSignOnRealm(password_form->origin);
   password_form->scheme = PasswordForm::SCHEME_HTML;
diff --git a/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc b/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc
index ab91cd1..0bea08e 100644
--- a/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc
+++ b/components/autofill/core/browser/webdata/autofill_sync_bridge_util.cc
@@ -115,10 +115,14 @@
 
 }  // namespace
 
+std::string GetBase64EncodedServerId(const std::string& server_id) {
+  std::string encoded_id;
+  base::Base64Encode(server_id, &encoded_id);
+  return encoded_id;
+}
+
 std::string GetSpecificsIdForEntryServerId(const std::string& server_id) {
-  std::string specifics_id;
-  base::Base64Encode(server_id, &specifics_id);
-  return specifics_id;
+  return GetBase64EncodedServerId(server_id);
 }
 
 std::string GetStorageKeyForSpecificsId(const std::string& specifics_id) {
diff --git a/components/autofill/core/browser/webdata/autofill_sync_bridge_util.h b/components/autofill/core/browser/webdata/autofill_sync_bridge_util.h
index cf6c8fa5..c4893d7f 100644
--- a/components/autofill/core/browser/webdata/autofill_sync_bridge_util.h
+++ b/components/autofill/core/browser/webdata/autofill_sync_bridge_util.h
@@ -18,6 +18,9 @@
 class CreditCard;
 struct PaymentsCustomerData;
 
+// Returns the specified |server_id| encoded in base 64.
+std::string GetBase64EncodedServerId(const std::string& server_id);
+
 // Returns the wallet specifics id for the specified |server_id|.
 std::string GetSpecificsIdForEntryServerId(const std::string& server_id);
 
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc
index 9bc109a..857c76e 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc
@@ -146,14 +146,34 @@
     return;
   }
 
+  // Convert all non base 64 strings so that they can be displayed properly.
   auto batch = std::make_unique<syncer::MutableDataBatch>();
   for (const std::unique_ptr<AutofillProfile>& entry : profiles) {
+    std::unique_ptr<EntityData> entity_data =
+        CreateEntityDataFromAutofillServerProfile(*entry);
+    sync_pb::WalletPostalAddress* wallet_address =
+        entity_data->specifics.mutable_autofill_wallet()->mutable_address();
+
+    wallet_address->set_id(GetBase64EncodedServerId(wallet_address->id()));
+
     batch->Put(GetStorageKeyForEntryServerId(entry->server_id()),
-               CreateEntityDataFromAutofillServerProfile(*entry));
+               std::move(entity_data));
   }
   for (const std::unique_ptr<CreditCard>& entry : cards) {
+    std::unique_ptr<EntityData> entity_data = CreateEntityDataFromCard(*entry);
+    sync_pb::WalletMaskedCreditCard* wallet_card =
+        entity_data->specifics.mutable_autofill_wallet()->mutable_masked_card();
+
+    wallet_card->set_id(GetBase64EncodedServerId(wallet_card->id()));
+    // The billing address id might refer to a local profile guid which doesn't
+    // need to be encoded.
+    if (!base::IsStringUTF8(wallet_card->billing_address_id())) {
+      wallet_card->set_billing_address_id(
+          GetBase64EncodedServerId(wallet_card->billing_address_id()));
+    }
+
     batch->Put(GetStorageKeyForEntryServerId(entry->server_id()),
-               CreateEntityDataFromCard(*entry));
+               std::move(entity_data));
   }
 
   if (customer_data) {
@@ -198,6 +218,37 @@
   return StopSyncResponse::kModelStillReadyToSync;
 }
 
+void AutofillWalletSyncBridge::GetAllDataForTesting(DataCallback callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  std::vector<std::unique_ptr<AutofillProfile>> profiles;
+  std::vector<std::unique_ptr<CreditCard>> cards;
+  std::unique_ptr<PaymentsCustomerData> customer_data;
+  if (!GetAutofillTable()->GetServerProfiles(&profiles) ||
+      !GetAutofillTable()->GetServerCreditCards(&cards) ||
+      !GetAutofillTable()->GetPaymentsCustomerData(&customer_data)) {
+    change_processor()->ReportError(
+        {FROM_HERE, "Failed to load entries from table."});
+    return;
+  }
+
+  auto batch = std::make_unique<syncer::MutableDataBatch>();
+  for (const std::unique_ptr<AutofillProfile>& entry : profiles) {
+    batch->Put(GetStorageKeyForEntryServerId(entry->server_id()),
+               CreateEntityDataFromAutofillServerProfile(*entry));
+  }
+  for (const std::unique_ptr<CreditCard>& entry : cards) {
+    batch->Put(GetStorageKeyForEntryServerId(entry->server_id()),
+               CreateEntityDataFromCard(*entry));
+  }
+
+  if (customer_data) {
+    batch->Put(GetStorageKeyForEntryServerId(customer_data->customer_id),
+               CreateEntityDataFromPaymentsCustomerData(*customer_data));
+  }
+  std::move(callback).Run(std::move(batch));
+}
+
 void AutofillWalletSyncBridge::SetSyncData(
     const syncer::EntityChangeList& entity_data) {
   bool wallet_data_changed = false;
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.h b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.h
index 2217cda0..b7a4837 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.h
+++ b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.h
@@ -67,6 +67,10 @@
       std::unique_ptr<syncer::MetadataChangeList> delete_metadata_change_list)
       override;
 
+  // Sends all Wallet Data to the |callback| and keeps all the strings in their
+  // original format.
+  void GetAllDataForTesting(DataCallback callback);
+
  private:
   struct AutofillWalletDiff {
     int items_added = 0;
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc
index 5fdc7834..3ff812d 100644
--- a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc
+++ b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc
@@ -243,7 +243,7 @@
     std::vector<AutofillWalletSpecifics> data;
     // Perform an async call synchronously for testing.
     base::RunLoop loop;
-    bridge()->GetAllDataForDebugging(base::BindLambdaForTesting(
+    bridge()->GetAllDataForTesting(base::BindLambdaForTesting(
         [&loop, &data](std::unique_ptr<DataBatch> batch) {
           ExtractAutofillWalletSpecificsFromDataBatch(std::move(batch), &data);
           loop.Quit();
diff --git a/components/content_settings/core/browser/BUILD.gn b/components/content_settings/core/browser/BUILD.gn
index 94eac10..6484333 100644
--- a/components/content_settings/core/browser/BUILD.gn
+++ b/components/content_settings/core/browser/BUILD.gn
@@ -3,9 +3,10 @@
 # found in the LICENSE file.
 
 import("//build/config/features.gni")
+import("//build/config/jumbo.gni")
 import("//ppapi/buildflags/buildflags.gni")
 
-static_library("browser") {
+jumbo_static_library("browser") {
   sources = [
     "content_settings_default_provider.cc",
     "content_settings_default_provider.h",
@@ -67,7 +68,7 @@
   ]
 }
 
-source_set("unit_tests") {
+jumbo_source_set("unit_tests") {
   testonly = true
   sources = [
     "content_settings_ephemeral_provider_unittest.cc",
diff --git a/components/content_settings/core/browser/website_settings_info.cc b/components/content_settings/core/browser/website_settings_info.cc
index a6872b32..6f1e7c8f 100644
--- a/components/content_settings/core/browser/website_settings_info.cc
+++ b/components/content_settings/core/browser/website_settings_info.cc
@@ -17,7 +17,7 @@
 const char kPrefPrefix[] = "profile.content_settings.exceptions.";
 const char kDefaultPrefPrefix[] = "profile.default_content_setting_values.";
 
-std::string GetPrefName(const std::string& name, const char* prefix) {
+std::string GetPreferenceName(const std::string& name, const char* prefix) {
   std::string pref_name = name;
   base::ReplaceChars(pref_name, "-", "_", &pref_name);
   return std::string(prefix).append(pref_name);
@@ -37,8 +37,8 @@
     IncognitoBehavior incognito_behavior)
     : type_(type),
       name_(name),
-      pref_name_(GetPrefName(name, kPrefPrefix)),
-      default_value_pref_name_(GetPrefName(name, kDefaultPrefPrefix)),
+      pref_name_(GetPreferenceName(name, kPrefPrefix)),
+      default_value_pref_name_(GetPreferenceName(name, kDefaultPrefPrefix)),
       initial_default_value_(std::move(initial_default_value)),
       sync_status_(sync_status),
       lossy_status_(lossy_status),
diff --git a/components/content_settings/core/common/BUILD.gn b/components/content_settings/core/common/BUILD.gn
index b706236..f396acdb2 100644
--- a/components/content_settings/core/common/BUILD.gn
+++ b/components/content_settings/core/common/BUILD.gn
@@ -2,9 +2,10 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/config/jumbo.gni")
 import("//mojo/public/tools/bindings/mojom.gni")
 
-static_library("common") {
+jumbo_static_library("common") {
   sources = [
     "content_settings.cc",
     "content_settings.h",
@@ -34,7 +35,7 @@
   ]
 }
 
-source_set("unit_tests") {
+jumbo_source_set("unit_tests") {
   testonly = true
   sources = [
     "content_settings_pattern_parser_unittest.cc",
diff --git a/components/content_settings/core/test/BUILD.gn b/components/content_settings/core/test/BUILD.gn
index 8a7cb043..4ef24cd 100644
--- a/components/content_settings/core/test/BUILD.gn
+++ b/components/content_settings/core/test/BUILD.gn
@@ -2,7 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-static_library("test_support") {
+import("//build/config/jumbo.gni")
+
+jumbo_static_library("test_support") {
   testonly = true
   sources = [
     "content_settings_mock_provider.cc",
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc
index f8fb87b..40176e9e 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc
@@ -38,6 +38,7 @@
       lofi_policy_received_(false),
       lofi_received_(false),
       black_listed_(false),
+      was_cached_data_reduction_proxy_response_(false),
       effective_connection_type_(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN),
       connection_type_(net::NetworkChangeNotifier::CONNECTION_UNKNOWN),
       request_info_(std::vector<DataReductionProxyData::RequestInfo>()) {}
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h
index c6ab7978..998fff81 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h
@@ -107,6 +107,16 @@
     client_lofi_requested_ = client_lofi_requested;
   }
 
+  // This response was fetched from cache, but the original request used DRP.
+  bool was_cached_data_reduction_proxy_response() const {
+    return was_cached_data_reduction_proxy_response_;
+  }
+  void set_was_cached_data_reduction_proxy_response(
+      bool was_cached_data_reduction_proxy_response) {
+    was_cached_data_reduction_proxy_response_ =
+        was_cached_data_reduction_proxy_response;
+  }
+
   // The session key used for this request. Only set for main frame requests.
   std::string session_key() const { return session_key_; }
   void set_session_key(const std::string& session_key) {
@@ -188,6 +198,7 @@
   // Whether the DataReductionProxy was used for this request or navigation.
   // Also true if the user is the holdback experiment, and the request would
   // otherwise be eligible to use the proxy.
+  // Cached responses are not considered to have used DRP.
   bool used_data_reduction_proxy_;
 
   // Whether server Lo-Fi was requested for this request or navigation. True if
@@ -213,6 +224,9 @@
   // Whether the blacklist prevented a preview.
   bool black_listed_;
 
+  // This response was fetched from cache, but the original request used DRP.
+  bool was_cached_data_reduction_proxy_response_;
+
   // The session key used for this request or navigation.
   std::string session_key_;
 
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc
index be62e0ef..1d16419 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc
@@ -462,13 +462,6 @@
   }
 }
 
-void DataReductionProxyIOData::SetPreviewsDecider(
-    previews::PreviewsDecider* previews_decider) {
-  DCHECK(io_task_runner_->BelongsToCurrentThread());
-  DCHECK(previews_decider);
-  previews_decider_ = previews_decider;
-}
-
 void DataReductionProxyIOData::UpdateProxyRequestHeaders(
     net::HttpRequestHeaders headers) {
   ui_task_runner_->PostTask(
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h
index 199ba0b..650acba 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h
@@ -85,8 +85,6 @@
   virtual void SetDataReductionProxyService(
       base::WeakPtr<DataReductionProxyService> data_reduction_proxy_service);
 
-  void SetPreviewsDecider(previews::PreviewsDecider* previews_decider);
-
   // Creates an interceptor suitable for following the Data Reduction Proxy
   // bypass protocol.
   std::unique_ptr<net::URLRequestInterceptor> CreateInterceptor();
@@ -229,10 +227,6 @@
     resource_type_provider_ = std::move(resource_type_provider);
   }
 
-  previews::PreviewsDecider* previews_decider() const {
-    return previews_decider_;
-  }
-
   // The production channel of this build.
   std::string channel() const { return channel_; }
 
@@ -319,10 +313,6 @@
   // Observes pageload events and records per host data use.
   std::unique_ptr<DataReductionProxyDataUseObserver> data_use_observer_;
 
-  // Previews IO data that is owned by Profile IO data. Deleted at the same time
-  // as |this|.
-  previews::PreviewsDecider* previews_decider_;
-
   // Whether the Data Reduction Proxy has been enabled or not by the user. In
   // practice, this can be overridden by the command line.
   bool enabled_;
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
index 1260f35..a6521e9 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
@@ -514,6 +514,14 @@
       original_response_headers->IsRedirect(nullptr))
     return;
 
+  if (request->was_cached() && request->url().SchemeIsHTTPOrHTTPS() &&
+      !request->url().SchemeIsCryptographic() &&
+      original_response_headers->HasHeader(chrome_proxy_header())) {
+    DataReductionProxyData* data =
+        DataReductionProxyData::GetDataAndCreateIfNecessary(request);
+    data->set_was_cached_data_reduction_proxy_response(true);
+  }
+
   switch (ParseResponseTransform(*original_response_headers)) {
     case TRANSFORM_LITE_PAGE:
       DataReductionProxyData::GetDataAndCreateIfNecessary(request)
diff --git a/components/drive/chromeos/default_corpus_change_list_loader.cc b/components/drive/chromeos/default_corpus_change_list_loader.cc
index ed287aa..68f83e43 100644
--- a/components/drive/chromeos/default_corpus_change_list_loader.cc
+++ b/components/drive/chromeos/default_corpus_change_list_loader.cc
@@ -40,7 +40,8 @@
   directory_loader_ = std::make_unique<DirectoryLoader>(
       logger_, blocking_task_runner_.get(), resource_metadata_, scheduler_,
       root_folder_id_loader_.get(), start_page_token_loader_.get(),
-      loader_controller_, util::GetDriveMyDriveRootPath());
+      loader_controller_, util::GetDriveMyDriveRootPath(),
+      util::kTeamDriveIdDefaultCorpus);
 
   team_drive_list_loader_ = std::make_unique<TeamDriveListLoader>(
       logger_, blocking_task_runner_.get(), resource_metadata, scheduler_,
diff --git a/components/drive/chromeos/directory_loader.cc b/components/drive/chromeos/directory_loader.cc
index 02f9898..328f2e9 100644
--- a/components/drive/chromeos/directory_loader.cc
+++ b/components/drive/chromeos/directory_loader.cc
@@ -18,6 +18,7 @@
 #include "base/time/time.h"
 #include "components/drive/chromeos/change_list_loader_observer.h"
 #include "components/drive/chromeos/change_list_processor.h"
+#include "components/drive/chromeos/drive_file_util.h"
 #include "components/drive/chromeos/loader_controller.h"
 #include "components/drive/chromeos/resource_metadata.h"
 #include "components/drive/chromeos/root_folder_id_loader.h"
@@ -39,6 +40,7 @@
 
 FileError CheckLocalState(ResourceMetadata* resource_metadata,
                           const base::FilePath& root_entry_path,
+                          const std::string& team_drive_id,
                           const std::string& root_folder_id,
                           const std::string& local_id,
                           ResourceEntry* entry,
@@ -64,7 +66,7 @@
     return error;
 
   // Get the local start page token..
-  return resource_metadata->GetStartPageToken(start_page_token);
+  return GetStartPageToken(resource_metadata, team_drive_id, start_page_token);
 }
 
 FileError UpdateStartPageToken(ResourceMetadata* resource_metadata,
@@ -94,7 +96,8 @@
 }  // namespace
 
 struct DirectoryLoader::ReadDirectoryCallbackState {
-  ReadDirectoryCallbackState(ReadDirectoryEntriesCallback entries_callback)
+  explicit ReadDirectoryCallbackState(
+      ReadDirectoryEntriesCallback entries_callback)
       : entries_callback(std::move(entries_callback)) {}
 
   ReadDirectoryEntriesCallback entries_callback;
@@ -213,7 +216,8 @@
     RootFolderIdLoader* root_folder_id_loader,
     StartPageTokenLoader* start_page_token_loader,
     LoaderController* loader_controller,
-    const base::FilePath& root_entry_path)
+    const base::FilePath& root_entry_path,
+    const std::string& team_drive_id)
     : logger_(logger),
       blocking_task_runner_(blocking_task_runner),
       resource_metadata_(resource_metadata),
@@ -222,6 +226,7 @@
       start_page_token_loader_(start_page_token_loader),
       loader_controller_(loader_controller),
       root_entry_path_(root_entry_path),
+      team_drive_id_(team_drive_id),
       weak_ptr_factory_(this) {}
 
 DirectoryLoader::~DirectoryLoader() = default;
@@ -369,7 +374,8 @@
   base::PostTaskAndReplyWithResult(
       blocking_task_runner_.get(), FROM_HERE,
       base::BindOnce(&CheckLocalState, resource_metadata_, root_entry_path_,
-                     root_folder_id, local_id, entry, local_start_page_token),
+                     team_drive_id_, root_folder_id, local_id, entry,
+                     local_start_page_token),
       base::BindOnce(&DirectoryLoader::ReadDirectoryAfterCheckLocalState,
                      weak_ptr_factory_.GetWeakPtr(),
                      start_page_token->start_page_token(), local_id,
diff --git a/components/drive/chromeos/directory_loader.h b/components/drive/chromeos/directory_loader.h
index b1b25886..262107e0 100644
--- a/components/drive/chromeos/directory_loader.h
+++ b/components/drive/chromeos/directory_loader.h
@@ -52,7 +52,8 @@
                   RootFolderIdLoader* root_folder_id_loader,
                   StartPageTokenLoader* start_page_token_loader,
                   LoaderController* apply_task_controller,
-                  const base::FilePath& root_entry_path);
+                  const base::FilePath& root_entry_path,
+                  const std::string& team_drive_id);
   ~DirectoryLoader();
 
   // Adds and removes the observer.
@@ -151,6 +152,10 @@
   // drive root entry.
   const base::FilePath root_entry_path_;
 
+  // The team drive id for this directory loader. Used to retrieve the start
+  // page token when performing a fast fetch.
+  const std::string team_drive_id_;
+
   THREAD_CHECKER(thread_checker_);
 
   // Note: This should remain the last member so it'll be destroyed and
diff --git a/components/drive/chromeos/team_drive_change_list_loader.cc b/components/drive/chromeos/team_drive_change_list_loader.cc
index 8230166..5ee76bf5 100644
--- a/components/drive/chromeos/team_drive_change_list_loader.cc
+++ b/components/drive/chromeos/team_drive_change_list_loader.cc
@@ -59,7 +59,7 @@
   directory_loader_ = std::make_unique<DirectoryLoader>(
       logger, blocking_task_runner, resource_metadata, scheduler,
       root_folder_id_loader_.get(), start_page_token_loader_.get(),
-      apply_task_controller, root_entry_path_);
+      apply_task_controller, root_entry_path_, team_drive_id);
   directory_loader_->AddObserver(this);
 }
 
diff --git a/components/drive/directory_loader_unittest.cc b/components/drive/directory_loader_unittest.cc
index ab127a91..fd2ab8d 100644
--- a/components/drive/directory_loader_unittest.cc
+++ b/components/drive/directory_loader_unittest.cc
@@ -19,6 +19,7 @@
 #include "components/drive/chromeos/file_cache.h"
 #include "components/drive/chromeos/loader_controller.h"
 #include "components/drive/chromeos/resource_metadata.h"
+#include "components/drive/chromeos/root_folder_id_loader.h"
 #include "components/drive/chromeos/start_page_token_loader.h"
 #include "components/drive/event_logger.h"
 #include "components/drive/file_system_core_util.h"
@@ -69,6 +70,19 @@
   out_entries->insert(out_entries->end(), entries->begin(), entries->end());
 }
 
+class FakeRootFolderIdLoader : public RootFolderIdLoader {
+ public:
+  explicit FakeRootFolderIdLoader(const std::string& root_folder_id)
+      : root_folder_id_(root_folder_id) {}
+
+  void GetRootFolderId(const RootFolderIdCallback& callback) override {
+    callback.Run(FILE_ERROR_OK, root_folder_id_);
+  }
+
+ private:
+  const std::string root_folder_id_;
+};
+
 }  // namespace
 
 class DirectoryLoaderTest : public testing::Test {
@@ -111,7 +125,8 @@
         logger_.get(), base::ThreadTaskRunnerHandle::Get().get(),
         metadata_.get(), scheduler_.get(), root_folder_id_loader_.get(),
         start_page_token_loader_.get(), loader_controller_.get(),
-        util::GetDriveMyDriveRootPath());
+        util::GetDriveMyDriveRootPath(),
+        drive::util::kTeamDriveIdDefaultCorpus);
   }
 
   // Adds a new file to the root directory of the service.
@@ -131,6 +146,35 @@
     return entry;
   }
 
+  // Creates a ResourceEntry for a directory with explicitly set resource_id.
+  ResourceEntry CreateDirectoryEntryWithResourceId(
+      const std::string& title,
+      const std::string& resource_id,
+      const std::string& parent_local_id) {
+    ResourceEntry entry;
+    entry.set_title(title);
+    entry.set_resource_id(resource_id);
+    entry.set_parent_local_id(parent_local_id);
+    entry.mutable_file_info()->set_is_directory(true);
+    entry.mutable_directory_specific_info()->set_start_page_token("0");
+    return entry;
+  }
+
+  void AddTeamDriveRootEntry(const std::string& team_drive_id,
+                             const std::string& team_drive_name) {
+    std::string local_id;
+    ASSERT_EQ(
+        FILE_ERROR_OK,
+        metadata_->GetIdByPath(util::GetDriveTeamDrivesRootPath(), &local_id));
+
+    std::string root_local_id = local_id;
+    ASSERT_EQ(
+        FILE_ERROR_OK,
+        metadata_->AddEntry(CreateDirectoryEntryWithResourceId(
+                                team_drive_name, team_drive_id, root_local_id),
+                            &local_id));
+  }
+
   content::TestBrowserThreadBundle thread_bundle_;
   base::ScopedTempDir temp_dir_;
   std::unique_ptr<TestingPrefServiceSimple> pref_service_;
@@ -258,5 +302,46 @@
       util::GetDriveMyDriveRootPath()));
 }
 
+TEST_F(DirectoryLoaderTest, TeamDrive) {
+  constexpr char kTeamDriveId[] = "team_drive_id";
+  constexpr char kTeamDriveName[] = "Team Drive";
+  constexpr char kTeamDriveStartPageToken[] = "12345";
+  const base::FilePath team_drive_path =
+      util::GetDriveTeamDrivesRootPath().AppendASCII(kTeamDriveName);
+
+  auto fake_root_folder_id_loader =
+      std::make_unique<FakeRootFolderIdLoader>(kTeamDriveId);
+  auto start_page_token_loader =
+      std::make_unique<StartPageTokenLoader>(kTeamDriveId, scheduler_.get());
+  auto local_directory_loader = std::make_unique<DirectoryLoader>(
+      logger_.get(), base::ThreadTaskRunnerHandle::Get().get(), metadata_.get(),
+      scheduler_.get(), fake_root_folder_id_loader.get(),
+      start_page_token_loader.get(), loader_controller_.get(), team_drive_path,
+      kTeamDriveId);
+
+  AddTeamDriveRootEntry(kTeamDriveId, kTeamDriveName);
+
+  drive_service_->AddTeamDrive(kTeamDriveId, kTeamDriveName,
+                               kTeamDriveStartPageToken);
+
+  FileError error = FILE_ERROR_FAILED;
+  ResourceEntryVector entries;
+
+  local_directory_loader->ReadDirectory(
+      team_drive_path, base::Bind(&AccumulateReadDirectoryResult, &entries),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(FILE_ERROR_OK, error);
+  EXPECT_EQ(1, drive_service_->start_page_token_load_count());
+  EXPECT_EQ(1, drive_service_->directory_load_count());
+
+  // If we checked the folder, we should see that it's start page token has been
+  // updated.
+  ResourceEntry entry;
+  EXPECT_EQ(FILE_ERROR_OK,
+            metadata_->GetResourceEntryByPath(team_drive_path, &entry));
+  EXPECT_EQ(kTeamDriveStartPageToken,
+            entry.directory_specific_info().start_page_token());
+}
 }  // namespace internal
 }  // namespace drive
diff --git a/components/guest_view/renderer/guest_view_container_dispatcher.h b/components/guest_view/renderer/guest_view_container_dispatcher.h
index 4c19da14..f3ed251 100644
--- a/components/guest_view/renderer/guest_view_container_dispatcher.h
+++ b/components/guest_view/renderer/guest_view_container_dispatcher.h
@@ -21,10 +21,10 @@
   // Returns true if |message| is handled for a GuestViewContainer.
   virtual bool HandlesMessage(const IPC::Message& message);
 
- private:
   // content::RenderThreadObserver implementation.
   bool OnControlMessageReceived(const IPC::Message& message) override;
 
+ private:
   DISALLOW_COPY_AND_ASSIGN(GuestViewContainerDispatcher);
 };
 
diff --git a/components/mirroring/service/BUILD.gn b/components/mirroring/service/BUILD.gn
index 5e9edc0..227a7537 100644
--- a/components/mirroring/service/BUILD.gn
+++ b/components/mirroring/service/BUILD.gn
@@ -55,12 +55,15 @@
     "//components/mirroring/mojom:service",
     "//components/version_info",
     "//crypto",
+    "//gpu/config",
     "//media",
     "//media/capture:capture_base",
     "//media/capture/mojom:video_capture",
     "//media/cast:common",
     "//media/cast:net",
     "//media/cast:sender",
+    "//media/gpu",
+    "//media/mojo/clients",
     "//media/mojo/common:common",
     "//media/mojo/interfaces",
     "//media/mojo/interfaces:remoting",
@@ -70,6 +73,8 @@
     "//services/network/public/cpp",
     "//services/network/public/mojom",
     "//services/service_manager/public/cpp:cpp",
+    "//services/ws/public/cpp/gpu",
+    "//ui/base",
     "//ui/gfx",
   ]
 
@@ -113,6 +118,7 @@
     "//net",
     "//services/network:test_support",
     "//services/network/public/mojom",
+    "//services/ws/public/cpp/gpu",
     "//testing/gmock",
     "//testing/gtest",
   ]
diff --git a/components/mirroring/service/DEPS b/components/mirroring/service/DEPS
index 45482e5..ae980f9 100644
--- a/components/mirroring/service/DEPS
+++ b/components/mirroring/service/DEPS
@@ -4,8 +4,12 @@
   "+components/mirroring/service",
   "+components/version_info",
   "+crypto",
+  "+gpu/config",
+  "+gpu/ipc/client",
   "+net",
   "+services/network/public",
   "+services/network/test",
   "+services/service_manager",
+  "+services/ws/public",
+  "+ui/base",
 ]
diff --git a/components/mirroring/service/manifest.json b/components/mirroring/service/manifest.json
index d852cbae..882edee 100644
--- a/components/mirroring/service/manifest.json
+++ b/components/mirroring/service/manifest.json
@@ -4,6 +4,10 @@
   "display_name": "Mirroring Service",
   "interface_provider_specs": {
     "service_manager:connector": {
+      "requires": {
+        "content_browser": [ "gpu_client" ],
+        "ui": [ "gpu_client" ]
+      },
       "provides": {
         "mirroring": [
           "mirroring.mojom.MirroringService"
diff --git a/components/mirroring/service/mirroring_service.cc b/components/mirroring/service/mirroring_service.cc
index 6ed96c8..62ad213 100644
--- a/components/mirroring/service/mirroring_service.cc
+++ b/components/mirroring/service/mirroring_service.cc
@@ -8,10 +8,14 @@
 #include "components/mirroring/service/session.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/service_manager/public/cpp/service_context_ref.h"
+#include "services/ws/public/cpp/gpu/gpu.h"
+#include "ui/base/ui_base_features.h"
 
 namespace mirroring {
 
-MirroringService::MirroringService() {
+MirroringService::MirroringService(
+    scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
+    : io_task_runner_(std::move(io_task_runner)) {
   registry_.AddInterface<mojom::MirroringService>(
       base::BindRepeating(&MirroringService::Create, base::Unretained(this)));
 }
@@ -55,10 +59,17 @@
                              mojom::CastMessageChannelPtr outbound_channel,
                              mojom::CastMessageChannelRequest inbound_channel) {
   session_.reset();  // Stops the current session if active.
+  std::unique_ptr<ws::Gpu> gpu = nullptr;
+  if (params->type != mojom::SessionType::AUDIO_ONLY) {
+    gpu = ws::Gpu::Create(
+        context()->connector(),
+        features::IsUsingWindowService() ? "ui" : "content_browser",
+        io_task_runner_);
+  }
   session_ = std::make_unique<Session>(
       std::move(params), max_resolution, std::move(observer),
       std::move(resource_provider), std::move(outbound_channel),
-      std::move(inbound_channel));
+      std::move(inbound_channel), std::move(gpu));
 }
 
 }  // namespace mirroring
diff --git a/components/mirroring/service/mirroring_service.h b/components/mirroring/service/mirroring_service.h
index 532f1c8..55ae130 100644
--- a/components/mirroring/service/mirroring_service.h
+++ b/components/mirroring/service/mirroring_service.h
@@ -24,7 +24,8 @@
     : public service_manager::Service,
       public mojom::MirroringService {
  public:
-  MirroringService();
+  explicit MirroringService(
+      scoped_refptr<base::SingleThreadTaskRunner> io_task_runner);
   ~MirroringService() override;
 
  private:
@@ -46,6 +47,7 @@
              mojom::CastMessageChannelPtr outbound_channel,
              mojom::CastMessageChannelRequest inbound_channel) override;
 
+  const scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
   std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_;
   service_manager::BinderRegistry registry_;
   mojo::BindingSet<mojom::MirroringService> bindings_;
diff --git a/components/mirroring/service/session.cc b/components/mirroring/service/session.cc
index d70ecd9..2f4be743 100644
--- a/components/mirroring/service/session.cc
+++ b/components/mirroring/service/session.cc
@@ -27,16 +27,21 @@
 #include "components/mirroring/service/udp_socket_client.h"
 #include "components/mirroring/service/video_capture_client.h"
 #include "crypto/random.h"
+#include "gpu/config/gpu_feature_info.h"
+#include "gpu/ipc/client/gpu_channel_host.h"
 #include "media/audio/audio_input_device.h"
 #include "media/base/audio_capturer_source.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/cast/net/cast_transport.h"
 #include "media/cast/sender/audio_sender.h"
 #include "media/cast/sender/video_sender.h"
+#include "media/gpu/gpu_video_accelerator_util.h"
+#include "media/mojo/clients/mojo_video_encode_accelerator.h"
 #include "media/video/video_encode_accelerator.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "net/base/ip_endpoint.h"
+#include "services/ws/public/cpp/gpu/gpu.h"
 
 using media::cast::FrameSenderConfig;
 using media::cast::RtpPayloadType;
@@ -371,7 +376,8 @@
                  mojom::SessionObserverPtr observer,
                  mojom::ResourceProviderPtr resource_provider,
                  mojom::CastMessageChannelPtr outbound_channel,
-                 mojom::CastMessageChannelRequest inbound_channel)
+                 mojom::CastMessageChannelRequest inbound_channel,
+                 std::unique_ptr<ws::Gpu> gpu)
     : session_params_(*session_params),
       state_(MIRRORING),
       observer_(std::move(observer)),
@@ -380,6 +386,8 @@
                           std::move(inbound_channel),
                           base::BindRepeating(&Session::OnResponseParsingError,
                                               base::Unretained(this))),
+      gpu_(std::move(gpu)),
+      gpu_channel_host_(nullptr),
       weak_factory_(this) {
   DCHECK(resource_provider_);
   mirror_settings_.SetResolutionContraints(max_resolution.width(),
@@ -410,6 +418,22 @@
       kMaxCrashReportBytes, session_params_.receiver_address,
       std::move(session_tags), std::move(url_loader_factory));
 
+  if (gpu_) {
+    gpu_channel_host_ = gpu_->EstablishGpuChannelSync();
+    if (gpu_channel_host_ &&
+        gpu_channel_host_->gpu_feature_info().status_values
+                [gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE] ==
+            gpu::kGpuFeatureStatusEnabled) {
+      supported_profiles_ = gpu_channel_host_->gpu_info()
+                                .video_encode_accelerator_supported_profiles;
+    }
+  }
+  if (supported_profiles_.empty()) {
+    // HW encoding is not supported.
+    gpu_channel_host_ = nullptr;
+    gpu_.reset();
+  }
+
   CreateAndSendOffer();
 }
 
@@ -463,6 +487,8 @@
   video_capture_client_.reset();
   media_remoter_.reset();
   resource_provider_.reset();
+  gpu_channel_host_ = nullptr;
+  gpu_.reset();
   if (observer_) {
     observer_->DidStop();
     observer_.reset();
@@ -499,17 +525,27 @@
 
 media::VideoEncodeAccelerator::SupportedProfiles
 Session::GetSupportedVeaProfiles() {
-  // TODO(xjz): Establish GPU channel and query for the supported profiles.
-  return media::VideoEncodeAccelerator::SupportedProfiles();
+  return media::GpuVideoAcceleratorUtil::ConvertGpuToMediaEncodeProfiles(
+      supported_profiles_);
 }
 
 void Session::CreateVideoEncodeAccelerator(
     const media::cast::ReceiveVideoEncodeAcceleratorCallback& callback) {
-  DVLOG(1) << __func__;
-  // TODO(xjz): Establish GPU channel and create the
-  // media::MojoVideoEncodeAccelerator with the gpu info.
-  if (!callback.is_null())
-    callback.Run(video_encode_thread_, nullptr);
+  if (callback.is_null())
+    return;
+  std::unique_ptr<media::VideoEncodeAccelerator> mojo_vea;
+  if (gpu_ && gpu_channel_host_ && !supported_profiles_.empty()) {
+    if (!vea_provider_) {
+      gpu_->CreateVideoEncodeAcceleratorProvider(
+          mojo::MakeRequest(&vea_provider_));
+    }
+    media::mojom::VideoEncodeAcceleratorPtr vea;
+    vea_provider_->CreateVideoEncodeAccelerator(mojo::MakeRequest(&vea));
+    // std::make_unique doesn't work to create a unique pointer of the subclass.
+    mojo_vea.reset(new media::MojoVideoEncodeAccelerator(std::move(vea),
+                                                         supported_profiles_));
+  }
+  callback.Run(video_encode_thread_, std::move(mojo_vea));
 }
 
 void Session::CreateVideoEncodeMemory(
diff --git a/components/mirroring/service/session.h b/components/mirroring/service/session.h
index ecb266e8..7ceef26d 100644
--- a/components/mirroring/service/session.h
+++ b/components/mirroring/service/session.h
@@ -19,19 +19,26 @@
 #include "components/mirroring/service/rtp_stream.h"
 #include "components/mirroring/service/session_monitor.h"
 #include "components/mirroring/service/wifi_status_monitor.h"
+#include "gpu/config/gpu_info.h"
 #include "media/cast/cast_environment.h"
 #include "media/cast/net/cast_transport_defines.h"
+#include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
 
 namespace media {
-
 class AudioInputDevice;
-
 namespace cast {
 class CastTransport;
 }  // namespace cast
-
 }  // namespace media
 
+namespace gpu {
+class GpuChannelHost;
+}  // namespace gpu
+
+namespace ws {
+class Gpu;
+}  // namespace ws
+
 namespace mirroring {
 
 struct ReceiverResponse;
@@ -54,7 +61,8 @@
           mojom::SessionObserverPtr observer,
           mojom::ResourceProviderPtr resource_provider,
           mojom::CastMessageChannelPtr outbound_channel,
-          mojom::CastMessageChannelRequest inbound_channel);
+          mojom::CastMessageChannelRequest inbound_channel,
+          std::unique_ptr<ws::Gpu> gpu);
 
   ~Session() override;
 
@@ -164,6 +172,10 @@
   std::unique_ptr<AudioCapturingCallback> audio_capturing_callback_;
   scoped_refptr<media::AudioInputDevice> audio_input_device_;
   std::unique_ptr<MediaRemoter> media_remoter_;
+  std::unique_ptr<ws::Gpu> gpu_;
+  scoped_refptr<gpu::GpuChannelHost> gpu_channel_host_;
+  gpu::VideoEncodeAcceleratorSupportedProfiles supported_profiles_;
+  media::mojom::VideoEncodeAcceleratorProviderPtr vea_provider_;
 
   base::WeakPtrFactory<Session> weak_factory_;
 };
diff --git a/components/mirroring/service/session_unittest.cc b/components/mirroring/service/session_unittest.cc
index ffe38d2..72bd6d5 100644
--- a/components/mirroring/service/session_unittest.cc
+++ b/components/mirroring/service/session_unittest.cc
@@ -21,6 +21,7 @@
 #include "media/cast/test/utility/net_utility.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "net/base/ip_address.h"
+#include "services/ws/public/cpp/gpu/gpu.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -208,7 +209,8 @@
     session_ = std::make_unique<Session>(
         std::move(session_params), gfx::Size(1920, 1080),
         std::move(session_observer_ptr), std::move(resource_provider_ptr),
-        std::move(outbound_channel_ptr), mojo::MakeRequest(&inbound_channel_));
+        std::move(outbound_channel_ptr), mojo::MakeRequest(&inbound_channel_),
+        nullptr);
     scoped_task_environment_.RunUntilIdle();
     Mock::VerifyAndClear(this);
   }
diff --git a/components/mirroring/service/video_capture_client.cc b/components/mirroring/service/video_capture_client.cc
index 071e4d4..0a83d4e 100644
--- a/components/mirroring/service/video_capture_client.cc
+++ b/components/mirroring/service/video_capture_client.cc
@@ -92,6 +92,7 @@
     case media::mojom::VideoCaptureState::STOPPED:
     case media::mojom::VideoCaptureState::ENDED:
       client_buffers_.clear();
+      mapped_buffers_.clear();
       weak_factory_.InvalidateWeakPtrs();
       error_callback_.Reset();
       frame_deliver_callback_.Reset();
@@ -106,12 +107,13 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DVLOG(3) << __func__ << ": buffer_id=" << buffer_id;
 
-  if (!buffer_handle->is_read_only_shmem_region()) {
+  if (!buffer_handle->is_read_only_shmem_region() &&
+      !buffer_handle->is_shared_buffer_handle()) {
     NOTIMPLEMENTED();
     return;
   }
-  const auto insert_result = client_buffers_.emplace(std::make_pair(
-      buffer_id, std::move(buffer_handle->get_read_only_shmem_region())));
+  const auto insert_result = client_buffers_.emplace(
+      std::make_pair(buffer_id, std::move(buffer_handle)));
   DCHECK(insert_result.second);
 }
 
@@ -160,29 +162,65 @@
     LOG(DFATAL) << "Ignoring OnBufferReady() for unknown buffer.";
     return;
   }
-
-  base::ReadOnlySharedMemoryMapping mapping = buffer_iter->second.Map();
-  const size_t frame_allocation_size =
-      media::VideoFrame::AllocationSize(info->pixel_format, info->coded_size);
   scoped_refptr<media::VideoFrame> frame;
-  if (mapping.IsValid() && mapping.size() >= frame_allocation_size) {
+  BufferFinishedCallback buffer_finished_callback;
+  if (buffer_iter->second->is_shared_buffer_handle()) {
+    // TODO(https://crbug.com/843117): Remove this case after migrating
+    // media::VideoCaptureDeviceClient to the new shared memory API.
+    auto mapping_iter = mapped_buffers_.find(buffer_id);
+    const size_t buffer_size =
+        media::VideoFrame::AllocationSize(info->pixel_format, info->coded_size);
+    if (mapping_iter != mapped_buffers_.end() &&
+        buffer_size > mapping_iter->second.second) {
+      // Unmaps shared memory for too-small region.
+      mapped_buffers_.erase(mapping_iter);
+      mapping_iter = mapped_buffers_.end();
+    }
+    if (mapping_iter == mapped_buffers_.end()) {
+      mojo::ScopedSharedBufferMapping mapping =
+          buffer_iter->second->get_shared_buffer_handle()->Map(buffer_size);
+      if (!mapping) {
+        video_capture_host_->ReleaseBuffer(kDeviceId, buffer_id, -1.0);
+        return;
+      }
+      mapping_iter =
+          mapped_buffers_
+              .emplace(std::make_pair(
+                  buffer_id, MappingAndSize(std::move(mapping), buffer_size)))
+              .first;
+    }
+    const auto& buffer = mapping_iter->second;
     frame = media::VideoFrame::WrapExternalData(
         info->pixel_format, info->coded_size, info->visible_rect,
         info->visible_rect.size(),
-        const_cast<uint8_t*>(static_cast<const uint8_t*>(mapping.memory())),
-        frame_allocation_size, info->timestamp);
+        reinterpret_cast<uint8_t*>(buffer.first.get()), buffer.second,
+        info->timestamp);
+    buffer_finished_callback = media::BindToCurrentLoop(base::BindOnce(
+        &VideoCaptureClient::OnClientBufferFinished, weak_factory_.GetWeakPtr(),
+        buffer_id, base::ReadOnlySharedMemoryMapping()));
+  } else {
+    base::ReadOnlySharedMemoryMapping mapping =
+        buffer_iter->second->get_read_only_shmem_region().Map();
+    const size_t frame_allocation_size =
+        media::VideoFrame::AllocationSize(info->pixel_format, info->coded_size);
+    if (mapping.IsValid() && mapping.size() >= frame_allocation_size) {
+      frame = media::VideoFrame::WrapExternalData(
+          info->pixel_format, info->coded_size, info->visible_rect,
+          info->visible_rect.size(),
+          const_cast<uint8_t*>(static_cast<const uint8_t*>(mapping.memory())),
+          frame_allocation_size, info->timestamp);
+    }
+    buffer_finished_callback = media::BindToCurrentLoop(base::BindOnce(
+        &VideoCaptureClient::OnClientBufferFinished, weak_factory_.GetWeakPtr(),
+        buffer_id, std::move(mapping)));
   }
+
   if (!frame) {
     LOG(DFATAL) << "Unable to wrap shared memory mapping.";
     video_capture_host_->ReleaseBuffer(kDeviceId, buffer_id, -1.0);
     OnStateChanged(media::mojom::VideoCaptureState::FAILED);
     return;
   }
-
-  BufferFinishedCallback buffer_finished_callback =
-      media::BindToCurrentLoop(base::BindOnce(
-          &VideoCaptureClient::OnClientBufferFinished,
-          weak_factory_.GetWeakPtr(), buffer_id, std::move(mapping)));
   frame->AddDestructionObserver(
       base::BindOnce(&VideoCaptureClient::DidFinishConsumingFrame,
                      frame->metadata(), std::move(buffer_finished_callback)));
@@ -200,6 +238,9 @@
   const auto& buffer_iter = client_buffers_.find(buffer_id);
   if (buffer_iter != client_buffers_.end())
     client_buffers_.erase(buffer_iter);
+  const auto& mapping_iter = mapped_buffers_.find(buffer_id);
+  if (mapping_iter != mapped_buffers_.end())
+    mapped_buffers_.erase(mapping_iter);
 }
 
 void VideoCaptureClient::OnClientBufferFinished(
@@ -211,6 +252,7 @@
 
   // Buffer was already destroyed.
   if (client_buffers_.find(buffer_id) == client_buffers_.end()) {
+    DCHECK(mapped_buffers_.find(buffer_id) == mapped_buffers_.end());
     return;
   }
 
diff --git a/components/mirroring/service/video_capture_client.h b/components/mirroring/service/video_capture_client.h
index 9950591..6ba33fa 100644
--- a/components/mirroring/service/video_capture_client.h
+++ b/components/mirroring/service/video_capture_client.h
@@ -78,8 +78,11 @@
 
   mojo::Binding<media::mojom::VideoCaptureObserver> binding_;
 
+  // TODO(https://crbug.com/843117): Store the
+  // base::ReadOnlySharedMemoryRegion instead after migrating the
+  // media::VideoCaptureDeviceClient to the new shared memory API.
   using ClientBufferMap =
-      base::flat_map<int32_t, base::ReadOnlySharedMemoryRegion>;
+      base::flat_map<int32_t, media::mojom::VideoBufferHandlePtr>;
   // Stores the buffer handler on OnBufferCreated(). |buffer_id| is the key.
   ClientBufferMap client_buffers_;
 
@@ -90,6 +93,15 @@
   // The callback to deliver the received frame.
   FrameDeliverCallback frame_deliver_callback_;
 
+  // TODO(https://crbug.com/843117): Remove the MappingMap after migrating
+  // media::VideoCaptureDeviceClient to the new shared memory API.
+  using MappingAndSize = std::pair<mojo::ScopedSharedBufferMapping, uint32_t>;
+  using MappingMap = base::flat_map<int32_t, MappingAndSize>;
+  // Stores the mapped buffers and their size. Each buffer is added the first
+  // time the mapping is done or a larger size is requested.
+  // |buffer_id| is the key to this map.
+  MappingMap mapped_buffers_;
+
   SEQUENCE_CHECKER(sequence_checker_);
 
   base::WeakPtrFactory<VideoCaptureClient> weak_factory_;
diff --git a/components/mirroring/service/video_capture_client_unittest.cc b/components/mirroring/service/video_capture_client_unittest.cc
index f1698ff..babb7f6 100644
--- a/components/mirroring/service/video_capture_client_unittest.cc
+++ b/components/mirroring/service/video_capture_client_unittest.cc
@@ -23,6 +23,8 @@
 
 namespace {
 
+constexpr double kUtilization = 0.6;
+
 media::mojom::VideoFrameInfoPtr GetVideoFrameInfo(const gfx::Size& size) {
   media::VideoFrameMetadata metadata;
   metadata.SetDouble(media::VideoFrameMetadata::FRAME_RATE, 30);
@@ -36,7 +38,8 @@
 
 }  // namespace
 
-class VideoCaptureClientTest : public ::testing::Test {
+class VideoCaptureClientTest : public ::testing::Test,
+                               public ::testing::WithParamInterface<bool> {
  public:
   VideoCaptureClientTest() {
     media::mojom::VideoCaptureHostPtr host;
@@ -60,72 +63,80 @@
   MOCK_METHOD1(OnFrameReceived, void(const gfx::Size&));
   void OnFrameReady(scoped_refptr<media::VideoFrame> video_frame) {
     video_frame->metadata()->SetDouble(
-        media::VideoFrameMetadata::RESOURCE_UTILIZATION, 0.6);
+        media::VideoFrameMetadata::RESOURCE_UTILIZATION, kUtilization);
     OnFrameReceived(video_frame->coded_size());
   }
 
  protected:
-  base::test::ScopedTaskEnvironment scoped_task_environment_;
-  std::unique_ptr<FakeVideoCaptureHost> host_impl_;
-  std::unique_ptr<VideoCaptureClient> client_;
-};
-
-TEST_F(VideoCaptureClientTest, Basic) {
-  base::MockCallback<base::OnceClosure> error_cb;
-  EXPECT_CALL(error_cb, Run()).Times(0);
-  {
+  void StartCapturing() {
+    EXPECT_CALL(error_cb_, Run()).Times(0);
     base::RunLoop run_loop;
     // Expect to call RequestRefreshFrame() after capturing started.
     EXPECT_CALL(*host_impl_, RequestRefreshFrame(_))
         .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
     client_->Start(base::BindRepeating(&VideoCaptureClientTest::OnFrameReady,
                                        base::Unretained(this)),
-                   error_cb.Get());
+                   error_cb_.Get());
     run_loop.Run();
+    scoped_task_environment_.RunUntilIdle();
   }
-  scoped_task_environment_.RunUntilIdle();
 
-  client_->OnNewBuffer(
-      0, media::mojom::VideoBufferHandle::NewReadOnlyShmemRegion(
-             mojo::CreateReadOnlySharedMemoryRegion(100000).region));
-  scoped_task_environment_.RunUntilIdle();
-  {
-    base::RunLoop run_loop;
-    // Expect to receive one frame.
-    EXPECT_CALL(*this, OnFrameReceived(gfx::Size(128, 64))).Times(1);
-    // Expect to return the buffer after the frame is consumed.
-    EXPECT_CALL(*host_impl_, ReleaseBuffer(_, 0, 0.6))
-        .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-    client_->OnBufferReady(0, GetVideoFrameInfo(gfx::Size(128, 64)));
-    run_loop.Run();
+  void OnNewBuffer(int buffer_id, int buffer_size) {
+    EXPECT_CALL(error_cb_, Run()).Times(0);
+    const bool use_shared_buffer = GetParam();
+    if (use_shared_buffer) {
+      client_->OnNewBuffer(
+          buffer_id, media::mojom::VideoBufferHandle::NewSharedBufferHandle(
+                         mojo::SharedBufferHandle::Create(buffer_size)));
+    } else {
+      client_->OnNewBuffer(
+          buffer_id,
+          media::mojom::VideoBufferHandle::NewReadOnlyShmemRegion(
+              mojo::CreateReadOnlySharedMemoryRegion(buffer_size).region));
+    }
+    scoped_task_environment_.RunUntilIdle();
   }
-  scoped_task_environment_.RunUntilIdle();
 
-  // Received a smaller size video frame in the same buffer.
-  {
+  void OnBufferReady(int buffer_id, const gfx::Size& frame_size) {
+    EXPECT_CALL(error_cb_, Run()).Times(0);
     base::RunLoop run_loop;
-    // Expect to receive one frame.
-    EXPECT_CALL(*this, OnFrameReceived(gfx::Size(64, 32))).Times(1);
-    // Expect to return the buffer after the frame is consumed.
-    EXPECT_CALL(*host_impl_, ReleaseBuffer(_, 0, 0.6))
+    // Expects to receive one frame.
+    EXPECT_CALL(*this, OnFrameReceived(frame_size)).Times(1);
+    // Expects to return the buffer after the frame is consumed.
+    EXPECT_CALL(*host_impl_, ReleaseBuffer(_, 0, kUtilization))
         .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-    client_->OnBufferReady(0, GetVideoFrameInfo(gfx::Size(64, 32)));
+    client_->OnBufferReady(buffer_id, GetVideoFrameInfo(frame_size));
     run_loop.Run();
+    scoped_task_environment_.RunUntilIdle();
   }
-  scoped_task_environment_.RunUntilIdle();
 
-  // Received a larger size video frame in the same buffer.
-  {
-    base::RunLoop run_loop;
-    // Expect to receive one frame.
-    EXPECT_CALL(*this, OnFrameReceived(gfx::Size(320, 180))).Times(1);
-    // Expect to return the buffer after the frame is consumed.
-    EXPECT_CALL(*host_impl_, ReleaseBuffer(_, 0, 0.6))
-        .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-    client_->OnBufferReady(0, GetVideoFrameInfo(gfx::Size(320, 180)));
-    run_loop.Run();
-  }
-  scoped_task_environment_.RunUntilIdle();
+ private:
+  base::test::ScopedTaskEnvironment scoped_task_environment_;
+  base::MockCallback<base::OnceClosure> error_cb_;
+  std::unique_ptr<FakeVideoCaptureHost> host_impl_;
+  std::unique_ptr<VideoCaptureClient> client_;
+
+  DISALLOW_COPY_AND_ASSIGN(VideoCaptureClientTest);
+};
+
+TEST_P(VideoCaptureClientTest, Basic) {
+  StartCapturing();
+
+  // A new buffer is created.
+  OnNewBuffer(0, 100000);
+
+  // One captured frame is ready. Expects to receive the frame.
+  OnBufferReady(0, gfx::Size(126, 64));
+
+  // A smaller size video frame is received in the same buffer.
+  OnBufferReady(0, gfx::Size(64, 32));
+
+  // A larger size video frame is received in the same buffer.
+  OnBufferReady(0, gfx::Size(320, 180));
 }
 
+INSTANTIATE_TEST_CASE_P(,
+                        VideoCaptureClientTest,
+                        ::testing::Values(true, false));
+
 }  // namespace mirroring
diff --git a/components/nux/email/email_handler.cc b/components/nux/email/email_handler.cc
index b613d32..3fdf737d 100644
--- a/components/nux/email/email_handler.cc
+++ b/components/nux/email/email_handler.cc
@@ -77,6 +77,11 @@
   web_ui()->RegisterMessageCallback(
       "addEmails", base::BindRepeating(&EmailHandler::HandleAddEmails,
                                        base::Unretained(this)));
+
+  web_ui()->RegisterMessageCallback(
+      "toggleBookmarkBar",
+      base::BindRepeating(&EmailHandler::HandleToggleBookmarkBar,
+                          base::Unretained(this)));
 }
 
 void EmailHandler::HandleRejectEmails(const base::ListValue* args) {
@@ -115,16 +120,6 @@
     }
   }
 
-  // Enable bookmark bar.
-  prefs_->SetBoolean(bookmarks::prefs::kShowBookmarkBar, true);
-
-  // Show bookmark bubble.
-  /* TODO(hcarmona): Show promo bubble.
-  ShowPromoDelegate::CreatePromoDelegate(
-      IDS_NUX_EMAIL_DESCRIPTION_PROMO_BUBBLE)
-      ->ShowForNode(bookmark_model_->bookmark_bar_node()->GetChild(0));
-  */
-
   /* TODO(hcarmona): Add histograms and uncomment this code.
   UMA_HISTOGRAM_ENUMERATION(kEmailInteractionHistogram,
                             EmailInteraction::kGetStarted,
@@ -132,7 +127,14 @@
   */
 }
 
-void EmailHandler::AddSources(content::WebUIDataSource* html_source) {
+void EmailHandler::HandleToggleBookmarkBar(const base::ListValue* args) {
+  bool show = false;
+  CHECK(args->GetBoolean(0, &show));
+  prefs_->SetBoolean(bookmarks::prefs::kShowBookmarkBar, show);
+}
+
+void EmailHandler::AddSources(content::WebUIDataSource* html_source,
+                              PrefService* prefs) {
   // Localized strings.
   html_source->AddLocalizedString("noThanks", IDS_NO_THANKS);
   html_source->AddLocalizedString("getStarted", IDS_NUX_EMAIL_GET_STARTED);
@@ -173,6 +175,9 @@
     html_source->AddString("email_url_" + std::to_string(i), kEmail[i].url);
   }
   html_source->AddInteger("email_count", (int)EmailProviders::kCount);
+  html_source->AddBoolean(
+      "bookmark_bar_shown",
+      prefs->GetBoolean(bookmarks::prefs::kShowBookmarkBar));
   html_source->SetJsonPath("strings.js");
 }
 
diff --git a/components/nux/email/email_handler.h b/components/nux/email/email_handler.h
index 16ff9c9..1a1f2ab 100644
--- a/components/nux/email/email_handler.h
+++ b/components/nux/email/email_handler.h
@@ -49,9 +49,11 @@
   // Callbacks for JS APIs.
   void HandleRejectEmails(const base::ListValue* args);
   void HandleAddEmails(const base::ListValue* args);
+  void HandleToggleBookmarkBar(const base::ListValue* args);
 
   // Adds webui sources.
-  static void AddSources(content::WebUIDataSource* html_source);
+  static void AddSources(content::WebUIDataSource* html_source,
+                         PrefService* prefs);
 
  private:
   // Weak reference.
diff --git a/components/nux/email/resources/email_chooser.js b/components/nux/email/resources/email_chooser.js
index 568a691..c59d3ff 100644
--- a/components/nux/email/resources/email_chooser.js
+++ b/components/nux/email/resources/email_chooser.js
@@ -20,12 +20,17 @@
 Polymer({
   is: 'email-chooser',
   properties: {
-    // TODO(scottchen): get from C++
-    /** @private */
-    bookmarkBarWasHidden_: Boolean,
-
     emailList: Array,
 
+    /** @private */
+    bookmarkBarWasShown_: {
+      type: Boolean,
+      value: loadTimeData.getBoolean('bookmark_bar_shown'),
+    },
+
+    /** @private */
+    gotStarted_: Boolean,
+
     /** @private {nux_email.EmailProviderModel} */
     selectedEmailProvider_: {
       type: Object,
@@ -40,8 +45,14 @@
   ready: function() {
     this.browserProxy_ = nux.NuxEmailProxyImpl.getInstance();
     this.emailList = this.browserProxy_.getEmailList();
+
     window.addEventListener('beforeunload', () => {
+      // Only need to clean up if user didn't choose "Get Started".
+      if (this.gotStarted_)
+        return;
+
       this.revertBookmark_();
+      this.browserProxy_.toggleBookmarkBar(this.bookmarkBarWasShown_);
     });
   },
 
@@ -88,9 +99,6 @@
 
     if (emailProvider && emailProvider.bookmarkId)
       this.browserProxy_.removeBookmark(emailProvider.bookmarkId);
-
-    // TODO: also hide bookmark bar if this.selectedEmailProvider is now null &&
-    // the bookmarkBarWasHidden_ == true;
   },
 
   /**
@@ -99,6 +107,9 @@
    * @private
    */
   onSelectedEmailProviderChange_: function(newEmail, prevEmail) {
+    if (!this.browserProxy_)
+      return;
+
     if (prevEmail) {
       // If it was previously selected, it must've been assigned an id.
       assert(prevEmail.bookmarkId);
@@ -106,21 +117,24 @@
     }
 
     if (newEmail) {
+      this.browserProxy_.toggleBookmarkBar(true);
       this.browserProxy_.addBookmark(
           {title: newEmail.name, url: newEmail.url, parentId: '1'}, results => {
             this.selectedEmailProvider_.bookmarkId = results.id;
           });
+    } else {
+      this.browserProxy_.toggleBookmarkBar(this.bookmarkBarWasShown_);
     }
   },
 
   /** @private */
   onNoThanksClicked_: function() {
-    this.revertBookmark_();
     window.location.replace('chrome://newtab');
   },
 
   /** @private */
   onGetStartedClicked_: function() {
+    this.gotStarted_ = true;
     window.location.replace(this.selectedEmailProvider_.url);
   },
-});
+});
\ No newline at end of file
diff --git a/components/nux/email/resources/nux_email_proxy.js b/components/nux/email/resources/nux_email_proxy.js
index cd65efda..8484dc4 100644
--- a/components/nux/email/resources/nux_email_proxy.js
+++ b/components/nux/email/resources/nux_email_proxy.js
@@ -14,6 +14,9 @@
      */
     addBookmark(data, callback) {}
 
+    /** @param {boolean} show */
+    toggleBookmarkBar(show) {}
+
     /** @return {!Array<Object>} Array of email providers. */
     getEmailList() {}
   }
@@ -32,6 +35,11 @@
     }
 
     /** @override */
+    toggleBookmarkBar(show) {
+      chrome.send('toggleBookmarkBar', [show]);
+    }
+
+    /** @override */
     getEmailList() {
       let emailCount = loadTimeData.getInteger('email_count');
       let emailList = [];
diff --git a/components/nux/google_apps/google_apps_handler.cc b/components/nux/google_apps/google_apps_handler.cc
index 8358d21..84824ae 100644
--- a/components/nux/google_apps/google_apps_handler.cc
+++ b/components/nux/google_apps/google_apps_handler.cc
@@ -122,9 +122,6 @@
   // Enable bookmark bar.
   prefs_->SetBoolean(bookmarks::prefs::kShowBookmarkBar, true);
 
-  // Wait to show bookmark bar.
-  // TODO(hcarmona): Any advice here would be helpful.
-
   // Show bookmark bubble.
   ShowPromoDelegate::CreatePromoDelegate(
       IDS_NUX_GOOGLE_APPS_DESCRIPTION_PROMO_BUBBLE)
diff --git a/components/offline_pages/core/offline_page_feature.cc b/components/offline_pages/core/offline_page_feature.cc
index 05e5672..50789e5b 100644
--- a/components/offline_pages/core/offline_page_feature.cc
+++ b/components/offline_pages/core/offline_page_feature.cc
@@ -79,6 +79,9 @@
 const base::Feature kOfflineIndicatorFeature{"OfflineIndicator",
                                              base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kOfflineIndicatorAlwaysHttpProbeFeature{
+    "OfflineIndicatorAlwaysHttpProbe", base::FEATURE_DISABLED_BY_DEFAULT};
+
 const char kPrefetchingOfflinePagesExperimentsOption[] = "exp";
 
 bool IsOfflineBookmarksEnabled() {
@@ -180,4 +183,8 @@
   return base::FeatureList::IsEnabled(kOfflineIndicatorFeature);
 }
 
+bool IsOfflineIndicatorAlwaysHttpProbeEnabled() {
+  return base::FeatureList::IsEnabled(kOfflineIndicatorAlwaysHttpProbeFeature);
+}
+
 }  // namespace offline_pages
diff --git a/components/offline_pages/core/offline_page_feature.h b/components/offline_pages/core/offline_page_feature.h
index cd03248..68aba41c 100644
--- a/components/offline_pages/core/offline_page_feature.h
+++ b/components/offline_pages/core/offline_page_feature.h
@@ -29,6 +29,7 @@
 extern const base::Feature kOfflinePagesCTSuppressNotificationsFeature;
 extern const base::Feature kOfflinePagesShowAlternateDinoPageFeature;
 extern const base::Feature kOfflineIndicatorFeature;
+extern const base::Feature kOfflineIndicatorAlwaysHttpProbeFeature;
 
 // The parameter name used to find the experiment tag for prefetching offline
 // pages.
@@ -113,6 +114,12 @@
 // Returns true if offline indicator UI is shown when the user is offline.
 bool IsOfflineIndicatorFeatureEnabled();
 
+// Returns true if we should always do http probes to detect network
+// connectivity instead of retrieving it from the system. This enables the user
+// to test our http probe detection on Android devices with Marshmallow and
+// above.
+bool IsOfflineIndicatorAlwaysHttpProbeEnabled();
+
 }  // namespace offline_pages
 
 #endif  // COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_FEATURE_H_
diff --git a/components/omnibox/browser/autocomplete_result.cc b/components/omnibox/browser/autocomplete_result.cc
index 9d77688..123536a 100644
--- a/components/omnibox/browser/autocomplete_result.cc
+++ b/components/omnibox/browser/autocomplete_result.cc
@@ -119,7 +119,8 @@
     DCHECK_EQ(AutocompleteMatch::SanitizeString(i.description),
               i.description);
     matches_.push_back(i);
-    if (!AutocompleteMatch::IsSearchType(i.type)) {
+    if (!AutocompleteMatch::IsSearchType(i.type) &&
+        i.type != AutocompleteMatchType::DOCUMENT_SUGGESTION) {
       const OmniboxFieldTrial::EmphasizeTitlesCondition condition(
           OmniboxFieldTrial::GetEmphasizeTitlesConditionForInput(input));
       bool emphasize = false;
diff --git a/components/omnibox/browser/document_provider.cc b/components/omnibox/browser/document_provider.cc
index 95a39a1..4c5923e 100644
--- a/components/omnibox/browser/document_provider.cc
+++ b/components/omnibox/browser/document_provider.cc
@@ -11,12 +11,15 @@
 
 #include "base/callback.h"
 #include "base/feature_list.h"
+#include "base/i18n/time_formatting.h"
 #include "base/json/json_reader.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/strings/strcat.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "components/data_use_measurement/core/data_use_user_data.h"
 #include "components/omnibox/browser/autocomplete_input.h"
@@ -31,9 +34,11 @@
 #include "components/prefs/pref_service.h"
 #include "components/search_engines/search_engine_type.h"
 #include "components/search_engines/template_url_service.h"
+#include "components/strings/grit/components_strings.h"
 #include "services/network/public/cpp/resource_response.h"
 #include "services/network/public/cpp/simple_url_loader.h"
 #include "third_party/metrics_proto/omnibox_event.pb.h"
+#include "ui/base/l10n/l10n_util.h"
 #include "url/gurl.h"
 
 namespace {
@@ -51,6 +56,11 @@
                             DOCUMENT_MAX_REQUEST_HISTOGRAM_VALUE);
 }
 
+// MIME types sent by the server for different document types.
+const char kDocumentMimetype[] = "application/vnd.google-apps.document";
+const char kSpreadsheetMimetype[] = "application/vnd.google-apps.spreadsheet";
+const char kPresentationMimetype[] = "application/vnd.google-apps.presentation";
+
 const char kErrorMessageAdminDisabled[] =
     "Not eligible to query due to admin disabled Chrome search settings.";
 const char kErrorMessageRetryLater[] = "Not eligible to query, see retry info.";
@@ -281,6 +291,48 @@
   LogOmniboxDocumentRequest(DOCUMENT_REQUEST_SENT);
 }
 
+// static
+base::string16 DocumentProvider::GenerateLastModifiedString(
+    const std::string& modified_timestamp_string,
+    base::Time now) {
+  if (modified_timestamp_string.empty())
+    return base::string16();
+  base::Time modified_time;
+  if (!base::Time::FromString(modified_timestamp_string.c_str(),
+                              &modified_time))
+    return base::string16();
+
+  // Use shorthand if the times fall on the same day or in the same year.
+  base::Time::Exploded exploded_modified_time;
+  base::Time::Exploded exploded_now;
+  modified_time.LocalExplode(&exploded_modified_time);
+  now.LocalExplode(&exploded_now);
+  if (exploded_modified_time.year == exploded_now.year) {
+    if (exploded_modified_time.month == exploded_now.month &&
+        exploded_modified_time.day_of_month == exploded_now.day_of_month) {
+      // Same local calendar day - use localized time.
+      return base::TimeFormatTimeOfDay(modified_time);
+    }
+    // Same year but not the same day: use abbreviated month/day ("Jan 1").
+    return base::TimeFormatWithPattern(modified_time, "MMMd");
+  }
+
+  // No shorthand; display full MM/DD/YYYY.
+  return base::TimeFormatShortDateNumeric(modified_time);
+}
+
+// static
+base::string16 GetProductDescriptionString(const std::string& mimetype) {
+  if (mimetype == kDocumentMimetype)
+    return l10n_util::GetStringUTF16(IDS_DRIVE_SUGGESTION_DOCUMENT);
+  if (mimetype == kSpreadsheetMimetype)
+    return l10n_util::GetStringUTF16(IDS_DRIVE_SUGGESTION_SPREADSHEET);
+  if (mimetype == kPresentationMimetype)
+    return l10n_util::GetStringUTF16(IDS_DRIVE_SUGGESTION_PRESENTATION);
+  // Fallback to "Drive" for other filetypes.
+  return l10n_util::GetStringUTF16(IDS_DRIVE_SUGGESTION_GENERAL);
+}
+
 bool DocumentProvider::ParseDocumentSearchResults(const base::Value& root_val,
                                                   ACMatches* matches) {
   const base::DictionaryValue* root_dict = nullptr;
@@ -355,6 +407,7 @@
     match.fill_into_edit = url;
     match.destination_url = GURL(url);
     base::string16 original_url;
+    std::string mimetype;
     if (result->GetString("originalUrl", &original_url)) {
       match.stripped_destination_url = GURL(original_url);
     }
@@ -363,18 +416,29 @@
         &match.contents_class, 0, ACMatchClassification::NONE);
     const base::DictionaryValue* metadata = nullptr;
     if (result->GetDictionary("metadata", &metadata)) {
-      std::string mimetype;
       if (metadata->GetString("mimeType", &mimetype)) {
-        if (mimetype == "application/vnd.google-apps.document") {
+        if (mimetype == kDocumentMimetype) {
           match.document_type = AutocompleteMatch::DocumentType::DRIVE_DOCS;
-        } else if (mimetype == "application/vnd.google-apps.spreadsheet") {
+        } else if (mimetype == kSpreadsheetMimetype) {
           match.document_type = AutocompleteMatch::DocumentType::DRIVE_SHEETS;
-        } else if (mimetype == "application/vnd.google-apps.presentation") {
+        } else if (mimetype == kPresentationMimetype) {
           match.document_type = AutocompleteMatch::DocumentType::DRIVE_SLIDES;
         } else {
           match.document_type = AutocompleteMatch::DocumentType::DRIVE_OTHER;
         }
       }
+      std::string update_time;
+      metadata->GetString("updateTime", &update_time);
+      if (!update_time.empty()) {
+        match.description = l10n_util::GetStringFUTF16(
+            IDS_DRIVE_SUGGESTION_DESCRIPTION_TEMPLATE,
+            GenerateLastModifiedString(update_time, base::Time::Now()),
+            GetProductDescriptionString(mimetype));
+      } else {
+        match.description = GetProductDescriptionString(mimetype);
+      }
+      AutocompleteMatch::AddLastClassificationIfNecessary(
+          &match.description_class, 0, ACMatchClassification::NONE);
     }
     match.transition = ui::PAGE_TRANSITION_GENERATED;
     matches->push_back(match);
diff --git a/components/omnibox/browser/document_provider.h b/components/omnibox/browser/document_provider.h
index 990ccab..dc5aaad 100644
--- a/components/omnibox/browser/document_provider.h
+++ b/components/omnibox/browser/document_provider.h
@@ -70,6 +70,8 @@
                            ParseDocumentSearchResultsWithBackoff);
   FRIEND_TEST_ALL_PREFIXES(DocumentProviderTest,
                            ParseDocumentSearchResultsWithIneligibleFlag);
+  FRIEND_TEST_ALL_PREFIXES(DocumentProviderTest, GenerateLastModifiedString);
+
   DocumentProvider(AutocompleteProviderClient* client,
                    AutocompleteProviderListener* listener);
 
@@ -105,6 +107,14 @@
   bool ParseDocumentSearchResults(const base::Value& root_val,
                                   ACMatches* matches);
 
+  // Generates the localized last-modified timestamp to present to the user.
+  // Full date for old files, mm/dd within the same calendar year, or time-of-
+  // day if a file was modified on the same date.
+  // |now| should generally be base::Time::Now() but is passed in for testing.
+  static base::string16 GenerateLastModifiedString(
+      const std::string& modified_timestamp_string,
+      base::Time now);
+
   // Whether the server has instructed us to backoff for this session (in
   // cases where the corpus is uninteresting).
   bool backoff_for_session_;
diff --git a/components/omnibox/browser/document_provider_unittest.cc b/components/omnibox/browser/document_provider_unittest.cc
index b6dd158..a2bca72 100644
--- a/components/omnibox/browser/document_provider_unittest.cc
+++ b/components/omnibox/browser/document_provider_unittest.cc
@@ -7,7 +7,9 @@
 #include "base/json/json_reader.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
+#include "base/time/time_to_iso8601.h"
 #include "base/values.h"
+#include "build/build_config.h"
 #include "components/omnibox/browser/autocomplete_provider.h"
 #include "components/omnibox/browser/autocomplete_provider_listener.h"
 #include "components/omnibox/browser/mock_autocomplete_provider_client.h"
@@ -319,3 +321,35 @@
   provider_->ParseDocumentSearchResults(*backoff_response, &matches);
   ASSERT_TRUE(provider_->backoff_for_session_);
 }
+
+// This test is affected by an iOS 10 simulator bug: https://crbug.com/782033
+// and may get wrong timezone on Win7: https://crbug.com/856119
+#if !defined(OS_IOS) && !defined(OS_WIN)
+TEST_F(DocumentProviderTest, GenerateLastModifiedString) {
+  base::Time::Exploded local_exploded = {0};
+  local_exploded.year = 2018;
+  local_exploded.month = 8;
+  local_exploded.day_of_month = 27;
+  local_exploded.hour = 3;
+  local_exploded.minute = 18;
+  local_exploded.second = 54;
+  base::Time local_now;
+  EXPECT_TRUE(base::Time::FromLocalExploded(local_exploded, &local_now));
+
+  base::Time modified_today = local_now + base::TimeDelta::FromHours(-1);
+  base::Time modified_this_year = local_now + base::TimeDelta::FromDays(-8);
+  base::Time modified_last_year = local_now + base::TimeDelta::FromDays(-365);
+
+  // GenerateLastModifiedString should accept any parseable timestamp, but use
+  // ISO8601 UTC timestamp strings since the service returns them in practice.
+  EXPECT_EQ(DocumentProvider::GenerateLastModifiedString(
+                base::TimeToISO8601(modified_today), local_now),
+            base::ASCIIToUTF16("2:18 AM"));
+  EXPECT_EQ(DocumentProvider::GenerateLastModifiedString(
+                base::TimeToISO8601(modified_this_year), local_now),
+            base::ASCIIToUTF16("Aug 19"));
+  EXPECT_EQ(DocumentProvider::GenerateLastModifiedString(
+                base::TimeToISO8601(modified_last_year), local_now),
+            base::ASCIIToUTF16("8/27/17"));
+}
+#endif  // !defined(OS_IOS)
diff --git a/components/omnibox_strings.grdp b/components/omnibox_strings.grdp
index e6fd35a..a34fff73 100644
--- a/components/omnibox_strings.grdp
+++ b/components/omnibox_strings.grdp
@@ -58,6 +58,22 @@
   <message name="IDS_OMNIBOX_FILE" desc="Text shown in the omnibox to indicate a user is viewing a file.">
     File
   </message>
+  <message name="IDS_DRIVE_SUGGESTION_DOCUMENT" desc="Google Docs product name, for use in omnibox Docs result descriptions.">
+    Google Docs
+  </message>
+  <message name="IDS_DRIVE_SUGGESTION_SPREADSHEET" desc="Google Sheets product name, for use in omnibox Sheets result descriptions.">
+    Google Sheets
+  </message>
+    <message name="IDS_DRIVE_SUGGESTION_PRESENTATION" desc="Google Slides product name, for use in omnibox Slides result descriptions.">
+    Google Slides
+  </message>
+  <message name="IDS_DRIVE_SUGGESTION_GENERAL" desc="Google Drive product name, for use in general omnibox Drive file result descriptions.">
+    Google Drive
+  </message>
+  <message name="IDS_DRIVE_SUGGESTION_DESCRIPTION_TEMPLATE" desc="Product description for Google Drive omnibox results.">
+    <ph name="RESULT_MODIFIED_DATE">$1<ex>12/31/2018</ex></ph> - <ph name="RESULT_PRODUCT_SOURCE">$2<ex>Google Docs</ex></ph>
+  </message>
+
 
   <!-- Accessibility labels for autocomplete match types.
        These are parameterized on the text being completed into the omnibox.
diff --git a/components/optimization_guide/proto/hints.proto b/components/optimization_guide/proto/hints.proto
index 50526774..16ae680 100644
--- a/components/optimization_guide/proto/hints.proto
+++ b/components/optimization_guide/proto/hints.proto
@@ -14,6 +14,8 @@
   // This optimization applies a set of ResourceLoadingHint(s) to load the
   // page.
   RESOURCE_LOADING = 2;
+  // This optimization redirects the navigation through a lite page server.
+  LITE_PAGE_REDIRECT = 3;
 }
 
 // Presents semantics for how page load URLs should be matched.
@@ -141,6 +143,36 @@
   repeated PageHint page_hints = 4;
 }
 
+// Configuration and data for a Bloom filter.
+//
+// Note that some additional aspects of the BloomFilter are separately
+// specified between the client and server including the specific MurmurHash3
+// hashing function, how the hashing function is seeded, how bits are
+// addressed in the byte vector, and the nature of the strings that the
+// Bloom filter holds (whether host, host suffix, URL path, etc.).
+message BloomFilter {
+  // Specifies the number of hash functions to use in the Bloom filter.
+  // This essentially means how many bits will be set in the bit array
+  // for a string member of the Bloom filter.
+  optional int32 num_hash_functions = 1;
+  // The number of bits in the Bloom filter's bit array.
+  optional int32 num_bits = 2;
+  // The bit array data of the Bloom filter provided via a byte vector.
+  // The number of bytes provided must be large enough to hold the
+  // specified number of bits (num_bits).
+  optional bytes data = 3;
+}
+
+// A scalable filter for an optimization type. Initially, this is used to
+// provide a large scale blacklist but might be used for whitelists in
+// the future.
+message OptimizationFilter {
+  // The type of optimization this filter applies to.
+  optional OptimizationType optimization_type = 1;
+  // The filter data represented as a Bloom filter.
+  optional BloomFilter bloom_filter = 2;
+}
+
 message Configuration {
   // An ordered list containing hints for key/optimization combinations.
   //
@@ -158,4 +190,6 @@
   // details for that key that it wants to provide as the client will only
   // look at that one record to decide which optimization to apply.
   repeated Hint hints = 1;
+  // A list of per-optimization blacklists.
+  repeated OptimizationFilter optimization_blacklists = 2;
 }
diff --git a/components/os_crypt/os_crypt.h b/components/os_crypt/os_crypt.h
index 6cde7ca..cee0d4c58 100644
--- a/components/os_crypt/os_crypt.h
+++ b/components/os_crypt/os_crypt.h
@@ -80,6 +80,16 @@
   // mock Keychain. Use OSCryptMocker, instead of calling this method directly.
   static COMPONENT_EXPORT(OS_CRYPT) void UseLockedMockKeychainForTesting(
       bool use_locked);
+
+  // Get the raw encryption key to be used for all AES encryption. Returns an
+  // empty string in the case password access is denied or key generation error
+  // occurs. This method is thread-safe.
+  static COMPONENT_EXPORT(OS_CRYPT) std::string GetRawEncryptionKey();
+
+  // Set the raw encryption key to be used for all AES encryption.
+  // This method is thread-safe.
+  static COMPONENT_EXPORT(OS_CRYPT) void SetRawEncryptionKey(
+      const std::string& key);
 #endif
 
  private:
diff --git a/components/os_crypt/os_crypt_mac.mm b/components/os_crypt/os_crypt_mac.mm
index c0b046c..c9e6054 100644
--- a/components/os_crypt/os_crypt_mac.mm
+++ b/components/os_crypt/os_crypt_mac.mm
@@ -45,22 +45,27 @@
 // this and migrate to different encryption without data loss.
 const char kEncryptionVersionPrefix[] = "v10";
 
-// This lock is used to make the GetEncrytionKey method thread-safe.
+// This lock is used to make the GetEncrytionKey and
+// OSCrypt::GetRawEncryptionKey methods thread-safe.
 base::LazyInstance<base::Lock>::Leaky g_lock = LAZY_INSTANCE_INITIALIZER;
 
+// The cached AES encryption key singleton.
+crypto::SymmetricKey* g_cached_encryption_key = nullptr;
+
+// true if |g_cached_encryption_key| has been initialized.
+bool g_key_is_cached = false;
+
 // Generates a newly allocated SymmetricKey object based on the password found
 // in the Keychain.  The generated key is for AES encryption.  Returns NULL key
 // in the case password access is denied or key generation error occurs.
 crypto::SymmetricKey* GetEncryptionKey() {
-  static crypto::SymmetricKey* cached_encryption_key = nullptr;
-  static bool key_is_cached = false;
   base::AutoLock auto_lock(g_lock.Get());
 
   if (use_mock_keychain && use_locked_mock_keychain)
     return nullptr;
 
-  if (key_is_cached)
-    return cached_encryption_key;
+  if (g_key_is_cached)
+    return g_cached_encryption_key;
 
   static bool mock_keychain_command_line_flag =
       base::CommandLine::ForCurrentProcess()->HasSwitch(
@@ -78,27 +83,45 @@
 
   // Subsequent code must guarantee that the correct key is cached before
   // returning.
-  key_is_cached = true;
+  g_key_is_cached = true;
 
   if (password.empty())
-    return cached_encryption_key;
+    return g_cached_encryption_key;
 
   std::string salt(kSalt);
 
   // Create an encryption key from our password and salt. The key is
   // intentionally leaked.
-  cached_encryption_key =
+  g_cached_encryption_key =
       crypto::SymmetricKey::DeriveKeyFromPasswordUsingPbkdf2(
           crypto::SymmetricKey::AES, password, salt, kEncryptionIterations,
           kDerivedKeySizeInBits)
           .release();
-  ANNOTATE_LEAKING_OBJECT_PTR(cached_encryption_key);
-  DCHECK(cached_encryption_key);
-  return cached_encryption_key;
+  ANNOTATE_LEAKING_OBJECT_PTR(g_cached_encryption_key);
+  DCHECK(g_cached_encryption_key);
+  return g_cached_encryption_key;
 }
 
 }  // namespace
 
+// static
+std::string OSCrypt::GetRawEncryptionKey() {
+  crypto::SymmetricKey* key = GetEncryptionKey();
+  if (!key)
+    return std::string();
+  return key->key();
+}
+
+// static
+void OSCrypt::SetRawEncryptionKey(const std::string& raw_key) {
+  DCHECK(!raw_key.empty());
+  base::AutoLock auto_lock(g_lock.Get());
+  auto key = crypto::SymmetricKey::Import(crypto::SymmetricKey::AES, raw_key);
+  DCHECK(!g_key_is_cached) << "Encryption key already set.";
+  g_cached_encryption_key = key.release();
+  g_key_is_cached = true;
+}
+
 bool OSCrypt::EncryptString16(const base::string16& plaintext,
                               std::string* ciphertext) {
   return EncryptString(base::UTF16ToUTF8(plaintext), ciphertext);
diff --git a/components/password_manager/core/browser/form_parsing/form_parser.cc b/components/password_manager/core/browser/form_parsing/form_parser.cc
index a22f1f9..52d5254 100644
--- a/components/password_manager/core/browser/form_parsing/form_parser.cc
+++ b/components/password_manager/core/browser/form_parsing/form_parser.cc
@@ -546,10 +546,12 @@
 // parsing and wraps that in a ProcessedField. Returns the vector of all those
 // ProcessedField instances, or an empty vector if there was not a single
 // password field. Also, computes the vector of all password values and
-// associated element names in |all_possible_passwords|.
+// associated element names in |all_possible_passwords|, and similarly for
+// usernames and |all_possible_usernames|.
 std::vector<ProcessedField> ProcessFields(
     const std::vector<FormFieldData>& fields,
-    autofill::ValueElementVector* all_possible_passwords) {
+    autofill::ValueElementVector* all_possible_passwords,
+    autofill::ValueElementVector* all_possible_usernames) {
   DCHECK(all_possible_passwords);
   DCHECK(all_possible_passwords->empty());
 
@@ -558,24 +560,28 @@
 
   result.reserve(fields.size());
 
-  // |all_possible_passwords| should only contain each value once. |seen_values|
-  // ensures that duplicates are ignored.
-  std::set<base::StringPiece16> seen_values;
-  // Pretend that an empty value has been already seen, so that empty-valued
-  // password elements won't get added to |all_possible_passwords|.
-  seen_values.insert(base::StringPiece16());
+  // |all_possible_passwords| should only contain each value once.
+  // |seen_password_values| ensures that duplicates are ignored.
+  std::set<base::StringPiece16> seen_password_values;
+  // Similarly for usernames.
+  std::set<base::StringPiece16> seen_username_values;
 
   for (const FormFieldData& field : fields) {
     if (!field.IsTextInputElement())
       continue;
 
     const bool is_password = field.form_control_type == "password";
-    if (is_password) {
-      // Only the field name of the first occurrence is added to
-      // |all_possible_passwords|.
+    if (!field.value.empty()) {
+      std::set<base::StringPiece16>& seen_values =
+          is_password ? seen_password_values : seen_username_values;
+      autofill::ValueElementVector* all_possible_fields =
+          is_password ? all_possible_passwords : all_possible_usernames;
+      // Only the field name of the first occurrence is added.
       auto insertion = seen_values.insert(base::StringPiece16(field.value));
-      if (insertion.second)  // There was no such element in |seen_values|.
-        all_possible_passwords->push_back({field.value, field.name});
+      if (insertion.second) {
+        // There was no such element in |seen_values|.
+        all_possible_fields->push_back({field.value, field.name});
+      }
     }
 
     const AutocompleteFlag flag =
@@ -641,14 +647,17 @@
 
 // Puts together a PasswordForm, the result of the parsing, based on the
 // |form_data| description of the form metadata (e.g., action), the already
-// parsed information about what are the |significant_fields|, and the list
-// |all_possible_passwords| of all non-empty password values and associated
-// element names which occurred in the form. |form_predictions| is used to find
-// fields that may have preffilled placeholders.
+// parsed information about what are the |significant_fields|, the list
+// |all_possible_passwords| of all non-empty password values which occurred in
+// the form and their associated element names, and the list
+// |all_possible_usernames| of all non-empty username values which
+// occurred in the form and their associated elements. |form_predictions| is
+// used to find fields that may have preffilled placeholders.
 std::unique_ptr<PasswordForm> AssemblePasswordForm(
     const autofill::FormData& form_data,
     const SignificantFields* significant_fields,
     autofill::ValueElementVector all_possible_passwords,
+    autofill::ValueElementVector all_possible_usernames,
     const FormPredictions* form_predictions) {
   if (!significant_fields || !significant_fields->HasPasswords())
     return nullptr;
@@ -660,6 +669,9 @@
   result->action = form_data.action;
   result->form_data = form_data;
   result->all_possible_passwords = std::move(all_possible_passwords);
+  // TODO(crbug.com/881346) Rename PasswordForm::other_possible_usernames to
+  // all_possible_usernames once the old parser is gone.
+  result->other_possible_usernames = std::move(all_possible_usernames);
   result->scheme = PasswordForm::SCHEME_HTML;
   result->preferred = false;
   result->blacklisted_by_user = false;
@@ -679,8 +691,9 @@
     const FormPredictions* form_predictions,
     FormParsingMode mode) {
   autofill::ValueElementVector all_possible_passwords;
-  std::vector<ProcessedField> processed_fields =
-      ProcessFields(form_data.fields, &all_possible_passwords);
+  autofill::ValueElementVector all_possible_usernames;
+  std::vector<ProcessedField> processed_fields = ProcessFields(
+      form_data.fields, &all_possible_passwords, &all_possible_usernames);
 
   if (processed_fields.empty())
     return nullptr;
@@ -751,9 +764,9 @@
                             username_detection_method,
                             UsernameDetectionMethod::kCount);
 
-  return AssemblePasswordForm(form_data, significant_fields.get(),
-                              std::move(all_possible_passwords),
-                              form_predictions);
+  return AssemblePasswordForm(
+      form_data, significant_fields.get(), std::move(all_possible_passwords),
+      std::move(all_possible_usernames), form_predictions);
 }
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
index c16d85a..925f6d6 100644
--- a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
+++ b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
@@ -79,8 +79,10 @@
   std::vector<FieldDataDescription> fields;
   // -1 just mean no checking.
   int number_of_all_possible_passwords = -1;
+  int number_of_all_possible_usernames = -1;
   // null means no checking
   const autofill::ValueElementVector* all_possible_passwords = nullptr;
+  const autofill::ValueElementVector* all_possible_usernames = nullptr;
   bool username_may_use_prefilled_placeholder = false;
 };
 
@@ -326,6 +328,7 @@
                   parsed_form->username_may_use_prefilled_placeholder);
         CheckPasswordFormFields(*parsed_form, form_data, expected_ids);
         CheckAllValuesUnique(parsed_form->all_possible_passwords);
+        CheckAllValuesUnique(parsed_form->other_possible_usernames);
         if (test_case.number_of_all_possible_passwords >= 0) {
           EXPECT_EQ(
               static_cast<size_t>(test_case.number_of_all_possible_passwords),
@@ -335,6 +338,15 @@
           EXPECT_EQ(*test_case.all_possible_passwords,
                     parsed_form->all_possible_passwords);
         }
+        if (test_case.number_of_all_possible_usernames >= 0) {
+          EXPECT_EQ(
+              static_cast<size_t>(test_case.number_of_all_possible_usernames),
+              parsed_form->other_possible_usernames.size());
+        }
+        if (test_case.all_possible_usernames) {
+          EXPECT_EQ(*test_case.all_possible_usernames,
+                    parsed_form->other_possible_usernames);
+        }
       }
     }
   }
@@ -352,6 +364,7 @@
                   {.form_control_type = "text"}, {.form_control_type = "text"},
               },
           .number_of_all_possible_passwords = 0,
+          .number_of_all_possible_usernames = 0,
       },
   });
 }
@@ -359,13 +372,15 @@
 TEST(FormParserTest, SkipNotTextFields) {
   CheckTestData({
       {
-          "Select between username and password fields",
+          "A 'select' between username and password fields",
           {
               {.role = ElementRole::USERNAME},
               {.form_control_type = "select"},
               {.role = ElementRole::CURRENT_PASSWORD,
                .form_control_type = "password"},
           },
+          .number_of_all_possible_passwords = 1,
+          .number_of_all_possible_usernames = 1,
       },
   });
 }
@@ -380,6 +395,7 @@
                    .form_control_type = "password"},
               },
           .number_of_all_possible_passwords = 1,
+          .number_of_all_possible_usernames = 0,
       },
       {
           "2 password fields, new and confirmation password",
@@ -508,6 +524,7 @@
                .form_control_type = "password",
                .is_focusable = true},
           },
+          .number_of_all_possible_usernames = 2,
       },
       {
           "focusable and non-focusable text fields before password",
@@ -564,6 +581,9 @@
                .form_control_type = "password",
                .value = ""},
           },
+          // all_possible_* only count fields with non-empty values.
+          .number_of_all_possible_passwords = 0,
+          .number_of_all_possible_usernames = 0,
       },
       {
           .description_for_logging = "Simple sign-in form with filled data",
@@ -696,6 +716,7 @@
                    .autocomplete_attribute = "password"},
               },
           .number_of_all_possible_passwords = 3,
+          .number_of_all_possible_usernames = 2,
       },
       {
           "Basic heuristics kick in if autocomplete analysis fails",
@@ -1095,6 +1116,10 @@
       {ASCIIToUTF16("a"), ASCIIToUTF16("p1")},
       {ASCIIToUTF16("b"), ASCIIToUTF16("p3")},
   };
+  const autofill::ValueElementVector kUsernames = {
+      {ASCIIToUTF16("b"), ASCIIToUTF16("chosen")},
+      {ASCIIToUTF16("a"), ASCIIToUTF16("first")},
+  };
   CheckTestData({
       {
           .description_for_logging = "It is always the first field name which "
@@ -1105,18 +1130,22 @@
                   {.form_control_type = "password", .name = "p1", .value = "a"},
                   {.role = ElementRole::USERNAME,
                    .form_control_type = "text",
+                   .name = "chosen",
+                   .value = "b",
                    .autocomplete_attribute = "username"},
                   {.role = ElementRole::CURRENT_PASSWORD,
                    .form_control_type = "password",
                    .autocomplete_attribute = "current-password",
                    .value = "a"},
-                  {.form_control_type = "text"},
-                  {.form_control_type = "text"},
+                  {.form_control_type = "text", .name = "first", .value = "a"},
+                  {.form_control_type = "text", .value = "a"},
                   {.form_control_type = "password", .name = "p3", .value = "b"},
                   {.form_control_type = "password", .value = "b"},
               },
           .number_of_all_possible_passwords = 2,
           .all_possible_passwords = &kPasswords,
+          .number_of_all_possible_usernames = 2,
+          .all_possible_usernames = &kUsernames,
       },
       {
           .description_for_logging =
diff --git a/components/payments/content/payment_request.cc b/components/payments/content/payment_request.cc
index 0589bcf..7157a66 100644
--- a/components/payments/content/payment_request.cc
+++ b/components/payments/content/payment_request.cc
@@ -207,8 +207,7 @@
     return;
   }
 
-  spec()->UpdateShippingAddressErrors(std::move(errors->shipping_address));
-  spec()->UpdatePayerErrors(std::move(errors->payer));
+  spec()->Retry(std::move(errors));
   display_handle_->Retry();
 }
 
@@ -250,6 +249,14 @@
     return;
   }
 
+  if (details->shipping_address_errors &&
+      !PaymentsValidators::IsValidAddressErrorsFormat(
+          details->shipping_address_errors, &error)) {
+    DLOG(ERROR) << error;
+    OnConnectionTerminated();
+    return;
+  }
+
   if (!details->total) {
     LOG(ERROR) << "Missing total";
     OnConnectionTerminated();
diff --git a/components/payments/content/payment_request_spec.cc b/components/payments/content/payment_request_spec.cc
index 9e53c3c..57b7dcd 100644
--- a/components/payments/content/payment_request_spec.cc
+++ b/components/payments/content/payment_request_spec.cc
@@ -101,16 +101,12 @@
   RecomputeSpecForDetails();
 }
 
-void PaymentRequestSpec::UpdateShippingAddressErrors(
-    mojom::AddressErrorsPtr errors) {
-  shipping_address_errors_ = std::move(errors);
-  current_update_reason_ = UpdateReason::RETRY;
-  NotifyOnSpecUpdated();
-  current_update_reason_ = UpdateReason::NONE;
-}
+void PaymentRequestSpec::Retry(mojom::PaymentValidationErrorsPtr errors) {
+  if (!errors)
+    return;
 
-void PaymentRequestSpec::UpdatePayerErrors(mojom::PayerErrorFieldsPtr errors) {
-  payer_errors_ = std::move(errors);
+  shipping_address_errors_ = std::move(errors->shipping_address);
+  payer_errors_ = std::move(errors->payer);
   current_update_reason_ = UpdateReason::RETRY;
   NotifyOnSpecUpdated();
   current_update_reason_ = UpdateReason::NONE;
@@ -195,13 +191,13 @@
 }
 
 void PaymentRequestSpec::RecomputeSpecForDetails() {
-  // Reparse the |details_| and update the observers.
-  UpdateSelectedShippingOption(/*after_update=*/true);
-
   // Clear the shipping address errors when the merchant updates the price based
   // on the shipping address that the user has newly fixed or selected.
   shipping_address_errors_.reset();
 
+  // Reparse the |details_| and update the observers.
+  UpdateSelectedShippingOption(/*after_update=*/true);
+
   NotifyOnSpecUpdated();
   current_update_reason_ = UpdateReason::NONE;
 }
@@ -374,6 +370,10 @@
             break;
         }
       }
+
+      // Update shipping address errors
+      if (details_->shipping_address_errors)
+        shipping_address_errors_ = std::move(details_->shipping_address_errors);
     }
     return;
   }
diff --git a/components/payments/content/payment_request_spec.h b/components/payments/content/payment_request_spec.h
index 6433060..434dbb03 100644
--- a/components/payments/content/payment_request_spec.h
+++ b/components/payments/content/payment_request_spec.h
@@ -71,11 +71,8 @@
   // state that depends on |details|.
   void UpdateWith(mojom::PaymentDetailsPtr details);
 
-  // Called when the merchant calls updateWith() or retry().
-  void UpdateShippingAddressErrors(mojom::AddressErrorsPtr errors);
-
   // Called when the merchant calls retry().
-  void UpdatePayerErrors(mojom::PayerErrorFieldsPtr errors);
+  void Retry(mojom::PaymentValidationErrorsPtr errors);
 
   // Gets the display string for the shipping address error for the given
   // |type|.
diff --git a/components/payments/content/payment_request_spec_unittest.cc b/components/payments/content/payment_request_spec_unittest.cc
index b2c8053..272c040 100644
--- a/components/payments/content/payment_request_spec_unittest.cc
+++ b/components/payments/content/payment_request_spec_unittest.cc
@@ -452,7 +452,7 @@
   EXPECT_TRUE(spec()->IsMixedCurrency());
 }
 
-TEST_F(PaymentRequestSpecTest, ShippingAddressErrors) {
+TEST_F(PaymentRequestSpecTest, RetryWithShippingAddressErrors) {
   mojom::PaymentOptionsPtr options = mojom::PaymentOptions::New();
   options->request_shipping = true;
   RecreateSpecWithOptionsAndDetails(std::move(options),
@@ -463,7 +463,12 @@
   mojom::AddressErrorsPtr shipping_address_errors = mojom::AddressErrors::New();
   shipping_address_errors->address_line = "Invalid address line";
   shipping_address_errors->city = "Invalid city";
-  spec()->UpdateShippingAddressErrors(std::move(shipping_address_errors));
+
+  mojom::PaymentValidationErrorsPtr errors =
+      mojom::PaymentValidationErrors::New();
+  errors->shipping_address = std::move(shipping_address_errors);
+
+  spec()->Retry(std::move(errors));
 
   EXPECT_EQ(base::UTF8ToUTF16("Invalid city"),
             spec()->GetShippingAddressError(autofill::ADDRESS_HOME_CITY));
@@ -474,7 +479,7 @@
   EXPECT_TRUE(spec()->has_shipping_address_error());
 }
 
-TEST_F(PaymentRequestSpecTest, PayerErrors) {
+TEST_F(PaymentRequestSpecTest, RetryWithPayerErrors) {
   mojom::PaymentOptionsPtr options = mojom::PaymentOptions::New();
   options->request_payer_email = true;
   options->request_payer_name = true;
@@ -488,7 +493,12 @@
   payer_errors->email = "Invalid email";
   payer_errors->name = "Invalid name";
   payer_errors->phone = "Invalid phone";
-  spec()->UpdatePayerErrors(std::move(payer_errors));
+
+  mojom::PaymentValidationErrorsPtr errors =
+      mojom::PaymentValidationErrors::New();
+  errors->payer = std::move(payer_errors);
+
+  spec()->Retry(std::move(errors));
 
   EXPECT_EQ(base::UTF8ToUTF16("Invalid email"),
             spec()->GetPayerError(autofill::EMAIL_ADDRESS));
diff --git a/components/payments/content/payment_request_state.cc b/components/payments/content/payment_request_state.cc
index 3db5194..ba8b83fb 100644
--- a/components/payments/content/payment_request_state.cc
+++ b/components/payments/content/payment_request_state.cc
@@ -174,6 +174,7 @@
       invalid_shipping_profile_ = selected_shipping_profile;
       selected_shipping_profile_ = nullptr;
     }
+
     if (spec_->has_payer_error() && selected_contact_profile) {
       invalid_contact_profile_ = selected_contact_profile;
       selected_contact_profile_ = nullptr;
@@ -185,6 +186,9 @@
   } else {
     selected_shipping_option_error_profile_ = selected_shipping_profile;
     selected_shipping_profile_ = nullptr;
+    if (spec_->has_shipping_address_error() && selected_shipping_profile) {
+      invalid_shipping_profile_ = selected_shipping_profile;
+    }
   }
 
   is_waiting_for_merchant_validation_ = false;
diff --git a/components/payments/content/payment_request_state_unittest.cc b/components/payments/content/payment_request_state_unittest.cc
index e4b0e88..73ce3a0 100644
--- a/components/payments/content/payment_request_state_unittest.cc
+++ b/components/payments/content/payment_request_state_unittest.cc
@@ -402,7 +402,7 @@
   EXPECT_EQ("+81363849000", selected_shipping_address()->phone);
 }
 
-TEST_F(PaymentRequestStateTest, UpdateShippingAddressErrors) {
+TEST_F(PaymentRequestStateTest, RetryWithShippingAddressErrors) {
   mojom::PaymentOptionsPtr options = mojom::PaymentOptions::New();
   options->request_shipping = true;
   RecreateStateWithOptions(std::move(options));
@@ -435,7 +435,11 @@
   mojom::AddressErrorsPtr shipping_address_errors = mojom::AddressErrors::New();
   shipping_address_errors->address_line = "Invalid address line";
   shipping_address_errors->city = "Invalid city";
-  spec()->UpdateShippingAddressErrors(std::move(shipping_address_errors));
+
+  mojom::PaymentValidationErrorsPtr errors =
+      mojom::PaymentValidationErrors::New();
+  errors->shipping_address = std::move(shipping_address_errors);
+  spec()->Retry(std::move(errors));
   EXPECT_EQ(3, num_on_selected_information_changed_called());
   EXPECT_FALSE(state()->is_ready_to_pay());
 
@@ -443,7 +447,7 @@
   EXPECT_TRUE(state()->invalid_shipping_profile());
 }
 
-TEST_F(PaymentRequestStateTest, UpdatePayerErrors) {
+TEST_F(PaymentRequestStateTest, RetryWithPayerErrors) {
   mojom::PaymentOptionsPtr options = mojom::PaymentOptions::New();
   options->request_payer_name = true;
   options->request_payer_phone = true;
@@ -461,7 +465,11 @@
   payer_errors->email = "Invalid email";
   payer_errors->name = "Invalid name";
   payer_errors->phone = "Invalid phone";
-  spec()->UpdatePayerErrors(std::move(payer_errors));
+
+  mojom::PaymentValidationErrorsPtr errors =
+      mojom::PaymentValidationErrors::New();
+  errors->payer = std::move(payer_errors);
+  spec()->Retry(std::move(errors));
   EXPECT_EQ(2, num_on_selected_information_changed_called());
   EXPECT_FALSE(state()->is_ready_to_pay());
 
diff --git a/components/policy/resources/policy_templates_am.xtb b/components/policy/resources/policy_templates_am.xtb
index b15fbd5..b307ad6 100644
--- a/components/policy/resources/policy_templates_am.xtb
+++ b/components/policy/resources/policy_templates_am.xtb
@@ -2845,13 +2845,6 @@
           የበርካታ አገልጋይ ስሞችን በኮማዎች ያለያዩ። ልቅ ምልክቶች (*) ይፈቀዳሉ።
 
           ይህ መመሪያ እንዳልተዋቀረ ከተዉት <ph name="PRODUCT_NAME" /> አንድ አገልጋይ በውስጠ-መረብ ውስጥ ካለ ለማወቅ ይሞክራል፣ እና ከዚህ ብኋላ ብቻ ነው ለIWA ጥያቄዎች ምላሽ የሚሰጠው። አንድ አገልጋይ እንደበይነመረብ ሆኖ ከተገኘ የIWA ጥያቄዎች በ<ph name="PRODUCT_NAME" /> ችላ ይባላሉ።</translation>
-<translation id="8667812577403206506">ምናባዊ ማሽኖች በChrome OS ላይ ማሄድ ይፈቀድላቸው እንደሆነ እንዲቆጣጠሩ ያስችልዎታል።
-
-      መመሪያው ወደ እውነት ከተዋቀረ መሣሪያው ምናባዊ ማሽኖችን እንዲያሄድ ይፈቀድለታል።
-      መመሪያው ወደ ሐሰት ከተዋቀረ መሣሪያው ምናባዊ ማሽኖችን እንዲያሄድ አይፈቀድለትም።
-      ይህ መመሪያ ወደ ሐሰት ሲቀየር አዲስ በሚጀመሩ ምናባዊ ማሽኖች ላይ ይተገበራል፣ ነገር ግን አስቀድመው እያሄዱ ያሉ ምናባዊ ማሽኖችን አይዘጋም።
-      ይህ መመሪያ በሚተዳደር መሣሪያ ላይ ካልተዋቀረ መሣሪያው ምናባዊ ማሽኖችን እንዲያሄድ አይፈቀድለትም።
-      የማይተዳደሩ መሣሪያዎች ምናባዊ ማሽኖችን እንዲያሄዱ ይፈቀድላቸዋል።</translation>
 <translation id="8669669491594628013">የይለፍ ቃል ጥበቃ ማስጠንቀቂያ ቅስቀሳን እንዲቆጣጠሩ ያስችልዎታል። ተጠቃሚዎች የተጠበቀ ይለፍ ቃላቸውን አጠራጣሪ ሊሆኑ በሚችሉ ጣቢያዎች ላይ ሲጠቀሙ የይለፍ ቃል ጥበቃ ተጠቃሚዎቹን ያነቃቸዋል።
 
       የትኛው የይለፍ ቃል እንደሚጠበቅ ለማዋቀር የ«PasswordProtectionLoginURLs» እና «PasswordProtectionChangePasswordURL» መመሪያዎችን መጠቀም ይችላሉ።
diff --git a/components/policy/resources/policy_templates_ar.xtb b/components/policy/resources/policy_templates_ar.xtb
index a9da805..be6dbba9 100644
--- a/components/policy/resources/policy_templates_ar.xtb
+++ b/components/policy/resources/policy_templates_ar.xtb
@@ -2720,12 +2720,6 @@
           يمكن فصل أسماء الخوادم المتعددة بفواصل. ومسموح بأحرف البدل (*).
 
           في حالة ترك هذه السياسة بدون تعيين، سيحاول <ph name="PRODUCT_NAME" /> اكتشاف ما إذا كان الخادم متصلاً بالشبكة الداخلية وحينئذٍ فقط سيستجيب إلى طلبات IWA. وإذا تم اكتشاف خادم كإنترنت، فسيتجاهل <ph name="PRODUCT_NAME" /> طلبات IWA الواردة منه.</translation>
-<translation id="8667812577403206506">‏تسمح لك هذه السياسة بالتحكم في إمكانية تشغيل الآلات الافتراضية على نظام التشغيل Chrome.
-
-      في حال تعيين السياسة على الوضع "True"، سيتم السماح للجهاز بتشغيل الآلات الافتراضية.
-      في حال تعيين السياسة على الوضع "False"، لن يتم السماح للجهاز بتشغيل الآلات الافتراضية.
-      عند تغيير هذه السياسة إلى الوضع "False"، يسري تطبيقها على تشغيل الآلات الافتراضية الجديدة، ولكنها لا توقف الآلات الافتراضية المُشغّلة من قبل.
-      في حال عدم تعيين هذه السياسة على جهاز مُدار، لا يُسمح للجهاز بتشغيل الآلات الافتراضية، إلا أنه يُسمح للأجهزة غير المُدارة بتشغيل الآلات الافتراضية.</translation>
 <translation id="8669669491594628013">‏تتيح لك هذه السياسة التحكُّم في تشغيل تحذير حماية كلمة المرور. وتنبّه حماية "كلمة المرور" المستخدمين عند إعادة استخدام كلمات المرور المحمية في المواقع الإلكترونية التي يُحتمل أن تكون مريبة.
 
       يمكنك استخدام السياستين "PasswordProtectionLoginURLs" و"PasswordProtectionChangePasswordURL" لضبط كلمات المرور التي تريد حمايتها.
diff --git a/components/policy/resources/policy_templates_bg.xtb b/components/policy/resources/policy_templates_bg.xtb
index 063f063..6c57bb8 100644
--- a/components/policy/resources/policy_templates_bg.xtb
+++ b/components/policy/resources/policy_templates_bg.xtb
@@ -2751,13 +2751,6 @@
 Разделете със запетаи имената на сървърите. Заместващите знаци (*) са разрешени.
 
 В случай че това правило не е зададено, <ph name="PRODUCT_NAME" /> ще отговоря на заявки за интегрирано удостоверяване за Windows (IWA) само след като се опита да установи дали даден сървър е в интранет. Ако случаят е такъв, <ph name="PRODUCT_NAME" /> ще пренебрегне тези заявки от него.</translation>
-<translation id="8667812577403206506">Дава възможност да контролирате дали изпълняването на виртуални машини да е разрешено под Chrome OS.
-
-Ако за правилото е зададено True, стартирането на виртуални машини ще бъде позволено на устройството.
-При False то ще е забранено.
-Когато правилото бъде променено на False, стартирането на нови виртуални машини няма да е възможно, но вече работещите няма да бъдат изключени.
-В случай че правилото не е зададено на управлявано устройство, изпълняването на виртуални машини няма да е разрешено на него.
-Неуправляваните устройства могат да изпълняват виртуални машини.</translation>
 <translation id="8669669491594628013">Дава възможност да контролирате задействането на предупреждение от услугата за защита на паролата. Тази услуга сигнализира на потребителите, когато повторно използват защитената си парола на потенциално подозрителни сайтове.
 
 Можете да използвате правилата PasswordProtectionLoginURLs и PasswordProtectionChangePasswordURL, за да конфигурирате кои пароли да бъдат защитавани.
diff --git a/components/policy/resources/policy_templates_bn.xtb b/components/policy/resources/policy_templates_bn.xtb
index f07ed5e..1eedb5e 100644
--- a/components/policy/resources/policy_templates_bn.xtb
+++ b/components/policy/resources/policy_templates_bn.xtb
@@ -34,6 +34,26 @@
           এই সেটিং অক্ষম করা হলে বা কনফিগার করা না থাকলে, দূরবর্তী সহায়তার হোস্ট ব্যবহারকারীর প্রেক্ষাপটে চালানো হবে এবং দূরবর্তী ব্যবহারকারীরা ডেস্কটপে উত্থিত উইন্ডোর সাথে ইন্টারেক্ট করতে পারবে না।</translation>
 <translation id="1096105751829466145">ডিফল্ট সার্চ সরবরাহকারী</translation>
 <translation id="1099282607296956954">প্রতিটি সাইটের জন্য সাইট আইসোলেশন সক্ষম করুন</translation>
+<translation id="1100570158310952027">
+      এই নীতি উৎস (ইউআরএল) অথবা হোস্টনেম প্যাটার্ন (যেমন "*.example.com") যার জন্য 
+       অসুরক্ষিত উত্সের নিরাপত্তা সীমাবদ্ধতাগুলি
+      প্রযোজ্য হবে না।
+
+      এর উদ্দেশ্য হল সংস্থাগুলিকে লিগ্যাসি অ্যাপ্লিকেশনের জন্য সাদা উৎস সেট করতে দেওয়া
+      যা TLS স্থাপন করতে পারবে না, অথবা অভ্যন্তরীণ ওয়েব ডেভেলপমেন্টের জন্য স্টেজিং
+      সার্ভার সেট-আপ করতে পারে যাতে ডেভেলপাররা স্টেজিং সার্ভারে TLS ব্যবহার না
+      করেই এমন বৈশিষ্ট্য পরীক্ষা করে দেখতে পারেন যেগুলিতে সিকিওর প্রসঙ্গের প্রয়োজন
+      হয়। এই নীতিটি ওমনিবক্সে "সুরক্ষিত নয়" লেবেল হওয়া থেকে উত্সকে আটকাবে।
+
+      ইউআরএল-এর কমা-বিভাজিত তালিকায় '--unsafely-treat-insecure-origin-as-secure'
+      কমান্ড-লাইন ফ্ল্যাগ সেট করলে যা হওয়ার কথা, এই নীতিতে ইউআরএল-এর তালিকা সেট করলে
+      ঠিক তাই হবে। এই নীতিটি সেট করা থাকলে কমান্ড-লাইন ফ্ল্যাগকে ওভাররাইড করবে।
+      উপস্থাপনা করা হলে এই নীতিটি UnsafelyTreatInsecureOriginAsSecure-কে
+      ওভাররাইড করবে।
+
+      সুরক্ষিত প্রসঙ্গের বিষয়ে আরও তথ্যের জন্য,
+      https://www.w3.org/TR/secure-contexts/ দেখুন।
+      </translation>
 <translation id="1117535567637097036">এই নীতির মারফত সেট করা প্রোটোকল হ্যান্ডলারগুলি Android ইন্টেন্ট পরিচালনার সময় ব্যবহার করা হয় না।</translation>
 <translation id="1118093128235245168">সাইটগুলিকে ব্যবহারকারীর থেকে একটি কানেক্ট করা ইউএসবি ডিভাইস অ্যাক্সেস করার অনুমতি নিতে  বিকল্পটি চালু করুন</translation>
 <translation id="1128903365609589950">ডিস্কে ক্যাশ ফাইলগুলি স্টোর করার জন্য <ph name="PRODUCT_NAME" /> যে ডিরেক্টরি ব্যবহার করবে তা কনফিগার করে।
@@ -85,6 +105,8 @@
      এই নীতিটি সেট না করা হলে, বা মিথ্যাতে সেট করা থাকলে, TLS এ RC4 সাইফার স্যুট সক্ষম করা হবে না। অন্যথায়, এটি একটি পুরোনো সার্ভারের সাথে সামঞ্জস্য বজায় রাখার জন্য সত্যতে সেট করা যেতে পারে। এটি একটি অস্থায়ী সমাধান এবং সার্ভারটি আবার কনফিগার করা উচিত।</translation>
 <translation id="1297182715641689552">একটি .pac প্রক্সি স্ক্রিপ্ট ব্যবহার করুন</translation>
 <translation id="1304973015437969093">এক্সটেনশান/অ্যাপ আইডিগুলি এবং আপডেট URLগুলি নীরবে ইনস্টল হবে</translation>
+<translation id="1307454923744766368">উৎস অথবা হোস্টনেম প্যাটার্ন যার জন্য অনিরাপদ উত্সের
+      নিরাপত্তা সীমাবদ্ধতাগুলি প্রযোজ্য হবে না</translation>
 <translation id="1313457536529613143">স্ক্রিন অনুজ্বল হওয়ার পরে অথবা স্ক্রিন বন্ধ হয়ে যাওয়ার সাথেসাথেই যখন ব্যবহারকারীর অ্যাক্টিভিটি নিরীক্ষণ করা হয় তখন যার দ্বারা স্ক্রিনের অনুজ্বলতার বিলম্বকে পরিমাপ করা হয় তার শতাংশ নির্দিষ্ট করে৷
 
           এই নীতিটি সেট করা থাকলে, স্ক্রিন অনুজ্বল হওয়ার পরে অথবা স্ক্রিন বন্ধ হয়ে যাওয়ার সাথেসাথেই যখন ব্যবহারকারীর অ্যাক্টিভিটি নিরীক্ষণ করা হয় তখন যার দ্বারা স্ক্রিনের অনুজ্বলতার বিলম্বকে পরিমাপ করা হয় তার শতাংশ নির্দিষ্ট করে৷ যখন অনুজ্বলতার বিলম্ব স্কেল করা হয়, তখন যেভাবে মূলত করা হয়েছিল সেভাবে অনুজ্বলতা বিলম্ব থেকে একই সময়কাল বজায় রাখতে স্ক্রিনের উজ্জ্বলতা হ্রাস, স্ক্রিন বন্ধ এবং স্ক্রিন লকের বিলম্বগুলিকে সামঞ্জস্য করা হয়৷
@@ -103,6 +125,11 @@
       আপনি যদি এই সেটিং সক্ষম করেন, তাহলে Google সার্চে নিরাপদ সার্চ এবং YouTube এ সীমাবদ্ধ মোড সর্বদা সক্রিয় থাকে।
 
       আপনি যদি এই সেটিং অক্ষম করেন বা কোনও মান সেট না করেন, তাহলে Google সার্চে নিরাপদ সার্চ এবং YouTube এ সীমাবদ্ধ মোড এনফোর্স হয় না।</translation>
+<translation id="1352174694615491349">ক্লায়েন্ট সার্টিফিকেট ব্যবহারের সময় এই নীতি HTTP/2 কানেকশন একত্রিত হওয়ার অনুমতি দেয়। একত্রিত করার জন্য, এই নীতি দ্বারা বর্ণিত এক বা একাধিক প্যাটার্নের সাথে সম্ভাব্য নতুন কানেকশনের হোস্টনেম এবং আগের কানেকশনের হোস্টনেম উভয়কে মিলতে হবে। এই নীতিটি হল হোস্টের তালিকা যারা URLBlacklist ফিল্টার ফর্ম্যাট ব্যবহার করে: "example.com" ইউআরএলটি "example.com" এবং সব সাবডোমেন (যেমন "sub.example.com") এর সাথে মেলে, যখন ".example.net" ইউআরএল ".example.net" এর সাথে পুরোপুরি মেলে।
+
+      ক্লায়েন্ট সার্টিফিকেট ব্যবহার করে এমন কানেকশনের উপর বিভিন্ন হোস্টে একত্রিত হওয়ার অনুরোধ নিরাপত্তা এবং গোপনীয়তার সমস্যা তৈরি করতে পারে, পরিবেষ্টিত কর্তৃপক্ষকে সমস্ত অনুরোধ জানানো হবে, এমনকি যদি ব্যবহারকারী স্পষ্টভাবে এইটিকে অনুমোদিত নাও করে। এই নীতি অস্থায়ী এবং ভবিষ্যতে মুছে ফেলা হবে। https://crbug.com/855690 দেখুন।
+
+      যদি এই নীতি সেট না করে ছেড়ে দেওয়া হয়, তাহলে ক্লায়েন্ট সার্টিফিকেট ব্যবহার করে HTTP/2 কানেকশন একত্রিত না হতে দেওয়ার ডিফল্ট আচরণটি ব্যবহার করা হবে।</translation>
 <translation id="1353966721814789986">প্রারম্ভ পৃষ্ঠা</translation>
 <translation id="1354452738176731363">যখন এই নীতি মিথ্যাতে সেট করা হয়, ব্যবহারকারী লগ-ইন করা থাকলে ডিভাইসে অডিও আউটপুট থাকবে না।
 
@@ -201,6 +228,12 @@
           <ph name="PROXY_HELP_URL" /></translation>
 <translation id="1502843533062797703">থার্ড পার্টি সফ্টওয়্যার ইনজেকশন ব্লক করা চালু করুন</translation>
 <translation id="1504431521196476721">রিমোট প্রত্যয়িত</translation>
+<translation id="1507957856411744193">যদি এই নীতিটি 'ট্রুতে' সেট করা হয়, তাহলে <ph name="PRODUCT_NAME" />টি শুধু RFC1918/RFC4913 ব্যক্তিগত ঠিকানা নয়, সব আইপি ঠিকানার কাস্ট ডিভাইসগুলিতে কানেক্ট করবে।
+
+          যদি এই নীতিটি 'ফল্সে' সেট করা হয়, তাহলে <ph name="PRODUCT_NAME" />টি RFC1918/RFC4913 ব্যক্তিগত ঠিকানার কাস্ট ডিভাইসগুলিতে শুধুমাত্র কানেক্ট হবে।
+
+          এই নীতিটি সেট না করা হলে, যদি CastAllowAllIPs ফিচার চালু না করা থাকে তাহলে <ph name="PRODUCT_NAME" />টি শুধুমাত্র RFC1918/RFC4913 ব্যক্তিগত ঠিকানার কাস্ট ডিভাইসগুলিতে কানেক্ট করবে।
+          যদি নীতি "EnableMediaRouter" 'ফল্সে' সেট করা হয়, তাহলে এই নীতিটির গুণমানে কোনও প্রভাব পড়বে না।</translation>
 <translation id="1509692106376861764"><ph name="PRODUCT_NAME" /> ২৯ সংস্করণে এই নীতিটি সরানো হয়েছে৷</translation>
 <translation id="1514888685242892912"><ph name="PRODUCT_NAME" /> চালু করুন</translation>
 <translation id="1522425503138261032">ব্যবহারকারীর শারীরিক লোকেশন ট্র্যাক করতে সাইটগুলিকে অনুমতি দিন</translation>
@@ -222,6 +255,7 @@
 <translation id="1583248206450240930">ডিফল্ট ভাবে <ph name="PRODUCT_FRAME_NAME" /> ব্যবহার করুন</translation>
 <translation id="1599424828227887013">Android ডিভাইসে নির্দিষ্ট উৎসের জন্য সাইট আইসোলেশন চালু করুন</translation>
 <translation id="1608755754295374538">এই URLগুলিকে বিজ্ঞপ্তি ছাড়াই অডিও ক্যাপচার ডিভাইসগুলিতে অ্যাক্সেসের অধিকার দেওয়া হবে</translation>
+<translation id="1615221548356595305">ক্লায়েন্ট সার্টিফিকেট ব্যবহার করার সময়ও এই হোস্টর জন্য HTTP/2 কানেকশন একত্রিত হওয়ার অনুমতি দেয়</translation>
 <translation id="1617235075406854669">ব্রাউজার এবং ডাউনলোড ইতিহাস মুছে ফেলা সক্ষম করুন</translation>
 <translation id="163200210584085447">এই তালিকার প্যাটার্নগুলি অনুরোধ পাঠানো URL এর নিরাপত্তার
       উৎসের সাথে মেলানো হবে। যদি কোনো মিল খুঁজে পাওয়া যায়, তাহলে
@@ -369,6 +403,7 @@
       যদি এই সেটিংটি সেট না করে ছেড়ে দেওয়া হয় তাহলে এই ফাংশনটি ব্যবহার করবে কি করবে না ব্যবহারকারীরা সেটি নির্ধারণ করতে পারে।</translation>
 <translation id="2006530844219044261">পাওয়ার ম্যানেজমেন্ট</translation>
 <translation id="201557587962247231">ডিভাইসের স্থিতির প্রতিবেদন আপলোডগুলির পুনরাবৃত্তির হার</translation>
+<translation id="2017301949684549118">ওয়েব অ্যাপের ইউআরএল যেগুলি নীরবে ইন্সটল হয়।</translation>
 <translation id="2018836497795982119">ডিভাইস নীতি তথ্যের জন্য ডিভাইস পরিচালনার পরিষেবা সম্বন্ধে জানতে চাওয়ার সময়টি মিলিসেকেন্ডে নির্ধারণ করে।
 
       এই নীতিটি সেট করা হলে ৩ ঘন্টার ডিফল্ট মান অগ্রাহ্য করা হয়। এই নীতির জন্য বৈধ মান ৮৬৪০০০০০ (১ দিন) থেকে ১৮০০০০০ (৩০ মিনিট) এর মধ্যে হতে হয়। এই সীমার মধ্যে না থাকা যেকোনো মানকে নিজ নিজ সীমানাতে স্থির করা হবে। প্ল্যাটফর্মটি যদি নীতির বিজ্ঞপ্তিগুলি সমর্থন করে, তাহলে রিফ্রেশ হওয়ার বিলম্ব ২৪ ঘন্টায় সেট করা হবে কারণ এটি আশা করা হয় যে নীতির পরিবর্তন ঘটলেই নীতির বিজ্ঞপ্তিগুলি স্বয়ংক্রিয়ভাবে একবার রিফ্রেশ হতে বাধ্য করবে।
@@ -718,6 +753,11 @@
           Google এর সার্চ URL কে এভাবে নির্দিষ্ট করা যাবে: <ph name="GOOGLE_SEARCH_URL" />।
 
           'ডিফল্ট সার্চ প্রদানকারী সক্ষমিত' নীতিটি সক্ষম থাকলে এই বিকল্পটি অবশ্যই সেট থাকবে এবং কেবল এমন হলেই এটা বিবেচনা করা হবে।</translation>
+<translation id="2659019163577049044">এই সেটিংস চালু করা হলে, ব্যবহারকারীরা তাদের ফোন ও Chromebook-এর মধ্যে এস এম এস সিঙ্ক করার জন্য তাদের ডিভাইস সেট-আপ করার অনুমতি পাবেন। উল্লেখযোগ্য যে, যদি এই নীতিটিকে অনুমোদন দেওয়া হয় তাহলে, ব্যবহারকারীকে অবশ্যই একটি নির্দিষ্ট সেট-আপ প্রক্রিয়ার মধ্যে দিয়ে এসে এই ফিচারটিকে বেছে নিতে হবে। একবার এই সেট-আপ সম্পূর্ণ হয়ে গেলে, ব্যবহারকারীরা তাদের Chromebook-এ এস এম এস পাঠাতে ও গ্রহণ করতে পারবেন।
+
+    এই সেটিংস বন্ধ করা থাকলে ব্যবহারকারীরা এস এম এস সিঙ্ক সেট-আপ করার অনুমতি পাবেন না।
+
+    এই নীতিটি সেট করা না হলে, ডিফল্ট হিসেবে ম্যানেজ করা ব্যবহারকারীর জন্য অনুমোদন থাকবে না এবং ম্যানেজ করা নয় এমন ব্যবহারকারীর অনুমোদন থাকবে।</translation>
 <translation id="2660846099862559570">কখনও কোন প্রক্সি ব্যবহার করবেন না</translation>
 <translation id="267596348720209223">সার্চ প্রদানকারীর দ্বারা সমর্থিত এনকোডিং অক্ষর সুনির্দিষ্টভাবে উল্লেখ করুন৷ এনকোডিং হল কোড পৃষ্ঠা নাম যেমন UTF-8, GB2312, এবং ISO-8859-1৷ প্রদান করা অর্ডারের মধ্যে তারা চেষ্টা করেছে৷ 
 
@@ -1190,6 +1230,7 @@
       প্রতিটি তালিকা প্রবেশকার্যে একটি অভিধান থাকে যার 'extension-id' ক্ষেত্রের মধ্যে এক্সটেনশান ID, এবং 'update-url' ক্ষেত্রের মধ্যে নিজের আপডেট URL অন্তর্ভুক্ত করা আবশ্যক৷</translation>
 <translation id="3874773863217952418">সার্চ করতে ট্যাপ চালু করুন</translation>
 <translation id="3877517141460819966">সমন্বিত দ্বিতীয় পদক্ষেপ প্রমাণীকরণ মোড</translation>
+<translation id="3879208481373875102">জোর করে ইনস্টল করা ওয়েব অ্যাপের তালিকা কনফিগার করুন</translation>
 <translation id="388237772682176890">SPDY/3.1 সমর্থন সরানোর কারণে এই নীতিটি M53-এ থামানো হয় এবং M54-এ সরানো হয়।
 
       <ph name="PRODUCT_NAME" /> এর মধ্যে SPDY প্রটোকলের ব্যবহার বন্ধ করে।
@@ -1493,6 +1534,10 @@
           এই নীতির সম্পূর্ণ বর্ণনা এবং সম্ভাব্য সেটিংস ও গঠন জানতে অনুগ্রহ করে https://www.chromium.org/administrators/policy-list-3/extension-settings-full দেখুন
           </translation>
 <translation id="4554651132977135445">ব্যবহারকারীর নীতির লুপব্যাক প্রক্রিয়াকরণ মোড</translation>
+<translation id="4554841826517980623">নেটওয়ার্কে শেয়ার খুঁজে পেতে <ph name="NETBIOS_PROTOCOL" /> ব্যবহার করে <ph name="PRODUCT_NAME" />-এর নেটওয়ার্ক ফাইল শেয়ার করার বৈশিষ্ট্যটি অনুমোদিত কিনা তা এই নীতি নিয়ন্ত্রণ করে।
+      যদি নীতি ট্রুতে সেট করা থাকে তখন শেয়ার করা খোঁজা <ph name="NETBIOS_PROTOCOL" /> প্রটোকল ব্যবহার করে নেটওয়ার্কে শেয়ার করে৷
+      এই নীতিটি ফলসে সেট করা থাকে তখন, শেয়ার করা খোঁজা <ph name="NETBIOS_PROTOCOL" /> প্রটোকল ব্যবহার করে নেটওয়ার্কে শেয়ার করে৷
+      যদি নীতি সেট করা হয়নি হিসেবে করা হলে ডিফল্ট এন্টারপ্রাইজ ম্যানেজ ব্যবহারকারীর জন্য বন্ধ এবং ম্যানেজ নয় এমন ব্যবহারকারীর জন্য চালু করা হয়৷</translation>
 <translation id="4555850956567117258">ব্যবহারকারীর জন্য রিমোট প্রত্যায়ন সক্ষম করুন</translation>
 <translation id="4557134566541205630">ডিফল্ট সার্চ সরবরাহকারীর নতুন ট্যাব পৃষ্ঠার URL</translation>
 <translation id="4567137030726189378">ডেভেলপার টুল ব্যবহারের অনুমতি দিন</translation>
@@ -1556,6 +1601,7 @@
 
          যদি এই নীতিটি বন্ধ করা থাকে বা সেট না করা হয়, তাহলে সাইটগুলি এর পাশাপাশি নেভিগেট করতে এবং নতুন একটি উইন্ডো/ট্যাব খোলার অনুমতি পাবে না।</translation>
 <translation id="4680961954980851756">স্বতঃপূরণ সক্ষম করুন</translation>
+<translation id="4703402283970867140">স্ক্রিন অনুজ্জ্বল না হওয়া পর্যন্ত ডিম মডেল চালু করুন</translation>
 <translation id="4722122254122249791">নির্দিষ্ট উৎসের জন্য সাইট আইসোলেশন সক্ষম করুন</translation>
 <translation id="4722399051042571387">এটি মিথ্যায় সেট করা থাকলে, দুর্বল ও সহজে অনুমান করা যায় এমন পিন সেট করা যাবে না।
 
@@ -2050,6 +2096,7 @@
 
           যদি এই নীতিটি সেট না করে ফেলে রাখা হয়, তাহলে যখন লগইন স্ক্রিন প্রথমবার প্রদর্শিত হয় তখন কথ্য প্রতিক্রিয়া অক্ষম থাকে৷ ব্যবহারকারীরা যেকোনো সময়ে কথ্য প্রতিক্রিয়া সক্ষম বা অক্ষম করতে পারেন এবং লগইন স্ক্রিনে ব্যবহারকারীদের মধ্যে এটির স্থিতি স্থায়ী হয়৷</translation>
 <translation id="5868414965372171132">ব্যবহারকারী-স্তরের নেটওয়ার্ক কনফিগারেশান</translation>
+<translation id="5879014913445067283"><ph name="NETBIOS_NAME" /> এর মাধ্যমে নেটওয়ার্ক ফাইল শেয়ার খোঁজা নিয়ন্ত্রণ করুন</translation>
 <translation id="5883015257301027298">ডিফল্ট কুকিজ সেটিং</translation>
 <translation id="5887414688706570295">দূরবর্তী অ্যাক্সেস হোস্ট দ্বারা ব্যবহৃত হবে এমন TalkGadget উপসর্গ কনফিগার করে এবং এটিকে পরিবর্তন করা থেকে ব্যবহারকারীদের আটকায়৷
 
@@ -2340,6 +2387,7 @@
 
       <ph name="SYNC_DISABLED_POLICY_NAME" /> পলিসিটি RoamingProfileSupportEnabled ওভাররাইড করার মাধ্যমে সব ডেটা সিঙ্ক্রোনাইজেশনকে অক্ষম করে।</translation>
 <translation id="6731757988219967594">প্রাপ্তবয়স্কদের কন্টেন্ট আছে এমন সর্বোচ্চ লেভেলের সাইটগুলি (এম্বেড করা iframes ছাড়া) ফিল্টার করুন</translation>
+<translation id="6734521799274931721">ChromeOS উপলভ্যতার জন্য নেটওয়ার্ক ফাইল শেয়ার নিয়ন্ত্রণ করুন</translation>
 <translation id="6735701345096330595">ভাষাতে বানান পরীক্ষা বাধ্যতামূলকভাবে সক্ষম করুন</translation>
 <translation id="673699536430961464">এই সেটিংস ব্যবহারকারীরা তাদের <ph name="PRODUCT_OS_NAME" /> ডিভাইসে সাইন-ইন করার পরে ব্যবহারকারীদের তাদের Google অ্যাকাউন্টের মধ্যে তাদের ব্রাউজার উইন্ডোতে কন্টেন্ট এলাকায় পরিবর্তন করতে দেয়।
 
@@ -2485,6 +2533,10 @@
 <translation id="6943577887654905793">Mac/Linux অভিরুচি নাম:</translation>
 <translation id="69525503251220566">ডিফল্ট সার্চ সরবরাহকারীর জন্য প্যারামিটার ছবি অনুসারে সার্চ বৈশিষ্ট্য প্রদান করছে</translation>
 <translation id="6956272732789158625">কোনো সাইটকে কী তৈরি করা ব্যবহার করতে মঞ্জুরি দিবেন না</translation>
+<translation id="6965859329738616662">স্মার্ট ডিম মডেল স্ক্রিন অনুজ্জ্বল হওয়ার সময় বাড়ানোর জন্য অনুমোদিত কিনা তা নির্দিষ্ট করে।
+
+      যখন স্ক্রিনটি অনুজ্জ্বল হতে যায়, তখন স্মার্ট ডিম মডেল মূল্যায়ন করে যে এই কাজটি পিছিয়ে দেওয়া উচিত কিনা। যদি স্মার্ট ডিম মডেল স্ক্রিন ডিম হওয়া আটকায় তাহলে স্ক্রিন আরও কিছু সময় ধরে উজ্জ্বল থাকে। স্ক্রিন ডিম হতে কত দেরি হচ্ছে, সেই অনুযায়ী স্ক্রিন অফ হয়ে যাওয়া, স্ক্রিন লক এবং 'আইড্ল' মোডে যাওয়ার সময়সীমা অ্যাডজ্যাস্ট করা হয়।
+      যদি এই নীতিটি ট্রু-তে সেট থাকে বা সেট না করা হয়, তাহলে স্মার্ট ডিম মডেলটি চালু হয়ে যাবে এবং স্ক্রিন ডিম হওয়ার কাজটি পিছিয়ে দেবে। এই নীতিটি ফল্স হিসেবে সেট করা থাকলে স্মার্ট ডিম মডেলটি স্ক্রিন ডিম হওয়াকে প্রভাবিত করবে না।</translation>
 <translation id="6994082778848658360">দ্বিতীয় পদক্ষেপ প্রমাণীকরণ যদি এই বৈশিষ্ট্যটির সাথে সঙ্গতিপূর্ণ হয়, তাহলে তার জন্য অন-বোর্ড নিরাপদ উপাদান হার্ডওয়্যার কিভাবে ব্যবহার করা হবে, এই নীতি তা নির্দিষ্ট করে। ব্যবহারকারীর শারীরিক উপস্থিতি শনাক্ত করতে মেশিন পাওয়ার বোতাম ব্যবহার করা হয়।
 
       'অক্ষম' বিকল্পটি বেছে নিলে কোনও দ্বিতীয় পদক্ষেপের ব্যবস্থা করা হয় না।
@@ -2522,6 +2574,17 @@
 
 যদি সেট না করা থাকে, ব্যবহারকারীরা ব্যবহারকারীদের জিজ্ঞাসা করা হযে আমদানি করা হয়েছে কিনা, অথবা স্বয়য়ক্রিয়ভাবে আমদানি হতে পারে৷</translation>
 <translation id="7063895219334505671">এই সাইটগুলিতে পপআপগুলিকে মঞ্জুর করুন</translation>
+<translation id="706568410943497889">
+      যদি নীতিটি ট্রু হিসেবে সেট করা থাকে, তাহলে <ph name="PRODUCT_NAME" /> টিকে Google পরিষেবার ( যেমন, Google Meet) কাছ থেকে ওয়েব আর টি সি ইভেন্ট লগ সংগ্রহ করার এবং Google - এর কাছে ওই লগ গুলি আপলোড করার অনুমতি দেওয়া হয়।
+
+     যদি নীতিটি ফল্‌স হিসেবে সেট করা অথবা সেট না করা থাকে, তাহলে <ph name="PRODUCT_NAME" /> টি হয়ত লগ সংগ্রহ করার এবং আপলোড করার অনুমতি নাও পেতে পারে।
+
+     এই লগগুলি তে বিভিন্ন ডায়গনস্টিক তথ্য থাকে যা Chrome - এর অডিও বা ভিডিও কলের বিভিন্ন সমস্যা, যেমন, আর টি পি প্যাকেট পাঠানো ও গ্রহণ করার সময় ও সাইজ, নেটওয়ার্কে জটে আটকে পড়া সংক্রান্ত মতামত এবং অডিও ও ভিডিও ফ্রেমের সময় ও গুণমান সংক্রান্ত মেটাডেটা -র সমাধানের ক্ষেত্রে কাজে লাগে। এই লগ গুলিতে অডিও বা ভিডিও কলের কোনো কন্টেন্ট থাকেনা।
+
+    Chrome - এর এই ডেটা সংগ্রহ কেবলমাত্র Google Hangouts বা Google Meet - এর মতো Google পরিষেবা চলাকালীনই হতে পারে। 
+
+    Google এই লগ গুলি, Google পরিষেবা দ্বারা অন্য সূত্র থেকে সংগৃহীত লগের সঙ্গে একটি সেশন আই ডি -র সাহায্যে অ্যাসোসিয়েট করতে পারে; সমস্যা সহজভাবে সমাধান করতে এটি করা হয়।
+      </translation>
 <translation id="706669471845501145">ডেস্কটপ বিজ্ঞপ্তিগুলি দেখানোর জন্য সাইটগুলিকে অনুমতি দিন</translation>
 <translation id="7070525176564511548">প্রতি সপ্তাহে পাসওয়ার্ড দেওয়া প্রয়োজন (১৬৮ ঘণ্টা)</translation>
 <translation id="7072208053150563108">মেশিন পাসওয়ার্ড পরিবর্তনের হার</translation>
@@ -2674,6 +2737,9 @@
 <translation id="7336878834592315572">সেশনের স্থিতিকাল পর্যন্ত কুকিজ রাখুন</translation>
 <translation id="7340034977315324840">ডিভাইসের অ্যাক্টিভিটির সময় অভিযোগ করুন</translation>
 <translation id="7343497214039883642">ডিভাইসের জন্য এন্টারপ্রাইজ প্রিন্টার কনফিগারেশন ফাইল</translation>
+<translation id="7349338075015720646">এটি নীরবে, ব্যবহারকারীর সঙ্গে যোগাযোগ না করে ইন্সটল হওয়া ওয়েবসাইটগুলির একটি তালিকা, এবং এগুলি ব্যবহারকারীর পক্ষে আন-ইন্সটল বা বন্ধ করা সম্ভব নয়।
+
+     এই নীতির প্রতিটি তালিকাভূক্ত আইটেম দুটি সদস্যযুক্ত একেকটি অবজেক্টঃ "ইউআরএল" এবং "লঞ্চ কন্‌টেনার"। "ইউ আর এল" টি অবশ্যই ইন্সটল করা হবে এমন ওয়েব অ্যাপ - এর ইউআরএল এবং "লঞ্চ কন্‌টেনার" টি অবশ্যই হয় "উইন্ডো" অথবা "ট্যাব" যা ওয়েব অ্যাপ টি ইন্সটল হবার পরে কিভাবে খুলবে তা সূচিত করবে। "লঞ্চ কন্‌টেনার" টিকে বাদ দেওয়া হলে, Chrome যদি অ্যাপ টিকে প্রোগ্রেসিভ ওয়েব অ্যাপ মনে করে তবে সেটি একটি উইন্ডো তে খুলবে অন্যথা একটি ট্যাবে।</translation>
 <translation id="7367028210010532881">যে সমস্ত সাইট ক্ষতিকারক হতে পারে বলে চিহ্নিত, ব্যবহারকারীরা সেগুলিতে গেলে নিরাপদ ব্রাউজিং পরিষেবা একটি সতর্কতা পৃষ্ঠা দেখায়। এই সেটিংটি চালু করলে তারা কোনওভাবেই সতর্কতা পৃষ্ঠা থেকে ক্ষতিকারক সাইটে যেতে পারবেন না।
 
       এই সেটিংটি বন্ধ করলে বা কনফিগার না করলে ব্যবহারকারীরা চাইলে সতর্কবার্তা দেখার পরেও চিহ্নিত সাইটে যেতে পারবেন।
@@ -2980,6 +3046,13 @@
 
       আপনি যদি এই সেটিং অক্ষম করেন তাহলে, বুকমার্ক যুক্ত করা, সরানো বা সংশোধন করা যাবে না। তবে আগে থেকে থাকা বুকমার্কগুলি উপলব্ধ থাকবে।</translation>
 <translation id="802147957407376460">স্ক্রিন ০ ডিগ্রী ঘোরান</translation>
+<translation id="8033913082323846868">এই নীতিটি M70 এ শীঘ্রই বন্ধ করা হবে,অনুগ্রহ করে এর পরিবর্তে AutofillAddressEnabled এবং AutofillCreditCardEnabled ব্যবহার করুন।
+
+      <ph name="PRODUCT_NAME" />-এর অটো-ফিল ফিচারটি চালু করে এবং ব্যবহারকারীদের আগে সেভ করা তথ্য ব্যবহার করে ঠিকানার তথ্য ওয়েব ফর্মে নিজে থেকে পূরণ করতে দেয়।
+
+      আপনি এই সেটিং বন্ধ করলে, অটো-ফিল বৈশিষ্ট্যটি অন্যদের কাছে অ্যাক্সেসযোগ্য থাকবে না৷
+
+      আপনি এই সেটিংটি চালু বা কোনও মান কনফিগার না করলে, অটো-ফিল তবুও ব্যবহারকারীটির নিয়ন্ত্রণে থাকবে৷ এটি তাদের অটো-ফিল প্রোফাইলগুলি কনফিগার এবং তাদের ইচ্ছামত অটো-ফিল চালু বা বন্ধ করতে দেবে৷</translation>
 <translation id="8044493735196713914">ডিভাইসের চালু অবস্থা অভিযোগ করুন</translation>
 <translation id="8050080920415773384">নেটিভ প্রিন্ট</translation>
 <translation id="8059164285174960932">দূরবর্তী অ্যাক্সেস ক্লায়েন্টদের যেখানে তাদের প্রমাণীকরণ টোকেন নেওয়া উচিত সেখানকার URL</translation>
@@ -3197,6 +3270,7 @@
      এখানে "ভার্সনটি" '64 .0.3163.120 'মতো একটি সঠিক ভার্সন হতে পারে
 বা  '61.0 ' র মতো একটি ভার্সন প্রিফিক্সও হতে পারে  </translation>
 <translation id="8544375438507658205"><ph name="PRODUCT_FRAME_NAME" />-এর ডিফল্টHTML পরিবেশক</translation>
+<translation id="8544465954173828789">Chromebook থেকে ফোনে এস এম এস মেসেজ সিঙ্ক করার অনুমতি।</translation>
 <translation id="8549772397068118889">সামগ্রী প্যাকগুলির বাইরের সাইটগুলি পরিদর্শন করার সময় সর্তক করুন</translation>
 <translation id="8566842294717252664">নতুন ট্যাব পৃষ্ঠা এবং অ্যাপ লঞ্চার থেকে ওয়েব স্টোরটি লুকায়</translation>
 <translation id="8586528890725660268">এমন প্রিন্টারের বিষয়ে উল্লেখ করে যেটি কোনও ব্যবহারকারী ব্যবহার করতে পারবেন না।
@@ -3224,13 +3298,6 @@
           একাধিক সার্ভারের নামগুলি কমা দিয়ে আলাদা করে৷ ওয়াইল্ডকার্ডগুলি (*) মঞ্জুরিপ্রাপ্ত৷
 
           যদি আপনি এই নীতিটি সেট না করে ছেড়ে রাখেন তাহলে ইন্ট্রানেটে কোনো সার্ভার রয়েছে কিনা <ph name="PRODUCT_NAME" /> তা শনাক্ত করার চেষ্টা করবে এবং শুধুমাত্র তখনই এটি IWA অনুরোধগুলির প্রতিক্রিয়া জানাবে৷ যদি একটি সার্ভার ইন্টারনেট হিসাবে শনাক্ত হয় তখন এর থেকে IWA অনুরোধগুলি <ph name="PRODUCT_NAME" /> এর দ্বারা উপেক্ষিত হবে৷</translation>
-<translation id="8667812577403206506">ভার্চুয়াল মেশিন Chrome OS- এ চালানোর অনুমতি দেওয়া হয়েছে কিনা তা নিয়ন্ত্রণ করতে আপনাকে অনুমতি দেয়।
-
-      যদি নীতিটি ট্রু’তে সেট করা হয়, তাহলে ডিভাইসটি ভার্চুয়াল মেশিন চালানোর জন্য অনুমতি দেয়।
-      যদি নীতিটি ফল্সে সেট করা হয়, তাহলে ডিভাইসটি ভার্চুয়াল মেশিন চালানোর জন্য অনুমতি দেয় না।
-      এই নীতিটি ফল্সে পরিবর্তিত হলে, সেটি নতুন ভার্চুয়াল মেশিন চালানো শুরু করবে কিন্তু আগে থেকে চলতে থাকা ভার্চুয়াল মেশিনটি বন্ধ করবে না।
-      নীতিটি যদি একটি পরিচালিত ডিভাইসে সেট না করা হয় তাহলে ডিভাইসটি ভার্চুয়াল মেশিন চালানোর অনুমতি দেবে না।
-      অপরিচালিত ডিভাইসগুলি ভার্চুয়াল মেশিন চালানোর অনুমতি দেয় না।</translation>
 <translation id="8669669491594628013">আপনাকে পাসওয়ার্ড সুরক্ষার সতর্কতা ট্রিগার হওয়া নিয়ন্ত্রণ করতে দেয়। পাসওয়ার্ড সুরক্ষা ব্যবহারকারীদের সতর্ক করে দেয় যখন তারা সম্ভাব্য সন্দেহজনক সাইটগুলিতে তাদের সুরক্ষিত পাসওয়ার্ড আবার ব্যবহার করে।
 
       কোন পাসওয়ার্ড সুরক্ষিত রাখা হবে তা আপনি 'PasswordProtectionLoginURLs' এবং 'PasswordProtectionChangePasswordURL' নীতি ব্যবহার করে কনফিগার করতে পারেন।
@@ -3241,6 +3308,11 @@
       যদি এই নীতিটি সেট না করেই ছেড়ে দেওয়া হয় তাহলে পাসওয়ার্ড সুরক্ষা পরিষেবা শুধুমাত্র Google-এর পাসওয়ার্ড সুরক্ষিত রাখবে কিন্তু ব্যবহারকারীরা এই সেটিং পরিবর্তন করতে পারবেন।</translation>
 <translation id="8672321184841719703">লক্ষ্য স্বয়ংক্রিয়ভাবে আপডেট করা সংস্করণ</translation>
 <translation id="867410340948518937">U2F (সর্বজনীন দ্বিতীয় পদক্ষেপ)</translation>
+<translation id="8682611302223077049">আপনাকে মিলিসেকেন্ড এর হিসেবে একটি সময়সীমা সেট করতে দেয়, যেটি পেরিয়ে যাওয়ার পর ব্যবহারকারীকে জানানো হয় যে, বাকি হওয়া ডাউনলোডটি চালু করার জন্য <ph name="PRODUCT_NAME" /> টি অবশ্যই রি-লঞ্চ করতে হবে অথবা <ph name="PRODUCT_OS_NAME" /> ডিভাইসটি অবশ্যই রিস্টার্ট করতে হবে। 
+
+      এই পুরো সময়টি ধরে ব্যবহারকারীকে আপডেটটি - র প্রয়োজনীয়তা সম্পর্কে বারবার জানান দেওয়া হয়। <ph name="PRODUCT_OS_NAME" /> -এর জন্য, কোন আপগ্রেড খুঁজে পাওয়া গেলে, সিস্টেম ট্রে তে রিস্টার্ট - এর একটি বিজ্ঞপ্তি দেখানো হয়। <ph name="PRODUCT_NAME" /> ব্রাউজার - এর ক্ষেত্রে, সময়সীমার এক তৃতীয়াংশ পেরিয়ে গেলেই অ্যাপ মেনুটি পরিবর্তিত হয়ে রি-লঞ্চ করার বিজ্ঞপ্তি দেয়। এই বিজ্ঞপ্তিটি প্রথমে একবার রঙ বদলায় সেট করা সময়ের দুই-তৃতীয়াংশ পেরিয়ে গেলে, এবং আর একবার বদলায় পূর্ণ সময়সীমা পার হলে। <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> নীতির দ্বারা যে অতিরিক্ত বিজ্ঞপ্তি চালু করা হয় তা একই সময়সূচী মেনে চলে।
+
+    সেট না করা হলে, <ph name="PRODUCT_OS_NAME" /> ডিভাইসের জন্য ৩৪৫৬০০০০০ মিলিসেকেন্ড (চার দিন) ও <ph name="PRODUCT_NAME" /> এর জন্য ৬০৪৮০০০০০ মিলিসেকেন্ড (এক সপ্তাহ) ডিফল্ট সময়সীমা রাখা হয় l</translation>
 <translation id="8685024486845674965">আবার পাসওয়ার্ড ব্যবহার করা হয়েছে বলে পাসওয়ার্ড সুরক্ষার সতর্কতা জানানো হয়েছে</translation>
 <translation id="8693243869659262736">অন্তর্নিহিত DNS ক্লায়েন্ট ব্যবহার করুন</translation>
 <translation id="8704831857353097849">অক্ষম হওয়া প্লাগইনগুলির তালিকা</translation>
@@ -3288,6 +3360,7 @@
 
           স্কেল ফ্যাক্টরকে অবশ্যই ১০০% বা তার বেশি হতে হবে৷ নিয়মিত স্ক্রীনের অনুজ্জ্বলতা বিলম্ব থেকে উপস্থাপনা মোডে স্ক্রীনের অনুজ্জ্বলতা বিলম্বের মান কম হওয়া অনুমোদিত নয়৷</translation>
 <translation id="8798099450830957504">ডিফল্ট</translation>
+<translation id="8801680448782904838">ব্রাউজার রিলঞ্চ বা ডিভাইস রিস্টার্ট সাজেশন বা করা প্রয়োজন হলে ব্যবহারকারীকে জানানো হবে</translation>
 <translation id="8818173863808665831">ডিভাইসের ভৌগলিক লোকেশন প্রতিবেদন করুন৷
 
       যদি নীতি সেট না করা হয় বা মিথ্যা হিসাবে সেট করা হয়, লোকেশনের বিষয়ে জানানো হবে না৷</translation>
@@ -3345,6 +3418,29 @@
 
       যদি এই নীতিটি সেট করা না থাকে তাহলে <ph name="PRINTERS_ALLOW_ALL" /> নীতি মেনে চলা হয়।
       </translation>
+<translation id="8938932171964587769">M69-এ বন্ধ করে দেওয়া হয়েছে। এর পরিবর্তে 
+      OverrideSecurityRestrictionsOnInsecureOrigin ব্যবহার করুন।
+      এই নীতি উৎস (ইউআরএল) অথবা হোস্টনেম প্যাটার্ন (যেমন "*.example.com") যার জন্য
+      অসুরক্ষিত উত্সের নিরাপত্তা সীমাবদ্ধতাগুলি
+      প্রযোজ্য হবে না।
+      এর উদ্দেশ্য হল সংস্থাগুলিকে লিগ্যাসি অ্যাপ্লিকেশনের জন্য সাদা উৎস সেট করতে দেওয়া
+      যা TLS স্থাপন করতে পারবেনা, অথবা অভ্যন্তরীণ ওয়েব ডেভেলপমেন্টের জন্য স্টেজিং
+      সার্ভার সেট-আপ করতে পারে যাতে ডেভেলপাররা স্টেজিং সার্ভারে TLS ব্যবহার না
+      করেই এমন বৈশিষ্ট্য পরীক্ষা করে দেখতে পারেন যেগুলিতে সিকিওর প্রসঙ্গের প্রয়োজন
+      হয়। এই নীতিটি ওমনিবক্সে "সুরক্ষিত নয়" লেবেল হওয়া থেকে উত্সকে আটকাবে।
+
+      ইউআরএল-এর কমা-বিভাজিত তালিকায় '--unsafely-treat-insecure-origin-as-secure'
+      কমান্ড-লাইন ফ্ল্যাগ সেট করলে যা হওয়ার কথা, এই নীতিতে ইউআরএল-এর তালিকা সেট করলে
+      ঠিক তাই হবে। এই নীতিটি সেট করা থাকলে কমান্ড-লাইন ফ্ল্যাগকে ওভাররাইড করা হবে।
+
+      এই নীতিটি OverrideSecurityRestrictionsOnInsecureOrigin এর পক্ষ\ থেকে
+      M69 এ বন্ধ করে দিয়েছে। উভয় নীতি বর্তমান থাকলে,
+      OverrideSecurityRestrictionsOnInsecureOrigin এই নীতিকে ওভাররাইড
+      করবে।
+
+      সুরক্ষিত প্রসঙ্গের বিষয়ে আরও তথ্যের জন্য,
+      https://www.w3.org/TR/secure-contexts/ দেখুন
+      </translation>
 <translation id="8942616385591203339">প্রথমবার সাইন-ইন করার সময় ব্যবহারকারীকে সিঙ্কে সম্মতি দেওয়ার ডায়ালগ দেখানো যাবে কিনা তা এই নীতি নিয়ন্ত্রণ করে। ব্যবহারকারীর জন্য সিঙ্কে সম্মতি দেওয়ার ডায়ালগ দেখানোর প্রয়োজন কখনও না হলে এটিকে ফল্স হিসেবে সেট করা উচিত।
            ফল্স হিসেবে সেট করা থাকলে সিঙ্কে সম্মতি দেওয়ার ডায়ালগ দেখানো হবে না।
            ট্রু হলে বা সেট না করা থাকলে সিঙ্কে সম্মতি দেওয়ার ডায়ালগ দেখানো হবে।</translation>
diff --git a/components/policy/resources/policy_templates_ca.xtb b/components/policy/resources/policy_templates_ca.xtb
index 44c6f0b1..564e8b3 100644
--- a/components/policy/resources/policy_templates_ca.xtb
+++ b/components/policy/resources/policy_templates_ca.xtb
@@ -2728,13 +2728,6 @@
           Separeu els diversos noms de servidor amb comes. Es permet l'ús de comodins (*).
 
           Si deixeu aquesta política sense definir, <ph name="PRODUCT_NAME" /> provarà de detectar si un servidor es troba a la intranet i, en aquest cas, respondrà a les sol·licituds IWA. Si es detecta un servidor com a Internet, aleshores <ph name="PRODUCT_NAME" /> ometrà les sol·licituds IWA que enviï.</translation>
-<translation id="8667812577403206506">Et permet controlar si es poden executar màquines virtuals a Chrome OS.
-
-      Si la política es defineix en "true", el dispositiu podrà executar màquines virtuals.
-      Si la política es defineix en "false", el dispositiu no podrà executar màquines virtuals.
-      Si la política es canvia a "false", afectarà l'execució de màquines virtuals noves, però no desactivarà les que ja s'estan executant.
-      Si la política no es defineix en un dispositiu gestionat, el dispositiu no tindrà permís per executar màquines virtuals.
-      Els dispositius no gestionats tenen permís per executar màquines virtuals.</translation>
 <translation id="8669669491594628013">Et permet controlar l'activació d'un advertiment sobre la protecció de contrasenyes, que avisa els usuaris quan reutilitzen una contrasenya protegida en llocs web potencialment sospitosos.
 
       Pots utilitzar les polítiques PasswordProtectionLoginURLs i PasswordProtectionChangePasswordURL per configurar quina contrasenya vols protegir.
diff --git a/components/policy/resources/policy_templates_cs.xtb b/components/policy/resources/policy_templates_cs.xtb
index cdb3c4c..d9db1ef 100644
--- a/components/policy/resources/policy_templates_cs.xtb
+++ b/components/policy/resources/policy_templates_cs.xtb
@@ -2788,13 +2788,6 @@
 Chcete-li zadat několik názvů serverů, oddělte je čárkami. Zástupné znaky (*) jsou povoleny.
 
 Pokud zásada zůstane nenastavena, pokusí se <ph name="PRODUCT_NAME" /> zjistit, zda se server nachází v intranetu, a teprve poté bude reagovat na požadavky IWA. Pokud bude server zjištěn jako internet, bude <ph name="PRODUCT_NAME" /> požadavky IWA ignorovat.</translation>
-<translation id="8667812577403206506">Umožňuje určit, zda má být v systému Chrome OS povoleno spouštění virtuálních počítačů.
-
-      Pokud je tato zásada nastavena na hodnotu True, spouštění virtuálních počítačů je v zařízení povoleno.
-      Pokud je tato zásada nastavena na hodnotu False, spouštění virtuálních počítačů v zařízení povoleno není.
-      Při změně na hodnotu False se na spouštění nových virtuálních počítačů použije nové nastavení, ale již spuštěné virtuální počítače nebudou ukončeny.
-      Pokud na spravovaném zařízení není nastavena tato zásada, je v něm spouštění virtuálních počítačů zakázáno.
-      Na zařízeních, která nejsou spravována, je spouštění virtuálních počítačů povoleno.</translation>
 <translation id="8669669491594628013">Umožňuje ovládat spouštění upozornění ohledně ochrany hesla. Upozornění ohledně ochrany hesla se uživatelům zobrazí, pokud své chráněné heslo použijí na potenciálně podezřelých webech.
 
       Pomocí zásad PasswordProtectionLoginURLs a PasswordProtectionChangePasswordURL můžete nakonfigurovat, která hesla mají být chráněna.
diff --git a/components/policy/resources/policy_templates_da.xtb b/components/policy/resources/policy_templates_da.xtb
index aa16e29b..0f6a13a 100644
--- a/components/policy/resources/policy_templates_da.xtb
+++ b/components/policy/resources/policy_templates_da.xtb
@@ -2748,13 +2748,6 @@
           Adskil servernavne med kommaer. Jokertegn (*) er tilladt.
 
           Hvis denne politik ikke indstilles, prøver <ph name="PRODUCT_NAME" /> at registrere, om der er en server på intranettet, og kun i det tilfælde reageres der på IWA-anmodninger. Hvis en server registreres som internet, ignoreres IWA-anmodninger af <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Giver dig mulighed for at bestemme, om virtuelle maskiner skal have tilladelse til at køre i Chrome OS.
-
-      Hvis politikken er angivet som Sand, har enheden tilladelse til at køre virtuelle maskiner.
-      Hvis politikken er angivet som Falsk, har enheden ikke tilladelse til at køre virtuelle maskiner.
-      Hvis indstillingen for politikken ændres til Falsk, gælder den for start af nye virtuelle maskiner, men den stopper ikke virtuelle maskiner, som allerede kører.
-      Hvis politikken ikke angives på en administreret enhed, har enheden ikke tilladelse til at køre virtuelle maskiner.
-      Enheder, der ikke administreres, har tilladelse til at køre virtuelle maskiner.</translation>
 <translation id="8669669491594628013">Giver dig mulighed for at styre aktivering af advarsler om adgangskodebeskyttelse. Adgangskodebeskyttelse advarer brugerne, når de bruger deres beskyttede adgangskode på potentielt mistænkelige websites.
 
       Du kan bruge politikkerne "PasswordProtectionLoginURLs" og "PasswordProtectionChangePasswordURL" til at konfigurere, hvilken adgangskode der skal beskyttes.
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index bb703d5..8999e18 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -2749,13 +2749,6 @@
           Fügen Sie zwischen den verschiedenen Servernamen ein Komma als Trennzeichen ein. Platzhalter (*) sind zulässig.
 
           Wenn Sie diese Richtlinie nicht konfigurieren, versucht <ph name="PRODUCT_NAME" /> zu ermitteln, ob der fragliche Server sich im Intranet befindet, und reagiert nur dann auf IWA-Anfragen. Wenn der Server sich dagegen im Internet befindet, werden dessen IWA-Anfragen von <ph name="PRODUCT_NAME" /> ignoriert.</translation>
-<translation id="8667812577403206506">Mit dieser Richtlinie können Sie festlegen, ob virtuelle Maschinen unter Chrome OS ausgeführt werden dürfen.
-
-      Wenn die Richtlinie auf "true" festgelegt ist, dürfen virtuelle Maschinen auf dem Gerät ausgeführt werden.
-      Wenn die Richtlinie auf "false" festgelegt ist, dürfen keine virtuellen Maschinen auf dem Gerät ausgeführt werden.
-      Wird diese Richtlinie auf "false" geändert, wirkt sich dies nur auf den Start neuer virtueller Maschinen aus. Virtuelle Maschinen, die bereits laufen, werden davon nicht beendet.
-      Ist diese Richtlinie auf einem verwalteten Gerät nicht konfiguriert, darf das Gerät virtuelle Maschinen nicht ausführen.
-      Auf nicht verwalteten Geräten dürfen virtuelle Maschinen ausgeführt werden.</translation>
 <translation id="8669669491594628013">Mit dieser Richtlinie können Sie die Auslösung der Passwortschutzwarnung steuern. Durch diese Meldung werden Nutzer gewarnt, wenn sie ihr geschütztes Passwort auf potenziell verdächtigen Websites wiederverwenden.
 
       Mithilfe der Richtlinien "PasswordProtectionLoginURLs" und "PasswordProtectionChangePasswordURL" können Sie konfigurieren, welches Passwort geschützt werden soll.
diff --git a/components/policy/resources/policy_templates_el.xtb b/components/policy/resources/policy_templates_el.xtb
index 556a047..cf8f35c7 100644
--- a/components/policy/resources/policy_templates_el.xtb
+++ b/components/policy/resources/policy_templates_el.xtb
@@ -2872,13 +2872,6 @@
           Διαχωρισμός πολλών ονομάτων διακομιστών με κόμματα. Επιτρέπονται χαρακτήρες μπαλαντέρ (*).
 
           Αν δεν ορίσετε αυτήν την πολιτική, το <ph name="PRODUCT_NAME" /> θα προσπαθήσει να διαπιστώσει αν ένας διακομιστής ανήκει στο εσωτερικό δίκτυο και μόνο τότε θα απαντήσει σε αιτήματα IWA. Αν διαπιστωθεί ότι κάποιος διακομιστής προέρχεται από το διαδίκτυο, τα αιτήματα IWA από αυτόν θα παραβλέπονται από το <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Σας επιτρέπει να ελέγχετε εάν θα επιτρέπεται η εκτέλεση εικονικών μηχανημάτων στο Chrome OS.
-
-      Εάν η πολιτική οριστεί ως True, επιτρέπεται στη συσκευή να εκτελεί εικονικά μηχανήματα.
-     Εάν η πολιτική οριστεί ως False, δεν θα επιτρέπεται στη συσκευή να εκτελεί εικονικά μηχανήματα.
-      Όταν η πολιτική αλλάξει σε False, εφαρμόζεται στην έναρξη νέων εικονικών μηχανημάτων, αλλά δεν τερματίζει τη λειτουργία εικονικών μηχανημάτων που εκτελούνται ήδη.
-      Εάν αυτή η πολιτική δεν οριστεί σε μια διαχειριζόμενη συσκευή, δεν επιτρέπεται στη συσκευή να εκτελεί εικονικά μηχανήματα. 
-      Επιτρέπεται στις μη διαχειριζόμενες συσκευές να εκτελούν εικονικά μηχανήματα.</translation>
 <translation id="8669669491594628013">Σας δίνει τη δυνατότητα να ελέγξετε την ενεργοποίηση της προειδοποίησης προστασίας κωδικού πρόσβασης. Οι ειδοποιήσεις προστασίας κωδικού πρόσβασης ειδοποιούν τους χρήστες, όταν επαναχρησιμοποιούν τον προστατευμένο κωδικό πρόσβασής τους σε δυνητικά ύποπτους ιστοτόπους.
 
       Μπορείτε να χρησιμοποιήσετε τις πολιτικές "PasswordProtectionLoginURLs" και "PasswordProtectionChangePasswordURL", για να διαμορφώσετε ποιος κωδικός πρόσβασης θα προστατεύεται.
diff --git a/components/policy/resources/policy_templates_en-GB.xtb b/components/policy/resources/policy_templates_en-GB.xtb
index a49300d..d1c3606 100644
--- a/components/policy/resources/policy_templates_en-GB.xtb
+++ b/components/policy/resources/policy_templates_en-GB.xtb
@@ -203,6 +203,7 @@
 <translation id="1522425503138261032">Allow sites to track the users' physical location</translation>
 <translation id="152657506688053119">List of alternative URLs for the default search provider</translation>
 <translation id="1530812829012954197">Always render the following URL patterns in the host browser</translation>
+<translation id="1541170838458414064">Restrict printing page size</translation>
 <translation id="1553684822621013552">When this policy is set to true, ARC will be enabled for the user
       (subject to additional policy settings checks – ARC will still be
       unavailable if either ephemeral mode or multiple sign-in is enabled
@@ -384,6 +385,12 @@
 <translation id="2082205219176343977">Configure minimum allowed Chrome version for the device.</translation>
 <translation id="209586405398070749">Stable channel</translation>
 <translation id="2098658257603918882">Enable reporting of usage and crash-related data</translation>
+<translation id="2098916259427011890">This policy controls whether to report version information, such as OS version, OS platform, OS architecture, <ph name="PRODUCT_NAME" /> version and <ph name="PRODUCT_NAME" /> channel.
+
+      When this policy is left unset or set to True, version information is gathered.
+      When this policy is set to False, version information is not gathered.
+
+      This policy is only effective when the Chrome Reporting Extension and Cloud Management are enabled.</translation>
 <translation id="2111016292707172233">Enables the availability of Tap to Search in <ph name="PRODUCT_NAME" />'s content view.
 
       If you enable this setting, Tap to Search will be available to the user and they can choose to turn the feature on or off.
@@ -417,6 +424,8 @@
       If the policy is not set, the default value is 0 degrees and the user is
       free to change it. In this case, the default value is not reapplied at
       restart.</translation>
+<translation id="214901426630414675">Restrict printing duplex mode</translation>
+<translation id="2149330464730004005">Enable colour printing</translation>
 <translation id="2156132677421487971">Configure policies for <ph name="PRODUCT_NAME" />, a feature that allows users to send the contents of tabs, sites or the desktop from the browser to remote displays and sound systems.</translation>
 <translation id="2166472654199325139">Do not filter sites for adult content</translation>
 <translation id="2168397434410358693">Idle delay when running on AC power</translation>
@@ -616,6 +625,7 @@
 <translation id="2529880111512635313">Configure the list of force-installed apps and extensions</translation>
 <translation id="253135976343875019">Idle warning delay when running on AC power</translation>
 <translation id="2536525645274582300">User decides whether to enable Google Location services</translation>
+<translation id="2550593661567988768">Simplex printing only</translation>
 <translation id="2552966063069741410">Timezone</translation>
 <translation id="2562339630163277285">Specifies the URL of the search engine used to provide instant results. The URL should contain the string <ph name="SEARCH_TERM_MARKER" />, which will be replaced at query time by the text the user has entered so far.
 
@@ -749,9 +759,12 @@
       If you disable this setting or do not set a value, Print Preview will use the most recently used printer as the default destination choice.
 
       If you enable this setting, Print Preview will use the OS system default printer as the default destination choice.</translation>
+<translation id="2856674246949497058">Roll back and stay on target version if OS version is newer than target. Do a powerwash during the process.</translation>
 <translation id="2872961005593481000">Shut down</translation>
+<translation id="2873651257716068683">Overrides default printing page size. If the page size is unavailable, this policy is ignored.</translation>
 <translation id="2874209944580848064">Note for <ph name="PRODUCT_OS_NAME" /> devices supporting Android apps:</translation>
 <translation id="2877225735001246144">Disable CNAME lookup when negotiating Kerberos authentication</translation>
+<translation id="2892414556511568464">Restricts printing duplex mode. Unset policy and empty set are treated as no restriction.</translation>
 <translation id="2893546967669465276">Send system logs to the management server</translation>
 <translation id="2899002520262095963">Android apps can use the network configurations and CA certificates set via this policy, but do not have access to some configuration options.</translation>
 <translation id="290002216614278247">Allows you to lock the user's session based on the client time or the usage quota of the day.
@@ -841,6 +854,7 @@
 
       Servers are encouraged to migrate to ECDHE cipher suites. If these are unavailable, ensure a cipher suite using RSA key exchange is enabled.</translation>
 <translation id="316778957754360075">This setting has been retired as of <ph name="PRODUCT_NAME" /> version 29. The recommended way to set up organisation-hosted extension/app collections is to include the site hosting the CRX packages in ExtensionInstallSources and put direct download links to the packages on a web page. A launcher for that web page can be created using the ExtensionInstallForcelist policy.</translation>
+<translation id="3171369832001535378">Device network hostname template</translation>
 <translation id="3185009703220253572">since version <ph name="SINCE_VERSION" /></translation>
 <translation id="3187220842205194486">Android apps cannot get access to corporate keys. This policy has no effect on them.</translation>
 <translation id="3201273385265130876">Allows you to specify the proxy server used by <ph name="PRODUCT_NAME" /> and prevents users from changing proxy settings.
@@ -953,6 +967,7 @@
 
         The value of this policy is an Enrolment token that can be retrieved from the Google Admin console.</translation>
 <translation id="3496296378755072552">Password manager</translation>
+<translation id="3502555714327823858">Allow all duplex modes</translation>
 <translation id="350443680860256679">Configure ARC</translation>
 <translation id="3504791027627803580">Specifies the URL of the search engine used to provide image search. Search requests will be sent using the GET method. If the DefaultSearchProviderImageURLPostParams policy is set then image search requests will use the POST method instead.
 
@@ -962,6 +977,7 @@
 <translation id="350797926066071931">Enable Translate</translation>
 <translation id="3512226956150568738">If the client device model already supported ARC before migration to ext4 was necessary to run ARC and if the ArcEnabled policy is set to true, this option will behave as AskUser (value 3). In all other cases (if the device model did not support ARC before, or if ArcEnabled policy is set to false), this value is equivalent to DisallowArc (value 0).</translation>
 <translation id="3524204464536655762">Do not allow any site to request access to USB devices via the WebUSB API</translation>
+<translation id="3526752951628474302">Monochrome printing only</translation>
 <translation id="3528000905991875314">Enable alternate error pages</translation>
 <translation id="3545457887306538845">Allows you to control where Developer Tools can be used.
 
@@ -985,6 +1001,7 @@
 <translation id="3577251398714997599">Ads setting for sites with intrusive ads</translation>
 <translation id="3591584750136265240">Configure the login authentication behaviour</translation>
 <translation id="3627678165642179114">Enable or disable spell checking web service</translation>
+<translation id="3628480121685794414">Enable simplex printing</translation>
 <translation id="3646859102161347133">Set screen magnifier type</translation>
 <translation id="3653237928288822292">Default search provider icon</translation>
 <translation id="3660562134618097814">Transfer SAML IdP cookies during login</translation>
@@ -1086,6 +1103,7 @@
       If the policy is set to false, the kiosk session information will not be
       reported. If set to true or left unset, kiosk session information will be
       reported.</translation>
+<translation id="3858658082795336534">Default printing duplex mode</translation>
 <translation id="3859780406608282662">Add a parameter to the fetching of the Variations seed in <ph name="PRODUCT_OS_NAME" />.
 
       If specified, will add a query parameter called 'restrict' to the URL used to fetch the Variations seed. The value of the parameter will be the value specified in this policy.
@@ -1194,6 +1212,12 @@
       Otherwise it may be set to one of the following values: 'tls1.2' or 'tls1.3'. When set, <ph name="PRODUCT_NAME" /> will not use SSL/TLS versions greater than the specified version. An unrecognised value will be ignored.</translation>
 <translation id="4121350739760194865">Prevent app promotions from appearing on the new tab page</translation>
 <translation id="412697421478384751">Enable users to set weak PINs for the lock screen PIN</translation>
+<translation id="4129183564590133854">This policy controls whether to report information that can be used to identify users, such as OS login, <ph name="PRODUCT_NAME" /> Profile login, <ph name="PRODUCT_NAME" /> Profile name, <ph name="PRODUCT_NAME" /> Profile path and <ph name="PRODUCT_NAME" /> executable path.
+
+      When this policy is left unset or set to True, information that can be used to identify users is gathered.
+      When this policy is set to False, information that can be used to identify users is not gathered.
+
+      This policy is only effective when the Chrome Reporting Extension and Cloud Management are enabled.</translation>
 <translation id="4138655880188755661">Time Limit</translation>
 <translation id="4157003184375321727">Report OS and firmware version</translation>
 <translation id="4157594634940419685">Allow access to native CUPS printers</translation>
@@ -1505,6 +1529,12 @@
       If it is not set, the user may be asked whether to import or importing may happen automatically.</translation>
 <translation id="5056708224511062314">Screen magnifier disabled</translation>
 <translation id="5058573563327660283">Select the strategy used to free up disk space during automatic clean-up (deprecated)</translation>
+<translation id="5058771123777243130">This policy controls whether to report policy data and time of policy fetch.
+
+      When this policy is left unset or set to True, policy data and time of policy fetch are gathered.
+      When this policy is set to False, policy data and time of policy fetch are not gathered.
+
+      This policy is only effective when the Chrome Reporting Extension and Cloud Management are enabled.</translation>
 <translation id="5067143124345820993">Login user white list</translation>
 <translation id="5068140065960598044"><ph name="PRODUCT_NAME" /> cloud policy overrides Machine policy.</translation>
 <translation id="5085647276663819155">Disable Print Preview</translation>
@@ -1621,6 +1651,7 @@
 <translation id="5366977351895725771">If set to false, supervised-user creation by this user will be disabled. Any existing supervised users will still be available.
 
           If set to true or not configured, supervised users can be created and managed by this user.</translation>
+<translation id="5369937289900051171">Colour printing only</translation>
 <translation id="5370279767682621504">Enable HTTP/0.9 support on non-default ports</translation>
 <translation id="5378985487213287085">Allows you to set whether websites are allowed to display desktop notifications. Displaying desktop notifications can be allowed by default, denied by default or the user can be asked every time a website wants to show desktop notifications.
 
@@ -1647,6 +1678,7 @@
 
       If it is not set, the user may be asked whether to import or importing may happen automatically.</translation>
 <translation id="5423197884968724595">Android WebView restriction name:</translation>
+<translation id="5424147596523390018">Allow all colour modes</translation>
 <translation id="5442026853063570579">This policy also controls access to Android Developer Options. If you set this policy to 'DeveloperToolsDisallowed' (value 2), users cannot access Developer Options. If you set this policy to another value or leave it unset, users can access Developer Options by tapping seven times on the build number in the Android settings app.</translation>
 <translation id="5447306928176905178">Enable reporting memory info (JS heap size) to page (deprecated)</translation>
 <translation id="5457065417344056871">Enable guest mode in browser</translation>
@@ -1714,6 +1746,7 @@
 <translation id="5586942249556966598">Do nothing</translation>
 <translation id="5630352020869108293">Restore the last session</translation>
 <translation id="5645779841392247734">Allow cookies on these sites</translation>
+<translation id="5689430183304951538">Default printing page size</translation>
 <translation id="5693469654327063861">Allow data migration</translation>
 <translation id="5694594914843889579">When this policy is set to true, external storage will not be available in the file browser.
 
@@ -1743,6 +1776,7 @@
           When this policy is unset, a default length of time is used.
 
           The policy value should be specified in milliseconds.</translation>
+<translation id="5783009211970309878">Print headers and footers</translation>
 <translation id="5809728392451418079">Set the display name for device-local accounts</translation>
 <translation id="5814301096961727113">Set the default state of spoken feedback on the login screen</translation>
 <translation id="5815129011704381141">Automatically reboot after update</translation>
@@ -1760,6 +1794,7 @@
       If 'Disabled' is selected, pages may not be opened in Incognito mode.
 
       If 'Forced' is selected, pages may be opened ONLY in Incognito mode.</translation>
+<translation id="582857022372205358">Enable short-edge duplex printing</translation>
 <translation id="583091600226586337">
       If the policy is enabled, the user will be asked where to save each file before downloading.
       If the policy is disabled, downloads will start immediately, and the user will not be asked where to save the file.
@@ -1795,6 +1830,7 @@
 
           If this setting is disabled or not configured, gnubby authentication requests will not be proxied.</translation>
 <translation id="5898486742390981550">When multiple users are logged in, only the primary user can use Android apps.</translation>
+<translation id="5901427587865226597">Duplex printing only</translation>
 <translation id="5906199912611534122">Allows enabling or disabling network throttling.
       This applies to all users, and to all interfaces on the device. Once set,
       the throttling persists until the policy is changed to disable it.
@@ -1902,6 +1938,7 @@
 
           The policy value should be specified in milliseconds. Values are clamped to be less than the idle delay.</translation>
 <translation id="6097601282776163274">Enable URL-keyed anonymised data collection</translation>
+<translation id="6099853574908182288">Default printing colour mode</translation>
 <translation id="6111936128861357925">Allow Dinosaur Easter Egg Game</translation>
 <translation id="6114416803310251055">deprecated</translation>
 <translation id="6133088669883929098">Allow all sites to use key generation</translation>
@@ -1916,6 +1953,7 @@
 
           If this policy is left not set the global default value will be used for all sites either from the 'DefaultPluginsSetting' policy if it is set, or the user's personal configuration otherwise.</translation>
 <translation id="6190022522129724693"> setting</translation>
+<translation id="6190367314942602985">Report user identification information</translation>
 <translation id="6197453924249895891">Grants access to corporate keys to extensions.
 
       Keys are designated for corporate usage if they're generated using the chrome.enterprise.platformKeys API on a managed account. Keys imported or generated in another way are not designated for corporate usage.
@@ -1925,6 +1963,8 @@
       By default an extension cannot use a key designated for corporate usage, which is equivalent to setting allowCorporateKeyUsage to false for that extension.
 
       Only if allowCorporateKeyUsage is set to true for an extension, it can use any platform key marked for corporate usage to sign arbitrary data. This permission should only be granted if the extension is trusted to secure access to the key against attackers.</translation>
+<translation id="6208896993204286313">Report <ph name="PRODUCT_NAME" /> policy information</translation>
+<translation id="6210259502936598222">Report OS and <ph name="PRODUCT_NAME" /> version information</translation>
 <translation id="6211428344788340116">Report device activity times.
 
       If this setting is not set or set to True, enrolled devices will report time periods when a user is active on the device. If this setting is set to False, device activity times will not be recorded or reported.</translation>
@@ -1938,6 +1978,7 @@
 <translation id="6233173491898450179">Set download directory</translation>
 <translation id="6244210204546589761">URLs to open on start-up</translation>
 <translation id="6258193603492867656">Specifies whether the generated Kerberos SPN should include a non-standard port. If you enable this setting, and a non-standard port (i.e. a port other than 80 or 443) is entered, it will be included in the generated Kerberos SPN. If you disable this setting, the generated Kerberos SPN will not include a port in any case.</translation>
+<translation id="6261643884958898336">Report machine identification information</translation>
 <translation id="6281043242780654992">Configures policies for Native Messaging. Blacklisted native messaging hosts won't be allowed unless they are whitelisted.</translation>
 <translation id="6282799760374509080">Allow or deny audio capture</translation>
 <translation id="6284362063448764300">TLS 1.1</translation>
@@ -1968,6 +2009,7 @@
           If you choose to auto detect the proxy server, the script URL "http://wpad/wpad.dat" is provided to Android apps. No other part of the proxy auto-detection protocol is used.
 
           If you choose to use a .pac proxy script, the script URL is provided to Android apps.</translation>
+<translation id="6430366557948788869">Chrome Reporting Extension</translation>
 <translation id="6440051664870270040">Allow sites to simultaneously navigate and open pop-ups</translation>
 <translation id="6447948611083700881">Backup and restore disabled</translation>
 <translation id="645425387487868471">Enable force sign-in for <ph name="PRODUCT_NAME" /></translation>
@@ -2014,6 +2056,7 @@
 <translation id="6628646143828354685">Allows you to set whether websites are allowed to get access to nearby Bluetooth devices. Access can be completely blocked, or the user can be asked every time a website wants to get access to nearby Bluetooth devices.
 
           If this policy is left not set, '3' will be used, and the user will be able to change it.</translation>
+<translation id="663685822663765995">Restrict printing colour mode</translation>
 <translation id="6641981670621198190">Disable support for 3D graphics APIs</translation>
 <translation id="6647965994887675196">If set to true, supervised users can be created and used.
 
@@ -2041,6 +2084,7 @@
 
           URL patterns in this policy should not clash with ones configured via WebUsbAskForUrls. It is unspecified which of the two policies takes precedence if a URL matches with both.</translation>
 <translation id="6689792153960219308">Report hardware status</translation>
+<translation id="6698632841807204978">Enable monochrome printing</translation>
 <translation id="6699880231565102694">Enable two-factor authentication for remote access hosts</translation>
 <translation id="6724842112053619797">If you enable this setting, the settings stored in <ph name="PRODUCT_NAME" /> profiles like bookmarks, auto-fill data, passwords, etc. will also be written to a file stored in the roaming user profile folder or a location specified by the Administrator through the <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" /> policy. Enabling this policy disables cloud sync.
 
@@ -2080,6 +2124,12 @@
       This setting controls the presentation of the welcome pages that help users sign in to <ph name="PRODUCT_NAME" />, choose it as their default browser or otherwise inform them of product features.</translation>
 <translation id="6766216162565713893">Allow sites to ask the user to grant access to a nearby Bluetooth device</translation>
 <translation id="6770454900105963262">Report information about active kiosk sessions</translation>
+<translation id="6773056206551814546">This policy controls whether to report information that can be used to identify machines, such as machine name and network addresses.
+
+      When this policy is left unset or set to True, information that can be used to identify machines is gathered.
+      When this policy is set to False, information that can be used to identify machines is not gathered.
+
+      This policy is only effective when the Chrome Reporting Extension and Cloud Management are enabled.</translation>
 <translation id="6786747875388722282">Extensions</translation>
 <translation id="6786967369487349613">Set the roaming profile directory</translation>
 <translation id="6810445994095397827">Block JavaScript on these sites</translation>
@@ -2183,6 +2233,7 @@
 <translation id="6923366716660828830">Specifies the name of the default search provider. If left empty or not set, the host name specified by the search URL will be used.
 
           This policy is only considered if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
+<translation id="6926703471186170050">Enable long-edge duplex printing</translation>
 <translation id="6931242315485576290">Disable synchronisation of data with Google</translation>
 <translation id="6936894225179401731">Specifies the maximal number of simultaneous connections to the proxy server.
 
@@ -2390,6 +2441,7 @@
       If this setting is disabled or not configured then users can choose to proceed to the flagged site after being shown the warning.
 
       See https://developers.google.com/safe-browsing for more info on Safe Browsing.</translation>
+<translation id="737655323154569539">Restricts printing page size. Unset policy and empty set are treated as no restriction.</translation>
 <translation id="7417728346887499628">If disabled, prevents Chrome Cleanup from scanning the system for unwanted software and performing cleanups. Manually triggering Chrome Cleanup from chrome://settings/cleanup is disabled.
 
       If enabled or unset, Chrome Cleanup periodically scans the system for unwanted software and should any be found, will ask the user if they wish to remove it. Manually triggering Chrome Cleanup from chrome://settings is enabled.
@@ -2460,6 +2512,8 @@
 <translation id="7617319494457709698">This policy specifies the allowed extensions to use the <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> function <ph name="CHALLENGE_USER_KEY_FUNCTION" /> for remote attestation. Extensions must be added to this list to use the API.
 
           If an extension is not in the list, or the list is not set, the call to the API will fail with an error code.</translation>
+<translation id="7618907117929117943">Roll back and stay on target version if OS version is newer than target and it's possible to carry over device-level configuration (including network credentials) through rollback, also skipping OOBE after rollback. Don't do or abort rollback if that's not possible (because the target version doesn't support restoring data or because of a backward-incompatible change).
+          Supported on <ph name="PRODUCT_OS_NAME" /> version 70 and higher. For older clients, this value means that rollback is disabled.</translation>
 <translation id="7625444193696794922">Specifies the release channel that this device should be locked to.</translation>
 <translation id="7632724434767231364">GSSAPI library name</translation>
 <translation id="7635471475589566552">Configures the application locale in <ph name="PRODUCT_NAME" /> and prevents users from changing the locale.
@@ -2662,6 +2716,7 @@
       If you enable this setting or do not set a value, Auto-Fill will remain under the control of the user. This will allow them to configure Auto-Fill profiles and to switch Auto-Fill on or off at their own discretion.</translation>
 <translation id="8044493735196713914">Report device boot mode</translation>
 <translation id="8050080920415773384">Native Printing</translation>
+<translation id="8053580360728293758">Overrides default printing colour mode. If the mode is unavailable, this policy is ignored.</translation>
 <translation id="8059164285174960932">URL where remote access clients should obtain their authentication token</translation>
 <translation id="8078366200175825572">Allows you to set a list of URL patterns that specify sites which are not allowed to set cookies.
 
@@ -2848,6 +2903,7 @@
       Here 'Version' can be either an exact version such as '61.0.3163.120' or a version prefix, such as '61.0'  </translation>
 <translation id="8544375438507658205">Default HTML renderer for <ph name="PRODUCT_FRAME_NAME" /></translation>
 <translation id="8544465954173828789">Allow SMS messages to be synced from phone to Chromebook.</translation>
+<translation id="8548832052135586762">Sets printing to colour only, monochrome only or no colour mode restriction. Unset policy is treated as no restriction.</translation>
 <translation id="8549772397068118889">Warn when visiting sites outside of content packs</translation>
 <translation id="8566842294717252664">Hide the web store from the New Tab Page and app launcher</translation>
 <translation id="8586528890725660268">Specifies the printers which a user cannot use.
@@ -2875,13 +2931,6 @@
           Separate multiple server names with commas. Wildcards (*) are allowed.
 
           If you leave this policy unset <ph name="PRODUCT_NAME" /> will try to detect if a server is on the Intranet and only then will it respond to IWA requests. If a server is detected as Internet then IWA requests from it will be ignored by <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Allows you to control whether virtual machines are allowed to run on Chrome OS.
-
-      If the policy is set to True, the device is allowed to run virtual machines.
-      If the policy is set to False, the device will not be allowed to run virtual machines.
-      When this policy is changed to False, it applies to starting new virtual machines but does not shut down virtual machines which are already running.
-      When this policy is not set on a managed device, the device is not allowed to run virtual machines.
-      Unmanaged devices are allowed to run virtual machines.</translation>
 <translation id="8669669491594628013">Allows you to control the triggering of password protection warning. Password protection alerts users when they reuse their protected password on potentially suspicious sites.
 
       You can use 'PasswordProtectionLoginURLs' and 'PasswordProtectionChangePasswordURL' policies to configure which password to protect.
@@ -2967,6 +3016,7 @@
 
       If this setting is left not set the user can decide to use this function or not.</translation>
 <translation id="8870318296973696995">Homepage</translation>
+<translation id="8876188741456358123">Overrides default printing duplex mode. If the mode is unavailable, this policy is ignored.</translation>
 <translation id="8882006618241293596">Block the <ph name="FLASH_PLUGIN_NAME" /> plug-in on these sites</translation>
 <translation id="890403179930035128">Force-enables spellcheck languages. Unrecognised languages in that list will be ignored.
 
@@ -3063,6 +3113,8 @@
 <translation id="9084985621503260744">Specify whether video activity affects power management</translation>
 <translation id="9088433379343318874">Enable the supervised user content provider</translation>
 <translation id="9088444059179765143">Configure the automatic timezone detection method</translation>
+<translation id="9094064873808699479">Roll back and stay on target version if OS version is newer than target. Try to carry over device-level configuration (including network credentials) through the rollback process, if possible, but do the rollback with full powerwash even if restoring the data is not possible (because the target version doesn't support restoring data or because of a backward-incompatible change).
+          Supported on <ph name="PRODUCT_OS_NAME" /> version 70 and higher. For older clients, this value means that rollback is disabled.</translation>
 <translation id="9096086085182305205">Authentication server whitelist</translation>
 <translation id="9098553063150791878">Policies for HTTP authentication</translation>
 <translation id="9105265795073104888">Only a subset of proxy configuration options are made available to Android apps. Android apps may voluntarily choose to use the proxy. You cannot force them to use a proxy.</translation>
@@ -3121,6 +3173,13 @@
 <translation id="9187743794267626640">Disable mounting of external storage</translation>
 <translation id="9197740283131855199">Percentage by which to scale the screen dim delay if the user becomes active after dimming</translation>
 <translation id="9200828125069750521">Parameters for image URL which uses POST</translation>
+<translation id="920209539000507585">Force 'headers and footers' to be on or off in the printing dialogue.
+
+      If the policy is unset, the user can decide whether to print headers and footers.
+
+      If the policy is set to false, 'Headers and footers' is not selected in the print preview dialogue and the user cannot change it.
+
+      If the policy is set to true, 'Headers and footers' is selected in the print preview dialogue and the user cannot change it.</translation>
 <translation id="9210953373038593554">Configures the type of authentication for SAML logins.
 
       When this policy is unset or set to Default (value 0), the behaviour of SAML logins is determined by the browser depending on other factors. In the most basic scenario, the user authentication and the protection of the cached user data are based on passwords manually entered by users.
@@ -3128,6 +3187,9 @@
       When this policy is set to ClientCertificate (value 1), client certificate authentication is used for newly added users which log in via SAML. No passwords are used for such users, and their cached local data is protected using corresponding cryptographic keys. For instance, this setting allows configuring smart card-based user authentication (note that smart card middleware apps have to be installed via the DeviceLoginScreenAppInstallList policy).
 
       This policy only affects users who authenticate using SAML.</translation>
+<translation id="9211439035693857287">Configure Chrome Reporting Extension-related policies.
+
+      These policies are only effective when the Chrome Reporting Extension and Cloud Management are enabled.</translation>
 <translation id="9213347477683611358">Configure device-level wallpaper image that is shown on the login screen if no user has yet signed in to the device. The policy is set by specifying the URL from which the Chrome OS device can download the wallpaper image and a cryptographic hash used to verify the integrity of the download. The image must be in JPEG format, its file size must not exceed 16 MB. The URL must be accessible without any authentication. The wallpaper image is downloaded and cached. It will be re-downloaded whenever the URL or the hash changes.
 
       The policy should be specified as a string that expresses the URL and hash in JSON format, e.g.,
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index eb51e52b9..fa4ec3f 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -350,6 +350,7 @@
 <translation id="199764499252435679">Habilitar las actualizaciones de componentes en <ph name="PRODUCT_NAME" /></translation>
 <translation id="2006530844219044261">Administración de energía</translation>
 <translation id="201557587962247231">Frecuencia de cargas del informe de estado del dispositivo</translation>
+<translation id="2017301949684549118">URL de las aplicaciones web que se instalarán de manera silenciosa</translation>
 <translation id="2018836497795982119">Especifica el período en milisegundos en el que se consultará el servicio de administración del dispositivo para obtener la información de política del usuario.
 
       Si estableces esta política, se anula el valor predeterminado de tres horas. Los valores válidos para esta política van de 1800000 (30 minutos) a 86400000 (1 día). Cualquier valor que esté fuera de este rango se ajustará al límite más cercano. Si la plataforma es compatible con notificaciones de política, el retraso de actualización se establecerá en 24 horas, ya que se espera que las notificaciones de política fuercen una actualización de forma automática cada vez que la política cambie.
@@ -645,6 +646,11 @@
           La URL de la búsqueda de Google se puede especificar como: <ph name="GOOGLE_SEARCH_URL" />.
 
           Esta opción debe configurarse cuando la política "DefaultSearchProviderEnabled" está habilitada y solo se aplicará si este es el caso.</translation>
+<translation id="2659019163577049044">Si se habilita esta configuración, los usuarios podrán configurar sus dispositivos para sincronizar los mensajes SMS entre sus teléfonos y Chromebooks. Ten en cuenta que, si se habilita esta política, los usuarios deberán completar un flujo de configuración para aceptar explícitamente esta función. Una vez que se complete el flujo, los usuarios podrán enviar y recibir mensajes SMS en sus Chromebooks.
+
+      Si se inhabilita esta configuración, los usuarios no podrán ajustar la sincronización de SMS.
+
+      Si no se establece esta política, los usuarios administrados no podrán usar la configuración predeterminada, pero los usuarios no administrados sí podrán usarla.</translation>
 <translation id="2660846099862559570">Nunca usar un proxy</translation>
 <translation id="267596348720209223">Especifica la codificación de caracteres admitida por el proveedor de búsqueda. Las codificaciones son nombres de páginas de códigos, como UTF-8, GB2312 e ISO-8859-1. Se prueban en el orden dado. Esta política es opcional. Si no se configura, se usará el valor predeterminado, que es UTF-8. Esta política solo se respeta si la política "DefaultSearchProviderEnabled" está habilitada.</translation>
 <translation id="268577405881275241">Habilitar la función del proxy de compresión de datos</translation>
@@ -1054,6 +1060,7 @@
       Cada entrada de la lista contiene un diccionario que debe incluir el ID de extensión en el campo "extension-id" y su URL de actualización en el campo "update-url".</translation>
 <translation id="3874773863217952418">Habilitar "Presionar para buscar"</translation>
 <translation id="3877517141460819966">Modo de autenticación de dos factores integrado</translation>
+<translation id="3879208481373875102">Configurar la lista de aplicaciones web instaladas de manera automática</translation>
 <translation id="388237772682176890">Esta política ya no está disponible en M53 y se quitó en M54 porque se quitó la compatibilidad con SPDY/3.1.
 
       Inhabilita el uso del protocolo SPDY en <ph name="PRODUCT_NAME" />.
@@ -1288,6 +1295,10 @@
           Para obtener una descripción completa de las opciones de configuración posibles y la estructura de esta política, visita https://www.chromium.org/administrators/policy-list-3/extension-settings-full.
           </translation>
 <translation id="4554651132977135445">Modo de procesamiento de bucle invertido de la política del usuario</translation>
+<translation id="4554841826517980623">Esta política controla si la función "Network File Shares" de <ph name="PRODUCT_NAME" /> debe usar el protocolo <ph name="NETBIOS_PROTOCOL" /> para descubrir contenido compartido en la red.
+      Cuando se establece esta política como verdadera, la detección de archivos compartidos usará el protocolo <ph name="NETBIOS_PROTOCOL" /> para descubrir contenido compartido en la red.
+      Cuando se establece como falsa, la detección de archivos compartidos no usará el protocolo <ph name="NETBIOS_PROTOCOL" /> para descubrir contenido compartido.
+      Si no se establece, los usuarios administrados por empresas no podrán usar la configuración predeterminada, pero los usuarios no administrados sí podrán usarla.</translation>
 <translation id="4555850956567117258">Habilita la atestación remota para el usuario.</translation>
 <translation id="4557134566541205630">URL de la página Nueva pestaña del proveedor de búsqueda predeterminado</translation>
 <translation id="4567137030726189378">Permitir el uso de las Herramientas para desarrolladores</translation>
@@ -1677,6 +1688,7 @@
 
           Si no se establece esta política, los comentarios por voz se inhabilitarán la primera vez que se muestre la pantalla de acceso. Los usuarios pueden habilitar o inhabilitar los comentarios por voz en cualquier momento, y su estado en la pantalla de acceso permanece entre usuarios.</translation>
 <translation id="5868414965372171132">Configuración de red de usuario</translation>
+<translation id="5879014913445067283">Controlar la detección de archivos compartidos en la red a través de <ph name="NETBIOS_NAME" /></translation>
 <translation id="5883015257301027298">Configuración de cookies predeterminada</translation>
 <translation id="5887414688706570295">Configura el prefijo TalkGadget que será utilizado por los hosts de acceso remoto y que evita que los usuarios lo cambien.
 
@@ -2121,6 +2133,17 @@
 <translation id="7049373494483449255">Habilita a <ph name="PRODUCT_NAME" /> para enviar documentos a <ph name="CLOUD_PRINT_NAME" /> para la impresión. NOTA: Esto solo afecta el soporte de <ph name="CLOUD_PRINT_NAME" /> en <ph name="PRODUCT_NAME" />. No evita que los usuarios envíen trabajos de impresión en las páginas web. Si se habilita esta opción o no se configura, los usuarios podrán imprimir en <ph name="CLOUD_PRINT_NAME" /> desde el cuadro de diálogo de impresión de <ph name="PRODUCT_NAME" />. Si se inhabilita esta configuración, los usuarios no podrán imprimir en <ph name="CLOUD_PRINT_NAME" /> desde el cuadro de diálogo de impresión de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="7053678646221257043">Esta política, si se habilita, fuerza la importación de los favoritos del navegador predeterminado actual. Si se habilita, esta política también afecta el cuadro de diálogo de importación. Si se inhabilita, no se importará ningún marcador. Si no se configura, se le puede preguntar al usuario si desea importar o la importación puede realizarse de forma automática.</translation>
 <translation id="7063895219334505671">Permitir ventanas emergentes en estos sitios</translation>
+<translation id="706568410943497889">
+      Si se establece la política como verdadera, se permitirá que <ph name="PRODUCT_NAME" /> recopile registros de acontecimientos de WebRTC de los servicios de Google (p. ej., Google Meet) y suba esos registros a Google.
+
+      Si se establece como falsa o no se establece, <ph name="PRODUCT_NAME" /> no podrá recopilar ni subir los registros.
+
+      Estos registros contienen información de diagnóstico que resulta útil para depurar problemas con llamadas de video o audio en Chrome, como el momento en que se enviaron y recibieron paquetes RTP (y el tamaño de estos), comentarios sobre la congestión en la red y metadatos sobre el tiempo y la calidad de los cuadros de video y audio. Estos registros no tienen contenido de audio ni video de la llamada.
+
+      Esta colección de datos de Chrome solo se puede activar a través de los servicios web de Google, como Google Hangouts o Google Meet.
+
+      Con el fin de simplificar la depuración, Google puede asociar estos registros, por medio de un ID de sesión, con otros registros recopilados por el servicio de Google en sí.
+      </translation>
 <translation id="706669471845501145">Permitir que los sitios muestren notificaciones de escritorio.</translation>
 <translation id="7072208053150563108">Frecuencia de cambio de la contraseña del dispositivo</translation>
 <translation id="7074513465313721551">Configura la lista de dominios en los que confiará Navegación segura. Esto significa lo siguiente:
@@ -2252,6 +2275,9 @@
 <translation id="7336878834592315572">Guardar las cookies durante la sesión</translation>
 <translation id="7340034977315324840">Notificar tiempo de actividad del dispositivo</translation>
 <translation id="7343497214039883642">Archivo de configuración de las impresoras empresariales para los dispositivos</translation>
+<translation id="7349338075015720646">Especifica una lista de sitios web instalados de manera silenciosa, sin interacción del usuario y que este no puede desinstalar ni inhabilitar.
+
+      Cada elemento de la lista de la política es un objeto con dos miembros: "url" y "launch_container". "url" debe ser la URL de la aplicación web que se va a instalar y "launch_container" debe ser "window" o "tab" para indicar cómo se abrirá la app una vez que se instale. Si se omite "launch_container", se abrirá en una ventana en caso de que Chrome considere que es una app web progresiva; de lo contrario, usará una pestaña.</translation>
 <translation id="7367028210010532881">El servicio de Navegación segura muestra una página de advertencia cuando los usuarios visitan sitios marcados como potencialmente maliciosos. Habilitar esta configuración evita que los usuarios procedan desde la página de advertencia al sitio malicioso.
 
       Si se inhabilita esta opción o no se configura, los usuarios podrán elegir continuar hacia el sitio marcado después de que se les haya mostrado la advertencia.
@@ -2717,6 +2743,7 @@
 
       Aquí, la "versión" puede ser una exacta, como "61.0.3163.120" o el prefijo de una versión, como "61.0"  </translation>
 <translation id="8544375438507658205">Procesador HTML predeterminado para <ph name="PRODUCT_FRAME_NAME" /></translation>
+<translation id="8544465954173828789">Permitir que los mensajes SMS se sincronicen desde el teléfono con la Chromebook</translation>
 <translation id="8549772397068118889">Advierte cuando se visitan sitios fuera de los paquetes de contenido.</translation>
 <translation id="8566842294717252664">Ocultar ícono de Web Store en la página Nueva pestaña y el Selector de aplicaciones</translation>
 <translation id="8586528890725660268">Especifica las impresoras que no puede utilizar el usuario.
@@ -2744,13 +2771,6 @@
           Los distintos nombres de servidor se deben separar con comas. Se permite el uso de caracteres comodín (*).
 
           Si no se establece esta política, <ph name="PRODUCT_NAME" /> intentará detectar si un servidor se encuentra en la intranet y solo entonces responderá las solicitudes de IWA. Si se detecta un servidor como Internet, <ph name="PRODUCT_NAME" /> ignorará las solicitudes de IWA que provengan de ese servidor.</translation>
-<translation id="8667812577403206506">Te permite controlar si las máquinas virtuales pueden ejecutarse en el Sistema operativo Chrome.
-
-      Si la política se establece como verdadera, el dispositivo podrá ejecutar máquinas virtuales.
-      Si se establece como falsa, el dispositivo no podrá hacerlo.
-      Cuando esta política se cambia a falsa, se aplica a las máquinas virtuales que se inicien a partir de ese momento, pero no apaga las máquinas virtuales que ya estén en ejecución.
-      Cuando no se establece esta política en un dispositivo administrado, el dispositivo no puede ejecutar máquinas virtuales.
-      Los dispositivos no administrados pueden ejecutar máquinas virtuales.</translation>
 <translation id="8669669491594628013">Permite controlar la forma en que la protección de contraseñas envía advertencias a los usuarios para alertarlos cuando usan una contraseña protegida en sitios potencialmente peligrosos.
 
       Puedes usar las políticas "PasswordProtectionLoginURLs" y "PasswordProtectionChangePasswordURL" para configurar qué contraseña deseas proteger.
@@ -2761,6 +2781,11 @@
       Si no se establece, el servicio solo protegerá las contraseñas de Google, y el usuario podrá cambiar esta configuración.</translation>
 <translation id="8672321184841719703">Versión de destino para las actualizaciones automáticas</translation>
 <translation id="867410340948518937">U2F (segundo factor universal)</translation>
+<translation id="8682611302223077049">Te permite configurar el período, en milisegundos, durante el cual se notifica a los usuarios que se deben reiniciar <ph name="PRODUCT_NAME" /> o el dispositivo <ph name="PRODUCT_OS_NAME" /> para que se aplique una actualización pendiente.
+
+      Durante este período, se informará reiteradamente al usuario sobre la necesidad de la actualización. En los dispositivos <ph name="PRODUCT_OS_NAME" />, aparecerá una notificación de reinicio en la bandeja del sistema cuando se detecte una actualización. En los navegadores <ph name="PRODUCT_NAME" />, una vez que transcurra un tercio del período de notificación, el menú de la app cambiará para indicar que se necesita un reinicio. Esta notificación cambiará de color cuando transcurran dos tercios del período y también cuando finalice. Las notificaciones adicionales habilitadas por la política <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> seguirán este mismo programa.
+
+      Si no se establece, se usará el período predeterminado de 345,600,000 milisegundos (cuatro días) para los dispositivos <ph name="PRODUCT_OS_NAME" /> y 604,800,000 milisegundos (una semana) para <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8685024486845674965">La advertencia de la protección de la contraseña se activa cuando se vuelve a usar la contraseña</translation>
 <translation id="8693243869659262736">Utilizar cliente DNS integrado</translation>
 <translation id="8704831857353097849">Lista de complementos inhabilitados</translation>
@@ -2797,6 +2822,7 @@
 
           El factor de escala debe ser igual o superior a 100 %. No se permiten valores que puedan reducir el tiempo de espera de inactividad de la pantalla en el modo de presentación más allá de su valor habitual.</translation>
 <translation id="8798099450830957504">Predeterminado</translation>
+<translation id="8801680448782904838">Notificar a un usuario que se recomienda o es obligatorio reiniciar el navegador o el dispositivo</translation>
 <translation id="8818173863808665831">Informa la ubicación geográfica del dispositivo.
 
      Si no se configura la política, ni se establece como falsa, no se informará la ubicación.</translation>
@@ -2951,6 +2977,11 @@
       Si esta política se establece en true, <ph name="PRODUCT_OS_NAME" /> desencadenará un reinicio cuando el usuario apague el dispositivo. <ph name="PRODUCT_OS_NAME" /> reemplaza todos los botones de apagado de la UI por botones de reinicio. Si el usuario apaga el dispositivo con el botón de encendido, no se reiniciará automáticamente aunque la política esté habilitada.</translation>
 <translation id="9152473318295429890">Habilitar las sugerencias contextuales de páginas web relacionadas</translation>
 <translation id="9158929520101169054">Permitir el acceso múltiple en el navegador</translation>
+<translation id="9159126470527871268">Notifica a los usuarios que se deben reiniciar <ph name="PRODUCT_NAME" /> o <ph name="PRODUCT_OS_NAME" /> para que se aplique una actualización pendiente.
+
+      La configuración de esta política habilita las notificaciones para informar al usuario que se debe realizar o es recomendable un reinicio del navegador o el dispositivo. Si no se establece, <ph name="PRODUCT_NAME" /> le indica al usuario que se necesita un reinicio a través de cambios sutiles en el menú, mientras que <ph name="PRODUCT_OS_NAME" /> indica eso a través de una notificación en la bandeja del sistema. Si se establece como recomendada, se mostrará una advertencia recurrente al usuario que indicará que se recomienda realizar un reinicio. Esta advertencia se puede descartar para posponer el reinicio. Si se establece como obligatoria, se mostrará una advertencia recurrente al usuario que indicará que se realizará automáticamente un reinicio del navegador una vez que finalice el período de notificación. El tiempo predeterminado es de siete días para <ph name="PRODUCT_NAME" /> y cuatro para <ph name="PRODUCT_OS_NAME" />, y se puede ajustar a través de la configuración de la política <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
+
+      La sesión del usuario se restablecerá después del reinicio.</translation>
 <translation id="9165792353046089850">Te permite establecer si los sitios web pueden acceder a dispositivos USB conectados. El acceso se puede bloquear por completo, o se puede preguntar al usuario cada vez que un sitio web desee acceder a dispositivos USB conectados.
 
           Las políticas "WebUsbAskForUrls" y "WebUsbBlockedForUrls" pueden anular esta política para patrones de URL específicos.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 7aac535..157b1fc 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -2882,13 +2882,6 @@
           Los distintos nombres de servidor se deben separar con comas. Se permite el uso de caracteres comodín (*).
 
           Si no se establece esta política, <ph name="PRODUCT_NAME" /> intentará detectar si un servidor se encuentra en la intranet y solo entonces responderá a las solicitudes de IWA. Si se detecta Internet como servidor, <ph name="PRODUCT_NAME" /> ignorará las solicitudes de IWA que procedan de él.</translation>
-<translation id="8667812577403206506">Permite controlar si las máquinas virtuales se pueden ejecutar en Chrome OS.
-
-      Si se le asigna el valor "True" a esta política, el dispositivo puede ejecutar máquinas virtuales.
-      Si se le asigna el valor "False" a esta política, el dispositivo no puede ejecutar máquinas virtuales.
-      Cuando esta política cambia al valor "False", se aplica al iniciar nuevas máquinas virtuales, pero no apaga las máquinas virtuales que ya se estén ejecutando.
-      Si no se le asigna ningún valor a esta política en un dispositivo administrado, el dispositivo no puede ejecutar máquinas virtuales.
-      Los dispositivos no administrados pueden ejecutar máquinas virtuales.</translation>
 <translation id="8669669491594628013">Permite controlar la activación de la advertencia de protección de contraseña. La protección de contraseña alerta a los usuarios cuando vuelven a utilizar la contraseña protegida en sitios web potencialmente sospechosos.
 
       Las políticas "PasswordProtectionLoginURLs" y "PasswordProtectionChangePasswordURL" sirven para configurar qué contraseñas se protegen.
diff --git a/components/policy/resources/policy_templates_et.xtb b/components/policy/resources/policy_templates_et.xtb
index f6607dfa4..937ef99a2 100644
--- a/components/policy/resources/policy_templates_et.xtb
+++ b/components/policy/resources/policy_templates_et.xtb
@@ -2870,13 +2870,6 @@
           Eraldage serveri nimed komadega. Metamärgid (*) on lubatud.
 
           Kui jätate selle reegli määramata, üritab <ph name="PRODUCT_NAME" /> tuvastada, kas server on intranetis, ja alles siis vastab IWA taotlustele. Kui server tuvastatakse Internetis, siis eirab <ph name="PRODUCT_NAME" /> sealt tulevaid IWA taotlusi.</translation>
-<translation id="8667812577403206506">Võimaldab juhtida, kas virtuaalsete masinate käitamine Chrome OS-is on lubatud.
-
-      Kui reegel on määratud väärtusele Tõene, lubatakse seadmes käitada virtuaalseid masinaid.
-      Kui reegel on määratud väärtusele Väär, ei lubata seadmes käitada virtuaalseid masinaid.
-      Kui reegli seade muudetakse väärtusele Väär, kehtib see uute virtuaalsete masinate käivitamisel, ent juba töötavaid virtuaalseid masinaid välja ei lülitata.
-      Kui reegel jäetakse hallatavas seadmes määramata, on seadmes virtuaalsete masinate käitamine keelatud.
-      Haldamata seadmetes on virtuaalsete masinate käitamine lubatud.</translation>
 <translation id="8669669491594628013">Võimaldab teil juhtida paroolikaitse hoiatuse käivitamist. Paroolikaitse hoiatab kasutajaid, kui nad kasutavad oma kaitstud parooli potentsiaalselt kahtlastel saitidel.
 
       Kaitstava parooli määramiseks võite kasutada reegleid „PasswordProtectionLoginURLs” ja „PasswordProtectionChangePasswordURL”.
diff --git a/components/policy/resources/policy_templates_fa.xtb b/components/policy/resources/policy_templates_fa.xtb
index 088f73b..0b92868 100644
--- a/components/policy/resources/policy_templates_fa.xtb
+++ b/components/policy/resources/policy_templates_fa.xtb
@@ -2753,13 +2753,6 @@
          نام چند سرور را با ویرگول جدا نمایید. نویسه عام (*) مجاز است.
 
          اگر این خط مشی را بدون تنظیم رها کنید، <ph name="PRODUCT_NAME" /> برای شناسایی وجود سرور در اینترانت تلاش می‌کند و تنها پس از این به درخواست‌های IWA پاسخ خواهد داد. در صورتی که سرور به عنوان اینترنت شناسایی شود، <ph name="PRODUCT_NAME" /> درخواست‌های IWA صادر شده از طرف سرور را نادیده می‌گیرد.</translation>
-<translation id="8667812577403206506">‏به شما امکان می‌دهد کنترل کنید ماشین‌های مجازی اجازه دارند در سیستم‌عامل Chrome اجرا شوند یا نه.
-
-      اگر خط‌مشی روی «درست» تنظیم شود، دستگاه مجاز است ماشین‌های مجازی را اجرا کند.
-      اگر خط‌مشی روی «نادرست» تنظیم شود، دستگاه مجاز نیست ماشین‌های مجازی را اجرا کند.
-      وقتی این خط‌مشی به «نادرست» تغییر می‌کند، بر راه‌اندازی ماشین‌های مجازی جدید اثر می‌گذارد اما ماشین‌های مجازی را که درحال اجرا شدن هستند خاموش نمی‌کند.
-      وقتی این خط‌مشی در دستگاه مدیریت‌شده تنظیم نشود، دستگاه مجاز نیست ماشین‌های مجازی را اجرا کند.
-      دستگاه‌های مدیریت‌نشده مجاز هستند ماشین‌های مجازی را اجرا کند.</translation>
 <translation id="8669669491594628013">‏امکان می‌دهد نمایش هشدار محافظت از گذرواژه را کنترل کنید. وقتی کاربران از گذرواژه محافظت‌شده خود در سایت‌های بالقوه مشکوک استفاده می‌کنند، محافظت از گذرواژه به آن‌ها هشدار می‌دهد.
 
       برای پیکربندی اینکه کدام گذرواژه محافظت شود، می‌توانید از خط‌مشی‌های «PasswordProtectionLoginURLs» و «PasswordProtectionChangePasswordURL» استفاده کنید.
diff --git a/components/policy/resources/policy_templates_fi.xtb b/components/policy/resources/policy_templates_fi.xtb
index 7570dd85..a40ebee 100644
--- a/components/policy/resources/policy_templates_fi.xtb
+++ b/components/policy/resources/policy_templates_fi.xtb
@@ -2764,13 +2764,6 @@
           Erota palvelinten nimet pilkulla. Jokerimerkit (*) sallitaan.
 
           Jos et aseta käytäntöä, <ph name="PRODUCT_NAME" /> pyrkii tarkistamaan, onko palvelin sisäverkossa, ja vastaa vasta sitten IWA-pyyntöihin. Jos palvelimen todetaan sijaitsevan sisäverkossa, <ph name="PRODUCT_NAME" /> ohittaa sen IWA-pyynnöt.</translation>
-<translation id="8667812577403206506">Tällä käytännöllä määritetään, voidaanko Chrome-käyttöjärjestelmässä suorittaa virtuaalikoneita.
-
-      Jos käytännön arvoksi asetetaan Tosi, laitteella on sallittua suorittaa virtuaalikoneita.
-      Jos käytännön arvoksi asetetaan Epätosi, laitteella ei ole sallittua suorittaa virtuaalikoneita.
-      Kun käytännön arvoksi muutetaan Epätosi, muutos koskee uusien virtuaalikoneiden käynnistämistä, mutta jo käynnissä olevia virtuaalikoneita ei sammuteta.
-      Jos tätä asetusta ei ole määritetty hallinnoidulla laitteella, laitteella ei ole sallittua suorittaa virtuaalikoneita.
-      Ei-hallinnoiduilla laitteilla on sallittua suorittaa virtuaalikoneita.</translation>
 <translation id="8669669491594628013">Sallii salasanasuojauksen varoituksen näyttämisen hallinnan. Salasanasuojaus ilmoittaa käyttäjille, jos nämä käyttävät suojattuja salasanoja uudelleen mahdollisesti haitallisilla sivustoilla.
 
       PasswordProtectionLoginURLs- ja PasswordProtectionChangePasswordURL-käytäntöjen avulla voit määrittää, mitkä salasanat suojataan.
@@ -2980,7 +2973,7 @@
 <translation id="9158929520101169054">Salli kirjautuminen usealle tilille selaimessa</translation>
 <translation id="9159126470527871268">Ilmoita käyttäjille, että <ph name="PRODUCT_NAME" /> tai <ph name="PRODUCT_OS_NAME" /> on käynnistettävä uudelleen odottavan päivityksen käyttöönottamiseksi.
 
-      Tämän käytäntöasetuksen avulla voit ilmoittaa käyttäjälle, että selaimen uudelleenkäynnistystä suositellaan tai vaaditaan. Jos asetusta ei ole määritetty, <ph name="PRODUCT_NAME" /> kertoo käyttäjälle uudelleenkäynnistyksen tarpeesta hienovaraisilla valikon muutoksilla ja <ph name="PRODUCT_OS_NAME" /> kertoo siitä ilmoituksella ilmaisinalueella Jos tila on Suositeltu, käyttäjä saa toistuvan varoituksen suositellusta uudelleenkäynnistyksestä. Käyttäjä voi hylätä varoituksen ja lykätä uudelleenkäynnistystä. Jos tila on Pakollinen, käyttäjä saa toistuvan varoituksen ilmoitusaikaa seuraavasta selaimen pakotetusta uudelleenkäynnistyksestä. Tämä aika on oletuksena seitsemän päivää (<ph name="PRODUCT_NAME" />) tai neljä päivää (<ph name="PRODUCT_OS_NAME" />), ja sitä voi muuttaa <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />-käytäntöasetuksista.
+      Tämän käytäntöasetuksen avulla voit ilmoittaa käyttäjälle, että selaimen uudelleenkäynnistystä suositellaan tai vaaditaan. Jos asetusta ei ole määritetty, <ph name="PRODUCT_NAME" /> kertoo käyttäjälle uudelleenkäynnistyksen tarpeesta hienovaraisilla valikon muutoksilla ja <ph name="PRODUCT_OS_NAME" /> kertoo siitä ilmoituksella ilmaisinalueella. Jos tila on Suositeltu, käyttäjä saa toistuvan varoituksen suositellusta uudelleenkäynnistyksestä. Käyttäjä voi hylätä varoituksen ja lykätä uudelleenkäynnistystä. Jos tila on Pakollinen, käyttäjä saa toistuvan varoituksen ilmoitusaikaa seuraavasta selaimen pakotetusta uudelleenkäynnistyksestä. Tämä aika on oletuksena seitsemän päivää (<ph name="PRODUCT_NAME" />) tai neljä päivää (<ph name="PRODUCT_OS_NAME" />), ja sitä voi muuttaa <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />-käytäntöasetuksista.
 
       Käyttäjän käyttökerta palautetaan uudelleenkäynnistyksen jälkeen.</translation>
 <translation id="9165792353046089850">Antaa sinun määrittää, sallitaanko sivustojen käyttää yhdistettyjä USB-laitteita. Käyttö on mahdollista estää kokonaan, tai käyttäjältä voidaan pyytää vahvistusta aina, kun verkkosivusto haluaa käyttää yhdistettyä USB-laitetta.
diff --git a/components/policy/resources/policy_templates_fil.xtb b/components/policy/resources/policy_templates_fil.xtb
index 5a7acf7c..e157dfd 100644
--- a/components/policy/resources/policy_templates_fil.xtb
+++ b/components/policy/resources/policy_templates_fil.xtb
@@ -2865,13 +2865,6 @@
           Paghiwalayin ang maraming pangalan ng server gamit ang mga kuwit. Pinapayagan ang mga wildcard (*).
 
           Kung iiwanan mong hindi nakatakda ang patakarang ito, susubukan ng <ph name="PRODUCT_NAME" /> na i-detect kung nasa Intranet ang server, at kung oo ay doon lang ito tutugon sa mga kahilingan ng IWA.  Kung na-detect ang server bilang Internet, babalewalain ng <ph name="PRODUCT_NAME" /> ang mga kahilingan ng IWA mula dito.</translation>
-<translation id="8667812577403206506">Magbibigay-daan sa iyong kontrolin kung papayagan ang pagtakbo ng mga virtual machine sa Chrome OS.
-
-      Kung nakatakda ang patakaran sa True, pinapayagan ang device na magpatakbo ng mga virtual machine.
-      Kung nakatakda ang patakaran sa False, hindi papayagan ang device na magpatakbo ng mga virtual machine.
-      Kapag binago sa False ang patakarang ito, ilalapat ito sa mga nagsisimulang bagong virtual machine ngunit hindi magsa-shut down sa mga virtual machine na tumatakbo na.
-      Kapag hindi nakatakda ang patakaran sa isang pinamamahalaang device, hindi pinapayagan ang device na magpatakbo ng mga virtual machine.
-      Pinapayagan ang mga hindi pinamamahalaang device na magpatakbo ng mga virtual machine.</translation>
 <translation id="8669669491594628013">Nagbibigay-daan sa iyong kontrolin ang pag-trigger ng babala sa pagprotekta ng password. Aalertuhan ng pagprotekta ng password ang mga user kapag muli nilang ginamit ang kanilang pinoprotektahang password sa mga potensyal na kahina-hinalang site.
 
       Maaari mong gamitin ang patakarang 'PasswordProtectionLoginURLs' at 'PasswordProtectionChangePasswordURL' para i-configure ang poprotektahang password.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index 062bebb..03dc921 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -2891,13 +2891,6 @@
           Si vous utilisez plusieurs serveurs, séparez leur nom par une virgule. Les caractères génériques (*) sont autorisés.
 
           Si vous ne définissez pas cette règle, <ph name="PRODUCT_NAME" /> tente d'identifier si le serveur est sur l'Intranet, auquel cas il répond aux requêtes IWA. Si le serveur est sur Internet, les requêtes IWA sont ignorées par <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Permet de définir si votre appareil Chrome OS peut exécuter ou non des machines virtuelles.
-
-      Si cette règle est définie sur "True", l'appareil est autorisé à exécuter des machines virtuelles.
-      Si cette règle est définie sur "False", l'appareil n'est pas autorisé à exécuter de machines virtuelles.
-      Si vous modifiez cette règle en la définissant sur "False", elle est appliquée aux machines virtuelles qui vont être lancées, mais elle n'arrête pas celles qui le sont déjà.
-      Si cette règle n'est pas définie sur un appareil géré, l'appareil n'est pas autorisé à exécuter de machines virtuelles.
-      Les appareils non gérés sont autorisés à exécuter des machines virtuelles.</translation>
 <translation id="8669669491594628013">Permet de contrôler le déclenchement de l'avertissement relatif à la protection par mot de passe. Le service de protection par mot de passe alerte l'utilisateur lorsque ce dernier réutilise son mot de passe protégé sur des sites potentiellement suspects.
 
       Vous pouvez utiliser les règles "PasswordProtectionLoginURLs" et "PasswordProtectionChangePasswordURL" pour configurer le mot de passe à protéger.
diff --git a/components/policy/resources/policy_templates_gu.xtb b/components/policy/resources/policy_templates_gu.xtb
index 9f225989..5bb0af5f 100644
--- a/components/policy/resources/policy_templates_gu.xtb
+++ b/components/policy/resources/policy_templates_gu.xtb
@@ -3167,13 +3167,6 @@
           બહુવિધ સર્વર નામોને અલ્પવિરામ ચિહ્નથી અલગ કરો. વાઇલ્ડ કાર્ડ્સ (*) ની મંજૂરી છે.
 
           જો તમે આ નીતિ સેટ કર્યા વિના છોડો છો, તો <ph name="PRODUCT_NAME" /> તે શોધવાનો પ્રયાસ કરશે કે સર્વર ઇન્ટ્રાનેટ પર છે કે કેમ અને ત્યારે પછી જ તે IWA વિનંતીઓનો પ્રતિસાદ આપશે.  જો સર્વર ઇન્ટરનેટ તરીકે મળે છે તો પછી તેના તરફથી IWA વિનંતીઓને <ph name="PRODUCT_NAME" /> દ્વારા અવગણવામાં આવશે.</translation>
-<translation id="8667812577403206506">તમે વર્ચ્યુઅલ મશીનોને Chrome OS પર ચાલવાની મંજૂરી આપવી કે નહીં તેનું નિયંત્રણ કરી શકો છો.
-
-      જો નીતિને True પર સેટ કરવામાં આવી હશે, તો ઉપકરણને વર્ચ્યુઅલ મશીનો ચલાવવાની મંજૂરી રહેશે.
-      જો નીતિને False પર સેટ કરવામાં આવી હશે, તો ઉપકરણને વર્ચ્યુઅલ મશીનો ચલાવવાની મંજૂરી રહેશે નહીં.
-      જ્યારે આ નીતિ બદલીને False કરવામાં આવે, ત્યારે તે વર્ચ્યુઅલ મશીનો શરૂ કરવા માટે લાગુ થશે, પરંતુ જે વર્ચ્યુઅલ મશીનો પહેલેથી ચાલી રહ્યાં હશે તે બંધ નહીં થાય.
-      જ્યારે આ નીતિ મેનેજ કરેલ ઉપકરણ પર સેટ કરવામાં આવી ન હોય, ત્યારે ઉપકરણને વર્ચ્યુઅલ મશીનો ચલાવવાની મંજૂરી રહેશે નહીં.
-      મેનેજ કર્યા વગરના ઉપકરણોને વર્ચ્યુઅલ મશીનો ચલાવવાની મંજૂરી હોય છે.</translation>
 <translation id="8669669491594628013">તમને પાસવર્ડ સંરક્ષણ ચેતવણી ટ્રિગર થવાનું નિયંત્રણ કરવાની મંજૂરી આપે છે. જ્યારે વપરાશકર્તાઓ તેમના સંરક્ષિત પાસવર્ડનો સંભવિત રૂપે શંકાસ્પદ સાઇટ પર ફરીથી ઉપયોગ કરે, ત્યારે પાસવર્ડ સંરક્ષણ તેમને ચેતવણી આપે છે.
       કયા પાસવર્ડની સુરક્ષા કરવી તે કન્ફિગર કરવા માટે તમે 'PasswordProtectionLoginURLs' અને 'PasswordProtectionChangePasswordURL' નીતિઓનો ઉપયોગ કરી શકો છો.
 
diff --git a/components/policy/resources/policy_templates_hi.xtb b/components/policy/resources/policy_templates_hi.xtb
index 8ae4404..c41c808 100644
--- a/components/policy/resources/policy_templates_hi.xtb
+++ b/components/policy/resources/policy_templates_hi.xtb
@@ -58,11 +58,11 @@
 <translation id="1118093128235245168">साइटों को उपयोगकर्ता से किसी कनेक्ट किए हुए यूएसबी डिवाइस का एक्सेस मांगने की अनुमति दें</translation>
 <translation id="1128903365609589950">यह नीति वह निर्देशिका कॉन्फ़िगर करती है, <ph name="PRODUCT_NAME" /> जिसका उपयोग डिस्क पर कैश फ़ाइलें सेव करने के लिए करेगा.
 
-      अगर आप यह नीति सेट करते हैं तो, <ph name="PRODUCT_NAME" /> इस निर्देशिका का उपयोग करेगा, भले ही उपयोगकर्ता ने '--disk-cache-dir' फ़्लैग तय किया हो या न तय किया हो. डेटा खोने या दूसरी गड़बड़ियों से बचने के लिए इस नीति को किसी वॉल्यूम की मूल निर्देशिका पर या दूसरे कामों के लिए उपयोग की जाने वाली निर्देशिका पर सेट नहीं किया जाना चाहिए, क्योंकि <ph name="PRODUCT_NAME" /> उसकी सामग्री प्रबंधित करता है.
+      अगर आप यह नीति सेट करते हैं, तो <ph name="PRODUCT_NAME" /> इस निर्देशिका का उपयोग करेगा, भले ही उपयोगकर्ता ने '--disk-cache-dir' फ़्लैग तय किया हो या न तय किया हो. डेटा खोने या दूसरी गड़बड़ियों से बचने के लिए इस नीति को किसी वॉल्यूम की मूल निर्देशिका पर या दूसरे कामों के लिए उपयोग की जाने वाली निर्देशिका पर सेट नहीं किया जाना चाहिए, क्योंकि <ph name="PRODUCT_NAME" /> उसकी सामग्री प्रबंधित करता है.
 
       उपयोग किए जा सकने वाले वैरिएबल की सूची देखने के लिए https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables पर जाएं.
 
-      अगर यह नीति सेट नहीं की जाती है तो 'डिफ़ॉल्ट कैश निर्देशिका' का उपयोग किया जाएगा और उपयोगकर्ता उसे '--disk-cache-dir' कमांड लाइन फ़्लैग से रद्द कर सकेगा.</translation>
+      अगर यह नीति सेट नहीं की जाती है, तो 'डिफ़ॉल्ट कैश निर्देशिका' का उपयोग किया जाएगा और उपयोगकर्ता उसे '--disk-cache-dir' कमांड लाइन फ़्लैग से रद्द कर सकेगा.</translation>
 <translation id="1135264353752122851">यह कॉन्फ़िगर करती है कि <ph name="PRODUCT_OS_NAME" /> उपयोगकर्ता सत्रों के लिए किन कीबोर्ड लेआउट को मंज़ूरी दी गई है.
 
       अगर यह नीति सेट की जाती है, तो उपयोगकर्ता इस नीति में बताए गए इनपुट के तरीकों में से सिर्फ़ एक को चुन सकेगा. अगर यह नीति सेट नहीं की जाती है या किसी खाली सूची पर सेट की जाती है, तो उपयोगकर्ता इनपुट के उन सभी तरीकों को चुन सकेगा जो काम करते हैं. अगर इनपुट के मौजूदा तरीके को इस नीति में मंज़ूरी नहीं दी गई है, तो इनपुट का तरीका हार्डवेयर के कीबोर्ड लेआउट (मंज़ूरी होने पर) या इस सूची में मौजूद पहली सही प्रविष्टि पर स्विच हो जाएगा. इस सूची में मौजूद इनपुट के उन सभी तरीकों को अनदेखा कर दिया जाएगा जो गलत हैं या काम नहीं करते हैं.</translation>
@@ -150,27 +150,27 @@
 <translation id="1456822151187621582">Windows (<ph name="PRODUCT_OS_NAME" /> क्लाइंट):</translation>
 <translation id="1464848559468748897">यह नीति <ph name="PRODUCT_OS_NAME" /> डिवाइसों पर 'एक से ज़्यादा प्रोफ़ाइल सत्र' में उपयोगकर्ता के व्यवहार को नियंत्रित करती है.
 
-      अगर यह नीति 'MultiProfileUserBehaviorUnrestricted' पर सेट है तो, उपयोगकर्ता 'एक से ज़्यादा प्रोफ़ाइल सत्र' में या तो प्राथमिक या कोई दूसरा उपयोगकर्ता हो सकता है.
+      अगर यह नीति 'MultiProfileUserBehaviorUnrestricted' पर सेट है, तो उपयोगकर्ता 'एक से ज़्यादा प्रोफ़ाइल सत्र' में या तो प्राथमिक या कोई दूसरा उपयोगकर्ता हो सकता है.
 
-      अगर यह नीति 'MultiProfileUserBehaviorMustBePrimary' पर सेट है तो, उपयोगकर्ता 'एक से ज़्यादा प्रोफ़ाइल सत्र' में सिर्फ़ प्राथमिक उपयोगकर्ता हो सकता है.
+      अगर यह नीति 'MultiProfileUserBehaviorMustBePrimary' पर सेट है, तो उपयोगकर्ता 'एक से ज़्यादा प्रोफ़ाइल सत्र' में सिर्फ़ प्राथमिक उपयोगकर्ता हो सकता है.
 
-      अगर यह नीति 'MultiProfileUserBehaviorNotAllowed' पर सेट है तो, उपयोगकर्ता 'एक से ज़्यादा प्रोफ़ाइल सत्र' का हिस्सा नहीं हो सकता.
+      अगर यह नीति 'MultiProfileUserBehaviorNotAllowed' पर सेट है, तो उपयोगकर्ता 'एक से ज़्यादा प्रोफ़ाइल सत्र' का हिस्सा नहीं हो सकता.
 
-      अगर आप इस सेटिंग को सेट करते हैं तो, उपयोगकर्ता इसे बदल नहीं सकते या ओवरराइड नहीं कर सकते.
+      अगर आप इस सेटिंग को सेट करते हैं, तो उपयोगकर्ता इसे बदल नहीं सकते या ओवरराइड नहीं कर सकते.
 
-      अगर सेटिंग को उपयोगकर्ता के 'एक से ज़्यादा प्रोफ़ाइल सत्र' में साइन इन रहने के दौरान बदला जाता है तो, सत्र के सभी उपयोगकर्ताओं की उनकी-उनकी सेटिंग के हिसाब से जाँच की जाएगी. अगर उपयोगकर्ताओं में से किसी एक को सत्र में रहने की अनुमति नहीं दी जाती तो सत्र बंद कर दिया जाएगा.
+      अगर सेटिंग को उपयोगकर्ता के 'एक से ज़्यादा प्रोफ़ाइल सत्र' में साइन इन रहने के दौरान बदला जाता है, तो सत्र के सभी उपयोगकर्ताओं की उनकी-उनकी सेटिंग के हिसाब से जाँच की जाएगी. अगर उपयोगकर्ताओं में से किसी एक को सत्र में रहने की अनुमति नहीं दी जाती तो सत्र बंद कर दिया जाएगा.
 
-      अगर नीति सेट नहीं की जाती है तो, एंटरप्राइज़-प्रबंधित उपयोगकर्ताओं के लिए डिफ़ॉल्ट मान 'MultiProfileUserBehaviorMustBePrimary' लागू होगा और गैर-प्रबंधित उपयोगकर्ताओं के लिए 'MultiProfileUserBehaviorUnrestricted' का उपयोग किया जाएगा.</translation>
+      अगर नीति सेट नहीं की जाती है, तो एंटरप्राइज़-प्रबंधित उपयोगकर्ताओं के लिए डिफ़ॉल्ट मान 'MultiProfileUserBehaviorMustBePrimary' लागू होगा और गैर-प्रबंधित उपयोगकर्ताओं के लिए 'MultiProfileUserBehaviorUnrestricted' का उपयोग किया जाएगा.</translation>
 <translation id="1465619815762735808">चलाने के लिए क्लिक करें</translation>
-<translation id="1468307069016535757">लॉग इन स्क्रीन पर ज़्यादा कंट्रास्ट वाले मोड की उपलब्धता सुविधा की डिफ़ॉल्ट स्थिति तय करें.
+<translation id="1468307069016535757">लॉग इन स्क्रीन पर ज़्यादा कॉन्ट्रास्ट वाले मोड की उपलब्धता सुविधा की डिफ़ॉल्ट स्थिति तय करें.
 
-          अगर यह नीति सही पर सेट है तो, लॉग इन स्क्रीन के दिखाई देने पर ज़्यादा कंट्रास्ट वाला मोड चालू हो जाएगा.
+          अगर यह नीति 'सही' पर सेट है, तो लॉग इन स्क्रीन के दिखाई देने पर ज़्यादा कॉन्ट्रास्ट वाला मोड चालू हो जाएगा.
 
-          अगर नीति गलत पर सेट है तो, लॉग इन स्क्रीन के दिखाई देने पर ज़्यादा कंट्रास्ट वाला मोड बंद हो जाएगा.
+          अगर नीति 'गलत' पर सेट है, तो लॉग इन स्क्रीन के दिखाई देने पर ज़्यादा कॉन्ट्रास्ट वाला मोड बंद हो जाएगा.
 
-          अगर आप इस नीति को सेट करते हैं तो, उपयोगकर्ता ज़्यादा कंट्रास्ट वाले मोड को चालू या बंद करके इसे अस्थायी रूप से रद्द कर सकते हैं. हालांकि, उपयोगकर्ता की पसंद स्थायी नहीं होती है और लॉग इन स्क्रीन के फिर से दिखाई देने या उपयोगकर्ता जब लॉग इन स्क्रीन पर एक मिनट तक कोई गतिविधि नहीं करता तो, डिफ़ॉल्ट स्थिति लागू हो जाती है.
+          अगर आप इस नीति को सेट करते हैं, तो उपयोगकर्ता ज़्यादा कॉन्ट्रास्ट वाले मोड को चालू या बंद करके इसे अस्थायी रूप से रद्द कर सकते हैं. हालांकि, उपयोगकर्ता की पसंद स्थायी नहीं होती है और लॉग इन स्क्रीन के फिर से दिखाई देने या उपयोगकर्ता जब लॉग इन स्क्रीन पर एक मिनट तक कोई गतिविधि नहीं करता, तो डिफ़ॉल्ट स्थिति लागू हो जाती है.
 
-          अगर यह नीति जोड़े बिना छोड़ दी जाती है तो, लॉग इन स्क्रीन के पहली बार दिखाई देने पर ज़्यादा कंट्रास्ट वाला मोड बंद हो जाता है. उपयोगकर्ता जब चाहें ज़्यादा कंट्रास्ट वाला मोड चालू या बंद कर सकते हैं और उपयोगकर्ताओं के बीच लॉग इन स्क्रीन पर इसकी स्थिति स्थायी हो जाती है.</translation>
+          अगर यह नीति जोड़े बिना छोड़ दी जाती है, तो लॉग इन स्क्रीन के पहली बार दिखाई देने पर ज़्यादा कॉन्ट्रास्ट वाला मोड बंद हो जाता है. उपयोगकर्ता जब चाहें ज़्यादा कॉन्ट्रास्ट वाला मोड चालू या बंद कर सकते हैं और उपयोगकर्ताओं के बीच लॉग इन स्क्रीन पर इसकी स्थिति स्थायी हो जाती है.</translation>
 <translation id="1468707346106619889">अगर इस नीति को सही' पर सेट किया गया है तो, 'यूनिफ़ाइड डेस्कटॉप' की अनुमति मिल जाती है और
       यह सुविधा डिफ़ॉल्ट रूप से चालू रहती है. इससे ऐप्लिकेशन, एक से ज़्यादा स्क्रीन पर दिखाई दे
       सकता है.
@@ -293,9 +293,9 @@
       अगर आप यह सेटिंग बंद करते हैं तो, जब भी उपयोगकर्ता कोई ऐसा काम करता है, जिसकी वजह से 'फ़ाइल चुनने का संवाद' सामने आता है (जैसे बुकमार्क लेकर आना, फ़ाइल अपलोड करना, लिंक सेव करना वगैरह) तो इसके बजाय एक मैसेज दिखाई देता है और यह मान लिया जाता है कि उपयोगकर्ता ने 'फ़ाइल चुनने के संवाद' पर 'रद्द करें' क्लिक कर दिया है. 
 
       अगर यह सेटिंग सेट नहीं है तो, उपयोगकर्ता सामान्य रूप से 'फ़ाइल चुनने का संवाद' खोल सकते हैं.</translation>
-<translation id="1879485426724769439">डिवाइस के लिए उपयोग किए जाने वाले समय क्षेत्र के बारे में बताती है. उपयोगकर्ता वर्तमान सत्र के लिए बताए गए समय क्षेत्र को रद्द कर सकते हैं. हालांकि, लॉग आउट करने पर वह वापस बताए गए समय क्षेत्र पर सेट हो जाता है. अगर गलत मान दिया जाता है तो, नीति इसके बजाय "जीएमटी (ग्रीनविच मानक समय)" के उपयोग से फिर भी सक्रिय रहेगी. अगर कोई खाली स्ट्रिंग दी जाती है तो, नीति को अनदेखा कर दिया जाता है.
+<translation id="1879485426724769439">डिवाइस के लिए उपयोग किए जाने वाले समय क्षेत्र के बारे में बताती है. उपयोगकर्ता मौजूदा सत्र के लिए बताए गए समय क्षेत्र को रद्द कर सकते हैं. हालांकि, लॉग आउट करने पर वह वापस बताए गए समय क्षेत्र पर सेट हो जाता है. अगर गलत मान दिया जाता है, तो नीति इसके बजाय "जीएमटी (ग्रीनविच मानक समय)" के उपयोग से फिर भी सक्रिय रहेगी. अगर कोई खाली स्ट्रिंग दी जाती है, तो नीति को अनदेखा कर दिया जाता है.
 
-      अगर इस नीति का उपयोग नहीं किया जाता है तो, फ़िलहाल सक्रिय समय क्षेत्र इस्तेमाल में बने रहेंगे. हालांकि, उपयोगकर्ता समय क्षेत्र को बदल सकते हैं और यह बदलाव लगातार होता रहता है. इसलिए किसी एक उपयोगकर्ता की तरफ़ से किया गया बदलाव, लॉग इन स्क्रीन और सभी अन्य उपयोगकर्ताओं को प्रभावित करता है.
+      अगर इस नीति का उपयोग नहीं किया जाता है, तो फ़िलहाल सक्रिय समय क्षेत्र इस्तेमाल में बने रहेंगे. हालांकि, उपयोगकर्ता समय क्षेत्र को बदल सकते हैं और यह बदलाव लगातार होता रहता है. इसलिए किसी एक उपयोगकर्ता की तरफ़ से किया गया बदलाव, लॉग इन स्क्रीन और सभी अन्य उपयोगकर्ताओं को प्रभावित करता है.
 
       नए डिवाइस "यूएस/प्रशांत" में सेट समय क्षेत्र के साथ शुरू होते हैं.
 
@@ -463,13 +463,13 @@
 <translation id="2269319728625047531">साइन-इन के दौरान 'सिंक सहमति' दिखाना चालू करें</translation>
 <translation id="2274864612594831715">यह नीति 'वर्चुअल कीबोर्ड' को ChromeOS पर इनपुट डिवाइस के रूप में चालू करना कॉन्फ़िगर करती है.
 
-      अगर नीति को 'सही' पर सेट किया जाता है तो, ऑन-स्क्रीन 'वर्चुअल कीबोर्ड' हमेशा चालू रहेगा.
+      अगर नीति को 'सही' पर सेट किया जाता है, तो ऑन-स्क्रीन 'वर्चुअल कीबोर्ड' हमेशा चालू रहेगा.
 
-      अगर 'गलत' पर सेट किया जाता है तो, ऑन-स्क्रीन 'वर्चुअल कीबोर्ड' हमेशा बंद रहेगा.
+      अगर 'गलत' पर सेट किया जाता है, तो ऑन-स्क्रीन 'वर्चुअल कीबोर्ड' हमेशा बंद रहेगा.
 
-      अगर आप इस नीति को सेट करते हैं तो, उपयोगकर्ता इसे बदल नहीं सकते या ओवरराइड नहीं कर सकते. हालांकि, उपयोगकर्ता अभी भी 'ऑन-स्क्रीन कीबोर्ड' के एक्सेस को चालू/बंद कर सकेंगे जिसे इस नीति से नियंत्रित किए जाने वाले 'वर्चुअल कीबोर्ड' पर प्राथमिकता मिलती है. 'ऑन-स्क्रीन कीबोर्ड' के एक्सेस को नियंत्रित करने वाली |VirtualKeyboardEnabled| नीति देखें.
+      अगर आप इस नीति को सेट करते हैं, तो उपयोगकर्ता इसे बदल नहीं सकते या ओवरराइड नहीं कर सकते. हालांकि, उपयोगकर्ता अभी भी 'ऑन-स्क्रीन कीबोर्ड' के एक्सेस को चालू/बंद कर सकेंगे जिसे इस नीति से नियंत्रित किए जाने वाले 'वर्चुअल कीबोर्ड' पर प्राथमिकता मिलती है. 'ऑन-स्क्रीन कीबोर्ड' के एक्सेस को नियंत्रित करने वाली |VirtualKeyboardEnabled| नीति देखें.
 
-      अगर यह नीति सेट नहीं की जाती है तो, 'ऑन-स्क्रीन कीबोर्ड' शुरुआत में बंद रहता है लेकिन उपयोगकर्ता इसे कभी भी चालू कर सकता है. कीबोर्ड कब दिखाना है, उपयोगकर्ता की पिछली गतिविधियों के आधार पर डिवाइस खुद यह फ़ैसला ले सकता है.</translation>
+      अगर यह नीति सेट नहीं की जाती है, तो 'ऑन-स्क्रीन कीबोर्ड' शुरुआत में बंद रहता है लेकिन उपयोगकर्ता इसे कभी भी चालू कर सकता है. कीबोर्ड कब दिखाना है, उपयोगकर्ता की पिछली गतिविधियों के आधार पर डिवाइस खुद यह फ़ैसला ले सकता है.</translation>
 <translation id="228659285074633994">उपयोगकर्ता इनपुट के बिना समयावधि निर्दिष्ट करती है जिसके बाद AC पॉवर पर चलाए जाने पर एक चेतावनी डॉयलॉग दिखाया जाता है.
 
           जब यह नीति सेट होती है, तो <ph name="PRODUCT_OS_NAME" /> उपयोगकर्ता को यह चेतावनी डॉयलॉग ‍दिखाए कि प्रयोग में नहींता की कार्यवाही की जाने वाली है, उसके पहले ही यह नीति उस समयावधि को निर्दिष्ट करती है जिसमें उपयोगकर्ता को प्रयोग में नहीं रहना है.
@@ -549,13 +549,13 @@
       यदि यह सेटिंग अक्षम हो या सेट नहीं की गई हो, तो ब्राउज़िंग का इतिहास सहेजा जाता है.</translation>
 <translation id="2426782419955104525"><ph name="PRODUCT_NAME" /> के इंस्टैंट फ़ीचर को चालू करती है और उपयोगकर्ताओं को इस सेटिंग को बदलने से रोकती है.
 
-      अगर आप इस सेटिंग को चालू करते हैं तो, <ph name="PRODUCT_NAME" /> इंस्टैंट चालू हो जाता है.
+      अगर आप इस सेटिंग को चालू करते हैं, तो <ph name="PRODUCT_NAME" /> इंस्टैंट चालू हो जाता है.
 
-      अगर आप इस सेटिंग को बंद करते हैं तो, <ph name="PRODUCT_NAME" /> इंस्टैंट बंद हो जाता है.
+      अगर आप इस सेटिंग को बंद करते हैं, तो <ph name="PRODUCT_NAME" /> इंस्टैंट बंद हो जाता है.
 
-      अगर आप इस सेटिंग को चालू या बंद करते हैं तो, उपयोगकर्ता इस सेटिंग को बदल या रद्द नहीं कर सकते.
+      अगर आप इस सेटिंग को चालू या बंद करते हैं, तो उपयोगकर्ता इस सेटिंग को बदल या रद्द नहीं कर सकते.
 
-      अगर यह सेटिंग सेट किए बिना छोड़ दी जाती है तो, उपयोगकर्ता इस फ़ंक्शन का उपयोग करने या न करने का फ़ैसला कर सकते हैं.
+      अगर यह सेटिंग सेट किए बिना छोड़ दी जाती है, तो उपयोगकर्ता इस फ़ंक्शन का उपयोग करने या न करने का फ़ैसला कर सकते हैं.
 
       <ph name="PRODUCT_NAME" /> के 29 और उसके बाद वाले वर्शन से यह सेटिंग हटा दी गई है.</translation>
 <translation id="2433412232489478893">यह नीति नियंत्रित करती है कि किसी उपयोगकर्ता के लिए <ph name="PRODUCT_NAME" /> की नेटवर्क फ़ाइल शेयर करने की सुविधा की अनुमति है या नहीं.
@@ -631,9 +631,9 @@
       ब्लूटूथ चालू करने के बाद, बदलावों को लागू करने के लिए उपयोगकर्ता को पहले लॉग आउट करके फिर से लॉग इन करना होगा (ब्लूटूथ बंद करते समय ऐसा करने की ज़रूरत नहीं है).</translation>
 <translation id="2571066091915960923">डेटा का आकार कम करने संबंधी प्रॉक्सी को चालू या बंद करें और उपयोगकर्ताओं को यह सेटिंग बदलने से रोकें.
 
-      अगर आप इस सेटिंग को चालू या बंद करते हैं तो, उपयोगकर्ता इस सेटिंग को बदल या इसे रद्द नहीं कर सकते.
+      अगर आप इस सेटिंग को चालू या बंद करते हैं, तो उपयोगकर्ता इस सेटिंग को बदल या इसे रद्द नहीं कर सकते.
 
-      अगर इस नीति को जोड़ा नहीं जाता है तो, उपयोगकर्ता डेटा का आकार कम करने संबंधी प्रॉक्सी सुविधा का फ़ायदा उठा सकेंगे और इसका उपयोग करने या न करने को चुन सकेंगे.</translation>
+      अगर इस नीति को जोड़ा नहीं जाता है, तो उपयोगकर्ता डेटा का आकार कम करने संबंधी प्रॉक्सी सुविधा का फ़ायदा उठा सकेंगे और इसका उपयोग करने या न करने को चुन सकेंगे.</translation>
 <translation id="2587719089023392205"><ph name="PRODUCT_NAME" /> को डिफ़ॉल्ट ब्राउज़र के रूप में सेट करें</translation>
 <translation id="2592091433672667839">रिटेल मोड में साइन-इन स्‍क्रीन पर दिखाने से पहले निष्‍क्रियता की अवधि</translation>
 <translation id="2596260130957832043">यह नियंत्रित करती है कि NTLMv2 चालू है या नहीं.
@@ -1053,15 +1053,15 @@
 <translation id="3808945828600697669">अक्षम प्‍लग इन की सूची निर्दिष्‍ट करें</translation>
 <translation id="3811562426301733860">सभी साइटों पर विज्ञापनों की अनुमति दें</translation>
 <translation id="3816312845600780067">स्वत:-प्रवेश के लिए बेलआउट कीबोर्ड शॉर्टकट सक्षम करें</translation>
-<translation id="3820526221169548563">ऑन-स्क्रीन कीबोर्ड एक्सेस की सुविधा चालू करें.
+<translation id="3820526221169548563">'ऑन-स्क्रीन कीबोर्ड सुलभता सुविधा' चालू करें.
 
-          अगर यह नीति सही पर सेट होती है तो, ऑन-स्क्रीन कीबोर्ड हमेशा चालू रहेगा.
+          अगर यह नीति 'सही' पर सेट होती है, तो ऑन-स्क्रीन कीबोर्ड हमेशा चालू रहेगा.
 
-          अगर यह नीति गलत पर सेट होती है तो, ऑन-स्क्रीन कीबोर्ड हमेशा बंद रहेगा.
+          अगर यह नीति 'गलत' पर सेट होती है, तो ऑन-स्क्रीन कीबोर्ड हमेशा बंद रहेगा.
 
-          अगर आप इस नीति को सेट करते हैं तो, उपयोगकर्ता ना तो इसे बदल सकते हैं और ना ही रद्द कर सकते हैं.
+          अगर आप इस नीति को सेट करते हैं, तो उपयोगकर्ता ना तो इसे बदल सकते हैं और ना ही रद्द कर सकते हैं.
 
-          अगर इस नीति को सेट किए बिना छोड़ दिया जाता है तो, शुरुआत में ऑन-स्क्रीन कीबोर्ड बंद रहेगा लेकिन उपयोगकर्ता उसे किसी भी समय चालू कर सकता है.</translation>
+          अगर इस नीति को सेट किए बिना छोड़ दिया जाता है, तो शुरुआत में ऑन-स्क्रीन कीबोर्ड बंद रहेगा लेकिन उपयोगकर्ता उसे किसी भी समय चालू कर सकता है.</translation>
 <translation id="382476126209906314">दूरस्थ पहुंच होस्ट के लिए TalkGadget का प्रारंभिक भाग कॉन्फ़ि‍गर करें</translation>
 <translation id="3831376478177535007">इस सेटिंग के चालू होने पर, <ph name="PRODUCT_NAME" /> Symantec Corporation के Legacy PKI संचालनों की ओर से जारी किए गए प्रमाणपत्रों को तब अनुमति देता है अगर वे अन्यथा किसी पहचाने हुए CA प्रमाणपत्र को सफलता से मान्य करते हैं और उससे जुड़ते हैं.
 
@@ -1070,11 +1070,11 @@
       अगर यह नीति सेट नहीं है या इसे गलत पर सेट किया गया है, तो फिर <ph name="PRODUCT_NAME" /> सार्वजनिक रूप से घोषित बहिष्करण शेड्यूल का पालन करेगा.
 
        इस बहिष्करण पर अधिक जानकारी के लिए https://g.co/chrome/symantecpkicerts देखें.</translation>
-<translation id="383466854578875212">आपको यह निर्दिष्ट करने देता है कि कौन से स्थानीय संदेश सेवा होस्ट कालीसूची के अधीन नहीं हैं.
+<translation id="383466854578875212">आपको यह तय करने की सुविधा देती है कि कौनसे स्थानीय मैसेजिंग सेवा होस्ट प्रतिबंधित नहीं करने चाहिए.
 
-          * वाले कालीसूची मान का अर्थ है कि सभी स्थानीय संदेश सेवा होस्ट कालीसूची में डाल दिए गए हैं और केवल श्वेतसूची में सूचीबद्ध स्थानीय संदेश सेवा होस्ट ही लोड किए जाएंगे.
+          *  के प्रतिबंधित मान का अर्थ यह है कि सभी स्थानीय मैसेजिंग सेवा होस्ट प्रतिबंधित हैं और उपयोगकर्ता केवल मान्य सूची में दिए गए स्थानीय मैसेजिंग सेवा होस्ट ही लोड किए जाएंगे.
 
-          डिफ़ॉल्ट रूप से, सभी स्थानीय संदेश सेवा होस्ट श्वेतसूची में होते हैं, लेकिन यदि नीति के अनुसार सभी स्थानीय संदेश सेवा होस्ट को कालीसूची में डाल दिया गया है, तो श्वेतसूची का उपयोग उस नीति को ओवरराइड करने के लिए किया जा सकता है.</translation>
+        सामान्य तौर पर, सभी स्थानीय मैसेजिंग सेवा होस्ट मान्य सूची में होते हैं, लेकिन अगर नीति के तहत सभी स्थानीय मैसेजिंग सेवा होस्ट को प्रतिबंधित किया जाता है, तो नीति को ओवरराइड करने के लिए मान्य सूची का उपयोग किया जा सकता है.</translation>
 <translation id="384743459174066962">वैसी साइट जिनमें पॉपअप खोलने की अनुमति नहीं है, उनके लिए यूआरएल पैटर्न की सूची सेट करने की सुविधा देती है.
 
           अगर इस नीति को सेट किए बिना छोड़ दिया जाता है तो, सभी साइट के लिए वैश्विक डिफ़ॉल्ट मान का इस्तेमाल किया जाएगा. अगर 'DefaultPopupsSetting' सेट है तो, यह मान इससे लिया जाएगा नहीं तो फिर उपयोगकर्ता के निजी कॉन्फ़िगरेशन का इस्तेमाल किया जाएगा.</translation>
@@ -1198,15 +1198,15 @@
 <translation id="4192388905594723944">दूर से एक्सेस करने की अनुमति देने के लिए, क्लाइंट की पहचान करने वाले टोकन की पुष्टि करने वाला यूआरएल</translation>
 <translation id="4203389617541558220">अपने आप होने वाला रीबूट शेड्यूल करके डिवाइस के काम करने की अवधि सीमित करें.
 
-      जब यह नीति सेट होती है तो, यह डिवाइस के काम करने की अवधि तय करती है, जिसके बाद अपने आप होने वाला रीबूट शेड्यूल किया जाता है.
+      जब यह नीति सेट होती है, तो यह डिवाइस के काम करने की अवधि तय करती है, जिसके बाद अपने आप होने वाला रीबूट शेड्यूल किया जाता है.
 
-      जब यह नीति सेट नहीं होती तो, डिवाइस के काम करने की अवधि सीमित नहीं होती.
+      जब यह नीति सेट नहीं होती, तो डिवाइस के काम करने की अवधि सीमित नहीं होती.
 
-      अगर आप इस नीति को सेट करते तो, उपयोगकर्ता इसे बदल नहीं सकते या ओवरराइड नहीं कर सकते.
+      अगर आप इस नीति को सेट करते, तो उपयोगकर्ता इसे बदल नहीं सकते या ओवरराइड नहीं कर सकते.
 
       अपने आप होने वाला रीबूट चुने गए समय पर शेड्यूल किया जाता है लेकिन अगर उपयोगकर्ता फ़िलहाल डिवाइस का उपयोग कर रहा है तो डिवाइस पर रीबूट में 24 घंटे तक की देरी हो सकती है.
 
-      ध्यान दें: फ़िलहाल, अपने आप होने वाला रीबूट सिर्फ़ तब चालू होते हैं जब लॉगिन स्क्रीन दिख रही हो या किओस्क ऐप्लिकेशन के सेशन चल रहा हो. आने वाले दिनों में यह बदल दिया जाएगा और नीति हमेशा लागू होगी, भले ही कोई खास प्रकार का सत्र चल रहा हो या न चल रहा हो.
+      ध्यान दें: फ़िलहाल, अपने आप होने वाले रीबूट सिर्फ़ तब चालू होते हैं जब लॉग इन स्क्रीन दिख रही हो या किओस्क ऐप्लिकेशन के सेशन चल रहा हो. आने वाले दिनों में यह बदल दिया जाएगा और नीति हमेशा लागू होगी, भले ही कोई खास प्रकार का सत्र चल रहा हो या न चल रहा हो.
 
       नीति का मान सेकंड में तय किया जाना चाहिए. मान कम से कम 3600 (एक घंटे) में क्लैंप होने चाहिए.</translation>
 <translation id="4203879074082863035">उपयोगकर्ताओं को केवल श्वेतसूची में शामिल प्रिंटर दिखाए जाते हैं</translation>
@@ -1304,23 +1304,23 @@
 <translation id="4480694116501920047">बलपूर्वक सुरक्षित खोज</translation>
 <translation id="4482640907922304445"><ph name="PRODUCT_NAME" /> के टूलबार पर होम पेज बटन दिखाती है.
 
-      अगर आप यह सेटिंग चालू करते हैं तो, होम पेज बटन हमेशा दिखाई देता है.
+      अगर आप यह सेटिंग चालू करते हैं, तो होम पेज बटन हमेशा दिखाई देता है.
 
-      अगर आप यह सेटिंग बंद करते हैं तो, होम पेज बटन कभी दिखाई नहीं देता है.
+      अगर आप यह सेटिंग बंद करते हैं, तो होम पेज बटन कभी दिखाई नहीं देता है.
 
-      अगर आप यह सेटिंग चालू या बंद करते हैं तो, <ph name="PRODUCT_NAME" /> में उपयोगकर्ता यह सेटिंग बदल नहीं सकते या इसे रद्द नहीं कर सकते.
+      अगर आप यह सेटिंग चालू या बंद करते हैं, तो <ph name="PRODUCT_NAME" /> में उपयोगकर्ता यह सेटिंग बदल नहीं सकते या इसे रद्द नहीं कर सकते.
 
-      अगर इस नीति को सेट किए बिना छोड़ दिया जाता है तो, उपयोगकर्ता को यह चुनने कि सुविधा होगी कि होम पेज बटन दिखाया जाए या नहीं.</translation>
+      अगर इस नीति को सेट किए बिना छोड़ दिया जाता है, तो उपयोगकर्ता को यह चुनने की सुविधा होगी कि होम पेज बटन दिखाया जाए या नहीं.</translation>
 <translation id="4483649828988077221">अपने आप होने वाले अपडेट बंद करें</translation>
 <translation id="4485425108474077672">नया टैब पेज URL कॉन्फ़िगर करें</translation>
 <translation id="4492287494009043413">स्क्रीनशॉट लेना बंद करें</translation>
-<translation id="450537894712826981">यह नीति कैश मेमोरी का आकार कॉन्‍फ़िगर करती है, <ph name="PRODUCT_NAME" /> जिसका उपयोग डिस्‍क पर मौजूद कैश मीडिया फ़ाइलें सेव करने के लिए करेगा.
+<translation id="450537894712826981">यह नीति कैश मेमोरी का आकार कॉन्‍फ़िगर करती है, जिसका उपयोग <ph name="PRODUCT_NAME" />, डिस्‍क पर मौजूद कैश मीडिया फ़ाइलें सेव करने के लिए करेगा.
 
-      अगर आप इस नीति को सेट करते हैं तो, <ph name="PRODUCT_NAME" /> कैश मेमोरी के दिए गए आकार का उपयोग करेगा, भले ही उपयोगकर्ता ने '--media-cache-size' फ़्लैग तय किया हो या न किया हो. इस नीति में तय किया गया मान आगे-पीछे हो सकता है. यह 'कैशिंग सिस्टम' के लिए बस एक सुझाव है, कुछ मेगाबाइट से कम आकार का कोई भी मान बहुत छोटा होता है और उसे 'न्‍यूनतम संतुलित मान' तक बढ़ा दिया जाएगा.
+      अगर आप इस नीति को सेट करते हैं, तो <ph name="PRODUCT_NAME" /> कैश मेमोरी के दिए गए आकार का उपयोग करेगा, भले ही उपयोगकर्ता ने '--media-cache-size' फ़्लैग तय किया हो या न किया हो. इस नीति में तय किया गया मान आगे-पीछे हो सकता है. यह 'कैशिंग सिस्टम' के लिए बस एक सुझाव है, कुछ मेगाबाइट से कम आकार का कोई भी मान बहुत छोटा होता है और उसे 'न्‍यूनतम संतुलित मान' तक बढ़ा दिया जाएगा.
 
-      अगर इस नीति का मान 0 है तो, कैश मेमोरी के डिफ़ॉल्‍ट आकार का उपयोग किया जाएगा लेकिन उपयोगकर्ता उसे बदल नहीं सकेगा.
+      अगर इस नीति का मान 0 है, तो कैश मेमोरी के डिफ़ॉल्‍ट आकार का उपयोग किया जाएगा लेकिन उपयोगकर्ता उसे बदल नहीं सकेगा.
 
-      अगर यह नीति सेट नहीं है तो, डिफ़ॉल्‍ट आकार का उपयोग किया जाएगा और उपयोगकर्ता उसे --media-cache-size फ़्लैग से ओवरराइड कर सकेगा.</translation>
+      अगर यह नीति सेट नहीं है, तो डिफ़ॉल्‍ट आकार का उपयोग किया जाएगा और उपयोगकर्ता उसे --media-cache-size फ़्लैग से ओवरराइड कर सकेगा.</translation>
 <translation id="4508686775017063528">अगर यह नीति 'सही' पर सेट की जाती है या इसे सेट नहीं किया जाता है तो, <ph name="PRODUCT_NAME" /> को चालू कर दिया जाएगा और उपयोगकर्ता इसे ऐप्लिकेशन मेन्यू, पेज संदर्भ मेन्यू, Cast चालू वेबसाइट पर मीडिया नियंत्रणों और (अगर दिखाया जाता है तो) Cast टूलबार आइकॉन से लॉन्च कर पाएंगे.
 
           अगर यह नीति 'गलत' पर सेट की जाती है तो, <ph name="PRODUCT_NAME" /> को बंद कर दिया जाएगा.</translation>
@@ -1328,13 +1328,13 @@
 <translation id="4518251772179446575">जब भी कोई साइट, उपयोगकर्ताओं के वास्‍तविक स्‍थान पर नज़र रखना चाहे, तब पूछें</translation>
 <translation id="4519046672992331730">यह नीति <ph name="PRODUCT_NAME" /> के ऑम्निबॉक्स में खोज सुझावों को चालू करती है और उपयोगकर्ता को इस सेटिंग को बदलने से रोकती है.
 
-      अगर आप इस सेटिंग को चालू करते हैं तो, खोज सुझावों का उपयोग किया जाता है.
+      अगर आप इस सेटिंग को चालू करते हैं, तो खोज सुझावों का उपयोग किया जाता है.
 
-      अगर आप इस सेटिंग को बंद करते हैं तो, खोज सुझावों का कभी भी उपयोग नहीं किया जाता.
+      अगर आप इस सेटिंग को बंद करते हैं, तो खोज सुझावों का कभी भी उपयोग नहीं किया जाता.
 
-      अगर आप इस सेटिंग को चालू या बंद करते हैं तो, उपयोगकर्ता <ph name="PRODUCT_NAME" /> में इस सेटिंग को बदल नहीं सकते या ओवरराइड नहीं कर सकते.
+      अगर आप इस सेटिंग को चालू या बंद करते हैं, तो उपयोगकर्ता <ph name="PRODUCT_NAME" /> में इस सेटिंग को बदल नहीं सकते या ओवरराइड नहीं कर सकते.
 
-      अगर इस नीति को सेट नहीं किया जाता है तो, इसे चालू किया जाएगा लेकिन उपयोगकर्ता इसे बदल नहीं सकेगा.</translation>
+      अगर इस नीति को सेट नहीं किया जाता है, तो इसे चालू किया जाएगा लेकिन उपयोगकर्ता इसे बदल नहीं सकेगा.</translation>
 <translation id="4531706050939927436">Google Play का उपयोग करके, Google Admin console की सहमति से Android ऐप्लिकेशन बलपूर्वक इंस्टॉल किए जा सकते हैं. वे इस नीति का उपयोग नहीं करते हैं.</translation>
 <translation id="4534500438517478692">Android प्रतिबंध का नाम:</translation>
 <translation id="4541530620466526913">डिवाइस-स्थानीय खाते</translation>
@@ -1342,7 +1342,7 @@
 
           यह नीति कई सेटिंग को नियंत्रित करती है, जिनमें किसी भी मौजूदा एक्‍सटेंशन से जुड़ी नीति से नियंत्रित सेटिंग शामिल होती हैं. अगर दोनों सेट हों तो यह नीति पहले से लागू किसी भी नीति को ओवरराइड कर देगी.
 
-          यह नीति अपने कॉन्‍फ़िगरेशन में एक एक्‍सटेंशन आईडी या एक अपडेट यूआरएल मैप करती है. एक्‍सटेंशन आईडी के साथ, कॉन्‍फ़िगरेशन सिर्फ़ तय किए गए एक्‍सटेंशन पर ही लागू किया जाएगा. विशेष आईडी <ph name="DEFAULT_SCOPE" /> के लिए एक डिफ़ॉल्‍ट कॉन्‍फ़िगरेशन सेट किया जा सकता है, जो उन सभी एक्‍सटेंशन पर लागू हो जाएगा जिनके लिए इस नीति में कोई कस्‍टम कॉन्‍फ़िगरेशन सेट न किया गया हो. किसी अपडेट यूआरएल के साथ, कॉन्‍फ़िगरेशन सटीक अपडेट यूआरएल वाले सभी एक्‍सटेंशन पर लागू किया जाएगा जिसका इस एक्‍सटेंशन के मेनिफ़ेस्ट में उल्‍लेख किया गया है, जैसा कि <ph name="LINK_TO_EXTENSION_DOC1" /> में बताया गया है.
+          यह नीति अपने कॉन्‍फ़िगरेशन में एक एक्‍सटेंशन आईडी या एक अपडेट यूआरएल मैप करती है. एक्‍सटेंशन आईडी के साथ, कॉन्‍फ़िगरेशन सिर्फ़ तय किए गए एक्‍सटेंशन पर ही लागू किया जाएगा. विशेष आईडी <ph name="DEFAULT_SCOPE" />, के लिए एक डिफ़ॉल्‍ट कॉन्‍फ़िगरेशन सेट किया जा सकता है, जो उन सभी एक्‍सटेंशन पर लागू हो जाएगा जिनके लिए इस नीति में कोई कस्‍टम कॉन्‍फ़िगरेशन सेट न किया गया हो. किसी अपडेट यूआरएल के साथ, कॉन्‍फ़िगरेशन सटीक अपडेट यूआरएल वाले सभी एक्‍सटेंशन पर लागू किया जाएगा जिसका इस एक्‍सटेंशन के मेनिफ़ेस्ट में उल्‍लेख किया गया है, जैसा कि <ph name="LINK_TO_EXTENSION_DOC1" /> में बताया गया है.
 
           इस नीति की संभावित सेटिंग और स्ट्रक्चर की पूरी जानकारी के लिए कृपया https://www.chromium.org/administrators/policy-list-3/extension-settings-full पर जाएं
           </translation>
@@ -1471,11 +1471,11 @@
 <translation id="4899708173828500852">सुरक्षित ब्राउज़िंग सक्षम करें</translation>
 <translation id="4899802251198446659">यह नीति आपको यह नियंत्रित करने देती है कि <ph name="PRODUCT_NAME" /> में, ऑडियो सामग्री होने पर वीडियो अपने आप (उपयोगकर्ता की सहमति के बिना) चल सकते हैं या नहीं.
 
-      अगर नीति को 'सही' पर सेट किया गया है तो, <ph name="PRODUCT_NAME" /> को मीडिया अपने आप चलने की अनुमति है.
-      अगर नीति को 'गलत' पर सेट किया गया है तो, <ph name="PRODUCT_NAME" /> को मीडिया अपने आप चलने की अनुमति नहीं है. कुछ 'यूआरएल पैटर्न' के मामले में इसे ओवरराइड करने के लिए AutoplayWhitelist नीति का इस्तेमाल किया जा सकता है.
+      अगर नीति को 'सही' पर सेट किया गया है, तो <ph name="PRODUCT_NAME" /> को मीडिया अपने आप चलने की अनुमति है.
+      अगर नीति को 'गलत' पर सेट किया गया है, तो <ph name="PRODUCT_NAME" /> को मीडिया अपने आप चलने की अनुमति नहीं है. कुछ 'यूआरएल पैटर्न' के मामले में इसे ओवरराइड करने के लिए AutoplayWhitelist नीति का इस्तेमाल किया जा सकता है.
       डिफ़ॉल्ट रूप से, <ph name="PRODUCT_NAME" /> को अपने आप मीडिया चलाने की अनुमति नहीं है. कुछ 'यूआरएल पैटर्न' के मामले में इसे ओवरराइड के लिए AutoplayWhitelist नीति का इस्तेमाल किया जा सकता है.
 
-      ध्यान रखें कि अगर <ph name="PRODUCT_NAME" /> चल रहा है और यह नीति बदल जाती है तो, यह सिर्फ़ नए खोले गए टैब पर लागू होगी. इस वजह से कुछ टैब अब भी पुराने तरीके से काम कर सकते हैं.
+      ध्यान रखें कि अगर <ph name="PRODUCT_NAME" /> चल रहा है और यह नीति बदल जाती है, तो यह सिर्फ़ नए खोले गए टैब पर लागू होगी. इस वजह से कुछ टैब अब भी पुराने तरीके से काम कर सकते हैं.
       </translation>
 <translation id="4906194810004762807">'डिवाइस नीति‍' के लि‍ए रीफ्रेश दर</translation>
 <translation id="4917385247580444890">सशक्त</translation>
@@ -1545,13 +1545,13 @@
 <translation id="519247340330463721">सुरक्षित ब्राउज़िंग संबंधी नीतियों को कॉन्फ़िगर करें.</translation>
 <translation id="5192837635164433517">यह नीति गड़बड़ी के ऐसे वैकल्पिक पेज का उपयोग चालू करती है जो <ph name="PRODUCT_NAME" /> में तैयार होते हैं (जैसे 'पेज नहीं मिला') और उपयोगकर्ताओं को इस सेटिंग को बदलने से रोकती है.
 
-      अगर आप इस सेटिंग को चालू करते हैं तो, गड़बड़ी के वैकल्पिक पेज का उपयोग किया जाता है.
+      अगर आप इस सेटिंग को चालू करते हैं, तो गड़बड़ी के वैकल्पिक पेज का उपयोग किया जाता है.
 
-      अगर आप इस सेटिंग को बंद करते हैं तो, गड़बड़ी के वैकल्पिक पेज का उपयोग कभी भी नहीं किया जाता.
+      अगर आप इस सेटिंग को बंद करते हैं, तो गड़बड़ी के वैकल्पिक पेज का उपयोग कभी भी नहीं किया जाता.
 
-      अगर आप इस सेटिंग को चालू या बंद करते हैं तो, उपयोगकर्ता <ph name="PRODUCT_NAME" /> में इस सेटिंग को बदल या इसे ओवरराइड नहीं कर सकते.
+      अगर आप इस सेटिंग को चालू या बंद करते हैं, तो उपयोगकर्ता <ph name="PRODUCT_NAME" /> में इस सेटिंग को बदल या इसे ओवरराइड नहीं कर सकते.
 
-      अगर यह नीति सेट नहीं की जाती है तो, यह चालू रहेगी लेकिन उपयोगकर्ता इसे बदल सकेगा.</translation>
+      अगर यह नीति सेट नहीं की जाती है, तो यह चालू रहेगी लेकिन उपयोगकर्ता इसे बदल सकेगा.</translation>
 <translation id="5196805177499964601">डेवलपर मोड अवरुद्ध करें.
 
       यदि यह नीति सही पर सेट की जाती है, तो <ph name="PRODUCT_OS_NAME" /> डिवाइस को डेवलपर मोड में बूट होने से रोकेगा. डेवलपर स्विच चालू होने पर सिस्टम बूट होने से मना कर देगा और एक गड़बड़ी स्क्रीन दिखाएगा.
@@ -1649,7 +1649,7 @@
 <translation id="5442026853063570579">यह नीति Android डेवलपर के लिए सेटिंग और टूल का एक्सेस भी नियंत्रित करती है. अगर आप इस नीति को 'DeveloperToolsDisallowed' (मान 2) पर सेट करते हैं, तो उपयोगकर्ता डेवलपर के लिए सेटिंग और टूल एक्सेस नहीं कर सकते. अगर आप इस नीति को किसी दूसरे मान पर सेट करते हैं या इसे सेट किए बिना छोड़ देते हैं, तो उपयोगकर्ता Android सेटिंग ऐप्लिकेशन में बिल्ड नंबर पर सात बार टैप करके डेवलपर के लिए सेटिंग और टूल एक्सेस कर सकते हैं.</translation>
 <translation id="5447306928176905178">मेमोरी जानकारी (JS हीप आकार) को पेज पर रिपोर्ट करना सक्षम करें (बहिष्कृत)</translation>
 <translation id="5457065417344056871">ब्राउज़र में मेहमान मोड सक्षम करना</translation>
-<translation id="5457924070961220141">आपको डिफ़ॉल्ट HTML रेंडरर कॉन्फ़िगर करने देती है जब <ph name="PRODUCT_FRAME_NAME" /> इंस्टॉल हो. जब इस नीति को सेट किए बिना छोड़ दिया जाता है तो होस्ट ब्राउज़र को रेंडरिंग की अनुमति देने के लिए डिफ़ॉल्ट सेटिंग का उपयोग किया जाता है, लेकिन आप वैकल्पिक रूप से इसे ओवरराइड कर सकते हैं और डिफ़ॉल्ट रूप से <ph name="PRODUCT_FRAME_NAME" /> को HTML पेज रेंडर करने दे सकते हैं.</translation>
+<translation id="5457924070961220141">आपको डिफ़ॉल्ट एचटीएमएल रेंडरर कॉन्फ़िगर करने देती है, अगर <ph name="PRODUCT_FRAME_NAME" /> इंस्टॉल किया जा चुका हो. जब इस नीति को सेट किए बिना छोड़ दिया जाता है, तो होस्ट ब्राउज़र को रेंडरिंग की अनुमति देने के लिए डिफ़ॉल्ट सेटिंग का उपयोग किया जाता है, लेकिन आप वैकल्पिक रूप से इसे ओवरराइड कर सकते हैं और डिफ़ॉल्ट रूप से <ph name="PRODUCT_FRAME_NAME" /> को एचटीएमएल पेज रेंडर करने दे सकते हैं.</translation>
 <translation id="5464816904705580310">प्रबंधित उपयोगकर्ताओं की सेटिंग कॉन्फ़िगर करें.</translation>
 <translation id="546726650689747237">AC पावर पर चलते समय स्क्रीन मंद विलंब</translation>
 <translation id="5469825884154817306">इन साइटों पर चित्र अवरुद्ध करें</translation>
@@ -1701,15 +1701,15 @@
       अगर यह नीति 'बंद' पर सेट है तो, कोई इस्तेमाल करने वाला व्यक्ति, ऐप्लिकेशन या एक्स्टेंशन फ़ुलस्क्रीन मोड में नहीं जा सकेंगे.
 
       <ph name="PRODUCT_OS_NAME" /> के अलावा सभी प्लैटफ़ॉर्म पर, 'फ़ुलस्क्रीन मोड' बंद होने की स्थिति में किओस्क मोड भी इस्तेमाल नहीं किया जा सकता.</translation>
-<translation id="556941986578702361"><ph name="PRODUCT_OS_NAME" /> अलमारी का स्वत:-छिपाना नियंत्रित करना.
+<translation id="556941986578702361"><ph name="PRODUCT_OS_NAME" /> शेल्फ़ की अपने आप छिपने की सुविधा नियंत्रित करना.
 
-      यदि यह नीति 'AlwaysAutoHideShelf' पर सेट हो, तो अलमारी हमेशा ही स्वत:-छिपाया जाएगा.
+      अगर यह नीति 'AlwaysAutoHideShelf' पर सेट हो, तो शेल्फ़ हमेशा ही अपने आप छिपाया जाएगा.
 
-      यदि यह नीति 'NeverAutoHideShelf' पर सेट हो, तो अलमारी कभी भी स्वत:-नहीं छिपाया जाता.
+      अगर यह नीति 'NeverAutoHideShelf' पर सेट हो, तो शेल्फ़ कभी भी अपने आप नहीं छिपाया जाता.
 
-      यदि आप यह नीति सेट करते हैं, तो उपयोगकर्ता इसे बदल या ओवरराइड नहीं कर सकते हैं.
+      अगर आप यह नीति सेट करते हैं, तो उपयोगकर्ता इसे बदल नहीं सकते या ओवरराइड नहीं कर सकते.
 
-      यदि यह नीति सेट किए बिना छोड़ दी जाती है, तो उपयोगकर्ता चुन सकते हैं कि क्या अलमारी को स्वत:-छिपाया जाना चाहिए.</translation>
+      अगर यह नीति सेट किए बिना छोड़ दी जाती है, तो उपयोगकर्ता चुन सकते हैं कि क्या शेल्फ़ को अपछिपाया जाना चाहिए.</translation>
 <translation id="557360560705413259">जब इस सेटिंग को चालू किया जाता है तो, प्रमाणपत्र में subjectAlternativeName एक्सटेंशन मौजूद न होने पर, होस्टनाम से मिलान करने के लिए <ph name="PRODUCT_NAME" /> सर्वर प्रमाणपत्र के commonName का उपयोग करेगा, जब तक कि वह स्थानीय रूप से इंस्टॉल किए गए CA प्रमाणपत्रों की पुष्टि नहीं कर लेता और उनसे जुड़ नहीं जाता.
 
       ध्यान रखें कि इसका सुझाव नहीं दिया जाता, क्योंकि इससे ऐसे nameConstraints एक्सटेंशन को बायपास करने की अनुमति मिल सकती है जो ऐसे होस्टनामों पर रोक लगाता है, जिसके लिए किसी प्रमाणपत्र को मंज़ूरी दी जा सकती है.
@@ -1777,11 +1777,11 @@
 <translation id="5836064773277134605">रिमोट एक्सेस होस्ट द्वारा उपयोग की गई UDP पोर्ट श्रेणी प्रतिबंधित करें</translation>
 <translation id="5862253018042179045">लॉग इन स्क्रीन पर 'कंप्यूटर के बोलकर दिए जाने वाले जवाब' की सुलभता सुविधा को डिफ़ॉल्ट पर सेट करें.
 
-          अगर यह नीति सही पर सेट है तो, लॉग इन स्क्रीन के दिखाई देने पर 'कंप्यूटर के बोलकर दिए जाने वाले जवाब की सुविधा' को चालू कर दिया जाएगा.
+          अगर यह नीति 'सही' पर सेट है, तो लॉग इन स्क्रीन के दिखाई देने पर 'कंप्यूटर के बोलकर दिए जाने वाले जवाब की सुविधा' को चालू कर दिया जाएगा.
 
-          अगर यह नीति गलत पर सेट है तो, लॉग इन स्क्रीन के दिखाई देने पर 'कंप्यूटर के बोलकर दिए जाने वाले जवाब की सुविधा' को बंद कर दिया जाएगा.
+          अगर यह नीति 'गलत' पर सेट है, तो लॉग इन स्क्रीन के दिखाई देने पर 'कंप्यूटर के बोलकर दिए जाने वाले जवाब की सुविधा' को बंद कर दिया जाएगा.
 
-          अगर आप यह नीति सेट करते है तो, उपयोगकर्ता 'कंप्यूटर के बोलकर दिए जाने वाले जवाब की सुविधा' को चालू या बंद करके इसे कुछ समय के लिए रद्द कर सकते हैं. हालांकि, उपयोगकर्ता की पसंद हमेशा एक जैसी नहीं होती और हर बार नई लॉग इन स्क्रीन दिखाई देने पर या उपयोगकर्ता के लॉग इन स्क्रीन पर एक मिनट तक कोई गतिविधि न करने पर डिफ़ॉल्ट स्थिति बहाल हो जाती है.
+          अगर आप यह नीति सेट करते है, तो उपयोगकर्ता 'कंप्यूटर के बोलकर दिए जाने वाले जवाब की सुविधा' को चालू या बंद करके इसे कुछ समय के लिए रद्द कर सकते हैं. हालांकि, उपयोगकर्ता की पसंद हमेशा एक जैसी नहीं होती और हर बार नई लॉग इन स्क्रीन दिखाई देने पर या उपयोगकर्ता के लॉग इन स्क्रीन पर एक मिनट तक कोई गतिविधि न करने पर डिफ़ॉल्ट स्थिति बहाल हो जाती है.
 
           अगर यह नीति सेट नहीं की जाती है तो, पहली बार लॉग इन स्क्रीन दिखाई देने पर 'कंप्यूटर के बोलकर दिए जाने वाले जवाब की सुविधा' बंद होती है. उपयोगकर्ता इस सुविधा को किसी भी समय चालू या बंद कर सकते हैं और लॉग इन स्क्रीन पर उपयोगकर्ताओं के लिए यह स्थिति एक जैसी होती है.</translation>
 <translation id="5868414965372171132">उपयोगकर्ता-स्‍तरीय नेटवर्क कॉन्‍फ़‍िगरेशन</translation>
@@ -1808,13 +1808,13 @@
 <translation id="5921713479449475707">HTTP के द्वारा स्वतः अपडेट डाउनलोड की अनुमति दें</translation>
 <translation id="5921888683953999946">लॉग इन स्क्रीन पर बड़े कर्सर की उपलब्धता सुविधा की डिफ़ॉल्ट स्थिति तय करें.
 
-          अगर यह नीति सही पर सेट है तो, लॉग इन स्क्रीन के दिखाई देने पर बड़ा कर्सर चालू हो जाएगा.
+          अगर यह नीति 'सही' पर सेट है, तो लॉग इन स्क्रीन के दिखाई देने पर बड़ा कर्सर चालू हो जाएगा.
 
-          अगर नीति गलत पर सेट है तो, लॉग इन स्क्रीन के दिखाई देने पर बड़ा कर्सर बंद हो जाएगा.
+          अगर नीति 'गलत' पर सेट है, तो लॉग इन स्क्रीन के दिखाई देने पर बड़ा कर्सर बंद हो जाएगा.
 
-          अगर आप इस नीति को सेट करते हैं तो, उपयोगकर्ता बड़े कर्सर को चालू या बंद करके इसे अस्थायी रूप से रद्द कर सकते हैं. हालांकि, उपयोगकर्ता की पसंद स्थायी नहीं होती है और लॉग इन स्क्रीन के फिर से दिखाई देने या उपयोगकर्ता जब लॉग इन स्क्रीन पर एक मिनट तक कोई गतिविधि नहीं करता तो, डिफ़ॉल्ट स्थिति लागू हो जाती है.
+          अगर आप इस नीति को सेट करते हैं, तो उपयोगकर्ता बड़े कर्सर को चालू या बंद करके इसे अस्थायी रूप से रद्द कर सकते हैं. हालांकि, उपयोगकर्ता की पसंद स्थायी नहीं होती है और लॉग इन स्क्रीन के फिर से दिखाई देने या उपयोगकर्ता जब लॉग इन स्क्रीन पर एक मिनट तक कोई गतिविधि नहीं करता, तो डिफ़ॉल्ट स्थिति लागू हो जाती है.
 
-          अगर यह नीति सेट किए बिना छोड़ दी जाती है तो, लॉग इन स्क्रीन के पहली बार दिखाई देने पर बड़ा कर्सर बंद हो जाता है. उपयोगकर्ता जब चाहें बड़े कर्सर को चालू या बंद कर सकते हैं और उपयोगकर्ताओं के बीच लॉग इन स्क्रीन पर इसकी स्थिति स्थायी हो जाती है.</translation>
+          अगर यह नीति सेट किए बिना छोड़ दी जाती है, तो लॉग इन स्क्रीन के पहली बार दिखाई देने पर बड़ा कर्सर बंद हो जाता है. उपयोगकर्ता जब चाहें बड़े कर्सर को चालू या बंद कर सकते हैं और उपयोगकर्ताओं के बीच लॉग इन स्क्रीन पर इसकी स्थिति स्थायी हो जाती है.</translation>
 <translation id="5929855945144989709">डिवाइस को Chrome OS पर वर्चुअल मशीनें चलाने देती है</translation>
 <translation id="5932767795525445337">Android ऐप पिन करने के लिए भी इस नीति का इस्तेमाल किया जा सकता है.</translation>
 <translation id="5936622343001856595">यह नीति, 'Google वेब सर्च' में क्वेरी को 'सुरक्षित खोज' की मदद से अंजाम देने की सुविधा लागू करती है. साथ ही उपयोगकर्ताओं को यह सेटिंग बदलने से रोकती है.
@@ -1823,9 +1823,9 @@
 
       अगर आप यह सेटिंग बंद करते हैं या कोई मान सेट नहीं करते हैं तो, 'Google सर्च' में 'सुरक्षित खोज' को लागू नहीं किया जाता.</translation>
 <translation id="5946082169633555022">बीटा चैनल</translation>
-<translation id="5950205771952201658">इस तथ्य के परिप्रेक्ष्य में कि सॉफ़्ट-फ़ेल तथा ऑनलाइन निरस्तीकरण परीक्षणों से कोई प्रभावी सुरक्षा लाभ नहीं मिलता, उन्हें <ph name="PRODUCT_NAME" /> संस्करण 19 और बाद के संस्करणों में डिफ़ॉल्ट रूप से अक्षम कर दिया गया है. इस नीति को सही पर सेट करके, पिछला व्यवहार पुनर्स्‍थापित कर दिया जाता है और ऑनलाइन OCSP/CRL परीक्षण किए जाएंगे.
+<translation id="5950205771952201658">इस तथ्य को देखते हुए कि सॉफ़्ट-फ़ेल और ऑनलाइन निरस्तीकरण परीक्षणों से कोई असरदार सुरक्षा फ़ायदा नहीं मिलता, उन्हें <ph name="PRODUCT_NAME" /> वर्शन 19 और बाद के वर्शन में डिफ़ॉल्ट रूप से बंद कर दिया गया है. इस नीति को 'सही' पर सेट करके, काम करने का पिछला तरीका रीस्टोर कर दिया गया है और अब ऑनलाइन OCSP/CRL परीक्षण किए जाएंगे.
 
-      यदि इस नीति को सेट नहीं किया जाता या गलत पर सेट किया जाता है, तो <ph name="PRODUCT_NAME" />, <ph name="PRODUCT_NAME" /> 19 और बाद के संस्करणों में ऑनलाइन निरस्तीकरण परीक्षण नहीं करेगा.</translation>
+      अगर इस नीति को सेट नहीं किया जाता या 'गलत' पर सेट किया जाता है, तो <ph name="PRODUCT_NAME" />, <ph name="PRODUCT_NAME" /> 19 और बाद के वर्शन में ऑनलाइन निरस्तीकरण परीक्षण नहीं करेगा.</translation>
 <translation id="5966615072639944554">वैसे एक्सटेंशन जिन्हें दूर से प्रमाणित करने वाले API का इस्तेमाल करने की अनुमति है</translation>
 <translation id="5983708779415553259">साइटों का डिफ़ॉल्ट व्यवहार किसी भी सामग्री पैक में नहीं है</translation>
 <translation id="5997543603646547632">डिफ़ॉल्ट रूप से 24 घंटे वाली घड़ी का उपयोग करें</translation>
@@ -2007,13 +2007,13 @@
       उपयोगकर्ता द्वारा चयनित चैनल ChromeOsReleaseChannel नीति द्वारा ओवरराइड कर दिया जाएगा, लेकिन यदि नीति चैनल, डिवाइस पर इंस्टॉल किए हुए से अधिक स्थिर होता है, फिर वह चैनल, डिवाइस पर इंस्टॉल किए हुए की अपेक्षा अधिक स्थिर चैनल के किसी उच्च वर्शन संख्या पर पहुंच जाने के बाद ही स्विच करेगा.</translation>
 <translation id="6559057113164934677">किसी भी साइट को कैमरे और माइक्रोफ़ोन तक न पहुंचने दें</translation>
 <translation id="6561396069801924653">सिस्टम ट्रे मेनू में पहुंच-योग्यता विकल्प दिखाएं</translation>
-<translation id="6565312346072273043">लॉग इन स्क्रीन पर 'ऑन-स्क्रीन कीबोर्ड' के एक्सेस की सुविधा को डिफ़ॉल्ट पर सेट करें.
+<translation id="6565312346072273043">लॉग इन स्क्रीन पर 'ऑन-स्क्रीन कीबोर्ड' की सुलभता सुविधा को डिफ़ॉल्ट पर सेट करें.
 
-          अगर यह नीति सही पर सेट की जाती है तो, लॉग इन स्क्रीन दिखाए जाने पर 'ऑन-स्क्रीन कीबोर्ड' चालू हो जाएगा.
+          अगर यह नीति 'सही' पर सेट की जाती है, तो लॉग इन स्क्रीन दिखाए जाने पर 'ऑन-स्क्रीन कीबोर्ड' चालू हो जाएगा.
 
-          अगर यह नीति गलत पर सेट की जाती है तो, लॉग इन स्क्रीन दिखाए जाने पर 'ऑन-स्क्रीन कीबोर्ड' बंद हो जाएगा.
+          अगर यह नीति 'गलत' पर सेट की जाती है, तो लॉग इन स्क्रीन दिखाए जाने पर 'ऑन-स्क्रीन कीबोर्ड' बंद हो जाएगा.
 
-          अगर आप इस नीति को सेट करते हैं तो, उपयोगकर्ता 'ऑन-स्क्रीन कीबोर्ड' को चालू या बंद करके इसे कुछ समय के लिए रद्द कर सकते हैं. हालांकि, उपयोगकर्ता की पसंद हमेशा एक जैसी नहीं होती और हर बार नई लॉग इन स्क्रीन दिखाई देने पर या उपयोगकर्ता के लॉग इन स्क्रीन पर एक मिनट तक कोई गतिविधि न करने पर डिफ़ॉल्ट स्थिति बहाल हो जाती है.
+          अगर आप इस नीति को सेट करते हैं, तो उपयोगकर्ता 'ऑन-स्क्रीन कीबोर्ड' को चालू या बंद करके इसे कुछ समय के लिए रद्द कर सकते हैं. हालांकि, उपयोगकर्ता की पसंद हमेशा एक जैसी नहीं होती और हर बार नई लॉग इन स्क्रीन दिखाई देने पर या उपयोगकर्ता के लॉग इन स्क्रीन पर एक मिनट तक कोई गतिविधि न करने पर डिफ़ॉल्ट स्थिति बहाल हो जाती है.
 
           अगर यह नीति सेट नहीं की जाती है तो, पहली बार लॉग इन स्क्रीन दिखाए जाने पर 'ऑन-स्क्रीन कीबोर्ड' की सुविधा बंद होती है. उपयोगकर्ता इस सुविधा को किसी भी समय चालू या बंद कर सकते हैं और लॉग इन स्क्रीन पर उपयोगकर्ताओं के लिए यह स्थिति एक जैसी होती है.</translation>
 <translation id="6573305661369899995">URL प्रतिबंधों का बाहरी स्रोत सेट करें</translation>
@@ -2139,7 +2139,7 @@
 <translation id="6899705656741990703">प्रॉक्सी सेटिंग का अपने आप पता लगाएं</translation>
 <translation id="6903814433019432303">यह नीति सिर्फ़ रिटेल मोड में काम करती है.
 
-      उन यूआरएल का समूह तय करती है जो डेमो सत्र के शुरू होने पर लोड होते हैं. यह नीति शुरुआती यूआरएल सेट करने की किसी भी अन्‍य प्रक्रिया को रद्द कर देगी और सिर्फ़ उसी सत्र पर लागू होगी जो किसी खास उपयोगकर्ता से जुड़ा हुआ नहीं होगा.</translation>
+      उन यूआरएल का समूह तय करती है जो डेमो सत्र के शुरू होने पर लोड होते हैं. यह नीति शुरुआती यूआरएल सेट करने की किसी भी और प्रक्रिया को रद्द कर देगी और सिर्फ़ उसी सत्र पर लागू होगी जो किसी खास उपयोगकर्ता से जुड़ा हुआ नहीं होगा.</translation>
 <translation id="6908347296939885026">G Suite में <ph name="PRODUCT_NAME" /> की पाबंदी वाली लॉग इन सुविधा को चालू करती है और उपयोगकर्ताओं को यह सेटिंग बदलने से रोकती है.
 
       अगर आप यह सेटिंग तय करते हैं, तो उपयोगकर्ता सिर्फ़ खास डोमेन के खातों का इस्तेमाल करके
@@ -2223,13 +2223,13 @@
       अगर इसे सेट नहीं किया गया हो तो, उपयोगकर्ता से आयात करने के लिए पूछा जा सकता है या अपने आप आयात किया जा सकता है.</translation>
 <translation id="7003746348783715221"><ph name="PRODUCT_NAME" /> प्राथमिकताएं</translation>
 <translation id="7006788746334555276">सामग्री सेटिंग</translation>
-<translation id="7007671350884342624">यह नीति वह निर्देशिका कॉन्फ़िगर करती है, जिसका उपयोग <ph name="PRODUCT_NAME" /> उपयोगकर्ता का डेटा जमा करने के लिए करेगा.
+<translation id="7007671350884342624">यह नीति वह निर्देशिका कॉन्फ़िगर करती है, जिसका उपयोग <ph name="PRODUCT_NAME" />, उपयोगकर्ता का डेटा जमा करने के लिए करेगा.
 
-      अगर आप यह नीति सेट करते हैं तो, <ph name="PRODUCT_NAME" /> इस निर्देशिका का उपयोग करेगा भले ही उपयोगकर्ता ने '--disk-cache-dir' फ़्लैग तय किया हो या न तय किया हो. डेटा खोने या दूसरी गड़बड़ियों से बचने के लिए इस नीति को किसी वॉल्यूम की मूल निर्देशिका पर या दूसरे कामों के लिए उपयोग की जाने वाली निर्देशिका पर सेट नहीं किया जाना चाहिए, क्योंकि <ph name="PRODUCT_NAME" /> उसकी सामग्री प्रबंधित करता है.
+      अगर आप यह नीति सेट करते हैं, तो <ph name="PRODUCT_NAME" />, इस निर्देशिका का उपयोग करेगा भले ही उपयोगकर्ता ने '--disk-cache-dir' फ़्लैग तय किया हो या न तय किया हो. डेटा खोने या दूसरी गड़बड़ियों से बचने के लिए इस नीति को किसी वॉल्यूम की मूल निर्देशिका पर या दूसरे कामों के लिए उपयोग की जाने वाली निर्देशिका पर सेट नहीं किया जाना चाहिए क्योंकि <ph name="PRODUCT_NAME" /> उसकी सामग्री प्रबंधित करता है.
 
       उपयोग किए जा सकने वाले वैरिएबल की सूची देखने के लिए https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables पर जाएं.
 
-      अगर यह नीति सेट नहीं की जाती है तो, डिफ़ॉल्ट प्रोफ़ाइल पाथ का उपयोग किया जाएगा और उपयोगकर्ता उसे '--disk-cache-dir' कमांड लाइन फ़्लैग की मदद से रद्द कर सकेगा.</translation>
+      अगर यह नीति सेट नहीं की जाती है, तो डिफ़ॉल्ट प्रोफ़ाइल पाथ का उपयोग किया जाएगा और उपयोगकर्ता उसे '--disk-cache-dir' कमांड लाइन फ़्लैग की मदद से रद्द कर सकेगा.</translation>
 <translation id="7027785306666625591"><ph name="PRODUCT_OS_NAME" /> में पावर प्रबंधन को कॉन्फ़िगर करती है.
 
       ये नीतियां यह कॉन्फ़िगर करने में मदद करती हैं कि अगर उपयोगकर्ता कुछ समय तक कोई गतिविधि नहीं करता तो, <ph name="PRODUCT_OS_NAME" /> का बर्ताव कैसा होगा.</translation>
@@ -2275,15 +2275,15 @@
           अगर इस नीति को नहीं जोड़ा जाता है तो, सभी साइट के लिए वैश्विक डिफ़ॉल्ट मान का इस्तेमाल किया जाएगा. अगर 'DefaultWebUsbGuardSetting' नीति सेट है तो, यह मान इससे लिया जाएगा नहीं तो फिर उपयोगकर्ता के निजी कॉन्फ़िगरेशन का इस्तेमाल किया जाएगा.
 
           इस नीति में दिए गए यूआरएल पैटर्न का टकराव, WebUsbBlockedForUrls के ज़रिए कॉन्फ़िगर किए गए यूआरएल से नहीं होना चाहिए. हालांकि, यह साफ़ नहीं है कि अगर किसी यूआरएल का दोनों नीतियों से मिलान हो जाता है तो किस नीति को प्राथमिकता दी जाएगी.</translation>
-<translation id="7106631983877564505"><ph name="PRODUCT_OS_NAME" /> डिवाइस पर कोई गतिविधि न होने या सस्पेंड हो जाने पर लॉक चालू करें.
+<translation id="7106631983877564505"><ph name="PRODUCT_OS_NAME" /> डिवाइस पर कोई गतिविधि न होने या कुछ समय के लिए बंद हो जाने पर लॉक चालू करें.
 
-      अगर आप इस सेटिंग को चालू करते हैं तो, डिवाइस को जगाने के लिए उपयोगकर्ताओं से अनलॉक करने का पासवर्ड मांगा जाएगा.
+      अगर आप इस सेटिंग को चालू करते हैं, तो डिवाइस को जगाने के लिए उपयोगकर्ताओं से अनलॉक करने का पासवर्ड मांगा जाएगा.
 
-      अगर आप इस सेटिंग को बंद करते हैं तो, डिवाइस को जगाने के लिए उपयोगकर्ताओं से अनलॉक करने का पासवर्ड नहीं मांगा जाएगा.
+      अगर आप इस सेटिंग को बंद करते हैं, तो डिवाइस को जगाने के लिए उपयोगकर्ताओं से अनलॉक करने का पासवर्ड नहीं मांगा जाएगा.
 
-      अगर आप इस सेटिंग को चालू या बंद करते हैं तो, उपयोगकर्ता उसे बदल नहीं सकते या उसे ओवरराइड नहीं कर सकते.
+      अगर आप इस सेटिंग को चालू या बंद करते हैं, तो उपयोगकर्ता उसे बदल नहीं सकते या उसे ओवरराइड नहीं कर सकते.
 
-      अगर नीति सेट नहीं की जाती है तो, उपयोगकर्ता चुन सकता है कि उससे डिवाइस को अनलॉक करने के लिए पासवर्ड मांगा जाए या नहीं.</translation>
+      अगर नीति सेट नहीं की जाती है, तो उपयोगकर्ता चुन सकता है कि उससे डिवाइस को अनलॉक करने के लिए पासवर्ड मांगा जाए या नहीं.</translation>
 <translation id="7115494316187648452">यह नीति तय करती है कि क्‍या OS लॉगिन पर कोई <ph name="PRODUCT_NAME" /> प्रक्रिया शुरू हुई है और क्‍या वह पिछले ब्राउज़र के बंद हो जाने पर चलती रहती है, जिससे बैकग्राउंड ऐप्लिकेशन और मौजूदा ब्राउज़िंग सेशन चालू रहें. इसमें कोई भी सेशन कुकी शामिल है. बैकग्राउंड प्रक्रिया 'सिस्‍टम ट्रे' में एक आइकॉन दिखाती है और उसे वहीं से कभी भी बंद किया जा सकता है.
 
       अगर यह नीति 'सही' पर सेट होती है तो, बैकग्राउंड मोड चालू हो जाता है और उपयोगकर्ता उसे ब्राउज़र सेटिंग में नियंत्रित नहीं कर सकता.
@@ -2319,11 +2319,11 @@
 <translation id="7234280155140786597">निषिद्ध स्थानीय संदेश सेवा होस्ट के नाम (या * सभी के लिए)</translation>
 <translation id="7236775576470542603">स्क्रीन मैग्नफाइअर (स्क्रीन पर किसी चीज़ को बड़ा दिखाने वाला) का वह डिफ़ॉल्ट प्रकार सेट करें जिसे लॉग इन स्क्रीन पर चालू किया गया है.
 
-          अगर यह नीति जोड़ी गई है तो, यह स्क्रीन मैग्नफाइअर के उस प्रकार को नियंत्रित करेगी जो लॉग इन स्क्रीन के दिखाई देने पर चालू होते हैं. अगर इस नीति के लिए "कुछ नहीं" चुना गया है तो, यह स्क्रीन मैग्नफाइअर को बंद करती है.
+          अगर यह नीति सेट है, तो यह स्क्रीन मैग्नफाइअर के उस प्रकार को नियंत्रित करेगी जो लॉग इन स्क्रीन के दिखाई देने पर चालू होते हैं. अगर इस नीति के लिए "कुछ नहीं" चुना गया है, तो यह स्क्रीन मैग्नफाइअर को बंद करती है.
 
-          अगर आप इस नीति को जोड़ते हैं तो, उपयोगकर्ता स्क्रीन मैग्नफाइअर को चालू या बंद करके इसे अस्थायी रूप से रद्द कर सकते हैं. हालांकि, उपयोगकर्ता की पसंद स्थायी नहीं होती है और लॉग इन स्क्रीन के फिर से दिखाई देने या उपयोगकर्ता जब लॉग इन स्क्रीन पर एक मिनट तक कोई गतिविधि नहीं करता  तो डिफ़ॉल्ट स्थिति लागू हो जाती है.
+          अगर आप इस नीति को सेट करते हैं, तो उपयोगकर्ता स्क्रीन मैग्नफाइअर को चालू या बंद करके इसे अस्थायी रूप से रद्द कर सकते हैं. हालांकि, उपयोगकर्ता की पसंद स्थायी नहीं होती है और लॉग इन स्क्रीन के फिर से दिखाई देने या उपयोगकर्ता जब लॉग इन स्क्रीन पर एक मिनट तक कोई गतिविधि नहीं करता  तो डिफ़ॉल्ट स्थिति लागू हो जाती है.
 
-          अगर यह नीति जोड़े बिना छोड़ दी जाती है तो, लॉग इन स्क्रीन के पहली बार दिखाई देने पर स्क्रीन मैग्नफाइअर बंद हो जाता है. उपयोगकर्ता जब चाहें स्क्रीन मैग्नफाइअर को चालू या बंद कर सकते हैं और उपयोगकर्ताओं के बीच लॉग इन स्क्रीन पर इसकी स्थिति स्थायी हो जाती है.</translation>
+        अगर यह नीति सेट किए बिना छोड़ दी जाती है, तो लॉग इन स्क्रीन के पहली बार दिखाई देने पर स्क्रीन मैग्नफाइअर बंद हो जाता है. उपयोगकर्ता जब चाहें स्क्रीन मैग्नफाइअर को चालू या बंद कर सकते हैं और उपयोगकर्ताओं के बीच लॉग इन स्क्रीन पर इसकी स्थिति स्थायी हो जाती है.</translation>
 <translation id="7249828445670652637">ARC-ऐप्लिकेशन के लिए <ph name="PRODUCT_OS_NAME" /> CA प्रमाणपत्रों को सक्षम करें</translation>
 <translation id="725322441686394886">अगर यह नीति सेट नहीं हो तो, Chrome से हानिकारक सॉफ़्टवेयर हटाने की सुविधा के ज़रिए अनचाहा सॉफ़्टवेयर मिलने पर, वह SafeBrowsingExtendedReportingEnabled के ज़रिए सेट की गई नीति के मुताबिक, स्कैन के मेटाडेटा की रिपोर्ट Google को कर सकती है. इसके बाद Chrome से हानिकारक सॉफ़्टवेयर हटाने की सुविधा उपयोगकर्ता से पूछेगी कि क्या वे अनचाहा सॉफ़्टवेयर हटाना चाहते हैं. उपयोगकर्ता हटाए जाने के नतीजों को Google से शेयर कर सकते हैं ताकि आगे अनचाहे सॉफ़्टवेयर की पहचान करने में मदद मिल सके. इन नतीजों में फ़ाइल मेटाडेटा, अपने आप इंस्टॉल होने वाले एक्सटेंशन और रजिस्ट्री कुंजी होती हैं जिनके बारे में Chrome के उस दस्तावेज में बताया गया है जिसमें, निजता की जानकारी दी गई है.
 
@@ -2455,11 +2455,11 @@
       यदि यह नीति सेट नहीं है या यदि इसे गलत पर सेट किया गया है, तो फिर <ph name="PRODUCT_NAME" /> सार्वजनिक रूप से घोषित SHA-1 बहिष्करण शेड्यूल का पालन करेगा.</translation>
 <translation id="7593523670408385997">यह नीति उस कैश मेमोरी के आकार को कॉन्‍फ़िगर करती है, जिसका उपयोग <ph name="PRODUCT_NAME" /> डिस्‍क में कैश फ़ाइलों को जमा करने के लिए करेगा.
 
-      अगर आप इस नीति को सेट करते हैं तो, इस बात पर ध्‍यान दिए बिना कि उपयोगकर्ता ने '--disk-cache-size' फ़्लैग के बारे में बताया है या नहीं, <ph name="PRODUCT_NAME" /> मुहैया कराए गए कैश मेमोरी के आकार का उपयोग करेगा. इस नीति में बताया गया मान, पत्थर की कोई लकीर नहीं है बल्कि वह कैश मेमोरी के बारे में एक सुझाव है. कुछ मेगाबाइट से कम आकार का कोई भी मान बहुत छोटा होता है और उसे किसी सबसे कम संतुलित मान तक बढ़ा दिया जाएगा.
+      अगर आप इस नीति को सेट करते हैं, तो इस बात पर ध्‍यान दिए बिना कि उपयोगकर्ता ने '--disk-cache-size' फ़्लैग के बारे में बताया है या नहीं, <ph name="PRODUCT_NAME" /> मुहैया कराए गए कैश मेमोरी के आकार का उपयोग करेगा. इस नीति में बताया गया मान, कोई पत्थर की लकीर नहीं है बल्कि वह कैश मेमोरी के बारे में एक सुझाव है. कुछ मेगाबाइट से कम आकार का कोई भी मान बहुत छोटा होता है और उसे किसी सबसे कम संतुलित मान तक बढ़ा दिया जाएगा.
 
-      अगर इस नीति का मान 0 है तो, कैश मेमोरी के डिफ़ॉल्‍ट आकार का उपयोग किया जाएगा लेकिन उपयोगकर्ता उसे बदल नहीं सकेगा.
+      अगर इस नीति का मान 0 है, तो कैश मेमोरी के डिफ़ॉल्‍ट आकार का उपयोग किया जाएगा लेकिन उपयोगकर्ता उसे बदल नहीं सकेगा.
 
-      अगर यह नीति सेट नहीं है तो, डिफ़ॉल्‍ट आकार का उपयोग किया जाएगा और उपयोगकर्ता उसे --disk-cache-size फ़्लैग से बदल सकेगा.</translation>
+      अगर यह नीति सेट नहीं है, तो डिफ़ॉल्‍ट आकार का उपयोग किया जाएगा और उपयोगकर्ता उसे --disk-cache-size फ़्लैग से बदल सकेगा.</translation>
 <translation id="759957074386651883">सुरक्षित ब्राउज़िंग सेटिंग</translation>
 <translation id="7604169113182304895">Android ऐप्लिकेशन स्वैच्छिक रूप से इस सूची का पालन करना चुन सकते हैं. आप उन्हें इसका पालन करने के लिए मजबूर नहीं कर सकते हैं.</translation>
 <translation id="7612157962821894603"><ph name="PRODUCT_NAME" /> स्टार्ट-अप पर लागू किए जाने वाले सिस्टम व्यापी फ़्लैग</translation>
@@ -2476,17 +2476,17 @@
       अगर यह सेटिंग बंद है या कॉन्‍फ़िगर नहीं की गई है तो, <ph name="PRODUCT_NAME" /> या तो उस स्थान-भाषा का इस्तेमाल करता है जिसे उपयोगकर्ता ने तय किया है (अगर कॉन्‍फ़िगर किया गया है) या फिर, सिस्टम की स्‍थान-भाषा या फ़ॉलबैक स्‍थान-भाषा 'en-US' का उपयोग करता है.</translation>
 <translation id="7641363659597330616">ऐसे डाउनलोड कॉन्फ़िगर करती है जिन्हें <ph name="PRODUCT_NAME" /> पूरी तरह से ब्लॉक कर देगा और उसे इस्तेमाल करने वाले भी सुरक्षा से जुड़े नतीजों में बदलाव नहीं कर पाएंगे.
 
-      अगर आप इस नीति को सेट करते हैं तो, <ph name="PRODUCT_NAME" /> कुछ खास तरह के डाउनलोड रोक देगा और इस्तेमाल करने वाले लोग सुरक्षा चेतावनियों को नज़रअंदाज़ नहीं कर पाएंगे.
+      अगर आप इस नीति को सेट करते हैं, तो <ph name="PRODUCT_NAME" /> कुछ खास तरह के डाउनलोड रोक देगा और इस्तेमाल करने वाले लोग सुरक्षा चेतावनियों को नज़रअंदाज़ नहीं कर पाएंगे.
 
-      जब 'खतरनाक डाउनलोड ब्लॉक करें' विकल्प चुना जाता है तो, सुरक्षित ब्राउज़िंग की चेतावनियों वाले डाउनलोड के अलावा सभी डाउनलोड को मंज़ूरी दी जाती है.
+      जब 'खतरनाक डाउनलोड ब्लॉक करें' विकल्प चुना जाता है, तो सुरक्षित ब्राउज़िंग की चेतावनियों वाले डाउनलोड के अलावा सभी डाउनलोड को मंज़ूरी दी जाती है.
 
-      जब 'ऐसे डाउनलोड ब्लॉक करें जो खतरनाक हो सकते हैं' का विकल्प चुना जाता है तो, सुरक्षित ब्राउज़िंग की चेतावनियों वाले वे डाउनलोड, जिनमें ऐसे डाउनलोड शामिल हो सकते हैं जिनसे खतरा हो, के अलावा सभी डाउनलोड को मंज़ूरी दी जाती है.
+      जब 'ऐसे डाउनलोड ब्लॉक करें जो खतरनाक हो सकते हैं' का विकल्प चुना जाता है, तो सुरक्षित ब्राउज़िंग की चेतावनियों वाले वे डाउनलोड, जिनमें ऐसे डाउनलोड शामिल हो सकते हैं जिनसे खतरा हो, के अलावा सभी डाउनलोड को मंज़ूरी दी जाती है.
 
       'सभी डाउनलोड ब्लॉक करें' विकल्प चुने जाने पर, सभी डाउनलोड ब्लॉक कर दिए जाते हैं.
 
       इस नीति को सेट नहीं करने (या 'कोई खास प्रतिबंध नहीं' विकल्प चुनने) पर सुरक्षित ब्राउज़िंग के विश्लेषण के नतीजों के मुताबिक डाउनलोड को मंज़ूरी दी जाएगी. इन पर सामान्य सुरक्षा प्रतिबंध लागू होंगे.
 
-      नोट करें कि ये प्रतिबंध वेब पेज सामग्री से शुरू हुए और 'डाउनलोड लिंक...' संदर्भ मेन्यू विकल्प से शुरू हुए डाउनलोड पर लागू होते हैं. ये प्रतिबंध इस समय दिखाए जा रहे पेज के सेव करने / डाउनलोड करने पर लागू नहीं होते हैं, न ही यह प्रिंटिंग विकल्प से PDF फ़ॉर्मैट में सेव करने पर लागू होते हैं.
+      ध्यान दें कि ये प्रतिबंध वेब पेज सामग्री से शुरू हुए और 'डाउनलोड लिंक...' संदर्भ मेन्यू विकल्प से शुरू हुए डाउनलोड पर लागू होते हैं. ये प्रतिबंध इस समय दिखाए जा रहे पेज के सेव करने / डाउनलोड करने पर लागू नहीं होते हैं, न ही यह प्रिंटिंग विकल्प से पीडीएफ़ फ़ॉर्मैट में सेव करने पर लागू होते हैं.
 
       सुरक्षित ब्राउज़िंग के बारे में ज़्यादा जानकारी के लिए https://developers.google.com/safe-browsing देखें.</translation>
 <translation id="7643883929273267746"><ph name="PRODUCT_NAME" /> में दिखाई देने वाले खाते प्रतिबंधित करें</translation>
@@ -2692,9 +2692,9 @@
 
       यह नीति लॉगिन स्क्रीन पर और 'उपयोगकर्ता सत्रों' के लिए डिफ़ॉल्ट के रूप में उपयोग किए जाने वाले घड़ी के फ़ॉर्मैट को कॉन्फ़िगर करती है. उपयोगकर्ता अब भी अपने खाते के लिए घड़ी के फ़ॉर्मैट को ओवरराइड कर सकते हैं.
 
-      अगर नीति को 'सही' पर सेट किया जाता है तो, डिवाइस 24 घंटे वाली घड़ी के फ़ॉर्मैट का उपयोग करेगा. अगर नीति को 'गलत' पर सेट किया जाता है तो, डिवाइस 12 घंटे वाली घड़ी के फ़ॉर्मैट का उपयोग करेगा.
+      अगर नीति को 'सही' पर सेट किया जाता है, तो डिवाइस 24 घंटे वाली घड़ी के फ़ॉर्मैट का उपयोग करेगा. अगर नीति को 'गलत' पर सेट किया जाता है, तो डिवाइस 12 घंटे वाली घड़ी के फ़ॉर्मैट का उपयोग करेगा.
 
-      अगर इस नीति को सेट नहीं किया जाता है तो, डिवाइस 24 घंटे वाली घड़ी के फ़ॉर्मैट का उपयोग करेगा.</translation>
+      अगर इस नीति को सेट नहीं किया जाता है, तो डिवाइस 24 घंटे वाली घड़ी के फ़ॉर्मैट का उपयोग करेगा.</translation>
 <translation id="8114382167597081590">YouTube पर प्रतिबंधित मोड लागू ना करें</translation>
 <translation id="8118665053362250806">मीडिया डिस्क संचय आकार सेट करें</translation>
 <translation id="8124468781472887384">डिवाइस प्रिंटर कॉन्फ़िगरेशन एक्सेस करने की नीति.</translation>
@@ -2759,21 +2759,21 @@
 
 Windows पर GPO के ज़रिए नीति कॉन्फ़िगर करने का सुझाव दिया जाता है, हालांकि रजिस्ट्री के ज़रिए नीति का प्रावधान करना अभी भी Windows के ऐसे इंस्टेंस पर काम करता है जो किसी <ph name="MS_AD_NAME" /> डोमेन से जुड़े हुए हैं.</translation>
 <translation id="8274603902181597201">उपयोगकर्ता की ecryptfs होम निर्देशिका मिटाएं और ext4 से सुरक्षित की गई, बिल्कुल नई होम निर्देशिका से शुरू करें.</translation>
-<translation id="8279832363395120715">https:// URL को PAC स्क्रिप्ट (प्रॉक्सी ऑटो कॉन्फ़िगरेशन) पर भेजने से पहले उसकी गोपनीयता और सुरक्षा के प्रति संवेदनशील हिस्सों को स्ट्रिप करती है, जिनका उपयोग <ph name="PRODUCT_NAME" /> प्रॉक्सी रिज़ॉल्यूशन के दौरान करता है.
+<translation id="8279832363395120715">https:// URL को पीएसी स्क्रिप्ट (प्रॉक्सी ऑटो कॉन्फ़िगरेशन) पर भेजने से पहले उसकी गोपनीयता और सुरक्षा के प्रति संवेदनशील हिस्सों को स्ट्रिप करती है, जिनका उपयोग <ph name="PRODUCT_NAME" /> प्रॉक्सी रिज़ॉल्यूशन के दौरान करता है.
 
-      सही पर सेट होने पर, सुरक्षा सुविधा चालू हो जाती है और PAC स्क्रिप्ट पर सबमिट किए
-      जाने से पहले https:// URL स्ट्रिप कर दिए जाते हैं. इस तरीके से, PAC स्क्रिप्ट वैसा डेटा
-      नहीं देख सकती जिसे किसी सुरक्षित किए गए चैनल के ज़रिए सामान्य तौर पर सुरक्षित किया जाता है (जैसे कि URL का पथ और क्वेरी).
+      'सही' पर सेट होने पर, सुरक्षा सुविधा चालू हो जाती है और पीएसी स्क्रिप्ट पर सबमिट किए
+      जाने से पहले https:// URL स्ट्रिप कर दिए जाते हैं. इस तरीके से, पीएसी स्क्रिप्ट वैसा डेटा
+      नहीं देख सकती जिसे किसी सुरक्षित किए गए चैनल के ज़रिए सामान्य तौर पर सुरक्षित किया जाता है (जैसे कि यूआरएल का पाथ और क्वेरी).
 
-      गलत पर सेट होने पर, सुरक्षा सुविधा बंद हो जाती है और PAC स्क्रिप्ट
-      साफ़ तौर पर किसी https:// URL के सभी हिस्सों को देख सकती है. किसी PAC स्क्रिप्ट के पैदा होने का स्रोत क्या है, इस पर ध्यान दिए बिना यह सभी पर लागू होता है (इनमें
-      वे URL भी शामिल हैं जिन्हें असुरक्षित रूप से ले जाते समय फ़ेच किया गया है या WPAD के ज़रिए असुरक्षित रूप से खोजा गया है).
+      'गलत' पर सेट होने पर, सुरक्षा सुविधा बंद हो जाती है और पीएसी स्क्रिप्ट
+      साफ़ तौर पर किसी https:// URL के सभी हिस्सों को देख सकती है. किसी पीएसी स्क्रिप्ट के पैदा होने का स्रोत क्या है, इस पर ध्यान दिए बिना यह सभी पर लागू होता है (इनमें
+      वे यूआरएल भी शामिल हैं जिन्हें असुरक्षित रूप से ले जाते समय फ़ेच किया गया है या डब्ल्यूपीएडी (WPAD) के ज़रिए असुरक्षित रूप से खोजा गया है).
 
-      यह सही पर डिफ़ॉल्ट रूप से सेट रहती है (सुरक्षा सुविधा चालू रहती है), उन Chrome OS
-      एंटरप्राइज़ उपयोगकर्ताओं को छोड़कर, जिनके लिए यह फ़िलहाल गलत पर डिफ़ॉल्ट रूप से सेट है.
+      यह 'सही' पर डिफ़ॉल्ट रूप से सेट रहती है (सुरक्षा सुविधा चालू रहती है), उन Chrome OS
+      एंटरप्राइज़ उपयोगकर्ताओं को छोड़कर, जिनके लिए यह फ़िलहाल 'गलत' पर डिफ़ॉल्ट रूप से सेट है.
 
-      ऐसा सुझाव दिया जाता है कि इसे सही पर सेट रखा जाए. इसे गलत पर सेट करने का एकमात्र
-      कारण यह है कि इस वजह से मौजूदा PAC स्क्रिप्ट में तालमेल संबंधी दिक्कत होती है.
+      ऐसा सुझाव दिया जाता है कि इसे 'सही' पर सेट रखा जाए. इसे गलत पर सेट करने का एकमात्र
+      कारण यह है कि इस वजह से मौजूदा पीएसी स्क्रिप्ट में तालमेल संबंधी दिक्कत होती है.
 
       इसका मकसद यह है कि भविष्य में इस तरह की दिक्कत को खत्म कर दिया जाए.</translation>
 <translation id="8285435910062771358">पूर्ण-स्क्रीन आवर्धक सक्षम है</translation>
@@ -2885,13 +2885,6 @@
           एकाधिक सर्वर नामों को अल्पविराम द्वारा अलग करें. वाइल्डकार्ड (*) की अनुमति है.
 
           यदि आप इस नीति को सेट किए बिना छोड़ देते हैं तो <ph name="PRODUCT_NAME" /> यह पता लगाने का प्रयास करेगा कि क्या सर्वर इंट्रानेट पर है और केवल तभी वह IWA अनुरोधों को प्रतिसाद देगा.  यदि कोई सर्वर इंटरनेट के रूप में पता लगाया जाता है तो उसके IWA अनुरोधों को <ph name="PRODUCT_NAME" /> द्वारा अनदेखा कर दिया जाएगा.</translation>
-<translation id="8667812577403206506">आपको यह नियंत्रित करने देती है कि Chrome OS पर वर्चुअल मशीनें चलाने की मंजूरी देनी है या नहीं.
-
-      अगर नीति सही पर सेट की जाती है, तो डिवाइस वर्चुअल मशीनें चला सकता है.
-      अगर नीति गलत पर सेट की जाती है, तो डिवाइस वर्चुअल मशीनें नहीं चला सकेगा.
-      जब यह नीति गलत में बदल दी जाती है, तो यह नई वर्चुअल मशीनें शुरू करने पर लागू होती है लेकिन पहले से चल रही वर्चुअल मशीनें बंद नहीं करती है.
-      जब यह नीति किसी प्रबंधित डिवाइस पर सेट नहीं होती है, तो डिवाइस वर्चुअल मशीनें नहीं चला सकेगा.
-      प्रबंधित नहीं किए गए डिवाइस वर्चुअल मशीनें चला सकते हैं.</translation>
 <translation id="8669669491594628013">यह नीति आपको 'पासवर्ड सुरक्षा' की चेतावनी ट्रिगर करने का नियंत्रण देती है. जब उपयोगकर्ता ऐसी साइटों पर अपने सुरक्षित पासवर्ड का दोबारा इस्तेमाल करते हैं जिनसे उनकी सुरक्षा को खतरा हो सकता है तब 'पासवर्ड सुरक्षा' उन्हें चेतावनी देती है.
 
       आप सुरक्षित किए जाने वाले पासवर्ड कॉन्फ़िगर करने के लिए 'PasswordProtectionLoginURLs' और 'PasswordProtectionChangePasswordURL' नीतियों का इस्तेमाल कर सकते हैं.
@@ -2966,13 +2959,13 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME" /> द्वारा किसी साइट को रेंडर किए जाने पर दिखाई देने वाले टर्नडाउन संकेत को छिपा देती है.</translation>
 <translation id="8867464911288727016"><ph name="PRODUCT_NAME" /> पर एकीकृत 'Google अनुवाद सेवा' चालू करती है.
 
-      अगर आप इस सेटिंग को चालू करते हैं तो, <ph name="PRODUCT_NAME" /> उपयोगकर्ता को एक एकीकृत अनुवाद टूलबार (उचित होने पर) और राइट-क्‍लिक वाले संदर्भ मेन्यू पर अनुवाद विकल्प दिखाते हुए, अनुवाद के काम से जुड़ी सुविधा देगा.
+      अगर आप इस सेटिंग को चालू करते हैं, तो <ph name="PRODUCT_NAME" /> उपयोगकर्ता को एक एकीकृत अनुवाद टूलबार (उचित होने पर) और राइट-क्‍लिक वाले संदर्भ मेन्यू पर अनुवाद विकल्प दिखाते हुए, अनुवाद के काम से जुड़ी सुविधा देगा.
 
-      अगर आप इस सेटिंग को बंद करते हैं तो, पहले से मौजूद सभी अनुवाद सुविधाएं बंद हो जाएंगी.
+      अगर आप इस सेटिंग को बंद करते हैं, तो पहले से मौजूद सभी अनुवाद सुविधाएं बंद हो जाएंगी.
 
-      अगर आप इस सेटिंग को चालू या बंद करते हैं तो, उपयोगकर्ता <ph name="PRODUCT_NAME" /> में इस सेटिंग में बदलाव या इसे रद्द नहीं कर सकते हैं.
+      अगर आप इस सेटिंग को चालू या बंद करते हैं, तो उपयोगकर्ता <ph name="PRODUCT_NAME" /> में इस सेटिंग में बदलाव या इसे रद्द नहीं कर सकते हैं.
 
-      अगर इस सेटिंग को सेट किए बिना छोड़ दिया जाता है तो, उपयोगकर्ता यह तय कर सकता है कि उसे इस सुविधा का इस्तेमाल करना है या नहीं.</translation>
+      अगर इस सेटिंग को सेट किए बिना छोड़ दिया जाता है, तो उपयोगकर्ता यह तय कर सकता है कि उसे इस सुविधा का इस्तेमाल करना है या नहीं.</translation>
 <translation id="8870318296973696995">मुख्यपृष्ठ</translation>
 <translation id="8882006618241293596">इन साइटों पर <ph name="FLASH_PLUGIN_NAME" /> प्लग इन ब्लॉक करें</translation>
 <translation id="890403179930035128">अलग-अलग भाषाओं के लिए वर्तनी जांच की सुविधा चालू करती है. सूची में शामिल जिन भाषाओं की पहचान नहीं हुई है, उन्हें अनदेखा कर दिया जाएगा.
diff --git a/components/policy/resources/policy_templates_hr.xtb b/components/policy/resources/policy_templates_hr.xtb
index 1896c1b6..1273f95 100644
--- a/components/policy/resources/policy_templates_hr.xtb
+++ b/components/policy/resources/policy_templates_hr.xtb
@@ -2751,13 +2751,6 @@
           Razdvojite više poslužitelja zarezima. Zamjenski su znakovi (*) dopušteni.
 
           Ako ne postavite ovo pravilo, <ph name="PRODUCT_NAME" /> pokušat će otkriti je li poslužitelj na intranetu te će jedino tada odgovoriti na IWA zahtjeve. Ako otkrije da se radi o poslužitelju na internetu, <ph name="PRODUCT_NAME" /> zanemarit će njegove IWA zahtjeve.</translation>
-<translation id="8667812577403206506">Omogućuje vam da odredite je li virtualnim računalima dopušteno pokretanje na OS-u Chrome.
-
-      Ako je pravilo postavljeno na True, uređaju je dopušteno pokretanje virtualnih računala.
-      Ako je pravilo postavljeno na False, uređaju nije dopušteno pokretanje virtualnih računala.
-      Kada se to pravilo promijeni na False, primjenjuje se na pokretanje novih virtualnih računala, ali ne isključuje virtualna računala koja su već pokrenuta.
-      Kada to pravilo nije postavljeno na upravljanom uređaju, uređaju nije dopušteno pokretanje virtualnih računala.
-      Neupravljanim je uređajima dopušteno pokretanje virtualnih računala.</translation>
 <translation id="8669669491594628013">Omogućuje vam da odredite okidač na temelju kojeg će zaštita zaporke prikazati upozorenje. Zaštita zaporke to upozorenje prikazuje korisnicima kada ponovo upotrijebe svoju zaštićenu zaporku na potencijalno sumnjivim web-lokacijama.
 
       Da biste konfigurirali koju zaporku zaštititi, upotrijebite "PasswordProtectionLoginURLs" i "PasswordProtectionChangePasswordURL".
diff --git a/components/policy/resources/policy_templates_hu.xtb b/components/policy/resources/policy_templates_hu.xtb
index 5723f550..a7011c3 100644
--- a/components/policy/resources/policy_templates_hu.xtb
+++ b/components/policy/resources/policy_templates_hu.xtb
@@ -2763,13 +2763,6 @@
           Több szervernév megadása esetén azokat vesszővel kell elválasztani. A helyettesítő karakterek (*) engedélyezettek.
 
           Ha nem állítja be ezt a házirendet, a <ph name="PRODUCT_NAME" /> megpróbálja érzékelni, hogy egy szerver az intraneten van-e, és csak akkor válaszol az IWA-kérésekre. Ha a szervert az interneten lévőnek észleli, a <ph name="PRODUCT_NAME" /> figyelmen kívül hagyja annak IWA-kéréseit.</translation>
-<translation id="8667812577403206506">Segítségével szabályozhatja, hogy futhatnak-e virtuális gépek a Chrome OS rendszeren.
-
-      Ha a házirend értéke igaz, az eszközön futhatnak virtuális gépek.
-      Ha a házirend értéke hamis, az eszközön nem futhatnak virtuális gépek.
-      Amikor hamis értékre állítja ezt a házirendet, a módosítás az új virtuális gépek indítására vonatkozik, de nem kapcsolja ki a már futó virtuális gépeket.
-      Ha a házirend nincs beállítva kezelt eszközön, az eszköz számára nem lesz engedélyezve a virtuális gépek futtatása.
-      A nem kezelt eszközök számára engedélyezett a virtuális gépek futtatása.</translation>
 <translation id="8669669491594628013">Lehetővé teszi a jelszóvédelmi figyelmeztetés aktiválásának szabályozását. A jelszóvédelem figyelmezteti a felhasználót, ha potenciálisan gyanús webhelyen próbálja újra felhasználni védett jelszavát.
 
       A „PasswordProtectionLoginURLs” és a „PasswordProtectionChangePasswordURL” házirendeket használhatja a védendő jelszavak beállítására.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index e1c3a50..0c7e0a2 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -2750,7 +2750,6 @@
           Pisahkan beberapa nama server dengan koma. Karakter pengganti (*) diizinkan.
 
           Jika Anda membiarkan kebijakan ini tidak disetel, <ph name="PRODUCT_NAME" /> akan mencoba mendeteksi apakah server ada di internet dan akan menanggapi permintaan IWA setelahnya.  Jika server terdeteksi sebagai internet, permintaan IWA darinya akan diabaikan oleh <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Mengizinkan Anda untuk mengontrol apakah mesin virtual diizinkan untuk berjalan di Chrome OS atau tidak. Jika kebijakan disetel ke True, perangkat diizinkan untuk menjalankan mesin virtual. Jika kebijakan disetel ke False, perangkat tidak diizinkan untuk menjalankan mesin virtual. Jika kebijakan ini diubah ke False, setelan ini berlaku untuk mesin virtual yang baru dimulai, tetapi tidak mematikan mesin virtual yang sedang berjalan. Jika kebijakan ini tidak disetel di perangkat yang dikelola, perangkat tidak diizinkan untuk menjalankan mesin virtual. Perangkat yang tidak dikelola diizinkan untuk menjalankan mesin virtual.</translation>
 <translation id="8669669491594628013">Memungkinkan Anda mengontrol pemicu peringatan perlindungan sandi. Perlindungan sandi memberi tahu pengguna saat mereka menggunakan kembali sandi yang dilindungi di situs yang berpotensi mencurigakan.
 
       Anda dapat menggunakan kebijakan 'PasswordProtectionLoginURLs' dan 'PasswordProtectionChangePasswordURL' untuk mengonfigurasi sandi mana yang harus dilindungi.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 2c2039c..597703f 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -2694,13 +2694,6 @@
           Separa più nomi di server con delle virgole. Sono ammessi i caratteri jolly (*).
 
           Se questa norma non viene impostata <ph name="PRODUCT_NAME" /> tenterà di rilevare se sulla Intranet è presente un server e solo allora risponderà alle richieste IWA. Se viene rilevato un server su Internet, le sue richieste IWA verranno ignorate da <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Consente di controllare se le macchine virtuali possono essere eseguite su Chrome OS.
-
-      Se la norma viene impostata su true, al dispositivo è consentito eseguire le macchine virtuali.
-      Se la norma viene impostata su false, al dispositivo non è consentito eseguire le macchine virtuali.
-      Quando l'impostazione di questa norma viene modificata in false, la norma viene applicata all'avvio di nuove macchine virtuali, ma non determina l'arresto delle macchine virtuali già in esecuzione.
-      Quando questa norma non è impostata su un dispositivo gestito, il dispositivo non può eseguire macchine virtuali.
-      I dispositivi non gestiti sono autorizzati a eseguire macchine virtuali.</translation>
 <translation id="8669669491594628013">Ti consente di controllare l'attivazione dell'avviso di protezione tramite password. La protezione tramite password avvisa gli utenti quando riutilizzano le proprie password protette su siti potenzialmente sospetti.
 
       Puoi utilizzare le norme "PasswordProtectionLoginURLs" e "PasswordProtectionChangePasswordURL" per configurare la password da proteggere.
diff --git a/components/policy/resources/policy_templates_iw.xtb b/components/policy/resources/policy_templates_iw.xtb
index 4afaa06..8ad30f6 100644
--- a/components/policy/resources/policy_templates_iw.xtb
+++ b/components/policy/resources/policy_templates_iw.xtb
@@ -2752,14 +2752,6 @@
           הפרד בין שמות מרובים של שרתים באמצעות פסיקים. ניתן להשתמש בתווים כלליים (*).
 
           אם לא תגדיר מדיניות זו, <ph name="PRODUCT_NAME" /> ינסה לזהות אם השרת נמצא באינטראנט, ורק אז יגיב לבקשות IWA. אם שרת יזוהה כמחובר לאינטרנט, <ph name="PRODUCT_NAME" /> יתעלם מבקשות IWA המגיעות ממנו.</translation>
-<translation id="8667812577403206506">‏מאפשרת לקבוע אם מכונות וירטואליות יכולות לפעול ב-Chrome OS.
-
-      אם המדיניות מוגדרת כ-True, המכשיר מורשה להפעיל מכונות וירטואליות.
-      אם המדיניות מוגדרת כ-False, המכשיר לא יורשה להפעיל מכונות וירטואליות.
-      כשמשנים את המדיניות הזו ל-False, השינוי חל על הפעלת מכונות וירטואליות חדשות, אבל לא 
-      משבית מכונות וירטואליות שכבר פועלות.
-      כשהמדיניות הזו לא מוגדרת במכשיר מנוהל, הוא לא יורשה להפעיל מכונות וירטואליות.
-      מכשירים שאינם מנוהלים מורשים להפעיל מכונות וירטואליות.</translation>
 <translation id="8669669491594628013">‏מאפשרת לשלוט בהפעלת האזהרה של הגנת סיסמה. הגנת סיסמה מזהירה את המשתמש כשהוא עושה שימוש חוזר בסיסמה המוגנת שלו באתרים חשודים. 
 
        אפשר להשתמש בסעיפי המדיניות 'PasswordProtectionLoginURLs' ו-'PasswordProtectionChangePasswordURL' כדי להגדיר את הסיסמה שעליה יש להגן.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 319ad5e9..486e648 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -2762,13 +2762,6 @@
           サーバー名を複数指定する場合はカンマで区切ります。ワイルドカード(*)を使用できます。
 
           このポリシーを設定しない場合、<ph name="PRODUCT_NAME" /> はサーバーがイントラネット上にあるかどうか検出を試み、その上で IWA リクエストに応答します。サーバーがインターネット上で検出された場合、そのサーバーからの IWA リクエストは <ph name="PRODUCT_NAME" /> では無視されます。</translation>
-<translation id="8667812577403206506">Chrome OS で仮想マシンを実行できるかどうかを制御します。
-
-      このポリシーを true に設定した場合、端末では仮想マシンを実行できます。
-      このポリシーを false に設定した場合、端末では仮想マシンを実行できません。
-      このポリシーを false に変更した場合、変更内容は以降の新しい仮想マシンの起動に対して適用されます。すでに実行中の仮想マシンは、終了されず実行を続けることができます。
-      このポリシーが設定されていない場合、管理対象の端末では仮想マシンを実行できません。
-      管理対象ではない端末では仮想マシンを実行できます。</translation>
 <translation id="8669669491594628013">パスワード保護の警告を表示するトリガーを制御できます。パスワード保護の警告は、不審なサイトでユーザーが保護されたパスワードを再使用したときに表示されます。
 
       保護するパスワードを設定するには、「PasswordProtectionLoginURLs」ポリシーと「PasswordProtectionChangePasswordURL」ポリシーを使用します。
diff --git a/components/policy/resources/policy_templates_kn.xtb b/components/policy/resources/policy_templates_kn.xtb
index d47aa1cf..a03bdae 100644
--- a/components/policy/resources/policy_templates_kn.xtb
+++ b/components/policy/resources/policy_templates_kn.xtb
@@ -2979,13 +2979,6 @@
           ಬಹು ಸರ್ವರ್ ಹೆಸರುಗಳನ್ನು ಅಲ್ಪವಿರಾಮಗಳಿಂದ ಬೇರ್ಪಡಿಸಿ. ವೈಲ್ಡ್‌ಕಾರ್ಡ್‌ಗಳನ್ನು (*) ಅನುಮತಿಸಲಾಗುತ್ತದೆ.
 
           ಈ ನೀತಿಯನ್ನು ನೀವು ಹೊಂದಿಸದೆ ಹಾಗೇ ಬಿಟ್ಟರೆ ಸರ್ವರ್ ಇಂಟ್ರಾನೆಟ್‌ನಲ್ಲಿದೆಯೇ ಎಂಬುದನ್ನು ಪತ್ತೆಹಚ್ಚಲು <ph name="PRODUCT_NAME" /> ಪ್ರಯತ್ನಿಸುತ್ತದೆ ನಂತರ ಮಾತ್ರವೇ ಅದು IWA ವಿನಂತಿಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತದೆ. ಸರ್ವರ್ ಅನ್ನು ಇಂಟರ್ನೆಟ್‌ನಂತೆ ಪತ್ತೆಹಚ್ಚಲಾಗಿದ್ದರೆ ನಂತರ ಅದರಿಂದ IWA ವಿನಂತಿಗಳನ್ನು <ph name="PRODUCT_NAME" /> ನಿರ್ಲಕ್ಷಿಸುತ್ತದೆ.</translation>
-<translation id="8667812577403206506">ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು Chrome OS ನಲ್ಲಿ ಚಲಾಯಿಸಲು ಅನುಮತಿಸಬೇಕೆ ಅಥವಾ ಬೇಡವೇ ಎನ್ನುವುದನ್ನು ನಿಯಂತ್ರಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.
-
-ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದರೆ, ಸಾಧನವು ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ರನ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.
-ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದರೆ, ಸಾಧನವು ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ರನ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.
-ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಬದಲಾಯಿಸಿದರೆ, ಅದು ಹೊಸ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲು ಅನ್ವಯವಾಗುತ್ತದೆ, ಮತ್ತು ಈಗಾಗಲೇ ಚಾಲನೆಯಲ್ಲಿರುವ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳನ್ನು ಮುಚ್ಚುವುದಿಲ್ಲ.
-ಈ ಕಾರ್ಯನೀತಿಯನ್ನು, ನಿರ್ವಹಿಸಲಾದ ಸಾಧನದಲ್ಲಿ ಹೊಂದಿಸದಿದ್ದರೆ, ಸಾಧನವು ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ರನ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.
-ನಿರ್ವಹಿಸದಿರುವ ಸಾಧನಗಳಿಗೆ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳನ್ನು ರನ್ ಮಾಡಲು ಅನುಮತಿ ನೀಡಲಾಗುತ್ತದೆ.</translation>
 <translation id="8669669491594628013">ಪಾಸ್‌ವರ್ಡ್‌ ಸುರಕ್ಷತಾ ಎಚ್ಚರಿಕೆಯನ್ನು ಟ್ರಿಗರ್ ಮಾಡುವುದನ್ನು ನಿಯಂತ್ರಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಸಂಶಯಾಸ್ಪದ ಸೈಟ್‌ಗಳಲ್ಲಿ ಸುರಕ್ಷಿತ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಿದಾಗ ಬಳಕೆದಾರರಿಗೆ ಸುರಕ್ಷತೆ ಕುರಿತ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೀಡುತ್ತದೆ.
 
       ನೀವು ಸುರಕ್ಷಿತವಾಗಿರಬೇಕಾದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು 'PasswordProtectionLoginURLs' ಮತ್ತು 'PasswordProtectionChangePasswordURL' ನೀತಿಗಳನ್ನು ಬಳಸಬಹುದು.
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index ff60c24..ae81923 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -676,7 +676,7 @@
 
       이 설정이 사용 중지되면 사용자가 SMS 동기화를 설정할 수 없게 됩니다.
 
-      이 정책을 설정하지 않고 그대로 두면 기본적으로 관리되는 사용자에게는 허용되지 않으며 관리되지 않는 사용자에게는 허용됩니다.</translation>
+      이 정책을 설정하지 않고 그대로 두면 기본적으로 관리되는 사용자에게는 허용되지 않고 관리되지 않는 사용자에게는 허용됩니다.</translation>
 <translation id="2660846099862559570">프록시 사용하지 않음</translation>
 <translation id="267596348720209223">검색 공급자가 지원하는 문자 인코딩을 지정합니다. 인코딩은 UTF-8, GB2312 및 ISO-8859-1과 같은 코드 페이지 이름입니다. 인코딩은 제공된 순서대로 시도됩니다.
 
@@ -2868,13 +2868,6 @@
           여러 개의 서버 이름은 콤마(,)로 구분되며 와일드카드(*)를 사용할 수 있습니다.
 
           이 정책을 설정하지 않으면 서버가 인트라넷에 있는 경우 <ph name="PRODUCT_NAME" />이(가) 감지하여 IWA 요청에만 응답합니다. 서버가 인트라넷으로 감지된 경우 <ph name="PRODUCT_NAME" />이(가) IWA 요청을 무시합니다.</translation>
-<translation id="8667812577403206506">Chrome OS에서의 가상 머신 실행 허용 여부를 제어할 수 있습니다.
-
-      이 정책을 True로 설정하면 기기에서 가상 머신을 실행할 수 있습니다.
-      이 정책을 False로 설정하면 기기에서 가상 머신을 실행할 수 없습니다.
-      이 정책을 False로 변경하면 새로운 가상 머신에 적용되며 이미 실행되고 있는 가상 머신이 종료되지는 않습니다.
-      관리 대상 기기에서 이 정책을 설정하지 않으면 기기에서 가상 머신을 실행할 수 없습니다.
-      관리 대상이 아닌 기기에서는 가상 머신을 실행할 수 있습니다.</translation>
 <translation id="8669669491594628013">비밀번호 보호 경고 트리거를 제어할 수 있습니다. 비밀번호 보호는 사용자가 의심스러워 보이는 사이트에서 보호된 비밀번호를 재사용할 때 사용자에게 경고를 표시합니다.
 
       'PasswordProtectionLoginURLs' 및 'PasswordProtectionChangePasswordURL' 정책을 사용하여 보호할 비밀번호를 설정할 수 있습니다.
diff --git a/components/policy/resources/policy_templates_lt.xtb b/components/policy/resources/policy_templates_lt.xtb
index 4f76058..cefbd12 100644
--- a/components/policy/resources/policy_templates_lt.xtb
+++ b/components/policy/resources/policy_templates_lt.xtb
@@ -2874,13 +2874,6 @@
           Kelis serverių pavadinimus atskirkite kableliais. Leidžiama naudoti pakaitos simbolius (*).
 
           Jei nenustatysite šios politikos, „<ph name="PRODUCT_NAME" />“ bandys nustatyti, ar serveris yra intranete ir tik tada atsakys į IWA užklausas. Jei serveris aptinkamas internete, „<ph name="PRODUCT_NAME" />“ nepaisys jo siunčiamų IWA užklausų.</translation>
-<translation id="8667812577403206506">Galima valdyti, ar virtualiesiems įrenginiams leidžiama veikti „Chrome“ OS.
-
-      Jei politika nustatyta į „True“, įrenginiui leidžiama paleisti virtualiuosius įrenginius.
-      Jei politika nustatyta į „False“, įrenginiui neleidžiama paleisti virtualiųjų įrenginių.
-      Pakeitus šios politikos nustatymą į „False“, jis taikomas paleidžiant naujus virtualiuosius įrenginius, bet jau veikiantys virtualieji įrenginiai nėra išjungiami.
-      Jei ši politika nenustatyta valdomame įrenginyje, įrenginiui neleidžiama paleisti virtualiųjų įrenginių.
-      Nevaldomiems įrenginiams leidžiama paleisti virtualiuosius įrenginius.</translation>
 <translation id="8669669491594628013">Galite valdyti įspėjimo dėl slaptažodžio apsaugos suaktyvinimą. Slaptažodžio apsauga įspėja naudotojus, kai jie pakartotinai naudoja apsaugotus slaptažodžius potencialiai įtartinose svetainėse.
 
       Politiką „PasswordProtectionLoginURLs“ ir „PasswordProtectionChangePasswordURL“ galite naudoti konfigūruodami, kuriuos slaptažodžius apsaugoti.
diff --git a/components/policy/resources/policy_templates_lv.xtb b/components/policy/resources/policy_templates_lv.xtb
index 65ab0205..3efa476c 100644
--- a/components/policy/resources/policy_templates_lv.xtb
+++ b/components/policy/resources/policy_templates_lv.xtb
@@ -663,7 +663,7 @@
           Google meklēšanas vietrādi URL var norādīt šādi: <ph name="GOOGLE_SEARCH_URL" />.
 
           Šī opcija ir jāiestata tikai tad, kad ir iespējota politika DefaultSearchProviderEnabled (tikai tad tā tiks ievērota).</translation>
-<translation id="2659019163577049044">Ja šis iestatījums tiks iespējots, lietotāji varēs iestatīt, lai viņu ierīcēs tiktu sinhronizētas tālrunī un Chromebook ierīcēs glabātās īsziņas. Ņemiet vērā — ja šī politika tiek atļauta, lietotājiem ir tieši jāpiesakās šim līdzeklim, veicot iestatīšanas procedūru. Pēc iestatīšanas lietotāji varēs sūtīt īsziņas no savām Chromebook ierīcēm un saņemt īsziņas šajās ierīcēs.
+<translation id="2659019163577049044">Ja šis iestatījums tiks iespējots, lietotāji varēs iestatīt, lai viņu ierīcēs tiktu sinhronizētas tālrunī un Chromebook ierīcēs glabātās īsziņas. Ņemiet vērā — ja šī politika tiek atļauta, lietotājiem ir tieši jāizvēlas šī funkcija, iestatot ierīci. Pēc iestatīšanas lietotāji varēs sūtīt īsziņas no savām Chromebook ierīcēm un saņemt īsziņas šajās ierīcēs.
 
       Ja šis iestatījums tiks atspējots, lietotāji nevarēs iestatīt īsziņu sinhronizēšanu.
 
@@ -2224,13 +2224,13 @@
 <translation id="706568410943497889">
       Ja šai politikai tiks iestatīta vērtība “True”, <ph name="PRODUCT_NAME" /> tiks atļauts vākt WebRTC notikumu žurnālus no Google pakalpojumiem (piemēram, Google Meet) un augšupielādēt šos žurnālus Google sistēmā.
 
-      Ja šai politikai tiks iestatīta vērtība “False” vai neviena vērtība netiks iestatīta, <ph name="PRODUCT_NAME" /> var netiks atļauts vākt un augšupielādēt šos žurnālus.
+      Ja šai politikai tiks iestatīta vērtība “False” vai neviena vērtība netiks iestatīta, <ph name="PRODUCT_NAME" /> var netikt atļauts vākt un augšupielādēt šos žurnālus.
 
       Šajos žurnālos tiek iekļauta diagnostikas informācija, kas var būt noderīga, pārlūkā Chrome novēršot ar audio vai video zvaniem saistītas kļūdas. Žurnālos ir pieejami tādi dati kā nosūtīto un saņemto RTP pakotņu laiks un lielums, dati par pārslodzi tīklā un audio un video laika un kvalitātes metadati. Žurnālos netiek iekļauts zvanu audio vai video saturs.
 
-      To, lai pārlūks Chrome vāc datus, var ieslēgt tikai Google tīmekļa pakalpojumi, piemēram, Google Hangouts vai Google Meet.
+      Tikai Google tīmekļa pakalpojumi, piemēram, Google Hangouts vai Google Meet, var uzsākt datu vākšanu.
 
-      Izmantojot sesijas ID Google šos žurnālus var saistīt ar citiem žurnāliem, ko vāc Google pakalpojums. Tas tiek darīts, lai atvieglotu atkļūdošanas procesu.
+      Izmantojot sesijas ID, Google šos žurnālus var saistīt ar citiem žurnāliem, ko vāc Google pakalpojums. Tas tiek darīts, lai atvieglotu atkļūdošanas procesu.
       </translation>
 <translation id="706669471845501145">Atļaut vietnēm rādīt paziņojumus darbvirsmā</translation>
 <translation id="7072208053150563108">Ierīces paroles nomaiņas biežums</translation>
@@ -2856,13 +2856,6 @@
           Serveru nosaukumus atdaliet ar komatu. Ir atļautas aizstājējzīmes (*).
 
           Ja neiestatīsiet šo politiku, <ph name="PRODUCT_NAME" /> mēģinās noteikt, vai serveris darbojas iekštīklā, un tikai pēc tam atbildēs IWA pieprasījumiem. Ja serveris ir atzīts par iekštīklu, <ph name="PRODUCT_NAME" /> ignorēs no tā nosūtītos IWA pieprasījumus.</translation>
-<translation id="8667812577403206506">Ļauj kontrolēt, vai operētājsistēmā Chrome OS ir atļautas virtuālās mašīnas.
-
-      Ja politikai ir iestatīta vērtība “True”, ierīcē ir atļauta virtuālo mašīnu palaišana.
-      Ja politikai ir iestatīta vērtība “False”, ierīcē nav atļauta virtuālo mašīnu palaišana.
-      Ja politikas vērtība tiek mainīta uz “False”, tā tiek piemērota jaunu virtuālo mašīnu palaišanai, bet neizslēdz virtuālās mašīnas, kas jau darbojas.
-      Ja pārvaldītajā ierīcē politikas vērtība nav iestatīta, ierīcē nav atļauta virtuālo mašīnu palaišana.
-      Nepārvaldītās ierīcēs ir atļauta virtuālo mašīnu palaišana.</translation>
 <translation id="8669669491594628013">Ļauj jums kontrolēt paroles aizsardzības brīdinājuma aktivizēšanu. Paroles aizsardzība brīdina lietotājus, ja viņi atkārtoti izmanto aizsargāto paroli aizdomīgās vietnēs.
 
       Varat izmantot politikas “PasswordProtectionLoginURLs” un “PasswordProtectionChangePasswordURL”, lai konfigurētu, kuru paroli aizsargāt.
diff --git a/components/policy/resources/policy_templates_ml.xtb b/components/policy/resources/policy_templates_ml.xtb
index f165c79..61ff0182 100644
--- a/components/policy/resources/policy_templates_ml.xtb
+++ b/components/policy/resources/policy_templates_ml.xtb
@@ -3173,11 +3173,6 @@
           ഒന്നിലേറെ സെർവർ പേരുകൾ കോമ ഉപയോഗിച്ച് വേർതിരിക്കുക. വൈൽഡ്കാർഡുകൾ (*) അനുവദനീയമാണ്.
 
           നിങ്ങൾ ഈ നയം സജ്ജമാക്കാതെ വിട്ടാൽ, ഇൻട്രാനെറ്റിൽ ഒരു സെർവർ ഉണ്ടെങ്കിൽ <ph name="PRODUCT_NAME" /> അത് കണ്ടെത്താൻ ശ്രമിക്കും, അതിനുശേഷം മാത്രമേ IWA അഭ്യർത്ഥനകൾക്ക് പ്രതികരണം നൽകുകയുള്ളൂ. ഇന്റർനെറ്റായി ഒരു സെർവർ കണ്ടെത്തുകയാണെങ്കിൽ, അതിൽ നിന്നുള്ള IWA അഭ്യർത്ഥനകൾ <ph name="PRODUCT_NAME" /> അവഗണിക്കും.</translation>
-<translation id="8667812577403206506">Chrome OS-ൽ വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ അനുവദിക്കണോ എന്നത് നിയന്ത്രിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.
-
-      നയം 'ട്രൂ' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ ഉപകരണത്തെ അനുവദിക്കും. നയം 'ഫാൾസ്' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ ഉപകരണത്തെ അനുവദിക്കില്ല. നയം 'ഫാൾസ്' ആയി മാറ്റുമ്പോൾ, പുതിയ വെർച്വൽ മെഷീനുകൾ ആരംഭിക്കുന്നതുമായി ബന്ധപ്പെട്ടായിരിക്കും ഇത് ബാധകമാവുക. മുമ്പേ റൺ ചെയ്യുന്ന വെർച്വൽ മെഷീനുകളെ ഇത് ഷട്ട് ഡൗൺ ചെയ്യില്ല.
-      ഒരു നിയന്ത്രിക്കപ്പെടുന്ന ഉപകരണത്തിൽ ഈ നയം സജ്ജീകരിക്കാത്തപ്പോൾ, വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ ഉപകരണത്തിന് അനുവാദമില്ല.
-      നിയന്ത്രിക്കപ്പെടാത്ത ഉപകരണങ്ങളെ വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ അനുവദിക്കും.</translation>
 <translation id="8669669491594628013">പാസ്‍വേഡ് പരിരക്ഷാ മുന്നറിയിപ്പിന്റെ ട്രിഗ്ഗർ ചെയ്യൽ നിയന്ത്രിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. സംശയകരമാകാൻ സാധ്യതയുള്ള സൈറ്റുകളിൽ ഉപയോക്താക്കൾ പരിരക്ഷിത പാസ്‍വേഡ് പുനരുപയോഗിക്കുമ്പോൾ, പാസ്‍വേഡ് പരിരക്ഷ അവർക്ക് മുന്നറിയിപ്പ് നൽകുന്നു.
 
       ഏത് പാസ്‌വേഡ് ആണ് പരിരക്ഷിക്കേണ്ടത് എന്നത് കോൺഫിഗർ ചെയ്യാൻ 'PasswordProtectionLoginURL-കൾ,' 'PasswordProtectionChangePasswordURL' എന്നിവ നിങ്ങൾക്ക് ഉപയോഗിക്കാം.
diff --git a/components/policy/resources/policy_templates_mr.xtb b/components/policy/resources/policy_templates_mr.xtb
index 83ff1f6..3206d54 100644
--- a/components/policy/resources/policy_templates_mr.xtb
+++ b/components/policy/resources/policy_templates_mr.xtb
@@ -6,25 +6,25 @@
 <translation id="1019101089073227242">वापरकर्ता डेटा निर्देशिका सेट करा</translation>
 <translation id="1022361784792428773">विस्तार आयडी ज्यांना इंस्टॉल करण्यापासून वापरकर्त्यास प्रतिबंधित करावे (किंवा सर्वांसाठी * )</translation>
 <translation id="102492767056134033">लॉग इन स्क्रीनवर ऑन-स्क्रीन कीबोर्डची डीफॉल्ट स्थिती सेट करा</translation>
-<translation id="1027000705181149370">SAML IdP ने लॉग इन दरम्यान सेट केलेल्या प्रमाणीकरण कुकीज वापरकर्त्याच्या प्रोफाईलवर हस्तांतरित केल्या जाव्यात किंवा नाहीत ते निर्धारित करते.
+<translation id="1027000705181149370">SAML IdP ने लॉग इन दरम्यान सेट केलेल्या ऑथेंटिकेशन कुकीज वापरकर्त्याच्या प्रोफाइलवर हस्तांतरित केल्या जाव्यात किंवा नाहीत ते निर्धारित करते.
 
-      वापरकर्ता लॉग इन दरम्यान SAML IdP द्वारे SAML IdP प्रमाणित करतो तेव्हा, IdP द्वारे सेट केलेल्या कुकीज प्रथम तात्पुरत्या प्रोफाईलवर लिहिल्या जातात. प्रमाणीकरण स्थिती पुढे नेण्यासाठी या कुकीज वापरकर्त्याच्या प्रोफाईलवर हस्तांतरित केल्या जाऊ शकतात.
+      वापरकर्ता लॉग इन दरम्यान SAML IdP द्वारे SAML IdP प्रमाणित करतो तेव्हा, IdP द्वारे सेट केलेल्या कुकीज प्रथम तात्पुरत्या प्रोफाइलवर लिहिल्या जातात. ऑथेंटिकेशन स्थिती पुढे नेण्यासाठी या कुकीज वापरकर्त्याच्या प्रोफाइलवर हस्तांतरित केल्या जाऊ शकतात.
 
-      हे धोरण सत्यावर सेट केले जाते तेव्हा, वापरकर्ता लॉग इन दरम्यान प्रत्येकवेळी SAML IdP संबंधात प्रमाणित करतो तेव्हा IdP द्वारे सेट केलेल्या कुकीज वापरकर्त्याच्या प्रोफाईलवर हस्तांतरित केल्या जातात.
+      हे धोरण सत्यावर सेट केले जाते तेव्हा, वापरकर्ता लॉग इन दरम्यान प्रत्येकवेळी SAML IdP संबंधात प्रमाणित करतो तेव्हा IdP द्वारे सेट केलेल्या कुकीज वापरकर्त्याच्या प्रोफाइलवर हस्तांतरित केल्या जातात.
 
-      हे धोरण असत्य वर सेट केलेले असते किंवा ते अनसेट केलेले असते तेव्हा, IdP द्वारे सेट केलेल्या कुकीज वापरकर्त्याच्या प्रोफाईलवर केवळ त्यांच्या डिव्हाइस वरील प्रथम लॉग इन दरम्यान हस्तांतरित केल्या जातात.
+      हे धोरण असत्य वर सेट केलेले असते किंवा ते अनसेट केलेले असते तेव्हा, IdP द्वारे सेट केलेल्या कुकीज वापरकर्त्याच्या प्रोफाइलवर केवळ त्यांच्या डिव्हाइस वरील प्रथम लॉग इन दरम्यान हस्तांतरित केल्या जातात.
 
-      हे धोरण ज्या वापरकर्त्यांचे डोमेन डिव्हाइसच्या नोंदणी डोमेनशी जुळते केवळ त्यांनाच प्रभावित करते. इतर अन्य वापरकर्त्यांसाठी, IdP द्वारे सेट केलेल्या कुकीज वापरकर्त्याच्या प्रोफाईलवर केवळ त्यांच्या डिव्हाइस वरील प्रथम लॉग इन दरम्यान हस्तांतरित केल्या जातात.</translation>
+      हे धोरण ज्या वापरकर्त्यांचे डोमेन डिव्हाइसच्या नोंदणी डोमेनशी जुळते केवळ त्यांनाच प्रभावित करते. इतर अन्य वापरकर्त्यांसाठी, IdP द्वारे सेट केलेल्या कुकीज वापरकर्त्याच्या प्रोफाइलवर केवळ त्यांच्या डिव्हाइस वरील प्रथम लॉग इन दरम्यान हस्तांतरित केल्या जातात.</translation>
 <translation id="1040446814317236570">PAC URL स्ट्रिप करणे सक्षम करा (https:// साठी)</translation>
-<translation id="1044878202534415707">CPU/RAM वापर यासारख्‍या हार्डवेअर आकडेवारीचा अहवाल द्या.
+<translation id="1044878202534415707">सीपीयू/रॅम वापर यासारख्‍या हार्डवेअर आकडेवारीचा अहवाल द्या.
 
       धोरण असत्य वर सेट केले असल्‍यास, आकडेवारीचा अहवाल दिला जाणार नाही.
       सत्य वर सेट केल्‍यास किंवा सेट न केलेले ठेवल्‍यास, आकडेवारीचा अहवाल दिला जाईल.</translation>
 <translation id="1046484220783400299">मर्यादित वेळेसाठी नापसंत वेब प्लॅटफॉर्म वैशिष्ट्ये सक्षम करा</translation>
 <translation id="1047128214168693844">वापरकर्त्यांचे प्रत्यक्ष स्थान ट्रॅक करण्यास कोणत्याही साइटला परवानगी देऊ नका</translation>
-<translation id="1049138910114524876"><ph name="PRODUCT_OS_NAME" /> साइन-इन स्क्रीनवर अंमलबजावणी केलेले लोकॅल कॉन्फिगर करते.
+<translation id="1049138910114524876">साइन इन<ph name="PRODUCT_OS_NAME" /> स्क्रीनवर अंमलबजावणी केलेले लोकॅल कॉन्फिगर करते.
 
-      हे धोरण सेट केलेले असल्यास, साइन-इन स्क्रीन नेहमी या धोरणाच्या (धोरण अग्रेषण सुसंगततेसाठी सूची म्हणून निर्धारित केलेले आहे) प्रथम मूल्याद्वारे दिलेल्या लोकॅलमध्ये प्र‍दर्शित केली जाईल. हे धोरण सेट नसेल किंवा ते रिक्त सूचीवर सेट असल्यास, साइन-इन स्क्रीन अंतिम वापरकर्ता सत्राच्या लोकॅलमध्ये प्रदर्शित केली जाईल. हे धोरण वैध नसलेल्या मूल्यावर सेट असल्यास, साइन-इन स्क्रीन एका फॉलबॅक लोकॅलमध्ये प्रदर्शित केली जाईल (सध्या, en-US).</translation>
+      हे धोरण सेट केलेले असल्यास, साइन इन स्क्रीन नेहमी या धोरणाच्या (धोरण फॉरवर्ड कंपॅटिबिलिटी सूची म्हणून निर्धारित केलेले आहे) प्रथम मूल्याद्वारे दिलेल्या लोकॅलमध्ये डिस्प्ले केले जाईल. हे धोरण सेट नसेल किंवा ते रिक्त सूचीवर सेट असल्यास, साइन इन स्क्रीन अंतिम वापरकर्ता सेशनच्या लोकॅलमध्ये डिस्प्ले केले जाईल. हे धोरण वैध नसलेल्या मूल्यावर सेट असल्यास,साइन इन स्क्रीन एका फॉलबॅक लोकॅलमध्ये डिस्प्ले केले जाईल (सध्या, en-US).</translation>
 <translation id="1062011392452772310">डिव्हाइससाठी दूरस्थ अनुप्रमाणन सक्षम करा</translation>
 <translation id="1062407476771304334">पुनर्स्थित करा</translation>
 <translation id="1079801999187584280">डेव्हलपर टूलच्या वापराला मनाई करा</translation>
@@ -67,7 +67,7 @@
 
     धोरण असत्य वर सेट केले असल्यास, dev स्विच च्या स्थितीचा अहवाल दिला जाणार नाही.</translation>
 <translation id="1160479894929412407">QUIC प्रोटोकॉलला अनुमती द्या</translation>
-<translation id="1160939557934457296">सुरक्षित ब्राउझिंग चेतावणी पृष्ठावरून पुढे जाणे अक्षम करा</translation>
+<translation id="1160939557934457296">सुरक्षित ब्राउझिंग चेतावणी पेजवरून पुढे जाणे अक्षम करा</translation>
 <translation id="1189817621108632689">तुम्हाला इमेज दाखवण्याची अनुमती नसलेल्या साइट निर्दिष्ट करणाऱ्या url पॅटर्नची सूची सेट करू देते.
 
           हे धोरण सेट न केलेले ठेवल्यास, 'DefaultImagesSetting' धोरण सेट केलेले असल्यास त्यावरून किंवा वापरकर्त्याच्या वैयक्तिक कॉन्फिगरेशवरून सर्व साइटसाठी ग्लोबल डीफॉल्ट मूल्य वापरले जाईल.
@@ -89,12 +89,12 @@
 <translation id="123081309365616809">डीव्हाइसवर आशय कास्ट करणे चालू करा</translation>
 <translation id="1243570869342663665">SafeSites प्रौढांसाठी असलेला आशय फिल्टर करणे नियंत्रित करा.</translation>
 <translation id="1257550411839719984">डीफॉल्ट डाउनलोड डिरेक्टरी सेट करा</translation>
-<translation id="1265053460044691532">SAML द्वारे प्रमाणित केलेला वापरकर्ता ऑफलाइन लॉग इन करू शकण्याच्या वेळेवर मर्यादा घाला</translation>
+<translation id="1265053460044691532">SAML द्वारे प्रमाणित केलेल्या वापरकर्त्याच्या ऑफलाइन लॉग इन करू शकण्याच्या वेळेवर मर्यादा घाला</translation>
 <translation id="1291880496936992484">चेतावणी: RC4 आवृत्ती 52 नंतर <ph name="PRODUCT_NAME" /> मधून (सप्टेंबर 2016 च्या आसपास) पूर्णपणे काढण्‍यात येईल आणि नंतर हे धोरण कार्य करणे थांबवेल.
 
       धोरण सेट केले नसल्यास किंवा असत्य वर सेट केले असल्यास, TLS मध्ये योग्य असणारे RC4 सायफर सक्षम केले जाणार नाही. अन्यथा कालबाह्य सर्व्हरसह सुसंगतता टिकवून ठेवण्यासाठी ते सत्य वर सेट केले जाऊ शकते. हा एक तात्पुरता बदली उपाय आहे आणि सर्व्हर पुन्हा कॉन्फिगर केले जावे.</translation>
 <translation id="1297182715641689552">.pac प्रॉक्सी स्क्रिप्टचा वापर करा</translation>
-<translation id="1304973015437969093">शांतपणे इंस्टॉल केले जाणारे विस्तार/अॅप आयडी आणि अपडेट URL</translation>
+<translation id="1304973015437969093">एक्सटेंशन/अॅप आयडी आणि अपडेट URL यांचे सायलेंट इंस्टॉलेशन केले जाईल</translation>
 <translation id="1307454923744766368">मूळ किंवा होस्ट नाव पॅटर्न ज्यावर असुरक्षित मुळांवरील प्रतिबंध लागू नसावे</translation>
 <translation id="1313457536529613143">स्क्रीन मंद असताना किंवा स्क्रीन बंद केल्यानंतर लवकर जेव्हा वापरकर्ता गतिविधीवर लक्ष ठेवले जाते तेव्हा स्क्रीन मंद होण्याचा विलंब मोजण्याची टक्केवारी निर्दिष्ट करते.
 
@@ -109,11 +109,11 @@
 <translation id="13356285923490863">धोरणाचे नाव</translation>
 <translation id="1347198119056266798">हे धोरण बहिष्कृत केले आहे, कृपया त्याऐवजी <ph name="FORCE_GOOGLE_SAFE_SEARCH_POLICY_NAME" /> आणि <ph name="FORCE_GOOGLE_SAFE_SEARCH_POLICY_NAME" /> चा वापर करा. <ph name="FORCE_YOUTUBE_RESTRICT_POLICY_NAME" />, <ph name="FORCE_YOUTUBE_RESTRICT_POLICY_NAME" /> किंवा (बहिष्कृत केलेले) <ph name="FORCE_YOUTUBE_SAFETY_MODE_POLICY_NAME" /> धोरणे सेट केली असल्यास हे धोरण दुर्लक्षित केले जाते.
 
-      सुरक्षितशोध सह पूर्ण करण्याच्या Google वेब शोध मधील क्वेरींना सक्रिय वर सेट करण्याची सक्ती करते आणि वापरकर्त्यांना ही सेटिंग बदलण्यापासून प्रतिबंधित करते. ही सेटिंग YouTube वरील मध्यम प्रतिबंधित मोडवर देखील सक्ती करते.
+      सुरक्षितशोध सह पूर्ण करण्याच्या Google वेब शोध मधील क्वेरींना सक्रिय वर सेट करण्याची सक्ती करते आणि वापरकर्त्यांना हे सेटिंग बदलण्यापासून प्रतिबंधित करते. हे सेटिंग YouTube वरील मध्यम प्रतिबंधित मोडवर देखील सक्ती करते.
 
-      तुम्ही ही सेटिंग चालू केल्यास, Google शोध मधील सुरक्षितशोध आणि मध्यम प्रतिबंधित मोड YouTube नेहमी सक्रिय असते.
+      तुम्ही हे सेटिंग सुरू केल्यास, Google शोध मधील सुरक्षितशोध आणि मध्यम प्रतिबंधित मोड YouTube नेहमी सक्रिय असते.
 
-      तुम्ही ही सेटिंग बंद केल्यास किंवा मूल्य सेट न केल्यास, Google शोध मधील सुरक्षितशोध आणि YouTube मधील प्रतिबंधित मोडची अंमलबजावणी केली जात नाही.</translation>
+      तुम्ही हे सेटिंग बंद केल्यास किंवा मूल्य सेट न केल्यास, Google शोध मधील सुरक्षितशोध आणि YouTube मधील प्रतिबंधित मोडची अंमलबजावणी केली जात नाही.</translation>
 <translation id="1352174694615491349">क्लायंट सर्टिफिकेट वापरात असतात तेव्हा हे धोरण HTTP/2 कनेक्शन एकत्र करण्याची परवानगी देते. संभाव्य नवीन कनेक्शनचे होस्ट नाव आणि सध्या सुरू असलेल्या कनेक्शनचे होस्ट नाव अशा दोघांना क्रमाने एकत्र आणण्यासाठी या धोरणाद्वारे वर्णन केल्यानुसार एक किंवा त्यापेक्षा अधिक जुळणी होणे आवश्यक आहे. हे धोरण म्हणजे URLब्लॅकलिस्ट फिल्टर प्रकाराचा वापर करणाऱ्या होस्टची एक सूची आहे: "example.com"ची "example.com"बरोबर आणि सर्व सबडोमेन (उदाहरणार्थ. "sub.example.com") बरोबर जुळणी झाली पाहिजे , तर ".example.net"ची अचूकपणे "example.net" सोबत जुळणी झाली पाहिजे.
 
       अनेक कनेक्शनमधून विविध होस्टची विनंती एकत्र करण्यासाठी क्लायंटची सर्टिफिकेट वापरल्यास सुरक्षितता आणि गोपनीयता समस्या निर्माण होऊ शकतात, जरी वापरकर्त्याने अधिकृतपणे सुस्पष्ट केलेले नसले, तरीही सभोवतालची अथॉरिटी सर्व विनंत्यांना सांगितली जाईल, हे धोरण तात्पुरते आहे आणि भविष्याकाळात ते काढून टाकले जाईल. https://crbug.com/855690 पाहा.
@@ -143,30 +143,30 @@
 <translation id="1426410128494586442">होय</translation>
 <translation id="1427655258943162134">प्रॉक्सी सर्व्हरचा प‍त्ता किंवा URL</translation>
 <translation id="1432194160771348078">
-      वापरकर्त्याशी परस्पर संवाद न साधता लॉगइन स्क्रीनवर शांतपणे इंस्टॉल होतील आणि जे अनइंस्टॉल केले जाऊ शकणार नाहीत अशा अॅप्सची सूची निर्दिष्ट करते.
-      वापरकर्त्यांशी कोणताही परस्पर संवाद न साधता अॅप्स द्वारे विनंती केलेल्या सर्व परवानग्या, अॅपच्या भावी आवृत्त्यांसाठी विनंती केलेल्या कोणत्याही अतिरिक्त परवानग्यांसह पूर्णपणे मंजूर केल्या जातात.
+      वापरकर्त्याशी परस्पर डायलॉग न साधता लॉगइन स्क्रीनवर सायलंट इंस्टॉल होतील आणि जे अनइंस्टॉल केले जाऊ शकणार नाहीत अशा अॅप्सची सूची नमूद करते.
+      वापरकर्त्यांशी कोणताही परस्पर डायलॉग न साधता अॅप्स द्वारे विनंती केलेल्या सर्व परवानग्या, अॅपच्या भावी आवृत्त्यांसाठी विनंती केलेल्या कोणत्याही अतिरिक्त परवानग्यांसह पूर्णपणे मंजूर केल्या जातात.
 
-      लक्षात ठेवा, सुरक्षितता आणि गोपनीयतेच्या कारणास्तव हे धोरण वापरून विस्तार इंस्टॉल करण्यास अनुमती नाही. त्याव्यतिरिक्त, स्थिर चॅनेलवरील डिव्हाइस केवळ <ph name="PRODUCT_NAME" /> मध्ये एकत्र असलेले श्वेतसूचीबद्ध अॅप्स इंस्टॉल करतील. कोणतेही असे आयटम जे याची खात्री पटवत नाहीत त्यांच्याकडे दुर्लक्ष केले जाईल.
+      लक्षात ठेवा, सीक्युरिटी आणि गोपनीयतेच्या कारणास्तव हे धोरण वापरून एक्सटेंशन इंस्टॉल करण्यास अनुमती नाही. त्याव्यतिरिक्त, स्टेबल चॅनेलवरील डिव्हाइस केवळ <ph name="PRODUCT_NAME" /> मध्ये एकत्र असलेले व्हाइटलिस्टेड अॅप्स इंस्टॉल करतील. कोणतेही असे आयटम जे याची खात्री पटवत नाहीत त्यांच्याकडे दुर्लक्ष केले जाईल.
 
       एखादे अॅप जे यापूर्वी सक्तीने इंस्टॉल केले होते ते या सूचीमधून काढले जाईल, ते <ph name="PRODUCT_NAME" /> द्वारे आपोआप अनइंस्टॉल केले जाईल.
 
-     या धोरणामधील प्रत्येक सूचीबद्ध आयटम एक स्ट्रिंग आहे जिच्यात एक विस्तार आयडी आणि "अपडेट" URL समाविष्ट असून ते अर्धविराम (<ph name="SEMICOLON" />) ने विभक्त आहेत. विस्तार आयडी 32 वर्णांची एक स्ट्रिंग असते जी विकासक मोडमध्ये असताना उदा. <ph name="CHROME_EXTENSIONS_LINK" /> वर सापडते. "अपडेट" URLने <ph name="LINK_TO_EXTENSION_DOC1" />मध्ये वर्णन केल्यानुसार अपडेट मॅनिफेस्ट XML दस्तऐवजाकडे निर्देश केला पाहिजे. लक्षात ठेवा, या धोरणामध्ये सेट केलेली "अपडेट" URL केवळ सुरूवातीच्या इंस्टॉलेशनसाठी वापरली जाईल; विस्ताराच्या त्यापुढील अपडेटसाठी विस्ताराच्या मॅनिफेस्टमध्ये सूचित केलेल्या अपडेट URLचा उपयेग केला जाईल.
+     या धोरणामधील प्रत्येक सूचीबद्ध आयटम एक स्ट्रिंग आहे जिच्यात एक एक्सटेंशन आयडी आणि "अपडेट" URL समाविष्ट असून ते अर्धविराम (<ph name="SEMICOLON" />) ने विभक्त आहेत. एक्सटेंशन आयडी 32 वर्णांची एक स्ट्रिंग असते जी डेव्हलपर मोडमध्ये असताना उदा. <ph name="CHROME_EXTENSIONS_LINK" /> वर सापडते. "अपडेट" URLने <ph name="LINK_TO_EXTENSION_DOC1" />मध्ये वर्णन केल्यानुसार अपडेट मॅनिफेस्ट XML दस्तऐवजाकडे निर्देश केला पाहिजे. लक्षात ठेवा, या धोरणामध्ये सेट केलेली "अपडेट" URL केवळ सुरूवातीच्या इंस्टॉलेशनसाठी वापरली जाईल; एक्सटेंशनाच्या त्यापुढील अपडेटसाठी एक्सटेंशनाच्या मॅनिफेस्टमध्ये सूचित केलेल्या अपडेट URLचा उपयेग केला जाईल.
 
-     उदाहरणार्थ, <ph name="EXTENSION_POLICY_EXAMPLE" /> मानक Chrome वेब स्टोअरच्या "अपडेट" URL वरून <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> अॅप इंस्टॉल करते. होस्टिंग विस्तारांबद्दल आणखी माहितीसाठी पहा: <ph name="LINK_TO_EXTENSION_DOC2" />.</translation>
+     उदाहरणार्थ, <ph name="EXTENSION_POLICY_EXAMPLE" /> मानक Chrome वेब स्टोअरच्या "अपडेट" URL वरून <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> अॅप इंस्टॉल करते. होस्टिंग एक्सटेंशन्सबद्दल आणखी माहितीसाठी पहा: <ph name="LINK_TO_EXTENSION_DOC2" />.</translation>
 <translation id="1435659902881071157">डिव्हाइस-स्‍तरीय नेटवर्क कॉन्‍फिगरेशन</translation>
 <translation id="1438739959477268107">डीफॉल्ट की निर्मिती सेटिंग</translation>
 <translation id="1454846751303307294">JavaScript चालवण्‍यासाठी अनुमती नसलेल्या साइट निर्दिष्‍ट करणार्‍या url नमुन्यांची सूची सेट करण्‍याची आपल्याला अनुमती देते.
 हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट JavaScript सेटिंग' धोरण, ‍किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉन्फिगरेशन वापरले जाईल.</translation>
 <translation id="1456822151187621582">Windows (<ph name="PRODUCT_OS_NAME" /> क्लायंट):</translation>
-<translation id="1458547592473993238">हे धोरण बहिष्कृत केले आहे. कृपया Flash प्लगिनची उपलब्धता नियंत्रित करण्यासाठी <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> आणि PDF फायली उघडण्यासाठी PDF व्ह्यूअरचा वापर करावा की नाही हे नियंत्रित करण्यासाठी <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> वापरा.
+<translation id="1458547592473993238">हे धोरण बहिष्कृत केले आहे. कृपया Flash प्लगिनची उपलब्धता नियंत्रित करण्यासाठी <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> आणि पीडीएफ फायली उघडण्यासाठी पीडीएफ व्ह्यूअरचा वापर करावा की नाही हे नियंत्रित करण्यासाठी <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> वापरा.
 
-      <ph name="PRODUCT_NAME" /> मध्ये बंद केलेल्या प्लगिनची सूची निर्दिष्ट करते आणि वापरकर्त्यांना ही सेटिंग बदलण्यापासून प्रतिबंधित करते.
+      <ph name="PRODUCT_NAME" /> मध्ये बंद केलेल्या प्लगिनची सूची निर्दिष्ट करते आणि वापरकर्त्यांना हे सेटिंग बदलण्यापासून प्रतिबंधित करते.
 
       वाइल्डकार्ड वर्ण '*' आणि '?' अनियंत्रित वर्णांचा क्रम जुळवण्यासाठी वापरले जाऊ शकतात. '*'  एका अनियंत्रित संख्येशी जुळतो तर '?' पर्यायी एकल वर्ण निर्दिष्ट करतो उदा. शून्य किंवा एका वर्णाशी जुळतो. सुटलेला वर्ण  '\' आहे, म्हणून प्रत्यक्ष *', '?' किंवा '\' जुळवण्यासाठी तुम्हाला त्यांच्या आधी '\' ठेवावा लागेल. 
-      तुम्ही ही सेटिंग चालू केल्यास <ph name="PRODUCT_NAME" /> मध्ये निर्दिष्ट प्लगिनची सूची कधीही वापरली जात नाही. 'प्लगिन:बद्दल' मध्ये प्लगिन बंद म्हणून चिन्हित केले जातात आणि वापरकर्ते ते चालू करू शकत नाहीत.
-      लक्षात ठेवा हे धोरण  EnabledPlugins आणि DisabledPluginsExceptionsNote द्वारे अधिलिखित केले जाऊ शकणार नाही.
+      तुम्ही हे सेटिंग सुरू केल्यास <ph name="PRODUCT_NAME" /> मध्ये निर्दिष्ट प्लगिनची सूची कधीही वापरली जात नाही. त्यावर 'प्लगिन:बद्दल' मध्ये प्लगिन बंद म्हणून खूण केली जाते आणि वापरकर्ते ते सुरू करू शकत नाहीत.
+      लक्षात ठेवा हे धोरण  EnabledPlugins आणि DisabledPluginsExceptionsNote द्वारे ओव्हरराइड केले जाऊ शकणार नाही.
 
-हे धोरण सेट न करता ठेवले गेल्यास वापरकर्ता हार्ड-कोडेड विसंगत, आउटडेटेड किंवा घातक प्लगिन वगळता सिस्टमवर इंस्टॉल असलेला कोणताही प्लगिन वापरू शकतो.</translation>
+हे धोरण सेट न करता ठेवले गेल्यास वापरकर्ता हार्ड-कोडेड विसंगत, आउटडेटेड किंवा घातक प्लगिन वगळता सिस्टमवर इंस्टॉल असलेला कोणतेही प्लगिन वापरू शकतो.</translation>
 <translation id="1464848559468748897"><ph name="PRODUCT_OS_NAME" /> डिव्हाइसेसवर एकाधिक प्रोफाईल सत्रांमधील वापरकर्ता वर्तन नियंत्रित करा.
 
       हे धोरण 'MultiProfileUserBehaviorUnrestricted' वर सेट केले असल्यास, वापरकर्ता हा एकाधिक प्रोफाईल सत्रामध्ये प्राथमिक किंवा दुय्यम वापरकर्ता असू शकतो.
@@ -183,20 +183,20 @@
 
       धोरण सेट न करता सोडल्यास, डीफॉल्ट मूल्य 'MultiProfileUserBehaviorMustBePrimary' संस्था-व्यवस्थापित वापरकर्त्यांना लागू होते आणि 'MultiProfileUserBehaviorUnrestricted' व्यवस्थापित-न केलेल्या वापरकर्त्यांसाठी वापरले जाईल.</translation>
 <translation id="1465619815762735808">प्ले करण्यासाठी क्लिक करा</translation>
-<translation id="1468307069016535757">लॉगिन स्क्रीनवर उच्च तीव्रता मोड प्रवेशयोग्यता वैशिष्ट्याची डीफॉल्ट स्थिती सेट करा.
+<translation id="1468307069016535757">लॉगिन स्क्रीनवर उच्च कॉंट्रास्ट मोड अॅक्सेसयोग्यता वैशिष्ट्याची डीफॉल्ट स्थिती सेट करा.
 
-          हे धोरण सत्य वर सेट असल्यास, जेव्हा लॉगिन स्क्रीन दर्शविली जाते तेव्हा उच्च तीव्रता मोड सक्षम होईल.
+          हे धोरण सत्य वर सेट असल्यास, जेव्हा लॉगिन स्क्रीन दाखवली जाते तेव्हा उच्च कॉंट्रास्ट मोड सक्षम होईल.
 
-          हे धोरण असत्य वर सेट असल्यास, लॉगिन स्क्रीन दर्शविली जाते तेव्हा उच्च तीव्रता मोड अक्षम होईल.
+          हे धोरण असत्य वर सेट असल्यास, लॉगिन स्क्रीन दाखवली जाते तेव्हा उच्च कॉंट्रास्ट मोड अक्षम होईल.
 
-          आपण हे धोरण सेट केल्यास, उच्च तीव्रता मोड सक्षम किंवा अक्षम करून वापरकर्ते ते तात्पुरते अधिलिखित करू शकतात. तथापि, वापरकर्त्याची निवड कायम रहात नाही आणि लॉगिन स्क्रीन एक नवीन दर्शविते तेव्हा किंवा एका मिनिटासाठी लॉगिन स्क्रीनवर वापरकर्ता निष्क्रिय असतो तेव्हा डीफॉल्ट पुनर्संचयित केले जाते.
+          तुम्ही हे धोरण सेट केल्यास, उच्च कॉंट्रास्ट मोड सक्षम किंवा अक्षम करून वापरकर्ते ते तात्पुरते ओव्हरराइड करू शकतात. पण, वापरकर्त्याची निवड कायम रहात नाही आणि लॉगिन स्क्रीन एक नवीन दर्शविते तेव्हा किंवा एका मिनिटासाठी लॉगिन स्क्रीनवर वापरकर्ता निष्क्रिय असतो तेव्हा डीफॉल्ट रिस्टोअर केले जाते.
 
-          हे धोरण सेट न करता सोडल्यास, जेव्हा लॉगिन स्क्रीन प्रथम दर्शविली जाते तेव्हा उच्च तीव्रता मोड अक्षम होतो. वापरकर्ते कोणत्याही वेळी उच्च तीव्रता मोड आणि लॉगिन स्क्रीनवरील वापरकर्त्यांमध्ये कायम असलेली त्याची स्थिती सक्षम किंवा अक्षम करू शकतात.</translation>
-<translation id="1468707346106619889">हे धोरण सत्यवर सेट असल्यास, एकीकृत डेस्कटॉपची अनुमती दिली जाते आणि डीफॉल्टनुसार सक्षम केले जाते, जे अनुप्रयोगांना एकाधिक प्रदर्शनांचा विस्तार करण्याची अनुमती देते.
-      वापरकर्ता वैयक्तिक प्रदर्शनासाठी प्रदर्शन सेटिंग्जमध्ये एकीकृत डेस्कटॉप अनचेक करून तो अक्षम करू शकतो.
+          हे धोरण सेट न करता सोडल्यास, जेव्हा लॉगिन स्क्रीन प्रथम दाखवली जाते, तेव्हा उच्च कॉंट्रास्ट मोड अक्षम होतो. वापरकर्ते कोणत्याही वेळी उच्च कॉंट्रास्ट मोड आणि लॉगिन स्क्रीनवरील वापरकर्त्यांमध्ये कायम असलेली त्याची स्थिती सक्षम किंवा अक्षम करू शकतात.</translation>
+<translation id="1468707346106619889">हे धोरण सत्यवर सेट असल्यास, एकीकृत डेस्कटॉपची अनुमती दिली जाते आणि डीफॉल्टनुसार सक्षम केले जाते, जे अॅपंना एकाधिक डिस्प्लेांचा एक्स्टेंशन करण्याची अनुमती देते.
+      वापरकर्ता वैयक्तिक डिस्प्लेासाठी डिस्प्ले सेटिंग्जमध्ये एकीकृत डेस्कटॉप अनचेक करून तो अक्षम करू शकतो.
 
       हे धोरण असत्यावर सेट केले असल्यास किंवा सेट नसल्यास, एकीकृत डेस्कटॉप अक्षम केले जाईल. अशा प्रकरणात, वापरकर्ता वैशिष्ट्य सक्षम करू शकत नाही.</translation>
-<translation id="1474273443907024088">TLS असत्य प्रारंभ अक्षम करा</translation>
+<translation id="1474273443907024088">TLS फॉल्स स्टार्ट अक्षम करा</translation>
 <translation id="1477934438414550161">TLS 1.2</translation>
 <translation id="1484146587843605071">येथे दिलेल्या होस्टच्या सूचीसाठी <ph name="PRODUCT_NAME" /> कोणतेही प्रॉक्सी टाळेल.
 
@@ -246,13 +246,13 @@
          हे धोरण सेट न करता सोडल्यास, स्क्रीन विशालक सुरुवातीस बंद असतो, परंतु कोणत्याही वेळी वापरकर्त्याद्वारे चालू केला जाऊ शकतो.</translation>
 <translation id="1655229863189977773">डिस्क कॅश   आकार बाइटमध्‍ये सेट करा</translation>
 <translation id="166427968280387991">प्रॉक्सी सर्व्हर</translation>
-<translation id="1668836044817793277">विलंब न होणाऱ्या कियोस्क अॅपसह स्वयं लाँच केलेली <ph name="PRODUCT_OS_NAME" /> आवृत्ती नियंत्रित करण्याची अनुमती द्यायची किंवा नाही.
+<translation id="1668836044817793277">विलंब न होणाऱ्या कियोस्क अॅपसह ऑटो लाँच केलेली <ph name="PRODUCT_OS_NAME" /> आवृत्ती नियंत्रित करण्याची अनुमती द्यायची किंवा नाही.
 
-      हे धोरण त्याच्या मॅनिफेस्ट मध्ये एक आवश्यक_प्लॅटफॉर्म_आवृत्ती घोषित करून विलंब न होणाऱ्या कियोस्क अॅपसह स्वयं लाँच केलेली <ph name="PRODUCT_OS_NAME" /> आवृत्ती नियंत्रित करण्याची अनुमती द्यायची किंवा नाही ते निर्धारित करते आणि तिचा स्वयं अपडेट लक्ष्य आवृत्ती उपसर्ग म्हणून वापर करते.
+      हे धोरण त्याच्या मॅनिफेस्ट मध्ये एक आवश्यक_प्लॅटफॉर्म_आवृत्ती घोषित करून विलंब न होणाऱ्या कियोस्क अॅपसह ऑटो लाँच केलेली <ph name="PRODUCT_OS_NAME" /> आवृत्ती नियंत्रित करण्याची अनुमती द्यायची किंवा नाही ते निर्धारित करते आणि तिचा ऑटो अपडेट लक्ष्य आवृत्ती प्रीफिक्स म्हणून वापर करते.
 
-      धोरण सत्यवर सेट केले असल्यास, विलंब न होणाऱ्या कियोस्क अॅपसह स्वयं लाँच केलेल्या आवश्यक_प्लॅटफॉर्म_आवृत्ती मॅनिफेस्ट की चे मूल्य स्वयं अपडेट लक्ष्य आवृत्ती उपसर्ग म्हणून वापरले जाते.
+      धोरण सत्यवर सेट केले असल्यास, विलंब न होणाऱ्या कियोस्क अॅपसह ऑटो लाँच केलेल्या आवश्यक_प्लॅटफॉर्म_आवृत्ती मॅनिफेस्ट की चे मूल्य ऑटो अपडेट टार्गेट आवृत्ती प्रीफिक्स म्हणून वापरले जाते.
 
-     धोरण कॉन्फिगर केले नसल्यास किंवा असत्यवर सेट केले असल्यास, आवश्‍यक_प्लॅटफॉर्म_आवृत्ती मॅनिफेस्ट की दुर्लक्षित केली जाते आणि स्वयं अपडेट सामान्य म्हणून सुरु राहते.
+     धोरण कॉन्फिगर केले नसल्यास किंवा असत्यवर सेट केले असल्यास, आवश्‍यक_प्लॅटफॉर्म_आवृत्ती मॅनिफेस्ट की दुर्लक्षित केली जाते आणि ऑटो अपडेट सामान्य म्हणून सुरु राहते.
 
       चेतावणी: <ph name="PRODUCT_OS_NAME" /> आवृत्तीचे नियंत्रण कियोस्क अॅपला देणे कदाचित डिव्हाइसला सॉफ्टवेअर अपडेट आणि गंभीर सुरक्षा निराकरणे प्राप्त करण्‍यापासून प्रतिबंधित करू शकत असल्याने तसे करण्‍याची शिफारस केली जात नाही. <ph name="PRODUCT_OS_NAME" /> आवृत्तीचे नियंत्रण दिल्यामुळे वापरकर्त्यांना कदाचित धोका असू शकतो.</translation>
 <translation id="1675002386741412210">यावर समर्थित:</translation>
@@ -286,9 +286,9 @@
 <translation id="1852294065645015766">मीडिया ऑटोप्लेला अनुमती द्या</translation>
 <translation id="1859859319036806634">चेतावणी: 52 आवृत्ती (सप्टेंबर 2016 च्या आसपास) नंतर TLS आवृत्ती फॉलबॅक <ph name="PRODUCT_NAME" /> मधून काढली जाईल आणि हे धोरण त्यानंतर कार्य करणे थांबवेल.
 
-      TLS करार निश्चित अयशस्वी झाल्यावर, <ph name="PRODUCT_NAME" /> HTTPS सर्व्हरमध्ये दोषांवर कार्य करण्यासाठी TLS च्या लहान आवृत्तीसह कनेक्शनसाठी मागीलप्रमाणे पुन्हा प्रयत्न करेल. हे सेटिंग ही फॉलबॅक प्रक्रिया ज्या आवृत्तीवर थांबेल ती आवृत्ती कॉन्फिगर करते. सर्व्हर आवृत्ती निगोशिएशन अचूकपणे करीत असल्यास (म्हणजे कनेक्शन खंडित न करता) हे सेटिंग लागू होत नाही. त्याकडे दुर्लक्ष करून, परिणामी कनेक्शनने अद्याप SSLVersionMin चे पालन करणे आवश्यक आहे.
+      TLS करार निश्चित अयशस्वी झाल्यावर, <ph name="PRODUCT_NAME" /> HTTPS सर्व्हरमध्ये दोषांवर कार्य करण्यासाठी TLS च्या लहान आवृत्तीसह कनेक्शनसाठी मागीलप्रमाणे पुन्हा प्रयत्न करेल. हे सेटिंग ही फॉलबॅक प्रक्रिया ज्या आवृत्तीवर थांबेल ती आवृत्ती कॉन्फिगर करते. सर्व्हर आवृत्ती निगोशिएशन अचूकपणे करत असल्यास (म्हणजे कनेक्शन खंडित न करता) हे सेटिंग लागू होत नाही. त्याकडे दुर्लक्ष करून, परिणामी कनेक्शनने अद्याप SSLVersionMin चे पालन करणे आवश्यक आहे.
 
-      हे धोरण कॉन्फिगर न केल्यास किंवा ते "tls1.2" वर सेट केल्यास <ph name="PRODUCT_NAME" /> हे फॉलबॅक करणार नाही. लक्षात ठेवा हे जुन्या TLS आवृत्त्यांसाठी समर्थन अक्षम करीत नाही, हे केवळ <ph name="PRODUCT_NAME" /> आवृत्त्यांशी अचूकपणे निगोशिएट करू शकत नसलेल्या दोष असलेल्या सर्व्हरवर कार्य करेल.
+      हे धोरण कॉन्फिगर न केल्यास किंवा ते "tls1.2" वर सेट केल्यास <ph name="PRODUCT_NAME" /> हे फॉलबॅक करणार नाही. लक्षात ठेवा हे जुन्या TLS आवृत्त्यांसाठी सपोर्ट अक्षम करत नाही, हे केवळ <ph name="PRODUCT_NAME" /> आवृत्त्यांशी अचूकपणे नेगोशिएट करू शकत नसलेल्या दोष असलेल्या सर्व्हरवर कार्य करेल.
 
       अन्यथा, दोष असलेल्या सर्व्हरसह सुसंगतता राखून ठेवल्यास, हे धोरण "tls1.1" वर सेट केले जाऊ शकते. ही तात्पुरती उपाययोजना आहे आणि सर्व्हरचे जलदगतीने निराकरण केले जावे.</translation>
 <translation id="1864269674877167562">हे धोरण रिक्त स्ट्रिंगवर सेट केले असल्‍यास किंवा कॉन्फिगर केले नसल्‍यास, वापरकर्ता साइन-इन प्रवाह दरम्यान <ph name="PRODUCT_OS_NAME" /> स्वयंपूर्ण पर्याय दर्शविणार नाही.
@@ -302,7 +302,7 @@
       हे धोरण सेट न करता सोडून दिल्यास, नेटवर्क पूर्वानुमान सुरू केले जाईल पण वापरकर्ता ते बदलू शकेल.</translation>
 <translation id="1865417998205858223">की परवानग्या</translation>
 <translation id="186719019195685253">AC ऊर्जेवर चालताना निष्क्रिय विलंब झाल्यानंतर करण्याची कारवाई</translation>
-<translation id="187819629719252111"><ph name="PRODUCT_NAME" /> ला फाइल निवड संवाद प्रदर्शित करण्याची परवानगी देऊन मशीनवरील स्थानिक फायलींना प्रवेश करण्याची परवानगी देते. आपण हे सेटिंग सक्षम केल्यास, वापरकर्ते फाइल निवड संवाद सामान्यपणे उघडू शकतात. आपण हे सेटिंग अक्षम केल्यास, जेव्हा वापरकर्ता फाइल निवड संवाद ( जसे बुकमार्क आयात करणे, फायली अपलोड करणे, दुवे सेव्ह करणे इ.) उत्पन्न करण्याची क्रिया करेल तसा त्याऐवजी संदेश प्रदर्शित केला जातो आणि वापरकर्ता फाइल निवड संवादावर रद्द करा क्लिक केले असल्याचे मानतो. हे सेटिंग सेट नसल्यास, वापरकर्ते फाइल निवड संवाद सामान्यपणे उघडू शकतात.</translation>
+<translation id="187819629719252111"><ph name="PRODUCT_NAME" /> ला फाइल निवड संवाद डिस्प्ले करण्याची परवानगी देऊन मशीनवरील स्थानिक फायलींना अॅक्सेस करण्याची परवानगी देते. तुम्ही हे सेटिंग सक्षम केल्यास, वापरकर्ते फाइल निवड संवाद सामान्यपणे उघडू शकतात. तुम्ही हे सेटिंग अक्षम केल्यास, जेव्हा वापरकर्ता फाइल निवड संवाद ( जसे बुकमार्क आयात करणे, फायली अपलोड करणे, दुवे सेव्ह करणे इ.) उत्पन्न करण्याची क्रिया करेल तसा त्याऐवजी संदेश डिस्प्ले केला जातो आणि वापरकर्ता फाइल निवड संवादावर रद्द करा क्लिक केले असल्याचे मानतो. हे सेटिंग सेट नसल्यास, वापरकर्ते फाइल निवड संवाद सामान्यपणे उघडू शकतात.</translation>
 <translation id="1879485426724769439">डिव्हाइससाठी वापरला जाणारा टाइमझोन निर्दिष्ट करते. वापरकर्ते वर्तमान सत्रासाठी निर्दिष्ट केलेला टाइमझोन अधिशून्य करू शकतात. तथापि, लॉगआउट केल्यावर ते परत निर्दिष्ट केलेल्या टाइमझोनवर सेट केले जाते. अवैध मूल्य प्रदान केल्यास, त्याऐवजी "GMT" वापरून धोरण अद्यापही सक्रिय केले जाते. रिक्त स्ट्रिंग प्रदान केल्यास, धोरण दुर्लक्षित केले जाते.
 
       हे धोरण वापरले नसल्यास, सध्या सक्रिय असलेला टाइमझोन वापरामध्ये असेल तथापि वापरकर्ते टाइमझोन बदलू शकतात आणि बदल कायमचा असेल. म्हणून एका वापरकर्त्याने केलेला बदल लॉगिन-स्क्रीनला आणि अन्य वापरकर्त्यांना प्रभावित करतो.
@@ -322,7 +322,7 @@
 असत्य म्हणून सेट केल्यास, वापर मेट्रिक्स आणि निदान केलेल्या डेटाचा अहवाल देणे बंद केले जाईल.
 
 कॉन्फिगर न केल्यास अव्यवस्थापित डिव्हाइसवर वापर मेट्रिक्स आणि निदान केलेल्या डेटाचा अहवाल देणे बंद केले जाईल आणि व्यवस्थापित डिव्हाइसवर अहवाल देणे चालू केले जाईल.</translation>
-<translation id="1914840757300882918">हे धोरण सेट केले असल्यास, होस्ट RemoteAccessHostTokenValidationUrl प्रमाणित करण्यासाठी दिलेला जारीकर्ता CNसह एक क्लायंट प्रमाणपत्र वापरतो. कोणतेही उपलब्ध क्लायंट प्रमाणपत्र वापरण्यासाठी यास "*" वर सेट करा.
+<translation id="1914840757300882918">हे धोरण सेट केले असल्यास, होस्ट RemoteAccessHostTokenValidationUrl प्रमाणित करण्यासाठी दिलेला जारीकर्ता CNसह एक क्लायंट सर्टिफिकेट वापरतो. कोणतेही उपलब्ध क्लायंट सर्टिफिकेट वापरण्यासाठी यास "*" वर सेट करा.
          हे वैशिष्ट्य सध्या सर्व्हरकडून बंद केले आहे.</translation>
 <translation id="1920046221095339924">डिव्हाइसवरील व्यवस्थापित केलेल्या सत्राला अनुमती द्या</translation>
 <translation id="1929709556673267855">एंटरप्राइझ प्रिंटरसाठी कॉन्फिगरेशन पुरवते.
@@ -365,17 +365,17 @@
 
           धोरण नावाचा एक JSON  शब्दकोश म्हणून धोरण मूल्य मॅपिंगमध्ये मूल्य पार्स केले जाते.</translation>
 <translation id="1969808853498848952">नेहमी ऑथोरायझेशन आवश्यक असतील असे प्लग-इन रन केले जातात (कालबाह्य झाले)</translation>
-<translation id="1988371335297483117"><ph name="PRODUCT_OS_NAME" /> वरील स्वयं-अपडेट अभिभार HTTPS ऐवजी HTTP द्वारे डाउनलोड केले जाऊ शकतात. हे HTTP डाउनलोडच्या पारदर्शक HTTP कॅश   करण्यास अनुमती देते.
+<translation id="1988371335297483117"><ph name="PRODUCT_OS_NAME" /> वरील ऑटो अपडेट पेलोड HTTPS ऐवजी HTTP द्वारे डाउनलोड केले जाऊ शकतात. हे HTTP डाउनलोडच्या पारदर्शकपणे HTTP कॅश  करण्यास अनुमती देते.
 
-      हे धोरण सत्य वर सेट केले असल्यास, <ph name="PRODUCT_OS_NAME" /> HTTP द्वारे स्वयं-अपडेट अभिभार डाउनलोड करण्याचा प्रयत्न करेल. धोरण असत्य वर सेट केले असल्यास किंवा सेट केले नसल्यास, स्वयं-अपडेट अभिभार डाउनलोड करण्यासाठी HTTP वापरले जाईल.</translation>
+    हे धोरण सत्य वर सेट केले असल्यास, <ph name="PRODUCT_OS_NAME" /> HTTP द्वारे ऑटो अपडेट पेलोड डाउनलोड करण्याचा प्रयत्न करेल. धोरण असत्य वर सेट केले असल्यास किंवा सेट केले नसल्यास, ऑटो अपडेट पेलोड डाउनलोड करण्यासाठी HTTP वापरले जाईल.</translation>
 <translation id="199764499252435679"><ph name="PRODUCT_NAME" /> मधील घटक अपडेट सुरू करा</translation>
-<translation id="1997994951395619441">तुम्ही ही सेटिंग चालू केल्यास, <ph name="PRODUCT_NAME" /> बुकमार्क बार दाखवेल.
+<translation id="1997994951395619441">तुम्ही हे सेटिंग सुरू केल्यास, <ph name="PRODUCT_NAME" /> बुकमार्क बार दाखवेल.
 
-      तुम्ही ही सेटिंग बंद केल्यास, वापरकर्ते बुकमार्क बार कधीही पाहू शकणार नाहीत.
+      तुम्ही हे सेटिंग बंद केल्यास, वापरकर्ते बुकमार्क बार कधीही पाहू शकणार नाहीत.
 
-     तुम्ही ही सेटिंग चालू किंवा बंद केल्यास, वापरकर्ते ती <ph name="PRODUCT_NAME" /> मध्ये बदलू किंवा अधिलिखित करू शकणार नाहीत
+     तुम्ही हे सेटिंग सुरू किंवा बंद केल्यास, वापरकर्ते ती <ph name="PRODUCT_NAME" /> मध्ये बदलू किंवा ओव्हरराइड करू शकणार नाहीत
 
-      ही सेटिंग सेट न केलेली ठेवल्यास, वापरकर्ता हे कार्य वापरायचे की नाही हे ठरवू शकतो.</translation>
+      हे सेटिंग सेट न केलेली ठेवल्यास, वापरकर्ता हे कार्य वापरायचे की नाही हे ठरवू शकतो.</translation>
 <translation id="2006530844219044261">उर्जा व्यवस्थापन</translation>
 <translation id="201557587962247231">डिव्‍हाइस स्थिती अहवाल अपलोडची वारंवारता</translation>
 <translation id="2017301949684549118">शांतपणे इंस्टॉल केल्या जाणाऱ्या वेब अॅपसाठी URL.</translation>
@@ -426,17 +426,24 @@
 
 लक्षात घ्या, जर <ph name="PRODUCT_NAME" /> सुरू असेल आणि जर धोरणात बदल झाला, तर तो फक्त नव्याने उघडल्या जाणाऱ्या टॅबना लागू केला जाईल. त्यामुळे काही टॅबमध्‍‍‍‍ये अजूनही पूर्वीचेच धोरण आढळू शकते.</translation>
 <translation id="2134437727173969994">स्क्रीन लॉक करण्याची परवानगी</translation>
-<translation id="2137064848866899664">हे धोरण सेट केलेले असल्यास, प्रत्येक प्रदर्शन हे
+<translation id="2137064848866899664">हे धोरण सेट केलेले असल्यास, प्रत्येक डिस्प्ले हे
       प्रत्येक रीबूट केल्यानंतर आणि धोरण मूल्य बदलल्‍यानंतर प्रथम वेळी कनेक्ट
       केले जाते तेव्‍हा निर्दिष्‍ट केलेल्या अभिमुखतेवर फिरविले जाते. वापरकर्त्यांनी
-      लॉग इन केल्यानंतर ते सेटिंग्ज पृष्‍ठाद्वारे प्रदर्शन फिरविणे बदलू शकतात परंतु
+      लॉग इन केल्यानंतर ते सेटिंग्ज पेजाद्वारे डिस्प्ले फिरविणे बदलू शकतात परंतु
       पुढील रीबूट करताना धोरण मूल्याद्वारे त्यांचे सेटिंग अधिशू्न्य केले जातील.
 
-      हे धोरण प्राथमिक आणि सर्व दुय्यम प्रदर्शनांवर लागू होते.
+      हे धोरण प्राथमिक आणि सर्व दुय्यम डिस्प्लेांवर लागू होते.
 
       धोरण सेट केले नसल्यास, डीफॉल्ट मूल्य 0 अंश असते आणि वापरकर्ता
       ते बदलू शकतो. याबाबतीत, डीफॉल्ट मूल्य हे रीस्टार्टवर पु्न्हा लागू केले जाऊ
       शकत नाही.</translation>
+<translation id="2138449619211358657">ही पॉलिसी <ph name="PRODUCT_OS_NAME" /> ला कॅप्टिव्ह पोर्टल अॉथेंटिकेशनकरिता कोणत्याही प्रॉक्सीला बायपास करण्याची परवानगी देते.
+
+      प्रॉक्सी कॉन्फिगर केलेली असेल, तरच ही पॉलिसी लागू होते (उदा. chrome://settings मधील वापरकर्त्याद्वारे किंवा एक्स्टेंशनच्या माध्यमातून पॉलिसीद्वारे)
+
+      तुम्ही हे सेटिंग सुरू केलेले असेल, तर सद्य वापरकर्त्याची सर्व पॉलिसी सेटिंग्ज आणि बंधने यांच्याकडे दुर्लक्ष करून कोणतीही कॅप्टिव्ह पोर्टल अॉथेंटिकेशन पेज (<ph name="PRODUCT_NAME" /> इंटरनेट कनेक्शन डीटेक्ट करते आहे तोवरची कॅप्टिव्ह पोर्टल साइनइन पेजपासूनची पेज) स्वतंत्र विंडोमध्येच डिस्प्ले केली जातील. 
+
+तुम्ही हे सेटिंग बंद केलेले असेल, तर कोणतीही कॅप्टिव्ह पोर्टल अॉथेंटिकेशन पेज सद्य वापरकर्त्याच्या प्रॉक्सी सेटिंग्ज वापरून नव्या (नेहमीच्या) ब्राउझर टॅबमध्ये दाखली जातील.</translation>
 <translation id="21394354835637379">तुम्हाला कोणत्या URL विस्तार, अॅप्स आणि थीम इंस्टॉल करू द्यायच्या ते निर्दिष्ट करू देते.
 
           <ph name="PRODUCT_NAME" /> 21मध्ये सुरूवात झाल्यानंतर, Chrome वेब स्टोअरच्या बाहेरून विस्तार, अॅप्स आणि वापरकर्ता स्क्रिप्ट इंस्टॉल करणे आणखी कठीण झाले आहे. यापूर्वी वापरकर्ते एका *.crx लिंकच्या फायलीवर क्लिक करू शकत होते आणि काही चेतावण्यांनंतर <ph name="PRODUCT_NAME" /> ती फाइल इंस्टॉल करण्यास ऑफर करत होते. <ph name="PRODUCT_NAME" /> 21 नंतर अशा फायली डाउनलोड करून <ph name="PRODUCT_NAME" /> सेटिंग पेजवर ड्रॅग करणे आवश्यक आहे. ही सेटिंग विशिष्ट URLना जुना, सुलभ इंस्टॉलेशन प्रवाह देते.
@@ -505,9 +512,9 @@
 
       असत्य वर सेट केल्यास, ऑन-स्क्रीन व्हर्च्युअल कीबोर्ड नेहमी अक्षम केलेला असेल.
 
-      आपण हे धोरण सेट केल्यास, वापरकर्ते तो बदलू किंवा अधिशून्य करू शकणार नाहीत. तथापि, वापरकर्ते तरीही ऑन-स्क्रीन कीबोर्डवरील प्रवेशयोग्यता सक्षम/अक्षम करण्यात सक्षम होतील जे या धोरणाद्वारे नियंत्रित व्हर्च्युअल कीबोर्डवर प्राथमिकता घेते. प्रवेशयोग्यता ऑन-स्क्रीन कीबोर्ड नियंत्रित करण्यासाठी |VirtualKeyboardEnabled| धोरण पहा.
+      तुम्ही हे धोरण सेट केल्यास, वापरकर्ते तो बदलू किंवा अधिशून्य करू शकणार नाहीत. तथापि, वापरकर्ते तरीही ऑन-स्क्रीन कीबोर्डवरील अॅक्सेसयोग्यता सक्षम/अक्षम करण्यात सक्षम होतील जे या धोरणाद्वारे नियंत्रित व्हर्च्युअल कीबोर्डवर प्राथमिकता घेते. अॅक्सेसयोग्यता ऑन-स्क्रीन कीबोर्ड नियंत्रित करण्यासाठी |VirtualKeyboardEnabled| धोरण पहा.
 
-      हे धोरण सेट न करता सोडल्यास, ऑन-स्क्रीन कीबोर्ड सुरुवातीस अक्षम केला जातो परंतु कधीही वापरकर्त्याद्वारे सक्षम केला जाऊ शकतो. कीबोर्ड केव्हा प्रदर्शित करावा हे ठरविण्यासाठी अन्वेषणोपयोगी नियम देखील वापरले जाऊ शकतात.</translation>
+      हे धोरण सेट न करता सोडल्यास, ऑन-स्क्रीन कीबोर्ड सुरुवातीस अक्षम केला जातो परंतु कधीही वापरकर्त्याद्वारे सक्षम केला जाऊ शकतो. कीबोर्ड केव्हा डिस्प्ले करावा हे ठरविण्यासाठी अन्वेषणोपयोगी नियम देखील वापरले जाऊ शकतात.</translation>
 <translation id="228659285074633994">वापरकर्ता इनपुटशिवाय कालावधी निर्दिष्ट करते ज्यानंतर जेव्हा AC उर्जेवर चालते तेव्हा एक चेतावणी संवाद दर्शविला जातो.
 
           जेव्हा हे धोरण सेट केले जाते, तेव्हा निष्क्रिय कारवाई केली जाणार आहे असे वापरकर्त्यास सांगणारा एक चेतावणी संवाद <ph name="PRODUCT_OS_NAME" /> ने दर्शविण्यापूर्वी वापरकर्त्याने निष्क्रिय रहाणे आवश्यक असलेला कालावधी हे निर्दिष्ट करते.
@@ -515,9 +522,9 @@
           हे धोरण सेट केलेले नसते, तेव्हा कोणताही चेतावणी संवाद दर्शविला जात नाही.
 
           धोरण मूल्य मिलिसेकंदांमध्ये निर्दिष्ट केले जावे. निष्क्रिय विलंबापेक्षा कमी किंवा समान असण्यासाठी मूल्ये नियंत्रित केली जातात.</translation>
-<translation id="2289578386193672044">वापरकर्त्याशी कोणत्याही संवादाशिवाय आणि शांतपणे इंस्टॉल केलेली अॅप्स जी वापरकर्त्याद्वारे अनइंस्टॉल किंवा अकार्यान्वित केली जाऊ शकत नाहीत अशा अॅप्स आणि एक्सटेंशनची यादी स्पष्ट करते. अॅप्स/एक्सटेंशनद्वारे विनंती करण्यात आलेल्या सर्व परवानग्या ज्यात अॅप्स/एक्सटेंशनच्या भविष्यातील आवृत्तीद्वारे विनंती केल्या जाणाऱ्या अतिरिक्त परवानग्यांचाही समावेश असेल, त्या वापरकर्त्याशी कोणत्याही संवादाशिवाय मंजूर केल्या आहेत. त्याचबरोबर, enterprise.deviceAttributes आणि enterprise.platformKeys एक्सटेंशन API यांसाठी परवानग्या मंजूर केल्या आहेत. (हे दोन API फोर्स-इंस्टॉल न केलेल्या अॅप्स आणि एक्सटेंशनसाठी उपलब्ध नसतील.)
+<translation id="2289578386193672044">वापरकर्त्याशी कोणत्याही डायलॉगाशिवाय आणि सायलेंट इंस्टॉलेशन केलेली अॅप्स जी वापरकर्त्याद्वारे अनइंस्टॉल किंवा अकार्यान्वित केली जाऊ शकत नाहीत अशा अॅप्स आणि एक्सटेंशनची यादी स्पष्ट करते. अॅप्स/एक्सटेंशनद्वारे विनंती करण्यात आलेल्या सर्व परवानग्या ज्यात अॅप्स/एक्सटेंशनच्या भविष्यातील आवृत्तीद्वारे विनंती केल्या जाणाऱ्या अतिरिक्त परवानग्यांचाही समावेश असेल, त्या वापरकर्त्याशी कोणत्याही डायलॉगाशिवाय मंजूर केल्या आहेत. त्याचबरोबर, enterprise.deviceAttributes आणि enterprise.platformKeys एक्सटेंशन API यांसाठी परवानग्या मंजूर केल्या आहेत. (हे दोन API फोर्स इंस्टॉल न केलेल्या अॅप्स आणि एक्सटेंशनसाठी उपलब्ध नसतील.)
 
-हे धोरण संभाव्य विवादित <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> धोरणाच्याबाबतीत महत्त्वाचे ठरते. जर एखादे अॅप किंवा एक्सटेंशन जे पूर्वी फोर्स-इंस्टॉल करण्यात आले होते जर ते या सूचीमधून काढले गेल तर ते <ph name="PRODUCT_NAME" /> द्वारे आपोआप अनइंस्टॉल केले जाते.
+हे धोरण संभाव्य विवादित <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> धोरणाच्याबाबतीत महत्त्वाचे ठरते. जर एखादे अॅप किंवा एक्सटेंशन जे पूर्वी फोर्स इंस्टॉल करण्यात आले होते जर ते या सूचीमधून काढले गेल तर ते <ph name="PRODUCT_NAME" /> द्वारे आपोआप अनइंस्टॉल केले जाते.
 
 <ph name="MS_AD_NAME" /> डोमेनशी जोडल्या नसलेल्या Windows इंस्टंससाठी, फोर्स-इंस्टॉलेशन हे फक्त Chrome वेब स्टोअरमध्ये सूचीबद्ध केलेल्या अॅप्स आणि एक्सटेंशनपुरतेच मर्यादित आहे.
 
@@ -528,11 +535,11 @@
 उदाहरणार्थ, <ph name="EXTENSION_POLICY_EXAMPLE" /> द्वारे स्टँडर्ड Chrome वेब स्टोअर "अपडेट" URL वरून <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> हे अॅप इंस्टॉल केले जाते. एक्सटेंशनच्या होस्टिंगबाबत अधिक माहितीसाठी, पहा: <ph name="LINK_TO_EXTENSION_DOC2" />.
 
 जर हे धोरण सेट केलेले नसेल तर कोणतेही अॅप्स किंवा एक्सटेंशन आपोआप इंस्टॉल केले जाणार नाहीत आणि वापरकर्ता <ph name="PRODUCT_NAME" /> मधील कोणतेही अॅप किंवा एक्सटेंशन अनइंस्टॉल करू शकतो.</translation>
-<translation id="2292084646366244343"><ph name="PRODUCT_NAME" /> शब्दलेखन त्रुटींचे निराकरण करण्यात मदत करकण्यासाठी Google वेब सेवा वापरू शकते. हे सेटिंग सक्षम असल्यास, सेवा नेहमी वापरली जाते. हे सेटिंग अक्षम असल्यास, सेवा कधीही वापरली जात नाही.
+<translation id="2292084646366244343"><ph name="PRODUCT_NAME" /> स्पेलिंगविषयक एररचे निराकरण करण्यात मदत करण्यासाठी Google वेब सेवा वापरू शकते. हे सेटिंग सक्षम असल्यास, सेवा नेहमी वापरली जाते. हे सेटिंग अक्षम असल्यास, सेवा कधीही वापरली जात नाही.
 
-      शब्दलेखन तपासणी तरीही एक डाउनलोडो केलेला शब्दकोश वापरून केली जाऊ शकते; हे धोरण केवळ ऑनलाइन सेवा वापरणे नियंत्रित करते.
+      स्पेल चेकर तरीही एक डाउनलोड केलेला शब्दकोश वापरून केली जाऊ शकते; हे धोरण केवळ ऑनलाइन सेवा वापरणे नियंत्रित करते.
 
-      हे सेटिंग कॉन्फिगर नसल्यास वापरकर्ते शब्दलेखन तपासणी सेवा वापरली जावी किंवा नाही हे निवडू शकतात.</translation>
+      हे सेटिंग कॉन्फिगर केलेले नसल्यास वापरकर्ते स्पेल चेकर सेवा वापरली जावी किंवा नाही हे निवडू शकतात.</translation>
 <translation id="2294283832646774959">प्रिंटरची सूची कॉन्फिगर करते.
 
 हे धोरण प्रशासकाला त्यांच्या वापरकर्त्यांसाठी प्रिंटर कॉन्फिगरेशन पुरवण्याची अनुमती देते.
@@ -567,10 +574,10 @@
       हे धोरण सेट केले नसल्यास, कालबाह्य म्हणून 0 मिलिसेकंद वापरले जातील.
 
       हे धोरण मिलिसेकंदांमध्ये निर्दिष्ट केले आहे.</translation>
-<translation id="237494535617297575">सूचना प्रदर्शित करण्‍याची अनुमती असलेल्या साइट निर्दिष्‍ट करणारी url नमुन्यांची सूची सेट करण्‍याची आपल्याला अनुमती देते. 
+<translation id="237494535617297575">सूचना डिस्प्ले करण्‍याची अनुमती असलेल्या साइट निर्दिष्‍ट करणारी url नमुन्यांची सूची सेट करण्‍याची तुम्हाला अनुमती देते. 
 
 
-          हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट सूचना सेटिंग' धोरण, ‍किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉन्फिगरेशन वापरले जाईल.</translation>
+          हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट सूचना सेटिंग' धोरण, ‍किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉंफिगरेशन वापरले जाईल.</translation>
 <translation id="2386362615870139244">स्क्रीन वेक लॉक अनुमत करा</translation>
 <translation id="2411817661175306360">पासवर्ड संरक्षण चेतावणी बंद आहे</translation>
 <translation id="2411919772666155530">या साइटवरील अधिसूचना अवरोधित करा</translation>
@@ -579,17 +586,17 @@
       हे सेटिंग सक्षम केलेले असल्यास, ब्राउझिंग इतिहास सेव्ह केला जात नाही. हे सेटिंग टॅब संकालित करणे देखील अक्षम करते.
 
       हे सेटिंग अक्षम केले असल्यास किंवा सेट केले नसल्‍यास, ब्राउझिंग इतिहास सेव्ह केला जातो.</translation>
-<translation id="2426782419955104525"><ph name="PRODUCT_NAME" />चे झटपट वैशिष्ट्य सक्षम करते आणि वापरकर्त्यांना ही सेटिंग बदलण्यापासून प्रतिबंध करते.
+<translation id="2426782419955104525"><ph name="PRODUCT_NAME" />चे इंस्टंट वैशिष्ट्य सक्षम करते आणि वापरकर्त्यांना हे सेटिंग बदलण्यापासून प्रतिबंध करते.
 
-      आपण ही सेटिंग सक्षम केल्यास, <ph name="PRODUCT_NAME" /> झटपट सक्षम होते.
+      तुम्ही हे सेटिंग सक्षम केल्यास, <ph name="PRODUCT_NAME" /> इंस्टंट सक्षम होते.
 
-      आपण ही सेटिंग अक्षम केल्यास, <ph name="PRODUCT_NAME" /> झटपट अक्षम होते.
+      तुम्ही हे सेटिंग अक्षम केल्यास, <ph name="PRODUCT_NAME" /> इंस्टंट अक्षम होते.
 
-      आपण ही सेटिंग सक्षम किंवा अक्षम केल्यास, वापरकर्ते ही सेटिंग बदलू शकत नाहीत किंवा ती अधिशून्य करू शकत नाहीत.
+      तुम्ही हे सेटिंग सक्षम किंवा अक्षम केल्यास, वापरकर्ते हे सेटिंग बदलू शकत नाहीत किंवा ती ओव्हरराइड करू शकत नाहीत.
 
-      ही सेटिंग सेट न करता सोडल्यास हे कार्य वापरावे किंवा वापरू नये हे वापरकर्ता ठरवू शकतो.
+      हे सेटिंग सेट न करता सोडल्यास हे कार्य वापरावे किंवा वापरू नये हे वापरकर्ता ठरवू शकतो.
 
-      ही सेटिंग <ph name="PRODUCT_NAME" /> 29 आणि उच्च आवृत्त्यांमधून काढली गेली आहे.</translation>
+      हे सेटिंग <ph name="PRODUCT_NAME" /> 29 आणि उच्च आवृत्त्यांमधून काढली गेली आहे.-</translation>
 <translation id="242722703025699760">हे धोरण सत्य वर सेट केले असल्यास किंवा कॉन्फिगर केले नसल्यास, <ph name="PRODUCT_OS_NAME" /> लॉगइन स्क्रीनवर असलेले वर्तमान वापरकर्ते दाखवेल आणि एकाला निवडू देईल.
 
       हे धोरण असत्य वर सेट केले असल्यास, <ph name="PRODUCT_OS_NAME" /> लॉगइन स्क्रीनवर असलेले वर्तमान वापरकर्ते दाखवणार नाही. सार्वजनिक सत्र कॉन्फिगर होईपर्यंत सामान्य साइन इन स्क्रीन (वापरकर्त्याचा ईमेल, पासवर्ड किंवा फोन नंबरसाठी सूचित करणारी) किंवा SAML इंटरस्टिटल स्क्रीन (<ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> धोरणाद्वारे चालू केली असल्यास) दाखवल्या जातील. सार्वजनिक सत्र कॉन्फिगर झाल्यानंतर केवळ सार्वजनिक क्षेत्रातील खाती दाखवली जातील, ज्यापैकी एक निवडण्याची अनुमती दिली जाईल.
@@ -624,16 +631,16 @@
       हे धोरण असत्य वर सेट केल्यास किंवा कॉन्फिगर केले नसल्यास, वापरकर्ता <ph name="PRODUCT_NAME" /> मध्ये साइन इन न करता ब्राउझर वापरू शकतो.</translation>
 <translation id="2486371469462493753">सूचीबद्ध केलेल्या URL साठी प्रमाणप‍त्र पारदर्शकता आवश्यकतांची अंमलबजावणी करणे अक्षम करते.
     
-हे धोरण निर्दिष्ट केलेल्या URL मधील होस्टनावांसाठी प्रमाणपत्र पारदर्शकताद्वारे उघड न केले जाण्याकरिता प्रमाणपत्रांना अनुमती देते. हे अविश्वसनीय असू शकणार्‍या या प्रमाणपत्रांना अनुमती देते कारण त्यांचा वापर सुरू ठेवण्यासाठी त्यांची योग्यरित्या सार्वजनिकरीत्या उघड केली नाही, परंतु त्या होस्टकरिता चुकीने जारी केलेली प्रमाणपत्रे ओळखणे अवघड बनविते.
+हे धोरण निर्दिष्ट केलेल्या URL मधील होस्टनावांसाठी सर्टिफिकेट पारदर्शकताद्वारे उघड न केले जाण्याकरिता सर्टिफिकेटंना अनुमती देते. हे अविश्वसनीय असू शकणार्‍या या सर्टिफिकेटंना अनुमती देते कारण त्यांचा वापर सुरू ठेवण्यासाठी त्यांची योग्यरित्या सार्वजनिकरत्या उघड केली नाही, परंतु त्या होस्टकरिता चुकीने जारी केलेली सर्टिफिकेट ओळखणे अवघड बनविते.
 
-      URL नमुना https://www.chromium.org/administrators/url-blacklist-filter-format नुसार स्वरूपित केला जातो. तथापि, स्कीम, पोर्ट किंवा पथपासून स्वतंत्र असलेल्या दिलेल्या होस्टनावासाठी प्रमाणपत्रे वैध असल्यामुळे, फक्त URL होस्टनाव भाग विचारात घेतला जातो. वाइल्डकार्ड होस्ट समर्थित नसतात.
+      URL नमुना https://www.chromium.org/administrators/url-blacklist-filter-format नुसार स्वरूपित केला जातो. तथापि, स्कीम, पोर्ट किंवा पथपासून स्वतंत्र असलेल्या दिलेल्या होस्टनावासाठी सर्टिफिकेट वैध असल्यामुळे, फक्त URL होस्टनाव भाग विचारात घेतला जातो. वाइल्डकार्ड होस्ट समर्थित नसतात.
 
-      धोरण सेट केले नसल्यास, प्रमाणपत्र पारदर्शकताद्वारे उघड करण्याची आवश्यकता असलेले कोणेतेही प्रमाणप‍त्र हे प्रमाणपत्र पारदर्शकता धोरणानुसार उघड केलेले नसल्यास अविश्वसनीय म्हणून हाताळले जाईल.</translation>
+      धोरण सेट केले नसल्यास, सर्टिफिकेट पारदर्शकताद्वारे उघड करण्याची आवश्यकता असलेले कोणेतेही प्रमाणप‍त्र हे सर्टिफिकेट पारदर्शकता धोरणानुसार उघड केलेले नसल्यास अविश्वसनीय म्हणून हाताळले जाईल.</translation>
 <translation id="2488010520405124654">ऑफलाइन असताना नेटवर्क कॉन्‍फिगरेशन सूचना सक्षम करा.
 
-      हे धोरण सेट न केल्‍यास किंवा सत्‍य वर सेट केल्‍यास आणि डिव्‍हाइस-स्‍थानिक खाते शून्‍य-विलंब स्‍वयं-लॉग इनसाठी कॉन्‍फिगर केले असल्‍यास आणि डिव्‍हाइसला इंटरनेटवर प्रवेश नसल्‍यास, <ph name="PRODUCT_OS_NAME" /> नेटवर्क कॉन्‍फिगर सूचना दर्शवेल.
+      हे धोरण सेट न केल्‍यास किंवा सत्‍य वर सेट केल्‍यास आणि डिव्‍हाइस-स्‍थानिक खाते शून्य विलंब अॉटो-लॉगिनसाठी कॉन्‍फिगर केले असल्‍यास आणि डिव्‍हाइसला इंटरनेटवर अॅक्सेस नसल्‍यास, <ph name="PRODUCT_OS_NAME" /> नेटवर्क कॉन्‍फिगर सूचना दर्शवेल.
 
-      हे धोरण असत्‍य वर सेट केल्‍यास, नेटवर्क कॉन्‍फिगर सूचनेऐवजी एक एरर संदेश प्रदर्शित केला जाईल.</translation>
+      हे धोरण असत्‍य वर सेट केल्‍यास, नेटवर्क कॉन्‍फिगर सूचनेऐवजी एक एरर मेसेज डिस्प्ले केला जाईल.</translation>
 <translation id="2498238926436517902">शेल्फ नेहमी स्वयं-लपवा</translation>
 <translation id="2514328368635166290">डीफॉल्ट शोध प्रदात्याच्या पसंतीचे चिन्ह URL निर्दिष्‍ट करते.
 
@@ -659,18 +666,18 @@
           Google ची झटपट परिणाम URL हे म्हणून निर्दिष्ट केली जाऊ शकते: <ph name="GOOGLE_INSTANT_SEARCH_URL" />.
 
           'DefaultSearchProviderEnabled' धोरण सक्षम केले असेल तरच हे धोरण विचारात घेतले जाते.</translation>
-<translation id="2569647487017692047">धोरण असत्यवर सेट केलेले असल्यास, <ph name="PRODUCT_OS_NAME" /> Bluetooth अक्षम करेल आणि वापरकर्ता तो पुन्हा सक्षम करू शकत नाही.
+<translation id="2569647487017692047">धोरण असत्यवर सेट केलेले असल्यास, <ph name="PRODUCT_OS_NAME" /> ब्लूटूथ अक्षम करेल आणि वापरकर्ता तो पुन्हा सक्षम करू शकत नाही.
 
-      हे धोरण सत्यवर सेट केलेले असल्यास किंवा सेट न केलेले ठेवल्यास, वापरकर्ता त्यांच्या इच्छेप्रमाणे Bluetooth सक्षम किंवा अक्षम करू शकता.
+      हे धोरण सत्यवर सेट केलेले असल्यास किंवा सेट न केलेले ठेवल्यास, वापरकर्ता त्यांच्या इच्छेप्रमाणे ब्लूटूथ सक्षम किंवा अक्षम करू शकता.
 
-      हे धोरण सेट केलेले असल्यास, वापरकर्ता ते बदलू किंवा अधोलेखित करू शकत नाही.
+      हे धोरण सेट केलेले असल्यास, वापरकर्ता ते बदलू किंवा ओव्हरराइड करू शकत नाही.
 
-      Bluetooth सक्षम केल्यानंतर, बदल दिसण्यासाठी वापरकर्त्याने लॉग आउट करून पुन्हा लॉग इन करणे आवश्यक आहे (Bluetooth अक्षम करत असताना हे करण्याची आवश्यकता नाही).</translation>
+      ब्लूटूथ सक्षम केल्यानंतर, बदल दिसण्यासाठी वापरकर्त्याने लॉग आउट करून पुन्हा लॉग इन करणे आवश्यक आहे (ब्लूटूथ अक्षम करत असताना हे करण्याची आवश्यकता नाही).</translation>
 <translation id="2571066091915960923">डेटा संक्षेप प्रॉक्सी सक्षम किंवा अक्षम करते आणि हे सेटिंग बदलण्यापासून वापरकर्त्यांना प्रतिबंधित करते.
 
-      आपण हे सेटिंग सक्षम किंवा अक्षम करत असल्यास, हे सेटिंग वापरकर्ते बदलत किंवा अधिलिखित करू शकत नाहीत.
+      तुम्ही हे सेटिंग सक्षम किंवा अक्षम करत असल्यास, हे सेटिंग वापरकर्ते बदलत किंवा ओव्हरराइड करू शकत नाहीत.
 
-      हे धोरण सेट न करता सोडल्यास, डेटा संक्षेप प्रॉक्सी वैशिष्ट्य वापरावे किंवा वापरू नये हे निवडण्यासाठी वापरकर्त्यांसाठी उपलब्ध होईल.</translation>
+      हे धोरण सेट न करता सोडल्यास, डेटा कॉंप्रेशन प्रॉक्सी वैशिष्ट्य वापरावे किंवा वापरू नये हे निवडण्यासाठी वापरकर्त्यांसाठी उपलब्ध होईल.</translation>
 <translation id="257788512393330403">दर सहा तासांनी पासवर्ड टाकणे आवश्यक आहे.</translation>
 <translation id="2587719089023392205"><ph name="PRODUCT_NAME" /> माझे डीफॉल्ट ब्राउझर म्हणून सेट करा</translation>
 <translation id="2592091433672667839">‍किरकोळ मोडमध्‍ये साइन-इन स्क्रीनवर स्क्रीन सेव्हर दर्शविला जाण्यापूर्वीच्या निष्क्रियतेचा कालावधी</translation>
@@ -789,10 +796,10 @@
 
       तुम्ही हे सेटिंग बंद केल्यास किंवा एखादी ठराविक निवड सेट न केल्यास, प्रिंट प्रीव्ह्यू, अगदी अलीकडे वापरण्यात आलेल्या प्रिंटरची डीफॉल्ट स्थान म्हणून निवड करेल.
 
-      तुम्ही हे सेटिंग चालू केल्यास, प्रिंट प्रीव्ह्यू, OS सिस्टम डीफॉल्ट प्रिंटरची डीफॉल्ट स्थान म्हणून निवड करेल.</translation>
+      तुम्ही हे सेटिंग सुरू केल्यास, प्रिंट प्रीव्ह्यू, OS सिस्टम डीफॉल्ट प्रिंटरची डीफॉल्ट स्थान म्हणून निवड करेल.</translation>
 <translation id="2872961005593481000">बंद करा</translation>
 <translation id="2874209944580848064">Android अ‍ॅप्सचे समर्थन करणार्‍या <ph name="PRODUCT_OS_NAME" /> डिव्हाइसेेससाठी टीप:</translation>
-<translation id="2877225735001246144">Kerberos प्रमाणीकरण निगोशिएट करताना CNAME पाहणे अक्षम करा</translation>
+<translation id="2877225735001246144">Kerberos अॉथेंटिकेशन नेगोशिएट करताना CNAME पाहणे अक्षम करा</translation>
 <translation id="2893546967669465276">व्यवस्थापन सर्व्हरकडे सिस्टम लॉग पाठवा</translation>
 <translation id="2899002520262095963">Android अॅप्स या धोरणाद्वारे नेटवर्क कॉन्फिगरेशन आणि CA प्रमाणपत्र संचाचा वापर करू शकतात परंतु काही कॉन्फिगरेशन पर्यायांमध्ये त्यांना प्रवेश नसतो.</translation>
 <translation id="290002216614278247">क्लायंटच्या वेळेच्या किंवा दिवसाच्या वापर कोट्याच्या आधारावर तुम्हाला वापरकर्त्याचे सेशन लॉक करू देते.
@@ -822,12 +829,12 @@
       TLS डोमेन-बद्ध प्रमाणपत्रे विस्तार सक्षम केला जावा किंवा नाही हे निर्दिष्ट करते.
 
       हे सेटिंग चाचणीसाठी TLS डोमेन-बद्ध प्रमाणपत्रे सक्षम करण्यासाठी वापरली जाते. भविष्यात हे प्रायोगिक सेटिंग काढले जाईल.</translation>
-<translation id="2957506574938329824">कोणत्याही साइटला Web Bluetooth API द्वारे Bluetooth डिव्हाइसेसमध्ये प्रवेशाची विनंती करण्याची अनुमती देऊ नका</translation>
+<translation id="2957506574938329824">कोणत्याही साइटला Web ब्लूटूथ API द्वारे ब्लूटूथ डिव्हाइसमध्ये अॅक्सेसची विनंती करण्याची अनुमती देऊ नका</translation>
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> प्रमाणीकरणासाठी खाते प्रकार</translation>
 <translation id="2959469725686993410">टाइमझोनचे निराकरण करताना नेहम‍ी सर्व्हरकडे वाय-फाय अॅक्सेस-पॉइंट पाठवा.</translation>
 <translation id="2959898425599642200">प्रॉक्सी स्थलांतर नियम</translation>
 <translation id="2960128438010718932">नवीन अपडेट लागू करण्यासाठी स्टेजिंग शेड्युल</translation>
-<translation id="2960691910306063964">दूरस्थ प्रवेश होस्टसाठी पिन नसलेले प्रमाणीकरण अक्षम किंवा सक्षम करा</translation>
+<translation id="2960691910306063964">रिमोट अॅक्सेस होस्टसाठी पिन नसलेले अॉथेंटिकेशन अक्षम किंवा सक्षम करा</translation>
 <translation id="2976002782221275500">वापरकर्ता इनपुटशिवाय वेळेची लांबी निर्दिष्ट करते ज्यानंतर बॅटरी उर्जेवर चालताना स्क्रीन अंधुक होते.
 
           जेव्हा हे धोरण शून्यापेक्षा मोठ्या मूल्यावर सेट केलेले असते, तेव्हा ते <ph name="PRODUCT_OS_NAME" /> ने स्क्रीन अंधुक करण्यापूर्वी वापरकर्त्याने निष्क्रिय राहणे आवश्यक असणाऱ्या वेळेची लांबी निर्दिष्ट करते.
@@ -843,7 +850,7 @@
 
           हे धोरण सेट केले नसताना, अधिक विशिष्ट धोरणांच्या वर्तनावर कोणताही प्रभाव पडत नाही.</translation>
 <translation id="2987155890997901449">ARC सक्षम करा</translation>
-<translation id="2987227569419001736">Web Bluetooth API चा वापर नियंत्रित करा</translation>
+<translation id="2987227569419001736">Web ब्लूटूथ API चा वापर नियंत्रित करा</translation>
 <translation id="3016255526521614822">Whitelist हे टिपा लिहिण्याचे अ‍ॅप्‍स <ph name="PRODUCT_OS_NAME" /> च्या लॉक स्क्रीनवर चालते</translation>
 <translation id="3021562480854470924">अनुमत असलेल्या माइलस्टोन रोलबॅकची संख्या</translation>
 <translation id="3030000825273123558">मेट्रिक्स अहवाल सक्षम करा</translation>
@@ -989,15 +996,15 @@
 
       हे सेटिंग मध्यम वर सेट केले असल्यास, वापरकर्ता YouTube वरील केवळ मध्यम प्रतिबंधित मोड आणि काटेकोर प्रतिबंधित मोड निवडू शकतो परंतु प्रतिबंधित मोड अक्षम करू शकत नाही.
 
-      हे सेटिंग बंद वर सेट केले असल्यास किंवा कोणतेही मूल्य सेट केले नसल्यास, <ph name="PRODUCT_NAME" /> YouTube वरील प्रतिबंधित मोडची अंमलबजावणी करीत नाही. YouTube धोरणांसारखी बाह्य धोरणे तरीही कदाचित प्रतिबंधित मोडची अंमलबजावणी करतील.</translation>
+      हे सेटिंग बंद वर सेट केले असल्यास किंवा कोणतेही मूल्य सेट केले नसल्यास, <ph name="PRODUCT_NAME" /> YouTube वरील प्रतिबंधित मोडची अंमलबजावणी करत नाही. YouTube धोरणांसारखी बाह्य धोरणे तरीही कदाचित प्रतिबंधित मोडची अंमलबजावणी करतील.</translation>
 <translation id="3428247105888806363">नेटवर्क अंदाज सक्षम करा</translation>
 <translation id="3434932177006334880">Chrome 42 या सेटिंगचे नाव EnableWebBasedSignin होते आणि Chrome 43 मध्ये तिचा सपोर्ट पूर्णतः काढून घेतला जाईल.
 
-      न्यू इनलाइन साइनइन प्रवाहाशी अद्याप सुसंगत नसलेल्या, SSO समाधाने वापरतात अशा एंटरप्राइझ ग्राहकांसाठी ही सेटिंग उपयुक्त आहे.
-तुम्ही ही सेटिंग चालू केल्यास, जुना वेब-आधारित साइनइन प्रवाह वापरला जाईल.
-      तुम्ही ही सेटिंग बंद केल्यास आणि सेट न करता सोडून दिल्यास, डीफॉल्टनुसार नवीन इनलाइन साइनइन प्रवाह वापरला जाईल. वापरकर्ते कमांड लाइन फ्लॅग--चालू केले-वेब-आधारित-साइनइन द्वारे अद्याप जुना वेब आधारित साइनइन प्रवाह वापरू शकतील.
+      न्यू इनलाइन साइनइन प्रवाहाशी अद्याप सुसंगत नसलेल्या, SSO समाधाने वापरतात अशा एंटरप्राइझ ग्राहकांसाठी हे सेटिंग उपयुक्त आहे.
+तुम्ही हे सेटिंग सुरू केल्यास, जुना वेब-आधारित साइनइन प्रवाह वापरला जाईल.
+      तुम्ही हे सेटिंग बंद केल्यास आणि सेट न करता सोडून दिल्यास, बाय डीफॉल्ट नवीन इनलाइन साइनइन प्रवाह वापरला जाईल. वापरकर्ते वेबवर आधारीत साइनइन सुरू करा. या कमांड लाइन फ्लॅगद्वारे अद्याप जुना वेब आधारित साइनइन प्रवाह वापरू शकतील.
 
-      जेव्हा सर्व SSO साइनइन प्रवाहांना इनलाइन साइनइन पू्र्ण सपोर्ट देईल तेव्हा भविष्यकाळात प्रायोगिक सेटिंग काढले जाईल.</translation>
+      जेव्हा सर्व SSO साइनइन प्रवाहांना इनलाइन साइनइन पू्र्ण सपोर्ट देईल, तेव्हा भविष्यकाळात प्रायोगिक सेटिंग काढले जाईल.</translation>
 <translation id="3449886121729668969"><ph name="PRODUCT_NAME" /> साठी प्रॉक्सी सेटिंग्ज कॉन्फिगर करते. या प्रॉक्सी सेटिंग्ज ARC-अॅप्स साठी देखील उपलब्ध असतील.
       हे धोरण अद्याप वापरासाठी तयार नाही, कृपया त्याचा वापर करू नका.</translation>
 <translation id="3460784402832014830">शोध इंजिन एक नवीन टॅब पृष्ठ प्रदान करण्यासाठी वापरते ती URL निर्दिष्ट करते.
@@ -1032,14 +1039,14 @@
           'DefaultSearchProviderEnabled' धोरण सक्षम असल्यासच या धोरणाचा फक्त आदर केला जातो.</translation>
 <translation id="350797926066071931">भाषांतर सक्षम करा</translation>
 <translation id="3512226956150568738">ARC चालवण्यासाठी ext4 वर स्थलांतर करणे आवश्यक असण्यापूर्वी क्लायंट डिव्हाइस मॉडेलने आधीपासूनच ARC ला सपोर्ट दिला असल्यास आणि ArcEnabled धोरण सत्य वर सेट केले असल्यास, हा पर्याय AskUser (मूल्य 3) म्हणून काम करेल. इतर सर्व बाबतींत (डिव्हाइस मॉडेलने आधी ARC ला सपोर्ट दिला नसल्यास किंवा ArcEnabled धोरण असत्य वर सेट केले असल्यास), हे मूल्य DisallowArc (मूल्य 0) च्या समतुल्य असते.</translation>
-<translation id="3513655665999652754">मॉनिटर कॅलिब्रेशन समायोजित करण्यासाठी Quirks सर्व्हर ICC प्रदर्शन प्रोफाइल सारख्या
-      हार्डवेअर-विशिष्ट कॉन्फिगरेशन फायली प्रदान करतो.
+<translation id="3513655665999652754">मॉनिटर कॅलिब्रेशन समायोजित करण्यासाठी Quirks सर्व्हर ICC डिस्प्ले प्रोफाइल सारख्या
+      हार्डवेअर-विशिष्ट कॉंफिगरेशन फायली प्रदान करतो.
 
-      हे धोरण असत्य वर सेट केले असताना, डिव्हाइस कॉन्फिगरेशन फायली डाउनलोड करण्यासाठी
+      हे धोरण असत्य वर सेट केले असताना, डिव्हाइस कॉंफिगरेशन फायली डाउनलोड करण्यासाठी
       Quirks सर्व्हरशी संपर्क करण्याचा प्रयत्न करणार नाही.
 
-      हे धोरण सत्य वर सेट असल्यास किंवा कॉन्फिगर केले नसल्यास <ph name="PRODUCT_OS_NAME" /> आपोआप Quirks सर्व्हरशी संपर्क साधेल आणि उपलब्ध असल्यास कॉन्फिगरेशन फायली डाउनलोड करेल आणि त्या डिव्हाइसवर स्टोअर करेल.  
-अशा फायली उदाहरणार्थ संलग्न केलेल्या मॉनिटरची प्रदर्शन गुणवत्ता सुधारित करण्यासाठी वापरल्या जाऊ शकतात.</translation>
+      हे धोरण सत्य वर सेट असल्यास किंवा कॉन्फिगर केले नसल्यास <ph name="PRODUCT_OS_NAME" /> आपोआप Quirks सर्व्हरशी संपर्क साधेल आणि उपलब्ध असल्यास कॉंफिगरेशन फायली डाउनलोड करेल आणि त्या डिव्हाइसवर स्टोअर करेल.  
+अशा फायली उदाहरणार्थ संलग्न केलेल्या मॉनिटरची डिस्प्ले गुणवत्तामध्ये सुधारणा करण्यासाठी वापरल्या जाऊ शकतात.</translation>
 <translation id="3524204464536655762">WebUSB API द्वारे USB डिव्हाइसच्या अ‍ॅक्सेसची विनंती करण्याची कोणत्याही साइटला अनुमती देऊ नका</translation>
 <translation id="3528000905991875314">वैकल्पिक एरर पेज सक्षम करा</translation>
 <translation id="3545457887306538845">डेव्हलपर टूल कुठे वापरली जाऊ शकतात ते तुम्हाला नियंत्रित करू देते.
@@ -1063,7 +1070,7 @@
       हे धोरण <ph name="MS_AD_NAME" /> डोमेनशी न जोडलेल्या Windows इंस्टंस वर उपलब्ध नाही.</translation>
 <translation id="3577251398714997599">अनाहूत जाहिराती असलेल्या साइटसाठी जाहिराती सेटिंग</translation>
 <translation id="3591584750136265240">लॉग इन प्रमाणीकरण वर्तन कॉन्फिगर करा</translation>
-<translation id="3627678165642179114">शब्दलेखन तपासणी वेब सेवा सक्षम किंवा अक्षम करा</translation>
+<translation id="3627678165642179114">स्पेल चेकर वेब सेवा सक्षम किंवा अक्षम करा</translation>
 <translation id="3631099945620529777">असत्य वर सेट केल्यास कार्य व्यवस्थापकामध्ये प्रक्रिया समाप्त करा बटण बंद करते.
 
       सत्य वर सेट असल्यास परंतु कॉन्फिगर केले नसल्यास वापरकर्ता कार्य व्यवस्थापकामधून प्रक्रिया समाप्त करू शकतो..</translation>
@@ -1099,12 +1106,12 @@
       आपण हे सेटिंग सक्षम केल्यास, आदेश रेखेमधून निर्दिष्‍ट केलेल्या प्रॉक्सीशी संबंधित सर्व पर्यायांकडे <ph name="PRODUCT_NAME" /> दुर्लक्ष करते. 
 
       ही धोरणे सेट न करता सोडल्याने वापरकर्ते त्यांच्या स्वत:साठी प्रॉक्सी सेटिंग्ज निवडण्‍यास सक्षम असतील.</translation>
-<translation id="3758249152301468420">विकसक साधने अक्षम करा</translation>
+<translation id="3758249152301468420">डेव्हलपर टूल अक्षम करा</translation>
 <translation id="3764248359515129699">लेगसी सर्टिफिकेट अधिकाऱ्यांच्या सूचीसाठी सर्टिफिकेट पारदर्शकता आवश्यकतेची अंमलबजावणी बंद करते.
 
-      हे धोरण अशा सर्टिफिकेट शृंखला ज्यांमध्ये एका विशिष्ट subjectPublicKeyInfo हॅशसह असलेली सर्टिफिकेट असतात त्यांसाठी सर्टिफिकेट पारदर्शकता प्रकटन आवश्यकतांना बंद करण्याची अनुमती देते. त्यामुळे एंटरप्राइज होस्ट म्हणून वापरणे सुरू ठेवण्यासाठी ज्या सर्टिफिकेटना योग्यप्रकारे सार्वजनिकरीत्या प्रकट करण्यात आले नव्हते त्यांना अन्यथा अविश्वासार्ह मानले गेले असते परंतु याद्वारे त्यांना अनुमती मिळते.
+      हे धोरण अशा सर्टिफिकेट शृंखला ज्यांमध्ये एका विशिष्ट subjectPublicKeyInfo हॅशसह असलेली सर्टिफिकेट असतात त्यांसाठी सर्टिफिकेट पारदर्शकता प्रकटन आवश्यकतांना बंद करण्याची अनुमती देते. त्यामुळे एंटरप्राइज होस्ट म्हणून वापरणे सुरू ठेवण्यासाठी ज्या सर्टिफिकेटना योग्यप्रकारे सार्वजनिकरत्या प्रकट करण्यात आले नव्हते त्यांना अन्यथा अविश्वासार्ह मानले गेले असते परंतु याद्वारे त्यांना अनुमती मिळते.
 
-      हे धोरण सेट केले असताना सर्टिफिकेट पारदर्शकता अंमलबजावणीला बंद करण्यासाठी, लेगसी सर्टिफिकेट अथॉरिटी (CA) म्हणून ओळखल्या जाणाऱ्या CA सर्टिफिकेटमध्ये असणारी हॅश ही subjectPublicKeyInfo स्वरूपाची असली पाहिजे. लेगसी CA म्हणजे असे CA ज्याला <ph name="PRODUCT_NAME" /> द्वारे सपोर्ट केल्या जाणाऱ्या एक किंवा एकापेक्षा अधिक ऑपरेटिंग सिस्टमद्वारे बाय डीफॉल्ट म्हणून सार्वजनिकरीत्या विश्वासार्ह मानले जाते, पण Android मुक्त स्रोत प्रोजेक्ट किंवा <ph name="PRODUCT_OS_NAME" /> द्वारे विश्वासार्ह मानले जात नाही.
+      हे धोरण सेट केले असताना सर्टिफिकेट पारदर्शकता अंमलबजावणीला बंद करण्यासाठी, लेगसी सर्टिफिकेट अथॉरिटी (CA) म्हणून ओळखल्या जाणाऱ्या CA सर्टिफिकेटमध्ये असणारी हॅश ही subjectPublicKeyInfo स्वरूपाची असली पाहिजे. लेगसी CA म्हणजे असे CA ज्याला <ph name="PRODUCT_NAME" /> द्वारे सपोर्ट केल्या जाणाऱ्या एक किंवा एकापेक्षा अधिक ऑपरेटिंग सिस्टमद्वारे बाय डीफॉल्ट म्हणून सार्वजनिकरत्या विश्वासार्ह मानले जाते, पण Android मुक्त स्रोत प्रोजेक्ट किंवा <ph name="PRODUCT_OS_NAME" /> द्वारे विश्वासार्ह मानले जात नाही.
 
       संबंधित सर्टिफिकेटच्या DER-एनकोडेड subjectPublicKeyInfo लागू केलेल्या हॅश अल्गोरिदमच्या Base६४ एनकोडींग, "/" वर्ण आणि हॅश अल्गोरिदमचे नाव यांना एकत्रित जुळवून subjectPublicKeyInfo हॅशला स्पष्ट केले जाते. RFC ७४६९, विभाग २.४ मध्ये परिभाषित केल्यानुसार SPKI फिंगरप्रिंटच्या फॉरमॅटसारखेच हे Base६४ एनकोडींग असते. ओळखल्या न गेलेल्या हॅश अल्गोरिदमना लक्षात घेतले जात नाही. यावेळी केवळ सपोर्ट असलेला  हॅश अल्गोरिदम "sha२५६" हा आहे.
 
@@ -1120,7 +1127,7 @@
 <translation id="3788662722837364290">वापरकर्ता निष्क्रिय असतो तेव्हा उर्जा व्यवस्थापन सेटिंग्ज</translation>
 <translation id="3793095274466276777"><ph name="PRODUCT_NAME" /> मध्ये डीफॉल्ट ब्राउझर निवडी कॉन्फिगर करते आणि त्यांना बदलण्यापासून वापरकर्त्यांना प्रतिबंधित करते.
 
-	आपण हे सेटिंग सक्षम केल्यास, <ph name="PRODUCT_NAME" /> जरी डिफॉल्ट ब्राउझर असला तरी तो नेहमी सुरवातीला तपासला जातो आणि शक्य असल्यास स्वतःच स्वयंचलितपणे नोंदणी करतो.
+	तुम्ही हे सेटिंग सक्षम केल्यास, <ph name="PRODUCT_NAME" /> जरी डीफॉल्ट ब्राउझर असला तरी तो नेहमी सुरवातीला तपासला जातो आणि शक्य असल्यास स्वतःच आपोआप नोंदणी करतो.
 
 	हे सेटिंग अक्षम असल्यास, तो डीफॉल्ट ब्राउझर असला तरीही <ph name="PRODUCT_NAME" /> ते कधीही तपासणार नाही आणि या पर्यायाच्या सेटिंगसाठी वापरकर्ता नियंत्रणे अक्षम करेल.
 
@@ -1151,14 +1158,14 @@
 
           हे धोरण सेट न करता सोडल्यास, ऑन-स्क्रीन कीबोर्ड सुरुवातीस अक्षम असेल परंतु कोणत्याही वेळी वापरकर्त्याद्वारे सक्षम केला जाऊ शकतो.</translation>
 <translation id="382476126209906314">दूरस्थ प्रवेश होस्टसाठी TalkGadget उपसर्ग कॉ‍न्फिगर करा</translation>
-<translation id="3831376478177535007">ही सेटिंग सुरू केल्यावर, यशस्वीरीत्या पडताळणी केली असल्यास आणि स्वीकृत CA सर्टिफिकेट असल्यास, <ph name="PRODUCT_NAME" /> हे Symantec Corporation च्या लेगसी PKI ऑपरेशनने जारी केलेल्या सर्टिफिकेटांवर विश्वास ठेवण्याची अनुमती देते.
+<translation id="3831376478177535007">ही सेटिंग सुरू केल्यावर, यशस्वीरीत्या पडताळणी केली असल्यास आणि स्वीकृत CA सर्टिफिकेट असल्यास, <ph name="PRODUCT_NAME" /> हे Symantec Corporation च्या लेगसी PKI ऑपरेशनने जारी केलेल्या सर्टिफिकेटंवर विश्वास ठेवण्याची अनुमती देते.
 
-      अजूनही Symantec च्या लेगसी इंफ्रास्ट्रक्चरचे स्वीकृत सर्टिफिकेट असलेल्या ऑपरेटिंग सिस्टमवर हे धोरण अवलंबून आहे, हे लक्षात ठेवा. OS अपडेट अशा सर्टिफिकेटांचे OS हाताळणी बदलत असल्यास, या धोरणावर आता कोणताही परिणाम होणार नाही. पुढे, एंटरप्राइझला लेगसी Symantec सर्टिफिकेटांमधून संक्रमणाला अधिक वेळ देण्यासाठी तात्पुरते वर्कअराउंड देणे हा या धोरणाचा उद्देश आहे. १ जानेवारी २०१९ ला किंवा त्याच्या आसपास हे धोरण काढले जाईल.
+      अजूनही Symantec च्या लेगसी इंफ्रास्ट्रक्चरचे स्वीकृत सर्टिफिकेट असलेल्या ऑपरेटिंग सिस्टमवर हे धोरण अवलंबून आहे, हे लक्षात ठेवा. OS अपडेट अशा सर्टिफिकेटंचे OS हाताळणी बदलत असल्यास, या धोरणावर आता कोणताही परिणाम होणार नाही. पुढे, एंटरप्राइझला लेगसी Symantec सर्टिफिकेटंमधून संक्रमणाला अधिक वेळ देण्यासाठी तात्पुरते वर्कअराउंड देणे हा या धोरणाचा उद्देश आहे. १ जानेवारी २०१९ ला किंवा त्याच्या आसपास हे धोरण काढले जाईल.
 
-      हे धोरण सेट केले नसल्यास किंवा असत्यवर सेट केले असल्यास, सार्वजनिकपणे घोषणा केलेल्या कालबाह्य शेड्युल <ph name="PRODUCT_NAME" /> फॉलो करते.
+      हे धोरण सेट केले नसल्यास किंवा असत्यवर सेट केले असल्यास, सार्वजनिकपणे घोषणा केलेल्या एक्स्पायर शेड्युल <ph name="PRODUCT_NAME" /> फॉलो करते.
 
 
-      या कालबाह्यतेविषयीच्या अधिक तपशीलांसाठी https://g.co/chrome/symantecpkicerts पहा.</translation>
+      या एक्स्पायरतेविषयीच्या अधिक तपशीलांसाठी https://g.co/chrome/symantecpkicerts पहा.</translation>
 <translation id="383466854578875212">कोणते मूळ संदेशन होस्ट काळ्यासूचीच्या अधीन नाहीत हे निर्दिष्ट करण्याची आपल्याला अनुमती देते.
 
           * चे काळीसूची मूल्य म्हणजे सर्व मूळ संदेशन होस्ट काळ्यासूचीमध्ये आहेत आणि केवळ श्वेतसूचीमध्ये सूचीबद्ध असलेले मूळ संदेशन होस्ट लोड केले जातील.
@@ -1169,9 +1176,9 @@
 
 
           हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट पॉपअप सेटिंग' धोरण, ‍किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉन्फिगरेशन वापरले जाईल.</translation>
-<translation id="3851039766298741586">अॅप्लिकेशन आयडी आणि आवृत्ती यासारख्‍या सक्रिय कियॉस्क सत्राविषयी माहितीचा अहवाल द्या.
+<translation id="3851039766298741586">अॅप्लिकेशन आयडी आणि आवृत्ती यासारख्‍या सक्रिय कियॉस्क सेशाविषयी माहितीची तक्रार करा.
 
-      धोरण असत्य वर सेट केल्‍यास, कियॉस्क सत्र माहितीचा अहवाल दिला जाणार नाही. सत्य वर सेट केल्‍यास किंवा सेट न केलेले ठेवल्यास, कियॉस्क सत्र माहितीचा अहवाल दिला जाईल.</translation>
+      धोरण असत्य वर सेट केल्‍यास, कियॉस्क सेश माहितीचा अहवाल दिला जाणार नाही. सत्य वर सेट केल्‍यास किंवा सेट न केलेले ठेवल्यास, कियॉस्क सेश माहितीचा अहवाल दिला जाईल.</translation>
 <translation id="3859780406608282662"><ph name="PRODUCT_OS_NAME" /> मधील तफावत सीड आणण्यासाठी एक मापदंड जोडा.
 
       निर्दिष्ट केले असल्यास, तफावत सीड आणण्यासाठी वापरलेल्या URL वर 'प्रतिबंध' म्हटला जाणारा एक क्वेरी मापदंड जोडला जाईल. मापदंडाचे मूल्य या धोरणामध्ये निर्दिष्ट केलेले मूल्य असेल.
@@ -1188,9 +1195,9 @@
 <translation id="3866249974567520381">वर्णन</translation>
 <translation id="3868347814555911633">हे धोरण केवळ किरकोळ मोडमध्ये असते.
 
-      किरकोळ मोडमधील डिव्हाइसेससाठी, डेमो वापरकर्त्यासाठी स्वयंचलितपणे स्थापन केलेले सूची विस्तार. हे विस्तार डिव्हाइसमध्ये सेव्ह केले जातात आणि स्थापनेनंतर, ऑफलाइन असताना इंस्टॉल केले जाऊ शकतात.
+      किरकोळ मोडमधील डिव्हाइससाठी, डेमो वापरकर्त्यासाठी आपोआप स्थापन केलेले सूची एक्स्टेंशन. हे एक्स्टेंशन डिव्हाइसमध्ये सेव्ह केले जातात आणि स्थापनेनंतर, ऑफलाइन असताना इंस्टॉल केले जाऊ शकतात.
 
-      प्रत्येक सूची प्रविष्टीमध्ये एक शब्दकोश असतो ज्यात 'विस्तार- आयडी ' फील्डमध्ये विस्तार आयडी आणि 'अपडेट-url' फील्डमधील त्याची अपडेट URL समाविष्ट करणे आवश्यक आहे.</translation>
+      प्रत्येक सूची एंट्रीमध्ये एक शब्दकोश असतो ज्यात 'एक्स्टेंशन-id' फील्डमध्ये एक्स्टेंशन ID आणि 'अपडेट-url' फील्डमधील त्याच्या अपडेट URL समाविष्ट करणे आवश्यक आहे.</translation>
 <translation id="3874773863217952418">शोधण्यासाठी टॅप करा सुरू करा</translation>
 <translation id="3877517141460819966">अंतर्गत द्वितीय घटक प्रमाणीकरण मोड</translation>
 <translation id="3879208481373875102">सक्तीने इंस्टॉल केलेल्या वेब अॅप्सची सूची कॉन्फिगर करा</translation>
@@ -1221,13 +1228,26 @@
 <translation id="3939893074578116847">डिव्‍हाइस ऑफलाइन आहे किंवा नाही ते शोधण्‍याची सर्व्हरला अनुमती देण्‍यासाठी ऑनलाइन स्थितीचे परीक्षण
       करण्‍याकरिता नेटवर्क पॅकेट व्यवस्थापन सर्व्हरकडे पाठवा.
 
-      हे धोरण सत्य वर सेट केल्‍यास, नेटवर्क पॅकेटचे परीक्षण (<ph name="HEARTBEATS_TERM" /> म्हणविले जाणारे) पाठविले जातील.
-      असत्य वर सेट केल्‍यास किंवा सेट न असल्‍यास, कोणतेही पॅकेट पाठविले जाणार नाहीत.</translation>
+      हे धोरण सत्य वर सेट केल्‍यास, नेटवर्क पॅकेटचे परीक्षण (<ph name="HEARTBEATS_TERM" /> म्हणवले जाणारे) पाठवले जातील.
+      असत्य वर सेट केल्‍यास किंवा सेट न असल्‍यास, कोणतेही पॅकेट पाठवले जाणार नाहीत.</translation>
 <translation id="3950239119790560549">वेळ प्रतिबंध अपडेट करा</translation>
-<translation id="3958586912393694012">Smart Lock वापरता येण्यासाठी अनुमती देते</translation>
-<translation id="3963602271515417124">सत्य असल्यास, डिव्हाइससाठी दूरस्थ अनुप्रमाणन अनुमत आहे आणि एक प्रमाणपत्र स्वयंचलितपणे व्युत्पन्न केले जाईल आणि डिव्हाइस व्यवस्थापन सर्व्हरवर अपलोड केले जाईल.
+<translation id="3957134519352019843">डीफॉल्ट सर्च प्रोव्हायडरचा वापर सक्षम करते
 
-          हे असत्य वर सेट असल्यास किंवा ते सेट केले नसल्यास, कोणतेही प्रमाणपत्र व्युत्पन्न केले जाणार नाही आणि enterprise.platformKeysPrivate विस्तार API वरील कॉल अयशस्वी होतील.</translation>
+तुम्ही हे सेटिंग सुरू केल्यास, वापरकर्त्याने URL नसलेल्या अॉम्निबॉक्समध्ये काही टाइप केल्यास डीफॉल्ट शोध घेतला जातो.
+
+तुम्ही ऊर्वरित शोध धोरणे सेट करून कोणता डीफॉल्ट शोध पुरवठादार वापरायचा हे ठरवू शकता.
+
+तुम्ही हे सेटिंग अक्षम केल्यास वापरकर्त्याने URL नसलेल्या अॉम्निबॉक्समध्ये काही टाइप केल्यास शोध घेतला जाणार नाही.
+
+तुम्ही हे सेटिंग सक्षम किंवा अक्षम केल्यास वापरकर्ता <ph name="PRODUCT_NAME" /> मधील सेटिंगला बदलू शकणार नाही किंवा ओव्हरराइड करू शकणार नाही.
+
+हे धोरण सेट न केल्यास डीफॉल्ट शोध पुरवठादार सक्षम होतो आणि वापरकर्त्याला डीफॉल्ट शोध पुरवठादार यादी सेट करता येते.
+
+<ph name="MS_AD_NAME" /> डोमेनला न जोडलेल्या Windows इंस्टंटवर हे धोरण उपलब्ध नाही.</translation>
+<translation id="3958586912393694012">Smart Lock वापरता येण्यासाठी अनुमती देते</translation>
+<translation id="3963602271515417124">सत्य असल्यास, डिव्हाइससाठी दूरस्थ अनुप्रमाणन अनुमत आहे आणि एक सर्टिफिकेट आपोआप व्युत्पन्न केले जाईल आणि डिव्हाइस व्यवस्थापन सर्व्हरवर अपलोड केले जाईल.
+
+          हे असत्य वर सेट असल्यास किंवा ते सेट केले नसल्यास, कोणतेही सर्टिफिकेट व्युत्पन्न केले जाणार नाही आणि enterprise.platformKeysPrivate एक्स्टेंशन API वरील कॉल अयशस्वी होतील.</translation>
 <translation id="3965339130942650562">निष्क्रिय वापरकर्ता लॉग-आउट होईपर्यंत कालबाह्य</translation>
 <translation id="3973371701361892765">शेल्फ कधीही स्वयं-लपवू नका</translation>
 <translation id="3984028218719007910">लॉगआउट केल्यानंतर <ph name="PRODUCT_OS_NAME" /> ने स्थानिक खाते डेटा ठेवावा किंवा नाही ते निर्धारित करते. खरे वर सेट केल्यास, <ph name="PRODUCT_OS_NAME" /> कडून कोणतीही सातत्यपूर्ण खाती ठेवली जात नाही आणि वापरकर्ता सत्रातील सर्व डेटा लॉग आऊटनंतर काढून टाकण्यात येतो. हे धोरण चुकीचे वर सेट केले असल्यास किंवा कॉन्फिगर केले नसल्यास, डिव्हाइस स्थानिक वापरकर्ता डेटा (कूटबद्ध केलेला) ठेऊ शकते.</translation>
@@ -1271,14 +1291,14 @@
           जेव्हा हे धोरण सेट केलेले नसते, तेव्हा वेळेची डीफॉल्ट लांबी वापरली जाते.
 
           धोरण मूल्य मिलिसेकंदांमध्ये निर्दिष्ट केले जावे.</translation>
-<translation id="4105989332710272578">URL च्या सूचीसाठी प्रमाणपत्र पारदर्शकता अंमलबजावणी अक्षम करा</translation>
+<translation id="4105989332710272578">URL च्या सूचीसाठी सर्टिफिकेट पारदर्शकता अंमलबजावणी अक्षम करा</translation>
 <translation id="4111405663956464686">चेतावणी: कमाल TLS आवृत्ती धोरण <ph name="PRODUCT_NAME" /> च्या साधारणपणे 72 आवृत्त्यांमधून (जानेवारी 2019 पर्यंतच्या) संपूर्णपणे काढण्यात येईल.
 
       हे धोरण कॉन्फिगर न केल्यास <ph name="PRODUCT_NAME" /> हे डिफॉल्ट कमाल आवृत्ती वापरते.
 
       अन्यथा ते पुढील मूल्यांवर सेट केले जाऊ शकते: "tls1.2" किंवा "tls1.3". सेट केल्यावर, <ph name="PRODUCT_NAME" /> निर्दिष्ट केलेल्या आवृत्तीपेक्षा मोठ्या असलेल्या SSL/TLS आवृत्त्या वापरणार नाही. एक न ओळखलेले मूल्य दुर्लक्षित केले जाईल.</translation>
 <translation id="4121350739760194865">अॅप्लिकेशन जाहिरातींना नवीन टॅब पृष्ठावर दिसण्यापासून प्रतिबंधित करा</translation>
-<translation id="4125606414556046117">हे धोरण तुम्हाला डेस्कटॉपवर दैखवण्यात आलेली वॉलपेपर इमेज आणि वापरकर्त्यासाठी लॉगइन स्क्रीन पार्श्वभूमी कॉन्फिगर करू देते. हे धोरण एक URL निर्दिष्ट करून सेट करण्यात आले आहे जेथून <ph name="PRODUCT_OS_NAME" /> वॉलपेपर इमेज डाउनलोड करू शकते आणि डाउनलोडच्या अखंडतेची पडताळणी करण्यासाठी एक क्रिप्टोग्राफिक हॅश वापरला जातो. इमेज JPEG स्वरूपात असली पाहिजे, तिचा आकार 16MBपेक्षा मोठा नसावा. URL प्रमाणीकरणाशिवाय अॅक्सेस करण्यायोग्य असावी.
+<translation id="4125606414556046117">हे धोरण तुम्हाला डेस्कटॉपवर दैखवण्यात आलेली वॉलपेपर इमेज आणि वापरकर्त्यासाठी लॉगइन स्क्रीन बॅकग्राउंड कॉन्फिगर करू देते. हे धोरण एक URL निर्दिष्ट करून सेट करण्यात आले आहे जेथून <ph name="PRODUCT_OS_NAME" /> वॉलपेपर इमेज डाउनलोड करू शकते आणि डाउनलोडच्या अखंडतेची पडताळणी करण्यासाठी एक क्रिप्टोग्राफिक हॅश वापरला जातो. इमेज JPEG स्वरूपात असली पाहिजे, तिचा आकार 16MBपेक्षा मोठा नसावा. URL अॉथेंटिकेशनाशिवाय अॅक्सेस करण्यायोग्य असावी.
 
       वॉलपेेपर इमेज डाउनलोड आणि कॅशे  केली जाते. URL किंवा हॅश बदलतो तेव्हा ती पुन्हा डाउनलोड केली जाईल.
 
@@ -1369,14 +1389,14 @@
 <translation id="4285674129118156176">ARC वापरण्‍यासाठी असंबद्ध वापरकर्त्‍यांना अनुमती द्या</translation>
 <translation id="4298509794364745131"><ph name="PRODUCT_OS_NAME" /> च्या लॉकस्क्रीनवर एक टीप लिहिण्याचे अ‍ॅप म्हणून वापरता येईल अशा अ‍ॅप्सची सूची निर्दिष्ट करते. 
 
-      प्राधान्‍य असलेले टीप लिहून घेण्‍याचे अॅप लॉक स्‍क्रीनवर चालू केलेले असल्‍यास, लॉक स्‍क्रीनमध्‍ये टीप लिहून घेण्‍याचे अॅप लाँच करण्‍यासाठी UI घटकाचा समावेश केला जाईल.
-      लाँच केल्‍यावर, अॅप लॉक स्‍क्रीनच्‍या शीर्षस्‍थानी अॅप विंडो आणि लॉक स्‍क्रीनच्‍या संदर्भामध्‍ये डेटा आयटम (टिपा) तयार करू शकेल. सत्र अनलॉक असताना अॅप लिहिलेल्‍या टिपा प्रा‍थमिक वापरकर्ता सत्रात आयात करू शकता. सध्या लॉक स्क्रीनवर फक्त Chrome च्या टीप घेण्याच्या अ‍ॅप्सना सपोर्ट दिला जातो.
+      प्राधान्‍य असलेले टीप लिहून घेण्‍याचे अॅप लॉक स्‍क्रीनवर सुरू केलेले असल्‍यास, लॉक स्‍क्रीनमध्‍ये टीप लिहून घेण्‍याचे अॅप लाँच करण्‍यासाठी UI घटकाचा समावेश केला जाईल.
+      लाँच केल्‍यावर, अॅप लॉक स्‍क्रीनच्‍या शीर्षस्‍थानी अॅप विंडो आणि लॉक स्‍क्रीनच्‍या संदर्भामध्‍ये डेटा आयटम (टिपा) तयार करू शकेल. सेशन अनलॉक असताना अॅप लिहिलेल्‍या टिपा प्रा‍थमिक वापरकर्ता सेशनात आयात करू शकता. सध्या लॉक स्क्रीनवर फक्त Chrome च्या टीप घेण्याच्या अ‍ॅप्सना सपोर्ट दिला जातो.
 
-      धोरण सेट केले असल्यास वापरकर्त्याला अ‍ॅप चालू करण्याची परवानगी तेव्हाच असेल जेव्हा अ‍ॅपच्या विस्तार आयडीचा धोरण सूची मूल्यात समावेश असेल.
+      धोरण सेट केले असल्यास वापरकर्त्याला अ‍ॅप सुरू करण्याची परवानगी तेव्हाच असेल जेव्हा अ‍ॅपच्या एक्स्टेंशन आयडीचा धोरण सूची मूल्यात समावेश असेल.
       त्याचा परिणाम म्हणजे या धोरणाचा वापर बंद करणे निवडल्यास लॉक स्क्रीनवर टीप लिहिणे संपूर्णत: बंद करेल. 
       धोरणात अ‍ॅप आयडी असल्यास वापरकर्ता टीप लिहिण्यासाठीचे अ‍ॅप लॉक स्क्रीनवर वापरू शकेल हे गरजेचे नाही याची नोंद घ्या - उदाहरणार्थ, Chrome 61 वर उपलब्ध अ‍ॅप्सचा संचसुद्धा प्लॅटफॉर्मकडून प्रतिबंधित करण्यात आलेला आहे.
 
-      धोरण सेट न केलेले असल्यास अ‍ॅप्सच्या संचावर धोरणाने लागू केलेल्या बंधनांपैकी कोणतीही बंधने वापरकर्ता लॉकस्क्रीनवरून चालू करू शकत नाही.</translation>
+      धोरण सेट न केलेले असल्यास अ‍ॅप्सच्या संचावर धोरणाने लागू केलेल्या बंधनांपैकी कोणतीही बंधने वापरकर्ता लॉकस्क्रीनवरून सुरू करू शकत नाही.</translation>
 <translation id="4309640770189628899">TLS मधील DHE सायफर संच सक्षम आहेत किंवा नाहीत</translation>
 <translation id="4322842393287974810">विलंब न होणाऱ्या कियोस्क अॅपसह स्वयं लाँच केलेली <ph name="PRODUCT_OS_NAME" /> आवृत्ती नियंत्रित करण्याची अनुमती द्या</translation>
 <translation id="4325690621216251241">सिस्टम ट्रेवर लॉगआउट बटण जोडा</translation>
@@ -1406,7 +1426,7 @@
 <translation id="437791893267799639">पॉलिसी सेट करणे रद्द केले, डेटा स्‍थलांतर आणि ARC करण्‍याची अनुमती रद्द करा</translation>
 <translation id="4389091865841123886">TPM यंत्रणेसह दूरस्थ अनुप्रमाणन कॉन्फिगर करा.</translation>
 <translation id="4410236409016356088">थ्रॉटलिंग नेटवर्क बँडविड्थ सुरू करा</translation>
-<translation id="441217499641439905"><ph name="PRODUCT_OS_NAME" /> याच्या फायलींच्या अॅपमध्ये मोबाइल कनेक्शनचा वापर करताना Google Drive बंद करा</translation>
+<translation id="441217499641439905"><ph name="PRODUCT_OS_NAME" /> च्या Files अॅपमध्ये मोबाइल कनेक्शनचा वापर करताना Google Drive बंद करा</translation>
 <translation id="4415603335307944578">हे धोरण सत्य वर सेट केले असल्यास किंवा कॉन्फिगर केले नसल्यास, OS अपग्रेडच्या पहिल्या लाँचच्या वेळी ब्राउझर वेलकम पेज पुन्हा दाखवेल.
 
       हे धोरण असत्य वर सेट केले असल्यास, OS अपग्रेडच्या पहिल्या लाँचच्या वेळी ब्राउझर वेलकम पेज पुन्हा दाखवणार नाही..</translation>
@@ -1435,16 +1455,16 @@
 <translation id="4474167089968829729">पासवर्ड व्यवस्थापकामध्‍ये पासवर्ड सेव्ह करणे सक्षम करा</translation>
 <translation id="4476769083125004742">हे धोरण <ph name="BLOCK_GEOLOCATION_SETTING" /> वर सेट केले असल्यास, Android अॅप्स स्थान माहितीमध्ये प्रवेश करू शकत नाही. आपण हे धोरण अन्य कोणत्याही मूल्यावर सेट केल्यास किंवा अनसेट केलेले ठेवल्यास, Android अॅप स्थान माहितीमध्ये प्रवेश करू इच्छितो तेव्हा वापरकर्त्यास संमती देण्यास सांगितले जाईल.</translation>
 <translation id="4480694116501920047">सक्तीचा सुरक्षितशोध</translation>
-<translation id="4482640907922304445"><ph name="PRODUCT_NAME" />च्या टुलबारवर होम बटण दर्शव‍ते.
+<translation id="4482640907922304445"><ph name="PRODUCT_NAME" />च्या टूलबारवर होम बटण दर्शव‍ते.
 
-      आपण हे सेटिंग सक्षम केल्यास, होम बटण नेहमीच दर्शविण्‍यात येते.
+      तुम्ही हे सेटिंग सक्षम केल्यास, होम बटण नेहमीच दर्शविण्‍यात येते.
 
-      आपण हे सेटिंग अक्षम केल्यास, होम बटण कधीही दर्शविण्‍यात येत नाही.
+      तुम्ही हे सेटिंग अक्षम केल्यास, होम बटण कधीही दर्शविण्‍यात येत नाही.
 
-      आपण हे सेटिंग सक्षम किंवा अक्षम केल्यास, वापरकर्ते <ph name="PRODUCT_NAME" /> मध्‍ये हे सेटिंग बदलू किंवा अधिलिखित करु शकत नाहीत.
+      तुम्ही हे सेटिंग सक्षम किंवा अक्षम केल्यास, वापरकर्ते <ph name="PRODUCT_NAME" /> मध्‍ये हे सेटिंग बदलू किंवा ओव्हरराइड करु शकत नाहीत.
 
       हे धोरण सेट न करता सोडल्यास वापरकर्त्यांना होम बटण दर्शवायचे की नाही ते निवडण्‍याची अनुमती मिळेल.</translation>
-<translation id="4483649828988077221">स्‍वयंचलित अपडेट बंद करा</translation>
+<translation id="4483649828988077221">अॉटो अपडेट बंद करा</translation>
 <translation id="4485425108474077672">नवीन टॅब पृष्‍ठ URL कॉन्फिगर करा</translation>
 <translation id="4492287494009043413">स्क्रीनशॉट घेणे अक्षम करा</translation>
 <translation id="450537894712826981">डिस्‍कवर कॅश   केलेल्‍या मीडिया फायली संचयन करण्‍यासाठी <ph name="PRODUCT_NAME" /> वापर करेल त्‍या कॅश   आकारास कॉन्‍फिगर करते.
@@ -1459,16 +1479,16 @@
           हे धोरण असत्य वर सेट केल्यास, <ph name="PRODUCT_NAME" /> बंद केले जाईल.</translation>
 <translation id="4515404363392014383">विश्वासनीय स्त्रोतांसाठी सुरक्षित ब्राउझिंग सुरू करा</translation>
 <translation id="4518251772179446575">एखादी साइट वापरकर्त्याचे प्रत्यक्ष स्थान ट्रॅक करू इच्छित असेल तेव्हा विचारा</translation>
-<translation id="4519046672992331730"><ph name="PRODUCT_NAME" /> च्या ओम्निबॉक्समध्ये शोध सूचना सक्षम करते आणि वापरकर्त्यांना हे सेटिंग बदलण्‍यापासून प्रतिबंध करते. 
+<translation id="4519046672992331730"><ph name="PRODUCT_NAME" /> च्या विविधोपयोगी क्षेत्रात शोध सूचना सक्षम करते आणि वापरकर्त्यांना हे सेटिंग बदलण्‍यापासून प्रतिबंध करते. 
 
 
-      आपण हे सेटिंग सक्षम केल्यास, शोध सूचना वापरल्या जातात.  
+      तुम्ही हे सेटिंग सक्षम केल्यास, शोध सूचना वापरल्या जातात.  
 
-      आपण हे सेटिंग अक्षम केल्यास, शोध सूचना कधीही वापरल्या जात नाहीत.
+      तुम्ही हे सेटिंग अक्षम केल्यास, शोध सूचना कधीही वापरल्या जात नाहीत.
 
-      आपण हे सेटिंग सक्षम किंवा अक्षम केल्यास, <ph name="PRODUCT_NAME" /> मध्‍ये वापरकर्ते हे सेटिंग बदलू किंवा अधिलिखित करु शकत नाहीत.
+      तुम्ही हे सेटिंग सक्षम किंवा अक्षम केल्यास, <ph name="PRODUCT_NAME" /> मध्‍ये वापरकर्ते हे सेटिंग बदलू किंवा ओव्हरराइड करु शकत नाहीत.
 
-      हे धोरण सेट न करता सोडल्यास, हे सक्षम केले जाईल परंतु वापरकर्ता हे बदलण्‍यास सक्षम असेल.</translation>
+हे धोरण सेट न करता सोडल्यास, हे सक्षम केले जाईल परंतु वापरकर्ता हे बदलण्‍यास सक्षम असेल.</translation>
 <translation id="4531706050939927436">Google Play वापरून प्रशासक कन्सोल मधून Android अॅप्स सक्तीने-इंस्टॉल केले जाऊ शकतात. ते या धोरणाचा वापर करीत नाही.</translation>
 <translation id="4534500438517478692">Android प्रतिबंध नाव:</translation>
 <translation id="4541530620466526913">डिव्हाइस-स्थानिक खाती</translation>
@@ -1476,7 +1496,7 @@
 
           हे धोरण वेगवेगळ्या सेटिंग्जचे नियंत्रण करते, ज्यामध्ये एक्सटेंशनशी संबंधित कुठल्याही सद्य धोरणांचा समावेश असतो. दोन्ही गोष्टी सेट केल्या असल्यास, हे धोरण कुठल्याही परंपरागत धोरणाला ओव्हरराइड करेल.
 
-          हे धोरण एक्सटेन्शन आयडी किंवा अपडेट संबंधित URL आपापल्या कॉन्फिगरेशमध्ये जोडून घेते. एक्सटेन्शन आयडीच्या साह्याने, कॉन्फिगरेशन हे ठराविक एक्सटेन्शनलाच लागू केले जाईल. विशेष आयडी <ph name="DEFAULT_SCOPE" /> साठी एखादे डिफॉल्ट कॉन्फिगरेशन सेट केले जाईल, जे त्या सर्व एक्सटेन्शनना लागू केले जाईल, ज्यांच्या धोरणांत कस्टम कॉन्फिगरेशन सेट केलेली नाहीत. अपडेट च्या URL सह, कॉन्फिगरेशन हे सर्व एक्सटेन्शनना, त्यांच्या मॅनिफेस्टमध्ये <ph name="LINK_TO_EXTENSION_DOC1" /> वर सांगितल्यानुसार अपडेटच्या नेमक्या URL सह लागू केले जाईल.
+          हे धोरण एक्स्टेंशन आयडी किंवा अपडेट संबंधित URL आपापल्या कॉन्फिगरेशमध्ये जोडून घेते. एक्स्टेंशन आयडीच्या साह्याने, कॉन्फिगरेशन हे ठराविक एक्स्टेंशनलाच लागू केले जाईल. विशेष आयडी <ph name="DEFAULT_SCOPE" /> साठी एखादे डिफॉल्ट कॉन्फिगरेशन सेट केले जाईल, जे त्या सर्व एक्स्टेंशनना लागू केले जाईल, ज्यांच्या धोरणांत कस्टम कॉन्फिगरेशन सेट केलेली नाहीत. अपडेट च्या URL सह, कॉन्फिगरेशन हे सर्व एक्स्टेंशनना, त्यांच्या मॅनिफेस्टमध्ये <ph name="LINK_TO_EXTENSION_DOC1" /> वर सांगितल्यानुसार अपडेटच्या नेमक्या URL सह लागू केले जाईल.
 
           या धोरणाच्या संपूर्ण तपशील आणि योग्य सेटिंग्ज व रचनेसाठी कृपया https://www.chromium.org/administrators/policy-list-3/extension-settings-full ला भेट द्या
           </translation>
@@ -1631,9 +1651,9 @@
 <translation id="4962262530309732070">हे धोरण सत्य म्हणून सेट केले असल्‍यास किंवा कॉन्फिगर केले नसल्‍यास, <ph name="PRODUCT_NAME" /> वापरकर्ता व्यवस्थापकाकडून व्यक्ती जोडण्यास अनुमती देईल.
 
      हे धोरण असत्य म्हणून सेट केले असल्‍यास, <ph name="PRODUCT_NAME" /> प्रोफाइल व्यवस्थापकाकडून नवीन प्रोफाइल तयार करण्याची अनुमती देणार नाही.</translation>
-<translation id="4971529314808359013">साइटने प्रमाणपत्राची विनंती केल्यास, ज्या साइटसाठी <ph name="PRODUCT_NAME" /> ने स्वयंचलितपणे क्लायंट प्रमाणपत्र निवडावे त्या साइट निर्दिष्‍ट करते त्या url नमुन्यांची एक सूची निर्दिष्ट करण्‍याची आपल्‍याला अनुमती देते.
+<translation id="4971529314808359013">साइटने सर्टिफिकेटची विनंती केल्यास, ज्या साइटसाठी <ph name="PRODUCT_NAME" /> ने आपोआप क्लायंट सर्टिफिकेट निवडावे त्या साइट निर्दिष्‍ट करते त्या url नमुन्यांची एक सूची निर्दिष्ट करण्‍याची आपल्‍याला अनुमती देते.
 
-          मूल्य हे JSON शब्दकोशाच्या स्ट्रिंग असलेले अॅरे असणे आवश्‍यक आहे. प्रत्येक शब्दकोशात { "pattern": "$URL_PATTERN", "filter" : $FILTER } स्वरूपन असणे आवश्‍यक आहे ज्यामध्‍ये $URL_PATTERN हे सामग्री सेटिंग नमुना असतो. $FILTER मर्यादित करेल की कोणत्या प्रमाणपत्रांवरुन ब्राउझर स्वयंचलितपणे निवडेल. फिल्टरवर अवलंबून नसलेली, फक्त सर्व्हरच्या प्रमाणपत्र विनंतीशी जुळणारी प्रमाणपत्रे निवडली जातील. $FILTER मध्‍ये { "ISSUER": { "CN": "$ISSUER_CN" } } स्वरूपन असल्‍यास, अतिरिक्तपणे केवळ क्लायंट प्रमाणपत्रे निवडली जातात जी CommonName $ISSUER_CN असलेल्‍या प्रमाणपत्राद्वारे जारी केली जातात. $FILTER {} रिक्त शब्दकोश असल्यास, अतिरिक्तपणे क्लायंट प्रमाणपत्रांची निवड मर्यादित केली जात नाही.
+          मूल्य हे JSON शब्दकोशाच्या स्ट्रिंग असलेले अॅरे असणे आवश्‍यक आहे. प्रत्येक शब्दकोशात { "pattern": "$URL_PATTERN", "filter" : $FILTER } स्वरूपन असणे आवश्‍यक आहे ज्यामध्‍ये $URL_PATTERN हे आशय सेटिंग नमुना असतो. $FILTER मर्यादित करेल की कोणत्या सर्टिफिकेटंवरुन ब्राउझर आपोआप निवडेल. फिल्टरवर अवलंबून नसलेली, फक्त सर्व्हरच्या सर्टिफिकेट विनंतीशी जुळणारी सर्टिफिकेट निवडली जातील. $FILTER मध्‍ये { "ISSUER": { "CN": "$ISSUER_CN" } } स्वरूपन असल्‍यास, अतिरिक्तपणे केवळ क्लायंट सर्टिफिकेट निवडली जातात जी CommonName $ISSUER_CN असलेल्‍या सर्टिफिकेटद्वारे जारी केली जातात. $FILTER {} रिक्त शब्दकोश असल्यास, अतिरिक्तपणे क्लायंट सर्टिफिकेटंची निवड मर्यादित केली जात नाही.
 
           हे धोरण सेट न केलेले ठेवल्‍यास, कोणत्याही साइटसाठी स्वयं-निवड केली जात नाही.</translation>
 <translation id="4978405676361550165">"OffHours" धोरण सेट केले असल्यास, निर्धारित कालावधी मध्यंतरांच्या दरम्यान निर्दिष्ट केलेली डिव्हाइस धोरणे दुर्लक्षित केली जातात (या धोरणांची डीफॉल्ट सेटिंग्ज वापरा). प्रत्येक "OffHours" कालावधी सुरू किंवा बंद झाल्यावर Chrome प्रत्येक इव्हेंटवर डिव्हाइस धोरणे पुन्हा लागू करते. "OffHours" कालावधी संपल्यावर आणि डिव्हाइस धोरण सेटिंग्ज बदलल्यावर वापरकर्त्याला सूचित केले जाईल आणि साइन आउट करण्यास भाग पाडले जाईल (उदा. वापरकर्त्याने अनुमती नसलेल्या खात्यासह लॉग इन केले असताना).</translation>
@@ -1664,6 +1684,15 @@
       धोरण शून्‍य वर सेट केल्यास, मशीन खाते पासवर्ड बदलणे बंद केले जाते.
 
       लक्षात ठेवा की क्लायंट जास्त वेळ ऑफलाइन असल्यास पासवर्ड नमूद केलेल्या दिवसांच्या संख्येपेक्षा जास्त जुना असेल.</translation>
+<translation id="5102187683953991824"><ph name="PRODUCT_NAME" /> विश्वसनीय स्रोताकडून असेल तेव्हा सुरक्षित ब्राउझिंगशिवाय डाउनलोडला परवानगी देऊ शकेल का हे पाहा.
+
+हे असत्य असेल तेव्हा विश्वसनीय स्रोताकडून असल्यास डाउनलोड केलेल्या फायलींचे सुरक्षित ब्राउझिंगमध्ये विश्लेषण केले जाणार नाही.
+   
+सेट केलेले नसल्यास (किंवा सत्यवर सेट केलेले असल्यास) विश्वसनीय स्रोताकडून असल्या तरी डाउनलोड केलेल्या फायलींचे सुरक्षित ब्राउझिंगमध्ये विश्लेषण केले जाईल.
+
+लक्षात घ्या, की ही बंधने केवळ वेब पेज अाशयामुळे डाउनलोड झालेल्या तसेच डाउनलोड लिंक… कॉंटेक्स्ट मेनू पर्यायामुळे डाउनलोड झालेल्या डाउनलोडला लागू आहे. ही बंधने सध्या डिस्प्ले होत असलेल्या पेजच्या सेव्ह / डाउनलोडला किंवा प्रिंट पर्यायांमधील पीडीएफ म्हणून सेव्ह करा या पर्यायाला लागू होत नाहीत.
+
+हे धोरण <ph name="MS_AD_NAME" /> डोमेनला न जोडलेल्या Windows इंस्टंसवर उपलब्ध नाही.</translation>
 <translation id="5105313908130842249">बॅटरी उर्जेवर चालताना स्क्रीन लॉक विलंब</translation>
 <translation id="5108031557082757679">बंद केलेले एंटरप्राइझ डीव्हाइस प्रिंटर</translation>
 <translation id="5130288486815037971">TLS मधील RC4 सायफर संच सक्षम केले आहे किंवा नाही</translation>
@@ -1692,10 +1721,10 @@
 
           डीफॉल्टनुसार, सर्व विस्तार श्वेतसूचीबद्ध आहेत, परंतु सर्व विस्तार धोरणानुसार काळीसूचीबद्ध असल्यास ते धोरण अधिलिखित करण्यासाठी श्वेतसूची वापरली गेली जाऊ शकते.</translation>
 <translation id="519247340330463721">सुरक्षित ब्राउझिंग संबंधित धोरणे कॉन्फिगर करा.</translation>
-<translation id="5192837635164433517">वैकल्पिक एररच्या पृष्ठांचा वापर करण्यास सक्षम करते जी <ph name="PRODUCT_NAME" /> (जसे की 'पृष्‍ठ आढळले नाही') मध्ये तयार केलेले असते आणि हे सेटिंग बदलण्यापासून वापरकर्त्यांना प्रतिबंधित करते.
-आपण हे सेटिंग सक्षम केल्यास, वैकल्पिक एरर पृ्ष्‍ठे वापरली जातात.
-आपण हे सेटिंग अक्षम केल्यास, वैकल्पिक एरर पृष्‍ठे कधीही वापरली जात नाहीत.
-आपण हे सेटिंग सक्षम किंवा अक्षम केल्यास, वापरकर्ते <ph name="PRODUCT_NAME" /> मध्‍ये हे सेटिंग बदलू किंवा अधिलिखित करु शकत नाहीत..
+<translation id="5192837635164433517">वैकल्पिक एररच्या पेजंचा वापर करण्यास सक्षम करते जी <ph name="PRODUCT_NAME" /> (जसे की 'पेज आढळले नाही') मध्ये तयार केलेले असते आणि हे सेटिंग बदलण्यापासून वापरकर्त्यांना प्रतिबंधित करते.
+तुम्ही हे सेटिंग सक्षम केल्यास, वैकल्पिक एरर पेज वापरली जातात.
+तुम्ही हे सेटिंग अक्षम केल्यास, वैकल्पिक एरर पेज कधीही वापरली जात नाहीत.
+तुम्ही हे सेटिंग सक्षम किंवा अक्षम केल्यास, वापरकर्ते <ph name="PRODUCT_NAME" /> मध्‍ये हे सेटिंग बदलू किंवा ओव्हरराइड करु शकत नाहीत.
 हे धोरण सेट न करता सोडल्यास, हे सक्षम करण्‍यात येईल परंतु वापरकर्ता ते बदलण्यात सक्षम होईल.</translation>
 <translation id="5196805177499964601">विकसक मोड अवरोधित करा.
 
@@ -1707,26 +1736,37 @@
       धोरण चुकीचे सेट केले असल्यास, टॅब लाइफसायकल बंद होतात आणि सर्व टॅब सामान्यपणे सुरू राहतील.
 
       धोरण बरोबरवर सेट केले असल्यास किंवा निर्दिष्ट न करता सोडून दिले असल्यास, टॅब लाइफसायकल सुरू होतील.</translation>
-<translation id="5208240613060747912">सूचना प्रदर्शित करण्‍याची अनुमती नसलेल्या साइट निर्दिष्‍ट करणार्‍या url नमुन्यांची सूची सेट करण्‍याची आपल्याला अनुमती देते. 
+<translation id="5208240613060747912">सूचना डिस्प्ले करण्‍याची अनुमती नसलेल्या साइट निर्दिष्‍ट करणार्‍या url नमुन्यांची सूची सेट करण्‍याची तुम्हाला अनुमती देते. 
 
 
-          हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट सूचना सेटिंग' धोरण, ‍किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉन्फिगरेशन वापरले जाईल.</translation>
+          हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट सूचना सेटिंग' धोरण, ‍किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉंफिगरेशन वापरले जाईल.</translation>
 <translation id="5219844027738217407">Android अॅप्ससाठी, हे धोरण केवळ मायक्रोफोनला प्रभावित करते. हे धोरण सत्य वर सेट केले असते तेव्हा, कोणत्याही अपवादांशिवाय सर्व  Android अॅप्ससाठी मायक्रोफोन नि:शब्द केला जातो.</translation>
 <translation id="523505283826916779">प्रवेशयोग्यता सेटिंग्ज</translation>
+<translation id="5235958368503433463"><ph name="PRODUCT_NAME" /> मधील डीफॉल्ट होम पेजचा प्रकार कॉन्फिगर करते आणि वापरकर्त्यास होम पेज प्राधान्ये बदलण्यापासून प्रतिबंधित करते. होम पेज एकतर तुम्हाला हव्या असलेल्या URL वर किंवा नवा टॅब पेजवर सेट करता येते.
+
+तुम्ही हे सेटिंग सक्षम केले, तर होम पेजसाठी नवा टॅब पेज वापरण्यात येते आणि होम पेज URL स्थानाकडे दुर्लक्ष करण्यात येते.
+
+तुम्ही हे सेटिंग अक्षम केले, तर वापरकर्त्याचे होम पेज URL लिंक 'chrome://newtab' वर सेट असण्याचा अपवाद वगळता कधीच नवा टॅब पेज नसते.
+
+तुम्ही हे सेटिंग सक्षम किंवा अक्षम केल्यास वापरकर्त्यास <ph name="PRODUCT_NAME" /> मध्ये त्यांच्या होमपेजचा प्रकार बदलता येत नाही.
+
+हे धोरण सेट न केल्यास वापरकर्त्याला नवा टॅब पेजवर त्यांच्या पसंतीचे होम पेज निवडण्याची परवानगी मिळते.
+
+हे धोरण <ph name="MS_AD_NAME" /> डोमेनला न जोडलेल्या Windows इंस्टंसवर उपलब्ध नाही.</translation>
 <translation id="5236882091572996759">हे धोरण सत्य वर सेट केलेले असल्यास किंवा सेट केलेले नसल्यास, वापरकर्ता ऑडिओ प्ले होत असताना निष्क्रिय होण्याचा विचार करत नाही.हे निष्क्रियतेची वेळ संपण्यापासून आणि निष्क्रिय कारवाई केली जाण्यापासून प्रतिबंध करते. तथापि, स्क्रीन अंधुक होणे, स्क्रीन बंद होणे आणि स्क्रीन लॉक ऑडिओ गतिविधीकडे दुर्लक्ष करून, कॉन्फिगर केलेली वेळ संपल्यानंतर केली जाईल. 
 
          हे धोरण असत्य वर सेट केलेले असल्यास, व्हिडिओ गतिविधी वापरकर्त्यास निष्क्रिय होण्याच्या विचार करण्यापासून प्रतिबंध करत नाही.</translation>
-<translation id="5246700266104954355">हे धोरण बहिष्कृत केले आहे. कृपया फ्लॅश प्लगिनची उपलब्धता नियंत्रित करण्यासाठी <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> आणि संकलित PDF फायली उघडण्‍यासाठी PDF दर्शक वापरला जावा किंवा नाही ते नियंत्रित करण्‍यासाठी  <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> वापरा.
+<translation id="5246700266104954355">हे धोरण बहिष्कृत केले आहे. कृपया फ्लॅश प्लगिनची उपलब्धता नियंत्रित करण्यासाठी <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> आणि संकलित पीडीएफ फायली उघडण्‍यासाठी पीडीएफ व्ह्यूअर वापरला जावा किंवा नाही ते नियंत्रित करण्‍यासाठी <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> वापरा.
 
-     <ph name="PRODUCT_NAME" /> मध्ये एम्बेड केलेल्या प्लगिनची सूची निर्दिष्ट करते आणि वापरकर्त्यांना ही सेटिंग बदलण्यापासून प्रतिबंधित करते.
+     <ph name="PRODUCT_NAME" /> मध्ये एम्बेड केलेल्या प्लगिनची सूची निर्दिष्ट करते आणि वापरकर्त्यांना हे सेटिंग बदलण्यापासून प्रतिबंधित करते.
 
       वाइल्डकार्ड वर्ण '*' आणि '?' अनियंत्रित वर्णांचा क्रम जुळवण्यासाठी वापरले जाऊ शकतात. '*' एका अनियंत्रित संख्येशी जुळतो तर '?' पर्यायी एकल वर्ण निर्दिष्ट करतो उदा. शून्य किंवा एका वर्णाशी जुळतो. सुटलेला वर्ण '\' आहे, म्हणून प्रत्यक्ष *', '?' किंवा '\' जुळवण्यासाठी तुम्हाला त्यांच्या आधी '\' ठेवावा लागेल. 
 
-      तुम्ही ही सेटिंग चालू केल्यास <ph name="PRODUCT_NAME" /> मध्ये निर्दिष्ट प्लगिनची सूची कधीही वापरली जात नाही. 'प्लगिन:बद्दल' मध्ये प्लगिन बंद म्हणून चिन्हित केले जातात आणि वापरकर्ते के चालू करू शकत नाहीत.
+      तुम्ही हे सेटिंग सुरू केल्यास <ph name="PRODUCT_NAME" /> मध्ये निर्दिष्ट प्लगिनची सूची कधीही वापरली जात नाही. 'प्लगिन:बद्दल' मध्ये प्लगिन बंद म्हणून चिन्हित केले जातात आणि वापरकर्ते के सुरू करू शकत नाहीत.
 
-      लक्षात ठेवा हे धोरण EnabledPlugins आणि DisabledPluginsExceptionsNote द्वारे अधिलिखित केले जाऊ शकणार नाही.
+      लक्षात ठेवा हे धोरण EnabledPlugins आणि DisabledPluginsExceptionsNote द्वारे ओव्हरराइड केले जाऊ शकणार नाही.
 
-हे धोरण सेट न करता ठेवले गेल्यास वापरकर्ता सिस्टीमवर असलेला कोणताही प्लगिन बंद करू शकतो.</translation>
+हे धोरण सेट न करता ठेवले गेल्यास वापरकर्ता सिस्टीमवर असलेला कोणतेही प्लगिन बंद करू शकतो.</translation>
 <translation id="5247006254130721952">धोकादायक डाउनलोड ब्लॉक करा</translation>
 <translation id="5248863213023520115"><ph name="MS_AD_NAME" /> सर्व्हरवरून Kerberos तिकिटांची मागणी करत असताना अनुमती असलेले एंक्रिप्शन प्रकार सेट करते.
 
@@ -1780,7 +1820,7 @@
 
           सत्य वर सेट केल्यास किंवा कॉन्फिगर केले नसल्यास, पर्यवेक्षी वापरकर्ते या वापरकर्त्याद्वारे तयार केले आणि व्यवस्थापित केले जाऊ शकतात.</translation>
 <translation id="5370279767682621504">नॉन-डीफॉल्ट पोर्टवर HTTP/0.9 सपोर्ट सुरू करा</translation>
-<translation id="5378985487213287085">वेबसाइटना डेस्कटॉप सूचना प्रदर्शित करण्‍याची अनुमती आहे की नाही ते सेट करण्‍याची आपल्याला अनुमती देते. डेस्कटॉप सूचना प्रदर्शित करण्‍यास डीफॉल्ट म्हणून अनुमती देता येऊ शकते, डीफॉल्ट म्हणून अनुमती नाकारता येऊ शकते किंवा वेबसाइट डेस्कटॉप सूचना दर्शवताना प्रत्येकवेळी वापरकर्त्याला विचारले जाऊ शकते.
+<translation id="5378985487213287085">वेबसाइटना डेस्कटॉप सूचना डिस्प्ले करण्‍याची अनुमती आहे की नाही ते सेट करण्‍याची तुम्हाला अनुमती देते. डेस्कटॉप सूचना डिस्प्ले करण्‍यास डीफॉल्ट म्हणून अनुमती देता येऊ शकते, डीफॉल्ट म्हणून अनुमती नाकारता येऊ शकते किंवा वेबसाइट डेस्कटॉप सूचना दर्शवताना प्रत्येकवेळी वापरकर्त्याला विचारले जाऊ शकते.
 
           हे धोरण सेट न केल्यास 'सूचना विचारा' वापरण्‍यात येईल आणि वापरकर्ता ते बदलण्‍यास सक्षम असेल.</translation>
 <translation id="538108065117008131">पुढील सामग्री प्रकार हाताळण्यास <ph name="PRODUCT_FRAME_NAME" /> ला परवानगी द्या.</translation>
@@ -1825,19 +1865,19 @@
 <translation id="5469825884154817306">या साइटवरील इमेज अवरोधित करा</translation>
 <translation id="5475361623548884387">प्रिंट सक्षम करा</translation>
 <translation id="547601067149622666">अनाहूत जाहिराती असलेल्या साइटवरील जाहिरातींना अनुमती देऊ नका</translation>
-<translation id="5483777239978559943">हे धोरण बहिष्कृत केले आहे. कृपया फ्लॅश प्लगिनची उपलब्धता नियंत्रित करण्यासाठी <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> आणि  संकलित PDF फायली उघडण्‍यासाठी PDF दर्शक वापरला जावा किंवा नाही ते नियंत्रित करण्‍यासाठी <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> वापरा.
+<translation id="5483777239978559943">हे धोरण बहिष्कृत केले आहे. कृपया फ्लॅश प्लगिनची उपलब्धता नियंत्रित करण्यासाठी <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> आणि  संकलित पीडीएफ फायली उघडण्‍यासाठी पीडीएफ व्ह्यूअर वापरला जावा किंवा नाही ते नियंत्रित करण्‍यासाठी <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> वापरा.
 
-      वापरकर्ते <ph name="PRODUCT_NAME" /> मधून चालू किंवा बंद करू शकतील असा प्लगिनची सूची निर्दिष्ट करते.
+      वापरकर्ते <ph name="PRODUCT_NAME" /> मधून सुरू किंवा बंद करू शकतील असा प्लगिनची सूची निर्दिष्ट करते.
 
       वाइल्डकार्ड वर्ण '*' आणि '?' अनियंत्रित वर्णांचा क्रम जुळवण्यासाठी वापरले जाऊ शकतात. '*' एका अनियंत्रित संख्येशी जुळतो तर '?' पर्यायी एकल वर्ण निर्दिष्ट करतो उदा. शून्य किंवा एका वर्णाशी जुळतो.सुटलेला वर्ण '\' आहे, म्हणून प्रत्यक्ष *', '?' किंवा '\' जुळवण्यासाठी तुम्हाला त्यांच्या आधी '\' ठेवावा लागेल.
 
-      तुम्ही ही सेटिंग चालू केल्यास <ph name="PRODUCT_NAME" /> मध्ये निर्दिष्ट प्लगिनची सूची वापरली जाऊ शकणार नाही. प्लगिन DisabledPlugins मधील नमुन्याशी जुळत असला तरीही वापरकर्ते  'प्लगिन:बद्दल' मधून चालू किंवा बंद करू शकतील. वापरकर्ते DisabledPlugins, DisabledPluginsExceptions आणि EnabledPluginsUsers मधील नमुन्यांशी जुळत नसलेले प्लगिन देखील चालू किंवा बंद करू शकतील.
+      तुम्ही हे सेटिंग सुरू केल्यास <ph name="PRODUCT_NAME" /> मध्ये निर्दिष्ट प्लगिनची सूची वापरली जाऊ शकणार नाही. प्लगिन DisabledPlugins मधील नमुन्याशी जुळत असला तरीही वापरकर्ते  'प्लगिन:बद्दल' मधून सुरू किंवा बंद करू शकतील. वापरकर्ते DisabledPlugins, DisabledPluginsExceptions आणि EnabledPluginsUsers मधील नमुन्यांशी जुळत नसलेले प्लगिन देखील सुरू किंवा बंद करू शकतील.
 
-      हे धोरण कठोर प्लगिन ब्लॅकलिस्टींगला अनुमती देण्यासाठी आहे जेथे 'बंद प्लगिन' सूचीत सर्व प्लगिन बंद करा '*' किंवा सर्व Java प्लगिन '*Java*' बंद करा यासारख्‍या वाइल्डकार्ड नोंदी असतात परंतु प्रशासकाला 'IcedTea Java 2.3' सारखी विशिष्‍ट आवृत्ती चालू करायची असते. या विशिष्‍ट आवृत्त्या या धोरणात निर्दिष्‍ट केल्या जाऊ शकतील.
+      हे धोरण कठोर प्लगिन ब्लॅकलिस्टींगला अनुमती देण्यासाठी आहे जेथे 'बंद प्लगिन' सूचीत सर्व प्लगिन बंद करा '*' किंवा सर्व Java प्लगिन '*Java*' बंद करा यासारख्‍या वाइल्डकार्ड नोंदी असतात परंतु प्रशासकाला 'IcedTea Java 2.3' सारखी विशिष्‍ट आवृत्ती सुरू करायची असते. या विशिष्‍ट आवृत्त्या या धोरणात निर्दिष्‍ट केल्या जाऊ शकतील.
 
-      लक्षात ठेवा, प्लगिनचे नाव आणि प्लगिनच्या गटाचे नाव या दोहोंनाही सूट दिली जावी. प्रत्येक प्लगिन गट about:plugins च्या एका स्वतंत्र विभागात दर्शविला जातो; प्रत्येक गटास एक किंवा अधिक प्लगिन असू शकतात. उदाहरणार्थ, "Shockwave Flash" प्लगिन "Adobe Flash Player" शी संबद्ध असतात आणि त्या प्लगिनला काळ्यासूचीमधून सूट द्यावयाची असल्यास दोन्ही नावांमध्ये अपवाद सूचीमधील जुळणी असणे आवश्यक आहे.
+      लक्षात ठेवा, प्लगिनचे नाव आणि प्लगिनच्या गटाचे नाव या दोहोंनाही सूट दिली जावी. प्रत्येक प्लगिन गट about:plugins च्या एका स्वतंत्र विभागात दर्शविला जातो; प्रत्येक गटास एक किंवा अधिक प्लगिन असू शकतात. उदाहरणार्थ, "Shockwave Flash" प्लगिन "Adobe Flash Player" शी संबद्ध असतात आणि त्या प्लगिनला ब्लॅकलिस्टमधून सूट द्यावयाची असल्यास दोन्ही नावांमध्ये अपवाद सूचीमधील जुळणी असणे आवश्यक आहे.
 
-हे धोरण सेट न करता सोडल्यास, 'DisabledPlugins' मधील नमुन्याशी जुळत असलेले कोणतेही प्लगिन लॉक केले जाईल आणि वापरकर्ता त्यांना चालू करू शकणार नाही.</translation>
+हे धोरण सेट न करता सोडल्यास, 'DisabledPlugins' मधील नमुन्याशी जुळत असलेले कोणतेही प्लगिन लॉक केले जाईल आणि वापरकर्ता त्यांना सुरू करू शकणार नाही.</translation>
 <translation id="5499375345075963939">हे धोरण केवळ किरकोळ मोडमध्ये सक्रिय असते.
 
       जेव्हा या धोरणाचे मूल्य सेट केलेले असते आणि सध्या लॉग इन केलेल्यापेक्षा 0 नसते तेव्हा निर्दिष्ट कालावधी संपल्याच्या निष्क्रिय वेळेनंतर डेमो वापरकर्ता स्वयंचलितपणे लॉग आउट केला जाईल.
@@ -1893,11 +1933,11 @@
       आपण हे धोरण सेट केल्यास, वापरकर्ते ते बदलू किंवा अधिलिखित करू शकत नाहीत.
 
       धोरण सेट न करता सोडल्यास, वापरकर्ते शेल्फ स्वयं-लपविले जाण्याबाबत निवड करू शकतात.</translation>
-<translation id="557360560705413259">हे सेटिंग सक्षम केलेले असते तेव्हा, प्रमाणपत्रात subjectAlternativeName विस्तार गहाळ असल्यास <ph name="PRODUCT_NAME" /> होस्ट नाव जुळविण्यासाठी जोपर्यंत ते यशस्वीपणे प्रमाणित करते आणि स्थानिक-इंस्टॉल केलेल्या CA प्रमाणपत्रांशी श्रृखंलाबद्ध केलेले असते तोपर्यंत सर्व्हर प्रमाणपत्राचे commonName वापरेल.
+<translation id="557360560705413259">हे सेटिंग सक्षम केलेले असते तेव्हा, सर्टिफिकेटमध्ये subjectAlternativeName एक्स्टेंशन गहाळ असल्यास <ph name="PRODUCT_NAME" /> होस्ट नाव जुळविण्यासाठी जोपर्यंत ते यशस्वीपणे प्रमाणित करते आणि स्थानिक-इंस्टॉल केलेल्या CA सर्टिफिकेटंशी श्रृखंलाबद्ध केलेले असते तोपर्यंत सर्व्हर सर्टिफिकेटचे commonName वापरेल.
 
-      लक्षात ठेवा की, दिलेले प्रमाणपत्र ज्यासाठी ऑप्टीमाइझ केले जाऊ शकते त्या होस्टनावांना प्रतिबंधित करणार्‍या nameConstraints विस्तारास बायपास करण्यास कदाचित हे अनुमती देत असल्याने याची शिफारस केली जात नाही.
+      लक्षात ठेवा की, दिलेले सर्टिफिकेट ज्यासाठी ऑप्टीमाइझ केले जाऊ शकते त्या होस्टनावांना प्रतिबंधित करणार्‍या nameConstraints एक्स्टेंशनस बायपास करण्यास कदाचित हे अनुमती देत असल्याने याची शिफारस केली जात नाही.
 
-      हे धोरण सेट केले नसल्यास किंवा असत्य वर सेट केले असल्यास, subjectAlternativeName विस्तार नसलेल्या एक DNS नाव किंवा IP पत्ता असलेल्या सर्व्हर प्रमाणपत्रांवर विश्वास ठेवला जाणार नाही.</translation>
+      हे धोरण सेट केले नसल्यास किंवा असत्य वर सेट केले असल्यास, subjectAlternativeName एक्स्टेंशन नसलेल्या एक DNS नाव किंवा IP पत्ता असलेल्या सर्व्हर सर्टिफिकेटंवर विश्वास ठेवला जाणार नाही.</translation>
 <translation id="5583806683960333345">ही सेटिंग चालू करणे वापरकर्त्यास झटपट टेदरिंग वापरू देते जे त्यांच्या Google फोनला त्याचा मोबाइल डेटा त्यांच्या डीव्हाइसशी शेअर करू देते.
 
      ही सेटिंग बंद केल्यास वापरकर्त्यांना झटपट टेदरिंग वापरू दिले जाणार नाही.
@@ -1910,6 +1950,13 @@
           जेव्हा हे धोरण सेट केलेले नसते, तेव्हा डीफॉल्ट कारवाई केली जाते, जे निलंबन असते.
 
           कारवाई म्हणजे निलंबन असल्यास, निलंबनापूर्वी स्क्रीन एकतर लॉक करण्यासाठी किंवा लॉक न करण्यासाठी, <ph name="PRODUCT_OS_NAME" /> स्वतंत्रपणे कॉन्फिगर केले जाऊ शकते.</translation>
+<translation id="5618398258385745432">पासवर्ड पाहण्यावर रीअॉथेंटिकेशन लागू करण्यात आले त्याच्या आधीपासून संलग्न सेटिंग वापरण्यात येत आहे. तेव्हापासूनच हे सेटिंग आणि पर्यायाने हे धोरण Chrome च्या वर्तनावर परिणाम करत नाही. Chrome चे सद्य वर्तन पासवर्ड व्यवस्थापक सेटिंग्ज पेजमध्ये स्पष्ट मजकूराच्या स्वरूपात पासवर्ड दाखवणे अक्षम केल्यावर कसे असेल तसे आहे. याचाच अर्थ, सेटिंग्ज पेजमध्ये फक्त प्लेसहोल्डर आहे आणि वापरकर्त्याने “दाखवा” वर क्लिक केल्यावरच (आणि लागू असल्यास रीअॉथेंटिकेशन केल्यावर) Chrome पासवर्ड दाखवते. या धोरणाची मूळ माहिती खालीलप्रमाणे.
+
+वापरकर्त्याला पासवर्ड व्यवस्थापकामध्ये स्पष्ट मजकूराच्या स्वरूपात पासवर्ड दाखवता येतील किंवा नाही यावर नियंत्रण राखते.
+
+तुम्ही हे सेटिंग अक्षम केले, तर पासवर्ड व्यवस्थापक हा  पासवर्ड व्यवस्थापक विंडोमध्ये स्पष्ट मजकूराच्या स्वरूपात पासवर्ड दाखवण्यास परवानगी देत नाही.
+
+तुम्ही हे धोरण सक्षम केल्यास किंवा हे धोरण सेट न केल्यास, वापरकर्त्यांना त्यांचा पासवर्ड हा पासवर्ड व्यवस्थापकामध्ये स्पष्ट मजकूराच्या स्वरूपात पाहता येईल.</translation>
 <translation id="5620392548325769024">OS अपग्रेड नंतर प्रथम ब्राउझर लाँच वर स्वागत पृष्‍ठ दाखवणे चालू करा.</translation>
 <translation id="5630352020869108293">मागील सत्र पुनर्संचयित करा</translation>
 <translation id="5645779841392247734">या साइटवर कुकीजना परवानगी द्या</translation>
@@ -1922,7 +1969,7 @@
 <translation id="5697306356229823047">डिव्हाइस वापरकर्त्यांचा अहवाल द्या</translation>
 <translation id="570062449808736508">हे धोरण रिक्त-नसलेल्या स्ट्रिंगवर सेट केलेले असते तेव्हा वेबदृश्य दिलेल्या अधिकृत नावाच्या सामग्री प्रदात्याकडील URL निर्बंध वाचेल.</translation>
 <translation id="5708969689202733975">जलद अनलॉक मोडना कॉन्फिगर करण्‍याची अनुमती आहे</translation>
-<translation id="5722934961007828462">हे सेटिंग सक्षम असताना, यशस्वीपणे सत्यापित करणार्‍या आणि स्थानिकपणे-इंस्टॉल केलेल्या CA प्रमाणपत्रांद्वारे साइन केलेल्या सर्व्हर प्रमाणपत्रांकरिता <ph name="PRODUCT_NAME" /> नेहमी तपासणी रद्द करेल.
+<translation id="5722934961007828462">हे सेटिंग सक्षम असताना, यशस्वीपणे पडताळणी करणार्‍या आणि स्थानिकपणे-इंस्टॉल केलेल्या CA प्रमाणपत्रांद्वारे साइन केलेल्या सर्व्हर प्रमाणपत्रांकरिता <ph name="PRODUCT_NAME" /> नेहमी तपासणी रद्द करेल.
 
       रद्द करण्याची स्थिती माहिती प्राप्त करण्यासाठी <ph name="PRODUCT_NAME" /> अक्षम असल्यास, अशी प्रमाणपत्रे मागे घेतलेली ('hard-fail') म्हणून हाताळली जातील.
 
@@ -1948,9 +1995,9 @@
          जेव्हा हे धोरण सेट केलेले नसते, तेव्हा वेळेची डीफॉल्ट लांबी वापरली जाते.
 
           धोरण मूल्य मिलिसेकंदांमध्ये निर्दिष्‍ट केले जावे.</translation>
-<translation id="5809728392451418079">डिव्हाइस-स्थानिक खात्यांसाठी प्रदर्शन नाव सेट करा</translation>
+<translation id="5809728392451418079">डिव्हाइस-स्थानिक खात्यांसाठी डिस्प्ले नाव सेट करा</translation>
 <translation id="5814301096961727113">लॉगिन स्क्रीनवर बोललेल्या अभिप्रायाची डीफॉल्ट स्थिती सेट करा</translation>
-<translation id="5815129011704381141">अद्यतनानंतर स्वयंचलितपणे रीबूट करा</translation>
+<translation id="5815129011704381141">अपडेटनंतर आपोआप रीबूट करा</translation>
 <translation id="5815353477778354428">वापरकर्ता डेटा संचयनासाठी <ph name="PRODUCT_FRAME_NAME" /> वापरणार असलेली निर्देशिका कॉन्फिगर करते.
 
       आपण हे धोरण सेट केल्यास, <ph name="PRODUCT_FRAME_NAME" /> प्रदान केलेली निर्देशिका वापरेल.
@@ -1972,15 +2019,15 @@
       URL (जसे की https://example.com/some/path) केवळ U2F appIDs शी जुळेल. डोमेन (जसे की example.com) केवळ webauthn RP ID शी जुळतील. म्हणून, दिलेल्या साइटसाठी U2F आणि webauthn API दोन्ही कव्हर करण्यासाठी, appID URL आणि डोमेन दोन्ही सूचीबद्ध करणे आवश्यक असेल.</translation>
 <translation id="5835412847081687053">वापरकर्ता सेशनमध्ये अनुमती असलेली UI लोकॅल कॉन्फिगर करा</translation>
 <translation id="5836064773277134605">दूरस्थ प्रवेश होस्टद्वारे वापरलेली UDP पोर्ट वर्गवारी प्रतिबंधित करा</translation>
-<translation id="5862253018042179045">लॉगिन स्क्रीनवर बोललेला अभिप्राय प्रवेशयोग्यता वैशिष्ट्याची डीफॉल्ट स्थिती सेट करा.
+<translation id="5862253018042179045">लॉगिन स्क्रीनवर बोललेला फीडबॅक अॅक्सेसयोग्यता वैशिष्ट्याची डीफॉल्ट स्थिती सेट करा.
 
-          हे धोरण सत्य वर सेट असल्यास, जेव्हा लॉगिन स्क्रीन दर्शविली असते तेव्हा बोललेला अभिप्राय सक्षम केला जाईल.
+          हे धोरण सत्य वर सेट असल्यास, जेव्हा लॉगिन स्क्रीन दाखवली असते तेव्हा बोललेला फीडबॅक सक्षम केला जाईल.
 
-          हे धोरण असत्य वर सेट असल्यास, जेव्हा लॉगिन स्क्रीन दर्शविली असते तेव्हा बोललेला अभिप्राय अक्षम केला जाईल.
+          हे धोरण असत्य वर सेट असल्यास, जेव्हा लॉगिन स्क्रीन दाखवली असते तेव्हा बोललेला फीडबॅक अक्षम केला जाईल.
 
-          आपण हे धोरण सेट केल्यास, बोललेला अभिप्राय सक्षम किंवा अक्षम करून वापरकर्ते ते तात्पुरते अधिलिखित करू शकतात. तथापि, वापरकर्त्याची निवड कायम रहात नाही आणि लॉगिन स्क्रीन एक नवीन दर्शविते तेव्हा किंवा एका मिनिटासाठी लॉगिन स्क्रीनवर वापरकर्ता निष्क्रिय असतो तेव्हा डीफॉल्ट पुनर्संचयित केले जाते.
+          तुम्ही हे धोरण सेट केल्यास, बोललेला फीडबॅक सक्षम किंवा अक्षम करून वापरकर्ते ते तात्पुरते ओव्हरराइड करू शकतात. पण, वापरकर्त्याची निवड कायम रहात नाही आणि लॉगिन स्क्रीन एक नवीन दर्शविते तेव्हा किंवा एका मिनिटासाठी लॉगिन स्क्रीनवर वापरकर्ता निष्क्रिय असतो तेव्हा डीफॉल्ट रिस्टोअर केले जाते.
 
-          हे धोरण सेट न करता सोडल्यास, जेव्हा प्रथम लॉगिन स्क्रीन दर्शविली जाते तेव्हा बोललेला अभिप्राय अक्षम केला जातो. वापरकर्ते कोणत्याही वेळी बोललेला अभिप्राय आणि वापरकर्त्यांमध्ये कायम असलेली लॉगिन स्क्रीनवरील त्याची स्थिती सक्षम किंवा अक्षम करू शकतात.</translation>
+          हे धोरण सेट न करता सोडल्यास, जेव्हा प्रथम लॉगिन स्क्रीन दाखवली जाते तेव्हा बोललेला फीडबॅक अक्षम केला जातो. वापरकर्ते कोणत्याही वेळी बोललेला फीडबॅक आणि वापरकर्त्यांमध्ये कायम असलेली लॉगिन स्क्रीनवरील त्याची स्थिती सक्षम किंवा अक्षम करू शकतात.</translation>
 <translation id="5868414965372171132">वापरकर्ता स्तरीय नेटवर्क कॉन्फिगरेशन</translation>
 <translation id="5879014913445067283"><ph name="NETBIOS_NAME" /> मार्फत नेटवर्क फाइल शेअर शोध नियंत्रित करते</translation>
 <translation id="5883015257301027298">डीफॉल्ट कुकीज सेटिंग</translation>
@@ -2003,24 +2050,24 @@
       असत्यवर सेट केल्यास, त्यात थ्रॉटलिंग असणार नाही.
       सत्यवर सेट केल्यास, प्रदान केलेले अपलोड आणि डाउनलोड दर (kbits/से मध्ये) प्रदान करण्यासाठी सिस्टम थ्रॉटल होते.</translation>
 <translation id="5921713479449475707">HTTP द्वारे स्वयंअद्यतन डाउनलोडला अनुमती द्या</translation>
-<translation id="5921888683953999946">लॉगिन स्क्रीनवरील मोठा कर्सर प्रवेशयोग्यता वैशिष्ट्याची डीफॉल्ट स्थिती सेट करा.
+<translation id="5921888683953999946">लॉगिन स्क्रीनवरील मोठा कर्सर अॅक्सेसयोग्यता वैशिष्ट्याची डीफॉल्ट स्थिती सेट करा.
 
-          हे धोरण सत्य वर सेट असल्यास, जेव्हा लॉगिन स्क्रीन दर्शविली जाते तेव्हा मोठा कर्सर सक्षम केला जाईल.
+          हे धोरण सत्य वर सेट असल्यास, जेव्हा लॉगिन स्क्रीन दाखवली जाते तेव्हा मोठा कर्सर सक्षम केला जाईल.
 
-          हे धोरण असत्य वर सेट असल्यास, जेव्हा लॉगिन स्क्रीन दर्शविली जाते तेव्हा मोठा कर्सर अक्षम केला जाईल.
+          हे धोरण असत्य वर सेट असल्यास, जेव्हा लॉगिन स्क्रीन दाखवली जाते तेव्हा मोठा कर्सर अक्षम केला जाईल.
 
-          आपण हे धोरण सेट केल्यास, वापरकर्ते मोठा कर्सर सक्षम करून किंवा अक्षम करून तो तात्पुरता अधिलिखित करू शकतात. तथापि, वापरकर्त्याची निवड कायम रहात नाही आणि लॉगिन स्क्रीन एक नवीन दर्शविते तेव्हा किंवा एका मिनिटासाठी लॉगिन स्क्रीनवर वापरकर्ता निष्क्रिय असतो तेव्हा डीफॉल्ट पुनर्संचयित केले जाते.
+          तुम्ही हे धोरण सेट केल्यास, वापरकर्ते मोठा कर्सर सक्षम करून किंवा अक्षम करून तो तात्पुरता ओव्हरराइड करू शकतात. पण, वापरकर्त्याची निवड कायम रहात नाही आणि लॉगिन स्क्रीन एक नवीन दर्शविते तेव्हा किंवा एका मिनिटासाठी लॉगिन स्क्रीनवर वापरकर्ता निष्क्रिय असतो तेव्हा डीफॉल्ट रिस्टोअर केले जाते.
 
-          हे धोरण सेट न करता सोडल्यास, जेव्हा लॉगिन स्क्रीन प्रथम दर्शविली जाते तेव्हा मोठा कर्सर अक्षम होतो. वापरकर्ते कोणत्याही वेळी मोठा कर्सर सक्षम किंवा अक्षम करू शकतात आणि लॉगिन स्क्रीनवरील त्याची स्थिती वापरकर्त्यांमध्ये कायम रहाते.</translation>
+          हे धोरण सेट न करता सोडल्यास, जेव्हा लॉगिन स्क्रीन प्रथम दाखवली जाते तेव्हा मोठा कर्सर अक्षम होतो. वापरकर्ते कोणत्याही वेळी मोठा कर्सर सक्षम किंवा अक्षम करू शकतात आणि लॉगिन स्क्रीनवरील त्याची स्थिती वापरकर्त्यांमध्ये कायम रहाते.</translation>
 <translation id="5929855945144989709">Chrome OS वर आभासी मशीन रन करण्याची डिव्हाइसला अनुमती द्या</translation>
 <translation id="5932767795525445337">हे धोरण Android अ‍ॅप्स पिन करण्यासाठीदेखील वापरले जाऊ शकते.</translation>
 <translation id="5936622343001856595">Google वेब शोध मधील क्वेरी सक्रियवर सेट केलेल्या सुरक्षितशोधासह पूर्ण केले जाण्यावर भर देते आणि वापरकर्त्यांना हे सेटिंग बदलण्यापासून प्रतिबंधित करते.
 
-      आपण हे सेटिंग सक्षम केल्यास, Google शोध मधील सुरक्षितशोध नेहमी सक्रिय असतो.
+      तुम्ही हे सेटिंग सक्षम केल्यास, Google शोध मधील सुरक्षितशोध नेहमी सक्रिय असतो.
 
-      आपण हे सेटिंग अक्षम केल्यास किंवा मूल्य सेट न केल्यास, Google शोध मधील सुरक्षितशोधाची अंमलबजावणी होत नाही.</translation>
+      तुम्ही हे सेटिंग अक्षम केल्यास किंवा मूल्य सेट न केल्यास, Google शोध मधील सुरक्षितशोधाची अंमलबजावणी होत नाही.</translation>
 <translation id="5946082169633555022">बीटा चॅनेल</translation>
-<translation id="5950205771952201658">सॉफ्‍ट-फेल, ऑनलाइन रद्द करण्याच्या तपासण्‍या कोणतेही प्रभावी सुरक्षा लाभ देत नाहीत या तथ्‍याच्या प्रकाशात, त्या डीफॉल्ट रुपात <ph name="PRODUCT_NAME" /> आवृत्ती 19 आणि त्यानंतरच्या मध्‍ये ते अक्षम करण्‍यात आले आहे. हे धोरण सत्यवर सेट केल्यास, मागील वर्तन पुनर्संचयित केले जाते आणि ऑनलाइन OCSP/CRL तपासण्‍या केल्या जातात.
+<translation id="5950205771952201658">सॉफ्‍ट-फेल, ऑनलाइन रद्द करण्याच्या तपासण्‍या कोणतेही प्रभावी सुरक्षा लाभ देत नाहीत या तथ्‍याच्या प्रकाशात, त्या डीफॉल्ट रुपात <ph name="PRODUCT_NAME" /> आवृत्ती 19 आणि त्यानंतरच्या मध्‍ये ते अक्षम करण्‍यात आले आहे. हे धोरण सत्यवर सेट केल्यास, मागील वर्तन रिस्टोअर केले जाते आणि ऑनलाइन OCSP/CRL तपासण्‍या केल्या जातात.
 
       धोरण सेट केले नसल्यास, किंवा असत्य वर सेट केल्यास, <ph name="PRODUCT_NAME" /> हे <ph name="PRODUCT_NAME" /> 19 आणि नंतरच्यामध्‍ये ऑनलाइन रद्द करण्याच्या तपासण्या करणार नाही.</translation>
 <translation id="5966615072639944554">दूरस्थ अनुप्रमाणन API वापरण्यासाठी अनुमती दिलेले विस्तार</translation>
@@ -2086,7 +2133,7 @@
 <translation id="6070667616071269965">डिव्हाइस साइन-इन स्क्रीन कीबोर्ड लेआउट</translation>
 <translation id="6074963268421707432">कोणत्याही साइटला डेस्कटॉप सूचना दर्शविण्याची परवानगी देऊ नका</translation>
 <translation id="6074964551275531965">अपडेट सूचनांसाठी कालावधी सेट करा</translation>
-<translation id="6076099373507468537">वेब अनुप्रयोगामध्ये थेट chrome.usb API मधून वापरण्यासाठी कर्नल ड्राइव्हर पासून वेगळे करण्याची अनुमती असलेल्या USB डिव्हाइसेसची सूची परिभाषित करते. प्रविष्टी या विशिष्ट हार्डवेअर ओळखण्यासाठी USB विक्रेता अभिज्ञापक आणि उत्पादन अभिज्ञापकाच्या जोडण्या असतात.
+<translation id="6076099373507468537">वेब अॅप्लिकेशनमध्ये थेट chrome.usb API मधून वापरण्यासाठी कर्नल ड्रायव्हर पासून वेगळे करण्याची अनुमती असलेल्या USB डिव्हाइसेसची सूची परिभाषित करते. प्रविष्टी या विशिष्ट हार्डवेअर ओळखण्यासाठी USB विक्रेता आयडेंटिफाय आणि उत्पादन आयडेंटिफायाच्या जोडण्या असतात.
 
       हे धोरण कॉन्फिगर न केल्यास, वेगळे करण्यायोग्य USB डिव्हाइसेसची सूची रिक्त असते.</translation>
 <translation id="6083631234867522991">Windows (Windows क्लायंट):</translation>
@@ -2139,7 +2186,7 @@
 <translation id="6224304369267200483">URL/डोमेनने थेट प्रत्यक्ष सिक्‍युरिटी की अनुप्रमाणनाला आपोआप परवानगी दिली</translation>
 <translation id="6233173491898450179">डाउनलोड निर्देशिका सेट करा</translation>
 <translation id="6244210204546589761">स्टार्टअपच्या वेळी उघडणार्‍या URL</translation>
-<translation id="6258193603492867656">व्युत्पन्न केलेल्या Kerberos SPN मध्ये मानक-नसलेला पोर्ट समाविष्ट आहे किंवा नाही हे निर्दिष्ट करते. आपण हे सेटिंग सक्षम केल्यास आणि एक मानक-नसलेला पोर्ट (म्हणजे, 80 किंवा 443 पेक्षा अन्य पोर्ट) एंटर केल्यास, हे व्युत्पन्न केलेल्या Kerberos SPN मध्ये समाविष्ट केले जाईल. आपण हे सेटिंग अक्षम केल्यास किंवा सेट न करता सोडल्यास, व्युत्पन्न केलेल्या Kerberos SPN मध्ये कधीही पोर्ट समाविष्ट नसेल.</translation>
+<translation id="6258193603492867656">जनरेट केलेल्या Kerberos SPN मध्ये मानक-नसलेला पोर्ट समाविष्ट आहे किंवा नाही हे निर्दिष्ट करते. तुम्ही हे सेटिंग सक्षम केल्यास आणि एक मानक-नसलेला पोर्ट (म्हणजे, 80 किंवा 443 पेक्षा अन्य पोर्ट) एंटर केल्यास, हे जनरेट केलेल्या Kerberos SPN मध्ये समाविष्ट केले जाईल. तुम्ही हे सेटिंग अक्षम केल्यास किंवा सेट न करता सोडल्यास, जनरेट केलेल्या Kerberos SPN मध्ये कधीही पोर्ट समाविष्ट नसेल.</translation>
 <translation id="6281043242780654992">मूळ संदेशनासाठी धोरणे कॉन्फिगर करा. काळ्यासूचीतील मूळ संदेशन होस्ट जोपर्यंत श्वेतसूचीबद्ध होत नाहीत तोपर्यंत त्यांना अनुमती दिली जाणार नाही.</translation>
 <translation id="6282799760374509080">ऑडिओ कॅप्चरला अनुमती द्या किंवा नाकारा</translation>
 <translation id="6284362063448764300">TLS 1.1</translation>
@@ -2175,7 +2222,7 @@
 <translation id="6467613372414922590">वापरकर्ता-स्तर मूळ संदेशन होस्टला (प्रशासनाच्या परवानग्यांशिवाय इंस्टॉल केलेले) अनुमती द्या</translation>
 <translation id="6468980648680553776">हे धोरण बहिष्कृत केले आहे. कृपया त्याऐवजी RemoteAccessHostClientDomainList वापरा.</translation>
 <translation id="6473623140202114570">सुरक्षित ब्राउझिंग चेतावणी ट्रिगर करणार नाही अशा डोमेनची सूची कॉन्फिगर करा.</translation>
-<translation id="6491139795995924304">डिव्हाइसवर Bluetooth ला अनुमती द्या</translation>
+<translation id="6491139795995924304">डिव्हाइसवर ब्लूटूथ ला अनुमती द्या</translation>
 <translation id="6491872498385040936">हे धोरण बहिेष्कृत केले आहे. <ph name="FORCE_YOUTUBE_RESTRICT_POLICY_NAME" /> वापरून पहा, जे या धोरणास अधिशून्य करते आणि अत्यंत बारकाईने केल्या जाणार्‍या ट्यूनिंगला अनुमती देते.
 
       YouTube मध्यम प्रतिबंधित मोडला सक्ती करते आणि वाकरर्त्यांना ही सेटिंग बदलण्‍यापासून प्रतिबंधित करते.
@@ -2208,22 +2255,22 @@
       वापरकर्त्याने निवडलेले चॅनेल ChromeOsReleaseChannel धोरणाद्वारे अधिलिखित केले जाईल, परंतु धोरण चॅनेल डिव्हाइसवर इंस्टॉल असलेल्या एकापेक्षा अधिक स्थिर असल्यास, चॅनेल केवळ डिव्हाइसवर इंस्टॉल केलेल्या एकापेक्षा उच्च आवृत्ती संख्या गाठणाऱ्या अधिक स्थिर चॅनेलच्या आवृत्तीनंतर स्विच होईल.</translation>
 <translation id="6559057113164934677">कॅमेरा आणि मायक्रोफोनवर प्रवेश करण्यास कोणत्याही साइटला अनुमती देऊ नका</translation>
 <translation id="6561396069801924653">सिस्टम ट्रे मेनूमधील प्रवेश करण्यायोग्य पर्याय दर्शवा</translation>
-<translation id="6565312346072273043">लॉगिन स्क्रीनवर ऑन-स्क्रीन प्रवेश करता येणार्‍या वैशिष्ट्याची डीफॉल्ट स्थिती सेट करा.
+<translation id="6565312346072273043">लॉगिन स्क्रीनवर ऑन-स्क्रीन अॅक्सेस करता येणार्‍या वैशिष्ट्याची डीफॉल्ट स्थिती सेट करा.
 
-          हे धोरण सत्य वर सेट केले असल्यास, लॉग इन स्क्रीन दर्शविली जाते तेव्हा ऑन-स्क्रीन कीबोर्ड सक्षम केला जाईल.
+          हे धोरण सत्य वर सेट केले असल्यास, लॉग इन स्क्रीन दाखवली जाते तेव्हा ऑन-स्क्रीन कीबोर्ड सक्षम केला जाईल.
 
-          हे धोरण असत्य वर सेट केल्यास, लॉग इन स्क्रीन दर्शविली जाते तेव्हा ऑन-स्क्रीन कीबोर्ड अक्षम केला जाईल.
+          हे धोरण असत्य वर सेट केल्यास, लॉग इन स्क्रीन दाखवली जाते तेव्हा ऑन-स्क्रीन कीबोर्ड अक्षम केला जाईल.
 
-          आपण हे धोरण सेट केल्यास, वापरकर्ते ऑन-स्क्रीन कीबोर्ड सक्षम किंवा अक्षम करून ते तात्पुरते अधिशून्य करू शकतात. तथापि, वापरकर्त्याची निवड कायम रहात नाही आणि जेव्हाही लॉग इन स्क्रीन एक नवीन दर्शविते किंवा वापरकर्ता एका मिनिटासाठी लॉग इन स्क्रीनवर निष्क्रिय असतो तेव्हा डीफॉल्ट पुनर्संचयित केले जाते.
+          तुम्ही हे धोरण सेट केल्यास, वापरकर्ते ऑन-स्क्रीन कीबोर्ड सक्षम किंवा अक्षम करून ते तात्पुरते ओव्हरराइड करू शकतात. पण, वापरकर्त्याची निवड कायम रहात नाही आणि जेव्हाही लॉग इन स्क्रीन एक नवीन दर्शविते किंवा वापरकर्ता एका मिनिटासाठी लॉग इन स्क्रीनवर निष्क्रिय असतो तेव्हा डीफॉल्ट रिस्टोअर केले जाते.
 
-          हे धोरण सेट न केलेले सोडल्यास, लॉगिन स्क्रीन प्रथम दर्शविली जाते तेव्हा ऑन-स्क्रीन कीबोर्ड अक्षम केेले असते. वापरकर्ते कोणत्याही वेळी ऑन-स्क्रीन कीबोर्ड सक्षम किंवा अक्षम करू शकतात आणि लॉग इन स्क्रीनवरील तिची स्थिती वापरकर्त्यांमध्ये कायम रहाते.</translation>
+          हे धोरण सेट न केलेले सोडल्यास, लॉगिन स्क्रीन प्रथम दाखवली जाते तेव्हा ऑन-स्क्रीन कीबोर्ड अक्षम केेले असत. वापरकर्ते कोणत्याही वेळी ऑन-स्क्रीन कीबोर्ड सक्षम किंवा अक्षम करू शकतात आणि लॉग इन स्क्रीनवरील तिची स्थिती वापरकर्त्यांमध्ये कायम रहाते.</translation>
 <translation id="6573305661369899995">URL निर्बंधांचा बाह्य स्रोत सेट करा</translation>
 <translation id="6598235178374410284">वापरकर्ता अवतार इमेज</translation>
 <translation id="6603004149426829878">टाइमझोनचे निराकरण करताना नेहम‍ी कोणतेही उपलब्ध असलेले स्थान सिग्नल सर्व्हरकडे पाठवा</translation>
-<translation id="6628646143828354685">वेबसाइटना जवळपासच्या Bluetooth डिव्हाइसेसमध्ये प्रवेश मिळविण्याची अनुमती द्यावी किंवा नाही ते सेट करण्याची आपल्याला अनुमती देते. प्रवेश पूर्णपणे अवरोधित केला जाऊ शकतो किंवा वेबसाइट जवळपासच्या Bluetooth डिव्हाइसेसमध्ये प्रवेश करू इच्छिते तेव्हा प्रत्येक वेळी वापरकर्त्यास विचारले जाऊ शकते.
+<translation id="6628646143828354685">वेबसाइटना जवळपासच्या ब्लूटूथ डिव्हाइसमध्ये अॅक्सेस मिळविण्याची अनुमती द्यावी किंवा नाही ते सेट करण्याची तुम्हाला अनुमती देते. अॅक्सेस पूर्णपणे अवरोधित केला जाऊ शकतो किंवा वेबसाइट जवळपासच्या ब्लूटूथ डिव्हाइसमध्ये अॅक्सेस करू इच्छिते तेव्हा प्रत्येक वेळी वापरकर्त्यास विचारले जाऊ शकते.
 
           हे धोरण सेट न केलेले ठेवल्यास, '3' वापरले जाईल आणि वापरकर्ता ते बदलण्यास सक्षम असेल.</translation>
-<translation id="6641981670621198190">3D ग्राफिक्स API साठी समर्थन अक्षम करा</translation>
+<translation id="6641981670621198190">3D ग्राफिक्स API साठी सपोर्ट अक्षम करा</translation>
 <translation id="6647965994887675196">सत्य वर सेट केल्यास, पर्यवेक्षी वापरकर्ते तयार केले आणि वापरले जाऊ शकतात.
 
           असत्य वर सेट केल्यास किंवा कॉन्फिगर केले नसल्यास, पर्यवेक्षी-वापरकर्ता निर्मिती आणि लॉग इन अक्षम होईल. सर्व विद्यमान पर्यवेक्षी वापरकर्ते लपविले जातील.
@@ -2237,7 +2284,7 @@
 
       हे धोरण सेट न करता सोडल्यास किंवा सूची रिक्त असल्यास <ph name="PRODUCT_NAME" /> मधील सर्व योजना प्रवेशयोग्य होतील.</translation>
 <translation id="6652197835259177259">स्थानिकपणे व्यवस्थापित केलेल्या वापरकर्ते सेटिंग्ज</translation>
-<translation id="6658245400435704251">डिव्हाइसने प्रथम अपडेट सर्व्हरवर टाकल्यानंतर त्याच्या अपडेटाच्या डाउनलोडला यादृच्छिकपणे विलंब करते तोपर्यंतच्या सेकंदांची संख्या निर्दिष्ट करते. डिव्हाइस या भागाच्या वेळेची भिंतीवरील घड्याळाच्या वेळेनुसार आणि उर्वरीत भागात अपडेट तपासणीच्या संख्येची प्रतीक्षा करू शकते. एखाद्या बाबतीत, स्कॅटर निश्चित वेळेसाठी बांधील असेल ज्यामुळे डिव्हाइसला अपडेट कायमचे डाउनलोड करण्यासाठी कधीही प्रतीक्षा करावी लागणार नाही.</translation>
+<translation id="6658245400435704251">डिव्हाइसने प्रथम अपडेट सर्व्हरवर टाकल्यानंतर त्याच्या अपडेटच्या डाउनलोडला कशाही क्रमाने विलंब करते तोपर्यंतच्या सेकंदांची संख्या नमूद करते. डिव्हाइस या भागाच्या वेळेची भिंतीवरील घड्याळाच्या वेळेनुसार आणि उर्वरीत भागात अपडेट तपासणीच्या संख्येची प्रतीक्षा करू शकते. एखाद्या बाबतीत, स्कॅटर निश्चित वेळेसाठी बांधील असेल ज्यामुळे डिव्हाइसला अपडेट कायमचे डाउनलोड करण्यासाठी कधीही प्रतीक्षा करावी लागणार नाही.</translation>
 <translation id="6665599130599311250">हे धोरण असत्यवर सेट केल्यास किंवा सेट न करता सोडल्यास, व्यवस्थापित केलेले अतिथी सत्र https://support.google.com/chrome/a/answer/3017014 - साधारण "सार्वजनिक सत्र" यामध्ये नमूद केल्याप्रमाणे वर्तन करेल.
 
       हे धोरण सत्यवर सेट केल्यास, व्यवस्थापित केलेले अतिथी सत्र "व्यवस्थापित सत्र" याप्रमाणे वर्तन करेल जे साधारण "सार्वजनिक सत्र" यामध्ये लागू असलेली अनेक बंधने काढून टाकते.
@@ -2287,7 +2334,7 @@
       बंद केलेले (असत्य वर सेट केलेले) असल्यास, <ph name="PRODUCT_NAME" /> उत्पादन माहिती पुरवण्यासाठी वापरकर्त्यांना पूर्ण-टॅब आशय दाखवणार नाही.
 
       हे सेटिंग वापरकर्त्यांना <ph name="PRODUCT_NAME" /> मध्ये साइन इन करण्यात, ते त्यांचे डीफॉल्ट ब्राउझर म्हणून निवडण्यात त्यांना मदत करणाऱ्या किंवा इतर प्रकारे त्यांना उत्पादन वैशिष्ट्यांची माहिती देणाऱ्या स्वागत पेजचे सादरीकरण नियंत्रित करते.</translation>
-<translation id="6766216162565713893">जवळपासच्या Bluetooth डिव्हाइसमध्ये प्रवेशाची मंजूरी देण्यासाठी वापरकर्त्यास विचारण्याची साइटना अनुमती देते</translation>
+<translation id="6766216162565713893">जवळपासच्या ब्लूटूथ डिव्हाइसमध्ये अॅक्सेसची मंजुरी देण्यासाठी वापरकर्त्यास विचारण्याची साइटना अनुमती देते</translation>
 <translation id="6770454900105963262">सक्रिय कियोस्क सत्राविषयी माहितीचा अहवाल द्या</translation>
 <translation id="6786747875388722282">विस्तार</translation>
 <translation id="6786967369487349613">रोमिंग प्रोफाइल निर्देशिका सेट करा</translation>
@@ -2360,7 +2407,7 @@
       विनंत्‍या जोडल्‍या जातील.
 
       वापरकर्ते ही सेटिंग बदलू शकणार नाहीत किंवा ओव्‍हरराइड करू शकणार नाहीत.</translation>
-<translation id="6908640907898649429">डीफॉल्ट शोध प्रदाता कॉन्फिगर करते. वापरकर्ता डीफॉल्ट शोध अक्षम करण्यासाठी वापरेल किंवा निवडेल असा डीफॉल्ट शोध प्रदाता आपण निर्दिष्ट करु शकता.</translation>
+<translation id="6908640907898649429">डीफॉल्ट शोध पुरवठादार कॉन्फिगर करते. वापरकर्ता डीफॉल्ट शोध अक्षम करण्यासाठी वापरेल किंवा निवडेल असा डीफॉल्ट शोध पुरवठादार तुम्ही निर्दिष्ट करु शकता.</translation>
 <translation id="6913068954484253496">सर्व आयपी अॅड्रेसवर <ph name="PRODUCT_NAME" /> याला कास्‍ट डिव्‍हाइसशी कनेक्ट होण्याची अनुमती देते.</translation>
 <translation id="6915442654606973733">बोललेला अभिप्राय प्रवेशयोग्यता वैशिष्ट्य सक्षम करा.
 
@@ -2391,7 +2438,7 @@
 <translation id="6922884955650325312"><ph name="FLASH_PLUGIN_NAME" /> प्लगइन ब्लॉक करा</translation>
 <translation id="6923366716660828830">डीफॉल्ट शोध प्रदात्याचे नाव निर्दिष्‍ट करते. रिक्त किंवा सेट न करता सोडल्यास, URL शोध ने निर्दिष्‍ट केलेले होस्‍ट नाव वापरले जाईल.
 'डीफॉल्ट शोध प्रदाता सक्षम' धोरण सक्षम केल्यासच हे धोरण विचारात घेतले जाते.</translation>
-<translation id="6931242315485576290">Google सह डेटाचे समक्रमण अक्षम करा</translation>
+<translation id="6931242315485576290">Google सह डेटाचे सिंक्रोनायझेशन अक्षम करा</translation>
 <translation id="6936894225179401731">प्रॉक्सी सर्व्हरच्या एकाच वेळच्या कनेक्‍शनची कमाल संख्‍या नि‍र्द‍िष्‍ट करते.
 
       काही प्रॉक्सी सर्व्हर प्रति क्लायंट एकाच वेळी येणार्‍या कनेक्‍शनची उच्च संख्‍या हाताळू शकत नाहीत आणि या प्रकाराचे हे धोरण निम्नतम मूल्यावर सेट करुन निराकरण करता येते.
@@ -2402,7 +2449,7 @@
 
       हे धोरण सेट न करता सोडल्यास डीफॉल्ट मूल्य वापरण्‍यात येईल जे 32 आहे.</translation>
 <translation id="6943577887654905793">Mac/Linux प्राधान्य नाव:</translation>
-<translation id="69525503251220566">डीफॉल्ट शोध प्रदात्याकरिता प्रतिमे-नुसार-शोध प्रदान करणारा प्राचल</translation>
+<translation id="69525503251220566">डीफॉल्ट शोध प्रदात्याकरिता इमेज-नुसार-शोध प्रदान करणारा प्राचल</translation>
 <translation id="6956272732789158625">कोणत्याही साइटला की निर्मिती वापरण्याची अनुमती देऊ नका</translation>
 <translation id="6965859329738616662">स्मार्ट डीम मॉडेलला स्क्रीन मंद होईपर्यंत वेळ वाढवण्याची अनुमती आहे की नाही हे निर्देशित करते. 
       जेव्हा स्क्रीन मंद होत असते तेव्हा स्क्रीन मंद करण्यासाठी विलंब लावणे आवश्यक आहे का याचे स्मार्ट डीम मॉडेल गुणांकन करते. जर स्मार्ट डीम मॉडेलने स्क्रीन मंद करण्यासाठी विलंब लावला तर स्क्रीन मंद होईपर्यंत वेळ प्रभावीपणे वाढवली जाते. या प्रकरणात, स्क्रीन ऑफ, स्क्रीन लॉक आणि निष्क्रिय होण्यास लागणारा विलंब हा मूळत: कॉन्फिगर केल्याप्रमाणे स्क्रीन मंद होण्याच्या विलंबापासूनचे समान अंतर कायम ठेवण्यासाठी अॅडजस्ट केला जातो.
@@ -2472,13 +2519,13 @@
 हे धोरण सेट न करता तसेच राहिल्यास, 'DefaultWebUsbGuardSetting' धोरण सेट केले असल्यास त्यातून किंवा वापरकर्त्यांच्या वैयक्तिक कॉन्फिगरेशनमधून सर्व साइटसाठी वैश्विक डीफॉल्ट मूल्य वापरण्‍यात येईल.
 
 या धोरणातील URL पॅटर्न हे WebUsbBlockedForUrls द्वारे कॉन्फिगर केलेल्यांच्या विरूद्ध असू नयेत. जर URL दोन्हींशी जुळत असेल तर त्या दोन्हींपैकी कोणत्या धोरणाला प्राधान्य दिले जाईल हे स्पष्ट केलेले नाही.</translation>
-<translation id="7106631983877564505"><ph name="PRODUCT_OS_NAME" /> डिव्हाइसेस निष्क्रिय किंवा निलंबित झाल्यावर लॉक सक्षम करा. 
+<translation id="7106631983877564505"><ph name="PRODUCT_OS_NAME" /> डिव्हाइस निष्क्रिय किंवा निलंबित झाल्यावर लॉक सक्षम करा. 
 
-      आपण हे सेटिंग सक्षम केल्यास, निष्क्रियतेमधून डिव्हाइस अनलॉक करण्यासाठी वापरकर्त्यांना एक पासवर्ड विचारला जाईल. 
+      तुम्ही हे सेटिंग सक्षम केल्यास, निष्क्रियतेमधून डिव्हाइस अनलॉक करण्यासाठी वापरकर्त्यांना एक पासवर्ड विचारला जाईल. 
 
-      आपण हे सेटिंग अक्षम केल्यास, निष्क्रियतेमधून डिव्हाइस अनलॉक करण्यासाठी वापरकर्त्यांना पासवर्ड विचारला जाणार नाही.
+      तुम्ही हे सेटिंग अक्षम केल्यास, निष्क्रियतेमधून डिव्हाइस अनलॉक करण्यासाठी वापरकर्त्यांना पासवर्ड विचारला जाणार नाही.
 
-      आपण हे सेटिंग सक्षम किंवा अक्षम केल्यास, वापरकर्ते ते बदलू किंवा अधिशून्य करू शत नाहीत.
+      तुम्ही हे सेटिंग सक्षम किंवा अक्षम केल्यास, वापरकर्ते ते बदलू किंवा ओव्हरराइड करू शत नाहीत.
 
       धोरण सेट न करता सोडल्यास वापरकर्त्यास डिव्हाइस अनलॉक करण्यासाठी पासवर्ड विचारला जावा किंवा नाही ते वापरकर्ता निवडू शकतो.</translation>
 <translation id="7115494316187648452"><ph name="PRODUCT_NAME" /> प्रक्रिया OS लॉगिनवर प्रारंभ झाली किंवा नाही हे निर्धारित करते आणि अंतिम ब्राउझर विंडो बंद झाल्यानंतर देखील चालू ठेवते, आणि कोणत्याही सत्र कुकीजसह, पार्श्वभूमी अॅप्स आणि वर्तमान ब्राउझिंग सत्र सक्रिय ठेवण्याची अनुमती देते.
@@ -2493,11 +2540,11 @@
       हे धोरण कॉन्फिगर न केल्यास, वापरकर्त्यांना कशात साइन इन करण्‍याची अनुमती आहे त्यावर कोणतेही बंधन नसते. लक्षात ठेवा की नवीन वापरकर्ते तयार करण्यासाठी <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> धोरण योग्य प्रकारे कॉन्फिगर केले जाणे आवश्‍यक असते.</translation>
 <translation id="7126716959063786004">टास्क मॅनेजरवर संपणाऱ्या प्रक्रिया यास सुरू करा</translation>
 <translation id="7127892035367404455">लक्ष्य आवृत्तीवर रोलबॅक करा</translation>
-<translation id="7128918109610518786">अॅप्लिकेशन अभिज्ञापक <ph name="PRODUCT_OS_NAME" /> लाँचर बारमध्ये पिन करुन सूची रुपात अॅप्लिकेशन दर्शवितात.
+<translation id="7128918109610518786">अॅप्स आयडेंटिफाय <ph name="PRODUCT_OS_NAME" /> लाँचर बारमध्ये पिन करुन सूची रुपात अॅप्स दर्शवितात.
 
-      हे धोरण सेट केलेले नसल्यास, अॅप्लिकेशनांचा संच निश्चित केला जातो आणि वापरकर्त्याकडून बदलला जाऊ शकत नाही.
+      हे धोरण सेट केलेले नसल्यास, अॅप्सचा संच निश्चित केला जातो आणि वापरकर्त्याकडून बदलला जाऊ शकत नाही.
 
-      हे धोरण सेट न करता सोडल्यास, वापरकर्ता लाँचरमध्ये पिन केलेल्या अॅप्लिकेशनांची सूची बदलू शकतो.</translation>
+      हे धोरण सेट न करता सोडल्यास, वापरकर्ता लाँचरमध्ये पिन केलेल्या अॅप्सची सूची बदलू शकतो.</translation>
 <translation id="7132877481099023201">सूचनेशिवाय व्हिडिओ कॅप्चर डिव्हाइसेसवर प्रवेश मंजूर करणार असलेल्या URL</translation>
 <translation id="7167436895080860385">वापरकर्त्यांना पासवर्ड व्यवस्थापकामध्ये पासवर्ड दर्शविण्याची अनुमती द्या (बहिष्कृत केलेले)</translation>
 <translation id="7173856672248996428">तात्पुरते प्रोफाईल</translation>
@@ -2507,7 +2554,7 @@
 <translation id="7194407337890404814">डीफॉल्ट शोध प्रदाता नाव</translation>
 <translation id="7199304109870655950">Chrome रिमोट डेस्कटॉप होस्टमध्‍ये रिमोट अॅक्सेस पर्याय कॉन्फिगर करा.
 
-  वापरकर्ता Chrome रिमोट डेस्कटॉप अॅप्लिकेशन वापरून कनेक्‍ट करतो त्या लक्ष्य मशीनवर चालणारी Chrome रिमोट डेस्कटॉप होस्ट ही मूळ सेवा आहे. मूळ सेवा <ph name="PRODUCT_NAME" /> ब्राउझरपेक्षा स्वतंत्ररित्या पॅकेज केली आणि अंमलात आणली जाते.
+  वापरकर्ता Chrome रिमोट डेस्कटॉप अॅप्लिकेशन वापरून कनेक्‍ट करतो त्या टार्गेट मशीनवर चालणारी Chrome रिमोट डेस्कटॉप होस्ट ही मूळ सेवा आहे. मूळ सेवा <ph name="PRODUCT_NAME" /> ब्राउझरपेक्षा स्वतंत्ररित्या पॅकेज केली आणि अंमलात आणली जाते.
 
       Chrome रिमोट डेस्कटॉप होस्ट इंस्टॉल केला जाईपर्यंत
       ही धोरणे दुर्लक्षित केली जातात.</translation>
@@ -2526,11 +2573,11 @@
 <translation id="7234280155140786597">निषिद्ध मूळ संदेशन होस्टची नावे (किंवा सर्वांसाठी *)</translation>
 <translation id="7236775576470542603">लॉगिन स्क्रीनवर सक्षम असलेल्या स्क्रीन भिंगाचा डीफॉल्ट प्रकार सेट करा.
 
-          हे धोरण सेट असल्यास, जेव्हा लॉगिन स्क्रीन दर्शविली जाते, तेव्हा सक्षम असलेला स्क्रीन भिंगाचा प्रकार ते नियंत्रित करते. "काहीही नाही" वर धोरण सेट करणे स्क्रीन भिंग अक्षम करते.
+          हे धोरण सेट असल्यास, जेव्हा लॉगिन स्क्रीन दाखवली जाते, तेव्हा सक्षम असलेला स्क्रीन भिंगाचा प्रकार ते नियंत्रित करते. "काहीही नाही" वर धोरण सेट करणे स्क्रीन भिंग अक्षम करते.
 
-          आपण हे धोरण सेट केल्यास, वापरकर्ते स्क्रीन भिंग सक्षम करून किंवा अक्षम करून ते तात्पुरते अधिलिखित करू शकतात. तथापि, वापरकर्त्याची निवड कायम रहात नाही आणि लॉगिन स्क्रीन एक नवीन दर्शविते तेव्हा किंवा एका मिनिटासाठी लॉगिन स्क्रीनवर वापरकर्ता निष्क्रिय असतो तेव्हा डीफॉल्ट पुनर्संचयित केले जाते.
+          तुम्ही हे धोरण सेट केल्यास, वापरकर्ते स्क्रीन भिंग सक्षम करून किंवा अक्षम करून ते तात्पुरते ओव्हरराइड करू शकतात. पण, वापरकर्त्याची निवड कायम रहात नाही आणि लॉगिन स्क्रीन एक नवीन दर्शविते तेव्हा किंवा एका मिनिटासाठी लॉगिन स्क्रीनवर वापरकर्ता निष्क्रिय असतो तेव्हा डीफॉल्ट रिस्टोअर केले जाते.
 
-          हे धोरण सेट न करता सोडल्यास, जेव्हा लॉगिन स्क्रीन प्रथम दर्शविली जाते, तेव्हा स्क्रीन भिंग अक्षम होतो. वापरकर्ते कोणत्याही वेळी स्क्रीन भिंग आणि लॉगिन स्क्रीनवरील वापरकर्त्यांमधील कायम असलेली त्याची स्थिती सक्षम किंवा अक्षम करू शकतात.</translation>
+          हे धोरण सेट न करता सोडल्यास, जेव्हा लॉगिन स्क्रीन प्रथम दाखवली जाते, तेव्हा स्क्रीन भिंग अक्षम होतो. वापरकर्ते कोणत्याही वेळी स्क्रीन भिंग आणि लॉगिन स्क्रीनवरील वापरकर्त्यांमधील कायम असलेली त्याची स्थिती सक्षम किंवा अक्षम करू शकतात.</translation>
 <translation id="7249828445670652637">ARC-अॅप्स वर <ph name="PRODUCT_OS_NAME" /> CA प्रमाणपत्रांचा वापर सक्षम करा</translation>
 <translation id="725322441686394886">सेट केलेले नसल्यास, Chrome क्लीनअपला नको असलेले सॉफ्टवेअर सापडल्यास, ते  SafeBrowsingExtendedReportingEnabled ने सेट केलेल्या धोरणानुसार Google ला स्कॅनबद्दलचा मेटाडेटा अहवाल पाठवू शकते. त्यानंतर Chrome क्लीनअपद्वारे वापरकर्त्याला नको असलेले सॉफ्टवेअर साफ करण्याबद्दल विचारले जाईल. भविष्यात नको असलेल्या सॉफ्टवेअरच्या शोधात साहाय्य मिळवण्यासाठी वापरकर्ता Google सोबत क्लीनअपचे परिणाम शेअर करण्याचा पर्याय निवडू शकतो. या परिणामांमध्ये Chrome गोपनीयता व्हाइटपेपरमध्ये वर्णन केल्याप्रमाणे फाइल मेटाडेटा आपोआप इंस्टॉल केलेले एक्स्टेंशन आणि नोंदणी की असतात. 
 
@@ -2540,7 +2587,7 @@
 
      डोमेनशी न जोडलेल्या <ph name="MS_AD_NAME" /> Windows इंस्टंसवर हे धोरण उपलब्ध नाही.</translation>
 <translation id="7258823566580374486">दूरस्थ प्रवेश होस्टचे झाकणे सक्षम करा</translation>
-<translation id="7260277299188117560">p2p सक्षम केलेले स्वयं अपडेट</translation>
+<translation id="7260277299188117560">p2p सुरू केलेले ऑटो अपडेट</translation>
 <translation id="7261252191178797385">डिव्हाइस वॉलपेपर इमेज</translation>
 <translation id="7264704483008663819">हे धोरण M६८ मध्ये कालबाह्य झाले आहे, त्याऐवजी कृपया DeveloperToolsAvailability वापरा.
 
@@ -2560,11 +2607,11 @@
 
           हे सेटिंग अक्षम केले असल्यास, हे वैशिष्ट्य उपलब्ध असणार नाही.</translation>
 <translation id="7275334191706090484">व्यवस्थापित केलेले बुकमार्क</translation>
-<translation id="7291084543582732020">तुम्ही ही सेटिंग चालू केल्यास, वैशिष्ट्याच्या गरजा पूर्ण झाल्यास, वापरकर्त्यांना Smart Lock वापरू देते.
+<translation id="7291084543582732020">तुम्ही हे सेटिंग सुरू केल्यास, वैशिष्ट्याच्या गरजा पूर्ण झाल्यास, वापरकर्त्यांना Smart Lock वापरू देते.
 
-     तुम्ही ही सेटिंग बंद केल्यास, वापरकर्त्यांना Smart Lock वापरू दिले जाणार नाही.
+     तुम्ही हे सेटिंग बंद केल्यास, वापरकर्त्यांना Smart Lock वापरू दिले जाणार नाही.
 
-     हे धोरण सेट न करता सोडल्यास, एंटरप्राइझ-व्यवस्थापित वापरकर्त्यांसाठी डीफॉल्ट अनुमत नसेल आणि व्यवस्थापित न केलेल्या वापरकर्त्यांसाठी त्याची अनुमती असेल.</translation>
+     हे धोरण सेट न करता सोडल्यास, एंटरप्राइझ-व्यवस्थापित वापरकर्त्यांसाठी डीफॉल्ट अनुमती नसेल आणि व्यवस्थापित न केलेल्या वापरकर्त्यांसाठी त्याची अनुमती असेल.</translation>
 <translation id="7295019613773647480">पर्यवेक्षी वापरकर्ते सक्षम करा</translation>
 <translation id="7301543427086558500">शोध इंजिनमधून शोध संज्ञा विस्तृत करण्यासाठी वापरल्या जाऊ शकणाऱ्या वैकल्पिक URLs ची एक सूची निर्दिष्ट करते. URLs मध्ये <ph name="SEARCH_TERM_MARKER" /> स्ट्रींग असावी, जी शोध संज्ञा विस्तृत करण्यासाठी वापरली जाईल.
 
@@ -2653,23 +2700,23 @@
 <translation id="7529100000224450960">आपल्याला पॉपअप उघडण्‍याची अनुमती असलेल्या url साइट निर्दिष्‍ट करणार्‍या नमुन्यांची सूची सेट करण्‍याची अनुमती देते.
 
           हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट पॉपअप सेटिंग' धोरण, ‍किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉन्फिगरेशन वापरले जाईल.</translation>
-<translation id="7529144158022474049">स्कॅटर घटक स्वयं अपडेट करा</translation>
+<translation id="7529144158022474049">स्कॅटर घटक ऑटो अपडेट करा</translation>
 <translation id="7534199150025803530">या धोरणाचा Android Google ड्राइव्ह अॅपवर कोणताही प्रभाव नसतो. आपण मोबाइल कनेक्शन वरून Google ड्राइव्ह चा वापर करणे प्रतिबंधित करू इच्छित असल्यास, आपण Android Google ड्राइव्ह अॅपच्या स्थापनेची अनुमती रद्द करावी.</translation>
 <translation id="7547549430720182663">मर्ज करा</translation>
-<translation id="7553535237300701827">हे धोरण सेट केले असते तेव्हा, सेटिंगच्या मूल्यावर आधारित लॉग इन प्रमाणीकरण प्रवाह खालीलपैकी एका प्रकारांमधील असेल:
+<translation id="7553535237300701827">हे धोरण सेट केले असते तेव्हा, सेटिंगच्या मूल्यावर आधारित लॉग इन ऑथेंटिकेशन प्रवाह खालीलपैकी एका प्रकारांमधील असेल:
 
-      GAIA वर सेट केले असल्यास, सामान्य GAIA प्रमाणीकरण प्रवाहाद्वारे लॉग इन केले जाईल.
+      GAIA वर सेट केले असल्यास, सामान्य GAIA ऑथेंटिकेशन प्रवाहाद्वारे लॉग इन केले जाईल.
 
-      SAML_INTERSTITIAL वर सेट केले असल्यास, वापरकर्त्यास डिव्हाइसच्या नोंदणी डोमेनच्या SAML IdP द्वारे प्रमाणीकरणासह पुढे नेणारी किंवा सामान्य GAIA लॉग इन प्रवाहावर परत नेणारी एक खंडित स्क्रीन लॉग इन दर्शवेल.</translation>
+      SAML_INTERSTITIAL वर सेट केले असल्यास, वापरकर्त्यास डिव्हाइसच्या नोंदणी डोमेनच्या SAML IdP द्वारे ऑथेंटिकेशनासह पुढे नेणारी किंवा सामान्य GAIA लॉग इन प्रवाहावर परत नेणारी एक खंडित स्क्रीन लॉग इन दर्शवेल.</translation>
 <translation id="755951849901630953">सेट नसल्यावर किंवा सत्यवर सेट असताना <ph name="PRODUCT_NAME" /> मधील सर्व घटकांसाठी घटक अपडेट सुरू करते.
 
      असत्यवर सेट केलेले असल्यास, घटकांचे अपडेट बंद केले जातात. तथापि, काही घटकांना या धोरणातून सवलत मिळते: एक्झिक्युटेबल कोड नसलेल्या ब्राउझरची कार्यक्षमता फारशी कमी करत नाही किंवा त्याच्या सुरक्षेसाठी गंभीर ठरू शकणाऱ्या अशा कोणत्याही घटकाचे अपडेट बंद केले जाणार नाहीत.
       अशा प्रकारच्या घटकांच्या उदाहरणांमध्ये सर्टिफिकेट रद्द करण्याची सूची आणि सुरक्षित ब्राउझिंग डेटा समाविष्ट आहे.
       सुरक्षित ब्राउझिंगबाबत अधिक माहितीसाठी https://developers.google.com/safe-browsing पहा.</translation>
 <translation id="7566878661979235378">SAML लॉग इन ऑथेंटिकेशन प्रकार</translation>
-<translation id="757395965347379751">हे सेटिंग सक्षम केले असते तेव्हा, SHA-1 स्वाक्षरीकृत प्रमाणपत्रे जोपर्यंत स्थानिकरित्या इंस्टॉल-केलेल्या CA प्रमाणपत्रांना यशस्वीरित्या प्रमाणित आणि श्रृंखलाबद्ध करतात तोपर्यंत त्यांना <ph name="PRODUCT_NAME" /> अनुमती देते.
-      लक्षात ठेवा हे धोरण SHA-1 स्वाक्षर्‍यांना अनुमती देणार्‍या ऑपरेटिंग प्रणाली प्रमाणपत्र पडताळणी स्टॅकवर अलंबून असते. OS अपडेट SHA-1 प्रमाणपत्रांची OS हाताळणी बदलत असल्यास, हे धोरण यापुढे प्रभावी असणार नाही. तसेच, संस्थांना SHA-1 वरून हलविण्यासाठी आणखी वेळ देण्याकरिता तात्पुरती उपाययोजना असावी हा या धोरणाचा हेतू आहे. 1 जानेवारी 2019 रोजी किंवा त्याच्या आसपास हे धोरण काढले जाईल.
-      हे धोरण सेट न केल्यास किंवा ते असत्यावर सेट केले असल्यास, <ph name="PRODUCT_NAME" /> सार्वजनिकरीत्या घोषित केलेल्या SHA-1 नापसंत केलेल्या अनुसूचीचे फॉलो करते.</translation>
+<translation id="757395965347379751">हे सेटिंग सक्षम केले असते तेव्हा, SHA-1 स्वाक्षरीकृत सर्टिफिकेट जोपर्यंत स्थानिकरित्या इंस्टॉल-केलेल्या CA सर्टिफिकेटंना यशस्वीरित्या प्रमाणित आणि श्रृंखलाबद्ध करतात तोपर्यंत त्यांना <ph name="PRODUCT_NAME" /> अनुमती देते.
+      लक्षात ठेवा हे धोरण SHA-1 स्वाक्षर्‍यांना अनुमती देणार्‍या ऑपरेटिंग प्रणाली सर्टिफिकेट पडताळणी स्टॅकवर अलंबून असते. OS अपडेट SHA-1 सर्टिफिकेटंची OS हाताळणी बदलत असल्यास, हे धोरण यापुढे प्रभावी असणार नाही. तसेच, संस्थांना SHA-1 वरून हलविण्यासाठी आणखी वेळ देण्याकरिता तात्पुरती उपाययोजना असावी हा या धोरणाचा हेतू आहे. 1 जानेवारी 2019 रोजी किंवा त्याच्या आसपास हे धोरण काढले जाईल.
+      हे धोरण सेट न केल्यास किंवा ते असत्यावर सेट केले असल्यास, <ph name="PRODUCT_NAME" /> सार्वजनिकरत्या घोषित केलेल्या SHA-1 नापसंत केलेल्या अनुसूचीचे फॉलो करते.</translation>
 <translation id="7593523670408385997">डिस्‍कवर कॅश   केलेल्‍या फायली संचयन करण्‍यासाठी <ph name="PRODUCT_NAME" /> वापर करेल त्‍या कॅश   आकारास कॉन्‍फिगर करते.
 
       आपण हे धोरण सेट केल्यास, वापरकर्त्याने '--disk-cache-size' ध्वजांकन निर्दिष्ट केले आहे किंवा नाही त्याचा विचार न करता <ph name="PRODUCT_NAME" /> प्रदान केलेला कॅश   आकार वापरेल. या धोरणात निर्दिष्ट केलेले मूल्य हे काटेकोर नसून त्याऐवजी कॅश   सिस्टीमला एक सूचना आहे, थोड्या मेगाबाइट्सखालील कोणतेही मूल्य खूप लहान आहे आणि किमान चालू शकणार्‍या मूल्यावर पूर्ण केले जाईल.
@@ -2685,7 +2732,7 @@
           विस्तार सूचीमध्ये नसल्यास किंवा सूची सेट केली नसल्यास, API वरील कॉल एरर कोडसह अयशस्वी होईल.</translation>
 <translation id="7625444193696794922">हे डिव्हाइस ज्यात लॉक करायला हवे तो रिलीज चॅनेल निर्दिष्‍ट करते.</translation>
 <translation id="7632724434767231364">GSSAPI लायब्ररी नाव</translation>
-<translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> मध्ये अॅप्लिकेशन लोकॅल कॉन्फिगर करते आणि वापरकर्त्यांना लोकॅल बदलण्यापासून प्रतिबंधित करते. आपण हे सेटिंग सक्षम केल्यास, <ph name="PRODUCT_NAME" /> निर्दिष्ट केलेले लोकॅल वापरते. कॉन्फिगर केलेले लोकॅल समर्थित नसल्यास, त्याऐवजी 'en-US' वापरले जाते. हे सेटिंग अक्षम केलेले किंवा कॉन्फिगर केलेले नसल्यास, <ph name="PRODUCT_NAME" /> वापरकर्त्याने-निर्दिष्ट केलेले लोकॅल (कॉन्फिगर असल्यास), सिस्टम लोकॅल किंवा फॉलबॅक लोकॅल 'en-US' पैकी एक वापरेल.</translation>
+<translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> मध्ये अॅप्स लोकॅल कॉन्फिगर करते आणि वापरकर्त्यांना लोकॅल बदलण्यापासून प्रतिबंधित करते. तुम्ही हे सेटिंग सुरू केल्यास, <ph name="PRODUCT_NAME" /> नमूद केलेले लोकॅल वापरते. कॉन्फिगर केलेले लोकॅल सपोर्ट केलेले नसल्यास, त्याऐवजी 'en-US' वापरले जाते. हे सेटिंग बंद केलेले किंवा कॉन्फिगर केलेले नसल्यास, <ph name="PRODUCT_NAME" /> वापरकर्त्याने नमूद केलेले लोकॅल (कॉन्फिगर असल्यास), सिस्टम लोकॅल किंवा फॉलबॅक लोकॅल 'en-US' पैकी एक वापरेल.</translation>
 <translation id="7641363659597330616">वापरकर्त्यांना सुरक्षा निर्णय बदलू न देता, <ph name="PRODUCT_NAME" /> द्वारे पूर्णपणे ब्लॉक केल्या जाणाऱ्या डाउनलोडचे प्रकार कॉन्फिगर करते.
 
       जर तुम्ही हे धोरण सेट केले तर, <ph name="PRODUCT_NAME" /> द्वारे विशिष्ट प्रकारचे डाउनलोड रोखले जातील आणि वापरकर्त्याला सुरक्षा इशारे टाळता येणार नाहीत.
@@ -2698,7 +2745,7 @@
 
       जेव्हा हे धोरण सेट केलेले नसेल, (किंवा 'कोणतेही विशेष निर्बंध नाहीत' हा पर्याय निवडलेला असेल), तेव्हा सुरक्षित ब्राउझिंगच्या विश्लेषण परिणामांवर आधारित नेहमीच्या सुरक्षा निर्बंधानुसार डाउनलोड स्वीकारले जातील.
 
-      लक्षात घ्या की वेब पेज आशय तसेच '...लिंक डाउनलोड करा' या संदर्भ मेनू पर्यायाद्वारे ट्रिगर झालेल्या डाउनलोडना हे निर्बंध लागू असतील. सध्याच्या दिसणाऱ्या पेजवरून केले जाणारे सेव्ह/डाउनलोड तसेच प्रिंटींग पर्यायांतून PDF म्हणून सेव्ह करण्यालादेखील हे निर्बंध लागू होणार नाहीत.
+      लक्षात घ्या की वेब पेज आशय तसेच '...लिंक डाउनलोड करा' या संदर्भ मेनू पर्यायाद्वारे ट्रिगर झालेल्या डाउनलोडना हे निर्बंध लागू असतील. सध्याच्या दिसणाऱ्या पेजवरून केले जाणारे सेव्ह/डाउनलोड तसेच प्रिंटींग पर्यायांतून पीडीएफ म्हणून सेव्ह करण्यालादेखील हे निर्बंध लागू होणार नाहीत.
 
       सुरक्षित ब्राउझिंगबाबत अधिक माहितीसाठी https://developers.google.com/safe-browsing पहा.</translation>
 <translation id="7643883929273267746"><ph name="PRODUCT_NAME" /> मध्ये दिसणारी खाती प्रतिबंधित करा</translation>
@@ -2717,15 +2764,15 @@
 <translation id="7687943045976362719">हे धोरण सेट केले असल्यास निर्दिष्ट आशय प्रकार <ph name="PRODUCT_FRAME_NAME" /> द्वारे हाताळले जातात.
 
           हे धोरण सेट केले नसल्यास, सर्व साइटसाठी डीफॉल्ट प्रस्तुतकर्ता वापरला जाईल. (<ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME" /> धोरण डीफॉल्ट प्रस्तुतकर्त्यास कॉन्फिगर करण्यासाठी वापरले जाऊ शकते.)</translation>
-<translation id="7694807474048279351"><ph name="PRODUCT_OS_NAME" /> अपडेट लागू केले गेल्यानंतर स्वयंचलित रीबूट अनुसूचित करा.
+<translation id="7694807474048279351"><ph name="PRODUCT_OS_NAME" /> अपडेट लागू केले गेल्यानंतर आपोआप रीबूट शेड्यूल करा.
 
-      जेव्हा हे धोरण सत्य वर सेट असते, तेव्हा <ph name="PRODUCT_OS_NAME" /> अपडेट लागू केले जाते आणि अपडेट प्रक्रिया पूर्ण होण्यास रीबूट आवश्यक असते तेव्हा स्वयंचलित रीबूट अनुसूचित केले जाते. रीबूट तात्काळ अनुसूचित केले जाते परंतु वापरकर्ता सध्या डिव्हाइस वापरत असल्यास, सुमारे 24 तास डिव्हाइसवर विलंब होऊ शकतो.
+      जेव्हा हे धोरण सत्य वर सेट असते, तेव्हा <ph name="PRODUCT_OS_NAME" /> अपडेट लागू केले जाते आणि अपडेट प्रक्रिया पूर्ण होण्यास रीबूट आवश्यक असते तेव्हा ऑटोचलित रीबूट शेड्यूल केले जाते. रीबूट तात्काळ शेड्यूल केले जाते परंतु वापरकर्ता सध्या डिव्हाइस वापरत असल्यास, सुमारे 24 तास डिव्हाइसवर विलंब होऊ शकतो.
 
-      जेव्हा हे धोरण असत्य वर सेट असते, तेव्हा <ph name="PRODUCT_OS_NAME" /> अपडेट लागू केल्यानंतर कोणतेही स्वयंचलित रीबूट अनुसूचित केले जात नाही. जेव्हा वापरकर्ता पुढील डिव्हाइस रीबूट करतो तेव्हा अपडेट प्रक्रिया पूर्ण होते.
+      जेव्हा हे धोरण असत्य वर सेट असते, तेव्हा <ph name="PRODUCT_OS_NAME" /> अपडेट लागू केल्यानंतर कोणतेही ऑटोमॅटिक रीबूट शेड्यूल केले जात नाही. जेव्हा वापरकर्ता पुढील डिव्हाइस रीबूट करतो तेव्हा अपडेट प्रक्रिया पूर्ण होते.
 
-      आपण हे धोरण सेट केल्यास, वापरकर्ते ते बदलू किंवा अधिलिखित करू शकत नाहीत.
+      तुम्ही हे धोरण सेट केल्यास, वापरकर्ते ते बदलू किंवा ओव्हरराइड करता आले नाहीत.
 
-      टीप: सध्या, लॉगिन स्क्रीन दर्शविली जात असताना किंवा कियोस्क अॅप सत्र प्रगतीपथावर असतानाच केवळ स्वयंचलित रीबूट सक्षम केले जाते. हे भविष्यात बदलेल आणि कोणत्याही विशिष्ट प्रकारचे सत्र प्रगतीपथावर असले किंवा नसले तरीही याकडे दुर्लक्ष करून, धोरण नेहमी लागू होईल.</translation>
+      टिप: सध्या, लॉगिन स्क्रीन दर्शवली जात असताना किंवा कियोस्क अॅप सेश प्रगतीपथावर असतानाच केवळ आपोआप रीबूट सुरु केले जाते. हे भविष्यात बदलेल आणि कोणत्याही विशिष्ट प्रकारचे सेशे प्रगतीपथावर असले किंवा नसले तरीही याकडे दुर्लक्ष करून, धोरण नेहमी लागू होईल.</translation>
 <translation id="7701341006446125684">अॅप्स आणि विस्तार कॅश   आकार (बाइटमध्‍ये) सेट करा</translation>
 <translation id="7709537117200051035">होस्टवर प्रवेश करण्यास अनुमती असावी (सत्य) किंवा अवरोधित केले जावे (खोटे) हे निर्दिष्ट करणारा एका boolean ध्वजांकनावर होस्टनावे मॅप करणारा एक शब्दकोश.
 
@@ -2764,9 +2811,9 @@
 
       हे धोरण केवळ शिफारस केलेले म्हणून सेट केले जाऊ शकते. आपण या धोरणाचा वापर शिफारस केलेल्या भाषांचा संच शीर्षस्थानी हलविण्‍यासाठी करू शकता परंतु वापरकर्त्यांना त्यांच्या सत्रासाठी <ph name="PRODUCT_OS_NAME" /> द्वारे समर्थित असलेली कोणतीही भाषा निवडण्‍याची नेहमी अनुमती असते.
       </translation>
-<translation id="7763479091692861127"> OS च्या अपडेट वापरण्यास अनुमती असलेल्या कनेक्शनचे प्रकार. OS अपडेट संभाव्यतः त्यांच्या आकारामुळे कनेक्शनवर प्रचंड ताण देतात आणि जास्तीचा खर्च येऊ शकतो. तथापि, खर्चिक म्हणून विचारात घेतलेल्या कनेक्शन प्रकारांसाठी डीफॉल्टनुसार सक्षम नसतात, ज्यात त्यावेळी WiMax, Bluetooth आणि Cellular समाविष्ट असते.
+<translation id="7763479091692861127"> OS च्या अपडेटे वापरण्यास अनुमती असलेल्या कनेक्शनचे प्रकार. OS अपडेटे संभाव्यतः त्यांच्या आकारामुळे कनेक्शनवर प्रचंड ताण देतात आणि जास्तीचा खर्च येऊ शकतो. पण, खर्चिक म्हणून विचारात घेतलेल्या कनेक्शन प्रकारांसाठी बाय डीफॉल्ट सक्षम नसतात, ज्यात त्यावेळी WiMax, ब्लूटूथ आणि Cellular समाविष्ट असते.
 
-      मान्य कनेक्शन प्रकार अभिज्ञापक "ethernet", "wifi", "wimax", "bluetooth" आणि "cellular" हे आहेत.</translation>
+      मान्य कनेक्शन प्रकार आयडेंटिफायर "ethernet", "wifi", "wimax", "ब्लूटूथ" आणि "cellular" हे आहेत.</translation>
 <translation id="7763614521440615342">नवीन टॅब पृष्ठावर सामग्री सूचना दर्शवा</translation>
 <translation id="7774768074957326919">सिस्टम प्रॉक्सी सेटिंग्ज वापरा</translation>
 <translation id="7775831859772431793">आपण येथे प्रॉक्सी सर्व्हरची URL निर्दिष्‍ट करु शकता.  
@@ -2791,7 +2838,7 @@
       </translation>
 <translation id="780603170519840350">लेगसी सर्टिफिकेट हॅशच्या सूचीसाठी सर्टिफिकेट पारदर्शकता आवश्यकतेची अंमलबजावणी बंद करते.
 
-हे धोरण अशा सर्टिफिकेट शृंखला ज्यांमध्ये एका विशिष्ट subjectPublicKeyInfo हॅशसह असलेली सर्टिफिकेट असतात त्यांसाठी सर्टिफिकेट पारदर्शकता प्रकटन आवश्यकतांना बंद करण्याची अनुमती देते. त्यामुळे एंटरप्राइज होस्ट म्हणून वापरणे सुरू ठेवण्यासाठी ज्या सर्टिफिकेटना योग्यप्रकारे सार्वजनिकरीत्या प्रकट करण्यात आले नव्हते त्यांना अन्यथा अविश्वासार्ह मानले गेले असते परंतु याद्वारे त्यांना अनुमती मिळते.
+हे धोरण अशा सर्टिफिकेट शृंखला ज्यांमध्ये एका विशिष्ट subjectPublicKeyInfo हॅशसह असलेली सर्टिफिकेट असतात त्यांसाठी सर्टिफिकेट पारदर्शकता प्रकटन आवश्यकतांना बंद करण्याची अनुमती देते. त्यामुळे एंटरप्राइज होस्ट म्हणून वापरणे सुरू ठेवण्यासाठी ज्या सर्टिफिकेटना योग्यप्रकारे सार्वजनिकरत्या प्रकट करण्यात आले नव्हते त्यांना अन्यथा अविश्वासार्ह मानले गेले असते परंतु याद्वारे त्यांना अनुमती मिळते.
 
 हे धोरण सेट केले असताना सर्टिफिकेट पारदर्शकता अंमलबजावणीला बंद करण्यासाठी, खालीलपैकी एक अट पूर्ण झाली पाहिजे:
 1. हा सर्व्हर सर्टिफिकेटच्या subjectPublicKeyInfo चा हॅश आहे.
@@ -2814,11 +2861,11 @@
       हे धोरण सेट न करता सोडल्याने 5000 मिलिसेकंदांचे डीफॉल्ट मूल्य <ph name="PRODUCT_NAME" /> ला वापरायला लावेल.</translation>
 <translation id="7841880500990419427">यावर फॉलबॅक करण्‍यासाठी TLS आवृत्ती</translation>
 <translation id="7842869978353666042">Google ड्राइव्ह पर्याय कॉन्फिगर करा</translation>
-<translation id="7858404742201086014">तुम्ही ही सेटिंग चालू केल्यास, आउटडेटेड प्लगिन सामान्य प्लगिन म्हणून वापरली जातील.
+<translation id="7858404742201086014">तुम्ही हे सेटिंग सुरू केल्यास, आउटडेटेड प्लगिन सामान्य प्लगिन म्हणून वापरली जातील.
 
-     ही सेटिंग बंद  केली असल्यास आउटडेटेड प्लगिन वापरली जाणार नाहीत आणि वापरकर्ते ती चालवण्यासाठी परवानगी विचारणार नाहीत. 
+     हे सेटिंग बंद  केली असल्यास आउटडेटेड प्लगिन वापरली जाणार नाहीत आणि वापरकर्ते ती चालवण्यासाठी परवानगी विचारणार नाहीत. 
 
-ही सेटिंग सेट केली नसल्यास, वापरकर्ते आउटडेटेड प्लगिन चालवण्यासाठी परवानग्या विचारतील.</translation>
+हे सेटिंग सेट केलेले नसल्यास, वापरकर्ते आउटडेटेड प्लगिन चालवण्यासाठी परवानग्या विचारतील.</translation>
 <translation id="787125417158068494">SyncDisabled वर सेट केल्यास किंवा कॉन्फिगर न केल्यास, <ph name="PRODUCT_OS_NAME" /> प्रमाणपत्रे ARC-अॅप्ससाठी उपलब्ध असणार नाहीत. 
      CopyCaCerts वर सेट केल्यास, सर्व ONC-इंस्टॉल CA प्रमाणपत्रे <ph name="WEB_TRUSTED_BIT" /> सह ARC-अॅप्ससाठी उपलब्ध आहेत.</translation>
 <translation id="7882585827992171421">हे धोरण केवळ किरकोळ मोडमध्‍ये सक्रिय आहे.
@@ -2847,9 +2894,9 @@
 
           तपशीलवार उदाहरणांसाठी, यावर भेट द्या:
           <ph name="PROXY_HELP_URL" /></translation>
-<translation id="793134539373873765">जरी p2p हे OS अपडेट अभिभारासाठी वापरले जाणार असले किंवा नसले तरीही ते निर्दिष्ट करते. सत्य वर सेट केल्यास, डिव्हाइस संभाव्यतः इंटरनेट बँडविड्थ वापर आणि स्टोरेज कमी करून, LAN वरील अपडेट अभिभार वापरण्यासाठी शेअर करेल आणि प्रयत्न करेल. LAN वर अपडेट अभिभार उपलब्ध नसल्यास, अपडेट सर्व्हरवरून डाउनलोड करण्यात डिव्हाइस मागे पडेल. असत्य वर किंवा कॉन्फिगर न केलेल्यावर सेट केल्यास, p2p वापरले जाणार नाही.</translation>
+<translation id="793134539373873765">जरी p2p हे OS अपडेट पेलोडासाठी वापरले जाणार असले किंवा नसले तरीही ते नमूद करते. सत्य वर सेट केल्यास, डिव्हाइस संभाव्यतः इंटरनेट बँडविड्थ वापर आणि स्टोरेज कमी करून, LAN वरील अपडेट पेलोड वापरण्यासाठी शेअर करेल आणि प्रयत्न करेल. LAN वर अपडेट पेलोड उपलब्ध नसल्यास, अपडेट सर्व्हरवरून डाउनलोड करण्यात डिव्हाइस मागे पडेल. असत्य वर किंवा कॉन्फिगर न केलेल्यावर सेट केल्यास, p2p वापरले जाणार नाही.</translation>
 <translation id="7933141401888114454">पर्यवेक्षी वापरकर्त्यांची निर्मिती सक्षम करा</translation>
-<translation id="793473937901685727">ARC-अॅप्ससाठी प्रमाणपत्र उपलब्धता सेट करा</translation>
+<translation id="793473937901685727">ARC-अॅप्ससाठी सर्टिफिकेट उपलब्धता सेट करा</translation>
 <translation id="7937766917976512374">व्हिडिओ कॅप्चरला अनुमती द्या किंवा नाकारा</translation>
 <translation id="7941975817681987555">कोणत्याही नेटवर्क कनेक्शनवर नेटवर्क कारवाईचे पूर्वानुमान करू नका</translation>
 <translation id="7952880400776676958">
@@ -2867,14 +2914,14 @@
       </translation>
 <translation id="7952958573604504839"><ph name="NETWORK_PREDICTION_OPTIONS_POLICY_NAME" /> च्या पक्षात हे धोरण M48 मध्ये बहिष्कृत केले आहे आणि M54 मध्ये काढले आहे.
 
-      <ph name="PRODUCT_NAME" /> मध्ये नेटवर्क पूर्वानुमान चालू करते आणि वापरकर्त्यांना ही सेटिंग बदलण्यास प्रतिबंधित करते.
+      <ph name="PRODUCT_NAME" /> मध्ये नेटवर्क पूर्वानुमान सुरू करते आणि वापरकर्त्यांना हे सेटिंग बदलण्यास प्रतिबंधित करते.
 
-      हे केवळ DNS पूर्वप्राप्तीच नाही तर TCP आणि SSL पूर्वकनेक्शन आणि वेबपृष्ठांची पूर्वप्रस्तुती देखील नियंत्रित करते. या धोरणाचे नाव ऐतिहासिक कारणांसाठी DNS पूर्वप्राप्ती आहे.
+      हे केवळ DNS पूर्वप्राप्तीच नाही तर TCP आणि SSL पूर्वकनेक्शन आणि वेबपेजंची पूर्वप्रस्तुती देखील नियंत्रित करते. या धोरणाचे नाव ऐतिहासिक कारणांसाठी DNS पूर्वप्राप्ती आहे.
 
-      तुम्ही ही सेटिंग चालू किंवा बंद केल्यास, वापरकर्ते <ph name="PRODUCT_NAME" /> मध्ये ही सेटिंग बदलू किंवा अधिशून्य करू शकत नाहीत.
+      तुम्ही हे सेटिंग सुरू किंवा बंद केल्यास, वापरकर्ते <ph name="PRODUCT_NAME" /> मध्ये हे सेटिंग बदलू किंवा ओव्हरराइड करू शकत नाहीत.
 
-      हे धोरण सेट न केलेले ठेवल्यास, हे चालू केले जाईल परंतु वापरकर्ता ते बदलू शकेल.</translation>
-<translation id="7953256619080733119">व्यवस्थापित वापरकर्ता व्यक्तिचलित अपवाद होस्ट</translation>
+      हे धोरण सेट न केलेले ठेवल्यास, हे सुरू केले जाईल परंतु वापरकर्ता ते बदलू शकेल.</translation>
+<translation id="7953256619080733119">व्यवस्थापित वापरकर्ता मॅन्युअल एक्सेप्शन होस्ट</translation>
 <translation id="7958537754689366707">दर बारा तासांनी पासवर्ड टाकणे आवश्यक आहे.</translation>
 <translation id="7961779417826583251">लेगसी सर्टिफिकेट अधिकाऱ्यांच्या सूचीसाठी सर्टिफिकेट पारदर्शकता अंमलबजावणी बंद करा</translation>
 <translation id="7974114691960514888">हे धोरण आता समर्थित नाही.
@@ -2886,9 +2933,9 @@
 <translation id="7976157349247117979"><ph name="PRODUCT_NAME" /> ठिकाणाचे नाव</translation>
 <translation id="7980227303582973781">कोणतीही विशेष प्रतिबंधने नाहीत</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
-<translation id="798856998567564266">तुम्ही ही सेटिंग सक्षम केल्यास, बुकमार्क जोडता, काढता‍ किंवा सुधारित करता येऊ शकतील. हे धोरण सेट नसताना देखील हे डीफॉल्ट असेल.
+<translation id="798856998567564266">तुम्ही हे सेटिंग सक्षम केल्यास, बुकमार्क जोडता, काढता‍ किंवा सुधारित करता येऊ शकतील. हे धोरण सेट नसताना देखील हे डीफॉल्ट असेल.
 
-     तुम्ही ही सेटिंग बंद केल्यास, बुकमार्क जोडले, काढले किंवा सुधारित केले जाऊ शकत नाहीत. विद्यमान असलेले बुकमार्क अद्याप उपलब्ध आहेत.</translation>
+     तुम्ही हे सेटिंग बंद केल्यास, बुकमार्क जोडले, काढले किंवा सुधारित केले जाऊ शकत नाहीत. विद्यमान असलेले बुकमार्क अद्याप उपलब्ध आहेत.</translation>
 <translation id="802147957407376460">स्क्रीन 0 अंश फिरवा</translation>
 <translation id="8033913082323846868">हे धोरण M70 मध्ये कालबाह्य झाले, याऐवजी AutofillAddressEnabled आणि AutofillCreditCardEnabled वापरा.
 
@@ -2918,7 +2965,7 @@
           'CookiesAllowedForUrls' आणि 'CookiesSessionOnlyForUrls' धोरणेदेखील पहा. या तीन धोरणांंमध्ये परस्परविरोधी URL पॅटर्न नसणे आवश्यक आहे याची नोंद घ्या - कोणत्या धोरणाला प्राधान्य दिले जाईल हे निर्दिष्ट केलेले नाही.</translation>
 <translation id="8099880303030573137">बॅटरी उर्जेवर चालताना निष्क्रिय विलंब</translation>
 <translation id="8102913158860568230">डीफॉल्ट mediastream सेटिंग</translation>
-<translation id="8104186956182795918">वेबसाइटना इमेज दाखवण्याची अनुमती आहे का हे तुम्हाला सेट करू देते. सर्व वेबसाइटसाठी इमेज दाखवण्याची अनुमती असू शकते किंवा सर्व सेबसाइटसाठी ती नाकारली जाऊ शकते.
+<translation id="8104186956182795918">वेबसाइटना इमेज दाखवण्याची अनुमती आहे का हे तुम्हाला सेट करू देते. सर्व वेबसाइटसाठी इमेज दाखवण्याची अनुमती असू शकते किंवा सर्व वेबसाइटसाठी ती नाकारली जाऊ शकते.
 
           हे धोरण सेट न केलेले ठेवल्यास, 'AllowImages' वापरले जाईल आणि वापरकर्त्याला ते बदलता येईल.
 
@@ -2984,11 +3031,11 @@
 <translation id="8214600119442850823">पासवर्ड व्यवस्थापक कॉन्फिगर करते.</translation>
 <translation id="8217516105848565518">हे धोरण बहिष्कृत केले आहे. कृपया त्याऐवजी RemoteAccessHostDomainList वापरा.</translation>
 <translation id="8244525275280476362">धोरण रद्द केल्यानंतर कमाल आणण्याचा विलंब</translation>
-<translation id="8256688113167012935">लॉग इन स्क्रीनवर संबंधित डिव्हाइस-स्थानिक खात्यासाठी दर्शविले जाणारे खाते नाव <ph name="PRODUCT_OS_NAME" /> नियंत्रित करते.
+<translation id="8256688113167012935">लॉगिन स्क्रीनवर संबंधित डिव्हाइस-स्थानिक खात्यासाठी दर्शविले जाणारे खाते नाव <ph name="PRODUCT_OS_NAME" /> नियंत्रित करते.
 
-      हे धोरण सेट असल्यास, लॉग इन स्क्रीन चित्र आधारित लॉग इन निवडकर्त्यावर सुसंगत डिव्हाइस-स्थानिक खात्यासाठी निर्दिष्‍ट स्ट्रिंगचा वापर करेल.
+      हे धोरण सेट असल्यास, लॉग इन स्क्रीन चित्र आधारित लॉगिन निवडकर्त्यावर सुसंगत डिव्हाइस-स्थानिक खात्यासाठी निर्दिष्‍ट स्ट्रिंगचा वापर करेल.
 
-      धोरण सेट न करता सोडल्यास, <ph name="PRODUCT_OS_NAME" /> लॉग इन स्क्रीनवर प्रदर्शन नावाच्या रूपात डिव्हाइस-स्थानिक खात्याचा ईमेल खाते आयडी वापरेल.
+      धोरण सेट न करता सोडल्यास, <ph name="PRODUCT_OS_NAME" /> लॉगिन स्क्रीनवर डिस्प्ले नावाच्या रूपात डिव्हाइस-स्थानिक खात्याचा ईमेल खाते ID वापरेल.
 
       हे धोरण नियमित वापरकर्ता खात्यांसाठी दुर्लक्षित केले आहे.</translation>
 <translation id="8259375588339409826">Chromium आणि Google Chrome दोन्ही एकाच धोरणांच्या सेटला सपोर्ट करतात. कृपया लक्षात ठेवा या दस्तऐवजात न रिलीज केलेल्या धोरणांचा समावेश असू शकतो (उदा. त्यांची 'वर सपोर्टेड' एंट्री <ph name="PRODUCT_NAME" /> च्या अजून रिलीज न झालेल्या आवृत्तीचा संदर्भ देते). ही धोरणे कोणतीही सूचना न देता बदलण्याचे किंवा काढून टाकण्याचे अधीन आहेत आणि त्यांची सुरक्षितता आणि गोपनीयता यांच्या संदर्भात कोणत्याही प्रकारची हमी नसल्याच्या समावेशासह, त्यांच्यासाठी कोणत्याही प्रकारची हमी दिली जात नाही.
@@ -3015,13 +3062,13 @@
       भविष्‍यात हे अधिशून्य काढण्याची इच्छा आहे.</translation>
 <translation id="8285435910062771358">पूर्ण स्क्रीन भिंग सक्षम केला</translation>
 <translation id="8288199156259560552">Android Google स्थान सेवा सक्षम करा</translation>
-<translation id="8294750666104911727">सामान्यतः chrome=1 वर सेट केलेली X-UA-सुसंगत असलेली पेज 'ChromeFrameRendererSettings' धोरणाकडे दुर्लक्ष करून <ph name="PRODUCT_FRAME_NAME" /> मध्ये प्रस्तुत केली जातील.
+<translation id="8294750666104911727">सामान्यतः chrome=1 वर सेट केलेली X-UA-सुसंगत असलेली पेजे 'ChromeFरॅमeRendererSettings' धोरणाकडे दुर्लक्ष करून <ph name="PRODUCT_FRAME_NAME" /> मध्ये प्रस्तुत केली जातील.
 
-          आपण हे सेटिंग सक्षम केल्यास, पेज मेटाटॅगसाठी स्कॅन केली जाणार नाहीत.
+          तुम्ही हे सेटिंग सक्षम केल्यास, पेजे मेटाटॅगसाठी स्कॅन केली जाणार नाहीत.
 
-          आपण हे सेटिंग अक्षम केल्यास, पेज मेटाटॅगसाठी स्कॅन केली जातील.
+          तुम्ही हे सेटिंग अक्षम केल्यास, पेजे मेटाटॅगसाठी स्कॅन केली जातील.
 
-          हे धोरण सेट केले नसल्यास, पेज मेटाटॅगसाठी स्कॅन केली जातील.</translation>
+          हे धोरण सेट केले नसल्यास, पेजे मेटाटॅगसाठी स्कॅन केली जातील.</translation>
 <translation id="8300455783946254851">जेव्हा सत्य वर सेट केलेले असते तेव्हा एक सेल्युलर कनेक्शन वापरून <ph name="PRODUCT_OS_NAME" /> फायली अॅपमध्ये Google ड्राइव्ह संकालन अक्षम करते. त्या बाबतीत, WiFi द्वारे किंवा इथरनेटद्वारे कनेक्ट केलेले असताना डेटा हा केवळ Google ड्राइव्ह वर संकालित केला जातो.
 
           सेट केले नसल्यास किंवा असत्य वर सेट केल्यास, वापरकर्ते सेल्युलर कनेक्शनद्वारे Google ड्राइव्ह वर फायली स्थानांतरीत करण्यात सक्षम केले जातील.</translation>
@@ -3049,14 +3096,14 @@
           हे धोरण सेट न करता सोडल्यास सेटिंग चालू केले जाईल.</translation>
 <translation id="8382184662529825177">डिव्हाइसच्या सामग्री संरक्षणासाठी दूरस्थ अनुप्रमाणनाचा वापर सक्षम करा</translation>
 <translation id="838870586332499308">डेटा रोमिंग सक्षम करा</translation>
-<translation id="8390049129576938611"><ph name="PRODUCT_NAME" /> मध्ये अंतर्गत PDF दर्शक अक्षम करते. त्याऐवजी ते डाउनलोड म्हणून त्यास हाताळते आणि वापरकर्त्यास PDF फायली डीफॉल्ट अनुप्रयोगासह उघडण्याची अनुमती देते.
+<translation id="8390049129576938611"><ph name="PRODUCT_NAME" /> मध्ये अंतर्गत पीडीएफ व्ह्यूअर अक्षम करते. त्याऐवजी ते डाउनलोड म्हणून त्यास हाताळते आणि वापरकर्त्यास पीडीएफ फायली डीफॉल्ट अॅपासह उघडण्याची अनुमती देते.
 
-      हे धोरण सेट न केलेले ठेवल्‍यास किंवा अक्षम केल्यास वापरकर्ता PDF प्लगिन अक्षम करेपर्यंत PDF फायली उघडण्‍यासाठी ते वापरले जाईल.</translation>
-<translation id="8402079500086185021">PDF फायली नेहमी बाह्यरित्या उघडा</translation>
+      हे धोरण सेट न केलेले ठेवल्‍यास किंवा अक्षम केल्यास वापरकर्ता पीडीएफ प्लगिन अक्षम करेपर्यंत पीडीएफ फायली उघडण्‍यासाठी ते वापरले जाईल.</translation>
+<translation id="8402079500086185021">पीडीएफ फायली नेहमी बाह्यरीत्या उघडा</translation>
 <translation id="8412312801707973447">ऑनलाइन OCSP/CRL तपासण्या पूर्ण केल्या आहेत किंवा नाहीत</translation>
 <translation id="8417305981081876834">लॉक स्क्रीन पिनची कमाल लांबी ठरवा</translation>
 <translation id="841977920223099909">पासवर्ड संरक्षण चेतावणी ट्रिगर</translation>
-<translation id="8424255554404582727">डीफॉल्‍ट प्रदर्शन फिरविणे सेट करा, प्रत्येक रीबूट केल्यावर लागू केले</translation>
+<translation id="8424255554404582727">डीफॉल्‍ट डिस्प्ले फिरविणे सेट करा, प्रत्येक रीबूट केल्यावर लागू केले</translation>
 <translation id="8426231401662877819">स्क्रीन घड्‍याळाच्या दिशेने 90 अंश फिरवा</translation>
 <translation id="8433423491036718210">एंटरप्राइझ लॉगिन URL ची सूची कॉन्फिगर करा, जेथे पासवर्ड संरक्षण सेवेने पासवर्डची फिंगरप्रिंट कॅप्चर करणे आवश्यक आहे.</translation>
 <translation id="8451988835943702790">नवीन टॅब पृष्ठ मुख्यपृष्ठ म्हणून वापरा</translation>
@@ -3085,15 +3132,15 @@
 <translation id="8499172469244085141">डीफॉल्ट सेटिंग्ज (वापरकर्ते अधिलिखित करू शकतात)</translation>
 <translation id="8507835864888987300">आपोआप अपडेटची लक्ष्य आवृत्ती सेट करते.
 
-      लक्ष्य आवृत्तीचा उपसर्ग निर्दिष्ट केल्यास ती <ph name="PRODUCT_OS_NAME" /> वर अपडेट होणे आवश्यक आहे. निर्दिष्ट केलेल्या उपसर्गापूर्वीची आवृत्ती डिव्हाइस रन करत असल्यास, ती दिलेल्या उपसर्गासह नवीन आवृत्तीवर अपडेट होईल. डिव्हाइस आधीच नंतरच्या आवृत्तीवर असल्यास, प्रभाव <ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME" /> च्या मूल्यावर अवलंबून असतो. खालील उदाहरणामध्ये वर्णन केल्याप्रमाणे उपसर्ग फॉरमॅट कंपोनंट-प्रकारे कार्य करतो.:
+      लक्ष्य आवृत्तीचे प्रीफिक्स नमूद केल्यास ती <ph name="PRODUCT_OS_NAME" /> वर अपडेट होणे आवश्यक आहे. नमूद केलेल्या प्रीफिक्स पूर्वीची आवृत्ती डिव्हाइस रन करत असल्यास, ती दिलेल्या प्रीफिक्ससह नवीन आवृत्तीवर अपडेट होईल. डिव्हाइस आधीच नंतरच्या आवृत्तीवर असल्यास, प्रभाव <ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME" /> च्या मूल्यावर अवलंबून असतो. खालील उदाहरणामध्ये वर्णन केल्याप्रमाणे प्रीफिक्स फॉरमॅट कंपोनंट प्रकारे कार्य करतो.:
 
       "" (किंवा कॉन्फिगर केलेले नाही): नवीन आवृत्तीवर अपडेट करणे .उपलब्‍ध आहे
       "१४१२.": १४१२ च्या किमान आवृत्तीवर अपडेट करा (उदा. १४१२.२४.३४ किंवा १४१२.६०.२)
       "१४१२.२.": १४१२.२ च्या किमान आवृत्तीवर अपडेट करा (उदा १४१२.२.३४ किंवा १४१२.२.२)
       "१४१२.२४.३४": फक्त या विशेष आवृत्तीवर अपडेट करा
 
-      चेतावणी: आवृत्ती प्रतिबंधने कॉन्फिगर करण्याची शिफारस केलेली नाही, कारण ती वापरकर्त्यांना सॉफ्टवेअर अपडेट आणि गंभीर सुरक्षा निराकरणे मिळवण्यापासून प्रतिबंधित करू शकतात. अपडेट हे विशिष्ट आवृत्ती उपसर्गावर प्रतिबंधित केल्याने वापरकर्त्याला धोका होऊ शकतो.</translation>
-<translation id="8519264904050090490">व्यवस्थापित केलेला वापरकर्ता व्यक्तिचलित अपवाद URL</translation>
+      चेतावणी: आवृत्ती प्रतिबंधने कॉन्फिगर करण्याची शिफारस केलेली नाही, कारण ती वापरकर्त्यांना सॉफ्टवेअर अपडेट आणि गंभीर सुरक्षा निराकरणे मिळवण्यापासून प्रतिबंधित करू शकतात. अपडेट हे विशिष्ट आवृत्ती प्रीफिक्सवर प्रतिबंधित केल्याने वापरकर्त्याला धोका होऊ शकतो.</translation>
+<translation id="8519264904050090490">व्यवस्थापित केलेला वापरकर्ता मॅन्युअल एक्सेप्शन URL</translation>
 <translation id="8538235451413605457"><ph name="PRODUCT_NAME" /> ची किमान अनुमती असलेल्या आवृत्तीची आवश्यकता कॉन्फिगर करते. खाली दिलेल्या आवृत्त्या अप्रचलित समजल्या जातात आणि डिव्हाइस वापरकर्त्याला OS अपडेट करण्याआधी साइन इन करू देणार नाही.
       सध्याची आवृत्ती वापरकर्ता सेशनच्या दरम्यान अप्रचलित झाल्यास, वापरकर्त्याला सक्तीने साइन आउट केले जाईल.
 
@@ -3118,23 +3165,17 @@
       ARC चालू नसेपर्यंत, धोरणातील बदल फक्‍त लागू केले जातील, उदा. Chrome OS सुरू होत असताना.</translation>
 <translation id="8631434304112909927">आवृत्ती <ph name="UNTIL_VERSION" /> पर्यंत</translation>
 <translation id="863319402127182273">Android अॅप्ससाठी, हे धोरण केवळ अंगभूत कॅमेर्‍यास प्रभावित करते. हे धोरण सत्य वर सेट केले असते तेव्हा, कोणत्याही अपवादांशिवाय कॅमेरा सर्व Android अॅप्ससाठी अक्षम केला जातो.</translation>
-<translation id="8649763579836720255">संरक्षित सामग्री प्ले करण्यासाठी डिव्हाइस पात्र असल्याचे ठासून सांगणार्‍या Chrome OS CA द्वारे जारी केलेले प्रमाणपत्र मिळण्यासाठी Chrome OS डिव्हाइसेस दूरस्थ अनुप्रमाणन (सत्यापित केलेला प्रवेश) वापरू शकतात.  ही प्रक्रिया अनन्यपणे डिव्हाइस ओळखणार्‍या Chrome OS CA कडे हार्डवेअर समर्थन माहिती पाठविण्याचा समावेश करते.
+<translation id="8649763579836720255">संरक्षित आशय प्ले करण्यासाठी डिव्हाइस पात्र असल्याचे ठासून सांगणार्‍या Chrome OS CA द्वारे जारी केलेले सर्टिफिकेट मिळण्यासाठी Chrome OS डिव्हाइसेस दूरस्थ अनुप्रमाणन (पडताळलेला अॅक्सेस) वापरू शकतात.  ही प्रक्रिया अनन्यपणे डिव्हाइस ओळखणार्‍या Chrome OS CA कडे हार्डवेअर सपोर्ट माहिती पाठविण्याचा समावेश करते.
 
-          हे सेटिंग असत्य असल्यास, सामग्री संरक्षणासाठी डिव्हाइस दूरस्थ अनुप्रमाणन वापरणार नाही आणि संरक्षित सामग्री प्ले करण्यात डिव्हाइस अक्षम असू शकते.
+          हे सेटिंग असत्य असल्यास, आशय संरक्षणासाठी डिव्हाइस दूरस्थ अनुप्रमाणन वापरणार नाही आणि संरक्षित आशय प्ले करण्यात डिव्हाइस अक्षम असू शकते.
 
-          हे सेटिंग सत्य असल्यास, किंवा ते सेट केलेले नसल्यास, सामग्री संरक्षणासाठी दूरस्थ अनुप्रमाणन वापरले जाऊ शकते.</translation>
+          हे सेटिंग सत्य असल्यास, किंवा ते सेट केलेले नसल्यास, आशय संरक्षणासाठी दूरस्थ अनुप्रमाणन वापरले जाऊ शकते.</translation>
 <translation id="8650974590712548439">Windows क्लायंटसाठी Windows नोंदणी स्थान:</translation>
 <translation id="8654286232573430130">समाकलित प्रमाणीकरणासाठी कोणती सर्व्हर श्वेतसूची केली जाऊ शकतात हे निर्दिष्ट करते. जेव्हा <ph name="PRODUCT_NAME" /> एका प्रॉक्सीवरून किंवा या परवानगी दिलेल्या सूचीमधील सर्व्हरवरून आव्हान प्राप्त करते तेव्हाच फक्त समाकलित प्रमाणीकरण सक्षम केले जाते.
 
           स्वल्पविरामांसह एकाधिक सर्व्हर नावे विभक्त करा. वाइल्डकार्ड (*) अनुमत आहेत.
 
           आपण हे धोरण सेट न करता सोडल्यास सर्व्हर इंटरनेटवर असताना <ph name="PRODUCT_NAME" /> ते शोधण्याचा प्रयत्न करेल आणि त्यानंतर फक्त IWA विनंत्यांना ते प्रतिसाद देईल. सर्व्हर इंटरनेट म्हणून शोधले गेल्यास त्यानंतर त्यावरील IWA विनंत्यांकडे <ph name="PRODUCT_NAME" /> द्वारे दुर्लक्ष केले जाईल.</translation>
-<translation id="8667812577403206506">व्हर्च्युअल मशीनना Chrome OS वर रन करण्याची अनुमती द्यायची का हे नियंत्रित करण्याची अनुमती देते.
-धोरण सत्य वर सेट केले असल्यास, डिव्हाइसला व्हर्च्युअल मशीन रन करण्याची अनुमती आहे.
-धोरण असत्य वर सेट केले असल्यास, डिव्हाइसला व्हर्च्युअल मशीन रन करण्याची अनुमती नाही.
-जेव्हा धोरण असत्य वर सेट केले जाते, तेव्हा ते फक्त नवीन व्हर्च्युअल मशीनना लागू होते पण ते आधीपासुन सुरू असलेले व्हर्च्युअल मशीन बंद करत नाही.
-जेव्हा हे धोरण व्यवस्थापित डिव्हाइसवर सेट केलेले नसते, तेव्हा डिव्हाइसला व्हर्च्युअल मशीन रन करण्याची अनुमती नसते.
-अव्यवस्थापित डिव्हाइसना व्हर्च्युअल मशीन रन करण्याची अनुमती असते.</translation>
 <translation id="8669669491594628013">तुम्हाला पासवर्ड संरक्षण चेतावणीचे ट्रिगर नियंत्रित करण्याची अनुमती देते. जेव्हा वापरकर्ते संभाव्य संशयास्पद साइटवर त्यांचा संरक्षित पासवर्ड पुन्हा वापरतात तेव्हा पासवर्ड संरक्षण त्यांना सूचना देते.
 
       कोणत्या पासवर्डचे संरक्षण करायचे हे कॉन्फिगर करण्यासाठी तुम्ही 'PasswordProtectionLoginURLs' आणि 'PasswordProtectionChangePasswordURL' धोरणे वापरू शकता.
@@ -3143,7 +3184,7 @@
       हे धोरण 'PasswordProtectionWarningOnPasswordReuse' वर सेट केल्यास, जेव्हा वापरकर्ता व्हाइटलिस्ट नसलेल्या साइटवर त्याचा संरक्षित पासवर्ड पुन्हा वापरेल तेव्हा पासवर्ड संरक्षण चेतावणी दाखवली जाईल.
       हे धोरण 'PasswordProtectionWarningOnPhishingReuse' वर सेट केल्यास, जेव्हा वापरकर्ता फिशिंग साइटवर त्याचा संरक्षित पासवर्ड पुन्हा वापरेल तेव्हा पासवर्ड संरक्षण चेतावणी दाखवली जाईल.
       हे धोरण सेट न करता सोडून दिल्यास, पासवर्ड संरक्षण सेवा फक्त Google पासवर्डचे संरक्षण करेल पण वापरकर्ता हे सेटिंग बदलू शकेल.</translation>
-<translation id="8672321184841719703">लक्ष्य स्वयं अपडेट आवृत्ती</translation>
+<translation id="8672321184841719703">लक्ष्य ऑटो अपडेट आवृत्ती</translation>
 <translation id="867410340948518937">U2F (युनिव्हर्सल सेकंड फॅक्टर)</translation>
 <translation id="8682611302223077049">तुम्हाला मिलिसेकंदांमध्ये कालावधी सेट करू देते, ज्यात वापरकर्त्यांना सूचित केले जाते की <ph name="PRODUCT_NAME" /> रीलाँच केले जाणे आवश्यक आहे किंवा प्रलंबित अपडेट लागू करण्यासाठी <ph name="PRODUCT_OS_NAME" /> डिव्हाइस रीस्टार्ट केले जाणे आवश्यक आहे.
 
@@ -3181,11 +3222,11 @@
 
       हे सेटिंग अक्षम केलेले असल्यास, ब्राउझिंग आणि डाउनलोड इतिहास हटवला जाऊ शकत नाही.</translation>
 <translation id="8759829385824155666">Kerberos एंक्रिप्शन प्रकारांना अनुमती दिली</translation>
-<translation id="8764119899999036911">व्युत्पन्न केलेले Kerberos SPN प्रमाणभूत DNS नावावर किंवा प्रविष्‍ट केलेल्या मूळ नावावर आधारित आहे ते निर्दिष्‍ट करते.    
+<translation id="8764119899999036911">जनरेट केलेले Kerberos SPN प्रमाणभूत DNS नावावर किंवा एंटर केलेल्या मूळ नावावर आधारित आहे ते निर्दिष्‍ट करते.    
 
-          आपण हे सेटिंग सक्षम केल्यास, CNAME शोधणे वगळले जाईल आणि सर्व्हर नाव प्रविष्‍ट केल्यानुसार वापरण्‍यात येईल.    
+          तुम्ही हे सेटिंग सक्षम केल्यास, CNAME शोधणे वगळले जाईल आणि सर्व्हर नाव एंटर केल्यानुसार वापरण्‍यात येईल.    
 
-          आपण सेटिंग अक्षम केल्यास किंवा ती सेट न करता सोडल्यास, सर्व्हरचे प्रमाणभूत नाव CNAME शोधातून निर्धारित करण्‍यात येईल.</translation>
+तुम्ही सेटिंग अक्षम केल्यास किंवा ती सेट न करता सोडल्यास, सर्व्हरचे प्रमाणभूत नाव CNAME शोधातून निर्धारित करण्‍यात येईल.</translation>
 <translation id="8764477907716150749">हे धोरण <ph name="PRODUCT_NAME" /> द्वारे स्वतःच्या अंतर्गत वापरासाठी आहे.</translation>
 <translation id="8782750230688364867">डिव्हाइस सादरीकरण मोडमध्ये असते तेव्हा स्क्रीन मंद होण्याचा विलंब मोजला जाताना टक्केवारी निर्दिष्ट करते.
 
@@ -3213,24 +3254,24 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME" /> द्वारे एखादी साइट पूर्तता करते तेव्हा दिसत असलेली नाकारण्याची सूचना दाबते.</translation>
 <translation id="8867464911288727016"><ph name="PRODUCT_NAME" /> वर एकत्रित Google भाषांतर सेवा सुरू करते.
 
-      तुम्ही ही सेटिंग सुरू केल्यास, एकत्रित भाषांतर टूलबार आणि उजवे-क्लिक काँटेक्स्ट मेनू वर भाषांतर करा पर्याय दाखवून (उचित असेल तेव्हा) <ph name="PRODUCT_NAME" /> वापरकर्त्याला भाषांतर कार्य ऑफर करते.
+      तुम्ही हे सेटिंग सुरू केल्यास, एकत्रित भाषांतर टूलबार आणि राइट-क्लिक काँटेक्स्ट मेनू वर भाषांतर करा पर्याय दाखवून (उचित असेल तेव्हा) <ph name="PRODUCT_NAME" /> वापरकर्त्याला भाषांतर कार्य ऑफर करते.
 
-      तुम्ही ही सेटिंग बंद केल्यास, बिल्टइन भाषांतर वैशिष्ट्य बंद होईल.
+      तुम्ही हे सेटिंग बंद केल्यास, बिल्टइन भाषांतर वैशिष्ट्य बंद होईल.
 
-      तुम्ही ही सेटिंग सुरू किंवा बंद केल्यास, वापरकर्ते ही सेटिंग <ph name="PRODUCT_NAME" /> मध्ये बदलू किंवा ओव्हरराइड करू शकणार नाहीत.
+      तुम्ही हे सेटिंग सुरू किंवा बंद केल्यास, वापरकर्ते हे सेटिंग <ph name="PRODUCT_NAME" /> मध्ये बदलू किंवा ओव्हरराइड करू शकणार नाहीत.
 
       हे सेटिंग सेट न केरता सोडल्यास वापरकर्ता हे कार्य वापरायचे की नाही हे ठरवू शकतो.</translation>
 <translation id="8870318296973696995">मुख्यपृष्ठ</translation>
 <translation id="8882006618241293596">या साइटवर <ph name="FLASH_PLUGIN_NAME" /> प्लगइन ब्लॉक करा</translation>
-<translation id="890403179930035128">शब्‍दलेखन भाषा जाणीवपूर्वक चालू करा. त्‍या सूचीतील न ओेळखलेल्‍या भाषांकडे दुर्लक्ष केले जाईल.
+<translation id="890403179930035128">शब्‍दलेखन भाषा जाणीवपूर्वक सुरू करा. त्‍या सूचीतील न ओेळखलेल्‍या भाषांकडे दुर्लक्ष केले जाईल.
 
-      तुम्‍ही हे धोरण चालू केले असल्‍यास, वापरकर्त्‍याने शब्‍दलेखन चालू केलेल भाषांखेरीज निर्दिष्‍ट केलेल्‍या भाषेसाठी शब्‍दलेखन चालू केले जाईल.
+      तुम्‍ही हे धोरण सुरू केले असल्‍यास, वापरकर्त्‍याने शब्‍दलेखन सुरू केलेल भाषांखेरीज निर्दिष्‍ट केलेल्‍या भाषेसाठी शब्‍दलेखन सुरू केले जाईल.
 
-      तुम्‍ही हे धोरण चालू केले नसल्‍यास किंवा बंद केले असल्‍यास,  वापरकर्त्‍याच्‍या शब्‍दलेखन प्राधान्‍यांमध्‍ये काहीही बदल होणार नाही.
+      तुम्‍ही हे धोरण सुरू केले नसल्‍यास किंवा बंद केले असल्‍यास,  वापरकर्त्‍याच्‍या शब्‍दलेखन प्राधान्‍यांमध्‍ये काहीही बदल होणार नाही.
 
-      शब्‍दलेखन चालू धोरण बंद असे सेट केले असल्‍यास, या धोरणाचा काहीही प्रभाव राहणार नाही.
+      शब्‍दलेखन सुरू धोरण बंद असे सेट केले असल्‍यास, या धोरणाचा काहीही प्रभाव राहणार नाही.
 
-      सध्‍या सपोर्ट असलेल्‍या भाषा: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
+सध्‍या सपोर्ट असलेल्‍या भाषा: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="8906768759089290519">अतिथी मोड सक्षम करा</translation>
 <translation id="8908294717014659003">वेबसाइट्सना माध्यम कॅप्चर डिव्हाइसेससमध्ये प्रवेश करण्याच्या अनुमती देण्याबाबत आपल्याला सेट करण्याची अनुमती देते. माध्यम कॅप्चर डिव्हाइसेसमध्ये प्रवेश करणे डीफॉल्टनुसार अनुमती दिली जाऊ शकते किंवा दरवेळी वेबसाइट माध्यम कॅप्चर डिव्हाइसेसमध्ये प्रवेश करू इच्छित असताना वापरकर्त्यास दर वेळी विचाले जाऊ शकते.
 
@@ -3272,13 +3313,13 @@
 <translation id="8951350807133946005">डिस्क कॅश   निर्देशिका सेट करा</translation>
 <translation id="8952317565138994125">Google ने सादर केलेल्या सिंक्रनायझेशन सेवांचा वापर करून <ph name="PRODUCT_NAME" /> मधील डेटा सिंक्रोनायझेशन बंद करते आणि वापरकर्त्याला या सेटिंग्‍ज बदलण्यापासून रोखते.
 
-      तुम्ही हे सेटिंग चालू केल्यास, वापरकर्ता हे सेटिंग <ph name="PRODUCT_NAME" /> मध्ये बदलू किंवा अधिलिखित करू शकणार नाही.
+      तुम्ही हे सेटिंग सुरू केल्यास, वापरकर्ता हे सेटिंग <ph name="PRODUCT_NAME" /> मध्ये बदलू किंवा ओव्हरराइड करू शकणार नाही.
 
       हे धोरण सेट न केल्यास हे वापरायचे की नाही हे ठरवण्यासाठी Google सिंक वापरकर्त्यांसाठी उपलब्ध असेल.
 
       Google सिंक पूर्णपणे बंद करण्यासाठी, तुम्ही Google सिंक सेवा Google प्रशासक कंसोलमधुन बंद करण्याची शिफारस केली आहे.
 
-      <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> धोरण चालूवर सेट केल्यावर हे धोरण चालू करू नये कारण ते वैशिष्ट्य सारखीच क्लायंट कार्यक्षमता शेअर करते. या बाबतीत Google ने सादर केलेले सिंक्रोनायझेशन पूर्णपणे बंद होईल.</translation>
+      <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> धोरण सुरूवर सेट केल्यावर हे धोरण सुरू करू नये कारण ते वैशिष्ट्य सारखीच क्लायंट कार्यक्षमता शेअर करते. या बाबतीत Google ने सादर केलेले सिंक्रोनायझेशन पूर्णपणे बंद होईल.</translation>
 <translation id="8955719471735800169">शीर्षस्थानाकडे परत</translation>
 <translation id="8959992920425111821">डीफॉल्ट कॉन्फिगरेशन</translation>
 <translation id="8960850473856121830">या सूचीमधील नमुने विनंती करणार्‍या URL च्या सुरक्षितता मूळच्या संबंधात जुळविले जातील.
@@ -3298,18 +3339,18 @@
       हे धोरण <ph name="MS_AD_NAME" /> डोमेनशी न जोडलेल्या Windows इंस्टंसवर उपलब्ध नाही.</translation>
 <translation id="9013875414788074110">लॉगिन दरम्यान, <ph name="PRODUCT_OS_NAME" /> एखादा सर्व्हर (ऑनलाइन) किंवा कॅशे केलेला शब्द (ऑफलाइन) वापरून प्रमाणित करू शकते.
 
-      हे धोरण -1 च्या मूल्यावर सेट केले असताना वापरकर्ता अमर्यादित ऑफलाइन प्रमाणित करू शकतो. हे धोरण कोणत्याही इतर मूल्यावर सेट केले जाते तेव्हा ते अंतिम ऑनलाइन प्रमाणीकरणापासून वेळेचा अवधी निर्दिष्ट करते ज्यानंतर वापरकर्त्याने ऑनलाइन प्रमाणीकरण पुन्हा वापरणे आवश्यक आहे. 
+      हे धोरण -1 च्या मूल्यावर सेट केले असताना वापरकर्ता अमर्यादित ऑफलाइन प्रमाणित करू शकतो. हे धोरण कोणत्याही इतर मूल्यावर सेट केले जाते तेव्हा ते अंतिम ऑनलाइन अॉथेंटिकेशनपासून वेळेचा अवधी निर्दिष्ट करते ज्यानंतर वापरकर्त्याने ऑनलाइन अॉथेंटिकेशन पुन्हा वापरणे आवश्यक आहे. 
 
-      हे धोरण सेट न करता सोडल्याने <ph name="PRODUCT_OS_NAME" /> ला 14 दिवसांची डीफॉल्ट वेळ मर्यादा वापरू देईल ज्यानंतर वापरकर्त्याने पुन्हा ऑनलाइन प्रमाणीकरण वापरले पाहिजे.
+      हे धोरण सेट न करता सोडल्याने <ph name="PRODUCT_OS_NAME" /> ला 14 दिवसांची डीफॉल्ट वेळ मर्यादा वापरू देईल ज्यानंतर वापरकर्त्याने पुन्हा ऑनलाइन अॉथेंटिकेशन वापरले पाहिजे.
 
       हे धोरण केवळ SAML वापरून प्रमाणित केलेल्या वापरकर्त्यांना प्रभावित करते.
 
       या धोरणाचे मूल्य सेकंदांमध्ये निर्दिष्ट केले जावे.</translation>
-<translation id="9027787254195333560">हे धोरण तुम्हाला लॉगिन स्क्रीनवरील वापरकर्त्याचे प्रतिनिधित्व करणारी अवतार इमेज कॉन्फिगर करू देते. हे धोरण ती URL निर्दिष्ट करुन सेट केलेले आहे ज्यावरुन <ph name="PRODUCT_OS_NAME" /> अवतार इमेज डाउनलोड केली जाऊ शकते आणि डाउनलोडच्या अखंडत्वाची पडताळणी करण्यासाठी एका क्रिप्टोग्राफिक हॅशचा वापर केला जातो. इमेज JPEG स्वरुपनात असावी, तिचा आकार 512kB पेक्षा मोठा नसावा. URL कोणत्याही प्रमा‍णीकरणाशिवाय अॅक्सेसयोग्य असावी.
+<translation id="9027787254195333560">हे धोरण तुम्हाला लॉगिन स्क्रीनवरील वापरकर्त्याचे प्रतिनिधित्व करणारी अवतार इमेज कॉन्फिगर करू देते. हे धोरण ती URL निर्दिष्ट करुन सेट केलेले आहे ज्यावरुन <ph name="PRODUCT_OS_NAME" /> अवतार इमेज डाउनलोड केली जाऊ शकते आणि डाउनलोडच्या अखंडत्वाची पडताळणी करण्यासाठी एका क्रिप्टोग्राफिक हॅशचा वापर केला जातो. इमेज JPEG फॉरमॅटमध्ये असावी, तिचा आकार 512kB पेक्षा मोठा नसावा. URL कोणत्याही प्रमा‍णीकरणाशिवाय अॅक्सेसयोग्य असावी.
 
       अवतार इमेज डाउनलोड आणि कॅशे केली आहे. URL किंवा हॅश बदलल्यावर ती पुन्हा डाउनलोड केली जाईल.
 
-      धोरण एक स्ट्रिंग म्हणून निर्दिष्ट केले जावे जी खालील स्कीमाची खात्री करणाऱ्या JSON स्वरुपनात URL आणि हॅश व्यक्त करते:
+      धोरण एक स्ट्रिंग म्हणून निर्दिष्ट केले जावे जी खालील स्कीमाची खात्री करणाऱ्या JSON फॉरमॅटमध्ये URL आणि हॅश व्यक्त करते:
       {
         "type": "object",
         "properties": {
@@ -3377,9 +3418,9 @@
 <translation id="9105265795073104888">केवळ प्रॉक्सी कॉन्फिगरेशन पर्यायांचा एक उपसंच Android अॅप्ससाठी उपलब्ध केला जातो. Android अॅप्स प्रॉक्सी वापरणे स्वेच्छेने निवडू शकतात. आपण त्यांना प्रॉक्सी वापरण्याची सक्ती करू शकत नाही.</translation>
 <translation id="9106865192244721694">या साइटवर WebUSB ला अनुमती द्या</translation>
 <translation id="9112727953998243860">एन्टरप्राइझ प्रिंटर कॉन्फिगरेशन फाइल</translation>
-<translation id="9112897538922695510">प्रोटोकॉल हँडलरच्या सूचीची नोंदणी करण्यास आपल्याला अनुमती देते. हे केवळ एक शिफारस केलेले धोरण असू शकते. गुणधर्म |protocol| 'mailto' सारख्या योजनेवर सेट केला जावा आणि गुणधर्माने |url| स्कीम हाताळणार्‍या अनुप्रयोगाचा URL नमुना सेट करावा. नमुना '%s' समाविष्ट करू शकतो, जे प्रस्तुत केल्यास हाताळलेल्या URL द्वारे पुनर्स्थित केले जाईल.
+<translation id="9112897538922695510">प्रोटोकॉल हँडलरच्या सूचीची नोंदणी करण्यास तुम्हाला अनुमती देते. हे केवळ एक शिफारस केलेले धोरण असू शकते. गुणधर्म |protocol| 'mailto' सारख्या योजनेवर सेट केला जावा आणि गुणधर्माने |url| स्कीम हाताळणार्‍या अॅप्सचा URL नमुना सेट करावा. नमुना '%s' समाविष्ट करू शकतो, जे प्रस्तुत केल्यास हाताळलेल्या URL द्वारे पुनर्स्थित केले जाईल.
 
-          धोरणाद्वारे नोंदणीकृत प्रोटोकॉल हँडलर वापरकर्त्याद्वारे नोंदणी केलेल्या एकासह विलीन केले जातात आणि वापरण्यासाठी दोन्ही उपलब्ध असतात. वापरकर्ता एक नवीन डीफॉल्ट हँडलर इंस्टॉल करून धोरणाद्वारे प्रोटोकॉल हँडलर अधिशून्य करू शकतो, परंतु धोरणाद्वारे नोंदणीकृत प्रोटोकॉल हँडलर काढू शकत नाही.</translation>
+          धोरणाद्वारे नोंदणीकृत प्रोटोकॉल हँडलर वापरकर्त्याद्वारे नोंदणी केलेल्या एकासह विलीन केले जातात आणि वापरण्यासाठी दोन्ही उपलब्ध असतात. वापरकर्ता एक नवीन डीफॉल्ट हँडलर स्थापित करून धोरणाद्वारे प्रोटोकॉल हँडलर ओव्हरराइड करू शकतो, परंतु धोरणाद्वारे नोंदणीकृत प्रोटोकॉल हँडलर काढू शकत नाही.</translation>
 <translation id="9123211093995421438"><ph name="PRODUCT_OS_NAME" /> माइलस्टोन रोलबॅकची किमान संख्या निर्दिष्ट करण्यासाठी कधीही स्थिर आवृत्तीपासून सुरुवात करण्यास अनुमती देणे आवश्यक आहे
 
       ग्राहकासाठी डीफॉल्ट शून्य आहे, तर एंटरप्राइझ नोंंदणी केलेल्या डिव्हाइससाठी चार (अंदाजे सहा महिने) आहे.
@@ -3394,12 +3435,12 @@
 <translation id="9135033364005346124"><ph name="CLOUD_PRINT_NAME" /> प्रॉक्सी सक्षम करा</translation>
 <translation id="9136253551939494882">लॉक स्क्रीन अनलॉक करण्याकरिता वापरकर्ता कोणते द्रुत अनलॉक मोड कॉन्फिगर करू शकतो आणि वापरू शकतो ते नियंत्रित करणारी श्वेतसूची.
 
-          हे मूल्य स्ट्रिंगची एक सूची असते; वैध सूची प्रविष्‍टी या आहेत: "सर्व", "पिन". सूचीमध्‍ये "सर्व" जोडण्‍याचा अर्थ भविष्‍यात लागू केल्‍या जाणार्‍या मोडसह प्रत्येक द्रुत अनलॉक मोड वापरकर्त्यासाठी उपलब्ध आहे हा होय. अन्यथा, केवळ सूचीमध्‍ये उपस्थित असलेले द्रुत अनलॉक मोड उपलब्ध असतील.
+          हे मूल्य स्ट्रिंगची एक सूची असते; वैध सूची एंट्री या आहेत: "सर्व", "पिन". सूचीमध्‍ये "सर्व" जोडण्‍याचा अर्थ भविष्‍यात लागू केल्‍या जाणार्‍या मोडसह प्रत्येक द्रुत अनलॉक मोड वापरकर्त्यासाठी उपलब्ध आहे हा होय. अन्यथा, केवळ सूचीमध्‍ये उपस्थित असलेले द्रुत अनलॉक मोड उपलब्ध असतील.
 
           उदाहरणार्थ, प्रत्येक द्रुत अनलॉक मोडला अनुमती देण्‍यासाठी, ["सर्व"] वापरा. केवळ पिन अनलॉकला अनुमती देण्‍यासाठी, ["पिन"] वापरा. सर्व द्रुत अनलॉक मोड अक्षम करण्‍यासाठी, [] वापरा.
 
 
-          डीफॉल्टनुसार, व्यवस्थापित डिव्हाइससाठी कोणतेही द्रुत अनलॉक मोड उपलब्ध असणार नाहीत.</translation>
+          बाय डीफॉल्ट, व्यवस्थापित डिव्हाइससाठी कोणतेही द्रुत अनलॉक मोड उपलब्ध असणार नाहीत.</translation>
 <translation id="9136399279941091445">डिव्‍हाइस धोरणे रिलीज केल्‍याची निर्दिष्‍ट केल्‍यावर बंद राहण्‍याच्‍या तासांची मध्‍यांतरे</translation>
 <translation id="9147029539363974059">सिस्टम लॉगचे परीक्षण करण्‍यासाठी प्रशासकांना अनुमती देण्याकरिता व्‍यवस्थापन सर्व्हरकडे सिस्टम लॉग पाठविते.
 
@@ -3426,15 +3467,15 @@
 हे धोरण सेट न केलेले ठेवल्यास, '३' वापरले जाईल आणि वापरकर्ता ते बदलू शकेल.</translation>
 <translation id="9167719789236691545"><ph name="PRODUCT_OS_NAME" /> याच्या फायलींच्या अॅपमध्ये ड्राइव्ह बंद करा</translation>
 <translation id="9185107612228451403">विस्तार-संबंधित धोरणे कॉन्फिगर करते. वापरकर्त्यास ते श्वेतसूचीमध्ये असल्याशिवाय काळ्यासूचीतील विस्तार इंस्टॉल करू देत नाही करण्याची अनुमती नाही. तुम्ही त्यांना <ph name="EXTENSION_INSTALL_FORCELIST_POLICY_NAME" /> मध्ये निर्दिष्ट करून विस्तार आपोआप इंस्टॉल करण्यासाठी <ph name="PRODUCT_NAME" /> वर सक्ती देखील करू शकता. सक्तीने-इंस्टॉल केलेले विस्तार जरी ते काळ्यासूचीत दिसत असले तरी देखील त्याकडे दुर्लक्ष करून इंस्टॉल केले जातात.</translation>
-<translation id="9187743794267626640">बाह्य संचयन एकत्रित करणे अक्षम करा</translation>
+<translation id="9187743794267626640">बाह्य स्टोरेज एकत्रित करणे अक्षम करा</translation>
 <translation id="9197740283131855199">मंद केल्यानंतर वापरकर्ता सक्रिय होत असल्यास स्क्रीन मंद होण्याचा विलंब मोजण्यासाठी टक्केवारी</translation>
 <translation id="9200828125069750521">POST वापरणार्‍या इमेज URL साठी प्राचल</translation>
 <translation id="9210953373038593554">SAML लॉग इनसाठी ऑथेंटिकेशनचा प्रकार कॉन्फिगर करते.
-जेव्हा हे धोरण सेट केले नसेल किंवा डीफॉल्ट (मूल्य ०) ला सेट केले असेल तर, ब्राउझरद्वारे SAML लॉग इनचे वर्तन इतर घटकांच्या आधारे ओळखले जाते. सर्वाधिक पायाभूत परिस्थितीत, वापरकर्ता ऑथेंटिकेशन आणि कॅश्ड वापरकर्ता डेटाचे संरक्षण हे वापरकर्त्यांनी वैयक्तिकरीत्या एंटर केलेल्या पासवर्डवर आधारित असते.
+जेव्हा हे धोरण सेट केले नसेल किंवा डीफॉल्ट (मूल्य ०) ला सेट केले असेल तर, ब्राउझरद्वारे SAML लॉग इनचे वर्तन इतर घटकांच्या आधारे ओळखले जाते. सर्वाधिक पायाभूत परिस्थितीत, वापरकर्ता ऑथेंटिकेशन आणि कॅश्ड वापरकर्ता डेटाचे संरक्षण हे वापरकर्त्यांनी वैयक्तिकरत्या एंटर केलेल्या पासवर्डवर आधारित असते.
 जेव्हा हे धोरण ClientCertificate (मूल्य १) ला सेट केले असेल, तेव्हा SAML द्वारे लॉग इन करणाऱ्या नवीन जोडलेल्या वापरकर्त्यांसाठी क्लायंट सर्टिफिकेट ऑथेंटिकेशन वापरले जाते. अशा वापरकर्त्यांसाठी पासवर्डचा वापर केला जात नाही आणि त्यांचा कॅश्ड लोकल डेटा संबंधित क्रिप्टोग्राफिक कीद्वारे संरक्षित केला जातो. उदाहरणार्थ, हे सेटिंग स्मार्ट कार्ड आधारित वापरकर्ता ऑथेंटिकेशन (लक्षात घ्या की स्मार्ट कार्ड मिडलवेअर अॅप्स DeviceLoginScreenAppInstallList धोरणाद्वारे इंस्टॉल करणे गरजेचे आहे) कॉन्फिगर करण्याची अनुमती देते.
 
-हे धोरण केवळ SAML द्वारे ऑथेंटिकेट होणाऱ्या वापरकर्त्यांनाच प्रभावित करते.</translation>
-<translation id="9213347477683611358">कोणत्याही वापरकर्त्याने अद्याप डिव्हाइसमध्ये साइन इन केले नसल्यास लॉगिन स्क्रीनवर दर्शविलेली डिव्हाइस-स्तराची वॉलपेपर इमेज कॉन्फिगर करा. Chrome OS डिव्हाइस ज्यावरून वॉलपेपर इमेज डाउनलोड करू शकते ती URL आणि डाउनलोडचे संकलन सत्यापित करण्‍यासाठी वापरलेला क्रिप्टोग्राफिक हॅश निर्दिष्ट करून धोरण सेट केले जाते. इमेज JPEG स्वरूपात असणे आवश्‍यक आहे, तिचा फाईल आकार 16MB पेक्षा जास्त असू नये. URL कोणत्याही प्रमाणीकरणाशिवाय प्रवेशयोग्य असणे आवश्‍यक आहे. वॉलपेेपर इमेज डाउनलोड आणि कॅश केली जाते. URL किंवा हॅश बदलतो तेव्हा ती पुन्हा डाउनलोड केली जाईल.
+हे धोरण केवळ SAML द्वारे ऑथेंटिकेट होणाऱ्या वापरकर्त्यांनावर परिणाम करते.</translation>
+<translation id="9213347477683611358">कोणत्याही वापरकर्त्याने अद्याप डिव्हाइसमध्ये साइन इन केले नसल्यास लॉगिन स्क्रीनवर दर्शविलेली डिव्हाइस-स्तराची वॉलपेपर इमेज कॉन्फिगर करा. Chrome OS डिव्हाइस ज्यावरून वॉलपेपर इमेज डाउनलोड करू शकते ती URL आणि डाउनलोडचे संकलन सत्यापित करण्‍यासाठी वापरलेला क्रिप्टोग्राफिक हॅश निर्दिष्ट करून धोरण सेट केले जाते. इमेज JPEG स्वरूपात असणे आवश्‍यक आहे, तिचा फाइल आकार 16MB पेक्षा जास्त असू नये. URL कोणत्याही अॉथेंटिकेशनाशिवाय अॅक्सेसयोग्य असणे आवश्‍यक आहे. वॉलपेेपर इमेज डाउनलोड आणि कॅश केली जाते. URL किंवा हॅश बदलतो तेव्हा ती पुन्हा डाउनलोड केली जाईल.
 
       JSON स्वरूपात URL आणि हॅश व्यक्त करणारी स्ट्रिंग म्हणून धोरण निर्दिष्ट केले जावे, उदा.
       {
@@ -3444,7 +3485,7 @@
 
       डिव्हाइस वॉलपेपर धोरण सेट केले असल्यास, कोणत्याही वापरकर्त्याने अद्याप डिव्हाइसमध्ये साइन इन केले नसल्यास Chrome OS डिव्हाइस वॉलपेपर इमेज डाउनलोड करेल आणि ती लॉगिन स्क्रीन वर वापरेल. वापरकर्त्याने एकदा लॉग इन केले की, वापरकर्त्याचे वॉलपेपर धोरण वापरले जाते.
 
-      डिव्हाइस वॉलपेपर धोरण सेट न केलेले ठेवल्‍यास, वापरकर्त्याचे वॉलपेपर धोरण सेट केले असल्यास काय दर्शवावे ते वापरकर्त्याचे वॉलपेपर धोरण ठरविते.</translation>
+      डिव्हाइस वॉलपेपर धोरण सेट न केलेले ठेवल्‍यास, वापरकर्त्याचे वॉलपेपर धोरण सेट केले असल्यास काय दाखवावे ते वापरकर्त्याचे वॉलपेपर धोरण ठरविते.</translation>
 <translation id="9217154963008402249">नेटवर्क पॅकेटच्या परीक्षणाची वारंवारता</translation>
 <translation id="922540222991413931">विस्तार, अॅप्लिकेशन आणि वापरकर्ता स्क्रिप्ट स्थापना स्रोत कॉन्फिगर करा</translation>
 <translation id="924557436754151212">प्रथमच चालताना डीफॉल्ट ब्राउझरमधून सेव्ह केलेले पासवर्ड आयात करा</translation>
diff --git a/components/policy/resources/policy_templates_ms.xtb b/components/policy/resources/policy_templates_ms.xtb
index 031c7474..a1d25b1e 100644
--- a/components/policy/resources/policy_templates_ms.xtb
+++ b/components/policy/resources/policy_templates_ms.xtb
@@ -2875,13 +2875,6 @@
 
           
           Jika anda membiarkan dasar ini tanpa ditetapkan <ph name="PRODUCT_NAME" /> akan cuba mengesan jika pelayan berada di Intranet dan hanya selepas itu permintaan IWA akan dibalas.   Jika pelayan dikesan sebagai Internet, maka permintaan IWA daripadanya akan diabaikan oleh <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Membolehkan anda mengawal sama ada mesin maya dibenarkan untuk dijalankan pada OS Chrome.
-
-      Jika dasar ditetapkan kepada Benar, peranti dibenarkan untuk menjalankan mesin maya.
-      Jika dasar ditetapkan kepada Palsu, peranti tidak akan dibenarkan untuk menjalankan mesin maya.
-      Apabila dasar ini ditukar kepada Palsu, dasar ini digunakan apabila memulakan mesin maya baharu tetapi tidak mematikan mesin maya yang sudah dijalankan.
-      Apabila dasar ini tidak ditetapkan pada peranti terurus, peranti tidak dibenarkan untuk menjalankan mesin maya.
-      Peranti yang tidak diurus dibenarkan untuk menjalankan mesin maya.</translation>
 <translation id="8669669491594628013">Membolehkan anda mengawal pencetusan amaran perlindungan kata laluan. Perlindungan kata laluan memaklumi pengguna apabila mereka menggunakan semula kata laluan yang dilindungi pada tapak yang mungkin mencurigakan.
 
       Anda boleh menggunakan 'PasswordProtectionLoginURLs' dan 'PasswordProtectionChangePasswordURL' untuk mengkonfigurasi kata laluan yang hendak dilindungi.
@@ -2894,7 +2887,7 @@
 <translation id="867410340948518937">U2F (Faktor Kedua Universal)</translation>
 <translation id="8682611302223077049">Membenarkan anda menetapkan tempoh masa dalam milisaat. Sepanjang tempoh ini, pengguna akan dimaklumi bahawa <ph name="PRODUCT_NAME" /> mesti dilancarkan semula atau bahawa peranti <ph name="PRODUCT_OS_NAME" /> mesti dimulakan semula untuk menerapkan kemas kini yang belum selesai.
 
-      Sepanjang tempoh masa ini, pengguna akan dimaklumi berulang kali tentang keperluan mengemas kini. Untuk peranti <ph name="PRODUCT_OS_NAME" />, pemberitahuan mula semula akan dipaparkan dalam dulang sistem apabila peningkatan dikesan. Untuk penyemak imbas <ph name="PRODUCT_NAME" />, apl menu akan berubah untuk menunjukkan pelancaran semula diperlukan apabila satu pertiga daripada tempoh pemberitahuan telah berlalu. Pemberitahuan ini berubah warna apabila satu pertiga daripada tempoh pemberitahuan telah berlalu dan sekali lagi apabila tempoh penuh pemberitahuan telah tamat. Pemberitahuan tambahan yang didayakan oleh dasar <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> akan mengikut jadual yang sama ini.
+      Sepanjang tempoh masa ini, pengguna akan dimaklumi berulang kali tentang keperluan mengemas kini. Untuk peranti <ph name="PRODUCT_OS_NAME" />, pemberitahuan mula semula akan dipaparkan dalam dulang sistem apabila peningkatan dikesan. Untuk penyemak imbas <ph name="PRODUCT_NAME" />, menu apl akan berubah untuk menunjukkan pelancaran semula diperlukan apabila satu pertiga daripada tempoh pemberitahuan telah berlalu. Pemberitahuan ini berubah warna apabila dua pertiga daripada tempoh pemberitahuan telah berlalu dan sekali lagi apabila tempoh penuh pemberitahuan telah tamat. Pemberitahuan tambahan yang didayakan oleh dasar <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> akan mengikut jadual yang sama ini.
 
       Jika tidak ditetapkan, tempoh lalai selama 345,600,000 milisaat (empat hari) digunakan untuk peranti <ph name="PRODUCT_OS_NAME" /> dan 604,800,000 milisaat (satu minggu) untuk <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8685024486845674965">Amaran perlindungan kata laluan dicetuskan oleh penggunaan semula kata laluan</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 74fcfb5..eda8b0c6 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -2845,13 +2845,6 @@
           Scheid meerdere servernamen van elkaar met komma's. Jokertekens (*) zijn toegestaan.
 
           Als je dit beleid niet instelt, probeert <ph name="PRODUCT_NAME" /> te detecteren of een server zich in het intranet bevindt en wordt daarna pas gereageerd op IWA-verzoeken. Als een server wordt gedetecteerd als intranet, worden IWA-verzoeken van de server genegeerd door <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Hiermee kun je aangeven of er virtuele machines mogen worden uitgevoerd met Chrome OS.
-
-      Als het beleid is ingesteld op True (Waar), mogen virtuele machines worden uitgevoerd op het apparaat.
-      Als het beleid is ingesteld op False (Onwaar), mogen er geen virtuele machines worden uitgevoerd op het apparaat.
-      Als dit beleid wordt gewijzigd naar False (Onwaar), wordt dit toegepast op nieuwe virtuele machines, maar worden reeds uitgevoerde virtuele machines niet uitgeschakeld.
-      Als dit beleid op een beheerd apparaat niet is ingesteld, mogen er geen virtuele machines worden uitgevoerd op het apparaat.
-      Virtuele machines mogen worden uitgevoerd op onbeheerde apparaten.</translation>
 <translation id="8669669491594628013">Hiermee kun je de activering van een waarschuwing voor wachtwoordbeveiliging beheren. Wachtwoordbeveiliging waarschuwt gebruikers wanneer ze hun beveiligde wachtwoord hergebruiken op potentieel verdachte sites.
 
       Je kunt het beleid 'PasswordProtectionLoginURLs' en 'PasswordProtectionChangePasswordURL' gebruiken om te configureren welk wachtwoord moet worden beveiligd.
diff --git a/components/policy/resources/policy_templates_no.xtb b/components/policy/resources/policy_templates_no.xtb
index 07c672a1..1043218e 100644
--- a/components/policy/resources/policy_templates_no.xtb
+++ b/components/policy/resources/policy_templates_no.xtb
@@ -346,7 +346,7 @@
 <translation id="199764499252435679">Aktivér komponentoppdateringer i <ph name="PRODUCT_NAME" /></translation>
 <translation id="2006530844219044261">Strømstyring</translation>
 <translation id="201557587962247231">Frekvensen for opplasting av statusrapporter for enheter</translation>
-<translation id="2017301949684549118">Nettadresser for nettprogrammer som skal installeres gjennom stum installasjon.</translation>
+<translation id="2017301949684549118">Nettadresser for nettprogrammer som skal installeres gjennom bakgrunnsinstallasjon.</translation>
 <translation id="2018836497795982119">Angir perioden i millisekunder for når tjenesten for enhetsbehandling skal spørres om brukerinnstillinger.
 
       Hvis du angir denne regelen, overstyres standardverdien på tre timer. Gyldige verdier for denne regelen er i området mellom 1800000 (30 minutter) og 86400000 (1 dag). Eventuelle verdier som ikke er i dette området, blir endret til den respektive grensen. Hvis plattformen støtter varsler om brudd på reglene, angis forsinkelsen for ny innlasting til 24 timer, fordi det forventes at varsler om brudd på reglene fremtvinger ny innlasting automatisk når regelen endres.
@@ -657,7 +657,7 @@
 
       Hvis denne innstillingen er slått av, kan ikke brukere konfigurere SMS-synkronisering.
 
-      Hvis denne regelen ikke er angitt, er dette ikke tillatt som standard for administrerte brukere, og tillatt for ikke-administrerte brukere.</translation>
+      Hvis denne regelen ikke er angitt, er dette ikke tillatt som standard for administrerte brukere og tillatt for ikke-administrerte brukere.</translation>
 <translation id="2660846099862559570">Aldri bruk mellomtjener</translation>
 <translation id="267596348720209223">Angir tegnkodingen som støttes av søkeleverandøren. Kodingene er kodesidenavn som UTF-8, GB2312 og ISO-8859-1. De prøves i oppgitt rekkefølge.
 
@@ -1320,9 +1320,9 @@
           </translation>
 <translation id="4554651132977135445">Behandlingsmodus for tilbakekobling av brukerinnstillinger</translation>
 <translation id="4554841826517980623">Denne regelen kontrollerer om funksjonen for fildeling på nettverket for <ph name="PRODUCT_NAME" /> skal bruke <ph name="NETBIOS_PROTOCOL" /> for å finne delte filer på nettverket.
-      Når denne regelen er satt til sann (true), brukes <ph name="NETBIOS_PROTOCOL" />-protokollen til å finne delinger på nettverket.
-      Når denne regelen er satt til usann (false), kan ikke <ph name="NETBIOS_PROTOCOL" />-protokollen brukes til å finne delinger.
-      Hvis denne regelen ikke er angitt, er den som standard slått av for bedriftsadministrerte brukere, og slått på for ikke-administrerte brukere.</translation>
+      Når sann er valgt for denne regelen, brukes <ph name="NETBIOS_PROTOCOL" />-protokollen til å finne delinger på nettverket.
+      Når usann er valgt for denne regelen, kan ikke <ph name="NETBIOS_PROTOCOL" />-protokollen brukes til å finne delinger.
+      Hvis denne regelen ikke er angitt, er den slått av som standard for bedriftsadministrerte brukere og slått på for ikke-administrerte brukere.</translation>
 <translation id="4555850956567117258">Slå på ekstern attestasjon for brukeren</translation>
 <translation id="4557134566541205630">Nettadresse for ny fane for standard søkeleverandør</translation>
 <translation id="4567137030726189378">Tillat bruk av utviklerverktøy</translation>
@@ -2199,13 +2199,13 @@
 <translation id="7053678646221257043">Denne retningslinjen fremtvinger import av bokmerker fra gjeldende standard nettleser, hvis den er aktivert. Hvis den er aktivert, påvirker denne retningslinjen også importeringsdialogen. Hvis den er deaktivert, kan det hende brukeren blir spurt om vedkommende vil importere, eller så kan importen skje automatisk.</translation>
 <translation id="7063895219334505671">Tillat forgrunnsvindu på disse nettstedene</translation>
 <translation id="706568410943497889">
-      Hvis regelen er satt til sann (true), kan <ph name="PRODUCT_NAME" /> samle inn WebRTC-aktivitetslogger fra Google-tjenester (f.eks. Google Meet) og laste opp disse loggene til Google.
+      Hvis sann er valgt for regelen, kan <ph name="PRODUCT_NAME" /> samle inn WebRTC-aktivitetslogger fra Google-tjenester (f.eks. Google Meet) og laste opp disse loggene til Google.
 
-      Hvis denne regelen er satt til usann (false) eller ikke er angitt, kan ikke <ph name="PRODUCT_NAME" /> samle inn eller laste opp slike logger.
+      Hvis usann er valgt for regelen eller ingen valg er gjort, kan ikke <ph name="PRODUCT_NAME" /> samle inn eller laste opp slike logger.
 
       Disse loggene inneholder diagnostikkinformasjon som er nyttig ved feilsøking av problemer med lyd- eller videoanrop i Chrome, for eksempel tidspunkt for og størrelse på sendte og mottatte RTP-pakker, tilbakemelding om overbelastning av nettverket samt metadata om tid og kvalitet for lyd- og videorammer. Loggene inneholder ikke lyd- eller videoinnhold fra samtaler.
 
-      Denne datainnsamlingen av Chrome kan kun bli utløst av Googles nettjenester, for eksempel Google Hangouts eller Google Meet.
+      Denne datainnsamlingen til Chrome kan kun bli utløst av Googles nettjenester, for eksempel Google Hangouts eller Google Meet.
 
       Google kan knytte disse loggene, via en økt-ID, sammen med andre logger som er samlet inn av Google-tjenesten, for å gjøre feilsøking enklere.
       </translation>
@@ -2342,7 +2342,7 @@
 <translation id="7336878834592315572">Behold informasjonskapsler så lenge økten varer</translation>
 <translation id="7340034977315324840">Rapportering av aktivitetstider for enhet</translation>
 <translation id="7343497214039883642">Konfigurasjonsfil for enheter på bedriftsskriver</translation>
-<translation id="7349338075015720646">Spesifiserer en liste over nettsteder som er installert gjennom stum installasjon (uten brukerinteraksjon), og som brukere ikke kan avinstallere eller slå av.
+<translation id="7349338075015720646">Spesifiserer en liste over nettsteder som er installert gjennom bakgrunnsinstallasjon (uten brukerinteraksjon), og som brukere ikke kan avinstallere eller slå av.
 
       Hvert element på regellisten er et objekt med to medlemmer: «url» og «launch_container». «url» bør være nettadressen for nettprogrammet som skal installeres, og «launch_container» bør være enten «window» (vindu) eller «tab» (fane) for å avgjøre hvordan nettprogrammet skal åpnes når det er installert. Hvis «launch_container» ikke er oppført, åpnes programmet i et vindu hvis Chrome anser det som et progressivt nettprogram. Hvis ikke åpnes det i en fane.</translation>
 <translation id="7367028210010532881">Safe Browsing-tjenesten viser en advarselsside når brukere navigerer til nettsteder som er merket som potensielt skadelige. Hvis du slår på denne innstillingen, kan ikke brukerne ignorere advarselssiden og gå videre til det skadelige nettstedet.
@@ -2836,13 +2836,6 @@
           Adskill tjenernavn med komma. Jokertegn (*) er tillatt.
 
           Hvis du ikke spesifiserer denne regelen, forsøker <ph name="PRODUCT_NAME" /> å oppdage om en tjener er på intranett og bare svare på IWA-forespørsler hvis den er det. Hvis en tjener registreres som Internett, ignorerer <ph name="PRODUCT_NAME" /> IWA-forespørsler fra tjeneren.</translation>
-<translation id="8667812577403206506">Lar deg styre om virtuelle maskiner kan kjøre i Chrome OS.
-
-      Hvis regelen er angitt som «true» (sann), kan enheten kjøre virtuelle maskiner.
-      Hvis regelen er angitt som «false» (usann), kan ikke enheten kjøre virtuelle maskiner.
-      Når denne regelen endres til «false» (usann), gjelder det for nye virtuelle maskiner. Virtuelle maskiner som allerede kjører, blir imidlertid ikke slått av.
-      Når denne regelen ikke er angitt på en administrert enhet, kan ikke enheten kjøre virtuelle maskiner.
-      Ikke-administrerte enheter kan kjøre virtuelle maskiner.</translation>
 <translation id="8669669491594628013">Lar deg kontrollere utløseren for advarselen om passordsbeskyttelse. Passordbeskyttelsen varsler brukere når de har brukt et beskyttet passord på potensielt mistenkelige sider.
 
       Du kan bruke PasswordProtectionLoginURLs og PasswordProtectionChangePasswordURL til å konfigurere hvilke passord som skal beskyttes.
@@ -3049,7 +3042,7 @@
 <translation id="9158929520101169054">Tillat multipålogging i nettleseren</translation>
 <translation id="9159126470527871268">Varsle brukere om at <ph name="PRODUCT_NAME" /> eller <ph name="PRODUCT_OS_NAME" /> må startes på nytt på grunn av en ventende oppdatering.
 
-      Med denne regelen aktiveres varsler for å informere brukeren om at nettleseren eller enheten bør eller må startes på nytt. Hvis regelen ikke er angitt, varsler <ph name="PRODUCT_NAME" /> brukeren om at det er nødvendig med en omstart ved hjelp av diskrete endringer i menyen, mens <ph name="PRODUCT_OS_NAME" /> varsler om omstart gjennom et varsel i systemfeltet. Hvis regelen er angitt som «Recommended» (anbefalt), ser brukeren en gjentakende advarsel om at en omstart er anbefalt. Brukeren kan avvise advarselen for å utsette omstarten. Hvis regelen er angitt som «Required» (obligatorisk), ser brukeren en gjentakende advarsel om at en tvungen omstart utføres når varselperioden er utløpt. Denne perioden er som standard syv dager for <ph name="PRODUCT_NAME" /> og fire dager for <ph name="PRODUCT_OS_NAME" />, og kan konfigureres via regelen <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
+      Med denne regelen aktiveres varsler for å informere brukeren om at nettleseren eller enheten bør eller må startes på nytt. Hvis regelen ikke er angitt, varsler <ph name="PRODUCT_NAME" /> brukeren om at det er nødvendig med en omstart, ved hjelp av diskrete endringer i menyen, mens <ph name="PRODUCT_OS_NAME" /> varsler om omstart gjennom et varsel i systemfeltet. Hvis regelen er angitt som «Recommended» (anbefalt), ser brukeren en gjentakende advarsel om at en omstart er anbefalt. Brukeren kan avvise advarselen for å utsette omstarten. Hvis regelen er angitt som «Required» (obligatorisk), ser brukeren en gjentakende advarsel om at tvungen omstart utføres når varselperioden er utløpt. Denne perioden er som standard syv dager for <ph name="PRODUCT_NAME" /> og fire dager for <ph name="PRODUCT_OS_NAME" /> og kan konfigureres via regelen <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
 
       Brukerens økt gjenopprettes etter omstarten.</translation>
 <translation id="9165792353046089850">Gjør det mulig å velge om nettsteder kan få tilgang til tilkoblede USB-enheter. Tilgangen kan blokkeres helt, eller brukeren kan bli spurt hver gang et nettsted vil ha tilgang til tilkoblede USB-enheter.
diff --git a/components/policy/resources/policy_templates_pl.xtb b/components/policy/resources/policy_templates_pl.xtb
index 5d2ddd4..a8cfdc5 100644
--- a/components/policy/resources/policy_templates_pl.xtb
+++ b/components/policy/resources/policy_templates_pl.xtb
@@ -2767,13 +2767,6 @@
           Nazwy serwerów należy rozdzielić przecinkami. Można używać symboli wieloznacznych (*).
 
           Jeśli nie ustawisz tej zasady, <ph name="PRODUCT_NAME" /> próbuje wykryć, czy serwer jest w intranecie, i tylko wtedy odpowiada na żądania IWA. W przypadku serwera internetowego <ph name="PRODUCT_NAME" /> ignoruje żądania IWA.</translation>
-<translation id="8667812577403206506">Określa, czy w Chrome OS mogą działać maszyny wirtualne.
-
-      Jeśli zasada ma wartość Prawda, maszyny wirtualne mogą działać na urządzeniu.
-      Jeśli zasada ma wartość Fałsz, maszyny wirtualne nie mogą działać na urządzeniu.
-      Jeśli zmienisz wartość tej zasady na Fałsz, nie będzie można uruchamiać nowych maszyn wirtualnych, ale już działające maszyny nie zostaną zamknięte.
-      Jeśli zasada nie jest ustawiona na urządzeniu zarządzanym, nie można na nim uruchamiać maszyn wirtualnych.
-      Na urządzeniach niezarządzanych można uruchamiać maszyny wirtualne.</translation>
 <translation id="8669669491594628013">Umożliwia sterowanie wyzwalaniem ostrzeżenia dotyczącego ochrony hasła. 
 Alerty dotyczące ochrony hasła ostrzegają użytkowników, gdy użyją oni swojego chronionego hasła na potencjalnie niebezpiecznych stronach.
 
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 4c5ebba..975852b 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -347,7 +347,7 @@
 <translation id="199764499252435679">Ativar atualizações de componentes no <ph name="PRODUCT_NAME" /></translation>
 <translation id="2006530844219044261">Gerenciamento de energia</translation>
 <translation id="201557587962247231">Frequência de uploads de relatórios de status do dispositivo</translation>
-<translation id="2017301949684549118">URLs para instalar apps da Web silenciosamente.</translation>
+<translation id="2017301949684549118">URLs para apps da Web serem instalados silenciosamente.</translation>
 <translation id="2018836497795982119">Especifica o período em milissegundos em que o serviço de gerenciamento de dispositivos é consultado para o recebimento de informações sobre a política do usuário.
 
       A definição dessa política modifica o valor padrão de três horas. Os valores válidos para essa política compreendem o período entre 1.800.000 (30 minutos) e 86.400.000 (1 dia). Todos os valores que não estiverem nesse período serão fixados no respectivo limite. Se a plataforma for compatível com as notificações sobre políticas, o atraso de atualização será definido para 24 horas, pois espera-se que as notificações sobre políticas forcem uma atualização automaticamente sempre que política for alterada.
@@ -1954,7 +1954,7 @@
 
       A política <ph name="SYNC_DISABLED_POLICY_NAME" /> desativa a sincronização de todos os dados por meio da modificação de RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Filtrar sites de nível superior (exceto iframes incorporados) com conteúdo adulto</translation>
-<translation id="6734521799274931721">Controla o Compartilhamento de arquivos de rede para disponibilidade do ChromeOS</translation>
+<translation id="6734521799274931721">Controla o compartilhamento de arquivos de rede para disponibilidade do Chrome OS</translation>
 <translation id="6735701345096330595">Forçar a ativação da correção ortográfica de idiomas</translation>
 <translation id="673699536430961464">Essa definição permite que os usuários alternem entre Contas do Google na área de conteúdo da janela do navegador depois de fazer login no dispositivo <ph name="PRODUCT_OS_NAME" />.
 
@@ -2130,15 +2130,15 @@
 <translation id="7053678646221257043">Se ativada, esta política força a importação dos favoritos a partir do navegador padrão atual. Se ativada, esta política também afeta a caixa de diálogo de importação. Se desativada, nenhum favorito é importado. Se não for definida, o usuário pode ser solicitado a responder se deseja importar ou a importação pode ocorrer automaticamente.</translation>
 <translation id="7063895219334505671">Permitir pop-ups nestes sites</translation>
 <translation id="706568410943497889">
-      Se a política for definida como verdadeira, o <ph name="PRODUCT_NAME" /> poderá coletar logs de eventos WebRTC dos serviços do Google (por exemplo, Google Meet) e fazer upload desses registros para o Google.
+      Se a política for definida como verdadeira, o <ph name="PRODUCT_NAME" /> poderá coletar logs de eventos WebRTC dos serviços do Google (por exemplo, Google Meet) e fazer upload desses logs para o Google.
 
-      Se a política for definida como falsa ou não for definida, o <ph name="PRODUCT_NAME" /> não poderá coletar nem fazer upload desses registros.
+      Se a política for definida como falsa ou não for definida, o <ph name="PRODUCT_NAME" /> não poderá coletar nem fazer upload desses logs.
 
-      Esses registros contêm informações de diagnóstico importantes ao depurar problemas com chamadas de áudio ou videochamadas no Chrome, como o horário e o tamanho de pacotes RTP enviados e recebidos, feedback sobre congestionamento na rede e metadados sobre o horário e a qualidade de frames de áudio e vídeo. Esses registros não possuem conteúdo de áudio ou vídeo da chamada.
+      Esses logs contêm informações de diagnóstico importantes ao depurar problemas com chamadas de áudio ou videochamadas no Chrome, como o horário e o tamanho de pacotes RTP enviados e recebidos, feedback sobre congestionamento na rede e metadados sobre o horário e a qualidade de frames de áudio e vídeo. Esses registros não possuem conteúdo de áudio ou vídeo da chamada.
 
       Essa coleta de dados feita pelo Chrome só pode ser acionada pelos serviços da Web do Google, como o Hangouts ou o Google Meet.
 
-      Por meio de um código de sessão, o Google pode associar esses registros com outros coletados pelo próprio serviço do Google, com a finalidade de facilitar a depuração.
+      Por meio de um código de sessão, o Google pode associar esses logs com outros coletados pelo próprio serviço do Google, com a finalidade de facilitar a depuração.
       </translation>
 <translation id="706669471845501145">Permitir que os sites exibam notificações da área de trabalho</translation>
 <translation id="7072208053150563108">Taxa de alteração da senha da máquina</translation>
@@ -2273,7 +2273,7 @@
 <translation id="7343497214039883642">Arquivo de configuração de impressora empresarial para dispositivos</translation>
 <translation id="7349338075015720646">Especifica uma lista de sites instalados silenciosamente sem a interação do usuário e que não podem ser desinstalados nem desativados pelo usuário.
 
-      Cada item da lista da política é um objeto com dois membros: "url" e "launch_container". "url" é o URL do app da Web a ser instalado, e "launch_container" é a "janela" ou "guia" para indicar como o app da Web será aberto depois de instalado. Se "launch_container" for omitido, o app será aberto em uma janela se o Chrome o considerar um Progressive Web App. Caso contrário, será aberto em uma guia.</translation>
+      Cada item da lista da política é um objeto com dois membros: "url" e "launch_container". "url" é o URL do app da Web a ser instalado, e "launch_container" é a "janela" ou "guia" para indicar como o app da Web será aberto depois de instalado. Se "launch_container" for omitido, o app será aberto em uma janela se o Chrome o considerar app da Web progressivo. Caso contrário, será aberto em uma guia.</translation>
 <translation id="7367028210010532881">O serviço Navegação segura mostra uma página de aviso quando os usuários navegam em sites que são sinalizados como potencialmente mal-intencionados. A ativação desta configuração impede que os usuários prossigam de qualquer forma da página de aviso para esse site.
 
       Se esta configuração for desativada ou não for configurada, os usuários poderão optar por prosseguir para o site sinalizado após o aviso ser exibido.
@@ -2749,13 +2749,6 @@
           Separe vários nomes de servidores com vírgulas. Caracteres curinga (*) são permitidos.
 
           Se esta política não é definida, o <ph name="PRODUCT_NAME" /> tenta detectar se um servidor está na Intranet e, só então, responde às solicitações IWA. Se um servidor é detectado como Internet, as solicitações IWA que partem dele são ignoradas pelo <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Permite que você controle se máquinas virtuais podem ser executadas no Chrome OS.
-
-      Se a política for definida como verdadeira, o dispositivo poderá executar máquinas virtuais.
-      Se a política for definida como falsa, o dispositivo não poderá executar máquinas virtuais.
-      Quando esta política é alterada para falsa, ela é aplicada à inicialização de novas máquinas virtuais, mas não ao encerramento das máquinas virtuais que já estejam em execução.
-      Quando esta política não é definida em um dispositivo gerenciado, o dispositivo não pode executar máquinas virtuais.
-      Dispositivos não gerenciados podem executar máquinas virtuais.</translation>
 <translation id="8669669491594628013">Permite que você controle o acionamento do aviso de proteção de senha. A proteção de senha alerta o usuário quando ele reutiliza a senha protegida dele em sites possivelmente suspeitos.
 
       Você pode usar as políticas "PasswordProtectionLoginURLs" e "PasswordProtectionChangePasswordURL" para configurar quais senhas quer proteger.
diff --git a/components/policy/resources/policy_templates_pt-PT.xtb b/components/policy/resources/policy_templates_pt-PT.xtb
index d07fa73..40d68b6 100644
--- a/components/policy/resources/policy_templates_pt-PT.xtb
+++ b/components/policy/resources/policy_templates_pt-PT.xtb
@@ -2781,13 +2781,6 @@
           Separe os vários nomes de servidor por vírgulas. Os carateres universais (*) são permitidos.
 
           Se esta política não estiver definida, o <ph name="PRODUCT_NAME" /> tentará detetar se um servidor está na Intranet e só nesse momento irá responder a pedidos IWA. Se um servidor for detetado como Internet, os pedidos IWA serão ignorados pelo <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Permite-lhe controlar se as máquinas virtuais têm autorização para serem executadas no Chrome OS.
-
-      Se a política estiver definida como verdadeira, o dispositivo tem autorização para executar máquinas virtuais.
-      Se a política estiver definida como falsa, o dispositivo não tem autorização para executar máquinas virtuais.
-      Quando esta política é alterada para falsa, aplica-se à inicialização de novas máquinas virtuais e não encerra as que já se encontram em execução.
-      Quando esta política não está definida num dispositivo gerido, este não tem autorização para executar máquinas virtuais.
-      Os dispositivos não geridos têm autorização para executar máquinas virtuais.</translation>
 <translation id="8669669491594628013">Permite controlar o acionamento do aviso de proteção por palavra-passe. A proteção por palavra-passe alerta os utilizadores quando reutilizarem as respetivas palavras-passe protegidas em sites potencialmente suspeitos.
 
       Pode utilizar as políticas "PasswordProtectionLoginURLs" e "PasswordProtectionChangePasswordURL" para configurar a palavra-passe a proteger.
diff --git a/components/policy/resources/policy_templates_ro.xtb b/components/policy/resources/policy_templates_ro.xtb
index 46e631e5..cdfb0ab 100644
--- a/components/policy/resources/policy_templates_ro.xtb
+++ b/components/policy/resources/policy_templates_ro.xtb
@@ -2764,13 +2764,6 @@
           Separă numele serverelor prin virgulă. Sunt permise metacaracterele (*).
 
           Dacă politica nu este configurată, <ph name="PRODUCT_NAME" /> va încerca să detecteze dacă un anumit server se află în intranet și numai după aceea va răspunde la solicitările IWA. Dacă un server este detectat ca fiind pe internet, <ph name="PRODUCT_NAME" /> va ignora solicitările IWA trimise de acesta.</translation>
-<translation id="8667812577403206506">Îți permite să stabilești dacă mașinile virtuale au permisiunea de a rula pe sistemul de operare Chrome.
-
-      Dacă politica este activată, dispozitivul are permisiunea de a rula mașini virtuale.
-      Dacă politica este dezactivată, dispozitivul nu va avea permisiunea de a rula mașini virtuale.
-      Atunci când se dezactivează politica, ea se aplică mașinilor virtuale noi care pornesc, dar nu le închide pe cele care rulează deja.
-      Atunci când politica nu este setată pe un dispozitiv gestionat, acesta nu are permisiunea de a rula mașini virtuale.
-      Dispozitivele care nu sunt gestionate au permisiunea de a rula mașini virtuale.</translation>
 <translation id="8669669491594628013">Îți permite să controlezi declanșarea avertismentului privind protecția parolei. Protecția parolei îi avertizează pe utilizatori când refolosesc parola protejată pe site-uri potențial suspecte.
 
       Poți folosi politicile „PasswordProtectionLoginURLs” și „PasswordProtectionChangePasswordURL” pentru a configura parola de protejat.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index e552faac..05f3755 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -2735,13 +2735,6 @@
           Допускается указание названий серверов через запятую и использование подстановочных знаков (*).
 
           Если правило не задано, <ph name="PRODUCT_NAME" /> попытается определить, находится ли сервер в сети интранет, и только после этого ответит на запросы авторизации Windows. Если <ph name="PRODUCT_NAME" /> обнаружит, что сервер находится в Интернете, эти запросы будут проигнорированы.</translation>
-<translation id="8667812577403206506">Позволяет разрешить или запретить запуск виртуальных машин в Chrome OS.
-
-      Если указано значение True, то устройству разрешено запускать виртуальные машины.
-      Если указано значение False, то устройству запрещено это делать.
-      При смене значения на False настройки начинают применяться к новым виртуальным машинам, не останавливая работу уже запущенных.
-      Если правило не задано на управляемом устройстве, то ему запрещено запускать виртуальные машины.
-      Устройствам, которые не управляются удаленно, разрешено запускать виртуальные машины.</translation>
 <translation id="8669669491594628013">Правило позволяет управлять триггером, при срабатывании которого пользователь получает предупреждение от службы защиты паролей о повторном вводе пароля на подозрительном сайте.
 
       Для определения пароля, нуждающегося в защите, можно использовать правила PasswordProtectionLoginURLs и PasswordProtectionChangePasswordURL.
diff --git a/components/policy/resources/policy_templates_sk.xtb b/components/policy/resources/policy_templates_sk.xtb
index d3573aec..d930819 100644
--- a/components/policy/resources/policy_templates_sk.xtb
+++ b/components/policy/resources/policy_templates_sk.xtb
@@ -2834,13 +2834,6 @@
           Ak chcete zadať niekoľko názvov serverov, oddeľte ich čiarkami. Zástupné znaky (*) sú povolené.
 
           Ak pravidlo zostane nenastavené, prehliadač <ph name="PRODUCT_NAME" /> sa najprv pokúsi zistiť, či sa server nachádza v sieti intranet, a až potom bude reagovať na žiadosti IWA. Ak sa zistí, že je server v sieti internet, prehliadač <ph name="PRODUCT_NAME" /> bude žiadosti IWA ignorovať.</translation>
-<translation id="8667812577403206506">Umožňuje ovládať, či sa virtuálne počítače môžu spúšťať v systéme Chrome OS.
-
-      Ak toto pravidlo nastavíte na hodnotu True, zariadenie bude môcť spúšťať virtuálne počítače.
-      Ak ho nastavíte na hodnotu False, zariadenie nebude môcť spúšťať virtuálne počítače.
-      Keď ho zmeníte na hodnotu False, použije sa na začínajúce nové virtuálne počítače, ale nevypne tie, ktoré sú už spustené.
-      Ak toto pravidlo nenastavíte v spravovanom zariadení, nebude môcť spúšťať virtuálne počítače.
-      Nespravované zariadenia môžu spúšťať virtuálne počítače.</translation>
 <translation id="8669669491594628013">Umožňuje ovládať spustenie upozornenia v rámci ochrany heslom. Ochrana heslom upozorňuje používateľov, keď svoje chránené heslo opätovne použijú na potenciálne podozrivých weboch.
 
       Pomocou pravidiel PasswordProtectionLoginURLs a PasswordProtectionChangePasswordURL môžete nakonfigurovať, ktoré heslo chcete chrániť.
diff --git a/components/policy/resources/policy_templates_sl.xtb b/components/policy/resources/policy_templates_sl.xtb
index 8ad4674..becb48f 100644
--- a/components/policy/resources/policy_templates_sl.xtb
+++ b/components/policy/resources/policy_templates_sl.xtb
@@ -2881,13 +2881,6 @@
           Imena strežnikov ločite z vejicami. Nadomestni znaki (*) so dovoljeni.
 
           Če tega pravilnika ne nastavite, <ph name="PRODUCT_NAME" /> poskuša zaznati, ali je strežnik v intranetu, in se šele potem odzove na zahteve IWA. Če je strežnik zaznan kot internet, <ph name="PRODUCT_NAME" /> prezre zahteve IWA, poslane iz tega strežnika.</translation>
-<translation id="8667812577403206506">Omogoči nadziranje, ali je v sistemu OS Chrome dovoljeno izvajanje navideznih računalnikov.
-
-      Če je pravilnik nastavljen na »True«, je v napravi dovoljeno izvajanje navideznih računalnikov.
-      Če je pravilnik nastavljen na »False«, v napravi ni dovoljeno izvajanje navideznih računalnikov.
-      Če je nastavitev tega pravilnika spremenjena na »False«, se uporabi pri zagonu novih navideznih računalnikov, navideznih računalnikov, ki se že izvajajo, pa ne zaustavi.
-      Če ta pravilnik ni nastavljen v upravljani napravi, v napravi ni dovoljeno izvajanje navideznih računalnikov.
-      V napravah, ki niso upravljane, je dovoljeno izvajanje navideznih računalnikov.</translation>
 <translation id="8669669491594628013">Omogoča, da nadzirate sprožitev opozorila zaščite z geslom. Zaščita z geslom opozori uporabnike, ko zaščiteno geslo znova uporabijo na spletnih mestih, ki so morda sumljiva.
 
       Pravilnika »PasswordProtectionLoginURLs« in »PasswordProtectionChangePasswordURL« lahko uporabite za konfiguriranje, katero geslo naj bo zaščiteno.
diff --git a/components/policy/resources/policy_templates_sr.xtb b/components/policy/resources/policy_templates_sr.xtb
index 2e9e6fe..abebcaa0 100644
--- a/components/policy/resources/policy_templates_sr.xtb
+++ b/components/policy/resources/policy_templates_sr.xtb
@@ -2874,13 +2874,6 @@
           Раздвојите називе различитих сервера зарезима. Џокерски знакови (*) су дозвољени.
 
           Ако не подесите ове смернице, <ph name="PRODUCT_NAME" /> ће покушати да открије да ли је сервер на интранету и само тада ће одговорити на IWA захтеве. Ако се открије да је сервер на интернету, <ph name="PRODUCT_NAME" /> ће занемарити његове IWA захтеве.</translation>
-<translation id="8667812577403206506">Омогућавају вам да контролишете да ли виртуелне машине смеју да се покрећу на Chrome ОС-у.
-
-      Ако смернице подесите на Тачно, уређај може да покреће виртуелне машине.
-      Ако смернице подесите на Нетачно, уређај не може да покреће виртуелне машине.
-      Ако промените подешавање смерница на Нетачно, оне се примењују на покретање нових виртуелних машина, али не искључују већ покренуте виртуелне машине.
-      Ако не подесите ове смернице на уређају којим се управља, уређај не може да покреће виртуелне машине.
-      Уређаји којима се не управља могу да покрећу виртуелне машине.</translation>
 <translation id="8669669491594628013">Омогућавају вам да контролишете покретање упозорења за заштиту лозинком. Заштита лозинком упозорава кориснике када користе заштићену лозинку на потенцијално сумњивим сајтовима.
 
       Можете да конфигуришете лозинку коју желите да заштитите ако користите „PasswordProtectionLoginURLs“ и „PasswordProtectionChangePasswordURL“ смернице.
diff --git a/components/policy/resources/policy_templates_sv.xtb b/components/policy/resources/policy_templates_sv.xtb
index ae5d1ca..b927624 100644
--- a/components/policy/resources/policy_templates_sv.xtb
+++ b/components/policy/resources/policy_templates_sv.xtb
@@ -2384,7 +2384,7 @@
 <translation id="7336878834592315572">Behåll cookies under hela sessionen</translation>
 <translation id="7340034977315324840">Rapportera aktivitetstider för enhet</translation>
 <translation id="7343497214039883642">Skivarkonfigurationsfil för företagsenheter</translation>
-<translation id="7349338075015720646">Anger en lista över webbplatser som installeras obemärkt utan att användaren gör något, och som användaren inte kan avinstallera eller inaktivera.
+<translation id="7349338075015720646">Anger en lista över webbplatser som installeras obemärkt utan att användaren gör något och som användaren inte kan avinstallera eller inaktivera.
 
       Varje post i principens listan är ett objekt med två medlemmar: "url" och "launch_container". "url" bör vara webbadressen till webbappen som ska installeras och "launch_container" ska anges antingen som "window" eller "tab" för att visa hur webbappen ska öppnas när den har installerats. Om "launch_container" utelämnas öppnas appen i ett fönster om den anses vara en progressiv webbapp i Chrome och på en flik i annat fall.</translation>
 <translation id="7367028210010532881">Med tjänsten Säker webbsökning visas en varningssida när användare navigerar till webbplatser som flaggats som skadliga. Om du aktiverar inställningen kan användare inte fortsätta från varningssidan till den skadliga webbplatsen.
@@ -2876,13 +2876,6 @@
           Avgränsa flera servernamn med kommatecken. Jokertecken (*) tillåts.
 
           Om du inte ställer in den här principen kommer <ph name="PRODUCT_NAME" /> att försöka identifiera om en server finns i intranätet och endast då kommer den att svara på IWA-förfrågningar. Om en server identifieras som internet kommer IWA-förfrågningar därifrån att ignoreras av <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Låter dig styra om virtuella maskiner får köras eller inte i Chrome OS.
-
-      Om principen är inställd på sant får virtuella maskiner köras på enheten.
-      Om principen är inställd på falskt får virtuella maskiner inte köras på enheten.
-      När principen ändras till falskt tillämpas den på nya virtuella maskiner, men virtuella maskiner som redan körs avslutas inte.
-      Om principen lämnas utan inställning på en hanterad enhet får virtuella maskiner inte köras på den.
-      Virtuella maskiner får köras på enheter som inte hanteras.</translation>
 <translation id="8669669491594628013">Låter dig styra vad som ska utlösa en varning från lösenordsskyddet. Lösenordsskyddet varnar användarna om de återanvänder ett skyddat lösenord på en webbplats som kan vara misstänkt.
 
       Du kan konfigurera vilket lösenord som ska skyddas med principerna PasswordProtectionLoginURLs och PasswordProtectionChangePasswordURL.
@@ -3109,7 +3102,7 @@
 <translation id="9158929520101169054">Aktivera multiinloggning i webbläsaren</translation>
 <translation id="9159126470527871268">Meddela användarna att <ph name="PRODUCT_NAME" /> eller <ph name="PRODUCT_OS_NAME" /> måste startas om eftersom en uppdatering väntar.
 
-      Med den här principen kan användaren få en avisering om att webbläsaren eller enheten bör eller måste startas om. Om principen inte ställs in framgår det av en diskret ändring i menyn i <ph name="PRODUCT_NAME" /> att omstart krävs medan en avisering visas i systemfältet för <ph name="PRODUCT_OS_NAME" />.Med inställningen Rekommenderas visas ett återkommande meddelande för användaren att en omstart rekommenderas. Användaren kan ignorera meddelandet och skjuta upp omstarten. Med inställningen Krävs visas ett återkommande meddelande om att webbläsaren kommer att startas om efter en viss tid. Tidsperioden är sju dagar för <ph name="PRODUCT_NAME" /> och fyra dagar för <ph name="PRODUCT_OS_NAME" /> som standard. Den kan konfigureras via inställningarna för principen <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
+      Med den här principen kan användaren få en avisering om att webbläsaren eller enheten bör eller måste startas om. Om principen inte ställs in framgår det av en diskret ändring i menyn i <ph name="PRODUCT_NAME" /> att omstart krävs medan en avisering visas i systemfältet för <ph name="PRODUCT_OS_NAME" />. Med inställningen Rekommenderas visas ett återkommande meddelande för användaren att en omstart rekommenderas. Användaren kan ignorera meddelandet och skjuta upp omstarten. Med inställningen Krävs visas ett återkommande meddelande om att webbläsaren kommer att startas om efter en viss tid. Tidsperioden är sju dagar för <ph name="PRODUCT_NAME" /> och fyra dagar för <ph name="PRODUCT_OS_NAME" /> som standard. Den kan konfigureras via inställningarna för principen <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
 
       Användarens session återställs efter omstarten.</translation>
 <translation id="9165792353046089850">Låter dig ange om webbplatser får åtkomst till anslutna USB-enheter. Åtkomsten kan blockeras helt eller så kan användaren bli tillfrågad varje gång en webbplats begär åtkomst till anslutna USB-enheter.
diff --git a/components/policy/resources/policy_templates_sw.xtb b/components/policy/resources/policy_templates_sw.xtb
index 576d916..f36008a 100644
--- a/components/policy/resources/policy_templates_sw.xtb
+++ b/components/policy/resources/policy_templates_sw.xtb
@@ -2813,12 +2813,6 @@
           Seva nyingi tofauti zenye koma. Kadi egemezi (*) zinaruhusiwa.
 
           Ukiacha sera hii bila kuiweka <ph name="PRODUCT_NAME" /> itajaribu kugundua ikiwa seva iko kwenye Intraneti na hapo ndipo itajibu maombi ya IWA pekee. Iwapo seva itagunduliwa kama Intraneti basi maombi ya IWA yatapuuzwa na <ph name="PRODUCT_NAME" />.</translation>
-<translation id="8667812577403206506">Hukuruhusu udhibiti ikiwa mashine pepe zinaruhusiwa kutumia Mfumo wa Uendeshaji wa Chrome.
-
-      Kama sera imewekwa kuwa Ndivyo, kifaa kinaruhusiwa kutumia mashine pepe.
-      Kama sera imewekwa kuwa Sivyo, kifaa hakitaruhusiwa kutumia mashine pepe.
-      Sera hii inapobadilishwa kuwa Sivyo, hutumika kwenye mashine pepe mpya lakini haizimi mashine pepe ambazo tayari zinatumika. Kama sera hii haijawekwa kwenye kifaa kinachodhibitiwa, kifaa hakiruhusiwi kutumia mashine pepe.
-      Vifaa ambavyo havidhibitiwi vinaruhusiwa kutumia mashine pepe.</translation>
 <translation id="8669669491594628013">Inakuruhusu udhibiti kisababishi cha onyo la ulinzi wa nenosiri. Ulinzi wa nenosiri huonya watumiaji wakati wanatumia tena nenosiri lao linalolindwa kwenye tovuti ambazo huenda zikawa hatari.
 
       Unaweza kutumia sera za 'PasswordProtectionLoginURLs' na 'PasswordProtectionChangePasswordURL' ili kuweka mipangilio ya nenosiri utakalolinda.
diff --git a/components/policy/resources/policy_templates_ta.xtb b/components/policy/resources/policy_templates_ta.xtb
index ea91ed7..5e4daae 100644
--- a/components/policy/resources/policy_templates_ta.xtb
+++ b/components/policy/resources/policy_templates_ta.xtb
@@ -2765,13 +2765,6 @@
           பல சேவையகங்களின் பெயர்களைக் காற்புள்ளிகளால் பிரிக்கவும். சிறப்புக் குறிகள் (*) அனுமதிக்கப்படுகின்றன.
 
           இந்தக் கொள்கையை அமைக்கவில்லை எனில், சேவையகமானது அக இணையத்தில் உள்ளதா என்பதை <ph name="PRODUCT_NAME" /> கண்டறிய முயற்சிக்கும், அதன் பின்னரே IWA கோரிக்கைகளுக்கு பதிலளிக்கும். சேவையமானது இணையமாகக் கண்டறியப்பட்டால், அதிலிருந்து வரும் IWA கோரிக்கைகள், <ph name="PRODUCT_NAME" /> ஆல் தவிர்க்கப்படும்.</translation>
-<translation id="8667812577403206506">Chrome OS இல் விர்ச்சுவல் சாதனங்கள் இயங்குவதற்கு அனுமதிக்கப்படுமா என்பதைக் கட்டுப்படுத்த அனுமதிக்கும்.
-
-      கொள்கை "சரி" என அமைக்கப்பட்டால், விர்ச்சுவல் சாதனங்களை இயக்குவதற்குச் சாதனம் அனுமதிக்கப்படும்.
-      கொள்கை "தவறு" என அமைக்கப்பட்டால், விர்ச்சுவல் சாதனங்களை இயக்குவதற்குச் சாதனம் அனுமதிக்கப்படாது.
-      கொள்கை "தவறு" என மாற்றப்பட்டால், புதிய விர்ச்சுவல் சாதனங்களைத் தொடங்குவதற்குப் பொருந்தும் ஆனால், ஏற்கனவே இயங்கிக் கொண்டிருக்கும் விர்ச்சுவல் சாதனங்களை முடக்காது.
-      நிர்வகிக்கப்படும் சாதனத்தில் இந்தக் கொள்கை அமைக்கப்படவில்லை எனில், விர்ச்சுவல் சாதனங்களை இயக்குவதற்குச் சாதனம் அனுமதிக்கப்படாது.
-      நிர்வகிக்கப்படாத சாதனங்கள், விர்ச்சுவல் சாதனங்களை இயக்குவதற்கு அனுமதிக்கப்படும்.</translation>
 <translation id="8669669491594628013">இது கடவுச்சொல் பாதுகாப்பு எச்சரிக்கையைக் காண்பிப்பதை நீங்கள் கட்டுப்படுத்த அனுமதிக்கும். சந்தேகத்திற்கிடமான தளங்களில் பயனர்கள் தங்களுடைய பாதுகாக்கப்பட்ட கடவுச்சொல்லை மீண்டும் பயன்படுத்தும்போது, கடவுச்சொல் பாதுகாப்புச் சேவை அவர்களை எச்சரிக்கும்.
 
       பாதுகாக்க வேண்டிய கடவுச்சொல்லை உள்ளமைக்க, 'PasswordProtectionLoginURLs' மற்றும் 'PasswordProtectionChangePasswordURL' ஆகிய கொள்கைகளைப் பயன்படுத்தலாம்.
diff --git a/components/policy/resources/policy_templates_te.xtb b/components/policy/resources/policy_templates_te.xtb
index 1daf362..61c6f9a 100644
--- a/components/policy/resources/policy_templates_te.xtb
+++ b/components/policy/resources/policy_templates_te.xtb
@@ -3221,13 +3221,6 @@
           బహుళ సర్వర్ పేర్లను కామాలతో వేరు చేయండి. వైల్డ్‌కార్డ్‌లు (*) అనుమతించబడతాయి.
 
           మీరు ఈ విధానాన్ని సెట్ చేయకుండా వదిలేస్తే <ph name="PRODUCT_NAME" /> సర్వర్ ఇంట్రానెట్‌లో ఉంటే గుర్తించడానికి ప్రయత్నించి ఆపై మాత్రమే IWA అభ్యర్థనలకు ప్రతిస్పందిస్తుంది.  సర్వర్ ఇంటర్నెట్‌గా గుర్తించబడితే, అప్పుడు దాని నుండి IWA అభ్యర్థనలను <ph name="PRODUCT_NAME" /> విస్మరిస్తుంది.</translation>
-<translation id="8667812577403206506">Chrome OSలో వర్చువల్ మెషీన్‌లను అమలు చేయడానికి అనుమతించాలో లేదో నియంత్రించడానికి మిమ్మల్ని అనుమతిస్తుంది.
-
-      ఒకవేళ విధానాన్ని ఒప్పు అని సెట్ చేస్తే, వర్చువల్ మెషీన్‌లను అమలు చేయడానికి పరికరం అనుమతించబడుతుంది.
-      ఒకవేళ విధానాన్ని తప్పు అని సెట్ చేస్తే, వర్చువల్ మెషీన్‌లను అమలు చేయడానికి పరికరం అనుమతించబడదు.
-      ఈ విధానాన్ని తప్పు అని మార్చినప్పుడు, అది కొత్త వర్చువల్ మెషీన్‌లకు వర్తించడం ప్రారంభమవుతుంది, కానీ అప్పటికే అమలవుతున్న వర్చువల్ మెషీన్‌లు షట్ డౌన్ చేయబడవు.
-      ఈ విధానాన్ని నిర్వాహిత పరికరంలో సెట్ చేయనప్పుడు, వర్చువల్ మెషీన్‌లను అమలు చేయడానికి పరికరం అనుమతించబడదు.
-      వర్చువల్ మెషీన్‌లను అమలు చేయడానికి నిర్వహించబడని పరికరాలు అనుమతించబడతాయి.</translation>
 <translation id="8669669491594628013">పాస్‌వర్డ్ రక్షణ హెచ్చరికను యాక్టివేట్ చేయడాన్ని నియంత్రించడానికి మిమ్మల్ని అనుమతిస్తుంది. వినియోగదారులు తమ రక్షిత పాస్‌వర్డ్‌ని అనుమానాస్పదమయ్యే అవకాశమున్న సైట్‌లలో తిరిగి ఉపయోగించినప్పుడు పాస్‌వర్డ్ రక్షణ వారిని హెచ్చరిస్తుంది.
 
       ఏ పాస్‌వర్డ్‌ను రక్షించాలో కాన్ఫిగర్ చేయడానికి 'PasswordProtectionLoginURLs' మరియు 'PasswordProtectionChangePasswordURL' విధానాలను మీరు ఉపయోగించవచ్చు.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index fb35322b..0414a9a 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -2756,13 +2756,6 @@
           คั่นชื่อเซิร์ฟเวอร์หลายชื่อด้วยเครื่องหมายจุลภาค อนุญาตให้ใช้อักขระตัวแทน (*)
 
           หากคุณปล่อยนโยบายนี้ไว้โดยไม่มีการตั้งค่า <ph name="PRODUCT_NAME" /> จะพยายามตรวจหาว่าเซิร์ฟเวอร์อยู่บนอินทราเน็ตไหม และจะตอบรับคำขอ IWA หลังจากนั้นเท่านั้น หากมีการตรวจพบว่าเซิร์ฟเวอร์เป็นอินเทอร์เน็ต <ph name="PRODUCT_NAME" /> จะเพิกเฉยต่อคำขอ IWA</translation>
-<translation id="8667812577403206506">อนุญาตให้คุณควบคุมว่าจะเรียกใช้เครื่องเสมือนใน Chrome OS ได้หรือไม่
-
-      หากตั้งค่านโยบายเป็น "จริง" อุปกรณ์จะมีสิทธิ์เรียกใช้เครื่องเสมือนได้
-      หากตั้งค่านโยบายเป็น "เท็จ" อุปกรณ์จะไม่มีสิทธิ์เรียกใช้เครื่องเสมือน
-      การเปลี่ยนการตั้งค่าเป็น "เท็จ" จะส่งผลต่อการเริ่มเครื่องเสมือนรายการใหม่ แต่จะไม่ปิดเครื่องเสมือนที่เรียกใช้อยู่แล้ว
-      หากไม่ได้ตั้งค่านโยบายนี้ในอุปกรณ์ที่มีการจัดการ อุปกรณ์จะไม่มีสิทธิ์เรียกใช้เครื่องเสมือน
-      อุปกรณ์ที่ไม่มีการจัดการจะมีสิทธิ์เรียกใช้เครื่องเสมือน</translation>
 <translation id="8669669491594628013">อนุญาตให้คุณควบคุมการทริกเกอร์คำเตือนการปกป้องรหัสผ่าน การปกป้องรหัสผ่านจะแจ้งเตือนเมื่อผู้ใช้ใช้รหัสผ่านที่มีการปกป้องซ้ำในเว็บไซต์ที่น่าสงสัย
 
       คุณใช้นโยบาย "PasswordProtectionLoginURLs" และ "PasswordProtectionChangePasswordURL" เพื่อกำหนดค่ารหัสผ่านที่จะปกป้องได้
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index 935028a..5a31ea5 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -2841,18 +2841,6 @@
           Birden fazla sunucu adını virgülle ayırın. Joker karakterlere (*) izin verilir.
 
           Bu politikayı ayarlanmamış olarak bırakırsanız, <ph name="PRODUCT_NAME" /> sunucunun İntranet'te olup olmadığını saptamaya çalışır ve buna göre IWA taleplerini yanıtlar. Sunucunun İnternet'te olduğu saptanırsa, sunucudan gelen IWA talepleri <ph name="PRODUCT_NAME" /> tarafından yoksayılır.</translation>
-<translation id="8667812577403206506">Chrome OS'te sanal makinelerin çalıştırılmasına izin verilip verilmediğini kontrol etmenize olanak tanır.
-
-      Politika Doğru (True) değerine ayarlanırsa cihazın sanal makineler
-      çalıştırmasına izin verilir.
-      Politika Yanlış (False) değerine ayarlanırsa cihazın sanal makineler
-      çalıştırmasına izin verilmez.
-      Bu politika Yanlış (False) olarak değiştirildiğinde, ayar yeni sanal
-makinelerin başlatılmasında geçerli olur, ancak halihazırda çalıştırılmakta
-olan sanal makineleri kapatmaz.
-      Yönetilen bir cihazda bu politika ayarlanmadığında, cihazın sanal makine
-çalıştırmasına izin verilmez.
-      Yönetilmeyen cihazların sanal makineler çalıştırmasına izin verilir.</translation>
 <translation id="8669669491594628013">Şifre koruma uyarısının tetiklenmesini kontrol etmenize olanak tanır. Şifre koruma, korunan şifrelerini şüpheli olabilecek sitelerde yeniden kullandıklarında kullanıcıları uyarır.
 
       Korunacak şifreyi yapılandırmak için "PasswordProtectionLoginURLs" ve "PasswordProtectionChangePasswordURL" politikalarını kullanabilirsiniz.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 9984314b..75df98e 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -2762,13 +2762,6 @@
           Імена серверів потрібно розділяти комами. Дозволяються символи підстановки (*).
 
           Якщо це правило не встановлено, <ph name="PRODUCT_NAME" /> спробує визначити, чи сервер розміщено в інтранет-мережі, і лише тоді відповість на запити IWA. Якщо сервер виявлено в інтранет-мережі, <ph name="PRODUCT_NAME" /> ігноруватиме запити IWA, які надсилає сервер.</translation>
-<translation id="8667812577403206506">Дає змогу контролювати, чи в ОС Chrome можна запускати віртуальні машини.
-
-      Якщо для правила вибрано значення true, пристрою дозволено запускати віртуальні машини.
-      Якщо для правила вибрано значення false, пристрою заборонено запускати віртуальні машини.
-      Якщо змінити значення цього правила на false, нові віртуальні машини не запускатимуться, але вже запущені не вимкнуться.
-      Якщо це правило не налаштовано на керованому пристрої, йому заборонено запускати віртуальні машини.
-      Некерованим пристроям дозволено запускати віртуальні машини.</translation>
 <translation id="8669669491594628013">Дає змогу контролювати активацію застережень про захист паролем. Користувачі отримуватимуть такі попередження, коли використовуватимуть свій захищений пароль на потенційно підозрілих сайтах.
 
       За допомогою правил PasswordProtectionLoginURLs і PasswordProtectionChangePasswordURL можна вибрати, які паролі мають бути захищеними.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 44c1214..7e07c3e1 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -2859,13 +2859,6 @@
           Phân tách tên của nhiều máy chủ bằng dấu phẩy. Cho phép ký tự đại diện (*).
 
          Nếu bạn không đặt chính sách này, <ph name="PRODUCT_NAME" /> sẽ cố gắng phát hiện xem máy chủ có ở trên mạng nội bộ hay không, sau đó mới phản hồi yêu cầu IWA.  Nếu máy chủ được phát hiện là ở trên mạng Internet thì yêu cầu IWA từ máy chủ sẽ bị <ph name="PRODUCT_NAME" /> bỏ qua.</translation>
-<translation id="8667812577403206506">Cho phép bạn kiểm soát xem máy ảo có được phép chạy trên Chrome OS hay không.
-
-      Nếu bạn đặt chính sách thành True, thiết bị sẽ được phép chạy máy ảo.
-      Nếu bạn đặt chính sách thành False, thiết bị sẽ không được phép chạy máy ảo.
-      Khi bạn đổi chính sách này thành False, chính sách này sẽ áp dụng cho thao tác khởi động các máy ảo mới nhưng không tắt các máy ảo đang chạy.
-      Khi bạn chưa đặt chính sách này trên một thiết bị được quản lý, thì thiết bị đó sẽ được phép chạy máy ảo.
-       Thiết bị không được quản lý sẽ được phép chạy máy ảo.</translation>
 <translation id="8669669491594628013">Cho phép bạn kiểm soát việc kích hoạt cảnh báo bảo vệ mật khẩu. Dịch vụ bảo vệ mật khẩu sẽ cảnh báo người dùng khi họ sử dụng lại mật khẩu được bảo vệ trên các trang web có thể đáng ngờ.
 
       Bạn có thể sử dụng các chính sách 'PasswordProtectionLoginURLs' và 'PasswordProtectionChangePasswordURL' để định cấu hình mật khẩu cần bảo vệ.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 392ceb7..f4cfdce 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -2683,13 +2683,6 @@
           如果有多个服务器名称,要使用英文逗号分隔。允许使用通配符 (*)。
 
           如果此政策未设置,<ph name="PRODUCT_NAME" /> 将会尝试检测某个服务器是否在内网上,只有当该服务器在内网上时,该浏览器才会回应 IWA 请求。如果检测到某个服务器在互联网上,<ph name="PRODUCT_NAME" /> 将忽略来自它的 IWA 请求。</translation>
-<translation id="8667812577403206506">可让您控制是否允许在 Chrome 操作系统上运行虚拟机。
-
-      如果此政策设为 true,相应设备将能够运行虚拟机。
-      如果此政策设为 false,相应设备将无法运行虚拟机。
-      如果此政策改设为 false,则只会导致无法启动新的虚拟机,而不会关闭已在运行的虚拟机。
-      如果未在某部托管设备上设置此政策,该设备将无法运行虚拟机。
-      非托管设备可以运行虚拟机。</translation>
 <translation id="8669669491594628013">让您能够控制密码保护服务警告的触发条件。当用户在可疑的网站上重复使用受保护的密码时,密码保护服务就会向用户发出提醒。
 
       您可以使用“PasswordProtectionLoginURLs”和“PasswordProtectionChangePasswordURL”政策来配置要保护的密码。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index 96c042e..6946452 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -2742,13 +2742,6 @@
           請以逗號分隔多個伺服器名稱。可允許萬用字元 (*)。
 
           如果未設定這項政策,<ph name="PRODUCT_NAME" /> 會嘗試偵測伺服器是否位於內部網路,然後回應伺服器傳來的 IWA 要求。如果伺服器位於網際網路,<ph name="PRODUCT_NAME" /> 就會忽略伺服器傳來的 IWA 要求。</translation>
-<translation id="8667812577403206506">讓你控制虛擬機器能否在 Chrome 作業系統上運作。
-
-      如果將這項政策設為 True,裝置將可以執行虛擬機器。
-      如果將這項政策設為 False,裝置將無法執行虛擬機器。
-      當這項政策變更為 False 時,會禁止裝置啟動新的虛擬機器,但不會關閉已在執行中的虛擬機器。
-      在受管理的裝置上,如果不設定這項政策,裝置將無法執行虛擬機器。
-      未受管理的裝置則可執行虛擬機器。</translation>
 <translation id="8669669491594628013">讓你控制密碼保護警告訊息的觸發設定。當使用者在疑似不安全的網站上重複使用受保護的密碼時,密碼保護功能就會向使用者發出警示。
 
       你可以使用「PasswordProtectionLoginURLs」和「PasswordProtectionChangePasswordURL」政策設定要保護的密碼。
diff --git a/components/previews/content/previews_hints.cc b/components/previews/content/previews_hints.cc
index 1a1368a..abbab13 100644
--- a/components/previews/content/previews_hints.cc
+++ b/components/previews/content/previews_hints.cc
@@ -104,6 +104,8 @@
       return PreviewsType::NOSCRIPT;
     case optimization_guide::proto::RESOURCE_LOADING:
       return PreviewsType::RESOURCE_LOADING_HINTS;
+    case optimization_guide::proto::LITE_PAGE_REDIRECT:
+      return PreviewsType::LITE_PAGE_REDIRECT;
   }
 }
 
diff --git a/components/safe_browsing/password_protection/metrics_util.h b/components/safe_browsing/password_protection/metrics_util.h
index ff18005..4a2bfe7f 100644
--- a/components/safe_browsing/password_protection/metrics_util.h
+++ b/components/safe_browsing/password_protection/metrics_util.h
@@ -91,11 +91,13 @@
   // No request sent if the admin configures password protection to
   // warn on ALL password reuses (rather than just phishing sites).
   PASSWORD_ALERT_MODE = 18,
-  // No request sent sent if the admin turns off password protection.
+  // No request sent if the admin turns off password protection.
   TURNED_OFF_BY_ADMIN = 19,
   // No request sent because Safe Browsing is disabled.
   SAFE_BROWSING_DISABLED = 20,
-  kMaxValue = SAFE_BROWSING_DISABLED,
+  // No request sent because user is not signed-in.
+  USER_NOT_SIGNED_IN = 21,
+  kMaxValue = USER_NOT_SIGNED_IN,
 };
 
 // Enum values indicates if a password protection warning is shown or
diff --git a/components/safe_browsing/password_protection/mock_password_protection_service.h b/components/safe_browsing/password_protection/mock_password_protection_service.h
index 176b7214..f1a6fc7 100644
--- a/components/safe_browsing/password_protection/mock_password_protection_service.h
+++ b/components/safe_browsing/password_protection/mock_password_protection_service.h
@@ -41,8 +41,9 @@
   MOCK_METHOD1(UserClickedThroughSBInterstitial, bool(content::WebContents*));
   MOCK_METHOD2(ShowInterstitial,
                void(content::WebContents*, ReusedPasswordType));
-  MOCK_METHOD2(IsPingingEnabled,
+  MOCK_METHOD3(IsPingingEnabled,
                bool(LoginReputationClientRequest::TriggerType,
+                    ReusedPasswordType,
                     RequestOutcome*));
   MOCK_METHOD3(ShowModalWarning,
                void(content::WebContents*,
diff --git a/components/safe_browsing/password_protection/password_protection_service.cc b/components/safe_browsing/password_protection/password_protection_service.cc
index 4a16b7e..0b515ed 100644
--- a/components/safe_browsing/password_protection/password_protection_service.cc
+++ b/components/safe_browsing/password_protection/password_protection_service.cc
@@ -399,7 +399,7 @@
     ReusedPasswordType password_type,
     RequestOutcome* reason) {
   *reason = RequestOutcome::UNKNOWN;
-  if (IsPingingEnabled(trigger_type, reason) &&
+  if (IsPingingEnabled(trigger_type, password_type, reason) &&
       !IsURLWhitelistedForPasswordEntry(main_frame_url, reason)) {
     return true;
   }
diff --git a/components/safe_browsing/password_protection/password_protection_service.h b/components/safe_browsing/password_protection/password_protection_service.h
index 713c86e..108d9513 100644
--- a/components/safe_browsing/password_protection/password_protection_service.h
+++ b/components/safe_browsing/password_protection/password_protection_service.h
@@ -267,6 +267,7 @@
 
   virtual bool IsPingingEnabled(
       LoginReputationClientRequest::TriggerType trigger_type,
+      ReusedPasswordType password_type,
       RequestOutcome* reason) = 0;
 
   virtual bool IsHistorySyncEnabled() = 0;
diff --git a/components/strings/components_chromium_strings_mr.xtb b/components/strings/components_chromium_strings_mr.xtb
index f3e7061..90a256d 100644
--- a/components/strings/components_chromium_strings_mr.xtb
+++ b/components/strings/components_chromium_strings_mr.xtb
@@ -2,7 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="mr">
 <translation id="130631256467250065">आपण आपल्या डिव्हाइसचा पुढील वेळी पुनरारंभ कराल तेव्हा आपले बदल प्रभावी होतील.</translation>
-<translation id="1838412507805038478"><ph name="ISSUER" /> ने या वेबसाइटचे प्रमाणपत्र जारी केले हे Chromium ने सत्यापित केले.</translation>
+<translation id="1838412507805038478"><ph name="ISSUER" /> ने या वेबसाइटचे सर्टिफिकेट जारी केले हे Chromium ने पडताळले.</translation>
 <translation id="275588974610408078">Chromium मध्ये क्रॅश अहवाल उपलब्ध नाही.</translation>
 <translation id="3064346599913645280">आपण एक सुरक्षित Chromium पृष्ठ पाहत आहात</translation>
 <translation id="3550966579244642892">Chromium OS नी त्याचे प्रारंभिक सेटअप पूर्ण केले नाही.</translation>
diff --git a/components/strings/components_google_chrome_strings_mr.xtb b/components/strings/components_google_chrome_strings_mr.xtb
index 488a54b..f1ca0ffa 100644
--- a/components/strings/components_google_chrome_strings_mr.xtb
+++ b/components/strings/components_google_chrome_strings_mr.xtb
@@ -3,7 +3,7 @@
 <translationbundle lang="mr">
 <translation id="1016765312371154165">Chrome योग्यरित्या बंद झाले नाही.</translation>
 <translation id="130631256467250065">आपण आपल्या डिव्हाइसचा पुढील वेळी पुनरारंभ कराल तेव्हा आपले बदल प्रभावी होतील.</translation>
-<translation id="2147651015520127414"><ph name="ISSUER" /> ने या वेबसाइटचे प्रमाणपत्र जारी केले हे Chrome ने सत्यापित केले.</translation>
+<translation id="2147651015520127414"><ph name="ISSUER" /> ने या वेबसाइटचे सर्टिफिकेट जारी केले हे Chrome ने पडताळले.</translation>
 <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>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 755360b8..7179605 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -99,6 +99,7 @@
 <translation id="1559572115229829303">&lt;p&gt;<ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> এ একটি ব্যক্তিগত সংযোগ স্থাপন করা যায়নি কারণ আপনার ডিভাইসের তারিখ এবং সময় (<ph name="DATE_AND_TIME" />) সঠিক নয়৷&lt;/p&gt;
 
 &lt;p&gt;দয়া করে &lt;strong&gt;সেটিংস&lt;/strong&gt; অ্যাপ্লিকেশানের &lt;strong&gt;সাধারণ&lt;/strong&gt; বিভাগ থেকে তারিখ এবং সময় সংশোধন করুন৷&lt;/p&gt;</translation>
+<translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">এই ওয়েবপৃষ্ঠাটি দেখানোর সময় কোনো সমস্যা হয়েছে।</translation>
 <translation id="1592005682883173041">স্থানীয় ডেটা অ্যাক্সেস</translation>
 <translation id="1594030484168838125">বেছে নিন</translation>
@@ -138,6 +139,7 @@
 <translation id="1821930232296380041">অবৈধ অনুরোধ বা অনুরোধ মাপকাঠিগুলি</translation>
 <translation id="1826516787628120939">চেক করা হচ্ছে</translation>
 <translation id="1834321415901700177">এই সাইটটিতে ক্ষতিকর প্রোগ্রাম রয়েছে</translation>
+<translation id="1839551713262164453">নীতির মূল্য যাচাইকরণে সমস্যা হওয়ার জন্য যাচাই করা যায়নি</translation>
 <translation id="1840414022444569775">এই কার্ডের নম্বরটি আগেই ব্যবহার করেছেন</translation>
 <translation id="1842969606798536927">পেমেন্ট করুন</translation>
 <translation id="1871208020102129563">
@@ -209,6 +211,7 @@
 <translation id="2356070529366658676">জিজ্ঞাসা করুন</translation>
 <translation id="2359629602545592467">একাধিক</translation>
 <translation id="2359808026110333948">অবিরত</translation>
+<translation id="2360873523816792727">সমস্ত ডিভাইসে আপনার কার্ড ব্যবহার করতে, সিঙ্ক চালু করুন।</translation>
 <translation id="2365563543831475020"><ph name="CRASH_TIME" /> এ ক্যাপচার করা ক্র্যাশ প্রতিবেদন আপলোড করা হয়নি</translation>
 <translation id="2367567093518048410">স্তর</translation>
 <translation id="2378238891085281592">আপনি ব্যক্তিগত মোডে চলে গেছেন</translation>
@@ -352,11 +355,13 @@
           <ph name="LIST_ITEM" />কুকিজ এবং সাইটের ডেটা
           <ph name="LIST_ITEM" />আপনি ফর্মে যে তথ্য দিয়েছেন
         <ph name="END_LIST" /></translation>
+<translation id="3366477098757335611">কার্ড দেখুন</translation>
 <translation id="3369192424181595722">ঘড়ির ত্রুটি</translation>
 <translation id="337363190475750230">প্রদান করবে না</translation>
 <translation id="3377188786107721145">নীতি বিশ্লেষণ ত্রুটি</translation>
 <translation id="3380365263193509176">অজানা ত্রুটি</translation>
 <translation id="3380864720620200369">ক্লায়েন্ট ID:</translation>
+<translation id="3387261909427947069">পেমেন্ট পদ্ধতি</translation>
 <translation id="3391030046425686457">পৌঁছে দেওয়ার ঠিকানা</translation>
 <translation id="3395827396354264108">পিকআপের পদ্ধতি</translation>
 <translation id="3399952811970034796">ডেলিভারির ঠিকানা</translation>
@@ -418,6 +423,7 @@
 <translation id="3778403066972421603">আপনি কি এই কার্ডটি আপনার Google অ্যাকাউন্টে ও এই ডিভাইসে সেভ করতে চান?</translation>
 <translation id="3783418713923659662">Mastercard</translation>
 <translation id="3787705759683870569"><ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /> এ মেয়াদ শেষ হবে</translation>
+<translation id="3807873520724684969">ক্ষতিকর কন্টেন্ট ব্লক করা হয়েছে।</translation>
 <translation id="382518646247711829">যদি আপনি একটি প্রক্সি সার্ভার ব্যবহার করেন...</translation>
 <translation id="3828924085048779000">ফাঁকা পাসফ্রেজের অনুমতি নেই৷</translation>
 <translation id="385051799172605136">ফিরুন</translation>
@@ -453,6 +459,7 @@
 <translation id="4110652170750985508">আপনার পেমেন্টের রিভিউ</translation>
 <translation id="4116663294526079822">এই সাইটে সর্বদা অনুমতি দিন</translation>
 <translation id="4117700440116928470">নীতির সুযোগটি সমর্থিত নয়৷</translation>
+<translation id="4119109454650683048">অনুগ্রহ করে নিচের তথ্যটি দেখুন এবং প্রয়োজন হলে সমস্যাগুলি ঠিক করুন</translation>
 <translation id="4129401438321186435">{COUNT,plural, =1{আরও ১টি}one{অন্যান্য #টি}other{অন্যান্য #টি}}</translation>
 <translation id="4130226655945681476">নেটওয়ার্কের তার, মডেম, এবং রাউটার পরীক্ষা করুন</translation>
 <translation id="413544239732274901">আরও জানুন</translation>
@@ -558,6 +565,7 @@
 <translation id="4854362297993841467">এই পদ্ধতিতে ডেলিভারি করা যাবে না। অন্য পদ্ধতি ব্যবহার করুন।</translation>
 <translation id="4858792381671956233">এই সাইটটি দেখার জন্য উপযুক্ত কিনা তা আপনি আপনার পিতামাতাকে জিজ্ঞাসা করেছেন</translation>
 <translation id="4876305945144899064">কোনও ব্যবহারকারীর নাম নেই</translation>
+<translation id="4879491255372875719">অটোমেটিক (ডিফল্ট)</translation>
 <translation id="4880827082731008257">সার্চের ইতিহাস</translation>
 <translation id="4881695831933465202">খুলুন</translation>
 <translation id="4895877746940133817"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /></translation>
@@ -572,6 +580,7 @@
 <translation id="495170559598752135">ক্রিয়াসমূহ</translation>
 <translation id="4958444002117714549">তালিকা প্রসারিত করুন</translation>
 <translation id="4974590756084640048">সতর্কবার্তাগুলি পুনঃসক্ষম করুন</translation>
+<translation id="4988217478422488391">অনলাইনে পেমেন্ট পদ্ধতিকে দ্রুত করে</translation>
 <translation id="4989809363548539747">এই প্লাগ ইন সমর্থিত নয়</translation>
 <translation id="5002932099480077015">সক্রিয় করা হলে, ফর্ম পূরনের কাজ দ্রুত করতে Chrome এই ডিভাইসে আপনার কার্ডের একটি প্রতিলিপি সংরক্ষণ করবে।</translation>
 <translation id="5018422839182700155">এই পৃষ্ঠাটি খোলা যাচ্ছে না</translation>
@@ -623,6 +632,7 @@
     <ph name="END_LIST" /></translation>
 <translation id="5285570108065881030">সেভ করা সমস্ত পাসওয়ার্ড দেখান</translation>
 <translation id="5287240709317226393">কুকিজ দেখান</translation>
+<translation id="5288108484102287882">নীতির মূল্য যাচাইকরণ থেকে সতর্কতা পাওয়া গেছে</translation>
 <translation id="5299298092464848405">নীতি বিশ্লেষণ করার সময় ত্রুটি</translation>
 <translation id="5308380583665731573">সংযুক্ত করুন</translation>
 <translation id="5308689395849655368">ক্র্যাশ প্রতিবেদন অক্ষম আছে৷</translation>
@@ -635,6 +645,7 @@
 <translation id="536296301121032821">নীতি সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে</translation>
 <translation id="5371425731340848620">কার্ড আপডেট করুন</translation>
 <translation id="5377026284221673050">"আপনার ঘড়ি লেটে চলছে" অথবা "আপনার ঘড়ি ফাস্ট আছে" অথবা "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5384855140246857529">সমস্ত ডিভাইসে আপনার কার্ড ব্যবহার করতে, সিঙ্ক চালু করুন।</translation>
 <translation id="5386426401304769735">এই সাইটের শংসাপত্র শৃঙ্খলে SHA-1 ব্যবহার করে স্বাক্ষর করা একটি শংসাপত্র রয়েছে।</translation>
 <translation id="5387961145478138773">আপনার পছন্দের Google অ্যাপগুলিতে দ্রুত অ্যাক্সেস পান</translation>
 <translation id="540969355065856584">এই সার্ভার প্রমাণ করতে পারেনি যে এটি <ph name="DOMAIN" />; এর নিরাপত্তা শংসাপত্র এই সময়ে বৈধ নয়। কোনো ভুল কনফিগারেশনের কারণে অথবা কোনো আক্রমণকারী আপনার সংযোগ মাঝপথে আটকে দিচ্ছে বলে এমনটা হতে পারে।</translation>
@@ -649,6 +660,7 @@
 <translation id="5470861586879999274">&amp;সম্পাদনাকে আবার করুন</translation>
 <translation id="5481076368049295676">এই কন্টেন্ট আপনার ডিভাইসে এমন বিপজ্জনক সফ্টওয়্যার ইনস্টল করার চেষ্টা করতে পারে যা আপনার তথ্য চুরি করে বা মুছে দেয়। <ph name="BEGIN_LINK" />তবুও এটি দেখতে চাই<ph name="END_LINK" /></translation>
 <translation id="54817484435770891">বৈধ ঠিকানা যোগ করুন</translation>
+<translation id="5490432419156082418">ঠিকানা এবং আরও অনেককিছু</translation>
 <translation id="5492298309214877701">কোম্পানী, সংস্থা বা স্কুল ইন্ট্রানেটে এই সাইটটির একটি বাহ্যিক ওয়েবসাইটের মতো একই URL আছে।
     <ph name="LINE_BREAK" />
     আপনার সিস্টেম প্রশাসকের সাথে যোগাযোগের চেষ্টা করুন।</translation>
@@ -710,7 +722,9 @@
 <translation id="5893752035575986141">ক্রেডিট কার্ড গ্রহণ করা হয়।</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (সিঙ্ক হয়েছে)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{১টি ব্যবহৃত হচ্ছে}one{#টি ব্যবহৃত হচ্ছে}other{#টি ব্যবহৃত হচ্ছে}}</translation>
+<translation id="5922853866070715753">প্রায় শেষ</translation>
 <translation id="5939518447894949180">রিসেট করুন</translation>
+<translation id="5951495562196540101">ক্রেতা অ্যাকাউন্টের মাধ্যমে এনরোল করা যাচ্ছে না (প্যাকেজ লাইসেন্স পাওয়া যাবে)৷</translation>
 <translation id="5967592137238574583">পরিচিতির তথ্য সম্পাদনা করুন</translation>
 <translation id="5967867314010545767">ইতিহাস থেকে সরান</translation>
 <translation id="5975083100439434680">জুম কমান</translation>
@@ -730,6 +744,7 @@
 <translation id="6051221802930200923">ওয়েবসাইটটি পিন করা শংসাপত্র ব্যবহার করার কারণে আপনি এখন <ph name="SITE" /> এ যেতে পারবেন না। নেটওয়ার্ক ত্রুটি এবং আক্রমণ সাধারণত সাময়িকভাবে হয়, তাই এই পৃষ্ঠাটি সম্ভবত পরে কাজ করবে।</translation>
 <translation id="6059925163896151826">USB ডিভাইসগুলি</translation>
 <translation id="6071091556643036997">নীতির এই ধরনটি ব্যবহার করা যাবে না।</translation>
+<translation id="6078024795140153212">{NUM_CARDS,plural, =1{সব ডিভাইস জুড়ে দ্রুত চেক-আউটের জন্য এই কার্ডটি আপনার Google অ্যাকাউন্টে সেভ করা হবে।}one{সব ডিভাইস জুড়ে দ্রুত চেক-আউটের জন্য এই কার্ডটি আপনার Google অ্যাকাউন্টে সেভ করা হবে।}other{সব ডিভাইস জুড়ে দ্রুত চেক-আউটের জন্য এই কার্ডটি আপনার Google অ্যাকাউন্টে সেভ করা হবে।}}</translation>
 <translation id="6080696365213338172">প্রশাসকের দ্বারা সরবরাহ করা শংসাপত্রের ব্যবহার করে আপনি সামগ্রী ব্যবহার করেছেন৷ <ph name="DOMAIN" /> কে আপনি যে ডেটা সরবরাহ করেন তা আপনার প্রশাসক বাধা দিতে পারে৷</translation>
 <translation id="610911394827799129"><ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> এ আপনার Google অ্যাকাউন্টের অন্যান্য ধরনের ব্রাউজিংয়ের ইতিহাস থাকতে পারে</translation>
 <translation id="6144381551823904650">{COUNT,plural, =0{কিছুই নয়}=1{১টি পাসওয়ার্ড (সিঙ্ক করা হয়েছে)}one{#টি পাসওয়ার্ড (সিঙ্ক করা হয়েছে)}other{#টি পাসওয়ার্ড (সিঙ্ক করা হয়েছে)}}</translation>
@@ -831,6 +846,7 @@
 <translation id="6965978654500191972">ডিভাইস</translation>
 <translation id="6970216967273061347">জেলা</translation>
 <translation id="6973656660372572881">স্থির প্রক্সি সার্ভার এবং .pac স্ক্রিপ্ট URL-এর উভয়ই নির্দিষ্ট আছে৷</translation>
+<translation id="6979440798594660689">মিউট (ডিফল্ট)</translation>
 <translation id="6984479912851154518">এক্সটার্নাল অ্যাপ্লিকেশনের মাধ্যমে পেমেন্ট করার জন্য ব্যক্তিগত মোড থেকে বেরিয়ে যাচ্ছে। চালিয়ে যেতে চান?</translation>
 <translation id="6989763994942163495">উন্নত সেটিংস দেখান ...</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
@@ -851,6 +867,7 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> এবং আরও <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />টি}one{<ph name="PAYMENT_METHOD_PREVIEW" /> এবং আরও <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />টি}other{<ph name="PAYMENT_METHOD_PREVIEW" /> এবং আরও <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />টি}}</translation>
 <translation id="717330890047184534">Gaia আইডি:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> এবং আরও <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />টি}one{<ph name="SHIPPING_OPTION_PREVIEW" /> এবং আরও <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />টি}other{<ph name="SHIPPING_OPTION_PREVIEW" /> এবং আরও <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />টি}}</translation>
+<translation id="7179323680825933600">পেমেন্টের পদ্ধতিগুলি পূরণ করে সেভ করুন</translation>
 <translation id="7180611975245234373">রিফ্রেশ করুন</translation>
 <translation id="7182878459783632708">কোন নীতি সেট করা নেই</translation>
 <translation id="7186367841673660872">এই পৃষ্ঠাটি<ph name="ORIGINAL_LANGUAGE" />থেকে<ph name="LANGUAGE_LANGUAGE" />তে অনুবাদ করা হয়েছে</translation>
@@ -862,6 +879,9 @@
 <translation id="7220786058474068424">প্রক্রিয়ায় রয়েছে</translation>
 <translation id="724691107663265825">এই সাইটটিতে ম্যালওয়্যার আছে</translation>
 <translation id="724975217298816891">আপনার কার্ডের বিবরণ আপডেট করার জন্য মেয়াদ শেষের তারিখ এবং <ph name="CREDIT_CARD" /> এর CVC  লিখুন। আপনি নিশ্চিত করলে, আপনার কার্ডের বিবরণ এই সাইটের সাথে শেয়ার করা হবে।</translation>
+<translation id="7251437084390964440">নেটওয়ার্ক কনফিগারেশন ONC মানদণ্ড মেনে চলছে না। কনফিগারেশনের কিছু অংশ ইমপোর্ট করা নাও হতে পারে৷
+অতিরিক্ত বিবরণ:
+<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="7271803869921933038">এই প্রিপেড কার্ডগুলি গ্রহণ করা হয়</translation>
@@ -1041,11 +1061,15 @@
 <translation id="8398259832188219207">ক্র্যাশ প্রতিবেদন <ph name="UPLOAD_TIME" /> এ আপলোড করা হয়েছে</translation>
 <translation id="8412145213513410671">ক্র্যাশ (<ph name="CRASH_COUNT" />টি)</translation>
 <translation id="8412392972487953978">আপনাকে একই পাসফ্রেজ অবশ্যই দু'বার প্রবেশ করাতে হবে৷</translation>
+<translation id="8416694386774425977">নেটওয়ার্ক কনফিগারেশনটি সঠিক নয় এবং ইমপোর্ট করা যায়নি৷
+অতিরিক্ত বিবরণ:
+<ph name="DEBUG_INFO" /></translation>
 <translation id="8424582179843326029"><ph name="FIRST_LABEL" /> <ph name="SECOND_LABEL" /> <ph name="THIRD_LABEL" /></translation>
 <translation id="8428213095426709021">সেটিংস</translation>
 <translation id="8433057134996913067">এটি বেশিরভাগ ওয়েবসাইট থেকে আপনাকে প্রস্থান করুন করবে।</translation>
 <translation id="8437238597147034694">&amp;সরানোকে পূর্বাবস্থায় ফেরান</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{১টি ক্রেডিট কার্ড}one{#টি ক্রেডিট কার্ড}other{#টি ক্রেডিট কার্ড}}</translation>
+<translation id="8473863474539038330">ঠিকানা ও আরও অনেককিছু</translation>
 <translation id="8483780878231876732">আপনার Google অ্যাকাউন্ট থেকে কার্ড ব্যবহার করার জন্য Chrome এ সাইন ইন করুন</translation>
 <translation id="8488350697529856933">এতে প্রয়োগ হয়</translation>
 <translation id="8498891568109133222"><ph name="HOST_NAME" /> সাড়া দিতে খুবে বেশি সময় নিয়েছে।</translation>
@@ -1073,13 +1097,16 @@
 <translation id="8725066075913043281">আবার চেষ্টা করুন</translation>
 <translation id="8728672262656704056">আপনি গুপ্ত মোডে চলে গেছেন</translation>
 <translation id="8730621377337864115">হয়ে গেছে</translation>
+<translation id="8733831205558190772">আপনার সমস্ত কার্ড এক জায়গায়</translation>
 <translation id="8738058698779197622">নিরাপদ নেটওয়ার্ক সংযোগ স্থাপন করতে আপনার ঘড়িকে সঠিকভাবে সেট করতে হবে৷ নিরাপদ সংযোগ স্থাপন করার জন্য নিজেদের শনাক্ত করার জন্য ওয়েবসাইটগুলি যে শংসাপত্রগুলি ব্যবহার করে, সেগুলি শুধুমাত্র নির্দিষ্ট সময়ের জন্য বৈধ থাকে৷ যেহেতু আপনার ডিভাইসের ঘড়িটি ভুল, সেই জন্য Chromium সঠিকভাবে শংসাপত্রগুলি পরীক্ষা করতে পারে না৷</translation>
 <translation id="8740359287975076522"><ph name="HOST_NAME" /> এর &lt;abbr id="dnsDefinition"&gt;DNS ঠিকানা&lt;/abbr&gt; পাওয়া যায়নি। সমস্যা নির্ণয় করা হচ্ছে।</translation>
 <translation id="874846938927089722">এই ক্রেডিট ও প্রিপেড কার্ডগুলি গ্রহণ করা হয়</translation>
 <translation id="8759274551635299824">এই কার্ডটির মেয়াদ শেষ হয়েছে</translation>
 <translation id="8761567432415473239">Google নিরাপদ ব্রাউজিং সম্প্রতি <ph name="SITE" /> এ <ph name="BEGIN_LINK" />ক্ষতিকারক প্রোগ্রামগুলি খুঁজে পেয়েছে<ph name="END_LINK" />৷</translation>
 <translation id="8763927697961133303">USB ডিভাইস</translation>
+<translation id="8768895707659403558">আপনার সমস্ত ডিভাইসে কার্ড ব্যবহার করতে, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="8790007591277257123">&amp;মুছে ফেলাকে আবার করুন</translation>
+<translation id="8790803786526555470">{NUM_CARDS,plural, =1{এই কার্ডটি আপনার Google অ্যাকাউন্টে যোগ করা হয়েছে। আপনি এখন এটি যেকোনও সাইন-ইন থাকা ডিভাইস থেকে ব্যবহার করতে পারেন।}one{এই কার্ড আপনার Google অ্যাকাউন্টে যোগ করা হয়েছে। আপনি এখন এটি যেকোনও সাইন-ইন থাকা ডিভাইস থেকে ব্যবহার করতে পারেন।}other{এই কার্ডগুলি আপনার Google অ্যাকাউন্টে যোগ করা হয়েছে। আপনি এখন এটি যেকোনও সাইন-ইন থাকা ডিভাইস থেকে ব্যবহার করতে পারেন।}}</translation>
 <translation id="8792621596287649091">আপনি নিজের <ph name="ORG_NAME" /> অ্যাকাউন্টের অ্যাক্সেস হারাতে পারেন অথবা আপনার পরিচয় চুরি হয়ে যেতে পারে। Chromium এখনই আপনার পাসওয়ার্ড পরিবর্তন করার আর্জি জানাচ্ছে।</translation>
 <translation id="8800988563907321413">আপনার জন্য আশেপাশের প্রস্তাবনাগুলি এখানে দেখা যাবে</translation>
 <translation id="8820817407110198400">বুকমার্কস</translation>
@@ -1102,6 +1129,7 @@
 <translation id="8952525071319348207">আপনার কার্ডের বিবরণ আপডেট করতে <ph name="CREDIT_CARD" /> এর জন্য মেয়াদ শেষের তারিখ এবং সিভিসি লিখুন। আপনি নিশ্চিত করার পর আপনার Google অর্থ প্রদান অ্যাকাউন্ট থেকে কার্ডের বিবরণ এই সাইটে শেয়ার করা হবে।</translation>
 <translation id="8957210676456822347">ক্যাপটিভ পোর্টাল অনুমোদন</translation>
 <translation id="8971063699422889582">সার্ভারের শংসাপত্রের মেয়াদ ফুরিয়েছে৷</translation>
+<translation id="8975012916872825179">ফোন নম্বর, ইমেল আইডি এবং শিপিং ঠিকানার মতন তথ্য এতে আছে</translation>
 <translation id="8978053250194585037">Google Safe Browsing সম্প্রতি <ph name="SITE" /> এ <ph name="BEGIN_LINK" />ফিশিং শনাক্ত করেছে<ph name="END_LINK" />। ফিশিং সাইটগুলি আপনাকে প্রতারিত করার জন্য অন্যান্য সাইট যেমন হয় সেইরকম ভান করে।</translation>
 <translation id="8983003182662520383">Google Pay ব্যবহার করে এমন পেমেন্টের পদ্ধতি এবং ঠিকানা</translation>
 <translation id="8987927404178983737">মাস</translation>
@@ -1150,6 +1178,7 @@
 <translation id="935608979562296692">ফর্ম সাফ করুন</translation>
 <translation id="939736085109172342">নতুন ফোল্ডার</translation>
 <translation id="951104842009476243">এই ডেবিট ও প্রিপেড কার্ডগুলি গ্রহণ করা হয়</translation>
+<translation id="962484866189421427">এই কন্টেন্টটি প্রতারণামূলক অ্যাপ ইনস্টল করে দিতে পারে যেগুলি অন্যান্য আপের থেকে আলাদা করা যায় না অথবা যেগুলি এমন ডেটা সংগ্রহ করে যা দিয়ে আপনার উপরে নজর রাখা যাবে। <ph name="BEGIN_LINK" />তবুও দেখান<ph name="END_LINK" /></translation>
 <translation id="969892804517981540">অফিসিয়াল বিল্ড</translation>
 <translation id="973773823069644502">ডেলিভারি ঠিকানা যোগ করুন</translation>
 <translation id="975560348586398090">{COUNT,plural, =0{কিছুই নয়}=1{১টি আইটেম}one{#টি আইটেম}other{#টি আইটেম}}</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 32ac820c..734088d 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -724,7 +724,7 @@
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 σε χρήση}other{# σε χρήση}}</translation>
 <translation id="5922853866070715753">Σχεδόν ολοκληρώθηκε</translation>
 <translation id="5939518447894949180">Επαναφορά</translation>
-<translation id="5951495562196540101">Δεν είναι δυνατή η εγγραφή με λογαριασμό καταναλωτή (διατίθεται συμπιεσμένη άδεια).</translation>
+<translation id="5951495562196540101">Δεν είναι δυνατή η εγγραφή με λογαριασμό καταναλωτή (διατίθεται σχετική άδεια).</translation>
 <translation id="5967592137238574583">Επεξεργασία στοιχείων επικοινωνίας</translation>
 <translation id="5967867314010545767">Κατάργηση από το ιστορικό</translation>
 <translation id="5975083100439434680">Σμίκρυνση</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 402378f..f7b4eef 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -27,6 +27,7 @@
 <translation id="1150979032973867961">This server could not prove that it is <ph name="DOMAIN" />; its security certificate is not trusted by your computer's operating system. This may be caused by a misconfiguration or an attacker intercepting your connection.</translation>
 <translation id="1151972924205500581">Password required</translation>
 <translation id="1152921474424827756">Access a <ph name="BEGIN_LINK" />cached copy<ph name="END_LINK" /> of <ph name="URL" /></translation>
+<translation id="1156303062776767266">You're viewing a local or shared file</translation>
 <translation id="1158211211994409885"><ph name="HOST_NAME" /> unexpectedly closed the connection.</translation>
 <translation id="1161325031994447685">Reconnecting to Wi-Fi</translation>
 <translation id="1165039591588034296">Error</translation>
@@ -534,6 +535,7 @@
 <translation id="4592951414987517459">Your connection to <ph name="DOMAIN" /> is encrypted using a modern cipher suite.</translation>
 <translation id="4594403342090139922">&amp;Undo Delete</translation>
 <translation id="4619615317237390068">Tabs from other devices</translation>
+<translation id="4646534391647090355">Take me there now</translation>
 <translation id="4668929960204016307">,</translation>
 <translation id="467662567472608290">This server could not prove that it is <ph name="DOMAIN" />; its security certificate contains errors. This may be caused by a misconfiguration or an attacker intercepting your connection.</translation>
 <translation id="4690462567478992370">Stop using an invalid certificate</translation>
@@ -580,6 +582,7 @@
 <translation id="4958444002117714549">Expand list</translation>
 <translation id="4974590756084640048">Re-enable warnings</translation>
 <translation id="4988217478422488391">Makes it faster to pay for things online</translation>
+<translation id="4989163558385430922">See all</translation>
 <translation id="4989809363548539747">This plug-in is not supported</translation>
 <translation id="5002932099480077015">If enabled, Chrome will store a copy of your card on this device for faster form filling.</translation>
 <translation id="5018422839182700155">Can't open this page</translation>
@@ -724,6 +727,7 @@
 <translation id="5922853866070715753">Almost finished</translation>
 <translation id="5939518447894949180">Reset</translation>
 <translation id="5951495562196540101">Can't enrol with consumer account (packaged licence available).</translation>
+<translation id="5966151627327109289">Signs you out of most sites. You may lose access to protected content from <ph name="SITE" /> and some other sites.</translation>
 <translation id="5967592137238574583">Edit Contact Info</translation>
 <translation id="5967867314010545767">Remove from history</translation>
 <translation id="5975083100439434680">Zoom out</translation>
@@ -745,6 +749,7 @@
 <translation id="6071091556643036997">The policy type is invalid.</translation>
 <translation id="6078024795140153212">{NUM_CARDS,plural, =1{This card will be saved to your Google account for faster checkout across devices.}other{These cards will be saved to your Google account for faster checkout across devices.}}</translation>
 <translation id="6080696365213338172">You have accessed content using an administrator-provided certificate. Data you provide to <ph name="DOMAIN" /> can be intercepted by your administrator.</translation>
+<translation id="6096619198407627433">Signs you out of most sites. You won't be signed out of your Google account. You may lose access to protected content from <ph name="SITE" /> and some other sites.</translation>
 <translation id="610911394827799129">Your Google Account may have other forms of browsing history at <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation>
 <translation id="6144381551823904650">{COUNT,plural, =0{None}=1{1 password (synced)}other{# passwords (synced)}}</translation>
 <translation id="6146055958333702838">Check any cables and reboot any routers, modems or other network
@@ -816,6 +821,7 @@
 <translation id="6710594484020273272">&lt;Type search term&gt;</translation>
 <translation id="6711464428925977395">There is something wrong with the proxy server or the address is incorrect.</translation>
 <translation id="674375294223700098">Unknown server certificate error.</translation>
+<translation id="6744009308914054259">While waiting for a connection, you can visit Downloads to read offline articles.</translation>
 <translation id="6753269504797312559">Policy Value</translation>
 <translation id="6757797048963528358">Your device went to sleep.</translation>
 <translation id="6778737459546443941">Your parent hasn't approved it yet</translation>
@@ -912,6 +918,7 @@
 <translation id="7416351320495623771">Manage passwords...</translation>
 <translation id="7419106976560586862">Profile Path</translation>
 <translation id="7437289804838430631">Add contact info</translation>
+<translation id="7440140511386898319">Explore while offline</translation>
 <translation id="7441627299479586546">Wrong policy subject</translation>
 <translation id="7444046173054089907">This site is blocked</translation>
 <translation id="7445762425076701745">The identity of the server to which you are connected cannot be fully validated. You are connected to a server using a name valid only within your network, and an external certificate authority has no way to validate ownership. As some certificate authorities will issue certificates for these names regardless, there is no way to ensure that you are connected to the intended website and not to an attacker.</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 21400ed..f176a1fc 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -423,6 +423,7 @@
 <translation id="3778403066972421603">¿Deseas guardar esta tarjeta en tu cuenta de Google y en este dispositivo?</translation>
 <translation id="3783418713923659662">Mastercard</translation>
 <translation id="3787705759683870569">Vencimiento: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
+<translation id="3807873520724684969">Se bloqueó el contenido dañino</translation>
 <translation id="382518646247711829">Si utilizas un servidor proxy...</translation>
 <translation id="3828924085048779000">No se permite una frase de contraseña vacía.</translation>
 <translation id="385051799172605136">Atrás</translation>
@@ -579,6 +580,7 @@
 <translation id="495170559598752135">Acciones</translation>
 <translation id="4958444002117714549">Mostrar lista</translation>
 <translation id="4974590756084640048">Volver a habilitar las advertencias</translation>
+<translation id="4988217478422488391">Permite realizar pagos de compras en línea más rápidamente</translation>
 <translation id="4989809363548539747">Este complemento no es compatible</translation>
 <translation id="5002932099480077015">Si se habilita esta opción, Chrome almacenará una copia de la tarjeta en el dispositivo para llenar más rápidamente los formularios.</translation>
 <translation id="5018422839182700155">No se puede abrir esta página</translation>
@@ -658,6 +660,7 @@
 <translation id="5470861586879999274">&amp;Rehacer Editar</translation>
 <translation id="5481076368049295676">Es posible que este contenido intente instalar software peligroso que robe o borre tu información en tu dispositivo . <ph name="BEGIN_LINK" />Mostrar de todos modos<ph name="END_LINK" /></translation>
 <translation id="54817484435770891">Agregar una dirección válida</translation>
+<translation id="5490432419156082418">Direcciones y más</translation>
 <translation id="5492298309214877701">En la intranet de la compañía, organización o escuela, este sitio tiene la misma URL que un sitio web externo
     <ph name="LINE_BREAK" />
     Intenta contactar al administrador de tu sistema.</translation>
@@ -721,6 +724,7 @@
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en uso}other{# en uso}}</translation>
 <translation id="5922853866070715753">Ya casi</translation>
 <translation id="5939518447894949180">Restablecer</translation>
+<translation id="5951495562196540101">No se puede realizar la inscripción con una cuenta personal (licencia de paquete disponible).</translation>
 <translation id="5967592137238574583">Editar la información de contacto</translation>
 <translation id="5967867314010545767">Eliminar del historial</translation>
 <translation id="5975083100439434680">Alejar</translation>
@@ -1066,6 +1070,7 @@
 <translation id="8433057134996913067">Si realizas esta acción, saldrás de la mayoría de los sitios web.</translation>
 <translation id="8437238597147034694">&amp;Deshacer Mover</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{1 tarjeta de crédito}other{# tarjetas de crédito}}</translation>
+<translation id="8473863474539038330">Direcciones y más</translation>
 <translation id="8483780878231876732">Para usar tarjetas de tu cuenta de Google, accede a tu cuenta en Chrome</translation>
 <translation id="8488350697529856933">Se aplica a</translation>
 <translation id="8498891568109133222"><ph name="HOST_NAME" /> tardó demasiado en responder.</translation>
@@ -1126,6 +1131,7 @@
 <translation id="8952525071319348207">Ingresa la fecha de vencimiento y el CVC de la tarjeta <ph name="CREDIT_CARD" /> para actualizar los datos. Después de confirmar esta acción, esos datos se compartirán con este sitio.</translation>
 <translation id="8957210676456822347">Autorización de portal cautivo</translation>
 <translation id="8971063699422889582">El certificado del servidor ha caducado.</translation>
+<translation id="8975012916872825179">Incluye información, como números de teléfono, direcciones de correo electrónico y direcciones de envío</translation>
 <translation id="8978053250194585037">Recientemente, la navegación segura de Google <ph name="BEGIN_LINK" />detectó un intento de suplantación de identidad (phishing)<ph name="END_LINK" /> en <ph name="SITE" />. Los sitios de suplantación de identidad imitan a otros sitios web para engañarte.</translation>
 <translation id="8983003182662520383">Formas de pago y direcciones con Google Pay</translation>
 <translation id="8987927404178983737">Mes</translation>
@@ -1174,6 +1180,7 @@
 <translation id="935608979562296692">BORRAR FORMULARIO</translation>
 <translation id="939736085109172342">Nueva carpeta</translation>
 <translation id="951104842009476243">Tarjetas de débito y prepago aceptadas</translation>
+<translation id="962484866189421427">Este contenido podría intentar instalar apps engañosas que se hagan pasar por otro tipo de contenido o que recopilen datos que se usen para rastrearte. <ph name="BEGIN_LINK" />Mostrar de todos modos<ph name="END_LINK" /></translation>
 <translation id="969892804517981540">Build oficial</translation>
 <translation id="973773823069644502">Agregar dirección de entrega</translation>
 <translation id="975560348586398090">{COUNT,plural, =0{Ninguno}=1{1 elemento}other{# elementos}}</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index daa7434..530401f5 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -464,7 +464,7 @@
 <translation id="413544239732274901">Más información</translation>
 <translation id="4148925816941278100">American Express</translation>
 <translation id="4151403195736952345">Utilizar valor predeterminado global (por defecto)</translation>
-<translation id="4165986682804962316">Configuración de sitios web</translation>
+<translation id="4165986682804962316">Configuración del sitio web</translation>
 <translation id="4171400957073367226">La firma de verificación no es válida</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> elemento más}other{<ph name="ITEM_COUNT" /> elementos más}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
@@ -723,7 +723,7 @@
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en uso}other{# en uso}}</translation>
 <translation id="5922853866070715753">Casi hemos acabado</translation>
 <translation id="5939518447894949180">Restablecer</translation>
-<translation id="5951495562196540101">No te puedes registrar con una cuenta de consumidor (licencia empaquetada disponible).</translation>
+<translation id="5951495562196540101">No te puedes registrar con una cuenta de consumidor (hay una licencia asociada disponible).</translation>
 <translation id="5967592137238574583">Edita la información de contacto</translation>
 <translation id="5967867314010545767">Eliminar del historial</translation>
 <translation id="5975083100439434680">Reducir</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index fadf5d3..2cf4030 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -775,7 +775,7 @@
 <translation id="6328786501058569169">यह साइट भ्रामक है</translation>
 <translation id="6337133576188860026"><ph name="SIZE" /> से कम जगह खाली करता है. जब आप अगली बार विज़िट करेंगे तो, कुछ साइटें और धीमे लोड हो सकती हैं.</translation>
 <translation id="6337534724793800597">नाम के अनुसार नीतियां फ़िल्टर करें</translation>
-<translation id="6355080345576803305">सार्वजनिक सत्र ओवरराइड</translation>
+<translation id="6355080345576803305">सार्वजनिक सत्र की वजह से हुआ बदलाव</translation>
 <translation id="6358450015545214790">इनका क्‍या अर्थ है?</translation>
 <translation id="6386120369904791316">{COUNT,plural, =1{1 अन्‍य सुझाव}one{# अन्‍य सुझाव}other{# अन्‍य सुझाव}}</translation>
 <translation id="6387754724289022810">अगली बार तेज़ी से भुगतान करने के लिए, अपने कार्ड और बिलिंग पते को अपने Google खाते में और इस डिवाइस में सेव करें.</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index 6920d17..5863fb2 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -21,14 +21,14 @@
 <translation id="1110994991967754504"><ph name="PERMISSION_NAME" /> ची परवानगी निवडा</translation>
 <translation id="1111153019813902504">अलीकडील बुकमार्क</translation>
 <translation id="1113869188872983271">&amp;पुनर्क्रमित करा पूर्ववत करा</translation>
-<translation id="1125573121925420732">वेबसाइट त्यांची सुरक्षितता अपडेट करत असताना चेतावण्या सामान्य असू शकतात. यात लवकरच सुधारणा व्हावी.</translation>
+<translation id="1125573121925420732">वेबसाइट त्यांची सीक्युरिटी अपडेट करत असताना चेतावण्या सामान्य असू शकतात. यात लवकरच सुधारणा व्हावी.</translation>
 <translation id="1126551341858583091">स्थानिक संचयावरील आकार <ph name="CRASH_SIZE" /> आहे.</translation>
 <translation id="112840717907525620">धोरण कॅश   ठीक</translation>
-<translation id="1150979032973867961">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र आपल्या संगणकाच्या ऑपरेटिंग प्रणालीद्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</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="1158211211994409885"><ph name="HOST_NAME" /> नी कनेक्शन अनपेक्षितरित्या बंद केले.</translation>
-<translation id="1161325031994447685">वाय-फाय शी पुन्हा कनेक्ट करीत आहे</translation>
+<translation id="1161325031994447685">वाय-फाय शी पुन्हा कनेक्ट करत आहे</translation>
 <translation id="1165039591588034296">एरर</translation>
 <translation id="1173894706177603556">नाव बदला</translation>
 <translation id="1175364870820465910">&amp;मुद्रण...</translation>
@@ -38,7 +38,7 @@
 <translation id="1201895884277373915">या साइटकडून अधिक</translation>
 <translation id="1206967143813997005">खराब प्रारंभिक स्वाक्षरी</translation>
 <translation id="1209206284964581585">आतासाठी लपवा</translation>
-<translation id="121201262018556460">आपण <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केलात, परंतु सर्व्हरने एक कमकुवत की असलेले प्रमाणपत्र सादर केले. आक्रमणकर्त्याने गोपनीय  की तोडलेली असू शकते आणि सर्व्हर हे आपल्याला अपेक्षित असणारे सर्व्हर नसू शकते (आपण कदाचित आक्रमणकर्त्याशी संवाद प्रस्थापित करत असाल).</translation>
+<translation id="121201262018556460">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केलात, परंतु सर्व्हरने एक कमकुवत की असलेले सर्टिफिकेट सादर केले. हल्लेखोराने गोपनीय की तोडलेली असू शकते आणि सर्व्हर हे तुम्हाला अपेक्षित असणारे सर्व्हर नसू शकते (तुम्ही कदाचित हल्लेखोराशी संवाद प्रस्थापित करत असाल).</translation>
 <translation id="1219129156119358924">सिस्टम सुरक्षा</translation>
 <translation id="1227224963052638717">अज्ञात धोरण.</translation>
 <translation id="1227633850867390598">मूल्य लपवा</translation>
@@ -110,14 +110,14 @@
 <translation id="1640244768702815859"><ph name="BEGIN_LINK" />साइटच्या मुख्यपृष्ठावर भेट देऊन<ph name="END_LINK" /> पहा.</translation>
 <translation id="1644574205037202324">इतिहास</translation>
 <translation id="1645368109819982629">असमर्थित प्रोटोकॉल</translation>
-<translation id="1655462015569774233">{1,plural, =1{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा प्रमाणपत्र काल कालबाह्य झाले. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते. आपले कॉंप्युटर सध्या <ph name="CURRENT_DATE" /> वर सेट आहे. ते योग्य दिसते आहे? नसल्यास, आपण आपल्या सिस्टीमचे घड्याळ दुरूस्त करावे आणि त्यानंतर हे पृष्ठ रिफ्रेश करा.}one{हा सर्व्हर हे <ph name="DOMAIN" />असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा प्रमाणपत्र # दिवसांपूर्वी कालबाह्य झाले. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते. आपले कॉंप्युटर सध्या <ph name="CURRENT_DATE" /> वर सेट आहे. ते योग्य दिसते आहे? नसल्यास, आपण आपल्या सिस्टीमचे घड्याळ दुरूस्त करावे आणि त्यानंतर हे पृष्ठ रिफ्रेश करा.}other{हा सर्व्हर हे <ph name="DOMAIN" />असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा प्रमाणपत्र # दिवसांपूर्वी कालबाह्य झाले. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते. आपले कॉंप्युटर सध्या <ph name="CURRENT_DATE" /> वर सेट आहे. ते योग्य दिसते आहे? नसल्यास, आपण आपल्या सिस्टीमचे घड्याळ दुरूस्त करावे आणि त्यानंतर हे पृष्ठ रिफ्रेश करा.}}</translation>
+<translation id="1655462015569774233">{1,plural, =1{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा सर्टिफिकेट काल एक्स्पायर झाले. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते. तुमचे कॉंप्युटर सध्या <ph name="CURRENT_DATE" /> वर सेट आहे. ते योग्य दिसते आहे? नसल्यास, तुम्ही तुमच्या सिस्टमचे घड्याळ दुरूस्त करावे आणि त्यानंतर हे पेज रीफ्रेश करा.}one{हा सर्व्हर हे <ph name="DOMAIN" />असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा सर्टिफिकेट # दिवसांपूर्वी एक्स्पायर झाले. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते. तुमचे कॉंप्युटर सध्या <ph name="CURRENT_DATE" /> वर सेट आहे. ते योग्य दिसते आहे? नसल्यास, तुम्ही तुमच्या सिस्टमचे घड्याळ दुरूस्त करावे आणि त्यानंतर हे पेज रीफ्रेश करा.}other{हा सर्व्हर हे <ph name="DOMAIN" />असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा सर्टिफिकेट # दिवसांपूर्वी एक्स्पायर झाले. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते. तुमचे कॉंप्युटर सध्या <ph name="CURRENT_DATE" /> वर सेट आहे. ते योग्य दिसते आहे? नसल्यास, तुम्ही तुमच्या सिस्टमचे घड्याळ दुरूस्त करावे आणि त्यानंतर हे पेज रीफ्रेश करा.}}</translation>
 <translation id="1656489000284462475">घेणे</translation>
 <translation id="1662550410081243962">पेमेंट पद्धती सेव्ह करा आणि भरा</translation>
 <translation id="1663943134801823270">कार्ड आणि पत्ते Chrome कडील आहेत. आपण त्यांना <ph name="BEGIN_LINK" />सेटिंग्‍ज<ph name="END_LINK" /> मधून व्यवस्थापित करू शकता.</translation>
-<translation id="1676269943528358898"><ph name="SITE" /> तुमची माहिती संरक्षित करण्यासाठी सामान्यतः कूटबद्धीकरण वापरते. Google Chrome ने यावेळी <ph name="SITE" /> शी कनेक्‍ट करण्‍याचा प्रयत्न केला तेव्‍हा, वेबसाइटने असामान्य आणि अयोग्य क्रेडेन्शियल परत पाठविले. एकतर आक्रमणकर्ता <ph name="SITE" /> असल्याची बतावणी करण्याचा प्रयत्न करतो तेव्‍हा किंवा वाय-फाय साइन इन स्क्रीनने कनेक्शनमध्ये व्यत्यय आणले तेव्‍हा हे घडू शकते. कोणत्याही डेटाची अदलाबदल करण्यापूर्वी Google Chrome ने कनेक्शन थांबविल्यामुळे तुमची माहिती अद्याप सुरक्षित आहे.</translation>
-<translation id="168841957122794586">सर्व्हर प्रमाणपत्रात एक कमकुवत क्रिप्टोग्राफिक की आहे.</translation>
+<translation id="1676269943528358898"><ph name="SITE" /> तुमची माहिती संरक्षित करण्यासाठी सामान्यतः एंक्रिप्शन वापरते. Google Chrome ने यावेळी <ph name="SITE" /> शी कनेक्‍ट करण्‍याचा प्रयत्न केला तेव्‍हा, वेबसाइटने असामान्य आणि अयोग्य क्रेडेंशियल परत पाठवले. एकतर आक्रमणकर्ता <ph name="SITE" /> असल्याची बतावणी करण्याचा प्रयत्न करतो तेव्‍हा किंवा वाय-फाय साइन इन स्क्रीनने कनेक्शनमध्ये व्यत्यय आणले तेव्‍हा हे घडू शकते. कोणत्याही डेटाची अदलाबदल करण्यापूर्वी Google Chrome ने कनेक्शन थांबविल्यामुळे तुमची माहिती अद्याप सुरक्षित आहे.</translation>
+<translation id="168841957122794586">सर्व्हर सर्टिफिकेटमध्ये एक कमकुवत क्रिप्टोग्राफिक की आहे.</translation>
 <translation id="1697532407822776718">आपण पूर्णपणे तयार आहात!</translation>
-<translation id="1706954506755087368">{1,plural, =1{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा प्रमाणपत्र उद्यापासून मानले जाईल. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.}one{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा प्रमाणपत्र पुढील # दिवसांपासून मानले जाईल. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.}other{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा प्रमाणपत्र पुढील # दिवसांपासून मानले जाईल. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.}}</translation>
+<translation id="1706954506755087368">{1,plural, =1{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा सर्टिफिकेट उद्यापासून मानले जाईल. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.}one{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा सर्टिफिकेट पुढील # दिवसांपासून मानले जाईल. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.}other{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा सर्टिफिकेट पुढील # दिवसांपासून मानले जाईल. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.}}</translation>
 <translation id="1710259589646384581">OS</translation>
 <translation id="1721312023322545264">या साइटला भेट देण्यासाठी आपल्याला <ph name="NAME" /> कडील परवानगी आवश्यक आहे</translation>
 <translation id="1721424275792716183">* फील्ड आवश्यक आहे</translation>
@@ -130,9 +130,9 @@
 <translation id="1743520634839655729">पुढील वेळेस जलद पेमेंट करण्यासाठी, तुमच्या Google खात्यावर आणि या डिव्हाइसवर तुमचे कार्ड आणि बिलिंग पत्ता सेव्ह करा.</translation>
 <translation id="17513872634828108">खुले टॅब</translation>
 <translation id="1753706481035618306">पृष्ठ क्रमांक</translation>
-<translation id="1763864636252898013">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र आपल्या डिव्हाइसच्या ऑपरेटिंग प्रणालीद्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation>
+<translation id="1763864636252898013">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट तुमच्या डिव्हाइसच्या ऑपरेटिंग प्रणालीद्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation>
 <translation id="1768211456781949159"><ph name="BEGIN_LINK" />Windows नेटवर्क निदान चालवून पहा<ph name="END_LINK" />.</translation>
-<translation id="1783075131180517613">कृपया आपले संंकालित सांकेतिक वाक्यांश अपडेट करा.</translation>
+<translation id="1783075131180517613">कृपया तुमचे सिंक सांकेतिक पासफ्रेझ अपडेट करा.</translation>
 <translation id="1787142507584202372">आपले खुले टॅब येथे दिसतात</translation>
 <translation id="1791429645902722292">Google Smart Lock</translation>
 <translation id="1803264062614276815">कार्डधारकाचे नाव</translation>
@@ -167,7 +167,7 @@
 <translation id="2032962459168915086"><ph name="BEGIN_LINK" />प्रॉक्सी आणि फायरवॉल तपासणे<ph name="END_LINK" /></translation>
 <translation id="2053553514270667976">पिनकोड</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 सूचना}one{# सूचना}other{# सूचना}}</translation>
-<translation id="2079545284768500474">पूर्ववत करा</translation>
+<translation id="2079545284768500474">पहिल्यासारखे करा</translation>
 <translation id="20817612488360358">सिस्टम प्रॉक्सी सेटिंग्ज वापरण्‍यास सेट करण्‍यात आल्या परंतु एक सुस्पष्‍ट प्रॉक्सी कॉन्फिगरेशन देखील निर्दिष्‍ट करण्‍यात आले.</translation>
 <translation id="2091887806945687916">ध्वनी</translation>
 <translation id="2094505752054353250">डोमेन जुळत नाही</translation>
@@ -215,17 +215,17 @@
 <translation id="2367567093518048410">दर्जा</translation>
 <translation id="2378238891085281592">तुम्ही खाजगी मोडमध्ये गेला आहात</translation>
 <translation id="2384307209577226199">एंटरप्राइझ डीफॉल्ट</translation>
-<translation id="2386255080630008482">सर्व्हरचे प्रमाणपत्र निरस्त केले गेले.</translation>
+<translation id="2386255080630008482">सर्व्हरचे सर्टिफिकेट रिव्होक केले गेले.</translation>
 <translation id="2392959068659972793">कोणतेही मूल्य सेट केल्याशिवाय धोरणे दर्शवा</translation>
 <translation id="239429038616798445">ही शिपिंग पद्धत उपलब्ध नाही. वेगळी पद्धत वापरून पहा.</translation>
 <translation id="2396249848217231973">&amp;हटवा पूर्ववत करा</translation>
-<translation id="2413528052993050574">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र कदाचित रद्द केले असू शकते. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation>
+<translation id="2413528052993050574">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट कदाचित रद्द केले असू शकते. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation>
 <translation id="2463739503403862330">भरून टाका</translation>
 <translation id="2465655957518002998">वितरणाची पद्धत निवडा</translation>
 <translation id="2467694685043708798"><ph name="BEGIN_LINK" />नेटवर्क निदान चालविणे<ph name="END_LINK" /></translation>
 <translation id="2479410451996844060">अवैध शोध URL.</translation>
 <translation id="2482878487686419369">सूचना</translation>
-<translation id="2491120439723279231">सर्व्हरच्या प्रमाणपत्रात एरर आहेत.</translation>
+<translation id="2491120439723279231">सर्व्हरच्या सर्टिफिकेटमध्ये एरर आहेत.</translation>
 <translation id="2495083838625180221">JSON विश्लेषक</translation>
 <translation id="2495093607237746763">चेक केल्यास, अधिक जलद फॉर्म भरण्यासाठी या डिव्हाइसवर Chromium आपल्या कार्डची एक प्रत संचयित करेल.</translation>
 <translation id="2498091847651709837">नवीन कार्ड स्कॅन करा</translation>
@@ -261,7 +261,7 @@
 <translation id="2712173769900027643">परवानगी मागा</translation>
 <translation id="2720342946869265578">जवळपास</translation>
 <translation id="2721148159707890343">विनंती यशस्वी</translation>
-<translation id="2728127805433021124">सर्व्हरचे प्रमाणपत्र कमकुवत स्वाक्षरी अल्गोरिदम वापरून स्वाक्षरित केले आहे.</translation>
+<translation id="2728127805433021124">एक कमकुवत स्वाक्षरी अल्गोरिदम वापरून सर्व्हरचे सर्टिफिकेट साइन केले आहे.</translation>
 <translation id="2730326759066348565"><ph name="BEGIN_LINK" />कनेक्टिव्हिटी निदान चालविणे<ph name="END_LINK" /></translation>
 <translation id="2738330467931008676">पिकअप पत्ता निवडा</translation>
 <translation id="2740531572673183784">ठीक आहे</translation>
@@ -284,12 +284,12 @@
 <translation id="2903493209154104877">पत्ते</translation>
 <translation id="2909946352844186028">एक नेटवर्क बदल आढळला.</translation>
 <translation id="2916038427272391327">अन्य प्रोग्राम बंद करा</translation>
-<translation id="2922350208395188000">सर्व्हरचे प्रमाणपत्र तपासणे शक्य नाही.</translation>
+<translation id="2922350208395188000">सर्व्हरचे सर्टिफिकेट तपासणे शक्य नाही.</translation>
 <translation id="2925673989565098301">वितरण पद्धत</translation>
 <translation id="2928905813689894207">बिलिंग पत्ता</translation>
 <translation id="2929525460561903222">{SHIPPING_ADDRESS,plural, =0{<ph name="SHIPPING_ADDRESS_PREVIEW" />}=1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> आणि <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> आणखी}one{<ph name="SHIPPING_ADDRESS_PREVIEW" />आणि <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> आणखी}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> आणि <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> आणखी}}</translation>
-<translation id="2941952326391522266">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र <ph name="DOMAIN2" /> वरील आहे. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation>
-<translation id="2948083400971632585">आपण सेटिंग्ज पृष्ठावरून एका कनेक्शनसाठी कॉन्फिगर केलेले कोणतेही प्रॉक्सी अक्षम करू शकता.</translation>
+<translation id="2941952326391522266">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट <ph name="DOMAIN2" /> वरील आहे. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation>
+<translation id="2948083400971632585">तुम्हे सेटिंग्ज पेजवरून एका कनेक्शनसाठी कॉन्फिगर केलेले कोणत्याही प्रॉक्सी अक्षम करू शकता.</translation>
 <translation id="2955913368246107853">शोध बार बंद करा</translation>
 <translation id="2969319727213777354">एक सुरक्षित कनेक्‍शन स्‍थापित करण्‍यापूर्वी, आपले घड्‍याळ योग्यरित्या सेट केले असणे आवश्यक आहे. वेबसाइट त्यांना स्‍वत:ला ओळखण्‍यासाठी वापरतात ती प्रमाणपत्रे केवळ निर्दिष्‍ट केलेल्‍या कालावधीसाठी वैध असल्याने हे असू शकते. आपल्‍या डिव्‍हाइसचे घड्‍याळ चुकीचे असल्‍यामुळे, Google Chrome ही प्रमाणपत्रे सत्यापित करू शकत नाही.</translation>
 <translation id="2972581237482394796">&amp;पुन्हा करा</translation>
@@ -306,7 +306,7 @@
 <translation id="301521992641321250">आपोआप ब्लॉक केलेले</translation>
 <translation id="3024663005179499861">चुकीचा धोरण प्रकार</translation>
 <translation id="3037605927509011580">च्चक!</translation>
-<translation id="3041612393474885105">प्रमाणपत्र माहिती...</translation>
+<translation id="3041612393474885105">सर्टिफिकेट माहिती</translation>
 <translation id="3064966200440839136">बाह्य अॅप्लिकेशन द्वारे देय देण्यासाठी गुप्त मोड सोडत आहे. सुरु ठेवायचे?</translation>
 <translation id="3083099961703215236">{COUNT,plural, =0{काहीही नाही}=1{1 पासवर्ड}one{# पासवर्ड}other{# पासवर्ड}}</translation>
 <translation id="3096100844101284527">पिकअप पत्ता जोडा</translation>
@@ -318,7 +318,7 @@
 <translation id="3150653042067488994">तात्पुरती सर्व्हर एरर</translation>
 <translation id="3154506275960390542">या पृष्ठावर एक फॉर्म आहे जो कदाचित सुरक्षितपणे सबमिट होणार नाही. आपण पाठविलेला डेटा प्रवासादरम्यान इतर पाहू शकतात किंवा सर्व्हर प्राप्त करत असलेल्या आक्रमणकर्त्याद्वारे सुधारित केले जाऊ शकते.</translation>
 <translation id="3157931365184549694">पुनर्संचयित करा</translation>
-<translation id="3162559335345991374">आपण वापरत असलेल्या वाय-फाय च्या लॉग इन पृष्ठास आपल्याला भेट देण्याची आवश्यकता असू शकते.</translation>
+<translation id="3162559335345991374">तुम्ही वापरत असलेल्या वाय-फाय च्या लॉग इन पेजला तुम्हाला भेट देण्याची आवश्यकता असू शकते.</translation>
 <translation id="3167968892399408617">गुप्त मोडमध्‍ये आपण पाहता ती पृष्‍ठे आपण आपले सर्व गुप्त टॅब बंद केल्‍यानंतर आपला ब्राउझर इतिहास, कुकी स्टोअर किंवा शोध इतिहासामध्‍ये असणार नाहीत. आपण डाउनलोड करता त्या कोणत्याही फायली किंवा आपण केलेले बुकमार्क ठेवले जातील.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3174168572213147020">बेट</translation>
@@ -331,7 +331,7 @@
 <translation id="3207960819495026254">बुकमार्क केलेली</translation>
 <translation id="3209375525920864198">कृपया एक वैध सेशन नाव टाका.</translation>
 <translation id="3211223744486044430">पुढील वेळी जलद पेमेंट देण्यासाठी, तुमच्या Google खात्यावर आणि या डीव्हाइसवर हे कार्ड सेव्ह करा.</translation>
-<translation id="3225919329040284222">सर्व्हरने असे प्रमाणपत्र सादर केले आहे जे अंगभूत अपेक्षांशी जुळत नाही. या अपेक्षा आपल्याला संरक्षित करण्यासाठी विशिष्ट, उच्च-सुरक्षिततेच्या वेबसाइटसाठी समाविष्ट केल्या आहेत.</translation>
+<translation id="3225919329040284222">सर्व्हरने असे सर्टिफिकेट सादर केले आहे जे अंगभूत अपेक्षांशी जुळत नाही. या अपेक्षा तुम्हाला संरक्षित करण्यासाठी विशिष्ट, उच्च सुरक्षिततेच्या वेबसाइटसाठी समाविष्ट केल्या आहेत.</translation>
 <translation id="3226128629678568754">पृष्ठ लोड करण्यास आवश्यक असलेला डेटा पुन्हा सबमिट करण्यासाठी रीलोड बटण दाबा.</translation>
 <translation id="3227137524299004712">मायक्रोफोन</translation>
 <translation id="3228969707346345236">व्यवहार अयशस्वी झाला कारण पृष्ठ पूर्वीपासून <ph name="LANGUAGE" /> मध्ये आहे.</translation>
@@ -378,7 +378,7 @@
 <translation id="3479539252931486093">हे अनपेक्षित होते? <ph name="BEGIN_LINK" />आम्हाला कळवा<ph name="END_LINK" /></translation>
 <translation id="3479552764303398839">सध्या नाही</translation>
 <translation id="3498215018399854026">याक्षणी आम्ही आपल्या पालकांपर्यंत पोहोचू शकलो नाही. कृपया पुन्हा प्रयत्न करा.</translation>
-<translation id="3528171143076753409">सर्व्हरचे प्रमाणपत्र विश्वासनीय नाही.</translation>
+<translation id="3528171143076753409">सर्व्हरचे सर्टिफिकेट विश्वसनीय नाही.</translation>
 <translation id="3530944546672790857">{COUNT,plural, =0{ सिंक केलेल्या डिव्हाइसवर किमान 1 आयटम}=1{1 आयटम (सिंक केलेल्या डिव्‍हाइसवर आणखी काही)}one{# आयटम (सिंक केलेल्या डिव्‍हाइसवर आणखी काही)}other{# आयटम (सिंक केलेल्या डिव्‍हाइसवर आणि आणखी काही)}}</translation>
 <translation id="3539171420378717834">या डिव्हाइसवर या कार्डची एक प्रत ठेवा</translation>
 <translation id="3549644494707163724">आपल्या स्वतःच्या वाक्यांशासह सर्व संंकालित केलेला डेटा कूटबद्ध करा</translation>
@@ -403,12 +403,12 @@
 <translation id="3678029195006412963">विनंती स्वाक्षरीकृत करणे शक्य झाले नाही</translation>
 <translation id="3678529606614285348">पेज एका नवीन गुप्त विंडोमध्ये उघडा (Ctrl-Shift-N)</translation>
 <translation id="3679803492151881375">क्रॅश अहवाल <ph name="CRASH_TIME" /> वाजता कॅप्चर केला, <ph name="UPLOAD_TIME" /> वाजता अपलोड केला</translation>
-<translation id="3681007416295224113">प्रमाणपत्र माहिती...</translation>
+<translation id="3681007416295224113">सर्टिफिकेट माहिती</translation>
 <translation id="3704162925118123524">आपण वापरत असलेल्या नेटवर्कला आपण त्याच्या लॉग इन पृष्ठास भेट देण्याची आवश्यकता असू शकते.</translation>
 <translation id="3704609568417268905"><ph name="TIME" /> <ph name="BOOKMARKED" /> <ph name="TITLE" /> <ph name="DOMAIN" /></translation>
 <translation id="370665806235115550">लोड करीत आहे...</translation>
 <translation id="3712624925041724820">परवाने संपुष्टात</translation>
-<translation id="3714780639079136834">मोबाइल डेटा किंवा वाय-फाय चालू करणे</translation>
+<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>
@@ -435,7 +435,7 @@
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
 <translation id="3945915738023014686">क्रॅश तक्रार आयडी अपलोड केला<ph name="CRASH_ID" /> (स्थानिक क्रॅश आयडी: <ph name="CRASH_LOCAL_ID" />)</translation>
 <translation id="3946209740501886391">नेहमी या साइटवर विचारा</translation>
-<translation id="3949571496842715403">हा सर्व्हर <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा प्रमाणपत्र विषय पर्यायी नावांचा उल्लेख करत नाही. हे कदाचित चुकीच्या कॉंफिगरेशनमुळे होत आहे किंवा आक्रमणकर्ता तुमच्या कनेक्शनमध्ये अडथळा आणत आहे.</translation>
+<translation id="3949571496842715403">हा सर्व्हर <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा सर्टिफिकेट विषय पर्यायी नावांचा उल्लेख करत नाही. हे कदाचित चुकीच्या कॉंफिगरेशनमुळे होत आहे किंवा हल्लेखोर तुमच्या कनेक्शनमध्ये अडथळा आणत आहे.</translation>
 <translation id="3949601375789751990">तुमचा ब्राउझिंग इतिहास येथे दिसतो</translation>
 <translation id="3950820424414687140">साइन इन करा</translation>
 <translation id="3963721102035795474">वाचक मोड</translation>
@@ -452,7 +452,7 @@
 <translation id="4075732493274867456">क्लायंट आणि सर्व्हर एक सामान्य SSL प्रोटोकॉल आवृत्ती किंवा सायफर संचाचे समर्थन करीत नाही.</translation>
 <translation id="4079302484614802869">प्रॉक्सी कॉन्फिगरेशन .pac स्क्रिप्ट URL वापरण्‍यास सेट करण्‍यात आले आहे, निश्चित प्रॉक्सी सर्व्हर नव्हे.</translation>
 <translation id="4098354747657067197">भ्रामक साइट पुढे आहे</translation>
-<translation id="4103249731201008433">डिव्हाइस सिरीयल क्रमांक अवैध आहे</translation>
+<translation id="4103249731201008433">डिव्हाइस सिरीअल क्रमांक चुकीचा आहे</translation>
 <translation id="410351446219883937">ऑटोप्ले</translation>
 <translation id="4103763322291513355">आपल्या सिस्टम प्रशासकाद्वारे प्रवर्तित काळ्यासूचीतील URLs आणि अन्य धोरणांची सूची पाहण्यासाठी &lt;strong&gt;chrome://policy&lt;/strong&gt; ला भेट द्या.</translation>
 <translation id="4110652170750985508">तुमचे पेमेंट पुन्हा एकदा तपासा</translation>
@@ -488,7 +488,7 @@
     &lt;p&gt;यावर उपाय म्हणून, अँटीव्हायरस सॉफ्टवेअर बंद करा. जर सॉफ्टवेअर बंद केल्यानंतर तुमचे पेज उघडले, तर जेव्हा तुम्ही सुरक्षित साइट वापरता, तेव्हा हे सॉफ्टवेअर बंद करा.&lt;/p&gt;
     &lt;p&gt;तुमचे काम पूर्ण झाले की, तुमचा अँटीव्हायरस प्रोग्राम पुन्हा सुरू करण्याचे लक्षात ठेवा.&lt;/p&gt;
     &lt;h4&gt;पायरी ५: आणखी मदत मिळवा&lt;/h4&gt;
-    &lt;p&gt;जर अजूनही तुम्हाला हीच एरर दिसत असेल, तर वेबसाइटच्या मालकाशी संपर्क करा.&lt;/p&gt;</translation>
+    &lt;p&gt;जर अजूनही तुम्हाला हीच एरर दिसत असेल, तर वेबसाइटच्या मालकाशी संपर्क साधा.&lt;/p&gt;</translation>
 <translation id="4226937834893929579"><ph name="BEGIN_LINK" />नेटवर्क निदान चालवून पहा<ph name="END_LINK" />.</translation>
 <translation id="4235360514405112390">वैध</translation>
 <translation id="4250431568374086873">या साइटवरील आपले कनेक्शन पूर्णपणे सुरक्षित नाही</translation>
@@ -510,12 +510,12 @@
 <translation id="4356973930735388585">या साइट वरील आक्रमणकर्ते तुमची माहिती (उदाहरणार्थ, फोटो, पासवर्ड, संदेश आणि क्रेडिट कार्ड) चोरणारे किंवा हटविणारे धोकादायक प्रोग्राम आपल्या संगणकावर इंस्टॉल करण्‍याचा प्रयत्न करू शकतात.</translation>
 <translation id="4358461427845829800">पेमेंट पद्धती व्यवस्थापित करा</translation>
 <translation id="4372948949327679948">अपेक्षित <ph name="VALUE_TYPE" /> मूल्य.</translation>
-<translation id="4377125064752653719">आपण <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने सादर केलेले प्रमाणपत्र त्याच्या जारीकर्त्याद्वारे मागे घेतले गेले आहे. याचा अर्थ सर्व्हरने सादर केलेल्या सुरक्षा क्रेडेन्शियलवर अजिबात ठेवला जाऊ नये. आपण कदाचित आक्रमणकर्त्याशी संवाद प्रस्थापित करत आहात.</translation>
+<translation id="4377125064752653719">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने सादर केलेले सर्टिफिकेट त्याच्या जारीकर्त्याद्वारे मागे घेतले गेले आहे. याचा अर्थ सर्व्हरने सादर केलेल्या सुरक्षा क्रेडेंशियलवर अजिबात ठेवला जाऊ नये. तुम्ही कदाचित हल्लेखोराशी संवाद प्रस्थापित करत आहात.</translation>
 <translation id="4406896451731180161">शोध परिणाम</translation>
 <translation id="4408413947728134509">कुकीज <ph name="NUM_COOKIES" /></translation>
 <translation id="4415426530740016218">घेण्याचा पत्ता</translation>
-<translation id="4424024547088906515">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र Chrome द्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation>
-<translation id="4432688616882109544"><ph name="HOST_NAME" /> ने आपले लॉग इन प्रमाणपत्र स्वीकारले नाही किंवा कदाचित प्रदान केले गेले नसावे.</translation>
+<translation id="4424024547088906515">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट Chrome द्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation>
+<translation id="4432688616882109544"><ph name="HOST_NAME" /> ने तुमचे लॉग इन सर्टिफिकेट स्वीकारले नाही किंवा कदाचित दिले गेले नसावे.</translation>
 <translation id="4434045419905280838">पॉप-अप आणि रीडिरेक्ट</translation>
 <translation id="443673843213245140">प्रॉक्सीचा वापर अक्षम करण्‍यात आला आहे पण एक सुस्पष्‍ट प्रॉक्सी कॉन्‍फिगरेशन निर्दिष्‍ट करण्‍यात आले आहे.</translation>
 <translation id="445100540951337728">डेबिट कार्डे स्वीकारली जातात</translation>
@@ -535,8 +535,8 @@
 <translation id="4594403342090139922">&amp;हटवा पूर्ववत करा</translation>
 <translation id="4619615317237390068">अन्य डिव्हाइसेसमधील टॅब</translation>
 <translation id="4668929960204016307">,</translation>
-<translation id="467662567472608290">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याच्या सुरक्षितता प्रमाणपत्रात एरर आहेत. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation>
-<translation id="4690462567478992370">अवैध प्रमाणपत्र वापरणे थांबवा</translation>
+<translation id="467662567472608290">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याच्या सुरक्षितता सर्टिफिकेटमध्ये एरर आहेत. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation>
+<translation id="4690462567478992370">अवैध सर्टिफिकेट वापरणे थांबवा</translation>
 <translation id="4690954380545377795">तुम्ही तुमच्या Google खात्याचा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation>
 <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation>
 <translation id="4708268264240856090">आपल्या कनेक्शनमध्ये व्यत्यय आला</translation>
@@ -586,7 +586,7 @@
 <translation id="5019198164206649151">समर्थन संचयन खराब स्थितीत</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="503069730517007720">"<ph name="SOFTWARE_NAME" />" साठी मूळ सर्टिफिकेट आवश्यक आहे परंतु ते इंस्टॉल केलेले नाही. तुमच्या IT अ‍ॅडमिनिस्ट्रेटरने ही समस्या सोडण्यासाठी "<ph name="SOFTWARE_NAME" />" साठीच्या कॉंफिगरेशन सूचना पहाव्यात. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">Google भाषांतर बद्दल</translation>
 <translation id="5039804452771397117">परवानगी द्या</translation>
 <translation id="5040262127954254034">गोपनीयता</translation>
@@ -594,10 +594,10 @@
 <translation id="5056549851600133418">तुमच्यासाठी लेख</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />प्रॉक्सी पत्ता तपासणे<ph name="END_LINK" /></translation>
 <translation id="5086888986931078152">आपण काही साइट मधील प्रतिबंधित आशयामधील अॅक्सेस गमावू शकाल.</translation>
-<translation id="5087286274860437796">यावेळी सर्व्हरचे प्रमाणपत्र वैध नाही.</translation>
+<translation id="5087286274860437796">यावेळी सर्व्हरचे सर्टिफिकेट वैध नाही.</translation>
 <translation id="5087580092889165836">कार्ड जोडा</translation>
 <translation id="5089810972385038852">राज्य</translation>
-<translation id="5094747076828555589">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र Chromium द्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation>
+<translation id="5094747076828555589">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट Chromium द्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation>
 <translation id="5095208057601539847">प्रांत</translation>
 <translation id="5098332213681597508">हे नाव तुमच्या Google खात्यावरून आहे.</translation>
 <translation id="5115563688576182185">(64-बिट)</translation>
@@ -619,10 +619,10 @@
 <translation id="5230733896359313003">पाठविण्याचा पत्ता</translation>
 <translation id="5250209940322997802">"नेटवर्कशी कनेक्ट करा"</translation>
 <translation id="5251803541071282808">क्लाउड</translation>
-<translation id="5281113152797308730"><ph name="BEGIN_PARAGRAPH" />सॉफ्टवेअर तात्पुरते बंद करून ठेवण्यासाठी खालील पायर्‍यांचे फॉलो करा, ज्यामुळे तुम्ही वेबशी कनेक्ट होऊ शकाल. तुम्हाला प्रशासकीय हक्क असणे आवश्यक असेल.<ph name="END_PARAGRAPH" />
+<translation id="5281113152797308730"><ph name="BEGIN_PARAGRAPH" />सॉफ्टवेअर तात्पुरते बंद करून ठेवण्यासाठी खालील पायर्‍यांला फॉलो करा, ज्यामुळे तुम्ही वेबशी कनेक्ट होऊ शकाल. तुम्हाला प्रशासकीय हक्क असणे आवश्यक असेल.<ph name="END_PARAGRAPH" />
 
-    <ph name="BEGIN_LIST" />
-    <ph name="LIST_ITEM" />सुरुवात<ph name="BEGIN_BOLD" /> करा<ph name="END_BOLD" /> वर क्लिक करा, त्यानंतर<ph name="BEGIN_BOLD" />"स्थानिक सेवा पहा"<ph name="END_BOLD" /> शोधा आणि निवडा
+   <ph name="BEGIN_LIST" />
+   <ph name="LIST_ITEM" />सुरुवात<ph name="BEGIN_BOLD" /> करा<ph name="END_BOLD" /> वर क्लिक करा, त्यानंतर<ph name="BEGIN_BOLD" />"स्थानिक सेवा पहा"<ph name="END_BOLD" /> शोधा आणि निवडा
     <ph name="LIST_ITEM" /><ph name="BEGIN_BOLD" />दृश्यशोध<ph name="END_BOLD" /> निवडा
     <ph name="LIST_ITEM" /><ph name="BEGIN_BOLD" />सुरू होण्याचा प्रकार<ph name="END_BOLD" /> यामध्ये, <ph name="BEGIN_BOLD" />बंद केले<ph name="END_BOLD" /> निवडा
     <ph name="LIST_ITEM" /><ph name="BEGIN_BOLD" />सेवा स्थिती<ph name="END_BOLD" /> मध्ये, <ph name="BEGIN_BOLD" />थांबवा<ph name="END_BOLD" /> वर क्लिक करा
@@ -640,14 +640,14 @@
 <translation id="5324080437450482387">संपर्क माहिती निवडा</translation>
 <translation id="5327248766486351172">नाव</translation>
 <translation id="5332219387342487447">पाठविण्‍याची पद्धत</translation>
-<translation id="5355557959165512791">तुम्ही आत्ता <ph name="SITE" /> ला भेट देऊ शकत नाही कारण तिचे प्रमाणपत्र निरस्त केले गेले आहे. नेटवर्क एरर आणि आक्रमणे शक्यतो तात्पुरती असतात, त्यामुळे हे पेज नंतर पाहता येईल.</translation>
+<translation id="5355557959165512791">तुम्ही आत्ता <ph name="SITE" /> ला भेट देऊ शकत नाही कारण तिचे सर्टिफिकेट रिव्होक केले गेले आहे. नेटवर्क एरर आणि आक्रमणे शक्यतो तात्पुरती असतात, त्यामुळे हे पेज नंतर पाहता येईल.</translation>
 <translation id="536296301121032821">धोरण सेटिंग्ज संचयित करण्यात अयशस्वी</translation>
 <translation id="5371425731340848620">कार्ड अपडेट करा</translation>
 <translation id="5377026284221673050">"तुमचे क्लॉक मागे पडले आहे" किंवा "तुमचे क्लॉक वेळेपेक्षा पुढे आहे" किंवा "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
 <translation id="5384855140246857529">तुमच्या सर्व डिव्हाइसवर तुमची कार्डे वापरण्यासाठी साइन इन करा आणि सिंक सुरू करा.</translation>
-<translation id="5386426401304769735">या साइटसाठी असलेल्या प्रमाणपत्र श्रृंखलेत SHA-1 वापरून स्वाक्षरी केलेले प्रमाणपत्र असते.</translation>
+<translation id="5386426401304769735">या साइटसाठी असलेल्या सर्टिफिकेट श्रृंखलेत SHA-1 वापरून स्वाक्षरी केलेले सर्टिफिकेट असते.</translation>
 <translation id="5387961145478138773">तुमच्या आवडत्या Google अॅप्सचा झटपट अॅक्सेस मिळवा</translation>
-<translation id="540969355065856584">हा सर्व्हर <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र यावेळी वैध नाही. हे कदाचित चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्ता आपले कनेक्शन आंतरखंडित करीत असल्‍यामुळे होऊ शकते.</translation>
+<translation id="540969355065856584">हा सर्व्हर <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट यावेळी वैध नाही. हे कदाचित चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोर तुमचे कनेक्शन इंटरसेप्ट करत असल्‍यामुळे होऊ शकते.</translation>
 <translation id="5421136146218899937">ब्राउझिंग डेटा साफ करा...</translation>
 <translation id="5430298929874300616">बुकमार्क काढा</translation>
 <translation id="5431657950005405462">तुमची फाईल आढळली नाही</translation>
@@ -740,18 +740,18 @@
 <translation id="6040143037577758943">बंद करा</translation>
 <translation id="6047233362582046994">तुम्हाला तुमच्या सुरक्षेला असणारा धोका समजत असल्यास, हानिकारक अॅप्स काढले जाण्यापूर्वी तुम्ही <ph name="BEGIN_LINK" />या साइटला भेट देऊ शकता<ph name="END_LINK" />.</translation>
 <translation id="6047927260846328439">हा आशय तुम्हाला सॉफ्टवेअर इंस्टॉल करण्याचा किंवा वैयक्तिक माहिती उघड करण्याचा फसवा प्रयत्न करू शकेल. <ph name="BEGIN_LINK" />तरीही दाखवा<ph name="END_LINK" /></translation>
-<translation id="6051221802930200923">ही वेबसाइट प्रमाणपत्र पिनिंग वापरत असल्यामुळे तुम्ही आत्ता <ph name="SITE" /> पाहू शकणार नाही. नेटवर्क एरर आणि आक्रमणे शक्यतो तात्पुरती असतात, त्यामुळे हे पेज नंतर पाहता येईल.</translation>
+<translation id="6051221802930200923">ही वेबसाइट सर्टिफिकेट पिनिंग वापरत असल्यामुळे तुम्ही आत्ता <ph name="SITE" /> पाहू शकणार नाही. नेटवर्क एरर आणि आक्रमणे शक्यतो तात्पुरती असतात, त्यामुळे हे पेज नंतर पाहता येईल.</translation>
 <translation id="6059925163896151826">USB डिव्हाइसेस</translation>
 <translation id="6071091556643036997">धोरणाचा प्रकार चुकीचा आहे.</translation>
 <translation id="6078024795140153212">{NUM_CARDS,plural, =1{सर्व डिव्हाइसवरून जलद चेकआउट करता यावे यासाठी हे कार्ड तुमच्या Google खात्यावर सेव्ह केले जाईल.}one{सर्व डिव्हाइसवरून जलद चेकआउट करता यावे यासाठी ही कार्डे तुमच्या Google खात्यावर सेव्ह केली जातील.}other{सर्व डिव्हाइसवरून जलद चेकआउट करता यावे यासाठी हे कार्ड तुमच्या Google खात्यावर सेव्ह केले जाईल.}}</translation>
-<translation id="6080696365213338172">आपण प्रशासकाने-प्रदान केलेले प्रमाणपत्र वापरून सामग्रीमध्ये प्रवेश केला. आपण <ph name="DOMAIN" /> वर प्रदान करता तो डेटा आपल्या प्रशासकाद्वारे अंतःखंडित केला जाऊ शकतो.</translation>
+<translation id="6080696365213338172">तुम्ही अॅडमिनिस्ट्रेटरने दिलेले सर्टिफिकेट वापरून आशय अॅक्सेस केला. तुम्ही <ph name="DOMAIN" /> वर प्रदान करता तो डेटा तुमच्या अॅडमिनिस्ट्रेटरद्वारे इंटरसेप्ट केला जाऊ शकतो.</translation>
 <translation id="610911394827799129">तुमच्या Google खात्यामध्ये <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> वर ब्राउझिंग इतिहासाची अन्य स्वरूपे असू शकतात.</translation>
 <translation id="6144381551823904650">{COUNT,plural, =0{काहीही नाही}=1{1 पासवर्ड (सिंक केलेला)}one{# पासवर्ड (सिंक केलेला)}other{# पासवर्ड (सिंक केलेले)}}</translation>
 <translation id="6146055958333702838">कोणत्याही केबल तपासा आणि कोणतेही राउटर, मोडेम किंवा आपण
 वापरत असलेले
         अन्य नेटवर्क डिव्हाइसेस रीबूट करा.</translation>
 <translation id="614940544461990577">हे करून पहा:</translation>
-<translation id="6151417162996330722">सर्व्हर प्रमाणपत्रास वैधता कालावधी आहे जो खूप मोठा आहे.</translation>
+<translation id="6151417162996330722">सर्व्हर सर्टिफिकेटस वैधता कालावधी आहे जो खूप मोठा आहे.</translation>
 <translation id="6157877588268064908">शिपिंग पद्धती आणि आवश्यकता पाहण्यासाठी, एक पत्ता निवडा</translation>
 <translation id="6165508094623778733">अधिक जाणून घ्या</translation>
 <translation id="6169916984152623906">आता आपण खाजगीरित्या ब्राउझ करू शकता आणि हे डिव्हाइस वापरणारे इतर लोक आपले क्रियाकलाप पाहू शकणार नाहीत. तथापि, डाउनलोड आणि बुकमार्क सेव्ह केले जातील.</translation>
@@ -761,7 +761,7 @@
 <translation id="6221345481584921695">Google सुरक्षित ब्राउझिंगला अलीकडे <ph name="SITE" /> वर <ph name="BEGIN_LINK" />मालवेअर आढळले आहे<ph name="END_LINK" />. सामान्यतः सुरक्षित असलेल्या वेबसाइट काहीवेळा मालवेअरमुळे संक्रमित झालेल्या असतात. एक ज्ञात मालवेअर वितरक असलेल्या, <ph name="SUBRESOURCE_HOST" /> कडून दुर्भावनापूर्ण सामग्री येते.</translation>
 <translation id="6251924700383757765">गोपनीयता धोरण</translation>
 <translation id="6254436959401408446">हे पृष्‍ठ उघडण्‍यासाठी पुरेशी मेमरी नाही</translation>
-<translation id="625755898061068298">आपण या साइटसाठी सुरक्षा चेतावणी अक्षम करणे निवडले आहे.</translation>
+<translation id="625755898061068298">तुम्ही या साइटसाठी सुरक्षा चेतावणी अक्षम करणे निवडले आहे.</translation>
 <translation id="6259156558325130047">&amp;पुनर्क्रमित करा पुन्हा करा</translation>
 <translation id="6263376278284652872"><ph name="DOMAIN" /> बुकमार्क</translation>
 <translation id="6264485186158353794">सुरक्षिततेकडे परत</translation>
@@ -784,7 +784,7 @@
 <translation id="6404511346730675251">बुकमार्क संपादित करा</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> साठी कालबाह्यता तारीख आणि CVC प्रविष्‍ट करा</translation>
 <translation id="6414888972213066896">या साइटला भेट देणे ठीक आहे का ते आपण आपल्‍या पालकास विचारले</translation>
-<translation id="6417515091412812850">प्रमाणपत्र मागे घेतले की नाही हे तपासण्यात अक्षम.</translation>
+<translation id="6417515091412812850">सर्टिफिकेट मागे घेतले की नाही हे तपासता आले नाही.</translation>
 <translation id="6433490469411711332">संपर्क माहिती संपादित करा</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> नी कनेक्ट करण्यास नकार दिला.</translation>
 <translation id="6446608382365791566">अधिक माहिती जोडा</translation>
@@ -816,7 +816,7 @@
 <translation id="6710213216561001401">मागील</translation>
 <translation id="6710594484020273272">&lt;शोध संज्ञा एंटर करा&gt;</translation>
 <translation id="6711464428925977395">प्रॉक्सी सर्व्हरमध्ये काहीतरी चुकीचे आहे किंवा पत्ता चुकीचा आहे.</translation>
-<translation id="674375294223700098">अज्ञात सर्व्हर प्रमाणपत्र एरर.</translation>
+<translation id="674375294223700098">अज्ञात सर्व्हर सर्टिफिकेट एरर.</translation>
 <translation id="6753269504797312559">धोरण मूल्य</translation>
 <translation id="6757797048963528358">आपले डिव्हाइस निष्क्रीय झाले.</translation>
 <translation id="6778737459546443941">आपल्या पालकाने अद्याप ती मंजूर केली नाही</translation>
@@ -824,7 +824,7 @@
 <translation id="681021252041861472">आवश्यक फील्ड</translation>
 <translation id="6810899417690483278">सानुकूलीकरण आयडी</translation>
 <translation id="6824266427216888781">प्रदेश डेटा लोड करण्यात अयशस्वी</translation>
-<translation id="6825578344716086703">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने एका कमकुवत स्वाक्षरी अल्गोरिदमचा (जसे SHA-1) वापर करून स्वाक्षरीकृत केलेले प्रमाणपत्र सादर केले. याचा अर्थ असा आहे की सर्व्हरने सादर केलेली सुरक्षितता क्रेडेन्शियल बनावट असू शकतात आणि हा सर्व्हर तुम्ही अपेक्षा करीत असलेला नसेल. (तुम्ही कदाचित एखाद्या हल्लेखोराशी संभाषण करत आहात).</translation>
+<translation id="6825578344716086703">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने एका कमकुवत स्वाक्षरी अल्गोरिदमचा (जसे की SHA-1) वापर करून स्वाक्षरी केलेले सर्टिफिकेट सादर केले. याचा अर्थ असा आहे की सर्व्हरने सादर केलेली सुरक्षितता क्रेडेंशियल बनावट असू शकतात आणि हा सर्व्हर तुम्ही अपेक्षा करत असलेला नसेल. (तुम्ही कदाचित एखाद्या हल्लेखोराशी संभाषण करत आहात).</translation>
 <translation id="6831043979455480757">भाषांतर करा</translation>
 <translation id="6839929833149231406">क्षेत्र</translation>
 <translation id="6852204201400771460">अॅप रीलोड करायचे?</translation>
@@ -842,7 +842,7 @@
 <translation id="6949872517221025916">पासवर्ड रीसेट करा</translation>
 <translation id="6950684638814147129">JSON मूल्य पार्स करताना एरर आली: <ph name="ERROR" /></translation>
 <translation id="6957624206566198865">नवीन खाजगी टॅबमध्ये पेज उघडा</translation>
-<translation id="6957887021205513506">सर्व्हरचे प्रमाणपत्र खोटे असल्याचे दिसून येते.</translation>
+<translation id="6957887021205513506">सर्व्हरचे सर्टिफिकेट बनावट असल्याचे दिसून येते.</translation>
 <translation id="6965382102122355670">ठीक आहे</translation>
 <translation id="6965978654500191972">डिव्हाइस</translation>
 <translation id="6970216967273061347">‍जिल्‍हा</translation>
@@ -853,7 +853,7 @@
 <translation id="7012363358306927923">China UnionPay</translation>
 <translation id="7016992613359344582">हे शुल्क एकाच वेळी द्यायचे किंवा आवर्ती असू शकतात आणि स्पष्ट नसू शकतात.</translation>
 <translation id="7029809446516969842">पासवर्ड</translation>
-<translation id="7050187094878475250">आपण <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने एक प्रमाणपत्र सादर केले आहे ज्याचा वैधता कालावधी हा विश्वासार्हतेसाठी खूप मोठा आहे.</translation>
+<translation id="7050187094878475250">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने एक सर्टिफिकेट सादर केले आहे ज्याचा वैधता कालावधी हा विश्वासार्हतेसाठी खूप मोठा आहे.</translation>
 <translation id="7053983685419859001">अवरोधित करा</translation>
 <translation id="7064851114919012435">संपर्क माहिती</translation>
 <translation id="7079718277001814089">या साइटमध्ये मालवेयर आहे</translation>
@@ -879,7 +879,7 @@
 <translation id="7219179957768738017">कनेक्शन <ph name="SSL_VERSION" /> वापरते.</translation>
 <translation id="7220786058474068424">प्रक्रिया करत आहे</translation>
 <translation id="724691107663265825">साइटमध्ये पुढे मालवेअर आहे</translation>
-<translation id="724975217298816891">आपले कार्ड तपशील अपडेट करण्‍यासाठी <ph name="CREDIT_CARD" /> करिता कालबाह्यता तारीख आणि CVC प्रविष्‍ट करा. आपण पुष्टी केल्यावर, आपले कार्ड तपशील या साइटसह सामायिक केले जातील.</translation>
+<translation id="724975217298816891">तुमचे कार्ड तपशील अपडेट करण्‍यासाठी <ph name="CREDIT_CARD" /> करिता कालबाह्यता तारीख आणि CVC प्रविष्‍ट करा. तुम्ही पुष्टी केल्यावर, तुमचे कार्ड तपशील या साइटसह शेअर केले जातील.</translation>
 <translation id="7251437084390964440">नेटवर्क कॉन्फिगरेशन ONC स्टँडर्डचे पालन करत नाही. कॉन्फिगरेशनचे भाग कदाचित आयात करता येणार नाहीत.
 अतिरिक्त तपशील:
 <ph name="DEBUG_INFO" /></translation>
@@ -891,7 +891,7 @@
 <translation id="7309308571273880165"><ph name="CRASH_TIME" /> वाजता क्रॅश अहवाल कॅप्चर केला (वापरकर्त्याने विनंती केलेले अपलोड, अद्याप अपलोड केलेले नाही)</translation>
 <translation id="7320336641823683070">कनेक्शन मदत</translation>
 <translation id="7334320624316649418">&amp;पुनर्क्रमित करा पुन्हा करा</translation>
-<translation id="733923710415886693">प्रमाणपत्र पारदर्शकतेद्वारे सर्व्हरचे प्रमाणपत्र उघड केले नाही.</translation>
+<translation id="733923710415886693">सर्टिफिकेट पारदर्शकतेअंतर्गत सर्व्हरचे सर्टिफिकेट उघड केले नाही.</translation>
 <translation id="7353601530677266744">कमांड लाइन</translation>
 <translation id="7365061714576910172">Linux निर्यात करा</translation>
 <translation id="7372973238305370288">शोध परिणाम</translation>
@@ -915,7 +915,7 @@
 <translation id="7437289804838430631">संपर्क माहिती जोडा</translation>
 <translation id="7441627299479586546">चुकीचे धोरण विषय</translation>
 <translation id="7444046173054089907">ही साइट अवरोधित केली आहे</translation>
-<translation id="7445762425076701745">आपण कनेक्ट केलेल्या सर्व्हरची ओळख पूर्णपणे सत्यापित करणे शक्य नाही. आपण सर्व्हरशी फक्त आपल्‍या डोमेनमध्ये वैध असलेले नाव वापरून कनेक्ट केलेले आहे, ज्याची मालकी सत्यापित करण्यासाठी बाह्य प्रमाणपत्र अधिकृततेला परवानगी नाही. काही प्रमाणपत्र अधिकारी तरीही या नावांसाठी प्रमाणपत्र जारी करतील, हे सुनिश्चित करण्याचा काहीही मार्ग नाही की आपण इच्छित वेबसाइटशी कनेक्ट केले आहे आणि आक्रमणकर्त्याशी नाही.</translation>
+<translation id="7445762425076701745">तुम्ही कनेक्ट केलेल्या सर्व्हरची ओळख पूर्णपणे पडताळणे शक्य नाही. तुम्ही सर्व्हरशी फक्त आपल्‍या डोमेनमध्ये वैध असलेले नाव वापरून कनेक्ट केलेले आहे, ज्याची मालकी सत्यापित करण्यासाठी बाह्य सर्टिफिकेट अधिकृततेला परवानगी नाही. काही सर्टिफिकेट अधिकारी तरीही या नावांसाठी सर्टिफिकेट जारी करतील, याची खात्री करण्याचा काहीही मार्ग नाही की तुम्ही इच्छित वेबसाइटशी कनेक्ट केले आहे आणि हल्लेखोराशी नाही.</translation>
 <translation id="7451311239929941790">या समस्येविषयी <ph name="BEGIN_LINK" />अधिक जाणून घेणे<ph name="END_LINK" />.</translation>
 <translation id="7453467225369441013">तुम्हाला बहुतांश साइटमधून साइन आउट करते. तुम्हाला तुमच्या Google खात्यामधून साइन आउट केले जाणार नाही.</translation>
 <translation id="7455133967321480974">सार्वत्रिक डीफॉल्‍ट वापरा (अवरोधित करा)</translation>
@@ -924,7 +924,7 @@
 <translation id="7481312909269577407">पुढील</translation>
 <translation id="7485870689360869515">डेटा आढळला नाही.</translation>
 <translation id="7508255263130623398">परत केलेला धोरण डिव्हाइस आयडी रिक्त आहे किंवा वर्तमान डिव्हाइस आयडी शी जुळत नाही</translation>
-<translation id="7511955381719512146">आपण वापरत असलेल्या वाय-फाय ला आपण <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" /> ला भेट देण्याची आवश्यकता असू शकते.</translation>
+<translation id="7511955381719512146">तुम्ही वापरत असलेल्या वाय-फाय ला तुम्ही <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" /> ला भेट देण्याची आवश्यकता असू शकते.</translation>
 <translation id="7514365320538308">डाउनलोड करा</translation>
 <translation id="7518003948725431193">या वेबपत्त्यासाठी वेबपृष्ठ आढळले नाही: <ph name="URL" /></translation>
 <translation id="7521387064766892559">JavaScript</translation>
@@ -938,12 +938,12 @@
 <translation id="7552846755917812628">खालील टिपा वापरून पहा:</translation>
 <translation id="7554791636758816595">नवीन टॅब</translation>
 <translation id="7564049878696755256">तुम्ही तुमच्या Google <ph name="ORG_NAME" /> चा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation>
-<translation id="7567204685887185387">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र कदाचित लबाडीने जारी केले असावे. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation>
+<translation id="7567204685887185387">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट कदाचित लबाडीने जारी केले असावे. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation>
 <translation id="7568593326407688803">हे पृष्ठ<ph name="ORIGINAL_LANGUAGE" />मध्ये आहे आपण याचा भाषांतर करु इच्छिता?</translation>
 <translation id="7569952961197462199">Chrome मधून क्रेडिट कार्ड काढायचे?</translation>
 <translation id="7575800019233204241">"तुमचे कनेक्शन खाजगी नाही" किंवा "&lt;span class="error-code"&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/span&gt;" किंवा "&lt;span class="error-code"&gt;ERR_CERT_COMMON_NAME_INVALID&lt;/span&gt;" किंवा "&lt;span class="error-code"&gt;NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM&lt;/span&gt;" किंवा "SSL सर्टिफिकेट एरर"</translation>
 <translation id="7578104083680115302">आपण Google सह सेव्ह केलेल्या कार्डचा वापर करून डिव्‍हाइसेसवरून द्रुतपणे साइट आणि अॅप्सवर देय द्या.</translation>
-<translation id="7592362899630581445">सर्व्हरचे प्रमाणपत्र नाव मर्यादांचे उल्लंघन करते.</translation>
+<translation id="7592362899630581445">सर्व्हरचे सर्टिफिकेट नाव मर्यादांचे उल्लंघन करते.</translation>
 <translation id="7598391785903975535"><ph name="UPPER_ESTIMATE" /> पेक्षा कमी</translation>
 <translation id="759889825892636187"><ph name="HOST_NAME" /> सध्या ही विनंती हाताळण्यात अक्षम आहे.</translation>
 <translation id="7600965453749440009">कधीही <ph name="LANGUAGE" /> चा भाषांतर करु नका</translation>
@@ -962,7 +962,7 @@
 <translation id="7699293099605015246">लेख आत्ता उपलब्ध नाहीत</translation>
 <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="7714464543167945231">सर्टिफिकेट</translation>
 <translation id="7716147886133743102">तुमच्या प्रशासकाने ब्लॉक केलेले</translation>
 <translation id="7716424297397655342">ही साइट कॅश   मधून लोड करणे शक्य नाही</translation>
 <translation id="7723047071702270851">कार्ड संपादित करा</translation>
@@ -971,7 +971,7 @@
 <translation id="7755287808199759310">आपले पालक तुमच्यासाठी ती अनावरोधित करू शकतात</translation>
 <translation id="7758069387465995638">फायरवॉल किंवा अँटीव्हायरस सॉफ्टवेअरने कदाचित कनेक्शन अवरोधित केले असावे.</translation>
 <translation id="7759163816903619567">डोमेन दाखवा:</translation>
-<translation id="7761701407923456692">सर्व्हरचे प्रमाणपत्र URL शी जुळत नाही.</translation>
+<translation id="7761701407923456692">सर्व्हरचे सर्टिफिकेट URL शी जुळत नाही.</translation>
 <translation id="7763386264682878361">पेमेंट मॅनिफेस्ट विश्लेषक</translation>
 <translation id="7764225426217299476">पत्ता जोडा</translation>
 <translation id="777702478322588152">परफेक्चुअर</translation>
@@ -986,7 +986,7 @@
 <translation id="7813600968533626083">Chrome मधून सूचना फॉर्म काढायचा?</translation>
 <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' साठी <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> सापडले</translation>
 <translation id="7818867226424560206">धोरण व्‍यवस्‍थापन</translation>
-<translation id="782886543891417279">आपण वापरत असलेल्या (<ph name="WIFI_NAME" />) वाय-फाय च्या लॉग इन पृष्ठास आपल्याला भेट देण्याची आवश्यकता असू शकते.</translation>
+<translation id="782886543891417279">तुम्ही वापरत असलेल्या (<ph name="WIFI_NAME" />) वाय-फाय च्या लॉग इन पेजला तुम्हाला भेट देण्याची आवश्यकता असू शकते.</translation>
 <translation id="785549533363645510">तथापि, आपण अदृश्य नाही. गुप्त झाल्याने आपले ब्राउझिंग आपला नियोक्ता, आपला इंटरनेट सेवा प्रदाता, किंवा आपण भेट देता त्या वेबसाइटपासून लपत नाही.</translation>
 <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
 <translation id="7862185352068345852">साइट सोडायची?</translation>
@@ -996,7 +996,7 @@
 <translation id="7893255318348328562">सेशन नाव</translation>
 <translation id="79338296614623784">वैध फोन नंबर एंटर करा</translation>
 <translation id="7935318582918952113">DOM डिस्टिलर</translation>
-<translation id="7938958445268990899">सर्व्हरचे प्रमाणपत्र अद्याप वैध नाही.</translation>
+<translation id="7938958445268990899">सर्व्हरचे सर्टिफिकेट अद्याप वैध नाही.</translation>
 <translation id="7947285636476623132">आपले कालबाह्यता वर्ष तपासा आणि पुन्हा प्रयत्न करा</translation>
 <translation id="7951415247503192394">(32-बिट)</translation>
 <translation id="7956713633345437162">Mobile बुकमार्क</translation>
@@ -1026,7 +1026,7 @@
 <translation id="8184538546369750125">सार्वत्रिक डीफॉल्‍ट वापरा (अनुमती द्या)</translation>
 <translation id="8191494405820426728">स्थानिक क्रॅश आयडी <ph name="CRASH_LOCAL_ID" /></translation>
 <translation id="8194797478851900357">&amp;हलवा पूर्ववत करा</translation>
-<translation id="8201077131113104583">"<ph name="EXTENSION_ID" />" आयडी असलेल्या विस्तारासाठी अवैध अपडेट URL.</translation>
+<translation id="8201077131113104583"><ph name="EXTENSION_ID" /> असलेल्या एक्सटेंशनासाठी चुकीची अपडेट URL.</translation>
 <translation id="8202097416529803614">ऑर्डर सारांश</translation>
 <translation id="8205463626947051446">साइट अनाहूत जाहिराती दाखवणे चालू ठेवेल</translation>
 <translation id="8211406090763984747">कनेक्शन सुरक्षित आहे</translation>
@@ -1047,7 +1047,7 @@
 <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>
+<translation id="8298115750975731693">तुम्ही वापरत असलेल्या (<ph name="WIFI_NAME" />) वाय-फाय ला तुम्ही <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" /> ला भेट देण्याची आवश्यकता असू शकते.</translation>
 <translation id="8308427013383895095">नेटवर्क कनेक्शनसह समस्या असल्यामुळे भाषांतर अयशस्वी झाला.</translation>
 <translation id="8311129316111205805">सेशन लोड करा</translation>
 <translation id="8332188693563227489"><ph name="HOST_NAME" /> मधील प्रवेश नाकारला</translation>
@@ -1085,7 +1085,7 @@
 <translation id="8564985650692024650">जर तुम्ही तुमच्या <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> पासवर्डचा इतर साइटवर पुन्हा वापर केला असेल तर Chromium तुम्हाला तो रीसेट करण्याची शिफारस करतो.</translation>
 <translation id="8571890674111243710"><ph name="LANGUAGE" /> मध्ये पृष्ठ अनुवादित करत आहे...</translation>
 <translation id="858637041960032120">फोन नंबर जोडा</translation>
-<translation id="859285277496340001">प्रमाणपत्र निरस्त झाले आहे किंवा नाही हे तपासण्यासाठी प्रणाली निर्दिष्ट करत नाही.</translation>
+<translation id="859285277496340001">सर्टिफिकेट रिव्होक झाले आहे किंवा नाही हे तपासण्यााची प्रणाली निर्दिष्ट करत नाही.</translation>
 <translation id="860043288473659153">कार्डधारकाचे नाव</translation>
 <translation id="8620436878122366504">आपल्या पालकांनी अद्याप ती मंजूर केली नाही</translation>
 <translation id="8625384913736129811">या डिव्हाइसवर हे कार्ड सेव्‍ह करा</translation>
@@ -1127,18 +1127,18 @@
 <translation id="8932102934695377596">आपले घड्याळ मागे आहे</translation>
 <translation id="893332455753468063">नाव जोडा</translation>
 <translation id="8938939909778640821">स्वीकारलेली क्रेडिट आणि प्रीपेड कार्डे</translation>
-<translation id="8952525071319348207">तुमच्या कार्डाचे तपशील अपडेट करण्यासाठी <ph name="CREDIT_CARD" /> कार्डाची मुदत संपण्याची तारीख आणि CVV टाका. तुम्ही निश्चित केल्यावर, तुमच्या Google पेमेंट खात्यावरील कार्डाचे तपशील या साइटसोबत शेअर केले जातील.</translation>
+<translation id="8952525071319348207">तुमच्या कार्डाचे तपशील अपडेट करण्यासाठी <ph name="CREDIT_CARD" /> कार्डची मुदत संपण्याची तारीख आणि CVC टाका. तुम्ही निश्चित केल्यावर, तुमच्या Google पेमेंट खात्यावरील कार्डाचे तपशील या साइटसोबत शेअर केले जातील.</translation>
 <translation id="8957210676456822347">बंद पोर्टल प्राधिकृतता</translation>
-<translation id="8971063699422889582">सर्व्हरचे प्रमाणपत्र कालबाह्य झाले आहे.</translation>
+<translation id="8971063699422889582">सर्व्हरचे सर्टिफिकेट एक्स्पायर झाले आहे.</translation>
 <translation id="8975012916872825179">फोन नंबर, ईमेल अॅड्रेस आणि शिपिंग पत्ते यांसारखी माहिती समाविष्ट आहे</translation>
 <translation id="8978053250194585037">Google सुरक्षित ब्राउझिंगला <ph name="SITE" /> वर अलीकडे <ph name="BEGIN_LINK" />फिशिंग आढळले<ph name="END_LINK" />. तुम्हाला फसवण्यासाठी फिशिंग साइट दुसर्‍याच कुठल्यातरी वेबसाइट असल्याचे भासवतात.</translation>
 <translation id="8983003182662520383">Google Pay वापरून पेमेंट पद्धती आणि पत्ते</translation>
 <translation id="8987927404178983737">महिना</translation>
 <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation>
 <translation id="8996941253935762404">पुढे असणार्‍या साइटमध्ये हानिकारक प्रोग्राम आहेत</translation>
-<translation id="8997023839087525404">सर्व्हरने प्रमाणपत्र पारदर्शकता धोरणाचा वापर करून सार्वजनिकरीत्या उघड न केलेले एक प्रमाणपत्र सादर केले. काही प्रमाणपत्रे विश्वसनीय आहेत आणि आक्रमणकर्त्यांविरूद्ध संरक्षण करतात हे सुनिश्चित करण्‍यासाठी त्यांच्यासाठी ही एक आवश्यकता आहे.</translation>
+<translation id="8997023839087525404">सर्व्हरने सर्टिफिकेट पारदर्शकता धोरणाचा वापर करून सार्वजनिकरत्या उघड न केलेले एक सर्टिफिकेट सादर केले. काही सर्टिफिकेट विश्वसनीय आहेत आणि हल्लेखोरांविरूद्ध संरक्षण करतात याची खात्री करण्‍यासाठी त्यांच्यासाठी ही एक आवश्यकता आहे.</translation>
 <translation id="9001074447101275817">प्रॉक्सी <ph name="DOMAIN" /> ला वापरकर्तानाव आणि पासवर्ड आवश्यक आहेत.</translation>
-<translation id="9005998258318286617">PDF दस्तऐवज लोड करण्यात अपयश आले.</translation>
+<translation id="9005998258318286617">पीडीएफ दस्तऐवज लोड करण्यात अपयश आले.</translation>
 <translation id="9008201768610948239">दुर्लक्ष करा</translation>
 <translation id="9011424611726486705">साइटच्या सेटिंग्ज उघडा</translation>
 <translation id="9020200922353704812">कार्ड बिलिंग पत्ता आवश्यक आहे</translation>
@@ -1147,14 +1147,14 @@
 <translation id="9035022520814077154">सुरक्षितता एरर</translation>
 <translation id="9038649477754266430">पेज अधिक द्रुतपणे लोड करण्यासाठी पूर्वानुमान सेवेचा वापर करा</translation>
 <translation id="9039213469156557790">पुढे, या पृष्ठात सुरक्षित नसलेली इतर संसाधने समाविष्ट आहेत. ही संसाधने संक्रमणात असताना इतरांद्वारे पाहिली जाऊ शकतात आणि पृष्ठाचे वर्तन बदलण्यासाठी आक्रमणकर्त्याद्वारे सुधारित केली जाऊ शकतात.</translation>
-<translation id="9049981332609050619">आपण <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने अवैध प्रमाणपत्र सादर केले आहे.</translation>
+<translation id="9049981332609050619">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने अवैध सर्टिफिकेट सादर केले आहे.</translation>
 <translation id="9050666287014529139">सांकेतिक वाक्यांश</translation>
 <translation id="9065203028668620118">संपादन</translation>
 <translation id="9069693763241529744">एक विस्ताराने ब्लॉक केलेले</translation>
 <translation id="9076283476770535406">कदाचित तिच्यामध्ये प्रौढ सामग्री असू शकते</translation>
 <translation id="9078964945751709336">अधिक माहिती आवश्यक आहे</translation>
 <translation id="9080712759204168376">मागणी सारांश</translation>
-<translation id="9103872766612412690"><ph name="SITE" /> तुमची माहिती संरक्षित करण्यासाठी सामान्यतः कूटबद्धीकरण वापरते. Chromium ने यावेळी <ph name="SITE" /> शी कनेक्‍ट करण्‍याचा प्रयत्न केला तेव्‍हा, वेबसाइटने असामान्य आणि अयोग्य क्रेडेन्शियल परत पाठविले. एकतर आक्रमणकर्ता <ph name="SITE" /> असल्याची बतावणी करण्याचा प्रयत्न करतो तेव्‍हा किंवा वाय-फाय साइन इन स्क्रीनने कनेक्शनमध्ये व्यत्यय आणले तेव्‍हा हे घडू शकते. कोणत्याही डेटाची अदलाबदल करण्यापूर्वी Chromium ने कनेक्शन थांबविल्यामुळे तुमची माहिती अद्याप सुरक्षित आहे.</translation>
+<translation id="9103872766612412690"><ph name="SITE" /> तुमची माहिती संरक्षित करण्यासाठी सामान्यतः एंक्रिप्शन वापरते. Chromium ने यावेळी <ph name="SITE" /> शी कनेक्‍ट करण्‍याचा प्रयत्न केला तेव्‍हा, वेबसाइटने असामान्य आणि अयोग्य क्रेडेंशियल परत पाठवले. एकतर आक्रमणकर्ता <ph name="SITE" /> असल्याची बतावणी करण्याचा प्रयत्न करतो तेव्‍हा किंवा वाय-फाय साइन इन स्क्रीनने कनेक्शनमध्ये व्यत्यय आणले तेव्‍हा हे घडू शकते. कोणत्याही डेटाची अदलाबदल करण्यापूर्वी Chromium ने कनेक्शन थांबविल्यामुळे तुमची माहिती अद्याप सुरक्षित आहे.</translation>
 <translation id="9106062320799175032">बिलिंग पत्ता जोडा</translation>
 <translation id="910908805481542201">याचे निराकरण करण्यात माझी मदत करा</translation>
 <translation id="9114524666733003316">कार्डची निश्चिती करत आहे...</translation>
@@ -1169,7 +1169,7 @@
 <translation id="9169664750068251925">या साइटवर नेहमी अवरोधित करा</translation>
 <translation id="9170848237812810038">&amp;पूर्ववत करा</translation>
 <translation id="9171296965991013597">अॅप सोडायचे?</translation>
-<translation id="917450738466192189">सर्व्हरचे प्रमाणपत्र अवैध आहे.</translation>
+<translation id="917450738466192189">सर्व्हरचे सर्टिफिकेट अवैध आहे.</translation>
 <translation id="9183425211371246419"><ph name="HOST_NAME" /> असमर्थित प्रोटोकॉल वापरतो.</translation>
 <translation id="9205078245616868884">आपला डेटा आपल्या संकालन सांकेतिक वाक्यांशासह कूटबद्ध केला जातो. संकालन सुरु करण्यासाठी तो एंटर करा.</translation>
 <translation id="9207861905230894330">लेख जोडण्यात अयशस्वी.</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 5028b06..4790066d 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -392,7 +392,7 @@
 <translation id="3586931643579894722">Skjul detaljer</translation>
 <translation id="3600246354004376029"><ph name="TITLE" />, <ph name="DOMAIN" />, <ph name="TIME" /></translation>
 <translation id="3615877443314183785">Angi en gyldig utløpsdato</translation>
-<translation id="36224234498066874">Slett nettlesingsdata...</translation>
+<translation id="36224234498066874">Slett nettleserdata</translation>
 <translation id="362276910939193118">Vis fullstendig logg</translation>
 <translation id="3623476034248543066">Vis verdien</translation>
 <translation id="3630155396527302611">Hvis programmet allerede har fått tillatelse til å bruke nettverket, kan du prøve
@@ -648,7 +648,7 @@
 <translation id="5386426401304769735">Sertifikatkjeden for dette nettstedet inneholder et sertifikat som er signert med SHA-1.</translation>
 <translation id="5387961145478138773">Få rask tilgang til favorittappene dine fra Google</translation>
 <translation id="540969355065856584">Denne tjeneren kunne ikke bevise at den er <ph name="DOMAIN" />. Sikkerhetssertifikatet til tjeneren er ikke gyldig for øyeblikket. Dette kan være forårsaket av en feilkonfigurasjon eller en angriper som lytter på tilkoblingen din.</translation>
-<translation id="5421136146218899937">Slett nettlesingsdata...</translation>
+<translation id="5421136146218899937">Slett nettleserdata</translation>
 <translation id="5430298929874300616">Fjern bokmerke</translation>
 <translation id="5431657950005405462">Filen ble ikke funnet</translation>
 <translation id="5439770059721715174">Skjemavalideringsfeil i «<ph name="ERROR_PATH" />»: <ph name="ERROR" /></translation>
@@ -723,7 +723,7 @@
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 er i bruk}other{# er i bruk}}</translation>
 <translation id="5922853866070715753">Nesten ferdig</translation>
 <translation id="5939518447894949180">Tilbakestill</translation>
-<translation id="5951495562196540101">Kan ikke registrere med en forbrukerkonto (pakkelisens er tilgjengelig).</translation>
+<translation id="5951495562196540101">Kan ikke registrere med en forbrukerkonto (medfølgende lisens er tilgjengelig).</translation>
 <translation id="5967592137238574583">Endre kontaktinformasjonen</translation>
 <translation id="5967867314010545767">Fjern fra loggen</translation>
 <translation id="5975083100439434680">Zoom ut</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 92e0adb..adf144c 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -659,7 +659,7 @@
 <translation id="5470861586879999274">&amp;Refazer editar</translation>
 <translation id="5481076368049295676">Este conteúdo pode tentar instalar softwares perigosos no seu dispositivo que roubam ou excluem suas informações. <ph name="BEGIN_LINK" />Mostrar mesmo assim<ph name="END_LINK" /></translation>
 <translation id="54817484435770891">Adicionar endereço válido</translation>
-<translation id="5490432419156082418">Endereços e Mais</translation>
+<translation id="5490432419156082418">Endereços e mais</translation>
 <translation id="5492298309214877701">Esse site na intranet da empresa, organização ou escola tem o mesmo URL de um website externo.
     <ph name="LINE_BREAK" />
     Tente entrar em contato com o administrador do sistema.</translation>
diff --git a/components/test/data/payments/dynamic_shipping.js b/components/test/data/payments/dynamic_shipping.js
index 8f1cefec..ae3a01ba 100644
--- a/components/test/data/payments/dynamic_shipping.js
+++ b/components/test/data/payments/dynamic_shipping.js
@@ -82,6 +82,10 @@
   } else {
     delete details.shippingOptions;
     details.error = 'We do not ship to this address';
+    details.shippingAddressErrors = {
+      addressLine: 'ADDRESS LINE ERROR',
+      city: 'CITY ERROR',
+    };
   }
   return details;
 }
diff --git a/components/translate/core/browser/resources/translate.js b/components/translate/core/browser/resources/translate.js
index 9226e41..fc78eaa8 100644
--- a/components/translate/core/browser/resources/translate.js
+++ b/components/translate/core/browser/resources/translate.js
@@ -162,8 +162,6 @@
   function invokeReadyCallback() {
     if (readyCallback) {
       readyCallback();
-      // Don't notify ready if already notified.
-      readyCallback = null;
     }
   }
 
diff --git a/components/translate/ios/browser/js_translate_manager.mm b/components/translate/ios/browser/js_translate_manager.mm
index 2ceb046..97e069fe 100644
--- a/components/translate/ios/browser/js_translate_manager.mm
+++ b/components/translate/ios/browser/js_translate_manager.mm
@@ -57,6 +57,24 @@
 #pragma mark -
 #pragma mark CRWJSInjectionManager methods
 
+- (void)inject {
+  NSString* script = [self injectionContent];
+
+  // Reset any state if previously injected.
+  if ([self hasBeenInjected]) {
+    NSString* resetScript =
+        @"try {"
+         "  cr.googleTranslate.revert();"
+         "} catch (e) {"
+         "}";
+    script = [resetScript stringByAppendingString:script];
+  }
+
+  // The scripts need to be re-injected to ensure that the logic that
+  // initializes translate can be restarted properly.
+  [[self receiver] injectScript:script forClass:[self class]];
+}
+
 - (NSString*)injectionContent {
   DCHECK(_translationScript);
   NSString* translationScript = _translationScript;
diff --git a/components/ui_devtools/ui_element.cc b/components/ui_devtools/ui_element.cc
index 617e611a..1de4106 100644
--- a/components/ui_devtools/ui_element.cc
+++ b/components/ui_devtools/ui_element.cc
@@ -34,6 +34,8 @@
       return "View";
     case UIElementType::FRAMESINK:
       return "FrameSink";
+    case UIElementType::SURFACE:
+      return "Surface";
   }
   NOTREACHED();
   return std::string();
diff --git a/components/ui_devtools/ui_element.h b/components/ui_devtools/ui_element.h
index 6cd260a..c4fd3131 100644
--- a/components/ui_devtools/ui_element.h
+++ b/components/ui_devtools/ui_element.h
@@ -23,7 +23,7 @@
 }
 
 // UIElement type.
-enum UIElementType { WINDOW, WIDGET, VIEW, ROOT, FRAMESINK };
+enum UIElementType { WINDOW, WIDGET, VIEW, ROOT, FRAMESINK, SURFACE };
 
 class UI_DEVTOOLS_EXPORT UIElement {
  public:
diff --git a/components/ui_devtools/viz_views/BUILD.gn b/components/ui_devtools/viz_views/BUILD.gn
index 804301f9..8bc15045 100644
--- a/components/ui_devtools/viz_views/BUILD.gn
+++ b/components/ui_devtools/viz_views/BUILD.gn
@@ -12,6 +12,8 @@
     "frame_sink_element.h",
     "overlay_agent_viz.cc",
     "overlay_agent_viz.h",
+    "surface_element.cc",
+    "surface_element.h",
   ]
 
   deps = [
diff --git a/components/ui_devtools/viz_views/surface_element.cc b/components/ui_devtools/viz_views/surface_element.cc
new file mode 100644
index 0000000..71e6f8b
--- /dev/null
+++ b/components/ui_devtools/viz_views/surface_element.cc
@@ -0,0 +1,71 @@
+// 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/ui_devtools/viz_views/surface_element.h"
+
+#include "components/ui_devtools/Protocol.h"
+#include "components/ui_devtools/ui_element_delegate.h"
+#include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
+#include "components/viz/service/surfaces/surface.h"
+#include "components/viz/service/surfaces/surface_manager.h"
+
+namespace ui_devtools {
+
+SurfaceElement::SurfaceElement(const viz::SurfaceId& surface_id,
+                               viz::FrameSinkManagerImpl* frame_sink_manager,
+                               UIElementDelegate* ui_element_delegate,
+                               UIElement* parent,
+                               bool is_detached)
+    : UIElement(UIElementType::SURFACE, ui_element_delegate, parent),
+      surface_id_(surface_id),
+      frame_sink_manager_(frame_sink_manager) {
+  viz::Surface* surface =
+      frame_sink_manager_->surface_manager()->GetSurfaceForId(surface_id_);
+  DCHECK(surface);
+  surface_bounds_ = gfx::Rect(surface->size_in_pixels());
+}
+
+SurfaceElement::~SurfaceElement() = default;
+
+void SurfaceElement::GetBounds(gfx::Rect* bounds) const {
+  // We cannot really know real bounds on the surface unless we do
+  // aggregation. Here we just return size of the surface.
+  *bounds = surface_bounds_;
+}
+
+void SurfaceElement::SetBounds(const gfx::Rect& bounds) {
+  NOTREACHED();
+}
+
+void SurfaceElement::GetVisible(bool* visible) const {
+  // Currently not real data.
+  *visible = true;
+}
+
+void SurfaceElement::SetVisible(bool visible) {}
+
+std::unique_ptr<protocol::Array<std::string>> SurfaceElement::GetAttributes()
+    const {
+  auto attributes = protocol::Array<std::string>::create();
+  attributes->addItem("SurfaceId");
+  attributes->addItem(surface_id_.ToString());
+  attributes->addItem("FrameSink Debug Label");
+  attributes->addItem(
+      frame_sink_manager_->GetFrameSinkDebugLabel(surface_id_.frame_sink_id())
+          .data());
+  return attributes;
+}
+
+std::pair<gfx::NativeWindow, gfx::Rect> SurfaceElement::GetNodeWindowAndBounds()
+    const {
+  return {};
+}
+
+// static
+const viz::SurfaceId& SurfaceElement::From(const UIElement* element) {
+  DCHECK_EQ(UIElementType::SURFACE, element->type());
+  return static_cast<const SurfaceElement*>(element)->surface_id_;
+}
+
+}  // namespace ui_devtools
\ No newline at end of file
diff --git a/components/ui_devtools/viz_views/surface_element.h b/components/ui_devtools/viz_views/surface_element.h
new file mode 100644
index 0000000..4fb5ad63
--- /dev/null
+++ b/components/ui_devtools/viz_views/surface_element.h
@@ -0,0 +1,51 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_UI_DEVTOOLS_VIZ_VIEWS_SURFACE_ELEMENT_H_
+#define COMPONENTS_UI_DEVTOOLS_VIZ_VIEWS_SURFACE_ELEMENT_H_
+
+#include "base/macros.h"
+#include "components/ui_devtools/ui_element.h"
+#include "components/viz/common/surfaces/surface_id.h"
+
+namespace viz {
+class FrameSinkManagerImpl;
+}
+
+namespace ui_devtools {
+
+// A type of UIElement. Each SurfaceElement is corresponding to a SurfaceId.
+class SurfaceElement : public UIElement {
+ public:
+  SurfaceElement(const viz::SurfaceId& surface_id,
+                 viz::FrameSinkManagerImpl* frame_sink_manager,
+                 UIElementDelegate* ui_element_delegate,
+                 UIElement* parent,
+                 bool is_detached);
+  ~SurfaceElement() override;
+
+  // UIElement:
+  std::vector<std::pair<std::string, std::string>> GetCustomProperties()
+      const override;
+  void GetBounds(gfx::Rect* bounds) const override;
+  void SetBounds(const gfx::Rect& bounds) override;
+  void GetVisible(bool* visible) const override;
+  void SetVisible(bool visible) override;
+  std::unique_ptr<protocol::Array<std::string>> GetAttributes() const override;
+  std::pair<gfx::NativeWindow, gfx::Rect> GetNodeWindowAndBounds()
+      const override;
+
+  static const viz::SurfaceId& From(const UIElement* element);
+
+ private:
+  const viz::SurfaceId surface_id_;
+  viz::FrameSinkManagerImpl* const frame_sink_manager_;
+  gfx::Rect surface_bounds_;
+
+  DISALLOW_COPY_AND_ASSIGN(SurfaceElement);
+};
+
+}  // namespace ui_devtools
+
+#endif  // COMPONENTS_UI_DEVTOOLS_VIZ_VIEWS_SURFACE_ELEMENT_H_
\ No newline at end of file
diff --git a/components/ukm/test_ukm_recorder.cc b/components/ukm/test_ukm_recorder.cc
index 445348f9..dbf810a 100644
--- a/components/ukm/test_ukm_recorder.cc
+++ b/components/ukm/test_ukm_recorder.cc
@@ -56,6 +56,14 @@
   return false;
 }
 
+void TestUkmRecorder::AddEntry(mojom::UkmEntryPtr entry) {
+  const bool should_run_callback =
+      entry && entry_hash_to_wait_for_ == entry->event_hash;
+  UkmRecorderImpl::AddEntry(std::move(entry));
+  if (should_run_callback && on_add_entry_)
+    std::move(on_add_entry_).Run();
+}
+
 const UkmSource* TestUkmRecorder::GetSourceForSourceId(
     SourceId source_id) const {
   const UkmSource* source = nullptr;
@@ -68,6 +76,12 @@
   return source;
 }
 
+void TestUkmRecorder::SetOnAddEntryCallback(base::StringPiece entry_name,
+                                            base::OnceClosure on_add_entry) {
+  on_add_entry_ = std::move(on_add_entry);
+  entry_hash_to_wait_for_ = base::HashMetricName(entry_name);
+}
+
 std::vector<const mojom::UkmEntry*> TestUkmRecorder::GetEntriesByName(
     base::StringPiece entry_name) const {
   uint64_t hash = base::HashMetricName(entry_name);
diff --git a/components/ukm/test_ukm_recorder.h b/components/ukm/test_ukm_recorder.h
index 6950c3c..fab3c1ca 100644
--- a/components/ukm/test_ukm_recorder.h
+++ b/components/ukm/test_ukm_recorder.h
@@ -31,6 +31,8 @@
   bool ShouldRestrictToWhitelistedSourceIds() const override;
   bool ShouldRestrictToWhitelistedEntries() const override;
 
+  void AddEntry(mojom::UkmEntryPtr entry) override;
+
   size_t sources_count() const { return sources().size(); }
 
   size_t entries_count() const { return entries().size(); }
@@ -47,6 +49,10 @@
   // Gets UkmSource data for a single SourceId.
   const UkmSource* GetSourceForSourceId(ukm::SourceId source_id) const;
 
+  // Sets a callback that will be called when recording an entry for entry name.
+  void SetOnAddEntryCallback(base::StringPiece entry_name,
+                             base::OnceClosure on_add_entry);
+
   // Gets all of the entries recorded for entry name.
   std::vector<const mojom::UkmEntry*> GetEntriesByName(
       base::StringPiece entry_name) const;
@@ -75,6 +81,9 @@
                                        base::StringPiece metric_name);
 
  private:
+  uint64_t entry_hash_to_wait_for_;
+  base::OnceClosure on_add_entry_;
+
   DISALLOW_COPY_AND_ASSIGN(TestUkmRecorder);
 };
 
diff --git a/components/ukm/ukm_recorder_impl.h b/components/ukm/ukm_recorder_impl.h
index 7f3084f..4acf6d88 100644
--- a/components/ukm/ukm_recorder_impl.h
+++ b/components/ukm/ukm_recorder_impl.h
@@ -82,6 +82,7 @@
   }
 
   // UkmRecorder:
+  void AddEntry(mojom::UkmEntryPtr entry) override;
   void UpdateSourceURL(SourceId source_id, const GURL& url) override;
   void UpdateAppURL(SourceId source_id, const GURL& url) override;
   void RecordNavigation(
@@ -126,8 +127,6 @@
 
   void RecordSource(std::unique_ptr<UkmSource> source);
 
-  void AddEntry(mojom::UkmEntryPtr entry) override;
-
   // Load sampling configurations from field-trial information.
   void LoadExperimentSamplingInfo();
 
diff --git a/components/unified_consent/unified_consent_metrics.cc b/components/unified_consent/unified_consent_metrics.cc
index ff2da54..a72165e 100644
--- a/components/unified_consent/unified_consent_metrics.cc
+++ b/components/unified_consent/unified_consent_metrics.cc
@@ -8,7 +8,7 @@
 
 namespace {
 
-// Histogram name.
+// Histogram name for the consent bump action.
 const char kConsentBumpActionMetricName[] = "UnifiedConsent.ConsentBump.Action";
 
 }  // namespace
@@ -23,6 +23,11 @@
       UnifiedConsentBumpAction::kUnifiedConsentBumpActionMoreOptionsMax);
 }
 
+void RecordConsentBumpEligibility(bool eligible) {
+  UMA_HISTOGRAM_BOOLEAN("UnifiedConsent.ConsentBump.EligibleAtStartup",
+                        eligible);
+}
+
 }  // namespace metrics
 
 }  // namespace unified_consent
diff --git a/components/unified_consent/unified_consent_metrics.h b/components/unified_consent/unified_consent_metrics.h
index a3ed577..7e476156 100644
--- a/components/unified_consent/unified_consent_metrics.h
+++ b/components/unified_consent/unified_consent_metrics.h
@@ -21,6 +21,10 @@
 // Records histogram action for the unified consent bump.
 void RecordConsentBumpMetric(UnifiedConsentBumpAction action);
 
+// Records whether the user is eligible for the consent bump. This method should
+// be called at startup.
+void RecordConsentBumpEligibility(bool eligible);
+
 }  // namespace metrics
 
 }  // namespace unified_consent
diff --git a/components/unified_consent/unified_consent_service.cc b/components/unified_consent/unified_consent_service.cc
index 23c8c52c..1752f95 100644
--- a/components/unified_consent/unified_consent_service.cc
+++ b/components/unified_consent/unified_consent_service.cc
@@ -19,6 +19,7 @@
 #include "components/sync/driver/sync_service.h"
 #include "components/unified_consent/feature.h"
 #include "components/unified_consent/pref_names.h"
+#include "components/unified_consent/unified_consent_metrics.h"
 #include "components/unified_consent/unified_consent_service_client.h"
 
 namespace unified_consent {
@@ -514,8 +515,10 @@
 
 void UnifiedConsentService::CheckConsentBumpEligibility() {
   // Only check eligility if the user was eligible before.
-  if (!ShouldShowConsentBump())
+  if (!ShouldShowConsentBump()) {
+    metrics::RecordConsentBumpEligibility(false);
     return;
+  }
 
   syncer::ModelTypeSet user_types_without_user_events =
       syncer::UserSelectableTypes();
@@ -529,6 +532,8 @@
     RecordConsentBumpSuppressReason(
         ConsentBumpSuppressReason::kUserTurnedPrivacySettingOff);
   }
+  metrics::RecordConsentBumpEligibility(
+      pref_service_->GetBoolean(prefs::kShouldShowUnifiedConsentBump));
 }
 
 }  //  namespace unified_consent
diff --git a/components/unified_consent/unified_consent_service_unittest.cc b/components/unified_consent/unified_consent_service_unittest.cc
index e527665e..1aaf28f 100644
--- a/components/unified_consent/unified_consent_service_unittest.cc
+++ b/components/unified_consent/unified_consent_service_unittest.cc
@@ -668,6 +668,8 @@
   EXPECT_TRUE(consent_service_->ShouldShowConsentBump());
   histogram_tester.ExpectTotalCount("UnifiedConsent.ConsentBump.SuppressReason",
                                     0);
+  histogram_tester.ExpectUniqueSample(
+      "UnifiedConsent.ConsentBump.EligibleAtStartup", true, 1);
 
   // Simulate shutdown.
   consent_service_->Shutdown();
@@ -679,6 +681,8 @@
   EXPECT_TRUE(consent_service_->ShouldShowConsentBump());
   histogram_tester.ExpectTotalCount("UnifiedConsent.ConsentBump.SuppressReason",
                                     0);
+  histogram_tester.ExpectUniqueSample(
+      "UnifiedConsent.ConsentBump.EligibleAtStartup", true, 2);
 }
 
 TEST_F(UnifiedConsentServiceTest,
@@ -697,6 +701,8 @@
   EXPECT_TRUE(consent_service_->ShouldShowConsentBump());
   histogram_tester.ExpectTotalCount("UnifiedConsent.ConsentBump.SuppressReason",
                                     0);
+  histogram_tester.ExpectUniqueSample(
+      "UnifiedConsent.ConsentBump.EligibleAtStartup", true, 1);
 
   // Simulate shutdown.
   consent_service_->Shutdown();
@@ -715,6 +721,10 @@
       "UnifiedConsent.ConsentBump.SuppressReason",
       unified_consent::ConsentBumpSuppressReason::kUserTurnedSyncDatatypeOff,
       1);
+  histogram_tester.ExpectBucketCount(
+      "UnifiedConsent.ConsentBump.EligibleAtStartup", true, 1);
+  histogram_tester.ExpectBucketCount(
+      "UnifiedConsent.ConsentBump.EligibleAtStartup", false, 1);
 }
 
 TEST_F(UnifiedConsentServiceTest,
diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc
index 745c26bb..e1eb263 100644
--- a/components/viz/common/features.cc
+++ b/components/viz/common/features.cc
@@ -74,9 +74,10 @@
   // TODO(riajiang): Check feature flag as well. https://crbug.com/804888
   // TODO(riajiang): Check kVizDisplayCompositor feature when it works with
   // that config.
-  return base::CommandLine::ForCurrentProcess()->HasSwitch(
-             switches::kUseVizHitTestSurfaceLayer) ||
-         base::FeatureList::IsEnabled(kEnableVizHitTestSurfaceLayer);
+  return (base::CommandLine::ForCurrentProcess()->HasSwitch(
+              switches::kUseVizHitTestSurfaceLayer) ||
+          base::FeatureList::IsEnabled(kEnableVizHitTestSurfaceLayer)) &&
+         !IsVizHitTestingDrawQuadEnabled();
 }
 
 bool IsDrawOcclusionEnabled() {
diff --git a/content/app/strings/translations/content_strings_bn.xtb b/content/app/strings/translations/content_strings_bn.xtb
index ed8003f..33481b31 100644
--- a/content/app/strings/translations/content_strings_bn.xtb
+++ b/content/app/strings/translations/content_strings_bn.xtb
@@ -27,6 +27,7 @@
 <translation id="1821985195704844674">ট্রি গ্রিড</translation>
 <translation id="1822429046913737220">AM/PM</translation>
 <translation id="1832974991323546415">রিমোট ডিভাইসে প্লে করুন</translation>
+<translation id="1838818994221231429">ডিসপ্লে কাট-আউট থেকে ফুল-স্ক্রিনে থেকে যান</translation>
 <translation id="190587075670221089">মোছা হচ্ছে</translation>
 <translation id="1907737156431278478">উদাহরণ</translation>
 <translation id="1921819250265091946">dd</translation>
@@ -103,6 +104,7 @@
 <translation id="4664250907885839816">'<ph name="ATSIGN" />' অনুসরণ করে এমন একটি অংশে '<ph name="INVALIDCHARACTER" />' চিহ্ন থাকা উচিত নয়৷</translation>
 <translation id="4668956016107839909">পরিশিষ্ট</translation>
 <translation id="4742539557769756338">কভার</translation>
+<translation id="4748357248530471599">ডিসপ্লে কাট-আউট থেকে ফুল-স্ক্রিনে যান</translation>
 <translation id="4757246831282535685">ট্যাব প্যানেল</translation>
 <translation id="4763480195061959176">ভিডিও</translation>
 <translation id="479989351350248267">search</translation>
diff --git a/content/app/strings/translations/content_strings_es-419.xtb b/content/app/strings/translations/content_strings_es-419.xtb
index 6c990c4..546330e9 100644
--- a/content/app/strings/translations/content_strings_es-419.xtb
+++ b/content/app/strings/translations/content_strings_es-419.xtb
@@ -27,6 +27,7 @@
 <translation id="1821985195704844674">cuadrícula de árbol</translation>
 <translation id="1822429046913737220">AM/PM</translation>
 <translation id="1832974991323546415">jugar en el dispositivo remoto</translation>
+<translation id="1838818994221231429">activar o desactivar la pantalla completa en el área de corte de pantalla</translation>
 <translation id="190587075670221089">contenido borrado</translation>
 <translation id="1907737156431278478">ejemplo</translation>
 <translation id="1921819250265091946">dd</translation>
@@ -103,6 +104,7 @@
 <translation id="4664250907885839816">El texto después del signo "<ph name="ATSIGN" />" no debe incluir el símbolo "<ph name="INVALIDCHARACTER" />".</translation>
 <translation id="4668956016107839909">apéndice</translation>
 <translation id="4742539557769756338">portada</translation>
+<translation id="4748357248530471599">activar o desactivar la pantalla completa en el corte de pantalla</translation>
 <translation id="4757246831282535685">panel de pestañas</translation>
 <translation id="4763480195061959176">video</translation>
 <translation id="479989351350248267">search</translation>
diff --git a/content/app/strings/translations/content_strings_hi.xtb b/content/app/strings/translations/content_strings_hi.xtb
index 767545c..5471f050 100644
--- a/content/app/strings/translations/content_strings_hi.xtb
+++ b/content/app/strings/translations/content_strings_hi.xtb
@@ -90,7 +90,7 @@
 <translation id="4103419683916926126">मिलीसेकंड</translation>
 <translation id="4151657705144244502">ग्राफ़‍िक</translation>
 <translation id="4193965531860883258">भूमिका</translation>
-<translation id="4201051445878709314">पिछला माह दिखाएं</translation>
+<translation id="4201051445878709314">पिछला महीना दिखाएं</translation>
 <translation id="421884353938374759">रंग पिकर</translation>
 <translation id="4248100235867064564">मेनू बार</translation>
 <translation id="4254339807215791271">सामग्री की जानकारी</translation>
diff --git a/content/app/strings/translations/content_strings_mr.xtb b/content/app/strings/translations/content_strings_mr.xtb
index 4b0e7a3..b5f6cbd 100644
--- a/content/app/strings/translations/content_strings_mr.xtb
+++ b/content/app/strings/translations/content_strings_mr.xtb
@@ -149,7 +149,7 @@
 <translation id="6164829606128959761">मीटर</translation>
 <translation id="6166809985690652833">अंतिम शब्द</translation>
 <translation id="6213469881011901533">शब्दावली</translation>
-<translation id="6398862346408813489">महिना निवड पॅनेल दर्शवा</translation>
+<translation id="6398862346408813489">महिना निवड पॅनेल दाखवा</translation>
 <translation id="6404546809543547843">ऑडिओ वेळ स्क्रबर</translation>
 <translation id="6453774872122745852">श्रेयनिर्देश</translation>
 <translation id="648732519525291180">वेळ निवडक</translation>
diff --git a/content/app/strings/translations/content_strings_pt-BR.xtb b/content/app/strings/translations/content_strings_pt-BR.xtb
index fd5f89ca..300d738 100644
--- a/content/app/strings/translations/content_strings_pt-BR.xtb
+++ b/content/app/strings/translations/content_strings_pt-BR.xtb
@@ -27,7 +27,7 @@
 <translation id="1821985195704844674">grade de árvore</translation>
 <translation id="1822429046913737220">AM/PM</translation>
 <translation id="1832974991323546415">reproduzir em dispositivo remoto</translation>
-<translation id="1838818994221231429">alternar tela cheia na área de corte da tela</translation>
+<translation id="1838818994221231429">alternar tela cheia para área com corte da tela</translation>
 <translation id="190587075670221089">exclusão</translation>
 <translation id="1907737156431278478">exemplo</translation>
 <translation id="1921819250265091946">dd</translation>
@@ -104,7 +104,7 @@
 <translation id="4664250907885839816">A parte depois de "<ph name="ATSIGN" />" não deve conter o símbolo "<ph name="INVALIDCHARACTER" />".</translation>
 <translation id="4668956016107839909">apêndice</translation>
 <translation id="4742539557769756338">capa</translation>
-<translation id="4748357248530471599">alternar tela cheia do corte da tela</translation>
+<translation id="4748357248530471599">ativa tela cheia com corte de tela</translation>
 <translation id="4757246831282535685">painel da guia</translation>
 <translation id="4763480195061959176">vídeo</translation>
 <translation id="479989351350248267">pesquisar</translation>
diff --git a/content/browser/appcache/appcache_storage_impl.cc b/content/browser/appcache/appcache_storage_impl.cc
index 7ca367b..1aff407 100644
--- a/content/browser/appcache/appcache_storage_impl.cc
+++ b/content/browser/appcache/appcache_storage_impl.cc
@@ -779,14 +779,15 @@
     return;
   }
 
-  // Use a user defined value or a simple hard-coded value when not using quota
-  // management.
+  // Check if new usage exceeds the maximum cache size.
+  if (new_origin_usage_ > max_appcache_origin_cache_size_) {
+    would_exceed_quota_ = true;
+    success_ = false;
+    return;
+  }
+
+  // Check when not using quota management.
   if (space_available_ == -1) {
-    if (new_origin_usage_ > max_appcache_origin_cache_size_) {
-      would_exceed_quota_ = true;
-      success_ = false;
-      return;
-    }
     success_ = transaction.Commit();
     return;
   }
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
index e5f885a..410a7378 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.cc
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc
@@ -195,6 +195,20 @@
   owner_web_contents_ = nullptr;
 }
 
+void BrowserPluginGuest::BeginAttach(WebContents* embedder_web_contents,
+                                     int32_t instance_id,
+                                     bool is_full_page_plugin) {
+  // To get here means attaching is initiated by the browser and no real
+  // BrowserPlugin is created.
+  browser_plugin_instance_id_ = instance_id;
+  BrowserPluginHostMsg_Attach_Params params;
+  auto* contents = static_cast<WebContentsImpl*>(embedder_web_contents);
+  delegate_->WillAttach(
+      contents, browser_plugin_instance_id_, is_full_page_plugin,
+      base::BindOnce(&BrowserPluginGuest::OnWillAttachComplete,
+                     weak_ptr_factory_.GetWeakPtr(), contents, params));
+}
+
 RenderWidgetHostImpl* BrowserPluginGuest::GetOwnerRenderWidgetHost() const {
   return static_cast<RenderWidgetHostImpl*>(
       delegate_->GetOwnerRenderWidgetHost());
diff --git a/content/browser/browser_plugin/browser_plugin_guest.h b/content/browser/browser_plugin/browser_plugin_guest.h
index aab1071..54c90d3 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.h
+++ b/content/browser/browser_plugin/browser_plugin_guest.h
@@ -202,6 +202,9 @@
       const NavigationController::LoadURLParams& load_params) override;
   void SizeContents(const gfx::Size& new_size) override;
   void WillDestroy() override;
+  void BeginAttach(WebContents* embedder_web_contents,
+                   int instance_id,
+                   bool is_full_page_plugin) final;
 
   // Exposes the protected web_contents() from WebContentsObserver.
   WebContentsImpl* GetWebContents() const;
diff --git a/content/browser/media/capture/desktop_capture_device_unittest.cc b/content/browser/media/capture/desktop_capture_device_unittest.cc
index 636f20a..411efdc9 100644
--- a/content/browser/media/capture/desktop_capture_device_unittest.cc
+++ b/content/browser/media/capture/desktop_capture_device_unittest.cc
@@ -236,12 +236,6 @@
               EXPECT_TRUE(format == media::PIXEL_FORMAT_I420);
               return media::VideoCaptureDevice::Client::Buffer();
             }));
-    ON_CALL(*result, ResurrectLastOutputBuffer(_, _, _))
-        .WillByDefault(
-            Invoke([](const gfx::Size&, media::VideoPixelFormat format, int) {
-              EXPECT_TRUE(format == media::PIXEL_FORMAT_I420);
-              return media::VideoCaptureDevice::Client::Buffer();
-            }));
     return result;
   }
 
diff --git a/content/browser/media/capture/screen_capture_device_android_unittest.cc b/content/browser/media/capture/screen_capture_device_android_unittest.cc
index ffbe9c5..4713030 100644
--- a/content/browser/media/capture/screen_capture_device_android_unittest.cc
+++ b/content/browser/media/capture/screen_capture_device_android_unittest.cc
@@ -67,13 +67,6 @@
       const media::VideoFrameMetadata& additional_metadata) override {
     DoOnIncomingCapturedVideoFrame();
   }
-  Buffer ResurrectLastOutputBuffer(const gfx::Size& dimensions,
-                                   media::VideoPixelFormat format,
-                                   int frame_feedback_id) override {
-    EXPECT_EQ(media::PIXEL_FORMAT_I420, format);
-    DoResurrectLastOutputBuffer();
-    return Buffer();
-  }
 };
 
 class ScreenCaptureDeviceAndroidTest : public testing::Test {
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
index 429f73c0..19ed0ff 100644
--- a/content/browser/renderer_host/compositor_impl_android.cc
+++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -951,9 +951,7 @@
   host_->SetNeedsAnimate();
 }
 
-void CompositorImpl::UpdateLayerTreeHost(VisualStateUpdate requested_update) {
-  if (requested_update == VisualStateUpdate::kPrePaint)
-    return;
+void CompositorImpl::UpdateLayerTreeHost() {
   client_->UpdateLayerTreeHost();
   if (needs_animate_) {
     needs_animate_ = false;
diff --git a/content/browser/renderer_host/compositor_impl_android.h b/content/browser/renderer_host/compositor_impl_android.h
index 355b28106..c14d075 100644
--- a/content/browser/renderer_host/compositor_impl_android.h
+++ b/content/browser/renderer_host/compositor_impl_android.h
@@ -111,7 +111,7 @@
   void BeginMainFrame(const viz::BeginFrameArgs& args) override {}
   void BeginMainFrameNotExpectedSoon() override {}
   void BeginMainFrameNotExpectedUntil(base::TimeTicks time) override {}
-  void UpdateLayerTreeHost(VisualStateUpdate requested_update) override;
+  void UpdateLayerTreeHost() override;
   void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta,
                            const gfx::Vector2dF& outer_delta,
                            const gfx::Vector2dF& elastic_overscroll_delta,
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
index db69b0d9..52f2965 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
@@ -8,6 +8,7 @@
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "content/common/input/input_event_dispatch_type.h"
+#include "content/common/input/web_mouse_wheel_event_traits.h"
 #include "content/public/common/content_features.h"
 #include "ui/events/base_event_utils.h"
 #include "ui/events/blink/web_input_event_traits.h"
@@ -57,6 +58,10 @@
       event.latency.Terminate();
 
       last_event->CoalesceWith(event);
+      // The deltas for the coalesced event change; the corresponding action
+      // might be different now.
+      last_event->event.event_action =
+          WebMouseWheelEventTraits::GetEventAction(last_event->event);
       TRACE_EVENT_INSTANT2("input", "MouseWheelEventQueue::CoalescedWheelEvent",
                            TRACE_EVENT_SCOPE_THREAD, "total_dx",
                            last_event->event.delta_x, "total_dy",
@@ -65,7 +70,13 @@
     }
   }
 
-  wheel_queue_.push_back(std::make_unique<QueuedWebMouseWheelEvent>(event));
+  MouseWheelEventWithLatencyInfo event_with_action(event.event, event.latency);
+  event_with_action.event.event_action =
+      WebMouseWheelEventTraits::GetEventAction(event.event);
+  // Update the expected event action before queuing the event. From this point
+  // on, the action should not change.
+  wheel_queue_.push_back(
+      std::make_unique<QueuedWebMouseWheelEvent>(event_with_action));
   TryForwardNextEventToRenderer();
   LOCAL_HISTOGRAM_COUNTS_100("Renderer.WheelQueueSize", wheel_queue_.size());
 }
@@ -78,8 +89,8 @@
     return false;
   }
 
-  if (!ui::WebInputEventTraits::CanCauseScroll(
-          event_sent_for_gesture_ack_->event)) {
+  if (event_sent_for_gesture_ack_->event.event_action ==
+      blink::WebMouseWheelEvent::EventAction::kPageZoom) {
     TRACE_EVENT_INSTANT0("input", "Wheel Event Cannot Cause Scroll",
                          TRACE_EVENT_SCOPE_THREAD);
     return false;
@@ -129,8 +140,8 @@
 
 #if !defined(OS_MACOSX)
     // Swap X & Y if Shift is down and when there is no horizontal movement.
-    if ((event_sent_for_gesture_ack_->event.GetModifiers() &
-         WebInputEvent::kShiftKey) != 0 &&
+    if (event_sent_for_gesture_ack_->event.event_action ==
+            blink::WebMouseWheelEvent::EventAction::kScrollHorizontal &&
         event_sent_for_gesture_ack_->event.delta_x == 0) {
       scroll_update.data.scroll_update.delta_x =
           event_sent_for_gesture_ack_->event.delta_y;
diff --git a/content/browser/renderer_host/media/video_capture_buffer_pool_unittest.cc b/content/browser/renderer_host/media/video_capture_buffer_pool_unittest.cc
index 773dbcc..eb50966 100644
--- a/content/browser/renderer_host/media/video_capture_buffer_pool_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_buffer_pool_unittest.cc
@@ -90,17 +90,6 @@
         new Buffer(pool_, std::move(buffer_handle), buffer_id));
   }
 
-  std::unique_ptr<Buffer> ResurrectLastBuffer(
-      const gfx::Size& dimensions,
-      media::VideoPixelFormat pixel_format) {
-    const int buffer_id =
-        pool_->ResurrectLastForProducer(dimensions, pixel_format);
-    if (buffer_id == media::VideoCaptureBufferPool::kInvalidId)
-      return std::unique_ptr<Buffer>();
-    return std::unique_ptr<Buffer>(new Buffer(
-        pool_, pool_->GetHandleForInProcessAccess(buffer_id), buffer_id));
-  }
-
   base::MessageLoop loop_;
   int expected_dropped_id_;
   scoped_refptr<media::VideoCaptureBufferPool> pool_;
@@ -273,125 +262,6 @@
   buffer4.reset();
 }
 
-// Tests that a previously-released buffer can be immediately resurrected under
-// normal conditions.
-TEST_P(VideoCaptureBufferPoolTest, ResurrectsLastBuffer) {
-  ExpectDroppedId(media::VideoCaptureBufferPool::kInvalidId);
-
-  // At the start, there should be nothing to resurrect.
-  std::unique_ptr<Buffer> resurrected =
-      ResurrectLastBuffer(gfx::Size(10, 10), GetParam());
-  ASSERT_EQ(nullptr, resurrected.get());
-
-  // Reserve a 10x10 buffer and fill it with 0xab values.
-  std::unique_ptr<Buffer> original =
-      ReserveBuffer(gfx::Size(10, 10), GetParam());
-  ASSERT_NE(nullptr, original.get());
-  const size_t original_mapped_size = original->mapped_size();
-  memset(original->data(), 0xab, original_mapped_size);
-
-  // Try to resurrect a buffer BEFORE releasing |original|.  This should fail.
-  resurrected = ResurrectLastBuffer(gfx::Size(10, 10), GetParam());
-  ASSERT_EQ(nullptr, resurrected.get());
-
-  // Release |original| and then try to resurrect it.  Confirm the content of
-  // the resurrected buffer is a fill of 0xab values.
-  original.reset();
-  resurrected = ResurrectLastBuffer(gfx::Size(10, 10), GetParam());
-  ASSERT_NE(nullptr, resurrected.get());
-  ASSERT_EQ(original_mapped_size, resurrected->mapped_size());
-  uint8_t* resurrected_memory = reinterpret_cast<uint8_t*>(resurrected->data());
-  for (size_t i = 0; i < original_mapped_size; ++i)
-    EXPECT_EQ(0xab, resurrected_memory[i]) << "Mismatch at byte offset: " << i;
-
-  // Now, fill the resurrected buffer with 0xbc values and release it.
-  memset(resurrected_memory, 0xbc, original_mapped_size);
-  resurrected.reset();
-
-  // Finally, resurrect the buffer again, and confirm it contains a fill of 0xbc
-  // values.
-  resurrected = ResurrectLastBuffer(gfx::Size(10, 10), GetParam());
-  ASSERT_NE(nullptr, resurrected.get());
-  ASSERT_EQ(original_mapped_size, resurrected->mapped_size());
-  resurrected_memory = reinterpret_cast<uint8_t*>(resurrected->data());
-  for (size_t i = 0; i < original_mapped_size; ++i)
-    EXPECT_EQ(0xbc, resurrected_memory[i]) << "Mismatch at byte offset: " << i;
-}
-
-// Tests that a buffer cannot be resurrected if its properties do not match.
-TEST_P(VideoCaptureBufferPoolTest, DoesNotResurrectIfPropertiesNotMatched) {
-  ExpectDroppedId(media::VideoCaptureBufferPool::kInvalidId);
-
-  // Reserve a 10x10 buffer, fill it with 0xcd values, and release it.
-  std::unique_ptr<Buffer> original =
-      ReserveBuffer(gfx::Size(10, 10), GetParam());
-  ASSERT_NE(nullptr, original.get());
-  const size_t original_mapped_size = original->mapped_size();
-  memset(original->data(), 0xcd, original_mapped_size);
-  original.reset();
-
-  // Expect that the buffer cannot be resurrected if the dimensions do not
-  // match.
-  std::unique_ptr<Buffer> resurrected =
-      ResurrectLastBuffer(gfx::Size(8, 8), GetParam());
-  ASSERT_EQ(nullptr, resurrected.get());
-
-  // Expect that the buffer cannot be resurrected if the pixel format does not
-  // match.
-  media::VideoPixelFormat altered_format = GetParam();
-  altered_format =
-      (altered_format == media::PIXEL_FORMAT_I420 ? media::PIXEL_FORMAT_ARGB
-                                                  : media::PIXEL_FORMAT_I420);
-  resurrected = ResurrectLastBuffer(gfx::Size(10, 10), altered_format);
-  ASSERT_EQ(nullptr, resurrected.get());
-
-  // Finally, check that the buffer CAN be resurrected if all properties match.
-  resurrected = ResurrectLastBuffer(gfx::Size(10, 10), GetParam());
-  ASSERT_NE(nullptr, resurrected.get());
-  ASSERT_EQ(original_mapped_size, resurrected->mapped_size());
-  uint8_t* resurrected_memory = reinterpret_cast<uint8_t*>(resurrected->data());
-  for (size_t i = 0; i < original_mapped_size; ++i)
-    EXPECT_EQ(0xcd, resurrected_memory[i]) << "Mismatch at byte offset: " << i;
-}
-
-// Tests that the buffers are managed by the pool such that the last-released
-// buffer is kept around as long as possible (for successful resurrection).
-TEST_P(VideoCaptureBufferPoolTest, AvoidsClobberingForResurrectingLastBuffer) {
-  ExpectDroppedId(media::VideoCaptureBufferPool::kInvalidId);
-
-  // Reserve a 10x10 buffer, fill it with 0xde values, and release it.
-  std::unique_ptr<Buffer> original =
-      ReserveBuffer(gfx::Size(10, 10), GetParam());
-  ASSERT_NE(nullptr, original.get());
-  const size_t original_mapped_size = original->mapped_size();
-  memset(original->data(), 0xde, original_mapped_size);
-  original.reset();
-
-  // Reserve all but one of the pool's buffers.
-  std::vector<std::unique_ptr<Buffer>> held_buffers;
-  for (int i = 0; i < kTestBufferPoolSize - 1; ++i) {
-    held_buffers.push_back(ReserveBuffer(gfx::Size(10, 10), GetParam()));
-    ASSERT_NE(nullptr, held_buffers.back().get());
-  }
-
-  // Now, attempt to resurrect the original buffer.  This should succeed.
-  std::unique_ptr<Buffer> resurrected =
-      ResurrectLastBuffer(gfx::Size(10, 10), GetParam());
-  ASSERT_NE(nullptr, resurrected.get());
-  ASSERT_EQ(original_mapped_size, resurrected->mapped_size());
-  uint8_t* resurrected_memory = reinterpret_cast<uint8_t*>(resurrected->data());
-  for (size_t i = 0; i < original_mapped_size; ++i)
-    EXPECT_EQ(0xde, resurrected_memory[i]) << "Mismatch at byte offset: " << i;
-  resurrected.reset();
-
-  // Reserve the final buffer in the pool, and then confirm resurrection does
-  // not succeed.
-  held_buffers.push_back(ReserveBuffer(gfx::Size(10, 10), GetParam()));
-  ASSERT_NE(nullptr, held_buffers.back().get());
-  resurrected = ResurrectLastBuffer(gfx::Size(10, 10), GetParam());
-  ASSERT_EQ(nullptr, resurrected.get());
-}
-
 INSTANTIATE_TEST_CASE_P(,
                         VideoCaptureBufferPoolTest,
                         testing::ValuesIn(kCapturePixelFormats));
diff --git a/content/browser/renderer_host/media/video_capture_controller_unittest.cc b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
index a5af5ca..8e58f6fc 100644
--- a/content/browser/renderer_host/media/video_capture_controller_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
@@ -380,25 +380,13 @@
                                            arbitrary_reference_time_,
                                            arbitrary_timestamp_);
 
-  // The buffer should be delivered to the clients in any order.
-  {
-    InSequence s;
-    EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_1, _));
-    EXPECT_CALL(*client_a_,
-                DoBufferReady(client_a_route_1, device_format.frame_size));
-  }
-  {
-    InSequence s;
-    EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_1, _));
-    EXPECT_CALL(*client_b_,
-                DoBufferReady(client_b_route_1, device_format.frame_size));
-  }
-  {
-    InSequence s;
-    EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_2, _));
-    EXPECT_CALL(*client_a_,
-                DoBufferReady(client_a_route_2, device_format.frame_size));
-  }
+  // The frame should be delivered to the clients in any order.
+  EXPECT_CALL(*client_a_,
+              DoBufferReady(client_a_route_1, device_format.frame_size));
+  EXPECT_CALL(*client_b_,
+              DoBufferReady(client_b_route_1, device_format.frame_size));
+  EXPECT_CALL(*client_a_,
+              DoBufferReady(client_a_route_2, device_format.frame_size));
   base::RunLoop().RunUntilIdle();
   Mock::VerifyAndClearExpectations(client_a_.get());
   Mock::VerifyAndClearExpectations(client_b_.get());
@@ -430,24 +418,24 @@
                    .is_valid());
 
   // The new client needs to be notified of the creation of |kPoolSize| buffers;
-  // the old clients only |kPoolSize - 2|.
+  // the old clients only |kPoolSize - 1|.
   EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_2, _))
       .Times(kPoolSize);
   EXPECT_CALL(*client_b_,
               DoBufferReady(client_b_route_2, device_format.frame_size))
       .Times(kPoolSize);
   EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_1, _))
-      .Times(kPoolSize - 2);
+      .Times(kPoolSize - 1);
   EXPECT_CALL(*client_a_,
               DoBufferReady(client_a_route_1, device_format.frame_size))
       .Times(kPoolSize);
   EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_2, _))
-      .Times(kPoolSize - 2);
+      .Times(kPoolSize - 1);
   EXPECT_CALL(*client_a_,
               DoBufferReady(client_a_route_2, device_format.frame_size))
       .Times(kPoolSize);
   EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_1, _))
-      .Times(kPoolSize - 2);
+      .Times(kPoolSize - 1);
   EXPECT_CALL(*client_b_,
               DoBufferReady(client_b_route_1, device_format.frame_size))
       .Times(kPoolSize);
@@ -643,20 +631,12 @@
         .Times(1);
 
     // Device prepares and pushes a frame.
-    // For the first half of the frames we exercise ReserveOutputBuffer() while
-    // for the second half we exercise ResurrectLastOutputBuffer().
     // The frame is expected to arrive at |client_a_|.DoBufferReady(), which
     // automatically notifies |controller_| that it has finished consuming it.
     media::VideoCaptureDevice::Client::Buffer buffer;
-    if (frame_index < kTestFrameSequenceLength / 2) {
-      buffer = device_client_->ReserveOutputBuffer(
-          arbitrary_format.frame_size, arbitrary_format.pixel_format,
-          stub_frame_feedback_id);
-    } else {
-      buffer = device_client_->ResurrectLastOutputBuffer(
-          arbitrary_format.frame_size, arbitrary_format.pixel_format,
-          stub_frame_feedback_id);
-    }
+    buffer = device_client_->ReserveOutputBuffer(arbitrary_format.frame_size,
+                                                 arbitrary_format.pixel_format,
+                                                 stub_frame_feedback_id);
     ASSERT_TRUE(buffer.is_valid());
     device_client_->OnIncomingCapturedBuffer(
         std::move(buffer), arbitrary_format, arbitrary_reference_time_,
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 69d9000..2976f883 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -5527,7 +5527,8 @@
           events[0]->ToEvent()->Event()->web_event.get());
   // Check if scroll is caused when ctrl-scroll is generated from
   // mouse wheel event.
-  EXPECT_FALSE(WebInputEventTraits::CanCauseScroll(*wheel_event));
+  EXPECT_EQ(blink::WebMouseWheelEvent::EventAction::kPageZoom,
+            wheel_event->event_action);
 
   // Ack'ing the outstanding event should flush the pending event queue.
   events[0]->ToEvent()->CallCallback(INPUT_EVENT_ACK_STATE_CONSUMED);
@@ -5551,7 +5552,8 @@
   // mouse wheel event.
   wheel_event = static_cast<const WebMouseWheelEvent*>(
       events[1]->ToEvent()->Event()->web_event.get());
-  EXPECT_TRUE(WebInputEventTraits::CanCauseScroll(*wheel_event));
+  EXPECT_NE(blink::WebMouseWheelEvent::EventAction::kPageZoom,
+            wheel_event->event_action);
 
   events[1]->ToEvent()->CallCallback(INPUT_EVENT_ACK_STATE_CONSUMED);
 
@@ -5572,7 +5574,8 @@
   // from scroll event.
   wheel_event = static_cast<const WebMouseWheelEvent*>(
       events[1]->ToEvent()->Event()->web_event.get());
-  EXPECT_TRUE(WebInputEventTraits::CanCauseScroll(*wheel_event));
+  EXPECT_NE(blink::WebMouseWheelEvent::EventAction::kPageZoom,
+            wheel_event->event_action);
 }
 
 // Ensures that the mapping from ui::TouchEvent to blink::WebTouchEvent doesn't
diff --git a/content/browser/site_per_process_hit_test_browsertest.cc b/content/browser/site_per_process_hit_test_browsertest.cc
index 92776ea..11f71af 100644
--- a/content/browser/site_per_process_hit_test_browsertest.cc
+++ b/content/browser/site_per_process_hit_test_browsertest.cc
@@ -2172,32 +2172,31 @@
 // This test tests that browser process hittesting ignores frames with
 // pointer-events: none.
 IN_PROC_BROWSER_TEST_P(SitePerProcessHitTestBrowserTest,
-                       SurfaceHitTestPointerEventsNone) {
-  // TODO(sunxd): Fix pointer-events none for surface layer viz hit testing. See
-  // https://crbug.com/841358.
-  if (features::IsVizHitTestingSurfaceLayerEnabled()) {
-    LOG(INFO) << "Skipping test due to https://crbug.com/841358";
-    return;
-  }
+                       SurfaceHitTestPointerEventsNoneChanged) {
+  // In /2 hit testing, OOPIFs with pointer-events: none are ignored and no hit
+  // test data is submitted. To make sure we wait enough time until child frame
+  // fully loaded, we add a 1x1 pixel OOPIF for the test to track the process of
+  // /2 hit testing.
   GURL main_url(embedded_test_server()->GetURL(
       "/frame_tree/page_with_positioned_frame_pointer-events_none.html"));
   EXPECT_TRUE(NavigateToURL(shell(), main_url));
 
   // It is safe to obtain the root frame tree node here, as it doesn't change.
   FrameTreeNode* root = web_contents()->GetFrameTree()->root();
-  ASSERT_EQ(1U, root->child_count());
+  ASSERT_EQ(2U, root->child_count());
 
-  FrameTreeNode* child_node = root->child_at(0);
-  GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html"));
-  EXPECT_EQ(site_url, child_node->current_url());
+  FrameTreeNode* child_node1 = root->child_at(0);
+  FrameTreeNode* child_node2 = root->child_at(1);
+  GURL site_url(embedded_test_server()->GetURL("bar.com", "/title1.html"));
+  EXPECT_EQ(site_url, child_node2->current_url());
   EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
-            child_node->current_frame_host()->GetSiteInstance());
+            child_node2->current_frame_host()->GetSiteInstance());
 
   // Create listeners for mouse events.
   RenderWidgetHostMouseEventMonitor main_frame_monitor(
       root->current_frame_host()->GetRenderWidgetHost());
   RenderWidgetHostMouseEventMonitor child_frame_monitor(
-      child_node->current_frame_host()->GetRenderWidgetHost());
+      child_node1->current_frame_host()->GetRenderWidgetHost());
 
   RenderWidgetHostInputEventRouter* router =
       web_contents()->GetInputEventRouter();
@@ -2205,9 +2204,9 @@
   RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>(
       root->current_frame_host()->GetRenderWidgetHost()->GetView());
 
-  WaitForHitTestDataOrChildSurfaceReady(child_node->current_frame_host());
+  WaitForHitTestDataOrChildSurfaceReady(child_node2->current_frame_host());
 
-  // Target input event to child frame.
+  // Target input event to child1 frame.
   blink::WebMouseEvent child_event(
       blink::WebInputEvent::kMouseDown, blink::WebInputEvent::kNoModifiers,
       blink::WebInputEvent::GetStaticTimeStampForTests());
@@ -2225,6 +2224,43 @@
   EXPECT_NEAR(75, main_frame_monitor.event().PositionInWidget().x, 2);
   EXPECT_NEAR(75, main_frame_monitor.event().PositionInWidget().y, 2);
   EXPECT_FALSE(child_frame_monitor.EventWasReceived());
+
+  // Surface hit test can only learn about pointer-events changes when
+  // submitting compositing frame, so we disable the second half of the test for
+  // surface hit test.
+  if (!features::IsVizHitTestingEnabled())
+    return;
+
+  // Remove pointer-events: none property from iframe, also remove child2 to
+  // properly notify the observer the update.
+  // Wait for the confirmation of the deletion so that surface hit test is aware
+  // of the change of pointer-events property. When viz hit testing is enabled,
+  // we do not need to wait.
+  EXPECT_TRUE(ExecuteScript(web_contents(),
+                            "document.getElementsByTagName('iframe')[0].style."
+                            "pointerEvents = 'auto';\n"));
+
+  ASSERT_EQ(2U, root->child_count());
+
+  {
+    MainThreadFrameObserver observer(
+        root->current_frame_host()->GetRenderWidgetHost());
+    observer.Wait();
+  }
+
+  WaitForHitTestDataOrChildSurfaceReady(child_node1->current_frame_host());
+  WaitForHitTestDataOrChildSurfaceReady(child_node2->current_frame_host());
+  main_frame_monitor.ResetEventReceived();
+  child_frame_monitor.ResetEventReceived();
+  InputEventAckWaiter child_waiter(
+      child_node1->current_frame_host()->GetRenderWidgetHost(),
+      blink::WebInputEvent::kMouseDown);
+  router->RouteMouseEvent(root_view, &child_event, ui::LatencyInfo());
+  child_waiter.Wait();
+
+  EXPECT_TRUE(child_frame_monitor.EventWasReceived());
+  EXPECT_NEAR(23, child_frame_monitor.event().PositionInWidget().x, 2);
+  EXPECT_NEAR(23, child_frame_monitor.event().PositionInWidget().y, 2);
 }
 
 // Verify that an event is properly retargeted to the main frame when an
@@ -4881,7 +4917,8 @@
  protected:
   // Load the page |host_name| and retrieve the hit test data from HitTestQuery.
   std::vector<viz::AggregatedHitTestRegion> SetupAndGetHitTestData(
-      const std::string& host_name) {
+      const std::string& host_name,
+      unsigned skipped_child = -1) {
     GURL main_url(embedded_test_server()->GetURL(host_name));
     EXPECT_TRUE(NavigateToURL(shell(), main_url));
 
@@ -4894,8 +4931,12 @@
             root->current_frame_host()->GetRenderWidgetHost()->GetView());
 
     for (unsigned i = 0; i < root->child_count(); i++) {
-      WaitForHitTestDataOrChildSurfaceReady(
-          root->child_at(i)->current_frame_host());
+      // Child with pointer-events: none property will never submit a hit test
+      // region in /2 hit testing.
+      if (i != skipped_child) {
+        WaitForHitTestDataOrChildSurfaceReady(
+            root->child_at(i)->current_frame_host());
+      }
     }
 
     HitTestRegionObserver observer(rwhv_root->GetRootFrameSinkId());
@@ -5203,6 +5244,69 @@
   EXPECT_EQ(kSlowHitTestFlags, hit_test_data[2].flags);
 }
 
+IN_PROC_BROWSER_TEST_P(SitePerProcessHitTestDataGenerationBrowserTest,
+                       PointerEventsNoneOOPIF) {
+  if (!features::IsVizHitTestingSurfaceLayerEnabled())
+    return;
+  auto hit_test_data = SetupAndGetHitTestData(
+      "/frame_tree/page_with_positioned_frame_pointer-events_none.html", 0);
+  float device_scale_factor = current_device_scale_factor();
+  gfx::Transform expected_transform;
+  gfx::Rect expected_region = gfx::ScaleToEnclosingRect(
+      gfx::Rect(1, 1), device_scale_factor, device_scale_factor);
+  expected_transform.Translate(-2 * device_scale_factor,
+                               -2 * device_scale_factor);
+
+  // We should not submit hit test region for iframes with pointer-events: none
+  // in /2 hit testing.
+  DCHECK(hit_test_data.size() == 3);
+  EXPECT_EQ(expected_region.ToString(), hit_test_data[2].rect.ToString());
+  EXPECT_TRUE(
+      expected_transform.ApproximatelyEqual(hit_test_data[2].transform()));
+  EXPECT_EQ(kFastHitTestFlags, hit_test_data[2].flags);
+
+  // Check that an update on the css property can trigger an update in submitted
+  // hit test data.
+  EXPECT_TRUE(ExecuteScript(web_contents(),
+                            "document.getElementsByTagName('iframe')[0].style."
+                            "pointerEvents = 'auto';\n"));
+
+  FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
+                            ->GetFrameTree()
+                            ->root();
+
+  ASSERT_EQ(2U, root->child_count());
+  RenderWidgetHostViewBase* rwhv_root = static_cast<RenderWidgetHostViewBase*>(
+      root->current_frame_host()->GetRenderWidgetHost()->GetView());
+
+  {
+    MainThreadFrameObserver observer(
+        root->current_frame_host()->GetRenderWidgetHost());
+    observer.Wait();
+  }
+
+  HitTestRegionObserver observer(rwhv_root->GetRootFrameSinkId());
+  observer.WaitForHitTestData();
+  hit_test_data = observer.GetHitTestData();
+
+  gfx::Rect expected_region2 = gfx::ScaleToEnclosingRect(
+      gfx::Rect(100, 100), device_scale_factor, device_scale_factor);
+  gfx::Transform expected_transform2;
+  expected_transform2.Translate(-52 * device_scale_factor,
+                                -52 * device_scale_factor);
+
+  DCHECK(hit_test_data.size() == 4);
+  EXPECT_EQ(expected_region.ToString(), hit_test_data[2].rect.ToString());
+  EXPECT_TRUE(
+      expected_transform.ApproximatelyEqual(hit_test_data[2].transform()));
+  EXPECT_EQ(kFastHitTestFlags, hit_test_data[2].flags);
+
+  EXPECT_EQ(expected_region2.ToString(), hit_test_data[3].rect.ToString());
+  EXPECT_TRUE(
+      expected_transform2.ApproximatelyEqual(hit_test_data[3].transform()));
+  EXPECT_EQ(kFastHitTestFlags, hit_test_data[3].flags);
+}
+
 static const int kHitTestOption[] = {0, 1, 2};
 static const float kOneScale[] = {1.f};
 
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 90cad1d..0f553df 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -2190,7 +2190,7 @@
   //      (i.e. control+tab) then the OS's buffered scroll events will come in
   //      with control key set which isn't what the user wants
   if (delegate_ && event.wheel_ticks_y &&
-      !ui::WebInputEventTraits::CanCauseScroll(event)) {
+      event.event_action == blink::WebMouseWheelEvent::EventAction::kPageZoom) {
     // Count only integer cumulative scrolls as zoom events; this handles
     // smooth scroll and regular scroll device behavior.
     zoom_scroll_remainder_ += event.wheel_ticks_y;
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
index 2be103b..acd6f52 100644
--- a/content/common/BUILD.gn
+++ b/content/common/BUILD.gn
@@ -172,6 +172,8 @@
     "input/touch_action_optional_struct_traits.h",
     "input/touch_event_stream_validator.cc",
     "input/touch_event_stream_validator.h",
+    "input/web_mouse_wheel_event_traits.cc",
+    "input/web_mouse_wheel_event_traits.h",
     "input/web_touch_event_traits.cc",
     "input/web_touch_event_traits.h",
     "input_messages.h",
diff --git a/content/common/input/input_event_struct_traits.cc b/content/common/input/input_event_struct_traits.cc
index c67a6848..1603ef6 100644
--- a/content/common/input/input_event_struct_traits.cc
+++ b/content/common/input/input_event_struct_traits.cc
@@ -8,6 +8,7 @@
 #include "content/common/input_messages.h"
 #include "mojo/public/cpp/base/time_mojom_traits.h"
 #include "third_party/blink/public/platform/web_keyboard_event.h"
+#include "third_party/blink/public/platform/web_mouse_wheel_event.h"
 #include "ui/latency/mojo/latency_info_struct_traits.h"
 
 namespace mojo {
@@ -330,6 +331,9 @@
         wheel_event->has_precise_scrolling_deltas =
             wheel_data->has_precise_scrolling_deltas;
         wheel_event->dispatch_type = wheel_data->cancelable;
+        wheel_event->event_action =
+            static_cast<blink::WebMouseWheelEvent::EventAction>(
+                wheel_data->event_action);
       }
     }
 
@@ -381,7 +385,8 @@
         wheel_event->acceleration_ratio_y, wheel_event->resending_plugin_id,
         wheel_event->phase, wheel_event->momentum_phase,
         wheel_event->scroll_by_page, wheel_event->has_precise_scrolling_deltas,
-        wheel_event->dispatch_type);
+        wheel_event->dispatch_type,
+        static_cast<uint8_t>(wheel_event->event_action));
   }
 
   return PointerDataFromPointerProperties(
diff --git a/content/common/input/input_handler.mojom b/content/common/input/input_handler.mojom
index 1dd2383..235ea92 100644
--- a/content/common/input/input_handler.mojom
+++ b/content/common/input/input_handler.mojom
@@ -65,6 +65,7 @@
   bool scroll_by_page;
   bool has_precise_scrolling_deltas;
   Cancelability cancelable;
+  uint8 event_action;
 };
 
 struct MouseData {
diff --git a/content/common/input/synthetic_web_input_event_builders.cc b/content/common/input/synthetic_web_input_event_builders.cc
index e4b9aad..4961160 100644
--- a/content/common/input/synthetic_web_input_event_builders.cc
+++ b/content/common/input/synthetic_web_input_event_builders.cc
@@ -5,6 +5,7 @@
 #include "content/common/input/synthetic_web_input_event_builders.h"
 
 #include "base/logging.h"
+#include "content/common/input/web_mouse_wheel_event_traits.h"
 #include "content/common/input/web_touch_event_traits.h"
 #include "ui/events/base_event_utils.h"
 #include "ui/events/event.h"
@@ -47,6 +48,7 @@
   WebMouseWheelEvent result(WebInputEvent::kMouseWheel,
                             WebInputEvent::kNoModifiers, ui::EventTimeForNow());
   result.phase = phase;
+  result.event_action = WebMouseWheelEventTraits::GetEventAction(result);
   return result;
 }
 
@@ -83,6 +85,7 @@
     result.wheel_ticks_y = dy > 0.0f ? 1.0f : -1.0f;
   result.has_precise_scrolling_deltas = precise;
   result.scroll_by_page = scroll_by_page;
+  result.event_action = WebMouseWheelEventTraits::GetEventAction(result);
   return result;
 }
 
diff --git a/content/common/input/web_mouse_wheel_event_traits.cc b/content/common/input/web_mouse_wheel_event_traits.cc
new file mode 100644
index 0000000..372ae75
--- /dev/null
+++ b/content/common/input/web_mouse_wheel_event_traits.cc
@@ -0,0 +1,40 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/common/input/web_mouse_wheel_event_traits.h"
+
+#include "third_party/blink/public/platform/web_input_event.h"
+
+namespace content {
+
+using blink::WebInputEvent;
+
+// static
+blink::WebMouseWheelEvent::EventAction WebMouseWheelEventTraits::GetEventAction(
+    const blink::WebMouseWheelEvent& event) {
+#if defined(USE_AURA)
+  // Scroll events generated from the mouse wheel when the control key is held
+  // don't trigger scrolling. Instead, they may cause zooming.
+  if (!event.has_precise_scrolling_deltas &&
+      (event.GetModifiers() & WebInputEvent::kControlKey)) {
+    return blink::WebMouseWheelEvent::EventAction::kPageZoom;
+  }
+
+  if (event.delta_x == 0 && (event.GetModifiers() & WebInputEvent::kShiftKey))
+    return blink::WebMouseWheelEvent::EventAction::kScrollHorizontal;
+#endif
+  if (event.rails_mode == WebInputEvent::kRailsModeHorizontal ||
+      (event.delta_x != 0 && event.delta_y == 0)) {
+    return blink::WebMouseWheelEvent::EventAction::kScrollHorizontal;
+  }
+
+  if (event.rails_mode == WebInputEvent::kRailsModeVertical ||
+      (event.delta_x == 0 && event.delta_y != 0)) {
+    return blink::WebMouseWheelEvent::EventAction::kScrollVertical;
+  }
+
+  return blink::WebMouseWheelEvent::EventAction::kScroll;
+}
+
+}  // namespace content
diff --git a/content/common/input/web_mouse_wheel_event_traits.h b/content/common/input/web_mouse_wheel_event_traits.h
new file mode 100644
index 0000000..171ea24
--- /dev/null
+++ b/content/common/input/web_mouse_wheel_event_traits.h
@@ -0,0 +1,28 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_COMMON_INPUT_WEB_MOUSE_WHEEL_EVENT_TRAITS_H_
+#define CONTENT_COMMON_INPUT_WEB_MOUSE_WHEEL_EVENT_TRAITS_H_
+
+#include "base/macros.h"
+#include "content/common/content_export.h"
+#include "third_party/blink/public/platform/web_mouse_wheel_event.h"
+
+namespace content {
+
+// Utility class for performing operations on and with WebMouseWheelEvent.
+class CONTENT_EXPORT WebMouseWheelEventTraits {
+ public:
+  // Returns the *platform specific* event action corresponding with the wheel
+  // event.
+  static blink::WebMouseWheelEvent::EventAction GetEventAction(
+      const blink::WebMouseWheelEvent& event);
+
+ private:
+  DISALLOW_IMPLICIT_CONSTRUCTORS(WebMouseWheelEventTraits);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_COMMON_INPUT_WEB_MOUSE_WHEEL_EVENT_TRAITS_H_
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/InterstitialPageTest.java b/content/public/android/javatests/src/org/chromium/content/browser/InterstitialPageTest.java
index 9e67cf0..439897dd 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/InterstitialPageTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/InterstitialPageTest.java
@@ -15,7 +15,6 @@
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.BaseJUnit4ClassRunner;
 import org.chromium.base.test.util.Feature;
-import org.chromium.base.test.util.FlakyTest;
 import org.chromium.base.test.util.RetryOnFailure;
 import org.chromium.base.test.util.UrlUtils;
 import org.chromium.content_public.browser.WebContents;
@@ -92,7 +91,6 @@
     @LargeTest
     @Feature({"Navigation"})
     @RetryOnFailure
-    @FlakyTest(message = "crbug.com/879757")
     public void testCloseInterstitial() throws ExecutionException {
         final String proceedCommand = "PROCEED";
         final String htmlContent = "<html>"
diff --git a/content/public/browser/guest_host.h b/content/public/browser/guest_host.h
index c955e46..23b4fdf5 100644
--- a/content/public/browser/guest_host.h
+++ b/content/public/browser/guest_host.h
@@ -9,6 +9,8 @@
 
 namespace content {
 
+class WebContents;
+
 // A GuestHost is the content API for a guest WebContents.
 // Guests are top-level frames that can be embedded within other pages.
 // The content module manages routing of input events and compositing, but all
@@ -30,6 +32,19 @@
 
   // Called when the GuestHost is about to be destroyed.
   virtual void WillDestroy() = 0;
+
+  // A cue to start the browser side attaching. When a GuestView is rendered
+  // inside a plugin element's frame attaching the guest WebContents to the
+  // |embedder_web_contents| is initiated right after creating the guest on the
+  // browser side. |instance_id| is used to uniquely identify the internal
+  // instance of GuestHost inside content layer ad |is_full_page_plugin| is
+  // notifies the content layer whether or not the MimeHandlerView is embedded
+  // (|is_full_page_plugin| is set to true if a frame (i.e., main frame) is
+  // navigated to a MimeHandlerView type and therefore the whole page is
+  // dedicated to rendering its content).
+  virtual void BeginAttach(WebContents* embedder_web_contents,
+                           int instance_id,
+                           bool is_full_page_plugin) = 0;
 };
 
 }  // namespace content
diff --git a/content/public/renderer/content_renderer_client.cc b/content/public/renderer/content_renderer_client.cc
index 4e50a9ab..dbcd59b 100644
--- a/content/public/renderer/content_renderer_client.cc
+++ b/content/public/renderer/content_renderer_client.cc
@@ -24,7 +24,7 @@
   return nullptr;
 }
 
-bool ContentRendererClient::IsPluginHandledByMimeHandlerView(
+bool ContentRendererClient::MaybeCreateMimeHandlerView(
     RenderFrame* embedder_frame,
     const blink::WebElement& owner_element,
     const GURL& original_url,
diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h
index 3e48084..c148e923 100644
--- a/content/public/renderer/content_renderer_client.h
+++ b/content/public/renderer/content_renderer_client.h
@@ -90,7 +90,7 @@
 
   // Returns true if the embedder renders the contents of the |plugin_element|
   // in a cross-process frame using MimeHandlerView.
-  virtual bool IsPluginHandledByMimeHandlerView(
+  virtual bool MaybeCreateMimeHandlerView(
       RenderFrame* embedder_frame,
       const blink::WebElement& plugin_element,
       const GURL& original_url,
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
index 963702e..aea320e1 100644
--- a/content/renderer/browser_plugin/browser_plugin.cc
+++ b/content/renderer/browser_plugin/browser_plugin.cc
@@ -881,4 +881,8 @@
   return GetContentClient()->renderer()->GetSadWebViewBitmap();
 }
 
+bool BrowserPlugin::HasPointerEventsNone() {
+  return false;
+}
+
 }  // namespace content
diff --git a/content/renderer/browser_plugin/browser_plugin.h b/content/renderer/browser_plugin/browser_plugin.h
index b3091678..5896a9d 100644
--- a/content/renderer/browser_plugin/browser_plugin.h
+++ b/content/renderer/browser_plugin/browser_plugin.h
@@ -229,6 +229,8 @@
                 bool prevent_contents_opaque_changes) override;
   SkBitmap* GetSadPageBitmap() override;
 
+  bool HasPointerEventsNone() override;
+
   // This indicates whether this BrowserPlugin has been attached to a
   // WebContents and is ready to receive IPCs.
   bool attached_;
diff --git a/content/renderer/child_frame_compositing_helper.cc b/content/renderer/child_frame_compositing_helper.cc
index ba7454e..719412f 100644
--- a/content/renderer/child_frame_compositing_helper.cc
+++ b/content/renderer/child_frame_compositing_helper.cc
@@ -82,6 +82,8 @@
   surface_layer_ = cc::SurfaceLayer::Create();
   surface_layer_->SetMasksToBounds(true);
   surface_layer_->SetSurfaceHitTestable(true);
+  surface_layer_->SetHasPointerEventsNone(
+      child_frame_compositor_->HasPointerEventsNone());
   surface_layer_->SetBackgroundColor(SK_ColorTRANSPARENT);
 
   surface_layer_->SetPrimarySurfaceId(surface_id, deadline);
@@ -118,4 +120,12 @@
     layer->SetIsDrawable(visible);
 }
 
+void ChildFrameCompositingHelper::SetHasPointerEventsNone(
+    bool has_pointer_events_none) {
+  cc::SurfaceLayer* layer =
+      static_cast<cc::SurfaceLayer*>(child_frame_compositor_->GetLayer());
+  if (layer)
+    layer->SetHasPointerEventsNone(has_pointer_events_none);
+}
+
 }  // namespace content
diff --git a/content/renderer/child_frame_compositing_helper.h b/content/renderer/child_frame_compositing_helper.h
index 7a05417..23cf9f76 100644
--- a/content/renderer/child_frame_compositing_helper.h
+++ b/content/renderer/child_frame_compositing_helper.h
@@ -41,6 +41,7 @@
   void SetFallbackSurfaceId(const viz::SurfaceId& surface_id,
                             const gfx::Size& frame_size_in_dip);
   void UpdateVisibility(bool visible);
+  void SetHasPointerEventsNone(bool has_pointer_events_none);
   void ChildFrameGone(const gfx::Size& frame_size_in_dip,
                       float device_scale_factor);
 
diff --git a/content/renderer/child_frame_compositing_helper_unittest.cc b/content/renderer/child_frame_compositing_helper_unittest.cc
index d2c3e49..a42db10 100644
--- a/content/renderer/child_frame_compositing_helper_unittest.cc
+++ b/content/renderer/child_frame_compositing_helper_unittest.cc
@@ -27,6 +27,8 @@
     layer_ = std::move(layer);
   }
 
+  bool HasPointerEventsNone() override { return false; }
+
   SkBitmap* GetSadPageBitmap() override { return &sad_page_bitmap_; }
 
  private:
diff --git a/content/renderer/child_frame_compositor.h b/content/renderer/child_frame_compositor.h
index f93b026..a2a22c5 100644
--- a/content/renderer/child_frame_compositor.h
+++ b/content/renderer/child_frame_compositor.h
@@ -24,6 +24,8 @@
 
   // Returns a sad page bitmap used when the child frame has crashed.
   virtual SkBitmap* GetSadPageBitmap() = 0;
+
+  virtual bool HasPointerEventsNone() = 0;
 };
 
 }  // namespace content
diff --git a/content/renderer/gpu/layer_tree_view.cc b/content/renderer/gpu/layer_tree_view.cc
index 728c43f2..b471c15 100644
--- a/content/renderer/gpu/layer_tree_view.cc
+++ b/content/renderer/gpu/layer_tree_view.cc
@@ -479,8 +479,7 @@
     // frame, but the compositor does not support this. In this case, we only
     // run blink's lifecycle updates.
     delegate_->BeginMainFrame(base::TimeTicks::Now());
-    delegate_->UpdateVisualState(
-        cc::LayerTreeHostClient::VisualStateUpdate::kAll);
+    delegate_->UpdateVisualState();
     return;
   }
 
@@ -592,8 +591,8 @@
   web_main_thread_scheduler_->BeginMainFrameNotExpectedUntil(time);
 }
 
-void LayerTreeView::UpdateLayerTreeHost(VisualStateUpdate requested_update) {
-  delegate_->UpdateVisualState(requested_update);
+void LayerTreeView::UpdateLayerTreeHost() {
+  delegate_->UpdateVisualState();
 }
 
 void LayerTreeView::ApplyViewportDeltas(
diff --git a/content/renderer/gpu/layer_tree_view.h b/content/renderer/gpu/layer_tree_view.h
index 67caa40..644d239 100644
--- a/content/renderer/gpu/layer_tree_view.h
+++ b/content/renderer/gpu/layer_tree_view.h
@@ -178,7 +178,7 @@
   void BeginMainFrame(const viz::BeginFrameArgs& args) override;
   void BeginMainFrameNotExpectedSoon() override;
   void BeginMainFrameNotExpectedUntil(base::TimeTicks time) override;
-  void UpdateLayerTreeHost(VisualStateUpdate requested_update) override;
+  void UpdateLayerTreeHost() override;
   void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta,
                            const gfx::Vector2dF& outer_delta,
                            const gfx::Vector2dF& elastic_overscroll_delta,
diff --git a/content/renderer/gpu/layer_tree_view_delegate.h b/content/renderer/gpu/layer_tree_view_delegate.h
index 51ab69a..0f13c9d 100644
--- a/content/renderer/gpu/layer_tree_view_delegate.h
+++ b/content/renderer/gpu/layer_tree_view_delegate.h
@@ -78,8 +78,7 @@
 
   // Requests a visual frame-based update to the state of the delegate if there
   // an update available.
-  using VisualStateUpdate = cc::LayerTreeHostClient::VisualStateUpdate;
-  virtual void UpdateVisualState(VisualStateUpdate requested_update) = 0;
+  virtual void UpdateVisualState() = 0;
 
   // Indicates that the compositor is about to begin a frame. This is primarily
   // to signal to flow control mechanisms that a frame is beginning, not to
diff --git a/content/renderer/media/stream/media_stream_video_source.cc b/content/renderer/media/stream/media_stream_video_source.cc
index 9ea6162b..74ba3b0 100644
--- a/content/renderer/media/stream/media_stream_video_source.cc
+++ b/content/renderer/media/stream/media_stream_video_source.cc
@@ -15,7 +15,6 @@
 #include "base/macros.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/threading/sequenced_task_runner_handle.h"
-#include "base/trace_event/trace_event.h"
 #include "content/child/child_process.h"
 #include "content/public/common/content_features.h"
 #include "content/renderer/media/stream/media_stream_constraints_util_video_device.h"
diff --git a/content/renderer/media/stream/webmediaplayer_ms.cc b/content/renderer/media/stream/webmediaplayer_ms.cc
index 45c8d7e..6db020d7 100644
--- a/content/renderer/media/stream/webmediaplayer_ms.cc
+++ b/content/renderer/media/stream/webmediaplayer_ms.cc
@@ -174,13 +174,17 @@
   void EnqueueFrame(const scoped_refptr<media::VideoFrame>& frame) {
     DCHECK(io_thread_checker_.CalledOnValidThread());
 
-    base::TimeTicks render_time;
-    if (frame->metadata()->GetTimeTicks(
-            media::VideoFrameMetadata::REFERENCE_TIME, &render_time)) {
-      TRACE_EVENT1("media", "EnqueueFrame", "Ideal Render Instant",
-                   render_time.ToInternalValue());
-    } else {
-      TRACE_EVENT0("media", "EnqueueFrame");
+    bool tracing_enabled = false;
+    TRACE_EVENT_CATEGORY_GROUP_ENABLED("media", &tracing_enabled);
+    if (tracing_enabled) {
+      base::TimeTicks render_time;
+      if (frame->metadata()->GetTimeTicks(
+              media::VideoFrameMetadata::REFERENCE_TIME, &render_time)) {
+        TRACE_EVENT1("media", "EnqueueFrame", "Ideal Render Instant",
+                     render_time.ToInternalValue());
+      } else {
+        TRACE_EVENT0("media", "EnqueueFrame");
+      }
     }
 
     const bool is_opaque = media::IsOpaque(frame->format());
diff --git a/content/renderer/media/stream/webmediaplayer_ms_compositor.cc b/content/renderer/media/stream/webmediaplayer_ms_compositor.cc
index 02b2d8d..ee24b71 100644
--- a/content/renderer/media/stream/webmediaplayer_ms_compositor.cc
+++ b/content/renderer/media/stream/webmediaplayer_ms_compositor.cc
@@ -280,22 +280,27 @@
   if (stopped_)
     return false;
 
-  base::TimeTicks render_time;
-
   base::AutoLock auto_lock(current_frame_lock_);
 
   if (rendering_frame_buffer_)
     RenderUsingAlgorithm(deadline_min, deadline_max);
 
-  if (!current_frame_->metadata()->GetTimeTicks(
-          media::VideoFrameMetadata::REFERENCE_TIME, &render_time)) {
-    DCHECK(!rendering_frame_buffer_)
-        << "VideoFrames need REFERENCE_TIME to use "
-           "sophisticated video rendering algorithm.";
+  bool tracing_or_dcheck_enabled = false;
+  TRACE_EVENT_CATEGORY_GROUP_ENABLED("media", &tracing_or_dcheck_enabled);
+#if DCHECK_IS_ON()
+  tracing_or_dcheck_enabled = true;
+#endif  // DCHECK_IS_ON()
+  if (tracing_or_dcheck_enabled) {
+    base::TimeTicks render_time;
+    if (!current_frame_->metadata()->GetTimeTicks(
+            media::VideoFrameMetadata::REFERENCE_TIME, &render_time)) {
+      DCHECK(!rendering_frame_buffer_)
+          << "VideoFrames need REFERENCE_TIME to use "
+             "sophisticated video rendering algorithm.";
+    }
+    TRACE_EVENT_END2("media", "UpdateCurrentFrame", "Ideal Render Instant",
+                     render_time.ToInternalValue(), "Serial", serial_);
   }
-
-  TRACE_EVENT_END2("media", "UpdateCurrentFrame", "Ideal Render Instant",
-                   render_time.ToInternalValue(), "Serial", serial_);
   return !current_frame_rendered_;
 }
 
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index ce7d96f..7fd44e3 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -3538,7 +3538,7 @@
   // externally.
   int32_t tentative_element_instance_id =
       BrowserPluginManager::Get()->GetNextInstanceID();
-  return GetContentClient()->renderer()->IsPluginHandledByMimeHandlerView(
+  return GetContentClient()->renderer()->MaybeCreateMimeHandlerView(
       this, plugin_element, GURL(url), suggested_mime_type.Utf8(),
       tentative_element_instance_id);
 #else
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
index 954ea7f..16f9ce3 100644
--- a/content/renderer/render_frame_proxy.cc
+++ b/content/renderer/render_frame_proxy.cc
@@ -838,6 +838,10 @@
                                                          touch_action));
 }
 
+void RenderFrameProxy::PointerEventsChanged() {
+  compositing_helper_->SetHasPointerEventsNone(HasPointerEventsNone());
+}
+
 void RenderFrameProxy::UpdateRenderThrottlingStatus(bool is_throttled,
                                                     bool subtree_throttled) {
   Send(new FrameHostMsg_UpdateRenderThrottlingStatus(routing_id_, is_throttled,
@@ -906,6 +910,10 @@
   return GetContentClient()->renderer()->GetSadWebViewBitmap();
 }
 
+bool RenderFrameProxy::HasPointerEventsNone() {
+  return web_frame()->OOPIFHasPointerEventsNone();
+}
+
 uint32_t RenderFrameProxy::Print(const blink::WebRect& rect,
                                  cc::PaintCanvas* canvas) {
 #if BUILDFLAG(ENABLE_PRINTING)
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h
index 4715761b..d7d727cc 100644
--- a/content/renderer/render_frame_proxy.h
+++ b/content/renderer/render_frame_proxy.h
@@ -201,6 +201,7 @@
   void VisibilityChanged(bool visible) override;
   void SetIsInert(bool) override;
   void SetInheritedEffectiveTouchAction(cc::TouchAction) override;
+  void PointerEventsChanged() override;
   void UpdateRenderThrottlingStatus(bool is_throttled,
                                     bool subtree_throttled) override;
   void DidChangeOpener(blink::WebFrame* opener) override;
@@ -276,6 +277,7 @@
   void SetLayer(scoped_refptr<cc::Layer> layer,
                 bool prevent_contents_opaque_changes) override;
   SkBitmap* GetSadPageBitmap() override;
+  bool HasPointerEventsNone() override;
 
   const viz::LocalSurfaceId& GetLocalSurfaceId() const;
 
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index d3e5d79..ef073fc 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -1113,19 +1113,14 @@
   ScheduleAnimation();
 }
 
-void RenderWidget::UpdateVisualState(VisualStateUpdate requested_update) {
+void RenderWidget::UpdateVisualState() {
   if (!GetWebWidget())
     return;
 
-  bool pre_paint_only = requested_update == VisualStateUpdate::kPrePaint;
-  WebWidget::LifecycleUpdate lifecycle_update =
-      pre_paint_only ? WebWidget::LifecycleUpdate::kPrePaint
-                     : WebWidget::LifecycleUpdate::kAll;
-
-  GetWebWidget()->UpdateLifecycle(lifecycle_update);
+  GetWebWidget()->UpdateLifecycle(WebWidget::LifecycleUpdate::kAll);
   GetWebWidget()->SetSuppressFrameRequestsWorkaroundFor704763Only(false);
 
-  if (first_update_visual_state_after_hidden_ && !pre_paint_only) {
+  if (first_update_visual_state_after_hidden_) {
     RecordTimeToFirstActivePaint();
     first_update_visual_state_after_hidden_ = false;
   }
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index d937458..4f3d7e9 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -277,7 +277,7 @@
   void DidReceiveCompositorFrameAck() override;
   bool IsClosing() const override;
   void RequestScheduleAnimation() override;
-  void UpdateVisualState(VisualStateUpdate requested_update) override;
+  void UpdateVisualState() override;
   void WillBeginCompositorFrame() override;
   std::unique_ptr<cc::SwapPromise> RequestCopyOfOutputForLayoutTest(
       std::unique_ptr<viz::CopyOutputRequest> request) override;
diff --git a/content/shell/test_runner/event_sender.cc b/content/shell/test_runner/event_sender.cc
index 5de4022..29a1f85e 100644
--- a/content/shell/test_runner/event_sender.cc
+++ b/content/shell/test_runner/event_sender.cc
@@ -20,6 +20,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "content/common/input/web_mouse_wheel_event_traits.h"
 #include "content/shell/test_runner/mock_spell_check.h"
 #include "content/shell/test_runner/test_interfaces.h"
 #include "content/shell/test_runner/web_test_delegate.h"
@@ -2605,6 +2606,7 @@
     event.delta_x *= kScrollbarPixelsPerTick;
     event.delta_y *= kScrollbarPixelsPerTick;
   }
+  event.event_action = content::WebMouseWheelEventTraits::GetEventAction(event);
   return event;
 }
 
diff --git a/content/test/data/frame_tree/page_with_positioned_frame_pointer-events_none.html b/content/test/data/frame_tree/page_with_positioned_frame_pointer-events_none.html
index 2e429485..c181eb6 100644
--- a/content/test/data/frame_tree/page_with_positioned_frame_pointer-events_none.html
+++ b/content/test/data/frame_tree/page_with_positioned_frame_pointer-events_none.html
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
+<meta name="viewport" content="width=device-width, initial-scale=1">
 <style>
 iframe {
   position:absolute;
@@ -13,5 +14,6 @@
 <body>
 <iframe src="/cross-site/baz.com/title1.html"></iframe>
 This page contains a positioned cross-origin iframe.
+<iframe id="small" style="pointer-events: auto; width: 1px; height: 1px; top: 0px; left: 0px;" src="/cross-site/bar.com/title1.html"></iframe>
 </body>
 </html>
diff --git a/content/test/stub_layer_tree_view_delegate.h b/content/test/stub_layer_tree_view_delegate.h
index a51a8c8..65dc3b5 100644
--- a/content/test/stub_layer_tree_view_delegate.h
+++ b/content/test/stub_layer_tree_view_delegate.h
@@ -28,7 +28,7 @@
   void DidReceiveCompositorFrameAck() override {}
   bool IsClosing() const override;
   void RequestScheduleAnimation() override {}
-  void UpdateVisualState(VisualStateUpdate requested_update) override {}
+  void UpdateVisualState() override {}
   void WillBeginCompositorFrame() override {}
   std::unique_ptr<cc::SwapPromise> RequestCopyOfOutputForLayoutTest(
       std::unique_ptr<viz::CopyOutputRequest> request) override;
diff --git a/device/fido/strings/fido_strings_bn.xtb b/device/fido/strings/fido_strings_bn.xtb
index eca68d46..54f47c3 100644
--- a/device/fido/strings/fido_strings_bn.xtb
+++ b/device/fido/strings/fido_strings_bn.xtb
@@ -1,4 +1,5 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="bn">
+<translation id="6082592655150610743"><ph name="APP_NAME" />-এ আপনার পরিচয় যাচাই করুন</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/extensions/browser/guest_view/extensions_guest_view_message_filter.cc b/extensions/browser/guest_view/extensions_guest_view_message_filter.cc
index 3959628..21ecbf1 100644
--- a/extensions/browser/guest_view/extensions_guest_view_message_filter.cc
+++ b/extensions/browser/guest_view/extensions_guest_view_message_filter.cc
@@ -14,6 +14,7 @@
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/stream_info.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/common/mime_handler_view_mode.h"
 #include "extensions/browser/api/extensions_api_client.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.h"
@@ -24,6 +25,7 @@
 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h"
 #include "extensions/common/guest_view/extensions_guest_view_messages.h"
 #include "extensions/common/manifest_handlers/mime_types_handler.h"
+#include "ipc/ipc_message.h"
 #include "ipc/ipc_message_macros.h"
 
 using content::BrowserContext;
@@ -106,13 +108,15 @@
     const std::string& view_id,
     int32_t element_instance_id,
     const gfx::Size& element_size,
-    mime_handler::BeforeUnloadControlPtr before_unload_control) {
+    mime_handler::BeforeUnloadControlPtr before_unload_control,
+    int32_t plugin_frame_routing_id) {
   content::BrowserThread::PostTask(
       content::BrowserThread::UI, FROM_HERE,
       base::BindOnce(&ExtensionsGuestViewMessageFilter::
                          CreateMimeHandlerViewGuestOnUIThread,
                      this, render_frame_id, view_id, element_instance_id,
-                     element_size, before_unload_control.PassInterface()));
+                     element_size, before_unload_control.PassInterface(),
+                     plugin_frame_routing_id, false));
 }
 
 void ExtensionsGuestViewMessageFilter::CreateMimeHandlerViewGuestOnUIThread(
@@ -120,8 +124,12 @@
     const std::string& view_id,
     int element_instance_id,
     const gfx::Size& element_size,
-    mime_handler::BeforeUnloadControlPtrInfo before_unload_control) {
+    mime_handler::BeforeUnloadControlPtrInfo before_unload_control,
+    int32_t plugin_frame_routing_id,
+    bool is_full_page_plugin) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(content::MimeHandlerViewMode::UsesCrossProcessFrame() ||
+         plugin_frame_routing_id == MSG_ROUTING_NONE);
   auto* manager = GetOrCreateGuestViewManager();
 
   auto* rfh = RenderFrameHost::FromID(render_process_id_, render_frame_id);
@@ -132,7 +140,8 @@
   GuestViewManager::WebContentsCreatedCallback callback = base::BindOnce(
       &ExtensionsGuestViewMessageFilter::MimeHandlerViewGuestCreatedCallback,
       this, element_instance_id, render_process_id_, render_frame_id,
-      element_size, std::move(before_unload_control));
+      plugin_frame_routing_id, element_size, std::move(before_unload_control),
+      is_full_page_plugin);
 
   base::DictionaryValue create_params;
   create_params.SetString(mime_handler_view::kViewId, view_id);
@@ -170,7 +179,8 @@
     const GURL& original_url,
     int32_t element_instance_id,
     const gfx::Size& element_size,
-    content::mojom::TransferrableURLLoaderPtr transferrable_url_loader) {
+    content::mojom::TransferrableURLLoaderPtr transferrable_url_loader,
+    int32_t plugin_frame_routing_id) {
   if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
     content::BrowserThread::PostTask(
         content::BrowserThread::UI, FROM_HERE,
@@ -178,7 +188,8 @@
                            CreateEmbeddedMimeHandlerViewGuest,
                        this, render_frame_id, tab_id, original_url,
                        element_instance_id, element_size,
-                       base::Passed(&transferrable_url_loader)));
+                       base::Passed(&transferrable_url_loader),
+                       plugin_frame_routing_id));
     return;
   }
 
@@ -215,16 +226,19 @@
                   -1 /* frame_tree_node_id*/, render_process_id_,
                   render_frame_id);
 
-  CreateMimeHandlerViewGuestOnUIThread(
-      render_frame_id, view_id, element_instance_id, element_size, nullptr);
+  CreateMimeHandlerViewGuestOnUIThread(render_frame_id, view_id,
+                                       element_instance_id, element_size,
+                                       nullptr, plugin_frame_routing_id, false);
 }
 
 void ExtensionsGuestViewMessageFilter::MimeHandlerViewGuestCreatedCallback(
     int element_instance_id,
     int embedder_render_process_id,
     int embedder_render_frame_id,
+    int32_t plugin_frame_routing_id,
     const gfx::Size& element_size,
     mime_handler::BeforeUnloadControlPtrInfo before_unload_control,
+    bool is_full_page_plugin,
     WebContents* web_contents) {
   auto* guest_view = MimeHandlerViewGuest::FromWebContents(web_contents);
   if (!guest_view)
@@ -243,14 +257,29 @@
   base::DictionaryValue attach_params;
   attach_params.SetInteger(guest_view::kElementWidth, element_size.width());
   attach_params.SetInteger(guest_view::kElementHeight, element_size.height());
+  auto uses_cross_process_frame =
+      content::MimeHandlerViewMode::UsesCrossProcessFrame();
+  if (uses_cross_process_frame) {
+    int32_t plugin_frame_tree_node_id =
+        content::RenderFrameHost::GetFrameTreeNodeIdForRoutingId(
+            render_process_id_, plugin_frame_routing_id);
+    // These parameters are later used in finalizing the guest attaching to its
+    // embedder.
+    attach_params.SetInteger(mime_handler_view::kPluginFrameTreeNodeId,
+                             plugin_frame_tree_node_id);
+    attach_params.SetInteger(guest_view::kParameterInstanceId,
+                             element_instance_id);
+  }
   auto* manager = GuestViewManager::FromBrowserContext(browser_context_);
   CHECK(manager);
   manager->AttachGuest(embedder_render_process_id, element_instance_id,
                        guest_instance_id, attach_params);
-
-  rfh->Send(
-      new ExtensionsGuestViewMsg_CreateMimeHandlerViewGuestACK(
-          element_instance_id));
+  if (uses_cross_process_frame) {
+    guest_view->AttachToEmbedder(is_full_page_plugin);
+  } else {
+    rfh->Send(new ExtensionsGuestViewMsg_CreateMimeHandlerViewGuestACK(
+        element_instance_id));
+  }
 }
 
 }  // namespace extensions
diff --git a/extensions/browser/guest_view/extensions_guest_view_message_filter.h b/extensions/browser/guest_view/extensions_guest_view_message_filter.h
index b8d5d3f..04ec3a6 100644
--- a/extensions/browser/guest_view/extensions_guest_view_message_filter.h
+++ b/extensions/browser/guest_view/extensions_guest_view_message_filter.h
@@ -74,29 +74,34 @@
       const GURL& original_url,
       int32_t element_instance_id,
       const gfx::Size& element_size,
-      content::mojom::TransferrableURLLoaderPtr transferrable_url_loader)
-      override;
+      content::mojom::TransferrableURLLoaderPtr transferrable_url_loader,
+      int32_t plugin_frame_routing_id) override;
   void CreateMimeHandlerViewGuest(
       int32_t render_frame_id,
       const std::string& view_id,
       int32_t element_instance_id,
       const gfx::Size& element_size,
-      mime_handler::BeforeUnloadControlPtr before_unload_control) override;
+      mime_handler::BeforeUnloadControlPtr before_unload_control,
+      int32_t plugin_frame_routing_id) override;
 
   void CreateMimeHandlerViewGuestOnUIThread(
       int32_t render_frame_id,
       const std::string& view_id,
       int32_t element_instance_id,
       const gfx::Size& element_size,
-      mime_handler::BeforeUnloadControlPtrInfo before_unload_control);
+      mime_handler::BeforeUnloadControlPtrInfo before_unload_control,
+      int32_t plugin_frame_routing_id,
+      bool is_full_page_plugin);
 
   // Runs on UI thread.
   void MimeHandlerViewGuestCreatedCallback(
       int element_instance_id,
       int embedder_render_process_id,
       int embedder_render_frame_id,
+      int32_t plugin_frame_routing_id,
       const gfx::Size& element_size,
       mime_handler::BeforeUnloadControlPtrInfo before_unload_control,
+      bool is_full_page_plugin,
       content::WebContents* web_contents);
 
   static const uint32_t kFilteredMessageClasses[];
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.cc
index 16e231be..3a45b0f 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.cc
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.cc
@@ -7,5 +7,6 @@
 namespace mime_handler_view {
 
 const char kViewId[] = "viewId";
+const char kPluginFrameTreeNodeId[] = "pluginFrameTreeNodeId";
 
 }  // namespace mime_handler_view
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h
index f894f64f..3ca612e 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h
@@ -10,6 +10,7 @@
 namespace mime_handler_view {
 
 extern const char kViewId[];
+extern const char kPluginFrameTreeNodeId[];
 
 }  // namespace mime_handler_view
 
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc
index 121f7d57..ccdf958 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc
@@ -16,6 +16,7 @@
 #include "content/public/browser/stream_handle.h"
 #include "content/public/browser/stream_info.h"
 #include "content/public/common/child_process_host.h"
+#include "content/public/common/mime_handler_view_mode.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/common/web_preferences.h"
 #include "extensions/browser/api/extensions_api_client.h"
@@ -104,7 +105,7 @@
 }
 
 bool MimeHandlerViewGuest::CanUseCrossProcessFrames() {
-  return false;
+  return content::MimeHandlerViewMode::UsesCrossProcessFrame();
 }
 
 content::RenderWidgetHost* MimeHandlerViewGuest::GetOwnerRenderWidgetHost() {
@@ -115,8 +116,7 @@
 
 content::SiteInstance* MimeHandlerViewGuest::GetOwnerSiteInstance() {
   DCHECK_NE(embedder_frame_routing_id_, MSG_ROUTING_NONE);
-  content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
-      embedder_frame_process_id_, embedder_frame_routing_id_);
+  content::RenderFrameHost* rfh = GetEmbedderFrame();
   return rfh ? rfh->GetSiteInstance() : nullptr;
 }
 
@@ -131,8 +131,7 @@
   embedder_frame_process_id_ = process_id;
   embedder_frame_routing_id_ = routing_id;
 
-  content::RenderFrameHost* rfh =
-      content::RenderFrameHost::FromID(process_id, routing_id);
+  content::RenderFrameHost* rfh = GetEmbedderFrame();
 
   if (rfh && rfh->GetView()) {
     embedder_widget_routing_id_ =
@@ -147,6 +146,15 @@
   pending_before_unload_control_ = std::move(pending_before_unload_control);
 }
 
+void MimeHandlerViewGuest::AttachToEmbedder(bool is_full_page_plugin) {
+  DCHECK(CanUseCrossProcessFrames());
+  int instance_id = -1;
+  attach_params()->GetInteger(guest_view::kParameterInstanceId, &instance_id);
+  host()->BeginAttach(
+      content::WebContents::FromRenderFrameHost(GetEmbedderFrame()),
+      instance_id, is_full_page_plugin);
+}
+
 const char* MimeHandlerViewGuest::GetAPINamespace() const {
   return "mimeHandlerViewGuestInternal";
 }
@@ -244,6 +252,28 @@
   return true;
 }
 
+void MimeHandlerViewGuest::WillAttachToEmbedder() {
+  int plugin_frame_tree_node_id = content::RenderFrameHost::kNoFrameTreeNodeId;
+  attach_params()->GetInteger(mime_handler_view::kPluginFrameTreeNodeId,
+                              &plugin_frame_tree_node_id);
+  // This method is called soon after GuestViewBase::WillAttach which means
+  // |attach_in_progress_| is true and therefore, |embedder_web_contents()|
+  // returns nullptr. Therefore, to complete attaching the WebContentses the
+  // embedder WebContents is retrieved from the embedder frame.
+  auto* embedder_contents =
+      content::WebContents::FromRenderFrameHost(GetEmbedderFrame());
+  auto* plugin_frame_host = embedder_contents->FindFrameByFrameTreeNodeId(
+      plugin_frame_tree_node_id, embedder_frame_process_id_);
+
+  if (!plugin_frame_host) {
+    // TODO(ekaramad): This happens when the plugin element contains a remote
+    // frame. Introduce this edge case to contents/ layer.
+    return;
+  }
+  web_contents()->AttachToOuterWebContentsFrame(embedder_web_contents(),
+                                                plugin_frame_host);
+}
+
 WebContents* MimeHandlerViewGuest::OpenURLFromTab(
     WebContents* source,
     const content::OpenURLParams& params) {
@@ -418,4 +448,9 @@
                       std::move(pending_before_unload_control_));
 }
 
+content::RenderFrameHost* MimeHandlerViewGuest::GetEmbedderFrame() const {
+  return content::RenderFrameHost::FromID(embedder_frame_process_id_,
+                                          embedder_frame_routing_id_);
+}
+
 }  // namespace extensions
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h
index 477ea3c..b6cfc4a 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h
@@ -94,6 +94,8 @@
   void SetBeforeUnloadController(
       mime_handler::BeforeUnloadControlPtrInfo pending_before_unload_control);
 
+  void AttachToEmbedder(bool is_full_page_plugin);
+
  protected:
   explicit MimeHandlerViewGuest(content::WebContents* owner_web_contents);
   ~MimeHandlerViewGuest() override;
@@ -111,6 +113,7 @@
   void EmbedderFullscreenToggled(bool entered_fullscreen) final;
   bool ZoomPropagatesFromEmbedderToGuest() const final;
   bool ShouldDestroyOnDetach() const final;
+  void WillAttachToEmbedder() override;
 
   // WebContentsDelegate implementation.
   content::WebContents* OpenURLFromTab(
@@ -162,6 +165,8 @@
   void FuseBeforeUnloadControl(
       mime_handler::BeforeUnloadControlRequest request);
 
+  content::RenderFrameHost* GetEmbedderFrame() const;
+
   std::unique_ptr<MimeHandlerViewGuestDelegate> delegate_;
   std::unique_ptr<StreamContainer> stream_;
 
diff --git a/extensions/common/BUILD.gn b/extensions/common/BUILD.gn
index 8e39e9e..40a4cf7 100644
--- a/extensions/common/BUILD.gn
+++ b/extensions/common/BUILD.gn
@@ -312,11 +312,6 @@
 
     deps = [
       "//base",
-
-      # TODO(benwells): figure out what to do with the api target and
-      # api resources compiled into the chrome resource bundle.
-      # http://crbug.com/162530
-      "//chrome:resources",
       "//components/crx_file",
       "//components/nacl/common:buildflags",
       "//components/url_formatter",
diff --git a/extensions/common/mojo/guest_view.mojom b/extensions/common/mojo/guest_view.mojom
index 84c97abe..d93b6ef 100644
--- a/extensions/common/mojo/guest_view.mojom
+++ b/extensions/common/mojo/guest_view.mojom
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 module extensions.mojom;
-

-import "content/public/common/transferrable_url_loader.mojom";

+
+import "content/public/common/transferrable_url_loader.mojom";
 import "extensions/common/api/mime_handler.mojom";
 import "ui/gfx/geometry/mojo/geometry.mojom";
 import "url/mojom/url.mojom";
@@ -13,21 +13,32 @@
   // Tells the browser to create a mime handler guest view for a plugin.
   // This method is only called when the network service is enabled, and only
   // for plugins added using the embedded/object tag.
+  // |plugin_frame_id| is the routing ID corresponding to the frame owned by the
+  // plugin element.
+  // TODO(ekaramad): For cross-process-frame-based MimeHandlerView sending both
+  // |plugin_frame_id| and |render_frame_id| seems redundant. See if
+  // |render_frame_id| can be removed once https://crbug.com/659750 is fixed.
   CreateEmbeddedMimeHandlerViewGuest(
       int32 render_frame_id,
       int32 tab_id,
       url.mojom.Url original_url,
       int32 element_instance_id,
       gfx.mojom.Size element_size,
-      content.mojom.TransferrableURLLoader transferrable_url_loader);
+      content.mojom.TransferrableURLLoader transferrable_url_loader,
+      int32 plugin_frame_id);
 
   // Tells the browser to create a mime handler guest view for a plugin.
   // This method is called for full-frame plugins or for all plugins when the
   // network service is disabled.
+  // |plugin_frame_id| is the routing ID corresponding to the frame owned by the
+  // plugin element.
+  // TODO(ekaramad): See if |render_frame_id| can be removed once
+  // https://crbug.com/659750 is fixed.
   CreateMimeHandlerViewGuest(
       int32 render_frame_id,
       string view_id,
       int32 element_instance_id,
       gfx.mojom.Size element_size,
-      extensions.mime_handler.BeforeUnloadControl? before_unload_control);
+      extensions.mime_handler.BeforeUnloadControl? before_unload_control,
+      int32 plugin_frame_id);
 };
diff --git a/extensions/renderer/BUILD.gn b/extensions/renderer/BUILD.gn
index 1a86150..1daaf254 100644
--- a/extensions/renderer/BUILD.gn
+++ b/extensions/renderer/BUILD.gn
@@ -143,6 +143,8 @@
     "guest_view/mime_handler_view/mime_handler_view_container.h",
     "guest_view/mime_handler_view/mime_handler_view_container_base.cc",
     "guest_view/mime_handler_view/mime_handler_view_container_base.h",
+    "guest_view/mime_handler_view/mime_handler_view_frame_container.cc",
+    "guest_view/mime_handler_view/mime_handler_view_frame_container.h",
     "i18n_custom_bindings.cc",
     "i18n_custom_bindings.h",
     "i18n_hooks_delegate.cc",
@@ -210,19 +212,23 @@
     "resources/file_system_custom_bindings.js",
     "resources/greasemonkey_api.js",
     "resources/guest_view/app_view/app_view.js",
+    "resources/guest_view/app_view/app_view_element.js",
     "resources/guest_view/extension_options/extension_options.js",
     "resources/guest_view/extension_options/extension_options_attributes.js",
     "resources/guest_view/extension_options/extension_options_constants.js",
+    "resources/guest_view/extension_options/extension_options_element.js",
     "resources/guest_view/extension_options/extension_options_events.js",
     "resources/guest_view/extension_view/extension_view.js",
     "resources/guest_view/extension_view/extension_view_api_methods.js",
     "resources/guest_view/extension_view/extension_view_attributes.js",
     "resources/guest_view/extension_view/extension_view_constants.js",
+    "resources/guest_view/extension_view/extension_view_element.js",
     "resources/guest_view/extension_view/extension_view_events.js",
     "resources/guest_view/extension_view/extension_view_internal.js",
     "resources/guest_view/guest_view.js",
     "resources/guest_view/guest_view_attributes.js",
     "resources/guest_view/guest_view_container.js",
+    "resources/guest_view/guest_view_container_element.js",
     "resources/guest_view/guest_view_deny.js",
     "resources/guest_view/guest_view_events.js",
     "resources/guest_view/guest_view_iframe.js",
@@ -232,6 +238,7 @@
     "resources/guest_view/web_view/web_view_api_methods.js",
     "resources/guest_view/web_view/web_view_attributes.js",
     "resources/guest_view/web_view/web_view_constants.js",
+    "resources/guest_view/web_view/web_view_element.js",
     "resources/guest_view/web_view/web_view_events.js",
     "resources/guest_view/web_view/web_view_internal.js",
     "resources/guest_view/web_view/web_view_request_custom_bindings.js",
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc
index f06670bc..a8d1b1f5 100644
--- a/extensions/renderer/dispatcher.cc
+++ b/extensions/renderer/dispatcher.cc
@@ -609,12 +609,15 @@
   // Libraries.
   std::vector<JsResourceInfo> resources = {
       {"appView", IDR_APP_VIEW_JS},
+      {"appViewElement", IDR_APP_VIEW_ELEMENT_JS},
       {"entryIdManager", IDR_ENTRY_ID_MANAGER},
       {"extensionOptions", IDR_EXTENSION_OPTIONS_JS},
+      {"extensionOptionsElement", IDR_EXTENSION_OPTIONS_ELEMENT_JS},
       {"extensionOptionsAttributes", IDR_EXTENSION_OPTIONS_ATTRIBUTES_JS},
       {"extensionOptionsConstants", IDR_EXTENSION_OPTIONS_CONSTANTS_JS},
       {"extensionOptionsEvents", IDR_EXTENSION_OPTIONS_EVENTS_JS},
       {"extensionView", IDR_EXTENSION_VIEW_JS},
+      {"extensionViewElement", IDR_EXTENSION_VIEW_ELEMENT_JS},
       {"extensionViewApiMethods", IDR_EXTENSION_VIEW_API_METHODS_JS},
       {"extensionViewAttributes", IDR_EXTENSION_VIEW_ATTRIBUTES_JS},
       {"extensionViewConstants", IDR_EXTENSION_VIEW_CONSTANTS_JS},
@@ -626,6 +629,7 @@
       {"guestView", IDR_GUEST_VIEW_JS},
       {"guestViewAttributes", IDR_GUEST_VIEW_ATTRIBUTES_JS},
       {"guestViewContainer", IDR_GUEST_VIEW_CONTAINER_JS},
+      {"guestViewContainerElement", IDR_GUEST_VIEW_CONTAINER_ELEMENT_JS},
       {"guestViewDeny", IDR_GUEST_VIEW_DENY_JS},
       {"guestViewEvents", IDR_GUEST_VIEW_EVENTS_JS},
       {"imageUtil", IDR_IMAGE_UTIL_JS},
@@ -640,6 +644,7 @@
       // Note: webView not webview so that this doesn't interfere with the
       // chrome.webview API bindings.
       {"webView", IDR_WEB_VIEW_JS},
+      {"webViewElement", IDR_WEB_VIEW_ELEMENT_JS},
       {"webViewActionRequests", IDR_WEB_VIEW_ACTION_REQUESTS_JS},
       {"webViewApiMethods", IDR_WEB_VIEW_API_METHODS_JS},
       {"webViewAttributes", IDR_WEB_VIEW_ATTRIBUTES_JS},
@@ -1313,30 +1318,25 @@
   // Require AppView.
   if (context->GetAvailability("appViewEmbedderInternal").is_available()) {
     requires_guest_view_module = true;
-    module_system->Require("appView");
+    module_system->Require("appViewElement");
   }
 
   // Require ExtensionOptions.
   if (context->GetAvailability("extensionOptionsInternal").is_available()) {
     requires_guest_view_module = true;
-    module_system->Require("extensionOptions");
-    module_system->Require("extensionOptionsAttributes");
+    module_system->Require("extensionOptionsElement");
   }
 
   // Require ExtensionView.
   if (context->GetAvailability("extensionViewInternal").is_available()) {
     requires_guest_view_module = true;
-    module_system->Require("extensionView");
-    module_system->Require("extensionViewApiMethods");
-    module_system->Require("extensionViewAttributes");
+    module_system->Require("extensionViewElement");
   }
 
   // Require WebView.
   if (context->GetAvailability("webViewInternal").is_available()) {
     requires_guest_view_module = true;
-    module_system->Require("webView");
-    module_system->Require("webViewApiMethods");
-    module_system->Require("webViewAttributes");
+    module_system->Require("webViewElement");
   }
 
   if (requires_guest_view_module &&
diff --git a/extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.cc b/extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.cc
index 16f1f47..e38633d 100644
--- a/extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.cc
+++ b/extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.cc
@@ -4,6 +4,8 @@
 
 #include "extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.h"
 
+#include "content/public/common/mime_handler_view_mode.h"
+#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h"
 #include "ipc/ipc_message.h"
 #include "ipc/ipc_message_macros.h"
 
@@ -23,4 +25,14 @@
          (IPC_MESSAGE_CLASS(message) == ExtensionsGuestViewMsgStart);
 }
 
+bool ExtensionsGuestViewContainerDispatcher::OnControlMessageReceived(
+    const IPC::Message& message) {
+  if (!HandlesMessage(message))
+    return false;
+
+  return (content::MimeHandlerViewMode::UsesCrossProcessFrame() &&
+          MimeHandlerViewContainerBase::TryHandleMessage(message)) ||
+         GuestViewContainerDispatcher::OnControlMessageReceived(message);
+}
+
 }  // namespace extensions
diff --git a/extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.h b/extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.h
index 5026f62..e5137d5 100644
--- a/extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.h
+++ b/extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.h
@@ -20,6 +20,9 @@
   // guest_view::GuestViewContainerDispatcher implementation.
   bool HandlesMessage(const IPC::Message& message) override;
 
+  // content::RenderThreadObserver implementation.
+  bool OnControlMessageReceived(const IPC::Message& message) override;
+
   DISALLOW_COPY_AND_ASSIGN(ExtensionsGuestViewContainerDispatcher);
 };
 
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc
index 901c9ab1..e91fe86 100644
--- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc
@@ -43,15 +43,14 @@
 }
 
 bool MimeHandlerViewContainer::OnMessage(const IPC::Message& message) {
+  if (MimeHandlerViewContainerBase::OnHandleMessage(message))
+    return true;
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP(MimeHandlerViewContainer, message)
-  IPC_MESSAGE_HANDLER(ExtensionsGuestViewMsg_CreateMimeHandlerViewGuestACK,
-                      OnCreateMimeHandlerViewGuestACK)
-  IPC_MESSAGE_HANDLER(
-      ExtensionsGuestViewMsg_MimeHandlerViewGuestOnLoadCompleted,
-      OnMimeHandlerViewGuestOnLoadCompleted)
-  IPC_MESSAGE_HANDLER(GuestViewMsg_GuestAttached, OnGuestAttached)
-  IPC_MESSAGE_UNHANDLED(handled = false)
+    IPC_MESSAGE_HANDLER(ExtensionsGuestViewMsg_CreateMimeHandlerViewGuestACK,
+                        OnCreateMimeHandlerViewGuestACK)
+    IPC_MESSAGE_HANDLER(GuestViewMsg_GuestAttached, OnGuestAttached)
+    IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
   return handled;
 }
@@ -91,16 +90,6 @@
   return GetScriptableObject(isolate);
 }
 
-void MimeHandlerViewContainer::DidReceiveData(const char* data,
-                                              int data_length) {
-  view_id_ += std::string(data, data_length);
-}
-
-void MimeHandlerViewContainer::DidFinishLoading() {
-  DCHECK(is_embedded_);
-  CreateMimeHandlerViewGuestIfNecessary();
-}
-
 void MimeHandlerViewContainer::OnCreateMimeHandlerViewGuestACK(
     int element_instance_id) {
   DCHECK_NE(this->element_instance_id(), guest_view::kInstanceIDNone);
@@ -119,11 +108,6 @@
   guest_proxy_routing_id_ = guest_proxy_routing_id;
 }
 
-void MimeHandlerViewContainer::OnMimeHandlerViewGuestOnLoadCompleted(
-    int /* unused */) {
-  DidCompleteLoad();
-}
-
 content::RenderFrame* MimeHandlerViewContainer::GetEmbedderRenderFrame() const {
   return render_frame();
 }
@@ -134,12 +118,12 @@
   MimeHandlerViewContainerBase::CreateMimeHandlerViewGuestIfNecessary();
 }
 
-blink::WebFrame* MimeHandlerViewContainer::GetGuestProxyFrame() const {
+blink::WebRemoteFrame* MimeHandlerViewContainer::GetGuestProxyFrame() const {
   content::RenderView* guest_proxy_render_view =
       content::RenderView::FromRoutingID(guest_proxy_routing_id_);
   if (!guest_proxy_render_view)
     return nullptr;
-  return guest_proxy_render_view->GetWebView()->MainFrame();
+  return guest_proxy_render_view->GetWebView()->MainFrame()->ToWebRemoteFrame();
 }
 
 int32_t MimeHandlerViewContainer::GetInstanceId() const {
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h
index 986dcacc..f2732036 100644
--- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h
@@ -52,10 +52,6 @@
   void DidResizeElement(const gfx::Size& new_size) override;
   v8::Local<v8::Object> V8ScriptableObject(v8::Isolate*) override;
 
-  // WebAssociatedURLLoaderClient overrides.
-  void DidReceiveData(const char* data, int data_length) override;
-  void DidFinishLoading() override;
-
   // GuestViewContainer overrides.
   void OnRenderFrameDestroyed() override;
 
@@ -66,7 +62,7 @@
   // MimeHandlerViewContainerBase override.
   content::RenderFrame* GetEmbedderRenderFrame() const final;
   void CreateMimeHandlerViewGuestIfNecessary() final;
-  blink::WebFrame* GetGuestProxyFrame() const final;
+  blink::WebRemoteFrame* GetGuestProxyFrame() const final;
   int32_t GetInstanceId() const final;
   gfx::Size GetElementSize() const final;
 
@@ -79,7 +75,6 @@
   void OnCreateMimeHandlerViewGuestACK(int element_instance_id);
   void OnGuestAttached(int element_instance_id,
                        int guest_proxy_routing_id);
-  void OnMimeHandlerViewGuestOnLoadCompleted(int element_instance_id);
 
   // The RenderView routing ID of the guest.
   int guest_proxy_routing_id_;
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc
index 3ad2505..e3ece63 100644
--- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc
@@ -14,6 +14,7 @@
 #include "content/public/renderer/render_frame.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/v8_value_converter.h"
+#include "extensions/common/guest_view/extensions_guest_view_messages.h"
 #include "extensions/common/mojo/guest_view.mojom.h"
 #include "extensions/renderer/extension_frame_helper.h"
 #include "gin/arguments.h"
@@ -22,6 +23,7 @@
 #include "gin/interceptor.h"
 #include "gin/object_template_builder.h"
 #include "gin/wrappable.h"
+#include "ipc/ipc_message_macros.h"
 #include "ipc/ipc_sync_channel.h"
 #include "services/network/public/cpp/features.h"
 #include "third_party/blink/public/platform/web_url_request.h"
@@ -29,6 +31,7 @@
 #include "third_party/blink/public/web/web_associated_url_loader_options.h"
 #include "third_party/blink/public/web/web_frame.h"
 #include "third_party/blink/public/web/web_local_frame.h"
+#include "third_party/blink/public/web/web_remote_frame.h"
 
 namespace extensions {
 namespace {
@@ -199,6 +202,22 @@
                                                     it->second.end());
 }
 
+// static
+bool MimeHandlerViewContainerBase::TryHandleMessage(
+    const IPC::Message& message) {
+  int element_instance_id = guest_view::kInstanceIDNone;
+  base::PickleIterator iter(message);
+  bool success = iter.ReadInt(&element_instance_id);
+  DCHECK(success);
+  for (const auto& pair : g_mime_handler_view_container_base_map.Get()) {
+    for (auto* container : pair.second) {
+      if (container->GetInstanceId() == element_instance_id)
+        container->OnHandleMessage(message);
+    }
+  }
+  return false;
+}
+
 std::unique_ptr<content::URLLoaderThrottle>
 MimeHandlerViewContainerBase::MaybeCreatePluginThrottle(const GURL& url) {
   if (!waiting_to_create_throttle_ || url != original_url_)
@@ -251,6 +270,28 @@
                             &message, frame->MainWorldScriptContext()));
 }
 
+bool MimeHandlerViewContainerBase::OnHandleMessage(
+    const IPC::Message& message) {
+  bool handled = true;
+  IPC_BEGIN_MESSAGE_MAP(MimeHandlerViewContainerBase, message)
+    IPC_MESSAGE_HANDLER(
+        ExtensionsGuestViewMsg_MimeHandlerViewGuestOnLoadCompleted,
+        OnMimeHandlerViewGuestOnLoadCompleted)
+    IPC_MESSAGE_UNHANDLED(handled = false)
+  IPC_END_MESSAGE_MAP()
+  return handled;
+}
+
+void MimeHandlerViewContainerBase::DidReceiveData(const char* data,
+                                                  int data_length) {
+  view_id_ += std::string(data, data_length);
+}
+
+void MimeHandlerViewContainerBase::DidFinishLoading() {
+  DCHECK(is_embedded_);
+  CreateMimeHandlerViewGuestIfNecessary();
+}
+
 content::RenderFrame* MimeHandlerViewContainerBase::GetEmbedderRenderFrame()
     const {
   return nullptr;
@@ -277,7 +318,8 @@
     GetGuestView()->CreateEmbeddedMimeHandlerViewGuest(
         GetEmbedderRenderFrame()->GetRoutingID(),
         extension_frame_helper->tab_id(), original_url_, GetInstanceId(),
-        GetElementSize(), std::move(transferrable_url_loader_));
+        GetElementSize(), std::move(transferrable_url_loader_),
+        plugin_frame_routing_id_);
     guest_created_ = true;
     return;
   }
@@ -303,12 +345,14 @@
   }
   GetGuestView()->CreateMimeHandlerViewGuest(
       GetEmbedderRenderFrame()->GetRoutingID(), view_id_, GetInstanceId(),
-      GetElementSize(), std::move(before_unload_control));
+      GetElementSize(), std::move(before_unload_control),
+      plugin_frame_routing_id_);
 
   guest_created_ = true;
 }
 
-void MimeHandlerViewContainerBase::DidCompleteLoad() {
+void MimeHandlerViewContainerBase::OnMimeHandlerViewGuestOnLoadCompleted(
+    int32_t /* element_instance_id */) {
   if (!GetEmbedderRenderFrame())
     return;
 
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h
index 80ccf19..13b1ef1 100644
--- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h
@@ -10,6 +10,7 @@
 #include "base/macros.h"
 #include "content/public/common/transferrable_url_loader.mojom.h"
 #include "extensions/common/api/mime_handler.mojom.h"
+#include "ipc/ipc_message.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
 #include "third_party/blink/public/web/web_associated_url_loader_client.h"
@@ -19,7 +20,7 @@
 
 namespace blink {
 class WebAssociatedURLLoader;
-class WebFrame;
+class WebRemoteFrame;
 }  // namespace blink
 
 namespace content {
@@ -28,6 +29,10 @@
 struct WebPluginInfo;
 }  // namespace content
 
+namespace IPC {
+class Message;
+}
+
 namespace extensions {
 // A base class for MimeHandlerViewContainer which provides a way of reusing the
 // common logic between the BrowserPlugin-based and frame-based container.
@@ -44,6 +49,8 @@
   static std::vector<MimeHandlerViewContainerBase*> FromRenderFrame(
       content::RenderFrame* render_frame);
 
+  static bool TryHandleMessage(const IPC::Message& message);
+
   // If the URL matches the same URL that this object has created and it hasn't
   // added a throttle yet, it will return a new one for the purpose of
   // intercepting it.
@@ -57,15 +64,21 @@
   // Post |message| to the guest.
   void PostMessageFromValue(const base::Value& message);
 
+  bool OnHandleMessage(const IPC::Message& message);
+
+  // WebAssociatedURLLoaderClient overrides.
+  void DidReceiveData(const char* data, int data_length) override;
+  void DidFinishLoading() override;
+
  protected:
   // Returns the frame which is embedding the corresponding plugin element.
   virtual content::RenderFrame* GetEmbedderRenderFrame() const;
   virtual void CreateMimeHandlerViewGuestIfNecessary();
-  virtual blink::WebFrame* GetGuestProxyFrame() const = 0;
+  virtual blink::WebRemoteFrame* GetGuestProxyFrame() const = 0;
   virtual int32_t GetInstanceId() const = 0;
   virtual gfx::Size GetElementSize() const = 0;
 
-  void DidCompleteLoad();
+  void OnMimeHandlerViewGuestOnLoadCompleted(int32_t element_instance_id);
   void SendResourceRequest();
   void EmbedderRenderFrameWillBeGone();
   v8::Local<v8::Object> GetScriptableObject(v8::Isolate* isolate);
@@ -81,6 +94,11 @@
   // Whether the plugin is embedded or not.
   bool is_embedded_;
 
+  // Only valid for the cross-process-frame-based implementation. This holds the
+  // routing ID of the frame or proxy whose corresponding WebFrame is the
+  // ContentFrame() of the plugin element.
+  int32_t plugin_frame_routing_id_ = MSG_ROUTING_NONE;
+
  private:
   class PluginResourceThrottle;
 
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_frame_container.cc b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_frame_container.cc
new file mode 100644
index 0000000..c806ea8
--- /dev/null
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_frame_container.cc
@@ -0,0 +1,125 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_frame_container.h"
+
+#include "base/pickle.h"
+#include "content/public/common/webplugininfo.h"
+#include "content/public/renderer/render_frame.h"
+#include "third_party/blink/public/web/web_document.h"
+#include "third_party/blink/public/web/web_frame.h"
+#include "third_party/blink/public/web/web_local_frame.h"
+#include "third_party/blink/public/web/web_remote_frame.h"
+#include "ui/gfx/geometry/size.h"
+
+namespace extensions {
+
+namespace {
+const std::string kSupportedMimeTypes[] = {"text/pdf", "application/pdf"};
+
+bool IsSupportedMimeType(const std::string& mime_type) {
+  for (const auto& type : kSupportedMimeTypes) {
+    if (mime_type == type)
+      return true;
+  }
+  return false;
+}
+
+}  // namespace
+
+// static
+bool MimeHandlerViewFrameContainer::Create(
+    const blink::WebElement& plugin_element,
+    const GURL& resource_url,
+    const std::string& mime_type,
+    const content::WebPluginInfo& plugin_info,
+    int32_t element_instance_id) {
+  if (!IsSupportedMimeType(mime_type))
+    return false;
+  // Life time is managed by the class itself: when the MimeHandlerViewGuest
+  // is destroyed an IPC is sent to renderer to cleanup this instance.
+  return new MimeHandlerViewFrameContainer(plugin_element, resource_url,
+                                           mime_type, plugin_info,
+                                           element_instance_id);
+}
+
+MimeHandlerViewFrameContainer::MimeHandlerViewFrameContainer(
+    const blink::WebElement& plugin_element,
+    const GURL& resource_url,
+    const std::string& mime_type,
+    const content::WebPluginInfo& plugin_info,
+    int32_t element_instance_id)
+    : MimeHandlerViewContainerBase(content::RenderFrame::FromWebFrame(
+                                       plugin_element.GetDocument().GetFrame()),
+                                   plugin_info,
+                                   mime_type,
+                                   resource_url),
+      embedder_frame_(content::RenderFrame::FromWebFrame(
+          plugin_element.GetDocument().GetFrame())),
+      plugin_element_(plugin_element),
+      element_instance_id_(element_instance_id) {
+  is_embedded_ = IsEmbedded();
+  if (is_embedded_) {
+    SendResourceRequest();
+  } else {
+    // For non-embedded MimeHandlerViewGuest the stream has already been
+    // intercepted.
+    // TODO(ekaramad): Update |view_id_| before sending this request.
+    CreateMimeHandlerViewGuestIfNecessary();
+  }
+}
+
+MimeHandlerViewFrameContainer::~MimeHandlerViewFrameContainer() {}
+
+// Returns the frame which is embedding the corresponding plugin element.
+content::RenderFrame* MimeHandlerViewFrameContainer::GetEmbedderRenderFrame()
+    const {
+  return embedder_frame_;
+}
+
+void MimeHandlerViewFrameContainer::CreateMimeHandlerViewGuestIfNecessary() {
+  if (auto* frame = GetContentFrame()) {
+    plugin_frame_routing_id_ =
+        content::RenderFrame::GetRoutingIdForWebFrame(frame);
+  }
+  if (plugin_frame_routing_id_ == MSG_ROUTING_NONE) {
+    // TODO(ekaramad): Destroy and cleanup.
+    return;
+  }
+  MimeHandlerViewContainerBase::CreateMimeHandlerViewGuestIfNecessary();
+}
+
+blink::WebRemoteFrame* MimeHandlerViewFrameContainer::GetGuestProxyFrame()
+    const {
+  return GetContentFrame()->ToWebRemoteFrame();
+}
+
+int32_t MimeHandlerViewFrameContainer::GetInstanceId() const {
+  return element_instance_id_;
+}
+
+gfx::Size MimeHandlerViewFrameContainer::GetElementSize() const {
+  return gfx::Size();
+}
+
+blink::WebFrame* MimeHandlerViewFrameContainer::GetContentFrame() const {
+  return blink::WebFrame::FromFrameOwnerElement(plugin_element_);
+}
+// mime_handler::BeforeUnloadControl implementation.
+void MimeHandlerViewFrameContainer::SetShowBeforeUnloadDialog(
+    bool show_dialog,
+    SetShowBeforeUnloadDialogCallback callback) {
+  // TODO(ekaramad): Implement.
+}
+
+bool MimeHandlerViewFrameContainer::IsEmbedded() const {
+  // TODO(ekaramad): This is currently sending a request regardless of whether
+  // or not this embed is due to frame navigation to resource. For such cases,
+  // the renderer has already started a resource request and we should not send
+  // twice. Find a way to get the intercepted stream and avoid sending an extra
+  // request here.
+  return true;
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_frame_container.h b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_frame_container.h
new file mode 100644
index 0000000..900648f
--- /dev/null
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_frame_container.h
@@ -0,0 +1,76 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef EXTENSIONS_RENDERER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_FRAME_CONTAINER_H_
+#define EXTENSIONS_RENDERER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_FRAME_CONTAINER_H_
+
+#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h"
+#include "third_party/blink/public/web/web_element.h"
+
+#include "url/gurl.h"
+
+namespace blink {
+class WebElement;
+class WebFrame;
+}  // namespace blink
+
+namespace content {
+class RenderFrame;
+struct WebPluginInfo;
+}  // namespace content
+
+namespace extensions {
+
+// The frame-based implementation of MimeHandlerViewFrameContainer. This class
+// performs tasks such as requesting resource, providing postMessage API, etc.
+// for an embedded MimeHandlerView extension in a cross-origin frame.
+class MimeHandlerViewFrameContainer : public MimeHandlerViewContainerBase {
+ public:
+  static bool Create(const blink::WebElement& plugin_element,
+                     const GURL& resource_url,
+                     const std::string& mime_type,
+                     const content::WebPluginInfo& plugin_info,
+                     int32_t element_instance_id);
+
+ private:
+  MimeHandlerViewFrameContainer(const blink::WebElement& plugin_element,
+                                const GURL& resource_url,
+                                const std::string& mime_type,
+                                const content::WebPluginInfo& plugin_info,
+                                int32_t element_instance_id);
+  ~MimeHandlerViewFrameContainer() override;
+
+  // MimeHandlerViewContainerBase overrides.
+  content::RenderFrame* GetEmbedderRenderFrame() const final;
+  void CreateMimeHandlerViewGuestIfNecessary() final;
+  blink::WebRemoteFrame* GetGuestProxyFrame() const final;
+  int32_t GetInstanceId() const final;
+  gfx::Size GetElementSize() const final;
+
+  blink::WebFrame* GetContentFrame() const;
+
+  // mime_handler::BeforeUnloadControl implementation.
+  void SetShowBeforeUnloadDialog(
+      bool show_dialog,
+      SetShowBeforeUnloadDialogCallback callback) override;
+
+  // Returns true if the container is considered as "embedded". A non-embedded
+  // MimeHandlerViewFrameContainer is the one which is created as a result of
+  // navigating a frame (either <iframe> or top-level) to a corresponding
+  // MimeHandlerView mimetype. For such containers there is no need to request
+  // the resource immediately.
+  bool IsEmbedded() const;
+
+  void OnMessageReceived(const IPC::Message& message);
+
+  content::RenderFrame* const embedder_frame_;
+  blink::WebElement plugin_element_;
+  const int32_t element_instance_id_;
+
+  DISALLOW_COPY_AND_ASSIGN(MimeHandlerViewFrameContainer);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_FRAME_CONTAINER_H_
diff --git a/extensions/renderer/resources/extensions_renderer_resources.grd b/extensions/renderer/resources/extensions_renderer_resources.grd
index d5e72d3f..b65d821 100644
--- a/extensions/renderer/resources/extensions_renderer_resources.grd
+++ b/extensions/renderer/resources/extensions_renderer_resources.grd
@@ -10,14 +10,17 @@
     <includes>
       <!-- Extension libraries. -->
       <include name="IDR_APP_VIEW_JS" file="guest_view/app_view/app_view.js" type="BINDATA" />
+      <include name="IDR_APP_VIEW_ELEMENT_JS" file="guest_view/app_view/app_view_element.js" type="BINDATA" />
       <include name="IDR_BROWSER_TEST_ENVIRONMENT_SPECIFIC_BINDINGS_JS" file="browser_test_environment_specific_bindings.js" type="BINDATA" />
       <include name="IDR_ENTRY_ID_MANAGER" file="entry_id_manager.js" type="BINDATA" />
       <include name="IDR_EVENT_BINDINGS_JS" file="event.js" type="BINDATA" />
       <include name="IDR_EXTENSION_OPTIONS_JS" file="guest_view/extension_options/extension_options.js" type="BINDATA"/>
+      <include name="IDR_EXTENSION_OPTIONS_ELEMENT_JS" file="guest_view/extension_options/extension_options_element.js" type="BINDATA"/>
       <include name="IDR_EXTENSION_OPTIONS_ATTRIBUTES_JS" file="guest_view/extension_options/extension_options_attributes.js" type="BINDATA"/>
       <include name="IDR_EXTENSION_OPTIONS_CONSTANTS_JS" file="guest_view/extension_options/extension_options_constants.js" type="BINDATA"/>
       <include name="IDR_EXTENSION_OPTIONS_EVENTS_JS" file="guest_view/extension_options/extension_options_events.js" type="BINDATA"/>
       <include name="IDR_EXTENSION_VIEW_JS" file="guest_view/extension_view/extension_view.js" type="BINDATA" />
+      <include name="IDR_EXTENSION_VIEW_ELEMENT_JS" file="guest_view/extension_view/extension_view_element.js" type="BINDATA" />
       <include name="IDR_EXTENSION_VIEW_API_METHODS_JS" file="guest_view/extension_view/extension_view_api_methods.js" type="BINDATA" />
       <include name="IDR_EXTENSION_VIEW_ATTRIBUTES_JS" file="guest_view/extension_view/extension_view_attributes.js" type="BINDATA" />
       <include name="IDR_EXTENSION_VIEW_CONSTANTS_JS" file="guest_view/extension_view/extension_view_constants.js" type="BINDATA" />
@@ -26,6 +29,7 @@
       <include name="IDR_FEEDBACK_PRIVATE_CUSTOM_BINDINGS_JS" file="feedback_private_custom_bindings.js" type="BINDATA" />
       <include name="IDR_GUEST_VIEW_ATTRIBUTES_JS" file="guest_view/guest_view_attributes.js" type="BINDATA" />
       <include name="IDR_GUEST_VIEW_CONTAINER_JS" file="guest_view/guest_view_container.js" type="BINDATA" />
+      <include name="IDR_GUEST_VIEW_CONTAINER_ELEMENT_JS" file="guest_view/guest_view_container_element.js" type="BINDATA" />
       <include name="IDR_GUEST_VIEW_DENY_JS" file="guest_view/guest_view_deny.js" type="BINDATA" />
       <include name="IDR_GUEST_VIEW_EVENTS_JS" file="guest_view/guest_view_events.js" type="BINDATA" />
       <include name="IDR_GUEST_VIEW_IFRAME_CONTAINER_JS" file="guest_view/guest_view_iframe_container.js" type="BINDATA" />
@@ -53,6 +57,7 @@
       <include name="IDR_WEB_VIEW_EVENTS_JS" file="guest_view/web_view/web_view_events.js" type="BINDATA" />
       <include name="IDR_WEB_VIEW_INTERNAL_CUSTOM_BINDINGS_JS" file="guest_view/web_view/web_view_internal.js" type="BINDATA" />
       <include name="IDR_WEB_VIEW_JS" file="guest_view/web_view/web_view.js" type="BINDATA" />
+      <include name="IDR_WEB_VIEW_ELEMENT_JS" file="guest_view/web_view/web_view_element.js" type="BINDATA" />
 
       <!-- Custom bindings for APIs. -->
       <include name="IDR_APP_RUNTIME_CUSTOM_BINDINGS_JS" file="app_runtime_custom_bindings.js" type="BINDATA" />
diff --git a/extensions/renderer/resources/guest_view/app_view/app_view.js b/extensions/renderer/resources/guest_view/app_view/app_view.js
index c80086c..433c4ee 100644
--- a/extensions/renderer/resources/guest_view/app_view/app_view.js
+++ b/extensions/renderer/resources/guest_view/app_view/app_view.js
@@ -2,9 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-var DocumentNatives = requireNative('document_natives');
 var GuestViewContainer = require('guestViewContainer').GuestViewContainer;
-var IdGenerator = requireNative('id_generator');
 
 function AppViewImpl(appviewElement) {
   $Function.call(GuestViewContainer, this, appviewElement, 'appview');
@@ -15,18 +13,6 @@
 
 AppViewImpl.prototype.__proto__ = GuestViewContainer.prototype;
 
-AppViewImpl.VIEW_TYPE = 'AppView';
-
-// Add extra functionality to |this.element|.
-AppViewImpl.setupElement = function(proto) {
-  var apiMethods = [
-    'connect'
-  ];
-
-  // Forward proto.foo* method calls to AppViewImpl.foo*.
-  GuestViewContainer.forwardApiMethods(proto, apiMethods);
-}
-
 AppViewImpl.prototype.getErrorNode = function() {
   if (!this.errorNode) {
     this.errorNode = document.createElement('div');
@@ -77,4 +63,5 @@
   }, this));
 };
 
-GuestViewContainer.registerElement(AppViewImpl);
+// Exports.
+exports.$set('AppViewImpl', AppViewImpl);
diff --git a/extensions/renderer/resources/guest_view/app_view/app_view_element.js b/extensions/renderer/resources/guest_view/app_view/app_view_element.js
new file mode 100644
index 0000000..6d48a710
--- /dev/null
+++ b/extensions/renderer/resources/guest_view/app_view/app_view_element.js
@@ -0,0 +1,17 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// The <appview> custom element.
+
+var registerElement = require('guestViewContainerElement').registerElement;
+var forwardApiMethods = require('guestViewContainerElement').forwardApiMethods;
+var GuestViewContainerElement =
+    require('guestViewContainerElement').GuestViewContainerElement;
+var AppViewImpl = require('appView').AppViewImpl;
+
+class AppViewElement extends GuestViewContainerElement {}
+
+forwardApiMethods(AppViewElement, ['connect']);
+
+registerElement('AppView', AppViewElement, AppViewImpl);
diff --git a/extensions/renderer/resources/guest_view/extension_options/extension_options.js b/extensions/renderer/resources/guest_view/extension_options/extension_options.js
index 57439bd..2189d98 100644
--- a/extensions/renderer/resources/guest_view/extension_options/extension_options.js
+++ b/extensions/renderer/resources/guest_view/extension_options/extension_options.js
@@ -19,8 +19,6 @@
 
 ExtensionOptionsImpl.prototype.__proto__ = GuestViewContainer.prototype;
 
-ExtensionOptionsImpl.VIEW_TYPE = 'ExtensionOptions';
-
 ExtensionOptionsImpl.prototype.onElementAttached = function() {
   this.createGuest();
 };
@@ -55,4 +53,5 @@
   }, this));
 };
 
-GuestViewContainer.registerElement(ExtensionOptionsImpl);
+// Exports.
+exports.$set('ExtensionOptionsImpl', ExtensionOptionsImpl);
diff --git a/extensions/renderer/resources/guest_view/extension_options/extension_options_element.js b/extensions/renderer/resources/guest_view/extension_options/extension_options_element.js
new file mode 100644
index 0000000..24cd3cb
--- /dev/null
+++ b/extensions/renderer/resources/guest_view/extension_options/extension_options_element.js
@@ -0,0 +1,15 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// The <extensionoptions> custom element.
+
+var registerElement = require('guestViewContainerElement').registerElement;
+var GuestViewContainerElement =
+    require('guestViewContainerElement').GuestViewContainerElement;
+var ExtensionOptionsImpl = require('extensionOptions').ExtensionOptionsImpl;
+
+class ExtensionOptionsElement extends GuestViewContainerElement {}
+
+registerElement(
+    'ExtensionOptions', ExtensionOptionsElement, ExtensionOptionsImpl);
diff --git a/extensions/renderer/resources/guest_view/extension_view/extension_view.js b/extensions/renderer/resources/guest_view/extension_view/extension_view.js
index 29997cf..e84a8ce5 100644
--- a/extensions/renderer/resources/guest_view/extension_view/extension_view.js
+++ b/extensions/renderer/resources/guest_view/extension_view/extension_view.js
@@ -34,12 +34,6 @@
 
 ExtensionViewImpl.prototype.__proto__ = GuestViewContainer.prototype;
 
-ExtensionViewImpl.VIEW_TYPE = 'ExtensionView';
-
-ExtensionViewImpl.setupElement = function(proto) {
-  GuestViewContainer.forwardApiMethods(proto, EXTENSION_VIEW_API_METHODS);
-};
-
 ExtensionViewImpl.prototype.createGuest = function(callback) {
   this.guest.create(this.buildParams(), $Function.bind(function() {
     this.attachWindow$();
@@ -160,4 +154,5 @@
   }, this));
 };
 
-GuestViewContainer.registerElement(ExtensionViewImpl);
+// Exports.
+exports.$set('ExtensionViewImpl', ExtensionViewImpl);
diff --git a/extensions/renderer/resources/guest_view/extension_view/extension_view_element.js b/extensions/renderer/resources/guest_view/extension_view/extension_view_element.js
new file mode 100644
index 0000000..d9a1137
--- /dev/null
+++ b/extensions/renderer/resources/guest_view/extension_view/extension_view_element.js
@@ -0,0 +1,20 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// The <extensionview> custom element.
+
+var registerElement = require('guestViewContainerElement').registerElement;
+var forwardApiMethods = require('guestViewContainerElement').forwardApiMethods;
+var GuestViewContainerElement =
+    require('guestViewContainerElement').GuestViewContainerElement;
+var ExtensionViewImpl = require('extensionView').ExtensionViewImpl;
+var EXTENSION_VIEW_API_METHODS =
+    require('extensionViewApiMethods').EXTENSION_VIEW_API_METHODS;
+
+class ExtensionViewElement extends GuestViewContainerElement {}
+
+// Forward ExtensionViewElement.foo* method calls to ExtensionViewImpl.foo*.
+forwardApiMethods(ExtensionViewElement, EXTENSION_VIEW_API_METHODS);
+
+registerElement('ExtensionView', ExtensionViewElement, ExtensionViewImpl);
diff --git a/extensions/renderer/resources/guest_view/guest_view_container.js b/extensions/renderer/resources/guest_view/guest_view_container.js
index c750388..feeab29 100644
--- a/extensions/renderer/resources/guest_view/guest_view_container.js
+++ b/extensions/renderer/resources/guest_view/guest_view_container.js
@@ -5,14 +5,12 @@
 // This module implements the shared functionality for different guestview
 // containers, such as web_view, app_view, etc.
 
-var DocumentNatives = requireNative('document_natives');
 var GuestView = require('guestView').GuestView;
 var GuestViewInternalNatives = requireNative('guest_view_internal');
 var IdGenerator = requireNative('id_generator');
 var MessagingNatives = requireNative('messaging_natives');
 
 function GuestViewContainer(element, viewType) {
-  privates(element).internal = this;
   this.attributes = {};
   this.element = element;
   this.elementAttached = false;
@@ -36,34 +34,6 @@
 // of Object inheritance. https://crbug.com/701034
 GuestViewContainer.prototype.__proto__ = null;
 
-// Forward public API methods from |proto| to their internal implementations.
-GuestViewContainer.forwardApiMethods = function(proto, apiMethods) {
-  var createProtoHandler = function(m) {
-    return function(var_args) {
-      var internal = privates(this).internal;
-      return $Function.apply(internal[m], internal, arguments);
-    };
-  };
-  for (var i = 0; apiMethods[i]; ++i) {
-    proto[apiMethods[i]] = createProtoHandler(apiMethods[i]);
-  }
-};
-
-// Registers the browserplugin and guestview as custom elements once the
-// document has loaded.
-GuestViewContainer.registerElement = function(guestViewContainerType) {
-  var useCapture = true;
-  window.addEventListener('readystatechange', function listener(event) {
-    if (document.readyState == 'loading')
-      return;
-
-    registerInternalElement(
-        $String.toLowerCase(guestViewContainerType.VIEW_TYPE));
-    registerGuestViewElement(guestViewContainerType);
-    window.removeEventListener(event.type, listener, useCapture);
-  }, useCapture);
-};
-
 // Create the 'guest' property to track new GuestViews and always listen for
 // their resizes.
 GuestViewContainer.prototype.setupGuestProperty = function() {
@@ -193,108 +163,5 @@
 GuestViewContainer.prototype.onElementDetached = function() {};
 GuestViewContainer.prototype.setupAttributes = function() {};
 
-// Registers the browser plugin <object> custom element. |viewType| is the
-// name of the specific guestview container (e.g. 'webview').
-function registerInternalElement(viewType) {
-  var proto = $Object.create(HTMLElement.prototype);
-
-  proto.createdCallback = function() {
-    this.setAttribute('type', 'application/browser-plugin');
-    this.setAttribute('id', 'browser-plugin-' + IdGenerator.GetNextId());
-    this.style.width = '100%';
-    this.style.height = '100%';
-  };
-
-  proto.attachedCallback = function() {
-    // Load the plugin immediately.
-    var unused = this.nonExistentAttribute;
-  };
-
-  proto.attributeChangedCallback = function(name, oldValue, newValue) {
-    var internal = privates(this).internal;
-    if (!internal) {
-      return;
-    }
-    internal.handleInternalElementAttributeMutation(name, oldValue, newValue);
-  };
-
-  GuestViewContainer[viewType + 'BrowserPlugin'] =
-      DocumentNatives.RegisterElement(viewType + 'browserplugin',
-                                      {extends: 'object', prototype: proto});
-
-  delete proto.createdCallback;
-  delete proto.attachedCallback;
-  delete proto.detachedCallback;
-  delete proto.attributeChangedCallback;
-};
-
-// Registers the guestview container as a custom element.
-// |guestViewContainerType| is the type of guestview container
-// (e.g. WebViewImpl).
-function registerGuestViewElement(guestViewContainerType) {
-  var proto = $Object.create(HTMLElement.prototype);
-
-  proto.createdCallback = function() {
-    new guestViewContainerType(this);
-  };
-
-  proto.attachedCallback = function() {
-    var internal = privates(this).internal;
-    if (!internal) {
-      return;
-    }
-    internal.elementAttached = true;
-    internal.willAttachElement();
-    internal.onElementAttached();
-  };
-
-  proto.attributeChangedCallback = function(name, oldValue, newValue) {
-    var internal = privates(this).internal;
-    if (!internal || !internal.attributes[name]) {
-      return;
-    }
-
-    // Let the changed attribute handle its own mutation.
-    internal.attributes[name].maybeHandleMutation(oldValue, newValue);
-  };
-
-  proto.detachedCallback = function() {
-    var internal = privates(this).internal;
-    if (!internal) {
-      return;
-    }
-    internal.elementAttached = false;
-    internal.internalInstanceId = 0;
-    internal.guest.destroy();
-    internal.onElementDetached();
-  };
-
-  // Override |focus| to let |internal| handle it.
-  proto.focus = function() {
-    var internal = privates(this).internal;
-    if (!internal) {
-      return;
-    }
-    internal.focus();
-  };
-
-  // Let the specific view type add extra functionality to its custom element
-  // through |proto|.
-  if (guestViewContainerType.setupElement) {
-    guestViewContainerType.setupElement(proto);
-  }
-
-  window[guestViewContainerType.VIEW_TYPE] = DocumentNatives.RegisterElement(
-      $String.toLowerCase(guestViewContainerType.VIEW_TYPE),
-      {prototype: proto});
-
-  // Delete the callbacks so developers cannot call them and produce unexpected
-  // behavior.
-  delete proto.createdCallback;
-  delete proto.attachedCallback;
-  delete proto.detachedCallback;
-  delete proto.attributeChangedCallback;
-}
-
 // Exports.
 exports.$set('GuestViewContainer', GuestViewContainer);
diff --git a/extensions/renderer/resources/guest_view/guest_view_container_element.js b/extensions/renderer/resources/guest_view/guest_view_container_element.js
new file mode 100644
index 0000000..e6f38e4
--- /dev/null
+++ b/extensions/renderer/resources/guest_view/guest_view_container_element.js
@@ -0,0 +1,158 @@
+// 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.
+
+// Common custom element registration code for the various guest view
+// containers.
+
+var GuestViewContainer = require('guestViewContainer').GuestViewContainer;
+var DocumentNatives = requireNative('document_natives');
+var IdGenerator = requireNative('id_generator');
+
+// Registers the browserplugin and guestview as custom elements once the
+// document has loaded.
+// |containerElementType| is a GuestViewContainerElement (e.g. WebViewElement)
+// |containerType| is a GuestViewContainer (e.g. WebViewImpl)
+function registerElement(elementName, containerElementType, containerType) {
+  var useCapture = true;
+  window.addEventListener('readystatechange', function listener(event) {
+    if (document.readyState == 'loading')
+      return;
+
+    registerInternalElement($String.toLowerCase(elementName));
+    registerGuestViewElement(elementName, containerElementType, containerType);
+    window.removeEventListener(event.type, listener, useCapture);
+  }, useCapture);
+}
+
+// Registers the browser plugin <object> custom element. |viewType| is the
+// name of the specific guestview container (e.g. 'webview').
+function registerInternalElement(viewType) {
+  var InternalElement = class extends HTMLObjectElement {}
+
+  InternalElement.prototype.createdCallback = function() {
+    this.setAttribute('type', 'application/browser-plugin');
+    this.setAttribute('id', 'browser-plugin-' + IdGenerator.GetNextId());
+    this.style.width = '100%';
+    this.style.height = '100%';
+  };
+
+  InternalElement.prototype.attachedCallback = function() {
+    // Load the plugin immediately.
+    var unused = this.nonExistentAttribute;
+  };
+
+  InternalElement.prototype.attributeChangedCallback = function(
+      name, oldValue, newValue) {
+    var internal = privates(this).internal;
+    if (!internal) {
+      return;
+    }
+    internal.handleInternalElementAttributeMutation(name, oldValue, newValue);
+  };
+
+  GuestViewContainer[viewType + 'BrowserPlugin'] =
+      DocumentNatives.RegisterElement(
+          viewType + 'browserplugin',
+          {extends: 'object', prototype: InternalElement.prototype});
+
+  delete InternalElement.prototype.createdCallback;
+  delete InternalElement.prototype.attachedCallback;
+  delete InternalElement.prototype.attributeChangedCallback;
+}
+
+// Conceptually, these are methods on GuestViewContainerElement.prototype.
+// However, since that is exposed to users, we only set these callbacks on
+// the prototype temporarily during the custom element registration.
+var customElementCallbacks = {
+  makeCreatedCallback: function(containerType) {
+    return function() {
+      privates(this).internal = new containerType(this);
+    };
+  },
+
+  attachedCallback: function() {
+    var internal = privates(this).internal;
+    if (!internal)
+      return;
+
+    internal.elementAttached = true;
+    internal.willAttachElement();
+    internal.onElementAttached();
+  },
+
+  attributeChangedCallback: function(name, oldValue, newValue) {
+    var internal = privates(this).internal;
+    if (!internal || !internal.attributes[name])
+      return;
+
+    // Let the changed attribute handle its own mutation.
+    internal.attributes[name].maybeHandleMutation(oldValue, newValue);
+  },
+
+  detachedCallback: function() {
+    var internal = privates(this).internal;
+    if (!internal)
+      return;
+
+    internal.elementAttached = false;
+    internal.internalInstanceId = 0;
+    internal.guest.destroy();
+    internal.onElementDetached();
+  }
+};
+
+// Registers a GuestViewContainerElement as a custom element.
+function registerGuestViewElement(
+    elementName, containerElementType, containerType) {
+  // We set the lifecycle callbacks so that they're available during
+  // registration. Once that's done, we'll delete them so developers cannot
+  // call them and produce unexpected behaviour.
+  GuestViewContainerElement.prototype.createdCallback =
+      customElementCallbacks.makeCreatedCallback(containerType);
+  GuestViewContainerElement.prototype.attachedCallback =
+      customElementCallbacks.attachedCallback;
+  GuestViewContainerElement.prototype.detachedCallback =
+      customElementCallbacks.detachedCallback;
+  GuestViewContainerElement.prototype.attributeChangedCallback =
+      customElementCallbacks.attributeChangedCallback;
+
+  window[elementName] = DocumentNatives.RegisterElement(
+      $String.toLowerCase(elementName),
+      {prototype: containerElementType.prototype});
+
+  delete GuestViewContainerElement.prototype.createdCallback;
+  delete GuestViewContainerElement.prototype.attachedCallback;
+  delete GuestViewContainerElement.prototype.detachedCallback;
+  delete GuestViewContainerElement.prototype.attributeChangedCallback;
+}
+
+// Forward public API methods from |containerElementType|'s prototype to their
+// internal implementations.
+function forwardApiMethods(containerElementType, methodNames) {
+  var createProtoHandler = function(m) {
+    return function(var_args) {
+      var internal = privates(this).internal;
+      return $Function.apply(internal[m], internal, arguments);
+    };
+  };
+  for (var m of methodNames) {
+    containerElementType.prototype[m] = createProtoHandler(m);
+  }
+}
+
+class GuestViewContainerElement extends HTMLElement {}
+
+// Override |focus| to let |internal| handle it.
+GuestViewContainerElement.prototype.focus = function() {
+  var internal = privates(this).internal;
+  if (!internal)
+    return;
+
+  internal.focus();
+};
+
+// Exports.
+exports.$set('GuestViewContainerElement', GuestViewContainerElement);
+exports.$set('registerElement', registerElement);
+exports.$set('forwardApiMethods', forwardApiMethods);
diff --git a/extensions/renderer/resources/guest_view/guest_view_deny.js b/extensions/renderer/resources/guest_view/guest_view_deny.js
index b6735604..4724f52f 100644
--- a/extensions/renderer/resources/guest_view/guest_view_deny.js
+++ b/extensions/renderer/resources/guest_view/guest_view_deny.js
@@ -7,7 +7,6 @@
 // error message when developers attempt to use them.
 
 var DocumentNatives = requireNative('document_natives');
-var GuestViewContainer = require('guestViewContainer').GuestViewContainer;
 
 var ERROR_MESSAGE = 'You do not have permission to use the %1 element.' +
     ' Be sure to declare the "%1" permission in your manifest file.';
@@ -23,22 +22,20 @@
 
 // Registers a GuestView custom element.
 function registerGuestViewElement(viewType) {
-  var proto = $Object.create(HTMLElement.prototype);
+  var DeniedElement = class extends HTMLElement {}
 
-  proto.createdCallback = function() {
+  // We set the lifecycle callback so that it's available during
+  // registration. Once that's done, we'll delete it so developers cannot
+  // call it.
+  DeniedElement.prototype.createdCallback = function() {
     window.console.error(
         $String.replace(ERROR_MESSAGE, /%1/g, $String.toLowerCase(viewType)));
   };
 
   window[viewType] = DocumentNatives.RegisterElement(
-      $String.toLowerCase(viewType), {prototype: proto});
+      $String.toLowerCase(viewType), {prototype: DeniedElement.prototype});
 
-  // Delete the callbacks so developers cannot call them and produce unexpected
-  // behavior.
-  delete proto.createdCallback;
-  delete proto.attachedCallback;
-  delete proto.detachedCallback;
-  delete proto.attributeChangedCallback;
+  delete DeniedElement.prototype.createdCallback;
 }
 
 var useCapture = true;
@@ -46,13 +43,13 @@
   if (document.readyState == 'loading')
     return;
 
-  for (var i = 0; i != VIEW_TYPES.length; ++i) {
+  for (var viewType of VIEW_TYPES) {
     // Register the error-providing custom element only for those view types
     // that have not already been registered. Since this module is always loaded
     // last, all the view types that are available (i.e. have the proper
     // permissions) will have already been registered on |window|.
-    if (!window[VIEW_TYPES[i]])
-      registerGuestViewElement(VIEW_TYPES[i]);
+    if (!window[viewType])
+      registerGuestViewElement(viewType);
   }
 
   window.removeEventListener(event.type, listener, useCapture);
diff --git a/extensions/renderer/resources/guest_view/web_view/web_view.js b/extensions/renderer/resources/guest_view/web_view/web_view.js
index 9357919..ee8278f5 100644
--- a/extensions/renderer/resources/guest_view/web_view/web_view.js
+++ b/extensions/renderer/resources/guest_view/web_view/web_view.js
@@ -6,7 +6,6 @@
 // BrowserPlugin object element. The object element is hidden within
 // the shadow DOM of the WebView element.
 
-var DocumentNatives = requireNative('document_natives');
 var GuestView = require('guestView').GuestView;
 var GuestViewContainer = require('guestViewContainer').GuestViewContainer;
 var GuestViewInternalNatives = requireNative('guest_view_internal');
@@ -28,14 +27,6 @@
 
 WebViewImpl.prototype.__proto__ = GuestViewContainer.prototype;
 
-WebViewImpl.VIEW_TYPE = 'WebView';
-
-// Add extra functionality to |this.element|.
-WebViewImpl.setupElement = function(proto) {
-  // Forward proto.foo* method calls to WebViewImpl.foo*.
-  GuestViewContainer.forwardApiMethods(proto, WEB_VIEW_API_METHODS);
-};
-
 // Sets up all of the webview attributes.
 WebViewImpl.prototype.setupAttributes = function() {
   this.attributes[WebViewConstants.ATTRIBUTE_ALLOWSCALING] =
@@ -334,7 +325,5 @@
   }
 })();
 
-GuestViewContainer.registerElement(WebViewImpl);
-
 // Exports.
 exports.$set('WebViewImpl', WebViewImpl);
diff --git a/extensions/renderer/resources/guest_view/web_view/web_view_element.js b/extensions/renderer/resources/guest_view/web_view/web_view_element.js
new file mode 100644
index 0000000..2b6a55c5
--- /dev/null
+++ b/extensions/renderer/resources/guest_view/web_view/web_view_element.js
@@ -0,0 +1,19 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// The <webview> custom element.
+
+var registerElement = require('guestViewContainerElement').registerElement;
+var forwardApiMethods = require('guestViewContainerElement').forwardApiMethods;
+var GuestViewContainerElement =
+    require('guestViewContainerElement').GuestViewContainerElement;
+var WebViewImpl = require('webView').WebViewImpl;
+var WEB_VIEW_API_METHODS = require('webViewApiMethods').WEB_VIEW_API_METHODS;
+
+class WebViewElement extends GuestViewContainerElement {}
+
+// Forward WebViewElement.foo* method calls to WebViewImpl.foo*.
+forwardApiMethods(WebViewElement, WEB_VIEW_API_METHODS);
+
+registerElement('WebView', WebViewElement, WebViewImpl);
diff --git a/extensions/strings/extensions_strings_en-GB.xtb b/extensions/strings/extensions_strings_en-GB.xtb
index edebeba..575a66f 100644
--- a/extensions/strings/extensions_strings_en-GB.xtb
+++ b/extensions/strings/extensions_strings_en-GB.xtb
@@ -56,6 +56,7 @@
 <translation id="7003844668372540529">Unknown product <ph name="PRODUCT_ID" /> from <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Manifest file is invalid</translation>
 <translation id="7217838517480956708">The administrator of this machine requires <ph name="EXTENSION_NAME" /> to be installed. It cannot be removed or modified.</translation>
+<translation id="7612608473764576263">Input value for private key must be a valid format (PKCS#8-format PEM-encoded RSA key).</translation>
 <translation id="7939686037314084444">The extension failed to load properly. It might not be able to intercept network requests.</translation>
 <translation id="7972881773422714442">Options: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">User-facing</translation>
diff --git a/extensions/strings/extensions_strings_mr.xtb b/extensions/strings/extensions_strings_mr.xtb
index 1479c77..213a434 100644
--- a/extensions/strings/extensions_strings_mr.xtb
+++ b/extensions/strings/extensions_strings_mr.xtb
@@ -5,7 +5,7 @@
 <translation id="1140871961407805696">पर्यावरण-समोरील</translation>
 <translation id="1196338895211115272">खासगी की निर्यात करण्यात अयशस्वी.</translation>
 <translation id="1420684932347524586">अरेरे! यादृच्छिक RSA खासगी की व्युत्पन्न करण्यात अयशस्वी.</translation>
-<translation id="1445572445564823378">हा विस्तार <ph name="PRODUCT_NAME" /> मंद होत आहे. <ph name="PRODUCT_NAME" /> चे कार्यप्रदर्शन पुनर्संचयित करण्‍यासाठी आपण ते ‍अक्षम करणे आवश्‍यक आहे.</translation>
+<translation id="1445572445564823378">हे एक्स्टेंशन <ph name="PRODUCT_NAME" /> हळू चालत आहे. <ph name="PRODUCT_NAME" /> चे काम रिस्टोअर करण्‍यासाठी तुम्ही ते ‍अक्षम करणे आवश्‍यक आहे.</translation>
 <translation id="1468038450257740950">WebGL समर्थित नाही.</translation>
 <translation id="149347756975725155">विस्तार प्रतीक '<ph name="ICON" />' लोड करणे शक्य नाही.</translation>
 <translation id="1803557475693955505">'पार्श्वभूमी पृष्ठ '<ph name="BACKGROUND_PAGE" />'  लोड करणे शक्य नाही.</translation>
@@ -16,13 +16,13 @@
 <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="2988488679308982380">हे पॅकेज इंस्टॉल करणे शक्य नाही: '<ph name="ERROR_CODE" />'</translation>
-<translation id="3115238746683532089"><ph name="VENDOR_ID" /> विक्रेत्याकडील <ph name="PRODUCT_ID" /> अज्ञात उत्पादन (अनुक्रमांक <ph name="SERIAL_NUMBER" />)</translation>
+<translation id="3115238746683532089"><ph name="VENDOR_ID" /> विक्रेत्याकडील <ph name="PRODUCT_ID" /> अज्ञात उत्पादन (सिरीअल नंबर <ph name="SERIAL_NUMBER" />)</translation>
 <translation id="3144135466825225871">crx फाइल पुनर्स्थित करण्यात अयशस्वी. फाइल वापरात आहे किंवा नाही हे पाहण्यासाठी तपासा.</translation>
 <translation id="3163201441334626963"><ph name="VENDOR_ID" /> विक्रेत्याकडील <ph name="PRODUCT_ID" /> अज्ञात उत्पादन</translation>
 <translation id="3302709122321372472">सामग्री स्क्रिप्टसाठी css '<ph name="RELATIVE_PATH" />' लोड करणे शक्य नाही.</translation>
 <translation id="3369521687965833290">विस्तार अनपॅक करणे शक्य नाही. विस्तार सुरक्षितपणे अनपॅक करण्यासाठी, आपल्या प्रोफाइल निर्देशिकेत ड्राइव्ह अक्षरासह प्रारंभ होणारा पथ असणे आणि जंक्शन, माउंट पॉइंट किंवा सिमलिंक नसणे आवश्यक आहे. आपल्या प्रोफाइलसाठी असा कोणताही पथ विद्यमान नाही.</translation>
-<translation id="3393440416772303020"><ph name="PRODUCT_NAME" /> (अनुक्रमांक <ph name="SERIAL_NUMBER" />)</translation>
-<translation id="3466070586188012397"><ph name="VENDOR_ID" /> विक्रेत्याकडील <ph name="PRODUCT_NAME" /> (अनुक्रमांक <ph name="SERIAL_NUMBER" />)</translation>
+<translation id="3393440416772303020"><ph name="PRODUCT_NAME" /> (सिरीअल नंबर <ph name="SERIAL_NUMBER" />)</translation>
+<translation id="3466070586188012397"><ph name="VENDOR_ID" /> विक्रेत्याकडील <ph name="PRODUCT_NAME" /> (सिरीअल नंबर <ph name="SERIAL_NUMBER" />)</translation>
 <translation id="3561217442734750519">खासगी की साठी इनपुट मूल्य वैध पथ असावा.</translation>
 <translation id="388442998277590542">पर्याय पृष्ठ '<ph name="OPTIONS_PAGE" />' लोड करणे शक्य नाही.</translation>
 <translation id="3984413272403535372">विस्तारात साइन करताना एरर.</translation>
@@ -41,7 +41,7 @@
 <translation id="5627523580512561598">विस्तार <ph name="EXTENSION_NAME" /></translation>
 <translation id="5960890139610307736">ExtensionView: <ph name="EXTENSIONVIEW_TAG_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="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>
 <translation id="6322279351188361895">खासगी की वाचण्यात अयशस्वी.</translation>
@@ -49,7 +49,7 @@
 <translation id="641087317769093025">विस्तार अनझिप करणे शक्य झाले नाही</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="6580950983454333167"><ph name="VENDOR_NAME" /> (सिरीअल नंबर <ph name="SERIAL_NUMBER" />) कडील <ph name="PRODUCT_NAME" /></translation>
 <translation id="6731255991101203740">अनझिप करण्यासाठी निर्देशिका तयार करणे शक्य झाले नाही: '<ph name="DIRECTORY_PATH" />'</translation>
 <translation id="677806580227005219">Mimehandler: <ph name="MIMEHANDLERVIEW_TAG_NAME" /></translation>
 <translation id="6840444547062817500">या विस्ताराने स्वतःस वारंवार रीलोड केले आहे.</translation>
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 556835c7..643c432 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
@@ -7,16 +7,16 @@
 <translation id="1341317949260424055">Google ला सिस्टम आणि वापर डेटा पाठवून Chromium आणि त्याच्या सुरक्षिततेत सुधारणा करा</translation>
 <translation id="1472013873724362412">आपले खाते Chromium वर कार्य करीत नाही. कृपया आपल्या डोमेन प्रशासकाशी संपर्क साधा किंवा साइन इन करण्यासाठी एक नियमित Google खाते वापरा.</translation>
 <translation id="1736662517232558588">Chromium डेटा साफ करण्यात आला</translation>
-<translation id="1838412507805038478"><ph name="ISSUER" /> ने या वेबसाइटचे प्रमाणपत्र जारी केले हे 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="2178608107313874732">Chromium आत्ता आपला कॅमेरा वापरू शकत नाही</translation>
 <translation id="2195025571279539885">Chromium ने या साइटवरून पुढील वेळी <ph name="LANGUAGE_NAME" /> पेज भाषांतरित करण्याची ऑफर द्यावी असे आपण इच्छिता?</translation>
-<translation id="2647554856022461007">Chromium आपला ब्राउझिंग अनुभव सुधारण्यासाठी वेब सेवा वापरू शकते. आपण या सेवा वैकल्पिकपणे अक्षम करू शकता. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
+<translation id="2647554856022461007">Chromium तुमचा ब्राउझिंग अनुभवात सुधारणा करण्यासाठी वेब सेवा वापरू शकते. तुमच्याकडे या सेवा बंद करण्याचा पर्याय आहे. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="2687023731466035790">Chromium मध्ये Google स्मार्ट मिळवा</translation>
-<translation id="2730884209570016437">Chromium आपला कॅमेरा वापरू शकत नाही कारण दुसरा अॅप्लिकेशन तो वापरत आहे</translation>
+<translation id="2730884209570016437">Chromium तुमचा कॅमेरा वापरू शकत नाही कारण दुसरा अॅप्स तो वापरत आहे</translation>
 <translation id="2797210818057553964">तुम्ही Chromium सेटिंग्जमध्ये हे कधीही कस्टमाइझ करू शकता</translation>
 <translation id="3256316712990552818">Chromium वर कॉपी केले</translation>
 <translation id="3413120535237193088">सर्व डिव्हाइसवर आपले बुकमार्क प्राप्त करण्यासाठी, 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 754311df..a220426 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
@@ -7,7 +7,7 @@
 <translation id="1816764564654397850">Google Chrome गोपनीयता सूचना</translation>
 <translation id="1863312987075920112">हे अॅप्लिकेशन वापरून, तुम्ही Chrome च्या <ph name="BEGIN_LINK_TOS" />सेवा अटी<ph name="END_LINK_TOS" /> आणि <ph name="BEGIN_LINK_PRIVACY" />गोपनीयता सूचने<ph name="END_LINK_PRIVACY" /> ला सहमती देता.</translation>
 <translation id="1878302395768190018">तुम्ही Chrome सेटिंग्जमध्ये हे कधीही कस्टमाइझ करू शकता</translation>
-<translation id="2147651015520127414"><ph name="ISSUER" /> ने या वेबसाइटचे प्रमाणपत्र जारी केले हे Chrome ने सत्यापित केले.</translation>
+<translation id="2147651015520127414"><ph name="ISSUER" /> ने या वेबसाइटचे सर्टिफिकेट जारी केले हे Chrome ने पडताळले.</translation>
 <translation id="2334084861041072223">Copyright <ph name="YEAR" /> Google Inc. सर्व हक्क राखीव.</translation>
 <translation id="2342981853652716282">तुमच्या सर्व डिव्हाइसवर तुमचे बुकमार्क, पासवर्ड आणि अधिक मिळवण्यासाठी Chromeमध्ये साइन इन करा.</translation>
 <translation id="2347208864470321755">हे वैशिष्‍ट्य चालू असते तेव्‍हा, Google Translate चा वापर करून Chrome इतर भाषांमध्‍ये लिहिलेल्‍या पृष्‍ठांचे भाषांतर करण्‍यासाठी ऑफर करेल. <ph name="BEGIN_LINK" />अधिक जाणून घ्‍या<ph name="END_LINK" /></translation>
@@ -34,7 +34,7 @@
 <translation id="4523886039239821078">Chrome क्रॅश होण्याचे कारण काही अॅड-ऑन आहेत. कृपया ती अनइंस्टॉल करा:</translation>
 <translation id="4615174829807303908"><ph name="SIGNOUT_MANAGED_DOMAIN" /> द्वारे व्यवस्थापित केलेल्या खात्यामधून आपण साइन आउट करीत आहात. हे आपला Chrome डेटा या डिव्हाइस वरून हटवेल परंतु आपला डेटा आपल्या Google खात्यामध्ये असेल.</translation>
 <translation id="5240817131241497236">Chrome मध्ये सिंक, पर्सनलायझेशन आणि इतर Google सेवा नियंत्रित करणारी सेटिंग्ज बदलली आहेत. याचा तुमच्या सद्य सेटिंग्जवर परिणाम होऊ शकतो.</translation>
-<translation id="5389212809648216794">Google Chrome आपला कॅमेरा वापरू शकत नाही कारण दुसरा अॅप्लिकेशन सध्या तो वापरत आहे.</translation>
+<translation id="5389212809648216794">Google Chrome तुमचा कॅमेरा वापरू शकत नाही कारण दुसरे अॅप्स सध्या तो वापरत आहे.</translation>
 <translation id="5489543008378040943"><ph name="BEGIN_LINK" />सेटिंग्ज<ph name="END_LINK" /> कधीही कस्टमाइझ केली जाऊ शकतात. Chrome आणि भाषांतर, शोध आणि जाहिरातींसारख्या Google सेवा पर्सनलाइझ करण्यासाठी Google तुम्ही भेट देत असलेल्या साइटवरील आशय, ब्राउझर परस्परसंवाद आणि अॅक्टिव्हिटी वापरू शकते.</translation>
 <translation id="5639704535586432836">सेटिंग्ज &gt; गोपनीयता &gt; कॅमेरा &gt; Google Chrome उघडा आणि कॅमेरा चालू करा.</translation>
 <translation id="5642200033778930880">विभाजित दृश्य मोडमध्ये Google Chrome आपला कॅमेरा वापरू शकत नाही</translation>
@@ -58,6 +58,6 @@
 <translation id="840168496893712993">Chrome क्रॅश होण्याचे कारण काही अॅड-ऑन आहेत. कृपया ते अनइंस्टॉल करून पहा.</translation>
 <translation id="8459495907675268833">निवडलेला डेटा Chrome आणि संकालित केलेल्या डिव्हाइसेस मधून काढला गेला आहे. आपल्या Google खात्यामध्ये history.google.com येथे Google च्या इतर सेवांमधील शोध आणि क्रियाकलाप यासारख्या ब्राउझिंग इतिहासाची इतर स्वरूपे असू शकतात.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
-<translation id="8606668294522778825">Google Chrome आपला ब्राउझिंग अनुभव सुधारण्यासाठी वेब सेवा वापरू शकते. आपण या सेवा वैकल्पिकपणे अक्षम करू शकता. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
+<translation id="8606668294522778825">Google Chrome तुमच्या ब्राउझिंग अनुभवात सुधारणा करण्यासाठी वेब सेवा वापरू शकते. तुमच्याकडे या सेवा बंद करण्याचा पर्याय आहे. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="96145293669295453">Chrome टीप. अधिक टॅब पर्यायांसाठी, टूलबारवरील टॅब दाखवा बटण दाबा आणि धरून ठेवा, जे तुमच्या स्क्रीनच्या खाली किंवा सर्वात वर असते.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
index 3ea9622..5a1d77b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -4,6 +4,7 @@
 <translation id="1016495303386450659">আইটেম আপডেট হয়েছে</translation>
 <translation id="1047726139967079566">এই পৃষ্ঠাটি বুকমার্ক করুন...</translation>
 <translation id="1049743911850919806">ছদ্মবেশী</translation>
+<translation id="1063454504051558093">অন্য পাসওয়ার্ড ব্যবহার করুন...</translation>
 <translation id="1076421457278169141">কোড স্ক্যান করা হয়েছে</translation>
 <translation id="1084365883616172403">Facebook পোষ্ট সম্পূর্ণ হয়েছে৷</translation>
 <translation id="1104948393051856124">স্বীকার করুন ও চালিয়ে যান</translation>
@@ -51,6 +52,7 @@
 <translation id="1690731385917361335">কোনো আইটেম নেই</translation>
 <translation id="1700629756560807968"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" />টি নির্বাচিত</translation>
 <translation id="1740468249224277719">ইনস্টল করতে দুবার ট্যাপ করুন।</translation>
+<translation id="1746815479209538200">ওয়েব ব্রাউজ করতে, একটি নতুন ট্যাব যোগ করুন।</translation>
 <translation id="17513872634828108">খোলা ট্যাব</translation>
 <translation id="1752547299766512813">পাসওয়ার্ডগুলি সেভ করুন</translation>
 <translation id="1753905327828125965">সর্বাধিক দেখা</translation>
@@ -61,6 +63,7 @@
 <translation id="1876721852596493031">ব্যবহারের ডেটা পাঠান</translation>
 <translation id="1886928167269928266">শুরুর সময়</translation>
 <translation id="1911619930368729126">Google ড্রাইভে আপলোড করুন</translation>
+<translation id="191179954310195971">Google-এর অন্য পরিষেবা</translation>
 <translation id="1941314575388338491">কপি করতে দুবার আলতো চাপুন।</translation>
 <translation id="1952728750904661634">পরিচালিত অ্যাকাউন্ট দিয়ে প্রবেশ করুন</translation>
 <translation id="1974060860693918893">উন্নত</translation>
@@ -166,6 +169,7 @@
 <translation id="3628119975092896051">আপনার পড়ার তালিকা অফলাইনে উপলব্ধ। আপনার পড়ার তালিকায় কোনো পৃষ্ঠা যোগ করতে <ph name="SHARE_OPENING_ICON" /> আলতো চাপুন।</translation>
 <translation id="3638472932233958418">পূর্বলোড ওয়েবপৃষ্ঠা</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> এ বুকমার্ক করা হয়েছে</translation>
+<translation id="3765471630796399471">অন্য পাসওয়ার্ড ব্যবহার করুন</translation>
 <translation id="3771033907050503522">ছদ্মবেশী ট্যাবগুলি</translation>
 <translation id="3779810277399252432">কোনও ইন্টারনেট সংযোগ নেই৷</translation>
 <translation id="3783017676699494206">ছবি সেভ করুন</translation>
@@ -315,6 +319,7 @@
 <translation id="6344783595350022745">পাঠ্য সাফ করুন</translation>
 <translation id="6346549652287021269">নতুন ডাউনলোড শুরু করবেন?</translation>
 <translation id="6362362396625799311">কোনো ছদ্মবেশী ট্যাব নেই</translation>
+<translation id="6363526231572697780">ব্যবহারকারীর নাম নেই</translation>
 <translation id="6374469231428023295">আবার চেষ্টা করুন</translation>
 <translation id="6380866119319257197">আপনি যদি আপনার পাসফ্রেজ ভুলে যান বা এই সেটিং পরিবর্তন করতে চান, তাহলে <ph name="BEGIN_LINK" />সিঙ্ক পুনরায় সেট করুন<ph name="END_LINK" /></translation>
 <translation id="6389470377220713856">কার্ডে থাকা নাম</translation>
@@ -390,12 +395,14 @@
 <translation id="7638584964844754484">ত্রুটিপূর্ণ পাসফ্রেজ</translation>
 <translation id="7649070708921625228">সহায়তা</translation>
 <translation id="7658239707568436148">বাতিল</translation>
+<translation id="766891008101699113">ব্যক্তিগতভাবে ওয়েব ব্রাউজ করতে, একটি নতুন ট্যাব যোগ করুন।</translation>
 <translation id="7671141431838911305">ইনস্টল করুন</translation>
 <translation id="7765158879357617694">সরান</translation>
 <translation id="7769602470925380267">স্বীকার করে প্রস্থান করুন</translation>
 <translation id="7772032839648071052">পাসফ্রেজ নিশ্চিত করুন</translation>
 <translation id="7781829728241885113">গতকাল</translation>
 <translation id="780301667611848630">না থাক</translation>
+<translation id="7840771868269352570">আপনার বেছে নেওয়া আইটেমগুলি সরানো হবে।</translation>
 <translation id="7856733331829174190">ডাউনলোড করা যায়নি</translation>
 <translation id="7859704718976024901">ব্রাউজিং ইতিহাস</translation>
 <translation id="7918293828610777738">আপনার পড়ার তালিকাটি অফলাইনে উপলভ্য। আপনার পড়ার তালিকায় কোনও পৃষ্ঠা যোগ করতে <ph name="SHARE_OPENING_ICON" />  তারপর <ph name="READ_LATER_TEXT" /> ট্যাপ করুন।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
index 34a0e06..b182f80 100644
--- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -289,6 +289,7 @@
 <translation id="5957613098218939406">More Options</translation>
 <translation id="5964480694698977962">Create new incognito tab.</translation>
 <translation id="5965679971710331625">You're signed in</translation>
+<translation id="5979837087407522202">Search passwords</translation>
 <translation id="5982717868370722439">Add existing data to <ph name="USER_EMAIL" />.</translation>
 <translation id="6012140227487808125">Encrypting…</translation>
 <translation id="6021332621416007159">Open in...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
index cd7d2ee8..94c4168 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -4,6 +4,7 @@
 <translation id="1016495303386450659">Elemento actualizado</translation>
 <translation id="1047726139967079566">Agregar esta página a favoritos...</translation>
 <translation id="1049743911850919806">Incógnito</translation>
+<translation id="1063454504051558093">Usar otra contraseña…</translation>
 <translation id="1076421457278169141">Código escaneado</translation>
 <translation id="1084365883616172403">Entrada de Facebook publicada</translation>
 <translation id="1104948393051856124">Aceptar y continuar</translation>
@@ -62,6 +63,7 @@
 <translation id="1876721852596493031">Enviar datos de uso</translation>
 <translation id="1886928167269928266">Principio</translation>
 <translation id="1911619930368729126">Cargar a Google Drive</translation>
+<translation id="191179954310195971">Otros servicios de Google</translation>
 <translation id="1941314575388338491">Presiona dos veces para copiar.</translation>
 <translation id="1952728750904661634">Acceder con una cuenta administrada</translation>
 <translation id="1974060860693918893">Avanzada</translation>
@@ -167,6 +169,7 @@
 <translation id="3628119975092896051">Tu lista de lectura está disponible sin conexión. Para agregar una página, presiona <ph name="SHARE_OPENING_ICON" />.</translation>
 <translation id="3638472932233958418">Precargar pág. web</translation>
 <translation id="3691593122358196899">Se agregó a favoritos en <ph name="FOLDER_TITLE" /></translation>
+<translation id="3765471630796399471">Usar otra contraseña</translation>
 <translation id="3771033907050503522">Pestañas de incógnito</translation>
 <translation id="3779810277399252432">Sin conexión a Internet</translation>
 <translation id="3783017676699494206">Guardar imagen</translation>
@@ -315,6 +318,7 @@
 <translation id="6344783595350022745">Borrar texto</translation>
 <translation id="6346549652287021269">¿Comenzar una descarga nueva?</translation>
 <translation id="6362362396625799311">No hay pestañas de incógnito</translation>
+<translation id="6363526231572697780">Sin nombre de usuario</translation>
 <translation id="6374469231428023295">Volver a intentar</translation>
 <translation id="6380866119319257197">Si olvidas la frase de contraseña o quieres cambiar esta configuración, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" /></translation>
 <translation id="6389470377220713856">Nombre en tarj.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index 09083a8d..0c946f6e8 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -70,7 +70,7 @@
 <translation id="1989112275319619282">ब्राउझ करा</translation>
 <translation id="2015722694326466240">पासवर्ड पाहण्यासाठी, तुम्ही प्रथम तुमच्या डीव्हाइसवर पासकोड सेट करणे आवश्यक आहे.</translation>
 <translation id="2068952045031577364">गेल्या आठवड्यात</translation>
-<translation id="2079545284768500474">पूर्ववत करा</translation>
+<translation id="2079545284768500474">पहिल्यासारखे करा</translation>
 <translation id="209018056901015185">डेस्कटॉप साइटची विनंती करा</translation>
 <translation id="2103075008456228677">history.google.com उघडा</translation>
 <translation id="2116625576999540962"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> आयटम हलविले</translation>
@@ -166,7 +166,7 @@
 <translation id="3607167657931203000">स्वयं-भरण डेटा</translation>
 <translation id="360930808415985584">सिंक, पर्सनलायझेशन आणि बरेच काही नियंत्रित करा</translation>
 <translation id="3609785682760573515">संकालन करत आहे...</translation>
-<translation id="3628119975092896051">तुमची वाचन सूची ऑफलाइन उपलब्ध आहे. आपल्या वाचन सूचीमध्‍ये एक पृष्‍ठ जोडण्‍यासाठी, <ph name="SHARE_OPENING_ICON" /> टॅप करा.</translation>
+<translation id="3628119975092896051">तुमची वाचन सूची ऑफलाइन उपलब्ध आहे. तुमच्या वाचन सूचीमध्‍ये एक पेज जोडण्‍यासाठी, <ph name="SHARE_OPENING_ICON" /> वर टॅप करा.</translation>
 <translation id="3638472932233958418">वेबपृष्ठे प्रीलोड करा</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> मध्ये बुकमार्क केले</translation>
 <translation id="3765471630796399471">दुसरा पासवर्ड वापरा</translation>
@@ -183,7 +183,7 @@
 <translation id="3967822245660637423">पूर्ण डाउनलोड करा</translation>
 <translation id="3989635538409502728">साइन आउट</translation>
 <translation id="4002066346123236978">शीर्षक</translation>
-<translation id="4038354071007134711">या डिव्हाइसवरील कोणताही अॅप्लिकेशन फाईल उघडू शकत नाही.</translation>
+<translation id="4038354071007134711">या डिव्हाइसवरील कोणतीही अॅप्लिकेशन फाइल उघडू शकत नाही.</translation>
 <translation id="4042870976416480368">पेजमध्ये शोधा</translation>
 <translation id="4049507953662678203">आपल्याकडे नेटवर्क कनेक्शन आहे हे सुनिश्चित करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="408404951701638773">शोध बारवर पोहोचणे आता आणखी सोपे आहे</translation>
@@ -202,7 +202,7 @@
 <translation id="430793432425771671">प्रत्येकगोष्ट संंकालित करा</translation>
 <translation id="4342284590510997375">नवीन</translation>
 <translation id="434816576838749873">ईमेल अॅप निवडा</translation>
-<translation id="4359125752503270327">हे पृष्ठ दुसऱ्या अनुप्रयोगामध्ये उघडेल.</translation>
+<translation id="4359125752503270327">हे पेज दुसऱ्या अॅप्समध्ये उघडेल.</translation>
 <translation id="4370827530403103842">संकालन कार्य करत नाही. निराकरण करण्यासाठी टॅप करा.</translation>
 <translation id="4375040482473363939">QR कोड शोध</translation>
 <translation id="4378154925671717803">फोन</translation>
@@ -228,7 +228,7 @@
 <translation id="481968316161811770">कुकीज, साइट डेटा</translation>
 <translation id="4854345657858711387">पासकोड सेट करा</translation>
 <translation id="4860895144060829044">कॉल करा</translation>
-<translation id="4875622588773761625"><ph name="PASSWORD_MANAGER_BRAND" /> नी या साइटसाठी आपला पासवर्ड अपडेट करावा असे आपण इच्छिता?</translation>
+<translation id="4875622588773761625"><ph name="PASSWORD_MANAGER_BRAND" /> नी या साइटसाठी तुमचा पासवर्ड अपडेट करावा असे तुम्हाला वाटते?</translation>
 <translation id="4881695831933465202">उघडा</translation>
 <translation id="4882831918239250449">तुम्ही ब्राउझ करत असलेला इतिहास पर्सनलाइझ शोध, जाहिराती आणि बरेच काही करण्यासाठी कसा वापरला जातो ते नियंत्रित करा</translation>
 <translation id="4904877109095351937">वाचले चिन्हांकित करा</translation>
@@ -270,7 +270,7 @@
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">आवृत्ती <ph name="PRODUCT_VERSION" /></translation>
 <translation id="5728700505257787410">क्षमस्व, आपल्या खात्यामध्ये साइन इन करताना काहीतरी समस्या आली.</translation>
-<translation id="5737974891429562743">खाते साइन-इन तपशील कालबाह्य झाले आहेत. संकालन प्रारंभ करण्यासाठी अपडेट करा.</translation>
+<translation id="5737974891429562743">खाते साइन इन तपशील कालबाह्य झाले आहेत. सिंक सुरू करण्यासाठी अपडेट करा.</translation>
 <translation id="5738887413654608789">हे आपल्याला आपल्या सभोवतालच्या गोष्टींवर आधारित संबंधित वेब पेज शोधू देते.</translation>
 <translation id="5771816112378578655">सेटअप प्रक्रियेत आहे...</translation>
 <translation id="5816228676161003208">हे आपल्याला आपला व्‍हॉइस वापरून अधिक जलद शोधू देते.</translation>
@@ -294,7 +294,7 @@
 <translation id="6012140227487808125">कूटबद्ध करीत आहे...</translation>
 <translation id="6021332621416007159">यामध्ये उघडा...</translation>
 <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation>
-<translation id="6039694632319341016">या साइटसाठी <ph name="PASSWORD_MANAGER_BRAND" /> नी <ph name="USERNAME" /> करिता आपला पासवर्ड अपडेट करावा असे आपण इच्छिता?</translation>
+<translation id="6039694632319341016">या साइटसाठी <ph name="PASSWORD_MANAGER_BRAND" /> नी <ph name="USERNAME" /> करिता तुमचा पासवर्ड अपडेट करावा असे तुम्ही इच्छिता?</translation>
 <translation id="6040143037577758943">बंद करा</translation>
 <translation id="6042308850641462728">अधिक</translation>
 <translation id="605721222689873409">YY</translation>
@@ -328,7 +328,7 @@
 <translation id="641799622251403418"><ph name="EMAIL" /> म्हणून साइन इन केले.
 
 आपला डेटा आपल्या संकालन सांकेतिक वाक्यांशासह <ph name="TIME" /> वाजता कूटबद्ध केला होता. संकालन सुरु करण्यासाठी तो एंटर करा.</translation>
-<translation id="6418346271604475326">PDF तयार करीत आहे</translation>
+<translation id="6418346271604475326">पीडीएफ तयार करत आहे</translation>
 <translation id="6434591244308415567">एरर आली. नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="6445051938772793705">देश</translation>
 <translation id="6445981559479772097">संदेश पाठविला.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index da548660..a16f191c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -57,7 +57,7 @@
 <translation id="1752547299766512813">Lagre passord</translation>
 <translation id="1753905327828125965">Mest besøkt</translation>
 <translation id="1809939268435598390">Slett mappen</translation>
-<translation id="1813414402673211292">Tøm nettlesingsdata</translation>
+<translation id="1813414402673211292">Slett nettleserdata</translation>
 <translation id="1820259098641718022">Lagt til i leselisten</translation>
 <translation id="1821253160463689938">Bruker informasjonskapsler til å huske preferansene dine, selv om du ikke går til de sidene</translation>
 <translation id="1876721852596493031">Send bruksdata</translation>
@@ -106,7 +106,7 @@
 <translation id="2704606927547763573">Kopiert</translation>
 <translation id="2709516037105925701">Autofyll</translation>
 <translation id="2712127207578915686">Kan ikke åpne filen</translation>
-<translation id="2718352093833049315">Bare på Wi-Fi</translation>
+<translation id="2718352093833049315">Bare når Wi-Fi er på</translation>
 <translation id="2747003861858887689">Forrige felt</translation>
 <translation id="2780046210906776326">Ingen e-postkontoer</translation>
 <translation id="2781692009645368755">Google Pay</translation>
@@ -318,7 +318,7 @@
 <translation id="6344783595350022745">Klar tekst</translation>
 <translation id="6346549652287021269">Vil du starte en ny nedlasting?</translation>
 <translation id="6362362396625799311">Ingen inkognitofaner</translation>
-<translation id="6363526231572697780">Ingen brukernavn</translation>
+<translation id="6363526231572697780">Brukernavnet mangler</translation>
 <translation id="6374469231428023295">Prøv på nytt</translation>
 <translation id="6380866119319257197">Hvis du glemmer passordfrasen din eller vil endre denne innstillingen, må du <ph name="BEGIN_LINK" />tilbakestille synkroniseringen<ph name="END_LINK" /></translation>
 <translation id="6389470377220713856">Navn som er oppført på kortet</translation>
@@ -403,7 +403,7 @@
 <translation id="780301667611848630">Nei takk</translation>
 <translation id="7840771868269352570">De valgte elementene blir fjernet.</translation>
 <translation id="7856733331829174190">Kunne ikke laste ned</translation>
-<translation id="7859704718976024901">Nettlesingsloggen</translation>
+<translation id="7859704718976024901">Nettleserlogg</translation>
 <translation id="7918293828610777738">Leselisten din er tilgjengelig uten nett. Du kan legge til sider i leselisten ved å trykke på <ph name="SHARE_OPENING_ICON" /> og deretter <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksportér passord</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
index db95f21b..627bf17 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -147,7 +147,7 @@
 <translation id="3329904751041170572">Não foi possível ligar ao servidor.</translation>
 <translation id="3335947283844343239">Reabrir separador fechado</translation>
 <translation id="3393920035788932672">Pop-ups Permitidos</translation>
-<translation id="3445288400492335833"><ph name="MINUTES" /> min.</translation>
+<translation id="3445288400492335833"><ph name="MINUTES" /> min</translation>
 <translation id="3448016392200048164">Vista dividida</translation>
 <translation id="3469166899695866866">Pretende parar a transferência?</translation>
 <translation id="3470502288861289375">A copiar...</translation>
@@ -401,7 +401,7 @@
 <translation id="7772032839648071052">Confirmar frase de acesso</translation>
 <translation id="7781829728241885113">Ontem</translation>
 <translation id="780301667611848630">Não, obrigado</translation>
-<translation id="7840771868269352570">Os itens selec. são removidos.</translation>
+<translation id="7840771868269352570">Os itens selecionados serão removidos.</translation>
 <translation id="7856733331829174190">Impossível transferir</translation>
 <translation id="7859704718976024901">Histórico de navegação</translation>
 <translation id="7918293828610777738">A sua lista de leitura está disponível offline. Para adicionar uma página à mesma, toque em <ph name="SHARE_OPENING_ICON" /> e, em seguida, em <ph name="READ_LATER_TEXT" />.</translation>
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
index 6e0ae4d5..cff79e25 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
@@ -1887,10 +1887,12 @@
 
 - (CGFloat)tableView:(UITableView*)tableView
     heightForRowAtIndexPath:(NSIndexPath*)indexPath {
-  NSInteger sectionIdentifier = [self.sharedState.tableViewModel
-      sectionIdentifierForSection:indexPath.section];
-  if (sectionIdentifier == BookmarkHomeSectionIdentifierBookmarks) {
-    return kEstimatedRowHeight;
+  if (!experimental_flags::IsBookmarksUIRebootEnabled()) {
+    NSInteger sectionIdentifier = [self.sharedState.tableViewModel
+        sectionIdentifierForSection:indexPath.section];
+    if (sectionIdentifier == BookmarkHomeSectionIdentifierBookmarks) {
+      return kEstimatedRowHeight;
+    }
   }
   return UITableViewAutomaticDimension;
 }
diff --git a/ios/chrome/browser/ui/bookmarks/bookmarks_egtest.mm b/ios/chrome/browser/ui/bookmarks/bookmarks_egtest.mm
index e8a2773..94a1f31 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmarks_egtest.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmarks_egtest.mm
@@ -885,7 +885,8 @@
 
   // Ensure the Bottom 1 of Folder 1 is visible.  That means both folder and
   // scroll position are restored successfully.
-  [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"Bottom 1")]
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityLabel(@"Bottom 1, 127.0.0.1")]
       assertWithMatcher:grey_sufficientlyVisible()];
 }
 
@@ -1088,6 +1089,8 @@
                          base::SysNSStringToUTF16(@"Top URL"), dummyURL);
 
   // Add URLs to Folder 1.
+  bookmark_model->AddURL(folder1, 0, base::SysNSStringToUTF16(dummyTitle),
+                         dummyURL);
   bookmark_model->AddURL(folder1, 0, base::SysNSStringToUTF16(@"Bottom 1"),
                          dummyURL);
   for (int i = 0; i < 20; i++) {
@@ -1603,7 +1606,7 @@
   // verify the editable textfield is gone.
   [[EarlGrey
       selectElementWithMatcher:grey_accessibilityID(@"bookmark_editing_text")]
-      assertWithMatcher:grey_nil()];
+      assertWithMatcher:grey_notVisible()];
 }
 
 + (void)tapOnContextMenuButton:(int)menuButtonId
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm
index 54302ea..0fbd45b 100644
--- a/ios/chrome/browser/ui/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -4150,6 +4150,8 @@
   self.footerFullscreenProgress = progress;
 
   if (IsUIRefreshPhase1Enabled()) {
+    // TODO(crbug.com/880656): Update implementation to make the bottom toolbar
+    // animatable.
     self.secondaryToolbarHeightConstraint.constant =
         [self secondaryToolbarHeightWithInset] * progress;
 
diff --git a/ios/chrome/browser/ui/first_run/static_file_view_controller.mm b/ios/chrome/browser/ui/first_run/static_file_view_controller.mm
index 4fd1522..25f33a0 100644
--- a/ios/chrome/browser/ui/first_run/static_file_view_controller.mm
+++ b/ios/chrome/browser/ui/first_run/static_file_view_controller.mm
@@ -11,7 +11,7 @@
 #import "ios/chrome/browser/ui/icons/chrome_icon.h"
 #import "ios/chrome/browser/ui/material_components/utils.h"
 #include "ios/chrome/browser/ui/rtl_geometry.h"
-#import "ios/third_party/material_components_ios/src/components/AppBar/src/MaterialAppBar.h"
+#import "ios/third_party/material_components_ios/src/components/AppBar/src/MDCAppBarViewController.h"
 #import "ios/third_party/material_components_ios/src/components/FlexibleHeader/src/MaterialFlexibleHeader.h"
 #import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h"
 #import "ios/web/public/web_view_creation_util.h"
@@ -29,7 +29,7 @@
   // The web view used to display the static content.
   WKWebView* _webView;
   // The header.
-  MDCAppBar* _appBar;
+  MDCAppBarViewController* _appBarViewController;
 }
 
 // Called when the back button is pressed.
@@ -47,8 +47,7 @@
   DCHECK(URL);
   self = [super init];
   if (self) {
-    _appBar = [[MDCAppBar alloc] init];
-    [self addChildViewController:[_appBar headerViewController]];
+    _appBarViewController = [[MDCAppBarViewController alloc] init];
     _browserState = browserState;
     _URL = URL;
   }
@@ -78,13 +77,14 @@
   _webView.navigationDelegate = self;
   [self.view addSubview:_webView];
 
-  ConfigureAppBarWithCardStyle(_appBar);
-  [_appBar headerViewController].headerView.trackingScrollView =
-      [_webView scrollView];
-  [_webView scrollView].delegate = [_appBar headerViewController];
+  ConfigureAppBarViewControllerWithCardStyle(_appBarViewController);
+  _appBarViewController.headerView.trackingScrollView = [_webView scrollView];
+  [_webView scrollView].delegate = _appBarViewController;
 
   // Add the app bar at the end.
-  [_appBar addSubviewsToParent];
+  [self addChildViewController:_appBarViewController];
+  [self.view addSubview:_appBarViewController.view];
+  [_appBarViewController didMoveToParentViewController:self];
 
   // Create a custom Back bar button item, as Material Navigation Bar deprecated
   // the back arrow with a shaft.
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_mediator.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_mediator.mm
index 881a4e6..a7793b2 100644
--- a/ios/chrome/browser/ui/fullscreen/fullscreen_mediator.mm
+++ b/ios/chrome/browser/ui/fullscreen/fullscreen_mediator.mm
@@ -120,6 +120,13 @@
     FullscreenModel* model) {
   DCHECK_EQ(model_, model);
   StopAnimating(true /* update_model */);
+  // Show the toolbars if the user begins a scroll past the bottom edge of the
+  // screen and the toolbars have been fully collapsed.
+  if (model_->is_scrolled_to_bottom() &&
+      AreCGFloatsEqual(model_->progress(), 0.0) &&
+      model_->can_collapse_toolbar()) {
+    AnimateModelReset();
+  }
 }
 
 void FullscreenMediator::FullscreenModelScrollEventEnded(
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_model.h b/ios/chrome/browser/ui/fullscreen/fullscreen_model.h
index d2ff00f..8c16707 100644
--- a/ios/chrome/browser/ui/fullscreen/fullscreen_model.h
+++ b/ios/chrome/browser/ui/fullscreen/fullscreen_model.h
@@ -47,6 +47,17 @@
     return expanded_toolbar_height_ - collapsed_toolbar_height_;
   }
 
+  // Returns whether the page content is tall enough for the toolbar to be
+  // scrolled to an entirely collapsed position.
+  bool can_collapse_toolbar() const {
+    return content_height_ > scroll_view_height_ + toolbar_height_delta();
+  }
+
+  // Whether the view is scrolled all the way to the bottom.
+  bool is_scrolled_to_bottom() const {
+    return y_content_offset_ + scroll_view_height_ >= content_height_;
+  }
+
   // Increments and decrements |disabled_counter_| for features that require the
   // toolbar be completely visible.
   void IncrementDisabledCounter();
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_model.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_model.mm
index 7dafae2..f0c8ee8 100644
--- a/ios/chrome/browser/ui/fullscreen/fullscreen_model.mm
+++ b/ios/chrome/browser/ui/fullscreen/fullscreen_model.mm
@@ -224,17 +224,14 @@
   // Ignore if:
   // - explicitly requested via IgnoreRemainderOfCurrentScroll(),
   // - the scroll is a bounce-up animation at the top,
-  // - the scroll is a bounce-down animation at the bottom,
+  // - the scroll is attempting to scroll past the bottom of the page,
   // - the scroll is attempting to scroll content up when it already fits.
   bool scrolling_content_down = y_content_offset_ - from_offset < 0.0;
   bool scrolling_past_top = y_content_offset_ <= -top_inset_;
-  bool scrolling_past_bottom =
-      y_content_offset_ + scroll_view_height_ >= content_height_;
   bool content_fits = content_height_ <= scroll_view_height_ - top_inset_;
   if (ignoring_current_scroll_ ||
       (scrolling_past_top && !scrolling_content_down) ||
-      (scrolling_past_bottom && scrolling_content_down) ||
-      (content_fits && !scrolling_content_down)) {
+      is_scrolled_to_bottom() || (content_fits && !scrolling_content_down)) {
     return ScrollAction::kIgnore;
   }
 
diff --git a/ios/web_view/BUILD.gn b/ios/web_view/BUILD.gn
index 38aa6ed..da9c638 100644
--- a/ios/web_view/BUILD.gn
+++ b/ios/web_view/BUILD.gn
@@ -66,7 +66,13 @@
   "public/cwv_web_view_configuration.h",
 ]
 if (ios_web_view_enable_sync) {
-  ios_web_view_public_headers += [ "public/cwv_identity.h" ]
+  ios_web_view_public_headers += [
+    "public/cwv_identity.h",
+    "public/cwv_sync_controller.h",
+    "public/cwv_sync_controller_data_source.h",
+    "public/cwv_sync_controller_delegate.h",
+    "public/cwv_web_view_configuration_sync.h",
+  ]
 }
 if (ios_web_view_enable_autofill) {
   ios_web_view_public_headers += [
diff --git a/ios/web_view/public/cwv_sync_controller.h b/ios/web_view/public/cwv_sync_controller.h
new file mode 100644
index 0000000..d14f2da
--- /dev/null
+++ b/ios/web_view/public/cwv_sync_controller.h
@@ -0,0 +1,60 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_WEB_VIEW_PUBLIC_CWV_SYNC_CONTROLLER_H_
+#define IOS_WEB_VIEW_PUBLIC_CWV_SYNC_CONTROLLER_H_
+
+#import <Foundation/Foundation.h>
+
+#import "cwv_export.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class CWVIdentity;
+@protocol CWVSyncControllerDataSource;
+@protocol CWVSyncControllerDelegate;
+
+CWV_EXPORT
+// Used to manage syncing for autofill and password data. Usage:
+// 1. Call |startSyncWithIdentity:dataSource:| to start syncing with identity.
+// 2. Call |stopSyncAndClearIdentity| to stop syncing.
+// It is necessary to call |startSyncWithIdentity:dataSource:| once per cold app
+// launch to keep |currentIdentity| syncing. Remember to set the |delegate| to
+// listen to sync start and stop events.
+@interface CWVSyncController : NSObject
+
+// The delegate of CWVSyncController.
+@property(nonatomic, weak, nullable) id<CWVSyncControllerDelegate> delegate;
+
+// The user who is syncing.
+@property(nonatomic, readonly, nullable) CWVIdentity* currentIdentity;
+
+// Whether or not a passphrase is needed to access sync data. Not meaningful
+// until |currentIdentity| is set and |syncControllerDidStartSync:| callback in
+// is invoked in |delegate|.
+@property(nonatomic, readonly, getter=isPassphraseNeeded) BOOL passphraseNeeded;
+
+- (instancetype)init NS_UNAVAILABLE;
+
+// Start syncing with |identity|. |dataSource| is used to obtain access tokens.
+// |identity| will be persisted as |currentIdentity| and continue syncing until
+// |stopSyncAndClearIdentity| is called or the app is restarted.
+- (void)startSyncWithIdentity:(CWVIdentity*)identity
+                   dataSource:
+                       (__weak id<CWVSyncControllerDataSource>)dataSource;
+
+// Stops syncs and nils out |currentIdentity|.
+- (void)stopSyncAndClearIdentity;
+
+// If |passphraseNeeded| is |YES|. Call this to unlock the sync data.
+// Only call after calling |startSyncWithIdentity:dataSource:| and receiving
+// |syncControllerDidStartSync:| callback in |delegate|.
+// No op if |passphraseNeeded| is |NO|. Returns |YES| if successful.
+- (BOOL)unlockWithPassphrase:(NSString*)passphrase;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif  // IOS_WEB_VIEW_PUBLIC_CWV_SYNC_CONTROLLER_H_
diff --git a/ios/web_view/public/cwv_sync_controller_data_source.h b/ios/web_view/public/cwv_sync_controller_data_source.h
new file mode 100644
index 0000000..5b9c2350
--- /dev/null
+++ b/ios/web_view/public/cwv_sync_controller_data_source.h
@@ -0,0 +1,33 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <Foundation/Foundation.h>
+
+#ifndef IOS_WEB_VIEW_PUBLIC_CWV_SYNC_CONTROLLER_DATA_SOURCE_H_
+#define IOS_WEB_VIEW_PUBLIC_CWV_SYNC_CONTROLLER_DATA_SOURCE_H_
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class CWVSyncController;
+
+// Data source of CWVSyncController.
+@protocol CWVSyncControllerDataSource<NSObject>
+
+// Called when access tokens are requested.
+// |scopes| OAuth scopes requested.
+// |completionHandler| Use to pass back token information.
+// If successful, only |accessToken| and |expirationDate| should be non-nil.
+// If unsuccessful, only |error| should be non-nil.
+- (void)syncController:(CWVSyncController*)syncController
+    getAccessTokenForScopes:(NSArray<NSString*>*)scopes
+          completionHandler:
+              (void (^)(NSString* _Nullable accessToken,
+                        NSDate* _Nullable expirationDate,
+                        NSError* _Nullable error))completionHandler;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif  // IOS_WEB_VIEW_PUBLIC_CWV_SYNC_CONTROLLER_DATA_SOURCE_H_
diff --git a/ios/web_view/public/cwv_sync_controller_delegate.h b/ios/web_view/public/cwv_sync_controller_delegate.h
new file mode 100644
index 0000000..3b71011
--- /dev/null
+++ b/ios/web_view/public/cwv_sync_controller_delegate.h
@@ -0,0 +1,39 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <Foundation/Foundation.h>
+
+#ifndef IOS_WEB_VIEW_PUBLIC_CWV_SYNC_CONTROLLER_DELEGATE_H_
+#define IOS_WEB_VIEW_PUBLIC_CWV_SYNC_CONTROLLER_DELEGATE_H_
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, CWVStopSyncReason) {
+  // When sync is stopped explicitly via |stopSyncAndClearIdentity|.
+  CWVStopSyncReasonClient = 0,
+  // When sync was reset from another device.
+  CWVStopSyncReasonServer = 1
+};
+
+@class CWVSyncController;
+
+// Delegate of CWVSyncController.
+@protocol CWVSyncControllerDelegate<NSObject>
+
+@optional
+
+// Called when sync has been started. Check |syncController|'s |needsPassphrase|
+// property to see if |unlockWithPassphrase:| is necessary.
+- (void)syncControllerDidStartSync:(CWVSyncController*)syncController;
+
+// Called after the sync was stopped.
+// |reason| Indicates why sync was stopped.
+- (void)syncController:(CWVSyncController*)syncController
+    didStopSyncWithReason:(CWVStopSyncReason)reason;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif  // IOS_WEB_VIEW_PUBLIC_CWV_SYNC_CONTROLLER_DELEGATE_H_
diff --git a/ios/web_view/public/cwv_web_view_configuration_sync.h b/ios/web_view/public/cwv_web_view_configuration_sync.h
new file mode 100644
index 0000000..e501ccc
--- /dev/null
+++ b/ios/web_view/public/cwv_web_view_configuration_sync.h
@@ -0,0 +1,26 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_WEB_VIEW_PUBLIC_CWV_WEB_VIEW_CONFIGURATION_SYNC_H_
+#define IOS_WEB_VIEW_PUBLIC_CWV_WEB_VIEW_CONFIGURATION_SYNC_H_
+
+#import <Foundation/Foundation.h>
+
+#import "cwv_web_view_configuration.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class CWVSyncController;
+
+@interface CWVWebViewConfiguration (Sync)
+
+// This web view configuration's sync controller.
+// nil if CWVWebViewConfiguration is created with +incognitoConfiguration.
+@property(nonatomic, readonly, nullable) CWVSyncController* syncController;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif  // IOS_WEB_VIEW_PUBLIC_CWV_WEB_VIEW_CONFIGURATION_SYNC_H_
diff --git a/media/base/video_frame_metadata.cc b/media/base/video_frame_metadata.cc
index 4e0874f..c567846a3 100644
--- a/media/base/video_frame_metadata.cc
+++ b/media/base/video_frame_metadata.cc
@@ -141,10 +141,7 @@
 }
 
 const base::Value* VideoFrameMetadata::GetValue(Key key) const {
-  const base::Value* result = nullptr;
-  if (!dictionary_.GetWithoutPathExpansion(ToInternalKey(key), &result))
-    return nullptr;
-  return result;
+  return dictionary_.FindKey(ToInternalKey(key));
 }
 
 bool VideoFrameMetadata::IsTrue(Key key) const {
@@ -172,12 +169,9 @@
 }
 
 const base::Value* VideoFrameMetadata::GetBinaryValue(Key key) const {
-  const base::Value* internal_value = nullptr;
-  if (dictionary_.GetWithoutPathExpansion(ToInternalKey(key),
-                                          &internal_value) &&
-      internal_value->type() == base::Value::Type::BINARY) {
+  const base::Value* internal_value = dictionary_.FindKey(ToInternalKey(key));
+  if (internal_value && (internal_value->type() == base::Value::Type::BINARY))
     return internal_value;
-  }
   return nullptr;
 }
 
diff --git a/media/capture/video/chromeos/mock_video_capture_client.cc b/media/capture/video/chromeos/mock_video_capture_client.cc
index 85b4c86..08d3a01 100644
--- a/media/capture/video/chromeos/mock_video_capture_client.cc
+++ b/media/capture/video/chromeos/mock_video_capture_client.cc
@@ -95,14 +95,5 @@
   DoOnIncomingCapturedVideoFrame();
 }
 
-VideoCaptureDevice::Client::Buffer
-MockVideoCaptureClient::ResurrectLastOutputBuffer(const gfx::Size& dimensions,
-                                                  VideoPixelFormat format,
-                                                  int frame_feedback_id) {
-  DoResurrectLastOutputBuffer();
-  NOTREACHED() << "This should never be called";
-  return Buffer();
-}
-
 }  // namespace unittest_internal
 }  // namespace media
diff --git a/media/capture/video/chromeos/mock_video_capture_client.h b/media/capture/video/chromeos/mock_video_capture_client.h
index 8156a55..b75618c 100644
--- a/media/capture/video/chromeos/mock_video_capture_client.h
+++ b/media/capture/video/chromeos/mock_video_capture_client.h
@@ -19,7 +19,6 @@
   MOCK_METHOD0(DoReserveOutputBuffer, void(void));
   MOCK_METHOD0(DoOnIncomingCapturedBuffer, void(void));
   MOCK_METHOD0(DoOnIncomingCapturedVideoFrame, void(void));
-  MOCK_METHOD0(DoResurrectLastOutputBuffer, void(void));
   MOCK_METHOD3(OnError,
                void(media::VideoCaptureError error,
                     const base::Location& from_here,
@@ -68,9 +67,6 @@
       base::TimeDelta timestamp,
       gfx::Rect visible_rect,
       const VideoFrameMetadata& additional_metadata) override;
-  Buffer ResurrectLastOutputBuffer(const gfx::Size& dimensions,
-                                   VideoPixelFormat format,
-                                   int frame_feedback_id) override;
 
  private:
   base::OnceClosure frame_cb_;
diff --git a/media/capture/video/mock_video_capture_device_client.h b/media/capture/video/mock_video_capture_device_client.h
index c8a42df..2d11e78 100644
--- a/media/capture/video/mock_video_capture_device_client.h
+++ b/media/capture/video/mock_video_capture_device_client.h
@@ -32,8 +32,6 @@
                     int frame_feedback_id));
   MOCK_METHOD3(ReserveOutputBuffer,
                Buffer(const gfx::Size&, VideoPixelFormat, int));
-  MOCK_METHOD3(ResurrectLastOutputBuffer,
-               Buffer(const gfx::Size&, VideoPixelFormat, int));
   MOCK_METHOD3(OnError,
                void(media::VideoCaptureError error,
                     const base::Location& from_here,
diff --git a/media/capture/video/video_capture_buffer_pool.h b/media/capture/video/video_capture_buffer_pool.h
index 1c4aa54..6e88143 100644
--- a/media/capture/video/video_capture_buffer_pool.h
+++ b/media/capture/video/video_capture_buffer_pool.h
@@ -81,17 +81,6 @@
   // of ReserveForProducer().
   virtual void RelinquishProducerReservation(int buffer_id) = 0;
 
-  // Attempt to reserve the same buffer that was relinquished in the last call
-  // to RelinquishProducerReservation(). If the buffer is not still being
-  // consumed, and has not yet been re-used since being consumed, and the
-  // specified |dimensions|, |format|, and |storage| agree with its last
-  // reservation, this will succeed. Otherwise, |kInvalidId| will be returned.
-  //
-  // A producer may assume the content of the buffer has been preserved and may
-  // also make modifications.
-  virtual int ResurrectLastForProducer(const gfx::Size& dimensions,
-                                       VideoPixelFormat format) = 0;
-
   // Returns a snapshot of the current number of buffers in-use divided by the
   // maximum |count_|.
   virtual double GetBufferPoolUtilization() const = 0;
diff --git a/media/capture/video/video_capture_buffer_pool_impl.cc b/media/capture/video/video_capture_buffer_pool_impl.cc
index 9359b38..a7e9959 100644
--- a/media/capture/video/video_capture_buffer_pool_impl.cc
+++ b/media/capture/video/video_capture_buffer_pool_impl.cc
@@ -21,7 +21,6 @@
     int count)
     : count_(count),
       next_buffer_id_(0),
-      last_relinquished_buffer_id_(kInvalidId),
       buffer_tracker_factory_(std::move(buffer_tracker_factory)) {
   DCHECK_GT(count, 0);
 }
@@ -112,7 +111,6 @@
   }
   DCHECK(tracker->held_by_producer());
   tracker->set_held_by_producer(false);
-  last_relinquished_buffer_id_ = buffer_id;
 }
 
 void VideoCaptureBufferPoolImpl::HoldForConsumers(int buffer_id,
@@ -146,34 +144,6 @@
                                    num_clients);
 }
 
-int VideoCaptureBufferPoolImpl::ResurrectLastForProducer(
-    const gfx::Size& dimensions,
-    VideoPixelFormat format) {
-  base::AutoLock lock(lock_);
-
-  // Return early if the last relinquished buffer has been re-used already.
-  if (last_relinquished_buffer_id_ == kInvalidId)
-    return kInvalidId;
-
-  // If there are no consumers reading from this buffer, then it's safe to
-  // provide this buffer back to the producer (because the producer may
-  // potentially modify the content). Check that the expected dimensions,
-  // and format match.
-  auto it = trackers_.find(last_relinquished_buffer_id_);
-  DCHECK(it != trackers_.end());
-  DCHECK(!it->second->held_by_producer());
-  if (it->second->consumer_hold_count() == 0 &&
-      it->second->dimensions() == dimensions &&
-      it->second->pixel_format() == format) {
-    it->second->set_held_by_producer(true);
-    const int resurrected_buffer_id = last_relinquished_buffer_id_;
-    last_relinquished_buffer_id_ = kInvalidId;
-    return resurrected_buffer_id;
-  }
-
-  return kInvalidId;
-}
-
 double VideoCaptureBufferPoolImpl::GetBufferPoolUtilization() const {
   base::AutoLock lock(lock_);
   int num_buffers_held = 0;
@@ -197,20 +167,12 @@
   // largest one that's not big enough, in case we have to reallocate a tracker.
   *buffer_id_to_drop = kInvalidId;
   size_t largest_size_in_pixels = 0;
-  auto tracker_of_last_resort = trackers_.end();
   auto tracker_to_drop = trackers_.end();
   for (auto it = trackers_.begin(); it != trackers_.end(); ++it) {
     VideoCaptureBufferTracker* const tracker = it->second.get();
     if (!tracker->consumer_hold_count() && !tracker->held_by_producer()) {
       if (tracker->max_pixel_count() >= size_in_pixels &&
           (tracker->pixel_format() == pixel_format)) {
-        if (it->first == last_relinquished_buffer_id_) {
-          // This buffer would do just fine, but avoid returning it because the
-          // client may want to resurrect it. It will be returned perforce if
-          // the pool has reached it's maximum limit (see code below).
-          tracker_of_last_resort = it;
-          continue;
-        }
         // Existing tracker is big enough and has correct format. Reuse it.
         tracker->set_dimensions(dimensions);
         tracker->set_held_by_producer(true);
@@ -225,22 +187,12 @@
   }
 
   // Preferably grow the pool by creating a new tracker. If we're at maximum
-  // size, then try using |tracker_of_last_resort| or reallocate by deleting an
-  // existing one instead.
+  // size, reallocate by deleting an existing one.
   if (trackers_.size() == static_cast<size_t>(count_)) {
-    if (tracker_of_last_resort != trackers_.end()) {
-      last_relinquished_buffer_id_ = kInvalidId;
-      tracker_of_last_resort->second->set_dimensions(dimensions);
-      tracker_of_last_resort->second->set_held_by_producer(true);
-      tracker_of_last_resort->second->set_frame_feedback_id(frame_feedback_id);
-      return tracker_of_last_resort->first;
-    }
     if (tracker_to_drop == trackers_.end()) {
       // We're out of space, and can't find an unused tracker to reallocate.
       return kInvalidId;
     }
-    if (tracker_to_drop->first == last_relinquished_buffer_id_)
-      last_relinquished_buffer_id_ = kInvalidId;
     *buffer_id_to_drop = tracker_to_drop->first;
     trackers_.erase(tracker_to_drop);
   }
diff --git a/media/capture/video/video_capture_buffer_pool_impl.h b/media/capture/video/video_capture_buffer_pool_impl.h
index 2cde522..7ff85f61 100644
--- a/media/capture/video/video_capture_buffer_pool_impl.h
+++ b/media/capture/video/video_capture_buffer_pool_impl.h
@@ -49,8 +49,6 @@
                          int frame_feedback_id,
                          int* buffer_id_to_drop) override;
   void RelinquishProducerReservation(int buffer_id) override;
-  int ResurrectLastForProducer(const gfx::Size& dimensions,
-                               VideoPixelFormat format) override;
   double GetBufferPoolUtilization() const override;
   void HoldForConsumers(int buffer_id, int num_clients) override;
   void RelinquishConsumerHold(int buffer_id, int num_clients) override;
@@ -75,10 +73,6 @@
   // The ID of the next buffer.
   int next_buffer_id_;
 
-  // The ID of the buffer last relinquished by the producer (a candidate for
-  // resurrection).
-  int last_relinquished_buffer_id_;
-
   // The buffers, indexed by the first parameter, a buffer id.
   std::map<int, std::unique_ptr<VideoCaptureBufferTracker>> trackers_;
 
diff --git a/media/capture/video/video_capture_device.h b/media/capture/video/video_capture_device.h
index 8bf664e8..a747380 100644
--- a/media/capture/video/video_capture_device.h
+++ b/media/capture/video/video_capture_device.h
@@ -197,15 +197,6 @@
         gfx::Rect visible_rect,
         const VideoFrameMetadata& additional_metadata) = 0;
 
-    // Attempts to reserve the same Buffer provided in the last call to one of
-    // the OnIncomingCapturedBufferXXX() methods. This will fail if the content
-    // of the Buffer has not been preserved, or if the |dimensions|, |format|,
-    // or |storage| disagree with how it was reserved via ReserveOutputBuffer().
-    // When this operation fails, nullptr will be returned.
-    virtual Buffer ResurrectLastOutputBuffer(const gfx::Size& dimensions,
-                                             VideoPixelFormat format,
-                                             int new_frame_feedback_id) = 0;
-
     // An error has occurred that cannot be handled and VideoCaptureDevice must
     // be StopAndDeAllocate()-ed. |reason| is a text description of the error.
     virtual void OnError(VideoCaptureError error,
diff --git a/media/capture/video/video_capture_device_client.cc b/media/capture/video/video_capture_device_client.cc
index 210fe8b2..4566a90 100644
--- a/media/capture/video/video_capture_device_client.cc
+++ b/media/capture/video/video_capture_device_client.cc
@@ -474,18 +474,6 @@
       std::move(info));
 }
 
-VideoCaptureDevice::Client::Buffer
-VideoCaptureDeviceClient::ResurrectLastOutputBuffer(const gfx::Size& dimensions,
-                                                    VideoPixelFormat format,
-                                                    int new_frame_feedback_id) {
-  DFAKE_SCOPED_RECURSIVE_LOCK(call_from_producer_);
-  const int buffer_id =
-      buffer_pool_->ResurrectLastForProducer(dimensions, format);
-  if (buffer_id == VideoCaptureBufferPool::kInvalidId)
-    return Buffer();
-  return MakeBufferStruct(buffer_pool_, buffer_id, new_frame_feedback_id);
-}
-
 void VideoCaptureDeviceClient::OnError(VideoCaptureError error,
                                        const base::Location& from_here,
                                        const std::string& reason) {
diff --git a/media/capture/video/video_capture_device_client.h b/media/capture/video/video_capture_device_client.h
index 2118f04..2c92c98 100644
--- a/media/capture/video/video_capture_device_client.h
+++ b/media/capture/video/video_capture_device_client.h
@@ -83,9 +83,6 @@
       base::TimeDelta timestamp,
       gfx::Rect visible_rect,
       const VideoFrameMetadata& additional_metadata) override;
-  Buffer ResurrectLastOutputBuffer(const gfx::Size& dimensions,
-                                   VideoPixelFormat format,
-                                   int new_frame_feedback_id) override;
   void OnError(VideoCaptureError error,
                const base::Location& from_here,
                const std::string& reason) override;
diff --git a/media/capture/video/video_capture_device_client_unittest.cc b/media/capture/video/video_capture_device_client_unittest.cc
index 64bd8714..5041270 100644
--- a/media/capture/video/video_capture_device_client_unittest.cc
+++ b/media/capture/video/video_capture_device_client_unittest.cc
@@ -84,7 +84,6 @@
     EXPECT_CALL(*receiver_, OnLog(_));
     EXPECT_CALL(*receiver_, MockOnNewBufferHandle(expected_buffer_id));
     EXPECT_CALL(*receiver_, MockOnFrameReadyInBuffer(expected_buffer_id, _, _));
-    EXPECT_CALL(*receiver_, OnBufferRetired(expected_buffer_id));
   }
   device_client_->OnIncomingCapturedData(data, kScratchpadSizeInBytes,
                                          kFrameFormat, 0 /*clockwise rotation*/,
@@ -99,9 +98,8 @@
           gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE, gpu::kNullSurfaceHandle);
   {
     InSequence s;
-    const int expected_buffer_id = 1;
+    const int expected_buffer_id = 0;
     EXPECT_CALL(*receiver_, OnLog(_));
-    EXPECT_CALL(*receiver_, MockOnNewBufferHandle(expected_buffer_id));
     EXPECT_CALL(*receiver_, MockOnFrameReadyInBuffer(expected_buffer_id, _, _));
     EXPECT_CALL(*receiver_, OnBufferRetired(expected_buffer_id));
   }
diff --git a/media/capture/video/video_capture_device_unittest.cc b/media/capture/video/video_capture_device_unittest.cc
index 06350bf..a6804c5 100644
--- a/media/capture/video/video_capture_device_unittest.cc
+++ b/media/capture/video/video_capture_device_unittest.cc
@@ -258,7 +258,6 @@
     auto result = std::make_unique<MockVideoCaptureDeviceClient>();
     ON_CALL(*result, OnError(_, _, _)).WillByDefault(Invoke(DumpError));
     EXPECT_CALL(*result, ReserveOutputBuffer(_, _, _)).Times(0);
-    EXPECT_CALL(*result, ResurrectLastOutputBuffer(_, _, _)).Times(0);
     EXPECT_CALL(*result, DoOnIncomingCapturedBuffer(_, _, _, _)).Times(0);
     EXPECT_CALL(*result, DoOnIncomingCapturedBufferExt(_, _, _, _, _, _))
         .Times(0);
diff --git a/media/capture/video/win/video_capture_device_mf_win_unittest.cc b/media/capture/video/win/video_capture_device_mf_win_unittest.cc
index 9ef309a..8df3bef 100644
--- a/media/capture/video/win/video_capture_device_mf_win_unittest.cc
+++ b/media/capture/video/win/video_capture_device_mf_win_unittest.cc
@@ -57,9 +57,6 @@
       gfx::Rect visible_rect,
       const VideoFrameMetadata& additional_metadata) override {}
 
-  MOCK_METHOD3(ResurrectLastOutputBuffer,
-               Buffer(const gfx::Size&, VideoPixelFormat, int));
-
   MOCK_METHOD3(OnError,
                void(VideoCaptureError,
                     const base::Location&,
diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
index 949f67e..2fd105f 100644
--- a/media/gpu/BUILD.gn
+++ b/media/gpu/BUILD.gn
@@ -68,6 +68,7 @@
     "//chrome/gpu",
     "//components/arc/common:media",
     "//components/arc/video_accelerator",
+    "//components/mirroring/service:mirroring_service",
     "//components/viz/service/main",
     "//content/gpu:*",
     "//content/renderer:*",
diff --git a/media/mojo/clients/BUILD.gn b/media/mojo/clients/BUILD.gn
index 92ab540..9c6ae36 100644
--- a/media/mojo/clients/BUILD.gn
+++ b/media/mojo/clients/BUILD.gn
@@ -8,6 +8,10 @@
 jumbo_source_set("clients") {
   visibility = [
     "//chromecast/*",
+
+    # Mirroring Service needs the video accelerated encoder mojom interfaces.
+    "//components/mirroring/service:mirroring_service",
+
     "//content/renderer:*",
 
     # TODO(xhwang): Only allow //media/mojo/services:media_service_unittests
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc
index f0714c6c..7d671b6 100644
--- a/net/socket/socket_test_util.cc
+++ b/net/socket/socket_test_util.cc
@@ -352,8 +352,8 @@
   int next_sequence_number = 0;
   bool last_event_was_pause = false;
 
-  auto* next_read = reads.begin();
-  auto* next_write = writes.begin();
+  auto next_read = reads.begin();
+  auto next_write = writes.begin();
   while (next_read != reads.end() || next_write != writes.end()) {
     if (next_read != reads.end() &&
         next_read->sequence_number == next_sequence_number) {
@@ -407,8 +407,8 @@
   // ERR_IO_PENDING.
   CHECK(!last_event_was_pause);
 
-  CHECK_EQ(next_read, reads.end());
-  CHECK_EQ(next_write, writes.end());
+  CHECK(next_read == reads.end());
+  CHECK(next_write == writes.end());
 }
 
 SequencedSocketData::SequencedSocketData(const MockConnect& connect,
diff --git a/pdf/pdfium/pdfium_range.cc b/pdf/pdfium/pdfium_range.cc
index bec834f..57477d7 100644
--- a/pdf/pdfium/pdfium_range.cc
+++ b/pdf/pdfium/pdfium_range.cc
@@ -12,6 +12,8 @@
 
 namespace {
 
+constexpr base::char16 kZeroWidthWhitespace = 0x200B;
+
 void AdjustForBackwardsRange(int* index, int* count) {
   int& char_index = *index;
   int& char_count = *count;
@@ -105,6 +107,9 @@
     api_string_adapter.Close(written);
   }
 
+  // Strip ignorable non-displaying whitespace
+  rv.erase(std::remove(rv.begin(), rv.end(), kZeroWidthWhitespace), rv.end());
+
   return rv;
 }
 
diff --git a/remoting/client/plugin/BUILD.gn b/remoting/client/plugin/BUILD.gn
index 6c42277c..42bd699 100644
--- a/remoting/client/plugin/BUILD.gn
+++ b/remoting/client/plugin/BUILD.gn
@@ -58,7 +58,7 @@
     "//remoting/signaling",
     "//third_party/libyuv",
     "//third_party/webrtc/modules/desktop_capture:primitives",
-    "//third_party/webrtc/system_wrappers:metrics_default",
+    "//third_party/webrtc_overrides:metrics",
     "//ui/events:dom_keycode_converter",
   ]
 
diff --git a/remoting/resources/remoting_strings_bn.xtb b/remoting/resources/remoting_strings_bn.xtb
index 4a3facf..e20162c 100644
--- a/remoting/resources/remoting_strings_bn.xtb
+++ b/remoting/resources/remoting_strings_bn.xtb
@@ -122,6 +122,8 @@
 <translation id="3695446226812920698">কীভাবে করবেন তা জানুন</translation>
 <translation id="3718805989288361841">Chrome দূরবর্তী ডেস্কটপের নীতি সেটিংসে একটি ত্রুটি হয়েছে। সহায়তার জন্য আপনার সিস্টেম প্রশাসকের সাথে যোগাযোগ করুন।</translation>
 <translation id="3776024066357219166">আপনার Chrome দূরবর্তী ডেস্কটপ অধিবেশন শেষ হয়েছে৷</translation>
+<translation id="3846148461359626420">• iPhone X - এ আরও ভাল প্যান ও জুম করার অভিজ্ঞতা।
+• স্থিতিশীলতা উন্নতি এবং সমস্যার সমাধান।</translation>
 <translation id="3870154837782082782">Google Inc.</translation>
 <translation id="3884839335308961732">Chrome দূরবর্তী ডেস্কটপের মাধ্যমে অ্যাক্সেসের মঞ্জুরি দিতে দয়া করে নিচে আপনার অ্যাকাউন্ট এবং পিন নিশ্চিত করুন৷</translation>
 <translation id="3897092660631435901">মেনু</translation>
diff --git a/remoting/resources/remoting_strings_en-GB.xtb b/remoting/resources/remoting_strings_en-GB.xtb
index 225ef34e..1a55559 100644
--- a/remoting/resources/remoting_strings_en-GB.xtb
+++ b/remoting/resources/remoting_strings_en-GB.xtb
@@ -330,6 +330,8 @@
 <translation id="8525306231823319788">Full screen</translation>
 <translation id="8548209692293300397">You have previously signed in as <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />). To access your computers in that account, <ph name="LINK_BEGIN" />sign in to Google Chrome<ph name="LINK_END" /> with that account and re-install Chrome Remote Desktop.</translation>
 <translation id="8642984861538780905">Fair</translation>
+<translation id="8705151241155781642">• Added support for Android 9.0 Pie.
+• Support for resizing remote desktop resolution to match your Android device's screen.</translation>
 <translation id="8712909229180978490">I can't see my saved files online in Google Drive.</translation>
 <translation id="8743328882720071828">Would you like to allow <ph name="CLIENT_USERNAME" /> to see and control your computer?</translation>
 <translation id="8747048596626351634">Session crashed or failed to start. If ~/.chrome-remote-desktop-session exists on the remote computer, make sure that it starts a long-running foreground process such as a desktop environment or window manager.</translation>
diff --git a/remoting/resources/remoting_strings_es-419.xtb b/remoting/resources/remoting_strings_es-419.xtb
index 4ebf552..2331165 100644
--- a/remoting/resources/remoting_strings_es-419.xtb
+++ b/remoting/resources/remoting_strings_es-419.xtb
@@ -122,6 +122,8 @@
 <translation id="3695446226812920698">Más información</translation>
 <translation id="3718805989288361841">Se produjo un error con la configuración de la política para Escritorio remoto de Chrome. Comunícate con el administrador del sistema para obtener ayuda.</translation>
 <translation id="3776024066357219166">Se cerró tu sesión en Escritorio remoto de Chrome.</translation>
+<translation id="3846148461359626420">• Se mejoraron la planificación y la experiencia de zoom en iPhone X.
+• Se introdujeron correcciones de errores y mejoras de estabilidad.</translation>
 <translation id="3870154837782082782">Google Inc.</translation>
 <translation id="3884839335308961732">Confirma la cuenta y el PIN a continuación para permitir el acceso del Escritorio remoto de Chrome.</translation>
 <translation id="3897092660631435901">Menú</translation>
diff --git a/remoting/resources/remoting_strings_es.xtb b/remoting/resources/remoting_strings_es.xtb
index 15b6313..20d34c044 100644
--- a/remoting/resources/remoting_strings_es.xtb
+++ b/remoting/resources/remoting_strings_es.xtb
@@ -122,7 +122,7 @@
 <translation id="3695446226812920698">Descubre cómo hacerlo</translation>
 <translation id="3718805989288361841">Se ha producido un error relacionado con la configuración de políticas de Escritorio Remoto de Chrome. Ponte en contacto con el administrador de tu sistema para obtener ayuda.</translation>
 <translation id="3776024066357219166">Ha finalizado tu sesión en Escritorio Remoto de Chrome.</translation>
-<translation id="3846148461359626420">• Se ha mejorado la experiencia de ver panorámicas y hacer zoom en iPhone X.
+<translation id="3846148461359626420">• Se ha mejorado la experiencia al ver panorámicas y hacer zoom en iPhone X.
 • Mejoras de estabilidad y corrección de errores.</translation>
 <translation id="3870154837782082782">Google Inc.</translation>
 <translation id="3884839335308961732">Confirma la cuenta y el PIN a continuación para permitir el acceso de Escritorio Remoto de Chrome.</translation>
diff --git a/remoting/resources/remoting_strings_mr.xtb b/remoting/resources/remoting_strings_mr.xtb
index da67cc355..bfd75ad 100644
--- a/remoting/resources/remoting_strings_mr.xtb
+++ b/remoting/resources/remoting_strings_mr.xtb
@@ -4,15 +4,15 @@
 <translation id="1002108253973310084">विसंगत प्रोटोकॉल आवृत्ती आढळली. कृपया आपल्याकडे दोन्ही संगणकांवर सॉफ्टवेअरची नवीनतम आवृत्ती इंस्टॉल केली असल्याचे सुनिश्चित करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="1050693411695664090">खराब</translation>
 <translation id="1152528166145813711">निवडा…</translation>
-<translation id="1199593201721843963">दूरस्‍थ कनेक्‍शन अक्षम करा</translation>
+<translation id="1199593201721843963">रिमोट कनेक्‍शन अक्षम करा</translation>
 <translation id="1291443878853470558">आपण या संगणकावर प्रवेश करण्यासाठी Chromoting वापरू इच्छित असल्यास आपण दूरस्थ कनेक्शन सक्षम करणे आवश्यक आहे.</translation>
 <translation id="1297009705180977556"><ph name="HOSTNAME" /> शी कनेक्ट करताना एरर आली</translation>
-<translation id="1300633907480909701">आपल्या Android डिव्हाइसवरून आपल्या कॉंप्युटरांवर सुरक्षितपणे प्रवेश करा.
+<translation id="1300633907480909701">तुमच्या Android डिव्हाइसवरून तुमच्या कॉंप्युटरांवर सुरक्षितपणे अॅक्सेस करा.
 
-• आपल्या प्रत्येक कॉंप्युटरांवरून, Chrome वेब स्टोअरवरून Chrome रिमोट डेस्कटॉप अॅप वापरून दूरस्थ प्रवेश सेट करा: https://chrome.google.com/remotedesktop
-• आपल्या Android डिव्हाइसवर, अॅप उघडा आणि कनेक्ट करण्यासाठी आपल्या कोणत्याही ऑनलाइन कॉंप्युटरांवर टॅप करा.
+• तुमच्या प्रत्येक कॉंप्युटरांवरून, Chrome वेब स्टोअरवरून Chrome रिमोट डेस्कटॉप अॅप वापरून रिमोट अॅक्सेस सेट करा: https://chrome.google.com/remotedesktop
+• तुमच्या Android डिव्हाइसवर, अॅप उघडा आणि कनेक्ट करण्यासाठी तुमच्या कोणत्याही ऑनलाइन कॉंप्युटरांवर टॅप करा.
 
-यूएस-इंग्रजी कीबोर्ड नसलेले दूरस्थ कॉंप्युटर अयोग्य मजकूर इनपुट प्राप्त करू शकतात. अन्य कीबोर्ड लेआउटसाठी समर्थन लवकरच येत आहे!
+यूएस-इंग्रजी कीबोर्ड नसलेले रिमोट कॉंप्युटर अयोग्य मजकूर इनपुट प्राप्त करू शकतात. अन्य कीबोर्ड लेआउटसाठी सपोर्ट लवकरच येत आहे!
 
 गोपनीयतेविषयीच्या माहितीसाठी, कृपया Google गोपनीयता धोरण (http://goo.gl/SyrVzj) आणि Chrome गोपनीयता धोरण (http://goo.gl/0uXE5d) पहा.</translation>
 <translation id="1324095856329524885">(हे वैशिष्ट्य अद्याप आपल्या संगणकासाठी उपलब्ध नाही)</translation>
@@ -29,7 +29,7 @@
 <translation id="1727412735341161734">Chrome रिमोट डेस्कटॉप</translation>
 <translation id="174018511426417793">आपल्याकडे नोंदणी केलेले कोणतेही कॉंप्युटर नाहीत. कॉंप्युटरावर दूरस्थ कनेक्शन सक्षम करण्यासाठी, Chrome रिमोट डेस्कटॉप तेथे इंस्टॉल करा आणि “<ph name="BUTTON_NAME" />” क्लिक करा.</translation>
 <translation id="1742469581923031760">कनेक्ट करीत आहे...</translation>
-<translation id="1770394049404108959">मी अॅप्लिकेशन उघडू शकत नाही.</translation>
+<translation id="1770394049404108959">मी अॅप्स उघडू शकत नाही.</translation>
 <translation id="177096447311351977">क्लायंट साठी चॅनेल IP: <ph name="CLIENT_GAIA_IDENTIFIER" /> ip='<ph name="CLIENT_IP_ADDRESS_AND_PORT" />' host_ip='<ph name="HOST_IP_ADDRESS_AND_PORT" />' channel='<ph name="CHANNEL_TYPE" />' connection='<ph name="CONNECTION_TYPE" />'.</translation>
 <translation id="1779766957982586368">विंडो बंद करा</translation>
 <translation id="1841799852846221389">या संगणकासाठी दूरस्‍थ कनेक्शन अक्षम करीत आहे...</translation>
@@ -44,10 +44,10 @@
 <translation id="2078880767960296260">होस्ट प्रक्रिया</translation>
 <translation id="20876857123010370">ट्रॅकपॅड मोड</translation>
 <translation id="2089514346391228378">या संगणकाची ‍दूरस्थ कनेक्शन सक्षम करण्‍यात आली आहेत.</translation>
-<translation id="2118549242412205620">आपल्या Android डिव्हाइसवरून आपल्या संगणकांवर सुरक्षितपणे प्रवेश करा.
+<translation id="2118549242412205620">तुमच्या Android डिव्हाइसवरून तुमच्या कॉंप्युटरांवर सुरक्षितपणे अॅक्सेस करा.
 
-• आपल्या प्रत्येक संगणकांवरून, Chrome वेब स्टोअरवरून Chrome रिमोट डेस्कटॉप अॅप वापरून दूरस्थ प्रवेश सेट करा: https://chrome.google.com/remotedesktop
-• आपल्या Android डिव्हाइसवर, अॅप उघडा आणि कनेक्ट करण्यासाठी आपल्या कोणत्याही ऑनलाइन संगणकांवर टॅप करा.
+• तुमच्या प्रत्येक कॉंप्युटरांवरून, Chrome वेब स्टोअरवरून Chrome रिमोट डेस्कटॉप अॅप वापरून रिमोट अॅक्सेस सेट करा: https://chrome.google.com/remotedesktop
+• तुमच्या Android डिव्हाइसवर, अॅप उघडा आणि कनेक्ट करण्यासाठी तुमच्या कोणत्याही ऑनलाइन कॉंप्युटरांवर टॅप करा.
 
 गोपनीयतेविषयीच्या माहितीसाठी, कृपया Google गोपनीयता धोरण (http://goo.gl/SyrVzj) आणि Chrome गोपनीयता धोरण (http://goo.gl/0uXE5d) पहा.</translation>
 <translation id="2124408767156847088">आपल्या Android डिव्हाइसवरून आपल्या संगणकांवर सुरक्षितपणे प्रवेश करा.</translation>
@@ -90,13 +90,13 @@
 <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="2926340305933667314">या कॉंप्युटरावरील रिमोट अॅक्सेस अक्षम करण्‍यात अयशस्वी. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="2930135165929238380">काही आवश्यक घटक गहाळ आहेत. कृपया Chrome://pluginz येथे जा आणि मूळ क्लायंट सक्षम केलेला असल्याची खात्री करा.</translation>
 <translation id="2939145106548231838">होस्ट वर प्रमाणित करा</translation>
-<translation id="3020807351229499221">पिन अद्यततनित करण्‍यात अयशस्वी. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
+<translation id="3020807351229499221">पिन अपडेट करण्‍यात अयशस्वी. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="3025388528294795783">आपल्या समस्येचे निराकरण करण्यात आम्हाला मदत करण्यासाठी, कृपया काय चुकले ते आम्हाला सांगा:</translation>
 <translation id="3027681561976217984">स्पर्श करा मोड</translation>
-<translation id="3106379468611574572">कनेक्‍शन विनंत्यांना दूरस्थ कॉंप्युटर प्रतिसाद देत नाही. ते ऑनलाइन असल्याचे सत्यापित करा आणि पुन्हा प्रयत्न करा.</translation>
+<translation id="3106379468611574572">कनेक्‍शन विनंत्यांना रिमोट कॉंप्युटर प्रतिसाद देत नाही. तो ऑनलाइन आहे का याची पडताळणी करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="310979712355504754">सर्व हटवा</translation>
 <translation id="3150823315463303127">धोरण वाचण्यात होस्ट अयशस्वी.</translation>
 <translation id="3171922709365450819">या डिव्हाइसला या क्लायंटचा सपोर्ट नाही, कारण त्याला तृतीय पक्ष ऑथेंटिकेशनची गरज आहे.</translation>
@@ -151,7 +151,7 @@
 <translation id="4361728918881830843">एका वेगळ्या संगणकावर दूरस्थ कनेक्शन सक्षम करण्यासाठी, Chrome रिमोट डेस्कटॉप तेथे इंस्टॉल करा आणि “<ph name="BUTTON_NAME" />” क्लिक करा.</translation>
 <translation id="4394049700291259645">अक्षम करा</translation>
 <translation id="4405930547258349619">कोअर लायब्ररी</translation>
-<translation id="4430435636878359009">या संगणकाची दूरस्‍थ कनेक्‍शन अक्षम करा</translation>
+<translation id="4430435636878359009">या कॉंप्युटरची रिमोट कनेक्‍शन अक्षम करा</translation>
 <translation id="4430915108080446161">प्रवेश कोड व्युत्पन्न करत आहे…</translation>
 <translation id="4472575034687746823">प्रारंभ करा</translation>
 <translation id="4481276415609939789">आपल्याकडे नोंदणी केलेले कॉंप्युटर नाहीत. एका कॉंप्युटरावर दूरस्थ कनेक्शन सक्षम करण्यासाठी, तेथे Chromoting इंस्टॉल करा आणि “<ph name="BUTTON_NAME" />” क्लिक करा.</translation>
@@ -174,7 +174,7 @@
 PC</translation>
 <translation id="4736223761657662401">कनेक्शन इतिहास</translation>
 <translation id="4741792197137897469">प्रमाणीकरण अयशस्वी. कृपया Chrome वर पुन्हा साइन इन करा.</translation>
-<translation id="477305884757156764">अॅप्लिकेशन खूप धीमा झाला आहे.</translation>
+<translation id="477305884757156764">अॅप्लिकेशन खूप धीमे झाले आहे.</translation>
 <translation id="4784508858340177375">X सर्व्हर क्रॅश झाला किंवा सुरू झाला नाही.</translation>
 <translation id="4795786176190567663">आपल्याला ती क्रिया करण्याची परवानगी नाही.</translation>
 <translation id="4798680868612952294">माउसचे पर्याय</translation>
@@ -190,7 +190,7 @@
 <translation id="4985296110227979402">दूरस्थ प्रवेश करण्यासाठी आपल्याला प्रथम आपला कॉंप्युटर सेट करणे आवश्यक आहे</translation>
 <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ऑफलाइन)</translation>
 <translation id="5070121137485264635">दूरस्थ होस्टसाठी आपण एका तृतीय-पक्ष वेबसाइटवर प्रमाणीकृत करणे आवश्यक आहे. सुरू ठेवण्यासाठी, या पत्त्यामध्ये प्रवेश करण्यासाठी आपण Chrome दूरस्थ डेस्कटॉपला अतिरिक्त परवानग्या मंजूर करणे आवश्यक आहे:</translation>
-<translation id="507204348399810022">आपल्‍याला खात्री आहे की आपण <ph name="HOSTNAME" /> शी असलेले दूरस्थ कनेक्शन अक्षम करू इच्छिता?</translation>
+<translation id="507204348399810022">तुम्हाला खात्री आहे की तुम्ही <ph name="HOSTNAME" /> शी असलेले रिमोट कनेक्शन अक्षम करू इच्छिता?</translation>
 <translation id="5081343395220691640">सर्व्हरशी संवाद साधता येत नाही: <ph name="ERROR" /></translation>
 <translation id="5156271271724754543">कृपया दोन्ही बॉक्सेसमध्‍ये सारखाच पिन प्रविष्‍ट करा.</translation>
 <translation id="5170982930780719864">अवैध होस्ट आयडी .</translation>
@@ -203,7 +203,7 @@
 <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>
@@ -218,7 +218,7 @@
 <translation id="579702532610384533">रीकनेक्ट करा</translation>
 <translation id="5810269635982033450">स्क्रीन ट्रॅकपॅडसारखा काम करत आहे</translation>
 <translation id="5823658491130719298">तुम्हाला दुरून अॅक्सेस करायच्या असलेल्या काँप्युटरवर, Chrome उघडा आणि <ph name="INSTALLATION_LINK" /> वर जा</translation>
-<translation id="5841343754884244200">प्रदर्शन पर्याय</translation>
+<translation id="5841343754884244200">डिस्प्ले पर्याय</translation>
 <translation id="5843054235973879827">हे सुरक्षित का आहे?</translation>
 <translation id="5859141382851488196">नवीन विंडो…</translation>
 <translation id="6011539954251327702">Chromoting आपल्याला वेबवर आपला कॉंप्युटर सुरक्षितपणे सामायिक करण्याची अनुमती देते. दोन्ही वापरकर्त्यांनी Chromoting अ‍ॅप चालविणे आवश्यक आहे, जो <ph name="URL" /> येथे आढळू शकतो.</translation>
@@ -241,14 +241,14 @@
 <translation id="6304318647555713317">क्लायंट</translation>
 <translation id="6381670701864002291">काहीतरी दुसरे.</translation>
 <translation id="6398765197997659313">पूर्ण स्क्रीनमधून निर्गमन करा</translation>
-<translation id="6441316101718669559">डेस्कटॉप संकलन या प्लॅटफॉर्मवर समर्थित नाही. आपण तरीही अॅप्लिकेशन वापरू शकता, परंतु वापरकर्ता अनुभव श्रेणीअवनत केला जाईल.</translation>
+<translation id="6441316101718669559">डेस्कटॉप संकलन या प्लॅटफॉर्मवर सपोर्टेड नाही. तुम्ही तरीही अॅप्लिकेशन वापरू शकता, परंतु वापरकर्ता अनुभव डिग्रेड केला जाईल.</translation>
 <translation id="6502629188777329097">तुमचा कॉंप्युटर सुरक्षितरीत्या अ‍ॅक्सेस करा</translation>
 <translation id="652218476070540101">या संगणकासाठी पिन अपडेट करण्‍यात येत आहे...</translation>
 <translation id="6527303717912515753">शेअर करा</translation>
 <translation id="6541219117979389420">अॅप्लिकेशन लॉगमध्ये तुमची ओळख (ईमेल अॅड्रेस) आणि Google ड्राइव्हमधील फायली आणि फोल्डरची नावे आणि गुणधर्म यासह, खाजगी माहिती समाविष्ट असू शकते.</translation>
 <translation id="6542902059648396432">समस्येचा अहवाल द्या…</translation>
 <translation id="6550675742724504774">पर्याय</translation>
-<translation id="6570205395680337606">अॅप्लिकेशन रीसेट करा. आपण कोणतेही सेव्ह न केलेले कार्य गमवाल.</translation>
+<translation id="6570205395680337606">अॅप्लिकेशन रीसेट करा. तुम्ही कोणतेही सेव्ह न केलेले कार्य गमवाल.</translation>
 <translation id="6572345186230665992">Mac साठी (OS X Mavericks 10.9 आणि त्यानंतरच्या आवृत्त्यांसाठी)</translation>
 <translation id="6583902294974160967">सहाय्य</translation>
 <translation id="6612717000975622067">Ctrl-Alt-Del पाठवा</translation>
@@ -267,7 +267,7 @@
 <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>
+<translation id="6985691951107243942">तुम्हाला खात्री आहे की तुम्हाला <ph name="HOSTNAME" /> चे रिमोट कनेक्शन अक्षम करायचे आहे? तुम्ही तुमचा विचार बदलल्यास, तुम्हाला कनेक्शन पुन्हा सक्षम करण्‍यासाठी त्या कॉंप्युटरला भेट देणे आवश्यक असेल.</translation>
 <translation id="6998989275928107238">प्रति</translation>
 <translation id="7019153418965365059">न ओळखलेली होस्ट एरर: <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">दूरस्‍थ सहाय्य</translation>
@@ -276,7 +276,7 @@
 <translation id="7067321367069083429">स्क्रीन टच स्क्रीनसारखा काम करत आहे</translation>
 <translation id="7116737094673640201">Chrome रिमोट डेस्कटॉपमध्ये तुमचे स्वागत आहे</translation>
 <translation id="7144878232160441200">पुन्हा प्रयत्न करा</translation>
-<translation id="7149517134817561223">Chrome रिमोट डेस्कटॉप होस्टवर आदेश जारी करण्यासाठी अॅप्लिकेशन.</translation>
+<translation id="7149517134817561223">Chrome रिमोट डेस्कटॉप होस्टवर कमांड जारी करण्यासाठी अॅप्लिकेशन.</translation>
 <translation id="7215059001581613786">कृपया सहा किंवा अधिक अंक असलेला एक पिन प्रविष्‍ट करा.</translation>
 <translation id="7312846573060934304">होस्ट ऑफलाइन आहे.</translation>
 <translation id="7319983568955948908">सामायिकरण थांबवा</translation>
@@ -298,7 +298,7 @@
 <translation id="7810127880729796595">आकडेवारी दर्शवा (कनेक्शन: <ph name="QUALITY" />)</translation>
 <translation id="7836926030608666805">काही आवश्यक घटक गहाळ आहेत. कृपया आपण Chrome ची नवीनतम आवृत्ती चालवत असल्याचे सुनिश्चित करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="7868137160098754906">कृपया दूरस्थ संगणकासाठी आपला पिन एंटर करा.</translation>
-<translation id="7869445566579231750">आपल्याला हा अॅप्लिकेशन चालविण्याची परवानगी नाही.</translation>
+<translation id="7869445566579231750">तुम्हाला हा अॅप्लिकेशन रन करण्याची परवानगी नाही.</translation>
 <translation id="7895403300744144251">दूरस्थ संगणकावरील सुरक्षितता धोरणे आपल्या खात्यामधील कनेेक्शनना अनुमती देत नाहीत.</translation>
 <translation id="7936528439960309876">उजवीकडे डॉक करा</translation>
 <translation id="7948001860594368197">स्क्रीन पर्याय</translation>
@@ -319,7 +319,7 @@
 <translation id="8244400547700556338">कसे ते जाणून घ्या.</translation>
 <translation id="8261506727792406068">हटवा</translation>
 <translation id="8355326866731426344">हा प्रवेश कोड <ph name="TIMEOUT" /> मध्ये कालबाह्य होईल.</translation>
-<translation id="8355485110405946777">आपल्या समस्येचे निराकरण करण्यात आम्हाला मदत करण्यासाठी अॅप्लिकेशन लॉग समाविष्ट करा (लॉगमध्ये खाजगी माहिती असू शकते).</translation>
+<translation id="8355485110405946777">तुमच्या समस्येचे निराकरण करण्यात आम्हाला मदत करण्यासाठी अॅप्लिकेशन लॉग समाविष्ट करा (लॉगमध्ये खाजगी माहिती असू शकते).</translation>
 <translation id="837021510621780684">या संगणकावरुन</translation>
 <translation id="8383794970363966105">Chromoting वापरण्यासाठी, आपल्याला आपल्या डिव्हाइसमध्ये एक Google खाते जोडणे आवश्यक असेल.</translation>
 <translation id="8386846956409881180">अवैध OAuth क्रेडेन्‍ाियलसह होस्ट कॉन्फिगर केले आहे.</translation>
diff --git a/services/network/cors/cors_url_loader.cc b/services/network/cors/cors_url_loader.cc
index 8d95257d..0bd18b7 100644
--- a/services/network/cors/cors_url_loader.cc
+++ b/services/network/cors/cors_url_loader.cc
@@ -27,7 +27,7 @@
 }
 
 bool NeedsPreflight(const ResourceRequest& request) {
-  if (!IsCORSEnabledRequestMode(request.fetch_request_mode))
+  if (!cors::IsCORSEnabledRequestMode(request.fetch_request_mode))
     return false;
 
   if (request.is_external_request)
@@ -46,9 +46,13 @@
   if (!IsCORSSafelistedMethod(request.method))
     return true;
 
-  return !CORSUnsafeNotForbiddenRequestHeaderNames(
-              request.headers.GetHeaderVector())
-              .empty();
+  for (const auto& header : request.headers.GetHeaderVector()) {
+    if (!IsCORSSafelistedHeader(header.key, header.value) &&
+        !IsForbiddenHeader(header.key)) {
+      return true;
+    }
+  }
+  return false;
 }
 
 }  // namespace
@@ -88,7 +92,7 @@
 
 void CORSURLLoader::Start() {
   if (fetch_cors_flag_ &&
-      IsCORSEnabledRequestMode(request_.fetch_request_mode)) {
+      cors::IsCORSEnabledRequestMode(request_.fetch_request_mode)) {
     // Username and password should be stripped in a CORS-enabled request.
     if (request_.url.has_username() || request_.url.has_password()) {
       GURL::Replacements replacements;
diff --git a/services/network/cors/preflight_controller.cc b/services/network/cors/preflight_controller.cc
index 8828fa4..629fd22 100644
--- a/services/network/cors/preflight_controller.cc
+++ b/services/network/cors/preflight_controller.cc
@@ -41,11 +41,18 @@
 //  - byte-lowercased
 std::string CreateAccessControlRequestHeadersHeader(
     const net::HttpRequestHeaders& headers) {
-  // Exclude the forbidden headers because they may be added by the user
-  // agent. They must be checked separately and rejected for
-  // JavaScript-initiated requests.
-  std::vector<std::string> filtered_headers =
-      CORSUnsafeNotForbiddenRequestHeaderNames(headers.GetHeaderVector());
+  std::vector<std::string> filtered_headers;
+  for (const auto& header : headers.GetHeaderVector()) {
+    // Exclude CORS-safelisted headers.
+    if (cors::IsCORSSafelistedHeader(header.key, header.value))
+      continue;
+    // Exclude the forbidden headers because they may be added by the user
+    // agent. They must be checked separately and rejected for
+    // JavaScript-initiated requests.
+    if (cors::IsForbiddenHeader(header.key))
+      continue;
+    filtered_headers.push_back(base::ToLowerASCII(header.key));
+  }
   if (filtered_headers.empty())
     return std::string();
 
@@ -81,18 +88,18 @@
   preflight_request->load_flags |= net::LOAD_DO_NOT_SEND_AUTH_DATA;
 
   preflight_request->headers.SetHeader(
-      header_names::kAccessControlRequestMethod, request.method);
+      cors::header_names::kAccessControlRequestMethod, request.method);
 
   std::string request_headers =
       CreateAccessControlRequestHeadersHeader(request.headers);
   if (!request_headers.empty()) {
     preflight_request->headers.SetHeader(
-        header_names::kAccessControlRequestHeaders, request_headers);
+        cors::header_names::kAccessControlRequestHeaders, request_headers);
   }
 
   if (request.is_external_request) {
     preflight_request->headers.SetHeader(
-        header_names::kAccessControlRequestExternal, "true");
+        cors::header_names::kAccessControlRequestExternal, "true");
   }
 
   DCHECK(request.request_initiator);
@@ -123,9 +130,10 @@
   // TODO(toyoshim): Reflect --allow-file-access-from-files flag.
   *detected_error_status = CheckPreflightAccess(
       final_url, head.headers->response_code(),
-      GetHeaderString(head.headers, header_names::kAccessControlAllowOrigin),
       GetHeaderString(head.headers,
-                      header_names::kAccessControlAllowCredentials),
+                      cors::header_names::kAccessControlAllowOrigin),
+      GetHeaderString(head.headers,
+                      cors::header_names::kAccessControlAllowCredentials),
       original_request.fetch_credentials_mode,
       tainted ? url::Origin() : *original_request.request_initiator,
       false /* allow_file_origin */);
diff --git a/services/network/cors/preflight_controller_unittest.cc b/services/network/cors/preflight_controller_unittest.cc
index e2f2e85..a5cb266 100644
--- a/services/network/cors/preflight_controller_unittest.cc
+++ b/services/network/cors/preflight_controller_unittest.cc
@@ -50,7 +50,7 @@
   EXPECT_EQ("null", header);
 
   EXPECT_TRUE(preflight->headers.GetHeader(
-      header_names::kAccessControlRequestHeaders, &header));
+      cors::header_names::kAccessControlRequestHeaders, &header));
   EXPECT_EQ("apple,content-type,kiwifruit,orange,strawberry", header);
 }
 
@@ -73,7 +73,7 @@
   // left out in the preflight request.
   std::string header;
   EXPECT_FALSE(preflight->headers.GetHeader(
-      header_names::kAccessControlRequestHeaders, &header));
+      cors::header_names::kAccessControlRequestHeaders, &header));
 }
 
 TEST(PreflightControllerCreatePreflightRequestTest, Credentials) {
@@ -108,7 +108,7 @@
   // Empty list also; see comment in test above.
   std::string header;
   EXPECT_FALSE(preflight->headers.GetHeader(
-      header_names::kAccessControlRequestHeaders, &header));
+      cors::header_names::kAccessControlRequestHeaders, &header));
 }
 
 TEST(PreflightControllerCreatePreflightRequestTest, IncludeNonSimpleHeader) {
@@ -123,7 +123,7 @@
 
   std::string header;
   EXPECT_TRUE(preflight->headers.GetHeader(
-      header_names::kAccessControlRequestHeaders, &header));
+      cors::header_names::kAccessControlRequestHeaders, &header));
   EXPECT_EQ("x-custom-header", header);
 }
 
@@ -141,7 +141,7 @@
 
   std::string header;
   EXPECT_TRUE(preflight->headers.GetHeader(
-      header_names::kAccessControlRequestHeaders, &header));
+      cors::header_names::kAccessControlRequestHeaders, &header));
   EXPECT_EQ("content-type", header);
 }
 
@@ -157,7 +157,7 @@
 
   std::string header;
   EXPECT_FALSE(preflight->headers.GetHeader(
-      header_names::kAccessControlRequestHeaders, &header));
+      cors::header_names::kAccessControlRequestHeaders, &header));
 }
 
 TEST(PreflightControllerCreatePreflightRequestTest, Tainted) {
@@ -256,7 +256,7 @@
           net::test_server::ShouldHandle(request, "/tainted")
               ? url::Origin()
               : url::Origin::Create(test_server_.base_url());
-      response->AddCustomHeader(header_names::kAccessControlAllowOrigin,
+      response->AddCustomHeader(cors::header_names::kAccessControlAllowOrigin,
                                 origin.Serialize());
       response->AddCustomHeader(header_names::kAccessControlAllowMethods,
                                 "GET, OPTIONS");
diff --git a/services/network/network_context_unittest.cc b/services/network/network_context_unittest.cc
index 3919d8a..51dca86 100644
--- a/services/network/network_context_unittest.cc
+++ b/services/network/network_context_unittest.cc
@@ -3748,7 +3748,8 @@
 
   EXPECT_EQ(0u, request_errors.size());
 
-// TODO(eroman): Why is this failing on iOS?
+// TODO(https://crbug.com/881124): Mocking proxy resolution doesn't work
+//                                 on iOS.
 #if defined(OS_IOS)
   if (pac_errors.empty())
     return;
diff --git a/services/network/network_service.cc b/services/network/network_service.cc
index 21dc553..d2f6d27b5e 100644
--- a/services/network/network_service.cc
+++ b/services/network/network_service.cc
@@ -19,6 +19,7 @@
 #include "base/values.h"
 #include "components/certificate_transparency/sth_distributor.h"
 #include "components/certificate_transparency/sth_observer.h"
+#include "components/os_crypt/os_crypt.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "net/base/logging_network_change_observer.h"
 #include "net/base/network_change_notifier.h"
@@ -49,7 +50,6 @@
 
 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
 #include "components/os_crypt/key_storage_config_linux.h"
-#include "components/os_crypt/os_crypt.h"
 #endif
 
 namespace network {
@@ -442,6 +442,12 @@
 }
 #endif
 
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+void NetworkService::SetEncryptionKey(const std::string& encryption_key) {
+  OSCrypt::SetRawEncryptionKey(encryption_key);
+}
+#endif  // OS_MACOSX
+
 void NetworkService::AddCorbExceptionForPlugin(uint32_t process_id) {
   DCHECK_NE(mojom::kBrowserProcessId, process_id);
   CrossOriginReadBlocking::AddExceptionForPlugin(process_id);
diff --git a/services/network/network_service.h b/services/network/network_service.h
index 16ab88f..a275de0 100644
--- a/services/network/network_service.h
+++ b/services/network/network_service.h
@@ -146,6 +146,9 @@
 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
   void SetCryptConfig(mojom::CryptConfigPtr crypt_config) override;
 #endif
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+  void SetEncryptionKey(const std::string& encryption_key) override;
+#endif
   void AddCorbExceptionForPlugin(uint32_t process_id) override;
   void RemoveCorbExceptionForPlugin(uint32_t process_id) override;
 
diff --git a/services/network/public/cpp/cors/cors.cc b/services/network/public/cpp/cors/cors.cc
index b117c22..0076d1b 100644
--- a/services/network/public/cpp/cors/cors.cc
+++ b/services/network/public/cpp/cors/cors.cc
@@ -354,10 +354,6 @@
 }
 
 bool IsCORSSafelistedHeader(const std::string& name, const std::string& value) {
-  // If |value|’s length is greater than 128, then return false.
-  if (value.size() > 128)
-    return false;
-
   // https://fetch.spec.whatwg.org/#cors-safelisted-request-header
   // "A CORS-safelisted header is a header whose name is either one of `Accept`,
   // `Accept-Language`, and `Content-Language`, or whose name is
@@ -399,89 +395,12 @@
   if (lower_name == "save-data")
     return lower_value == "on";
 
-  if (lower_name == "accept") {
-    return (value.end() == std::find_if(value.begin(), value.end(), [](char c) {
-              return (c < 0x20 && c != 0x09) || c == 0x22 || c == 0x28 ||
-                     c == 0x29 || c == 0x3a || c == 0x3c || c == 0x3e ||
-                     c == 0x3f || c == 0x40 || c == 0x5b || c == 0x5c ||
-                     c == 0x5d || c == 0x7b || c == 0x7d || c >= 0x7f;
-            }));
-  }
-
-  if (lower_name == "accept-language" || lower_name == "content-language") {
-    return (value.end() == std::find_if(value.begin(), value.end(), [](char c) {
-              return !isalnum(c) && c != 0x20 && c != 0x2a && c != 0x2c &&
-                     c != 0x2d && c != 0x2e && c != 0x3b && c != 0x3d;
-            }));
-  }
-
   if (lower_name == "content-type")
     return IsCORSSafelistedLowerCaseContentType(lower_value);
 
   return true;
 }
 
-bool IsNoCORSSafelistedHeader(const std::string& name,
-                              const std::string& value) {
-  const std::string lower_name = base::ToLowerASCII(name);
-
-  if (lower_name != "accept" && lower_name != "accept-language" &&
-      lower_name != "content-language" && lower_name != "content-type") {
-    return false;
-  }
-
-  return IsCORSSafelistedHeader(lower_name, value);
-}
-
-std::vector<std::string> CORSUnsafeRequestHeaderNames(
-    const net::HttpRequestHeaders::HeaderVector& headers) {
-  std::vector<std::string> potentially_unsafe_names;
-  std::vector<std::string> header_names;
-
-  constexpr size_t kSafeListValueSizeMax = 1024;
-  size_t safe_list_value_size = 0;
-
-  for (const auto& header : headers) {
-    if (!IsCORSSafelistedHeader(header.key, header.value)) {
-      header_names.push_back(base::ToLowerASCII(header.key));
-    } else {
-      potentially_unsafe_names.push_back(base::ToLowerASCII(header.key));
-      safe_list_value_size += header.value.size();
-    }
-  }
-  if (safe_list_value_size > kSafeListValueSizeMax) {
-    header_names.insert(header_names.end(), potentially_unsafe_names.begin(),
-                        potentially_unsafe_names.end());
-  }
-  return header_names;
-}
-
-std::vector<std::string> CORSUnsafeNotForbiddenRequestHeaderNames(
-    const net::HttpRequestHeaders::HeaderVector& headers) {
-  std::vector<std::string> header_names;
-  std::vector<std::string> potentially_unsafe_names;
-
-  constexpr size_t kSafeListValueSizeMax = 1024;
-  size_t safe_list_value_size = 0;
-
-  for (const auto& header : headers) {
-    if (IsForbiddenHeader(header.key))
-      continue;
-
-    if (!IsCORSSafelistedHeader(header.key, header.value)) {
-      header_names.push_back(base::ToLowerASCII(header.key));
-    } else {
-      potentially_unsafe_names.push_back(base::ToLowerASCII(header.key));
-      safe_list_value_size += header.value.size();
-    }
-  }
-  if (safe_list_value_size > kSafeListValueSizeMax) {
-    header_names.insert(header_names.end(), potentially_unsafe_names.begin(),
-                        potentially_unsafe_names.end());
-  }
-  return header_names;
-}
-
 bool IsForbiddenMethod(const std::string& method) {
   static const std::vector<std::string> forbidden_methods = {"trace", "track",
                                                              "connect"};
diff --git a/services/network/public/cpp/cors/cors.h b/services/network/public/cpp/cors/cors.h
index cbe6219..ec91457 100644
--- a/services/network/public/cpp/cors/cors.h
+++ b/services/network/public/cpp/cors/cors.h
@@ -6,11 +6,9 @@
 #define SERVICES_NETWORK_PUBLIC_CPP_CORS_CORS_H_
 
 #include <string>
-#include <vector>
 
 #include "base/component_export.h"
 #include "base/optional.h"
-#include "net/http/http_request_headers.h"
 #include "services/network/public/cpp/cors/cors_error_status.h"
 #include "services/network/public/mojom/cors.mojom-shared.h"
 #include "services/network/public/mojom/fetch_api.mojom-shared.h"
@@ -119,26 +117,6 @@
 bool IsCORSSafelistedContentType(const std::string& name);
 COMPONENT_EXPORT(NETWORK_CPP)
 bool IsCORSSafelistedHeader(const std::string& name, const std::string& value);
-COMPONENT_EXPORT(NETWORK_CPP)
-bool IsNoCORSSafelistedHeader(const std::string& name,
-                              const std::string& value);
-
-// https://fetch.spec.whatwg.org/#cors-unsafe-request-header-names
-// |headers| must not contain multiple headers for the same name.
-// The returned list is NOT sorted.
-// The returned list consists of lower-cased names.
-COMPONENT_EXPORT(NETWORK_CPP)
-std::vector<std::string> CORSUnsafeRequestHeaderNames(
-    const net::HttpRequestHeaders::HeaderVector& headers);
-
-// https://fetch.spec.whatwg.org/#cors-unsafe-request-header-names
-// Returns header names which are not CORS-safelisted AND not forbidden.
-// |headers| must not contain multiple headers for the same name.
-// The returned list is NOT sorted.
-// The returned list consists of lower-cased names.
-COMPONENT_EXPORT(NETWORK_CPP)
-std::vector<std::string> CORSUnsafeNotForbiddenRequestHeaderNames(
-    const net::HttpRequestHeaders::HeaderVector& headers);
 
 // Checks forbidden method in the fetch spec.
 // See https://fetch.spec.whatwg.org/#forbidden-method.
diff --git a/services/network/public/cpp/cors/cors_unittest.cc b/services/network/public/cpp/cors/cors_unittest.cc
index 1bd3c49..695b04fd 100644
--- a/services/network/public/cpp/cors/cors_unittest.cc
+++ b/services/network/public/cpp/cors/cors_unittest.cc
@@ -4,29 +4,27 @@
 
 #include "services/network/public/cpp/cors/cors.h"
 
-#include <limits.h>
-
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
 namespace network {
-namespace cors {
+
 namespace {
 
 using CORSTest = testing::Test;
 
 TEST_F(CORSTest, CheckAccessDetectsInvalidResponse) {
-  base::Optional<CORSErrorStatus> error_status =
-      CheckAccess(GURL(), 0 /* response_status_code */,
-                  base::nullopt /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::FetchCredentialsMode::kOmit, url::Origin());
+  base::Optional<CORSErrorStatus> error_status = cors::CheckAccess(
+      GURL(), 0 /* response_status_code */,
+      base::nullopt /* allow_origin_header */,
+      base::nullopt /* allow_credentials_header */,
+      network::mojom::FetchCredentialsMode::kOmit, url::Origin());
   ASSERT_TRUE(error_status);
   EXPECT_EQ(mojom::CORSError::kInvalidResponse, error_status->cors_error);
 }
 
-// Tests if CheckAccess detects kWildcardOriginNotAllowed error correctly.
+// Tests if cors::CheckAccess detects kWildcardOriginNotAllowed error correctly.
 TEST_F(CORSTest, CheckAccessDetectsWildcardOriginNotAllowed) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
@@ -35,24 +33,24 @@
 
   // Access-Control-Allow-Origin '*' works.
   base::Optional<CORSErrorStatus> error1 =
-      CheckAccess(response_url, response_status_code,
-                  allow_all_header /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::FetchCredentialsMode::kOmit, origin);
+      cors::CheckAccess(response_url, response_status_code,
+                        allow_all_header /* allow_origin_header */,
+                        base::nullopt /* allow_credentials_header */,
+                        network::mojom::FetchCredentialsMode::kOmit, origin);
   EXPECT_FALSE(error1);
 
   // Access-Control-Allow-Origin '*' should not be allowed if credentials mode
   // is kInclude.
   base::Optional<CORSErrorStatus> error2 =
-      CheckAccess(response_url, response_status_code,
-                  allow_all_header /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::FetchCredentialsMode::kInclude, origin);
+      cors::CheckAccess(response_url, response_status_code,
+                        allow_all_header /* allow_origin_header */,
+                        base::nullopt /* allow_credentials_header */,
+                        network::mojom::FetchCredentialsMode::kInclude, origin);
   ASSERT_TRUE(error2);
   EXPECT_EQ(mojom::CORSError::kWildcardOriginNotAllowed, error2->cors_error);
 }
 
-// Tests if CheckAccess detects kMissingAllowOriginHeader error correctly.
+// Tests if cors::CheckAccess detects kMissingAllowOriginHeader error correctly.
 TEST_F(CORSTest, CheckAccessDetectsMissingAllowOriginHeader) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
@@ -60,15 +58,15 @@
 
   // Access-Control-Allow-Origin is missed.
   base::Optional<CORSErrorStatus> error =
-      CheckAccess(response_url, response_status_code,
-                  base::nullopt /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::FetchCredentialsMode::kOmit, origin);
+      cors::CheckAccess(response_url, response_status_code,
+                        base::nullopt /* allow_origin_header */,
+                        base::nullopt /* allow_credentials_header */,
+                        network::mojom::FetchCredentialsMode::kOmit, origin);
   ASSERT_TRUE(error);
   EXPECT_EQ(mojom::CORSError::kMissingAllowOriginHeader, error->cors_error);
 }
 
-// Tests if CheckAccess detects kMultipleAllowOriginValues error
+// Tests if cors::CheckAccess detects kMultipleAllowOriginValues error
 // correctly.
 TEST_F(CORSTest, CheckAccessDetectsMultipleAllowOriginValues) {
   const GURL response_url("http://example.com/data");
@@ -77,55 +75,55 @@
 
   const std::string space_separated_multiple_origins(
       "http://example.com http://another.example.com");
-  base::Optional<CORSErrorStatus> error1 =
-      CheckAccess(response_url, response_status_code,
-                  space_separated_multiple_origins /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::FetchCredentialsMode::kOmit, origin);
+  base::Optional<CORSErrorStatus> error1 = cors::CheckAccess(
+      response_url, response_status_code,
+      space_separated_multiple_origins /* allow_origin_header */,
+      base::nullopt /* allow_credentials_header */,
+      network::mojom::FetchCredentialsMode::kOmit, origin);
   ASSERT_TRUE(error1);
   EXPECT_EQ(mojom::CORSError::kMultipleAllowOriginValues, error1->cors_error);
 
   const std::string comma_separated_multiple_origins(
       "http://example.com,http://another.example.com");
-  base::Optional<CORSErrorStatus> error2 =
-      CheckAccess(response_url, response_status_code,
-                  comma_separated_multiple_origins /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::FetchCredentialsMode::kOmit, origin);
+  base::Optional<CORSErrorStatus> error2 = cors::CheckAccess(
+      response_url, response_status_code,
+      comma_separated_multiple_origins /* allow_origin_header */,
+      base::nullopt /* allow_credentials_header */,
+      network::mojom::FetchCredentialsMode::kOmit, origin);
   ASSERT_TRUE(error2);
   EXPECT_EQ(mojom::CORSError::kMultipleAllowOriginValues, error2->cors_error);
 }
 
-// Tests if CheckAccess detects kInvalidAllowOriginValue error correctly.
+// Tests if cors::CheckAccess detects kInvalidAllowOriginValue error correctly.
 TEST_F(CORSTest, CheckAccessDetectsInvalidAllowOriginValue) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
   const int response_status_code = 200;
 
   base::Optional<CORSErrorStatus> error =
-      CheckAccess(response_url, response_status_code,
-                  std::string("invalid.origin") /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::FetchCredentialsMode::kOmit, origin);
+      cors::CheckAccess(response_url, response_status_code,
+                        std::string("invalid.origin") /* allow_origin_header */,
+                        base::nullopt /* allow_credentials_header */,
+                        network::mojom::FetchCredentialsMode::kOmit, origin);
   ASSERT_TRUE(error);
   EXPECT_EQ(mojom::CORSError::kInvalidAllowOriginValue, error->cors_error);
   EXPECT_EQ("invalid.origin", error->failed_parameter);
 }
 
-// Tests if CheckAccess detects kAllowOriginMismatch error correctly.
+// Tests if cors::CheckAccess detects kAllowOriginMismatch error correctly.
 TEST_F(CORSTest, CheckAccessDetectsAllowOriginMismatch) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
   const int response_status_code = 200;
 
   base::Optional<CORSErrorStatus> error1 =
-      CheckAccess(response_url, response_status_code,
-                  origin.Serialize() /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::FetchCredentialsMode::kOmit, origin);
+      cors::CheckAccess(response_url, response_status_code,
+                        origin.Serialize() /* allow_origin_header */,
+                        base::nullopt /* allow_credentials_header */,
+                        network::mojom::FetchCredentialsMode::kOmit, origin);
   ASSERT_FALSE(error1);
 
-  base::Optional<CORSErrorStatus> error2 = CheckAccess(
+  base::Optional<CORSErrorStatus> error2 = cors::CheckAccess(
       response_url, response_status_code,
       std::string("http://not.google.com") /* allow_origin_header */,
       base::nullopt /* allow_credentials_header */,
@@ -139,37 +137,37 @@
   const url::Origin null_origin;
   EXPECT_EQ(null_string, null_origin.Serialize());
 
-  base::Optional<CORSErrorStatus> error3 = CheckAccess(
+  base::Optional<CORSErrorStatus> error3 = cors::CheckAccess(
       response_url, response_status_code, null_string /* allow_origin_header */,
       base::nullopt /* allow_credentials_header */,
       network::mojom::FetchCredentialsMode::kOmit, null_origin);
   EXPECT_FALSE(error3);
 }
 
-// Tests if CheckAccess detects kInvalidAllowCredentials error correctly.
+// Tests if cors::CheckAccess detects kInvalidAllowCredentials error correctly.
 TEST_F(CORSTest, CheckAccessDetectsInvalidAllowCredential) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
   const int response_status_code = 200;
 
   base::Optional<CORSErrorStatus> error1 =
-      CheckAccess(response_url, response_status_code,
-                  origin.Serialize() /* allow_origin_header */,
-                  std::string("true") /* allow_credentials_header */,
-                  network::mojom::FetchCredentialsMode::kInclude, origin);
+      cors::CheckAccess(response_url, response_status_code,
+                        origin.Serialize() /* allow_origin_header */,
+                        std::string("true") /* allow_credentials_header */,
+                        network::mojom::FetchCredentialsMode::kInclude, origin);
   ASSERT_FALSE(error1);
 
   base::Optional<CORSErrorStatus> error2 =
-      CheckAccess(response_url, response_status_code,
-                  origin.Serialize() /* allow_origin_header */,
-                  std::string("fuga") /* allow_credentials_header */,
-                  network::mojom::FetchCredentialsMode::kInclude, origin);
+      cors::CheckAccess(response_url, response_status_code,
+                        origin.Serialize() /* allow_origin_header */,
+                        std::string("fuga") /* allow_credentials_header */,
+                        network::mojom::FetchCredentialsMode::kInclude, origin);
   ASSERT_TRUE(error2);
   EXPECT_EQ(mojom::CORSError::kInvalidAllowCredentials, error2->cors_error);
   EXPECT_EQ("fuga", error2->failed_parameter);
 }
 
-// Tests if CheckRedirectLocation detects kCORSDisabledScheme and
+// Tests if cors::CheckRedirectLocation detects kCORSDisabledScheme and
 // kRedirectContainsCredentials errors correctly.
 TEST_F(CORSTest, CheckRedirectLocation) {
   struct TestCase {
@@ -279,30 +277,30 @@
                  << ", tainted: " << test.tainted);
 
     EXPECT_EQ(test.expectation,
-              CheckRedirectLocation(test.url, test.request_mode, origin,
-                                    test.cors_flag, test.tainted));
+              cors::CheckRedirectLocation(test.url, test.request_mode, origin,
+                                          test.cors_flag, test.tainted));
   }
 }
 
 TEST_F(CORSTest, CheckPreflightDetectsErrors) {
-  EXPECT_FALSE(CheckPreflight(200));
-  EXPECT_FALSE(CheckPreflight(299));
+  EXPECT_FALSE(cors::CheckPreflight(200));
+  EXPECT_FALSE(cors::CheckPreflight(299));
 
-  base::Optional<mojom::CORSError> error1 = CheckPreflight(300);
+  base::Optional<mojom::CORSError> error1 = cors::CheckPreflight(300);
   ASSERT_TRUE(error1);
   EXPECT_EQ(mojom::CORSError::kPreflightInvalidStatus, *error1);
 
-  EXPECT_FALSE(CheckExternalPreflight(std::string("true")));
+  EXPECT_FALSE(cors::CheckExternalPreflight(std::string("true")));
 
   base::Optional<CORSErrorStatus> error2 =
-      CheckExternalPreflight(base::nullopt);
+      cors::CheckExternalPreflight(base::nullopt);
   ASSERT_TRUE(error2);
   EXPECT_EQ(mojom::CORSError::kPreflightMissingAllowExternal,
             error2->cors_error);
   EXPECT_EQ("", error2->failed_parameter);
 
   base::Optional<CORSErrorStatus> error3 =
-      CheckExternalPreflight(std::string("TRUE"));
+      cors::CheckExternalPreflight(std::string("TRUE"));
   ASSERT_TRUE(error3);
   EXPECT_EQ(mojom::CORSError::kPreflightInvalidAllowExternal,
             error3->cors_error);
@@ -320,386 +318,148 @@
 
   // CORS flag is false, same-origin request
   EXPECT_EQ(FetchResponseType::kBasic,
-            CalculateResponseTainting(
+            cors::CalculateResponseTainting(
                 same_origin_url, FetchRequestMode::kSameOrigin, origin, false));
   EXPECT_EQ(FetchResponseType::kBasic,
-            CalculateResponseTainting(
+            cors::CalculateResponseTainting(
                 same_origin_url, FetchRequestMode::kNoCORS, origin, false));
   EXPECT_EQ(FetchResponseType::kBasic,
-            CalculateResponseTainting(same_origin_url, FetchRequestMode::kCORS,
-                                      origin, false));
+            cors::CalculateResponseTainting(
+                same_origin_url, FetchRequestMode::kCORS, origin, false));
   EXPECT_EQ(FetchResponseType::kBasic,
-            CalculateResponseTainting(
+            cors::CalculateResponseTainting(
                 same_origin_url, FetchRequestMode::kCORSWithForcedPreflight,
                 origin, false));
   EXPECT_EQ(FetchResponseType::kBasic,
-            CalculateResponseTainting(
+            cors::CalculateResponseTainting(
                 same_origin_url, FetchRequestMode::kNavigate, origin, false));
 
   // CORS flag is false, cross-origin request
   EXPECT_EQ(FetchResponseType::kOpaque,
-            CalculateResponseTainting(
+            cors::CalculateResponseTainting(
                 cross_origin_url, FetchRequestMode::kNoCORS, origin, false));
   EXPECT_EQ(FetchResponseType::kBasic,
-            CalculateResponseTainting(
+            cors::CalculateResponseTainting(
                 cross_origin_url, FetchRequestMode::kNavigate, origin, false));
 
   // CORS flag is true, same-origin request
   EXPECT_EQ(FetchResponseType::kCORS,
-            CalculateResponseTainting(same_origin_url, FetchRequestMode::kCORS,
-                                      origin, true));
+            cors::CalculateResponseTainting(
+                same_origin_url, FetchRequestMode::kCORS, origin, true));
   EXPECT_EQ(FetchResponseType::kCORS,
-            CalculateResponseTainting(
+            cors::CalculateResponseTainting(
                 same_origin_url, FetchRequestMode::kCORSWithForcedPreflight,
                 origin, true));
 
   // CORS flag is true, cross-origin request
   EXPECT_EQ(FetchResponseType::kCORS,
-            CalculateResponseTainting(cross_origin_url, FetchRequestMode::kCORS,
-                                      origin, true));
+            cors::CalculateResponseTainting(
+                cross_origin_url, FetchRequestMode::kCORS, origin, true));
   EXPECT_EQ(FetchResponseType::kCORS,
-            CalculateResponseTainting(
+            cors::CalculateResponseTainting(
                 cross_origin_url, FetchRequestMode::kCORSWithForcedPreflight,
                 origin, true));
 
   // Origin is not provided.
   EXPECT_EQ(FetchResponseType::kBasic,
-            CalculateResponseTainting(
+            cors::CalculateResponseTainting(
                 same_origin_url, FetchRequestMode::kNoCORS, no_origin, false));
   EXPECT_EQ(
       FetchResponseType::kBasic,
-      CalculateResponseTainting(same_origin_url, FetchRequestMode::kNavigate,
-                                no_origin, false));
+      cors::CalculateResponseTainting(
+          same_origin_url, FetchRequestMode::kNavigate, no_origin, false));
   EXPECT_EQ(FetchResponseType::kBasic,
-            CalculateResponseTainting(
+            cors::CalculateResponseTainting(
                 cross_origin_url, FetchRequestMode::kNoCORS, no_origin, false));
   EXPECT_EQ(
       FetchResponseType::kBasic,
-      CalculateResponseTainting(cross_origin_url, FetchRequestMode::kNavigate,
-                                no_origin, false));
+      cors::CalculateResponseTainting(
+          cross_origin_url, FetchRequestMode::kNavigate, no_origin, false));
 }
 
-TEST_F(CORSTest, SafelistedMethod) {
+TEST_F(CORSTest, CheckCORSSafelist) {
   // Method check should be case-insensitive.
-  EXPECT_TRUE(IsCORSSafelistedMethod("get"));
-  EXPECT_TRUE(IsCORSSafelistedMethod("Get"));
-  EXPECT_TRUE(IsCORSSafelistedMethod("GET"));
-  EXPECT_TRUE(IsCORSSafelistedMethod("HEAD"));
-  EXPECT_TRUE(IsCORSSafelistedMethod("POST"));
-  EXPECT_FALSE(IsCORSSafelistedMethod("OPTIONS"));
-}
+  EXPECT_TRUE(cors::IsCORSSafelistedMethod("get"));
+  EXPECT_TRUE(cors::IsCORSSafelistedMethod("Get"));
+  EXPECT_TRUE(cors::IsCORSSafelistedMethod("GET"));
+  EXPECT_TRUE(cors::IsCORSSafelistedMethod("HEAD"));
+  EXPECT_TRUE(cors::IsCORSSafelistedMethod("POST"));
+  EXPECT_FALSE(cors::IsCORSSafelistedMethod("OPTIONS"));
 
-TEST_F(CORSTest, SafelistedHeader) {
-  // See SafelistedAccept/AcceptLanguage/ContentLanguage/ContentType also.
-
-  EXPECT_TRUE(IsCORSSafelistedHeader("accept", "foo"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("foo", "bar"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("user-agent", "foo"));
-}
-
-TEST_F(CORSTest, SafelistedAccept) {
-  EXPECT_TRUE(IsCORSSafelistedHeader("accept", "text/html"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("AccepT", "text/html"));
-
-  constexpr char kAllowed[] =
-      "\t !#$%&'*+,-./0123456789;="
-      "ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz|~";
-  for (int i = CHAR_MIN; i <= CHAR_MAX; ++i) {
-    SCOPED_TRACE(testing::Message() << "c = static_cast<char>(" << i << ")");
-    char c = static_cast<char>(i);
-    // 1 for the trailing null character.
-    auto* end = kAllowed + base::size(kAllowed) - 1;
-    EXPECT_EQ(std::find(kAllowed, end, c) != end,
-              IsCORSSafelistedHeader("accept", std::string(1, c)));
-    EXPECT_EQ(std::find(kAllowed, end, c) != end,
-              IsCORSSafelistedHeader("AccepT", std::string(1, c)));
-  }
-
-  EXPECT_TRUE(IsCORSSafelistedHeader("accept", std::string(128, 'a')));
-  EXPECT_FALSE(IsCORSSafelistedHeader("accept", std::string(129, 'a')));
-  EXPECT_TRUE(IsCORSSafelistedHeader("AccepT", std::string(128, 'a')));
-  EXPECT_FALSE(IsCORSSafelistedHeader("AccepT", std::string(129, 'a')));
-}
-
-TEST_F(CORSTest, SafelistedAcceptLanguage) {
-  EXPECT_TRUE(IsCORSSafelistedHeader("accept-language", "en,ja"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("aCcEPT-lAngUAge", "en,ja"));
-
-  constexpr char kAllowed[] =
-      "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz *,-.;=";
-  for (int i = CHAR_MIN; i <= CHAR_MAX; ++i) {
-    SCOPED_TRACE(testing::Message() << "c = static_cast<char>(" << i << ")");
-    char c = static_cast<char>(i);
-    // 1 for the trailing null character.
-    auto* end = kAllowed + base::size(kAllowed) - 1;
-    EXPECT_EQ(std::find(kAllowed, end, c) != end,
-              IsCORSSafelistedHeader("aCcEPT-lAngUAge", std::string(1, c)));
-  }
-  EXPECT_TRUE(IsCORSSafelistedHeader("accept-language", std::string(128, 'a')));
-  EXPECT_FALSE(
-      IsCORSSafelistedHeader("accept-language", std::string(129, 'a')));
-  EXPECT_TRUE(IsCORSSafelistedHeader("aCcEPT-lAngUAge", std::string(128, 'a')));
-  EXPECT_FALSE(
-      IsCORSSafelistedHeader("aCcEPT-lAngUAge", std::string(129, 'a')));
-}
-
-TEST_F(CORSTest, SafelistedContentLanguage) {
-  EXPECT_TRUE(IsCORSSafelistedHeader("content-language", "en,ja"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("cONTent-LANguaGe", "en,ja"));
-
-  constexpr char kAllowed[] =
-      "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz *,-.;=";
-  for (int i = CHAR_MIN; i <= CHAR_MAX; ++i) {
-    SCOPED_TRACE(testing::Message() << "c = static_cast<char>(" << i << ")");
-    char c = static_cast<char>(i);
-    // 1 for the trailing null character.
-    auto* end = kAllowed + base::size(kAllowed) - 1;
-    EXPECT_EQ(std::find(kAllowed, end, c) != end,
-              IsCORSSafelistedHeader("content-language", std::string(1, c)));
-    EXPECT_EQ(std::find(kAllowed, end, c) != end,
-              IsCORSSafelistedHeader("cONTent-LANguaGe", std::string(1, c)));
-  }
+  // Content-Type check should be case-insensitive, and should ignore spaces and
+  // parameters such as charset after a semicolon.
   EXPECT_TRUE(
-      IsCORSSafelistedHeader("content-language", std::string(128, 'a')));
-  EXPECT_FALSE(
-      IsCORSSafelistedHeader("content-language", std::string(129, 'a')));
-  EXPECT_TRUE(
-      IsCORSSafelistedHeader("cONTent-LANguaGe", std::string(128, 'a')));
-  EXPECT_FALSE(
-      IsCORSSafelistedHeader("cONTent-LANguaGe", std::string(129, 'a')));
-}
+      cors::IsCORSSafelistedContentType("application/x-www-form-urlencoded"));
+  EXPECT_TRUE(cors::IsCORSSafelistedContentType("multipart/form-data"));
+  EXPECT_TRUE(cors::IsCORSSafelistedContentType("text/plain"));
+  EXPECT_TRUE(cors::IsCORSSafelistedContentType("TEXT/PLAIN"));
+  EXPECT_TRUE(cors::IsCORSSafelistedContentType("text/plain;charset=utf-8"));
+  EXPECT_TRUE(cors::IsCORSSafelistedContentType(" text/plain ;charset=utf-8"));
+  EXPECT_FALSE(cors::IsCORSSafelistedContentType("text/html"));
 
-TEST_F(CORSTest, SafelistedContentType) {
-  EXPECT_TRUE(IsCORSSafelistedHeader("content-type", "text/plain"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("CoNtEnt-TyPE", "text/plain"));
-  EXPECT_TRUE(
-      IsCORSSafelistedHeader("content-type", "text/plain; charset=utf-8"));
-  EXPECT_TRUE(
-      IsCORSSafelistedHeader("content-type", "  text/plain ; charset=UTF-8"));
-  EXPECT_TRUE(
-      IsCORSSafelistedHeader("content-type", "text/plain; param=BOGUS"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("content-type",
-                                     "application/x-www-form-urlencoded"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("content-type", "multipart/form-data"));
-
-  EXPECT_TRUE(IsCORSSafelistedHeader("content-type", "Text/plain"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("content-type", "tEXT/PLAIN"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("content-type", "text/html"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("CoNtEnt-TyPE", "text/html"));
-
-  EXPECT_FALSE(IsCORSSafelistedHeader("content-type", "image/png"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("CoNtEnt-TyPE", "image/png"));
-  EXPECT_TRUE(IsCORSSafelistedHeader(
-      "content-type", "text/plain; charset=" + std::string(108, 'a')));
-  EXPECT_TRUE(IsCORSSafelistedHeader(
-      "cONTent-tYPE", "text/plain; charset=" + std::string(108, 'a')));
-  EXPECT_FALSE(IsCORSSafelistedHeader(
-      "content-type", "text/plain; charset=" + std::string(109, 'a')));
-  EXPECT_FALSE(IsCORSSafelistedHeader(
-      "cONTent-tYPE", "text/plain; charset=" + std::string(109, 'a')));
+  // Header check should be case-insensitive. Value must be considered only for
+  // Content-Type.
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("accept", "text/html"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("Accept-Language", "en"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("Content-Language", "ja"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("SAVE-DATA", "on"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("Intervention", ""));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("Cache-Control", ""));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("Content-Type", "text/plain"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("Content-Type", "image/png"));
 }
 
 TEST_F(CORSTest, CheckCORSClientHintsSafelist) {
-  EXPECT_FALSE(IsCORSSafelistedHeader("device-memory", ""));
-  EXPECT_FALSE(IsCORSSafelistedHeader("device-memory", "abc"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("device-memory", "1.25"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("DEVICE-memory", "1.25"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("device-memory", "1.25-2.5"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("device-memory", "-1.25"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("device-memory", "1e2"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("device-memory", "inf"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("device-memory", "-2.3"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("device-memory", "NaN"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("DEVICE-memory", "1.25.3"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("DEVICE-memory", "1."));
-  EXPECT_FALSE(IsCORSSafelistedHeader("DEVICE-memory", ".1"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("DEVICE-memory", "."));
-  EXPECT_TRUE(IsCORSSafelistedHeader("DEVICE-memory", "1"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("device-memory", ""));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("device-memory", "abc"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("device-memory", "1.25"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("DEVICE-memory", "1.25"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("device-memory", "1.25-2.5"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("device-memory", "-1.25"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("device-memory", "1e2"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("device-memory", "inf"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("device-memory", "-2.3"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("device-memory", "NaN"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("DEVICE-memory", "1.25.3"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("DEVICE-memory", "1."));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("DEVICE-memory", ".1"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("DEVICE-memory", "."));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("DEVICE-memory", "1"));
 
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", ""));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", "abc"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("dpr", "1.25"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("Dpr", "1.25"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", "1.25-2.5"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", "-1.25"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", "1e2"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", "inf"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", "-2.3"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", "NaN"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", "1.25.3"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", "1."));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", ".1"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("dpr", "."));
-  EXPECT_TRUE(IsCORSSafelistedHeader("dpr", "1"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", ""));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", "abc"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("dpr", "1.25"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("Dpr", "1.25"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", "1.25-2.5"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", "-1.25"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", "1e2"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", "inf"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", "-2.3"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", "NaN"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", "1.25.3"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", "1."));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", ".1"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("dpr", "."));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("dpr", "1"));
 
-  EXPECT_FALSE(IsCORSSafelistedHeader("width", ""));
-  EXPECT_FALSE(IsCORSSafelistedHeader("width", "abc"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("width", "125"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("width", "1"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("WIDTH", "125"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("width", "125.2"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("width", "-125"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("width", "2147483648"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("width", ""));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("width", "abc"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("width", "125"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("width", "1"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("WIDTH", "125"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("width", "125.2"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("width", "-125"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("width", "2147483648"));
 
-  EXPECT_FALSE(IsCORSSafelistedHeader("viewport-width", ""));
-  EXPECT_FALSE(IsCORSSafelistedHeader("viewport-width", "abc"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("viewport-width", "125"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("viewport-width", "1"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("viewport-Width", "125"));
-  EXPECT_FALSE(IsCORSSafelistedHeader("viewport-width", "125.2"));
-  EXPECT_TRUE(IsCORSSafelistedHeader("viewport-width", "2147483648"));
-}
-
-TEST_F(CORSTest, CORSUnsafeRequestHeaderNames) {
-  // Needed because initializer list is not allowed for a macro argument.
-  using List = std::vector<std::string>;
-
-  // Empty => Empty
-  EXPECT_EQ(CORSUnsafeRequestHeaderNames({}), List({}));
-
-  // Some headers are safelisted.
-  EXPECT_EQ(CORSUnsafeRequestHeaderNames({{"content-type", "text/plain"},
-                                          {"dpr", "12345"},
-                                          {"aCCept", "en,ja"},
-                                          {"accept-charset", "utf-8"},
-                                          {"uSer-Agent", "foo"},
-                                          {"hogE", "fuga"}}),
-            List({"accept-charset", "user-agent", "hoge"}));
-
-  // All headers are not safelisted.
-  EXPECT_EQ(
-      CORSUnsafeRequestHeaderNames({{"content-type", "text/html"},
-                                    {"dpr", "123-45"},
-                                    {"aCCept", "en,ja"},
-                                    {"accept-charset", "utf-8"},
-                                    {"uSer-Agent", "foo"},
-                                    {"hogE", "fuga"}}),
-      List({"content-type", "dpr", "accept-charset", "user-agent", "hoge"}));
-
-  // |safelistValueSize| is 1024.
-  EXPECT_EQ(
-      CORSUnsafeRequestHeaderNames(
-          {{"content-type", "text/plain; charset=" + std::string(108, '1')},
-           {"accept", std::string(128, '1')},
-           {"accept-language", std::string(128, '1')},
-           {"content-language", std::string(128, '1')},
-           {"dpr", std::string(128, '1')},
-           {"device-memory", std::string(128, '1')},
-           {"save-data", "on"},
-           {"viewport-width", std::string(128, '1')},
-           {"width", std::string(126, '1')},
-           {"hogE", "fuga"}}),
-      List({"hoge"}));
-
-  // |safelistValueSize| is 1025.
-  EXPECT_EQ(
-      CORSUnsafeRequestHeaderNames(
-          {{"content-type", "text/plain; charset=" + std::string(108, '1')},
-           {"accept", std::string(128, '1')},
-           {"accept-language", std::string(128, '1')},
-           {"content-language", std::string(128, '1')},
-           {"dpr", std::string(128, '1')},
-           {"device-memory", std::string(128, '1')},
-           {"save-data", "on"},
-           {"viewport-width", std::string(128, '1')},
-           {"width", std::string(127, '1')},
-           {"hogE", "fuga"}}),
-      List({"hoge", "content-type", "accept", "accept-language",
-            "content-language", "dpr", "device-memory", "save-data",
-            "viewport-width", "width"}));
-
-  // |safelistValueSize| is 897 because "content-type" is not safelisted.
-  EXPECT_EQ(
-      CORSUnsafeRequestHeaderNames(
-          {{"content-type", "text/plain; charset=" + std::string(128, '1')},
-           {"accept", std::string(128, '1')},
-           {"accept-language", std::string(128, '1')},
-           {"content-language", std::string(128, '1')},
-           {"dpr", std::string(128, '1')},
-           {"device-memory", std::string(128, '1')},
-           {"save-data", "on"},
-           {"viewport-width", std::string(128, '1')},
-           {"width", std::string(127, '1')},
-           {"hogE", "fuga"}}),
-      List({"content-type", "hoge"}));
-}
-
-TEST_F(CORSTest, CORSUnsafeNotForbiddenRequestHeaderNames) {
-  // Needed because initializer list is not allowed for a macro argument.
-  using List = std::vector<std::string>;
-
-  // Empty => Empty
-  EXPECT_EQ(CORSUnsafeNotForbiddenRequestHeaderNames({}), List({}));
-
-  // "user-agent" is NOT forbidden per spec, but forbidden in Chromium.
-  EXPECT_EQ(
-      CORSUnsafeNotForbiddenRequestHeaderNames({{"content-type", "text/plain"},
-                                                {"dpr", "12345"},
-                                                {"aCCept", "en,ja"},
-                                                {"accept-charset", "utf-8"},
-                                                {"uSer-Agent", "foo"},
-                                                {"hogE", "fuga"}}),
-      List({"hoge"}));
-
-  EXPECT_EQ(
-      CORSUnsafeNotForbiddenRequestHeaderNames({{"content-type", "text/html"},
-                                                {"dpr", "123-45"},
-                                                {"aCCept", "en,ja"},
-                                                {"accept-charset", "utf-8"},
-                                                {"hogE", "fuga"}}),
-      List({"content-type", "dpr", "hoge"}));
-
-  // |safelistValueSize| is 1024.
-  EXPECT_EQ(
-      CORSUnsafeNotForbiddenRequestHeaderNames(
-          {{"content-type", "text/plain; charset=" + std::string(108, '1')},
-           {"accept", std::string(128, '1')},
-           {"accept-language", std::string(128, '1')},
-           {"content-language", std::string(128, '1')},
-           {"dpr", std::string(128, '1')},
-           {"device-memory", std::string(128, '1')},
-           {"save-data", "on"},
-           {"viewport-width", std::string(128, '1')},
-           {"width", std::string(126, '1')},
-           {"accept-charset", "utf-8"},
-           {"hogE", "fuga"}}),
-      List({"hoge"}));
-
-  // |safelistValueSize| is 1025.
-  EXPECT_EQ(
-      CORSUnsafeNotForbiddenRequestHeaderNames(
-          {{"content-type", "text/plain; charset=" + std::string(108, '1')},
-           {"accept", std::string(128, '1')},
-           {"accept-language", std::string(128, '1')},
-           {"content-language", std::string(128, '1')},
-           {"dpr", std::string(128, '1')},
-           {"device-memory", std::string(128, '1')},
-           {"save-data", "on"},
-           {"viewport-width", std::string(128, '1')},
-           {"width", std::string(127, '1')},
-           {"accept-charset", "utf-8"},
-           {"hogE", "fuga"}}),
-      List({"hoge", "content-type", "accept", "accept-language",
-            "content-language", "dpr", "device-memory", "save-data",
-            "viewport-width", "width"}));
-
-  // |safelistValueSize| is 897 because "content-type" is not safelisted.
-  EXPECT_EQ(
-      CORSUnsafeNotForbiddenRequestHeaderNames(
-          {{"content-type", "text/plain; charset=" + std::string(128, '1')},
-           {"accept", std::string(128, '1')},
-           {"accept-language", std::string(128, '1')},
-           {"content-language", std::string(128, '1')},
-           {"dpr", std::string(128, '1')},
-           {"device-memory", std::string(128, '1')},
-           {"save-data", "on"},
-           {"viewport-width", std::string(128, '1')},
-           {"width", std::string(127, '1')},
-           {"accept-charset", "utf-8"},
-           {"hogE", "fuga"}}),
-      List({"content-type", "hoge"}));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("viewport-width", ""));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("viewport-width", "abc"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("viewport-width", "125"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("viewport-width", "1"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("viewport-Width", "125"));
+  EXPECT_FALSE(cors::IsCORSSafelistedHeader("viewport-width", "125.2"));
+  EXPECT_TRUE(cors::IsCORSSafelistedHeader("viewport-width", "2147483648"));
 }
 
 }  // namespace
-}  // namespace cors
+
 }  // namespace network
diff --git a/services/network/public/cpp/cors/preflight_result.cc b/services/network/public/cpp/cors/preflight_result.cc
index 516e7ef7..3cf0f25 100644
--- a/services/network/public/cpp/cors/preflight_result.cc
+++ b/services/network/public/cpp/cors/preflight_result.cc
@@ -136,17 +136,20 @@
   if (!credentials_ && headers_.find("*") != headers_.end())
     return base::nullopt;
 
-  // Forbidden headers are forbidden to be used by JavaScript, and checked
-  // beforehand. But user-agents may add these headers internally, and it's
-  // fine.
-  for (const auto& name :
-       CORSUnsafeNotForbiddenRequestHeaderNames(headers.GetHeaderVector())) {
+  for (const auto& header : headers.GetHeaderVector()) {
     // Header list check is performed in case-insensitive way. Here, we have a
     // parsed header list set in lower case, and search each header in lower
     // case.
-    if (headers_.find(name) == headers_.end()) {
+    const std::string key = base::ToLowerASCII(header.key);
+    if (headers_.find(key) == headers_.end() &&
+        !IsCORSSafelistedHeader(key, header.value)) {
+      // Forbidden headers are forbidden to be used by JavaScript, and checked
+      // beforehand. But user-agents may add these headers internally, and it's
+      // fine.
+      if (IsForbiddenHeader(key))
+        continue;
       return CORSErrorStatus(
-          mojom::CORSError::kHeaderDisallowedByPreflightResponse, name);
+          mojom::CORSError::kHeaderDisallowedByPreflightResponse, header.key);
     }
   }
   return base::nullopt;
diff --git a/services/network/public/cpp/cors/preflight_result_unittest.cc b/services/network/public/cpp/cors/preflight_result_unittest.cc
index b7084eb..2a83e34af 100644
--- a/services/network/public/cpp/cors/preflight_result_unittest.cc
+++ b/services/network/public/cpp/cors/preflight_result_unittest.cc
@@ -135,15 +135,15 @@
     {"GET", "", mojom::FetchCredentialsMode::kOmit, "GET", "X-MY-HEADER:t",
      mojom::FetchCredentialsMode::kOmit,
      CORSErrorStatus(mojom::CORSError::kHeaderDisallowedByPreflightResponse,
-                     "x-my-header")},
+                     "X-MY-HEADER")},
     {"GET", "X-SOME-OTHER-HEADER", mojom::FetchCredentialsMode::kOmit, "GET",
      "X-MY-HEADER:t", mojom::FetchCredentialsMode::kOmit,
      CORSErrorStatus(mojom::CORSError::kHeaderDisallowedByPreflightResponse,
-                     "x-my-header")},
+                     "X-MY-HEADER")},
     {"GET", "X-MY-HEADER", mojom::FetchCredentialsMode::kOmit, "GET",
      "X-MY-HEADER:t\r\nY-MY-HEADER:t", mojom::FetchCredentialsMode::kOmit,
      CORSErrorStatus(mojom::CORSError::kHeaderDisallowedByPreflightResponse,
-                     "y-my-header")},
+                     "Y-MY-HEADER")},
 };
 
 TEST_F(PreflightResultTest, MaxAge) {
diff --git a/services/network/public/mojom/network_service.mojom b/services/network/public/mojom/network_service.mojom
index ca68e23..2dda78f 100644
--- a/services/network/public/mojom/network_service.mojom
+++ b/services/network/public/mojom/network_service.mojom
@@ -301,6 +301,10 @@
   [EnableIf=needs_crypt_config]
   SetCryptConfig(CryptConfig crypt_config);
 
+  // Send the encryption key to the network service to use for AES encryption.
+  [EnableIf=is_mac]
+  SetEncryptionKey(string encryption_key);
+
   // Notifies CORB (Cross-Origin Read Blocking) that |process_id| is proxying
   // requests on behalf of a universal-access plugin and therefore CORB should
   // stop blocking requests marked as RESOURCE_TYPE_PLUGIN_RESOURCE.
diff --git a/services/network/udp_socket.cc b/services/network/udp_socket.cc
index 7902b60..d049b77 100644
--- a/services/network/udp_socket.cc
+++ b/services/network/udp_socket.cc
@@ -362,7 +362,7 @@
   // |data| points to a range of bytes in the received message and will be
   // freed when this method returns, so copy out the bytes now.
   auto buffer = base::MakeRefCounted<net::IOBufferWithSize>(data.size());
-  memcpy(buffer.get()->data(), data.begin(), data.size());
+  memcpy(buffer.get()->data(), data.data(), data.size());
 
   if (send_buffer_.get()) {
     auto request = std::make_unique<PendingSendRequest>();
diff --git a/services/ws/window_tree.cc b/services/ws/window_tree.cc
index da9de5b..fb74fb53 100644
--- a/services/ws/window_tree.cc
+++ b/services/ws/window_tree.cc
@@ -87,6 +87,9 @@
   std::unique_ptr<ui::Event> event;
 };
 
+WindowTree::KnownWindow::KnownWindow() = default;
+WindowTree::KnownWindow::~KnownWindow() = default;
+
 WindowTree::WindowTree(WindowService* window_service,
                        ClientSpecificId client_id,
                        mojom::WindowTreeClient* client,
@@ -109,11 +112,11 @@
                      DeleteClientRootReason::kDestructor);
   }
 
-  while (!client_created_windows_.empty()) {
+  while (FindFirstClientCreatedWindow()) {
     // RemoveWindowFromKnownWindows() should make it such that the Window is no
     // longer recognized as being created (owned) by this client.
     const bool delete_if_owned = true;
-    RemoveWindowFromKnownWindows(client_created_windows_.begin()->first,
+    RemoveWindowFromKnownWindows(FindFirstClientCreatedWindow(),
                                  delete_if_owned);
   }
 
@@ -126,15 +129,14 @@
   ServerWindow* server_window =
       window_service_->GetServerWindowForWindowCreateIfNecessary(root);
   const ClientWindowId client_window_id = server_window->frame_sink_id();
-  AddWindowToKnownWindows(root, client_window_id);
+  AddWindowToKnownWindows(root, client_window_id, nullptr);
   const bool is_top_level = false;
   ClientRoot* client_root = CreateClientRoot(root, is_top_level);
 
   const int64_t display_id =
       display::Screen::GetScreen()->GetDisplayNearestWindow(root).id();
   const ClientWindowId focused_window_id =
-      root->HasFocus() ? window_to_client_window_id_map_[root]
-                       : ClientWindowId();
+      root->HasFocus() ? ClientWindowIdForWindow(root) : ClientWindowId();
   const bool drawn = root->IsVisible() && root->GetHost();
   window_tree_client_->OnEmbed(WindowToWindowData(root),
                                std::move(window_tree_ptr), display_id,
@@ -255,7 +257,7 @@
     aura::Window* window,
     const ClientWindowId& id,
     const base::UnguessableToken& token) {
-  AddWindowToKnownWindows(window, id);
+  AddWindowToKnownWindows(window, id, nullptr);
   const bool is_top_level = false;
   ClientRoot* client_root = CreateClientRoot(window, is_top_level);
 
@@ -286,10 +288,14 @@
   return false;
 }
 
-ClientWindowId WindowTree::ClientWindowIdForWindow(aura::Window* window) {
-  auto iter = window_to_client_window_id_map_.find(window);
-  return iter == window_to_client_window_id_map_.end() ? ClientWindowId()
-                                                       : iter->second;
+bool WindowTree::IsWindowKnown(aura::Window* window) const {
+  return window && known_windows_map_.count(window) > 0u;
+}
+
+ClientWindowId WindowTree::ClientWindowIdForWindow(aura::Window* window) const {
+  auto iter = known_windows_map_.find(window);
+  return iter == known_windows_map_.end() ? ClientWindowId()
+                                          : iter->second.client_window_id;
 }
 
 ClientRoot* WindowTree::CreateClientRoot(aura::Window* window,
@@ -404,7 +410,9 @@
 }
 
 bool WindowTree::IsClientCreatedWindow(aura::Window* window) {
-  return window && client_created_windows_.count(window) > 0u;
+  auto iter = known_windows_map_.find(window);
+  return iter == known_windows_map_.end() ? false
+                                          : iter->second.is_client_created;
 }
 
 bool WindowTree::IsClientRootWindow(aura::Window* window) {
@@ -431,10 +439,6 @@
   return client_roots_.end();
 }
 
-bool WindowTree::IsWindowKnown(aura::Window* window) const {
-  return window && window_to_client_window_id_map_.count(window) > 0u;
-}
-
 bool WindowTree::IsWindowRootOfAnotherClient(aura::Window* window) const {
   ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
   return server_window && server_window->embedded_window_tree() != nullptr &&
@@ -499,21 +503,33 @@
       change_id, drag_result != ui::DragDropTypes::DRAG_NONE, drag_result);
 }
 
+aura::Window* WindowTree::FindFirstClientCreatedWindow() {
+  for (auto& pair : known_windows_map_) {
+    if (pair.second.is_client_created)
+      return pair.first;
+  }
+  return nullptr;
+}
+
 aura::Window* WindowTree::AddClientCreatedWindow(
     const ClientWindowId& id,
     bool is_top_level,
     std::unique_ptr<aura::Window> window_ptr) {
   aura::Window* window = window_ptr.get();
-  client_created_windows_[window] = std::move(window_ptr);
   ServerWindow::Create(window, this, id, is_top_level);
-  AddWindowToKnownWindows(window, id);
+  AddWindowToKnownWindows(window, id, std::move(window_ptr));
   return window;
 }
 
-void WindowTree::AddWindowToKnownWindows(aura::Window* window,
-                                         const ClientWindowId& id) {
-  DCHECK_EQ(0u, window_to_client_window_id_map_.count(window));
-  window_to_client_window_id_map_[window] = id;
+void WindowTree::AddWindowToKnownWindows(
+    aura::Window* window,
+    const ClientWindowId& id,
+    std::unique_ptr<aura::Window> owned_window) {
+  DCHECK(!IsWindowKnown(window));
+  KnownWindow& known_window = known_windows_map_[window];
+  known_window.client_window_id = id;
+  known_window.is_client_created = owned_window.get() != nullptr;
+  known_window.owned_window = std::move(owned_window);
 
   DCHECK(IsWindowKnown(window));
   client_window_id_to_window_map_[id] = window;
@@ -524,21 +540,25 @@
 void WindowTree::RemoveWindowFromKnownWindows(aura::Window* window,
                                               bool delete_if_owned) {
   DCHECK(IsWindowKnown(window));
-  auto client_iter = client_created_windows_.find(window);
-  if (client_iter != client_created_windows_.end()) {
+  auto iter = known_windows_map_.find(window);
+  DCHECK(iter != known_windows_map_.end());
+  if (iter->second.owned_window) {
     window->RemoveObserver(this);
     if (!delete_if_owned) {
       // |window| is in the process of being deleted, release() to avoid double
       // deletion.
-      client_iter->second.release();
+      iter->second.owned_window.release();
     }
-    client_created_windows_.erase(client_iter);
+    iter->second.owned_window.reset();
   }
+  // Sanity check to make sure deletion didn't result in removal
+  DCHECK(iter == known_windows_map_.find(window));
+
   // Remove from these maps after destruction. This is necessary as destruction
   // may end up expecting to find a ServerWindow.
-  auto iter = window_to_client_window_id_map_.find(window);
-  client_window_id_to_window_map_.erase(iter->second);
-  window_to_client_window_id_map_.erase(iter);
+  DCHECK(iter != known_windows_map_.end());
+  client_window_id_to_window_map_.erase(iter->second.client_window_id);
+  known_windows_map_.erase(iter);
 }
 
 void WindowTree::RemoveWindowFromKnownWindowsRecursive(
@@ -576,9 +596,7 @@
 
 Id WindowTree::TransportIdForWindow(aura::Window* window) const {
   DCHECK(IsWindowKnown(window));
-  auto iter = window_to_client_window_id_map_.find(window);
-  DCHECK(iter != window_to_client_window_id_map_.end());
-  return ClientWindowIdToTransportId(iter->second);
+  return ClientWindowIdToTransportId(ClientWindowIdForWindow(window));
 }
 
 ClientWindowId WindowTree::MakeClientWindowId(Id transport_window_id) const {
@@ -1023,7 +1041,8 @@
   }
 
   const bool owner_intercept_events =
-      (flags & mojom::kEmbedFlagEmbedderInterceptsEvents) != 0;
+      (connection_type_ != ConnectionType::kEmbedding &&
+       (flags & mojom::kEmbedFlagEmbedderInterceptsEvents) != 0);
   std::unique_ptr<Embedding> embedding =
       std::make_unique<Embedding>(this, window, owner_intercept_events);
   embedding->Init(window_service_, std::move(window_tree_client_ptr),
@@ -1252,11 +1271,8 @@
   if (iter != client_roots_.end())
     DeleteClientRoot(iter->get(), WindowTree::DeleteClientRootReason::kDeleted);
 
-  DCHECK_NE(0u, window_to_client_window_id_map_.count(window));
-  const ClientWindowId client_window_id =
-      window_to_client_window_id_map_[window];
-  window_tree_client_->OnWindowDeleted(
-      ClientWindowIdToTransportId(client_window_id));
+  DCHECK(IsWindowKnown(window));
+  window_tree_client_->OnWindowDeleted(TransportIdForWindow(window));
 
   const bool delete_if_owned = false;
   RemoveWindowFromKnownWindows(window, delete_if_owned);
@@ -1645,7 +1661,8 @@
 
   ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
   const bool owner_intercept_events =
-      (embed_flags & mojom::kEmbedFlagEmbedderInterceptsEvents) != 0;
+      (connection_type_ != ConnectionType::kEmbedding &&
+       (embed_flags & mojom::kEmbedFlagEmbedderInterceptsEvents) != 0);
   tree_and_id.tree->CompleteScheduleEmbedForExistingClient(
       window, tree_and_id.id, token);
   std::unique_ptr<Embedding> embedding =
diff --git a/services/ws/window_tree.h b/services/ws/window_tree.h
index ab59af0..a32bda0 100644
--- a/services/ws/window_tree.h
+++ b/services/ws/window_tree.h
@@ -123,7 +123,12 @@
   // one of the roots.
   bool HasAtLeastOneRootWithCompositorFrameSink();
 
-  ClientWindowId ClientWindowIdForWindow(aura::Window* window);
+  // Returns true if |window| has been exposed to this client. A client
+  // typically only sees a limited set of windows that may exist. The set of
+  // windows exposed to the client are referred to as the known windows.
+  bool IsWindowKnown(aura::Window* window) const;
+
+  ClientWindowId ClientWindowIdForWindow(aura::Window* window) const;
 
  private:
   friend class ClientRoot;
@@ -161,6 +166,22 @@
     kDestructor,
   };
 
+  // Used to track every window known to the client.
+  struct KnownWindow {
+    KnownWindow();
+    ~KnownWindow();
+
+    // Id for the window.
+    ClientWindowId client_window_id;
+
+    // If non-null, the client created the window and owns it. During window
+    // destruction this may be destroyed before the entry is moved. If you need
+    // to know if the client created the window, use the |is_client_created|.
+    std::unique_ptr<aura::Window> owned_window;
+
+    bool is_client_created = false;
+  };
+
   // Creates a new ClientRoot. The returned ClientRoot is owned by this.
   // |is_top_level| is true if this is called from
   // WindowTree::NewTopLevelWindow().
@@ -181,10 +202,6 @@
 
   ClientRoots::iterator FindClientRootWithRoot(aura::Window* window);
 
-  // Returns true if |window| has been exposed to this client. A client
-  // typically only sees a limited set of windows that may exist. The set of
-  // windows exposed to the client are referred to as the known windows.
-  bool IsWindowKnown(aura::Window* window) const;
   bool IsWindowRootOfAnotherClient(aura::Window* window) const;
 
   // Called when one of the windows known to the client loses capture.
@@ -213,6 +230,10 @@
   // fails or gets canceled).
   void OnPerformDragDropDone(uint32_t change_id, int drag_result);
 
+  // Returns the first window in |known_windows_map_| that was created by
+  // the client; null if the client did not create an windows.
+  aura::Window* FindFirstClientCreatedWindow();
+
   // Called for windows created by the client (including top-levels).
   aura::Window* AddClientCreatedWindow(
       const ClientWindowId& id,
@@ -221,7 +242,9 @@
 
   // Adds/removes a Window from the set of windows known to the client. This
   // also adds or removes any observers that may need to be installed.
-  void AddWindowToKnownWindows(aura::Window* window, const ClientWindowId& id);
+  void AddWindowToKnownWindows(aura::Window* window,
+                               const ClientWindowId& id,
+                               std::unique_ptr<aura::Window> owned_window);
 
   // |delete_if_owned| indicates if |window| should be deleted if this client
   // created it. |delete_if_owned| is false only if the window was externally
@@ -457,20 +480,13 @@
 
   ClientRoots client_roots_;
 
-  // Set of windows this client created. The values are the same as key, but
-  // put inside a unique_ptr to reinforce this class owns these Windows.
-  // Ideally set would be used, but sets have some painful restrictions
-  // (c++17's set::extract() may make it possible to use a set again).
-  std::unordered_map<aura::Window*, std::unique_ptr<aura::Window>>
-      client_created_windows_;
-
-  // These contain mappings for known windows. At a minimum this contains the
-  // windows in |client_created_windows_|. It will also contain any windows
-  // that are exposed (known) to this client for various reasons. For example,
-  // if this client is the result of an embedding then the window at the embed
-  // point (the root window of the ClientRoot) was not created by this client,
-  // but is known and in these mappings.
-  std::map<aura::Window*, ClientWindowId> window_to_client_window_id_map_;
+  // These contain mappings for known windows, see KnownWindow for details on
+  // it. This contains all windows created by the client, as well as windows
+  // known to the client. For example,if this client is the result of an
+  // embedding then the window at the embed point (the root window of the
+  // ClientRoot) was not created by this client, but is known and in these
+  // mappings.
+  std::map<aura::Window*, KnownWindow> known_windows_map_;
   std::unordered_map<ClientWindowId, aura::Window*, ClientWindowIdHash>
       client_window_id_to_window_map_;
 
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json
index d662ad8..220637f 100644
--- a/testing/buildbot/chromium.clang.json
+++ b/testing/buildbot/chromium.clang.json
@@ -12407,6 +12407,18 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_browser_tests.filter"
+        ],
+        "name": "network_service_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 15
+        },
+        "test": "browser_tests"
+      },
+      {
+        "args": [
           "--enable-features=WebUIPolymer2",
           "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer2_browser_tests.filter"
         ],
@@ -12459,6 +12471,16 @@
         "test": "components_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_components_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "components_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -12472,6 +12494,18 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter"
+        ],
+        "name": "network_service_content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 2
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "args": [
           "--enable-features=TracingPerfettoBackend",
           "--gtest_filter=TracingControllerTest.*"
         ],
@@ -12536,6 +12570,16 @@
         "test": "extensions_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_extensions_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "extensions_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -12598,6 +12642,17 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_interactive_ui_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 3
+        },
+        "test": "interactive_ui_tests"
+      },
+      {
+        "args": [
           "--enable-features=WebUIPolymer2",
           "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer2_interactive_ui_tests.filter"
         ],
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json
index 8c3aba8..207edcfb7 100644
--- a/testing/buildbot/chromium.mac.json
+++ b/testing/buildbot/chromium.mac.json
@@ -1359,6 +1359,24 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_browser_tests.filter"
+        ],
+        "name": "network_service_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12.6"
+            }
+          ],
+          "shards": 15
+        },
+        "test": "browser_tests"
+      },
+      {
+        "args": [
           "--enable-features=WebUIPolymer2",
           "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer2_browser_tests.filter"
         ],
@@ -1459,6 +1477,22 @@
         "test": "components_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_components_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12.6"
+            }
+          ]
+        },
+        "test": "components_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1484,6 +1518,24 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter"
+        ],
+        "name": "network_service_content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12.6"
+            }
+          ],
+          "shards": 2
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "args": [
           "--enable-features=TracingPerfettoBackend",
           "--gtest_filter=TracingControllerTest.*"
         ],
@@ -1608,6 +1660,22 @@
         "test": "extensions_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_extensions_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12.6"
+            }
+          ]
+        },
+        "test": "extensions_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1730,6 +1798,23 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_interactive_ui_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12.6"
+            }
+          ],
+          "shards": 3
+        },
+        "test": "interactive_ui_tests"
+      },
+      {
+        "args": [
           "--enable-features=WebUIPolymer2",
           "--test-launcher-filter-file=../../testing/buildbot/filters/webui_polymer2_interactive_ui_tests.filter"
         ],
diff --git a/testing/buildbot/filters/webui_polymer2_browser_tests.filter b/testing/buildbot/filters/webui_polymer2_browser_tests.filter
index c53693a..a4d96a5 100644
--- a/testing/buildbot/filters/webui_polymer2_browser_tests.filter
+++ b/testing/buildbot/filters/webui_polymer2_browser_tests.filter
@@ -27,7 +27,6 @@
 -CrSettingsSiteListTest.SiteList
 -CrSettingsSubpageTest.All
 -CrSettingsZoomLevelsTest.All
--MaterialHistoryListTest.All
 -MediaRouterElementsBrowserTest.MediaRouterContainerCastModeList
 -MediaRouterElementsBrowserTest.MediaRouterContainerFilterPart1
 -MediaRouterElementsBrowserTest.MediaRouterContainerFirstRunFlow
@@ -36,9 +35,6 @@
 -PasswordsAndFormsBrowserTest.uiTests
 -SettingsAdvancedPageBrowserTest.Load
 
-# Mac only failure. See crbug.com/874976
--MaterialHistoryItemTest.All
-
 # Mac only failure. See crbug.com/876990
 -CrSettingsPrivacyPageTest.All
 
diff --git a/testing/buildbot/filters/webui_polymer2_interactive_ui_tests.filter b/testing/buildbot/filters/webui_polymer2_interactive_ui_tests.filter
index 24ebc183..988374c 100644
--- a/testing/buildbot/filters/webui_polymer2_interactive_ui_tests.filter
+++ b/testing/buildbot/filters/webui_polymer2_interactive_ui_tests.filter
@@ -12,7 +12,6 @@
 CrSettingsFocusRowBehavior.FocusTest
 CrSettingsSyncPageTest.All
 MaterialBookmarksFocusTest.All
-MaterialHistoryFocusTest.All
 PrintPreviewDestinationDialogInteractiveTest.FocusSearchBox
 PrintPreviewPrintHeaderInteractiveTest.FocusPrintOnReady
 SettingsUIBrowserTest.All
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 49a13a2..3f88090 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -835,6 +835,16 @@
       # chromium.win
       'Win7 Tests (1)',  # For swarming capacity reasons.
       'Win10 Tests x64 (dbg)',  # Matches browser_tests.
+      # Only run network service tests on Mac 10.12 for capacity reasons.
+      'Chromium Mac 10.13',
+      'Mac10.10 Tests',
+      'Mac10.11 Tests',
+      'Mac10.13 Tests',
+      'Mac10.13 Tests (dbg)',
+      'Mac ASan 64 Tests (1)',
+      'Mac ASan 64 Tests (1)',
+      'mac-views-rel',
+      'ToTMacASan',
     ],
     'modifications': {
       # chromium.win
@@ -854,6 +864,16 @@
       # chromium.win
       'Win7 Tests (1)',  # For swarming capacity reasons.
       'Win10 Tests x64 (dbg)',  # Matches components_browsertests.
+      # Only run network service tests on Mac 10.12 for capacity reasons.
+      'Chromium Mac 10.13',
+      'Mac10.10 Tests',
+      'Mac10.11 Tests',
+      'Mac10.13 Tests',
+      'Mac10.13 Tests (dbg)',
+      'Mac ASan 64 Tests (1)',
+      'Mac ASan 64 Tests (1)',
+      'mac-views-rel',
+      'ToTMacASan',
     ],
   },
   'network_service_content_browsertests': {
@@ -864,6 +884,16 @@
       # chromium.win
       'Win7 Tests (1)',  # For swarming capacity reasons.
       'Win10 Tests x64 (dbg)',  # flaky: https://crbug.com/852786
+      # Only run network service tests on Mac 10.12 for capacity reasons.
+      'Chromium Mac 10.13',
+      'Mac10.10 Tests',
+      'Mac10.11 Tests',
+      'Mac10.13 Tests',
+      'Mac10.13 Tests (dbg)',
+      'Mac ASan 64 Tests (1)',
+      'Mac ASan 64 Tests (1)',
+      'mac-views-rel',
+      'ToTMacASan',
     ],
   },
   'network_service_extensions_browsertests': {
@@ -874,6 +904,16 @@
       # chromium.win
       'Win7 Tests (1)',  # For swarming capacity reasons.
       'Win10 Tests x64 (dbg)',  # Matches extensions_browsertests.
+      # Only run network service tests on Mac 10.12 for capacity reasons.
+      'Chromium Mac 10.13',
+      'Mac10.10 Tests',
+      'Mac10.11 Tests',
+      'Mac10.13 Tests',
+      'Mac10.13 Tests (dbg)',
+      'Mac ASan 64 Tests (1)',
+      'Mac ASan 64 Tests (1)',
+      'mac-views-rel',
+      'ToTMacASan',
     ],
   },
   'network_service_interactive_ui_tests': {
@@ -883,6 +923,16 @@
       'Linux TSan Tests',  # No capacity, https://crbug.com/852442
       # chromium.win
       'Win7 Tests (1)',  # For swarming capacity reasons.
+      # Only run network service tests on Mac 10.12 for capacity reasons.
+      'Chromium Mac 10.13',
+      'Mac10.10 Tests',
+      'Mac10.11 Tests',
+      'Mac10.13 Tests',
+      'Mac10.13 Tests (dbg)',
+      'Mac ASan 64 Tests (1)',
+      'Mac ASan 64 Tests (1)',
+      'mac-views-rel',
+      'ToTMacASan',
     ],
     'modifications': {
       # chromium.win
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index 64f55f0..ce87325 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -2403,6 +2403,7 @@
     'chromium_gtests',
     'chromium_gtests_for_devices_with_graphical_output',
     'mac_specific_chromium_gtests',
+    'network_service_gtests',
     'non_android_chromium_gtests',
     'non_android_and_cast_and_chromeos_chromium_gtests',
     'non_linux_chromium_gtests',
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees
index ab19f90..c209534 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees
@@ -130,30 +130,9 @@
 crbug.com/861824 virtual/threaded/fast/animationworklet/animation-worklet-inside-iframe.html [ Failure ]
 
 # These scrollbar tests should pass.
-crbug.com/836890 compositing/rtl/rtl-absolute-overflow.html [ Failure ]
-crbug.com/836890 compositing/rtl/rtl-and-writing-mode-scrolling.html [ Failure ]
-crbug.com/836890 compositing/rtl/rtl-fixed-overflow.html [ Failure ]
-crbug.com/836890 compositing/rtl/rtl-iframe-absolute-overflow.html [ Failure ]
-crbug.com/836890 compositing/rtl/rtl-iframe-fixed-overflow.html [ Failure ]
-crbug.com/836890 compositing/rtl/rtl-overflow-invalidation.html [ Failure ]
-crbug.com/836890 compositing/rtl/rtl-absolute-overflow-scrolled.html [ Failure ]
-crbug.com/836890 fast/dom/rtl-scroll-to-leftmost-and-resize.html [ Failure ]
-crbug.com/836890 fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl.html [ Failure ]
-crbug.com/836890 fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl.html [ Failure ]
-crbug.com/836890 paint/invalidation/scroll/document-flipped-blocks-writing-mode-scroll.html [ Failure ]
-crbug.com/836890 virtual/user-activation-v2/fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl.html [ Failure ]
-crbug.com/836890 virtual/user-activation-v2/fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl.html [ Failure ]
-crbug.com/836890 compositing/squashing/vertical-writing-mode-squashed.html [ Failure ]
-crbug.com/836890 paint/overflow/composited-scroll-vertical-rl.html [ Failure ]
 crbug.com/836912 compositing/squashing/no-squashing-into-another-clip-layer.html [ Failure ]
 crbug.com/836912 compositing/scrollbars/nested-overlay-scrollbars.html [ Failure ]
 
-# Something wrong with vertical-rl scrollbars
-crbug.com/853945 fast/block/positioning/vertical-rl/002.html [ Failure ]
-crbug.com/853945 fast/block/positioning/vertical-rl/fixed-positioning.html [ Failure ]
-crbug.com/853945 fast/block/positioning/rtl-fixed-positioning.html [ Failure ]
-crbug.com/836913 virtual/threaded/fast/scrolling/overlay-scrollbars.html [ Failure ]
-
 # These scrolling tests should pass.
 crbug.com/836913 virtual/threaded/external/wpt/css/css-scroll-snap/snap-at-user-scroll-end-manual.html [ Timeout ]
 
@@ -233,8 +212,6 @@
 crbug.com/879173 virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-with-rotation.html [ Failure ]
 
 crbug.com/879610 virtual/android/rootscroller/nested-rootscroller-browser-controls-bounds-hidden.html [ Failure ]
-crbug.com/879610 fast/dom/scroll-reveal-left-overflow.html [ Failure ]
-crbug.com/879610 fast/dom/scroll-reveal-top-overflow.html [ Failure ]
 
 Bug(none) virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html [ Failure ]
 crbug.com/879169 transforms/3d/point-mapping/3d-point-mapping-2.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 095fa77..bbc432a 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -303,6 +303,21 @@
 
 crbug.com/847274 external/wpt/css/css-contain/contain-paint-005.html [ Failure ]
 crbug.com/847274 external/wpt/css/css-contain/contain-paint-006.html [ Failure ]
+crbug.com/881057 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001.html [ Failure ]
+crbug.com/881057 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-stacking-context-001.html [ Failure ]
+crbug.com/881057 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html [ Failure ]
+crbug.com/881057 [ Mac ] external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html [ Failure ]
+crbug.com/881057 [ Mac ] external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html [ Failure ]
+crbug.com/881057 [ Mac ] external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html [ Failure ]
+crbug.com/881057 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html [ Failure ]
+crbug.com/881057 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html [ Failure ]
+crbug.com/881057 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001b.html [ Failure ]
+crbug.com/881057 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html [ Failure ]
+crbug.com/881057 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html [ Failure ]
+crbug.com/881057 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001.html [ Failure ]
+crbug.com/881057 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002.html [ Failure ]
+crbug.com/863454 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002.html [ Failure ]
+crbug.com/863454 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html [ Failure ]
 
 # ====== Layout team owned tests to here ======
 
@@ -2767,6 +2782,8 @@
 crbug.com/875249 external/wpt/infrastructure/testdriver/bless.html [ Timeout Pass ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-immediate.window.html [ Timeout ]
+crbug.com/626703 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-while-navigating.window.html [ Timeout ]
 crbug.com/626703 external/wpt/css/css-contain/contain-size-multicol-001.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-contain/contain-size-grid-002.html [ Failure ]
 crbug.com/880983 external/wpt/css/css-masking/clip-path/clip-path-path-002.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/W3CImportExpectations b/third_party/WebKit/LayoutTests/W3CImportExpectations
index fe908042..9c322e6 100644
--- a/third_party/WebKit/LayoutTests/W3CImportExpectations
+++ b/third_party/WebKit/LayoutTests/W3CImportExpectations
@@ -98,7 +98,6 @@
 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/background [ Skip ]
 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/check-for-references.sh [ Skip ]
 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/conditional3 [ Skip ]
-external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain [ Skip ]
 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/css21 [ Skip ]
 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/filters [ Skip ]
 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/fonts3 [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/nested-vertical-rl-overflow-expected.html b/third_party/WebKit/LayoutTests/compositing/overflow/nested-vertical-rl-overflow-expected.html
new file mode 100644
index 0000000..d8391ef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/nested-vertical-rl-overflow-expected.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<style>
+.container {
+  width: 300px;
+  height: 120px;
+  border: 2px solid green;
+  padding: 2px;
+  writing-mode: vertical-rl;
+  overflow: scroll;
+}
+.container .container {
+  width: 150px;
+  height: 100px;
+}
+.bloat {
+  width: 1000px;
+  height: 1000px;
+}
+.content {
+  width: 50px;
+  height: 80px;
+  border: 1px solid blue;
+  background: lightgray;
+}
+</style>
+Neither container is composited:
+<div class="container">
+  <div class="bloat">
+    <div class="content">Non-composited</div>
+    <div id="c1" class="content">Composited</div>
+    <div class="container">
+      <div class="bloat">
+        <div class="content">Non-composited</div>
+        <div id="c2" class="content">Composited</div>
+      </div>
+    </div>
+  </div>
+</div>
+Only the outer container is composited:
+<div class="container">
+  <div class="bloat">
+    <div class="content">Non-composited</div>
+    <div class="content">Composited</div>
+    <div class="container">
+      <div class="bloat">
+        <div class="content">Non-composited</div>
+        <div class="content">Composited</div>
+      </div>
+    </div>
+  </div>
+</div>
+Only the inner container is composited:
+<div class="container">
+  <div class="bloat">
+    <div class="content">Non-composited</div>
+    <div class="content">Composited</div>
+    <div class="container">
+      <div class="bloat">
+        <div class="content">Non-composited</div>
+        <div class="content">Composited</div>
+      </div>
+    </div>
+  </div>
+</div>
+Both containers are composited:
+<div class="container">
+  <div class="bloat">
+    <div class="content">Non-composited</div>
+    <div class="content">Composited</div>
+    <div class="container">
+      <div class="bloat">
+        <div class="content">Non-composited</div>
+        <div class="content">Composited</div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/nested-vertical-rl-overflow.html b/third_party/WebKit/LayoutTests/compositing/overflow/nested-vertical-rl-overflow.html
new file mode 100644
index 0000000..752e842
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/nested-vertical-rl-overflow.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<style>
+.container {
+  width: 300px;
+  height: 120px;
+  border: 2px solid green;
+  padding: 2px;
+  writing-mode: vertical-rl;
+  overflow: scroll;
+}
+.container .container {
+  width: 150px;
+  height: 100px;
+}
+.bloat {
+  width: 1000px;
+  height: 1000px;
+}
+.content {
+  width: 50px;
+  height: 80px;
+  border: 1px solid blue;
+  background: lightgray;
+}
+.composited {
+  will-change: transform;
+}
+</style>
+Neither container is composited:
+<div class="container">
+  <div class="bloat">
+    <div class="content">Non-composited</div>
+    <div id="c1" class="content composited">Composited</div>
+    <div class="container">
+      <div class="bloat">
+        <div class="content">Non-composited</div>
+        <div id="c2" class="content composited">Composited</div>
+      </div>
+    </div>
+  </div>
+</div>
+Only the outer container is composited:
+<div class="container composited">
+  <div class="bloat">
+    <div class="content">Non-composited</div>
+    <div class="content composited">Composited</div>
+    <div class="container">
+      <div class="bloat">
+        <div class="content">Non-composited</div>
+        <div class="content composited">Composited</div>
+      </div>
+    </div>
+  </div>
+</div>
+Only the inner container is composited:
+<div class="container">
+  <div class="bloat">
+    <div class="content">Non-composited</div>
+    <div class="content composited">Composited</div>
+    <div class="container composited">
+      <div class="bloat">
+        <div class="content">Non-composited</div>
+        <div class="content composited">Composited</div>
+      </div>
+    </div>
+  </div>
+</div>
+Both containers are composited:
+<div class="container composited">
+  <div class="bloat">
+    <div class="content">Non-composited</div>
+    <div class="content composited">Composited</div>
+    <div class="container composited">
+      <div class="bloat">
+        <div class="content">Non-composited</div>
+        <div class="content composited">Composited</div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST_5.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST_5.json
index 9e8ae291..ea0b307 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST_5.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST_5.json
@@ -87977,6 +87977,462 @@
      {}
     ]
    ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-absolute-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-absolute-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-fixed-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-fixed-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-float-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-float-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-stacking-context-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-stacking-context-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001a.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001a.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001b.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001b.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/vendor-imports/mozilla/mozilla-central-reftests/counter-styles-3/dependent-builtin.html": [
     [
      "/css/vendor-imports/mozilla/mozilla-central-reftests/counter-styles-3/dependent-builtin.html",
@@ -107509,6 +107965,11 @@
      {}
     ]
    ],
+   "common/slow.py": [
+    [
+     {}
+    ]
+   ],
    "common/stringifiers.js": [
     [
      {}
@@ -142104,6 +142565,156 @@
      {}
     ]
    ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001-ref.html": [
+    [
+     {}
+    ]
+   ],
    "css/vendor-imports/mozilla/mozilla-central-reftests/counter-styles-3/dependent-builtin-ref.html": [
     [
      {}
@@ -147369,16 +147980,6 @@
      {}
     ]
    ],
-   "fetch/api/cors/cors-preflight-not-cors-safelisted.any-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "fetch/api/cors/cors-preflight-not-cors-safelisted.any.worker-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "fetch/api/cors/cors-preflight-redirect.any-expected.txt": [
     [
      {}
@@ -147399,11 +148000,6 @@
      {}
     ]
    ],
-   "fetch/api/headers/headers-no-cors.window-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "fetch/api/headers/headers-record-expected.txt": [
     [
      {}
@@ -160864,11 +161460,6 @@
      {}
     ]
    ],
-   "html/semantics/scripting-1/the-script-element/resources/slow.py": [
-    [
-     {}
-    ]
-   ],
    "html/semantics/scripting-1/the-script-element/script-charset-01-expected.txt": [
     [
      {}
@@ -162154,11 +162745,6 @@
      {}
     ]
    ],
-   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/OWNERS": [
     [
      {}
@@ -162229,6 +162815,16 @@
      {}
     ]
    ],
+   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/http-refresh.py": [
+    [
+     {}
+    ]
+   ],
+   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/meta-refresh.py": [
+    [
+     {}
+    ]
+   ],
    "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/page-with-frame.html": [
     [
      {}
@@ -162239,6 +162835,11 @@
      {}
     ]
    ],
+   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/slow-png.py": [
+    [
+     {}
+    ]
+   ],
    "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html": [
     [
      {}
@@ -163639,6 +164240,11 @@
      {}
     ]
    ],
+   "interfaces/trusted-types.tentative.idl": [
+    [
+     {}
+    ]
+   ],
    "interfaces/uievents.idl": [
     [
      {}
@@ -231567,6 +232173,36 @@
      {}
     ]
    ],
+   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-immediate.window.js": [
+    [
+     "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-immediate.window.html",
+     {}
+    ]
+   ],
+   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-header.window.js": [
+    [
+     "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-header.window.html",
+     {}
+    ]
+   ],
+   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-meta.window.js": [
+    [
+     "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-meta.window.html",
+     {}
+    ]
+   ],
+   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-while-navigating.window.js": [
+    [
+     "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-while-navigating.window.html",
+     {}
+    ]
+   ],
+   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort.sub.window.js": [
+    [
+     "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort.sub.window.html",
+     {}
+    ]
+   ],
    "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js": [
     [
      "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.html",
@@ -231681,6 +232317,12 @@
      {}
     ]
    ],
+   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.js": [
+    [
+     "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.html",
+     {}
+    ]
+   ],
    "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/no-new-global.window.js": [
     [
      "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/no-new-global.window.html",
@@ -259853,6 +260495,12 @@
      {}
     ]
    ],
+   "trusted-types/idlharness.window.js": [
+    [
+     "/trusted-types/idlharness.window.html",
+     {}
+    ]
+   ],
    "uievents/constructors/inputevent-constructor.html": [
     [
      "/uievents/constructors/inputevent-constructor.html",
@@ -286282,6 +286930,10 @@
    "6805c323df5a975231648b830e33ce183c3cbbd3",
    "support"
   ],
+  "common/slow.py": [
+   "f3b1c7e2ea61b571bd56cc1c70c5f89bb8e7e4dc",
+   "support"
+  ],
   "common/stringifiers.js": [
    "b59ca9c246f75a72d532d58ef628824f8905ff7a",
    "support"
@@ -357714,6 +358366,278 @@
    "6a22ba0dbbbb0323a291a7b31b55d641448714e5",
    "reftest"
   ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-absolute-001.html": [
+   "036cf7d8dd6f6de18e5aa4cf9f1df25799b10094",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-fixed-001.html": [
+   "979d71d406d293a3a0a507bf4a4c6a07826cbef7",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-float-001.html": [
+   "fe491aa5502cf58db4bf5669c6dc1780f016c0d4",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001-ref.html": [
+   "5a6d653862417ff7c1a6817434da2b2025a347ad",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001.html": [
+   "c346a529284b908ed4419f1626c96319242a1b76",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-001.html": [
+   "bd2f4cb8178054e0aab0b208610e8a2ba97b1141",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002-ref.html": [
+   "44cd7c109e059451dfea19460faf65faa16919da",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002.html": [
+   "de2edfb58f86fea5a8a0367b595dc471b568bc85",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003-ref.html": [
+   "46f028c0581fe1375d58c04b73642ac731644ee7",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003.html": [
+   "d40a02115665782b81d14e6c3d5e5b0c5f38690a",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001-ref.html": [
+   "61825fd45415a08b90f824895093f47650e24c32",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001.html": [
+   "5bf984e2bf12263526165048c4aeb0e9236c5bbb",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002-ref.html": [
+   "ba1c600d504be3ec0496d1513e152a90f6eecbc2",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002.html": [
+   "4929dc5d33e760503c9a7d98d6adbafa3f07637a",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-stacking-context-001.html": [
+   "4ec3bcee6fdf7d46f076ddf460c8081d9b19e8ee",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html": [
+   "629cb939e01329ae1f9613876f050777b1d5b011",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html": [
+   "0f7874b71e0c2ed09502569dfb6e372f97a3e425",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html": [
+   "3baefff57cf18c86db19b91e6d2b3c4db31edaad",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html": [
+   "b6fbc9c2927ad73002a3c9b6844f0894358d9b24",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html": [
+   "425844ae4761dc6330ee85da517c566813762ba5",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html": [
+   "ed270e9e0ccaa66943423c04e0fd0f5d7228e26b",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html": [
+   "0861c68cbe322355612115d5b3e7ff10ca7fa22e",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html": [
+   "844a59ad69130d0da4826e1a29c25687621aba71",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html": [
+   "b2766e374e44ba3186eb104e7564707d2c768bf6",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html": [
+   "ecd22b307a9b3b12f05c8231e7c8cf6a17c3ff5d",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html": [
+   "14d23f4313481cea9c985165a1d7bb1df17178fb",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html": [
+   "8861d19f888aa155ffdb6c3bbdd8a81e04ccaf8b",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html": [
+   "ef564069eb1f16f99aaf00cb887dec9e164d92b5",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html": [
+   "8861d19f888aa155ffdb6c3bbdd8a81e04ccaf8b",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html": [
+   "fc5ede156e9ee861ef53741d77186f9be9724aed",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html": [
+   "ceff7f4569e1a7e6b0b36b9f9b3f50317b320bad",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html": [
+   "e5827209d719c410aabbc4545922e4cfef738f1a",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html": [
+   "1976f71bf552351c95ac878934eb1b0f03d46e47",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html": [
+   "d37464228658dbf60e8dfbb59ee86dcd9c9f6ad7",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html": [
+   "d23678941e2f0188a2cadfe06264a98ffd161bcb",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html": [
+   "283b8b941a4cfb9d056a8f7913405e926e23c83b",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html": [
+   "cff28b8b5c28c4b5e75d357e6562d4f9078cf1cf",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html": [
+   "b4513709e513d3e10698e63674d14c0c1266ffc0",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html": [
+   "4b9c9072099191488fc0f551d3c8c0813c0caec8",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html": [
+   "5df0b2462925bac0c8d7cdc83e74a5e1aa9014e9",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html": [
+   "71764e18558aa1fff1d784e9acdd9f3a37a766cd",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html": [
+   "02f7a406656c8b982a9d9093b45542384e0261fe",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html": [
+   "1f1c147f94fafae3c230043599eb4455f69df640",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html": [
+   "c7553716ab6c257bb0d9407582eed186bd763369",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001a.html": [
+   "71102b6c73a3d88cdd953ecf82c69602ff87baa2",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001b.html": [
+   "0c4d3323bf7cb28b5a31de8aac41563013b2ecd4",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001-ref.html": [
+   "b8f983a8153bcbaf5f1de41ca41aba2cca4b9fea",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html": [
+   "c5bdc6adead0dd31147ded92e3c2cf2db87d86e4",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html": [
+   "0cb421bae9509f28975df9eda775fe9667c8efa7",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html": [
+   "015d33ecc490ea82a92ef71961a644cd2650f47c",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html": [
+   "a7869752692542a724826426f026c32db6f3ae51",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001.html": [
+   "c21e5517225e81b086ea7d24a6e8a40b787a168a",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html": [
+   "040da171aaf07aef505d89802ee228c645cd1626",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002.html": [
+   "18d6ad8c3c692689f30f44e64caaac0ab105ef95",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001-ref.html": [
+   "995c45197fde976b8930e98f7ea859e9bd3bebb9",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html": [
+   "1866dfd230b71189d9bc7d89665cd36ea917f05a",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001-ref.html": [
+   "56d1cdd8cee77b81d3229e6843b8a646608928ae",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001.html": [
+   "48f8bc279a6a43848232fee8dcd8a57a82fedfdd",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001-ref.html": [
+   "fb013752d058a263474183b7cfb20e7d122a6841",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001.html": [
+   "e79d0c18599f655d9ed49637fa32158ea31ef530",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001-ref.html": [
+   "32dd4b6ab68d052cba6ff390bf07307260e42c1c",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001.html": [
+   "4a1cee5c270e4e762e390c644613c1756395db02",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002-ref.html": [
+   "c1c9f1388edb1ad93e89e8e2aeddd1c209a3ae52",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002.html": [
+   "0e35e2fed26ddd9a59a063218242722b22b9d1b6",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html": [
+   "59cb99144e28e06663e09b07bd5e4d6510bcc1b4",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html": [
+   "335324281fd87c436a1b66aec08db875be1b7640",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001-ref.html": [
+   "49b09334f2bf4ec2651dd13ec3484838336d50c9",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001.html": [
+   "8ef46b766690e99c74ce5bda3a248058598546aa",
+   "reftest"
+  ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/counter-styles-3/dependent-builtin-ref.html": [
    "a558ce29e6c2b0a2fd13238e9887b0e9bd169938",
    "support"
@@ -367538,18 +368462,10 @@
    "ce6a169d8146750b183c9210d1b2041fac879248",
    "testharness"
   ],
-  "fetch/api/cors/cors-preflight-not-cors-safelisted.any-expected.txt": [
-   "56141bc0d4147b276e2ab2fc795fb4032ed70e59",
-   "support"
-  ],
   "fetch/api/cors/cors-preflight-not-cors-safelisted.any.js": [
    "b2747ccd5bc09e4174aa4c59244e386c80527b51",
    "testharness"
   ],
-  "fetch/api/cors/cors-preflight-not-cors-safelisted.any.worker-expected.txt": [
-   "56141bc0d4147b276e2ab2fc795fb4032ed70e59",
-   "support"
-  ],
   "fetch/api/cors/cors-preflight-redirect.any-expected.txt": [
    "8a420164e1b94e02f9d86d41790b44adc4f87cd5",
    "support"
@@ -367634,10 +368550,6 @@
    "194ff32f1559f2dd9b5903eb3738c17c061c7172",
    "testharness"
   ],
-  "fetch/api/headers/headers-no-cors.window-expected.txt": [
-   "2241e22e63412b03a454626bfb48d65376b2428b",
-   "support"
-  ],
   "fetch/api/headers/headers-no-cors.window.js": [
    "aa6562b7d377f4ad74456a87d7e37bf0bd18cb2b",
    "testharness"
@@ -386175,11 +387087,11 @@
    "testharness"
   ],
   "html/semantics/scripting-1/the-script-element/load-error-events-2.html": [
-   "cefa053e754335e4a84424422a8bfaa9bc72ba75",
+   "0748b459092089e12743df4ccb458c6edf770515",
    "testharness"
   ],
   "html/semantics/scripting-1/the-script-element/load-error-events-3.html": [
-   "c2cf0dbdd988507047184bff3489caeb167f6c88",
+   "83a752ce2cd860ffb4354a540e5b553d720eb4e9",
    "testharness"
   ],
   "html/semantics/scripting-1/the-script-element/log.py": [
@@ -387078,10 +387990,6 @@
    "a6095097dd7e17b1e5370b739b31d361f8fdaf7b",
    "support"
   ],
-  "html/semantics/scripting-1/the-script-element/resources/slow.py": [
-   "f3b1c7e2ea61b571bd56cc1c70c5f89bb8e7e4dc",
-   "support"
-  ],
   "html/semantics/scripting-1/the-script-element/script-charset-01-expected.txt": [
    "7520b05cd0d42b8e8a06e11f97cd8dfc246dadc3",
    "support"
@@ -387167,7 +388075,7 @@
    "testharness"
   ],
   "html/semantics/scripting-1/the-script-element/script-text-modifications.html": [
-   "7278182e171947bbb546e655de84815ff6cacd83",
+   "0066d3f4260d92b0f541624062269d13fdbd763d",
    "testharness"
   ],
   "html/semantics/scripting-1/the-script-element/script-text-xhtml.xhtml": [
@@ -389487,11 +390395,7 @@
    "testharness"
   ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016-1.html": [
-   "12990a560703a5fec869674b4a12027cb07292cc",
-   "support"
-  ],
-  "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016-expected.txt": [
-   "75d73c9a83e26fa9302e5735ef44977ce2974445",
+   "ceeeb64df63ccb6d56cd46a93c6ec6c476573a6b",
    "support"
   ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016.html": [
@@ -389502,6 +390406,26 @@
    "422c227ea95706b5eaa67c8784b0ce8ac4fca8e1",
    "support"
   ],
+  "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-immediate.window.js": [
+   "8d045b9e0ab56874c5eb32367ed56274e0e94a22",
+   "testharness"
+  ],
+  "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-header.window.js": [
+   "8c6c1267c4e899a78bd3ad0e67fd8491fd139606",
+   "testharness"
+  ],
+  "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-meta.window.js": [
+   "2895f959e55dc3cf2fdfc933c751699b09438b50",
+   "testharness"
+  ],
+  "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-while-navigating.window.js": [
+   "e3efeffb8b3af56d365336dba357e0d76f7295aa",
+   "testharness"
+  ],
+  "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort.sub.window.js": [
+   "b2f05cf056d54a0602a55a8dda7c67cb94883055",
+   "testharness"
+  ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js": [
    "1d94de8a7c9f28dfab32111deb664d9921437e46",
    "testharness"
@@ -389582,6 +390506,10 @@
    "4efbb863c6372a3ee04d11f38d7ee56a44a2ac7d",
    "testharness"
   ],
+  "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.js": [
+   "34e73146a9d8e4ecab1e74a0079cd721e7306e59",
+   "testharness"
+  ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/no-new-global.window.js": [
    "d4a9296fca66d3017c267a8d8951bef2dcbee238",
    "testharness"
@@ -389654,6 +390582,14 @@
    "2404105b09a7724cf8cc5e2cf6d7bf7a8fb6f39b",
    "support"
   ],
+  "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/http-refresh.py": [
+   "d2acd4361f92fe286ab13688a9174ce7c5465755",
+   "support"
+  ],
+  "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/meta-refresh.py": [
+   "dd3cef44b44252beb3c7729271c51490a475a660",
+   "support"
+  ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/page-with-frame.html": [
    "a1ab01e072b038cd0ec46a8497650845aca83062",
    "support"
@@ -389662,6 +390598,10 @@
    "a92a7ae39f8351f97cd865dca5ebe8d4260aa229",
    "support"
   ],
+  "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/slow-png.py": [
+   "5fa2fd9a9d850a8a0708985034b89aecf4a51654",
+   "support"
+  ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html": [
    "be483ff0aea456c3bc7f2e62d863e7f981453203",
    "support"
@@ -391446,6 +392386,10 @@
    "0bedbf89964f12b55feae4d5e4c9512f71a841cd",
    "support"
   ],
+  "interfaces/trusted-types.tentative.idl": [
+   "a3a635b99270381643f16e13ff47facb85cbfb07",
+   "support"
+  ],
   "interfaces/uievents.idl": [
    "ba618d7c373bf80c108f4c02996ad0db454f1236",
    "support"
@@ -419154,6 +420098,10 @@
    "8070b4a4896d9adc60346fccb5fa96b997ef597a",
    "testharness"
   ],
+  "trusted-types/idlharness.window.js": [
+   "de13697764ed487060de3dd425cd39cba73ff13b",
+   "testharness"
+  ],
   "trusted-types/support/helper.sub.js": [
    "1ad5b4ef0c68a1ffde111db62c5e2aa4957732b6",
    "support"
@@ -420663,7 +421611,7 @@
    "testharness"
   ],
   "web-animations/animation-model/animation-types/interpolation-per-property-expected.txt": [
-   "52f0a08f3f0ed2c36648499ce54085f7133a96fd",
+   "300eecbca1f105aecca716d69837301bc8ef4f6c",
    "support"
   ],
   "web-animations/animation-model/animation-types/interpolation-per-property.html": [
@@ -420675,7 +421623,7 @@
    "support"
   ],
   "web-animations/animation-model/animation-types/property-types.js": [
-   "5bafb20dfcfafb34464fe387457f06c434c7c188",
+   "232a508e07cb3db2eb9d9094a6e9fd8a1e63e4a0",
    "support"
   ],
   "web-animations/animation-model/animation-types/visibility.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/slow.py b/third_party/WebKit/LayoutTests/external/wpt/common/slow.py
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/slow.py
rename to third_party/WebKit/LayoutTests/external/wpt/common/slow.py
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-absolute-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-absolute-001.html
new file mode 100644
index 0000000..036cf7d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-absolute-001.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' element should contain absolute position elements.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-layout">
+  <link rel="match" href="contain-paint-containing-block-absolute-001-ref.html">
+  <style>
+  #a {
+      contain: layout;
+      width: 100px;
+      height: 100px;
+      background: red;
+      margin: 50px;
+  }
+  #b {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 100px;
+      height: 100px;
+      background: green;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div>
+      <div id="b"></div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-fixed-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-fixed-001.html
new file mode 100644
index 0000000..979d71d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-containing-block-fixed-001.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' element should contain fixed position elements.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-layout">
+  <link rel="match" href="contain-paint-containing-block-fixed-001-ref.html">
+  <style>
+  #a {
+      contain: layout;
+      width: 100px;
+      height: 100px;
+      background: red;
+      margin: 50px;
+  }
+  #b {
+      position: fixed;
+      top: 0;
+      left: 0;
+      width: 100px;
+      height: 100px;
+      background: green;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div>
+      <div id="b"></div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-float-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-float-001.html
new file mode 100644
index 0000000..fe491aa5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-float-001.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' should contain floats as a formatting context.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-layout">
+  <link rel="match" href="contain-paint-formatting-context-float-001-ref.html">
+  <style>
+  #left {
+    float: left;
+    height: 50px;
+    width: 10px;
+    background: blue;
+  }
+  #a {
+    contain: layout;
+    background: red;
+    margin: 10px;
+    width: 50px;
+    height: 50px;
+  }
+  #b {
+    clear: left;
+    width: 50px;
+    height: 50px;
+    background: green;
+  }
+  </style>
+</head>
+<body>
+  <div id="left"></div>
+  <div id="a">
+    <div id="b"></div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001-ref.html
new file mode 100644
index 0000000..5a6d6538
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001-ref.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Test</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  #a {
+      background: blue;
+      margin: 10px;
+      width: 50px;
+      height: 50px;
+  }
+  #b {
+      width: 50px;
+      height: 40px;
+      background: green;
+  }
+  #b-padding {
+      height: 10px;
+  }
+  #c {
+    width: 50px;
+    height: 10px;
+    background: lightblue;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div id="b-padding"></div>
+    <div id="b"></div>
+    <div id="c"></div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001.html
new file mode 100644
index 0000000..c346a52
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-formatting-context-margin-001.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' with a vertical margin child. Margin collapse should not occur, and neither should overflow clipping.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-layout">
+  <link rel="match" href="contain-paint-formatting-context-margin-001-ref.html">
+  <style>
+  #a {
+      contain:layout;
+      background: blue;
+      margin: 10px;
+      width: 50px;
+      height: 50px;
+  }
+  #b {
+      width: 50px;
+      height: 40px;
+      background: green;
+      margin-top: 10px;
+  }
+  #c {
+      background: lightblue;
+      width: 50px;
+      height: 10px;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div id="b"></div>
+    <div id="c"></div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-001.html
new file mode 100644
index 0000000..bd2f4cb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-001.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' should not create a stacking context when no principle box is generated.</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-layout">
+  <link rel="match" href="contain-paint-ignored-cases-no-principal-box-001-ref.html">
+  <style>
+    div {
+      position: relative;
+      width: 100px;
+    }
+    #div1,
+    #div3 {
+      background-color: #cfc;
+      height: 100px;
+    }
+    #div1 {
+      z-index: 5;
+    }
+    #div2 {
+      display: contents;
+      contain: layout;
+      background-color: #fdd;
+      height: 100px;
+      top: -20px;
+    }
+    #div2_1 {
+      background-color: #ffc;
+      z-index: 6;
+      top: -10px;
+      height: 100px;
+    }
+    #div2_2 {
+      z-index: 3;
+      position: absolute;
+      top: -15px;
+      width: 40px;
+      height: 300px;
+      background-color: #ddf;
+    }
+    #div3 {
+      z-index: 2;
+      top: -50px;
+    }
+  </style>
+</head>
+<body>
+  <div id="div1"></div>
+
+  <div id="div2">
+    <div id="div2_1"></div>
+
+    <div id="div2_2"></div>
+  </div>
+
+  <div id="div3"></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002-ref.html
new file mode 100644
index 0000000..44cd7c10
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002-ref.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  #a {
+      display: contents;
+      width: 100px;
+      height: 100px;
+      background: green;
+      margin: 50px;
+  }
+ #b {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 100px;
+      height: 100px;
+      background: green;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div>
+      <div id="b"></div>
+    </div>
+  </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002.html
new file mode 100644
index 0000000..de2edfb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' element should not contain absolute/fixed position elements when no principal box is generated.</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-layout">
+  <link rel="match" href="contain-layout-ignored-cases-no-principal-box-002-ref.html">
+  <style>
+  #a {
+      contain: layout;
+      display: contents;
+      width: 100px;
+      height: 100px;
+      background: red;
+      margin: 50px;
+  }
+  #b {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 100px;
+      height: 100px;
+      background: green;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div>
+      <div id="b"></div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003-ref.html
new file mode 100644
index 0000000..46f028c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003-ref.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  #a {
+    display: contents;
+    width: 100px;
+    height: 100px;
+    background: red;
+    margin: 50px;
+  }
+  #b {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100px;
+    height: 100px;
+    background: green;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div>
+      <div id="b"></div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003.html
new file mode 100644
index 0000000..d40a021
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-003.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' element should not contain absolute/fixed position elements when no principal box is generated.</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-layout">
+  <link rel="match" href="contain-layout-ignored-cases-no-principal-box-003-ref.html">
+  <style>
+  #a {
+    contain: layout;
+    display: contents;
+    width: 100px;
+    height: 100px;
+    background: red;
+    margin: 50px;
+  }
+  #b {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100px;
+    height: 100px;
+    background: green;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div>
+      <div id="b"></div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001-ref.html
new file mode 100644
index 0000000..61825fd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001-ref.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  .outer {
+    height: 100px;
+    width: 100px;
+  }
+  .auto {
+    overflow: auto;
+  }
+  .inner-sm {
+    height: 50px;
+    width: 50px;
+    background: lightblue;
+  }
+  .inner-lg-1 {
+    height: 95px;
+    width: 95px;
+    background: lightblue;
+  }
+  .inner-lg-2 {
+    height: 200px;
+    width: 200px;
+  }
+  .pass {
+    background: green;
+  }
+  .border {
+    border: 5px solid green;
+  }
+
+  </style>
+</head>
+<body>
+  <div class="outer">
+    <div class="inner-sm"></div>
+  </div>
+  <br>
+
+  <div class="outer auto">
+    <div class="inner-lg-2 pass">
+    </div>
+  </div>
+  <br>
+
+  <div class="inner-sm border">
+    <div class="inner-lg-1">
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001.html
new file mode 100644
index 0000000..5bf984e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-001.html
@@ -0,0 +1,66 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' should force all overflow to be ink overflow.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-layout">
+  <link rel="match" href="contain-layout-overflow-001-ref.html">
+  <style>
+  .contain {
+    contain: layout;
+  }
+  .outer {
+    height: 100px;
+    width: 100px;
+  }
+  .auto {
+    overflow: auto;
+  }
+  .inner-sm {
+    height: 50px;
+    width: 50px;
+    background: lightblue;
+  }
+  .inner-lg {
+    height: 200px;
+    width: 200px;
+    background: lightblue;
+  }
+  .pass {
+    background: green;
+  }
+  .fail {
+    background: red;
+  }
+  .border {
+    border: 5px solid green;
+  }
+  </style>
+</head>
+<body>
+  <!--CSS Test: Elements with contain:layout that do not produce scrollable overflow should paint as if containment were not applied. -->
+  <div class="outer">
+    <div class="inner-sm contain"></div>
+  </div>
+  <br>
+
+  <!--CSS Test: Layout-contained elements that overflow their container and have children who overflow should produce the same amount of scrollable overflow as if there were no children. -->
+  <div class="outer auto">
+    <div class="inner-lg contain">
+      <div class="inner-lg pass"></div>
+      <div class="inner-lg fail"></div>
+    </div>
+  </div>
+  <br>
+
+  <!--CSS Test: Layout-contained elements that do not overflow their container, but have children who overflow, should not allow their children to affect the scrollable overflow regions of their parent. -->
+  <div class="outer auto">
+    <div class="inner-sm contain border">
+      <div class="inner-lg">
+      </div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002-ref.html
new file mode 100644
index 0000000..ba1c600
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002-ref.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  .outer {
+    height: 100px;
+    width: 100px;
+  }
+  .auto {
+    overflow: auto;
+  }
+  .inner-sm {
+    height: 50px;
+    width: 50px;
+    background: lightblue;
+  }
+  .inner-lg-1 {
+    height: 95px;
+    width: 95px;
+    float:left;
+    background: lightblue;
+  }
+  .inner-lg-2 {
+    height: 200px;
+    width: 200px;
+    float:left;
+  }
+  .pass {
+    background: green;
+  }
+  .border {
+    border: 5px solid green;
+  }
+
+  </style>
+</head>
+<body>
+  <div class="outer">
+    <div class="inner-sm" style="float:left;"></div>
+  </div>
+  <br>
+
+  <div class="outer auto">
+    <div class="inner-lg-2 pass">
+    </div>
+  </div>
+  <br>
+
+  <div class="inner-sm border">
+    <div class="inner-lg-1">
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002.html
new file mode 100644
index 0000000..4929dc5d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-overflow-002.html
@@ -0,0 +1,67 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' should force all overflow to be ink overflow (including when the overflow comes from floated descendants)</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-layout">
+  <link rel="match" href="contain-layout-overflow-002-ref.html">
+  <style>
+  .contain {
+    contain: layout;
+  }
+  .float { float: left; }
+  .outer {
+    height: 100px;
+    width: 100px;
+  }
+  .auto {
+    overflow: auto;
+  }
+  .inner-sm {
+    height: 50px;
+    width: 50px;
+    background: lightblue;
+  }
+  .inner-lg {
+    height: 200px;
+    width: 200px;
+    background: lightblue;
+  }
+  .pass {
+    background: green;
+  }
+  .fail {
+    background: red;
+  }
+  .border {
+    border: 5px solid green;
+  }
+  </style>
+</head>
+<body>
+  <!--CSS Test: Elements with contain:layout that do not produce scrollable overflow should paint as if containment were not applied. -->
+  <div class="outer">
+    <div class="inner-sm contain float"></div>
+  </div>
+  <br>
+
+  <!--CSS Test: Layout-contained elements that overflow their container and have children who overflow should produce the same amount of scrollable overflow as if there were no children. -->
+  <div class="outer auto">
+    <div class="inner-lg contain">
+      <div class="inner-lg pass float"></div>
+      <div class="inner-lg fail float"></div>
+    </div>
+  </div>
+  <br>
+
+  <!--CSS Test: Layout-contained elements that do not overflow their container, but have children who overflow, should not allow their children to affect the scrollable overflow regions of their parent. -->
+  <div class="outer auto">
+    <div class="inner-sm contain border">
+      <div class="inner-lg float">
+      </div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-stacking-context-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-stacking-context-001.html
new file mode 100644
index 0000000..4ec3bcee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-stacking-context-001.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' with stacking contents. Z-index is defined only for siblings and children.</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css2/visuren.html#x43">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-layout">
+  <link rel="match" href="contain-paint-stacking-context-001-ref.html">
+  <style>
+    div {
+      position: relative;
+      width: 100px;
+    }
+    #div1,
+    #div3 {
+      background-color: #cfc;
+    }
+    #div1 {
+      z-index: 5;
+    }
+    #div2 {
+      contain: layout;
+      background-color: #fdd;
+      height: 100px;
+      top: -20px;
+    }
+    #div2_1 {
+      background-color: #ffc;
+      z-index: 6;
+      top: -10px;
+    }
+    #div2_2 {
+      z-index: 3;
+      position: absolute;
+      top: -15px;
+      width: 40px;
+      height: 100px;
+      background-color: #ddf;
+    }
+    #div3 {
+      z-index: 2;
+      top: -50px;
+    }
+  </style>
+</head>
+<body>
+  <div id="div1">
+    <br/><br/>
+  </div>
+
+  <div id="div2">
+    <div id="div2_1">
+      <br/><br/>
+    </div>
+
+    <div id="div2_2">
+    </div>
+  </div>
+
+  <div id="div3">
+    <br/><br/>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html
new file mode 100644
index 0000000..629cb93
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <style>
+  #a {
+      width: 150px;
+      height: 150px;
+      background: green;
+      margin: 25px;
+  }
+  </style>
+</head>
+<body>
+  <div id="a"></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html
new file mode 100644
index 0000000..0f7874b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' with various overflowing block descendants.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+  <link rel="match" href="contain-paint-clip-001-ref.html">
+  <style>
+  .root {
+    contain: paint;
+    width: 100px;
+    height: 100px;
+    background: blue;
+    margin: 25px;
+    padding: 25px;
+  }
+  .a {
+    width: 100px;
+    height: 200px;
+    background: red;
+  }
+  .b {
+    width: 150px;
+    height: 150px;
+    background: green;
+    position: relative;
+    top: -25px;
+    left: -25px;
+  }
+  .background {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 200px;
+    height: 200px;
+    background: red;
+    z-index: -1;
+  }
+  .foreground {
+    position: absolute;
+    top: -25px;
+    left: -25px;
+    width: 150px;
+    height: 150px;
+    border: 25px solid red;
+    z-index: 1;
+  }
+  </style>
+</head>
+<body>
+  <div class="root">
+    <div class="a">
+      <div class="b"></div>
+      <!--These two absolutely positioned elements are checking that all sides are-->
+      <!--clipped.  They also test that clipping is done correctly on absolutely-->
+      <!--positioned elements.-->
+      <div class="background"></div>
+      <div class="foreground"></div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html
new file mode 100644
index 0000000..3baefff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <style>
+  .root {
+    overflow: hidden;
+    width: 100px;
+    height: 100px;
+    background: green;
+    margin: 25px;
+    padding: 10px;
+    border-radius: 4em;
+  }
+  </style>
+</head>
+<body>
+  <div class="root">
+    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA This text should
+    be clipped to the box. Lorem ipsum dolor sit amet, consectetur adipiscing
+    elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed
+    nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
+    Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa.
+    Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora
+    torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales
+    ligula in libero.
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html
new file mode 100644
index 0000000..b6fbc9c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' with overflowing text contents inside a rounded rectangle box.</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+  <link rel="match" href="contain-paint-clip-002-ref.html">
+  <style>
+  .root {
+    contain: paint;
+    width: 100px;
+    height: 100px;
+    background: green;
+    margin: 25px;
+    padding: 10px;
+    border-radius: 4em;
+  }
+  </style>
+</head>
+<body>
+  <div class="root">
+    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA This text should
+    be clipped to the box. Lorem ipsum dolor sit amet, consectetur adipiscing
+    elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed
+    nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
+    Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa.
+    Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora
+    torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales
+    ligula in libero.
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html
new file mode 100644
index 0000000..425844a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <style>
+  .root {
+    overflow-x: scroll;
+    overflow-y: scroll;
+    width: 100px;
+    height: 100px;
+    background: green;
+    margin: 25px;
+    padding: 25px;
+  }
+  </style>
+</head>
+<body>
+  <div class="root">
+    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA This text should
+    be clipped to the box. Lorem ipsum dolor sit amet, consectetur adipiscing
+    elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed
+    nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
+    Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa.
+    Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora
+    torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales
+    ligula in libero.
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html
new file mode 100644
index 0000000..ed270e9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' with overflowing text contents, and 'overflow-y: scroll'.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+  <link rel="match" href="contain-paint-clip-003-ref.html">
+  <style>
+  .root {
+    contain: paint;
+    overflow-y: scroll;
+    width: 100px;
+    height: 100px;
+    background: green;
+    margin: 25px;
+    padding: 25px;
+  }
+  </style>
+</head>
+<body>
+  <div class="root">
+    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA This text should
+    be clipped to the box. Lorem ipsum dolor sit amet, consectetur adipiscing
+    elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed
+    nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
+    Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa.
+    Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora
+    torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales
+    ligula in libero.
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html
new file mode 100644
index 0000000..0861c68
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <style>
+  .root {
+    overflow-y: scroll;
+    overflow-x: scroll;
+    width: 100px;
+    height: 100px;
+    background: green;
+    margin: 25px;
+    padding: 25px;
+  }
+  </style>
+</head>
+<body>
+  <div class="root">
+    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA This text should
+    be clipped to the box. Lorem ipsum dolor sit amet, consectetur adipiscing
+    elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed
+    nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
+    Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa.
+    Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora
+    torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales
+    ligula in libero.
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html
new file mode 100644
index 0000000..844a59a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' with overflowing text contents, and 'overflow-x: scroll'.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+  <link rel="match" href="contain-paint-clip-004-ref.html">
+  <style>
+  .root {
+    contain: paint;
+    overflow-x: scroll;
+    width: 100px;
+    height: 100px;
+    background: green;
+    margin: 25px;
+    padding: 25px;
+  }
+  </style>
+</head>
+<body>
+  <div class="root">
+    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA This text should
+    be clipped to the box. Lorem ipsum dolor sit amet, consectetur adipiscing
+    elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed
+    nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
+    Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa.
+    Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora
+    torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales
+    ligula in libero.
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html
new file mode 100644
index 0000000..b2766e3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' on li with overflowing text contents and
+    bullet, and 'overflow-y: scroll'.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+  <link rel="match" href="contain-paint-clip-003-ref.html">
+  <style>
+  ul {
+    padding: 0;
+    margin: 0;
+  }
+  .root {
+    contain: paint;
+    overflow-y: scroll;
+    width: 100px;
+    height: 100px;
+    background: green;
+    margin: 25px;
+    padding: 25px;
+  }
+  </style>
+</head>
+<body>
+  <ul>
+    <li class="root">
+      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA This text should
+      be clipped to the box. Lorem ipsum dolor sit amet, consectetur adipiscing
+      elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam.
+      Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis
+      ipsum.  Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris
+      massa.  Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu
+      ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur
+      sodales ligula in libero.
+    </li>
+  </ul>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html
new file mode 100644
index 0000000..ecd22b30
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <style>
+  .root {
+    width: 100px;
+    height: 100px;
+    background: green;
+    margin: 25px;
+    padding: 25px;
+    overflow: hidden;
+    overflow-clip-box: content-box;
+  }
+  </style>
+</head>
+<body>
+  <div class="root">
+    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA This text should
+    be clipped to the content box. Lorem ipsum dolor sit amet, consectetur adipiscing
+    elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed
+    nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
+    Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa.
+    Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora
+    torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales
+    ligula in libero.
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html
new file mode 100644
index 0000000..14d23f4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' with overflowing text contents while "overflow-clip-box: content-box" enabled.</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+  <link rel="match" href="contain-paint-clip-006-ref.html">
+  <style>
+  .root {
+    contain: paint;
+    width: 100px;
+    height: 100px;
+    background: green;
+    margin: 25px;
+    padding: 25px;
+    overflow-clip-box: content-box;
+  }
+  </style>
+</head>
+<body>
+  <div class="root">
+    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA This text should
+    be clipped to the content box. Lorem ipsum dolor sit amet, consectetur adipiscing
+    elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed
+    nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
+    Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa.
+    Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora
+    torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales
+    ligula in libero.
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html
new file mode 100644
index 0000000..8861d19
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <style>
+  #a {
+      width: 100px;
+      height: 100px;
+      background: green;
+      margin: 50px;
+  }
+  </style>
+</head>
+<body>
+  <div id="a"></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html
new file mode 100644
index 0000000..ef56406
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' element should contain absolute position elements.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+  <link rel="match" href="contain-paint-containing-block-absolute-001-ref.html">
+  <style>
+  #a {
+      contain: paint;
+      width: 100px;
+      height: 100px;
+      background: red;
+      margin: 50px;
+  }
+  #b {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 100px;
+      height: 100px;
+      background: green;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div>
+      <div id="b"></div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html
new file mode 100644
index 0000000..8861d19
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <style>
+  #a {
+      width: 100px;
+      height: 100px;
+      background: green;
+      margin: 50px;
+  }
+  </style>
+</head>
+<body>
+  <div id="a"></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html
new file mode 100644
index 0000000..fc5ede1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' element should contain fixed position elements.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+  <link rel="match" href="contain-paint-containing-block-fixed-001-ref.html">
+  <style>
+  #a {
+      contain: paint;
+      width: 100px;
+      height: 100px;
+      background: red;
+      margin: 50px;
+  }
+  #b {
+      position: fixed;
+      top: 0;
+      left: 0;
+      width: 100px;
+      height: 100px;
+      background: green;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div>
+      <div id="b"></div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html
new file mode 100644
index 0000000..ceff7f4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <style>
+  #left {
+    float: left;
+    height: 50px;
+    width: 10px;
+    background: blue;
+  }
+  #a {
+    background: green;
+    margin: 10px;
+    width: 50px;
+    height: 50px;
+  }
+  </style>
+</head>
+<body>
+  <div id="left"></div>
+  <div id="a"></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html
new file mode 100644
index 0000000..e5827209
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' should contain floats as a formatting context.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+  <link rel="match" href="contain-paint-formatting-context-float-001-ref.html">
+  <style>
+  #left {
+    float: left;
+    height: 50px;
+    width: 10px;
+    background: blue;
+  }
+  #a {
+    contain: paint;
+    background: red;
+    margin: 10px;
+    width: 50px;
+    height: 50px;
+  }
+  #b {
+    clear: left;
+    width: 50px;
+    height: 50px;
+    background: green;
+  }
+  </style>
+</head>
+<body>
+  <div id="left"></div>
+  <div id="a">
+    <div id="b"></div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html
new file mode 100644
index 0000000..1976f71
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Test</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <style>
+  #a {
+      background: blue;
+      margin: 10px;
+      width: 50px;
+      height: 50px;
+  }
+  #b {
+      width: 50px;
+      height: 40px;
+      background: green;
+  }
+  #b-padding {
+      height: 10px;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div id="b-padding"></div>
+    <div id="b"></div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html
new file mode 100644
index 0000000..d374642
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' with a vertical margin child. Margin collapse should not occur.</title>
+  <link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
+  <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+  <link rel="match" href="contain-paint-formatting-context-margin-001-ref.html">
+  <style>
+  #a {
+      contain: paint;
+      background: blue;
+      margin: 10px;
+      width: 50px;
+      height: 50px;
+  }
+  #b {
+      width: 50px;
+      height: 40px;
+      background: green;
+      margin-top: 10px;
+  }
+  #c {
+      background: red;
+      width: 50px;
+      height: 10px;
+  }
+  </style>
+</head>
+<body>
+  <div id="a">
+    <div id="b"></div>
+    <div id="c"></div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html
new file mode 100644
index 0000000..d236789
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset=utf-8>
+    <title>CSS Reftest Reference</title>
+    <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+    <style>
+      tr {
+        z-index: 10;
+      }
+      th {
+        background-color: blue;
+        padding-left: 50px;
+      }
+      caption {
+        position: fixed;
+        background-color: yellow;
+        z-index: 2;
+      }
+    </style>
+  </head>
+  <body>
+    <table>
+      <caption>PASS</caption>
+      <tr>
+        <th>&emsp;</th>
+      </tr>
+    </table>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html
new file mode 100644
index 0000000..283b8b94
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset=utf-8>
+    <title>CSS-contain test: paint containment on internal table elements except table-cell.</title>
+    <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+    <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+    <link rel="match" href="contain-paint-ignored-cases-internal-table-001-ref.html">
+    <meta name="assert" content="Paint containment should not apply to internal table elements except table-cell. This test testes only the tr element, and confirms contain:paint does not create a stacking context.">
+    <style>
+      tr {
+        contain: paint;
+        z-index: 10;
+      }
+      th {
+        background-color: blue;
+        padding-left: 50px;
+      }
+      caption {
+        position: fixed;
+        background-color: yellow;
+        z-index: 2;
+      }
+    </style>
+  </head>
+  <body>
+    <table>
+      <caption>PASS</caption>
+      <tr>
+        <th>&emsp;</th>
+      </tr>
+    </table>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html
new file mode 100644
index 0000000..cff28b8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset=utf-8>
+    <title>CSS-contain test: paint containment on internal table elements except table-cell.</title>
+    <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+    <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+    <link rel="match" href="contain-paint-ignored-cases-internal-table-001-ref.html">
+    <meta name="assert" content="Paint containment should not apply to internal table elements except table-cell. This test testes only the tbody element, and confirms contain:paint does not create a stacking context.">
+    <style>
+      tbody {
+        contain: paint;
+        z-index: 10;
+      }
+      th {
+        background-color: blue;
+        padding-left: 50px;
+      }
+      caption {
+        position: fixed;
+        background-color: yellow;
+        z-index: 2;
+      }
+    </style>
+  </head>
+  <body>
+    <table>
+      <caption>PASS</caption>
+      <tbody>
+        <tr>
+          <th>&emsp;</th>
+        </tr>
+      </tbody>
+    </table>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html
new file mode 100644
index 0000000..b451370
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <style>
+    div {
+      position: relative;
+      width: 100px;
+    }
+    #div1,
+    #div3 {
+      background-color: #cfc;
+      height: 100px;
+    }
+    #div1 {
+      z-index: 5;
+    }
+    #div2 {
+      display: contents;
+      background-color: #fdd;
+      height: 100px;
+      top: -20px;
+    }
+    #div2_1 {
+      background-color: #ffc;
+      z-index: 6;
+      top: -10px;
+      height: 100px;
+    }
+    #div2_2 {
+      z-index: 3;
+      position: absolute;
+      top: -15px;
+      width: 40px;
+      height: 300px;
+      background-color: #ddf;
+    }
+    #div3 {
+      z-index: 2;
+      top: -50px;
+    }
+  </style>
+</head>
+<body>
+  <div id="div1"></div>
+
+  <div id="div2">
+    <div id="div2_1"></div>
+
+    <div id="div2_2"></div>
+  </div>
+
+  <div id="div3"></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html
new file mode 100644
index 0000000..4b9c907
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' with 'display: contents'.</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-paint">
+  <link rel="match" href="contain-paint-ignored-cases-no-principal-box-001-ref.html">
+  <meta name="assert" content="Contain:paint should have no effect when no principle box is generated.">
+  <style>
+    div {
+      position: relative;
+      width: 100px;
+    }
+    #div1,
+    #div3 {
+      background-color: #cfc;
+      height: 100px;
+    }
+    #div1 {
+      z-index: 5;
+    }
+    #div2 {
+      display: contents;
+      contain: paint;
+      background-color: #fdd;
+      height: 100px;
+      top: -20px;
+    }
+    #div2_1 {
+      background-color: #ffc;
+      z-index: 6;
+      top: -10px;
+      height: 100px;
+    }
+    #div2_2 {
+      z-index: 3;
+      position: absolute;
+      top: -15px;
+      width: 40px;
+      height: 300px;
+      background-color: #ddf;
+    }
+    #div3 {
+      z-index: 2;
+      top: -50px;
+    }
+  </style>
+</head>
+<body>
+  <div id="div1"></div>
+
+  <div id="div2">
+    <div id="div2_1"></div>
+
+    <div id="div2_2"></div>
+  </div>
+
+  <div id="div3"></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html
new file mode 100644
index 0000000..5df0b24
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang=en>
+  <head>
+    <meta charset=utf-8>
+    <title>CSS Reftest Reference</title>
+    <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+    <style>
+      rb,
+      rbc,
+      rt,
+      rtc {
+        background-color: yellow;
+        font-size: 2em;
+      }
+      rbc {
+        display: ruby-base-container;
+      }
+      .contained {
+        width: 50px;
+        height: 10px;
+        background-color: blue;
+        top: 0;
+        left: 0;
+        position: fixed;
+      }
+      .wrapper {
+        display: inline-block;
+      }
+    </style>
+  </head>
+  <body>
+    <div class="wrapper"><ruby><rt>&emsp;<div class="contained"></div></rt></ruby></div>
+    <div class="wrapper"><ruby><rtc>&emsp;<div class="contained"></div></rtc></ruby></div>
+    <div class="wrapper"><ruby><rb>&emsp;<div class="contained"></div></rb></ruby></div>
+    <div class="wrapper"><ruby><rbc>&emsp;<div class="contained"></div></rbc></ruby></div>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html
new file mode 100644
index 0000000..71764e18
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang=en>
+  <head>
+    <meta charset=utf-8>
+    <title>CSS-contain test: paint containment on internal ruby elements.</title>
+    <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+    <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+    <link rel="match" href="contain-paint-ignored-cases-ruby-containing-block-001-ref.html">
+    <meta name="assert" content="Paint containment should not apply to ruby base, ruby base container, ruby text, and ruby text container. This test confirms contain:paint does not act as a containing block for fixed positioned descendants.">
+    <style>
+      rb,
+      rbc,
+      rt,
+      rtc {
+        contain: paint;
+        background-color: yellow;
+        font-size: 2em;
+      }
+      rbc {
+        display: ruby-base-container;
+      }
+      .contained {
+        width: 50px;
+        height: 10px;
+        background-color: blue;
+        top: 0;
+        left: 0;
+        position: fixed;
+      }
+      .wrapper {
+        display: inline-block;
+      }
+    </style>
+  </head>
+  <body>
+    <div class="wrapper"><ruby><rt>&emsp;<div class="contained"></div></rt></ruby></div>
+    <div class="wrapper"><ruby><rtc>&emsp;<div class="contained"></div></rtc></ruby></div>
+    <div class="wrapper"><ruby><rb>&emsp;<div class="contained"></div></rb></ruby></div>
+    <div class="wrapper"><ruby><rbc>&emsp;<div class="contained"></div></rbc></ruby></div>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html
new file mode 100644
index 0000000..02f7a40
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang=en>
+  <head>
+    <meta charset=utf-8>
+    <title>CSS Reftest Reference</title>
+    <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+    <style>
+      div {
+        position: relative;
+      }
+      rbc {
+        display: ruby-base-container;
+      }
+      .contained {
+        z-index: 5;
+        width: 70px;
+        height: 10px;
+        background-color: blue;
+        margin-left: -25px;
+      }
+      .background {
+        display: inline-block;
+        background-color: yellow;
+        height: 50px;
+        width: 50px;
+        position: fixed;
+        z-index: 2;
+      }
+      .group {
+        display: inline-block;
+      }
+    </style>
+  </head>
+  <body>
+    <div class="group">
+      <div class="background"></div>
+      <ruby><rb>&emsp;<div class="contained"></div></rb></ruby>
+    </div>
+    <div class="group">
+      <div class="background"></div>
+      <ruby><rbc>&emsp;<div class="contained"></div></rbc></ruby>
+    </div>
+    <div class="group">
+      <div class="background"></div>
+      <ruby><rt>&emsp;<div class="contained"></div></rt></ruby>
+    </div>
+    <div class="group">
+      <div class="background"></div>
+      <ruby><rtc>&emsp;<div class="contained"></div></rtc></ruby>
+    </div>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html
new file mode 100644
index 0000000..1f1c147f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<html lang=en>
+  <head>
+    <meta charset=utf-8>
+    <title>CSS-contain test: paint containment on internal ruby elements.</title>
+    <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+    <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+    <link rel="match" href="contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html">
+    <meta name="assert" content="Paint containment should not apply to ruby base, ruby base container, ruby text, and ruby text container. This test confirms that contain:paint does not create a stacking context and does not apply overflow clipping.">
+    <style>
+      div {
+        position: relative;
+      }
+      rb,
+      rbc,
+      rt,
+      rtc {
+        contain: paint;
+      }
+      rbc {
+        display: ruby-base-container;
+      }
+      .contained {
+        z-index: 5;
+        width: 70px;
+        height: 10px;
+        background-color: blue;
+        margin-left: -25px;
+      }
+      .background {
+        background-color: yellow;
+        height: 50px;
+        width: 50px;
+        position: fixed;
+        z-index: 2;
+      }
+      .group {
+        display: inline-block;
+      }
+    </style>
+  </head>
+  <body>
+    <div class="group">
+      <div class="background"></div>
+      <ruby><rb>&emsp;<div class="contained"></div></rb></ruby>
+    </div>
+    <div class="group">
+      <div class="background"></div>
+      <ruby><rbc>&emsp;<div class="contained"></div></rbc></ruby>
+    </div>
+    <div class="group">
+      <div class="background"></div>
+      <ruby><rt>&emsp;<div class="contained"></div></rt></ruby>
+    </div>
+    <div class="group">
+      <div class="background"></div>
+      <ruby><rtc>&emsp;<div class="contained"></div></rtc></ruby>
+    </div>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html
new file mode 100644
index 0000000..c755371
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+  <style>
+    div {
+      position: relative;
+      width: 100px;
+    }
+    #div1,
+    #div3 {
+      background-color: #cfc;
+    }
+    #div1 {
+      z-index: 5;
+    }
+    #div2 {
+      z-index: 1;
+      background-color: #fdd;
+      height: 100px;
+      top: -20px;
+    }
+    #div2_1 {
+      background-color: #ffc;
+      z-index: 6;
+      top: -10px;
+    }
+    #div2_2 {
+      z-index: 3;
+      position: absolute;
+      top: -15px;
+      width: 40px;
+      height: 100px;
+      background-color: #ddf;
+    }
+    #div3 {
+      z-index: 2;
+      top: -50px;
+    }
+  </style>
+</head>
+<body>
+  <div id="div1">
+    <br/><br/>
+  </div>
+
+  <div id="div2">
+    <div id="div2_1">
+      <br/><br/>
+    </div>
+
+    <div id="div2_2">
+    </div>
+  </div>
+
+  <div id="div3">
+    <br/><br/>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001a.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001a.html
new file mode 100644
index 0000000..71102b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001a.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: paint' with stacking contents. Z-index is defined only for siblings and children.</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+
+  <link rel="help" href="https://drafts.csswg.org/css2/visuren.html#x43">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-paint">
+  <link rel="match" href="contain-paint-stacking-context-001-ref.html">
+  <style>
+    div {
+      position: relative;
+      width: 100px;
+    }
+    #div1,
+    #div3 {
+      background-color: #cfc;
+    }
+    #div1 {
+      z-index: 5;
+    }
+    #div2 {
+      contain: paint;
+      background-color: #fdd;
+      height: 100px;
+      top: -20px;
+    }
+    #div2_1 {
+      background-color: #ffc;
+      z-index: 6;
+      top: -10px;
+    }
+    #div2_2 {
+      z-index: 3;
+      position: absolute;
+      top: -15px;
+      width: 40px;
+      height: 100px;
+      background-color: #ddf;
+    }
+    #div3 {
+      z-index: 2;
+      top: -50px;
+    }
+  </style>
+</head>
+<body>
+  <div id="div1">
+    <br/><br/>
+  </div>
+
+  <div id="div2">
+    <div id="div2_1">
+      <br/><br/>
+    </div>
+
+    <div id="div2_2">
+    </div>
+  </div>
+
+  <div id="div3">
+    <br/><br/>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001b.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001b.html
new file mode 100644
index 0000000..0c4d332
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001b.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'will-change: contain' with stacking contents. Z-index is defined only for siblings and children.</title>
+  <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+
+  <link rel="help" href="https://drafts.csswg.org/css2/visuren.html#x43">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-paint">
+  <link rel="match" href="contain-paint-stacking-context-001-ref.html">
+  <style>
+    div {
+      position: relative;
+      width: 100px;
+    }
+    #div1,
+    #div3 {
+      background-color: #cfc;
+    }
+    #div1 {
+      z-index: 5;
+    }
+    #div2 {
+      will-change: contain;
+      background-color: #fdd;
+      height: 100px;
+      top: -20px;
+    }
+    #div2_1 {
+      background-color: #ffc;
+      z-index: 6;
+      top: -10px;
+    }
+    #div2_2 {
+      z-index: 3;
+      position: absolute;
+      top: -15px;
+      width: 40px;
+      height: 100px;
+      background-color: #ddf;
+    }
+    #div3 {
+      z-index: 2;
+      top: -50px;
+    }
+  </style>
+</head>
+<body>
+  <div id="div1">
+    <br/><br/>
+  </div>
+
+  <div id="div2">
+    <div id="div2_1">
+      <br/><br/>
+    </div>
+
+    <div id="div2_2">
+    </div>
+  </div>
+
+  <div id="div3">
+    <br/><br/>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001-ref.html
new file mode 100644
index 0000000..b8f983a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001-ref.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  .basic {
+    border: 1em solid green;
+  }
+  .height-ref {
+    height: 50px;
+    background: lightblue;
+  }
+  .width-ref {
+    width: 50px;
+  }
+  .floatLBasic-ref {
+    float: left;
+  }
+  .floatLWidth-ref {
+    float: left;
+    width: 50px;
+  }
+  .flexBaselineCheck {
+    display: flex;
+    align-items: baseline;
+  }
+  </style>
+</head>
+<body>
+  <div class="basic"></div>
+  <br>
+
+  <div class="basic height-ref"></div>
+  <br>
+
+  <div class="basic height-ref"></div>
+  <br>
+
+  <div class="basic width-ref"></div>
+  <br>
+
+  <div class="basic width-ref"></div>
+  <br>
+
+  <div class="basic floatLBasic-ref"></div>
+  <br>
+
+  <div class="basic floatLWidth-ref"></div>
+  <br>
+
+  <div class="flexBaselineCheck">
+  outside before<div class="basic"></div>outside after
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html
new file mode 100644
index 0000000..c5bdc6a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on block elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-block-001-ref.html">
+  <style>
+  .contain {
+    contain: size;
+    border: 1em solid green;
+    background: red;
+  }
+  .innerContents {
+    color: transparent;
+    height: 100px;
+    width: 100px;
+  }
+  .minHeight {
+    min-height: 50px;
+    background: lightblue;
+  }
+  .height {
+    height: 50px;
+    background: lightblue;
+  }
+  .maxWidth {
+    max-width: 50px;
+  }
+  .width {
+    width: 50px;
+  }
+  .floatLBasic {
+    float: left;
+  }
+  .floatLWidth {
+    float: left;
+    width: 50px;
+  }
+  .flexBaselineCheck {
+    display: flex;
+    align-items: baseline;
+  }
+  </style>
+</head>
+<body>
+  <!--CSS Test: A size-contained block element with no specified size should render at 0 height regardless of content.-->
+  <div class="contain"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained block element with specified min-height should render at given min-height regardless of content.-->
+  <div class="contain minHeight"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained block element with specified height should render at given height regardless of content.-->
+  <div class="contain height"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained block element with specified max-width should render at given max-width and zero height regardless of content.-->
+  <div class="contain maxWidth"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained block element with specified width should render at given width and zero height regardless of content.-->
+  <div class="contain width"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained floated block element with no specified size should render at 0px by 0px regardless of content.-->
+  <div class="contain floatLBasic"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained floated block element with specified width and no specified height should render at given width and 0 height regardless of content.-->
+  <div class="contain floatLWidth"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained block element should perform baseline alignment as if the container were empty.-->
+  <div class="flexBaselineCheck">
+  outside before<div class="contain"><div class="innerContents">inner</div></div>outside after
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html
new file mode 100644
index 0000000..0cb421b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  button {
+    border: 1em solid green;
+  }
+  .width-ref {
+    width: 50px;
+  }
+  .height-ref {
+    height: 50px;
+    background: lightblue;
+  }
+  .floatLBasic-ref {
+    float: left;
+  }
+  .floatLWidth-ref {
+    float: left;
+    width: 50px;
+  }
+  .iFlexBasic-ref {
+    display: inline-flex;
+  }
+  .iFlexWidth-ref {
+    display: inline-flex;
+    width: 50px;
+  }
+  .orthog-ref {
+    writing-mode: vertical-lr;
+  }
+  </style>
+</head>
+<body>
+  <button></button>
+  <br>
+
+  <button class="floatLBasic-ref"></button>
+  <br>
+
+  <button class="floatLWidth-ref"></button>
+  <br>
+
+  <button class="iFlexBasic-ref"></button>
+  <br>
+
+  <button class="iFlexWidth-ref"></button>
+  <br>
+
+  outside before<button></button>outside after
+  <br>
+
+  <button class="width-ref"></button>
+  <br>
+
+  <button class="width-ref"></button>
+  <br>
+
+  <button class="height-ref"></button>
+  <br>
+
+  <button class="height-ref"></button>
+  <br>
+
+  s<button class="orthog-ref"></button>endtext
+  <br>
+
+  <button class="height-ref width-ref">inside</button>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html
new file mode 100644
index 0000000..015d33e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on buttons should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-button-001-ref.html">
+  <style>
+  button {
+    contain: size;
+    border: 1em solid green;
+    background: red;
+  }
+  .innerContents {
+    color: transparent;
+    height: 100px;
+    width: 100px;
+  }
+  .minWidth {
+    min-width: 50px;
+  }
+  .width {
+    width: 50px;
+  }
+  .minHeight {
+    min-height: 50px;
+    background: lightblue;
+  }
+  .height {
+    height: 50px;
+    background: lightblue;
+  }
+  .floatLBasic {
+    float: left;
+  }
+  .floatLWidth {
+    float: left;
+    width: 50px;
+  }
+  .iFlexBasic {
+    display: inline-flex;
+  }
+  .iFlexWidth {
+    display: inline-flex;
+    width: 50px;
+  }
+  .orthog {
+    writing-mode: vertical-lr;
+  }
+  </style>
+</head>
+<body>
+  <!--CSS Test: A size-contained button with no specified size should render at 0 height regardless of content.-->
+  <button><div class="innerContents">inner</div></button>
+  <br>
+
+  <!--CSS Test: A size-contained floated button with no specified size should render at 0px by 0px regardless of content.-->
+  <button class="floatLBasic"><div class="innerContents">inner</div></button>
+  <br>
+
+  <!--CSS Test: A size-contained floated button with specified width and no specified height should render at given width and 0 height regardless of content.-->
+  <button class="floatLWidth"><div class="innerContents">inner</div></button>
+  <br>
+
+  <!--CSS Test: A size-contained inline-flex button with no specified size should render at 0px by 0px regardless of content.-->
+  <button class="iFlexBasic"><div class="innerContents">inner</div></button>
+  <br>
+
+  <!--CSS Test: A size-contained inline-flex button with specified width and no specified height should render at given width and 0 height regardless of content.-->
+  <button class="iFlexWidth"><div class="innerContents">inner</div></button>
+  <br>
+
+  <!--CSS Test: A size-contained button should perform baseline alignment as if the container were empty.-->
+  outside before<button><div class="innerContents">inner</div></button>outside after
+  <br>
+
+  <!--CSS Test: A size-contained button with specified min-width should render at given min-width and zero height regardless of content.-->
+  <button class="minWidth"><div class="innerContents">inner</div></button>
+  <br>
+
+  <!--CSS Test: A size-contained button with specified width should render at given width and zero height regardless of content.-->
+  <button class="width"><div class="innerContents">inner</div></button>
+  <br>
+
+  <!--CSS Test: A size-contained button with specified min-height should render at given min-height regardless of content.-->
+  <button class="minHeight"><div class="innerContents">inner</div></button>
+  <br>
+
+  <!--CSS Test: A size-contained button with specified height should render at given height regardless of content.-->
+  <button class="height"><div class="innerContents">inner</div></button>
+  <br>
+
+  <!--CSS Test: A size-contained button with vertical text should perform baseline alignment as if the container were empty.-->
+  s<button class="orthog"><div class="innerContents">inner</div></button>endtext
+  <br>
+
+  <!--CSS Test: A size-contained button with inner text should layout the text in the same manner as a container of the same type with identical contents.-->
+  <button class="height width">inside</button>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html
new file mode 100644
index 0000000..a7869752
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  .basic {
+    visibility: hidden;
+    border: none;
+  }
+  .container {
+    border: 10px solid green;
+    display: inline-block;
+  }
+  .height {
+    height: 30px;
+  }
+  .width {
+    width: 30px;
+  }
+  </style>
+</head>
+<body>
+  <div class="container"><fieldset class="basic"></fieldset></div>
+  <br>
+
+  <div class="container"><fieldset class="basic height"></fieldset></div>
+  <br>
+
+  <div class="container"><fieldset class="basic height"></fieldset></div>
+  <br>
+
+  <div class="container"><fieldset class="basic width"></fieldset></div>
+  <br>
+
+  <div class="container"><fieldset class="basic width"></fieldset></div>
+  <br>
+
+  <fieldset class="height"><legend>legend</legend></fieldset>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001.html
new file mode 100644
index 0000000..c21e551
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on fieldset elements should cause them to be sized as if they had no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-fieldset-001-ref.html">
+  <style>
+  .contain {
+    contain: size;
+    visibility: hidden;
+    border: none;
+    color: transparent;
+  }
+  .container {
+    border: 10px solid green;
+    display: inline-block;
+  }
+  .innerContents {
+    height: 50px;
+    width: 50px;
+  }
+  .minHeight {
+    min-height: 30px;
+  }
+  .height {
+    height: 30px;
+  }
+  .minWidth {
+    min-width: 30px;
+  }
+  .width {
+    width: 30px;
+  }
+  </style>
+</head>
+<body>
+  <!--Note: The following .container class is used to help test if size-contained
+  fieldsets and non-contained fieldsets have the same size. Normally, we'd test
+  that a fieldset with children and size-containment is drawn identically to a
+  fieldset without containment or children. However, when we have a legend as
+  a child, border placement and padding of the fieldset are changed.
+  To check the dimensions between the ref-case and test-case without
+  failing because of the border/padding differences, we make the fieldset
+  {visibility:hidden; border:none;} and add a .container wrapper div.-->
+
+  <!--CSS Test: A size-contained fieldset element with no specified size should size itself as if it had no contents.-->
+  <div class="container">
+  <fieldset class="contain">
+    <legend>legend</legend>
+    <div class="innerContents">inner</div>
+  </fieldset>
+  </div>
+  <br>
+
+  <!--CSS Test: A size-contained fieldset element with specified min-height should size itself as if it had no contents.-->
+  <div class="container">
+  <fieldset class="contain minHeight">
+    <legend>legend</legend>
+    <div class="innerContents">inner</div>
+  </fieldset>
+  </div>
+  <br>
+
+  <!--CSS Test: A size-contained fieldset element with specified height should size itself as if it had no contents.-->
+  <div class="container">
+  <fieldset class="contain height">
+    <legend>legend</legend>
+    <div class="innerContents">inner</div>
+  </fieldset>
+  </div>
+  <br>
+
+  <!--CSS Test: A size-contained fieldset element with specified min-width should size itself as if it had no contents.-->
+  <div class="container">
+  <fieldset class="contain minWidth">
+    <legend>legend</legend>
+    <div class="innerContents">inner</div>
+  </fieldset>
+  </div>
+  <br>
+
+  <!--CSS Test: A size-contained fieldset element with specified width should size itself as if it had no contents.-->
+  <div class="container">
+  <fieldset class="contain width">
+    <legend>legend</legend>
+    <div class="innerContents">inner</div>
+  </fieldset>
+  </div>
+  <br>
+
+  <!--CSS Test: A size contained fieldset element with a legend should draw its legend and border in the same way as a non-contained fieldset element-->
+  <fieldset class="height" style="contain:size;">
+    <legend>legend</legend>
+  </fieldset>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html
new file mode 100644
index 0000000..040da171
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  .basic {
+    border: none;
+    visibility: hidden;
+  }
+  .container {
+    border: 10px solid green;
+    display: inline-block;
+  }
+  .floatLBasic-ref {
+    float: left;
+  }
+  .floatLWidth-ref {
+    float: left;
+    width: 30px;
+  }
+  .flexBaselineCheck {
+    display: flex;
+    align-items: baseline;
+  }
+  </style>
+</head>
+<body>
+  <div class="flexBaselineCheck">
+  outside before<fieldset class="basic"></fieldset>outside after
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002.html
new file mode 100644
index 0000000..18d6ad8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on fieldset elements should cause them to be baseline-aligned as if they had no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-fieldset-002-ref.html">
+  <style>
+  .contain {
+    contain: size;
+    border: none;
+    color: transparent;
+    visibility: hidden;
+  }
+  .innerContents {
+    height: 50px;
+    width: 50px;
+  }
+  .flexBaselineCheck {
+    display: flex;
+    align-items: baseline;
+  }
+  </style>
+</head>
+<body>
+  <!--CSS Test: A size-contained fieldset element should perform baseline alignment as if the container were empty.-->
+  <div class="flexBaselineCheck">
+  outside before<fieldset class="contain">
+    <legend>legend</legend>
+    <div class="innerContents">inner</div>
+  </fieldset>outside after
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001-ref.html
new file mode 100644
index 0000000..995c451
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001-ref.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  .basic {
+    display: flex;
+    border: 1em solid green;
+  }
+  .height-ref {
+    height: 40px;
+    background: lightblue;
+  }
+  .width-ref {
+    width: 40px;
+  }
+  .floatLBasic-ref {
+    float: left;
+  }
+  .floatLWidth-ref {
+    float: left;
+    width: 40px;
+  }
+  </style>
+</head>
+<body>
+  <div class="basic"></div>
+  <br>
+
+  <div class="basic height-ref"></div>
+  <br>
+
+  <div class="basic height-ref"></div>
+  <br>
+
+  <div class="basic width-ref"></div>
+  <br>
+
+  <div class="basic width-ref"></div>
+  <br>
+
+  <div class="basic floatLBasic-ref"></div>
+  <br>
+
+  <div class="basic floatLWidth-ref"></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html
new file mode 100644
index 0000000..1866dfd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on flex elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-flex-001-ref.html">
+  <style>
+  .contain {
+    display: flex;
+    contain:size;
+    border: 1em solid green;
+    background: red;
+  }
+  .innerContents {
+    color: transparent;
+    height: 100px;
+    width: 100px;
+  }
+  .minHeight {
+    min-height: 40px;
+    background: lightblue;
+  }
+  .height {
+    height: 40px;
+    background: lightblue;
+  }
+  .maxWidth {
+    max-width: 40px;
+  }
+  .width {
+    width: 40px;
+  }
+  .floatLBasic {
+    float: left;
+  }
+  .floatLWidth {
+    float: left;
+    width: 40px;
+  }
+  </style>
+</head>
+<body>
+  <!--CSS Test: A size-contained flex element with no specified size should render at 0 height regardless of content.-->
+  <div class="contain"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained flex element with specified min-height should render at given min-height regardless of content.-->
+  <div class="contain minHeight"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained flex element with specified height should render at given height regardless of content.-->
+  <div class="contain height"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained flex element with specified max-width should render at given max-width and zero height regardless of content.-->
+  <div class="contain maxWidth"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained flex element with specified width should render at given width and zero height regardless of content.-->
+  <div class="contain width"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained floated flex element with no specified size should render at 0px by 0px regardless of content.-->
+  <div class="contain floatLBasic"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained floated flex element with specified width and no specified height should render at given width and 0 height regardless of content.-->
+  <div class="contain floatLWidth"><div class="innerContents">inner</div></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001-ref.html
new file mode 100644
index 0000000..56d1cdd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001-ref.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  .basic {
+    display: inline-block;
+    border: 1em solid green;
+  }
+  .height-ref {
+    height: 50px;
+  }
+  .width-ref {
+    width: 50px;
+  }
+  </style>
+</head>
+<body>
+  <div class="basic"></div>
+  <br>
+
+  outside before<div class="basic"></div>outside after
+  <br>
+
+  <div class="basic height-ref"></div>
+  <br>
+
+  <div class="basic height-ref"></div>
+  <br>
+
+  <div class="basic width-ref"></div>
+  <br>
+
+  <div class="basic width-ref"></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001.html
new file mode 100644
index 0000000..48f8bc2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on inline-block elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-inline-block-001-ref.html">
+  <style>
+  .contain {
+    display: inline-block;
+    contain:size;
+    border: 1em solid green;
+    background: red;
+  }
+  .innerContents {
+    color: transparent;
+    height: 100px;
+    width: 100px;
+  }
+  .minHeight {
+    min-height: 50px;
+  }
+  .height {
+    height: 50px;
+  }
+  .minWidth {
+    min-width: 50px;
+  }
+  .width {
+    width: 50px;
+  }
+  </style>
+</head>
+<body>
+  <!--CSS Test: A size-contained inline-block element with no specified size should render at 0 height and 0 width regardless of content.-->
+  <div class="contain"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained inline-block element should perform baseline alignment as if the container were empty.-->
+  outside before<div class="contain"><div class="innerContents">inner</div></div>outside after
+  <br>
+
+  <!--CSS Test: A size-contained inline-block element with specified min-height should render at given min-height and 0 width regardless of content.-->
+  <div class="contain minHeight"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained inline-block element with specified height should render at given height and 0 width regardless of content.-->
+  <div class="contain height"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained inline-block element with specified min-width should render at given min-width and 0 height regardless of content.-->
+  <div class="contain minWidth"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained inline-block element with specified width should render at given width and 0 height regardless of content.-->
+  <div class="contain width"><div class="innerContents">inner</div></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001-ref.html
new file mode 100644
index 0000000..fb013752
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  .basic {
+    border: 1em solid green;
+    display: inline-flex;
+  }
+  .width-ref {
+    width: 50px;
+  }
+  </style>
+</head>
+<body>
+  aa<div class="basic"></div>bb
+  <br>
+
+  aa<div class="basic width-ref"></div>bb
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001.html
new file mode 100644
index 0000000..e79d0c1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on inline-flex elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-inline-flex-001-ref.html">
+  <style>
+  .contain {
+    display: inline-flex;
+    contain:size;
+    border: 1em solid green;
+    background: red;
+  }
+  .innerContents {
+    color: transparent;
+    height: 100px;
+    width: 100px;
+  }
+  .width {
+    width: 50px;
+  }
+  </style>
+</head>
+<body>
+  <!--CSS Test: A size-contained inline-flex element without dimensions should ensure baseline alignment behaviour matches that of an empty object of the same type.-->
+  aa<div class="contain"><div class="innerContents">inner</div></div>bb
+  <br>
+
+  <!--CSS Test: A size-contained inline-flex element with specified width should ensure baseline alignment behaviour matches that of an empty object of the same type.-->
+  aa<div class="contain width"><div class="innerContents">inner</div></div>bb
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001-ref.html
new file mode 100644
index 0000000..32dd4b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+    .cols {
+      column-count: 3;
+      column-rule: 1px dotted blue;
+      column-fill: auto;
+      border: 2px solid blue;
+      height: 50px;
+      width: 300px;
+    }
+    .innerObject {
+      height: 200px;
+      width: 100px;
+      background: orange;
+    }
+  </style>
+</head>
+  <body>
+    <div class="cols">
+      <canvas class="innerObject">
+        <!-- Note: We use a canvas object here as a generic reference for
+             something monolithic/non-fragmentable. -->
+      </canvas>
+    </div>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001.html
new file mode 100644
index 0000000..4a1cee5c2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+  <title>CSS Test: 'contain: size' should force elements to be monolithic, i.e. to not fragment inside a multicol element.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-multicol-001-ref.html">
+  <style>
+    .contain {
+      contain:size;
+    }
+    .cols {
+      column-count: 3;
+      column-rule: 1px dotted blue;
+      column-fill: auto;
+      border: 2px solid blue;
+      height: 50px;
+      width: 300px;
+    }
+    .innerObject {
+      height: 200px;
+      width: 100px;
+      background: orange;
+    }
+  </style>
+</head>
+  <body>
+    <div class="cols">
+      <div class="contain innerObject">
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002-ref.html
new file mode 100644
index 0000000..c1c9f13
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002-ref.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  .basic {
+    border: 1em solid green;
+    column-count: 3;
+  }
+  .height-ref {
+    height: 20px;
+    background: lightblue;
+  }
+  .width-ref {
+    width: 20px;
+  }
+  .floatLBasic-ref {
+    float: left;
+  }
+  .floatLWidth-ref {
+    float: left;
+    width: 20px;
+  }
+  </style>
+</head>
+<body>
+  <div class="basic"></div>
+  <br>
+
+  <div class="basic height-ref"></div>
+  <br>
+
+  <div class="basic height-ref"></div>
+  <br>
+
+  <div class="basic width-ref"></div>
+  <br>
+
+  <div class="basic width-ref"></div>
+  <br>
+
+  <div class="basic floatLBasic-ref"></div>
+  <br>
+
+  <div class="basic floatLWidth-ref"></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002.html
new file mode 100644
index 0000000..0e35e2fe
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-002.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on multicol elements should cause them to be sized as if they had no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-multicol-002-ref.html">
+  <style>
+  .contain {
+    contain: size;
+    border: 1em solid green;
+    background: red;
+    column-count: 3;
+  }
+  .innerContents {
+    color: transparent;
+    height: 50px;
+    width: 50px;
+  }
+  .minHeight {
+    min-height: 20px;
+    background: lightblue;
+  }
+  .height {
+    height: 20px;
+    background: lightblue;
+  }
+  .maxWidth {
+    max-width: 20px;
+  }
+  .width {
+    width: 20px;
+  }
+  .floatLBasic {
+    float: left;
+  }
+  .floatLWidth {
+    float: left;
+    width: 20px;
+  }
+  </style>
+</head>
+<body>
+  <!--CSS Test: A size-contained multicol element with no specified size should render at 0 height regardless of content.-->
+  <div class="contain"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained multicol element with specified min-height should render at given min-height regardless of content.-->
+  <div class="contain minHeight"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained multicol element with specified height should render at given height regardless of content.-->
+  <div class="contain height"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained multicol element with specified max-width should render at given max-width and zero height regardless of content.-->
+  <div class="contain maxWidth"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained multicol element with specified width should render at given width and zero height regardless of content.-->
+  <div class="contain width"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained floated multicol element with no specified size should render at 0px by 0px regardless of content.-->
+  <div class="contain floatLBasic"><div class="innerContents">inner</div></div>
+  <br>
+
+  <!--CSS Test: A size-contained floated multicol element with specified width and no specified height should render at given width and 0 height regardless of content.-->
+  <div class="contain floatLWidth"><div class="innerContents">inner</div></div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html
new file mode 100644
index 0000000..59cb991
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  .basic {
+    border: 1em solid green;
+    column-count: 3;
+  }
+  .col-width-ref {
+    column-width: 20px;
+  }
+  .col-gap-ref {
+    column-gap: 5px;
+  }
+  .flexBaselineCheck {
+    display: flex;
+    align-items: baseline;
+  }
+  .min {
+    width: min-content;
+  }
+  .max {
+    width: max-content;
+  }
+  </style>
+</head>
+<body>
+  <div class="flexBaselineCheck">
+  outside before<div class="basic"></div>outside after
+  </div>
+  <br>
+
+  <div class="basic min col-width-ref"></div>
+  <br>
+
+  <div class="basic max col-width-ref"></div>
+  <br>
+
+  <div class="basic min col-gap-ref col-width-ref"></div>
+  <br>
+
+  <div class="basic max col-gap-ref col-width-ref"></div>
+  <br>
+
+  <div class="min">
+    <div class="basic"></div>
+  </div>
+  <br>
+
+  <div class="max">
+    <div class="basic"></div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html
new file mode 100644
index 0000000..33532428
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on multicol elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-multicol-003-ref.html">
+  <style>
+  .contain {
+    contain: size;
+    border: 1em solid green;
+    background: red;
+    column-count: 3;
+  }
+  .innerContents {
+    color: transparent;
+    height: 100px;
+    width: 100px;
+  }
+  .col-width {
+    column-width: 20px;
+  }
+  .col-gap {
+    column-gap: 5px;
+  }
+  .flexBaselineCheck {
+    display: flex;
+    align-items: baseline;
+  }
+  .min {
+    width: min-content;
+  }
+  .max {
+    width: max-content;
+  }
+  </style>
+</head>
+<body>
+  <!--CSS Test: A size-contained multicol element should perform baseline alignment as if it had no contents.-->
+  <div class="flexBaselineCheck">
+  outside before<div class="contain"><div class="innerContents">inner</div></div>outside after
+  </div>
+  <br>
+
+  <!--The following tests are used to ensure column-gaps and column-widths continue to contribute to the minimum and maximum width of a size-contained multicol element. Each should render as if it had no contents.-->
+
+  <div class="contain min col-width"><div class="innerContents">inner</div></div>
+  <br>
+
+  <div class="contain max col-width"><div class="innerContents">inner</div></div>
+  <br>
+
+  <div class="contain min col-gap col-width"><div class="innerContents">inner</div></div>
+  <br>
+
+  <div class="contain max col-gap col-width"><div class="innerContents">inner</div></div>
+  <br>
+
+  <div class="min">
+    <div class="contain">
+      <div class="innerContents">inner</div>
+    </div>
+  </div>
+  <br>
+
+  <div class="max">
+    <div class="contain">
+      <div class="innerContents">inner</div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001-ref.html
new file mode 100644
index 0000000..49b0933
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <style>
+  caption {
+    border: 1em solid green;
+  }
+  </style>
+</head>
+<body>
+  <table>
+    <caption></caption>
+  </table>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001.html
new file mode 100644
index 0000000..8ef46b7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: size' on table captions should cause them to be sized as if they had no contents.</title>
+  <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
+  <link rel="match" href="contain-size-table-caption-001-ref.html">
+  <style>
+  .contain {
+    contain:size;
+  }
+  .innerContents {
+    height: 100px;
+    width: 100px;
+    color: transparent;
+  }
+  caption {
+    border: 1em solid green;
+  }
+  </style>
+</head>
+<body>
+  <table>
+    <caption class="contain">
+      <div class="innerContents">
+        inner
+      </div>
+    </caption>
+  </table>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-not-cors-safelisted.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-not-cors-safelisted.any-expected.txt
new file mode 100644
index 0000000..56141bc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-not-cors-safelisted.any-expected.txt
@@ -0,0 +1,13 @@
+This is a testharness.js-based test.
+PASS Loading data…
+FAIL Need CORS-preflight for accept/" header assert_equals: Preflight request has been made expected "1" but got "0"
+FAIL Need CORS-preflight for accept/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 header assert_equals: Preflight request has been made expected "1" but got "0"
+FAIL Need CORS-preflight for accept-language/ header assert_equals: Preflight request has been made expected "1" but got "0"
+FAIL Need CORS-preflight for accept-language/@ header assert_equals: Preflight request has been made expected "1" but got "0"
+FAIL Need CORS-preflight for content-language/ header assert_equals: Preflight request has been made expected "1" but got "0"
+FAIL Need CORS-preflight for content-language/@ header assert_equals: Preflight request has been made expected "1" but got "0"
+PASS Need CORS-preflight for content-type/text/html header
+FAIL Need CORS-preflight for content-type/text/plain; long=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901 header assert_equals: Preflight request has been made expected "1" but got "0"
+PASS Need CORS-preflight for test/hi header
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-not-cors-safelisted.any.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-not-cors-safelisted.any.worker-expected.txt
new file mode 100644
index 0000000..56141bc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-not-cors-safelisted.any.worker-expected.txt
@@ -0,0 +1,13 @@
+This is a testharness.js-based test.
+PASS Loading data…
+FAIL Need CORS-preflight for accept/" header assert_equals: Preflight request has been made expected "1" but got "0"
+FAIL Need CORS-preflight for accept/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 header assert_equals: Preflight request has been made expected "1" but got "0"
+FAIL Need CORS-preflight for accept-language/ header assert_equals: Preflight request has been made expected "1" but got "0"
+FAIL Need CORS-preflight for accept-language/@ header assert_equals: Preflight request has been made expected "1" but got "0"
+FAIL Need CORS-preflight for content-language/ header assert_equals: Preflight request has been made expected "1" but got "0"
+FAIL Need CORS-preflight for content-language/@ header assert_equals: Preflight request has been made expected "1" but got "0"
+PASS Need CORS-preflight for content-type/text/html header
+FAIL Need CORS-preflight for content-type/text/plain; long=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901 header assert_equals: Preflight request has been made expected "1" but got "0"
+PASS Need CORS-preflight for test/hi header
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/headers/headers-no-cors.window-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/headers/headers-no-cors.window-expected.txt
new file mode 100644
index 0000000..2241e22
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/headers/headers-no-cors.window-expected.txt
@@ -0,0 +1,18 @@
+This is a testharness.js-based test.
+PASS Loading data…
+FAIL "no-cors" Headers object cannot have accept/" as header assert_false: expected false got true
+FAIL "no-cors" Headers object cannot have accept/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 as header assert_false: expected false got true
+FAIL "no-cors" Headers object cannot have accept-language/ as header assert_false: expected false got true
+FAIL "no-cors" Headers object cannot have accept-language/@ as header assert_false: expected false got true
+FAIL "no-cors" Headers object cannot have content-language/ as header assert_false: expected false got true
+FAIL "no-cors" Headers object cannot have content-language/@ as header assert_false: expected false got true
+PASS "no-cors" Headers object cannot have content-type/text/html as header
+FAIL "no-cors" Headers object cannot have content-type/text/plain; long=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901 as header assert_false: expected false got true
+PASS "no-cors" Headers object cannot have test/hi as header
+FAIL "no-cors" Headers object cannot have dpr/2 as header assert_false: expected false got true
+PASS "no-cors" Headers object cannot have downlink/1 as header
+FAIL "no-cors" Headers object cannot have save-data/on as header assert_false: expected false got true
+FAIL "no-cors" Headers object cannot have viewport-width/100 as header assert_false: expected false got true
+FAIL "no-cors" Headers object cannot have width/100 as header assert_false: expected false got true
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-2.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-2.html
index cefa053..0748b45 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-2.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-2.html
@@ -11,7 +11,7 @@
 var test5_load = event_test('no src, parser-inserted, has style sheets blocking scripts, script nesting level == 1', false, false);
 </script>
 
-<link rel="stylesheet" href="resources/slow.py"></link>
+<link rel="stylesheet" href="/common/slow.py"></link>
 <!-- This is testing the case where an inline classic script is inserted
 by parser while there is an loading stylesheet. Therefore, it is critical to
 place a <link rel="stylesheet"> just above the <script> to be tested. -->
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-3.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-3.html
index c2cf0db..83a752ce 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-3.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-3.html
@@ -13,7 +13,7 @@
     false, false);
 
 document.write(
-    `<link rel="stylesheet" href="resources/slow.py"></link>
+    `<link rel="stylesheet" href="/common/slow.py"></link>
     <script onload="onLoad(test6_load);"
         onerror="onError(test6_load);">
     "use strict";
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/script-text-modifications.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/script-text-modifications.html
index 7278182..0066d3f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/script-text-modifications.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/script-text-modifications.html
@@ -12,7 +12,7 @@
 </script>
 
 <!-- This is "a style sheet that is blocking scripts" and thus ... -->
-<link rel="stylesheet" href="resources/slow.py"></link>
+<link rel="stylesheet" href="/common/slow.py"></link>
 
 <script src="resources/script-text-modifications.py" async></script>
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016-1.html
index 12990a5..ceeeb64 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016-1.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016-1.html
@@ -11,7 +11,7 @@
 
   setTimeout(function() {
     parent.tests[0].step(function() {
-      parent.assert_equals(test_prop, 1, "Global scope from original window timeout");
+      parent.assert_equals(test_prop, 2, "Global scope from original window timeout");
       parent.assert_equals(window.test_prop, 2, "Window property from original window timeout")
     });
     parent.tests[1].step(function() {
@@ -23,7 +23,7 @@
 
   window.setTimeout(function() {
     parent.tests[2].step(function() {
-      parent.assert_equals(test_prop, 1, "Global scope from original window timeout");
+      parent.assert_equals(test_prop, 2, "Global scope from original window timeout");
       parent.assert_equals(window.test_prop, 2, "Window property from original window timeout")
     });
     parent.tests[3].step(function() {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016-expected.txt
deleted file mode 100644
index 75d73c9a..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/016-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-This is a testharness.js-based test.
-FAIL Timeout on original window, scope assert_equals: Global scope from original window timeout expected 1 but got 2
-PASS Timeout on original window, this object
-FAIL Timeout on new window, scope assert_equals: Global scope from original window timeout expected 1 but got 2
-PASS Timeout on new window, this object
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-immediate.window.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-immediate.window.js
new file mode 100644
index 0000000..8d045b9e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-immediate.window.js
@@ -0,0 +1,119 @@
+// The following tests deal with the <meta http-equiv=refresh> pragma and the
+// `Refresh` header. The spec is still hazy on the precise behavior in those
+// cases but we use https://github.com/whatwg/html/issues/4003 as a guideline.
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+
+    const client = new frame.contentWindow.XMLHttpRequest();
+    client.open("GET", "/common/blank.html");
+    client.onabort = t.step_func_done();
+    client.send();
+
+    frame.contentDocument.open();
+  });
+  frame.src = "resources/meta-refresh.py?0";
+}, "document.open() aborts documents that are queued for navigation through <meta> refresh with timeout 0 (XMLHttpRequest)");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+
+    frame.contentWindow.fetch("/common/blank.html").then(
+      t.unreached_func("Fetch should have been aborted"),
+      t.step_func_done());
+
+    frame.contentDocument.open();
+  });
+  frame.src = "resources/meta-refresh.py?0";
+}, "document.open() aborts documents that are queued for navigation through <meta> refresh with timeout 0 (fetch())");
+
+// We cannot test for img element's error event for this test, as Firefox does
+// not fire the event if the fetch is aborted while Chrome does.
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+
+    let happened = false;
+    const img = frame.contentDocument.createElement("img");
+    img.src = new URL("resources/slow-png.py", document.URL);
+    img.onload = t.unreached_func("Image loading should not have succeeded");
+    // The image fetch starts in a microtask, so let's be sure to test after
+    // the fetch has started.
+    t.step_timeout(() => {
+      frame.contentDocument.open();
+      happened = true;
+    });
+    // If 3 seconds have passed and the image has still not loaded, we consider
+    // it aborted. slow-png.py only sleeps for 2 wallclock seconds.
+    t.step_timeout(t.step_func_done(() => {
+      assert_true(happened);
+    }), 3000);
+  });
+  frame.src = "resources/meta-refresh.py?0";
+}, "document.open() aborts documents that are queued for navigation through <meta> refresh with timeout 0 (image loading)");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+
+    const client = new frame.contentWindow.XMLHttpRequest();
+    client.open("GET", "/common/blank.html");
+    client.onabort = t.step_func_done();
+    client.send();
+
+    frame.contentDocument.open();
+  });
+  frame.src = "resources/http-refresh.py?0";
+}, "document.open() aborts documents that are queued for navigation through Refresh header with timeout 0 (XMLHttpRequest)");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+
+    frame.contentWindow.fetch("/common/blank.html").then(
+      t.unreached_func("Fetch should have been aborted"),
+      t.step_func_done());
+
+    frame.contentDocument.open();
+  });
+  frame.src = "resources/http-refresh.py?0";
+}, "document.open() aborts documents that are queued for navigation through Refresh header with timeout 0 (fetch())");
+
+// We cannot test for img element's error event for this test, as Firefox does
+// not fire the event if the fetch is aborted while Chrome does.
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+
+    let happened = false;
+    const img = frame.contentDocument.createElement("img");
+    img.src = new URL("resources/slow-png.py", document.URL);
+    img.onload = t.unreached_func("Image loading should not have succeeded");
+    // The image fetch starts in a microtask, so let's be sure to test after
+    // the fetch has started.
+    t.step_timeout(() => {
+      frame.contentDocument.open();
+      happened = true;
+    });
+    // If 3 seconds have passed and the image has still not loaded, we consider
+    // it aborted. slow-png.py only sleeps for 2 wallclock seconds.
+    t.step_timeout(t.step_func_done(() => {
+      assert_true(happened);
+    }), 3000);
+  });
+  frame.src = "resources/http-refresh.py?0";
+}, "document.open() aborts documents that are queued for navigation through Refresh header with timeout 0 (image loading)");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-header.window.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-header.window.js
new file mode 100644
index 0000000..8c6c126
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-header.window.js
@@ -0,0 +1,69 @@
+// The following tests deal with the <meta http-equiv=refresh> pragma and the
+// `Refresh` header. The spec is still hazy on the precise behavior in those
+// cases but we use https://github.com/whatwg/html/issues/4003 as a guideline.
+//
+// This is separate from abort-refresh-multisecond-meta.window.js to avoid
+// browser interventions that limit the number of connections in a tab.
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+
+    const client = new frame.contentWindow.XMLHttpRequest();
+    client.open("GET", "/common/blank.html");
+    client.onload = t.step_func_done(() => {
+      assert_true(happened);
+    });
+    client.onerror = t.unreached_func("XMLHttpRequest should have succeeded");
+    client.onabort = t.unreached_func("XMLHttpRequest should have succeeded");
+    client.ontimeout = t.unreached_func("XMLHttpRequest should have succeeded");
+    client.send();
+
+    frame.contentDocument.open();
+    happened = true;
+  });
+  frame.src = "resources/http-refresh.py?1";
+}, "document.open() does NOT abort documents that are queued for navigation through Refresh header with 1-sec timeout (XMLHttpRequest)");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    frame.contentWindow.fetch("/common/blank.html").then(
+      t.step_func_done(() => {
+        assert_true(happened);
+      }),
+      t.unreached_func("Fetch should have succeeded")
+    );
+    frame.contentDocument.open();
+    happened = true;
+  });
+  frame.src = "resources/http-refresh.py?1";
+}, "document.open() does NOT abort documents that are queued for navigation through Refresh header with 1-sec timeout (fetch())");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    const img = frame.contentDocument.createElement("img");
+    img.src = new URL("resources/slow-png.py", document.URL);
+    img.onload = t.step_func_done(() => {
+      assert_true(happened);
+    });
+    img.onerror = t.unreached_func("Image loading should not have errored");
+    // The image fetch starts in a microtask, so let's be sure to test after
+    // the fetch has started.
+    t.step_timeout(() => {
+      frame.contentDocument.open();
+      happened = true;
+    });
+  });
+  frame.src = "resources/http-refresh.py?4";
+}, "document.open() does NOT abort documents that are queued for navigation through Refresh header with 4-sec timeout (image loading)");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-meta.window.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-meta.window.js
new file mode 100644
index 0000000..2895f959
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-refresh-multisecond-meta.window.js
@@ -0,0 +1,69 @@
+// The following tests deal with the <meta http-equiv=refresh> pragma and the
+// `Refresh` header. The spec is still hazy on the precise behavior in those
+// cases but we use https://github.com/whatwg/html/issues/4003 as a guideline.
+//
+// This is separate from abort-refresh-multisecond-header.window.js to avoid
+// browser interventions that limit the number of connections in a tab.
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+
+    const client = new frame.contentWindow.XMLHttpRequest();
+    client.open("GET", "/common/blank.html");
+    client.onload = t.step_func_done(() => {
+      assert_true(happened);
+    });
+    client.onerror = t.unreached_func("XMLHttpRequest should have succeeded");
+    client.onabort = t.unreached_func("XMLHttpRequest should have succeeded");
+    client.ontimeout = t.unreached_func("XMLHttpRequest should have succeeded");
+    client.send();
+
+    frame.contentDocument.open();
+    happened = true;
+  });
+  frame.src = "resources/meta-refresh.py?1";
+}, "document.open() does NOT abort documents that are queued for navigation through <meta> refresh with 1-sec timeout (XMLHttpRequest)");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    frame.contentWindow.fetch("/common/blank.html").then(
+      t.step_func_done(() => {
+        assert_true(happened);
+      }),
+      t.unreached_func("Fetch should have succeeded")
+    );
+    frame.contentDocument.open();
+    happened = true;
+  });
+  frame.src = "resources/meta-refresh.py?1";
+}, "document.open() does NOT abort documents that are queued for navigation through <meta> refresh with 1-sec timeout (fetch())");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    const img = frame.contentDocument.createElement("img");
+    img.src = new URL("resources/slow-png.py", document.URL);
+    img.onload = t.step_func_done(() => {
+      assert_true(happened);
+    });
+    img.onerror = t.unreached_func("Image loading should not have errored");
+    // The image fetch starts in a microtask, so let's be sure to test after
+    // the fetch has started.
+    t.step_timeout(() => {
+      frame.contentDocument.open();
+      happened = true;
+    });
+  });
+  frame.src = "resources/meta-refresh.py?4";
+}, "document.open() does NOT abort documents that are queued for navigation through <meta> refresh with 4-sec timeout (image loading)");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-while-navigating.window.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-while-navigating.window.js
new file mode 100644
index 0000000..e3efeff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort-while-navigating.window.js
@@ -0,0 +1,179 @@
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    const client = new frame.contentWindow.XMLHttpRequest();
+    client.open("GET", "/common/blank.html");
+    // The abort event handler is called synchronously in Chrome but
+    // asynchronously in Firefox. See https://crbug.com/879620.
+    client.onabort = t.step_func_done();
+    client.send();
+    frame.contentWindow.location.href = new URL("resources/dummy.html", document.URL);
+    frame.contentDocument.open();
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() aborts documents that are navigating through Location (XMLHttpRequest)");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    frame.contentWindow.fetch("/common/blank.html").then(
+      t.unreached_func("Fetch should have been aborted"),
+      t.step_func_done(() => {
+        assert_true(happened);
+      }));
+    frame.contentWindow.location.href = new URL("resources/dummy.html", document.URL);
+    frame.contentDocument.open();
+    happened = true;
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() aborts documents that are navigating through Location (fetch())");
+
+// We cannot test for img element's error event for this test, as Firefox does
+// not fire the event if the fetch is aborted while Chrome does.
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    const img = frame.contentDocument.createElement("img");
+    img.src = new URL("resources/slow-png.py", document.URL);
+    img.onload = t.unreached_func("Image loading should not have succeeded");
+    // The image fetch starts in a microtask, so let's be sure to test after
+    // the fetch has started.
+    t.step_timeout(() => {
+      frame.contentWindow.location.href = new URL("resources/dummy.html", document.URL);
+      frame.contentDocument.open();
+      happened = true;
+    });
+    // If 3 seconds have passed and the image has still not loaded, we consider
+    // it aborted. slow-png.py only sleeps for 2 wallclock seconds.
+    t.step_timeout(t.step_func_done(() => {
+      assert_true(happened);
+    }), 3000);
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() aborts documents that are navigating through Location (image loading)");
+
+async_test(t => {
+  const div = document.body.appendChild(document.createElement("div"));
+  t.add_cleanup(() => div.remove());
+  div.innerHTML = "<iframe src='/common/slow.py'></iframe>";
+  const frame = div.childNodes[0];
+  const client = new frame.contentWindow.XMLHttpRequest();
+  client.open("GET", "/common/blank.html");
+  client.onabort = t.step_func_done();
+  client.send();
+  frame.contentDocument.open();
+}, "document.open() aborts documents that are navigating through iframe loading (XMLHttpRequest)");
+
+async_test(t => {
+  const div = document.body.appendChild(document.createElement("div"));
+  t.add_cleanup(() => div.remove());
+  div.innerHTML = "<iframe src='/common/slow.py'></iframe>";
+  const frame = div.childNodes[0];
+  frame.contentWindow.fetch("/common/blank.html").then(
+    t.unreached_func("Fetch should have been aborted"),
+    t.step_func_done());
+  frame.contentDocument.open();
+}, "document.open() aborts documents that are navigating through iframe loading (fetch())");
+
+// We cannot test for img element's error event for this test, as Firefox does
+// not fire the event if the fetch is aborted while Chrome does.
+//
+// We use /common/slow.py here as the source of the iframe, to prevent the
+// situation where when document.open() is called the initial about:blank
+// document has already become inactive.
+async_test(t => {
+  const div = document.body.appendChild(document.createElement("div"));
+  t.add_cleanup(() => div.remove());
+  div.innerHTML = "<iframe src='/common/slow.py'></iframe>";
+  const frame = div.childNodes[0];
+  let happened = false;
+  const img = frame.contentDocument.createElement("img");
+  img.src = new URL("resources/slow-png.py", document.URL);
+  img.onload = t.unreached_func("Image loading should not have succeeded");
+  // The image fetch starts in a microtask, so let's be sure to test after
+  // the fetch has started.
+  t.step_timeout(() => {
+    frame.contentDocument.open();
+    happened = true;
+  });
+  // If 3 seconds have passed and the image has still not loaded, we consider
+  // it aborted. slow-png.py only sleeps for 2 wallclock seconds.
+  t.step_timeout(t.step_func_done(() => {
+    assert_true(happened);
+  }), 3000);
+}, "document.open() aborts documents that are navigating through iframe loading (image loading)");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    const link = frame.contentDocument.body.appendChild(frame.contentDocument.createElement("a"));
+    link.href = new URL("resources/dummy.html", document.URL);
+
+    const client = new frame.contentWindow.XMLHttpRequest();
+    client.open("GET", "/common/blank.html");
+    client.onabort = t.step_func_done();
+    client.send();
+
+    link.click();
+    frame.contentDocument.open();
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() aborts documents that are queued for navigation through .click() (XMLHttpRequest)");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    const link = frame.contentDocument.body.appendChild(frame.contentDocument.createElement("a"));
+    link.href = new URL("resources/dummy.html", document.URL);
+
+    frame.contentWindow.fetch("/common/blank.html").then(
+      t.unreached_func("Fetch should have been aborted"),
+      t.step_func_done());
+
+    link.click();
+    frame.contentDocument.open();
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() aborts documents that are queued for navigation through .click() (fetch())");
+
+// We cannot test for img element's error event for this test, as Firefox does
+// not fire the event if the fetch is aborted while Chrome does.
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    const link = frame.contentDocument.body.appendChild(frame.contentDocument.createElement("a"));
+    link.href = new URL("resources/dummy.html", document.URL);
+
+    let happened = false;
+    const img = frame.contentDocument.createElement("img");
+    img.src = new URL("resources/slow-png.py", document.URL);
+    img.onload = t.unreached_func("Image loading should not have succeeded");
+    // The image fetch starts in a microtask, so let's be sure to test after
+    // the fetch has started.
+    t.step_timeout(() => {
+      link.click();
+      frame.contentDocument.open();
+      happened = true;
+    });
+    // If 3 seconds have passed and the image has still not loaded, we consider
+    // it aborted. slow-png.py only sleeps for 2 wallclock seconds.
+    t.step_timeout(t.step_func_done(() => {
+      assert_true(happened);
+    }), 3000);
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() aborts documents that are queued for navigation through .click() (image loading)");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort.sub.window.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort.sub.window.js
new file mode 100644
index 0000000..b2f05cf0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/abort.sub.window.js
@@ -0,0 +1,104 @@
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    const client = new frame.contentWindow.XMLHttpRequest();
+    client.open("GET", "/common/blank.html");
+    client.onload = t.step_func_done(e => {
+      assert_true(happened);
+    });
+    client.onerror = t.unreached_func("XMLHttpRequest should have succeeded");
+    client.onabort = t.unreached_func("XMLHttpRequest should have succeeded");
+    client.ontimeout = t.unreached_func("XMLHttpRequest should have succeeded");
+    client.send();
+    frame.contentDocument.open();
+    happened = true;
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() does not abort documents that are not navigating (XMLHttpRequest)");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    frame.contentWindow.fetch("/common/blank.html").then(
+      t.step_func_done(() => {
+        assert_true(happened);
+      }),
+      t.unreached_func("Fetch should have succeeded")
+    );
+    frame.contentDocument.open();
+    happened = true;
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() does not abort documents that are not navigating (fetch())");
+
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    const img = frame.contentDocument.createElement("img");
+    img.src = new URL("resources/slow-png.py", document.URL);
+    img.onload = t.step_func_done(() => {
+      assert_true(happened);
+    });
+    img.onerror = t.unreached_func("Image loading should not have errored");
+    // The image fetch starts in a microtask, so let's be sure to test after
+    // the fetch has started.
+    t.step_timeout(() => {
+      frame.contentDocument.open();
+      happened = true;
+    });
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() does not abort documents that are not navigating (image loading)");
+
+async_test(t => {
+  const __SERVER__NAME = "{{host}}";
+  const __PORT = {{ports[ws][0]}};
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    const ws = new frame.contentWindow.WebSocket(`ws://${__SERVER__NAME}:${__PORT}/echo`);
+    ws.onopen = t.step_func_done(() => {
+      assert_true(happened);
+    });
+    ws.onclose = t.unreached_func("WebSocket fetch should have succeeded");
+    ws.onerror = t.unreached_func("WebSocket should have no error");
+    frame.contentDocument.open();
+    happened = true;
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() does not abort documents that are not navigating (establish a WebSocket connection)");
+
+// An already established WebSocket connection shouldn't be terminated during
+// an "abort a document" anyway. Test just for completeness.
+async_test(t => {
+  const __SERVER__NAME = "{{host}}";
+  const __PORT = {{ports[ws][0]}};
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => frame.remove());
+  frame.onload = t.step_func(() => {
+    frame.onload = null;
+    let happened = false;
+    const ws = new frame.contentWindow.WebSocket(`ws://${__SERVER__NAME}:${__PORT}/echo`);
+    ws.onopen = t.step_func(() => {
+      t.step_timeout(t.step_func_done(() => {
+        assert_true(happened);
+      }), 100);
+      frame.contentDocument.open();
+      happened = true;
+    });
+    ws.onclose = t.unreached_func("WebSocket should not be closed");
+    ws.onerror = t.unreached_func("WebSocket should have no error");
+  });
+  frame.src = "/common/blank.html";
+}, "document.open() does not abort documents that are not navigating (already established WebSocket connection)");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.js
new file mode 100644
index 0000000..34e73146
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.js
@@ -0,0 +1,19 @@
+async_test(t => {
+  const frame = document.body.appendChild(document.createElement("iframe"));
+  t.add_cleanup(() => { frame.remove(); });
+  const originalHTMLElement = frame.contentDocument.documentElement;
+  assert_equals(originalHTMLElement.localName, "html");
+  const observer = new frame.contentWindow.MutationObserver(t.step_func_done(records => {
+    // Even though we passed `subtree: true` to observer.observe, due to the
+    // fact that "replace all" algorithm removes children with the "suppress
+    // observers flag" set, we still only get the html element as the sole
+    // removed node.
+    assert_equals(records.length, 1);
+    assert_equals(records[0].type, "childList");
+    assert_equals(records[0].target, frame.contentDocument);
+    assert_array_equals(records[0].addedNodes, []);
+    assert_array_equals(records[0].removedNodes, [originalHTMLElement]);
+  }));
+  observer.observe(frame.contentDocument, { childList: true, subtree: true });
+  assert_equals(frame.contentDocument.open(), frame.contentDocument);
+}, "document.open() should inform mutation observer of node removal");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/http-refresh.py b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/http-refresh.py
new file mode 100644
index 0000000..d2acd43
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/http-refresh.py
@@ -0,0 +1,3 @@
+def main(request, response):
+    time = request.url_parts.query if request.url_parts.query else '0'
+    return 200, [['Refresh', time]], ''
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/meta-refresh.py b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/meta-refresh.py
new file mode 100644
index 0000000..dd3cef44
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/meta-refresh.py
@@ -0,0 +1,5 @@
+import time
+
+def main(request, response):
+    time = request.url_parts.query if request.url_parts.query else '0'
+    return 200, [['Content-Type', 'text/html']], '<meta http-equiv=refresh content=%s>' % time
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/slow-png.py b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/slow-png.py
new file mode 100644
index 0000000..5fa2fd9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/slow-png.py
@@ -0,0 +1,8 @@
+from base64 import decodestring
+import time
+
+png_response = decodestring('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGNiAAAABgADNjd8qAAAAABJRU5ErkJggg==')
+
+def main(request, response):
+    time.sleep(2)
+    return 200, [], png_response
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-expected.txt
index 52f0a08..300eecb 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 700 tests; 632 PASS, 68 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 701 tests; 633 PASS, 68 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Setup
 PASS align-content (type: discrete) has testInterpolation function
 PASS align-content uses discrete animation when animating between "flex-start" and "flex-end" with linear easing
@@ -652,6 +652,7 @@
 PASS transform: non-invertible matrices
 FAIL transform: non-invertible matrices in matched transform lists assert_approx_equals: expected matrix(0,-1,1,0,250,0) but got matrix(0.705995, -0.708217, 0.708217, 0.705995, 274.95, 0): The value should be matrix(0,-1,1,0,250,0) at 499ms but got matrix(0.705995, -0.708217, 0.708217, 0.705995, 274.95, 0) expected 0 +/- 0.0001 but got 0.705995
 PASS transform: non-invertible matrices in mismatched transform lists
+PASS transform: perspective
 PASS transform-box (type: discrete) has testInterpolation function
 FAIL transform-box uses discrete animation when animating between "fill-box" and "border-box" with linear easing assert_equals: The value should be border-box at 500ms expected "border-box" but got "view-box"
 FAIL transform-box uses discrete animation when animating between "fill-box" and "border-box" with effect easing assert_equals: The value should be border-box at 960ms expected "border-box" but got "view-box"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-animations/animation-model/animation-types/property-types.js b/third_party/WebKit/LayoutTests/external/wpt/web-animations/animation-model/animation-types/property-types.js
index 5bafb20..232a508 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/web-animations/animation-model/animation-types/property-types.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/web-animations/animation-model/animation-types/property-types.js
@@ -1068,6 +1068,23 @@
           { time: 500,  expected: [  1, 1, 1,  1, 100, 100 ] },
           { time: 1000, expected: [  1, 1, 1,  1, 100, 100 ] }]);
     }, `${property}: non-invertible matrices in mismatched transform lists`);
+
+    test(t => {
+      const idlName = propertyToIDL(property);
+      const target = createTestElement(t, setup);
+      const animation = target.animate(
+        {
+          [idlName]: ['perspective(0)', 'perspective(10px)'],
+        },
+        1000
+      );
+      testAnimationSampleMatrices(animation, idlName,
+        [{ time: 500,  expected: [ 1, 0, 0, 0,
+                                   0, 1, 0, 0,
+                                   0, 0, 1, -0.05,
+                                   0, 0, 0, 1 ] }]);
+    }, `${property}: perspective`);
+
   },
 
   testAddition: function(property, setup) {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-oscillatornode-interface/detune-limiting.html b/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-oscillatornode-interface/detune-limiting.html
new file mode 100644
index 0000000..81a1293
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-oscillatornode-interface/detune-limiting.html
@@ -0,0 +1,154 @@
+<!doctype html>
+<html>
+  <head>
+    <title>
+      Oscillator Detune Limits
+    </title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="/webaudio/resources/audit.js"></script>
+  </head>
+
+  <body>
+    <script>
+      const sampleRate = 44100;
+      const renderLengthSeconds = 0.125;
+
+      let audit = Audit.createTaskRunner();
+
+      audit.define(
+          {
+            label: 'detune limits',
+            description:
+                'Oscillator with detune and frequency at Nyquist or above'
+          },
+          (task, should) => {
+            let context = new OfflineAudioContext(
+                2, renderLengthSeconds * sampleRate, sampleRate);
+
+            let merger = new ChannelMergerNode(
+                context, {numberOfInputs: context.destination.channelCount});
+            merger.connect(context.destination);
+
+            // For test oscillator, set the oscillator frequency to -Nyquist and
+            // set detune to be a large number that would cause the detuned
+            // frequency to be way above Nyquist.
+            const oscFrequency = 1;
+            const detunedFrequency = sampleRate;
+            const detuneValue = Math.fround(1200 * Math.log2(detunedFrequency));
+
+            let testOsc = new OscillatorNode(
+                context, {frequency: oscFrequency, detune: detuneValue});
+            testOsc.connect(merger, 0, 1);
+
+            // For the reference oscillator, determine the computed oscillator
+            // frequency using the values above and set that as the oscillator
+            // frequency.
+            let computedFreq = oscFrequency * Math.pow(2, detuneValue / 1200);
+
+            let refOsc = new OscillatorNode(context, {frequency: computedFreq});
+            refOsc.connect(merger, 0, 0);
+
+            // Start 'em up and render
+            testOsc.start();
+            refOsc.start();
+
+            context.startRendering()
+                .then(renderedBuffer => {
+                  let expected = renderedBuffer.getChannelData(0);
+                  let actual = renderedBuffer.getChannelData(1);
+
+                  // Let user know about the smaple rate so following messages
+                  // make more sense.
+                  should(context.sampleRate, 'Context sample rate')
+                    .beEqualTo(context.sampleRate);
+
+                  // Since the frequency is at Nyquist, the reference oscillator
+                  // output should be zero.
+                  should(
+                      refOsc.frequency.value, 'Reference oscillator frequency')
+                      .beGreaterThanOrEqualTo(context.sampleRate / 2);
+                  should(
+                      expected, `Osc(freq: ${refOsc.frequency.value}) output`)
+                      .beConstantValueOf(0);
+                  // The output from each oscillator should be the same.
+                  should(
+                      actual,
+                      'Osc(freq: ' + oscFrequency + ', detune: ' + detuneValue +
+                          ') output')
+                      .beCloseToArray(expected, {absoluteThreshold: 0});
+
+                })
+                .then(() => task.done());
+          });
+
+      audit.define(
+          {
+            label: 'detune automation',
+            description:
+                'Oscillator output with detune automation should be zero ' +
+                'above Nyquist'
+          },
+          (task, should) => {
+            let context = new OfflineAudioContext(
+                1, renderLengthSeconds * sampleRate, sampleRate);
+
+            const baseFrequency = 1;
+            const rampEnd = renderLengthSeconds / 2;
+            const detuneEnd = 1e7;
+
+            let src = new OscillatorNode(context, {frequency: baseFrequency});
+            src.detune.linearRampToValueAtTime(detuneEnd, rampEnd);
+
+            src.connect(context.destination);
+
+            src.start();
+
+            context.startRendering()
+                .then(renderedBuffer => {
+                  let audio = renderedBuffer.getChannelData(0);
+
+                  // At some point, the computed oscillator frequency will go
+                  // above Nyquist.  Determine at what time this occurrs.  The
+                  // computed frequency is f * 2^(d/1200) where |f| is the
+                  // oscillator frequency and |d| is the detune value.  Thus,
+                  // find |d| such that Nyquist = f*2^(d/1200). That is, d =
+                  // 1200*log2(Nyquist/f)
+                  let criticalDetune =
+                      1200 * Math.log2(context.sampleRate / 2 / baseFrequency);
+
+                  // Now figure out at what point on the linear ramp does the
+                  // detune value reach this critical value.  For a linear ramp:
+                  //
+                  //   v(t) = V0+(V1-V0)*(t-T0)/(T1-T0)
+                  //
+                  // Thus,
+                  //
+                  //   t = ((T1-T0)*v(t) + T0*V1 - T1*V0)/(V1-V0)
+                  //
+                  // In this test, T0 = 0, V0 = 0, T1 = rampEnd, V1 =
+                  // detuneEnd, and v(t) = criticalDetune
+                  let criticalTime = (rampEnd * criticalDetune) / detuneEnd;
+                  let criticalFrame =
+                      Math.ceil(criticalTime * context.sampleRate);
+
+                  should(
+                      criticalFrame,
+                      `Frame where detuned oscillator reaches Nyquist`)
+                      .beEqualTo(criticalFrame);
+
+                  should(
+                      audio.slice(0, criticalFrame),
+                      `osc[0:${criticalFrame - 1}]`)
+                      .notBeConstantValueOf(0);
+
+                  should(audio.slice(criticalFrame), `osc[${criticalFrame}:]`)
+                      .beConstantValueOf(0);
+                })
+                .then(() => task.done());
+          });
+
+      audit.run();
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
index 5cb0e6a..116ad8fc 100644
--- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
@@ -13,7 +13,6 @@
     },
     {
       "name": "LayoutBlockFlow HTML",
-      "position": [-216, 0],
       "bounds": [1016, 128],
       "backgroundColor": "#008000",
       "paintInvalidations": [
@@ -22,6 +21,18 @@
           "rect": [0, 0, 1016, 128],
           "reason": "style change"
         }
+      ],
+      "transform": 1
+    }
+  ],
+  "transforms": [
+    {
+      "id": 1,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [-216, 0, 0, 1]
       ]
     }
   ]
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-correct-suggestions-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-correct-suggestions-expected.txt
index 1268482..99e0a66 100644
--- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-correct-suggestions-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-correct-suggestions-expected.txt
@@ -258,4 +258,9 @@
 Found: thePrefix
 Found: thePrefixAndTheSuffix
 
+Checking 'objWithMethod.method'
+Found: method
+Found: methodWithSuffix
+Default suggestion: method
+
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-correct-suggestions.js b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-correct-suggestions.js
index 56eedbf..06e4c0b0 100644
--- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-correct-suggestions.js
+++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-correct-suggestions.js
@@ -36,6 +36,11 @@
     }
     var thePrefix = true;
     var thePrefixAndTheSuffix = true;
+    class ClassWithMethod {
+        method(){}
+    }
+    const objWithMethod = new ClassWithMethod();
+    objWithMethod.methodWithSuffix = true;
   `);
 
   var consoleEditor;
@@ -44,8 +49,9 @@
    * @param {string} text
    * @param {!Array<string>} expected
    * @param {boolean=} force
+   * @param {boolean=} reportDefault
    */
-  async function testCompletions(text, expected, force) {
+  async function testCompletions(text, expected, force, reportDefault) {
     var cursorPosition = text.indexOf('|');
 
     if (cursorPosition < 0)
@@ -87,6 +93,14 @@
       }
     }
 
+    if (reportDefault) {
+        const defaultSuggestion = suggestions.reduce((a, b) => (a.priority || 0) >= (b.priority || 0) ? a : b);
+        if (defaultSuggestion.title)
+            TestRunner.addResult(`Default suggestion: ${defaultSuggestion.text}, displayed as ${defaultSuggestion.title}`);
+        else
+            TestRunner.addResult(`Default suggestion: ${defaultSuggestion.text}`);
+    }
+
     if (await TestRunner.evaluateInPagePromise('cantTouchThis') !== false) {
       TestRunner.addResult('ERROR! Side effects were detected!');
       await TestRunner.evaluateInPagePromise('cantTouchThis = false');
@@ -205,5 +219,6 @@
     () => testCompletions(
         'shouldNot|FindThisFunction()', ['shouldNotFindThisFunction']),
     () => testCompletions('thePrefix', ['thePrefix', 'thePrefixAndTheSuffix']),
+    () => testCompletions('objWithMethod.method', ['method', 'methodWithSuffix'], false, true),
   ]).then(TestRunner.completeTest);
 })();
diff --git a/third_party/WebKit/LayoutTests/paint/background/background-clip-text-descendants-expected.html b/third_party/WebKit/LayoutTests/paint/background/background-clip-text-descendants-expected.html
new file mode 100644
index 0000000..deee47e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/paint/background/background-clip-text-descendants-expected.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<style>
+body {
+  font-size: 40px;
+}
+.transformed {
+  transform: translateX(0);
+}
+.clip-text {
+  background: blue;
+  -webkit-background-clip: text;
+  color: rgba(255,0,0,0.5);
+  clear: both;
+}
+</style>
+Passes if all texts are purple.
+<div class="clip-text">Block</div>
+<div class="clip-text">Block transformed</div>
+<div><div class="clip-text" style="float:left">Float</div><br></div>
+<div><div class="clip-text" style="float:left">Float transformed</div><br></div>
+<table><tr><td class="clip-text">Table</td></tr></table>
+<table><tr><td class="clip-text">Table transformed</td></tr></table>
+Except these (inline-block is not supported for text background clip yet):
+<div style="color: rgba(255,0,0,0.5"><div style="display: inline-block">Inline block</div></div>
+<div style="color: rgba(255,0,0,0.5"><div style="display: inline-block">Inline block transformed</div></div>
diff --git a/third_party/WebKit/LayoutTests/paint/background/background-clip-text-descendants.html b/third_party/WebKit/LayoutTests/paint/background/background-clip-text-descendants.html
new file mode 100644
index 0000000..4e06c95d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/paint/background/background-clip-text-descendants.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<style>
+body {
+  font-size: 40px;
+}
+.transformed {
+  transform: translateX(0);
+}
+.clip-text {
+  background: blue;
+  -webkit-background-clip: text;
+  color: rgba(255,0,0,0.5);
+}
+</style>
+Passes if all texts are purple.
+<div class="clip-text"><div>Block</div></div>
+<div class="clip-text transformed"><div>Block transformed</div></div>
+<div class="clip-text"><div style="float:left">Float</div><br></div>
+<div class="clip-text transformed"><div style="float:left">Float transformed</div><br></div>
+<table class="clip-text"><tr><td>Table</td></tr></table>
+<table class="clip-text transformed"><tr><td>Table transformed</td></tr></table>
+Except these (inline-block is not supported for text background clip yet):
+<div class="clip-text"><div style="display: inline-block">Inline block</div></div>
+<div class="clip-text transformed"><div style="display: inline-block">Inline block transformed</div></div>
diff --git a/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-nominal-range-expected.txt b/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-nominal-range-expected.txt
index 66cd834..eb81666d 100644
--- a/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-nominal-range-expected.txt
+++ b/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-nominal-range-expected.txt
@@ -1,43 +1,47 @@
-CONSOLE WARNING: line 209: The Web Audio autoplay policy will be re-enabled in Chrome 70 (October 2018). Please check that your website is compatible with it. https://goo.gl/7K7WLu
-CONSOLE WARNING: line 392: Delay.delayTime.value -1 outside nominal range [0, 1.5]; value will be clamped.
-CONSOLE WARNING: line 392: Delay.delayTime.setValueAtTime value -1 outside nominal range [0, 1.5]; value will be clamped.
-CONSOLE WARNING: line 404: Delay.delayTime.value 4 outside nominal range [0, 1.5]; value will be clamped.
-CONSOLE WARNING: line 404: Delay.delayTime.setValueAtTime value 4 outside nominal range [0, 1.5]; value will be clamped.
-CONSOLE WARNING: line 392: StereoPanner.pan.value -3 outside nominal range [-1, 1]; value will be clamped.
-CONSOLE WARNING: line 392: StereoPanner.pan.setValueAtTime value -3 outside nominal range [-1, 1]; value will be clamped.
-CONSOLE WARNING: line 404: StereoPanner.pan.value 3 outside nominal range [-1, 1]; value will be clamped.
-CONSOLE WARNING: line 404: StereoPanner.pan.setValueAtTime value 3 outside nominal range [-1, 1]; value will be clamped.
-CONSOLE WARNING: line 392: DynamicsCompressor.threshold.value -201 outside nominal range [-100, 0]; value will be clamped.
-CONSOLE WARNING: line 392: DynamicsCompressor.threshold.setValueAtTime value -201 outside nominal range [-100, 0]; value will be clamped.
-CONSOLE WARNING: line 404: DynamicsCompressor.threshold.value 1 outside nominal range [-100, 0]; value will be clamped.
-CONSOLE WARNING: line 404: DynamicsCompressor.threshold.setValueAtTime value 1 outside nominal range [-100, 0]; value will be clamped.
-CONSOLE WARNING: line 392: DynamicsCompressor.knee.value -1 outside nominal range [0, 40]; value will be clamped.
-CONSOLE WARNING: line 392: DynamicsCompressor.knee.setValueAtTime value -1 outside nominal range [0, 40]; value will be clamped.
-CONSOLE WARNING: line 404: DynamicsCompressor.knee.value 81 outside nominal range [0, 40]; value will be clamped.
-CONSOLE WARNING: line 404: DynamicsCompressor.knee.setValueAtTime value 81 outside nominal range [0, 40]; value will be clamped.
-CONSOLE WARNING: line 404: DynamicsCompressor.ratio.value 41 outside nominal range [1, 20]; value will be clamped.
-CONSOLE WARNING: line 404: DynamicsCompressor.ratio.setValueAtTime value 41 outside nominal range [1, 20]; value will be clamped.
-CONSOLE WARNING: line 392: DynamicsCompressor.attack.value -1 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 392: DynamicsCompressor.attack.setValueAtTime value -1 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 404: DynamicsCompressor.attack.value 3 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 404: DynamicsCompressor.attack.setValueAtTime value 3 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 392: DynamicsCompressor.release.value -1 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 392: DynamicsCompressor.release.setValueAtTime value -1 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 404: DynamicsCompressor.release.value 3 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 404: DynamicsCompressor.release.setValueAtTime value 3 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 392: BiquadFilter.frequency.value -1 outside nominal range [0, 24000]; value will be clamped.
-CONSOLE WARNING: line 392: BiquadFilter.frequency.setValueAtTime value -1 outside nominal range [0, 24000]; value will be clamped.
-CONSOLE WARNING: line 404: BiquadFilter.frequency.value 48001 outside nominal range [0, 24000]; value will be clamped.
-CONSOLE WARNING: line 404: BiquadFilter.frequency.setValueAtTime value 48001 outside nominal range [0, 24000]; value will be clamped.
-CONSOLE WARNING: line 392: Oscillator.frequency.value -48001 outside nominal range [-24000, 24000]; value will be clamped.
-CONSOLE WARNING: line 392: Oscillator.frequency.setValueAtTime value -48001 outside nominal range [-24000, 24000]; value will be clamped.
-CONSOLE WARNING: line 404: Oscillator.frequency.value 48001 outside nominal range [-24000, 24000]; value will be clamped.
-CONSOLE WARNING: line 404: Oscillator.frequency.setValueAtTime value 48001 outside nominal range [-24000, 24000]; value will be clamped.
-CONSOLE WARNING: line 323: Delay.delayTime.setValueAtTime value -1 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 324: Delay.delayTime.linearRampToValueAtTime value 2 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 325: Delay.delayTime.exponentialRampToValue value 3 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 326: Delay.delayTime.setTargetAtTime value -1 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 327: Delay.delayTime.setValueCurveAtTime value 1.5 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 212: The Web Audio autoplay policy will be re-enabled in Chrome 70 (October 2018). Please check that your website is compatible with it. https://goo.gl/7K7WLu
+CONSOLE WARNING: line 395: Delay.delayTime.value -1 outside nominal range [0, 1.5]; value will be clamped.
+CONSOLE WARNING: line 395: Delay.delayTime.setValueAtTime value -1 outside nominal range [0, 1.5]; value will be clamped.
+CONSOLE WARNING: line 407: Delay.delayTime.value 4 outside nominal range [0, 1.5]; value will be clamped.
+CONSOLE WARNING: line 407: Delay.delayTime.setValueAtTime value 4 outside nominal range [0, 1.5]; value will be clamped.
+CONSOLE WARNING: line 395: StereoPanner.pan.value -3 outside nominal range [-1, 1]; value will be clamped.
+CONSOLE WARNING: line 395: StereoPanner.pan.setValueAtTime value -3 outside nominal range [-1, 1]; value will be clamped.
+CONSOLE WARNING: line 407: StereoPanner.pan.value 3 outside nominal range [-1, 1]; value will be clamped.
+CONSOLE WARNING: line 407: StereoPanner.pan.setValueAtTime value 3 outside nominal range [-1, 1]; value will be clamped.
+CONSOLE WARNING: line 395: DynamicsCompressor.threshold.value -201 outside nominal range [-100, 0]; value will be clamped.
+CONSOLE WARNING: line 395: DynamicsCompressor.threshold.setValueAtTime value -201 outside nominal range [-100, 0]; value will be clamped.
+CONSOLE WARNING: line 407: DynamicsCompressor.threshold.value 1 outside nominal range [-100, 0]; value will be clamped.
+CONSOLE WARNING: line 407: DynamicsCompressor.threshold.setValueAtTime value 1 outside nominal range [-100, 0]; value will be clamped.
+CONSOLE WARNING: line 395: DynamicsCompressor.knee.value -1 outside nominal range [0, 40]; value will be clamped.
+CONSOLE WARNING: line 395: DynamicsCompressor.knee.setValueAtTime value -1 outside nominal range [0, 40]; value will be clamped.
+CONSOLE WARNING: line 407: DynamicsCompressor.knee.value 81 outside nominal range [0, 40]; value will be clamped.
+CONSOLE WARNING: line 407: DynamicsCompressor.knee.setValueAtTime value 81 outside nominal range [0, 40]; value will be clamped.
+CONSOLE WARNING: line 407: DynamicsCompressor.ratio.value 41 outside nominal range [1, 20]; value will be clamped.
+CONSOLE WARNING: line 407: DynamicsCompressor.ratio.setValueAtTime value 41 outside nominal range [1, 20]; value will be clamped.
+CONSOLE WARNING: line 395: DynamicsCompressor.attack.value -1 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 395: DynamicsCompressor.attack.setValueAtTime value -1 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 407: DynamicsCompressor.attack.value 3 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 407: DynamicsCompressor.attack.setValueAtTime value 3 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 395: DynamicsCompressor.release.value -1 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 395: DynamicsCompressor.release.setValueAtTime value -1 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 407: DynamicsCompressor.release.value 3 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 407: DynamicsCompressor.release.setValueAtTime value 3 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 395: BiquadFilter.frequency.value -1 outside nominal range [0, 24000]; value will be clamped.
+CONSOLE WARNING: line 395: BiquadFilter.frequency.setValueAtTime value -1 outside nominal range [0, 24000]; value will be clamped.
+CONSOLE WARNING: line 407: BiquadFilter.frequency.value 48001 outside nominal range [0, 24000]; value will be clamped.
+CONSOLE WARNING: line 407: BiquadFilter.frequency.setValueAtTime value 48001 outside nominal range [0, 24000]; value will be clamped.
+CONSOLE WARNING: line 395: Oscillator.frequency.value -48001 outside nominal range [-24000, 24000]; value will be clamped.
+CONSOLE WARNING: line 395: Oscillator.frequency.setValueAtTime value -48001 outside nominal range [-24000, 24000]; value will be clamped.
+CONSOLE WARNING: line 407: Oscillator.frequency.value 48001 outside nominal range [-24000, 24000]; value will be clamped.
+CONSOLE WARNING: line 407: Oscillator.frequency.setValueAtTime value 48001 outside nominal range [-24000, 24000]; value will be clamped.
+CONSOLE WARNING: line 395: Oscillator.detune.value -307201 outside nominal range [-153600, 153600]; value will be clamped.
+CONSOLE WARNING: line 395: Oscillator.detune.setValueAtTime value -307201 outside nominal range [-153600, 153600]; value will be clamped.
+CONSOLE WARNING: line 407: Oscillator.detune.value 307201 outside nominal range [-153600, 153600]; value will be clamped.
+CONSOLE WARNING: line 407: Oscillator.detune.setValueAtTime value 307201 outside nominal range [-153600, 153600]; value will be clamped.
+CONSOLE WARNING: line 326: Delay.delayTime.setValueAtTime value -1 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 327: Delay.delayTime.linearRampToValueAtTime value 2 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 328: Delay.delayTime.exponentialRampToValue value 3 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 329: Delay.delayTime.setTargetAtTime value -1 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 330: Delay.delayTime.setValueCurveAtTime value 1.5 outside nominal range [0, 1]; value will be clamped.
 This is a testharness.js-based test.
 PASS # AUDIT TASK RUNNER STARTED.
 PASS > [initialize] 
@@ -180,14 +184,17 @@
 PASS   Set OscillatorNode.frequency.value = -48001 is equal to -24000.
 PASS   Set OscillatorNode.frequency.value = 48001 is equal to 24000.
 PASS   OscillatorNode.frequencywas clipped to lie within the nominal range is equal to true.
-PASS   OscillatorNode.detune.minValue is equal to -3.4028234663852886e+38.
-PASS   OscillatorNode.detune.maxValue is equal to 3.4028234663852886e+38.
+PASS   OscillatorNode.detune.minValue is equal to -153600.
+PASS   OscillatorNode.detune.maxValue is equal to 153600.
 PASS   OscillatorNode.detune.minValue = Math.PI is not equal to 3.141592653589793.
 PASS   OscillatorNode.detune.minValue is read-only is equal to true.
 PASS   OscillatorNode.detune.maxValue = Math.PI is not equal to 3.141592653589793.
 PASS   OscillatorNode.detune.maxValue is read-only is equal to true.
+PASS   Set OscillatorNode.detune.value = -307201 is equal to -153600.
+PASS   Set OscillatorNode.detune.value = 307201 is equal to 153600.
+PASS   OscillatorNode.detunewas clipped to lie within the nominal range is equal to true.
 PASS   Nominal ranges for AudioParam(s) of OscillatorNode are correct
-PASS < [Offline createOscillator] All assertions passed. (total 16 assertions)
+PASS < [Offline createOscillator] All assertions passed. (total 19 assertions)
 PASS > [Offline createPanner] 
 PASS   PannerNode.positionX.minValue is equal to -3.4028234663852886e+38.
 PASS   PannerNode.positionX.maxValue is equal to 3.4028234663852886e+38.
diff --git a/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-nominal-range.html b/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-nominal-range.html
index a1d7de8f..13eb074b 100644
--- a/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-nominal-range.html
+++ b/third_party/WebKit/LayoutTests/webaudio/AudioParam/audioparam-nominal-range.html
@@ -112,8 +112,11 @@
           args: [],
           limits: {
             frequency: {minValue: -sampleRate / 2, maxValue: sampleRate / 2},
-            detune:
-                {minValue: -mostPositiveFloat, maxValue: mostPositiveFloat}
+            detune: {
+              // 3.4028..e38 is the most positive single float value.
+              minValue: -Math.fround(1200 * Math.log2(3.4028234663852886e38)),
+              maxValue: Math.fround(1200 * Math.log2(3.4028234663852886e38))
+            }
           }
         },
         {
diff --git a/third_party/blink/public/mojom/feature_policy/feature_policy.mojom b/third_party/blink/public/mojom/feature_policy/feature_policy.mojom
index ecf3e71b..c58c2f5 100644
--- a/third_party/blink/public/mojom/feature_policy/feature_policy.mojom
+++ b/third_party/blink/public/mojom/feature_policy/feature_policy.mojom
@@ -38,64 +38,68 @@
 enum FeaturePolicyFeature {
   kNotFound = 0,
   // Controls access to media autoplay.
-  kAutoplay,
+  kAutoplay = 1,
   // Controls access to video input devices.
-  kCamera,
+  kCamera = 2,
   // Controls whether navigator.requestMediaKeySystemAccess is allowed.
-  kEncryptedMedia,
+  kEncryptedMedia = 3,
   // Controls whether Element.requestFullscreen is allowed.
-  kFullscreen,
+  kFullscreen = 4,
   // Controls access to Geolocation interface.
-  kGeolocation,
+  kGeolocation = 5,
   // Controls access to audio input devices.
-  kMicrophone,
+  kMicrophone = 6,
   // Controls access to requestMIDIAccess method.
-  kMidiFeature,
+  kMidiFeature = 7,
   // Controls access to PaymentRequest interface.
-  kPayment,
+  kPayment = 8,
   // Controls access to audio output devices.
-  kSpeaker,
+  kSpeaker = 9,
   // Controls access to document.cookie attribute.
-  kDocumentCookie,
+  kDocumentCookie = 10,
   // Contols access to document.domain attribute.
-  kDocumentDomain,
+  kDocumentDomain = 11,
   // Controls whether synchronous script elements will run.
-  kSyncScript,
+  kSyncScript = 12,
   // Controls use of synchronous XMLHTTPRequest API.
-  kSyncXHR,
+  kSyncXHR = 13,
   // Controls access to the WebUSB API.
-  kUsb,
+  kUsb = 14,
   // Controls access to AOM event listeners.
-  kAccessibilityEvents,
+  kAccessibilityEvents = 15,
   // Controls use of WebVR API.
-  kWebVr,
+  kWebVr = 16,
   // The following features control access to the corresponding sensor classes.
   // Fusion sensor APIs (e.g. LinearAcceleration, OrientationSensor-based
   // classes)require all of the features that are inputs into that API to be
   // enabled for the feature to be allowed.
-  kAccelerometer,
-  kAmbientLightSensor,
-  kGyroscope,
-  kMagnetometer,
+  kAccelerometer = 17,
+  kAmbientLightSensor = 18,
+  kGyroscope = 19,
+  kMagnetometer = 20,
   // Controls the layout size of intrinsically sized images and videos. When
   // disabled, default size (300 x 150) is used to prevent relayout.
-  kUnsizedMedia,
+  kUnsizedMedia = 21,
   // Controls which image formats are allowed to be used in the document.
-  kLegacyImageFormats,
+  kLegacyImageFormats = 22,
   // When disallowed, requires images to have a reasonable byte-to-pixel ratio.
-  kImageCompression,
-  kAnimations,
+  kImageCompression = 23,
+  kAnimations = 24,
   // When disallowed, restricts source image size to be no more 2x larger than
   // the image's containing block.
-  kMaxDownscalingImage,
+  kMaxDownscalingImage = 25,
   // Controls access to Picture-in-Picture.
-  kPictureInPicture,
+  kPictureInPicture = 26,
   // Controls the ability to block and interfere with vertical scrolling.
-  kVerticalScroll,
+  kVerticalScroll = 27,
   // Controls the ability of the document to use several dynamic markup API
   // which interfere with document's input stream (document.write(),
   // document.close(), etc.).
-  kDocumentWrite,
+  kDocumentWrite = 28,
+
+  // Don't change assigned numbers of any item, and don't reuse removed slots.
+  // Also, run update_feature_policy_enum.py in
+  // chromium/src/tools/metrics/histograms/ to update the UMA mapping.
 };
 
 // This struct holds feature policy allowlist data that needs to be replicated
diff --git a/third_party/blink/public/mojom/payments/payment_request.mojom b/third_party/blink/public/mojom/payments/payment_request.mojom
index 7c8cf67..2227c2f 100644
--- a/third_party/blink/public/mojom/payments/payment_request.mojom
+++ b/third_party/blink/public/mojom/payments/payment_request.mojom
@@ -153,6 +153,7 @@
   array<PaymentShippingOption> shipping_options;
   array<PaymentDetailsModifier> modifiers;
   string error = "";
+  AddressErrors? shipping_address_errors;
   // Identifier identifying the payment request, to be exposed
   // to payment apps. It is optional since this structure is used
   // by PaymentDetailsUpdate (next to PaymentDetailsInit) but
diff --git a/third_party/blink/public/platform/web_feature.mojom b/third_party/blink/public/platform/web_feature.mojom
index 1102d3d..06e6910 100644
--- a/third_party/blink/public/platform/web_feature.mojom
+++ b/third_party/blink/public/platform/web_feature.mojom
@@ -1994,6 +1994,7 @@
   kTextEncoderStreamConstructor = 2539,
   kTextDecoderStreamConstructor = 2540,
   kSignedExchangeInnerResponse = 2541,
+  kPaymentAddressLanguageCode = 2542,
 
   // Add new features immediately above this line. Don't change assigned
   // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/platform/web_mouse_wheel_event.h b/third_party/blink/public/platform/web_mouse_wheel_event.h
index bc734f63..9744639 100644
--- a/third_party/blink/public/platform/web_mouse_wheel_event.h
+++ b/third_party/blink/public/platform/web_mouse_wheel_event.h
@@ -37,6 +37,19 @@
     kPhaseMayBegin = 1 << 5,
   };
 
+  // A hint at the outcome of a wheel event should it not get canceled.
+  enum class EventAction : int {
+    // When the wheel event would result in page zoom,
+    kPageZoom = 0,
+    // When the wheel event would scroll but the direction is not (known to be)
+    // fixed to a certain axis,
+    kScroll,
+    // When the wheel event would scroll along X axis,
+    kScrollHorizontal,
+    // When the wheel event would scroll along Y axis,
+    kScrollVertical
+  };
+
   float delta_x;
   float delta_y;
   float wheel_ticks_x;
@@ -68,6 +81,9 @@
   // listeners were passive or was forced to be non-blocking.
   DispatchType dispatch_type;
 
+  // The expected result of this wheel event (if not canceled).
+  EventAction event_action;
+
   WebMouseWheelEvent(Type type, int modifiers, base::TimeTicks time_stamp)
       : WebMouseEvent(sizeof(WebMouseWheelEvent),
                       type,
diff --git a/third_party/blink/public/web/web_remote_frame.h b/third_party/blink/public/web/web_remote_frame.h
index 6f6fd06..2addfb254 100644
--- a/third_party/blink/public/web/web_remote_frame.h
+++ b/third_party/blink/public/web/web_remote_frame.h
@@ -138,6 +138,8 @@
 
   virtual WebRect GetCompositingRect() = 0;
 
+  virtual bool OOPIFHasPointerEventsNone() const = 0;
+
  protected:
   explicit WebRemoteFrame(WebTreeScopeType scope) : WebFrame(scope) {}
 
diff --git a/third_party/blink/public/web/web_remote_frame_client.h b/third_party/blink/public/web/web_remote_frame_client.h
index de85c47..d57c8e7 100644
--- a/third_party/blink/public/web/web_remote_frame_client.h
+++ b/third_party/blink/public/web/web_remote_frame_client.h
@@ -56,6 +56,9 @@
   // Set inherited effective touch action on the remote frame.
   virtual void SetInheritedEffectiveTouchAction(blink::WebTouchAction) {}
 
+  // Update pointer-events property on the remote frame.
+  virtual void PointerEventsChanged() {}
+
   // Toggles render throttling for the remote frame.
   virtual void UpdateRenderThrottlingStatus(bool is_throttled,
                                             bool subtree_throttled) {}
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
index f8b8fea..19d3ad9e 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
+++ b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
@@ -305,9 +305,7 @@
   suppressed_reason_ = reason;
 }
 
-namespace {
-
-void RunScriptStreamingTask(
+static void RunScriptStreamingTask(
     std::unique_ptr<v8::ScriptCompiler::ScriptStreamingTask> task,
     ScriptStreamer* streamer) {
   TRACE_EVENT1(
@@ -320,23 +318,6 @@
   streamer->StreamingCompleteOnBackgroundThread();
 }
 
-void RunBlockingScriptStreamingTask(
-    std::unique_ptr<v8::ScriptCompiler::ScriptStreamingTask> task,
-    ScriptStreamer* streamer,
-    std::atomic_flag* blocking_task_started_or_cancelled) {
-  if (blocking_task_started_or_cancelled->test_and_set())
-    return;
-  RunScriptStreamingTask(std::move(task), streamer);
-}
-
-void RunNonBlockingScriptStreamingTask(
-    std::unique_ptr<v8::ScriptCompiler::ScriptStreamingTask> task,
-    ScriptStreamer* streamer) {
-  RunScriptStreamingTask(std::move(task), streamer);
-}
-
-}  // namespace
-
 bool ScriptStreamer::HasEnoughDataForStreaming(size_t resource_buffer_size) {
   if (RuntimeEnabledFeatures::ScheduledScriptStreamingEnabled()) {
     // Enable streaming for small scripts, but we must still check the BOM
@@ -424,24 +405,17 @@
     }
 
     if (RuntimeEnabledFeatures::ScheduledScriptStreamingEnabled()) {
-      // Script streaming tasks are high priority, as they can block the parser,
-      // and they can (and probably will) block during their own execution as
-      // they wait for more input.
-      //
-      // Pass through the atomic cancellation token which is set to true by the
-      // task when it is started, or set to true by the streamer if it wants to
-      // cancel the task.
+      // Script streaming tasks are high priority, as they can block the
+      // parser, and they can (and probably will) block during their own
+      // execution as they wait for more input.
       //
       // TODO(leszeks): Decrease the priority of these tasks where possible.
       BackgroundScheduler::PostOnBackgroundThreadWithTraits(
           FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()},
-          CrossThreadBind(RunBlockingScriptStreamingTask,
+          CrossThreadBind(RunScriptStreamingTask,
                           WTF::Passed(std::move(script_streaming_task)),
-                          WrapCrossThreadPersistent(this),
-                          WTF::CrossThreadUnretained(
-                              &blocking_task_started_or_cancelled_)));
+                          WrapCrossThreadPersistent(this)));
     } else {
-      blocking_task_started_or_cancelled_.test_and_set();
       ScriptStreamerThread::Shared()->PostTask(
           CrossThreadBind(&ScriptStreamerThread::RunScriptStreamingTask,
                           WTF::Passed(std::move(script_streaming_task)),
@@ -463,34 +437,8 @@
     SuppressStreaming(kScriptTooSmall);
   }
 
-  if (stream_) {
-    // If the corresponding blocking task hasn't started yet, cancel it and post
-    // a non-blocking task, since we know now that all the data is received and
-    // we will no longer block.
-    //
-    // TODO(874080): Once we have mutable task traits, simply unmark the
-    // existing task as no longer MayBlock.
-    if (RuntimeEnabledFeatures::ScheduledScriptStreamingEnabled() &&
-        !blocking_task_started_or_cancelled_.test_and_set()) {
-      ScriptState::Scope scope(script_state_);
-      std::unique_ptr<v8::ScriptCompiler::ScriptStreamingTask>
-          script_streaming_task(
-              base::WrapUnique(v8::ScriptCompiler::StartStreamingScript(
-                  script_state_->GetIsolate(), source_.get(),
-                  compile_options_)));
-
-      // The task creation shouldn't fail, since it didn't fail before during
-      // NotifyAppendData.
-      CHECK(script_streaming_task);
-      BackgroundScheduler::PostOnBackgroundThreadWithTraits(
-          FROM_HERE, {base::TaskPriority::USER_BLOCKING},
-          CrossThreadBind(RunNonBlockingScriptStreamingTask,
-                          WTF::Passed(std::move(script_streaming_task)),
-                          WrapCrossThreadPersistent(this)));
-    }
-
+  if (stream_)
     stream_->DidFinishLoading();
-  }
   loading_finished_ = true;
 
   NotifyFinishedToClient();
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer.h b/third_party/blink/renderer/bindings/core/v8/script_streamer.h
index 578fb0b4..7a4f0ee 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_streamer.h
+++ b/third_party/blink/renderer/bindings/core/v8/script_streamer.h
@@ -5,7 +5,6 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SCRIPT_STREAMER_H_
 #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SCRIPT_STREAMER_H_
 
-#include <atomic>
 #include <memory>
 
 #include "base/single_thread_task_runner.h"
@@ -147,11 +146,6 @@
   // Whether we have received enough data to start the streaming.
   bool have_enough_data_for_streaming_;
 
-  // Flag used to allow atomic cancelling and reposting of the streaming task
-  // when the load completes without the task yet starting.
-  // TODO(874080): Remove once we can mutate task traits.
-  std::atomic_flag blocking_task_started_or_cancelled_ = ATOMIC_FLAG_INIT;
-
   // Whether the script source code should be retrieved from the Resource
   // instead of the ScriptStreamer.
   bool streaming_suppressed_;
diff --git a/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc b/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc
index d1876f4..12c90acb 100644
--- a/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc
@@ -446,6 +446,11 @@
   return GetFrame()->View()->GetCompositingRect();
 }
 
+bool WebRemoteFrameImpl::OOPIFHasPointerEventsNone() const {
+  DCHECK(GetFrame()->DeprecatedLocalOwner());
+  return GetFrame()->DeprecatedLocalOwner()->HasPointerEventsNone();
+}
+
 WebRemoteFrameImpl::WebRemoteFrameImpl(WebTreeScopeType scope,
                                        WebRemoteFrameClient* client)
     : WebRemoteFrame(scope),
diff --git a/third_party/blink/renderer/core/exported/web_remote_frame_impl.h b/third_party/blink/renderer/core/exported/web_remote_frame_impl.h
index fac141d..7d5588b 100644
--- a/third_party/blink/renderer/core/exported/web_remote_frame_impl.h
+++ b/third_party/blink/renderer/core/exported/web_remote_frame_impl.h
@@ -91,6 +91,7 @@
   void SetHasReceivedUserGestureBeforeNavigation(bool value) override;
   v8::Local<v8::Object> GlobalProxy() const override;
   WebRect GetCompositingRect() override;
+  bool OOPIFHasPointerEventsNone() const override;
 
   void InitializeCoreFrame(Page&, FrameOwner*, const AtomicString& name);
   RemoteFrame* GetFrame() const { return frame_.Get(); }
diff --git a/third_party/blink/renderer/core/fetch/fetch_header_list.cc b/third_party/blink/renderer/core/fetch/fetch_header_list.cc
index 7bacec12..2839f94 100644
--- a/third_party/blink/renderer/core/fetch/fetch_header_list.cc
+++ b/third_party/blink/renderer/core/fetch/fetch_header_list.cc
@@ -128,6 +128,13 @@
   header_list_.clear();
 }
 
+bool FetchHeaderList::ContainsNonCORSSafelistedHeader() const {
+  return std::any_of(
+      header_list_.cbegin(), header_list_.cend(), [](const Header& header) {
+        return !CORS::IsCORSSafelistedHeader(header.first, header.second);
+      });
+}
+
 Vector<FetchHeaderList::Header> FetchHeaderList::SortAndCombine() const {
   // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine
   // "To sort and combine a header list (|list|), run these steps:
diff --git a/third_party/blink/renderer/core/fetch/fetch_header_list.h b/third_party/blink/renderer/core/fetch/fetch_header_list.h
index 7cd863c..e84f0985 100644
--- a/third_party/blink/renderer/core/fetch/fetch_header_list.h
+++ b/third_party/blink/renderer/core/fetch/fetch_header_list.h
@@ -41,6 +41,7 @@
   bool Has(const String&) const;
   void ClearList();
 
+  bool ContainsNonCORSSafelistedHeader() const;
   Vector<Header> SortAndCombine() const;
 
   const std::multimap<String, String, ByteCaseInsensitiveCompare>& List()
@@ -66,7 +67,8 @@
   // This would cause FetchHeaderList::size() to have to manually
   // iterate through all keys and vectors in the HashMap. Similarly,
   // list() would require callers to manually iterate through the
-  // HashMap's keys and value vector.
+  // HashMap's keys and value vector, and so would
+  // ContainsNonCORSSafelistedHeader().
   std::multimap<String, String, ByteCaseInsensitiveCompare> header_list_;
 };
 
diff --git a/third_party/blink/renderer/core/fetch/fetch_header_list_test.cc b/third_party/blink/renderer/core/fetch/fetch_header_list_test.cc
index 05b0f54..e23bc70 100644
--- a/third_party/blink/renderer/core/fetch/fetch_header_list_test.cc
+++ b/third_party/blink/renderer/core/fetch/fetch_header_list_test.cc
@@ -117,6 +117,26 @@
   EXPECT_FALSE(headerList->Has("X-Bar"));
 }
 
+TEST(FetchHeaderListTest, ContainsNonCORSSafelistedHeader) {
+  FetchHeaderList* headerList = FetchHeaderList::Create();
+  EXPECT_FALSE(headerList->ContainsNonCORSSafelistedHeader());
+
+  headerList->Append("Host", "foobar");
+  headerList->Append("X-Foo", "bar");
+  EXPECT_TRUE(headerList->ContainsNonCORSSafelistedHeader());
+
+  headerList->ClearList();
+  headerList->Append("ConTenT-TyPe", "text/plain");
+  headerList->Append("content-type", "application/xml");
+  headerList->Append("X-Foo", "bar");
+  EXPECT_TRUE(headerList->ContainsNonCORSSafelistedHeader());
+
+  headerList->ClearList();
+  headerList->Append("ConTenT-TyPe", "multipart/form-data");
+  headerList->Append("Accept", "xyz");
+  EXPECT_FALSE(headerList->ContainsNonCORSSafelistedHeader());
+}
+
 TEST(FetchHeaderListTest, SortAndCombine) {
   FetchHeaderList* headerList = FetchHeaderList::Create();
   EXPECT_TRUE(headerList->SortAndCombine().IsEmpty());
diff --git a/third_party/blink/renderer/core/fetch/fetch_manager.cc b/third_party/blink/renderer/core/fetch/fetch_manager.cc
index 9a2df6fc..9cc875b 100644
--- a/third_party/blink/renderer/core/fetch/fetch_manager.cc
+++ b/third_party/blink/renderer/core/fetch/fetch_manager.cc
@@ -858,9 +858,27 @@
   request.SetUseStreamOnResponse(true);
   request.SetExternalRequestStateFromRequestorAddressSpace(
       execution_context_->GetSecurityContext().AddressSpace());
-  request.SetReferrerString(fetch_request_data_->ReferrerString());
-  request.SetReferrerPolicy(fetch_request_data_->GetReferrerPolicy());
 
+  // "2. Append `Referer`/empty byte sequence, if |HTTPRequest|'s |referrer|
+  // is none, and `Referer`/|HTTPRequest|'s referrer, serialized and utf-8
+  // encoded, otherwise, to HTTPRequest's header list.
+  //
+  // The following code also invokes "determine request's referrer" which is
+  // written in "Main fetch" operation.
+  const ReferrerPolicy referrer_policy =
+      fetch_request_data_->GetReferrerPolicy() == kReferrerPolicyDefault
+          ? execution_context_->GetReferrerPolicy()
+          : fetch_request_data_->GetReferrerPolicy();
+  const String referrer_string =
+      fetch_request_data_->ReferrerString() == Referrer::ClientReferrerString()
+          ? execution_context_->OutgoingReferrer()
+          : fetch_request_data_->ReferrerString();
+  // Note that generateReferrer generates |no-referrer| from |no-referrer|
+  // referrer string (i.e. String()).
+  // TODO(domfarolino): Can we use ResourceRequest's SetReferrerString() and
+  // SetReferrerPolicy() instead of calling SetHTTPReferrer()?
+  request.SetHTTPReferrer(SecurityPolicy::GenerateReferrer(
+      referrer_policy, fetch_request_data_->Url(), referrer_string));
   request.SetSkipServiceWorker(is_isolated_world_);
 
   if (fetch_request_data_->Keepalive()) {
diff --git a/third_party/blink/renderer/core/fetch/headers.cc b/third_party/blink/renderer/core/fetch/headers.cc
index a581c74..fc60cc3c 100644
--- a/third_party/blink/renderer/core/fetch/headers.cc
+++ b/third_party/blink/renderer/core/fetch/headers.cc
@@ -98,9 +98,9 @@
   if (guard_ == kRequestGuard && CORS::IsForbiddenHeaderName(name))
     return;
   // "5. Otherwise, if guard is |request-no-CORS| and |name|/|value| is not a
-  //     no-CORS-safelisted header, return."
+  //     CORS-safelisted header, return."
   if (guard_ == kRequestNoCORSGuard &&
-      !CORS::IsNoCORSSafelistedHeader(name, normalized_value)) {
+      !CORS::IsCORSSafelistedHeader(name, normalized_value)) {
     return;
   }
   // "6. Otherwise, if guard is |response| and |name| is a forbidden response
@@ -130,9 +130,9 @@
   if (guard_ == kRequestGuard && CORS::IsForbiddenHeaderName(name))
     return;
   // "4. Otherwise, if guard is |request-no-CORS| and |name|/`invalid` is not
-  //     a no-CORS-safelisted header, return."
+  //     a CORS-safelisted header, return."
   if (guard_ == kRequestNoCORSGuard &&
-      !CORS::IsNoCORSSafelistedHeader(name, "invalid")) {
+      !CORS::IsCORSSafelistedHeader(name, "invalid")) {
     return;
   }
   // "5. Otherwise, if guard is |response| and |name| is a forbidden response
@@ -198,9 +198,9 @@
   if (guard_ == kRequestGuard && CORS::IsForbiddenHeaderName(name))
     return;
   // "5. Otherwise, if guard is |request-no-CORS| and |name|/|value| is not a
-  //     no-CORS-safelisted header, return."
+  //     CORS-safelisted header, return."
   if (guard_ == kRequestNoCORSGuard &&
-      !CORS::IsNoCORSSafelistedHeader(name, normalized_value)) {
+      !CORS::IsCORSSafelistedHeader(name, normalized_value)) {
     return;
   }
   // "6. Otherwise, if guard is |response| and |name| is a forbidden response
diff --git a/third_party/blink/renderer/core/frame/remote_frame.cc b/third_party/blink/renderer/core/frame/remote_frame.cc
index 81daa62..45e8434c 100644
--- a/third_party/blink/renderer/core/frame/remote_frame.cc
+++ b/third_party/blink/renderer/core/frame/remote_frame.cc
@@ -199,6 +199,10 @@
   ToHTMLFrameOwnerElement(Owner())->SetNeedsCompositingUpdate();
 }
 
+void RemoteFrame::PointerEventsChanged() {
+  Client()->PointerEventsChanged();
+}
+
 void RemoteFrame::AdvanceFocus(WebFocusType type, LocalFrame* source) {
   Client()->AdvanceFocus(type, source);
 }
diff --git a/third_party/blink/renderer/core/frame/remote_frame.h b/third_party/blink/renderer/core/frame/remote_frame.h
index b6160560..12c90827 100644
--- a/third_party/blink/renderer/core/frame/remote_frame.h
+++ b/third_party/blink/renderer/core/frame/remote_frame.h
@@ -62,6 +62,8 @@
 
   RemoteFrameClient* Client() const;
 
+  void PointerEventsChanged();
+
  private:
   RemoteFrame(RemoteFrameClient*, Page&, FrameOwner*);
 
diff --git a/third_party/blink/renderer/core/frame/remote_frame_client.h b/third_party/blink/renderer/core/frame/remote_frame_client.h
index faf6c60..8fd0df16 100644
--- a/third_party/blink/renderer/core/frame/remote_frame_client.h
+++ b/third_party/blink/renderer/core/frame/remote_frame_client.h
@@ -62,6 +62,8 @@
 
   virtual void SetInheritedEffectiveTouchAction(TouchAction) = 0;
 
+  virtual void PointerEventsChanged() = 0;
+
   virtual void UpdateRenderThrottlingStatus(bool isThrottled,
                                             bool subtreeThrottled) = 0;
 
diff --git a/third_party/blink/renderer/core/frame/remote_frame_client_impl.cc b/third_party/blink/renderer/core/frame/remote_frame_client_impl.cc
index b60c1a4..e6cee698 100644
--- a/third_party/blink/renderer/core/frame/remote_frame_client_impl.cc
+++ b/third_party/blink/renderer/core/frame/remote_frame_client_impl.cc
@@ -176,6 +176,10 @@
   web_frame_->Client()->SetInheritedEffectiveTouchAction(touch_action);
 }
 
+void RemoteFrameClientImpl::PointerEventsChanged() {
+  web_frame_->Client()->PointerEventsChanged();
+}
+
 void RemoteFrameClientImpl::UpdateRenderThrottlingStatus(
     bool is_throttled,
     bool subtree_throttled) {
diff --git a/third_party/blink/renderer/core/frame/remote_frame_client_impl.h b/third_party/blink/renderer/core/frame/remote_frame_client_impl.h
index fa9ad8cb..b4dee59 100644
--- a/third_party/blink/renderer/core/frame/remote_frame_client_impl.h
+++ b/third_party/blink/renderer/core/frame/remote_frame_client_impl.h
@@ -49,6 +49,7 @@
   void VisibilityChanged(bool visible) override;
   void SetIsInert(bool) override;
   void SetInheritedEffectiveTouchAction(TouchAction) override;
+  void PointerEventsChanged() override;
   void UpdateRenderThrottlingStatus(bool is_throttled,
                                     bool subtree_throttled) override;
   uint32_t Print(const IntRect&, cc::PaintCanvas*) const override;
diff --git a/third_party/blink/renderer/core/frame/visual_viewport.cc b/third_party/blink/renderer/core/frame/visual_viewport.cc
index ae67f4e..2685d990 100644
--- a/third_party/blink/renderer/core/frame/visual_viewport.cc
+++ b/third_party/blink/renderer/core/frame/visual_viewport.cc
@@ -162,7 +162,7 @@
   {
     ScrollPaintPropertyNode::State state;
     state.container_rect = IntRect(IntPoint(), size_);
-    state.contents_rect = IntRect(IntPoint(), ContentsSize());
+    state.contents_size = ContentsSize();
 
     state.user_scrollable_horizontal =
         UserInputScrollable(kHorizontalScrollbar);
diff --git a/third_party/blink/renderer/core/frame/visual_viewport_test.cc b/third_party/blink/renderer/core/frame/visual_viewport_test.cc
index ca84061..c71a87f 100644
--- a/third_party/blink/renderer/core/frame/visual_viewport_test.cc
+++ b/third_party/blink/renderer/core/frame/visual_viewport_test.cc
@@ -751,7 +751,7 @@
   EXPECT_EQ(IntSize(320, 240), visual_viewport.ScrollLayer()->Size());
   if (RuntimeEnabledFeatures::BlinkGenPropertyTreesEnabled()) {
     EXPECT_EQ(IntSize(320, 240),
-              visual_viewport.GetScrollNode()->ContentsRect().Size());
+              visual_viewport.GetScrollNode()->ContentsSize());
   }
 
   // Ensure the location and scale were reset.
@@ -1554,8 +1554,7 @@
                                        ->FirstFragment()
                                        .PaintProperties()
                                        ->Scroll()
-                                       ->ContentsRect()
-                                       .Size());
+                                       ->ContentsSize());
   }
 }
 
@@ -2384,7 +2383,7 @@
     EXPECT_EQ(IntSize(400, 600),
               visual_viewport.GetScrollNode()->ContainerRect().Size());
     EXPECT_EQ(IntSize(320, 480),
-              visual_viewport.GetScrollNode()->ContentsRect().Size());
+              visual_viewport.GetScrollNode()->ContentsSize());
   }
 
   WebView().ApplyViewportDeltas(WebFloatSize(1, 1), WebFloatSize(),
@@ -2400,7 +2399,7 @@
     EXPECT_EQ(IntSize(400, 600),
               visual_viewport.GetScrollNode()->ContainerRect().Size());
     EXPECT_EQ(IntSize(320, 480),
-              visual_viewport.GetScrollNode()->ContentsRect().Size());
+              visual_viewport.GetScrollNode()->ContentsSize());
   }
 }
 
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.cc b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
index 2d8afad7..b30a611a 100644
--- a/third_party/blink/renderer/core/html/html_frame_owner_element.cc
+++ b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
@@ -24,11 +24,13 @@
 #include "third_party/blink/renderer/core/accessibility/ax_object_cache.h"
 #include "third_party/blink/renderer/core/css/style_change_reason.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
+#include "third_party/blink/renderer/core/dom/node_computed_style.h"
 #include "third_party/blink/renderer/core/exported/web_plugin_container_impl.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/frame/local_frame_client.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
+#include "third_party/blink/renderer/core/frame/remote_frame.h"
 #include "third_party/blink/renderer/core/frame/remote_frame_view.h"
 #include "third_party/blink/renderer/core/html/lazy_load_frame_observer.h"
 #include "third_party/blink/renderer/core/html_names.h"
@@ -235,6 +237,12 @@
   }
 }
 
+void HTMLFrameOwnerElement::PointerEventsChanged() {
+  if (ContentFrame() && ContentFrame()->IsRemoteFrame()) {
+    ToRemoteFrame(ContentFrame())->PointerEventsChanged();
+  }
+}
+
 void HTMLFrameOwnerElement::FrameOwnerPropertiesChanged() {
   // Don't notify about updates if ContentFrame() is null, for example when
   // the subframe hasn't been created yet.
@@ -431,6 +439,12 @@
   return true;
 }
 
+bool HTMLFrameOwnerElement::HasPointerEventsNone() const {
+  return GetComputedStyle()
+             ? GetComputedStyle()->PointerEvents() == EPointerEvents::kNone
+             : false;
+}
+
 void HTMLFrameOwnerElement::CancelPendingLazyLoad() {
   if (!lazy_load_frame_observer_)
     return;
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.h b/third_party/blink/renderer/core/html/html_frame_owner_element.h
index f8fe9ff..87d8bec 100644
--- a/third_party/blink/renderer/core/html/html_frame_owner_element.h
+++ b/third_party/blink/renderer/core/html/html_frame_owner_element.h
@@ -116,6 +116,11 @@
   // For unit tests, manually trigger the UpdateContainerPolicy method.
   void UpdateContainerPolicyForTests() { UpdateContainerPolicy(); }
 
+  bool HasPointerEventsNone() const;
+  // This function is to notify ChildFrameCompositor of pointer-events changes
+  // of an OOPIF.
+  void PointerEventsChanged();
+
   void CancelPendingLazyLoad();
 
   void ParseAttribute(const AttributeModificationParams&) override;
@@ -124,6 +129,7 @@
 
  protected:
   HTMLFrameOwnerElement(const QualifiedName& tag_name, Document&);
+
   void SetSandboxFlags(SandboxFlags);
 
   bool LoadOrRedirectSubframe(const KURL&,
diff --git a/third_party/blink/renderer/core/input/mouse_wheel_event_manager.cc b/third_party/blink/renderer/core/input/mouse_wheel_event_manager.cc
index 3b3c968..38e5e84 100644
--- a/third_party/blink/renderer/core/input/mouse_wheel_event_manager.cc
+++ b/third_party/blink/renderer/core/input/mouse_wheel_event_manager.cc
@@ -89,15 +89,9 @@
       // Reset the target if the dom event is cancelled to make sure that new
       // targeting happens for the next wheel event.
       wheel_target_ = nullptr;
-      // TODO(ekaramad): This does not seem correct. The behavior of shift +
-      // scrolling seems different on Mac vs Linux/Windows. We need this done
-      // properly and perhaps even tag WebMouseWheelEvent with a scrolling
-      // direction (https://crbug.com/853292).
-      // When using shift + mouse scroll (to horizontally scroll), the expected
-      // value of |delta_x| is exactly zero.
-      bool is_vertical =
-          (std::abs(dom_event->deltaX()) < std::abs(dom_event->deltaY())) &&
-          (!dom_event->shiftKey() || dom_event->deltaX() != 0);
+
+      bool is_vertical = dom_event->NativeEvent().event_action ==
+                         WebMouseWheelEvent::EventAction::kScrollVertical;
       // TODO(ekaramad): If the only wheel handlers on the page are from such
       // disabled frames we should simply start scrolling on CC and the events
       // must get here as passive (https://crbug.com/853059).
diff --git a/third_party/blink/renderer/core/layout/api/line_layout_item.h b/third_party/blink/renderer/core/layout/api/line_layout_item.h
index 6a72f31..605a747 100644
--- a/third_party/blink/renderer/core/layout/api/line_layout_item.h
+++ b/third_party/blink/renderer/core/layout/api/line_layout_item.h
@@ -287,9 +287,11 @@
     return layout_object_->DocumentBeingDestroyed();
   }
 
-  LayoutRect VisualRect() const { return layout_object_->VisualRect(); }
-  LayoutRect PartialInvalidationVisualRect() const {
-    return layout_object_->PartialInvalidationVisualRect();
+  LayoutRect VisualRectForInlineBox() const {
+    return layout_object_->VisualRectForInlineBox();
+  }
+  LayoutRect PartialInvalidationVisualRectForInlineBox() const {
+    return layout_object_->PartialInvalidationVisualRectForInlineBox();
   }
 
   bool IsHashTableDeletedValue() const {
diff --git a/third_party/blink/renderer/core/layout/jank_tracker.cc b/third_party/blink/renderer/core/layout/jank_tracker.cc
index 3d5b325..3784880 100644
--- a/third_party/blink/renderer/core/layout/jank_tracker.cc
+++ b/third_party/blink/renderer/core/layout/jank_tracker.cc
@@ -51,10 +51,15 @@
          fabs(a.Y() - b.Y()) < threshold_physical_px;
 }
 
-static bool SmallerThanRegionGranularity(const LayoutRect& rect,
+static bool SmallerThanRegionGranularity(const FloatRect& rect,
                                          float granularity_scale) {
-  return rect.Width().ToFloat() * granularity_scale < 0.5 ||
-         rect.Height().ToFloat() * granularity_scale < 0.5;
+  return rect.Width() * granularity_scale < 0.5 ||
+         rect.Height() * granularity_scale < 0.5;
+}
+
+static const TransformPaintPropertyNode* TransformNodeFor(
+    LayoutObject& object) {
+  return object.FirstFragment().LocalBorderBoxProperties().Transform();
 }
 
 #ifdef TRACE_JANK_REGIONS
@@ -82,74 +87,76 @@
              &JankTracker::TimerFired),
       max_distance_(0.0) {}
 
+void JankTracker::AccumulateJank(const LayoutObject& source,
+                                 const PaintLayer& painting_layer,
+                                 FloatRect old_rect,
+                                 FloatRect new_rect) {
+  if (old_rect.IsEmpty() || new_rect.IsEmpty())
+    return;
+
+  if (EqualWithinMovementThreshold(LogicalStart(old_rect, source),
+                                   LogicalStart(new_rect, source), source))
+    return;
+
+  IntRect viewport = frame_view_->GetScrollableArea()->VisibleContentRect();
+  float scale = RegionGranularityScale(viewport);
+
+  if (SmallerThanRegionGranularity(old_rect, scale) &&
+      SmallerThanRegionGranularity(new_rect, scale))
+    return;
+
+  const auto* local_xform = TransformNodeFor(painting_layer.GetLayoutObject());
+  const auto* root_xform = TransformNodeFor(*source.View());
+
+  GeometryMapper::SourceToDestinationRect(local_xform, root_xform, old_rect);
+  GeometryMapper::SourceToDestinationRect(local_xform, root_xform, new_rect);
+
+  if (!old_rect.Intersects(viewport) && !new_rect.Intersects(viewport))
+    return;
+
+  DVLOG(2) << source.DebugName() << " moved from " << old_rect.ToString()
+           << " to " << new_rect.ToString();
+
+  max_distance_ =
+      std::max(max_distance_, GetMoveDistance(old_rect, new_rect, source));
+
+  IntRect visible_old_rect = RoundedIntRect(old_rect);
+  visible_old_rect.Intersect(viewport);
+
+  IntRect visible_new_rect = RoundedIntRect(new_rect);
+  visible_new_rect.Intersect(viewport);
+
+  visible_old_rect.Scale(scale);
+  visible_new_rect.Scale(scale);
+
+  region_.Unite(Region(visible_old_rect));
+  region_.Unite(Region(visible_new_rect));
+}
+
 void JankTracker::NotifyObjectPrePaint(const LayoutObject& object,
                                        const LayoutRect& old_visual_rect,
                                        const PaintLayer& painting_layer) {
   if (!IsActive())
     return;
 
-  LayoutRect new_visual_rect = object.FirstFragment().VisualRect();
-  if (old_visual_rect.IsEmpty() || new_visual_rect.IsEmpty())
+  AccumulateJank(object, painting_layer, FloatRect(old_visual_rect),
+                 FloatRect(object.FirstFragment().VisualRect()));
+}
+
+void JankTracker::NotifyCompositedLayerMoved(const PaintLayer& paint_layer,
+                                             FloatRect old_layer_rect,
+                                             FloatRect new_layer_rect) {
+  if (!IsActive())
     return;
 
-  if (EqualWithinMovementThreshold(
-          LogicalStart(FloatRect(old_visual_rect), object),
-          LogicalStart(FloatRect(new_visual_rect), object), object))
-    return;
+  // Convert to the local transform space, whose origin is the layer's previous
+  // location because the property trees haven't been updated yet.
+  FloatPoint transform_parent_offset = -old_layer_rect.Location();
+  old_layer_rect.MoveBy(transform_parent_offset);
+  new_layer_rect.MoveBy(transform_parent_offset);
 
-  IntRect viewport = frame_view_->GetScrollableArea()->VisibleContentRect();
-  float scale = RegionGranularityScale(viewport);
-
-  if (SmallerThanRegionGranularity(old_visual_rect, scale) &&
-      SmallerThanRegionGranularity(new_visual_rect, scale))
-    return;
-
-  const auto* local_transform = painting_layer.GetLayoutObject()
-                                    .FirstFragment()
-                                    .LocalBorderBoxProperties()
-                                    .Transform();
-  const auto* ancestor_transform = painting_layer.GetLayoutObject()
-                                       .View()
-                                       ->FirstFragment()
-                                       .LocalBorderBoxProperties()
-                                       .Transform();
-
-  FloatRect old_visual_rect_abs = FloatRect(old_visual_rect);
-  GeometryMapper::SourceToDestinationRect(local_transform, ancestor_transform,
-                                          old_visual_rect_abs);
-
-  FloatRect new_visual_rect_abs = FloatRect(new_visual_rect);
-  GeometryMapper::SourceToDestinationRect(local_transform, ancestor_transform,
-                                          new_visual_rect_abs);
-
-  // TOOD(crbug.com/842282): Consider tracking a separate jank score for each
-  // transform space to avoid these local-to-absolute conversions, once we have
-  // a better idea of how to aggregate multiple scores for a page.
-  // See review thread of http://crrev.com/c/1046155 for more details.
-
-  if (!old_visual_rect_abs.Intersects(viewport) &&
-      !new_visual_rect_abs.Intersects(viewport))
-    return;
-
-  DVLOG(2) << object.DebugName() << " moved from "
-           << old_visual_rect_abs.ToString() << " to "
-           << new_visual_rect_abs.ToString();
-
-  max_distance_ = std::max(
-      max_distance_,
-      GetMoveDistance(old_visual_rect_abs, new_visual_rect_abs, object));
-
-  IntRect visible_old_visual_rect = RoundedIntRect(old_visual_rect_abs);
-  visible_old_visual_rect.Intersect(viewport);
-
-  IntRect visible_new_visual_rect = RoundedIntRect(new_visual_rect_abs);
-  visible_new_visual_rect.Intersect(viewport);
-
-  visible_old_visual_rect.Scale(scale);
-  visible_new_visual_rect.Scale(scale);
-
-  region_.Unite(Region(visible_old_visual_rect));
-  region_.Unite(Region(visible_new_visual_rect));
+  AccumulateJank(paint_layer.GetLayoutObject(), paint_layer, old_layer_rect,
+                 new_layer_rect);
 }
 
 void JankTracker::NotifyPrePaintFinished() {
diff --git a/third_party/blink/renderer/core/layout/jank_tracker.h b/third_party/blink/renderer/core/layout/jank_tracker.h
index 602b5fea..e767f63 100644
--- a/third_party/blink/renderer/core/layout/jank_tracker.h
+++ b/third_party/blink/renderer/core/layout/jank_tracker.h
@@ -30,6 +30,9 @@
   void NotifyObjectPrePaint(const LayoutObject& object,
                             const LayoutRect& old_visual_rect,
                             const PaintLayer& painting_layer);
+  void NotifyCompositedLayerMoved(const PaintLayer&,
+                                  FloatRect old_layer_rect,
+                                  FloatRect new_layer_rect);
   void NotifyPrePaintFinished();
   void NotifyInput(const WebInputEvent&);
   bool IsActive();
@@ -38,6 +41,10 @@
   void Dispose() { timer_.Stop(); }
 
  private:
+  void AccumulateJank(const LayoutObject&,
+                      const PaintLayer&,
+                      FloatRect old_rect,
+                      FloatRect new_rect);
   void TimerFired(TimerBase*) {}
   std::unique_ptr<TracedValue> PerFrameTraceData(
       double jank_fraction,
diff --git a/third_party/blink/renderer/core/layout/jank_tracker_test.cc b/third_party/blink/renderer/core/layout/jank_tracker_test.cc
index a93a32da..591a8c6 100644
--- a/third_party/blink/renderer/core/layout/jank_tracker_test.cc
+++ b/third_party/blink/renderer/core/layout/jank_tracker_test.cc
@@ -11,6 +11,10 @@
 
 class JankTrackerTest : public RenderingTest {
  protected:
+  void SetUp() override {
+    RenderingTest::SetUp();
+    EnableCompositing();
+  }
   LocalFrameView& GetFrameView() { return *GetFrame().View(); }
   JankTracker& GetJankTracker() { return GetFrameView().GetJankTracker(); }
 
@@ -128,4 +132,39 @@
   EXPECT_EQ(0.0, GetJankTracker().Score());
 }
 
+TEST_F(JankTrackerTest, CompositedElementMovement) {
+  SetBodyInnerHTML(R"HTML(
+    <style>
+    #jank {
+      position: relative;
+      width: 500px;
+      height: 200px;
+      background: yellow;
+    }
+    #container {
+      position: absolute;
+      width: 400px;
+      height: 400px;
+      left: 400px;
+      top: 100px;
+      background: #ccc;
+    }
+    .tr { will-change: transform; }
+    </style>
+    <div id='container' class='tr'>
+      <div id='space'></div>
+      <div id='jank' class='tr'></div>
+    </div>
+  )HTML");
+
+  GetDocument().getElementById("space")->setAttribute(
+      HTMLNames::styleAttr, AtomicString("height: 100px"));
+  GetFrameView().UpdateAllLifecyclePhases();
+
+  // #jank is 400x200 after viewport intersection with correct application of
+  // composited #container offset, and 100px lower after janking, so jank score
+  // is (400 * 300) / (viewport size 800 * 600)
+  EXPECT_FLOAT_EQ(0.25, GetJankTracker().Score());
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc
index 6e61383..9a0b72f 100644
--- a/third_party/blink/renderer/core/layout/layout_box.cc
+++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -1169,6 +1169,10 @@
   return IntSize(LeftScrollbarWidth().ToInt(), 0);
 }
 
+IntPoint LayoutBox::ScrollOrigin() const {
+  return GetScrollableArea() ? GetScrollableArea()->ScrollOrigin() : IntPoint();
+}
+
 IntSize LayoutBox::ScrolledContentOffset() const {
   DCHECK(HasOverflowClip());
   DCHECK(GetScrollableArea());
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h
index f8dd20f..5377cb3 100644
--- a/third_party/blink/renderer/core/layout/layout_box.h
+++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -1307,6 +1307,7 @@
 
   // See README.md for an explanation of scroll origin.
   IntSize OriginAdjustmentForScrollbars() const;
+  IntPoint ScrollOrigin() const;
   IntSize ScrolledContentOffset() const;
 
   // Maps from scrolling contents space to box space and apply overflow
diff --git a/third_party/blink/renderer/core/layout/layout_embedded_content.cc b/third_party/blink/renderer/core/layout/layout_embedded_content.cc
index ccef8ac..007144d6d 100644
--- a/third_party/blink/renderer/core/layout/layout_embedded_content.cc
+++ b/third_party/blink/renderer/core/layout/layout_embedded_content.cc
@@ -255,6 +255,13 @@
 void LayoutEmbeddedContent::StyleDidChange(StyleDifference diff,
                                            const ComputedStyle* old_style) {
   LayoutReplaced::StyleDidChange(diff, old_style);
+
+  if (!old_style || Style()->PointerEvents() != old_style->PointerEvents()) {
+    Node* node = GetNode();
+    if (node->IsFrameOwnerElement())
+      ToHTMLFrameOwnerElement(node)->PointerEventsChanged();
+  }
+
   EmbeddedContentView* embedded_content_view = GetEmbeddedContentView();
   if (!embedded_content_view)
     return;
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc
index b1c508ee..a109af8 100644
--- a/third_party/blink/renderer/core/layout/layout_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -4072,6 +4072,25 @@
     fragment->InvalidateClipPathCache();
 }
 
+LayoutRect LayoutObject::AdjustVisualRectForInlineBox(
+    const LayoutRect& visual_rect) const {
+  // For simplicity, we use the layout object's visual rect as the visual rect
+  // of contained inline boxes, mapped to the correct transform space of the
+  // inline boxes.
+  if (const auto* properties = FirstFragment().PaintProperties()) {
+    if (const auto* scroll_translation = properties->ScrollTranslation()) {
+      // This mapping happens for inline box whose LayoutObject is a LayoutBlock
+      // whose VisualRect is not in the same transform space as the inline box.
+      // For now this happens for EllipsisBox only.
+      DCHECK(scroll_translation->Matrix().IsIdentityOr2DTranslation());
+      auto float_visual_rect = FloatRect(visual_rect);
+      float_visual_rect.Move(-scroll_translation->Matrix().To2DTranslation());
+      return EnclosingLayoutRect(float_visual_rect);
+    }
+  }
+  return visual_rect;
+}
+
 }  // namespace blink
 
 #ifndef NDEBUG
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h
index c5d5a059..6423211 100644
--- a/third_party/blink/renderer/core/layout/layout_object.h
+++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -233,20 +233,20 @@
   // Returns false iff this object or one of its ancestors has opacity:0.
   bool HasNonZeroEffectiveOpacity() const;
 
-  // DisplayItemClient methods.
-
  protected:
   void EnsureIdForTesting() { fragment_.EnsureIdForTesting(); };
 
-  // Do not call VisualRect directly outside of the DisplayItemClient
-  // interface, use a per-fragment one on FragmentData instead.
  private:
+  // DisplayItemClient methods.
+
   // Hide DisplayItemClient's methods whose names are too generic for
   // LayoutObjects. Should use LayoutObject's methods instead.
   using DisplayItemClient::Invalidate;
   using DisplayItemClient::IsValid;
   using DisplayItemClient::GetPaintInvalidationReason;
 
+  // Do not call VisualRect directly outside of the DisplayItemClient
+  // interface, use a per-fragment one on FragmentData instead.
   LayoutRect VisualRect() const final;
 
   void ClearPartialInvalidationVisualRect() const final {
@@ -262,6 +262,8 @@
 
   String DebugName() const final;
 
+  // End of DisplayItemClient methods.
+
   LayoutObject* Parent() const { return parent_; }
   bool IsDescendantOf(const LayoutObject*) const;
 
@@ -2354,6 +2356,14 @@
   void ApplyPseudoStyleChanges(const ComputedStyle& old_style);
   void ApplyFirstLineChanges(const ComputedStyle& old_style);
 
+  LayoutRect VisualRectForInlineBox() const {
+    return AdjustVisualRectForInlineBox(VisualRect());
+  }
+  LayoutRect PartialInvalidationVisualRectForInlineBox() const {
+    return AdjustVisualRectForInlineBox(PartialInvalidationVisualRect());
+  }
+  LayoutRect AdjustVisualRectForInlineBox(const LayoutRect&) const;
+
   // This is set by Set[Subtree]ShouldDoFullPaintInvalidation, and cleared
   // during PrePaint in this object's InvalidatePaint(). It's different from
   // DisplayItemClient::GetPaintInvalidationReason() which is set during
diff --git a/third_party/blink/renderer/core/layout/line/inline_box.cc b/third_party/blink/renderer/core/layout/line/inline_box.cc
index 420f900..5df6f36 100644
--- a/third_party/blink/renderer/core/layout/line/inline_box.cc
+++ b/third_party/blink/renderer/core/layout/line/inline_box.cc
@@ -96,11 +96,11 @@
 }
 
 LayoutRect InlineBox::VisualRect() const {
-  return GetLineLayoutItem().VisualRect();
+  return GetLineLayoutItem().VisualRectForInlineBox();
 }
 
 LayoutRect InlineBox::PartialInvalidationVisualRect() const {
-  return GetLineLayoutItem().PartialInvalidationVisualRect();
+  return GetLineLayoutItem().PartialInvalidationVisualRectForInlineBox();
 }
 
 #ifndef NDEBUG
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item.cc
index 5a2e860..35b7d65 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item.cc
@@ -6,6 +6,7 @@
 
 #include "third_party/blink/renderer/core/layout/layout_inline.h"
 #include "third_party/blink/renderer/core/layout/layout_object.h"
+#include "third_party/blink/renderer/core/layout/ng/ng_outline_utils.h"
 #include "third_party/blink/renderer/core/style/computed_style.h"
 #include "third_party/blink/renderer/platform/fonts/shaping/shape_result_buffer.h"
 
@@ -121,8 +122,10 @@
       is_empty_item_ = true;
       should_create_box_fragment_ =
           ToLayoutBoxModelObject(layout_object_)->HasSelfPaintingLayer() ||
-          style_->HasOutline() || style_->CanContainAbsolutePositionObjects() ||
+          style_->CanContainAbsolutePositionObjects() ||
           style_->CanContainFixedPositionObjects(false) ||
+          NGOutlineUtils::HasPaintedOutline(*style_,
+                                            layout_object_->GetNode()) ||
           ToLayoutBoxModelObject(layout_object_)
               ->ShouldApplyPaintContainment() ||
           ToLayoutBoxModelObject(layout_object_)
diff --git a/third_party/blink/renderer/core/layout/ng/ng_outline_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_outline_utils.cc
index f6b4a7e..0e2c2a9b 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_outline_utils.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_outline_utils.cc
@@ -13,6 +13,16 @@
 
 class LayoutObject;
 
+bool NGOutlineUtils::HasPaintedOutline(const ComputedStyle& style,
+                                       const Node* node) {
+  if (!style.HasOutline() || style.Visibility() != EVisibility::kVisible)
+    return false;
+  if (style.OutlineStyleIsAuto() &&
+      !LayoutTheme::GetTheme().ShouldDrawDefaultFocusRing(node, style))
+    return false;
+  return true;
+}
+
 void NGOutlineUtils::CollectDescendantOutlines(
     const NGPhysicalBoxFragment& container,
     const NGPhysicalOffset& paint_offset,
@@ -26,13 +36,8 @@
     if (!descendant.fragment->IsBox() || descendant.fragment->IsAtomicInline())
       continue;
 
-    const ComputedStyle& descendant_style = descendant.fragment->Style();
-    if (!descendant_style.HasOutline() ||
-        descendant_style.Visibility() != EVisibility::kVisible)
-      continue;
-    if (descendant_style.OutlineStyleIsAuto() &&
-        !LayoutTheme::GetTheme().ShouldDrawDefaultFocusRing(
-            descendant.fragment->GetNode(), descendant_style))
+    if (!HasPaintedOutline(descendant.fragment->Style(),
+                           descendant.fragment->GetNode()))
       continue;
 
     const LayoutObject* layout_object = descendant.fragment->GetLayoutObject();
diff --git a/third_party/blink/renderer/core/layout/ng/ng_outline_utils.h b/third_party/blink/renderer/core/layout/ng/ng_outline_utils.h
index d225d11..dc99dace 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_outline_utils.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_outline_utils.h
@@ -14,6 +14,7 @@
 class ComputedStyle;
 class LayoutObject;
 class LayoutRect;
+class Node;
 class NGPhysicalFragment;
 class NGPhysicalBoxFragment;
 struct NGPhysicalOffset;
@@ -31,6 +32,8 @@
                                         FragmentMap* anchor_fragment_map,
                                         OutlineRectMap* outline_rect_map);
 
+  static bool HasPaintedOutline(const ComputedStyle& style, const Node* node);
+
   // Union of all outline rectangles, including outline thickness.
   static NGPhysicalOffsetRect ComputeEnclosingOutline(
       const ComputedStyle& style,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
index a375350..9f52c85 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
@@ -145,7 +145,8 @@
   if (style.HasVisualOverflowingEffect()) {
     if (GetLayoutObject()->IsBox()) {
       ink_overflow.Expand(style.BoxDecorationOutsets());
-      if (style.HasOutline()) {
+      if (NGOutlineUtils::HasPaintedOutline(style,
+                                            GetLayoutObject()->GetNode())) {
         Vector<LayoutRect> outline_rects;
         // The result rects are in coordinates of this object's border box.
         AddSelfOutlineRects(&outline_rects, LayoutPoint());
diff --git a/third_party/blink/renderer/core/loader/threadable_loader.cc b/third_party/blink/renderer/core/loader/threadable_loader.cc
index 040bd2e..15acdfc 100644
--- a/third_party/blink/renderer/core/loader/threadable_loader.cc
+++ b/third_party/blink/renderer/core/loader/threadable_loader.cc
@@ -79,8 +79,20 @@
 // Fetch API Spec: https://fetch.spec.whatwg.org/#cors-preflight-fetch-0
 AtomicString CreateAccessControlRequestHeadersHeader(
     const HTTPHeaderMap& headers) {
-  Vector<String> filtered_headers = CORS::CORSUnsafeRequestHeaderNames(headers);
-
+  Vector<String> filtered_headers;
+  for (const auto& header : headers) {
+    // Exclude CORS-safelisted headers.
+    if (CORS::IsCORSSafelistedHeader(header.key, header.value))
+      continue;
+    // Calling a deprecated function, but eventually this function,
+    // |CreateAccessControlRequestHeadersHeader| will be removed.
+    // When the request is from a Worker, referrer header was added by
+    // WorkerThreadableLoader. But it should not be added to
+    // Access-Control-Request-Headers header.
+    if (DeprecatedEqualIgnoringCase(header.key, "referer"))
+      continue;
+    filtered_headers.push_back(header.key.DeprecatedLower());
+  }
   if (!filtered_headers.size())
     return g_null_atom;
 
@@ -164,7 +176,9 @@
   preflight_request->SetFetchCredentialsMode(
       network::mojom::FetchCredentialsMode::kOmit);
   preflight_request->SetSkipServiceWorker(true);
-  preflight_request->SetReferrerString(request.ReferrerString());
+  // TODO(domfarolino): Use ReferrerString() once https://crbug.com/850813 is
+  // closed and we stop storing the referrer string as a `Referer` header.
+  preflight_request->SetReferrerString(request.HttpReferrer());
   preflight_request->SetReferrerPolicy(request.GetReferrerPolicy());
 
   if (request.IsExternalRequest()) {
diff --git a/third_party/blink/renderer/core/page/page_widget_delegate.cc b/third_party/blink/renderer/core/page/page_widget_delegate.cc
index f162ac9..f3d77a79d 100644
--- a/third_party/blink/renderer/core/page/page_widget_delegate.cc
+++ b/third_party/blink/renderer/core/page/page_widget_delegate.cc
@@ -140,8 +140,10 @@
     if (interactive_detector)
       interactive_detector->HandleForInputDelay(event);
 
-    if (LocalFrameView* view = document->View())
-      view->GetJankTracker().NotifyInput(event);
+    if (RuntimeEnabledFeatures::JankTrackingEnabled()) {
+      if (LocalFrameView* view = document->View())
+        view->GetJankTracker().NotifyInput(event);
+    }
   }
 
   if (event.GetModifiers() & WebInputEvent::kIsTouchAccessibility &&
diff --git a/third_party/blink/renderer/core/paint/block_painter.cc b/third_party/blink/renderer/core/paint/block_painter.cc
index 1d9cd74..96b2c04 100644
--- a/third_party/blink/renderer/core/paint/block_painter.cc
+++ b/third_party/blink/renderer/core/paint/block_painter.cc
@@ -240,6 +240,7 @@
       paint_phase != PaintPhase::kMask) {
     // Handle scrolling translation.
     base::Optional<PaintInfo> scrolled_paint_info;
+    auto contents_paint_offset = paint_offset;
     if (const auto* fragment = paint_info.FragmentToPaint(layout_block_)) {
       const auto* object_properties = fragment->PaintProperties();
       auto* scroll_translation =
@@ -254,6 +255,13 @@
           scrolled_paint_info->UpdateCullRect(
               scroll_translation->Matrix().ToAffineTransform());
         }
+        // See comments for ScrollTranslation in object_paint_properties.h
+        // for the reason of adding ScrollOrigin(). contents_paint_offset will
+        // be used only for the scrolling contents that are not painted through
+        // descendant objects' Paint() method, e.g. inline boxes.
+        // TODO(wangxianzhu): Encapsulate such logic at various places into
+        // one class.
+        contents_paint_offset += layout_block_.ScrollOrigin();
       }
     }
     const PaintInfo& contents_paint_info =
@@ -263,9 +271,9 @@
     if (layout_block_.IsLayoutBlockFlow()) {
       // All floating descendants will be LayoutBlockFlow objects, and will get
       // painted here. That is step #5 of the CSS spec (see above).
-      PaintBlockFlowContents(contents_paint_info, paint_offset);
+      PaintBlockFlowContents(contents_paint_info, contents_paint_offset);
     } else {
-      PaintContents(contents_paint_info, paint_offset);
+      PaintContents(contents_paint_info, contents_paint_offset);
     }
   }
 
diff --git a/third_party/blink/renderer/core/paint/block_painter_test.cc b/third_party/blink/renderer/core/paint/block_painter_test.cc
index 168b232..d6ea5d3f 100644
--- a/third_party/blink/renderer/core/paint/block_painter_test.cc
+++ b/third_party/blink/renderer/core/paint/block_painter_test.cc
@@ -82,7 +82,7 @@
   // The scrolled contents should be scrolled and clipped.
   auto* contents_transform = contents_chunk.properties.Transform();
   auto* contents_scroll = contents_transform->ScrollNode();
-  EXPECT_EQ(IntRect(0, 0, 200, 300), contents_scroll->ContentsRect());
+  EXPECT_EQ(IntSize(200, 300), contents_scroll->ContentsSize());
   EXPECT_EQ(IntRect(0, 0, 200, 200), contents_scroll->ContainerRect());
   auto* contents_clip = contents_chunk.properties.Clip();
   EXPECT_EQ(FloatRect(0, 0, 200, 200), contents_clip->ClipRect().Rect());
@@ -140,7 +140,7 @@
   // The scrolled contents should be scrolled and clipped.
   auto* contents_transform = contents_chunk.properties.Transform();
   auto* contents_scroll = contents_transform->ScrollNode();
-  EXPECT_EQ(IntRect(0, 0, 800, 2000), contents_scroll->ContentsRect());
+  EXPECT_EQ(IntSize(800, 2000), contents_scroll->ContentsSize());
   EXPECT_EQ(IntRect(0, 0, 800, 600), contents_scroll->ContainerRect());
   auto* contents_clip = contents_chunk.properties.Clip();
   EXPECT_EQ(FloatRect(0, 0, 800, 600), contents_clip->ClipRect().Rect());
diff --git a/third_party/blink/renderer/core/paint/box_model_object_painter.cc b/third_party/blink/renderer/core/paint/box_model_object_painter.cc
index 1e10f88..bd4552d 100644
--- a/third_party/blink/renderer/core/paint/box_model_object_painter.cc
+++ b/third_party/blink/renderer/core/paint/box_model_object_painter.cc
@@ -4,12 +4,10 @@
 
 #include "third_party/blink/renderer/core/paint/box_model_object_painter.h"
 
-#include "third_party/blink/renderer/core/layout/layout_block_flow.h"
+#include "third_party/blink/renderer/core/layout/layout_block.h"
 #include "third_party/blink/renderer/core/layout/layout_box_model_object.h"
-#include "third_party/blink/renderer/core/layout/layout_inline.h"
 #include "third_party/blink/renderer/core/layout/line/root_inline_box.h"
 #include "third_party/blink/renderer/core/paint/background_image_geometry.h"
-#include "third_party/blink/renderer/core/paint/line_box_list_painter.h"
 #include "third_party/blink/renderer/core/paint/object_painter.h"
 #include "third_party/blink/renderer/core/paint/paint_info.h"
 #include "third_party/blink/renderer/core/paint/paint_layer.h"
@@ -85,14 +83,9 @@
     flow_box_->Paint(paint_info, paint_offset - local_offset, root.LineTop(),
                      root.LineBottom());
   } else {
-    const LineBoxList* line_boxes = nullptr;
-    if (box_model_.IsLayoutBlockFlow())
-      line_boxes = &ToLayoutBlockFlow(box_model_).LineBoxes();
-    else if (box_model_.IsLayoutInline())
-      line_boxes = ToLayoutInline(box_model_).LineBoxes();
-    if (!line_boxes)
-      return;
-    LineBoxListPainter(*line_boxes).Paint(box_model_, paint_info, paint_offset);
+    // We should go through the above path for LayoutInlines.
+    DCHECK(box_model_.IsLayoutBlock());
+    ToLayoutBlock(box_model_).PaintObject(paint_info, paint_offset);
   }
 }
 
diff --git a/third_party/blink/renderer/core/paint/box_painter.cc b/third_party/blink/renderer/core/paint/box_painter.cc
index 473b45f..e69d359 100644
--- a/third_party/blink/renderer/core/paint/box_painter.cc
+++ b/third_party/blink/renderer/core/paint/box_painter.cc
@@ -62,12 +62,17 @@
     // overflow rect.
     paint_rect = layout_box_.PhysicalLayoutOverflowRect();
 
-    if (const auto* fragment = paint_info.FragmentToPaint(layout_box_)) {
-      scoped_scroll_property.emplace(
-          paint_info.context.GetPaintController(),
-          fragment->ContentsProperties(), layout_box_,
-          DisplayItem::PaintPhaseToScrollType(paint_info.phase));
-    }
+    const auto* fragment = paint_info.FragmentToPaint(layout_box_);
+    if (!fragment)
+      return;
+
+    scoped_scroll_property.emplace(
+        paint_info.context.GetPaintController(), fragment->ContentsProperties(),
+        layout_box_, DisplayItem::PaintPhaseToScrollType(paint_info.phase));
+    // See comments for ScrollTranslation in object_paint_properties.h for the
+    // reason of moving by ScrollOrigin(). TODO(wangxianzhu): Encapsulate such
+    // logic at various places into one class.
+    paint_rect.MoveBy(layout_box_.ScrollOrigin());
 
     // The background painting code assumes that the borders are part of the
     // paintRect so we expand the paintRect by the border size when painting the
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
index 1a596ae..2722d868 100644
--- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
+++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -1310,20 +1310,31 @@
     const IntRect& relative_compositing_bounds,
     const IntRect& local_compositing_bounds,
     const IntPoint& graphics_layer_parent_location) {
+  FloatPoint old_position = graphics_layer_->GetPosition();
+  IntSize old_size = graphics_layer_->Size();
+  FloatPoint new_position = FloatPoint(relative_compositing_bounds.Location() -
+                                       graphics_layer_parent_location);
+  IntSize new_size = relative_compositing_bounds.Size();
+
   // An iframe's main GraphicsLayer is positioned by the CLM for the <iframe>
   // element in the parent frame's DOM.
   bool is_iframe_doc = GetLayoutObject().IsLayoutView() &&
                        !GetLayoutObject().GetFrame()->IsLocalRoot();
-  if (!is_iframe_doc) {
-    graphics_layer_->SetPosition(
-        FloatPoint(relative_compositing_bounds.Location() -
-                   graphics_layer_parent_location));
+  if (new_position != old_position && !is_iframe_doc) {
+    graphics_layer_->SetPosition(new_position);
+
+    if (RuntimeEnabledFeatures::JankTrackingEnabled()) {
+      LocalFrameView* frame_view = GetLayoutObject().View()->GetFrameView();
+      frame_view->GetJankTracker().NotifyCompositedLayerMoved(
+          OwningLayer(), FloatRect(old_position, FloatSize(old_size)),
+          FloatRect(new_position, FloatSize(new_size)));
+    }
   }
   graphics_layer_->SetOffsetFromLayoutObject(
       ToIntSize(local_compositing_bounds.Location()));
 
-  if (graphics_layer_->Size() != relative_compositing_bounds.Size())
-    graphics_layer_->SetSize(relative_compositing_bounds.Size());
+  if (old_size != new_size)
+    graphics_layer_->SetSize(new_size);
 
   // m_graphicsLayer is the corresponding GraphicsLayer for this PaintLayer and
   // its non-compositing descendants. So, the visibility flag for
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc b/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc
index e2f8cff..8be2162 100644
--- a/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc
+++ b/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc
@@ -120,12 +120,16 @@
                                       ScrollbarOrCorner::kScrollbarCorner);
 
   if (mapping->ScrollingContentsLayer()) {
-    auto SetContentsLayerState = [&fragment_data, &snapped_paint_offset](
+    // See comments for ScrollTranslation in object_paint_properties.h for the
+    // reason of adding ScrollOrigin().
+    auto contents_paint_offset =
+        snapped_paint_offset + ToLayoutBox(object).ScrollOrigin();
+    auto SetContentsLayerState = [&fragment_data, &contents_paint_offset](
                                      GraphicsLayer* graphics_layer) {
       if (graphics_layer) {
         graphics_layer->SetLayerState(
             fragment_data.ContentsProperties(),
-            snapped_paint_offset + graphics_layer->OffsetFromLayoutObject());
+            contents_paint_offset + graphics_layer->OffsetFromLayoutObject());
       }
     };
     SetContentsLayerState(mapping->ScrollingContentsLayer());
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
index 727387e..f17d4cd1d 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -226,6 +226,7 @@
     const auto& layout_object = *box_fragment_.GetLayoutObject();
     base::Optional<ScopedPaintChunkProperties> scoped_scroll_property;
     base::Optional<PaintInfo> scrolled_paint_info;
+    auto contents_paint_offset = paint_offset;
     if (const auto* fragment = paint_info.FragmentToPaint(layout_object)) {
       const auto* object_properties = fragment->PaintProperties();
       auto* scroll_translation =
@@ -244,6 +245,9 @@
           scrolled_paint_info->UpdateCullRect(
               scroll_translation->Matrix().ToAffineTransform());
         }
+        // See comments for ScrollTranslation in object_paint_properties.h for
+        // the reason of adding ScrollOrigin().
+        contents_paint_offset += ToLayoutBox(layout_object).ScrollOrigin();
       }
     }
 
@@ -252,14 +256,14 @@
 
     if (PhysicalFragment().ChildrenInline()) {
       if (PhysicalFragment().IsBlockFlow()) {
-        PaintBlockFlowContents(contents_paint_info, paint_offset);
+        PaintBlockFlowContents(contents_paint_info, contents_paint_offset);
         if (paint_phase == PaintPhase::kFloat ||
             paint_phase == PaintPhase::kSelection ||
             paint_phase == PaintPhase::kTextClip)
           PaintFloats(contents_paint_info);
       } else {
         PaintInlineChildren(box_fragment_.Children(), contents_paint_info,
-                            paint_offset);
+                            contents_paint_offset);
       }
     } else {
       PaintBlockChildren(contents_paint_info);
diff --git a/third_party/blink/renderer/core/paint/object_paint_properties.h b/third_party/blink/renderer/core/paint/object_paint_properties.h
index f1c172a..36563e94 100644
--- a/third_party/blink/renderer/core/paint/object_paint_properties.h
+++ b/third_party/blink/renderer/core/paint/object_paint_properties.h
@@ -97,17 +97,26 @@
 
   // The hierarchy of the transform subtree created by a LayoutObject is as
   // follows:
-  // [ paintOffsetTranslation ]           Normally paint offset is accumulated
-  // |                                    without creating a node until we see,
-  // |                                    for example, transform or
-  // |                                    position:fixed.
-  // +---[ transform ]                    The space created by CSS transform.
-  //     |                                This is the local border box space.
-  //     +---[ perspective ]              The space created by CSS perspective.
-  //         +---[ replacedContentTransform ] Additional transform for replaced
-  //                                      elements to implement object-fit.
-  //                    OR                (Replaced elements don't scroll.)
-  //         +---[ scrollTranslation ]    The space created by overflow clip.
+  // [ PaintOffsetTranslation ]
+  // |   Normally paint offset is accumulated without creating a node until
+  // |   we see, for example, transform or position:fixed.
+  // +-[ Transform ]
+  //   |   The space created by CSS transform. This is the local border box
+  //   |   space.
+  //   +-[ Perspective ]
+  //     |   The space created by CSS perspective.
+  //     +-[ ReplacedContentTransform ]
+  //         Additional transform for replaced elements to implement object-fit.
+  //         (Replaced elements don't scroll.)
+  //     OR
+  //     +-[ ScrollTranslation ]
+  //         The space created by overflow clip. The translation equals the
+  //         offset between the scrolling contents and the scrollable area of
+  //         the container, both originated from the top-left corner, so it is
+  //         the sum of scroll origin and scroll offset of the ScrollableArea.
+  //         To use any content offset based on ScrollOrigin() (e.g. LayoutBox
+  //         or InlineBox's PhysicalLocation()) in this space, we should add
+  //         ScrollOrigin() to the offset.
   ADD_TRANSFORM(PaintOffsetTranslation, paint_offset_translation_);
   ADD_TRANSFORM(Transform, transform_);
   ADD_TRANSFORM(Perspective, perspective_);
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
index 65a0fc33..9c192c4a 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -1377,10 +1377,9 @@
       // integer offsets used in CompositedLayerMapping.
       state.container_rect = PixelSnappedIntRect(
           box.OverflowClipRect(context_.current.paint_offset));
-      state.contents_rect = IntRect(
-          -scrollable_area->ScrollOrigin() + state.container_rect.Location(),
-          scrollable_area->PixelSnappedContentsSize(
-              context_.current.paint_offset));
+      state.contents_size = scrollable_area->PixelSnappedContentsSize(
+          context_.current.paint_offset);
+
       state.user_scrollable_horizontal =
           scrollable_area->UserInputScrollable(kHorizontalScrollbar);
       state.user_scrollable_vertical =
@@ -1453,10 +1452,12 @@
     // A scroll translation node is created for static offset (e.g., overflow
     // hidden with scroll offset) or cases that scroll and have a scroll node.
     if (NeedsScrollOrScrollTranslation(object_)) {
-      const LayoutBox& box = ToLayoutBox(object_);
+      const auto& box = ToLayoutBox(object_);
       TransformPaintPropertyNode::State state;
-      IntSize scroll_offset = box.ScrolledContentOffset();
-      state.matrix.Translate(-scroll_offset.Width(), -scroll_offset.Height());
+      // Bake ScrollOrigin into ScrollTranslation. See comments for
+      // ScrollTranslation in object_paint_properties.h for details.
+      auto scroll_position = box.ScrollOrigin() + box.ScrolledContentOffset();
+      state.matrix.Translate(-scroll_position.X(), -scroll_position.Y());
       state.flattens_inherited_transform =
           context_.current.should_flatten_inherited_transform;
       if (RuntimeEnabledFeatures::SlimmingPaintV2Enabled() ||
@@ -1474,8 +1475,13 @@
 
   if (properties_->Scroll())
     context_.current.scroll = properties_->Scroll();
-  if (properties_->ScrollTranslation())
+
+  if (properties_->ScrollTranslation()) {
     context_.current.transform = properties_->ScrollTranslation();
+    // See comments for ScrollTranslation in object_paint_properties.h for the
+    // reason of adding ScrollOrigin().
+    context_.current.paint_offset += ToLayoutBox(object_).ScrollOrigin();
+  }
 }
 
 void FragmentPaintPropertyTreeBuilder::UpdateOutOfFlowContext() {
@@ -1498,6 +1504,12 @@
     // Fixed position transform and scroll nodes should not be affected.
     context_.fixed_position.transform = initial_fixed_transform;
     context_.fixed_position.scroll = initial_fixed_scroll;
+    if (properties_->ScrollTranslation()) {
+      // Also undo the ScrollOrigin part in paint offset that was added when
+      // ScrollTranslation was updated.
+      context_.fixed_position.paint_offset -=
+          ToLayoutBox(object_).ScrollOrigin();
+    }
   } else if (object_.CanContainFixedPositionObjects()) {
     context_.fixed_position = context_.current;
     context_.fixed_position.fixed_position_children_fixed_to_root = false;
@@ -1673,8 +1685,16 @@
 
     // The paint offset root can have a subpixel paint offset adjustment.
     // The paint offset root always has one fragment.
-    paint_offset.MoveBy(
-        context_.current.paint_offset_root->FirstFragment().PaintOffset());
+    const auto& paint_offset_root_fragment =
+        context_.current.paint_offset_root->FirstFragment();
+    paint_offset.MoveBy(paint_offset_root_fragment.PaintOffset());
+    if (paint_offset_root_fragment.PaintProperties() &&
+        paint_offset_root_fragment.PaintProperties()->ScrollTranslation()) {
+      // This duplicates the logic of the additional paint offset for scrolling
+      // contents in UpdateScrollTranslation().
+      paint_offset.MoveBy(
+          ToLayoutBox(context_.current.paint_offset_root)->ScrollOrigin());
+    }
 
     context_.current.paint_offset = paint_offset;
 
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
index b9335c9b..4aa1a27 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
@@ -226,7 +226,7 @@
   const auto* scroll = scroller_properties->ScrollTranslation()->ScrollNode();
   EXPECT_EQ(DocScroll(), scroll->Parent());
   EXPECT_EQ(IntRect(0, 0, 413, 317), scroll->ContainerRect());
-  EXPECT_EQ(IntRect(0, 0, 660, 10200), scroll->ContentsRect());
+  EXPECT_EQ(IntSize(660, 10200), scroll->ContentsSize());
   EXPECT_FALSE(scroll->UserScrollableHorizontal());
   EXPECT_TRUE(scroll->UserScrollableVertical());
   EXPECT_EQ(FloatSize(120, 340), scroller_properties->PaintOffsetTranslation()
@@ -314,7 +314,8 @@
   )HTML");
   CHECK(GetDocument().GetPage()->GetScrollbarTheme().UsesOverlayScrollbars());
 
-  const auto* properties = PaintPropertiesForElement("scroller");
+  const auto* scroller = GetLayoutObjectByElementId("scroller");
+  const auto* properties = scroller->FirstFragment().PaintProperties();
   const auto* overflow_clip = properties->OverflowClip();
 
   EXPECT_EQ(DocContentClip(), overflow_clip->Parent());
@@ -322,9 +323,8 @@
             overflow_clip->LocalTransformSpace());
   EXPECT_EQ(FloatRoundedRect(10, 10, 101, 100), overflow_clip->ClipRect());
 
-  PaintLayer* paint_layer =
-      ToLayoutBoxModelObject(GetLayoutObjectByElementId("scroller"))->Layer();
-  EXPECT_TRUE(paint_layer->GetScrollableArea()
+  EXPECT_TRUE(ToLayoutBox(scroller)
+                  ->GetScrollableArea()
                   ->VerticalScrollbar()
                   ->IsOverlayScrollbar());
 
@@ -338,22 +338,46 @@
     <div id='scroller'
          style='width: 100px; height: 100px; overflow: scroll;
                 writing-mode: vertical-rl; border: 10px solid blue'>
-      <div style='width: 400px; height: 400px'></div>
+      <div id="content" style='width: 400px; height: 400px'></div>
     </div>
   )HTML");
 
-  const auto* properties = PaintPropertiesForElement("scroller");
+  const auto* scroller = ToLayoutBox(GetLayoutObjectByElementId("scroller"));
+  const auto* content = GetLayoutObjectByElementId("content");
+  const auto* properties = scroller->FirstFragment().PaintProperties();
   const auto* overflow_clip = properties->OverflowClip();
   const auto* scroll_translation = properties->ScrollTranslation();
   const auto* scroll = properties->Scroll();
 
-  EXPECT_EQ(TransformationMatrix(), scroll_translation->Matrix());
+  // -315: container_width (100) - contents_width (400) - scrollber_width
+  EXPECT_EQ(TransformationMatrix().Translate(-315, 0),
+            scroll_translation->Matrix());
   EXPECT_EQ(scroll, scroll_translation->ScrollNode());
   // 10: border width. 85: container client size (== 100 - scrollbar width).
   EXPECT_EQ(IntRect(10, 10, 85, 85), scroll->ContainerRect());
-  // The content is placed at (-305, 10) so that its right edge aligns with the
-  // right edge of the container's client box.
-  EXPECT_EQ(IntRect(-305, 10, 400, 400), scroll->ContentsRect());
+  EXPECT_EQ(IntSize(400, 400), scroll->ContentsSize());
+  EXPECT_EQ(LayoutPoint(), scroller->FirstFragment().PaintOffset());
+  EXPECT_EQ(IntPoint(315, 0), scroller->ScrollOrigin());
+  EXPECT_EQ(LayoutPoint(10, 10), content->FirstFragment().PaintOffset());
+
+  EXPECT_EQ(DocContentClip(), overflow_clip->Parent());
+  EXPECT_EQ(properties->PaintOffsetTranslation(),
+            overflow_clip->LocalTransformSpace());
+  EXPECT_EQ(FloatRoundedRect(10, 10, 85, 85), overflow_clip->ClipRect());
+
+  scroller->GetScrollableArea()->ScrollBy(ScrollOffset(-100, 0), kUserScroll);
+  GetDocument().View()->UpdateAllLifecyclePhases();
+
+  // Only scroll_translation is affected by scrolling.
+  EXPECT_EQ(TransformationMatrix().Translate(-215, 0),
+            scroll_translation->Matrix());
+  // Other properties are the same as before.
+  EXPECT_EQ(scroll, scroll_translation->ScrollNode());
+  EXPECT_EQ(IntRect(10, 10, 85, 85), scroll->ContainerRect());
+  EXPECT_EQ(IntSize(400, 400), scroll->ContentsSize());
+  EXPECT_EQ(LayoutPoint(), scroller->FirstFragment().PaintOffset());
+  EXPECT_EQ(IntPoint(315, 0), scroller->ScrollOrigin());
+  EXPECT_EQ(LayoutPoint(10, 10), content->FirstFragment().PaintOffset());
 
   EXPECT_EQ(DocContentClip(), overflow_clip->Parent());
   EXPECT_EQ(properties->PaintOffsetTranslation(),
@@ -367,21 +391,47 @@
     <div id='scroller'
          style='width: 100px; height: 100px; overflow: scroll;
                 direction: rtl; border: 10px solid blue'>
-      <div style='width: 400px; height: 400px'></div>
+      <div id='content' style='width: 400px; height: 400px'></div>
     </div>
   )HTML");
 
-  const auto* properties = PaintPropertiesForElement("scroller");
+  const auto* scroller = ToLayoutBox(GetLayoutObjectByElementId("scroller"));
+  const auto* content = GetLayoutObjectByElementId("content");
+  const auto* properties = scroller->FirstFragment().PaintProperties();
   const auto* overflow_clip = properties->OverflowClip();
   const auto* scroll_translation = properties->ScrollTranslation();
   const auto* scroll = properties->Scroll();
 
-  EXPECT_EQ(TransformationMatrix(), scroll_translation->Matrix());
+  // -315: container_width (100) - contents_width (400) - scrollbar width (15).
+  EXPECT_EQ(TransformationMatrix().Translate(-315, 0),
+            scroll_translation->Matrix());
   EXPECT_EQ(scroll, scroll_translation->ScrollNode());
   // 25: border width (10) + scrollbar (on the left) width (15).
   // 85: container client size (== 100 - scrollbar width).
   EXPECT_EQ(IntRect(25, 10, 85, 85), scroll->ContainerRect());
-  EXPECT_EQ(IntRect(-290, 10, 400, 400), scroll->ContentsRect());
+  EXPECT_EQ(IntSize(400, 400), scroll->ContentsSize());
+  EXPECT_EQ(LayoutPoint(), scroller->FirstFragment().PaintOffset());
+  EXPECT_EQ(IntPoint(315, 0), scroller->ScrollOrigin());
+  EXPECT_EQ(LayoutPoint(25, 10), content->FirstFragment().PaintOffset());
+
+  EXPECT_EQ(DocContentClip(), overflow_clip->Parent());
+  EXPECT_EQ(properties->PaintOffsetTranslation(),
+            overflow_clip->LocalTransformSpace());
+  EXPECT_EQ(FloatRoundedRect(25, 10, 85, 85), overflow_clip->ClipRect());
+
+  scroller->GetScrollableArea()->ScrollBy(ScrollOffset(-100, 0), kUserScroll);
+  GetDocument().View()->UpdateAllLifecyclePhases();
+
+  // Only scroll_translation is affected by scrolling.
+  EXPECT_EQ(TransformationMatrix().Translate(-215, 0),
+            scroll_translation->Matrix());
+  // Other properties are the same as before.
+  EXPECT_EQ(scroll, scroll_translation->ScrollNode());
+  EXPECT_EQ(IntRect(25, 10, 85, 85), scroll->ContainerRect());
+  EXPECT_EQ(IntSize(400, 400), scroll->ContentsSize());
+  EXPECT_EQ(LayoutPoint(), scroller->FirstFragment().PaintOffset());
+  EXPECT_EQ(IntPoint(315, 0), scroller->ScrollOrigin());
+  EXPECT_EQ(LayoutPoint(25, 10), content->FirstFragment().PaintOffset());
 
   EXPECT_EQ(DocContentClip(), overflow_clip->Parent());
   EXPECT_EQ(properties->PaintOffsetTranslation(),
@@ -3529,7 +3579,7 @@
   EXPECT_EQ(IntRect(0, 0, 5, 3), overflow_a_scroll_node->ContainerRect());
   // 107 is the forceScroll element plus the height of the overflow scroll child
   // (overflowB).
-  EXPECT_EQ(IntRect(0, 0, 9, 107), overflow_a_scroll_node->ContentsRect());
+  EXPECT_EQ(IntSize(9, 107), overflow_a_scroll_node->ContentsSize());
   EXPECT_TRUE(overflow_a_scroll_node->UserScrollableHorizontal());
   EXPECT_TRUE(overflow_a_scroll_node->UserScrollableVertical());
 
@@ -3544,7 +3594,7 @@
   EXPECT_EQ(TransformationMatrix().Translate(0, -41),
             scroll_b_translation->Matrix());
   EXPECT_EQ(IntRect(0, 0, 9, 7), overflow_b_scroll_node->ContainerRect());
-  EXPECT_EQ(IntRect(0, 0, 9, 100), overflow_b_scroll_node->ContentsRect());
+  EXPECT_EQ(IntSize(9, 100), overflow_b_scroll_node->ContentsSize());
   EXPECT_TRUE(overflow_b_scroll_node->UserScrollableHorizontal());
   EXPECT_TRUE(overflow_b_scroll_node->UserScrollableVertical());
 }
@@ -3617,7 +3667,7 @@
   // The height should be 4000px because the (dom-order) overflow children are
   // positioned and do not contribute to the height. Only the 4000px
   // "forceScroll" height is present.
-  EXPECT_EQ(IntRect(0, 0, 5, 4000), overflow_scroll_node->ContentsRect());
+  EXPECT_EQ(IntSize(5, 4000), overflow_scroll_node->ContentsSize());
 
   const ObjectPaintProperties* abspos_overflow_scroll_properties =
       abspos_overflow->GetLayoutObject()->FirstFragment().PaintProperties();
@@ -3630,8 +3680,7 @@
   EXPECT_EQ(TransformationMatrix().Translate(0, -41),
             abspos_scroll_translation->Matrix());
   EXPECT_EQ(IntRect(0, 0, 9, 7), abspos_overflow_scroll_node->ContainerRect());
-  EXPECT_EQ(IntRect(0, 0, 9, 4000),
-            abspos_overflow_scroll_node->ContentsRect());
+  EXPECT_EQ(IntSize(9, 4000), abspos_overflow_scroll_node->ContentsSize());
 
   const ObjectPaintProperties* fixed_overflow_scroll_properties =
       fixed_overflow->GetLayoutObject()->FirstFragment().PaintProperties();
@@ -3649,8 +3698,7 @@
   EXPECT_EQ(TransformationMatrix().Translate(0, -43),
             fixed_scroll_translation->Matrix());
   EXPECT_EQ(IntRect(0, 0, 13, 11), fixed_overflow_scroll_node->ContainerRect());
-  EXPECT_EQ(IntRect(0, 0, 13, 4000),
-            fixed_overflow_scroll_node->ContentsRect());
+  EXPECT_EQ(IntSize(13, 4000), fixed_overflow_scroll_node->ContentsSize());
 }
 
 TEST_P(PaintPropertyTreeBuilderTest, NestedPositionedScrollProperties) {
@@ -3718,7 +3766,7 @@
   EXPECT_EQ(IntRect(0, 0, 20, 20), overflow_a_scroll_node->ContainerRect());
   // 100 is the forceScroll element's height because the overflow child does not
   // contribute to the height.
-  EXPECT_EQ(IntRect(0, 0, 20, 100), overflow_a_scroll_node->ContentsRect());
+  EXPECT_EQ(IntSize(20, 100), overflow_a_scroll_node->ContentsSize());
   EXPECT_TRUE(overflow_a_scroll_node->UserScrollableHorizontal());
   EXPECT_TRUE(overflow_a_scroll_node->UserScrollableVertical());
 
@@ -3733,7 +3781,7 @@
   EXPECT_EQ(TransformationMatrix().Translate(0, -41),
             scroll_b_translation->Matrix());
   EXPECT_EQ(IntRect(0, 0, 5, 3), overflow_b_scroll_node->ContainerRect());
-  EXPECT_EQ(IntRect(0, 0, 5, 100), overflow_b_scroll_node->ContentsRect());
+  EXPECT_EQ(IntSize(5, 100), overflow_b_scroll_node->ContentsSize());
   EXPECT_TRUE(overflow_b_scroll_node->UserScrollableHorizontal());
   EXPECT_TRUE(overflow_b_scroll_node->UserScrollableVertical());
 }
@@ -3818,8 +3866,8 @@
   )HTML");
 
   LayoutObject* scroller = GetLayoutObjectByElementId("scroller");
-  ToLayoutBoxModelObject(scroller)->Layer()->GetScrollableArea()->ScrollBy(
-      ScrollOffset(0, 300), kUserScroll);
+  ToLayoutBox(scroller)->GetScrollableArea()->ScrollBy(ScrollOffset(0, 300),
+                                                       kUserScroll);
   GetDocument().View()->UpdateAllLifecyclePhases();
 
   EXPECT_EQ(FloatSize(8, 8), scroller->FirstFragment()
@@ -5855,10 +5903,10 @@
   EXPECT_EQ(LayoutPoint(85, 100), paint_offset("float-right"));
   EXPECT_EQ(LayoutPoint(15, 0), paint_offset("float-left-rtl"));
   EXPECT_EQ(LayoutPoint(100, 100), paint_offset("float-right-rtl"));
-  EXPECT_EQ(LayoutPoint(85, 0), paint_offset("float-left-vrl"));
-  EXPECT_EQ(LayoutPoint(-15, 85), paint_offset("float-right-vrl"));
-  EXPECT_EQ(LayoutPoint(85, 0), paint_offset("float-left-rtl-vrl"));
-  EXPECT_EQ(LayoutPoint(-15, 85), paint_offset("float-right-rtl-vrl"));
+  EXPECT_EQ(LayoutPoint(100, 0), paint_offset("float-left-vrl"));
+  EXPECT_EQ(LayoutPoint(0, 85), paint_offset("float-right-vrl"));
+  EXPECT_EQ(LayoutPoint(100, 0), paint_offset("float-left-rtl-vrl"));
+  EXPECT_EQ(LayoutPoint(0, 85), paint_offset("float-right-rtl-vrl"));
   EXPECT_EQ(LayoutPoint(0, 0), paint_offset("float-left-vlr"));
   EXPECT_EQ(LayoutPoint(100, 85), paint_offset("float-right-vlr"));
   EXPECT_EQ(LayoutPoint(0, 0), paint_offset("float-left-rtl-vlr"));
@@ -5935,7 +5983,7 @@
   const auto* properties = PaintPropertiesForElement("scroller");
   const auto* scroll_node = properties->ScrollTranslation()->ScrollNode();
   EXPECT_EQ(IntRect(0, 0, 200, 200), scroll_node->ContainerRect());
-  EXPECT_EQ(IntRect(0, 0, 1000, 200), scroll_node->ContentsRect());
+  EXPECT_EQ(IntSize(1000, 200), scroll_node->ContentsSize());
 }
 
 TEST_P(PaintPropertyTreeBuilderTest,
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc b/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc
index 7dfdb4b21..0d999d4 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc
@@ -777,7 +777,7 @@
                           ->ScrollTranslation()
                           ->ScrollNode();
   EXPECT_EQ(IntRect(0, 0, 100, 100), scroll_node->ContainerRect());
-  EXPECT_EQ(IntRect(0, 0, 200, 200), scroll_node->ContentsRect());
+  EXPECT_EQ(IntSize(200, 200), scroll_node->ContentsSize());
 
   GetDocument().getElementById("content")->setAttribute(
       HTMLNames::styleAttr, "width: 200px; height: 300px");
@@ -787,7 +787,7 @@
                              ->ScrollTranslation()
                              ->ScrollNode());
   EXPECT_EQ(IntRect(0, 0, 100, 100), scroll_node->ContainerRect());
-  EXPECT_EQ(IntRect(0, 0, 200, 300), scroll_node->ContentsRect());
+  EXPECT_EQ(IntSize(200, 300), scroll_node->ContentsSize());
 }
 
 // The scrollbars are attached to the visual viewport but created by (and have
@@ -809,8 +809,7 @@
 
   EXPECT_EQ(IntRect(0, 0, 800, 600),
             visual_viewport.GetScrollNode()->ContainerRect());
-  EXPECT_EQ(IntRect(0, 0, 800, 600),
-            visual_viewport.GetScrollNode()->ContentsRect());
+  EXPECT_EQ(IntSize(800, 600), visual_viewport.GetScrollNode()->ContentsSize());
 }
 
 TEST_P(PaintPropertyTreeUpdateTest, ScrollbarWidthChange) {
diff --git a/third_party/blink/renderer/core/paint/view_painter.cc b/third_party/blink/renderer/core/paint/view_painter.cc
index f9a0e750..eeef54c1 100644
--- a/third_party/blink/renderer/core/paint/view_painter.cc
+++ b/third_party/blink/renderer/core/paint/view_painter.cc
@@ -64,7 +64,12 @@
           IsPaintingBackgroundOfPaintContainerIntoScrollingContentsLayer(
               &layout_view_, paint_info)) {
     // Layout overflow, combined with the visible content size.
-    background_rect.Unite(layout_view_.DocumentRect());
+    auto document_rect = layout_view_.DocumentRect();
+    // DocumentRect is relative to ScrollOrigin. Add ScrollOrigin to let it be
+    // in the space of ContentsProperties(). See ScrollTranslation in
+    // object_paint_properties.h for details.
+    document_rect.MoveBy(layout_view_.ScrollOrigin());
+    background_rect.Unite(document_rect);
     display_item_client = layout_view_.Layer()->GraphicsLayerBacking();
     scoped_scroll_property.emplace(
         paint_info.context.GetPaintController(),
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h
index 9e229af..75d54f7 100644
--- a/third_party/blink/renderer/core/style/computed_style.h
+++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -1763,6 +1763,8 @@
   bool HasPerspective() const { return Perspective() > 0; }
 
   // Outline utility functions.
+  // HasOutline is insufficient to determine whether Node has an outline.
+  // Use NGOutlineUtils::HasPaintedOutline instead.
   bool HasOutline() const {
     return OutlineWidth() > 0 && OutlineStyle() > EBorderStyle::kHidden;
   }
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js
index 7ecf7bab..ddbfbc9 100644
--- a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js
+++ b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js
@@ -559,7 +559,7 @@
 
         allProperties.add(property);
         if (property.startsWith(query))
-          caseSensitivePrefix.push({text: property, priority: 4});
+          caseSensitivePrefix.push({text: property, priority: property === query ? 5 : 4});
         else if (lowerCaseProperty.startsWith(lowerCaseQuery))
           caseInsensitivePrefix.push({text: property, priority: 3});
         else if (property.indexOf(query) !== -1)
diff --git a/third_party/blink/renderer/modules/payments/payment_address.idl b/third_party/blink/renderer/modules/payments/payment_address.idl
index 74bda420..58901857 100644
--- a/third_party/blink/renderer/modules/payments/payment_address.idl
+++ b/third_party/blink/renderer/modules/payments/payment_address.idl
@@ -13,7 +13,7 @@
     readonly attribute DOMString city;
     readonly attribute DOMString country;
     readonly attribute DOMString dependentLocality;
-    readonly attribute DOMString languageCode;
+    [MeasureAs=PaymentAddressLanguageCode] readonly attribute DOMString languageCode;
     readonly attribute DOMString organization;
     readonly attribute DOMString phone;
     readonly attribute DOMString postalCode;
diff --git a/third_party/blink/renderer/modules/payments/payment_details_update.idl b/third_party/blink/renderer/modules/payments/payment_details_update.idl
index 73d0fcd6..7d798eb 100644
--- a/third_party/blink/renderer/modules/payments/payment_details_update.idl
+++ b/third_party/blink/renderer/modules/payments/payment_details_update.idl
@@ -7,4 +7,5 @@
 dictionary PaymentDetailsUpdate : PaymentDetailsBase {
     DOMString error;
     PaymentItem total;
+    AddressErrors shippingAddressErrors;
 };
diff --git a/third_party/blink/renderer/modules/payments/payment_request.cc b/third_party/blink/renderer/modules/payments/payment_request.cc
index 70e6da9..e4b9f48 100644
--- a/third_party/blink/renderer/modules/payments/payment_request.cc
+++ b/third_party/blink/renderer/modules/payments/payment_request.cc
@@ -686,6 +686,18 @@
   } else {
     output->error = "";
   }
+
+  if (input.hasShippingAddressErrors()) {
+    String error_message;
+    if (!PaymentsValidators::IsValidAddressErrorsFormat(
+            input.shippingAddressErrors(), &error_message)) {
+      exception_state.ThrowTypeError(error_message);
+      return;
+    }
+    output->shipping_address_errors =
+        payments::mojom::blink::AddressErrors::From(
+            input.shippingAddressErrors());
+  }
 }
 
 void ValidateAndConvertPaymentMethodData(
diff --git a/third_party/blink/renderer/modules/webaudio/oscillator_node.cc b/third_party/blink/renderer/modules/webaudio/oscillator_node.cc
index 6292f04..c1f07b9f 100644
--- a/third_party/blink/renderer/modules/webaudio/oscillator_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/oscillator_node.cc
@@ -154,6 +154,28 @@
   return true;
 }
 
+// Convert the detune value (in cents) to a frequency scale multiplier:
+// 2^(d/1200)
+static float DetuneToFrequencyMultiplier(float detune_value) {
+  return std::exp2(detune_value / 1200);
+}
+
+// Clamp the frequency value to lie with Nyquist frequency. For NaN, arbitrarily
+// clamp to +Nyquist.
+static void ClampFrequency(float* frequency,
+                           int frames_to_process,
+                           float nyquist) {
+  for (int k = 0; k < frames_to_process; ++k) {
+    float f = frequency[k];
+
+    if (std::isnan(f)) {
+      frequency[k] = nyquist;
+    } else {
+      frequency[k] = clampTo(f, -nyquist, nyquist);
+    }
+  }
+}
+
 bool OscillatorHandler::CalculateSampleAccuratePhaseIncrements(
     size_t frames_to_process) {
   bool is_good = frames_to_process <= phase_increments_.size() &&
@@ -199,9 +221,9 @@
     // Convert from cents to rate scalar.
     float k = 1.0 / 1200;
     Vsmul(detune_values, 1, &k, detune_values, 1, frames_to_process);
-    for (unsigned i = 0; i < frames_to_process; ++i)
-      detune_values[i] = powf(
-          2, detune_values[i]);  // FIXME: converting to expf() will be faster.
+    for (unsigned i = 0; i < frames_to_process; ++i) {
+      detune_values[i] = std::exp2(detune_values[i]);
+    }
 
     if (has_frequency_changes) {
       // Multiply frequencies by detune scalings.
@@ -212,11 +234,13 @@
     // Handle ordinary parameter changes if there are no scheduled
     // changes.
     float detune = detune_->Value();
-    float detune_scale = powf(2, detune / 1200);
+    float detune_scale = DetuneToFrequencyMultiplier(detune);
     final_scale *= detune_scale;
   }
 
   if (has_sample_accurate_values) {
+    ClampFrequency(phase_increments, frames_to_process,
+                   Context()->sampleRate() / 2);
     // Convert from frequency to wavetable increment.
     Vsmul(phase_increments, 1, &final_scale, phase_increments, 1,
           frames_to_process);
@@ -232,6 +256,7 @@
                              const float* lower_wave_data,
                              const float* higher_wave_data) {
   DCHECK_GE(incr, 0);
+  DCHECK(std::isfinite(virtual_read_index));
 
   double sample_lower = 0;
   double sample_higher = 0;
@@ -392,8 +417,9 @@
   if (!has_sample_accurate_values) {
     frequency = frequency_->Value();
     float detune = detune_->Value();
-    float detune_scale = powf(2, detune / 1200);
+    float detune_scale = DetuneToFrequencyMultiplier(detune);
     frequency *= detune_scale;
+    ClampFrequency(&frequency, 1, Context()->sampleRate() / 2);
     periodic_wave_->WaveDataForFundamentalFrequency(frequency, lower_wave_data,
                                                     higher_wave_data,
                                                     table_interpolation_factor);
@@ -479,12 +505,14 @@
                              -context.sampleRate() / 2,
                              context.sampleRate() / 2)),
       // Default to no detuning.
-      detune_(AudioParam::Create(
-          context,
-          kParamTypeOscillatorDetune,
-          0,
-          AudioParamHandler::AutomationRate::kAudio,
-          AudioParamHandler::AutomationRateMode::kVariable)) {
+      detune_(
+          AudioParam::Create(context,
+                             kParamTypeOscillatorDetune,
+                             0,
+                             AudioParamHandler::AutomationRate::kAudio,
+                             AudioParamHandler::AutomationRateMode::kVariable,
+                             -1200 * log2f(std::numeric_limits<float>::max()),
+                             1200 * log2f(std::numeric_limits<float>::max()))) {
   SetHandler(OscillatorHandler::Create(
       *this, context.sampleRate(), oscillator_type, wave_table,
       frequency_->Handler(), detune_->Handler()));
diff --git a/third_party/blink/renderer/platform/exported/web_input_event.cc b/third_party/blink/renderer/platform/exported/web_input_event.cc
index 19ccf48..c455581 100644
--- a/third_party/blink/renderer/platform/exported/web_input_event.cc
+++ b/third_party/blink/renderer/platform/exported/web_input_event.cc
@@ -54,7 +54,7 @@
 };
 
 struct SameSizeAsWebMouseWheelEvent : public SameSizeAsWebMouseEvent {
-  int mousewheel_data[12];
+  int mousewheel_data[13];
 };
 
 struct SameSizeAsWebGestureEvent : public SameSizeAsWebInputEvent {
diff --git a/third_party/blink/renderer/platform/feature_policy/feature_policy.cc b/third_party/blink/renderer/platform/feature_policy/feature_policy.cc
index 8aef9a66..5331c3d 100644
--- a/third_party/blink/renderer/platform/feature_policy/feature_policy.cc
+++ b/third_party/blink/renderer/platform/feature_policy/feature_policy.cc
@@ -5,6 +5,7 @@
 
 #include <algorithm>
 
+#include "base/metrics/histogram_macros.h"
 #include "third_party/blink/renderer/platform/json/json_values.h"
 #include "third_party/blink/renderer/platform/network/http_parsers.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
@@ -74,6 +75,12 @@
       if (features_specified.QuickGet(static_cast<int>(feature)))
         continue;
 
+      // Count the use of this feature policy.
+      if (!src_origin) {
+        UMA_HISTOGRAM_ENUMERATION("Blink.UseCounter.FeaturePolicy.Header",
+                                  feature);
+      }
+
       ParsedFeaturePolicyDeclaration allowlist;
       allowlist.feature = feature;
       features_specified.QuickSet(static_cast<int>(feature));
diff --git a/third_party/blink/renderer/platform/feature_policy/feature_policy_test.cc b/third_party/blink/renderer/platform/feature_policy/feature_policy_test.cc
index 9234b33..39ec83bd 100644
--- a/third_party/blink/renderer/platform/feature_policy/feature_policy_test.cc
+++ b/third_party/blink/renderer/platform/feature_policy/feature_policy_test.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/feature_policy/feature_policy.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/platform/testing/histogram_tester.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
@@ -291,6 +292,45 @@
       parsed_policy[0].origins[0].IsSameOriginWith(expected_url_origin_b_));
 }
 
+// Test histogram counting the use of feature policies in header.
+TEST_F(FeaturePolicyParserTest, HeaderHistogram) {
+  const char* histogram_name = "Blink.UseCounter.FeaturePolicy.Header";
+  HistogramTester tester;
+  Vector<String> messages;
+
+  ParseFeaturePolicy("payment; fullscreen", origin_a_.get(), nullptr, &messages,
+                     test_feature_name_map);
+  tester.ExpectTotalCount(histogram_name, 2);
+  tester.ExpectBucketCount(
+      histogram_name,
+      static_cast<int>(blink::mojom::FeaturePolicyFeature::kPayment), 1);
+  tester.ExpectBucketCount(
+      histogram_name,
+      static_cast<int>(blink::mojom::FeaturePolicyFeature::kFullscreen), 1);
+}
+
+// Test counting the use of each feature policy only once per header.
+TEST_F(FeaturePolicyParserTest, HistogramMultiple) {
+  const char* histogram_name = "Blink.UseCounter.FeaturePolicy.Header";
+  HistogramTester tester;
+  Vector<String> messages;
+
+  // If the same feature is listed multiple times, it should only be counted
+  // once.
+  ParseFeaturePolicy("geolocation 'self'; payment; geolocation *",
+                     origin_a_.get(), nullptr, &messages,
+                     test_feature_name_map);
+  ParseFeaturePolicy("fullscreen 'self', fullscreen *", origin_a_.get(),
+                     nullptr, &messages, test_feature_name_map);
+  tester.ExpectTotalCount(histogram_name, 3);
+  tester.ExpectBucketCount(
+      histogram_name,
+      static_cast<int>(blink::mojom::FeaturePolicyFeature::kGeolocation), 1);
+  tester.ExpectBucketCount(
+      histogram_name,
+      static_cast<int>(blink::mojom::FeaturePolicyFeature::kFullscreen), 1);
+}
+
 // Test policy mutation methods
 class FeaturePolicyMutationTest : public testing::Test {
  protected:
diff --git a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc
index 04da776c..655112d 100644
--- a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc
+++ b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc
@@ -7,7 +7,6 @@
 #include "third_party/blink/renderer/platform/fonts/font.h"
 #include "third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper.h"
 #include "third_party/blink/renderer/platform/fonts/shaping/shape_result.h"
-#include "third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h"
 #include "third_party/blink/renderer/platform/fonts/shaping/shape_result_spacing.h"
 #include "third_party/blink/renderer/platform/text/text_break_iterator.h"
 
diff --git a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker_test.cc b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker_test.cc
index bb83a5cf..3b62eec 100644
--- a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker_test.cc
+++ b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker_test.cc
@@ -10,7 +10,6 @@
 #include "third_party/blink/renderer/platform/fonts/font.h"
 #include "third_party/blink/renderer/platform/fonts/font_cache.h"
 #include "third_party/blink/renderer/platform/fonts/font_test_utilities.h"
-#include "third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h"
 #include "third_party/blink/renderer/platform/fonts/shaping/shape_result_test_info.h"
 #include "third_party/blink/renderer/platform/text/text_break_iterator.h"
 #include "third_party/blink/renderer/platform/text/text_run.h"
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
index 7c55b07..7d84c4d1 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
@@ -752,7 +752,8 @@
     } else if (const auto* scroll = transform->ScrollNode()) {
       // Limit layer bounds to the scroll range to hide the areas that will
       // never be scrolled into the visible area.
-      pending_layer.bounds.Intersect(FloatRect(scroll->ContentsRect()));
+      pending_layer.bounds.Intersect(
+          FloatRect(FloatPoint(), FloatSize(scroll->ContentsSize())));
     }
 
     gfx::Vector2dF layer_offset;
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc
index 747063c2..1f57e88 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc
@@ -794,7 +794,7 @@
 static ScrollPaintPropertyNode::State ScrollState1() {
   ScrollPaintPropertyNode::State state;
   state.container_rect = IntRect(3, 5, 11, 13);
-  state.contents_rect = IntRect(-3, -5, 27, 31);
+  state.contents_size = IntSize(27, 31);
   state.user_scrollable_horizontal = true;
   return state;
 }
@@ -803,7 +803,7 @@
 static ScrollPaintPropertyNode::State ScrollState2() {
   ScrollPaintPropertyNode::State state;
   state.container_rect = IntRect(0, 0, 19, 23);
-  state.contents_rect = IntRect(0, 0, 29, 31);
+  state.contents_size = IntSize(29, 31);
   state.user_scrollable_horizontal = true;
   return state;
 }
@@ -824,7 +824,7 @@
                               const cc::ScrollNode& cc_scroll) {
   EXPECT_EQ(static_cast<gfx::Size>(blink_scroll.ContainerRect().Size()),
             cc_scroll.container_bounds);
-  EXPECT_EQ(static_cast<gfx::Size>(blink_scroll.ContentsRect().Size()),
+  EXPECT_EQ(static_cast<gfx::Size>(blink_scroll.ContentsSize()),
             cc_scroll.bounds);
   EXPECT_EQ(blink_scroll.UserScrollableHorizontal(),
             cc_scroll.user_scrollable_horizontal);
@@ -870,10 +870,10 @@
   EXPECT_EQ(scroll_node_index, scroll_node.id);
 
   // The scrolling contents layer is clipped to the scrolling range.
-  EXPECT_EQ(gfx::Size(27, 14), layer->bounds());
-  EXPECT_EQ(gfx::Vector2dF(-3, 12), layer->offset_to_transform_parent());
+  EXPECT_EQ(gfx::Size(27, 19), layer->bounds());
+  EXPECT_EQ(gfx::Vector2dF(0, 12), layer->offset_to_transform_parent());
   EXPECT_THAT(layer->GetPicture(),
-              Pointee(DrawsRectangle(FloatRect(0, 0, 63, 19), Color::kWhite)));
+              Pointee(DrawsRectangle(FloatRect(0, 0, 60, 19), Color::kWhite)));
 
   auto* scroll_layer = ScrollableLayerAt(0);
   EXPECT_TRUE(scroll_layer->scrollable());
@@ -917,10 +917,10 @@
   EXPECT_EQ(scroll_node.id, layer1->scroll_tree_index());
 
   // The scrolling layer is clipped to the scrollable range.
-  EXPECT_EQ(gfx::Vector2dF(-3, 4), layer0->offset_to_transform_parent());
+  EXPECT_EQ(gfx::Vector2dF(0, 4), layer0->offset_to_transform_parent());
   EXPECT_EQ(gfx::Size(27, 8), layer0->bounds());
   EXPECT_THAT(layer0->GetPicture(),
-              Pointee(DrawsRectangle(FloatRect(0, 0, 43, 8), Color::kBlack)));
+              Pointee(DrawsRectangle(FloatRect(0, 0, 40, 8), Color::kBlack)));
 
   // The layer under the transform without a scroll node is not clipped.
   EXPECT_EQ(gfx::Vector2dF(1, -30), layer1->offset_to_transform_parent());
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc
index f6d7101..3ac1244 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc
@@ -29,8 +29,8 @@
                     cc::DisplayItemList& cc_list)
       : layer_state_(layer_state),
         layer_offset_(layer_offset),
-        current_transform_(layer_state.Transform()),
-        current_clip_(layer_state.Clip()),
+        current_transform_(layer_state.Transform()->Unalias()),
+        current_clip_(layer_state.Clip()->Unalias()),
         current_effect_(layer_state.Effect()),
         chunk_to_layer_mapper_(layer_state_,
                                layer_offset_,
@@ -311,12 +311,13 @@
 }
 
 void ConversionContext::SwitchToClip(const ClipPaintPropertyNode* target_clip) {
+  target_clip = target_clip->Unalias();
   if (target_clip == current_clip_)
     return;
 
   // Step 1: Exit all clips until the lowest common ancestor is found.
   const ClipPaintPropertyNode* lca_clip =
-      &LowestCommonAncestor(*target_clip, *current_clip_);
+      LowestCommonAncestor(*target_clip, *current_clip_).Unalias();
   while (current_clip_ != lca_clip) {
 #if DCHECK_IS_ON()
     DCHECK(state_stack_.size() && state_stack_.back().type == StateEntry::kClip)
@@ -327,7 +328,7 @@
 #endif
     if (!state_stack_.size() || state_stack_.back().type != StateEntry::kClip)
       break;
-    current_clip_ = current_clip_->Parent();
+    current_clip_ = current_clip_->Parent()->Unalias();
     StateEntry& previous_state = state_stack_.back();
     if (current_clip_ == lca_clip) {
       // |lca_clip| is an intermediate clip in a series of combined clips.
@@ -345,7 +346,7 @@
   // At this point the current clip must be an ancestor of the target.
   Vector<const ClipPaintPropertyNode*, 1u> pending_clips;
   for (const ClipPaintPropertyNode* clip = target_clip; clip != current_clip_;
-       clip = clip->Parent()) {
+       clip = clip->Parent()->Unalias()) {
     // This should never happen unless the DCHECK in step 1 failed.
     if (!clip)
       break;
@@ -377,6 +378,7 @@
 void ConversionContext::StartClip(
     const FloatRoundedRect& combined_clip_rect,
     const ClipPaintPropertyNode* lowest_combined_clip_node) {
+  DCHECK_EQ(lowest_combined_clip_node, lowest_combined_clip_node->Unalias());
   auto* local_transform =
       lowest_combined_clip_node->LocalTransformSpace()->Unalias();
   if (local_transform != current_transform_)
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc
index bee7204..a3aeb43 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc
@@ -1104,5 +1104,87 @@
                            cc::PaintOpType::Restore   // end t1
                        }));
 }
+
+TEST_F(PaintChunksToCcLayerTest, NoopClipDoesNotEmitItems) {
+  FloatRoundedRect clip_rect(0.f, 0.f, 1.f, 1.f);
+  auto c1 = CreateClip(c0(), &t0(), clip_rect);
+  auto noop_c2 = ClipPaintPropertyNode::CreateAlias(*c1);
+  auto noop_c3 = ClipPaintPropertyNode::CreateAlias(*noop_c2);
+  auto c4 = CreateClip(*noop_c3, &t0(), clip_rect);
+
+  TestChunks chunks;
+  chunks.AddChunk(t0(), c0(), e0());
+  chunks.AddChunk(t0(), *c1, e0());
+  chunks.AddChunk(t0(), *noop_c2, e0());
+  chunks.AddChunk(t0(), *noop_c3, e0());
+  chunks.AddChunk(t0(), *c4, e0());
+  chunks.AddChunk(t0(), *noop_c2, e0());
+  chunks.AddChunk(t0(), *c1, e0());
+
+  auto output =
+      PaintChunksToCcLayer::Convert(
+          chunks.chunks, PropertyTreeState::Root(), gfx::Vector2dF(),
+          chunks.items, cc::DisplayItemList::kToBeReleasedAsPaintOpBuffer)
+          ->ReleaseAsRecord();
+
+  EXPECT_THAT(*output,
+              PaintRecordMatcher::Make({
+                  cc::PaintOpType::DrawRecord,                       // c0
+                  cc::PaintOpType::Save, cc::PaintOpType::ClipRect,  // c1
+                  cc::PaintOpType::DrawRecord,  // draw with c1
+                  cc::PaintOpType::DrawRecord,  // draw with noop_c2
+                  cc::PaintOpType::DrawRecord,  // draw_with noop_c3
+                  cc::PaintOpType::Save, cc::PaintOpType::ClipRect,  // c4
+                  cc::PaintOpType::DrawRecord,  // draw with c4
+                  cc::PaintOpType::Restore,     // end c4
+                  cc::PaintOpType::DrawRecord,  // draw with noop_c2
+                  cc::PaintOpType::DrawRecord,  // draw with c1
+                  cc::PaintOpType::Restore      // end noop_c2 (or c1)
+              }));
+}
+
+TEST_F(PaintChunksToCcLayerTest, EffectUndoesNoopClip) {
+  FloatRoundedRect clip_rect(0.f, 0.f, 1.f, 1.f);
+  auto c1 = CreateClip(c0(), &t0(), clip_rect);
+  auto noop_c2 = ClipPaintPropertyNode::CreateAlias(*c1);
+  auto e1 = CreateOpacityEffect(e0(), &t0(), c1.get(), 0.5);
+
+  TestChunks chunks;
+  chunks.AddChunk(t0(), *noop_c2, e0());
+  chunks.AddChunk(t0(), *noop_c2, *e1);
+
+  auto output =
+      PaintChunksToCcLayer::Convert(
+          chunks.chunks, PropertyTreeState::Root(), gfx::Vector2dF(),
+          chunks.items, cc::DisplayItemList::kToBeReleasedAsPaintOpBuffer)
+          ->ReleaseAsRecord();
+
+  EXPECT_THAT(*output,
+              PaintRecordMatcher::Make({
+                  cc::PaintOpType::Save, cc::PaintOpType::ClipRect,  // noop_c2
+                  cc::PaintOpType::DrawRecord,      // draw with noop_c2
+                  cc::PaintOpType::SaveLayerAlpha,  // e1
+                  cc::PaintOpType::DrawRecord,      // draw with e1
+                  cc::PaintOpType::Restore,         // end e1
+                  cc::PaintOpType::Restore          // end noop_c2
+              }));
+}
+
+TEST_F(PaintChunksToCcLayerTest, StartWithAliasClip) {
+  auto noop_c1 = ClipPaintPropertyNode::CreateAlias(c0());
+
+  TestChunks chunks;
+  chunks.AddChunk(t0(), *noop_c1, e0());
+
+  auto output =
+      PaintChunksToCcLayer::Convert(
+          chunks.chunks, PropertyTreeState(&t0(), noop_c1.get(), &e0()),
+          gfx::Vector2dF(), chunks.items,
+          cc::DisplayItemList::kToBeReleasedAsPaintOpBuffer)
+          ->ReleaseAsRecord();
+
+  EXPECT_THAT(*output, PaintRecordMatcher::Make({cc::PaintOpType::DrawRecord}));
+}
+
 }  // namespace
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
index 2ac29aa..806f90f2 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
@@ -282,8 +282,7 @@
 
   compositor_node.container_bounds =
       static_cast<gfx::Size>(scroll_node->ContainerRect().Size());
-  compositor_node.bounds =
-      static_cast<gfx::Size>(scroll_node->ContentsRect().Size());
+  compositor_node.bounds = static_cast<gfx::Size>(scroll_node->ContentsSize());
   compositor_node.user_scrollable_horizontal =
       scroll_node->UserScrollableHorizontal();
   compositor_node.user_scrollable_vertical =
diff --git a/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.cc b/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.cc
index 3714f00..e7bd01d 100644
--- a/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.cc
@@ -10,11 +10,12 @@
 namespace blink {
 
 const ClipPaintPropertyNode& ClipPaintPropertyNode::Root() {
-  DEFINE_STATIC_REF(
-      ClipPaintPropertyNode, root,
-      base::AdoptRef(new ClipPaintPropertyNode(
-          nullptr, State{&TransformPaintPropertyNode::Root(),
-                         FloatRoundedRect(LayoutRect::InfiniteIntRect())})));
+  DEFINE_STATIC_REF(ClipPaintPropertyNode, root,
+                    base::AdoptRef(new ClipPaintPropertyNode(
+                        nullptr,
+                        State{&TransformPaintPropertyNode::Root(),
+                              FloatRoundedRect(LayoutRect::InfiniteIntRect())},
+                        true /* is_parent_alias */)));
   return *root;
 }
 
diff --git a/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.h b/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.h
index 390e29923..069d24c 100644
--- a/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.h
+++ b/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.h
@@ -59,7 +59,15 @@
   static scoped_refptr<ClipPaintPropertyNode> Create(
       const ClipPaintPropertyNode& parent,
       State&& state) {
-    return base::AdoptRef(new ClipPaintPropertyNode(&parent, std::move(state)));
+    return base::AdoptRef(new ClipPaintPropertyNode(
+        &parent, std::move(state), false /* is_parent_alias */));
+  }
+  static scoped_refptr<ClipPaintPropertyNode> CreateAlias(
+      const ClipPaintPropertyNode& parent) {
+    return base::AdoptRef(new ClipPaintPropertyNode(
+        &parent,
+        State{nullptr, FloatRoundedRect(LayoutRect::InfiniteIntRect())},
+        true /* is_parent_alias */));
   }
 
   bool Update(const ClipPaintPropertyNode& parent, State&& state) {
@@ -67,6 +75,7 @@
     if (state == state_)
       return parent_changed;
 
+    DCHECK(!IsParentAlias()) << "Changed the state of an alias node.";
     SetChanged();
     state_ = std::move(state);
     return true;
@@ -86,8 +95,20 @@
     return parent == Parent() && state_.EqualIgnoringHitTestRects(state);
   }
 
+  // Returns the local transform space of this node. Note that the function
+  // first unaliases the node, meaning that it walks up the parent chain until
+  // it finds a concrete node (not a parent alias) or root. The reason for this
+  // is that a parent alias conceptually doesn't have a local transform space,
+  // so we just want to return a convenient space which would eliminate extra
+  // work. The parent's transform node qualifies as that. Also note, although
+  // this is a walk up the parent chain, the only case it would be heavy is if
+  // there is a long chain of nested aliases, which is unlikely.
   const TransformPaintPropertyNode* LocalTransformSpace() const {
-    return state_.local_transform_space.get();
+    // TODO(vmpstr): If this becomes a performance problem, then we should audit
+    // the call sites and explicitly unalias clip nodes everywhere. If this is
+    // done, then here we can add a DCHECK that we never invoke this function on
+    // a parent alias.
+    return Unalias()->state_.local_transform_space.get();
   }
   const FloatRoundedRect& ClipRect() const { return state_.clip_rect; }
   const FloatRoundedRect& ClipRectExcludingOverlayScrollbars() const {
@@ -106,13 +127,15 @@
   // The clone function is used by FindPropertiesNeedingUpdate.h for recording
   // a clip node before it has been updated, to later detect changes.
   scoped_refptr<ClipPaintPropertyNode> Clone() const {
-    return base::AdoptRef(new ClipPaintPropertyNode(Parent(), State(state_)));
+    return base::AdoptRef(
+        new ClipPaintPropertyNode(Parent(), State(state_), IsParentAlias()));
   }
 
   // The equality operator is used by FindPropertiesNeedingUpdate.h for checking
   // if a clip node has changed.
   bool operator==(const ClipPaintPropertyNode& o) const {
-    return Parent() == o.Parent() && state_ == o.state_;
+    return Parent() == o.Parent() && state_ == o.state_ &&
+           IsParentAlias() == o.IsParentAlias();
   }
 #endif
 
@@ -122,8 +145,10 @@
   size_t CacheMemoryUsageInBytes() const;
 
  private:
-  ClipPaintPropertyNode(const ClipPaintPropertyNode* parent, State&& state)
-      : PaintPropertyNode(parent), state_(std::move(state)) {}
+  ClipPaintPropertyNode(const ClipPaintPropertyNode* parent,
+                        State&& state,
+                        bool is_parent_alias)
+      : PaintPropertyNode(parent, is_parent_alias), state_(std::move(state)) {}
 
   // For access to GetClipCache();
   friend class GeometryMapper;
diff --git a/third_party/blink/renderer/platform/graphics/paint/display_item_client.h b/third_party/blink/renderer/platform/graphics/paint/display_item_client.h
index cda00f63..2d6ec1c 100644
--- a/third_party/blink/renderer/platform/graphics/paint/display_item_client.h
+++ b/third_party/blink/renderer/platform/graphics/paint/display_item_client.h
@@ -44,7 +44,7 @@
   // The visual rect of this DisplayItemClient. For SPv1, it's in the object
   // space of the object that owns the GraphicsLayer, i.e. offset by
   // GraphicsLayer::OffsetFromLayoutObjectWithSubpixelAccumulation().
-  // For SPv2, it's in the space of the parent transform node.
+  // It's in the space of the parent transform node.
   virtual LayoutRect VisualRect() const = 0;
 
   // The outset will be used to inflate visual rect after the visual rect is
diff --git a/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.cc b/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.cc
index dc1716f..906bf2bf4 100644
--- a/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.cc
@@ -37,8 +37,8 @@
     json->SetString("parent", String::Format("%p", Parent()));
   if (state_.container_rect != IntRect())
     json->SetString("containerRect", state_.container_rect.ToString());
-  if (state_.contents_rect != IntRect())
-    json->SetString("contentsRect", state_.contents_rect.ToString());
+  if (!state_.contents_size.IsZero())
+    json->SetString("contentsSize", state_.contents_size.ToString());
   if (state_.user_scrollable_horizontal || state_.user_scrollable_vertical) {
     json->SetString(
         "userScrollable",
diff --git a/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h b/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h
index 2bd206ee9..e1479269 100644
--- a/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h
+++ b/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h
@@ -39,7 +39,7 @@
   // a struct with default values is used to represent the state.
   struct State {
     IntRect container_rect;
-    IntRect contents_rect;
+    IntSize contents_size;
     bool user_scrollable_horizontal = false;
     bool user_scrollable_vertical = false;
     bool scrolls_inner_viewport = false;
@@ -56,7 +56,7 @@
 
     bool operator==(const State& o) const {
       return container_rect == o.container_rect &&
-             contents_rect == o.contents_rect &&
+             contents_size == o.contents_size &&
              user_scrollable_horizontal == o.user_scrollable_horizontal &&
              user_scrollable_vertical == o.user_scrollable_vertical &&
              scrolls_inner_viewport == o.scrolls_inner_viewport &&
@@ -109,9 +109,8 @@
   // the rect.
   const IntRect& ContainerRect() const { return state_.container_rect; }
 
-  // Rect of the contents that is scrolled within the container rect, in the
-  // space of the associated transform node (ScrollTranslation).
-  const IntRect& ContentsRect() const { return state_.contents_rect; }
+  // Size of the contents that is scrolled within the container rect.
+  const IntSize& ContentsSize() const { return state_.contents_size; }
 
   bool UserScrollableHorizontal() const {
     return state_.user_scrollable_horizontal;
diff --git a/third_party/blink/renderer/platform/loader/cors/cors.cc b/third_party/blink/renderer/platform/loader/cors/cors.cc
index e514903..297a18e 100644
--- a/third_party/blink/renderer/platform/loader/cors/cors.cc
+++ b/third_party/blink/renderer/platform/loader/cors/cors.cc
@@ -232,26 +232,6 @@
       std::string(utf8_value.data(), utf8_value.length()));
 }
 
-bool IsNoCORSSafelistedHeader(const String& name, const String& value) {
-  DCHECK(!name.IsNull());
-  DCHECK(!value.IsNull());
-  return network::cors::IsNoCORSSafelistedHeader(WebString(name).Latin1(),
-                                                 WebString(value).Latin1());
-}
-
-Vector<String> CORSUnsafeRequestHeaderNames(const HTTPHeaderMap& headers) {
-  net::HttpRequestHeaders::HeaderVector in;
-  for (const auto& entry : headers) {
-    in.push_back(net::HttpRequestHeaders::HeaderKeyValuePair(
-        WebString(entry.key).Latin1(), WebString(entry.value).Latin1()));
-  }
-
-  Vector<String> header_names;
-  for (const auto& name : network::cors::CORSUnsafeRequestHeaderNames(in))
-    header_names.push_back(WebString::FromLatin1(name));
-  return header_names;
-}
-
 bool IsForbiddenHeaderName(const String& name) {
   CString utf8_name = name.Utf8();
   return network::cors::IsForbiddenHeader(
@@ -259,20 +239,21 @@
 }
 
 bool ContainsOnlyCORSSafelistedHeaders(const HTTPHeaderMap& header_map) {
-  Vector<String> header_names = CORSUnsafeRequestHeaderNames(header_map);
-  return header_names.IsEmpty();
+  for (const auto& header : header_map) {
+    if (!IsCORSSafelistedHeader(header.key, header.value))
+      return false;
+  }
+  return true;
 }
 
 bool ContainsOnlyCORSSafelistedOrForbiddenHeaders(
-    const HTTPHeaderMap& headers) {
-  Vector<String> header_names;
-
-  net::HttpRequestHeaders::HeaderVector in;
-  for (const auto& entry : headers) {
-    in.push_back(net::HttpRequestHeaders::HeaderKeyValuePair(
-        WebString(entry.key).Latin1(), WebString(entry.value).Latin1()));
+    const HTTPHeaderMap& header_map) {
+  for (const auto& header : header_map) {
+    if (!IsCORSSafelistedHeader(header.key, header.value) &&
+        !IsForbiddenHeaderName(header.key))
+      return false;
   }
-  return network::cors::CORSUnsafeNotForbiddenRequestHeaderNames(in).empty();
+  return true;
 }
 
 bool IsOkStatus(int status) {
diff --git a/third_party/blink/renderer/platform/loader/cors/cors.h b/third_party/blink/renderer/platform/loader/cors/cors.h
index de2f73f4..9d5eb4e 100644
--- a/third_party/blink/renderer/platform/loader/cors/cors.h
+++ b/third_party/blink/renderer/platform/loader/cors/cors.h
@@ -11,7 +11,6 @@
 #include "services/network/public/mojom/fetch_api.mojom-shared.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
-#include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace blink {
 
@@ -90,10 +89,6 @@
 PLATFORM_EXPORT bool IsCORSSafelistedContentType(const String&);
 PLATFORM_EXPORT bool IsCORSSafelistedHeader(const String& name,
                                             const String& value);
-PLATFORM_EXPORT bool IsNoCORSSafelistedHeader(const String& name,
-                                              const String& value);
-PLATFORM_EXPORT Vector<String> CORSUnsafeRequestHeaderNames(
-    const HTTPHeaderMap& headers);
 PLATFORM_EXPORT bool IsForbiddenHeaderName(const String& name);
 PLATFORM_EXPORT bool ContainsOnlyCORSSafelistedHeaders(const HTTPHeaderMap&);
 PLATFORM_EXPORT bool ContainsOnlyCORSSafelistedOrForbiddenHeaders(
diff --git a/third_party/blink/renderer/platform/testing/shaping_line_breaker_perf_test.cc b/third_party/blink/renderer/platform/testing/shaping_line_breaker_perf_test.cc
index 542c058..8952c35 100644
--- a/third_party/blink/renderer/platform/testing/shaping_line_breaker_perf_test.cc
+++ b/third_party/blink/renderer/platform/testing/shaping_line_breaker_perf_test.cc
@@ -10,7 +10,6 @@
 #include "third_party/blink/renderer/platform/fonts/font.h"
 #include "third_party/blink/renderer/platform/fonts/font_cache.h"
 #include "third_party/blink/renderer/platform/fonts/font_test_utilities.h"
-#include "third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h"
 #include "third_party/blink/renderer/platform/fonts/shaping/shape_result_test_info.h"
 #include "third_party/blink/renderer/platform/text/text_break_iterator.h"
 #include "third_party/blink/renderer/platform/text/text_run.h"
diff --git a/third_party/feed/README.chromium b/third_party/feed/README.chromium
index e108d94..fdbb7bf6 100644
--- a/third_party/feed/README.chromium
+++ b/third_party/feed/README.chromium
@@ -2,7 +2,7 @@
 Short name: feed
 URL: https://chromium.googlesource.com/feed
 Version: 0
-Revision: b7306ddecfd12d00fad796c0db3425706850b973
+Revision: e389d69f7979109f1f9109bb78b13099930b7aa8
 License: Apache 2.0
 License File: LICENSE
 Security Critical: yes
diff --git a/third_party/feed/java_sources.gni b/third_party/feed/java_sources.gni
index 905fe53..c0208f5 100644
--- a/third_party/feed/java_sources.gni
+++ b/third_party/feed/java_sources.gni
@@ -231,6 +231,7 @@
   "src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietAssetProvider.java",
   "src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietCustomElementProvider.java",
   "src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietHostBindingProvider.java",
+  "src/src/main/java/com/google/android/libraries/feed/sharedstream/removetrackingfactory/StreamRemoveTrackingFactory.java",
 ]
 
 feed_conformance_test_lib_sources = [
diff --git a/third_party/webrtc_overrides/BUILD.gn b/third_party/webrtc_overrides/BUILD.gn
index c9a70179..a4dbb239 100644
--- a/third_party/webrtc_overrides/BUILD.gn
+++ b/third_party/webrtc_overrides/BUILD.gn
@@ -112,6 +112,7 @@
     ":libjingle_webrtc_common",
   ]
   deps = [
+    ":metrics",
     ":task_queue_impl",
     "//base",
     "//third_party/webrtc/rtc_base",
@@ -119,6 +120,11 @@
   ]
 }
 
+static_library("metrics") {
+  sources = [ "metrics.cc" ]
+  deps = [ "//base" ]
+}
+
 source_set("libjingle_webrtc_common") {
   configs += [
     ":jingle_unexported_configs",
diff --git a/third_party/webrtc_overrides/init_webrtc.cc b/third_party/webrtc_overrides/init_webrtc.cc
index b26b7c5..10df8b47 100644
--- a/third_party/webrtc_overrides/init_webrtc.cc
+++ b/third_party/webrtc_overrides/init_webrtc.cc
@@ -8,8 +8,6 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
-#include "base/metrics/histogram.h"
-#include "base/metrics/sparse_histogram.h"
 #include "base/native_library.h"
 #include "base/path_service.h"
 #include "base/trace_event/trace_event.h"
@@ -35,57 +33,6 @@
       id, num_args, arg_names, arg_types, arg_values, NULL, flags);
 }
 
-namespace webrtc {
-
-// Define webrtc::metrics functions to provide webrtc with implementations.
-namespace metrics {
-
-// This class doesn't actually exist, so don't go looking for it :)
-// This type is just fwd declared here in order to use it as an opaque type
-// between the Histogram functions in this file.
-class Histogram;
-
-Histogram* HistogramFactoryGetCounts(
-    const std::string& name, int min, int max, int bucket_count) {
-  return reinterpret_cast<Histogram*>(
-      base::Histogram::FactoryGet(name, min, max, bucket_count,
-          base::HistogramBase::kUmaTargetedHistogramFlag));
-}
-
-Histogram* HistogramFactoryGetCountsLinear(
-    const std::string& name, int min, int max, int bucket_count) {
-  return reinterpret_cast<Histogram*>(
-      base::LinearHistogram::FactoryGet(name, min, max, bucket_count,
-          base::HistogramBase::kUmaTargetedHistogramFlag));
-}
-
-Histogram* HistogramFactoryGetEnumeration(
-    const std::string& name, int boundary) {
-  return reinterpret_cast<Histogram*>(
-      base::LinearHistogram::FactoryGet(name, 1, boundary, boundary + 1,
-          base::HistogramBase::kUmaTargetedHistogramFlag));
-}
-
-Histogram* SparseHistogramFactoryGetEnumeration(const std::string& name,
-                                                int boundary) {
-  return reinterpret_cast<Histogram*>(base::SparseHistogram::FactoryGet(
-      name, base::HistogramBase::kUmaTargetedHistogramFlag));
-}
-
-const char* GetHistogramName(Histogram* histogram_pointer) {
-  base::HistogramBase* ptr =
-      reinterpret_cast<base::HistogramBase*>(histogram_pointer);
-  return ptr->histogram_name();
-}
-
-void HistogramAdd(Histogram* histogram_pointer, int sample) {
-  base::HistogramBase* ptr =
-      reinterpret_cast<base::HistogramBase*>(histogram_pointer);
-  ptr->Add(sample);
-}
-}  // namespace metrics
-}  // namespace webrtc
-
 bool InitializeWebRtcModule() {
   // Workaround for crbug.com/176522
   // On Linux, we can't fetch the number of cores after the sandbox has been
diff --git a/third_party/webrtc_overrides/metrics.cc b/third_party/webrtc_overrides/metrics.cc
new file mode 100644
index 0000000..2284046b
--- /dev/null
+++ b/third_party/webrtc_overrides/metrics.cc
@@ -0,0 +1,57 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
+
+namespace webrtc {
+
+// Define webrtc::metrics functions to provide webrtc with implementations.
+namespace metrics {
+
+// This class doesn't actually exist, so don't go looking for it :)
+// This type is just fwd declared here in order to use it as an opaque type
+// between the Histogram functions in this file.
+class Histogram;
+
+Histogram* HistogramFactoryGetCounts(
+    const std::string& name, int min, int max, int bucket_count) {
+  return reinterpret_cast<Histogram*>(
+      base::Histogram::FactoryGet(name, min, max, bucket_count,
+          base::HistogramBase::kUmaTargetedHistogramFlag));
+}
+
+Histogram* HistogramFactoryGetCountsLinear(
+    const std::string& name, int min, int max, int bucket_count) {
+  return reinterpret_cast<Histogram*>(
+      base::LinearHistogram::FactoryGet(name, min, max, bucket_count,
+          base::HistogramBase::kUmaTargetedHistogramFlag));
+}
+
+Histogram* HistogramFactoryGetEnumeration(
+    const std::string& name, int boundary) {
+  return reinterpret_cast<Histogram*>(
+      base::LinearHistogram::FactoryGet(name, 1, boundary, boundary + 1,
+          base::HistogramBase::kUmaTargetedHistogramFlag));
+}
+
+Histogram* SparseHistogramFactoryGetEnumeration(const std::string& name,
+                                                int boundary) {
+  return reinterpret_cast<Histogram*>(base::SparseHistogram::FactoryGet(
+      name, base::HistogramBase::kUmaTargetedHistogramFlag));
+}
+
+const char* GetHistogramName(Histogram* histogram_pointer) {
+  base::HistogramBase* ptr =
+      reinterpret_cast<base::HistogramBase*>(histogram_pointer);
+  return ptr->histogram_name();
+}
+
+void HistogramAdd(Histogram* histogram_pointer, int sample) {
+  base::HistogramBase* ptr =
+      reinterpret_cast<base::HistogramBase*>(histogram_pointer);
+  ptr->Add(sample);
+}
+}  // namespace metrics
+}  // namespace webrtc
diff --git a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
index 7768fe3..3df46a3c 100644
--- a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
+++ b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
@@ -570,7 +570,7 @@
 
   json_->OpenObject();
   json_->Write("name", info->record()->getQualifiedNameAsString());
-  json_->Write("loc", GetLocString(info->record()->getLocStart()));
+  json_->Write("loc", GetLocString(info->record()->getBeginLoc()));
   json_->CloseObject();
 
   class DumpEdgeVisitor : public RecursiveEdgeVisitor {
@@ -637,16 +637,12 @@
   DumpEdgeVisitor visitor(json_);
 
   for (auto& base : info->GetBases())
-    visitor.DumpEdge(info,
-                     base.second.info(),
-                     "<super>",
-                     Edge::kStrong,
-                     GetLocString(base.second.spec().getLocStart()));
+    visitor.DumpEdge(info, base.second.info(), "<super>", Edge::kStrong,
+                     GetLocString(base.second.spec().getBeginLoc()));
 
   for (auto& field : info->GetFields())
-    visitor.DumpField(info,
-                      &field.second,
-                      GetLocString(field.second.field()->getLocStart()));
+    visitor.DumpField(info, &field.second,
+                      GetLocString(field.second.field()->getBeginLoc()));
 }
 
 std::string BlinkGCPluginConsumer::GetLocString(SourceLocation loc) {
@@ -681,7 +677,7 @@
 
 bool BlinkGCPluginConsumer::InIgnoredDirectory(RecordInfo* info) {
   std::string filename;
-  if (!GetFilename(info->record()->getLocStart(), &filename))
+  if (!GetFilename(info->record()->getBeginLoc(), &filename))
     return false;  // TODO: should we ignore non-existing file locations?
 #if defined(_WIN32)
   std::replace(filename.begin(), filename.end(), '\\', '/');
diff --git a/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp b/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
index 8217581..032f3ff 100644
--- a/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
+++ b/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
@@ -312,7 +312,7 @@
     RecordInfo* derived,
     CXXMethodDecl* trace,
     CXXRecordDecl* base) {
-  ReportDiagnostic(trace->getLocStart(), diag_base_requires_tracing_)
+  ReportDiagnostic(trace->getBeginLoc(), diag_base_requires_tracing_)
       << base << derived->record();
 }
 
@@ -327,8 +327,7 @@
       break;
     }
   }
-  ReportDiagnostic(trace->getLocStart(), diag)
-      << info->record();
+  ReportDiagnostic(trace->getBeginLoc(), diag) << info->record();
   for (auto& field : info->GetFields()) {
     if (!field.second.IsProperlyTraced())
       NoteFieldRequiresTracing(info, field.first);
@@ -340,8 +339,7 @@
 void DiagnosticsReporter::ClassContainsInvalidFields(
     RecordInfo* info,
     const CheckFieldsVisitor::Errors& errors) {
-
-  ReportDiagnostic(info->record()->getLocStart(),
+  ReportDiagnostic(info->record()->getBeginLoc(),
                    diag_class_contains_invalid_fields_)
       << info->record();
 
@@ -380,7 +378,7 @@
     for (FieldPoint* path : error) {
       if (!point) {
         point = path;
-        ReportDiagnostic(info->record()->getLocStart(),
+        ReportDiagnostic(info->record()->getBeginLoc(),
                          diag_class_contains_gc_root_)
             << info->record() << point->field();
         continue;
@@ -403,7 +401,7 @@
     unsigned diag_note = as_eagerly_finalized ?
                          diag_eagerly_finalized_field_note_ :
                          diag_finalized_field_note_;
-    ReportDiagnostic(error.member->getLocStart(), diag_error)
+    ReportDiagnostic(error.member->getBeginLoc(), diag_error)
         << dtor << error.field->field();
     NoteField(error.field, diag_note);
   }
@@ -426,7 +424,7 @@
     RecordInfo* info,
     CXXMethodDecl* trace,
     CXXMethodDecl* overridden) {
-  ReportDiagnostic(trace->getLocStart(), diag_overridden_non_virtual_trace_)
+  ReportDiagnostic(trace->getBeginLoc(), diag_overridden_non_virtual_trace_)
       << info->record() << overridden->getParent();
   NoteOverriddenNonVirtualTrace(overridden);
 }
@@ -472,28 +470,27 @@
     const FunctionDecl* dispatch,
     RecordInfo* receiver,
     unsigned error) {
-  ReportDiagnostic(dispatch->getLocStart(), error) << receiver->record();
+  ReportDiagnostic(dispatch->getBeginLoc(), error) << receiver->record();
 }
 
 void DiagnosticsReporter::StackAllocatedDerivesGarbageCollected(
     RecordInfo* info,
     BasePoint* base) {
-  ReportDiagnostic(base->spec().getLocStart(),
-                   diag_stack_allocated_derives_gc_)
+  ReportDiagnostic(base->spec().getBeginLoc(), diag_stack_allocated_derives_gc_)
       << info->record() << base->info()->record();
 }
 
 void DiagnosticsReporter::ClassOverridesNew(
     RecordInfo* info,
     CXXMethodDecl* newop) {
-  ReportDiagnostic(newop->getLocStart(), diag_class_overrides_new_)
+  ReportDiagnostic(newop->getBeginLoc(), diag_class_overrides_new_)
       << info->record();
 }
 
 void DiagnosticsReporter::ClassDeclaresPureVirtualTrace(
     RecordInfo* info,
     CXXMethodDecl* trace) {
-  ReportDiagnostic(trace->getLocStart(),
+  ReportDiagnostic(trace->getBeginLoc(),
                    diag_class_declares_pure_virtual_trace_)
       << info->record();
 }
@@ -501,7 +498,7 @@
 void DiagnosticsReporter::LeftMostBaseMustBePolymorphic(
     RecordInfo* derived,
     CXXRecordDecl* base) {
-  ReportDiagnostic(base->getLocStart(),
+  ReportDiagnostic(base->getBeginLoc(),
                    diag_left_most_base_must_be_polymorphic_)
       << base << derived->record();
 }
@@ -509,7 +506,7 @@
 void DiagnosticsReporter::BaseClassMustDeclareVirtualTrace(
     RecordInfo* derived,
     CXXRecordDecl* base) {
-  ReportDiagnostic(base->getLocStart(),
+  ReportDiagnostic(base->getBeginLoc(),
                    diag_base_class_must_declare_virtual_trace_)
       << base << derived->record();
 }
@@ -517,20 +514,18 @@
 void DiagnosticsReporter::TraceMethodForStackAllocatedClass(
     RecordInfo* info,
     CXXMethodDecl* trace) {
-  ReportDiagnostic(trace->getLocStart(),
+  ReportDiagnostic(trace->getBeginLoc(),
                    diag_trace_method_of_stack_allocated_parent_)
       << info->record();
 }
 
 void DiagnosticsReporter::NoteManualDispatchMethod(CXXMethodDecl* dispatch) {
-  ReportDiagnostic(dispatch->getLocStart(),
-                   diag_manual_dispatch_method_note_)
+  ReportDiagnostic(dispatch->getBeginLoc(), diag_manual_dispatch_method_note_)
       << dispatch;
 }
 
 void DiagnosticsReporter::NoteBaseRequiresTracing(BasePoint* base) {
-  ReportDiagnostic(base->spec().getLocStart(),
-                   diag_base_requires_tracing_note_)
+  ReportDiagnostic(base->spec().getBeginLoc(), diag_base_requires_tracing_note_)
       << base->info()->record();
 }
 
@@ -548,7 +543,7 @@
 
 void DiagnosticsReporter::NotePartObjectContainsGCRoot(FieldPoint* point) {
   FieldDecl* field = point->field();
-  ReportDiagnostic(field->getLocStart(),
+  ReportDiagnostic(field->getBeginLoc(),
                    diag_part_object_contains_gc_root_note_)
       << field << field->getParent();
 }
@@ -558,15 +553,15 @@
 }
 
 void DiagnosticsReporter::NoteUserDeclaredDestructor(CXXMethodDecl* dtor) {
-  ReportDiagnostic(dtor->getLocStart(), diag_user_declared_destructor_note_);
+  ReportDiagnostic(dtor->getBeginLoc(), diag_user_declared_destructor_note_);
 }
 
 void DiagnosticsReporter::NoteUserDeclaredFinalizer(CXXMethodDecl* dtor) {
-  ReportDiagnostic(dtor->getLocStart(), diag_user_declared_finalizer_note_);
+  ReportDiagnostic(dtor->getBeginLoc(), diag_user_declared_finalizer_note_);
 }
 
 void DiagnosticsReporter::NoteBaseRequiresFinalization(BasePoint* base) {
-  ReportDiagnostic(base->spec().getLocStart(),
+  ReportDiagnostic(base->spec().getBeginLoc(),
                    diag_base_requires_finalization_note_)
       << base->info()->record();
 }
@@ -580,12 +575,12 @@
 }
 
 void DiagnosticsReporter::NoteField(FieldDecl* field, unsigned note) {
-  ReportDiagnostic(field->getLocStart(), note) << field;
+  ReportDiagnostic(field->getBeginLoc(), note) << field;
 }
 
 void DiagnosticsReporter::NoteOverriddenNonVirtualTrace(
     CXXMethodDecl* overridden) {
-  ReportDiagnostic(overridden->getLocStart(),
+  ReportDiagnostic(overridden->getBeginLoc(),
                    diag_overridden_non_virtual_trace_note_)
       << overridden;
 }
@@ -594,7 +589,7 @@
     const clang::Expr* expr,
     const clang::FunctionDecl* bad_function,
     const clang::CXXRecordDecl* gc_type) {
-  ReportDiagnostic(expr->getLocStart(), diag_unique_ptr_used_with_gc_)
+  ReportDiagnostic(expr->getBeginLoc(), diag_unique_ptr_used_with_gc_)
       << bad_function << gc_type << expr->getSourceRange();
 }
 
@@ -602,6 +597,6 @@
     const clang::Expr* expr,
     const clang::CXXRecordDecl* optional,
     const clang::CXXRecordDecl* gc_type) {
-  ReportDiagnostic(expr->getLocStart(), diag_optional_used_with_gc_)
+  ReportDiagnostic(expr->getBeginLoc(), diag_optional_used_with_gc_)
       << optional << gc_type << expr->getSourceRange();
 }
diff --git a/tools/clang/blink_gc_plugin/RecordInfo.h b/tools/clang/blink_gc_plugin/RecordInfo.h
index 3ac082f..ec510f3 100644
--- a/tools/clang/blink_gc_plugin/RecordInfo.h
+++ b/tools/clang/blink_gc_plugin/RecordInfo.h
@@ -75,7 +75,7 @@
 
   struct FieldDeclCmp {
     bool operator()(clang::FieldDecl* a, clang::FieldDecl *b) const {
-      return a->getLocStart() < b->getLocStart();
+      return a->getBeginLoc() < b->getBeginLoc();
     }
   };
   typedef std::map<clang::FieldDecl*, FieldPoint, FieldDeclCmp> Fields;
diff --git a/tools/clang/plugins/CheckIPCVisitor.cpp b/tools/clang/plugins/CheckIPCVisitor.cpp
index b123b01..5e8113d0 100644
--- a/tools/clang/plugins/CheckIPCVisitor.cpp
+++ b/tools/clang/plugins/CheckIPCVisitor.cpp
@@ -149,8 +149,7 @@
 
     auto* parent_decl = GetParentDecl<Decl>();
     ReportCheckError(
-        details,
-        parent_decl ? parent_decl->getLocStart() : SourceLocation(),
+        details, parent_decl ? parent_decl->getBeginLoc() : SourceLocation(),
         error_tuple_bad_type_);
   }
 
diff --git a/tools/clang/plugins/FindBadConstructsConsumer.cpp b/tools/clang/plugins/FindBadConstructsConsumer.cpp
index 5d430c38..d5a18d3 100644
--- a/tools/clang/plugins/FindBadConstructsConsumer.cpp
+++ b/tools/clang/plugins/FindBadConstructsConsumer.cpp
@@ -573,7 +573,7 @@
   // Deletion of virtual and insertion of override are tricky. The AST does not
   // expose the location of `virtual` or `=`: the former is useful when trying
   // to remove `virtual, while the latter is useful when trying to insert
-  // `override`. Iterate over the tokens from |method->getLocStart()| until:
+  // `override`. Iterate over the tokens from |method->getBeginLoc()| until:
   // 1. A `{` not nested inside parentheses is found or
   // 2. A `=` not nested inside parentheses is found or
   // 3. A `;` not nested inside parentheses is found or
@@ -582,7 +582,7 @@
   SourceLocation override_insertion_loc;
   // Attempt to set up the lexer in raw mode.
   std::pair<FileID, unsigned> decomposed_start =
-      manager.getDecomposedLoc(method->getLocStart());
+      manager.getDecomposedLoc(method->getBeginLoc());
   bool invalid = false;
   StringRef buffer = manager.getBufferData(decomposed_start.first, &invalid);
   if (!invalid) {
@@ -816,7 +816,7 @@
 // Outputs a C++ inheritance chain as a diagnostic aid.
 void FindBadConstructsConsumer::PrintInheritanceChain(const CXXBasePath& path) {
   for (CXXBasePath::const_iterator it = path.begin(); it != path.end(); ++it) {
-    diagnostic().Report(it->Base->getLocStart(), diag_note_inheritance_)
+    diagnostic().Report(it->Base->getBeginLoc(), diag_note_inheritance_)
         << it->Class << it->Base->getType();
   }
 }
@@ -1041,7 +1041,7 @@
           // should be fewer auto types than banned namespace/directory types,
           // so check this last.
           LocationType location_type =
-              ClassifyLocation(var_decl->getLocStart());
+              ClassifyLocation(var_decl->getBeginLoc());
           if (location_type != LocationType::kThirdParty) {
             // The range starts from |var_decl|'s loc start, which is the
             // beginning of the full expression defining this |var_decl|. It
@@ -1051,8 +1051,8 @@
             // qualifiers, which is why it's not a good candidate to use for the
             // start of the range.
             clang::SourceRange range(
-                var_decl->getLocStart(),
-                var_decl->getTypeSourceInfo()->getTypeLoc().getLocEnd());
+                var_decl->getBeginLoc(),
+                var_decl->getTypeSourceInfo()->getTypeLoc().getEndLoc());
             ReportIfSpellingLocNotIgnored(range.getBegin(),
                                           diag_auto_deduced_to_a_pointer_type_)
                 << FixItHint::CreateReplacement(
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 8015b737..218d050f 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -19944,6 +19944,41 @@
   <int value="2539" label="TextEncoderStreamConstructor"/>
   <int value="2540" label="TextDecoderStreamConstructor"/>
   <int value="2541" label="SignedExchangeInnerResponse"/>
+  <int value="2542" label="PaymentAddressLanguageCode"/>
+</enum>
+
+<enum name="FeaturePolicyFeature">
+<!-- Generated from third_party/blink/public/mojom/feature_policy/feature_policy.mojom.-->
+
+  <int value="0" label="kNotFound"/>
+  <int value="1" label="kAutoplay"/>
+  <int value="2" label="kCamera"/>
+  <int value="3" label="kEncryptedMedia"/>
+  <int value="4" label="kFullscreen"/>
+  <int value="5" label="kGeolocation"/>
+  <int value="6" label="kMicrophone"/>
+  <int value="7" label="kMidiFeature"/>
+  <int value="8" label="kPayment"/>
+  <int value="9" label="kSpeaker"/>
+  <int value="10" label="kDocumentCookie"/>
+  <int value="11" label="kDocumentDomain"/>
+  <int value="12" label="kSyncScript"/>
+  <int value="13" label="kSyncXHR"/>
+  <int value="14" label="kUsb"/>
+  <int value="15" label="kAccessibilityEvents"/>
+  <int value="16" label="kWebVr"/>
+  <int value="17" label="kAccelerometer"/>
+  <int value="18" label="kAmbientLightSensor"/>
+  <int value="19" label="kGyroscope"/>
+  <int value="20" label="kMagnetometer"/>
+  <int value="21" label="kUnsizedMedia"/>
+  <int value="22" label="kLegacyImageFormats"/>
+  <int value="23" label="kImageCompression"/>
+  <int value="24" label="kAnimations"/>
+  <int value="25" label="kMaxDownscalingImage"/>
+  <int value="26" label="kPictureInPicture"/>
+  <int value="27" label="kVerticalScroll"/>
+  <int value="28" label="kDocumentWrite"/>
 </enum>
 
 <enum name="FeedbackSource">
@@ -28666,6 +28701,7 @@
   <int value="-992785453" label="ExplicitLanguageAsk:disabled"/>
   <int value="-991253797"
       label="OmniboxSpeculativeServiceWorkerStartOnQueryInput:disabled"/>
+  <int value="-989671895" label="OfflineIndicatorAlwaysHttpProbe:enabled"/>
   <int value="-984052166" label="DoodlesOnLocalNtp:enabled"/>
   <int value="-980260493" label="NTPSnippets:disabled"/>
   <int value="-979313250" label="enable-google-branded-context-menu"/>
@@ -29849,6 +29885,7 @@
   <int value="1405459667" label="enable-fast-text-autosizing"/>
   <int value="1406046556" label="enable-slimming-paint-v175"/>
   <int value="1406354320" label="MacViewsWebUIDialogs:enabled"/>
+  <int value="1407616323" label="OfflineIndicatorAlwaysHttpProbe:disabled"/>
   <int value="1407625309"
       label="disable-minimize-on-second-launcher-item-click"/>
   <int value="1408139320" label="disable-zip-archiver-packer"/>
@@ -38097,6 +38134,7 @@
   <int value="18" label="Password Alert mode: no need to send ping"/>
   <int value="19" label="Turned off by enterprise admin"/>
   <int value="20" label="SafeBrowsing disabled"/>
+  <int value="21" label="User not signed in"/>
 </enum>
 
 <enum name="PasswordProtectionSyncAccountType">
@@ -39787,6 +39825,28 @@
   </int>
 </enum>
 
+<enum name="PreviewsServerLitePageBlacklistReason">
+  <int value="0" label="Path suffix"/>
+  <int value="1" label="Navigation to Previews Domain"/>
+  <int value="2" label="Navigation to Private Domain"/>
+</enum>
+
+<enum name="PreviewsServerLitePageIneligibleReason">
+  <int value="0" label="Scheme not HTTPS"/>
+  <int value="1" label="HTTP POST"/>
+  <int value="2" label="Subframe navigation"/>
+  <int value="3" label="Server Unavailable"/>
+</enum>
+
+<enum name="PreviewsServerLitePageServerResponse">
+  <int value="0" label="OK"/>
+  <int value="1" label="Redirect"/>
+  <int value="2" label="Preview Unavailable"/>
+  <int value="3" label="Service Unavailable"/>
+  <int value="4" label="Other"/>
+  <int value="5" label="Failed"/>
+</enum>
+
 <enum name="PreviewsType">
   <int value="0" label="None"/>
   <int value="1" label="Offline"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index e2453bdb..362fb9ab 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -9376,6 +9376,15 @@
   </details>
 </histogram>
 
+<histogram name="Blink.UseCounter.FeaturePolicy.Header"
+    enum="FeaturePolicyFeature">
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Counts the use of a specific feature policy via the
+    &quot;Feature-Policy&quot; HTTP response header.
+  </summary>
+</histogram>
+
 <histogram name="Blink.UseCounter.Features" enum="FeatureObserver">
   <owner>loonybear@chromium.org</owner>
   <summary>
@@ -14605,6 +14614,7 @@
 
 <histogram name="ContextualSuggestions.PageViewTime" units="ms">
   <owner>fgorski@chromium.org</owner>
+  <owner>wylieb@chromium.org</owner>
   <summary>
     Android: The length of a visit on a page. Reported for HTTP and HTTPS pages
     provided there was something visible printed to the screen. Selecting a tab
@@ -71555,6 +71565,10 @@
 </histogram>
 
 <histogram name="PasswordManager.EmptyUsernames.PasswordFieldCount">
+  <obsolete>
+    Deprecated as of 09/2018. The investigation this metric was supporting has
+    been concluded in 2016.
+  </obsolete>
   <owner>msramek@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -71566,6 +71580,10 @@
 </histogram>
 
 <histogram name="PasswordManager.EmptyUsernames.TextAndPasswordFieldCount">
+  <obsolete>
+    Deprecated as of 09/2018. The investigation this metric was supporting has
+    been concluded in 2016.
+  </obsolete>
   <owner>msramek@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -79978,6 +79996,52 @@
   </summary>
 </histogram>
 
+<histogram name="Previews.ServerLitePage.BlacklistReasons"
+    enum="PreviewsServerLitePageBlacklistReason">
+  <owner>robertogden@chromium.org</owner>
+  <summary>
+    The reason that a navigation is blacklisted from loading a server lite page
+    preview by a dynamic blacklist. Recorded only after the observed navigation
+    has passed static eligibility checks.
+  </summary>
+</histogram>
+
+<histogram name="Previews.ServerLitePage.HttpOnlyFallbackPenalty" units="ms">
+  <owner>robertogden@chromium.org</owner>
+  <summary>
+    The time spent on a navigation request that loaded a fallback signal from
+    the lite page previews server. This does not include any penalty incurred
+    because of network errors.
+  </summary>
+</histogram>
+
+<histogram name="Previews.ServerLitePage.IneligibleReasons"
+    enum="PreviewsServerLitePageIneligibleReason">
+  <owner>robertogden@chromium.org</owner>
+  <summary>
+    The reasons that a navigation is not eligible to be shown a server lite page
+    preview by static eligibility checks. Each check is evaluated on every
+    observed navigation when the feature is enabled.
+  </summary>
+</histogram>
+
+<histogram name="Previews.ServerLitePage.ServerResponse"
+    enum="PreviewsServerLitePageServerResponse">
+  <owner>robertogden@chromium.org</owner>
+  <summary>
+    The type of response given by the previews server when a server lite page
+    preview was triggered.
+  </summary>
+</histogram>
+
+<histogram name="Previews.ServerLitePage.Triggered" enum="Boolean">
+  <owner>robertogden@chromium.org</owner>
+  <summary>
+    Whether or not the server lite page preview is triggered. Recorded on every
+    observed navigation when the feature is enabled.
+  </summary>
+</histogram>
+
 <histogram name="PrinterService.PrinterServiceEvent"
     enum="PrinterServiceEventType">
   <owner>vitalybuka@chromium.org</owner>
@@ -109179,6 +109243,18 @@
   </summary>
 </histogram>
 
+<histogram name="UnifiedConsent.ConsentBump.EligibleAtStartup" enum="Boolean"
+    expires_after="2019-08-01">
+  <owner>droger@chromium.org</owner>
+  <owner>msarda@chromium.org</owner>
+  <owner>tangltom@chromium.org</owner>
+  <summary>
+    Boolean indicating whether the user is eligible for seeing the consent bump.
+    This metric is recorded at every startup when Unified Consent is enabled.
+    Note: There can be multiple entries per user.
+  </summary>
+</histogram>
+
 <histogram name="UnifiedConsent.ConsentBump.SuppressReason"
     enum="UnifiedConsentBumpSuppressReason" expires_after="2019-08-01">
   <owner>tangltom@chromium.org</owner>
@@ -120400,12 +120476,12 @@
   <affected-histogram name="Search.ContextualSearchQuickActions.ResultsSeen"/>
 </histogram_suffixes>
 
-<histogram_suffixes name="ContextualSuggestionsPageViewClickLengthSource"
-    separator=".">
+<histogram_suffixes name="ContextualSuggestionsPageViewSource" separator=".">
   <suffix name="ContextualSuggestions"
       label="For contextual suggestions navigations"/>
-  <suffix name="Other" label="for non contextual suggestions navigations"/>
+  <suffix name="Other" label="For non contextual suggestions navigations"/>
   <affected-histogram name="ContextualSuggestions.PageViewClickLength"/>
+  <affected-histogram name="ContextualSuggestions.PageViewTime"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="CookieConnectionType" separator="">
diff --git a/tools/metrics/histograms/update_feature_policy_enum.py b/tools/metrics/histograms/update_feature_policy_enum.py
new file mode 100755
index 0000000..9bb585f
--- /dev/null
+++ b/tools/metrics/histograms/update_feature_policy_enum.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+# 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.
+
+"""Updates the FeaturePolicyFeature enum in enums.xml file with
+values read from feature_policy.mojom.
+
+If the file was pretty-printed, the updated version is pretty-printed too.
+"""
+
+import os
+import sys
+
+from update_histogram_enum import UpdateHistogramEnum
+
+if __name__ == '__main__':
+  if len(sys.argv) > 1:
+    print >>sys.stderr, 'No arguments expected!'
+    sys.stderr.write(__doc__)
+    sys.exit(1)
+
+  source_file = 'third_party/blink/public/mojom/feature_policy/' \
+                'feature_policy.mojom'
+  UpdateHistogramEnum(histogram_enum_name='FeaturePolicyFeature',
+                      source_enum_path=source_file,
+                      start_marker='^enum FeaturePolicyFeature {',
+                      end_marker='^};')
diff --git a/tools/perf/core/perf_benchmark.py b/tools/perf/core/perf_benchmark.py
index 77722d2..9f46a80e 100644
--- a/tools/perf/core/perf_benchmark.py
+++ b/tools/perf/core/perf_benchmark.py
@@ -104,6 +104,13 @@
     # with the test results.
     options.AppendExtraBrowserArgs(
         '--disable-gpu-process-for-dx12-vulkan-info-collection')
+
+
+    # TODO(crbug.com/881469): remove this once Webview support surface
+    # synchronization.
+    if options.browser_type == 'android-webview':
+      options.AppendExtraBrowserArgs(
+          '--disable-features=SurfaceSynchronization')
     self.SetExtraBrowserOptions(options)
 
   @staticmethod
diff --git a/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb b/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb
index 6fa2556..6b18c511 100644
--- a/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb
+++ b/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb
@@ -10,7 +10,7 @@
 <translation id="1703735871906654364">कॅरेट ब्राउझिंग</translation>
 <translation id="1791496371305830581">सर्व अ‍ॅनिमेटेड प्रतिमांना अनुमती द्या.</translation>
 <translation id="1996252509865389616">सक्षम करायचे?</translation>
-<translation id="2079545284768500474">पूर्ववत करा</translation>
+<translation id="2079545284768500474">पहिल्यासारखे करा</translation>
 <translation id="2179565792157161713">दीर्घ वर्णन नवीन टॅबमध्‍ये उघडा</translation>
 <translation id="2223143012868735942">रंग आकलन सुधारण्यासाठी वेबपृषठांवर लागू केलेला एक सानुकूल करण्यायोग्य रंग फिल्टर.</translation>
 <translation id="2394933097471027016">हे आता वापरून पहा - कॅरेट ब्राउझिंग या पृष्‍ठावर नेहमी सक्षम केले असते!</translation>
@@ -23,7 +23,7 @@
 <translation id="3410969471888629217">साइट सानुकूलने विसरा</translation>
 <translation id="3435896845095436175">सक्षम करा</translation>
 <translation id="3622586652998721735">डीफॉल्‍ट योजना म्‍हणून सेट करा</translation>
-<translation id="3812541808639806898">इमेज Alt मजकूर दर्शक</translation>
+<translation id="3812541808639806898">इमेज Alt टेक्स्ट व्ह्यूअर</translation>
 <translation id="381767806621926835">त्याच्या मोठ्या वर्णनावर प्रवेश करण्यासाठी "longdesc" किंवा "aria-describedat" विशेषतेसह कशावरही उजवीकडे-क्लिक करा.</translation>
 <translation id="4023902424053835668">बाण की चा वापर करून वेबपृष्‍ठांचा मजकूर ब्राऊझ करा.</translation>
 <translation id="4388820049312272371">द्रुत फ्‍लॅशने कर्सर स्‍थिती हायलाइट करा.</translation>
@@ -35,7 +35,7 @@
 <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="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/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
index 8ac9c75..0f6f57b9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -242,7 +242,7 @@
 <translation id="8160015581537295331">स्पॅनिश कीबोर्ड</translation>
 <translation id="8279388322240498158">सोरानी कुर्दिश इंग्रजी-आधारित कीबोर्ड</translation>
 <translation id="8280151743281770066">अर्मेनियन ध्वन्यात्मक</translation>
-<translation id="8297012244086013755">हँगल 3 संच (Shift नाही)</translation>
+<translation id="8297012244086013755">हानगुल 3 संच (Shift नाही)</translation>
 <translation id="8299269255470343364">जपानी</translation>
 <translation id="8336579025507394412">आइसलँडिक कीबोर्ड</translation>
 <translation id="8391950649760071442">लिप्यंतरण (emandi → ఏమండీ)</translation>
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index c70252f2..835649c3 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -583,8 +583,8 @@
     SendDamagedRectsRecursive(child);
 }
 
-void Compositor::UpdateLayerTreeHost(VisualStateUpdate requested_update) {
-  if (!root_layer() || requested_update == VisualStateUpdate::kPrePaint)
+void Compositor::UpdateLayerTreeHost() {
+  if (!root_layer())
     return;
   SendDamagedRectsRecursive(root_layer());
 }
diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
index 11a4db2..21d4d1c 100644
--- a/ui/compositor/compositor.h
+++ b/ui/compositor/compositor.h
@@ -398,7 +398,7 @@
   void BeginMainFrame(const viz::BeginFrameArgs& args) override;
   void BeginMainFrameNotExpectedSoon() override;
   void BeginMainFrameNotExpectedUntil(base::TimeTicks time) override;
-  void UpdateLayerTreeHost(VisualStateUpdate requested_update) override;
+  void UpdateLayerTreeHost() override;
   void ApplyViewportDeltas(const gfx::Vector2dF& inner_delta,
                            const gfx::Vector2dF& outer_delta,
                            const gfx::Vector2dF& elastic_overscroll_delta,
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc
index 4da37842..190cf162 100644
--- a/ui/compositor/layer_unittest.cc
+++ b/ui/compositor/layer_unittest.cc
@@ -910,34 +910,22 @@
   layer->SetShowPrimarySurface(surface_id_one, gfx::Size(10, 10), SK_ColorWHITE,
                                cc::DeadlinePolicy::UseDefaultDeadline(), false);
   EXPECT_FALSE(layer->StretchContentToFillBounds());
-  EXPECT_TRUE(static_cast<cc::SurfaceLayer*>(layer->cc_layer_for_testing())
-                  ->surface_hit_testable());
 
   auto clone = layer->Clone();
   EXPECT_FALSE(clone->StretchContentToFillBounds());
-  EXPECT_TRUE(static_cast<cc::SurfaceLayer*>(clone->cc_layer_for_testing())
-                  ->surface_hit_testable());
   auto mirror = layer->Mirror();
   EXPECT_FALSE(mirror->StretchContentToFillBounds());
-  EXPECT_TRUE(static_cast<cc::SurfaceLayer*>(mirror->cc_layer_for_testing())
-                  ->surface_hit_testable());
 
   local_surface_id = allocator.GenerateId();
   viz::SurfaceId surface_id_two(arbitrary_frame_sink, local_surface_id);
   layer->SetShowPrimarySurface(surface_id_two, gfx::Size(10, 10), SK_ColorWHITE,
                                cc::DeadlinePolicy::UseDefaultDeadline(), true);
   EXPECT_TRUE(layer->StretchContentToFillBounds());
-  EXPECT_TRUE(static_cast<cc::SurfaceLayer*>(layer->cc_layer_for_testing())
-                  ->surface_hit_testable());
 
   clone = layer->Clone();
   EXPECT_TRUE(clone->StretchContentToFillBounds());
-  EXPECT_TRUE(static_cast<cc::SurfaceLayer*>(clone->cc_layer_for_testing())
-                  ->surface_hit_testable());
   mirror = layer->Mirror();
   EXPECT_TRUE(mirror->StretchContentToFillBounds());
-  EXPECT_TRUE(static_cast<cc::SurfaceLayer*>(mirror->cc_layer_for_testing())
-                  ->surface_hit_testable());
 }
 
 class LayerWithNullDelegateTest : public LayerWithDelegateTest {
diff --git a/ui/events/blink/web_input_event_traits.cc b/ui/events/blink/web_input_event_traits.cc
index 4d1ccca..ba06edf 100644
--- a/ui/events/blink/web_input_event_traits.cc
+++ b/ui/events/blink/web_input_event_traits.cc
@@ -243,18 +243,6 @@
   }
 }
 
-bool WebInputEventTraits::CanCauseScroll(
-    const blink::WebMouseWheelEvent& event) {
-#if defined(USE_AURA)
-  // Scroll events generated from the mouse wheel when the control key is held
-  // don't trigger scrolling. Instead, they may cause zooming.
-  return event.has_precise_scrolling_deltas ||
-         (event.GetModifiers() & blink::WebInputEvent::kControlKey) == 0;
-#else
-  return true;
-#endif
-}
-
 uint32_t WebInputEventTraits::GetUniqueTouchEventId(
     const WebInputEvent& event) {
   if (WebInputEvent::IsTouchEventType(event.GetType())) {
diff --git a/ui/events/blink/web_input_event_traits.h b/ui/events/blink/web_input_event_traits.h
index 15708011..ecaf878 100644
--- a/ui/events/blink/web_input_event_traits.h
+++ b/ui/events/blink/web_input_event_traits.h
@@ -10,7 +10,6 @@
 
 namespace blink {
 class WebGestureEvent;
-class WebMouseWheelEvent;
 }
 
 namespace ui {
@@ -30,8 +29,6 @@
   static WebScopedInputEvent Clone(const blink::WebInputEvent& event);
   static bool ShouldBlockEventStream(const blink::WebInputEvent& event);
 
-  static bool CanCauseScroll(const blink::WebMouseWheelEvent& event);
-
   // Return uniqueTouchEventId for WebTouchEvent, otherwise return 0.
   static uint32_t GetUniqueTouchEventId(const blink::WebInputEvent& event);
   static LatencyInfo CreateLatencyInfoForWebGestureEvent(
diff --git a/ui/strings/translations/ui_strings_bn.xtb b/ui/strings/translations/ui_strings_bn.xtb
index 0307191..a799851 100644
--- a/ui/strings/translations/ui_strings_bn.xtb
+++ b/ui/strings/translations/ui_strings_bn.xtb
@@ -65,6 +65,7 @@
 <translation id="3660179305079774227">Up Arrow</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY" /> GB/s</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY" /> GB</translation>
+<translation id="3842239759367498783">আপনার মোবাইল ডিভাইস <ph name="TITLE" /> থেকে পড়ুন</translation>
 <translation id="385051799172605136">ফিরুন</translation>
 <translation id="3889424535448813030">Right Arrow</translation>
 <translation id="3892641579809465218">অভ্যন্তরীণ প্রদর্শন</translation>
@@ -85,6 +86,7 @@
 <translation id="4971687151119236543">মিডিয়া পূর্ববর্তী ট্র্যাক</translation>
 <translation id="5046499563572181734">এখানে আলতো চাপুন</translation>
 <translation id="5076340679995252485">&amp;পেস্ট করুন</translation>
+<translation id="5137751499640340777">Google অ্যাসিস্ট্যান্ট চালান</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">সম্পূর্ণ দেখার ত্রিভুজ</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_en-GB.xtb b/ui/strings/translations/ui_strings_en-GB.xtb
index 90a528f..01dfc8c 100644
--- a/ui/strings/translations/ui_strings_en-GB.xtb
+++ b/ui/strings/translations/ui_strings_en-GB.xtb
@@ -149,6 +149,8 @@
 <translation id="7814458197256864873">&amp;Copy</translation>
 <translation id="7879499977785298635">Don't block</translation>
 <translation id="7907591526440419938">Open File</translation>
+<translation id="7969046989155602842">Command</translation>
+<translation id="8087772101393322318"><ph name="KEY_MODIFIER_NAME" />+<ph name="KEY_COMBO_NAME" /></translation>
 <translation id="8106081041558092062">{HOURS,plural, =1{1 hour ago}other{# hours ago}}</translation>
 <translation id="8131263257437993507">{SECONDS,plural, =1{1 sec left}other{# secs left}}</translation>
 <translation id="815598010540052116">Scroll Down</translation>
diff --git a/ui/strings/translations/ui_strings_es-419.xtb b/ui/strings/translations/ui_strings_es-419.xtb
index a91fb99..28da68d 100644
--- a/ui/strings/translations/ui_strings_es-419.xtb
+++ b/ui/strings/translations/ui_strings_es-419.xtb
@@ -65,6 +65,7 @@
 <translation id="3660179305079774227">Flecha arriba</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY" /> GB/s</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY" /> GB</translation>
+<translation id="3842239759367498783">Sigue leyendo desde tu dispositivo móvil <ph name="TITLE" /></translation>
 <translation id="385051799172605136">Atrás</translation>
 <translation id="3889424535448813030">Flecha derecha</translation>
 <translation id="3892641579809465218">Pantalla interna</translation>
diff --git a/ui/strings/translations/ui_strings_mr.xtb b/ui/strings/translations/ui_strings_mr.xtb
index b7b8912c..f9c4df7b 100644
--- a/ui/strings/translations/ui_strings_mr.xtb
+++ b/ui/strings/translations/ui_strings_mr.xtb
@@ -43,7 +43,7 @@
 <translation id="2497284189126895209">सर्व फाइल</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2522350507219695259">कॅलिब्रेशन पूर्ण झाले</translation>
-<translation id="252373100621549798">अज्ञात प्रदर्शन</translation>
+<translation id="252373100621549798">अज्ञात डिस्प्ले</translation>
 <translation id="2583543531130364912">तुमची टचस्क्रीन कॅलिब्रेट करा</translation>
 <translation id="2666092431469916601">शीर्ष</translation>
 <translation id="2743387203779672305">क्लिपबोर्डवर कॉपी करा</translation>
@@ -92,7 +92,7 @@
 <translation id="528468243742722775">समाप्त</translation>
 <translation id="5329858601952122676">&amp;हटवा</translation>
 <translation id="5463830097259460683">इमोजी &amp;&amp; चिन्हे</translation>
-<translation id="5476505524087279545">अनचेक</translation>
+<translation id="5476505524087279545">चौकटीतली खूण काढा</translation>
 <translation id="5574202486608032840"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> सिस्टम</translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5613020302032141669">Left Arrow</translation>
@@ -169,7 +169,7 @@
 <translation id="8772073294905169192">{HOURS,plural, =1{1ता}one{#ता}other{#ता}}</translation>
 <translation id="8798099450830957504">डीफॉल्ट</translation>
 <translation id="8806053966018712535"><ph name="FOLDER_NAME" /> फोल्डर</translation>
-<translation id="883911313571074303">प्रतिमेवर भाष्य करा</translation>
+<translation id="883911313571074303">इमेजवर भाष्य करा</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation>
 <translation id="9002566407876343676">उघडा</translation>
 <translation id="9038489124413477075">अनामित फोल्डर</translation>
diff --git a/ui/views/cocoa/bridged_native_widget.h b/ui/views/cocoa/bridged_native_widget.h
index e9553b2..c5bc55a 100644
--- a/ui/views/cocoa/bridged_native_widget.h
+++ b/ui/views/cocoa/bridged_native_widget.h
@@ -164,8 +164,6 @@
   BridgedNativeWidgetHostHelper* host_helper() { return host_helper_; }
   NSWindow* ns_window();
 
-  TooltipManager* tooltip_manager() { return tooltip_manager_.get(); }
-
   DragDropClientMac* drag_drop_client() { return drag_drop_client_.get(); }
   bool is_translucent_window() const { return is_translucent_window_; }
 
@@ -239,6 +237,7 @@
   void SetWindowTitle(const base::string16& title) override;
   void MakeFirstResponder() override;
   void ClearTouchBar() override;
+  void UpdateTooltip() override;
   void AcquireCapture() override;
   void ReleaseCapture() override;
 
@@ -301,7 +300,6 @@
   base::scoped_nsobject<ModalShowAnimationWithLayer> show_animation_;
   std::unique_ptr<CocoaMouseCapture> mouse_capture_;
   std::unique_ptr<CocoaWindowMoveLoop> window_move_loop_;
-  std::unique_ptr<TooltipManager> tooltip_manager_;
   std::unique_ptr<DragDropClientMac> drag_drop_client_;
   ui::ModalType modal_type_ = ui::MODAL_TYPE_NONE;
   bool is_translucent_window_ = false;
diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_native_widget.mm
index a15a32c..8f9dd7c 100644
--- a/ui/views/cocoa/bridged_native_widget.mm
+++ b/ui/views/cocoa/bridged_native_widget.mm
@@ -15,6 +15,7 @@
 #import "base/mac/sdk_forward_declarations.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/sys_string_conversions.h"
+#include "ui/base/cocoa/cocoa_base_utils.h"
 #import "ui/base/cocoa/constrained_window/constrained_window_animation.h"
 #include "ui/base/hit_test.h"
 #include "ui/base/layout.h"
@@ -30,7 +31,6 @@
 #import "ui/views/cocoa/cocoa_window_move_loop.h"
 #import "ui/views/cocoa/drag_drop_client_mac.h"
 #import "ui/views/cocoa/native_widget_mac_nswindow.h"
-#include "ui/views/cocoa/tooltip_manager_mac.h"
 #import "ui/views/cocoa/views_nswindow_delegate.h"
 #import "ui/views/cocoa/widget_owner_nswindow_adapter.h"
 #include "ui/views/widget/native_widget_mac.h"
@@ -339,7 +339,6 @@
   }
 
   [window_ setHasShadow:params->has_window_server_shadow];
-  tooltip_manager_.reset(new TooltipManagerMac(this));
 }
 
 void BridgedNativeWidgetImpl::SetInitialBounds(
@@ -1101,6 +1100,14 @@
   }
 }
 
+void BridgedNativeWidgetImpl::UpdateTooltip() {
+  NSPoint nspoint =
+      ui::ConvertPointFromScreenToWindow(window_, [NSEvent mouseLocation]);
+  // Note: flip in the view's frame, which matches the window's contentRect.
+  gfx::Point point(nspoint.x, NSHeight([bridged_view_ frame]) - nspoint.y);
+  [bridged_view_ updateTooltipIfRequiredAt:point];
+}
+
 void BridgedNativeWidgetImpl::SetTextInputClient(
     ui::TextInputClient* text_input_client) {
   [bridged_view_ setTextInputClient:text_input_client];
diff --git a/ui/views/cocoa/bridged_native_widget_host_impl.h b/ui/views/cocoa/bridged_native_widget_host_impl.h
index 3cdc3304..a912623 100644
--- a/ui/views/cocoa/bridged_native_widget_host_impl.h
+++ b/ui/views/cocoa/bridged_native_widget_host_impl.h
@@ -56,6 +56,8 @@
   BridgedNativeWidgetImpl* bridge_impl() const { return bridge_impl_.get(); }
   views_bridge_mac::mojom::BridgedNativeWidget* bridge() const;
 
+  TooltipManager* tooltip_manager() { return tooltip_manager_.get(); }
+
   void InitWindow(const Widget::InitParams& params);
 
   // Changes the bounds of the window and the hosted layer if present. The
@@ -222,6 +224,7 @@
   // instance that may be in another process.
   std::unique_ptr<BridgedNativeWidgetImpl> bridge_impl_;
 
+  std::unique_ptr<TooltipManager> tooltip_manager_;
   std::unique_ptr<ui::InputMethod> input_method_;
   FocusManager* focus_manager_ = nullptr;  // Weak. Owned by our Widget.
 
diff --git a/ui/views/cocoa/bridged_native_widget_host_impl.mm b/ui/views/cocoa/bridged_native_widget_host_impl.mm
index 1ba281e..8a9ffdf3 100644
--- a/ui/views/cocoa/bridged_native_widget_host_impl.mm
+++ b/ui/views/cocoa/bridged_native_widget_host_impl.mm
@@ -12,6 +12,7 @@
 #include "ui/display/screen.h"
 #include "ui/gfx/geometry/dip_util.h"
 #include "ui/views/cocoa/bridged_native_widget.h"
+#include "ui/views/cocoa/tooltip_manager_mac.h"
 #include "ui/views/controls/menu/menu_config.h"
 #include "ui/views/controls/menu/menu_controller.h"
 #include "ui/views/views_delegate.h"
@@ -67,6 +68,7 @@
   // native on Mac, so nothing should ever want one in Widget form.
   DCHECK_NE(params.type, Widget::InitParams::TYPE_TOOLTIP);
   widget_type_ = params.type;
+  tooltip_manager_.reset(new TooltipManagerMac(bridge()));
 
   bridge_impl_->SetParent(params.parent);
 
diff --git a/ui/views/cocoa/tooltip_manager_mac.h b/ui/views/cocoa/tooltip_manager_mac.h
index 3160b62..7fa612ca 100644
--- a/ui/views/cocoa/tooltip_manager_mac.h
+++ b/ui/views/cocoa/tooltip_manager_mac.h
@@ -8,13 +8,19 @@
 #include "base/macros.h"
 #include "ui/views/widget/tooltip_manager.h"
 
-namespace views {
-class BridgedNativeWidgetImpl;
+namespace views_bridge_mac {
+namespace mojom {
+class BridgedNativeWidget;
+}  // namespace mojom
+}  // namespace views_bridge_mac
 
-// Manages native Cocoa tooltips for the given BridgedNativeWidgetImpl.
+namespace views {
+
+// Manages native Cocoa tooltips for the given BridgedNativeWidgetHostImpl.
 class TooltipManagerMac : public TooltipManager {
  public:
-  explicit TooltipManagerMac(BridgedNativeWidgetImpl* widget);
+  explicit TooltipManagerMac(
+      views_bridge_mac::mojom::BridgedNativeWidget* bridge);
   ~TooltipManagerMac() override;
 
   // TooltipManager:
@@ -24,7 +30,8 @@
   void TooltipTextChanged(View* view) override;
 
  private:
-  BridgedNativeWidgetImpl* widget_;  // Weak. Owns this.
+  views_bridge_mac::mojom::BridgedNativeWidget*
+      bridge_;  // Weak. Owned by the owner of this.
 
   DISALLOW_COPY_AND_ASSIGN(TooltipManagerMac);
 };
diff --git a/ui/views/cocoa/tooltip_manager_mac.mm b/ui/views/cocoa/tooltip_manager_mac.mm
index 4cb46db..3699ae9 100644
--- a/ui/views/cocoa/tooltip_manager_mac.mm
+++ b/ui/views/cocoa/tooltip_manager_mac.mm
@@ -19,8 +19,9 @@
 
 namespace views {
 
-TooltipManagerMac::TooltipManagerMac(BridgedNativeWidgetImpl* widget)
-    : widget_(widget) {}
+TooltipManagerMac::TooltipManagerMac(
+    views_bridge_mac::mojom::BridgedNativeWidget* bridge)
+    : bridge_(bridge) {}
 
 TooltipManagerMac::~TooltipManagerMac() {
 }
@@ -36,14 +37,7 @@
 }
 
 void TooltipManagerMac::UpdateTooltip() {
-  NSWindow* window = widget_->ns_window();
-  BridgedContentView* view = widget_->ns_view();
-
-  NSPoint nspoint =
-      ui::ConvertPointFromScreenToWindow(window, [NSEvent mouseLocation]);
-  // Note: flip in the view's frame, which matches the window's contentRect.
-  gfx::Point point(nspoint.x, NSHeight([view frame]) - nspoint.y);
-  [view updateTooltipIfRequiredAt:point];
+  bridge_->UpdateTooltip();
 }
 
 void TooltipManagerMac::TooltipTextChanged(View* view) {
diff --git a/ui/views/mus/desktop_window_tree_host_mus.cc b/ui/views/mus/desktop_window_tree_host_mus.cc
index e0ef802..e3eee5eb 100644
--- a/ui/views/mus/desktop_window_tree_host_mus.cc
+++ b/ui/views/mus/desktop_window_tree_host_mus.cc
@@ -53,15 +53,21 @@
     // provided by the window manager.
     GetViewAccessibility().set_is_ignored(true);
 
-    observed_.Add(widget_->GetNativeWindow()->GetRootWindow());
+    // Initialize kTopViewInset to a default value. Further updates will come
+    // from Ash. This is necessary so that during app window creation,
+    // GetWindowBoundsForClientBounds() can calculate correctly.
+    const auto& values = views::WindowManagerFrameValues::instance();
+    widget->GetNativeWindow()->SetProperty(aura::client::kTopViewInset,
+                                           widget->IsMaximized()
+                                               ? values.maximized_insets.top()
+                                               : values.normal_insets.top());
+    observed_.Add(window());
   }
   ~ClientSideNonClientFrameView() override {}
 
  private:
   gfx::Insets GetClientInsets() const {
-    const int top_inset =
-        widget_->GetNativeWindow()->GetRootWindow()->GetProperty(
-            aura::client::kTopViewInset);
+    const int top_inset = window()->GetProperty(aura::client::kTopViewInset);
     return gfx::Insets(top_inset, 0, 0, 0);
   }
 
@@ -139,6 +145,10 @@
     }
   }
 
+  aura::Window* window() const {
+    return widget_->GetNativeWindow()->GetRootWindow();
+  }
+
   views::Widget* widget_;
   ScopedObserver<aura::Window, aura::WindowObserver> observed_{this};
 
diff --git a/ui/views/widget/native_widget_mac.mm b/ui/views/widget/native_widget_mac.mm
index 18c095e..952220b 100644
--- a/ui/views/widget/native_widget_mac.mm
+++ b/ui/views/widget/native_widget_mac.mm
@@ -244,8 +244,8 @@
 }
 
 TooltipManager* NativeWidgetMac::GetTooltipManager() const {
-  if (bridge_impl())
-    return bridge_impl()->tooltip_manager();
+  if (bridge_host_)
+    return bridge_host_->tooltip_manager();
 
   return nullptr;
 }
diff --git a/ui/views_bridge_mac/mojo/bridged_native_widget.mojom b/ui/views_bridge_mac/mojo/bridged_native_widget.mojom
index e120fc8..029648e 100644
--- a/ui/views_bridge_mac/mojo/bridged_native_widget.mojom
+++ b/ui/views_bridge_mac/mojo/bridged_native_widget.mojom
@@ -114,6 +114,9 @@
   // Clear the touchbar.
   ClearTouchBar();
 
+  // Update the tooltip text at the current mouse location.
+  UpdateTooltip();
+
   // Acquiring mouse capture first steals capture from any existing
   // CocoaMouseCaptureDelegate, then captures all mouse events until released.
   AcquireCapture();