diff --git a/DEPS b/DEPS
index bbc0c3a2..7730d80 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': '9db44ed0ef7f4f1e548fdc3f3b9bb4674f9ee4ef',
+  'skia_revision': '4c6514490e966198af427ec4df050470e55653a8',
   # 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': '132145aaee8c9e4c7d089763a3dd40646e686516',
+  'v8_revision': '6d5c73cfe1b8791ea33a832a661142ddd5403ac5',
   # 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': '9259fd0d4f4ca335d2b0f99edb2a9e47ec053944',
+  'angle_revision': 'c40974417610afb020c0b99a6b038f81257435cd',
   # 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': 'ee0c9aa662692b14ec07d21d83c80aba8a873749',
+  'pdfium_revision': 'ce6a1cc587a7d5db7655a915dd18b1c1f0ef2de2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
@@ -165,7 +165,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': 'a7fb87b3a3d1dde21cc2cb1e0fd10e6c3bf3496c',
+  'catapult_revision': '7a1ed44d248aa00191dbe8682b47bb5171c73e6a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -313,7 +313,7 @@
   },
 
   'src/ios/third_party/material_components_ios/src': {
-      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '10aa5899c7886cb165f2e8bd4e9d490ddd9b8bb4',
+      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '5ad0381e31e16deaf2a958c8438b6d05b8e0dca2',
       'condition': 'checkout_ios',
   },
 
@@ -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' + '@' + 'ded74c1409ac0c8ed9b856884f239b59f9e7382e',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '790b2751b5158c1b52500e04b93e2e525056566d',
       'condition': 'checkout_linux',
   },
 
@@ -604,7 +604,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '81db1d50324a9f2df87c05ff7cc6d082b27db242',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'd06cc78ec8cc4d9b55fe3232b92d9066f5d776d7',
 
   'src/third_party/devtools-node-modules':
     Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'),
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 7a72e4f..57cb1c1 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -1056,8 +1056,6 @@
     "touch/touch_devices_controller.cc",
     "touch/touch_devices_controller.h",
     "touch/touch_observer_hud.cc",
-    "touch/touch_transform_setter_mus.cc",
-    "touch/touch_transform_setter_mus.h",
     "touch/touch_uma.cc",
     "touch/touch_uma.h",
     "tray_action/tray_action.cc",
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc
index 3973073..980f54f0 100644
--- a/ash/app_list/app_list_controller_impl.cc
+++ b/ash/app_list/app_list_controller_impl.cc
@@ -23,6 +23,7 @@
 #include "ash/shell.h"
 #include "ash/voice_interaction/voice_interaction_controller.h"
 #include "ash/wallpaper/wallpaper_controller.h"
+#include "ash/wm/overview/window_selector_controller.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
@@ -492,14 +493,27 @@
     DismissAppList();
     return;
   }
-  presenter_.ScheduleOverviewModeAnimation(true /* start */);
+
+  // Only animate the app list when overview mode is using slide animation.
+  presenter_.ScheduleOverviewModeAnimation(
+      true /* start */, Shell::Get()
+                            ->window_selector_controller()
+                            ->window_selector()
+                            ->use_slide_animation() /* animate */);
 }
 
 void AppListControllerImpl::OnOverviewModeEnding() {
   in_overview_mode_ = false;
 
-  if (IsHomeLauncherEnabledInTabletMode())
-    presenter_.ScheduleOverviewModeAnimation(false /* start */);
+  if (!IsHomeLauncherEnabledInTabletMode())
+    return;
+
+  // Only animate the app list when overview mode is using slide animation.
+  presenter_.ScheduleOverviewModeAnimation(
+      false /* start */, Shell::Get()
+                             ->window_selector_controller()
+                             ->window_selector()
+                             ->use_slide_animation() /* animate */);
 }
 
 void AppListControllerImpl::OnTabletModeStarted() {
diff --git a/ash/app_list/presenter/app_list_presenter_impl.cc b/ash/app_list/presenter/app_list_presenter_impl.cc
index e9b475a..1d7b161 100644
--- a/ash/app_list/presenter/app_list_presenter_impl.cc
+++ b/ash/app_list/presenter/app_list_presenter_impl.cc
@@ -213,11 +213,12 @@
     view_->HandleScroll(y_scroll_offset, ui::ET_MOUSEWHEEL);
 }
 
-void AppListPresenterImpl::ScheduleOverviewModeAnimation(bool start) {
+void AppListPresenterImpl::ScheduleOverviewModeAnimation(bool start,
+                                                         bool animate) {
   if (ui::ScopedAnimationDurationScaleMode::duration_scale_mode() ==
       ui::ScopedAnimationDurationScaleMode::ZERO_DURATION) {
     // Start animation immediately in test.
-    StartOverviewModeAnimation(start);
+    StartOverviewModeAnimation(start, false);
     return;
   }
 
@@ -225,16 +226,19 @@
   start_animation_timer_.Start(
       FROM_HERE, start ? base::TimeDelta() : kOverViewEndAnimationDelay,
       base::BindOnce(&AppListPresenterImpl::StartOverviewModeAnimation,
-                     base::Unretained(this), start));
+                     base::Unretained(this), start, animate));
 }
 
-void AppListPresenterImpl::StartOverviewModeAnimation(bool start) {
+void AppListPresenterImpl::StartOverviewModeAnimation(bool start,
+                                                      bool animate) {
   if (!GetTargetVisibility())
     return;
 
   // Calculate the source and target parameters used in the animation.
   gfx::Transform transform;
   transform.Translate(0, kOverViewAnimationYOffset);
+  const base::TimeDelta duration =
+      animate ? kOverViewAnimationDuration : base::TimeDelta();
   const gfx::Transform source_transform = start ? gfx::Transform() : transform;
   const gfx::Transform target_transform = start ? transform : gfx::Transform();
   const float source_opacity = start ? 1.0f : 0.0f;
@@ -250,7 +254,7 @@
 
   {
     ui::ScopedLayerAnimationSettings animation(layer->GetAnimator());
-    animation.SetTransitionDuration(kOverViewAnimationDuration);
+    animation.SetTransitionDuration(duration);
     animation.SetTweenType(gfx::Tween::FAST_OUT_SLOW_IN);
     animation.SetAnimationMetricsReporter(
         state_animation_metrics_reporter_.get());
@@ -267,7 +271,7 @@
 
   {
     ui::ScopedLayerAnimationSettings animation(search_box_layer->GetAnimator());
-    animation.SetTransitionDuration(kOverViewAnimationDuration);
+    animation.SetTransitionDuration(duration);
     animation.SetTweenType(gfx::Tween::FAST_OUT_SLOW_IN);
     animation.SetAnimationMetricsReporter(
         state_animation_metrics_reporter_.get());
diff --git a/ash/app_list/presenter/app_list_presenter_impl.h b/ash/app_list/presenter/app_list_presenter_impl.h
index bd71c1e..711af7b 100644
--- a/ash/app_list/presenter/app_list_presenter_impl.h
+++ b/ash/app_list/presenter/app_list_presenter_impl.h
@@ -85,11 +85,13 @@
   // Passes a MouseWheelEvent from the shelf to the AppListView.
   void ProcessMouseWheelOffset(int y_scroll_offset);
 
-  // Schedules animation for app list when overview mode starts or ends.
-  void ScheduleOverviewModeAnimation(bool start);
+  // Schedules animation for app list when overview mode starts or ends. The
+  // animation duration will be set to 0 if |animate| is false.
+  void ScheduleOverviewModeAnimation(bool start, bool animate);
 
   // Immediately start animation for app list when overview mode starts or ends.
-  void StartOverviewModeAnimation(bool start);
+  // The animation duration will be set to 0 if |animate| is false.
+  void StartOverviewModeAnimation(bool start, bool animate);
 
  private:
   // Sets the app list view and attempts to show it.
diff --git a/ash/app_list/views/app_list_folder_view.cc b/ash/app_list/views/app_list_folder_view.cc
index 07bdad32..527bf324 100644
--- a/ash/app_list/views/app_list_folder_view.cc
+++ b/ash/app_list/views/app_list_folder_view.cc
@@ -243,7 +243,7 @@
                                   : folder_view_->folder_item_icon_bounds();
 
       TopIconAnimationView* icon_view = new TopIconAnimationView(
-          top_item->icon(), base::ASCIIToUTF16(top_item->GetDisplayName()),
+          top_item->icon(), base::UTF8ToUTF16(top_item->GetDisplayName()),
           scaled_rect, show_, item_in_folder_icon);
 
       icon_view->AddObserver(this);
diff --git a/ash/app_list/views/app_list_item_view.cc b/ash/app_list/views/app_list_item_view.cc
index 4c05d67..fa7c6e5 100644
--- a/ash/app_list/views/app_list_item_view.cc
+++ b/ash/app_list/views/app_list_item_view.cc
@@ -761,7 +761,9 @@
     const gfx::Rect& target_bounds,
     const gfx::Size& title_size) {
   gfx::Rect rect(target_bounds);
-  rect.Inset(0, AppListConfig::instance().grid_title_top_padding(), 0, 0);
+  rect.Inset(AppListConfig::instance().grid_title_horizontal_padding(),
+             AppListConfig::instance().grid_title_top_padding(),
+             AppListConfig::instance().grid_title_horizontal_padding(), 0);
   rect.ClampToCenteredSize(title_size);
   return rect;
 }
diff --git a/ash/app_list/views/search_result_answer_card_view.cc b/ash/app_list/views/search_result_answer_card_view.cc
index 3562a45..f9cd6142 100644
--- a/ash/app_list/views/search_result_answer_card_view.cc
+++ b/ash/app_list/views/search_result_answer_card_view.cc
@@ -31,19 +31,31 @@
 
 namespace {
 
-// Helper to get/create answer card view by token.
-views::View* GetViewByToken(
+// Holds answer card data. |view| is the view to be added to app list view
+// hierarchy. |native_view| is the root of the card contents view. For classic
+// ash, it is the NativeView of the answer card WebContents. For mash, it is
+// the embedding root for answer card contents.
+struct CardData {
+  views::View* view = nullptr;
+  gfx::NativeView native_view = nullptr;
+};
+
+// Get answer card data by token.
+CardData GetCardDataByToken(
     ui::ws2::WindowService* window_service,
     const base::Optional<base::UnguessableToken>& token) {
   // Bail for invalid token.
   if (!token.has_value() || token->is_empty())
-    return nullptr;
+    return {};
 
   // Use AnswerCardContentsRegistry for an in-process token-to-view map. See
   // answer_card_contents_registry.h. Null check because it could be missing in
   // Mash and for tests.
-  if (AnswerCardContentsRegistry::Get())
-    return AnswerCardContentsRegistry::Get()->GetView(token.value());
+  auto* card_registry = AnswerCardContentsRegistry::Get();
+  if (card_registry) {
+    return {card_registry->GetView(token.value()),
+            card_registry->GetNativeView(token.value())};
+  }
 
   // Use ServerRemoteViewHost to embed the answer card contents provided in the
   // browser process in Mash.
@@ -51,25 +63,16 @@
     ui::ws2::ServerRemoteViewHost* view =
         new ui::ws2::ServerRemoteViewHost(window_service);
     view->EmbedUsingToken(token.value(),
-                          ui::mojom::kEmbedFlagEmbedderInterceptsEvents |
-                              ui::mojom::kEmbedFlagEmbedderControlsVisibility,
+                          ui::mojom::kEmbedFlagEmbedderControlsVisibility,
                           base::DoNothing());
-    return view;
+    return {view, view->embedding_root()};
   }
 
-  return nullptr;
+  return {};
 }
 
-// If there is a card native view identified by |token| in
-// AnswerCardContentsRegistry, exclude it from event handling.
-void ExcludeFromEventHandlingByToken(
-    const base::Optional<base::UnguessableToken>& token) {
-  if (!AnswerCardContentsRegistry::Get())
-    return;
-
-  DCHECK(token.has_value() && !token->is_empty());
-  gfx::NativeView card_native_view =
-      AnswerCardContentsRegistry::Get()->GetNativeView(token.value());
+// Exclude the card native view from event handling.
+void ExcludeCardFromEventHandling(gfx::NativeView card_native_view) {
   // |card_native_view| could be null in tests.
   if (!card_native_view)
     return;
@@ -124,11 +127,13 @@
     if (old_token != new_token) {
       RemoveAllChildViews(true /* delete_children */);
 
-      result_view =
-          GetViewByToken(view_delegate_->GetWindowService(), new_token);
+      const CardData card_data =
+          GetCardDataByToken(view_delegate_->GetWindowService(), new_token);
+
+      result_view = card_data.view;
       if (result_view) {
         AddChildView(result_view);
-        ExcludeFromEventHandlingByToken(new_token);
+        ExcludeCardFromEventHandling(card_data.native_view);
       }
     }
 
diff --git a/ash/login/ui/lock_debug_view.cc b/ash/login/ui/lock_debug_view.cc
index 1941794..fd15200 100644
--- a/ash/login/ui/lock_debug_view.cc
+++ b/ash/login/ui/lock_debug_view.cc
@@ -39,6 +39,7 @@
 namespace ButtonId {
 enum {
   kGlobalAddUser = 1,
+  kGlobalAddTenUsers,
   kGlobalRemoveUser,
   kGlobalToggleBlur,
   kGlobalToggleNoteAction,
@@ -667,6 +668,8 @@
 
   auto* change_users_container = add_horizontal_container();
   AddButton("Add user", ButtonId::kGlobalAddUser, change_users_container);
+  AddButton("Add 10 users", ButtonId::kGlobalAddTenUsers,
+            change_users_container);
   AddButton("Remove user", ButtonId::kGlobalRemoveUser, change_users_container);
 
   auto* toggle_container = add_horizontal_container();
@@ -773,11 +776,14 @@
                                   const ui::Event& event) {
   // Add or remove a user.
   bool is_add_user = sender->id() == ButtonId::kGlobalAddUser;
+  bool is_add_many_users = sender->id() == ButtonId::kGlobalAddTenUsers;
   bool is_remove_user = sender->id() == ButtonId::kGlobalRemoveUser;
-  if (is_add_user || is_remove_user) {
+  if (is_add_user || is_add_many_users || is_remove_user) {
     int num_users = debug_data_dispatcher_->GetUserCount();
     if (is_add_user)
       ++num_users;
+    else if (is_add_many_users)
+      num_users += 10;
     else if (is_remove_user)
       --num_users;
     if (num_users < 0)
diff --git a/ash/login/ui/scrollable_users_list_view.cc b/ash/login/ui/scrollable_users_list_view.cc
index ffadcbc..123baa9 100644
--- a/ash/login/ui/scrollable_users_list_view.cc
+++ b/ash/login/ui/scrollable_users_list_view.cc
@@ -4,7 +4,8 @@
 
 #include "ash/login/ui/scrollable_users_list_view.h"
 
-#include "ash/login/ui/hover_notifier.h"
+#include <limits>
+
 #include "ash/login/ui/login_display_style.h"
 #include "ash/login/ui/login_user_view.h"
 #include "ash/login/ui/non_accessible_view.h"
@@ -13,6 +14,8 @@
 #include "ash/public/interfaces/login_user_info.mojom.h"
 #include "ash/shell.h"
 #include "ash/wallpaper/wallpaper_controller.h"
+#include "base/numerics/ranges.h"
+#include "ui/compositor/scoped_layer_animation_settings.h"
 #include "ui/display/screen.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/color_analysis.h"
@@ -52,6 +55,12 @@
 constexpr int kScrollThumbRadiusDp = 8;
 // Alpha of scroll bar thumb (43/255 = 17%).
 constexpr int kScrollThumbAlpha = 43;
+// How long for the scrollbar to hide after no scroll events have been received?
+constexpr base::TimeDelta kScrollThumbHideTimeout =
+    base::TimeDelta::FromMilliseconds(500);
+// How long for the scrollbar to fade away?
+constexpr base::TimeDelta kScrollThumbFadeDuration =
+    base::TimeDelta::FromMilliseconds(240);
 
 constexpr char kScrollableUsersListContentViewName[] =
     "ScrollableUsersListContent";
@@ -141,16 +150,24 @@
   }
 }
 
-}  // namespace
-
-class ScrollableUsersListView::ScrollBar : public views::BaseScrollBar {
+// Shows a scrollbar that automatically displays and hides itself when content
+// is scrolled.
+class UsersListScrollBar : public views::BaseScrollBar {
  public:
-  explicit ScrollBar(bool horizontal) : BaseScrollBar(horizontal) {
+  explicit UsersListScrollBar(bool horizontal)
+      : BaseScrollBar(horizontal),
+        hide_scrollbar_timer_(
+            FROM_HERE,
+            kScrollThumbHideTimeout,
+            base::BindRepeating(&UsersListScrollBar::HideScrollBar,
+                                base::Unretained(this))) {
     SetThumb(new ScrollBarThumb(this));
+    GetThumb()->SetPaintToLayer();
+    GetThumb()->layer()->SetFillsBoundsOpaquely(false);
+    // The thumb is hidden by default.
+    GetThumb()->layer()->SetOpacity(0);
   }
-  ~ScrollBar() override = default;
-
-  void SetThumbVisible(bool visible) { GetThumb()->SetVisible(visible); }
+  ~UsersListScrollBar() override = default;
 
   // views::BaseScrollBar:
   gfx::Rect GetTrackBounds() const override { return GetLocalBounds(); }
@@ -158,11 +175,68 @@
   int GetThickness() const override {
     return kScrollThumbThicknessDp + kScrollThumbPaddingDp;
   }
+  void OnMouseEntered(const ui::MouseEvent& event) override {
+    mouse_over_scrollbar_ = true;
+    ShowScrollbar();
+  }
+  void OnMouseExited(const ui::MouseEvent& event) override {
+    mouse_over_scrollbar_ = false;
+    if (!hide_scrollbar_timer_.IsRunning())
+      hide_scrollbar_timer_.Reset();
+  }
+  void ScrollToPosition(int position) override {
+    ShowScrollbar();
+    views::BaseScrollBar::ScrollToPosition(position);
+  }
+  void ObserveScrollEvent(const ui::ScrollEvent& event) override {
+    // Scroll fling events are generated by moving a single finger over the
+    // trackpad; do not show the scrollbar for these events.
+    if (event.type() == ui::ET_SCROLL_FLING_CANCEL)
+      return;
+    ShowScrollbar();
+  }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(ScrollBar);
+  void ShowScrollbar() {
+    bool currently_hidden =
+        base::IsApproximatelyEqual(GetThumb()->layer()->GetTargetOpacity(), 0.f,
+                                   std::numeric_limits<float>::epsilon());
+
+    if (!mouse_over_scrollbar_)
+      hide_scrollbar_timer_.Reset();
+
+    if (currently_hidden) {
+      ui::ScopedLayerAnimationSettings animation(
+          GetThumb()->layer()->GetAnimator());
+      animation.SetTransitionDuration(kScrollThumbFadeDuration);
+      GetThumb()->layer()->SetOpacity(1);
+    }
+  }
+
+  void HideScrollBar() {
+    // Never hide the scrollbar if the mouse is over it. The auto-hide timer
+    // will be reset when the mouse leaves the scrollable area.
+    if (mouse_over_scrollbar_)
+      return;
+
+    hide_scrollbar_timer_.Stop();
+    ui::ScopedLayerAnimationSettings animation(
+        GetThumb()->layer()->GetAnimator());
+    animation.SetTransitionDuration(kScrollThumbFadeDuration);
+    GetThumb()->layer()->SetOpacity(0);
+  }
+
+  // When the mouse is hovering over the scrollbar, the scrollbar should always
+  // be displayed.
+  bool mouse_over_scrollbar_ = false;
+  // Timer that will start the scrollbar's hiding animation when it reaches 0.
+  base::RetainingOneShotTimer hide_scrollbar_timer_;
+
+  DISALLOW_COPY_AND_ASSIGN(UsersListScrollBar);
 };
 
+}  // namespace
+
 // static
 ScrollableUsersListView::GradientParams
 ScrollableUsersListView::GradientParams::BuildForStyle(
@@ -258,13 +332,8 @@
   SetBackgroundColor(SK_ColorTRANSPARENT);
   set_draw_overflow_indicator(false);
 
-  vertical_scroll_bar_ = new ScrollBar(false);
-  SetVerticalScrollBar(vertical_scroll_bar_);
-  SetHorizontalScrollBar(new ScrollBar(true));
-
-  hover_notifier_ = std::make_unique<HoverNotifier>(
-      this, base::BindRepeating(&ScrollableUsersListView::OnHover,
-                                base::Unretained(this)));
+  SetVerticalScrollBar(new UsersListScrollBar(false));
+  SetHorizontalScrollBar(new UsersListScrollBar(true));
 
   observer_.Add(Shell::Get()->wallpaper_controller());
 }
@@ -301,10 +370,6 @@
 
   // Layout everything.
   ScrollView::Layout();
-
-  // Update scrollbar visibility.
-  if (vertical_scroll_bar_)
-    vertical_scroll_bar_->SetThumbVisible(IsMouseHovered());
 }
 
 void ScrollableUsersListView::OnPaintBackground(gfx::Canvas* canvas) {
@@ -324,7 +389,7 @@
     cc::PaintFlags flags;
 
     // Only draw a gradient if the content can be scrolled.
-    if (vertical_scroll_bar_->visible()) {
+    if (vertical_scroll_bar()->visible()) {
       // Draws symmetrical linear gradient at the top and bottom of the view.
       SkScalar view_height = render_bounds.height();
       SkScalar gradient_height = gradient_params_.height;
@@ -377,8 +442,4 @@
   SchedulePaint();
 }
 
-void ScrollableUsersListView::OnHover(bool has_hover) {
-  vertical_scroll_bar_->SetThumbVisible(has_hover);
-}
-
 }  // namespace ash
diff --git a/ash/login/ui/scrollable_users_list_view.h b/ash/login/ui/scrollable_users_list_view.h
index 2bb87f8d..68b59e1 100644
--- a/ash/login/ui/scrollable_users_list_view.h
+++ b/ash/login/ui/scrollable_users_list_view.h
@@ -23,7 +23,6 @@
 
 namespace ash {
 
-class HoverNotifier;
 class WallpaperController;
 
 // Scrollable list of the users. Stores the list of login user views. Can be
@@ -75,8 +74,6 @@
   void OnWallpaperBlurChanged() override;
 
  private:
-  class ScrollBar;
-
   struct GradientParams {
     static GradientParams BuildForStyle(LoginDisplayStyle style);
 
@@ -88,9 +85,6 @@
     SkScalar height = 0;
   };
 
-  // Updates visibility of scroll bar thumb. Called when hover state changes.
-  void OnHover(bool has_hover);
-
   // Display style to determine layout and sizing of users list.
   const LoginDisplayStyle display_style_;
 
@@ -100,13 +94,8 @@
   // Layout for |user_view_host_|.
   views::BoxLayout* user_view_host_layout_ = nullptr;
 
-  // Owned by ScrollView.
-  ScrollBar* vertical_scroll_bar_ = nullptr;
-
   std::vector<LoginUserView*> user_views_;
 
-  std::unique_ptr<HoverNotifier> hover_notifier_;
-
   GradientParams gradient_params_;
 
   ScopedObserver<WallpaperController, WallpaperControllerObserver> observer_{
diff --git a/ash/public/cpp/app_list/app_list_config.cc b/ash/public/cpp/app_list/app_list_config.cc
index 967ee56..058a20889 100644
--- a/ash/public/cpp/app_list/app_list_config.cc
+++ b/ash/public/cpp/app_list/app_list_config.cc
@@ -17,6 +17,7 @@
       grid_icon_dimension_(48),
       grid_icon_bottom_padding_(3),
       grid_title_top_padding_(86),
+      grid_title_horizontal_padding_(8),
       grid_title_width_(80),
       grid_title_color_(SK_ColorWHITE),
       grid_focus_dimension_(64),
diff --git a/ash/public/cpp/app_list/app_list_config.h b/ash/public/cpp/app_list/app_list_config.h
index ca37626..4d3713c 100644
--- a/ash/public/cpp/app_list/app_list_config.h
+++ b/ash/public/cpp/app_list/app_list_config.h
@@ -31,6 +31,9 @@
   int grid_icon_dimension() const { return grid_icon_dimension_; }
   int grid_icon_bottom_padding() const { return grid_icon_bottom_padding_; }
   int grid_title_top_padding() const { return grid_title_top_padding_; }
+  int grid_title_horizontal_padding() const {
+    return grid_title_horizontal_padding_;
+  }
   int grid_title_width() const { return grid_title_width_; }
   int grid_focus_dimension() const { return grid_focus_dimension_; }
   int grid_focus_corner_radius() const { return grid_focus_corner_radius_; }
@@ -147,8 +150,9 @@
   // The icon bottom padding in tile views in apps grid view.
   int grid_icon_bottom_padding_;
 
-  // The title top padding in tile views in apps grid view.
+  // The title top and horizontal padding in tile views in apps grid view.
   int grid_title_top_padding_;
+  int grid_title_horizontal_padding_;
 
   // The title width and color of tile views in apps grid view.
   int grid_title_width_;
diff --git a/ash/shelf/overflow_bubble.cc b/ash/shelf/overflow_bubble.cc
index f14373b..d427c02 100644
--- a/ash/shelf/overflow_bubble.cc
+++ b/ash/shelf/overflow_bubble.cc
@@ -11,6 +11,8 @@
 #include "ash/shelf/shelf_view.h"
 #include "ash/shell.h"
 #include "ash/system/tray/tray_background_view.h"
+#include "ui/aura/client/screen_position_client.h"
+#include "ui/aura/window.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/views/widget/widget.h"
 
@@ -19,12 +21,12 @@
 OverflowBubble::OverflowBubble(Shelf* shelf)
     : shelf_(shelf), bubble_(nullptr), overflow_button_(nullptr) {
   DCHECK(shelf_);
-  Shell::Get()->AddPointerWatcher(this, views::PointerWatcherEventTypes::BASIC);
+  Shell::Get()->AddPreTargetHandler(this);
 }
 
 OverflowBubble::~OverflowBubble() {
   Hide();
-  Shell::Get()->RemovePointerWatcher(this);
+  Shell::Get()->RemovePreTargetHandler(this);
 }
 
 void OverflowBubble::Show(OverflowButton* overflow_button,
@@ -61,10 +63,16 @@
   overflow_button->OnOverflowBubbleHidden();
 }
 
-void OverflowBubble::ProcessPressedEvent(
-    const gfx::Point& event_location_in_screen) {
-  if (!IsShowing() || bubble_->shelf_view()->IsShowingMenu() ||
-      bubble_->GetBoundsInScreen().Contains(event_location_in_screen) ||
+void OverflowBubble::ProcessPressedEvent(ui::LocatedEvent* event) {
+  if (!IsShowing() || bubble_->shelf_view()->IsShowingMenu())
+    return;
+
+  aura::Window* target = static_cast<aura::Window*>(event->target());
+  gfx::Point event_location_in_screen = event->location();
+  aura::client::GetScreenPositionClient(target->GetRootWindow())
+      ->ConvertPointToScreen(target, &event_location_in_screen);
+
+  if (bubble_->GetBoundsInScreen().Contains(event_location_in_screen) ||
       overflow_button_->GetBoundsInScreen().Contains(
           event_location_in_screen)) {
     return;
@@ -83,12 +91,14 @@
   Hide();
 }
 
-void OverflowBubble::OnPointerEventObserved(
-    const ui::PointerEvent& event,
-    const gfx::Point& location_in_screen,
-    gfx::NativeView target) {
-  if (event.type() == ui::ET_POINTER_DOWN)
-    ProcessPressedEvent(location_in_screen);
+void OverflowBubble::OnMouseEvent(ui::MouseEvent* event) {
+  if (event->type() == ui::ET_MOUSE_PRESSED)
+    ProcessPressedEvent(event);
+}
+
+void OverflowBubble::OnTouchEvent(ui::TouchEvent* event) {
+  if (event->type() == ui::ET_TOUCH_PRESSED)
+    ProcessPressedEvent(event);
 }
 
 void OverflowBubble::OnWidgetDestroying(views::Widget* widget) {
diff --git a/ash/shelf/overflow_bubble.h b/ash/shelf/overflow_bubble.h
index d7331f9..7e951e9 100644
--- a/ash/shelf/overflow_bubble.h
+++ b/ash/shelf/overflow_bubble.h
@@ -7,7 +7,7 @@
 
 #include "ash/ash_export.h"
 #include "base/macros.h"
-#include "ui/views/pointer_watcher.h"
+#include "ui/events/event_handler.h"
 #include "ui/views/widget/widget_observer.h"
 
 namespace views {
@@ -15,7 +15,7 @@
 }
 
 namespace ui {
-class PointerEvent;
+class LocatedEvent;
 }
 
 namespace ash {
@@ -26,7 +26,7 @@
 
 // OverflowBubble shows shelf items that won't fit on the main shelf in a
 // separate bubble.
-class ASH_EXPORT OverflowBubble : public views::PointerWatcher,
+class ASH_EXPORT OverflowBubble : public ui::EventHandler,
                                   public views::WidgetObserver {
  public:
   // |shelf| is the shelf that spawns the bubble.
@@ -44,14 +44,13 @@
   OverflowBubbleView* bubble_view() { return bubble_; }
 
  private:
-  void ProcessPressedEvent(const gfx::Point& event_location_in_screen);
+  void ProcessPressedEvent(ui::LocatedEvent* event);
 
-  // views::PointerWatcher:
-  void OnPointerEventObserved(const ui::PointerEvent& event,
-                              const gfx::Point& location_in_screen,
-                              gfx::NativeView target) override;
+  // ui::EventHandler:
+  void OnMouseEvent(ui::MouseEvent* event) override;
+  void OnTouchEvent(ui::TouchEvent* event) override;
 
-  // Overridden from views::WidgetObserver:
+  // views::WidgetObserver:
   void OnWidgetDestroying(views::Widget* widget) override;
 
   Shelf* shelf_;
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index ca3b253..f92e1b8 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.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,6 +16,7 @@
 <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>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">يمكنك الحصول فقط على ما يصل إلى <ph name="MULTI_PROFILE_USER_LIMIT" /> حساب في الدخول المتعدد.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{تم الاتصال بجهاز واحد}zero{تم الاتصال بـ # جهاز}two{تم الاتصال بجهازين (#)}few{تم الاتصال بـ # أجهزة}many{تم الاتصال بـ # جهازًا}other{تم الاتصال بـ # جهاز}}</translation>
 <translation id="3236488194889173876">ليست هناك شبكة جوّال متاحة</translation>
+<translation id="3255483164551725916">ما الإجراء المطلوب؟</translation>
 <translation id="3294437725009624529">ضيف</translation>
 <translation id="332587331255250389">يُرجى استبدال البطارية</translation>
 <translation id="3351879221545518001">أنت حاليًا تبث محتوى الشاشة.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">مؤشر الليزر</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{الإشعارات متوقفة لتطبيق واحد}zero{الإشعارات متوقفة لـ # تطبيق}two{الإشعارات متوقفة لتطبيقَين (#)}few{الإشعارات متوقفة لـ # تطبيقات}many{الإشعارات متوقفة لـ # تطبيقًا}other{الإشعارات متوقفة لـ # تطبيق}}</translation>
 <translation id="4072264167173457037">إشارة متوسطة</translation>
+<translation id="4146833061457621061">تشغيل موسيقى</translation>
 <translation id="4200057768455216496">لقد ضغطت على اختصار المُكبِّر الذي تم إرساؤه. هل ترغب في تفعيله؟</translation>
 <translation id="4217571870635786043">إملاء</translation>
 <translation id="4261870227682513959">عرض إعدادات الإشعارات. تم إيقاف الإشعارات</translation>
@@ -344,6 +348,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>
@@ -387,6 +392,7 @@
 <translation id="7842569679327885685">تحذير: ميزة تجريبية</translation>
 <translation id="7846634333498149051">لوحة المفاتيح</translation>
 <translation id="7886277072580235377">سيتم محو جلسة الإنترنت عند تسجيل الخروج. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">إرسال رسالة إلكترونية</translation>
 <translation id="790040513076446191">معالجة الإعدادات المتعلقة بالخصوصية</translation>
 <translation id="7904094684485781019">لقد حظر مشرف هذا الحساب إمكانية الدخول المتعدد.</translation>
 <translation id="7933084174919150729">‏لا يتوفر مساعد Google إلا للملف الشخصي الأساسي.</translation>
@@ -449,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>
@@ -472,6 +479,7 @@
 <translation id="9210037371811586452">جارٍ الخروج من وضع سطح المكتب الموحد</translation>
 <translation id="9215934040295798075">تعيين خلفية</translation>
 <translation id="923686485342484400">‏للخروج اضغط على Ctrl Shift Q مرتين.</translation>
+<translation id="938963181863597773">ماذا يتضمّن تقويمي؟</translation>
 <translation id="945522503751344254">إرسال تعليقات</translation>
 <translation id="98515147261107953">أفقي</translation>
 <translation id="995927048686010764">النقر التلقائي</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index 58204a2..79bac7a 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -29,7 +29,7 @@
 <translation id="1467432559032391204">A l'esquerra</translation>
 <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation>
 <translation id="1510238584712386396">Menú d'aplicacions</translation>
-<translation id="1520303207432623762">{NUM_APPS,plural, =1{Mostra la configuració de les notificacions. Les notificacions estan desactivades en una aplicació.}other{Mostra la configuració de les notificacions. Les notificacions estan desactivades en # aplicacions.}}</translation>
+<translation id="1520303207432623762">{NUM_APPS,plural, =1{Mostra la configuració de les notificacions. Les notificacions estan desactivades per a una aplicació.}other{Mostra la configuració de les notificacions. Les notificacions estan desactivades per a # aplicacions.}}</translation>
 <translation id="1525508553941733066">IGNORA</translation>
 <translation id="1537254971476575106">Lupa de pantalla completa</translation>
 <translation id="15373452373711364">Cursor del ratolí gran</translation>
@@ -298,7 +298,7 @@
 <translation id="6297287540776456956">Utilitza el llapis òptic per seleccionar una part</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> s'ha canviat a <ph name="ROTATION" /></translation>
 <translation id="632744581670418035">Superposició de teclat</translation>
-<translation id="6376931439017688372">Bluetooth està activat</translation>
+<translation id="6376931439017688372">El Bluetooth està activat</translation>
 <translation id="639644700271529076">Bloq Maj està desactivat</translation>
 <translation id="6406704438230478924">AltGr</translation>
 <translation id="642644398083277086">Esborra totes les notificacions</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index 751025a..9c43b5d 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> blev tilføjet</translation>
 <translation id="1056775291175587022">Der er ingen netværk</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Jeg keder mig</translation>
 <translation id="1104084341931202936">Vis indstillinger for hjælpefunktioner</translation>
 <translation id="1104621072296271835">Dine enheder fungerer endnu bedre sammen</translation>
 <translation id="112308213915226829">Skjul hylde automatisk</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Ryd alle</translation>
 <translation id="1247372569136754018">Mikrofon (indbygget)</translation>
 <translation id="1252999807265626933">Oplader fra <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Hvordan er vejret?</translation>
 <translation id="1267032506238418139">Ændring af genvej</translation>
 <translation id="1270290102613614947">Skærmtastaturet er deaktiveret</translation>
 <translation id="1272079795634619415">Stop</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Du kan kun have op til <ph name="MULTI_PROFILE_USER_LIMIT" /> konti i samlet login fra flere konti.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Forbundet til en enhed}one{Forbundet til # enhed}other{Forbundet til # enheder}}</translation>
 <translation id="3236488194889173876">Der er ingen tilgængelige mobilnetværk</translation>
+<translation id="3255483164551725916">Hvad kan du gøre?</translation>
 <translation id="3294437725009624529">Gæst</translation>
 <translation id="332587331255250389">Udskift batteriet</translation>
 <translation id="3351879221545518001">Du caster i øjeblikket skærmen.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Laserpegepind</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Deaktiveret for én app}one{Deaktiveret for # app}other{Deaktiveret for # apps}}</translation>
 <translation id="4072264167173457037">Middel signal</translation>
+<translation id="4146833061457621061">Spil musik</translation>
 <translation id="4200057768455216496">Du trykkede på genvejen for det fastgjorte lupvindue. Vil du aktivere indstillingen?</translation>
 <translation id="4217571870635786043">Diktering</translation>
 <translation id="4261870227682513959">Vis indstillinger for underretninger. Underretninger er slået fra</translation>
@@ -344,6 +348,7 @@
 <translation id="7037152028959403492">Du trykkede på genvejen for høj kontrast. Vil du aktivere indstillingen?</translation>
 <translation id="7066646422045619941">Din administrator har deaktiveret dette netværk.</translation>
 <translation id="7067196344162293536">Automatisk rotering</translation>
+<translation id="7068360136237591149">Åbn filer</translation>
 <translation id="7076293881109082629">Login</translation>
 <translation id="7092922358121866860">Vis indstillinger for Nattelys</translation>
 <translation id="7098389117866926363">USB-C-enhed (porten bagpå i venstre side)</translation>
@@ -387,6 +392,7 @@
 <translation id="7842569679327885685">Advarsel! Eksperimentel funktion</translation>
 <translation id="7846634333498149051">Tastatur</translation>
 <translation id="7886277072580235377">Din internetsession ryddes, når du logger ud. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Send en mail</translation>
 <translation id="790040513076446191">Manipulere indstillinger til beskyttelse af personlige oplysninger</translation>
 <translation id="7904094684485781019">Administratoren for denne konto tillader ikke samlet login fra flere konti.</translation>
 <translation id="7933084174919150729">Google Assistent kan kun bruges via den primære profil.</translation>
@@ -449,6 +455,7 @@
 <translation id="8850991929411075241">Søg+Esc</translation>
 <translation id="8870509716567206129">Appen understøtter ikke delt skærm.</translation>
 <translation id="8874184842967597500">Ikke tilsluttet</translation>
+<translation id="8877788021141246043">Indstil en påmindelse</translation>
 <translation id="8878886163241303700">Udvider skærm</translation>
 <translation id="8921624153894383499">Google-assistenten taler ikke dette sprog.</translation>
 <translation id="8938800817013097409">USB-C-enhed (porten bagpå i højre side)</translation>
@@ -472,6 +479,7 @@
 <translation id="9210037371811586452">Lukker tilstanden Kombineret skrivebord</translation>
 <translation id="9215934040295798075">Vælg baggrund</translation>
 <translation id="923686485342484400">Tryk på Control+Shift+Q to gange for at logge ud.</translation>
+<translation id="938963181863597773">Hvad har jeg i kalenderen?</translation>
 <translation id="945522503751344254">Send feedback</translation>
 <translation id="98515147261107953">Liggende</translation>
 <translation id="995927048686010764">Autoclick</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index c35ae6a4..dc62a4a 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> hinzugefügt</translation>
 <translation id="1056775291175587022">Keine Netzwerke</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Mir ist langweilig</translation>
 <translation id="1104084341931202936">Einstellungen für Bedienungshilfen anzeigen</translation>
 <translation id="1104621072296271835">Vorteile durch das Verbinden Ihrer Geräte</translation>
 <translation id="112308213915226829">Ablage automatisch ausblenden</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Alle löschen</translation>
 <translation id="1247372569136754018">Mikrofon (intern)</translation>
 <translation id="1252999807265626933">Wird über ein <ph name="POWER_SOURCE" /> aufgeladen</translation>
+<translation id="1255033239764210633">Wie ist das Wetter?</translation>
 <translation id="1267032506238418139">Änderung der Tastenkombination</translation>
 <translation id="1270290102613614947">Bildschirmtastatur deaktiviert</translation>
 <translation id="1272079795634619415">Stopp</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Bei der Mehrfachanmeldung sind maximal <ph name="MULTI_PROFILE_USER_LIMIT" /> Konten zulässig.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Mit einem Gerät verbunden}other{Mit # Geräten verbunden}}</translation>
 <translation id="3236488194889173876">Kein Mobilfunknetz verfügbar</translation>
+<translation id="3255483164551725916">Was kannst du alles tun?</translation>
 <translation id="3294437725009624529">Gast</translation>
 <translation id="332587331255250389">Bitte tauschen Sie die Batterien aus</translation>
 <translation id="3351879221545518001">Sie streamen gerade den Bildschirm.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Laserpointer</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Für eine App deaktiviert}other{Für # Apps deaktiviert}}</translation>
 <translation id="4072264167173457037">Durchschnittliches Signal</translation>
+<translation id="4146833061457621061">Musik abspielen</translation>
 <translation id="4200057768455216496">Sie haben die Tastenkombination für die angedockte Lupe gedrückt. Möchten Sie sie aktivieren?</translation>
 <translation id="4217571870635786043">Spracheingabe</translation>
 <translation id="4261870227682513959">Benachrichtigungseinstellungen anzeigen. Benachrichtigungen sind deaktiviert.</translation>
@@ -343,6 +347,7 @@
 <translation id="7037152028959403492">Sie haben die Tastenkombination für hohen Kontrast gedrückt. Möchten Sie ihn aktivieren?</translation>
 <translation id="7066646422045619941">Dieses Netzwerk wurde von Ihrem Administrator deaktiviert.</translation>
 <translation id="7067196344162293536">Automatisch drehen</translation>
+<translation id="7068360136237591149">Dateien öffnen</translation>
 <translation id="7076293881109082629">Anmeldung</translation>
 <translation id="7092922358121866860">Nachtlichteinstellungen anzeigen</translation>
 <translation id="7098389117866926363">USB-C-Gerät (linker Port hinten)</translation>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">Achtung: Experimentelle Funktion</translation>
 <translation id="7846634333498149051">Tastatur</translation>
 <translation id="7886277072580235377">Ihre Internetsitzung wird gelöscht, sobald Sie sich abmelden. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">E-Mails senden</translation>
 <translation id="790040513076446191">Datenschutzeinstellungen bearbeiten</translation>
 <translation id="7904094684485781019">Der Administrator dieses Kontos hat keine Mehrfachanmeldung zugelassen.</translation>
 <translation id="7933084174919150729">Google Assistant ist nur für das Hauptprofil verfügbar.</translation>
@@ -448,6 +454,7 @@
 <translation id="8850991929411075241">Suche + Esc</translation>
 <translation id="8870509716567206129">Das Teilen des Bildschirms wird in dieser App nicht unterstützt.</translation>
 <translation id="8874184842967597500">Nicht verbunden</translation>
+<translation id="8877788021141246043">Erinnerungen einrichten</translation>
 <translation id="8878886163241303700">Bildschirmerweiterung</translation>
 <translation id="8921624153894383499">Google Assistant spricht diese Sprache nicht.</translation>
 <translation id="8938800817013097409">USB-C-Gerät (rechter Port hinten)</translation>
@@ -471,6 +478,7 @@
 <translation id="9210037371811586452">Unified Desktop-Modus wird beendet</translation>
 <translation id="9215934040295798075">Hintergrund festlegen</translation>
 <translation id="923686485342484400">Drücken Sie zum Abmelden zweimal Steuerung - Umschalttaste - Q.</translation>
+<translation id="938963181863597773">Welche Termine stehen an?</translation>
 <translation id="945522503751344254">Feedback geben</translation>
 <translation id="98515147261107953">Querformat</translation>
 <translation id="995927048686010764">Automatisch klicken</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index 1b07b37f..1ad9d389 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> added</translation>
 <translation id="1056775291175587022">No networks</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">I'm bored</translation>
 <translation id="1104084341931202936">Show accessibility settings</translation>
 <translation id="1104621072296271835">Your devices work even better together</translation>
 <translation id="112308213915226829">Autohide shelf</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Clear all</translation>
 <translation id="1247372569136754018">Microphone (internal)</translation>
 <translation id="1252999807265626933">Charging from <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">What's the weather?</translation>
 <translation id="1267032506238418139">Shortcut change</translation>
 <translation id="1270290102613614947">On-screen keyboard disabled</translation>
 <translation id="1272079795634619415">Stop</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">You can only have up to <ph name="MULTI_PROFILE_USER_LIMIT" /> accounts in multiple sign-in.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Connected to a device}other{Connected to # devices}}</translation>
 <translation id="3236488194889173876">No mobile network available</translation>
+<translation id="3255483164551725916">What can you do?</translation>
 <translation id="3294437725009624529">Guest</translation>
 <translation id="332587331255250389">Please replace the battery</translation>
 <translation id="3351879221545518001">You are currently casting the screen.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Laser pointer</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Off for an app}other{Off for # apps}}</translation>
 <translation id="4072264167173457037">Medium signal</translation>
+<translation id="4146833061457621061">Play music</translation>
 <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>
@@ -343,6 +347,7 @@
 <translation id="7037152028959403492">You pressed the shortcut for high contrast. Do you want to turn it on?</translation>
 <translation id="7066646422045619941">This network is disabled by your administrator.</translation>
 <translation id="7067196344162293536">Auto rotate</translation>
+<translation id="7068360136237591149">Open files</translation>
 <translation id="7076293881109082629">Signing in</translation>
 <translation id="7092922358121866860">Show Night Light settings</translation>
 <translation id="7098389117866926363">USB-C device (left port in the back)</translation>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">Warning: Experimental feature</translation>
 <translation id="7846634333498149051">Keyboard</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="790040513076446191">Manipulate privacy-related settings</translation>
 <translation id="7904094684485781019">The administrator for this account has disallowed multiple sign-in.</translation>
 <translation id="7933084174919150729">The Google Assistant is only available for primary profile.</translation>
@@ -448,6 +454,7 @@
 <translation id="8850991929411075241">Search+Esc</translation>
 <translation id="8870509716567206129">App does not support split-screen.</translation>
 <translation id="8874184842967597500">Not connected</translation>
+<translation id="8877788021141246043">Set a reminder</translation>
 <translation id="8878886163241303700">Extending screen</translation>
 <translation id="8921624153894383499">The Google Assistant doesn’t speak this language.</translation>
 <translation id="8938800817013097409">USB-C device (right port in the back)</translation>
@@ -471,6 +478,7 @@
 <translation id="9210037371811586452">Exiting unified desktop mode</translation>
 <translation id="9215934040295798075">Set wallpaper</translation>
 <translation id="923686485342484400">Press Control Shift Q twice to sign out.</translation>
+<translation id="938963181863597773">What's on my calendar?</translation>
 <translation id="945522503751344254">Send feedback</translation>
 <translation id="98515147261107953">Landscape</translation>
 <translation id="995927048686010764">Auto Click</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index be73a3a..4c63f81 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303">Se ha añadido <ph name="DEVICE_NAME" /></translation>
 <translation id="1056775291175587022">No hay redes</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Me aburro</translation>
 <translation id="1104084341931202936">Mostrar configuración de accesibilidad</translation>
 <translation id="1104621072296271835">Tus dispositivos funcionan aún mejor juntos</translation>
 <translation id="112308213915226829">Ocultar estantería automáticamente</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Eliminar todo</translation>
 <translation id="1247372569136754018">Micrófono (interno)</translation>
 <translation id="1252999807265626933">Cargando a través de <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">¿Qué tiempo hace?</translation>
 <translation id="1267032506238418139">Cambio de la combinación de teclas</translation>
 <translation id="1270290102613614947">Teclado en pantalla inhabilitado</translation>
 <translation id="1272079795634619415">Interrumpir</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Solo puedes tener un máximo de <ph name="MULTI_PROFILE_USER_LIMIT" /> cuentas en el inicio de sesión múltiple.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Conectado a 1 dispositivo}other{Conectado a # dispositivos}}</translation>
 <translation id="3236488194889173876">No hay ninguna red móvil disponible</translation>
+<translation id="3255483164551725916">¿Qué puedes hacer?</translation>
 <translation id="3294437725009624529">Invitado</translation>
 <translation id="332587331255250389">Cambia la batería</translation>
 <translation id="3351879221545518001">Estás enviando la pantalla.</translation>
@@ -185,6 +188,7 @@
 <translation id="4017989525502048489">Puntero láser</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Desactivadas para una aplicación}other{Desactivadas para # aplicaciones}}</translation>
 <translation id="4072264167173457037">Señal media</translation>
+<translation id="4146833061457621061">Pon música</translation>
 <translation id="4200057768455216496">Has pulsado la combinación de teclas de la lupa fijada. ¿Quieres activarla?</translation>
 <translation id="4217571870635786043">Dictado</translation>
 <translation id="4261870227682513959">Muestra la configuración de notificaciones. Las notificaciones están desactivadas.</translation>
@@ -344,6 +348,7 @@
 <translation id="7037152028959403492">Has pulsado la combinación de teclas de contraste alto. ¿Quieres activarlo?</translation>
 <translation id="7066646422045619941">El administrador ha inhabilitado esta red.</translation>
 <translation id="7067196344162293536">Rotación automática</translation>
+<translation id="7068360136237591149">Abre archivos</translation>
 <translation id="7076293881109082629">Iniciando sesión</translation>
 <translation id="7092922358121866860">Mostrar la configuración de luz nocturna</translation>
 <translation id="7098389117866926363">Dispositivo USB tipo C (puerto izquierdo situado en la parte trasera)</translation>
@@ -387,6 +392,7 @@
 <translation id="7842569679327885685">Advertencia: Función experimental</translation>
 <translation id="7846634333498149051">Teclado</translation>
 <translation id="7886277072580235377">Tu sesión de Internet se borrará cuando la cierres. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Envía un correo electrónico</translation>
 <translation id="790040513076446191">Modificar la configuración relacionada con la privacidad</translation>
 <translation id="7904094684485781019">El administrador de esta cuenta ha inhabilitado el inicio de sesión múltiple.</translation>
 <translation id="7933084174919150729">El Asistente de Google solo está disponible en el perfil principal.</translation>
@@ -449,6 +455,7 @@
 <translation id="8850991929411075241">Buscar+Esc</translation>
 <translation id="8870509716567206129">La aplicación no admite la pantalla dividida.</translation>
 <translation id="8874184842967597500">No conectado</translation>
+<translation id="8877788021141246043">Añade un recordatorio</translation>
 <translation id="8878886163241303700">Ampliando pantalla</translation>
 <translation id="8921624153894383499">El Asistente de Google no habla este idioma.</translation>
 <translation id="8938800817013097409">Dispositivo USB tipo C (puerto derecho situado en la parte trasera)</translation>
@@ -472,6 +479,7 @@
 <translation id="9210037371811586452">Saliendo del modo de escritorio unificado</translation>
 <translation id="9215934040295798075">Establecer fondo de pantalla</translation>
 <translation id="923686485342484400">Pulsa Control Mayús Q dos veces para cerrar sesión.</translation>
+<translation id="938963181863597773">¿Qué tengo en el calendario?</translation>
 <translation id="945522503751344254">Enviar comentarios</translation>
 <translation id="98515147261107953">Horizontal</translation>
 <translation id="995927048686010764">Clic automático</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 0c3b0a6..588d23b 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303">Idinagdag ang <ph name="DEVICE_NAME" /></translation>
 <translation id="1056775291175587022">Walang network</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Naiinip ako</translation>
 <translation id="1104084341931202936">Ipakita ang mga setting ng pagiging naa-access</translation>
 <translation id="1104621072296271835">Gagana nang mas maayos ang iyong mga device kung magkakasama</translation>
 <translation id="112308213915226829">Awtomatikong itago ang shelf</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">I-clear lahat</translation>
 <translation id="1247372569136754018">Mikropono (internal)</translation>
 <translation id="1252999807265626933">Nagcha-charge mula sa <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Ano ang lagay ng panahon?</translation>
 <translation id="1267032506238418139">Pagbabago ng shortcut</translation>
 <translation id="1270290102613614947">Naka-disable ang on-screen na keyboard</translation>
 <translation id="1272079795634619415">Stop</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Maaari ka lang magkaroon ng hanggang <ph name="MULTI_PROFILE_USER_LIMIT" /> (na) account sa maraming pag-sign in.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Nakakonekta sa isang device}one{Nakakonekta sa # device}other{Nakakonekta sa # na device}}</translation>
 <translation id="3236488194889173876">Walang available na mobile network</translation>
+<translation id="3255483164551725916">Ano ang maaari mong gawin?</translation>
 <translation id="3294437725009624529">Bisita</translation>
 <translation id="332587331255250389">Pakipalitan ang baterya</translation>
 <translation id="3351879221545518001">Kasalukuyan kang nagka-cast ng screen.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Laser pointer</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Naka-off para sa isang app}one{Naka-off para sa # app}other{Naka-off para sa # na app}}</translation>
 <translation id="4072264167173457037">Katamtaman ang signal</translation>
+<translation id="4146833061457621061">Mag-play ng musika</translation>
 <translation id="4200057768455216496">Napindot mo ang shortcut para sa naka-dock na magnifier. Gusto mo ba itong i-on?</translation>
 <translation id="4217571870635786043">Pagdidikta</translation>
 <translation id="4261870227682513959">Ipakita ang mga setting ng notification. Naka-off ang mga notification</translation>
@@ -343,6 +347,7 @@
 <translation id="7037152028959403492">Napindot mo ang shortcut para sa mataas na contrast. Gusto mo ba itong i-on?</translation>
 <translation id="7066646422045619941">Na-disable ng iyong administrator ang network na ito.</translation>
 <translation id="7067196344162293536">Awtomatikong pag-rotate</translation>
+<translation id="7068360136237591149">Magbukas ng mga file</translation>
 <translation id="7076293881109082629">Nagsa-sign in</translation>
 <translation id="7092922358121866860">Ipakita ang mga setting ng Night Light</translation>
 <translation id="7098389117866926363">USB-C device (kaliwang port sa likod)</translation>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">Babala: Pang-eskperimentong feature</translation>
 <translation id="7846634333498149051">Keyboard</translation>
 <translation id="7886277072580235377">Maki-clear ang iyong session sa internet kapag nag-sign out ka. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Magpadala ng email</translation>
 <translation id="790040513076446191">Manipulahin ang mga setting kaugnay ng privacy</translation>
 <translation id="7904094684485781019">Hindi pinayagan ng administrator para sa account na ito ang multiple na pag-sign in.</translation>
 <translation id="7933084174919150729">Available lang ang Google Assistant para sa pangunahing profile.</translation>
@@ -448,6 +454,7 @@
 <translation id="8850991929411075241">Search+Esc</translation>
 <translation id="8870509716567206129">Hindi sinusuportahan ng app ang split-screen.</translation>
 <translation id="8874184842967597500">Hindi nakakonekta</translation>
+<translation id="8877788021141246043">Magtakda ng paalala</translation>
 <translation id="8878886163241303700">Pinapalawak ang screen</translation>
 <translation id="8921624153894383499">Hindi nagsasalita ng ganitong wika ang Google Assistant.</translation>
 <translation id="8938800817013097409">USB-C device (kanang port sa likod)</translation>
@@ -471,6 +478,7 @@
 <translation id="9210037371811586452">Lumalabas sa unified desktop mode</translation>
 <translation id="9215934040295798075">Magtakda ng wallpaper</translation>
 <translation id="923686485342484400">Pindutin ang Control Shift Q nang dalawang beses upang mag-sign out.</translation>
+<translation id="938963181863597773">Ano ang nakaiskedyul sa kalendaryo ko?</translation>
 <translation id="945522503751344254">Magpadala ng feedback...</translation>
 <translation id="98515147261107953">Landscape</translation>
 <translation id="995927048686010764">Autoclick</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index e62e75cb..d18d0b1 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> ajouté</translation>
 <translation id="1056775291175587022">Aucun réseau</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" /> : <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Je m'ennuie</translation>
 <translation id="1104084341931202936">Afficher les paramètres d'accessibilité</translation>
 <translation id="1104621072296271835">Vos appareils fonctionnent encore mieux ensemble</translation>
 <translation id="112308213915226829">Masquer automatiquement l'étagère</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Tout effacer</translation>
 <translation id="1247372569136754018">Micro (interne)</translation>
 <translation id="1252999807265626933">Charge à partir de la source "<ph name="POWER_SOURCE" />"</translation>
+<translation id="1255033239764210633">Quel temps fait-il ?</translation>
 <translation id="1267032506238418139">Modification du raccourci</translation>
 <translation id="1270290102613614947">Clavier à l'écran désactivé</translation>
 <translation id="1272079795634619415">Arrêter</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Vous ne pouvez vous connecter qu'à <ph name="MULTI_PROFILE_USER_LIMIT" /> comptes au maximum dans le cadre de la connexion multicompte.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Connecté à un appareil}one{Connecté à # appareil}other{Connecté à # appareils}}</translation>
 <translation id="3236488194889173876">Aucun réseau mobile disponible</translation>
+<translation id="3255483164551725916">Que sais-tu faire ?</translation>
 <translation id="3294437725009624529">Invité</translation>
 <translation id="332587331255250389">Veuillez remplacer la batterie</translation>
 <translation id="3351879221545518001">Vous êtes actuellement en train de caster l'écran.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Pointeur laser</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Notifications désactivées pour une application}one{Notifications désactivées pour # application}other{Notifications désactivées pour # applications}}</translation>
 <translation id="4072264167173457037">Signal de moyenne intensité</translation>
+<translation id="4146833061457621061">Joue de la musique</translation>
 <translation id="4200057768455216496">Vous avez utilisé le raccourci de la loupe ancrée. Voulez-vous l'activer ?</translation>
 <translation id="4217571870635786043">Dictée</translation>
 <translation id="4261870227682513959">Afficher les paramètres de notification. Les notifications sont désactivées</translation>
@@ -344,6 +348,7 @@
 <translation id="7037152028959403492">Vous avez utilisé le raccourci du contraste élevé. Voulez-vous l'activer ?</translation>
 <translation id="7066646422045619941">Votre administrateur a désactivé ce réseau.</translation>
 <translation id="7067196344162293536">Rotation automatique</translation>
+<translation id="7068360136237591149">Ouvre des fichiers</translation>
 <translation id="7076293881109082629">Connexion</translation>
 <translation id="7092922358121866860">Afficher les paramètres d'éclairage nocturne</translation>
 <translation id="7098389117866926363">Appareil USB de type C (port situé sur l'arrière de l'appareil, à gauche)</translation>
@@ -387,6 +392,7 @@
 <translation id="7842569679327885685">Avertissement : Fonctionnalité expérimentale</translation>
 <translation id="7846634333498149051">Clavier</translation>
 <translation id="7886277072580235377">Votre session Internet est effacée lorsque vous vous déconnectez. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Envoie un e-mail</translation>
 <translation id="790040513076446191">Modifier les paramètres de confidentialité</translation>
 <translation id="7904094684485781019">L'administrateur de ce compte a désactivé la connexion multicompte.</translation>
 <translation id="7933084174919150729">L'Assistant Google n'est disponible que pour le profil principal.</translation>
@@ -449,6 +455,7 @@
 <translation id="8850991929411075241">Recherche+Échap</translation>
 <translation id="8870509716567206129">Application incompatible avec l'écran partagé.</translation>
 <translation id="8874184842967597500">Non connecté</translation>
+<translation id="8877788021141246043">Définis un rappel</translation>
 <translation id="8878886163241303700">Extension de l'écran</translation>
 <translation id="8921624153894383499">L'Assistant Google ne parle pas cette langue.</translation>
 <translation id="8938800817013097409">Appareil USB de type C (port situé sur l'arrière de l'appareil, à droite)</translation>
@@ -472,6 +479,7 @@
 <translation id="9210037371811586452">Sortie du mode Bureau unifié</translation>
 <translation id="9215934040295798075">Définir le fond d'écran</translation>
 <translation id="923686485342484400">Appuyez deux fois sur Contrôle + Maj + Q pour vous déconnecter.</translation>
+<translation id="938963181863597773">Qu'y a-t-il dans mon agenda ?</translation>
 <translation id="945522503751344254">Envoyer le commentaire</translation>
 <translation id="98515147261107953">Paysage</translation>
 <translation id="995927048686010764">Clic automatique</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index 63d409571..8cf2ce7 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303">Dodan je uređaj <ph name="DEVICE_NAME" /></translation>
 <translation id="1056775291175587022">Nema mreža</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Dosadno mi je</translation>
 <translation id="1104084341931202936">Prikaz postavki pristupačnosti</translation>
 <translation id="1104621072296271835">Vaši uređaji funkcioniraju još bolje zajedno</translation>
 <translation id="112308213915226829">Automatski sakrij policu</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Očisti sve</translation>
 <translation id="1247372569136754018">Mikrofon (ugrađeni)</translation>
 <translation id="1252999807265626933">Izvor punjenja: <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Kakvo je vrijeme?</translation>
 <translation id="1267032506238418139">Promjena prečaca</translation>
 <translation id="1270290102613614947">Tipkovnica na zaslonu onemogućena je</translation>
 <translation id="1272079795634619415">Zaustavi</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">U višestrukoj prijavi ne možete imati više od <ph name="MULTI_PROFILE_USER_LIMIT" /> računa.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Povezano s jednim uređajem}one{Povezano s # uređajem}few{Povezano s # uređaja}other{Povezano s # uređaja}}</translation>
 <translation id="3236488194889173876">Mobilne mreže nisu dostupne</translation>
+<translation id="3255483164551725916">Što možeš učiniti?</translation>
 <translation id="3294437725009624529">Gost</translation>
 <translation id="332587331255250389">Zamijenite bateriju</translation>
 <translation id="3351879221545518001">Trenutačno emitirate zaslon.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Laserski pokazivač</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Isključeno za jednu aplikaciju}one{Isključeno za # aplikaciju}few{Isključeno za # aplikacije}other{Isključeno za # aplikacija}}</translation>
 <translation id="4072264167173457037">Signal srednje jačine</translation>
+<translation id="4146833061457621061">Pusti glazbu</translation>
 <translation id="4200057768455216496">Pritisnuli ste prečac za usidreno povećalo. Želite li ga uključiti?</translation>
 <translation id="4217571870635786043">Diktat</translation>
 <translation id="4261870227682513959">Prikaz postavki obavijesti. Obavijesti su isključene</translation>
@@ -343,6 +347,7 @@
 <translation id="7037152028959403492">Pritisnuli ste prečac za visoki kontrast. Želite li ga uključiti?</translation>
 <translation id="7066646422045619941">Tu mrežu onemogućio je vaš administrator.</translation>
 <translation id="7067196344162293536">Automatski izmjenjuj</translation>
+<translation id="7068360136237591149">Otvori datoteke</translation>
 <translation id="7076293881109082629">Prijava</translation>
 <translation id="7092922358121866860">Prikaz postavki Noćnog svjetla</translation>
 <translation id="7098389117866926363">USB-C uređaj (lijevi priključak sa stražnje strane)</translation>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">Upozorenje: eksperimentalna značajka</translation>
 <translation id="7846634333498149051">Tipkovnica</translation>
 <translation id="7886277072580235377">Vaša će se internetska sesija izbrisati kada se odjavite. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Pošalji e-poruku</translation>
 <translation id="790040513076446191">rukovati postavkama koje se odnose na privatnost</translation>
 <translation id="7904094684485781019">Administrator ovog računa onemogućio je višestruku prijavu.</translation>
 <translation id="7933084174919150729">Google asistent dostupan je samo za primarni profil.</translation>
@@ -448,6 +454,7 @@
 <translation id="8850991929411075241">Pretraživanje + Esc</translation>
 <translation id="8870509716567206129">Aplikacija ne podržava podijeljeni zaslon.</translation>
 <translation id="8874184842967597500">Niste povezani</translation>
+<translation id="8877788021141246043">Postavi podsjetnik</translation>
 <translation id="8878886163241303700">Produljenje zaslona</translation>
 <translation id="8921624153894383499">Google asistent ne govori taj jezik.</translation>
 <translation id="8938800817013097409">USB-C uređaj (desni priključak sa stražnje strane)</translation>
@@ -471,6 +478,7 @@
 <translation id="9210037371811586452">Izlaz iz načina jedinstvene radne površine</translation>
 <translation id="9215934040295798075">Postavi pozadinu</translation>
 <translation id="923686485342484400">Pritisnite Ctrl, Shift i Q dvaput da biste se odjavili.</translation>
+<translation id="938963181863597773">Što je na mojem kalendaru?</translation>
 <translation id="945522503751344254">Slanje povratnih informacija</translation>
 <translation id="98515147261107953">Pejzaž</translation>
 <translation id="995927048686010764">Automatski klik</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 91d6da5..36ea3eb 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> ditambahkan</translation>
 <translation id="1056775291175587022">Tidak ada jaringan</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Saya bosan</translation>
 <translation id="1104084341931202936">Tampilkan setelan aksesibilitas</translation>
 <translation id="1104621072296271835">Perangkat berfungsi lebih baik jika digunakan bersama</translation>
 <translation id="112308213915226829">Sembunyikan otomatis rak</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Hapus semua</translation>
 <translation id="1247372569136754018">Mikrofon (internal)</translation>
 <translation id="1252999807265626933">Mengisi daya dari <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Laporan cuaca?</translation>
 <translation id="1267032506238418139">Perubahan pintasan</translation>
 <translation id="1270290102613614947">Keyboard di layar dinonaktifkan</translation>
 <translation id="1272079795634619415">Berhenti</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Anda hanya dapat memiliki maksimum <ph name="MULTI_PROFILE_USER_LIMIT" /> akun dalam fitur login multipel.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Tersambung ke satu perangkat}other{Tersambung ke # perangkat}}</translation>
 <translation id="3236488194889173876">Jaringan seluler tidak tersedia</translation>
+<translation id="3255483164551725916">Apa yang dapat Anda lakukan?</translation>
 <translation id="3294437725009624529">Tamu</translation>
 <translation id="332587331255250389">Harap ganti baterai</translation>
 <translation id="3351879221545518001">Anda sedang mentransmisi layar.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Penunjuk laser</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Nonaktif untuk 1 aplikasi}other{Nonaktif untuk # aplikasi}}</translation>
 <translation id="4072264167173457037">Sinyal sedang</translation>
+<translation id="4146833061457621061">Putar musik</translation>
 <translation id="4200057768455216496">Anda menekan pintasan untuk kaca pembesar yang terpasang di dok. Ingin mengaktifkannya?</translation>
 <translation id="4217571870635786043">Dikte</translation>
 <translation id="4261870227682513959">Tampilkan setelan notifikasi. Notifikasi nonaktif.</translation>
@@ -343,6 +347,7 @@
 <translation id="7037152028959403492">Anda menekan pintasan untuk kontras tinggi. Ingin mengaktifkannya?</translation>
 <translation id="7066646422045619941">Jaringan ini dinonaktifkan oleh administrator Anda.</translation>
 <translation id="7067196344162293536">Putar otomatis</translation>
+<translation id="7068360136237591149">Buka file</translation>
 <translation id="7076293881109082629">Sedang masuk</translation>
 <translation id="7092922358121866860">Tampilkan setelan Cahaya Malam</translation>
 <translation id="7098389117866926363">Perangkat USB-C (port belakang sebelah kiri)</translation>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">Peringatan: Fitur eksperimental</translation>
 <translation id="7846634333498149051">Keyboard</translation>
 <translation id="7886277072580235377">Sesi internet Anda akan dihapus saat Anda logout. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Kirim email</translation>
 <translation id="790040513076446191">Memanipulasi setelan yang terkait privasi</translation>
 <translation id="7904094684485781019">Administrator untuk akun ini menonaktifkan fitur masuk banyak akun.</translation>
 <translation id="7933084174919150729">Asisten Google hanya tersedia untuk profil utama.</translation>
@@ -448,6 +454,7 @@
 <translation id="8850991929411075241">Search+Esc</translation>
 <translation id="8870509716567206129">Aplikasi tidak mendukung layar terpisah.</translation>
 <translation id="8874184842967597500">Tidak tersambung</translation>
+<translation id="8877788021141246043">Setel pengingat</translation>
 <translation id="8878886163241303700">Memperluas layar</translation>
 <translation id="8921624153894383499">Asisten Google tidak berbicara dalam bahasa ini.</translation>
 <translation id="8938800817013097409">Perangkat USB-C (port belakang sebelah kanan)</translation>
@@ -471,6 +478,7 @@
 <translation id="9210037371811586452">Keluar dari mode desktop terpadu</translation>
 <translation id="9215934040295798075">Setel wallpaper</translation>
 <translation id="923686485342484400">Tekan Control Shift Q dua kali untuk keluar.</translation>
+<translation id="938963181863597773">Apa saja daftar acara di kalender saya?</translation>
 <translation id="945522503751344254">Kirim masukan</translation>
 <translation id="98515147261107953">Lanskap</translation>
 <translation id="995927048686010764">Autoclick</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index 86ced0f..dc7b9e6 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> aggiunto</translation>
 <translation id="1056775291175587022">Nessuna rete</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Mi annoio</translation>
 <translation id="1104084341931202936">Mostra impostazioni di accessibilità</translation>
 <translation id="1104621072296271835">I tuoi dispositivi funzionano ancora meglio insieme</translation>
 <translation id="112308213915226829">Nascondi automaticamente shelf</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Cancella tutto</translation>
 <translation id="1247372569136754018">Microfono (interno)</translation>
 <translation id="1252999807265626933">In carica da: <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Che tempo fa?</translation>
 <translation id="1267032506238418139">Modifica alla scorciatoia</translation>
 <translation id="1270290102613614947">Tastiera sullo schermo disattivata</translation>
 <translation id="1272079795634619415">Interrompi</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Puoi avere massimo <ph name="MULTI_PROFILE_USER_LIMIT" /> account per l'accesso simultaneo.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Connesso a un dispositivo}other{Connesso a # dispositivi}}</translation>
 <translation id="3236488194889173876">Nessuna rete mobile disponibile</translation>
+<translation id="3255483164551725916">Cosa sai fare?</translation>
 <translation id="3294437725009624529">Ospite</translation>
 <translation id="332587331255250389">Sostituisci la batteria</translation>
 <translation id="3351879221545518001">Al momento stai trasmettendo lo schermo.</translation>
@@ -185,6 +188,7 @@
 <translation id="4017989525502048489">Puntatore laser</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Disattivata per un'app}other{Disattivate per # app}}</translation>
 <translation id="4072264167173457037">Segnale medio</translation>
+<translation id="4146833061457621061">Fammi ascoltare musica</translation>
 <translation id="4200057768455216496">Hai premuto la scorciatoia per la lente d'ingrandimento ancorata. Vuoi attivarla?</translation>
 <translation id="4217571870635786043">Dettatura</translation>
 <translation id="4261870227682513959">Mostra impostazioni di notifica. Le notifiche sono disattivate</translation>
@@ -344,6 +348,7 @@
 <translation id="7037152028959403492">Hai premuto la scorciatoia per l'alto contrasto. Vuoi attivarlo?</translation>
 <translation id="7066646422045619941">Questa rete è stata disattivata dall'amministratore.</translation>
 <translation id="7067196344162293536">Ruota in modo automatico</translation>
+<translation id="7068360136237591149">Apri file</translation>
 <translation id="7076293881109082629">Accesso</translation>
 <translation id="7092922358121866860">Mostra le impostazioni Luminosità notturna</translation>
 <translation id="7098389117866926363">Dispositivo USB-C (porta posteriore sinistra)</translation>
@@ -387,6 +392,7 @@
 <translation id="7842569679327885685">Avviso: funzione sperimentale</translation>
 <translation id="7846634333498149051">Tastiera</translation>
 <translation id="7886277072580235377">La sessione verrà cancellata al momento dell'uscita dall'account. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Invia un'email</translation>
 <translation id="790040513076446191">Modifica delle impostazioni relative alla privacy</translation>
 <translation id="7904094684485781019">L'amministratore di questo account ha bloccato l'accesso simultaneo.</translation>
 <translation id="7933084174919150729">L'Assistente Google è disponibile solo per il profilo principale.</translation>
@@ -449,6 +455,7 @@
 <translation id="8850991929411075241">Tasto di ricerca+ESC</translation>
 <translation id="8870509716567206129">L'app non supporta la modalità Schermo diviso.</translation>
 <translation id="8874184842967597500">Non connessa</translation>
+<translation id="8877788021141246043">Imposta un promemoria</translation>
 <translation id="8878886163241303700">Estensione schermo</translation>
 <translation id="8921624153894383499">L'Assistente Google non parla questa lingua.</translation>
 <translation id="8938800817013097409">Dispositivo USB-C (porta posteriore destra)</translation>
@@ -472,6 +479,7 @@
 <translation id="9210037371811586452">Uscita dalla modalità Desktop unificato</translation>
 <translation id="9215934040295798075">Imposta sfondo</translation>
 <translation id="923686485342484400">Premi due volte Control Maiusc Q per uscire.</translation>
+<translation id="938963181863597773">Cosa è segnato sul mio calendario?</translation>
 <translation id="945522503751344254">Invia feedback</translation>
 <translation id="98515147261107953">Orizzontale</translation>
 <translation id="995927048686010764">Clic automatico</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index 395a26d..e06e36c 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.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,6 +16,7 @@
 <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>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">マルチログインに使用できるのは <ph name="MULTI_PROFILE_USER_LIMIT" /> アカウントまでです。</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{1 台のデバイスと接続されています}other{# 台のデバイスと接続されています}}</translation>
 <translation id="3236488194889173876">利用できるモバイル ネットワークがありません</translation>
+<translation id="3255483164551725916">何ができる?</translation>
 <translation id="3294437725009624529">ゲスト</translation>
 <translation id="332587331255250389">バッテリーを交換してください</translation>
 <translation id="3351879221545518001">現在、画面をキャストしています。</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">レーザー ポインタ</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{1 件のアプリでオフ}other{# 件のアプリでオフ}}</translation>
 <translation id="4072264167173457037">電波: 中程度</translation>
+<translation id="4146833061457621061">音楽を再生して</translation>
 <translation id="4200057768455216496">拡大鏡(ドッキング)のショートカットを押しました。この機能をオンにしますか?</translation>
 <translation id="4217571870635786043">音声入力</translation>
 <translation id="4261870227682513959">通知設定を表示します。通知はオフです</translation>
@@ -343,6 +347,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>
@@ -387,6 +392,7 @@
 <translation id="7842569679327885685">警告: 試験運用版の機能</translation>
 <translation id="7846634333498149051">キーボード</translation>
 <translation id="7886277072580235377">ログアウトするとインターネット セッションは終了します。<ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">メールを送って</translation>
 <translation id="790040513076446191">プライバシー関連設定を操作する</translation>
 <translation id="7904094684485781019">このアカウントの管理者がマルチ ログインを許可していません。</translation>
 <translation id="7933084174919150729">Google アシスタントはメインのプロフィールでのみご利用いただけます。</translation>
@@ -449,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>
@@ -472,6 +479,7 @@
 <translation id="9210037371811586452">デスクトップ統合モードの終了中</translation>
 <translation id="9215934040295798075">壁紙を設定</translation>
 <translation id="923686485342484400">ログアウトするには、Ctrl Shift Q を 2 回押します。</translation>
+<translation id="938963181863597773">カレンダーに予定は入ってる?</translation>
 <translation id="945522503751344254">フィードバックを送信</translation>
 <translation id="98515147261107953">横</translation>
 <translation id="995927048686010764">自動クリック</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index d051f3c0..e430826 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -46,6 +46,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="1841545962859478868">ಸಾಧನದ ನಿರ್ವಾಹಕರು ಕೆಳಗಿನದನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು:</translation>
@@ -122,6 +123,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="DOMAIN" /> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾದ ಸಾರ್ವಜನಿಕ ಸೆಶನ್ <ph name="DISPLAY_NAME" /> ಆಗಿದೆ</translation>
@@ -210,12 +212,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+ಹುಡುಕಾಟ ಅಥವಾ 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>
@@ -231,6 +235,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">VPN / L2TP ತೆರೆಯಿರಿ</translation>
@@ -262,6 +267,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>
@@ -332,6 +338,7 @@
 <translation id="6972754398087986839">ಪ್ರಾರಂಭಗೊಂಡಿದೆ</translation>
 <translation id="6981982820502123353">ಪ್ರವೇಶ</translation>
 <translation id="698231206551913481">ಒಮ್ಮೆ ಈ ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿದಾಗ ಈ ಬಳಕೆದಾರರೊಂದಿಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ ಎಲ್ಲಾ ಫೈಲ್‌ಗಳು ಮತ್ತು ಸ್ಥಳೀಯ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ.</translation>
+<translation id="7007100238996585961">ಮತ್ತೊಂದು ಸಾಧನದಲ್ಲಿ ಉತ್ತರಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="7015766095477679451"><ph name="COME_BACK_TIME" /> ಸಮಯಕ್ಕೆ ಹಿಂತಿರುಗಿ</translation>
 <translation id="7029814467594812963">ಸೆಶನ್‌ನಿಂದ ನಿರ್ಗಮಿಸಿ</translation>
 <translation id="7037152028959403492">ನೀವು ಅಧಿಕ ಕಾಂಟ್ರಾಸ್ಟ್‌ನ ಶಾರ್ಟ್‌ಕಟ್ ಅನ್ನು ಒತ್ತಿದ್ದೀರಿ. ಅದನ್ನು ಆನ್ ಮಾಡಲು ಬಯಸುವಿರಾ?</translation>
@@ -353,6 +360,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">ಐಪಿ ವಿಳಾಸ: <ph name="ADDRESS" /></translation>
@@ -362,6 +370,7 @@
 <translation id="7569509451529460200">ಬ್ರೈಲ್ ಹಾಗೂ ChromeVox ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="7593891976182323525">ಹುಡುಕಾಟ ಅಥವಾ 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>
@@ -377,6 +386,7 @@
 <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="790040513076446191">ಗೌಪ್ಯತೆಗೆ- ಸಂಬಂಧಿಸಿದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಸ್ವಾಧೀನಪಡಿಸಿಕೊಳ್ಳಿ</translation>
 <translation id="7904094684485781019">ಈ ಖಾತೆಗಾಗಿ ನಿರ್ವಾಹಕರು ಬಹುವಿಧದ ಸೈನ್ ಇನ್ ಅನುಮತಿಸಿಲ್ಲ.</translation>
 <translation id="7933084174919150729">ಪ್ರಾಥಮಿಕ ಪ್ರೊಫೈಲ್‌ಗೆ ಮಾತ್ರ Google ಸಹಾಯಕ ಲಭ್ಯವಿದೆ.</translation>
@@ -417,6 +427,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>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index 2dc214f3..41dfe73 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> ditambahkan</translation>
 <translation id="1056775291175587022">Tiada rangkaian</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Saya bosan</translation>
 <translation id="1104084341931202936">Tunjukkan tetapan kebolehaksesan</translation>
 <translation id="1104621072296271835">Peranti anda akan berfungsi lebih baik bersama-sama</translation>
 <translation id="112308213915226829">Autosembunyi rak</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Kosongkan semua</translation>
 <translation id="1247372569136754018">Mikrofon (dalaman)</translation>
 <translation id="1252999807265626933">Mengecas daripada <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Apakah keadaan cuaca?</translation>
 <translation id="1267032506238418139">Perubahan pintasan</translation>
 <translation id="1270290102613614947">Papan kekunci pada skrin dilumpuhkan</translation>
 <translation id="1272079795634619415">Berhenti</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Anda hanya boleh memiliki sehingga <ph name="MULTI_PROFILE_USER_LIMIT" /> akaun dalam log masuk berbilang.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Disambungkan ke peranti}other{Disambungkan ke # peranti}}</translation>
 <translation id="3236488194889173876">Tiada rangkaian mudah alih tersedia</translation>
+<translation id="3255483164551725916">Apakah yang anda boleh lakukan?</translation>
 <translation id="3294437725009624529">Tetamu</translation>
 <translation id="332587331255250389">Sila gantikan bateri</translation>
 <translation id="3351879221545518001">Anda sedang menghantar skrin.</translation>
@@ -185,6 +188,7 @@
 <translation id="4017989525502048489">Penuding laser</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Matikan untuk satu apl}other{Matikan untuk # apl}}</translation>
 <translation id="4072264167173457037">Isyarat sederhana</translation>
+<translation id="4146833061457621061">Mainkan muzik</translation>
 <translation id="4200057768455216496">Anda menekan pintasan untuk penggadang yang didok. Adakah anda ingin menghidupkannya?</translation>
 <translation id="4217571870635786043">Pengimlakan</translation>
 <translation id="4261870227682513959">Tunjukkan tetapan pemberitahuan. Pemberitahuan dimatikan</translation>
@@ -344,6 +348,7 @@
 <translation id="7037152028959403492">Anda menekan pintasan untuk kontras tinggi. Adakah anda ingin menghidupkannya?</translation>
 <translation id="7066646422045619941">Rangkaian ini dilumpuhkan oleh pentadbir anda.</translation>
 <translation id="7067196344162293536">Auto putar</translation>
+<translation id="7068360136237591149">Buka fail</translation>
 <translation id="7076293881109082629">Melog masuk</translation>
 <translation id="7092922358121866860">Tunjukkan tetapan Cahaya Malam</translation>
 <translation id="7098389117866926363">Peranti USB-C (port kiri di belakang)</translation>
@@ -387,6 +392,7 @@
 <translation id="7842569679327885685">Amaran: Ciri percubaan</translation>
 <translation id="7846634333498149051">Papan kekunci</translation>
 <translation id="7886277072580235377">Sesi Internet anda akan dipadam bersih apabila anda log keluar. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Hantar e-mel</translation>
 <translation id="790040513076446191">Manipulasi tetapan yang berkaitan privasi</translation>
 <translation id="7904094684485781019">Pentadbir akaun ini tidak membenarkan berbilang log masuk.</translation>
 <translation id="7933084174919150729">Google Assistant hanya tersedia untuk profil utama.</translation>
@@ -449,6 +455,7 @@
 <translation id="8850991929411075241">Carian+Esc</translation>
 <translation id="8870509716567206129">Apl tidak menyokong skrin pisah.</translation>
 <translation id="8874184842967597500">Tidak bersambung</translation>
+<translation id="8877788021141246043">Tetapkan peringatan</translation>
 <translation id="8878886163241303700">Meluaskan skrin</translation>
 <translation id="8921624153894383499">Google Assistant tidak bertutur dalam bahasa ini.</translation>
 <translation id="8938800817013097409">Peranti USB-C (port kanan di belakang)</translation>
@@ -472,6 +479,7 @@
 <translation id="9210037371811586452">Keluar daripada mod desktop bersatu</translation>
 <translation id="9215934040295798075">Tetapkan kertas dinding</translation>
 <translation id="923686485342484400">Tekan Tekan Shift Q dua kali untuk keluar.</translation>
+<translation id="938963181863597773">Apakah acara dalam kalendar saya?</translation>
 <translation id="945522503751344254">Hantar maklum balas</translation>
 <translation id="98515147261107953">Lanskap</translation>
 <translation id="995927048686010764">Autoklik</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index 8ceb888..8a58cf6 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> toegevoegd</translation>
 <translation id="1056775291175587022">Geen netwerken</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Ik verveel me</translation>
 <translation id="1104084341931202936">Toegankelijkheidsinstellingen weergeven</translation>
 <translation id="1104621072296271835">Je apparaten werken samen nog beter</translation>
 <translation id="112308213915226829">Plank automatisch verbergen</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Alles wissen</translation>
 <translation id="1247372569136754018">Microfoon (intern)</translation>
 <translation id="1252999807265626933">Opladen via <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Wat voor weer is het?</translation>
 <translation id="1267032506238418139">Sneltoets gewijzigd</translation>
 <translation id="1270290102613614947">Schermtoetsenbord uitgeschakeld</translation>
 <translation id="1272079795634619415">Stop</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Je kunt maximaal <ph name="MULTI_PROFILE_USER_LIMIT" /> accounts hebben in Toegang tot meerdere accounts.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Verbonden met een apparaat}other{Verbonden met # apparaten}}</translation>
 <translation id="3236488194889173876">Geen mobiel netwerk beschikbaar</translation>
+<translation id="3255483164551725916">Wat kun je doen?</translation>
 <translation id="3294437725009624529">Gast</translation>
 <translation id="332587331255250389">Vervang de batterij</translation>
 <translation id="3351879221545518001">Je cast momenteel een scherm.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Laserpen</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Uitgeschakeld voor een app}other{Uitgeschakeld voor # apps}}</translation>
 <translation id="4072264167173457037">Normaal signaal</translation>
+<translation id="4146833061457621061">Speel muziek</translation>
 <translation id="4200057768455216496">Je hebt op de sneltoets voor het gedockte vergrootglas gedrukt. Wil je deze functie inschakelen?</translation>
 <translation id="4217571870635786043">Dicteren</translation>
 <translation id="4261870227682513959">Instellingen voor meldingen weergeven. Meldingen zijn uitgeschakeld</translation>
@@ -343,6 +347,7 @@
 <translation id="7037152028959403492">Je hebt op de sneltoets voor hoog contrast gedrukt. Wil je deze functie inschakelen?</translation>
 <translation id="7066646422045619941">Dit netwerk is uitgeschakeld door je beheerder.</translation>
 <translation id="7067196344162293536">Automatisch draaien</translation>
+<translation id="7068360136237591149">Open bestanden</translation>
 <translation id="7076293881109082629">Inloggen</translation>
 <translation id="7092922358121866860">Instellingen voor Nachtverlichting weergeven</translation>
 <translation id="7098389117866926363">USB-C-apparaat (poort links aan de achterkant)</translation>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">Waarschuwing: Experimentele functie</translation>
 <translation id="7846634333498149051">Toetsenbord</translation>
 <translation id="7886277072580235377">Je internetsessie wordt gewist wanneer je uitlogt. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Stuur een e-mail</translation>
 <translation id="790040513076446191">Privacygerelateerde instellingen manipuleren</translation>
 <translation id="7904094684485781019">De beheerder van dit account heeft toegang tot meerdere accounts niet toegestaan.</translation>
 <translation id="7933084174919150729">De Google Assistent is alleen beschikbaar voor het primaire profiel.</translation>
@@ -448,6 +454,7 @@
 <translation id="8850991929411075241">Zoeken+Esc</translation>
 <translation id="8870509716567206129">App biedt geen ondersteuning voor gesplitst scherm.</translation>
 <translation id="8874184842967597500">Niet verbonden</translation>
+<translation id="8877788021141246043">Stel een herinnering in</translation>
 <translation id="8878886163241303700">Uitgebreid scherm</translation>
 <translation id="8921624153894383499">De Google Assistent spreekt deze taal niet.</translation>
 <translation id="8938800817013097409">USB-C-apparaat (poort rechts aan de achterkant)</translation>
@@ -471,6 +478,7 @@
 <translation id="9210037371811586452">Samengestelde desktopmodus wordt gesloten</translation>
 <translation id="9215934040295798075">Achtergrond instellen</translation>
 <translation id="923686485342484400">Druk twee keer op Control+Shift+Q om uit te loggen.</translation>
+<translation id="938963181863597773">Wat staat er in mijn agenda?</translation>
 <translation id="945522503751344254">Feedback verzenden</translation>
 <translation id="98515147261107953">Liggend</translation>
 <translation id="995927048686010764">Automatisch klikken</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index e72fb07..a852365a 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> adicionado</translation>
 <translation id="1056775291175587022">Nenhuma rede encontrada</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Que tédio</translation>
 <translation id="1104084341931202936">Mostrar configurações de acessibilidade</translation>
 <translation id="1104621072296271835">Seus dispositivos funcionam ainda melhor juntos</translation>
 <translation id="112308213915226829">Ocultar estante automaticamente</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Limpar tudo</translation>
 <translation id="1247372569136754018">Microfone (interno)</translation>
 <translation id="1252999807265626933">Carregando a partir de <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Como está o tempo?</translation>
 <translation id="1267032506238418139">Mudança de atalho</translation>
 <translation id="1270290102613614947">Teclado na tela desativado</translation>
 <translation id="1272079795634619415">Parar</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Só é possível ter até <ph name="MULTI_PROFILE_USER_LIMIT" /> contas em login múltiplo.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Conectado a um dispositivo}one{Conectado a # dispositivo}other{Conectado a # dispositivos}}</translation>
 <translation id="3236488194889173876">Nenhuma rede móvel disponível</translation>
+<translation id="3255483164551725916">O que você pode fazer?</translation>
 <translation id="3294437725009624529">Visitante</translation>
 <translation id="332587331255250389">Substitua a bateria</translation>
 <translation id="3351879221545518001">Você está transmitindo a tela.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Apontador laser</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Desativadas para um app}one{Desativadas para # app}other{Desativadas para # apps}}</translation>
 <translation id="4072264167173457037">Sinal médio</translation>
+<translation id="4146833061457621061">Ouvir música</translation>
 <translation id="4200057768455216496">Você pressionou o atalho para a lupa ancorada. Gostaria de ativá-la?</translation>
 <translation id="4217571870635786043">Ditado</translation>
 <translation id="4261870227682513959">Mostrar configurações de notificação. As notificações estão desativadas</translation>
@@ -345,6 +349,7 @@
 <translation id="7037152028959403492">Você pressionou o atalho para o alto contraste. Gostaria de ativá-lo?</translation>
 <translation id="7066646422045619941">Esta rede foi desativada pelo seu administrador.</translation>
 <translation id="7067196344162293536">Rotação automática</translation>
+<translation id="7068360136237591149">Abrir arquivos</translation>
 <translation id="7076293881109082629">Como fazer login</translation>
 <translation id="7092922358121866860">Mostrar configurações de Modo noturno</translation>
 <translation id="7098389117866926363">Dispositivo USB-C (porta traseira da esquerda)</translation>
@@ -388,6 +393,7 @@
 <translation id="7842569679327885685">Aviso: recurso experimental</translation>
 <translation id="7846634333498149051">Teclado</translation>
 <translation id="7886277072580235377">Sua sessão de Internet será limpa quando você sair. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Enviar um e-mail</translation>
 <translation id="790040513076446191">Manipular as configurações relacionadas à privacidade</translation>
 <translation id="7904094684485781019">O administrador desta conta bloqueou o login múltiplo.</translation>
 <translation id="7933084174919150729">O Google Assistente só está disponível para o perfil principal.</translation>
@@ -450,6 +456,7 @@
 <translation id="8850991929411075241">Pesquisa+Esc</translation>
 <translation id="8870509716567206129">O app não é compatível com a divisão de tela.</translation>
 <translation id="8874184842967597500">Não conectado</translation>
+<translation id="8877788021141246043">Definir um lembrete</translation>
 <translation id="8878886163241303700">Tela ampla</translation>
 <translation id="8921624153894383499">O Google Assistente não fala esse idioma.</translation>
 <translation id="8938800817013097409">Dispositivo USB-C (porta traseira da direita)</translation>
@@ -473,6 +480,7 @@
 <translation id="9210037371811586452">Saindo do modo de área de trabalho unificada</translation>
 <translation id="9215934040295798075">Definir plano de fundo</translation>
 <translation id="923686485342484400">Pressione Control+Shift+Q duas vezes para sair.</translation>
+<translation id="938963181863597773">O que tem na minha agenda?</translation>
 <translation id="945522503751344254">Enviar comentários</translation>
 <translation id="98515147261107953">Paisagem</translation>
 <translation id="995927048686010764">Clique automático</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index 3dda3d3..c4409fe 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> adicionado</translation>
 <translation id="1056775291175587022">Nenhuma rede</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Estou aborrecido</translation>
 <translation id="1104084341931202936">Mostrar definições de acessibilidade</translation>
 <translation id="1104621072296271835">Os seus dispositivos funcionam ainda melhor juntos</translation>
 <translation id="112308213915226829">Ocultar prateleira automaticamente</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Limpar tudo</translation>
 <translation id="1247372569136754018">Microfone (interno)</translation>
 <translation id="1252999807265626933">A carregar a partir de <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Como está o tempo?</translation>
 <translation id="1267032506238418139">Alteração do atalho</translation>
 <translation id="1270290102613614947">Teclado no ecrã desativado</translation>
 <translation id="1272079795634619415">Parar</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Apenas pode ter, no máximo, <ph name="MULTI_PROFILE_USER_LIMIT" /> contas no início de sessão integrado.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Ligado a um dispositivo}other{Ligado a # dispositivos}}</translation>
 <translation id="3236488194889173876">Nenhuma rede móvel disponível</translation>
+<translation id="3255483164551725916">O que podes fazer?</translation>
 <translation id="3294437725009624529">Convidado</translation>
 <translation id="332587331255250389">Substitua a bateria</translation>
 <translation id="3351879221545518001">Está a transmitir atualmente o ecrã.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Ponteiro de laser</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Desativado para uma aplicação}other{Desativado para # aplicações}}</translation>
 <translation id="4072264167173457037">Sinal médio</translation>
+<translation id="4146833061457621061">Tocar música</translation>
 <translation id="4200057768455216496">Premiu o atalho da lupa ancorada. Pretende ativá-la?</translation>
 <translation id="4217571870635786043">Ditado</translation>
 <translation id="4261870227682513959">Mostrar definições de notificação. As notificações estão desativadas</translation>
@@ -343,6 +347,7 @@
 <translation id="7037152028959403492">Premiu o atalho de alto contraste. Pretende ativá-lo?</translation>
 <translation id="7066646422045619941">Esta rede foi desativada pelo gestor.</translation>
 <translation id="7067196344162293536">Rotação automática</translation>
+<translation id="7068360136237591149">Abrir ficheiros</translation>
 <translation id="7076293881109082629">Iniciar sessão</translation>
 <translation id="7092922358121866860">Mostrar definições de Luz noturna</translation>
 <translation id="7098389117866926363">Dispositivo USB-C (porta traseira esquerda)</translation>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">Aviso: funcionalidade experimental</translation>
 <translation id="7846634333498149051">Teclado</translation>
 <translation id="7886277072580235377">Quando terminar sessão, a sua sessão de Internet será apagada. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Enviar um email</translation>
 <translation id="790040513076446191">Manipular as definições relacionadas com privacidade</translation>
 <translation id="7904094684485781019">O gestor desta conta removeu a permissão de início de sessão integrado.</translation>
 <translation id="7933084174919150729">O Assistente Google está disponível apenas no perfil principal.</translation>
@@ -448,6 +454,7 @@
 <translation id="8850991929411075241">Pesquisa+Esc</translation>
 <translation id="8870509716567206129">A aplicação não é compatível com o ecrã dividido.</translation>
 <translation id="8874184842967597500">Sem ligação</translation>
+<translation id="8877788021141246043">Definir um lembrete</translation>
 <translation id="8878886163241303700">Ecrã alargado</translation>
 <translation id="8921624153894383499">O Assistente Google não fala este idioma.</translation>
 <translation id="8938800817013097409">Dispositivo USB-C (porta traseira direita)</translation>
@@ -471,6 +478,7 @@
 <translation id="9210037371811586452">A sair do Modo de ambiente de trabalho unificado</translation>
 <translation id="9215934040295798075">Definir imagem de fundo</translation>
 <translation id="923686485342484400">Prima Control Shift Q duas vezes para terminar sessão.</translation>
+<translation id="938963181863597773">O que está no meu calendário?</translation>
 <translation id="945522503751344254">Enviar comentários</translation>
 <translation id="98515147261107953">Horizontal</translation>
 <translation id="995927048686010764">Clique automático</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index a460a01..720ebbe 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.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,6 +16,7 @@
 <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>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Для множественного входа можно использовать не более <ph name="MULTI_PROFILE_USER_LIMIT" /> аккаунтов.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Подключено одно устройство}one{Подключено # устройство}few{Подключено # устройства}many{Подключено # устройств}other{Подключено # устройства}}</translation>
 <translation id="3236488194889173876">Нет доступных мобильных сетей</translation>
+<translation id="3255483164551725916">Что ты умеешь?</translation>
 <translation id="3294437725009624529">Гость</translation>
 <translation id="332587331255250389">Замените батарею в стилусе.</translation>
 <translation id="3351879221545518001">Вы транслируете изображение своего экрана.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Лазерная указка</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Отключить уведомления для 1 приложения}one{Отключить уведомления для # приложения}few{Отключить уведомления для # приложений}many{Отключить уведомления для # приложений}other{Отключить уведомления для # приложения}}</translation>
 <translation id="4072264167173457037">сигнал средней мощности</translation>
+<translation id="4146833061457621061">Включить музыку</translation>
 <translation id="4200057768455216496">Вы нажали сочетание клавиш для закрепленной лупы. Включить ее?</translation>
 <translation id="4217571870635786043">Голосовой ввод</translation>
 <translation id="4261870227682513959">Показать настройки уведомлений. Уведомления отключены.</translation>
@@ -343,6 +347,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>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">Внимание! Экспериментальная функция</translation>
 <translation id="7846634333498149051">Клавиатура</translation>
 <translation id="7886277072580235377">После выхода из аккаунта данные о ваших действиях в Интернете будут удалены. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Отправить письмо</translation>
 <translation id="790040513076446191">Управление настройками конфиденциальности</translation>
 <translation id="7904094684485781019">Администратор этого аккаунта запретил множественный вход</translation>
 <translation id="7933084174919150729">Google Ассистент доступен только в основном профиле</translation>
@@ -448,6 +454,7 @@
 <translation id="8850991929411075241">Клавиша поиска + Esc</translation>
 <translation id="8870509716567206129">Приложение не поддерживает разделение экрана.j</translation>
 <translation id="8874184842967597500">Не подключено</translation>
+<translation id="8877788021141246043">Создать напоминание</translation>
 <translation id="8878886163241303700">Раскрытый экран</translation>
 <translation id="8921624153894383499">Google Ассистент не говорит на этом языке</translation>
 <translation id="8938800817013097409">Устройство USB-C (порт справа на задней панели)</translation>
@@ -471,6 +478,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>
 <translation id="995927048686010764">Автоклик</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index bde17e5..22bb85f 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> har lagts till</translation>
 <translation id="1056775291175587022">Inga nätverk</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Jag har tråkigt</translation>
 <translation id="1104084341931202936">Visa tillgänglighetsinställningar</translation>
 <translation id="1104621072296271835">Dina enheter fungerar ännu bättre tillsammans</translation>
 <translation id="112308213915226829">Dölj hyllan automatiskt</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Ta bort alla</translation>
 <translation id="1247372569136754018">Mikrofon (inbyggd)</translation>
 <translation id="1252999807265626933">Laddar från <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Vad är det för väder?</translation>
 <translation id="1267032506238418139">Kortkommandot har ändrats</translation>
 <translation id="1270290102613614947">Skärmen på tangentbordet har inaktiverats</translation>
 <translation id="1272079795634619415">Stopp</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Du kan högst använda <ph name="MULTI_PROFILE_USER_LIMIT" /> konton för multiinloggning.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Ansluten till en enhet}other{Ansluten till # enheter}}</translation>
 <translation id="3236488194889173876">Det finns inget tillgängligt mobilnätverk</translation>
+<translation id="3255483164551725916">Vad kan du göra?</translation>
 <translation id="3294437725009624529">Gäst</translation>
 <translation id="332587331255250389">Byt batteri</translation>
 <translation id="3351879221545518001">Skärmen castas.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Laserpekare</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Av för en app}other{Av för # appar}}</translation>
 <translation id="4072264167173457037">medelstark signal</translation>
+<translation id="4146833061457621061">Spela upp musik</translation>
 <translation id="4200057768455216496">Du tryckte på kortkommandot för dockad skärmförstoring. Vill du aktivera funktionen?</translation>
 <translation id="4217571870635786043">Diktering</translation>
 <translation id="4261870227682513959">Visa aviseringsinställningar. Aviseringar har inaktiverats</translation>
@@ -343,6 +347,7 @@
 <translation id="7037152028959403492">Du tryckte på kortkommandot för högkontrastläge. Vill du aktivera funktionen?</translation>
 <translation id="7066646422045619941">Det här nätverket har inaktiverats av administratören.</translation>
 <translation id="7067196344162293536">Rotera automatiskt</translation>
+<translation id="7068360136237591149">Öppna filer</translation>
 <translation id="7076293881109082629">Logga in</translation>
 <translation id="7092922358121866860">Visa inställningar för Nattljus</translation>
 <translation id="7098389117866926363">USB-C-enhet (vänstra porten på baksidan)</translation>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">Varning: Experimentfunktion</translation>
 <translation id="7846634333498149051">Tangentbord</translation>
 <translation id="7886277072580235377">Internetsessionen rensas när du loggar ut. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Skicka e-post</translation>
 <translation id="790040513076446191">Ändra sekretessrelaterade inställningar</translation>
 <translation id="7904094684485781019">Administratören för kontot tillåter inte multiinloggning.</translation>
 <translation id="7933084174919150729">Endast den primära profilen har tillgång till Google Assistent.</translation>
@@ -448,6 +454,7 @@
 <translation id="8850991929411075241">Sök+Escape</translation>
 <translation id="8870509716567206129">Appen har inte stöd för delad skärm.</translation>
 <translation id="8874184842967597500">Inte ansluten</translation>
+<translation id="8877788021141246043">Ställ in en påminnelse</translation>
 <translation id="8878886163241303700">Utökad skärm</translation>
 <translation id="8921624153894383499">Google Assistent talar inte det här språket.</translation>
 <translation id="8938800817013097409">USB-C-enhet (högra porten på baksidan)</translation>
@@ -471,6 +478,7 @@
 <translation id="9210037371811586452">Enhetligt skrivbordsläge avslutas</translation>
 <translation id="9215934040295798075">Ange bakgrund</translation>
 <translation id="923686485342484400">Tryck på Control + skift + Q två gånger om du vill logga ut.</translation>
+<translation id="938963181863597773">Vad står det i min kalender?</translation>
 <translation id="945522503751344254">Skicka synpunkter</translation>
 <translation id="98515147261107953">Liggande</translation>
 <translation id="995927048686010764">Autoklick</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index f877500..e3eb6bb 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.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,6 +16,7 @@
 <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>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">คุณมีบัญชีได้สูงสุด <ph name="MULTI_PROFILE_USER_LIMIT" /> บัญชีในการลงชื่อเข้าสู่ระบบพร้อมกันหลายบัญชี</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{เชื่อมต่ออุปกรณ์แล้ว 1 เครื่อง}other{เชื่อมต่ออุปกรณ์แล้ว # เครื่อง}}</translation>
 <translation id="3236488194889173876">ไม่มีเครือข่ายมือถือพร้อมใช้งาน</translation>
+<translation id="3255483164551725916">คุณทำอะไรได้บ้าง</translation>
 <translation id="3294437725009624529">ผู้มาเยือน</translation>
 <translation id="332587331255250389">โปรดเปลี่ยนแบตเตอรี่</translation>
 <translation id="3351879221545518001">คุณกำลังแคสต์หน้าจออยู่</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">ตัวชี้เลเซอร์</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{ปิดไว้สำหรับ 1 แอป}other{ปิดไว้สำหรับ # แอป}}</translation>
 <translation id="4072264167173457037">สัญญาณแรงปานกลาง</translation>
+<translation id="4146833061457621061">ฟังเพลง</translation>
 <translation id="4200057768455216496">คุณกดแป้นพิมพ์ลัดสำหรับแว่นขยายหน้าจอบางส่วน จะเปิดแว่นขยายไหม</translation>
 <translation id="4217571870635786043">การพิมพ์ตามคำบอก</translation>
 <translation id="4261870227682513959">แสดงการตั้งค่าการแจ้งเตือน การแจ้งเตือนปิดอยู่</translation>
@@ -213,7 +217,7 @@
 <translation id="4628757576491864469">อุปกรณ์</translation>
 <translation id="4659419629803378708">เปิดใช้ ChromeVox แล้ว</translation>
 <translation id="4734965478015604180">แนวนอน</translation>
-<translation id="476166673298332917">ผู้ดูแลระบบของอุปกรณ์นี้มีสิทธิ์เข้าถึงกิจกรรมทั้งหมด ซึ่งรวมถึงรหัสผ่านและการสื่อสาร</translation>
+<translation id="476166673298332917">ผู้ดูแลระบบของอุปกรณ์นี้มีสิทธิ์เข้าถึงกิจกรรมทั้งหมด ซึ่งรวมถึงรหัสผ่านและการสื่อสารต่างๆ</translation>
 <translation id="4776917500594043016">รหัสผ่านของ <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="479989351350248267">ค้นหา</translation>
 <translation id="4804818685124855865">ตัดการเชื่อมต่อ</translation>
@@ -344,6 +348,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>
@@ -387,6 +392,7 @@
 <translation id="7842569679327885685">คำเตือน: ฟีเจอร์ทดลอง</translation>
 <translation id="7846634333498149051">แป้นพิมพ์</translation>
 <translation id="7886277072580235377">ระบบจะล้างเซสชันอินเทอร์เน็ตของคุณเมื่อออกจากระบบ <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">ส่งอีเมล</translation>
 <translation id="790040513076446191">จัดการการตั้งค่าที่เกี่ยวข้องกับความเป็นส่วนตัว</translation>
 <translation id="7904094684485781019">ผู้ดูแลระบบของบัญชีนี้ไม่อนุญาตการลงชื่อเข้าสู่ระบบพร้อมกันหลายบัญชี</translation>
 <translation id="7933084174919150729">Google Assistant ใช้งานได้กับโปรไฟล์หลักเท่านั้น</translation>
@@ -449,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 Assistant ยังพูดภาษานี้ไม่ได้</translation>
 <translation id="8938800817013097409">อุปกรณ์ USB-C (พอร์ตด้านหลังขวา)</translation>
@@ -472,6 +479,7 @@
 <translation id="9210037371811586452">กำลังออกจากโหมดเดสก์ท็อปแบบรวมหลายหน้าจอ</translation>
 <translation id="9215934040295798075">ตั้งค่าวอลเปเปอร์</translation>
 <translation id="923686485342484400">กด Control Shift Q 2 ครั้งเพื่อออกจากระบบ</translation>
+<translation id="938963181863597773">มีอะไรในปฏิทินของฉันบ้าง</translation>
 <translation id="945522503751344254">ส่งความคิดเห็น</translation>
 <translation id="98515147261107953">แนวนอน</translation>
 <translation id="995927048686010764">คลิกอัตโนมัติ</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index 506cdfd4..9718a22 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303"><ph name="DEVICE_NAME" /> eklendi</translation>
 <translation id="1056775291175587022">Hücresel ağ yok</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Canım sıkıldı</translation>
 <translation id="1104084341931202936">Erişilebilirlik ayarlarını göster</translation>
 <translation id="1104621072296271835">Cihazlarınız birlikte daha da iyi çalışır</translation>
 <translation id="112308213915226829">Rafı otomatik gizle</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Tümünü temizle</translation>
 <translation id="1247372569136754018">Mikrofon (dahili)</translation>
 <translation id="1252999807265626933"><ph name="POWER_SOURCE" /> güç kaynağından şarj ediliyor</translation>
+<translation id="1255033239764210633">Hava nasıl?</translation>
 <translation id="1267032506238418139">Kısayol değişikliği</translation>
 <translation id="1270290102613614947">Dokunmatik klavye devre dışı</translation>
 <translation id="1272079795634619415">Durdur</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Çoklu oturum açmada en fazla <ph name="MULTI_PROFILE_USER_LIMIT" /> hesabınız olabilir.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Bir cihaza bağlı}other{# cihaza bağlı}}</translation>
 <translation id="3236488194889173876">Kullanılabilir mobil ağ yok</translation>
+<translation id="3255483164551725916">Neler yapabilirsin?</translation>
 <translation id="3294437725009624529">Misafir</translation>
 <translation id="332587331255250389">Lütfen pili değiştirin</translation>
 <translation id="3351879221545518001">Şu anda ekranı yayınlıyorsunuz.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Lazer işaretçi</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Bir uygulama için kapalı}other{# uygulama için kapalı}}</translation>
 <translation id="4072264167173457037">Orta düzeyde sinyal</translation>
+<translation id="4146833061457621061">Müzik çal</translation>
 <translation id="4200057768455216496">Yerleştirilmiş büyüteç kısayoluna bastınız. Bu özelliği açmak istiyor musunuz?</translation>
 <translation id="4217571870635786043">Dikte</translation>
 <translation id="4261870227682513959">Bildirim ayarlarını göster. Bildirimler kapalı</translation>
@@ -344,6 +348,7 @@
 <translation id="7037152028959403492">Yüksek kontrast kısayoluna bastınız. Bu özelliği açmak istiyor musunuz?</translation>
 <translation id="7066646422045619941">Bu ağ, yöneticiniz tarafından devre dışı bırakıldı.</translation>
 <translation id="7067196344162293536">Otomatik döndür</translation>
+<translation id="7068360136237591149">Dosya aç</translation>
 <translation id="7076293881109082629">Oturum açılıyor</translation>
 <translation id="7092922358121866860">Gece Işığı ayarlarını göster</translation>
 <translation id="7098389117866926363">USB-C cihaz (arkadaki sol bağlantı noktası)</translation>
@@ -387,6 +392,7 @@
 <translation id="7842569679327885685">Uyarı: Deneysel özellik</translation>
 <translation id="7846634333498149051">Klavye</translation>
 <translation id="7886277072580235377">Oturumu kapattığınızda internet oturumunuz temizlenecektir. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">E-posta gönder</translation>
 <translation id="790040513076446191">Gizlilikle ilgili ayarları değiştirme</translation>
 <translation id="7904094684485781019">Bu hesabın yöneticisi, çoklu oturum açmayı engelledi.</translation>
 <translation id="7933084174919150729">Google Asistan yalnızca birincil profilde kullanılabilir.</translation>
@@ -449,6 +455,7 @@
 <translation id="8850991929411075241">Ara+Esc</translation>
 <translation id="8870509716567206129">Uygulama bölünmüş ekranı desteklemiyor.</translation>
 <translation id="8874184842967597500">Bağlı değil</translation>
+<translation id="8877788021141246043">Hatırlatıcı oluştur</translation>
 <translation id="8878886163241303700">Genişletilmiş ekran</translation>
 <translation id="8921624153894383499">Google Asistan bu dili konuşmuyor.</translation>
 <translation id="8938800817013097409">USB-C cihaz (arkadaki sağ bağlantı noktası)</translation>
@@ -472,6 +479,7 @@
 <translation id="9210037371811586452">Birleşik masaüstü modundan çıkılıyor</translation>
 <translation id="9215934040295798075">Duvar kağıdını ayarla</translation>
 <translation id="923686485342484400">Oturumu kapatmak için Control ÜstKrktr Q tuşlarına iki defa basın.</translation>
+<translation id="938963181863597773">Takvimimde ne var?</translation>
 <translation id="945522503751344254">Geri bildirim gönder</translation>
 <translation id="98515147261107953">Yatay</translation>
 <translation id="995927048686010764">Otomatik tıkla</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index c6477eaa..62027c8 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.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,6 +16,7 @@
 <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>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Максимальна кількість паралельних входів в обліковий запис: <ph name="MULTI_PROFILE_USER_LIMIT" />.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Під’єднано до пристрою}one{Під’єднано до # пристрою}few{Під’єднано до # пристроїв}many{Під’єднано до # пристроїв}other{Під’єднано до # пристрою}}</translation>
 <translation id="3236488194889173876">Немає мобільних мереж</translation>
+<translation id="3255483164551725916">Що ти можеш?</translation>
 <translation id="3294437725009624529">Гість</translation>
 <translation id="332587331255250389">Замініть акумулятор</translation>
 <translation id="3351879221545518001">Зараз ви транслюєте екран.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Лазерний вказівник</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Вимкнено для додатка}one{Вимкнено для # додатка}few{Вимкнено для # додатків}many{Вимкнено для # додатків}other{Вимкнено для # додатка}}</translation>
 <translation id="4072264167173457037">середній сигнал</translation>
+<translation id="4146833061457621061">Увімкни музику</translation>
 <translation id="4200057768455216496">Ви натиснули комбінацію клавіш для закріпленої лупи. Увімкнути?</translation>
 <translation id="4217571870635786043">Диктування</translation>
 <translation id="4261870227682513959">Показати налаштування сповіщень. Сповіщення вимкнено</translation>
@@ -343,6 +347,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>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">Попередження. Експериментальна функція</translation>
 <translation id="7846634333498149051">Клавіатура</translation>
 <translation id="7886277072580235377">Коли ви вийдете з облікового запису, дані інтернет-сеансу буде стерто. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Надішли електронний лист</translation>
 <translation id="790040513076446191">Керувати налаштуваннями, пов’язаними з конфіденційністю</translation>
 <translation id="7904094684485781019">Адміністратор цього облікового запису заборонив паралельний вхід.</translation>
 <translation id="7933084174919150729">Google Асистент доступний лише в основному профілі.</translation>
@@ -448,6 +454,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>
@@ -471,6 +478,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>
 <translation id="995927048686010764">Автоклік</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index 1ca0309..f878007 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -7,6 +7,7 @@
 <translation id="1037492556044956303">Đã thêm <ph name="DEVICE_NAME" /></translation>
 <translation id="1056775291175587022">Không có mạng</translation>
 <translation id="1059194134494239015"><ph name="DISPLAY_NAME" />: <ph name="RESOLUTION" /></translation>
+<translation id="109942774857561566">Tôi chán quá</translation>
 <translation id="1104084341931202936">Hiển thị các tùy chọn cài đặt hỗ trợ tiếp cận</translation>
 <translation id="1104621072296271835">Các thiết bị của bạn hoạt động hiệu quả hơn khi kết nối với nhau</translation>
 <translation id="112308213915226829">Tự động ẩn giá</translation>
@@ -15,6 +16,7 @@
 <translation id="119944043368869598">Xóa tất cả</translation>
 <translation id="1247372569136754018">Micrô (bên trong)</translation>
 <translation id="1252999807265626933">Đang sạc từ <ph name="POWER_SOURCE" /></translation>
+<translation id="1255033239764210633">Tình hình thời tiết thế nào?</translation>
 <translation id="1267032506238418139">Thay đổi phím tắt</translation>
 <translation id="1270290102613614947">Đã tắt bàn phím ảo</translation>
 <translation id="1272079795634619415">Dừng</translation>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">Bạn chỉ có thể có tối đa <ph name="MULTI_PROFILE_USER_LIMIT" /> tài khoản khi sử dụng tính năng đăng nhập nhiều tài khoản.</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Đã kết nối với một thiết bị}other{Đã kết nối với # thiết bị}}</translation>
 <translation id="3236488194889173876">Không có mạng di động nào</translation>
+<translation id="3255483164551725916">Bạn có thể làm gì?</translation>
 <translation id="3294437725009624529">Khách</translation>
 <translation id="332587331255250389">Vui lòng thay pin</translation>
 <translation id="3351879221545518001">Bạn hiện đang truyền màn hình.</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">Con trỏ laser</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Tắt thông báo của một ứng dụng}other{Tắt thông báo của # ứng dụng}}</translation>
 <translation id="4072264167173457037">Tín hiệu trung bình</translation>
+<translation id="4146833061457621061">Phát nhạc</translation>
 <translation id="4200057768455216496">Bạn đã nhấn phím tắt của tính năng phóng to ở vị trí cố định. Bạn có muốn bật tính năng này không?</translation>
 <translation id="4217571870635786043">Nhập bằng giọng nói</translation>
 <translation id="4261870227682513959">Hiển thị các tùy chọn cài đặt thông báo. Thông báo hiện đang tắt</translation>
@@ -344,6 +348,7 @@
 <translation id="7037152028959403492">Bạn đã nhấn phím tắt để có độ tương phản cao. Bạn có muốn bật chế độ này không?</translation>
 <translation id="7066646422045619941">Mạng này bị quản trị viên của bạn tắt.</translation>
 <translation id="7067196344162293536">Tự động xoay</translation>
+<translation id="7068360136237591149">Mở tệp</translation>
 <translation id="7076293881109082629">Đăng nhập</translation>
 <translation id="7092922358121866860">Hiển thị các tùy chọn cài đặt Chế độ ánh sáng ban đêm</translation>
 <translation id="7098389117866926363">Thiết bị USB-C (cổng bên trái ở phía sau)</translation>
@@ -387,6 +392,7 @@
 <translation id="7842569679327885685">Cảnh báo: Tính năng thử nghiệm</translation>
 <translation id="7846634333498149051">Bàn phím</translation>
 <translation id="7886277072580235377">Phiên hoạt động trên Internet của bạn sẽ bị xóa khi bạn đăng xuất. <ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">Gửi email</translation>
 <translation id="790040513076446191">Thực hiện cài đặt liên quan đến bảo mật</translation>
 <translation id="7904094684485781019">Quản trị viên của tài khoản này đã không cho phép đăng nhập nhiều tài khoản.</translation>
 <translation id="7933084174919150729">Bạn chỉ có thể sử dụng Trợ lý Google cho hồ sơ chính.</translation>
@@ -449,6 +455,7 @@
 <translation id="8850991929411075241">Search+Esc</translation>
 <translation id="8870509716567206129">Ứng dụng không hỗ trợ chế độ chia đôi màn hình.</translation>
 <translation id="8874184842967597500">Chưa kết nối</translation>
+<translation id="8877788021141246043">Đặt lời nhắc</translation>
 <translation id="8878886163241303700">Mở rộng màn hình</translation>
 <translation id="8921624153894383499">Trợ lý Google không hỗ trợ ngôn ngữ này.</translation>
 <translation id="8938800817013097409">Thiết bị USB-C (cổng bên phải ở phía sau)</translation>
@@ -472,6 +479,7 @@
 <translation id="9210037371811586452">Đang thoát chế độ màn hình hợp nhất</translation>
 <translation id="9215934040295798075">Đặt hình nền</translation>
 <translation id="923686485342484400">Nhấn Control Shift Q hai lần để đăng xuất.</translation>
+<translation id="938963181863597773">Trên lịch của tôi có sự kiện gì?</translation>
 <translation id="945522503751344254">Gửi phản hồi</translation>
 <translation id="98515147261107953">Khổ ngang</translation>
 <translation id="995927048686010764">Tự động nhấp</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index 93e679d..d304728 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -46,6 +46,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="1841545962859478868">此设备的管理员可能会监控以下各项:</translation>
@@ -122,6 +123,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+搜索键+D 组合键即可将其停用。</translation>
 <translation id="2999742336789313416">“<ph name="DISPLAY_NAME" />”是由 <ph name="DOMAIN" /> 管理的公用自助终端</translation>
@@ -211,12 +213,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">搜索</translation>
 <translation id="4804818685124855865">断开连接</translation>
 <translation id="4849058404725798627">突出显示键盘焦点所在对象</translation>
 <translation id="4872237917498892622">Alt + 搜索键或 Shift</translation>
 <translation id="4890187583552566966">Google 智能助理已被您的管理员停用。</translation>
+<translation id="4893522937062257019">在锁定屏幕上</translation>
 <translation id="4895488851634969361">电池电量已满。</translation>
 <translation id="490375751687810070">纵向</translation>
 <translation id="4905614135390995787">用于切换高反差模式的快捷键已更改。请使用 <ph name="NEW_SHORTCUT" />,而不是 <ph name="OLD_SHORTCUT" />。</translation>
@@ -232,6 +236,7 @@
 <translation id="523505283826916779">无障碍设置</translation>
 <translation id="5313326810920013265">蓝牙设置</translation>
 <translation id="5331975486040154427">USB-C 设备(左侧后端端口)</translation>
+<translation id="5379115545237091094">尝试次数过多</translation>
 <translation id="5397578532367286026">管理员 (<ph name="MANAGER_EMAIL" />) 可在 chrome.com 上查看该用户的使用情况和历史记录。</translation>
 <translation id="5430931332414098647">即时网络共享</translation>
 <translation id="5431825016875453137">OpenVPN / L2TP</translation>
@@ -263,6 +268,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>
@@ -332,6 +338,7 @@
 <translation id="6972754398087986839">开始使用</translation>
 <translation id="6981982820502123353">无障碍</translation>
 <translation id="698231206551913481">移除该用户后,与其关联的所有文件和本地数据都会被永久删除。</translation>
+<translation id="7007100238996585961">正在通过另一设备答复</translation>
 <translation id="7015766095477679451">您需要等到<ph name="COME_BACK_TIME" /> 才能再次使用此设备。</translation>
 <translation id="7029814467594812963">退出会话</translation>
 <translation id="7037152028959403492">您按下了高对比度的快捷键。要开启这项功能吗?</translation>
@@ -353,6 +360,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>
@@ -362,6 +370,7 @@
 <translation id="7569509451529460200">已启用盲文和 ChromeVox</translation>
 <translation id="7593891976182323525">搜索键或 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>
@@ -377,6 +386,7 @@
 <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="790040513076446191">管理隐私相关设置</translation>
 <translation id="7904094684485781019">此帐号的管理员已停用多帐号登录。</translation>
 <translation id="7933084174919150729">Google 智能助理仅适用于主要个人资料。</translation>
@@ -417,6 +427,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>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index 0af54af..cbf974e 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.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,6 +16,7 @@
 <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>
@@ -141,6 +143,7 @@
 <translation id="3153444934357957346">使用多帳戶登入功能時,一次最多只能登入 <ph name="MULTI_PROFILE_USER_LIMIT" /> 個帳戶。</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{已連線至一部裝置}other{已連線至 # 部裝置}}</translation>
 <translation id="3236488194889173876">沒有可用的行動網路</translation>
+<translation id="3255483164551725916">你會做些什麼?</translation>
 <translation id="3294437725009624529">訪客</translation>
 <translation id="332587331255250389">請更換電池</translation>
 <translation id="3351879221545518001">你目前正在投放畫面。</translation>
@@ -184,6 +187,7 @@
 <translation id="4017989525502048489">雷射筆</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{針對 1 個應用程式關閉}other{針對 # 個應用程式關閉}}</translation>
 <translation id="4072264167173457037">訊號中等</translation>
+<translation id="4146833061457621061">播放音樂</translation>
 <translation id="4200057768455216496">你按下了停駐放大鏡的快速鍵。確定要啟用這項功能嗎?</translation>
 <translation id="4217571870635786043">語音輸入</translation>
 <translation id="4261870227682513959">顯示通知設定。已關閉所有通知</translation>
@@ -343,6 +347,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>
@@ -386,6 +391,7 @@
 <translation id="7842569679327885685">警告:實驗功能</translation>
 <translation id="7846634333498149051">鍵盤</translation>
 <translation id="7886277072580235377">登出帳戶後,系統將清除你的網際網路工作階段。<ph name="LEARN_MORE" /></translation>
+<translation id="788781083998633524">傳送電子郵件</translation>
 <translation id="790040513076446191">操控隱私權相關設定</translation>
 <translation id="7904094684485781019">這個帳戶的管理員已禁止多重登入。</translation>
 <translation id="7933084174919150729">Google 助理僅適用於主要設定檔。</translation>
@@ -448,6 +454,7 @@
 <translation id="8850991929411075241">搜尋鍵 + 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>
@@ -471,6 +478,7 @@
 <translation id="9210037371811586452">退出整合桌面模式</translation>
 <translation id="9215934040295798075">設定桌布</translation>
 <translation id="923686485342484400">按兩下 Ctrl+Shift+Q 鍵即可登出。</translation>
+<translation id="938963181863597773">我的日曆上有什麼活動?</translation>
 <translation id="945522503751344254">提供意見</translation>
 <translation id="98515147261107953">橫向</translation>
 <translation id="995927048686010764">自動點擊</translation>
diff --git a/ash/touch/touch_transform_setter_mus.cc b/ash/touch/touch_transform_setter_mus.cc
deleted file mode 100644
index eacb8330..0000000
--- a/ash/touch/touch_transform_setter_mus.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ash/touch/touch_transform_setter_mus.h"
-
-#include "services/service_manager/public/cpp/connector.h"
-#include "services/ui/public/interfaces/constants.mojom.h"
-#include "ui/events/devices/touch_device_transform.h"
-
-namespace ash {
-
-TouchTransformSetterMus::TouchTransformSetterMus(
-    service_manager::Connector* connector) {
-  if (!connector)
-    return;
-
-  connector->BindInterface(ui::mojom::kServiceName, &touch_device_server_);
-}
-
-TouchTransformSetterMus::~TouchTransformSetterMus() = default;
-
-void TouchTransformSetterMus::ConfigureTouchDevices(
-    const std::vector<ui::TouchDeviceTransform>& transforms) {
-  if (!touch_device_server_)
-    return;  // May be null in tests.
-
-  touch_device_server_->ConfigureTouchDevices(transforms);
-}
-
-}  // namespace ash
diff --git a/ash/touch/touch_transform_setter_mus.h b/ash/touch/touch_transform_setter_mus.h
deleted file mode 100644
index baa3266e..0000000
--- a/ash/touch/touch_transform_setter_mus.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef ASH_TOUCH_TOUCH_TRANSFORM_SETTER_MUS_H_
-#define ASH_TOUCH_TOUCH_TRANSFORM_SETTER_MUS_H_
-
-#include "base/macros.h"
-#include "services/ui/public/interfaces/input_devices/touch_device_server.mojom.h"
-#include "ui/display/manager/touch_transform_setter.h"
-
-namespace service_manager {
-class Connector;
-}
-
-namespace ash {
-
-// display::TouchTransformSetter implementation for mus. Updates are applied
-// by way of ui::mojom::TouchDeviceServer.
-class TouchTransformSetterMus : public display::TouchTransformSetter {
- public:
-  explicit TouchTransformSetterMus(service_manager::Connector* connector);
-  ~TouchTransformSetterMus() override;
-
-  // TouchTransformSetter:
-  void ConfigureTouchDevices(
-      const std::vector<ui::TouchDeviceTransform>& transforms) override;
-
- private:
-  ui::mojom::TouchDeviceServerPtr touch_device_server_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchTransformSetterMus);
-};
-
-}  // namespace ash
-
-#endif  // ASH_TOUCH_TOUCH_TRANSFORM_SETTER_MUS_H_
diff --git a/ash/wm/overview/window_selector_item.cc b/ash/wm/overview/window_selector_item.cc
index 0c2540c..04052f7 100644
--- a/ash/wm/overview/window_selector_item.cc
+++ b/ash/wm/overview/window_selector_item.cc
@@ -736,8 +736,11 @@
 }
 
 gfx::Rect WindowSelectorItem::GetBoundsOfSelectedItem() {
+  gfx::Rect original_bounds = target_bounds();
   ScaleUpSelectedItem(OVERVIEW_ANIMATION_NONE);
-  return transform_window_.GetTransformedBounds();
+  gfx::Rect selected_bounds = transform_window_.GetTransformedBounds();
+  SetBounds(original_bounds, OVERVIEW_ANIMATION_NONE);
+  return selected_bounds;
 }
 
 void WindowSelectorItem::ScaleUpSelectedItem(
diff --git a/ash/wm/overview/window_selector_item.h b/ash/wm/overview/window_selector_item.h
index 9a9ba9f..b473d7d 100644
--- a/ash/wm/overview/window_selector_item.h
+++ b/ash/wm/overview/window_selector_item.h
@@ -157,8 +157,11 @@
   void DisableBackdrop();
   void UpdateBackdropBounds();
 
+  // TODO(minch): Do not actually scale up the item to get the bounds.
+  // http://crbug.com/876567.
   // Returns the bounds of the selected item, which will be scaled up a little
-  // bit and header view will be hidden after being selected.
+  // bit and header view will be hidden after being selected. Note, the item
+  // will be restored back after scaled up.
   gfx::Rect GetBoundsOfSelectedItem();
 
   // Increases the bounds of the dragged item.
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc
index 0173e81..e3fe0c2 100644
--- a/ash/wm/splitview/split_view_controller_unittest.cc
+++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -2497,17 +2497,21 @@
   ASSERT_TRUE(current_grid);
   EXPECT_EQ(1u, current_grid->window_list().size());
 
-  WindowSelectorItem* new_selector_item = current_grid->GetNewSelectorItem();
-  ASSERT_TRUE(new_selector_item);
-  const gfx::Rect new_selector_bounds = new_selector_item->target_bounds();
-  DragWindowTo(resizer.get(), new_selector_bounds.CenterPoint());
+  WindowSelectorItem* selector_item = current_grid->GetNewSelectorItem();
+  ASSERT_TRUE(selector_item);
+  const gfx::Rect item_bounds_during_drag = selector_item->target_bounds();
+  DragWindowTo(resizer.get(), item_bounds_during_drag.CenterPoint());
 
   CompleteDrag(std::move(resizer));
   // |window1| should have been merged into overview.
   EXPECT_EQ(current_grid->window_list().size(), 1u);
   EXPECT_TRUE(window_selector->IsWindowInOverview(window1.get()));
-  // |wiindow1|'s bounds should have been updated to its tablet mode bounds.
+  // |window1|'s bounds should have been updated to its tablet mode bounds.
   EXPECT_EQ(tablet_mode_bounds, window1->bounds());
+  selector_item = current_grid->window_list().front().get();
+  // The new window selector item's bounds should be the same during drag and
+  // after drag.
+  EXPECT_EQ(item_bounds_during_drag, selector_item->target_bounds());
 }
 
 // Tests that a dragged window should have the active window shadow during
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 5be6213..af9f0b4 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -3069,7 +3069,6 @@
       "test/android/javatests/src/org/chromium/base/test/util/ScalableTimeout.java",
       "test/android/javatests/src/org/chromium/base/test/util/SkipCheck.java",
       "test/android/javatests/src/org/chromium/base/test/util/TestFileUtil.java",
-      "test/android/javatests/src/org/chromium/base/test/util/TestThread.java",
       "test/android/javatests/src/org/chromium/base/test/util/TimeoutScale.java",
       "test/android/javatests/src/org/chromium/base/test/util/UserActionTester.java",
       "test/android/javatests/src/org/chromium/base/test/util/UrlUtils.java",
diff --git a/base/test/BUILD.gn b/base/test/BUILD.gn
index 42645bcab..16e2c6e5 100644
--- a/base/test/BUILD.gn
+++ b/base/test/BUILD.gn
@@ -144,8 +144,6 @@
     "test_support_android.h",
     "test_support_ios.h",
     "test_support_ios.mm",
-    "test_ui_thread_android.cc",
-    "test_ui_thread_android.h",
     "thread_test_helper.cc",
     "thread_test_helper.h",
     "trace_event_analyzer.cc",
@@ -402,7 +400,6 @@
     sources = [
       "android/java/src/org/chromium/base/ContentUriTestUtils.java",
       "android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java",
-      "android/java/src/org/chromium/base/TestUiThread.java",
     ]
     jni_package = "base"
   }
diff --git a/base/test/android/java/src/org/chromium/base/TestUiThread.java b/base/test/android/java/src/org/chromium/base/TestUiThread.java
deleted file mode 100644
index 237c0ec..0000000
--- a/base/test/android/java/src/org/chromium/base/TestUiThread.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.base;
-
-import android.os.Looper;
-
-import org.chromium.base.annotations.CalledByNative;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.annotation.concurrent.ThreadSafe;
-
-/**
- * Set up a thread as the Chromium UI Thread, and run its looper. This is is intended for C++ unit
- * tests (e.g. the net unit tests) that don't run with the UI thread as their main looper, but test
- * code that, on Android, uses UI thread events, so need a running UI thread.
- */
-@ThreadSafe
-public class TestUiThread {
-    private static final AtomicBoolean sStarted = new AtomicBoolean(false);
-    private static final String TAG = "cr.TestUiThread";
-
-    @CalledByNative
-    private static void loop() {
-        // @{link ThreadUtils#setUiThread(Looper)} can only be called once in a test run, so do this
-        // once, and leave it running.
-        if (sStarted.getAndSet(true)) return;
-
-        final CountDownLatch startLatch = new CountDownLatch(1);
-        new Thread(new Runnable() {
-
-            @Override
-            public void run() {
-                Looper.prepare();
-                ThreadUtils.setUiThread(Looper.myLooper());
-                startLatch.countDown();
-                Looper.loop();
-            }
-
-        }).start();
-
-        try {
-            startLatch.await();
-        } catch (InterruptedException e) {
-            Log.e(TAG, "Failed to set UI Thread");
-        }
-    }
-}
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/TestThread.java b/base/test/android/javatests/src/org/chromium/base/test/util/TestThread.java
deleted file mode 100644
index 4f629692..0000000
--- a/base/test/android/javatests/src/org/chromium/base/test/util/TestThread.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.base.test.util;
-
-import android.os.Handler;
-import android.os.Looper;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
-/**
- * This class is usefull when writing instrumentation tests that exercise code that posts tasks
- * (to the same thread).
- * Since the test code is run in a single thread, the posted tasks are never executed.
- * The TestThread class lets you run that code on a specific thread synchronously and flush the
- * message loop on that thread.
- *
- * Example of test using this:
- *
- * public void testMyAwesomeClass() {
- *   TestThread testThread = new TestThread();
- *   testThread.startAndWaitForReadyState();
- *
- *   testThread.runOnTestThreadSyncAndProcessPendingTasks(new Runnable() {
- *       @Override
- *       public void run() {
- *           MyAwesomeClass.doStuffAsync();
- *       }
- *   });
- *   // Once we get there we know doStuffAsync has been executed and all the tasks it posted.
- *   assertTrue(MyAwesomeClass.stuffWasDone());
- * }
- *
- * Notes:
- * - this is only for tasks posted to the same thread. Anyway if you were posting to a different
- *   thread, you'd probably need to set that other thread up.
- * - this only supports tasks posted using Handler.post(), it won't work with postDelayed and
- *   postAtTime.
- * - if your test instanciates an object and that object is the one doing the posting of tasks, you
- *   probably want to instanciate it on the test thread as it might create the Handler it posts
- *   tasks to in the constructor.
- */
-
-public class TestThread extends Thread {
-    private final Object mThreadReadyLock;
-    private AtomicBoolean mThreadReady;
-    private Handler mMainThreadHandler;
-    private Handler mTestThreadHandler;
-
-    public TestThread() {
-        mMainThreadHandler = new Handler();
-        // We can't use the AtomicBoolean as the lock or findbugs will freak out...
-        mThreadReadyLock = new Object();
-        mThreadReady = new AtomicBoolean();
-    }
-
-    @Override
-    public void run() {
-        Looper.prepare();
-        mTestThreadHandler = new Handler();
-        mTestThreadHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                synchronized (mThreadReadyLock) {
-                    mThreadReady.set(true);
-                    mThreadReadyLock.notify();
-                }
-            }
-        });
-        Looper.loop();
-    }
-
-    /**
-     * Starts this TestThread and blocks until it's ready to accept calls.
-     */
-    public void startAndWaitForReadyState() {
-        checkOnMainThread();
-        start();
-        synchronized (mThreadReadyLock) {
-            try {
-                // Note the mThreadReady and while are not really needed.
-                // There are there so findbugs don't report warnings.
-                while (!mThreadReady.get()) {
-                    mThreadReadyLock.wait();
-                }
-            } catch (InterruptedException ie) {
-                System.err.println("Error starting TestThread.");
-                ie.printStackTrace();
-            }
-        }
-    }
-
-    /**
-     * Runs the passed Runnable synchronously on the TestThread and returns when all pending
-     * runnables have been excuted.
-     * Should be called from the main thread.
-     */
-    public void runOnTestThreadSyncAndProcessPendingTasks(Runnable r) {
-        checkOnMainThread();
-
-        runOnTestThreadSync(r);
-
-        // Run another task, when it's done it means all pendings tasks have executed.
-        runOnTestThreadSync(null);
-    }
-
-    /**
-     * Runs the passed Runnable on the test thread and blocks until it has finished executing.
-     * Should be called from the main thread.
-     * @param r The runnable to be executed.
-     */
-    public void runOnTestThreadSync(final Runnable r) {
-        checkOnMainThread();
-        final Object lock = new Object();
-        // Task executed is not really needed since we are only on one thread, it is here to appease
-        // findbugs.
-        final AtomicBoolean taskExecuted = new AtomicBoolean();
-        mTestThreadHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                if (r != null) r.run();
-                synchronized (lock) {
-                    taskExecuted.set(true);
-                    lock.notify();
-                }
-            }
-        });
-        synchronized (lock) {
-            try {
-                while (!taskExecuted.get()) {
-                    lock.wait();
-                }
-            } catch (InterruptedException ie) {
-                ie.printStackTrace();
-            }
-        }
-    }
-
-    private void checkOnMainThread() {
-        assert Looper.myLooper() == mMainThreadHandler.getLooper();
-    }
-}
diff --git a/base/test/test_ui_thread_android.cc b/base/test/test_ui_thread_android.cc
deleted file mode 100644
index d19fefaa..0000000
--- a/base/test/test_ui_thread_android.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-#include "base/test/test_ui_thread_android.h"
-
-#include "jni/TestUiThread_jni.h"
-
-namespace base {
-
-void StartTestUiThreadLooper() {
-  Java_TestUiThread_loop(base::android::AttachCurrentThread());
-}
-
-}  // namespace base
diff --git a/base/test/test_ui_thread_android.h b/base/test/test_ui_thread_android.h
deleted file mode 100644
index 233911a..0000000
--- a/base/test/test_ui_thread_android.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_TEST_TEST_UI_THREAD_ANDROID_
-#define BASE_TEST_TEST_UI_THREAD_ANDROID_
-
-#include <jni.h>
-
-namespace base {
-
-// Set up a thread as the Chromium UI Thread, and run its looper. This is is
-// intended for C++ unit tests (e.g. the net unit tests) that don't run with the
-// UI thread as their main looper, but test code that, on Android, uses UI
-// thread events, so need a running UI thread.
-void StartTestUiThreadLooper();
-
-}  // namespace base
-
-#endif  //  BASE_TEST_TEST_UI_THREAD_ANDROID_
diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn
index 523636d..79a6c7e 100644
--- a/build/android/BUILD.gn
+++ b/build/android/BUILD.gn
@@ -71,8 +71,8 @@
 action("cpplib_stripped") {
   _strip_bin = "${android_tool_prefix}strip"
   _soname = "libc++_shared.so"
-  _input_so = "${root_shlib_dir}/lib.unstripped/${_soname}"
-  _output_so = "${root_shlib_dir}/${_soname}"
+  _input_so = "${root_out_dir}/lib.unstripped/${_soname}"
+  _output_so = "${root_out_dir}/${_soname}"
 
   deps = [
     ":cpplib_unstripped",
diff --git a/build/config/android/config.gni b/build/config/android/config.gni
index 875e354..3799dad 100644
--- a/build/config/android/config.gni
+++ b/build/config/android/config.gni
@@ -8,6 +8,7 @@
 # toolchain, this GNI file may be read and processed from within Chrome OS
 # toolchains. Checking |is_android| here would therefore be too restrictive.
 if (is_android || is_chromeos) {
+  import("//build/config/chromecast_build.gni")
   import("//build_overrides/build.gni")
   import("abi.gni")
 
@@ -116,7 +117,11 @@
   # google_play_services_package contains the path where individual client
   # targets (e.g. google_play_services_base_java) are located.
   if (!defined(google_play_services_package)) {
-    google_play_services_package = "//third_party/android_tools"
+    if (is_chromecast && chromecast_branding != "public") {
+      google_play_services_package = "//chromecast/internal/android/prebuilt/google-play-services-first-party"
+    } else {
+      google_play_services_package = "//third_party/android_tools"
+    }
   }
 
   if (!defined(system_webview_apk_target)) {
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index bb79907..45228e8e 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -2272,7 +2272,7 @@
     if (_native_libs_deps != []) {
       if (_use_chromium_linker) {
         _extra_native_libs +=
-            [ "$root_shlib_dir/libchromium_android_linker$shlib_extension" ]
+            [ "$root_out_dir/libchromium_android_linker$shlib_extension" ]
         _extra_native_libs_deps +=
             [ "//base/android/linker:chromium_android_linker" ]
       }
diff --git a/build/config/chromecast_build.gni b/build/config/chromecast_build.gni
index d4869d7a..61870e4a 100644
--- a/build/config/chromecast_build.gni
+++ b/build/config/chromecast_build.gni
@@ -10,6 +10,10 @@
   # Linux and Android.
   is_chromecast = false
 
+  # chromecast_branding is used to include or exclude Google-branded components.
+  # Set it to "public" for a Chromium build.
+  chromecast_branding = "public"
+
   # Set this true for an audio-only Chromecast build.
   is_cast_audio_only = false
 }
diff --git a/build/config/gcc/BUILD.gn b/build/config/gcc/BUILD.gn
index aae7a71..365cbf90 100644
--- a/build/config/gcc/BUILD.gn
+++ b/build/config/gcc/BUILD.gn
@@ -65,11 +65,7 @@
 config("rpath_for_built_shared_libraries") {
   if (!is_android) {
     # Note: Android doesn't support rpath.
-    if (shlib_subdir != ".") {
-      rpath_link = "${shlib_subdir}/"
-    } else {
-      rpath_link = "."
-    }
+    rpath_link = "."
     if (current_toolchain != default_toolchain || gcc_target_rpath == "") {
       ldflags = [
         # Want to pass "\$". GN will re-escape as required for ninja.
@@ -112,9 +108,6 @@
     # relative to the build directory. ${root_out_dir} will be a
     # subdirectory of ${root_build_dir} when cross compiling.
     _rpath_link = rebase_path(root_out_dir, root_build_dir)
-    if (shlib_subdir != ".") {
-      _rpath_link += "/$shlib_subdir"
-    }
     ldflags += [
       "-Wl,-rpath-link=$_rpath_link",
 
diff --git a/build/fuchsia/sdk.sha1 b/build/fuchsia/sdk.sha1
index 9558b01..c600fe09 100644
--- a/build/fuchsia/sdk.sha1
+++ b/build/fuchsia/sdk.sha1
@@ -1 +1 @@
-f5b27e42145cc5d851e9238c478622bd3751e4f8
\ No newline at end of file
+f5fc62d98f6c7e15bcea748bc15ea1868b41839d
\ No newline at end of file
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni
index 09c1059..adadb74 100644
--- a/build/toolchain/gcc_toolchain.gni
+++ b/build/toolchain/gcc_toolchain.gni
@@ -402,9 +402,6 @@
       default_output_extension = default_shlib_extension
 
       default_output_dir = "{{root_out_dir}}"
-      if (shlib_subdir != ".") {
-        default_output_dir += "/$shlib_subdir"
-      }
 
       output_prefix = "lib"
 
@@ -465,9 +462,6 @@
       }
 
       default_output_dir = "{{root_out_dir}}"
-      if (shlib_subdir != ".") {
-        default_output_dir += "/$shlib_subdir"
-      }
 
       output_prefix = "lib"
 
diff --git a/build/toolchain/toolchain.gni b/build/toolchain/toolchain.gni
index 5e31b769..882d77c8 100644
--- a/build/toolchain/toolchain.gni
+++ b/build/toolchain/toolchain.gni
@@ -63,18 +63,6 @@
 assert(!use_xcode_clang || target_os == "ios",
        "Using Xcode's clang is only supported in iOS builds")
 
-# Subdirectory within root_out_dir for shared library files.
-# TODO(agrieve): GYP sets this to "lib" for Linux & Android, but this won't work
-#     in GN until support for loadable_module() is added.
-#     See: https://codereview.chromium.org/1236503002/
-shlib_subdir = "."
-
-# Root out dir for shared library files.
-root_shlib_dir = root_out_dir
-if (shlib_subdir != ".") {
-  root_shlib_dir += "/$shlib_subdir"
-}
-
 # Extension for shared library files (including leading dot).
 if (is_mac || is_ios) {
   shlib_extension = ".dylib"
diff --git a/cc/mojo_embedder/async_layer_tree_frame_sink_unittest.cc b/cc/mojo_embedder/async_layer_tree_frame_sink_unittest.cc
index 70643db..b00ca4c 100644
--- a/cc/mojo_embedder/async_layer_tree_frame_sink_unittest.cc
+++ b/cc/mojo_embedder/async_layer_tree_frame_sink_unittest.cc
@@ -73,8 +73,8 @@
   init_params.local_surface_id_provider =
       std::make_unique<viz::DefaultLocalSurfaceIdProvider>();
   init_params.enable_surface_synchronization = true;
-  AsyncLayerTreeFrameSink layer_tree_frame_sink(std::move(provider), nullptr,
-                                                &init_params);
+  auto layer_tree_frame_sink = std::make_unique<AsyncLayerTreeFrameSink>(
+      std::move(provider), nullptr, &init_params);
 
   base::PlatformThreadId called_thread_id = base::kInvalidThreadId;
   base::RunLoop close_run_loop;
@@ -88,7 +88,7 @@
       };
   bg_thread.task_runner()->PostTask(
       FROM_HERE, base::BindOnce(bind_in_background,
-                                base::Unretained(&layer_tree_frame_sink),
+                                base::Unretained(layer_tree_frame_sink.get()),
                                 base::Unretained(&frame_sink_client)));
   // Closes the pipe, which should trigger calling DidLoseLayerTreeFrameSink()
   // (and quitting the RunLoop). There is no need to wait for BindToClient()
@@ -101,15 +101,16 @@
 
   // DetachFromClient() has to be called on the background thread.
   base::RunLoop detach_run_loop;
-  auto detach_in_background = [](AsyncLayerTreeFrameSink* layer_tree_frame_sink,
-                                 base::RunLoop* detach_run_loop) {
-    layer_tree_frame_sink->DetachFromClient();
-    detach_run_loop->Quit();
-  };
+  auto detach_in_background =
+      [](std::unique_ptr<AsyncLayerTreeFrameSink> layer_tree_frame_sink,
+         base::RunLoop* detach_run_loop) {
+        layer_tree_frame_sink->DetachFromClient();
+        detach_run_loop->Quit();
+      };
   bg_thread.task_runner()->PostTask(
-      FROM_HERE, base::BindOnce(detach_in_background,
-                                base::Unretained(&layer_tree_frame_sink),
-                                base::Unretained(&detach_run_loop)));
+      FROM_HERE,
+      base::BindOnce(detach_in_background, std::move(layer_tree_frame_sink),
+                     base::Unretained(&detach_run_loop)));
   detach_run_loop.Run();
 }
 
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 611ca479a..92305120 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -1898,9 +1898,6 @@
 
   metadata.page_scale_factor = active_tree_->current_page_scale_factor();
   metadata.scrollable_viewport_size = active_tree_->ScrollableViewportSize();
-  metadata.root_layer_size = active_tree_->ScrollableSize();
-  metadata.min_page_scale_factor = active_tree_->min_page_scale_factor();
-  metadata.max_page_scale_factor = active_tree_->max_page_scale_factor();
   metadata.top_controls_height =
       browser_controls_offset_manager_->TopControlsHeight();
   metadata.top_controls_shown_ratio =
@@ -1926,11 +1923,6 @@
     DCHECK_LE(frame_token_infos_.size(), 25u);
   }
 
-  if (const auto* outer_viewport_scroll_node = OuterViewportScrollNode()) {
-    metadata.root_overflow_y_hidden =
-        !outer_viewport_scroll_node->user_scrollable_vertical;
-  }
-
   if (GetDrawMode() == DRAW_MODE_RESOURCELESS_SOFTWARE) {
     metadata.is_resourceless_software_draw_with_scroll_or_animation =
         IsActivelyScrolling() || mutator_host_->NeedsTickAnimations();
@@ -1944,7 +1936,17 @@
   if (last_draw_referenced_surfaces_ != referenced_surfaces)
     last_draw_referenced_surfaces_ = referenced_surfaces;
 
+  metadata.min_page_scale_factor = active_tree_->min_page_scale_factor();
+
 #if defined(OS_ANDROID)
+  metadata.max_page_scale_factor = active_tree_->max_page_scale_factor();
+  metadata.root_layer_size = active_tree_->ScrollableSize();
+
+  if (const auto* outer_viewport_scroll_node = OuterViewportScrollNode()) {
+    metadata.root_overflow_y_hidden =
+        !outer_viewport_scroll_node->user_scrollable_vertical;
+  }
+
   active_tree_->GetViewportSelection(&metadata.selection);
 #endif
 
@@ -1952,8 +1954,10 @@
   if (!inner_viewport_scroll_node)
     return metadata;
 
+#if defined(OS_ANDROID)
   metadata.root_overflow_y_hidden |=
       !inner_viewport_scroll_node->user_scrollable_vertical;
+#endif
 
   // TODO(miletus) : Change the metadata to hold ScrollOffset.
   metadata.root_scroll_offset =
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index d58f6a9f..b05d5c8 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -908,9 +908,11 @@
   const bool resourceless_software_draw = true;
   host_impl_->OnDraw(identity, viewport, resourceless_software_draw, false);
   ASSERT_EQ(fake_layer_tree_frame_sink->num_sent_frames(), 1u);
+#if defined(OS_ANDROID)
   EXPECT_EQ(
       gfx::SizeF(100.f, 100.f),
       fake_layer_tree_frame_sink->last_sent_frame()->metadata.root_layer_size);
+#endif
 }
 
 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) {
@@ -4521,10 +4523,13 @@
     EXPECT_EQ(gfx::Vector2dF(), metadata.root_scroll_offset);
     EXPECT_EQ(1.f, metadata.page_scale_factor);
     EXPECT_EQ(gfx::SizeF(50.f, 50.f), metadata.scrollable_viewport_size);
-    EXPECT_EQ(gfx::SizeF(100.f, 100.f), metadata.root_layer_size);
     EXPECT_EQ(0.5f, metadata.min_page_scale_factor);
+
+#if defined(OS_ANDROID)
     EXPECT_EQ(4.f, metadata.max_page_scale_factor);
+    EXPECT_EQ(gfx::SizeF(100.f, 100.f), metadata.root_layer_size);
     EXPECT_FALSE(metadata.root_overflow_y_hidden);
+#endif
   }
 
   // Scrolling should update metadata immediately.
@@ -4556,7 +4561,9 @@
     host_impl_->active_tree()->BuildPropertyTreesForTesting();
     viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
+#if defined(OS_ANDROID)
     EXPECT_FALSE(metadata.root_overflow_y_hidden);
+#endif
 
     host_impl_->active_tree()
         ->OuterViewportScrollLayer()
@@ -4564,7 +4571,9 @@
         ->user_scrollable_vertical = false;
     host_impl_->active_tree()->BuildPropertyTreesForTesting();
     metadata = host_impl_->MakeCompositorFrameMetadata();
+#if defined(OS_ANDROID)
     EXPECT_TRUE(metadata.root_overflow_y_hidden);
+#endif
   }
 
   // Re-enable scrollability and verify that overflows are no longer hidden.
@@ -4580,7 +4589,9 @@
     host_impl_->active_tree()->BuildPropertyTreesForTesting();
     viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
+#if defined(OS_ANDROID)
     EXPECT_FALSE(metadata.root_overflow_y_hidden);
+#endif
   }
 
   // Root "overflow: hidden" properties should also be reflected on the
@@ -4593,7 +4604,9 @@
     host_impl_->active_tree()->BuildPropertyTreesForTesting();
     viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
+#if defined(OS_ANDROID)
     EXPECT_FALSE(metadata.root_overflow_y_hidden);
+#endif
 
     host_impl_->active_tree()
         ->InnerViewportScrollLayer()
@@ -4601,7 +4614,9 @@
         ->user_scrollable_vertical = false;
     host_impl_->active_tree()->BuildPropertyTreesForTesting();
     metadata = host_impl_->MakeCompositorFrameMetadata();
+#if defined(OS_ANDROID)
     EXPECT_TRUE(metadata.root_overflow_y_hidden);
+#endif
   }
 
   // Page scale should update metadata correctly (shrinking only the viewport).
@@ -4617,9 +4632,12 @@
     EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset);
     EXPECT_EQ(2.f, metadata.page_scale_factor);
     EXPECT_EQ(gfx::SizeF(25.f, 25.f), metadata.scrollable_viewport_size);
-    EXPECT_EQ(gfx::SizeF(100.f, 100.f), metadata.root_layer_size);
     EXPECT_EQ(0.5f, metadata.min_page_scale_factor);
+
+#if defined(OS_ANDROID)
     EXPECT_EQ(4.f, metadata.max_page_scale_factor);
+    EXPECT_EQ(gfx::SizeF(100.f, 100.f), metadata.root_layer_size);
+#endif
   }
 
   // Likewise if set from the main thread.
@@ -4632,9 +4650,12 @@
     EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset);
     EXPECT_EQ(4.f, metadata.page_scale_factor);
     EXPECT_EQ(gfx::SizeF(12.5f, 12.5f), metadata.scrollable_viewport_size);
-    EXPECT_EQ(gfx::SizeF(100.f, 100.f), metadata.root_layer_size);
     EXPECT_EQ(0.5f, metadata.min_page_scale_factor);
+
+#if defined(OS_ANDROID)
     EXPECT_EQ(4.f, metadata.max_page_scale_factor);
+    EXPECT_EQ(gfx::SizeF(100.f, 100.f), metadata.root_layer_size);
+#endif
   }
 }
 
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 76282838..15bd351 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -7946,7 +7946,10 @@
 
     EXPECT_EQ(drawn_viewport_, frame.render_pass_list.back()->output_rect);
     EXPECT_EQ(0.5f, frame.metadata.min_page_scale_factor);
+
+#if defined(OS_ANDROID)
     EXPECT_EQ(4.f, frame.metadata.max_page_scale_factor);
+#endif
 
     EXPECT_EQ(0u, frame.resource_list.size());
     EXPECT_EQ(1u, frame.render_pass_list.size());
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
index 795dd40..535154d 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
@@ -273,8 +273,8 @@
     }
 
     @Override
-    protected void restoreLastScrollPosition() {
-        // This behavior is handled by the Feed library.
+    protected void saveLastScrollPosition() {
+        // This behavior is handled by the StreamLifecycleManager and the Feed library.
     }
 
     @Override
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPageMediator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPageMediator.java
index 348e09ba..ac78178 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPageMediator.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPageMediator.java
@@ -171,7 +171,7 @@
         if (!isScrollViewInitialized()) return 0;
 
         int firstChildTop = mCoordinator.getStream().getChildTopAt(0);
-        return firstChildTop != Stream.POSITION_NOT_KNOWN ? -firstChildTop : 0;
+        return firstChildTop != Stream.POSITION_NOT_KNOWN ? -firstChildTop : Integer.MIN_VALUE;
     }
 
     @Override
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/StreamLifecycleManager.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/StreamLifecycleManager.java
index da6567e..e7b9070 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/StreamLifecycleManager.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/StreamLifecycleManager.java
@@ -5,7 +5,6 @@
 package org.chromium.chrome.browser.feed;
 
 import android.app.Activity;
-import android.os.Bundle;
 import android.support.annotation.IntDef;
 
 import com.google.android.libraries.feed.api.stream.Stream;
@@ -13,9 +12,12 @@
 import org.chromium.base.ActivityState;
 import org.chromium.base.ApplicationStatus;
 import org.chromium.base.VisibleForTesting;
+import org.chromium.chrome.browser.ntp.NewTabPage;
 import org.chromium.chrome.browser.tab.EmptyTabObserver;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabObserver;
+import org.chromium.content_public.browser.NavigationController;
+import org.chromium.content_public.browser.NavigationEntry;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -29,6 +31,9 @@
     @Retention(RetentionPolicy.SOURCE)
     private @interface StreamState {}
 
+    /** Key for the Stream instance state that may be stored in a navigation entry. */
+    private static final String STREAM_SAVED_INSTANCE_STATE_KEY = "StreamSavedInstanceState";
+
     private static final int NOT_SPECIFIED = -1;
     private static final int CREATED = 0;
     private static final int SHOWN = 1;
@@ -86,11 +91,15 @@
             public void onHidden(Tab tab) {
                 hide();
             }
+
+            @Override
+            public void onPageLoadStarted(Tab tab, String url) {
+                saveInstanceState();
+            }
         };
 
         mStreamState = CREATED;
-        // TODO(huayinz): Handle saved instance state.
-        mStream.onCreate((Bundle) null);
+        mStream.onCreate(restoreInstanceState());
         show();
         activate();
 
@@ -166,6 +175,9 @@
 
         deactivate();
         mStreamState = HIDDEN;
+        // Save instance state as the Stream begins to hide. This matches the activity lifecycle
+        // that instance state is saved as the activity begins to stop.
+        saveInstanceState();
         mStream.onHide();
     }
 
@@ -183,6 +195,37 @@
         mStream.onDestroy();
     }
 
+    /** Save the Stream instance state to the navigation entry if necessary. */
+    private void saveInstanceState() {
+        if (mTab.getWebContents() == null) return;
+
+        NavigationController controller = mTab.getWebContents().getNavigationController();
+        int index = controller.getLastCommittedEntryIndex();
+        NavigationEntry entry = controller.getEntryAtIndex(index);
+        if (entry == null) return;
+
+        // At least under test conditions this method may be called initially for the load of the
+        // NTP itself, at which point the last committed entry is not for the NTP yet. This method
+        // will then be called a second time when the user navigates away, at which point the last
+        // committed entry is for the NTP. The extra data must only be set in the latter case.
+        if (!NewTabPage.isNTPUrl(entry.getUrl())) return;
+
+        controller.setEntryExtraData(
+                index, STREAM_SAVED_INSTANCE_STATE_KEY, mStream.getSavedInstanceStateString());
+    }
+
+    /**
+     * @return The Stream instance state saved in navigation entry, or null if it is not previously
+     *         saved.
+     */
+    private String restoreInstanceState() {
+        if (mTab.getWebContents() == null) return null;
+
+        NavigationController controller = mTab.getWebContents().getNavigationController();
+        int index = controller.getLastCommittedEntryIndex();
+        return controller.getEntryExtraData(index, STREAM_SAVED_INSTANCE_STATE_KEY);
+    }
+
     @VisibleForTesting
     TabObserver getTabObserverForTesting() {
         return mTabObserver;
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
index 272bbc4..a3d569f 100644
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -415,6 +415,11 @@
         </activity>
         {% endfor %}
 
+        <activity android:name="org.chromium.chrome.browser.incognito.IncognitoDisclosureActivity"
+          android:theme="@style/FullscreenTransparentActivityTheme"
+          android:exported="false">
+        </activity>
+
         <!-- ChromeTabbedActivity related -->
         <activity android:name="org.chromium.chrome.browser.ChromeTabbedActivity"
             android:theme="@style/TabbedModeTheme"
diff --git a/chrome/android/java/res/layout/incognito_disclosure_dialog_content.xml b/chrome/android/java/res/layout/incognito_disclosure_dialog_content.xml
new file mode 100644
index 0000000..0f4fc38
--- /dev/null
+++ b/chrome/android/java/res/layout/incognito_disclosure_dialog_content.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:padding="25dp"
+    android:orientation="vertical">
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/incognito_disclosure_text"
+        android:textAppearance="@style/BlackBodyDefault"/>
+    <CheckBox
+        android:id="@+id/incognito_disclosure_close_incognito_checkbox"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="15dp"
+        android:layout_marginStart="-5dp"
+        android:text="@string/incognito_disclosure_checkbox_text"
+        android:textAppearance="@style/BlackBodyDefault"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
index 8da1388..55a84f37 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
@@ -29,11 +29,13 @@
 import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider;
 import org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity;
 import org.chromium.chrome.browser.firstrun.FirstRunFlowSequencer;
+import org.chromium.chrome.browser.incognito.IncognitoDisclosureActivity;
 import org.chromium.chrome.browser.instantapps.InstantAppsHandler;
 import org.chromium.chrome.browser.metrics.MediaNotificationUma;
 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
 import org.chromium.chrome.browser.notifications.NotificationPlatformBridge;
 import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
+import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.searchwidget.SearchActivity;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tabmodel.DocumentModeAssassin;
@@ -344,6 +346,16 @@
 
         // Create and fire a launch intent.
         Intent launchIntent = createCustomTabActivityIntent(mActivity, mIntent);
+
+        boolean shouldShowIncognitoDisclosure =
+                CustomTabIntentDataProvider.isValidExternalIncognitoIntent(launchIntent)
+                && Profile.getLastUsedProfile().hasOffTheRecordProfile();
+
+        if (shouldShowIncognitoDisclosure) {
+            IncognitoDisclosureActivity.launch(mActivity, launchIntent);
+            return;
+        }
+
         // Allow disk writes during startActivity() to avoid strict mode violations on some
         // Samsung devices, see https://crbug.com/796548.
         try (StrictModeContext smc = StrictModeContext.allowDiskWrites()) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserSessionDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserSessionDataProvider.java
index e118e76..63056cf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserSessionDataProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserSessionDataProvider.java
@@ -10,11 +10,8 @@
 import android.os.Bundle;
 import android.support.customtabs.CustomTabsIntent;
 import android.support.customtabs.CustomTabsSessionToken;
-import android.text.TextUtils;
 
 import org.chromium.chrome.browser.IntentHandler;
-import org.chromium.chrome.browser.customtabs.CustomTabsConnection;
-import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
 import org.chromium.chrome.browser.util.IntentUtils;
 
 /**
@@ -39,7 +36,6 @@
 
     private final CustomTabsSessionToken mSession;
     private final boolean mIsTrustedIntent;
-    private final boolean mIsVerifiedFirstPartyIntent;
     private final Intent mKeepAliveServiceIntent;
     private Bundle mAnimationBundle;
 
@@ -51,11 +47,6 @@
         mSession = CustomTabsSessionToken.getSessionTokenFromIntent(intent);
         mIsTrustedIntent = IntentHandler.isIntentChromeOrFirstParty(intent);
 
-        String packageNameFromSession =
-                CustomTabsConnection.getInstance().getClientPackageNameForSession(getSession());
-        mIsVerifiedFirstPartyIntent = !TextUtils.isEmpty(packageNameFromSession) &&
-                ExternalAuthUtils.getInstance().isGoogleSigned(packageNameFromSession);
-
         mAnimationBundle = IntentUtils.safeGetBundleExtra(
                 intent, CustomTabsIntent.EXTRA_EXIT_ANIMATION_BUNDLE);
 
@@ -120,13 +111,4 @@
     public boolean isTrustedIntent() {
         return mIsTrustedIntent;
     }
-
-    /**
-     * Checks whether or not the Intent was received from first party app by analyzing
-     * the corresponding session.
-     * If the intent was launched without a session, returns false regardless of source of intent.
-     */
-    public boolean isVerifiedFirstPartyIntent() {
-        return mIsVerifiedFirstPartyIntent;
-    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
index 1b2d447..3dae754 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
@@ -18,6 +18,7 @@
 import android.support.annotation.IntDef;
 import android.support.annotation.Nullable;
 import android.support.customtabs.CustomTabsIntent;
+import android.support.customtabs.CustomTabsSessionToken;
 import android.support.customtabs.TrustedWebUtils;
 import android.text.TextUtils;
 import android.util.Pair;
@@ -35,6 +36,7 @@
 import org.chromium.chrome.browser.ChromeVersionInfo;
 import org.chromium.chrome.browser.IntentHandler;
 import org.chromium.chrome.browser.browserservices.BrowserSessionDataProvider;
+import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
 import org.chromium.chrome.browser.util.ColorUtils;
 import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.chrome.browser.util.IntentUtils;
@@ -190,7 +192,7 @@
                 IntentUtils.safeGetIntExtra(intent, EXTRA_UI_TYPE, CustomTabsUiType.DEFAULT);
         mUiType = verifiedUiType(requestedUiType);
 
-        mIsIncognito = resolveIncognito(intent);
+        mIsIncognito = isIncognitoForPaymentsFlow(intent) || isValidExternalIncognitoIntent(intent);
 
         retrieveCustomButtons(intent, context);
         retrieveToolbarColor(intent, context);
@@ -261,26 +263,37 @@
         }
     }
 
-    private boolean resolveIncognito(Intent intent) {
-        if (!IntentUtils.safeGetBooleanExtra(
-                intent, IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, false)) {
+    private boolean isIncognitoForPaymentsFlow(Intent intent) {
+        return incognitoRequested(intent) && isTrustedIntent() && isOpenedByChrome()
+                && isForPaymentRequest();
+    }
+
+    public static boolean isValidExternalIncognitoIntent(Intent intent) {
+        if (!CommandLine.getInstance().hasSwitch(ChromeSwitches.ENABLE_INCOGNITO_CUSTOM_TABS)) {
             return false;
         }
 
-        boolean isPaymentRequest = isTrustedIntent() && isOpenedByChrome() && isForPaymentRequest();
-
-        if (!CommandLine.getInstance().hasSwitch(ChromeSwitches.ENABLE_INCOGNITO_CUSTOM_TABS)) {
-            // This switch picks either new or old behavior.
-            // The old behavior is to allow incognito custom tabs only for payment requests.
-            return isPaymentRequest;
+        if (!incognitoRequested(intent)) {
+            return false;
         }
 
-        boolean isFromPermittedSource = isVerifiedFirstPartyIntent() ||
-                CommandLine.getInstance().hasSwitch(
-                    ChromeSwitches.ALLOW_INCOGNITO_CUSTOM_TABS_FROM_THIRD_PARTY);
+        return isVerifiedFirstPartyIntent(intent)
+                || CommandLine.getInstance().hasSwitch(
+                           ChromeSwitches.ALLOW_INCOGNITO_CUSTOM_TABS_FROM_THIRD_PARTY);
+    }
 
-        // The new behavior is to also allow incognito custom tabs in first-party apps.
-        return isPaymentRequest || isFromPermittedSource;
+    private static boolean incognitoRequested(Intent intent) {
+        return IntentUtils.safeGetBooleanExtra(
+                intent, IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, false);
+    }
+
+    private static boolean isVerifiedFirstPartyIntent(Intent intent) {
+        CustomTabsSessionToken sessionToken =
+                CustomTabsSessionToken.getSessionTokenFromIntent(intent);
+        String packageNameFromSession =
+                CustomTabsConnection.getInstance().getClientPackageNameForSession(sessionToken);
+        return !TextUtils.isEmpty(packageNameFromSession)
+                && ExternalAuthUtils.getInstance().isGoogleSigned(packageNameFromSession);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
index 5e4b1e3..9fc1116 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
@@ -1663,6 +1663,11 @@
     }
 
     @CalledByNative
+    private void showDownloadManager() {
+        DownloadManagerService.openDownloadsPage(ContextUtils.getApplicationContext());
+    }
+
+    @CalledByNative
     private void openDownloadItem(
             DownloadItem downloadItem, @DownloadMetrics.DownloadOpenSource int source) {
         DownloadInfo downloadInfo = downloadItem.getDownloadInfo();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
index dbc6ebe..a381634 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
@@ -260,8 +260,8 @@
         Context context = getAvailableContext();
         if (context instanceof WebappActivity) {
             WebappActivity webappActivity = (WebappActivity) context;
-            return webappActivity.scopePolicy().applyPolicyForNavigationToUrl(
-                    webappActivity.getWebappInfo(), url);
+            return WebappScopePolicy.applyPolicyForNavigationToUrl(
+                    webappActivity.scopePolicy(), webappActivity.getWebappInfo(), url);
         }
         return WebappScopePolicy.NavigationDirective.NORMAL_BEHAVIOR;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoDisclosureActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoDisclosureActivity.java
new file mode 100644
index 0000000..5135e9eb
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoDisclosureActivity.java
@@ -0,0 +1,117 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.incognito;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.CheckBox;
+
+import org.chromium.base.AsyncTask;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.modaldialog.AppModalPresenter;
+import org.chromium.chrome.browser.modaldialog.ModalDialogManager;
+import org.chromium.chrome.browser.modaldialog.ModalDialogManager.ModalDialogType;
+import org.chromium.chrome.browser.modaldialog.ModalDialogView;
+import org.chromium.chrome.browser.modaldialog.ModalDialogView.ButtonType;
+import org.chromium.chrome.browser.profiles.Profile;
+
+/**
+ * Activity that shows a dialog with a warning before opening an incognito Custom Tab when
+ * incognito tabs are already present.
+ * If user chooses to proceed, opens the custom tab.
+ */
+public class IncognitoDisclosureActivity extends AppCompatActivity {
+    private static final String EXTRA_CUSTOM_TAB_INTENT = "extra_custom_tab_intent";
+
+    /** Launches the activity */
+    public static void launch(Context context, Intent customTabIntent) {
+        Intent intent = new Intent(context, IncognitoDisclosureActivity.class);
+        intent.putExtra(EXTRA_CUSTOM_TAB_INTENT, customTabIntent);
+        context.startActivity(intent);
+    }
+
+    private boolean mCloseIncognitoTabs;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        View contentView =
+                getLayoutInflater().inflate(R.layout.incognito_disclosure_dialog_content, null);
+        CheckBox checkBox =
+                contentView.findViewById(R.id.incognito_disclosure_close_incognito_checkbox);
+        checkBox.setOnCheckedChangeListener((view, isChecked) -> mCloseIncognitoTabs = isChecked);
+
+        ModalDialogView.Params params = new ModalDialogView.Params();
+        params.customView = contentView;
+        params.title = getString(R.string.incognito_disclosure_title);
+        params.positiveButtonText = getString(R.string.ok_got_it);
+        params.negativeButtonText = getString(R.string.cancel);
+
+        ModalDialogView dialog = new ModalDialogView(mDialogController, params);
+
+        new ModalDialogManager(new AppModalPresenter(this), ModalDialogType.APP)
+                .showDialog(dialog, ModalDialogType.APP);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        mOpenCustomTabAfterCleanUpTask.cancel(true);
+    }
+
+    private void openCustomTabActivity() {
+        startActivity(getIntent().getParcelableExtra(EXTRA_CUSTOM_TAB_INTENT));
+        finish();
+    }
+
+    private final ModalDialogView.Controller mDialogController = new ModalDialogView.Controller() {
+        @Override
+        public void onClick(@ButtonType int buttonType) {
+            if (buttonType == ButtonType.NEGATIVE) {
+                finish();
+                return;
+            }
+            if (mCloseIncognitoTabs) {
+                mOpenCustomTabAfterCleanUpTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+            } else {
+                openCustomTabActivity();
+            }
+        }
+
+        @Override
+        public void onCancel() {
+            finish();
+        }
+
+        @Override
+        public void onDismiss() {
+            finish();
+        }
+    };
+
+    private AsyncTask<Void> mOpenCustomTabAfterCleanUpTask = new AsyncTask<Void>() {
+        @Override
+        protected void onPreExecute() {
+            IncognitoUtils.closeAllIncognitoTabs();
+            Profile.getLastUsedProfile().getOffTheRecordProfile().destroyWhenAppropriate();
+        }
+
+        @Override
+        protected Void doInBackground() {
+            IncognitoUtils.deleteIncognitoStateFiles();
+            return null;
+        }
+
+        @Override
+        protected void onPostExecute(Void result) {
+            openCustomTabActivity();
+        }
+    };
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoNotificationService.java b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoNotificationService.java
index 253fbe5..ca6a718 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoNotificationService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoNotificationService.java
@@ -16,7 +16,6 @@
 import android.content.pm.PackageManager;
 import android.os.Build;
 import android.text.TextUtils;
-import android.util.Pair;
 
 import org.chromium.base.ActivityState;
 import org.chromium.base.ApplicationStatus;
@@ -25,14 +24,11 @@
 import org.chromium.base.VisibleForTesting;
 import org.chromium.base.library_loader.LibraryProcessType;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
-import org.chromium.chrome.browser.TabState;
 import org.chromium.chrome.browser.document.ChromeLauncherActivity;
 import org.chromium.chrome.browser.document.DocumentUtils;
 import org.chromium.chrome.browser.profiles.Profile;
-import org.chromium.chrome.browser.tabmodel.TabbedModeTabPersistencePolicy;
 import org.chromium.content_public.browser.BrowserStartupController;
 
-import java.io.File;
 import java.lang.ref.WeakReference;
 import java.util.HashSet;
 import java.util.List;
@@ -64,8 +60,7 @@
     protected void onHandleIntent(Intent intent) {
         ThreadUtils.runOnUiThreadBlocking(IncognitoUtils::closeAllIncognitoTabs);
 
-        boolean clearedIncognito = deleteIncognitoStateFilesInDirectory(
-                TabbedModeTabPersistencePolicy.getOrCreateTabbedModeStateDirectory());
+        boolean clearedIncognito = IncognitoUtils.deleteIncognitoStateFiles();
 
         // If we failed clearing all of the incognito tabs, then do not dismiss the notification.
         if (!clearedIncognito) return;
@@ -164,22 +159,4 @@
         }
         return visibleTaskIds;
     }
-
-    /**
-     * @return Whether deleting all the incognito files was successful.
-     */
-    private boolean deleteIncognitoStateFilesInDirectory(File directory) {
-        File[] allTabStates = directory.listFiles();
-        if (allTabStates == null) return true;
-
-        boolean deletionSuccessful = true;
-        for (int i = 0; i < allTabStates.length; i++) {
-            String fileName = allTabStates[i].getName();
-            Pair<Integer, Boolean> tabInfo = TabState.parseInfoFromFilename(fileName);
-            if (tabInfo == null || !tabInfo.second) continue;
-            deletionSuccessful &= allTabStates[i].delete();
-        }
-        return deletionSuccessful;
-    }
-
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java
index ed7f2d57..28babadb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java
@@ -10,13 +10,17 @@
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.os.Build;
+import android.util.Pair;
 
 import org.chromium.base.ApplicationStatus;
 import org.chromium.base.ContextUtils;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
+import org.chromium.chrome.browser.TabState;
 import org.chromium.chrome.browser.document.DocumentUtils;
 import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.tabmodel.TabbedModeTabPersistencePolicy;
 
+import java.io.File;
 import java.lang.ref.WeakReference;
 import java.util.HashSet;
 import java.util.List;
@@ -104,4 +108,24 @@
             host.closeAllIncognitoTabs();
         }
     }
+
+    /**
+     * Deletes files with saved state of incognito tabs.
+     * @return whether successful.
+     */
+    public static boolean deleteIncognitoStateFiles() {
+        File directory = TabbedModeTabPersistencePolicy.getOrCreateTabbedModeStateDirectory();
+        File[] tabStateFiles = directory.listFiles();
+        if (tabStateFiles == null) return true;
+
+        boolean deletionSuccessful = true;
+        for (File file : tabStateFiles) {
+            Pair<Integer, Boolean> tabInfo = TabState.parseInfoFromFilename(file.getName());
+            boolean isIncognito = tabInfo != null && tabInfo.second;
+            if (isIncognito) {
+                deletionSuccessful &= file.delete();
+            }
+        }
+        return deletionSuccessful;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
index 81e8cbd..5770f02 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
@@ -314,7 +314,7 @@
 
             @Override
             public void onPageLoadStarted(Tab tab, String url) {
-                restoreLastScrollPosition();
+                saveLastScrollPosition();
             }
         };
         mTab.addObserver(mTabObserver);
@@ -349,9 +349,9 @@
     }
 
     /**
-     * Restore the last scroll position stored in the navigation entry (if set).
+     * Save the last scroll position stored in the navigation entry if necessary.
      */
-    protected void restoreLastScrollPosition() {
+    protected void saveLastScrollPosition() {
         int scrollPosition = mNewTabPageView.getScrollPosition();
         if (scrollPosition == RecyclerView.NO_POSITION) return;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/downloads/OfflinePageDownloadBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/downloads/OfflinePageDownloadBridge.java
index 6634f694..409c28c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/downloads/OfflinePageDownloadBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/downloads/OfflinePageDownloadBridge.java
@@ -38,6 +38,7 @@
 import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
 import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.components.offline_items_collection.ContentId;
+import org.chromium.components.offline_items_collection.LaunchLocation;
 import org.chromium.components.offline_items_collection.LegacyHelpers;
 import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.ui.widget.Toast;
@@ -95,7 +96,9 @@
                     boolean openingFromDownloadsHome =
                             ApplicationStatus.getLastTrackedFocusedActivity()
                                     instanceof DownloadActivity;
-                    if (openInCct && openingFromDownloadsHome) {
+                    if (location == LaunchLocation.NET_ERROR_SUGGESTION) {
+                        openItemInCurrentTab(offlineId, params);
+                    } else if (openInCct && openingFromDownloadsHome) {
                         openItemInCct(offlineId, params);
                     } else {
                         openItemInNewTab(offlineId, params);
@@ -104,6 +107,25 @@
     }
 
     /**
+     * Opens the offline page identified by the given offlineId and the LoadUrlParams in the current
+     * tab. If no tab is current, the page is not opened.
+     * TODO(crbug.com/852872): The current tab could change at any time. We should instead pass the
+     *  tab or tab ID into this function to ensure we're using the right tab.
+     */
+    private static void openItemInCurrentTab(long offlineId, LoadUrlParams params) {
+        Activity activity = ApplicationStatus.getLastTrackedFocusedActivity();
+        if (activity == null) return;
+        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(params.getUrl()));
+        setIntentHeaders(params, intent);
+        intent.putExtra(
+                Browser.EXTRA_APPLICATION_ID, activity.getApplicationContext().getPackageName());
+        intent.setPackage(activity.getApplicationContext().getPackageName());
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+        IntentHandler.startActivityForTrustedIntent(intent);
+    }
+
+    /**
      * Opens the offline page identified by the given offlineId and the LoadUrlParams in a new tab.
      */
     private static void openItemInNewTab(long offlineId, LoadUrlParams params) {
@@ -115,6 +137,14 @@
         tabDelegate.createNewTab(asyncParams, TabLaunchType.FROM_CHROME_UI, Tab.INVALID_TAB_ID);
     }
 
+    private static void setIntentHeaders(LoadUrlParams params, Intent intent) {
+        Bundle bundle = new Bundle();
+        for (Map.Entry<String, String> entry : params.getExtraHeaders().entrySet()) {
+            bundle.putString(entry.getKey(), entry.getValue());
+        }
+        intent.putExtra(Browser.EXTRA_HEADERS, bundle);
+    }
+
     /**
      * Opens the offline page identified by the given offlineId and the LoadUrlParams in a CCT.
      */
@@ -143,11 +173,7 @@
         IntentHandler.addTrustedIntentExtras(intent);
         if (!(context instanceof Activity)) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 
-        Bundle bundle = new Bundle();
-        for (Map.Entry<String, String> entry : params.getExtraHeaders().entrySet()) {
-            bundle.putString(entry.getKey(), entry.getValue());
-        }
-        intent.putExtra(Browser.EXTRA_HEADERS, bundle);
+        setIntentHeaders(params, intent);
 
         context.startActivity(intent);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BandwidthType.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BandwidthType.java
index ef6eb195..4b8d6f4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BandwidthType.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BandwidthType.java
@@ -4,31 +4,34 @@
 
 package org.chromium.chrome.browser.preferences.privacy;
 
+import android.support.annotation.IntDef;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
  * Bandwidth options available based on network.
  */
-public enum BandwidthType {
-
-    // Still using "prerender" in the strings for historical reasons: we don't want to break
-    // existing users' settings.
-    NEVER_PRERENDER      ("never_prefetch"),
-    PRERENDER_ON_WIFI    ("prefetch_on_wifi"),
-    ALWAYS_PRERENDER     ("always_prefetch");
-
-    public static final BandwidthType DEFAULT = PRERENDER_ON_WIFI;
-
-    private final String mTitle;
-
-    BandwidthType(String title) {
-        mTitle = title;
+public class BandwidthType {
+    @IntDef({Type.NEVER_PRERENDER, Type.PRERENDER_ON_WIFI, Type.ALWAYS_PRERENDER})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Type {
+        // Values are numbered from 0 and can't have gaps.
+        int NEVER_PRERENDER = 0;
+        int PRERENDER_ON_WIFI = 1; // Default option.
+        int ALWAYS_PRERENDER = 2;
+        int NUM_ENTRIES = 3;
     }
 
+    private final static String[] TITLES = {
+            "never_prefetch", "prefetch_on_wifi", "always_prefetch"};
+
     /**
      * Returns the title of the bandwidthType.
      * @return title
      */
-    public String title() {
-        return mTitle;
+    public static String title(@Type int type) {
+        return TITLES[type];
     }
 
     /**
@@ -36,11 +39,11 @@
      * @param title
      * @return BandwidthType
      */
-    public static BandwidthType getBandwidthFromTitle(String title) {
-        for (BandwidthType b : BandwidthType.values()) {
-            if (b.mTitle.equals(title)) return b;
+    public static @BandwidthType.Type int getBandwidthFromTitle(String title) {
+        for (@BandwidthType.Type int i = Type.NEVER_PRERENDER; i < Type.NUM_ENTRIES; i++) {
+            if (TITLES[i].equals(title)) return i;
         }
         assert false;
-        return DEFAULT;
+        return Type.PRERENDER_ON_WIFI;
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManager.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManager.java
index 1189e5a..bbfa934 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManager.java
@@ -178,7 +178,8 @@
         // Migrate if the old preferences are at their default values.
         // (Note that for PREF_BANDWIDTH*, if the setting is default, then there is no way to tell
         // whether the user has set it.)
-        final String prefBandwidthDefault = BandwidthType.PRERENDER_ON_WIFI.title();
+        final String prefBandwidthDefault =
+                BandwidthType.title(BandwidthType.Type.PRERENDER_ON_WIFI);
         final String prefBandwidth =
                 mSharedPreferences.getString(PREF_BANDWIDTH_OLD, prefBandwidthDefault);
         boolean prefBandwidthNoCellularDefault = true;
@@ -191,12 +192,13 @@
             // Observe PREF_BANDWIDTH on mobile network capable devices.
             if (isMobileNetworkCapable()) {
                 if (mSharedPreferences.contains(PREF_BANDWIDTH_OLD)) {
-                    BandwidthType prefetchBandwidthTypePref = BandwidthType.getBandwidthFromTitle(
-                            prefBandwidth);
-                    if (BandwidthType.NEVER_PRERENDER.equals(prefetchBandwidthTypePref)) {
+                    @BandwidthType.Type
+                    int prefetchBandwidthTypePref =
+                            BandwidthType.getBandwidthFromTitle(prefBandwidth);
+                    if (BandwidthType.Type.NEVER_PRERENDER == prefetchBandwidthTypePref) {
                         newValue = false;
-                    } else if (BandwidthType.PRERENDER_ON_WIFI.equals(prefetchBandwidthTypePref)
-                            || BandwidthType.ALWAYS_PRERENDER.equals(prefetchBandwidthTypePref)) {
+                    } else if (BandwidthType.Type.PRERENDER_ON_WIFI == prefetchBandwidthTypePref
+                            || BandwidthType.Type.ALWAYS_PRERENDER == prefetchBandwidthTypePref) {
                         newValue = true;
                     }
                 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
index 8676ed7..c0e53ca 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
@@ -723,7 +723,7 @@
 
                     updateToolbarCloseButtonVisibility();
 
-                    if (!scopePolicy().isUrlInScope(mWebappInfo, url)) {
+                    if (!WebappScopePolicy.isUrlInScope(scopePolicy(), mWebappInfo, url)) {
                         // Briefly show the toolbar for off-scope navigations.
                         getFullscreenManager()
                                 .getBrowserVisibilityDelegate()
@@ -785,8 +785,8 @@
         };
     }
 
-    public WebappScopePolicy scopePolicy() {
-        return isVerified() ? WebappScopePolicy.STRICT : WebappScopePolicy.LEGACY;
+    public @WebappScopePolicy.Type int scopePolicy() {
+        return isVerified() ? WebappScopePolicy.Type.STRICT : WebappScopePolicy.Type.LEGACY;
     }
 
     /**
@@ -850,8 +850,8 @@
         final int lastIndex = nc.getLastCommittedEntryIndex();
         int index = lastIndex;
         while (index > 0
-                && !scopePolicy().isUrlInScope(
-                           getWebappInfo(), nc.getEntryAtIndex(index).getUrl())) {
+                && !WebappScopePolicy.isUrlInScope(
+                           scopePolicy(), getWebappInfo(), nc.getEntryAtIndex(index).getUrl())) {
             index--;
         }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappBrowserControlsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappBrowserControlsDelegate.java
index 0753652..7e8c64c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappBrowserControlsDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappBrowserControlsDelegate.java
@@ -47,8 +47,8 @@
      * @param twaVerificationFailed Whether a verification attempt for TWA to client has failed.
      * @return Whether the browser controls should be shown for {@code url}.
      */
-    static boolean shouldShowBrowserControls(WebappScopePolicy scopePolicy, WebappInfo info,
-            String url, int securityLevel, boolean twaVerificationFailed) {
+    static boolean shouldShowBrowserControls(@WebappScopePolicy.Type int scopePolicy,
+            WebappInfo info, String url, int securityLevel, boolean twaVerificationFailed) {
         // Do not show browser controls when URL is not ready yet.
         if (TextUtils.isEmpty(url)) return false;
 
@@ -82,8 +82,8 @@
      * {@code url}.
      */
     private static boolean shouldShowBrowserControlsForUrl(
-            WebappScopePolicy scopePolicy, WebappInfo webappInfo, String url) {
-        return !scopePolicy.isUrlInScope(webappInfo, url);
+            @WebappScopePolicy.Type int scopePolicy, WebappInfo webappInfo, String url) {
+        return !WebappScopePolicy.isUrlInScope(scopePolicy, webappInfo, url);
     }
 
     private static boolean shouldShowBrowserControlsForSecurityLevel(int securityLevel) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappScopePolicy.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappScopePolicy.java
index 9e91421..0c69f72 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappScopePolicy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappScopePolicy.java
@@ -13,23 +13,19 @@
 /**
  * Defines which URLs are inside a web app scope as well as what to do when user navigates to them.
  */
-public enum WebappScopePolicy {
-    LEGACY {
-        @Override
-        public boolean isUrlInScope(WebappInfo info, String url) {
-            return UrlUtilities.sameDomainOrHost(info.uri().toString(), url, true);
-        }
-    },
-    STRICT {
-        @Override
-        public boolean isUrlInScope(WebappInfo info, String url) {
-            return UrlUtilities.isUrlWithinScope(url, info.scopeUri().toString());
-        }
-    };
-
+public class WebappScopePolicy {
+    @IntDef({Type.LEGACY, Type.STRICT})
     @Retention(RetentionPolicy.SOURCE)
+    public @interface Type {
+        // Values should be numerated from 0 and can't have gaps.
+        int LEGACY = 0;
+        int STRICT = 1;
+        int NUM_ENTRIES = 2;
+    }
+
     @IntDef({NavigationDirective.NORMAL_BEHAVIOR,
             NavigationDirective.IGNORE_EXTERNAL_INTENT_REQUESTS})
+    @Retention(RetentionPolicy.SOURCE)
     public @interface NavigationDirective {
         // No special handling.
         int NORMAL_BEHAVIOR = 0;
@@ -41,11 +37,22 @@
      * @return {@code true} if given {@code url} is in scope of a web app as defined by its
      *         {@code WebappInfo}, {@code false} otherwise.
      */
-    abstract boolean isUrlInScope(WebappInfo info, String url);
+    public static boolean isUrlInScope(@Type int type, WebappInfo info, String url) {
+        switch (type) {
+            case Type.LEGACY:
+                return UrlUtilities.sameDomainOrHost(info.uri().toString(), url, true);
+            case Type.STRICT:
+                return UrlUtilities.isUrlWithinScope(url, info.scopeUri().toString());
+            default:
+                assert false;
+                return false;
+        }
+    }
 
     /** Applies the scope policy for navigation to {@link url}. */
-    public @NavigationDirective int applyPolicyForNavigationToUrl(WebappInfo info, String url) {
-        if (isUrlInScope(info, url)) return NavigationDirective.IGNORE_EXTERNAL_INTENT_REQUESTS;
-        return NavigationDirective.NORMAL_BEHAVIOR;
+    public static @NavigationDirective int applyPolicyForNavigationToUrl(
+            @Type int type, WebappInfo info, String url) {
+        return isUrlInScope(type, info, url) ? NavigationDirective.IGNORE_EXTERNAL_INTENT_REQUESTS
+                                             : NavigationDirective.NORMAL_BEHAVIOR;
     }
 }
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
index d1c134c..4b47d3d 100644
--- a/chrome/android/java/strings/android_chrome_strings.grd
+++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -3729,6 +3729,18 @@
       <message name="IDS_NEAR_OOM_REDUCTION_DECLINE" desc="The text of the button letting the user decline the browser's intervention, so that the page can be reloaded.">
          Show original
       </message>
+
+      <!-- Incognito disclosure dialog -->
+      <message name="IDS_INCOGNITO_DISCLOSURE_TITLE" desc="Title of incognito disclosure dialog." translateable="false">
+         Warning
+      </message>
+      <message name="IDS_INCOGNITO_DISCLOSURE_TEXT" desc="Text for incognito disclosure dialog." translateable="false">
+         You are about to open an Incognito Custom Tab, while having other incognito tabs active.\n\nIncognito Custom Tabs share the same profile, so you risk giving access to your Incognito data.
+      </message>
+      <message name="IDS_INCOGNITO_DISCLOSURE_CHECKBOX_TEXT" desc="Text for checkbox inviting to close incognito tabs in incognito disclosure dialog." translateable="false">
+         Close other incognito tabs
+      </message>
+
     </messages>
   </release>
 </grit>
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 3a8b27a..ab90490d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">ይበልጥ ፈጣን ለሆነ አሰሳ እና ፍለጋ ገጾችን ቅድሚያ ይጫኑ</translation>
 <translation id="79859296434321399">የትክክለኛ እውነታ ይዘትን ለማየት ARCore ይጫኑ</translation>
 <translation id="7987073022710626672">የChrome አገልግሎት ውል</translation>
+<translation id="7987764905897278458">ተጨማሪ Google ዘመናዊ ነገሮችን ያግኙ</translation>
 <translation id="7998918019931843664">የተዘጋውን ትር ዳግም ይክፈቱ</translation>
 <translation id="7999064672810608036">እርግጠኛ ነዎት ለዚህ ጣቢያ ኩኪዎችንም ጨምሮ ሁሉንም አካባቢያዊ ውሂብ ማጽዳት እና ሁሉም ፍቃዶችን ዳግም ማስጀመር ይፈልጋሉ?</translation>
 <translation id="8004582292198964060">አሳሽ</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 724b556..0a25cc87 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -876,6 +876,7 @@
 <translation id="7981313251711023384">التحميل المُسبق للصفحات للحصول على أداء أسرع أثناء التصفّح والبحث</translation>
 <translation id="79859296434321399">‏لعرض محتوى الواقع المُعزَّز، يُرجى تثبيت ARCore</translation>
 <translation id="7987073022710626672">‏بنود خدمة Chrome</translation>
+<translation id="7987764905897278458">‏الحصول على مزيد من ميزات Google الذكية</translation>
 <translation id="7998918019931843664">إعادة فتح علامة التبويب المغلقة</translation>
 <translation id="7999064672810608036">هل أنت متأكد أنك تريد مسح كل البيانات المحلية، بما في ذلك ملفات تعريف الارتباط، وإعادة ضبط كافة الأذونات لموقع الويب هذا؟</translation>
 <translation id="8004582292198964060">المتصفّح</translation>
@@ -963,6 +964,7 @@
 <translation id="8664979001105139458">اسم الملف موجود</translation>
 <translation id="8676374126336081632">محو الإرسال</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{مستوى قوة الإشارة: شريط واحد (#)}zero{مستوى قوة الإشارة: # شريط}two{مستوى قوة الإشارة: شريطان (#)}few{مستوى قوة الإشارة: # أشرطة}many{مستوى قوة الإشارة: # شريطًا}other{مستوى قوة الإشارة: # شريط}}</translation>
+<translation id="868929229000858085">البحث في جهات الاتصال</translation>
 <translation id="869891660844655955">تاريخ انتهاء الصلاحية</translation>
 <translation id="8719023831149562936">تعذر إرسال علامة التبويب الحالية باستخدام الشعاع</translation>
 <translation id="8725066075913043281">أعد المحاولة</translation>
@@ -997,6 +999,7 @@
 <translation id="8986494364107987395">‏إرسال إحصائيات الاستخدام وتقارير الأعطال إلى Google تلقائيًا</translation>
 <translation id="8993760627012879038">فتح علامة تبويب جديدة في وضع التصفّح المتخفّي</translation>
 <translation id="8998729206196772491">‏يتم تسجيل دخولك باستخدام حساب تتم إدارته من خلال <ph name="MANAGED_DOMAIN" /> ومنح مشرفه الحق في التحكم في بياناتك على Chrome. سيؤدي ذلك إلى جعل بياناتك مرتبطة دائمًا بهذا الحساب. كما سيؤدي الخروج من Chrome إلى حذف بياناتك من هذا الجهاز، ولكن ستظل هذه البيانات مخزَّنة على حسابك في Google.</translation>
+<translation id="9018881455348618200">زر البحث</translation>
 <translation id="9019902583201351841">يديره والداك</translation>
 <translation id="9040142327097499898">الإشعارات مسموح بها. وتحديد الموقع الجغرافي متوقف لهذا الجهاز.</translation>
 <translation id="9050666287014529139">عبارة المرور</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 5f67eab4..3fd24eb 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -876,6 +876,7 @@
 <translation id="7981313251711023384">Предварително зареждане на страниците с цел по-бързо сърфиране и търсене</translation>
 <translation id="79859296434321399">За да гледате съдържание с обогатена реалност, инсталирайте ARCore</translation>
 <translation id="7987073022710626672">Общи условия на Chrome</translation>
+<translation id="7987764905897278458">Възползвайте се от още интелигентни функции на Google</translation>
 <translation id="7998918019931843664">Повторно отваряне на затворения раздел</translation>
 <translation id="7999064672810608036">Наистина ли искате да изчистите всички локални данни, включително „бисквитките“, и да нулирате всички разрешения за този уебсайт?</translation>
 <translation id="8004582292198964060">Браузър</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 c6c3caa..f96ea919 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -761,7 +761,7 @@
 <translation id="7016516562562142042">Es permet al motor de cerca actual</translation>
 <translation id="7021515813996758557"><ph name="FILE_NAME" /> s'ha baixat</translation>
 <translation id="7022756207310403729">Obre al navegador</translation>
-<translation id="702463548815491781">Es recomana quan els serveis TalkBack o l'accés amb interruptors estan activats</translation>
+<translation id="702463548815491781">Es recomana quan TalkBack o l'accés amb interruptors estan activats</translation>
 <translation id="7029809446516969842">Contrasenyes</translation>
 <translation id="7031882061095297553">Sincronitza amb</translation>
 <translation id="7032663816368481562">En tocar Més contingut com aquest <ph name="ICON" /> a la barra d'adreces, es mostren enllaços ràpids a pàgines relacionades. Els URL de les pàgines que visites s'envien a Google.</translation>
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Carrega les pàgines prèviament per poder-hi navegar i fer cerques més de pressa</translation>
 <translation id="79859296434321399">Per veure contingut en realitat augmentada, instal·la ARCore</translation>
 <translation id="7987073022710626672">Condicions del servei de Chrome</translation>
+<translation id="7987764905897278458">Gaudeix de més eines intel·ligents de Google</translation>
 <translation id="7998918019931843664">Torna a obrir la pestanya tancada</translation>
 <translation id="7999064672810608036">Confirmes que vols esborrar d'aquest lloc web totes les dades locals, incloses les galetes, i restablir-ne tots els permisos?</translation>
 <translation id="8004582292198964060">Navegador</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 f0c45cb1..fa21bdd 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Předběžně načítat stránky pro rychlejší procházení a vyhledávání</translation>
 <translation id="79859296434321399">Chcete-li zobrazit obsah pro rozšířenou realitu, nainstalujte ARCore</translation>
 <translation id="7987073022710626672">Smluvní podmínky Chrome</translation>
+<translation id="7987764905897278458">Získejte více chytrých funkcí Google</translation>
 <translation id="7998918019931843664">Znovu otevřít zavřenou kartu</translation>
 <translation id="7999064672810608036">Opravdu chcete vymazat všechna místní data tohoto webu, včetně souborů cookie, a resetovat všechna jeho oprávnění?</translation>
 <translation id="8004582292198964060">Prohlížeč</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 737f3bc..cd0b1e4 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Forudindlæs sider, så du kan browse og søge hurtigere</translation>
 <translation id="79859296434321399">Installer ARCore for at se augmented reality-indhold</translation>
 <translation id="7987073022710626672">Chromes servicevilkår</translation>
+<translation id="7987764905897278458">Få flere af Googles smarte funktioner</translation>
 <translation id="7998918019931843664">Åbn lukket fane igen</translation>
 <translation id="7999064672810608036">Er du sikker på, at du vil slette alle lokale data, herunder cookies, og nulstille alle tilladelser for dette website?</translation>
 <translation id="8004582292198964060">Browser</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Filnavnet findes allerede</translation>
 <translation id="8676374126336081632">Ryd indtastning</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Signalstyrkeniveau: # søjle}one{Signalstyrkeniveau: # søjle}other{Signalstyrkeniveau: # søjler}}</translation>
+<translation id="868929229000858085">Søg blandt dine kontaktpersoner</translation>
 <translation id="869891660844655955">Udløbsdato</translation>
 <translation id="8719023831149562936">Den aktuelle fane kan ikke overføres</translation>
 <translation id="8725066075913043281">Forsøg igen</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Send automatisk brugsstatistikker og nedbrudsrapporter til Google</translation>
 <translation id="8993760627012879038">Åbn en ny fane i inkognitotilstand</translation>
 <translation id="8998729206196772491">Du er ved at logge ind med en konto, der administreres af <ph name="MANAGED_DOMAIN" />, hvilket giver administratoren kontrol over dine Chrome-data. Dine data tilknyttes denne konto permanent. Hvis du logger ud af Chrome, slettes dine data fra denne enhed, men de forbliver gemt på din Google-konto.</translation>
+<translation id="9018881455348618200">Søgeknap</translation>
 <translation id="9019902583201351841">Administreret af dine forældre</translation>
 <translation id="9040142327097499898">Underretninger er tilladt. Placering er deaktiveret for denne enhed.</translation>
 <translation id="9050666287014529139">Adgangssætning</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 e6c9c94..e624982 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -876,6 +876,7 @@
 <translation id="7981313251711023384">Seiten vorab laden, um das Surfen und die Suche zu beschleunigen</translation>
 <translation id="79859296434321399">ARCore installieren, um Augmented-Reality-Inhalte zu sehen</translation>
 <translation id="7987073022710626672">Chrome-Nutzungsbedingungen</translation>
+<translation id="7987764905897278458">Google clever nutzen</translation>
 <translation id="7998918019931843664">Geschlossenen Tab wieder öffnen</translation>
 <translation id="7999064672810608036">Möchten Sie wirklich alle lokalen Daten einschließlich Cookies löschen und alle Berechtigungen für diese Website zurücksetzen?</translation>
 <translation id="8004582292198964060">Browser</translation>
@@ -963,6 +964,7 @@
 <translation id="8664979001105139458">Dateiname schon vorhanden</translation>
 <translation id="8676374126336081632">Eingabe löschen</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Signalstärke: # Balken}other{Signalstärke: # Balken}}</translation>
+<translation id="868929229000858085">Kontakte durchsuchen</translation>
 <translation id="869891660844655955">Ablaufdatum</translation>
 <translation id="8719023831149562936">Aktueller Tab kann nicht gebeamt werden.</translation>
 <translation id="8725066075913043281">Erneut versuchen</translation>
@@ -997,6 +999,7 @@
 <translation id="8986494364107987395">Nutzungsstatistiken und Absturzberichte automatisch an Google senden</translation>
 <translation id="8993760627012879038">Neuen Tab im Inkognitomodus öffnen</translation>
 <translation id="8998729206196772491">Sie melden sich mit einem von <ph name="MANAGED_DOMAIN" /> verwalteten Konto an und geben dem Administrator der Domain Kontrolle über Ihre Chrome-Daten. Die Daten werden diesem Konto dauerhaft zugeordnet. Wenn Sie sich von Chrome abmelden, werden Ihre Daten auf dem Gerät gelöscht, bleiben jedoch in Ihrem Google-Konto erhalten.</translation>
+<translation id="9018881455348618200">Schaltfläche für die Suche</translation>
 <translation id="9019902583201351841">Von deinen Eltern verwaltet</translation>
 <translation id="9040142327097499898">Benachrichtigungen sind erlaubt. Der Standortzugriff ist für dieses Gerät deaktiviert.</translation>
 <translation id="9050666287014529139">Passphrase</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 d271f07e..6c92ff3 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Προφόρτωση ιστοσελίδων για ταχύτερη περιήγηση και αναζήτηση</translation>
 <translation id="79859296434321399">Για να δείτε περιεχόμενο επαυξημένης πραγματικότητας, εγκαταστήστε το ARCore</translation>
 <translation id="7987073022710626672">Όροι Παροχής Υπηρεσιών Chrome</translation>
+<translation id="7987764905897278458">Περισσότερες έξυπνες λειτουργίες Google</translation>
 <translation id="7998918019931843664">Εκ νέου άνοιγμα κλειστής καρτέλας</translation>
 <translation id="7999064672810608036">Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα δεδομένα γι' αυτόν τον ιστότοπο, όπως τα cookie, και να επαναφέρετε όλα τα δικαιώματά του;</translation>
 <translation id="8004582292198964060">Πρόγραμμα περιήγησης</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 774ac20..6f1ccce 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
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Preload pages for faster browsing and searching</translation>
 <translation id="79859296434321399">To view augmented reality content, install ARCore</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>
 <translation id="7999064672810608036">Are you sure that you want to clear all local data, including cookies, and reset all permissions for this website?</translation>
 <translation id="8004582292198964060">Browser</translation>
@@ -960,6 +961,7 @@
 <translation id="8664979001105139458">File name already exists</translation>
 <translation id="8676374126336081632">Clear input</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Signal Strength Level: # bar}other{Signal Strength Level: # bars}}</translation>
+<translation id="868929229000858085">Search your contacts</translation>
 <translation id="869891660844655955">Expiry date</translation>
 <translation id="8719023831149562936">Can’t beam current tab</translation>
 <translation id="8725066075913043281">Try again</translation>
@@ -994,6 +996,7 @@
 <translation id="8986494364107987395">Automatically send usage statistics and crash reports to Google</translation>
 <translation id="8993760627012879038">Open a new tab in Incognito mode</translation>
 <translation id="8998729206196772491">You are signing in with an account managed by <ph name="MANAGED_DOMAIN" /> and giving its administrator control over your Chrome data. Your data will become permanently tied to this account. Signing out of Chrome will delete your data from this device, but it will remain stored in your Google account.</translation>
+<translation id="9018881455348618200">Search button</translation>
 <translation id="9019902583201351841">Managed by your parents</translation>
 <translation id="9040142327097499898">Notifications are allowed. Location is off for this device.</translation>
 <translation id="9050666287014529139">Passphrase</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 30122db..2b916a0f6a 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
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Cargar previamente las páginas para acelerar la navegación y las búsquedas</translation>
 <translation id="79859296434321399">Para ver contenido de realidad aumentada, instala ARCore</translation>
 <translation id="7987073022710626672">Condiciones del servicio de Chrome</translation>
+<translation id="7987764905897278458">Obtener más funciones inteligentes de Google</translation>
 <translation id="7998918019931843664">Volver a abrir la pestaña cerrada</translation>
 <translation id="7999064672810608036">¿Quieres eliminar todos los datos locales de este sitio web, incluidas las cookies, y restablecer todos los permisos?</translation>
 <translation id="8004582292198964060">Navegador</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 de42452..6da4a3ea2 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Cargar previamente las páginas para que la navegación y las búsquedas sean más rápidas</translation>
 <translation id="79859296434321399">Instala ARCore para visualizar contenido de realidad aumentada</translation>
 <translation id="7987073022710626672">Condiciones de Servicio de Chrome</translation>
+<translation id="7987764905897278458">Obtener más funciones inteligentes de Google</translation>
 <translation id="7998918019931843664">Volver a abrir pestaña cerrada</translation>
 <translation id="7999064672810608036">¿Estás seguro de que quieres borrar todos los datos locales, incluidas las cookies, y restablecer todos los permisos de este sitio web?</translation>
 <translation id="8004582292198964060">Navegador</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">El nombre del archivo ya existe</translation>
 <translation id="8676374126336081632">Borrar entrada</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Nivel de intensidad de la señal: # barra}other{Nivel de intensidad de la señal: # barras}}</translation>
+<translation id="868929229000858085">Buscar en tus contactos</translation>
 <translation id="869891660844655955">Fecha de caducidad</translation>
 <translation id="8719023831149562936">No se puede compartir la pestaña actual.</translation>
 <translation id="8725066075913043281">Volver a intentarlo</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Envía automáticamente estadísticas de uso e informes sobre fallos a Google</translation>
 <translation id="8993760627012879038">Abre una nueva pestaña en modo de incógnito</translation>
 <translation id="8998729206196772491">Estás iniciando sesión con una cuenta gestionada por <ph name="MANAGED_DOMAIN" />, lo que significa que vas a proporcionar a su administrador el control sobre tus datos de Chrome. Los datos se vincularán de forma permanente a esta cuenta. Si cierras sesión en Chrome, se eliminarán los datos de este dispositivo, pero permanecerán almacenados en tu cuenta de Google.</translation>
+<translation id="9018881455348618200">Botón de búsqueda</translation>
 <translation id="9019902583201351841">Administrado por tus padres</translation>
 <translation id="9040142327097499898">Las notificaciones están permitidas. La ubicación está desactivada en este dispositivo.</translation>
 <translation id="9050666287014529139">Frase de contraseña</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 18364085..5e779c0 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -874,6 +874,7 @@
 <translation id="7981313251711023384">پیش‌بارگیری صفحه‌ها برای مرور و جستجوی سریع‌تر</translation>
 <translation id="79859296434321399">‏برای مشاهده محتوای واقعیت افزوده، ARCore را نصب کنید</translation>
 <translation id="7987073022710626672">‏شرایط خدمات Chrome</translation>
+<translation id="7987764905897278458">‏دریافت هوشمندی‌های بیشتری از Google</translation>
 <translation id="7998918019931843664">بازکردن مجدد برگه‌های بسته شده</translation>
 <translation id="7999064672810608036">مطمئنید که می‌خواهید تمام داده‌های محلی، شامل کوکی‌ها را حذف کرده و تمام مجوزهای این وب‌سایت را بازنشانی کنید؟</translation>
 <translation id="8004582292198964060">مرورگر</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 34f3ec9..3caa6668 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Esilataa sivuja nopeuttaaksesi lataamista ja hakemista</translation>
 <translation id="79859296434321399">Asenna ARCore, niin voit nähdä AR-sisältöä.</translation>
 <translation id="7987073022710626672">Chromen käyttöehdot</translation>
+<translation id="7987764905897278458">Lisää Googlen älykkäitä ratkaisuja</translation>
 <translation id="7998918019931843664">Avaa suljettu välilehti uudelleen</translation>
 <translation id="7999064672810608036">Haluatko varmasti tyhjentää kaikki paikalliset tiedot, mukaan lukien evästeet, ja nollata kaikki tämän verkkosivuston käyttöluvat?</translation>
 <translation id="8004582292198964060">Selain</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 9c4c1f27..8a13815 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">I-preload ang mga page para sa mas mabilis na pag-browse at paghahanap</translation>
 <translation id="79859296434321399">Para matingnan ang augmented reality na content, i-install ang ARCore</translation>
 <translation id="7987073022710626672">Mga Tuntunin ng Serbisyo ng Chrome</translation>
+<translation id="7987764905897278458">Magkaroon ng higit pang smart na feature ng Google</translation>
 <translation id="7998918019931843664">Muling buksan ang isinarang tab</translation>
 <translation id="7999064672810608036">Sigurado ka bang gusto mong i-clear ang lahat ng lokal na data, kasama ang cookies, at i-reset ang lahat ng pahintulot para sa website na ito?</translation>
 <translation id="8004582292198964060">Browser</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">May ganito nang pangalan ng file</translation>
 <translation id="8676374126336081632">I-clear ang input</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Antas ng Lakas ng Signal: # bar}one{Antas ng Lakas ng Signal: # bar}other{Antas ng Lakas ng Signal: # na bar}}</translation>
+<translation id="868929229000858085">Maghanap sa iyong mga contact</translation>
 <translation id="869891660844655955">Expiration date</translation>
 <translation id="8719023831149562936">Hindi ma-beam ang kasalukuyang tab</translation>
 <translation id="8725066075913043281">Muling subukan</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Awtomatikong ipadala ang mga istatistika ng paggamit at mga ulat ng pag-crash sa Google</translation>
 <translation id="8993760627012879038">Magbukas ng bagong tab sa Incognito mode</translation>
 <translation id="8998729206196772491">Nagsa-sign in ka gamit ang isang account na pinamamahalaan ng <ph name="MANAGED_DOMAIN" /> at binibigyan mo ang administrator nito ng kontrol sa iyong data sa Chrome. Permanenteng mauugnay ang iyong data sa account na ito. Made-delete ang data mo sa device na ito kapag nag-sign out ka sa Chrome, ngunit mananatili itong nakaimbak sa iyong Google Account.</translation>
+<translation id="9018881455348618200">Button ng paghahanap</translation>
 <translation id="9019902583201351841">Pinamamahalaan ng iyong mga magulang</translation>
 <translation id="9040142327097499898">Pinapayagan ang mga notification. Naka-off ang lokasyon para sa device na ito.</translation>
 <translation id="9050666287014529139">Passphrase</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 d54b83d..5d7db9c9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Précharger les pages pour accélérer la navigation et la recherche</translation>
 <translation id="79859296434321399">Pour afficher des contenus en réalité augmentée, installez ARCore</translation>
 <translation id="7987073022710626672">Conditions d'utilisation de Chrome</translation>
+<translation id="7987764905897278458">Profitez d'encore plus de fonctionnalités intelligentes de Google</translation>
 <translation id="7998918019931843664">Rouvrir un onglet fermé</translation>
 <translation id="7999064672810608036">Voulez-vous vraiment effacer toutes les données locales, y compris les cookies, et réinitialiser toutes les autorisations pour ce site Web ?</translation>
 <translation id="8004582292198964060">Navigateur</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Nom de fichier déjà attribué</translation>
 <translation id="8676374126336081632">Effacer la saisie</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Intensité du signal : # barre}one{Intensité du signal : # barre}other{Intensité du signal : # barres}}</translation>
+<translation id="868929229000858085">Rechercher des contacts</translation>
 <translation id="869891660844655955">Date d'expiration</translation>
 <translation id="8719023831149562936">Impossible de partager l'onglet actuel.</translation>
 <translation id="8725066075913043281">Réessayer</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Envoie automatiquement les statistiques d'utilisation et les rapports d'erreur à Google</translation>
 <translation id="8993760627012879038">Ouvrir un nouvel onglet en mode navigation privée</translation>
 <translation id="8998729206196772491">Vous vous connectez avec un compte géré par <ph name="MANAGED_DOMAIN" />, ce qui permettra à son administrateur de contrôler vos données Chrome. Celles-ci seront définitivement associées à ce compte. Si vous vous déconnectez de Chrome, vos données seront supprimées de cet appareil, mais elles seront conservées dans votre compte Google.</translation>
+<translation id="9018881455348618200">Bouton de recherche</translation>
 <translation id="9019902583201351841">Géré par tes parents</translation>
 <translation id="9040142327097499898">Les notifications sont autorisées. La localisation est désactivée pour cet appareil.</translation>
 <translation id="9050666287014529139">Phrase secrète</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 4667087..83d9d347 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">ज़्यादा तेज़ी से ब्राउज़ करने और खोजने के लिए पेज पहले से लोड करें</translation>
 <translation id="79859296434321399">'बढ़ी हुई वास्तविकता' की सामग्री देखने के लिए, ARCore इंस्टॉल करें</translation>
 <translation id="7987073022710626672">Chrome सेवा की शर्तें</translation>
+<translation id="7987764905897278458">Google की और भी स्मार्ट सुविधाएं पाएं</translation>
 <translation id="7998918019931843664">बंद टैब फिर से खोलें</translation>
 <translation id="7999064672810608036">क्‍या आप वाकई कुकी सहित इस वेबसाइट का सभी स्‍थानीय डेटा साफ़ करना और इसकी सभी अनुमतियों को रीसेट करना चाहते हैं?</translation>
 <translation id="8004582292198964060">ब्राउज़र</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 cf9ee139..f6e949c9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Prethodno učitaj stranice za brže pregledavanje i pretraživanje</translation>
 <translation id="79859296434321399">Za prikaz sadržaja proširene stvarnosti instalirajte ARCore</translation>
 <translation id="7987073022710626672">Chromeovi uvjeti pružanja usluge</translation>
+<translation id="7987764905897278458">Iskoristite više pametnih Googleovih značajki</translation>
 <translation id="7998918019931843664">Ponovno otvaranje zatvorene kartice</translation>
 <translation id="7999064672810608036">Jeste li sigurni da želite izbrisati sve lokalne podatke, uključujući kolačiće, i poništiti sva dopuštenja za ovu web-lokaciju?</translation>
 <translation id="8004582292198964060">Preglednik</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Naziv datoteke već postoji</translation>
 <translation id="8676374126336081632">Brisanje unosa</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Jačina signala: # crtica}one{Jačina signala: # crtica}few{Jačina signala: # crtice}other{Jačina signala: # crtica}}</translation>
+<translation id="868929229000858085">Pretraživanje kontakata</translation>
 <translation id="869891660844655955">Datum isteka</translation>
 <translation id="8719023831149562936">Trenutačnu karticu nije moguće emitirati</translation>
 <translation id="8725066075913043281">Pokušajte ponovo</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Automatski šalji Googleu statistiku o upotrebi i izvješća o padu programa</translation>
 <translation id="8993760627012879038">Otvaranje nove kartice u anonimnom načinu</translation>
 <translation id="8998729206196772491">Prijavljujete se računom kojim upravlja <ph name="MANAGED_DOMAIN" /> i njegovom administratoru dajete kontrolu nad svojim podacima u Chromeu. Vaši će se podaci trajno povezati s tim računom. Ako se odjavite iz Chromea, vaši će se podaci izbrisati s ovog uređaja, no ostat će pohranjeni na vašem Google računu.</translation>
+<translation id="9018881455348618200">Gumb za pretraživanje</translation>
 <translation id="9019902583201351841">Upravljaju tvoji roditelji</translation>
 <translation id="9040142327097499898">Obavijesti su dopuštene. Lokacija je isključena za ovaj uređaj.</translation>
 <translation id="9050666287014529139">Zaporka</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 6bac27d..42a5ed8 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Oldalak előtöltése a gyorsabb böngészés és keresés érdekében</translation>
 <translation id="79859296434321399">A kiterjesztett valósággal kapcsolatos tartalmak megtekintéséhez telepítse az ARCore-t</translation>
 <translation id="7987073022710626672">Chrome – Általános Szerződési Feltételek</translation>
+<translation id="7987764905897278458">Még több okos megoldás a Google-től</translation>
 <translation id="7998918019931843664">Bezárt lap megnyitása</translation>
 <translation id="7999064672810608036">Biztosan törli a webhellyel kapcsolatos összes helyi adatot (a cookie-kkal együtt), és visszaállítja az összes engedélyt?</translation>
 <translation id="8004582292198964060">Böngésző</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 61f6c50..e04f22f9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Pramuat halaman agar browsing dan menelusuri lebih cepat</translation>
 <translation id="79859296434321399">Untuk melihat konten augmented reality, instal ARCore</translation>
 <translation id="7987073022710626672">Persyaratan Layanan Chrome</translation>
+<translation id="7987764905897278458">Dapatkan kecanggihan Google lainnya</translation>
 <translation id="7998918019931843664">Buka kembali tab yang ditutup</translation>
 <translation id="7999064672810608036">Yakin ingin menghapus semua data lokal, termasuk cookie, dan menyetel ulang semua izin untuk situs web ini?</translation>
 <translation id="8004582292198964060">Browser</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Nama file sudah ada</translation>
 <translation id="8676374126336081632">Hapus masukan</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Tingkat Kekuatan Sinyal: # batang}other{Tingkat Kekuatan Sinyal: # batang}}</translation>
+<translation id="868929229000858085">Telusuri kontak Anda</translation>
 <translation id="869891660844655955">Masa berlaku</translation>
 <translation id="8719023831149562936">Tidak dapat memancarkan tab ini</translation>
 <translation id="8725066075913043281">Coba lagi</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Kirim statistik penggunaan dan laporan kerusakan ke Google secara otomatis</translation>
 <translation id="8993760627012879038">Membuka tab baru dalam Mode penyamaran</translation>
 <translation id="8998729206196772491">Anda akan masuk dengan akun yang dikelola oleh <ph name="MANAGED_DOMAIN" /> dan memberikan kontrol data Chrome kepada administrator. Data akan terikat dengan akun ini secara permanen. Bila Anda keluar dari Chrome, data akan dihapus dari perangkat ini, namun data tetap tersimpan di Akun Google.</translation>
+<translation id="9018881455348618200">Tombol telusuri</translation>
 <translation id="9019902583201351841">Dikelola oleh orang tua Anda</translation>
 <translation id="9040142327097499898">Notifikasi diizinkan. Lokasi dinonaktifkan untuk perangkat ini.</translation>
 <translation id="9050666287014529139">Frasa sandi</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 e6d5cea..cdcd5aef 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Le pagine vengono precaricate per velocizzare la navigazione e la ricerca</translation>
 <translation id="79859296434321399">Per visualizzare i contenuti di realtà aumentata, installa ARCore</translation>
 <translation id="7987073022710626672">Termini di servizio di Chrome</translation>
+<translation id="7987764905897278458">Utilizza il meglio dell'intelligenza di Google</translation>
 <translation id="7998918019931843664">Riapri la scheda chiusa</translation>
 <translation id="7999064672810608036">Vuoi cancellare tutti i dati locali, inclusi i cookie, e reimpostare tutte le autorizzazioni relative al sito web?</translation>
 <translation id="8004582292198964060">Browser</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Nome file già esistente</translation>
 <translation id="8676374126336081632">Cancella testo inserito</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Intensità del segnale: # barra}other{Intensità del segnale: # barre}}</translation>
+<translation id="868929229000858085">Cerca nei contatti</translation>
 <translation id="869891660844655955">Data di scadenza</translation>
 <translation id="8719023831149562936">Impossibile trasmettere scheda corrente</translation>
 <translation id="8725066075913043281">Riprova</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Invia automaticamente a Google statistiche sull'utilizzo e rapporti sugli arresti anomali</translation>
 <translation id="8993760627012879038">Apri nuova scheda in mod. di navigaz. in incognito</translation>
 <translation id="8998729206196772491">Stai per eseguire l'accesso con un account gestito da <ph name="MANAGED_DOMAIN" /> e consentire al relativo amministratore di avere il controllo dei tuoi dati di Chrome. I tuoi dati verranno associati definitivamente a questo account. Se esci da Chrome, i dati verranno eliminati da questo dispositivo, ma rimarranno memorizzati nel tuo account Google.</translation>
+<translation id="9018881455348618200">Pulsante Cerca</translation>
 <translation id="9019902583201351841">Gestito dai genitori</translation>
 <translation id="9040142327097499898">Le notifiche sono consentite. La geolocalizzazione non è attiva per questo dispositivo.</translation>
 <translation id="9050666287014529139">Passphrase</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 9a0f244..97f4300 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">טעינה מראש של דפים כדי לאפשר גלישה וחיפוש מהירים יותר</translation>
 <translation id="79859296434321399">‏כדי להציג תוכן של מציאות רבודה, צריך להתקין את ARCore</translation>
 <translation id="7987073022710626672">‏התנאים וההגבלות של Chrome</translation>
+<translation id="7987764905897278458">‏גישה אל עוד יכולות חכמות של Google</translation>
 <translation id="7998918019931843664">פתח מחדש כרטיסייה שנסגרה</translation>
 <translation id="7999064672810608036">‏האם אתה בטוח שברצונך לנקות את כל הנתונים המקומיים, כולל קובצי Cookie, ולאפס את כל ההרשאות של האתר הזה?</translation>
 <translation id="8004582292198964060">דפדפן</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 238e333..4e96d50 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">ページをプリロードして閲覧と検索をすばやく行えるようにする</translation>
 <translation id="79859296434321399">拡張現実(AR)コンテンツを表示するには ARCore をインストールしてください</translation>
 <translation id="7987073022710626672">Chrome 利用規約</translation>
+<translation id="7987764905897278458">Google の最先端技術をさらに活用</translation>
 <translation id="7998918019931843664">閉じたタブを開く</translation>
 <translation id="7999064672810608036">すべてのローカルデータ(Cookie を含む)を消去して、このウェブサイトに指定したすべての許可をリセットしてもよろしいですか?</translation>
 <translation id="8004582292198964060">ブラウザ</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">同じ名前のファイルが存在します</translation>
 <translation id="8676374126336081632">入力内容を消去</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{電波強度: レベル #}other{電波強度: レベル #}}</translation>
+<translation id="868929229000858085">連絡先を検索</translation>
 <translation id="869891660844655955">有効期限</translation>
 <translation id="8719023831149562936">現在のタブはビームできません</translation>
 <translation id="8725066075913043281">やり直し</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">使用統計データと障害レポートを Google に自動送信します</translation>
 <translation id="8993760627012879038">新しいタブをシークレット モードで開く</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> で管理されているアカウントでログインして、Chrome データの管理を管理者に委ねようとしています。この操作を行うと、データはこのアカウントに恒久的に関連付けられます。Chrome からログアウトすると、データはこの端末から削除されますが、Google アカウントには残ります。</translation>
+<translation id="9018881455348618200">検索ボタン</translation>
 <translation id="9019902583201351841">保護者により管理されています</translation>
 <translation id="9040142327097499898">通知が許可されていますが、位置情報が端末でオフになっています。</translation>
 <translation id="9050666287014529139">パスフレーズ</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 526085a..4dd1078 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">더 빠른 인터넷 사용과 검색을 위해 페이지 미리 로드</translation>
 <translation id="79859296434321399">증강 현실 콘텐츠를 보려면 ARCore를 설치하세요.</translation>
 <translation id="7987073022710626672">Chrome 서비스 약관</translation>
+<translation id="7987764905897278458">더욱 스마트한 Google을 사용하세요</translation>
 <translation id="7998918019931843664">닫은 탭 다시 열기</translation>
 <translation id="7999064672810608036">쿠키를 포함하여 이 웹사이트의 데이터를 모두 삭제하고 모든 권한을 재설정하시겠습니까?</translation>
 <translation id="8004582292198964060">브라우저</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 c19be648..4c50e62a 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Iš anksto įkelti puslapius, kad naršymo ir paieškos procesai vyktų greičiau</translation>
 <translation id="79859296434321399">Norėdami peržiūrėti išplėstosios realybės turinį įdiekite „ARCore“</translation>
 <translation id="7987073022710626672">„Chrome“ paslaugų teikimo sąlygos</translation>
+<translation id="7987764905897278458">Gaukite daugiau „Google“ išmaniųjų funkcijų</translation>
 <translation id="7998918019931843664">Iš naujo atidarykite uždarytą skirtuko lapą</translation>
 <translation id="7999064672810608036">Ar tikrai norite išvalyti visus šios svetainės vietinius duomenis, įskaitant slapukus, ir iš naujo nustatyti visus leidimus?</translation>
 <translation id="8004582292198964060">Naršyklė</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 23f855acc..c16901e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Veikt lapu pirmsielādi, lai paātrinātu pārlūkošanu un meklēšanu</translation>
 <translation id="79859296434321399">Lai skatītu papildinātās realitātes saturu, instalējiet ARCore</translation>
 <translation id="7987073022710626672">Lietošanas noteikumi</translation>
+<translation id="7987764905897278458">Izmantojiet vairāk Google viedo tehnoloģiju</translation>
 <translation id="7998918019931843664">Vēlreiz atvērt aizvērto cilni</translation>
 <translation id="7999064672810608036">Vai tiešām vēlaties notīrīt visus ar šo vietni saistītos lokālos datus, tostarp sīkfailus, un atiestatīt visas atļaujas?</translation>
 <translation id="8004582292198964060">Pārlūkprogramma</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 fe4ce093..6ad1297 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Pagina's vooraf laden voor sneller browsen en zoeken</translation>
 <translation id="79859296434321399">Installeer ARCore om augmented reality-content te bekijken</translation>
 <translation id="7987073022710626672">Servicevoorwaarden van Chrome</translation>
+<translation id="7987764905897278458">Gebruik meer slimme Google-functies</translation>
 <translation id="7998918019931843664">Gesloten tabblad opnieuw openen</translation>
 <translation id="7999064672810608036">Weet je zeker dat je alle gegevens, inclusief cookies, voor deze website wilt wissen en alle rechten opnieuw wilt instellen?</translation>
 <translation id="8004582292198964060">Browser</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Bestandsnaam bestaat al</translation>
 <translation id="8676374126336081632">Invoer wissen</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Signaalsterkte: # streepje}other{Signaalsterkte: # streepjes}}</translation>
+<translation id="868929229000858085">Zoek in je contacten</translation>
 <translation id="869891660844655955">Vervaldatum</translation>
 <translation id="8719023831149562936">Kan huidig tabblad niet beamen</translation>
 <translation id="8725066075913043281">Opnieuw proberen</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Automatisch gebruiksstatistieken en crashrapporten naar Google verzenden</translation>
 <translation id="8993760627012879038">Een nieuw venster openen in de incognitomodus</translation>
 <translation id="8998729206196772491">Je logt in met een account dat wordt beheerd door <ph name="MANAGED_DOMAIN" /> waarmee je de eigenaar beheer geeft over je Chrome-gegevens. Je gegevens worden permanent gekoppeld aan dit account. Als je uitlogt van Chrome, worden je gegevens van dit apparaat verwijderd. Ze blijven echter opgeslagen in je Google-account.</translation>
+<translation id="9018881455348618200">Zoekknop</translation>
 <translation id="9019902583201351841">Beheerd door je ouders</translation>
 <translation id="9040142327097499898">Meldingen zijn toegestaan. Locatie is uitgeschakeld voor dit apparaat.</translation>
 <translation id="9050666287014529139">Wachtwoordzin</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 3d73fcba..49948507 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Last inn sider på forhånd for raskere nettlesing og søk</translation>
 <translation id="79859296434321399">Du må installere ARCore for å se innhold med utvidet virkelighet</translation>
 <translation id="7987073022710626672">Vilkår for bruk av Chrome</translation>
+<translation id="7987764905897278458">Få flere smarte funksjoner fra Google</translation>
 <translation id="7998918019931843664">Åpne lukkede faner igjen</translation>
 <translation id="7999064672810608036">Er du sikker på at du vil slette alle lokale data, deriblant informasjonskapsler, og tilbakestille alle tillatelser for dette nettstedet?</translation>
 <translation id="8004582292198964060">Nettleser</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 9ce3e60..6f99d7c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Ładuj wstępnie strony, by przyspieszyć przeglądanie i wyszukiwanie</translation>
 <translation id="79859296434321399">Aby oglądać treści rzeczywistości rozszerzonej, zainstaluj ARCore</translation>
 <translation id="7987073022710626672">Warunki korzystania z Chrome</translation>
+<translation id="7987764905897278458">Więcej inteligentnych rozwiązań Google</translation>
 <translation id="7998918019931843664">Otwórz ponownie zamkniętą kartę</translation>
 <translation id="7999064672810608036">Na pewno chcesz usunąć wszystkie dane lokalne (w tym pliki cookie) i zresetować uprawnienia tej witryny?</translation>
 <translation id="8004582292198964060">Przeglądarka</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 52d73d8..2bdb4eb 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
@@ -69,7 +69,7 @@
 <translation id="1445680696957526815">Os componentes do Chrome são incompatíveis entre si. O Chrome pode estar fazendo um upgrade. Tente novamente em alguns minutos. Se o problema persistir, tente desinstalar e reinstalar o Chrome.</translation>
 <translation id="1446450296470737166">Permitir controle total de dispositivos MIDI</translation>
 <translation id="145097072038377568">Desativada nas configurações do Android</translation>
-<translation id="1455941322673536744">Preenchimento autom. e pagamentos</translation>
+<translation id="1455941322673536744">Autopreenchimento e pagamentos</translation>
 <translation id="1477626028522505441">Falha no download do arquivo <ph name="FILE_NAME" /> devido a problemas de servidor.</translation>
 <translation id="1506061864768559482">Mecanismo de pesquisa</translation>
 <translation id="1513352483775369820">Favoritos e histórico da Web</translation>
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Pré-carregar páginas para possibilitar navegação e pesquisa mais rápidas</translation>
 <translation id="79859296434321399">Para ver conteúdo de realidade aumentada, instale o ARCore</translation>
 <translation id="7987073022710626672">Termos de Serviço do Chrome</translation>
+<translation id="7987764905897278458">Aproveite mais a tecnologia do Google</translation>
 <translation id="7998918019931843664">Reabrir guia fechada</translation>
 <translation id="7999064672810608036">Tem certeza que quer apagar todos os dados locais, inclusive os cookies, e redefinir todas as permissões para este website?</translation>
 <translation id="8004582292198964060">Navegador</translation>
@@ -961,6 +962,7 @@
 <translation id="8664979001105139458">O nome do arquivo já existe</translation>
 <translation id="8676374126336081632">Limpar entrada</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Nível de intensidade do sinal: de # barra}one{Nível de intensidade do sinal: de # barra}other{Nível de intensidade do sinal: de # barras}}</translation>
+<translation id="868929229000858085">Pesquisar seus contatos</translation>
 <translation id="869891660844655955">Validade</translation>
 <translation id="8719023831149562936">Não é possível enviar a guia atual</translation>
 <translation id="8725066075913043281">Tentar novamente</translation>
@@ -995,6 +997,7 @@
 <translation id="8986494364107987395">Envia estatísticas de uso e relatórios de erros ao Google automaticamente</translation>
 <translation id="8993760627012879038">Abrir uma nova guia no modo de navegação anônima</translation>
 <translation id="8998729206196772491">Você está fazendo login com uma conta gerenciada por <ph name="MANAGED_DOMAIN" /> e dando ao administrador dela o controle sobre seus dados do Chrome, os quais ficarão permanentemente vinculados a essa conta. Se você sair do Chrome, seus dados serão excluídos desse dispositivo, mas permanecerão armazenados na sua Conta do Google.</translation>
+<translation id="9018881455348618200">Botão "Pesquisar"</translation>
 <translation id="9019902583201351841">Gerenciado pelos seus pais</translation>
 <translation id="9040142327097499898">As notificações são permitidas. A localização está desativada neste dispositivo.</translation>
 <translation id="9050666287014529139">Senha</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 1106b82..9343a2a 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
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Pré-carregar as páginas para uma navegação e uma pesquisa mais rápidas</translation>
 <translation id="79859296434321399">Para ver conteúdo de realidade aumentada, instale o ARCore.</translation>
 <translation id="7987073022710626672">Termos de Utilização do Chrome</translation>
+<translation id="7987764905897278458">Mais inteligência da Google</translation>
 <translation id="7998918019931843664">Reabrir separador fechado</translation>
 <translation id="7999064672810608036">Tem a certeza de que pretende limpar todos os dados locais, incluindo cookies, e repor todas as autorizações para este Website?</translation>
 <translation id="8004582292198964060">Navegador</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">O nome do ficheiro já existe</translation>
 <translation id="8676374126336081632">Limpar texto</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Nível de intensidade do sinal: # barra}other{Nível de intensidade do sinal: # barras}}</translation>
+<translation id="868929229000858085">Pesquise os seus contactos</translation>
 <translation id="869891660844655955">Data de expiração</translation>
 <translation id="8719023831149562936">Impossível transmitir o separador atual</translation>
 <translation id="8725066075913043281">Tentar novamente</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Enviar automaticamente estatísticas de utilização e relatórios de falhas para a Google</translation>
 <translation id="8993760627012879038">Abrir novo separador no modo de navegação anónima</translation>
 <translation id="8998729206196772491">Está a iniciar sessão com uma conta gerida por <ph name="MANAGED_DOMAIN" /> e a conceder ao respetivo gestor o controlo dos seus dados do Chrome. Os dados ficarão permanentemente associados a esta conta. Terminar sessão no Chrome elimina os seus dados deste dispositivo, embora permaneçam armazenados na Conta Google.</translation>
+<translation id="9018881455348618200">Botão de pesquisa</translation>
 <translation id="9019902583201351841">Gerido pelos teus pais</translation>
 <translation id="9040142327097499898">As notificações são permitidas. A localização está desativada para este dispositivo.</translation>
 <translation id="9050666287014529139">Frase de acesso</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 e40c1a6..bfaf65aa 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Preîncarcă paginile pentru navigare și căutare mai rapide</translation>
 <translation id="79859296434321399">Pentru a vedea conținut din realitatea augmentată, instalează ARCore</translation>
 <translation id="7987073022710626672">Termenii și condițiile Chrome</translation>
+<translation id="7987764905897278458">Profită mai mult de ingeniozitatea Google</translation>
 <translation id="7998918019931843664">Redeschideți fila închisă</translation>
 <translation id="7999064672810608036">Sigur dorești să ștergi toate datele locale, inclusiv cookie-urile pentru acest site și să îi resetezi permisiunile?</translation>
 <translation id="8004582292198964060">Browser</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 068f600d..3fc5104 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Разрешить предзагрузку страниц для повышения скорости работы браузера и поиска</translation>
 <translation id="79859296434321399">Чтобы просматривать контент в режиме дополненной реальности, установите приложение ARCore.</translation>
 <translation id="7987073022710626672">Условия использования Chrome</translation>
+<translation id="7987764905897278458">Расширенный доступ к интеллектуальным функциям Google</translation>
 <translation id="7998918019931843664">Восстановить закрытую вкладку</translation>
 <translation id="7999064672810608036">Вы уверены, что хотите удалить все данные этого веб-сайта, включая файлы cookie, и сбросить заданные разрешения?</translation>
 <translation id="8004582292198964060">Браузер</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Файл с таким именем уже существует.</translation>
 <translation id="8676374126336081632">Очистить</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Уровень сигнала: # линия}one{Уровень сигнала: # линия}few{Уровень сигнала: # линии}many{Уровень сигнала: # линий}other{Уровень сигнала: # линии}}</translation>
+<translation id="868929229000858085">Поиск контактов</translation>
 <translation id="869891660844655955">Срок действия</translation>
 <translation id="8719023831149562936">Не удалось передать текущую вкладку</translation>
 <translation id="8725066075913043281">Повторить попытку</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Автоматически отправлять в Google статистику использования и отчеты о сбоях</translation>
 <translation id="8993760627012879038">Открыть новое окно в режиме инкогнито</translation>
 <translation id="8998729206196772491">Вы входите в аккаунт, которым управляет администратор домена <ph name="MANAGED_DOMAIN" />. Он может контролировать ваши данные Chrome, которые теперь будут связаны с управляемым аккаунтом. При выходе из системы все данные Chrome, хранящиеся на этом устройстве, будут удалены, но останутся в вашем аккаунте Google.</translation>
+<translation id="9018881455348618200">Кнопка поиска</translation>
 <translation id="9019902583201351841">Управляется вашими родителями</translation>
 <translation id="9040142327097499898">Отправка уведомлений разрешена, но определение местоположения отключено.</translation>
 <translation id="9050666287014529139">Кодовая фраза</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 427eb12c..313fb22 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Vopred načítavať stránky na zrýchlenie prehliadania a vyhľadávania</translation>
 <translation id="79859296434321399">Ak chcete zobraziť obsah v rozšírenej realite, nainštalujte si ARCore</translation>
 <translation id="7987073022710626672">Zmluvné podmienky prehliadača Chrome</translation>
+<translation id="7987764905897278458">Získajte viac inteligentných doplnkov Googlu</translation>
 <translation id="7998918019931843664">Znova otvoriť zavretú kartu</translation>
 <translation id="7999064672810608036">Naozaj chcete vymazať všetky miestne údaje (vrátane súborov cookie) a obnoviť všetky povolenia pre tieto webové stránky?</translation>
 <translation id="8004582292198964060">Prehliadač</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 74848fb747..12ba89e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Vnaprejšnje nalaganje strani zaradi hitrejšega brskanja in iskanja</translation>
 <translation id="79859296434321399">Če si želite ogledati vsebino v razširjeni resničnosti, namestite ARCore</translation>
 <translation id="7987073022710626672">Pogoji storitve za Chrome</translation>
+<translation id="7987764905897278458">Zagotovite si več Googlovih pametnih rešitev</translation>
 <translation id="7998918019931843664">Vnovično odpiranje zaprtega zavihka</translation>
 <translation id="7999064672810608036">Ali želite res izbrisati vse lokalne podatke, vključno s piškotki, in ponastaviti vsa dovoljenja za to spletno mesto?</translation>
 <translation id="8004582292198964060">Brskalnik</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 5c443e1..5b7aec1 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Странице се учитавају унапред ради бржег прегледања и претраживања</translation>
 <translation id="79859296434321399">Да бисте видели садржај проширене реалности, инсталирајте ARCore</translation>
 <translation id="7987073022710626672">Chrome услови коришћења услуге</translation>
+<translation id="7987764905897278458">Набавите још паметних Google функција</translation>
 <translation id="7998918019931843664">Поново отворите затворену картицу</translation>
 <translation id="7999064672810608036">Желите ли стварно да обришете све локалне податке, укључујући колачиће, и ресетујете све дозволе за овај веб-сајт?</translation>
 <translation id="8004582292198964060">Прегледач</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 72eded7..da4f480 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Läs in sidor i förväg så att det går snabbare att surfa och söka</translation>
 <translation id="79859296434321399">Installera ARCore om du vill visa innehåll med förstärkt verklighet</translation>
 <translation id="7987073022710626672">Chromes användarvillkor</translation>
+<translation id="7987764905897278458">Få mer Google-teknik</translation>
 <translation id="7998918019931843664">Öppna en stängd flik på nytt</translation>
 <translation id="7999064672810608036">Vill du ta bort all lokal data för webbplatsen, inklusive cookies, och återställa alla behörigheter för den?</translation>
 <translation id="8004582292198964060">Webbläsare</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Filnamnet finns redan</translation>
 <translation id="8676374126336081632">Radera inmatning</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Signalstyrka: # streck}other{Signalstyrka: # streck}}</translation>
+<translation id="868929229000858085">Sök bland kontakterna</translation>
 <translation id="869891660844655955">Utgångsdatum</translation>
 <translation id="8719023831149562936">Den aktuella fliken kan inte överföras</translation>
 <translation id="8725066075913043281">Försök igen</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Skicka användningsstatistik och kraschrapporter till Google automatiskt</translation>
 <translation id="8993760627012879038">Öppna en ny flik i inkognitoläge</translation>
 <translation id="8998729206196772491">Du håller på att logga in med ett konto som hanteras av <ph name="MANAGED_DOMAIN" />, vilket ger administratören kontroll över data i Chrome. Din data kopplas permanent till det här kontot. Om du loggar ut från Chrome raderas all din data från enheten, men den lagras fortfarande i Google-kontot.</translation>
+<translation id="9018881455348618200">Knappen Sök</translation>
 <translation id="9019902583201351841">Hanteras av dina föräldrar</translation>
 <translation id="9040142327097499898">Aviseringar tillåts. Plats har inaktiverats på enheten.</translation>
 <translation id="9050666287014529139">Lösenfras</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 bcf3984..033b1b3 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Pakia mapema kurasa ili upate huduma ya haraka ya kuvinjari na kutafuta</translation>
 <translation id="79859296434321399">Sakinisha ARCore ili uangalie maudhui ya uhalisia ulioboreshwa</translation>
 <translation id="7987073022710626672">Sheria na Masharti ya Chrome</translation>
+<translation id="7987764905897278458">Pata programu zaidi mahiri za Google</translation>
 <translation id="7998918019931843664">Fungua tena kichupo kilichofungwa</translation>
 <translation id="7999064672810608036">Una uhakika unataka kufuta data zote za ndani, ikiwemo vidakuzi, na kuweka upya ruhusa za tovuti hii?</translation>
 <translation id="8004582292198964060">Kivinjari</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 21f60df..5a0e881 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">โหลดหน้าเว็บล่วงหน้าเพื่อให้เรียกดูและค้นหาได้เร็วขึ้น</translation>
 <translation id="79859296434321399">ติดตั้ง ARCore เพื่อดูเนื้อหา Augmented Reality</translation>
 <translation id="7987073022710626672">ข้อกำหนดในการให้บริการของ Chrome</translation>
+<translation id="7987764905897278458">ใช้ฟีเจอร์เจ๋งๆ จาก Google มากขึ้น</translation>
 <translation id="7998918019931843664">เปิดแท็บที่ปิดไปแล้วขึ้นใหม่</translation>
 <translation id="7999064672810608036">คุณแน่ใจไหมว่าต้องการล้างข้อมูลในเครื่องทั้งหมด รวมถึงคุกกี้ และรีเซ็ตสิทธิ์ทั้งหมดสำหรับเว็บไซต์นี้</translation>
 <translation id="8004582292198964060">เบราว์เซอร์</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">มีชื่อไฟล์นี้อยู่แล้ว</translation>
 <translation id="8676374126336081632">ล้างข้อมูลที่ป้อน</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{ระดับความแรงของสัญญาณ: # แถบ}other{ระดับความแรงของสัญญาณ: # แถบ}}</translation>
+<translation id="868929229000858085">ค้นหารายชื่อติดต่อ</translation>
 <translation id="869891660844655955">วันหมดอายุ</translation>
 <translation id="8719023831149562936">ไม่สามารถบีมแท็บปัจจุบัน</translation>
 <translation id="8725066075913043281">ลองอีกครั้ง</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">ส่งสถิติการใช้งานและรายงานข้อขัดข้องไปยัง Google โดยอัตโนมัติ</translation>
 <translation id="8993760627012879038">เปิดแท็บใหม่ในโหมดไม่ระบุตัวตน</translation>
 <translation id="8998729206196772491">คุณกำลังลงชื่อเข้าใช้ด้วยบัญชีที่จัดการโดย <ph name="MANAGED_DOMAIN" /> และทำให้ผู้ดูแลระบบของโดเมนควบคุมข้อมูล Chrome ของคุณได้ ข้อมูลดังกล่าวจะโยงกับบัญชีนี้อย่างถาวร การออกจากระบบ Chrome จะลบข้อมูลของคุณออกจากอุปกรณ์เครื่องนี้ แต่ข้อมูลจะยังจัดเก็บอยู่ในบัญชี Google</translation>
+<translation id="9018881455348618200">ปุ่มค้นหา</translation>
 <translation id="9019902583201351841">มีการจัดการโดยผู้ปกครอง</translation>
 <translation id="9040142327097499898">อนุญาตให้แสดงการแจ้งเตือน ตำแหน่งสำหรับอุปกรณ์เครื่องนี้ปิดอยู่</translation>
 <translation id="9050666287014529139">ข้อความรหัสผ่าน</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 b2f815bc6..6dd621c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Daha hızlı göz atmak ve arama yapmak için sayfaları önceden yükle</translation>
 <translation id="79859296434321399">Artırılmış gerçeklik içeriğini görüntülemek için ARCore'u yükleyin</translation>
 <translation id="7987073022710626672">Chrome Hizmet Şartları</translation>
+<translation id="7987764905897278458">Google zekasından daha fazla yararlanın</translation>
 <translation id="7998918019931843664">Kapatılan sekmeyi yeniden aç</translation>
 <translation id="7999064672810608036">Bu web sitesine ilişkin çerezler dahil tüm yerel verileri temizlemek ve bu sitenin tüm izinlerini sıfırlamak istediğinizden emin misiniz?</translation>
 <translation id="8004582292198964060">Tarayıcı</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Dosya adı zaten mevcut</translation>
 <translation id="8676374126336081632">Girişi temizle</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Sinyal Gücü Düzeyi: # çubuk}other{Sinyal Gücü Düzeyi: # çubuk}}</translation>
+<translation id="868929229000858085">Kişilerinizde arama yapın</translation>
 <translation id="869891660844655955">Son kullanma tarihi</translation>
 <translation id="8719023831149562936">Geçerli sekme ışınlanamıyor</translation>
 <translation id="8725066075913043281">Yeniden dene</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Kullanım istatistiklerini ve çökme raporlarını otomatik olarak Google'a gönder</translation>
 <translation id="8993760627012879038">Gizli modda yeni bir sekme açar</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> tarafından yönetilen bir hesapla oturum açıyorsunuz ve yöneticiye tüm Chrome verileriniz üzerinde denetim olanağı veriyorsunuz. Verileriniz kalıcı olarak bu hesaba bağlanacaktır. Chrome'da oturumu kapattığınızda verileriniz bu cihazdan silinir, ancak Google Hesabınızda kalmaya devam eder.</translation>
+<translation id="9018881455348618200">Ara düğmesi</translation>
 <translation id="9019902583201351841">Ebeveynleriniz tarafından yönetiliyor</translation>
 <translation id="9040142327097499898">Bildirimlere izin veriliyor. Konum özelliği bu cihazda kapalı.</translation>
 <translation id="9050666287014529139">Parola</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 264cdb8d..cf52e49f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Попередньо завантажувати сторінки, щоб швидше переглядати та шукати</translation>
 <translation id="79859296434321399">Щоб переглядати вміст у режимі доповненої реальності, установіть ARCore</translation>
 <translation id="7987073022710626672">Умови використання Google Chrome</translation>
+<translation id="7987764905897278458">Отримайте більше розумних функцій Google</translation>
 <translation id="7998918019931843664">Знову відкрити закриту вкладку</translation>
 <translation id="7999064672810608036">Видалити всі локальні дані, зокрема файли cookie, і скинути всі дозволи для цього веб-сайту?</translation>
 <translation id="8004582292198964060">Переглядач</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Файл із такою назвою вже існує</translation>
 <translation id="8676374126336081632">Видалити введений текст</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Рівень сигналу: # поділка}one{Рівень сигналу: # поділка}few{Рівень сигналу: # поділки}many{Рівень сигналу: # поділок}other{Рівень сигналу: # поділки}}</translation>
+<translation id="868929229000858085">Пошук у контактах</translation>
 <translation id="869891660844655955">Діє до</translation>
 <translation id="8719023831149562936">Неможливо передати дані поточної вкладки</translation>
 <translation id="8725066075913043281">Повторити спробу</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Автоматично надсилати статистику використання та звіти про аварійне завершення роботи в Google</translation>
 <translation id="8993760627012879038">Відкрити нове вікно в режимі анонімного перегляду</translation>
 <translation id="8998729206196772491">Ви входите в обліковий запис, зареєстрований у домені <ph name="MANAGED_DOMAIN" />, і надаєте його адміністратору доступ до своїх даних Chrome. Ваші дані буде назавжди зв’язано з цим обліковим записом. Якщо ви вийдете з облікового запису в Chrome, дані буде видалено з цього пристрою, але вони залишаться у вашому обліковому записі Google.</translation>
+<translation id="9018881455348618200">Кнопка пошуку</translation>
 <translation id="9019902583201351841">Керується батьками</translation>
 <translation id="9040142327097499898">На цьому пристрої вимкнено геодані. Сповіщення дозволено.</translation>
 <translation id="9050666287014529139">Парольна фраза</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 4013c42..04a30f70 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">Tải trước các trang để tìm kiếm và duyệt web nhanh hơn</translation>
 <translation id="79859296434321399">Để xem nội dung thực tế tăng cường, hãy cài đặt bộ công cụ ARCore</translation>
 <translation id="7987073022710626672">Điều khoản dịch vụ của Chrome</translation>
+<translation id="7987764905897278458">Trải nghiệm thêm các tính năng thông minh của Google</translation>
 <translation id="7998918019931843664">Mở lại tab đã đóng</translation>
 <translation id="7999064672810608036">Bạn có chắc chắn muốn xóa tất cả dữ liệu cục bộ, bao gồm cookie và đặt lại tất cả các quyền cho trang web này không?</translation>
 <translation id="8004582292198964060">Trình duyệt</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">Tên tệp đã tồn tại</translation>
 <translation id="8676374126336081632">Xóa văn bản nhập</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{Mức cường độ tín hiệu: # vạch}other{Mức cường độ tín hiệu: # vạch}}</translation>
+<translation id="868929229000858085">Tìm kiếm trong danh bạ</translation>
 <translation id="869891660844655955">Ngày hết hạn</translation>
 <translation id="8719023831149562936">Không thể chiếu tab hiện tại</translation>
 <translation id="8725066075913043281">Thử lại</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">Tự động gửi số liệu thống kê về việc sử dụng và báo cáo sự cố cho Google</translation>
 <translation id="8993760627012879038">Mở tab mới trong chế độ Ẩn danh</translation>
 <translation id="8998729206196772491">Bạn đang đăng nhập bằng tài khoản do <ph name="MANAGED_DOMAIN" /> quản lý và cấp cho quản trị viên quyền kiểm soát dữ liệu Chrome của bạn. Dữ liệu của bạn sẽ được liên kết vĩnh viễn với tài khoản này. Việc đăng xuất khỏi Chrome sẽ xóa dữ liệu của bạn khỏi thiết bị này nhưng dữ liệu sẽ vẫn được lưu trữ trong Tài khoản Google.</translation>
+<translation id="9018881455348618200">Nút tìm kiếm</translation>
 <translation id="9019902583201351841">Do cha mẹ của bạn quản lý</translation>
 <translation id="9040142327097499898">Cho phép thông báo. Đã tắt vị trí đối với thiết bị này.</translation>
 <translation id="9050666287014529139">Cụm mật khẩu</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 e8bae55..cdb46c0 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
@@ -120,6 +120,7 @@
 <translation id="1891331835972267886"><ph name="APP_NAME" />将在 Chrome 中打开。继续操作即表示您同意 Chrome 的<ph name="BEGIN_LINK1" />服务条款<ph name="END_LINK1" />和<ph name="BEGIN_LINK2" />隐私权声明<ph name="END_LINK2" />。</translation>
 <translation id="189172778771606813">关闭抽屉式导航栏</translation>
 <translation id="1919345977826869612">广告</translation>
+<translation id="1919950603503897840">选择联系人</translation>
 <translation id="1923695749281512248">已下载 <ph name="BYTES_DOWNLOADED_WITH_UNITS" />,共 <ph name="FILE_SIZE_WITH_UNITS" /></translation>
 <translation id="1933845786846280168">所选的标签页</translation>
 <translation id="1938981467853765413">提供反馈</translation>
@@ -156,7 +157,7 @@
 <translation id="2122601567107267586">无法打开此应用</translation>
 <translation id="2126426811489709554">由 Chrome 提供支持</translation>
 <translation id="2131665479022868825">节省了 <ph name="DATA" /></translation>
-<translation id="213279576345780926">已关闭<ph name="TAB_TITLE" /></translation>
+<translation id="213279576345780926">已关闭“<ph name="TAB_TITLE" />”</translation>
 <translation id="2139186145475833000">添加到主屏幕</translation>
 <translation id="2146738493024040262">打开免安装应用</translation>
 <translation id="2148716181193084225">今天</translation>
@@ -291,6 +292,7 @@
 <translation id="3282568296779691940">登录 Chrome</translation>
 <translation id="32895400574683172">允许显示通知</translation>
 <translation id="3295602654194328831">隐藏信息</translation>
+<translation id="3298243779924642547">精简版</translation>
 <translation id="3303414029551471755">要开始下载该内容吗?</translation>
 <translation id="3328801116991980348">网站信息</translation>
 <translation id="3341058695485821946">查看您已节省多少数据流量</translation>
@@ -855,6 +857,7 @@
 <translation id="7791543448312431591">添加</translation>
 <translation id="780301667611848630">不用了,谢谢</translation>
 <translation id="7810647596859435254">打开方式…</translation>
+<translation id="7821588508402923572">您的数据流量节省情况将显示在这里</translation>
 <translation id="7832327313660264358">您同步到 Google 的数据和您使用的功能不会改变</translation>
 <translation id="7837721118676387834">允许特定网站自动播放静音的视频。</translation>
 <translation id="7846076177841592234">取消选择</translation>
@@ -872,6 +875,7 @@
 <translation id="7981313251711023384">预加载网页,以便实现更快速的浏览和搜索</translation>
 <translation id="79859296434321399">要查看增强现实内容,请安装 ARCore</translation>
 <translation id="7987073022710626672">Chrome 服务条款</translation>
+<translation id="7987764905897278458">畅享 Google 的更多智能技术</translation>
 <translation id="7998918019931843664">重新打开关闭的标签页</translation>
 <translation id="7999064672810608036">确定要清除该网站的所有本地数据(包括 Cookie)并重置该网站的所有权限吗?</translation>
 <translation id="8004582292198964060">浏览器</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 9dbee09..6b7da8d 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
@@ -157,7 +157,7 @@
 <translation id="2122601567107267586">無法開啟應用程式</translation>
 <translation id="2126426811489709554">技術提供:Chrome</translation>
 <translation id="2131665479022868825">已節省 <ph name="DATA" /></translation>
-<translation id="213279576345780926">已關閉的「<ph name="TAB_TITLE" />」</translation>
+<translation id="213279576345780926">已關閉「<ph name="TAB_TITLE" />」</translation>
 <translation id="2139186145475833000">加到主畫面</translation>
 <translation id="2146738493024040262">開啟免安裝應用程式</translation>
 <translation id="2148716181193084225">今天</translation>
@@ -875,6 +875,7 @@
 <translation id="7981313251711023384">預先載入網頁,以加快瀏覽及搜尋速度</translation>
 <translation id="79859296434321399">如要查看擴增實境內容,請安裝 ARCore</translation>
 <translation id="7987073022710626672">Chrome 服務條款</translation>
+<translation id="7987764905897278458">體驗更多 Google 強大的智慧功能</translation>
 <translation id="7998918019931843664">重新開啟先前關閉的分頁</translation>
 <translation id="7999064672810608036">您確定要刪除這個網站儲存的所有本機資料 (包括 Cookie 在內),並重設這個網站的所有權限嗎?</translation>
 <translation id="8004582292198964060">瀏覽器</translation>
@@ -962,6 +963,7 @@
 <translation id="8664979001105139458">檔案名稱已存在</translation>
 <translation id="8676374126336081632">清除輸入</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{訊號強度等級:# 格}other{訊號強度等級:# 格}}</translation>
+<translation id="868929229000858085">搜尋聯絡人</translation>
 <translation id="869891660844655955">到期日</translation>
 <translation id="8719023831149562936">無法傳輸目前的分頁</translation>
 <translation id="8725066075913043281">再試一次</translation>
@@ -996,6 +998,7 @@
 <translation id="8986494364107987395">自動傳送使用統計資料及當機報告給 Google</translation>
 <translation id="8993760627012879038">在無痕模式下開啟新分頁</translation>
 <translation id="8998729206196772491">您即將使用由 <ph name="MANAGED_DOMAIN" /> 所管理的帳戶登入,並授權該網域的管理員控管您的 Chrome 資料。您的資料會與這個帳戶建立永久連結。登出 Chrome 後,系統會將您的資料從這個裝置上刪除,但繼續保留在您的 Google 帳戶中。</translation>
+<translation id="9018881455348618200">搜尋按鈕</translation>
 <translation id="9019902583201351841">你的家長已停用這項功能</translation>
 <translation id="9040142327097499898">允許顯示通知。這部裝置的定位功能已關閉。</translation>
 <translation id="9050666287014529139">通關密語</translation>
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index 1c95c810..1ee5f0db 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -643,6 +643,7 @@
   "java/src/org/chromium/chrome/browser/identity/UniqueIdentificationGenerator.java",
   "java/src/org/chromium/chrome/browser/identity/UniqueIdentificationGeneratorFactory.java",
   "java/src/org/chromium/chrome/browser/identity/UuidBasedUniqueIdentificationGenerator.java",
+  "java/src/org/chromium/chrome/browser/incognito/IncognitoDisclosureActivity.java",
   "java/src/org/chromium/chrome/browser/incognito/IncognitoNotificationManager.java",
   "java/src/org/chromium/chrome/browser/incognito/IncognitoNotificationService.java",
   "java/src/org/chromium/chrome/browser/incognito/IncognitoTabHost.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextual_suggestions/ContextualSuggestionsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextual_suggestions/ContextualSuggestionsTest.java
index a12966c..4d87823 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextual_suggestions/ContextualSuggestionsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextual_suggestions/ContextualSuggestionsTest.java
@@ -611,6 +611,7 @@
     @Test
     @MediumTest
     @Feature({"ContextualSuggestions"})
+    @DisabledTest(message = "Needs updates for SurfaceSynchronization - crbug.com/876943")
     public void testPeekWithPageScrollPercentage() throws Exception {
         // Set the screen orientation to portrait since we scroll the web contents in absolute
         // pixels in the test.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java
index 9a0d036..72539b60 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java
@@ -1285,7 +1285,7 @@
         final String twaScope = "https://my_twa.org";
         final String twaPackageName = "org.my_twa";
         mDelegate.add(new IntentActivity(twaScope, twaPackageName)
-                              .withWebappScopePolicy(WebappScopePolicy.STRICT));
+                              .withWebappScopePolicy(WebappScopePolicy.Type.STRICT));
         mDelegate.setReferrerWebappPackageName(twaPackageName);
 
         checkUrl(twaScope + "/new.html").expecting(OverrideUrlLoadingResult.NO_OVERRIDE, IGNORE);
@@ -1301,7 +1301,7 @@
         final String twaScope = "https://my_twa.org";
         final String twaPackageName = "org.my_twa";
         mDelegate.add(new IntentActivity(twaScope, twaPackageName)
-                              .withWebappScopePolicy(WebappScopePolicy.STRICT));
+                              .withWebappScopePolicy(WebappScopePolicy.Type.STRICT));
         mDelegate.setReferrerWebappPackageName(twaPackageName);
 
         checkUrl(SEARCH_RESULT_URL_FOR_TOM_HANKS)
@@ -1319,7 +1319,7 @@
         final String twaScope = "https://my_twa.org";
         final String twaPackageName = "org.my_twa";
         mDelegate.add(new IntentActivity(twaScope, twaPackageName)
-                              .withWebappScopePolicy(WebappScopePolicy.STRICT));
+                              .withWebappScopePolicy(WebappScopePolicy.Type.STRICT));
         mDelegate.setReferrerWebappPackageName(twaPackageName);
 
         checkUrl(SEARCH_RESULT_URL_FOR_TOM_HANKS)
@@ -1337,7 +1337,7 @@
         final String twaScope = "https://my_twa.org";
         final String twaPackageName = "org.my_twa";
         mDelegate.add(new IntentActivity(twaScope, twaPackageName)
-                              .withWebappScopePolicy(WebappScopePolicy.LEGACY));
+                              .withWebappScopePolicy(WebappScopePolicy.Type.LEGACY));
         mDelegate.setReferrerWebappPackageName(twaPackageName);
 
         checkUrl(SEARCH_RESULT_URL_FOR_TOM_HANKS)
@@ -1468,21 +1468,21 @@
         private String mUrlPrefix;
         private String mPackageName;
         private boolean mIsWebApk;
-        private WebappScopePolicy mWebappScopePolicy;
+        private @WebappScopePolicy.Type int mWebappScopePolicy;
 
         public IntentActivity(String urlPrefix, String packageName) {
             mUrlPrefix = urlPrefix;
             mPackageName = packageName;
-            mWebappScopePolicy = WebappScopePolicy.LEGACY;
+            mWebappScopePolicy = WebappScopePolicy.Type.LEGACY;
         }
 
         public IntentActivity withIsWebApk(boolean isWebApk) {
             mIsWebApk = isWebApk;
-            mWebappScopePolicy = WebappScopePolicy.STRICT;
+            mWebappScopePolicy = WebappScopePolicy.Type.STRICT;
             return this;
         }
 
-        public IntentActivity withWebappScopePolicy(WebappScopePolicy policy) {
+        public IntentActivity withWebappScopePolicy(@WebappScopePolicy.Type int policy) {
             mWebappScopePolicy = policy;
             return this;
         }
@@ -1499,7 +1499,7 @@
             return mIsWebApk;
         }
 
-        public WebappScopePolicy webappScopePolicy() {
+        public @WebappScopePolicy.Type int webappScopePolicy() {
             return mWebappScopePolicy;
         }
 
@@ -1556,8 +1556,8 @@
             for (IntentActivity intentActivity : mIntentActivities) {
                 if (intentActivity.packageName().equals(mReferrerWebappPackageName)) {
                     WebappInfo info = newWebappInfoFromScope(intentActivity.urlPrefix());
-                    return intentActivity.webappScopePolicy().applyPolicyForNavigationToUrl(
-                            info, url);
+                    return WebappScopePolicy.applyPolicyForNavigationToUrl(
+                            intentActivity.webappScopePolicy(), info, url);
                 }
             }
             return WebappScopePolicy.NavigationDirective.NORMAL_BEHAVIOR;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappVisibilityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappVisibilityTest.java
index faf7528..2a2fd6f 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappVisibilityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappVisibilityTest.java
@@ -45,7 +45,8 @@
             @Override
             public void run() {
                 testCanAutoHideBrowserControls();
-                for (WebappScopePolicy scopePolicy : WebappScopePolicy.values()) {
+                for (@WebappScopePolicy.Type int scopePolicy = WebappScopePolicy.Type.LEGACY;
+                        scopePolicy < WebappScopePolicy.Type.NUM_ENTRIES; scopePolicy++) {
                     for (@WebDisplayMode int displayMode : new int[] {WebDisplayMode.STANDALONE,
                                  WebDisplayMode.FULLSCREEN, WebDisplayMode.MINIMAL_UI}) {
                         testShouldShowBrowserControls(scopePolicy, displayMode);
@@ -65,7 +66,7 @@
     }
 
     private static void testShouldShowBrowserControls(
-            WebappScopePolicy scopePolicy, @WebDisplayMode int displayMode) {
+            @WebappScopePolicy.Type int scopePolicy, @WebDisplayMode int displayMode) {
         // Show browser controls for out-of-domain URLs.
         Assert.assertTrue(shouldShowBrowserControls(WEBAPP_URL, "http://notoriginalwebsite.com",
                 ConnectionSecurityLevel.NONE, scopePolicy, displayMode));
@@ -85,12 +86,12 @@
 
         // For WebAPKs but not Webapps show browser controls for subdomains and private
         // registries that are secure.
-        Assert.assertEquals(
-                scopePolicy == WebappScopePolicy.STRICT || displayMode == WebDisplayMode.MINIMAL_UI,
+        Assert.assertEquals(scopePolicy == WebappScopePolicy.Type.STRICT
+                        || displayMode == WebDisplayMode.MINIMAL_UI,
                 shouldShowBrowserControls(WEBAPP_URL, "http://sub.originalwebsite.com",
                         ConnectionSecurityLevel.NONE, scopePolicy, displayMode));
-        Assert.assertEquals(
-                scopePolicy == WebappScopePolicy.STRICT || displayMode == WebDisplayMode.MINIMAL_UI,
+        Assert.assertEquals(scopePolicy == WebappScopePolicy.Type.STRICT
+                        || displayMode == WebDisplayMode.MINIMAL_UI,
                 shouldShowBrowserControls(WEBAPP_URL, "http://thing.originalwebsite.com",
                         ConnectionSecurityLevel.NONE, scopePolicy, displayMode));
 
@@ -114,7 +115,8 @@
     }
 
     private static boolean shouldShowBrowserControls(String webappStartUrlOrScopeUrl, String url,
-            int securityLevel, WebappScopePolicy scopePolicy, @WebDisplayMode int displayMode) {
+            int securityLevel, @WebappScopePolicy.Type int scopePolicy,
+            @WebDisplayMode int displayMode) {
         return WebappBrowserControlsDelegate.shouldShowBrowserControls(scopePolicy,
                 createWebappInfo(webappStartUrlOrScopeUrl, scopePolicy, displayMode), url,
                 securityLevel, false);
@@ -125,8 +127,8 @@
     }
 
     private static WebappInfo createWebappInfo(String webappStartUrlOrScopeUrl,
-            WebappScopePolicy scopePolicy, @WebDisplayMode int displayMode) {
-        return scopePolicy == WebappScopePolicy.LEGACY
+            @WebappScopePolicy.Type int scopePolicy, @WebDisplayMode int displayMode) {
+        return scopePolicy == WebappScopePolicy.Type.LEGACY
                 ? WebappInfo.create("", webappStartUrlOrScopeUrl, null, null, null, null,
                           displayMode, 0, 0, 0, 0, null, false /* isIconGenerated */,
                           false /* forceNavigation */)
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/StreamLifecycleManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/StreamLifecycleManagerTest.java
index fc07a91..39b4343 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/StreamLifecycleManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/StreamLifecycleManagerTest.java
@@ -12,7 +12,6 @@
 import static org.mockito.Mockito.when;
 
 import android.app.Activity;
-import android.os.Bundle;
 import android.support.test.filters.SmallTest;
 
 import com.google.android.libraries.feed.api.stream.Stream;
@@ -51,7 +50,7 @@
         MockitoAnnotations.initMocks(this);
         ApplicationStatus.onStateChangeForTesting(mActivity, ActivityState.CREATED);
         mStreamLifecycleManager = new StreamLifecycleManager(mStream, mActivity, mTab);
-        verify(mStream, times(1)).onCreate(or(any(Bundle.class), isNull()));
+        verify(mStream, times(1)).onCreate(or(any(String.class), isNull()));
     }
 
     @Test
diff --git a/chrome/app/resources/chromium_strings_kn.xtb b/chrome/app/resources/chromium_strings_kn.xtb
index 2b74b40..b3b0662d 100644
--- a/chrome/app/resources/chromium_strings_kn.xtb
+++ b/chrome/app/resources/chromium_strings_kn.xtb
@@ -116,6 +116,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">ಅಂತರ್ನಿರ್ಮಿತ PDF viewer ಇಲ್ಲದಿದ್ದರೆ, ಮುದ್ರಣದ ಪೂರ್ವವೀಕ್ಷಣೆಯನ್ನು ತೋರಿಸಲು Chromium ಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="5427571867875391349">Chromium ಅನ್ನು ನಿಮ್ಮ ಡಿಫಾಲ್ಟ್ ಬ್ರೌಸರ್‌ ರೂಪದಲ್ಲಿ ಹೊಂದಿಸಿ</translation>
 <translation id="5438241569118040789"><ph name="PAGE_TITLE" /> - Chromium ಬೀಟಾ</translation>
 <translation id="5466153949126434691">Chromium ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನವೀಕರಿಸುತ್ತದೆ ಈ ಮೂಲಕ ನೀವು ಯಾವಾಗಲೂ ತಾಜಾ ಆವೃತ್ತಿಯುನ್ನು ಹೊಂದಿರುತ್ತೀರಿ. ಈ ಡೌನ್‌ಲೋಡ್‌ ಪೂರ್ಣಗೊಂಡಾಗ, Chromium ಮರುಪ್ರಾರಂಭಿಸುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಮಾರ್ಗದಲ್ಲಿ ನೀವು ಇರಬೇಕಾಗುತ್ತದೆ.</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-CN.xtb b/chrome/app/resources/chromium_strings_zh-CN.xtb
index 19f28f28..8781262 100644
--- a/chrome/app/resources/chromium_strings_zh-CN.xtb
+++ b/chrome/app/resources/chromium_strings_zh-CN.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">在缺少内置 PDF 查看器的情况下,Chromium 无法显示打印预览。</translation>
 <translation id="5427571867875391349">将Chromium设为默认浏览器</translation>
 <translation id="5438241569118040789"><ph name="PAGE_TITLE" /> - Chromium 测试版</translation>
 <translation id="5466153949126434691">Chromium会自动更新,因此您使用的始终都是最新版本。更新内容下载完毕后,Chromium会重新启动,然后您就可以开始使用了。</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 8abbf9ff..b0ab81d 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">ማመሳሰልን እና ሁሉንም አገልግሎቶች ይጠቀሙ</translation>
 <translation id="1272079795634619415">አቁም</translation>
-<translation id="1272242203003205253">Google አጋሮች እርስዎን ለማገዝ ከረዳትዎ ጋር አብረው ይሠራሉ</translation>
 <translation id="1272978324304772054">ይህ የተጠቃሚ መለያ መሣሪያው የተመዘገበበት ጎራ አካል አይደለም።  ወደተለየ ጎራ መመዝገብ ከፈለጉ መጀመሪያ የመሣሪያ ዳግም ማግኛን ማከናወን አለብዎት።</translation>
 <translation id="1274977772557788323">የAdobe Flash Player ማከማቻ ቅንብሮች</translation>
 <translation id="1274997165432133392">ኩኪዎች እና የሌላ ጣቢያ ውሂብ</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">ስልክዎን ማግኘት አልተቻለም</translation>
 <translation id="1616206807336925449">ይህ ቅጥያ ምንም ልዩ ፈቃዶችን አይፈልግም።</translation>
 <translation id="1616298854599875024">የ«<ph name="IMPORT_NAME" />» ቅጥያ የተጋራ ሞዱል ስላልሆነ እሱን ማስመጣት አልተቻለም</translation>
-<translation id="161707228174452095">የጣት አሻራ ታክሏል!</translation>
 <translation id="1618268899808219593">የእገዛ ማዕከል</translation>
 <translation id="162035744160882748">ስምረትን፣ ግላዊነት ማላበስን እና ሌሎች የGoogle አገልግሎቶችን ያብሩ</translation>
 <translation id="1620510694547887537">ካሜራ</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">RAR ማህደር</translation>
 <translation id="2034346955588403444">ሌላ የWiFi አውታረ መረብ አክል</translation>
 <translation id="203574396658008164">ከማያ ገጽ ቁልፍ ሆነህ ማስታወሻ መውሰድን አንቃ</translation>
-<translation id="2039623879703305659">ጣት ከልክ በላይ በፍጥነት ተንቀሳቅሷል</translation>
 <translation id="2040460856718599782">ውይ!  እርስዎን ለማረጋገጥ በሚሞከርበት ጊዜ የሆነ ስህተት ተፈጥሯል።  እባክዎ የመለያ መግቢያ ምስክርነቶችዎን ደግመው ያረጋግጡና እንደገና ይሞክሩ።</translation>
 <translation id="2043818754674261542">ይህን <ph name="DEVICE_TYPE" /> ለመክፈት ለስልኩ ርቀት ያስፈልገዋል</translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">«<ph name="CERTIFICATE_NAME" />» የአገልጋይ እውቅና ማረጋገጫ ይሰረዝ?</translation>
 <translation id="2100273922101894616">በራስ-ግባ</translation>
 <translation id="2101225219012730419">ስሪት፦</translation>
-<translation id="2107494551712864447">የጣት አሻራ ያክሉ</translation>
 <translation id="2112877397266219826">እኔን ለማዋቀር የንክኪ መቆጣጠሪያዎን ያብሩት</translation>
 <translation id="21133533946938348">ትር አጣብቅ</translation>
 <translation id="2113479184312716848">&amp;ፋይል ክፈት…</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">ዴስክቶፕ</translation>
 <translation id="2526619973349913024">ዝማኔን ፈልግ</translation>
 <translation id="2527167509808613699">ማንኛውም አይነት ግንኙነት</translation>
-<translation id="2532026602297547439">ዳሳሽ ቆሽሿል</translation>
 <translation id="2532589005999780174">ባለከፍተኛ ንፅፅር ሁነታ</translation>
 <translation id="253434972992662860">&amp;ላፍታ አቁም</translation>
 <translation id="2534460670861217804">ደህንነቱ የተጠበቀ የኤችቲቲፒ ተኪ</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">የእርስዎን ፎቶዎች እና ቪዲዮዎች በምትኬ ያስቀምጡ</translation>
 <translation id="3060379269883947824">ለመናገር-ይምረጡን ያንቁ</translation>
 <translation id="3061707000357573562">የመጠገኛ አገልግሎት</translation>
-<translation id="3064410671692449875">በቂ ያልሆነ ውሂብ</translation>
 <translation id="3065041951436100775">የትር ተገድሏል ግብረመልስ።</translation>
 <translation id="3067198179881736288">መተግበሪያ ይጫን?</translation>
 <translation id="3067198360141518313">ይህን ተሰኪ አሂድ</translation>
@@ -2263,7 +2257,6 @@
 <translation id="4480590691557335796">Chrome በእርስዎ ኮምፒውተር ላይ ጎጂ ሶፍትዌርን ማግኘት እና ማስወገድ ይችላል</translation>
 <translation id="4481530544597605423">ያልተጣመሩ መሣሪያዎች</translation>
 <translation id="4482194545587547824">Google ፍለጋን እና ሌሎች የGoogle አገልግሎቶችን ግላዊነት ለማላበስ የአሰሳ ታሪክዎን ሊጠቀም ይችላል</translation>
-<translation id="4493287891836751813">ከGoogle ረዳትዎ ጋር ይተዋወቁ</translation>
 <translation id="4495419450179050807">በዚህ ገጽ ላይ አታሳይ</translation>
 <translation id="4499718683476608392">በአንዲት ጠቅታ ቅጾችን ለመሙላት የክሬዲት ካርድ ራስ-ሙላን ያንቁ</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ተበላሽቷል</translation>
@@ -2318,7 +2311,6 @@
 <translation id="4572659312570518089">ከ«<ph name="DEVICE_NAME" />» ጋር በመገናኘት ሳለ ፈቀዳ ተሰርዟል።</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ፋይል</translation>
 <translation id="457386861538956877">ተጨማሪ...</translation>
-<translation id="4576537685267142337">ጣትዎን ያንሱ፣ ከዚያ በድጋሚ ዳሳሹን ይንኩ</translation>
 <translation id="4576541033847873020">የብሉቱዝ መሣሪያን ያጣምሩ</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" />ን cast ማድረግ አልተቻለም።</translation>
 <translation id="4580526846085481512">እርግጠኛ ነዎት $1 ንጥሎችን መሰረዝ ይፈልጋሉ?</translation>
@@ -2563,7 +2555,6 @@
 <translation id="4941627891654116707">የቅርፀ-ቁምፊ መጠን</translation>
 <translation id="494286511941020793">የተኪ ውቅር እገዛ</translation>
 <translation id="4945444280533270988">Smart Lock በርቷል</translation>
-<translation id="494660967831069720">ከፊል ውሂብ</translation>
 <translation id="4953689047182316270">ለተደራሽነት ክስተቶች ምላሽ መስጠት</translation>
 <translation id="4953808748584563296">ነባሪ ብርቱካናማ አምሳያ</translation>
 <translation id="4955814292505481804">ዓመታዊ</translation>
@@ -3519,7 +3510,6 @@
 <translation id="6384275966486438344">የፍለጋ ቅንብሮችዎን ወደሚከተለው ይለውጡ፦ <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">ጣቢያዎች የኩኪ ውሂብ ማስቀመጥ እና ማንበብ ይችላሉ</translation>
 <translation id="6388429472088318283">ቋንቋዎችን ይፈልጉ</translation>
-<translation id="6388771388956873507">በመሣሪያዎ ላይ ያለውን የጣት አሻራ ዳሳሽ ያግኙትና በጣትዎ ይንኩት</translation>
 <translation id="6390799748543157332">በዚህ መስኮት ውስጥ የሚመለከቷቸውን ገጾች በአሰሳ ታሪክዎ ላይ የማይታዩ ሲሆን ሁሉንም የተከፈቱ የእንግዳ መስኮቶችን ከዘጉ በኋላ እንደ ኩኪዎች ያሉ ሌሎች መከታተያዎች በእርስዎ ኮምፒውተር ላይ አይተዉም። ይሁንና ማንኛውም የሚያወርዷቸው ፋይሎች ይቀመጣሉ።</translation>
 <translation id="6390994422085833176">ከማዋቀር በኋላ የስምረት እና ግላዊነት ማላበሻ ባህሪያትን ይገምግሙ</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />የስርዓት መረጃ<ph name="END_LINK1" /> እና <ph name="BEGIN_LINK2" />ልኬቶች<ph name="END_LINK2" /> ይላኩ</translation>
@@ -4122,7 +4112,6 @@
 <translation id="7309257895202129721">&amp;ቁጥጥሮችን አሳይ</translation>
 <translation id="7310598146671372464">በመለያ መግባት አልተሳካም። አገልጋዩ የተጠቀሱትን የKerberos ምሥጠራ ዓይነቶች አይደግፍም። እባክዎ የእርስዎን አስተዳዳሪ ያነጋግሩ።</translation>
 <translation id="7311079019872751559">በማጠሪያ ውስጥ ያልገባ ተሰኪ መዳረሻ</translation>
-<translation id="7311891583377621132">የጣት አሻራውን የተለየ ክፍል ለመያዝ በቀስታ ያንቀሳቅሱት</translation>
 <translation id="7317680720589234980">የማያ ገጽ መቆለፊያ እና የመለያ መግቢያ አማራጮች</translation>
 <translation id="7321545336522791733">አገልጋይ አይደረስበትም</translation>
 <translation id="7324297612904500502">የቅድመ-ይሁንታ ሙከራ መድረክ</translation>
@@ -4967,7 +4956,6 @@
 <translation id="8639047128869322042">ጎጂ ሶፍትዌር ካለ በመፈተሽ ላይ...</translation>
 <translation id="8639963783467694461">የራስ-ሙላ ቅንብሮች</translation>
 <translation id="8642171459927087831">የመዳረሻ ማስመሰያ</translation>
-<translation id="8642267168767642381">ጣት ከልክ በላይ በዝግታ ተንቀሳቅሷል</translation>
 <translation id="8642947597466641025">ጽሑፍ አተልቅ</translation>
 <translation id="8643418457919840804">ለመቀጠል አንድ አማራጭ ይምረጡ፦</translation>
 <translation id="8645354835496065562">የዳሳሽ መዳረሻን መፍቀዱን ቀጥል</translation>
@@ -5328,7 +5316,6 @@
 <translation id="916607977885256133">በሥዕል ላይ ሥዕል</translation>
 <translation id="9169496697824289689">የቁልፍ ሰሌዳ አቋራጮችን ይመልከቱ</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" />ን ወደ መነሻ ገጽ ያክሉ</translation>
-<translation id="9170397650136757332">አሁን ሁሉንም የተለያዩ የጣት አሻራዎን ክፍሎች ለማንሳት ጣትዎን በቀስታ ያንቀሳቅሱት</translation>
 <translation id="9170848237812810038">&amp;ቀልብስ</translation>
 <translation id="9170884462774788842">በኮምፒውተርዎ ላይ ያለ ሌላ ፕሮግራም Chrome የሚሰራበት መንገድ ሊቀይር የሚችል አንድ ገጽታ አክሏል።</translation>
 <translation id="9173995187295789444">የብሉቱዝ መሣሪያዎችን በመቃኘት ላይ...</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 3782efa0..16583458 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">عنصر الرف 5</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>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16 ضعفًا</translation>
 <translation id="127138278192656016">استخدام المزامنة وجميع الخدمات</translation>
 <translation id="1272079795634619415">إيقاف</translation>
-<translation id="1272242203003205253">‏يعمل "شركاء Google" مع "مساعد Google" لتوفير الدعم لك.</translation>
 <translation id="1272978324304772054">لا ينتمي حساب المستخدم هذا إلى النطاق المسجَّل به هذا الجهاز. إذا أردت التسجيل بنطاق مختلف، فيلزمك إجراء استرداد الجهاز أولاً.</translation>
 <translation id="1274977772557788323">‏إعدادات سعة تخزين برنامج Adobe Flash Player</translation>
 <translation id="1274997165432133392">ملفات تعريف الارتباط وبيانات الموقع الأخرى</translation>
@@ -332,6 +332,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>
@@ -367,6 +368,7 @@
 <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">وضع الكشك التلقائي</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">يتعذَّر استخدام هذه الصورة. يُرجى اختيار صورة أخرى.</translation>
 <translation id="1566049601598938765">موقع ويب</translation>
 <translation id="1567387640189251553">تم توصيل لوحة مفاتيح مختلفة منذ آخر إدخال لكلمة المرور، وقد يكون ذلك محاولةً لسرقة ضغطات المفاتيح.</translation>
+<translation id="1567750922576943685">يساعد التحقُّق من هويتك في حماية معلوماتك الشخصية</translation>
 <translation id="1567993339577891801">وحدة تحكم جافا سكريبت</translation>
 <translation id="1568067597247500137">تجاهل الموقع</translation>
 <translation id="1568323446248056064">فتح إعدادات الجهاز للعرض</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">يتعذَّر رصد هاتفك.</translation>
 <translation id="1616206807336925449">لا تتطلب هذه الإضافة أذونات خاصة.</translation>
 <translation id="1616298854599875024">تعذَّر استيراد الإضافة "<ph name="IMPORT_NAME" />" لأنها ليست وحدة مشتركة.</translation>
-<translation id="161707228174452095">تمت إضافة بصمة إصبع!</translation>
 <translation id="1618268899808219593">مركز المساعدة</translation>
 <translation id="162035744160882748">‏تفعيل المزامنة والتخصيص وخدمات Google الأخرى</translation>
 <translation id="1620510694547887537">الكاميرا</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">‏أرشيف RAR</translation>
 <translation id="2034346955588403444">‏إضافة شبكة WiFi أخرى</translation>
 <translation id="203574396658008164">تفعيل تدوين الملاحظات من شاشة التأمين</translation>
-<translation id="2039623879703305659">تم تحريك الإصبع بسرعة كبيرة</translation>
 <translation id="2040460856718599782">عفوًا، حدث خطأ ما أثناء محاولة مصادقتك. يُرجى التحقق جيدًا من بيانات اعتماد تسجيل الدخول وإعادة المحاولة.</translation>
 <translation id="2043818754674261542">المسافة المطلوبة للهاتف لإلغاء قفل جهاز <ph name="DEVICE_TYPE" /> هذا</translation>
 <translation id="204497730941176055">‏اسم قالب الشهادات لـ Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">هل تريد حذف شهادة الخادم "<ph name="CERTIFICATE_NAME" />"؟</translation>
 <translation id="2100273922101894616">تسجيل الدخول التلقائي</translation>
 <translation id="2101225219012730419">الإصدار:</translation>
-<translation id="2107494551712864447">إضافة بصمة إصبع</translation>
 <translation id="2112877397266219826">تشغيل عنصر التحكم باللمس للإعداد</translation>
 <translation id="21133533946938348">تثبيت علامة التبويب</translation>
 <translation id="2113479184312716848">فتح &amp;ملف...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">سطح المكتب</translation>
 <translation id="2526619973349913024">التحقق من وجود تحديث</translation>
 <translation id="2527167509808613699">جميع أنواع الاتصالات</translation>
-<translation id="2532026602297547439">جهاز الاستشعار متسخ</translation>
 <translation id="2532589005999780174">وضع التباين العالي</translation>
 <translation id="253434972992662860">إي&amp;قاف مؤقت</translation>
 <translation id="2534460670861217804">‏خادم وكيل HTTP الآمن</translation>
@@ -1196,6 +1195,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>
@@ -1376,7 +1376,6 @@
 <translation id="3057861065630527966">نسخ الصور والفيديوهات احتياطيًا</translation>
 <translation id="3060379269883947824">تفعيل سماع الاختيار</translation>
 <translation id="3061707000357573562">خدمة رمز التصحيح</translation>
-<translation id="3064410671692449875">بيانات غير كافية</translation>
 <translation id="3065041951436100775">التعليقات المرتبطة بعلامة التبويب المعطلة.</translation>
 <translation id="3067198179881736288">هل تريد تثبيت التطبيق؟</translation>
 <translation id="3067198360141518313">تشغيل هذا المكون الإضافي</translation>
@@ -1509,6 +1508,7 @@
 <translation id="3285322247471302225">&amp;علامة تبويب جديدة</translation>
 <translation id="3288047731229977326">يمكن أن تؤدي الإضافات التي تعمل في وضع مطور البرامج إلى إلحاق الضرر بجهاز الكمبيوتر. إذا لم تكن مطور برامج، فيجب إيقاف هذه الإضافات التي تعمل في وضع مطور البرامج للبقاء في أمان.</translation>
 <translation id="3289856944988573801">‏للتحقق من وجود تحديثات، يُرجى استخدام شبكة Ethernet أو Wi-Fi.</translation>
+<translation id="3292421191230118801">‏استئناف عرض مواقع الويب من الجوّال على جهاز Chromebook</translation>
 <translation id="32939749466444286">‏يتعذَّر بدء حاوية نظام التشغيل Linux. يُرجى إعادة المحاولة.</translation>
 <translation id="3294437725009624529">ضيف</translation>
 <translation id="329838636886466101">الإصلاح</translation>
@@ -1550,6 +1550,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>
@@ -1689,6 +1690,7 @@
 <translation id="3556000484321257665">تم تغيير محرك بحثك إلى <ph name="URL" />.</translation>
 <translation id="3563432852173030730">‏تعذر تنزيل تطبيق Kiosk.</translation>
 <translation id="3564334271939054422">‏قد تتطلب شبكة Wi-Fi التي تستخدمها (<ph name="NETWORK_ID" />) منك الانتقال إلى صفحة تسجيل الدخول.</translation>
+<translation id="3564848315152754834">‏مفتاح أمان USB</translation>
 <translation id="3566721612727112615">لم تتم إضافة أي مواقع</translation>
 <translation id="3569382839528428029">هل تريد من <ph name="APP_NAME" /> مشاركة شاشتك؟</translation>
 <translation id="3570985609317741174">محتوى الويب</translation>
@@ -1739,6 +1741,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">علامة التبويب 1</translation>
 <translation id="3636096452488277381">مرحبًا، <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1760,6 +1763,7 @@
 <translation id="3664511988987167893">رمز الإضافة</translation>
 <translation id="3665589677786828986">‏اكتشف Chrome أن بعض إعداداتك تم إتلافها من قبل برنامج آخر وإعادة تعيينها للحالة التلقائية الأصلية.</translation>
 <translation id="3668570675727296296">إعدادات اللغة</translation>
+<translation id="3668801437375206837">‏من أجل تشخيص أفضل لمشاكل البلوتوث، يمكن لموظفي Google تضمين سجلّات بلوتوث إضافية مع تقارير التعليقات. وعند تحديد هذا الخيار، سيتضمَّن تقريرك سجلّات وحدة تحكُّم المُضيف (HCI) وbtsnoop من الجلسة الحالية، والتوعية بإزالة معلومات تحديد الهوية الشخصية بقدر الإمكان. وسيقتصر الوصول إلى هذه السجلّات على مديري مجموعة منتجات نظام التشغيل Chrome في Listnr. وستُزال السجلّات نهائيًا بعد 90 يومًا.</translation>
 <translation id="3668823961463113931">المعالجات</translation>
 <translation id="3670229581627177274">تشغيل البلوتوث</translation>
 <translation id="3672681487849735243">تم اكتشاف خطأ من المصنع</translation>
@@ -1778,6 +1782,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>
@@ -1801,6 +1806,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>
@@ -1901,6 +1907,7 @@
 <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.</translation>
 <translation id="3865414814144988605">درجة الدقة</translation>
 <translation id="386548886866354912">تجميع مع <ph name="EXTENSION_NAME" /></translation>
@@ -2023,6 +2030,7 @@
 <translation id="4055023634561256217">‏يُتطلب إعادة تشغيل الجهاز حتى يتسنى لك إعادة تعيينه باستخدام Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">عرض في المتجر</translation>
+<translation id="4058647953897694817">التحقُّق عبر البلوتوث</translation>
 <translation id="4058720513957747556">‏AppSocket (بروتوكول TCP/IP)</translation>
 <translation id="4058793769387728514">فحص المستند الآن</translation>
 <translation id="406070391919917862">تطبيقات الخلفية</translation>
@@ -2036,6 +2044,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>
@@ -2135,6 +2144,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>
@@ -2260,8 +2270,8 @@
 <translation id="4480590691557335796">‏يمكن لـ Chrome العثور على البرامج الضارة على جهاز الكمبيوتر وإزالتها.</translation>
 <translation id="4481530544597605423">الأجهزة التي تم إلغاء إقرانها</translation>
 <translation id="4482194545587547824">‏قد يستخدم Google سجل التصفح لتخصيص البحث وخدمات Google الأخرى.</translation>
-<translation id="4493287891836751813">‏التعرُّف على "مساعد Google"</translation>
 <translation id="4495419450179050807">عدم الظهور في هذه الصفحة</translation>
+<translation id="449938344715680828">اضغط على |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| ثم |<ph name="ACCELERATOR3" />| للخروج</translation>
 <translation id="4499718683476608392">تفعيل الملء التلقائي لبطاقة الائتمان لملء النماذج بنقرة واحدة</translation>
 <translation id="4500114933761911433">تعطّل <ph name="PLUGIN_NAME" />.</translation>
 <translation id="450099669180426158">رمز علامة التعجب</translation>
@@ -2315,7 +2325,6 @@
 <translation id="4572659312570518089">تم إلغاء المصادقة أثناء الاتصال بالجهاز "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">ملف <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">المزيد...</translation>
-<translation id="4576537685267142337">ارفع الإصبع، ثم المس جهاز الاستشعار مرة أخرى</translation>
 <translation id="4576541033847873020">إقران جهاز بلوتوث</translation>
 <translation id="4579581181964204535">يتعذّر إرسال <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">هل تريد فعلًا حذف عناصر $1؟</translation>
@@ -2338,6 +2347,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>
@@ -2447,6 +2457,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">بحث</translation>
 <translation id="4801448226354548035">إخفاء الحسابات</translation>
 <translation id="4801512016965057443">السماح بتجوال بيانات الجوال</translation>
@@ -2513,6 +2524,7 @@
 <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>
@@ -2560,7 +2572,6 @@
 <translation id="4941627891654116707">حجم الخط</translation>
 <translation id="494286511941020793">مساعدة تهيئة الخادم الوكيل</translation>
 <translation id="4945444280533270988">‏ميزة Smart Lock مُفعّلة</translation>
-<translation id="494660967831069720">بيانات جزئية</translation>
 <translation id="4953689047182316270">الاستجابة لأحداث إمكانية الوصول</translation>
 <translation id="4953808748584563296">الصورة الرمزية التلقائية البرتقالية</translation>
 <translation id="4955814292505481804">سنوي</translation>
@@ -2985,6 +2996,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>
@@ -3231,6 +3243,7 @@
 <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="5941153596444580863">إضافة شخص...</translation>
@@ -3267,6 +3280,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>
@@ -3277,6 +3291,7 @@
 <translation id="6020431688553761150">لا يسمح لك الخادم بالوصول إلى هذا المورد.</translation>
 <translation id="602251597322198729">يحاول هذا الموقع تنزيل ملفات متعددة. هل تريد السماح بهذا الإجراء؟</translation>
 <translation id="6022526133015258832">فتح في وضع ملء الشاشة</translation>
+<translation id="6022705094403139349">هل أنت مستعد لإقران مفتاح الأمان؟</translation>
 <translation id="6023643151125006053">تم إقفال هذا الجهاز (الرقم التسلسلي: <ph name="SERIAL_NUMBER" />) من خلال مشرف <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">تتبع التكديس</translation>
 <translation id="6026047032548434446">هل تريد تثبيت التطبيق؟</translation>
@@ -3340,6 +3355,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>
@@ -3386,6 +3402,7 @@
 <translation id="6169666352732958425">تعذر إرسال سطح المكتب.</translation>
 <translation id="6171948306033499786">إيقاف الطباعة مؤقتًا</translation>
 <translation id="6175314957787328458">‏المعرّف الفريد العمومي لنطاق Microsoft</translation>
+<translation id="6176043333338857209">سيُفعَّل البلوتوث مؤقتًا للتواصل مع مفتاح الأمان</translation>
 <translation id="6178664161104547336">تحديد شهادة</translation>
 <translation id="6181431612547969857">تم حظر التنزيل</translation>
 <translation id="6185132558746749656">موقع الجهاز</translation>
@@ -3473,6 +3490,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>
@@ -3517,7 +3535,6 @@
 <translation id="6384275966486438344">تغيير إعدادات البحث لـ: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">يمكن للمواقع أن تحفظ وتقرأ بيانات تعريف ملف الارتباط.</translation>
 <translation id="6388429472088318283">البحث عن اللغات</translation>
-<translation id="6388771388956873507">ابحث عن جهاز استشعار بصمات الإصبع على جهازك والمسه بإصبعك</translation>
 <translation id="6390799748543157332">لن تُظهر الصفحات التي تعرضها في هذه النافذة في سجل المتصفح، ولن تترك أي آثار أخرى، مثل ملفات تعريف الارتباط، في الكمبيوتر بعد إغلاق جميع النوافذ المفتوحة بالضيف. ومع هذا سيتم الاحتفاظ بأي ملفات يتم تنزيلها.</translation>
 <translation id="6390994422085833176">مراجعة ميزات المزامنة والتخصيص بعد اكتمال عملية الإعداد</translation>
 <translation id="6395423953133416962">إرسال <ph name="BEGIN_LINK1" />معلومات النظام<ph name="END_LINK1" /> و<ph name="BEGIN_LINK2" />المقاييس<ph name="END_LINK2" /></translation>
@@ -3529,6 +3546,7 @@
 <translation id="6399774419735315745">الجاسوسة</translation>
 <translation id="6401445054534215853">بند الرف 1</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>
@@ -3647,6 +3665,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - تمت مشاركة محتوى سطح المكتب</translation>
 <translation id="6580151766480067746">‏إصدار ARC</translation>
 <translation id="6581162200855843583">‏رابط Google Drive</translation>
+<translation id="6582080224869403177">يُرجى إعادة ضبط <ph name="DEVICE_TYPE" /> لترقية الأمان.</translation>
 <translation id="6582421931165117398">لحماية معلوماتك الشخصية، غيِّر كلمة مرورك الآن. قبل أن تتمكن من تغيير كلمة مرورك، سيُطلب منك تسجيل الدخول.</translation>
 <translation id="6583851739559471707">تم الحظر على مواقع الويب التي تميل إلى عرض إعلانات متداخلة (مستحسن)</translation>
 <translation id="6584878029876017575">‏التوقيع مدى الحياة لـ Microsoft</translation>
@@ -3696,6 +3715,7 @@
 <translation id="6644846457769259194">جارٍ تحديث جهازك (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">‏عنوان URL لإبطال المرجع المصدق لـ Netscape</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>
@@ -3771,6 +3791,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>
@@ -3806,6 +3827,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>
@@ -3839,6 +3861,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>
@@ -4004,6 +4027,7 @@
 <translation id="713122686776214250">إضافة &amp;صفحة...</translation>
 <translation id="7133578150266914903">‏يعمل المشرف على إعادة النسخة السابقة من نظام التشغيل Chrome إلى هذا الجهاز(<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>
@@ -4049,6 +4073,7 @@
 <translation id="7201118060536064622">تم حذف "<ph name="DELETED_ITEM_NAME" />"</translation>
 <translation id="7206693748120342859">جارٍ تنزيل <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{الخروج من الصفجة}zero{الخروج من صفحة}two{الخروج من الصفحتين}few{الخروج من صفحات}many{الخروج من صفحة}other{الخروج من صفحة}}</translation>
+<translation id="721467499098558573">اضغط مع الاستمرار على الزر في مفتاح الأمان لمدة لا تقل عن 5 ثوانٍ</translation>
 <translation id="7216409898977639127">موفر شبكة الجوّال</translation>
 <translation id="7216595297012131718">ترتيب اللغات حسب تفضيلك</translation>
 <translation id="7220019174139618249">تعذّر تصدير كلمات المرور إلى "<ph name="FOLDER" />"</translation>
@@ -4084,6 +4109,7 @@
 <translation id="7256710573727326513">فتح في علامة تبويب</translation>
 <translation id="725758059478686223">خدمة الطباعة</translation>
 <translation id="7257666756905341374">قراءة البيانات التي نسختها ولصقتها</translation>
+<translation id="7260764918845374269">للاطّلاع على مفتاح الأمان، يجب أن تكون في وضع الإقران. اضغط على الزر في مفتاح الأمان لمدة لا تقل عن 5 ثوانٍ.</translation>
 <translation id="7262004276116528033">يستضيف <ph name="SAML_DOMAIN" /> خدمة تسجيل الدخول هذه.</translation>
 <translation id="7268365133021434339">إغلاق علامات التبويب</translation>
 <translation id="7268659760406822741">الخدمات المتوفرة</translation>
@@ -4120,7 +4146,6 @@
 <translation id="7309257895202129721">عرض &amp;عناصر التحكم</translation>
 <translation id="7310598146671372464">‏تعذّر تسجيل الدخول لأن الخادم لا يدعم أنواع تشفير Kerberos المحدَّدة. يُرجى الاتصال بمشرفك.</translation>
 <translation id="7311079019872751559">الوصول إلى المكون الإضافي دون استخدام وضع الحماية</translation>
-<translation id="7311891583377621132">التحرك قليلاً لالتقاط جزء مختلف من بصمة الإصبع</translation>
 <translation id="7317680720589234980">خيارات تسجيل الدخول وقفل الشاشة</translation>
 <translation id="7321545336522791733">خادم يتعذر الوصول إليه</translation>
 <translation id="7324297612904500502">منتدى الإصدار التجريبي</translation>
@@ -4202,6 +4227,7 @@
 <translation id="7464490149090366184">تعذّر الضغط، العناصر الموجودة: "$1"</translation>
 <translation id="7465778193084373987">‏عنوان URL لإبطال شهادة Netscape</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="7473753388963818366">لنبدأ بإعداد الجهاز <ph name="DEVICE_TYPE" /> لك</translation>
@@ -4252,6 +4278,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>
@@ -4354,6 +4381,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>
@@ -4569,6 +4597,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>
@@ -4701,6 +4730,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>
@@ -4795,6 +4825,7 @@
 <translation id="8353683614194668312">يمكنه:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">هل تريد استعادة الصفحات؟</translation>
+<translation id="8362993567435070757">العثور على رقم التعريف الشخصي المكوَّن من 6 أرقام في الجزء الخلفي للمفتاح</translation>
 <translation id="8363095875018065315">ثابتة</translation>
 <translation id="8363142353806532503">تم حظر استخدام الميكروفون</translation>
 <translation id="8366396658833131068">تمت استعادة اتصال الشبكة. يُرجى تحديد شبكة أخرى أو الضغط على الزر "متابعة" أدناه لتشغيل تطبيق الكشك.</translation>
@@ -4803,6 +4834,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>
@@ -4921,6 +4953,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>
@@ -4961,7 +4994,6 @@
 <translation id="8639047128869322042">جارٍ التحقق من البرامج الضارة...</translation>
 <translation id="8639963783467694461">إعدادات الملء التلقائي</translation>
 <translation id="8642171459927087831">رمز الدخول المميز</translation>
-<translation id="8642267168767642381">تم تحريك الإصبع ببطء شديد</translation>
 <translation id="8642947597466641025">لتكبير النص</translation>
 <translation id="8643418457919840804">للاستمرار، يُرجى تحديد خيار:</translation>
 <translation id="8645354835496065562">مواصلة السماح بالوصول إلى أجهزة الاستشعار</translation>
@@ -4976,6 +5008,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>
@@ -5098,6 +5131,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>
@@ -5128,11 +5162,13 @@
 <translation id="8872155268274985541">‏يوجد ملف غير صالح لبيان التحديث الخارجي لتطبيق Kiosk. اخفق تحديث تطبيق Kiosk. يُرجى إزالة جهاز 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>
@@ -5153,6 +5189,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>
@@ -5261,6 +5298,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>
@@ -5322,7 +5360,6 @@
 <translation id="916607977885256133">نافذة ضمن النافذة</translation>
 <translation id="9169496697824289689">عرض اختصارات لوحة المفاتيح</translation>
 <translation id="9169931577761441333">إضافة تطبيق <ph name="APP_NAME" /> إلى الشاشة الرئيسية</translation>
-<translation id="9170397650136757332">حرِّك الآن إصبعك قليلاً لالتقاط جميع الأجزاء المختلفة لبصمة إصبعك</translation>
 <translation id="9170848237812810038">&amp;إلغاء</translation>
 <translation id="9170884462774788842">‏أضاف برنامج آخر بجهاز الكمبيوتر مظهرًا قد يؤدي إلى تغيير طريقة عمل Chrome.</translation>
 <translation id="9173995187295789444">جارٍ البحث عن أجهزة بلوتوث...</translation>
@@ -5386,6 +5423,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_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 8ea0eff..7b0754b8 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Използване на синхронизиране и всички услуги</translation>
 <translation id="1272079795634619415">Стоп</translation>
-<translation id="1272242203003205253">Партньорите на Google работят с Асистент, за да ви помагат</translation>
 <translation id="1272978324304772054">Този профил на потребител не принадлежи на домейна, с който е записано устройството.  Ако искате да регистрирате устройството с друг домейн, първо трябва да преминете през процеса на възстановяване.</translation>
 <translation id="1274977772557788323">Настройки за хранилището на Adobe Flash Player</translation>
 <translation id="1274997165432133392">„Бисквитки“ и други данни за сайтове</translation>
@@ -414,7 +413,6 @@
 <translation id="161460670679785907">Телефонът ви не може да бъде намерен</translation>
 <translation id="1616206807336925449">Това разширение не изисква специални разрешения.</translation>
 <translation id="1616298854599875024">Разширението <ph name="IMPORT_NAME" /> не може да бъде импортирано, защото не е споделен модул</translation>
-<translation id="161707228174452095">Отпечатъкът е добавен!</translation>
 <translation id="1618268899808219593">П&amp;омощен център</translation>
 <translation id="162035744160882748">Включване на синхронизирането, персонализирането и други услуги на Google</translation>
 <translation id="1620510694547887537">Камера</translation>
@@ -692,7 +690,6 @@
 <translation id="2028997212275086731">RAR архив</translation>
 <translation id="2034346955588403444">Добавяне на друга Wi-Fi мрежа</translation>
 <translation id="203574396658008164">Активиране на функцията за водене на бележки от заключения екран</translation>
-<translation id="2039623879703305659">Движихте пръста си твърде бързо</translation>
 <translation id="2040460856718599782">Ами сега! При опита да ви удостоверим нещо се обърка. Моля, проверете идентификационните си данни за вход и опитайте отново.</translation>
 <translation id="2043818754674261542">Разстояние, от което телефонът може да отключи този <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Име на шаблон за сертификат от Microsoft</translation>
@@ -736,7 +733,6 @@
 <translation id="2099686503067610784">Да се изтрие ли сертификатът на сървър „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Автоматичен вход</translation>
 <translation id="2101225219012730419">Версия:</translation>
-<translation id="2107494551712864447">Добавяне на отпечатък</translation>
 <translation id="2112877397266219826">Включете контролера за докосване, за да извършите настройването</translation>
 <translation id="21133533946938348">Фиксиране на раздела</translation>
 <translation id="2113479184312716848">&amp;Отваряне на файл...</translation>
@@ -1015,7 +1011,6 @@
 <translation id="2526590354069164005">Работен плот</translation>
 <translation id="2526619973349913024">Проверка за актуализации</translation>
 <translation id="2527167509808613699">Каквато и да е връзка</translation>
-<translation id="2532026602297547439">Сензорът е замърсен</translation>
 <translation id="2532589005999780174">Режим на висок контраст</translation>
 <translation id="253434972992662860">&amp;Пауза</translation>
 <translation id="2534460670861217804">Защитен HTTP прокси сървър</translation>
@@ -1374,7 +1369,6 @@
 <translation id="3057861065630527966">Създаване на резервни копия на снимките и видеоклиповете ви</translation>
 <translation id="3060379269883947824">Активиране на функцията Прочитане на глас</translation>
 <translation id="3061707000357573562">Услуга за корекции</translation>
-<translation id="3064410671692449875">Недостатъчно данни</translation>
 <translation id="3065041951436100775">Отзиви за затворен раздел.</translation>
 <translation id="3067198179881736288">Да се инсталира ли приложението?</translation>
 <translation id="3067198360141518313">Стартиране на тази приставка</translation>
@@ -2264,7 +2258,6 @@
 <translation id="4480590691557335796">Chrome може да намери опасния софтуер на компютъра ви и да го премахне</translation>
 <translation id="4481530544597605423">Несдвоени устройства</translation>
 <translation id="4482194545587547824">Възможно е да използваме историята ви на сърфиране, за да персонализираме търсенето и други услуги на Google</translation>
-<translation id="4493287891836751813">Запознайте се с Google Асистент</translation>
 <translation id="4495419450179050807">Да не се показва на тази страница</translation>
 <translation id="4499718683476608392">Активирайте автоматичното попълване на кредитни карти, за да ги въвеждате във формуляри само с едно кликване</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> претърпя срив</translation>
@@ -2319,7 +2312,6 @@
 <translation id="4572659312570518089">Удостоверяването бе анулирано при установяването на връзка с/ъс <ph name="DEVICE_NAME" />.</translation>
 <translation id="4572815280350369984">Файл от тип <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Още...</translation>
-<translation id="4576537685267142337">Вдигнете пръста си, след което докоснете сензора отново</translation>
 <translation id="4576541033847873020">Сдвояване на устройство с Bluetooth</translation>
 <translation id="4579581181964204535">Предаването на <ph name="HOST_NAME" /> не е възможно.</translation>
 <translation id="4580526846085481512">Наистина ли искате да изтриете $1 елемента?</translation>
@@ -2564,7 +2556,6 @@
 <translation id="4941627891654116707">Размер на шрифта</translation>
 <translation id="494286511941020793">Помощ за конфигурация на прокси сървър</translation>
 <translation id="4945444280533270988">Включихте Smart Lock</translation>
-<translation id="494660967831069720">Частични данни</translation>
 <translation id="4953689047182316270">Реагиране на събития за достъпност</translation>
 <translation id="4953808748584563296">Стандартен оранжев аватар</translation>
 <translation id="4955814292505481804">Годишен</translation>
@@ -3522,7 +3513,6 @@
 <translation id="6384275966486438344">Променете настройките си за търсене на: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Сайтовете могат да запазват и четат данни за „бисквитки“</translation>
 <translation id="6388429472088318283">Търсене в езиците</translation>
-<translation id="6388771388956873507">Намерете сензора за отпечатъци на устройството си и го докоснете с пръст</translation>
 <translation id="6390799748543157332">Преглежданите от вас страници в този прозорец няма да се показват в историята на браузъра и няма да оставят на компютъра други следи, като „бисквитки“, след като затворите всички прозорци в режим като гост. Изтеглените от вас файлове обаче ще бъдат запазени.</translation>
 <translation id="6390994422085833176">Преглед на функциите за синхронизиране и персонализиране след настройването</translation>
 <translation id="6395423953133416962">Изпращане на <ph name="BEGIN_LINK1" />системна информация<ph name="END_LINK1" /> и <ph name="BEGIN_LINK2" />показатели<ph name="END_LINK2" /></translation>
@@ -4125,7 +4115,6 @@
 <translation id="7309257895202129721">Показване на &amp;контролите</translation>
 <translation id="7310598146671372464">Влизането в профила не бе успешно. Сървърът не поддържа посочените типове шифроване в Kerberos. Моля, обърнете се към администратора си.</translation>
 <translation id="7311079019872751559">Достъп до приставките извън тестова среда</translation>
-<translation id="7311891583377621132">Преместете малко пръста си, за да бъде заснета друга част от отпечатъка</translation>
 <translation id="7317680720589234980">Опции за заключване на екрана и влизане в профила</translation>
 <translation id="7321545336522791733">Няма достъп до сървъра</translation>
 <translation id="7324297612904500502">Форум за бета версията</translation>
@@ -4965,7 +4954,6 @@
 <translation id="8639047128869322042">Извършва се проверка за опасен софтуер...</translation>
 <translation id="8639963783467694461">Настройки за автоматично попълване</translation>
 <translation id="8642171459927087831">Означение за достъп</translation>
-<translation id="8642267168767642381">Движихте пръста си твърде бавно</translation>
 <translation id="8642947597466641025">Шрифтът на текста се уголемява</translation>
 <translation id="8643418457919840804">За да продължите, изберете опция:</translation>
 <translation id="8645354835496065562">Достъпът до сензорите да продължи да е разрешен</translation>
@@ -5326,7 +5314,6 @@
 <translation id="916607977885256133">Картина в картината</translation>
 <translation id="9169496697824289689">Преглед на клавишните комбинации</translation>
 <translation id="9169931577761441333">Добавяне на <ph name="APP_NAME" /> към началния екран</translation>
-<translation id="9170397650136757332">Сега преместете малко пръста си, за да бъдат заснети всички части от отпечатъка ви</translation>
 <translation id="9170848237812810038">&amp;Отмяна</translation>
 <translation id="9170884462774788842">Друга програма на компютъра ви добави тема, която може да промени начина на работа на Chrome.</translation>
 <translation id="9173995187295789444">Сканира се за устройства с Bluetooth...</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 1a4652d..24d5c51e 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">১৬x</translation>
 <translation id="127138278192656016">সিঙ্ক এবং সমস্ত পরিষেবা ব্যবহার করুন</translation>
 <translation id="1272079795634619415">বন্ধ</translation>
-<translation id="1272242203003205253">আপনাকে সাহায্য করতে Google পার্টনাররা অ্যাসিস্ট্যান্টের সাথে কাজ করে</translation>
 <translation id="1272978324304772054">এই ডিভাইসটি যে ডোমেনের অন্তর্গত সেটার সাথে এই ব্যবহারকারীর অ্যাকাউন্টটি নথিভুক্ত করা হয় নি। যদি আপনি কোনো অন্য ডোমেনের সাথে জুড়তে চান তাহলে সবার প্রথমে ডিভাইস পুনরুদ্ধার করা প্রয়োজন।</translation>
 <translation id="1274977772557788323">Adobe Flash Player সঞ্চয়স্থান সেটিংস...</translation>
 <translation id="1274997165432133392">কুকিজ এবং অন্য সাইট ডেটা</translation>
@@ -415,7 +414,6 @@
 <translation id="161460670679785907">আপনার ফোনটি শনাক্ত করা যায়নি</translation>
 <translation id="1616206807336925449">এই এক্সটেনশনটির কোনো বিশেষ অনুমতির প্রয়োজন নেই।</translation>
 <translation id="1616298854599875024">এটি একটি শেয়ার করা মডিউল না হওয়ার কারণে <ph name="IMPORT_NAME" /> এক্সটেনশন ইমপোর্ট করা যাচ্ছে না</translation>
-<translation id="161707228174452095">আঙ্গুলের ছাপ যোগ করা হয়েছে!</translation>
 <translation id="1618268899808219593">সহায়তা কেন্দ্র</translation>
 <translation id="162035744160882748">সিঙ্ক, ব্যক্তিগতকরণ এবং অন্যান্য Google পরিষেবাগুলি চালু করুন</translation>
 <translation id="1620510694547887537">ক্যামেরা</translation>
@@ -692,7 +690,6 @@
 <translation id="2028997212275086731">RAR আর্কাইভ</translation>
 <translation id="2034346955588403444">অন্য ওয়াই ফাই নেটওয়ার্ক যোগ করুন</translation>
 <translation id="203574396658008164">লক স্ক্রিন থেকেই নোট নেওয়া সক্ষম করুন</translation>
-<translation id="2039623879703305659">আঙ্গুল অতি দ্রুত সরানো হয়েছে</translation>
 <translation id="2040460856718599782">ওহো! আপনাকে প্রমাণীকরণ করতে চেষ্টা করার সময় কিছু ত্রুটি হয়েছিল৷  দয়া করে আপনার লগ-ইন শংসাপত্রাদি আবার পরীক্ষা করে আবার চেষ্টা করুন৷</translation>
 <translation id="2043818754674261542">এই <ph name="DEVICE_TYPE" /> আনলক করার জন্য দূরত্ব প্রয়োজন</translation>
 <translation id="204497730941176055">Microsoft শংসাপত্র টেম্পলেট নাম</translation>
@@ -736,7 +733,6 @@
 <translation id="2099686503067610784">সার্ভার শংসাপত্র "<ph name="CERTIFICATE_NAME" />" মুছবেন?</translation>
 <translation id="2100273922101894616">স্বতঃ সাইন-ইন</translation>
 <translation id="2101225219012730419">সংস্করণ:</translation>
-<translation id="2107494551712864447">একটি আঙ্গুলের ছাপ যোগ করুন</translation>
 <translation id="2112877397266219826">আমাকে সেট করতে আপনার স্পর্শ নিয়ন্ত্রক চালু করুন</translation>
 <translation id="21133533946938348">ট্যাব পিন করুন</translation>
 <translation id="2113479184312716848">Open &amp;File...</translation>
@@ -1012,7 +1008,6 @@
 <translation id="2526590354069164005">ডেস্কটপ</translation>
 <translation id="2526619973349913024">আপডেট চেক করুন</translation>
 <translation id="2527167509808613699">যেকোনও প্রকারের কানেকশন</translation>
-<translation id="2532026602297547439">সেন্সর অপরিষ্কার</translation>
 <translation id="2532589005999780174">উচ্চ কনট্রাস্ট মোড</translation>
 <translation id="253434972992662860">&amp;বিরাম</translation>
 <translation id="2534460670861217804">সুরক্ষিত HTTP প্রক্সী</translation>
@@ -1372,7 +1367,6 @@
 <translation id="3057861065630527966">আপনার ফটো ও ভিডিওগুলির ব্যাকআপ নিন</translation>
 <translation id="3060379269883947824">'বাছুন ও শুনুন' চালু করুন</translation>
 <translation id="3061707000357573562">প্যাচ পরিষেবা</translation>
-<translation id="3064410671692449875">অপর্যাপ্ত ডেটা</translation>
 <translation id="3065041951436100775">ট্যাব নষ্ট হওয়ার প্রতিক্রিয়া।</translation>
 <translation id="3067198179881736288">অ্যাপ ইনস্টল করবেন?</translation>
 <translation id="3067198360141518313">এই প্লাগ ইনটি চালনা করুন</translation>
@@ -2308,7 +2302,6 @@
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" এ সংযুক্ত করার সময় প্রমাণীকরণ বাতিল করা হয়েছে৷</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ফাইল</translation>
 <translation id="457386861538956877">আরও...</translation>
-<translation id="4576537685267142337">আঙ্গুল তুলুন, তারপরে আবার সেন্সরে স্পর্শ করুন</translation>
 <translation id="4576541033847873020">ব্লুটুথ ডিভাইস যুক্ত করুন</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> কাস্ট করতে ব্যর্থ হয়েছে।</translation>
 <translation id="4580526846085481512">আপনি কি "$1" আইটেম মুছতে চান?</translation>
@@ -2551,7 +2544,6 @@
 <translation id="4941627891654116707">হরফের মাপ</translation>
 <translation id="494286511941020793">প্রক্সি কনফিগারেশন সহায়তা</translation>
 <translation id="4945444280533270988">Smart Lock চালু রয়েছে</translation>
-<translation id="494660967831069720">আংশিক ডেটা</translation>
 <translation id="4953689047182316270">অ্যাক্সেসযোগ্যতা সংক্রান্ত ইভেন্টে প্রতিক্রিয়া দিতে চায়</translation>
 <translation id="4953808748584563296">ডিফল্ট কমলা রঙের অবতার</translation>
 <translation id="4955814292505481804">বার্ষিক</translation>
@@ -3506,7 +3498,6 @@
 <translation id="6384275966486438344">আপনার সার্চের সেটিংস এ পরিবর্তন করুন: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">সাইটগুলি কুকি ডেটা সংরক্ষণ করতে ও পড়তে পারে</translation>
 <translation id="6388429472088318283">ভাষাগুলি সার্চ করুন</translation>
-<translation id="6388771388956873507">আপনার ডিভাইসে আঙ্গুলের ছাপ নেওয়ার সেন্সরটি খুঁজে নিয়ে সেটিকে আপনার আঙুল দিয়ে স্পর্শ করুন</translation>
 <translation id="6390799748543157332">এই উইন্ডোতে আপনি যে পৃষ্ঠাগুলি দেখেন তা ব্রাউজারের ইতিহাসে উপস্থিত হবে না, এবং আপনি সমস্ত খোলা অতিথি উইন্ডো বন্ধ করার পরে এগুলি কম্পিউটারটিতে কুকিজের মতো অন্যান্য ট্রেসগুলিও রেখে যাবে না৷ যদিও আপনার ডাউনলোড করা যেকোনো ফাইল সংরক্ষিত করা হবে৷</translation>
 <translation id="6390994422085833176">সেট-আপ হওয়ার পর সিঙ্ক এবং আপনার জন্য তৈরি বৈশিষ্ট্যগুলি পর্যালোচনা করুন</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />সিস্টেমের তথ্য<ph name="END_LINK1" /> এবং <ph name="BEGIN_LINK2" />মেট্রিক্স<ph name="END_LINK2" /> পাঠান</translation>
@@ -4104,7 +4095,6 @@
 <translation id="7309257895202129721">&amp;নিয়ন্ত্রণগুলি দেখান</translation>
 <translation id="7310598146671372464">লগ-ইন করা সম্ভব হয়নি। সার্ভারটি নির্দিষ্ট Kerberos এনক্রিপশনের ধরনগুলি সমর্থন করে না। আপনার অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।</translation>
 <translation id="7311079019872751559">আনসান্ডবক্সড প্ল্যাগ ইন অ্যাক্সেস</translation>
-<translation id="7311891583377621132">আঙ্গুলের ছাপের বিভিন্ন অংশ ক্যাপচার করতে সেটি এদিক ওদিক সরান</translation>
 <translation id="7317680720589234980">স্ক্রিন লক এবং সাইন-ইনের বিকল্প</translation>
 <translation id="7321545336522791733">সার্ভারে সংযোগ করা যাচ্ছে না</translation>
 <translation id="7324297612904500502">বিটা ফোরাম</translation>
@@ -4942,7 +4932,6 @@
 <translation id="8639047128869322042">ক্ষতিকর সফ্টওয়্যার খোঁজা হচ্ছে...</translation>
 <translation id="8639963783467694461">স্বতঃপূর্ণ সেটিংস</translation>
 <translation id="8642171459927087831">অ্যাক্সেস টোকেন</translation>
-<translation id="8642267168767642381">আঙ্গুল খুব ধীরে সরানো হয়েছে</translation>
 <translation id="8642947597466641025">পাঠ্যকে আরও বড় করুন</translation>
 <translation id="8643418457919840804">চালিয়ে যেতে, একটি বিকল্প বেছে নিন:</translation>
 <translation id="8645354835496065562">সেন্সর অ্যাক্সেস করার অনুমতি চালু রাখুন</translation>
@@ -5302,7 +5291,6 @@
 <translation id="916607977885256133">ছবির-মধ্যে-ছবি</translation>
 <translation id="9169496697824289689">কীবোর্ড শর্টকাটগুলি দেখুন</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" /> অ্যাপটি হোম স্ক্রিনে যোগ করুন</translation>
-<translation id="9170397650136757332">এবার আপনার আঙ্গুলের ছাপের সমস্ত অংশ ক্যাপচার করতে আপনার আঙ্গুল সামান্য সরান</translation>
 <translation id="9170848237812810038">&amp;পূর্বাবস্থায় ফিরুন</translation>
 <translation id="9170884462774788842">আপনার কম্পিউটারের অন্য একটি প্রোগ্রাম একটি থিম জুড়েছে যা Chrome এর কাজ করার পদ্ধতিকে পাল্টে দিতে পারে৷</translation>
 <translation id="9173995187295789444">ব্লুটুথ ডিভাইসগুলির জন্য স্ক্যান করা হচ্ছে...</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 46ce158..172b11c8 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Fes servir la sincronització i tots els serveis</translation>
 <translation id="1272079795634619415">Atura</translation>
-<translation id="1272242203003205253">Els col·laboradors de Google treballen amb l'Assistent per ajudar-te</translation>
 <translation id="1272978324304772054">Aquest compte d'usuari no pertany al domini on s'ha registrat el dispositiu. Si el voleu registrar en un domini diferent, primer cal que apliqueu el procés de recuperació del dispositiu.</translation>
 <translation id="1274977772557788323">Configuració d'emmagatzematge d'Adobe Flash Player</translation>
 <translation id="1274997165432133392">Galetes i altres dades dels llocs web</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">No es pot detectar el telèfon</translation>
 <translation id="1616206807336925449">Aquesta extensió no requereix cap permís especial.</translation>
 <translation id="1616298854599875024">L'extensió <ph name="IMPORT_NAME" /> no es pot importar perquè no és un mòdul compartit</translation>
-<translation id="161707228174452095">L'empremta digital s'ha afegit.</translation>
 <translation id="1618268899808219593">Centre d'ajuda</translation>
 <translation id="162035744160882748">Activa la sincronització, la personalització i altres serveis de Google</translation>
 <translation id="1620510694547887537">Càmera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">Arxiu RAR</translation>
 <translation id="2034346955588403444">Afegeix una altra xarxa Wi-Fi</translation>
 <translation id="203574396658008164">Activa la presa de notes des de la pantalla de bloqueig</translation>
-<translation id="2039623879703305659">El dit s'ha mogut massa ràpid</translation>
 <translation id="2040460856718599782">S'ha produït un error quan provàvem d'autenticar-vos. Comproveu les vostres credencials d'inici de sessió i torneu-ho a provar.</translation>
 <translation id="2043818754674261542">Distància necessària perquè el telèfon desbloquegi aquest <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Nom de plantilla de certificat de Microsoft</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Voleu suprimir el certificat de servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Inici de sessió automàtic</translation>
 <translation id="2101225219012730419">Versió:</translation>
-<translation id="2107494551712864447">Afegeix una empremta digital</translation>
 <translation id="2112877397266219826">Activeu el comandament tàctil per configurar-me</translation>
 <translation id="21133533946938348">Fixa la pestanya</translation>
 <translation id="2113479184312716848">Obre un &amp;fitxer...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Escriptori</translation>
 <translation id="2526619973349913024">Cerca actualitzacions</translation>
 <translation id="2527167509808613699">Qualsevol tipus de connexió</translation>
-<translation id="2532026602297547439">El sensor està brut</translation>
 <translation id="2532589005999780174">Mode d'alt contrast</translation>
 <translation id="253434972992662860">P&amp;ausa</translation>
 <translation id="2534460670861217804">Servidor intermediari HTTP segur</translation>
@@ -1376,7 +1371,6 @@
 <translation id="3057861065630527966">Crea una còpia de seguretat de les fotos i dels vídeos</translation>
 <translation id="3060379269883947824">Activa Escolta la selecció</translation>
 <translation id="3061707000357573562">Servei de pedaç</translation>
-<translation id="3064410671692449875">Dades insuficients</translation>
 <translation id="3065041951436100775">Suggeriments sobre el tancament sobtat de la pestanya</translation>
 <translation id="3067198179881736288">Vols instal·lar l'aplicació?</translation>
 <translation id="3067198360141518313">Executa aquest connector</translation>
@@ -2262,7 +2256,6 @@
 <translation id="4480590691557335796">Chrome pot cercar programari perjudicial a l'ordinador i suprimir-lo</translation>
 <translation id="4481530544597605423">Dispositius desvinculats</translation>
 <translation id="4482194545587547824">És possible que Google utilitzi el vostre historial de navegació per personalitzar la Cerca i altres serveis de Google</translation>
-<translation id="4493287891836751813">Et presentem el teu Assistent de Google</translation>
 <translation id="4495419450179050807">No la mostris en aquesta pàgina</translation>
 <translation id="4499718683476608392">Permet que la funció Emplenament automàtic de targetes de crèdit empleni els formularis amb un sol clic</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ha fallat</translation>
@@ -2317,7 +2310,6 @@
 <translation id="4572659312570518089">S'ha cancel·lat l'autenticació mentre es connectava a "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">Fitxer <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Més...</translation>
-<translation id="4576537685267142337">Aixeca el dit i, a continuació, torna a tocar el sensor</translation>
 <translation id="4576541033847873020">Vincula un dispositiu Bluetooth</translation>
 <translation id="4579581181964204535">No es pot emetre <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Confirmes que vols suprimir  $1 elements?</translation>
@@ -2563,7 +2555,6 @@
 <translation id="4941627891654116707">Mida de la lletra</translation>
 <translation id="494286511941020793">Ajuda per configurar servidors intermediaris</translation>
 <translation id="4945444280533270988">Smart Lock està activat</translation>
-<translation id="494660967831069720">Dades parcials</translation>
 <translation id="4953689047182316270">Respondre als esdeveniments d'accessibilitat</translation>
 <translation id="4953808748584563296">Avatar taronja predeterminat</translation>
 <translation id="4955814292505481804">Anual</translation>
@@ -3522,7 +3513,6 @@
 <translation id="6384275966486438344">Canvia la configuració de la cerca a: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Els llocs poden desar i llegir dades de galetes</translation>
 <translation id="6388429472088318283">Cerca idiomes</translation>
-<translation id="6388771388956873507">Localitza el sensor d'empremtes digitals al dispositiu i toca'l amb el dit</translation>
 <translation id="6390799748543157332">Les pàgines que visualitzeu en aquesta finestra no es mostraran a l'historial del navegador i no deixaran cap altre rastre a l'ordinador, com ara galetes, després de tancar totes les finestres obertes de la sessió de convidat. No obstant això, es conservaran tots els fitxers que baixeu.</translation>
 <translation id="6390994422085833176">Vull revisar les funcions de sincronització i personalització després de la configuració</translation>
 <translation id="6395423953133416962">Envia les <ph name="BEGIN_LINK2" />mètriques<ph name="END_LINK2" /> i la <ph name="BEGIN_LINK1" />informació del sistema<ph name="END_LINK1" /></translation>
@@ -4124,7 +4114,6 @@
 <translation id="7309257895202129721">Mostra els &amp;controls</translation>
 <translation id="7310598146671372464">No s'ha pogut iniciar la sessió. El servidor no admet els tipus d'encriptació de Kerberos especificats. Contacta amb l'administrador.</translation>
 <translation id="7311079019872751559">Accés del connector de fora de la zona de proves</translation>
-<translation id="7311891583377621132">Mou el dit lleugerament perquè es pugui captar una altra part de l’empremta digital</translation>
 <translation id="7317680720589234980">Opcions de bloqueig de pantalla i d'inici de sessió</translation>
 <translation id="7321545336522791733">No s'ha pogut accedir al servidor</translation>
 <translation id="7324297612904500502">Fòrum per a la versió beta</translation>
@@ -4962,7 +4951,6 @@
 <translation id="8639047128869322042">S'està cercant programari maliciós...</translation>
 <translation id="8639963783467694461">Configuració d'Emplenament automàtic</translation>
 <translation id="8642171459927087831">Testimoni d'accés</translation>
-<translation id="8642267168767642381">El dit s'ha mogut massa lentament</translation>
 <translation id="8642947597466641025">Fa el text més gran</translation>
 <translation id="8643418457919840804">Per continuar, tria una opció:</translation>
 <translation id="8645354835496065562">Continua permetent l'accés als sensors</translation>
@@ -5323,7 +5311,6 @@
 <translation id="916607977885256133">Pantalla en pantalla</translation>
 <translation id="9169496697824289689">Mostra les tecles de drecera</translation>
 <translation id="9169931577761441333">Afegeix <ph name="APP_NAME" /> a la pantalla d'inici</translation>
-<translation id="9170397650136757332">Ara mou el dit lleugerament perquè es pugui captar l’empremta digital sencera</translation>
 <translation id="9170848237812810038">&amp;Desfés</translation>
 <translation id="9170884462774788842">Un altre programa de l'ordinador ha afegit un tema que pot canviar el funcionament de Chrome.</translation>
 <translation id="9173995187295789444">S'estan cercant dispositius Bluetooth...</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 935d1b0..f836f38 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16×</translation>
 <translation id="127138278192656016">Používat synchronizaci a všechny služby</translation>
 <translation id="1272079795634619415">Zastavit</translation>
-<translation id="1272242203003205253">Asistent vám pomáhá ve spolupráci s partnery Googlu</translation>
 <translation id="1272978324304772054">Tento uživatelský účet nepatří do domény, do které je zaregistrováno toto zařízení. Chcete-li se zaregistrovat do jiné domény, je nutné nejdříve provést obnovení zařízení.</translation>
 <translation id="1274977772557788323">Nastavení úložiště přehrávače Adobe Flash Player</translation>
 <translation id="1274997165432133392">Soubory cookie a jiná data webů</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Telefon se nepodařilo najít</translation>
 <translation id="1616206807336925449">Toto rozšíření vyžaduje speciální oprávnění.</translation>
 <translation id="1616298854599875024">Rozšíření <ph name="IMPORT_NAME" /> nelze importovat, protože se nejedná o sdílený modul</translation>
-<translation id="161707228174452095">Otisk byl přidán!</translation>
 <translation id="1618268899808219593">C&amp;entrum nápovědy</translation>
 <translation id="162035744160882748">Zapnout synchronizaci, personalizaci a další služby Google</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">Archiv ve formátu RAR</translation>
 <translation id="2034346955588403444">Přidat jinou síť Wi-Fi</translation>
 <translation id="203574396658008164">Povolit psaní poznámek na obrazovce uzamčení</translation>
-<translation id="2039623879703305659">Pohyb prstem byl příliš rychlý</translation>
 <translation id="2040460856718599782">Jejda! Při ověřování vaší totožnosti došlo k chybě. Zkontrolujte prosím identifikační údaje a zkuste to znovu.</translation>
 <translation id="2043818754674261542">Maximální vzdálenost od telefonu k odemknutí tohoto zařízení <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Název šablony certifikátu Microsoft</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Smazat certifikát serveru <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Přihlásit se automaticky</translation>
 <translation id="2101225219012730419">Verze:</translation>
-<translation id="2107494551712864447">Přidejte otisk prstu</translation>
 <translation id="2112877397266219826">Chcete-li tuto službu nastavit, zapněte dotykové ovládání.</translation>
 <translation id="21133533946938348">Připnout kartu</translation>
 <translation id="2113479184312716848">&amp;Otevřít soubor...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Plocha</translation>
 <translation id="2526619973349913024">Zkontrolovat aktualizace</translation>
 <translation id="2527167509808613699">Jakýkoli typ spojení</translation>
-<translation id="2532026602297547439">Senzor je znečištěný</translation>
 <translation id="2532589005999780174">Režim vysokého kontrastu</translation>
 <translation id="253434972992662860">&amp;Pozastavit</translation>
 <translation id="2534460670861217804">Proxy server protokolu HTTPS</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">Zálohovat fotky a videa</translation>
 <translation id="3060379269883947824">Zapnout poslech vybraného textu</translation>
 <translation id="3061707000357573562">Služba oprav</translation>
-<translation id="3064410671692449875">Nedostatek dat</translation>
 <translation id="3065041951436100775">Zpětná vazba k ukončení procesu karty</translation>
 <translation id="3067198179881736288">Nainstalovat aplikaci?</translation>
 <translation id="3067198360141518313">Spustit plugin</translation>
@@ -1500,7 +1494,7 @@
 <translation id="3271648667212143903">Web <ph name="ORIGIN" /> žádá o připojení</translation>
 <translation id="3274763671541996799">Přepnuli jste do režimu celé obrazovky.</translation>
 <translation id="3275778913554317645">Otevřít jako okno</translation>
-<translation id="3278877214895457897">Po nastavení Chromebooku získáte pomoc od Asistenta kdykoliv tak, že stisknete tlačítko Asistent nebo řeknete „OK Google“.</translation>
+<translation id="3278877214895457897">Po nastavení Chromebooku získáte pomoc od Asistenta kdykoliv tak, že stisknete tlačítko Asistent nebo řeknete „Ok Google“.</translation>
 <translation id="3279230909244266691">Tento proces může trvat několik minut. Probíhá spouštění virtuálního počítače.</translation>
 <translation id="3279741024917655738">Videa na celou stránku zobrazovat na</translation>
 <translation id="3280237271814976245">Uložit &amp;jako...</translation>
@@ -2262,7 +2256,6 @@
 <translation id="4480590691557335796">Chrome na vašem počítači může vyhledat škodlivý software a odstranit jej</translation>
 <translation id="4481530544597605423">Nespárovaná zařízení</translation>
 <translation id="4482194545587547824">Google vaši historii procházení může používat k přizpůsobení Vyhledávání a dalších služeb Google.</translation>
-<translation id="4493287891836751813">Seznamte se se svým Asistentem Google</translation>
 <translation id="4495419450179050807">Nezobrazovat na této stránce</translation>
 <translation id="4499718683476608392">Zapněte automatické vyplňování platebních karet a vyplňujte webové formuláře jedním kliknutím</translation>
 <translation id="4500114933761911433">Plugin <ph name="PLUGIN_NAME" /> selhal</translation>
@@ -2317,7 +2310,6 @@
 <translation id="4572659312570518089">Během připojování k zařízení <ph name="DEVICE_NAME" /> bylo zrušeno ověření.</translation>
 <translation id="4572815280350369984">Soubor <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Další...</translation>
-<translation id="4576537685267142337">Zvedněte prst a poté na senzor klepněte znovu.</translation>
 <translation id="4576541033847873020">Párování zařízení Bluetooth</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> nelze odeslat.</translation>
 <translation id="4580526846085481512">Opravdu chcete tyto položky ($1) smazat?</translation>
@@ -2562,7 +2554,6 @@
 <translation id="4941627891654116707">Velikost písma</translation>
 <translation id="494286511941020793">Nápověda ke konfiguraci proxy serveru</translation>
 <translation id="4945444280533270988">Funkce Smart Lock je zapnutá</translation>
-<translation id="494660967831069720">Částečná data</translation>
 <translation id="4953689047182316270">Reagovat na události přístupnosti</translation>
 <translation id="4953808748584563296">Výchozí oranžový avatar</translation>
 <translation id="4955814292505481804">Roční</translation>
@@ -3518,7 +3509,6 @@
 <translation id="6384275966486438344">Změňte nastavení vyhledávání na: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Weby mohou ukládat a číst data souborů cookie</translation>
 <translation id="6388429472088318283">Vyhledat jazyky</translation>
-<translation id="6388771388956873507">Vyhledejte senzor otisků prstů na zařízení a dotkněte se ho prstem</translation>
 <translation id="6390799748543157332">Stránky, které otevřete v tomto okně, nebudou uvedeny v historii prohlížeče a nezanechají v počítači po zavření všech oken hosta žádné stopy, např. soubory cookie. Všechny stažené soubory však budou zachovány.</translation>
 <translation id="6390994422085833176">Po nastavení zkontrolovat funkce synchronizace a personalizace</translation>
 <translation id="6395423953133416962">Odesílat <ph name="BEGIN_LINK1" />informace o systému<ph name="END_LINK1" /> a <ph name="BEGIN_LINK2" />metriky<ph name="END_LINK2" /></translation>
@@ -4121,7 +4111,6 @@
 <translation id="7309257895202129721">Zobrazit &amp;ovládací prvky</translation>
 <translation id="7310598146671372464">Přihlášení se nezdařilo. Server nepodporuje zadané typy šifrování Kerberos. Obraťte se na svého administrátora.</translation>
 <translation id="7311079019872751559">Přístup pluginu mimo izolovaný prostor</translation>
-<translation id="7311891583377621132">Lehce prst natočte, aby se zaznamenala jiná část otisku</translation>
 <translation id="7317680720589234980">Možnosti zámku obrazovky a přihlášení</translation>
 <translation id="7321545336522791733">Server je nedostupný</translation>
 <translation id="7324297612904500502">Fórum beta</translation>
@@ -4959,7 +4948,6 @@
 <translation id="8639047128869322042">Vyhledávání škodlivého softwaru...</translation>
 <translation id="8639963783467694461">Nastavení automatického vyplňování</translation>
 <translation id="8642171459927087831">Přístupový token</translation>
-<translation id="8642267168767642381">Pohyb prstem byl příliš pomalý</translation>
 <translation id="8642947597466641025">Zvětšit text</translation>
 <translation id="8643418457919840804">Chcete-li pokračovat, vyberte jednu možnost:</translation>
 <translation id="8645354835496065562">I nadále povolovat přístup k senzorům</translation>
@@ -5320,7 +5308,6 @@
 <translation id="916607977885256133">Obraz v obraze</translation>
 <translation id="9169496697824289689">Zobrazit klávesové zkratky</translation>
 <translation id="9169931577761441333">Přidat aplikaci <ph name="APP_NAME" /> na plochu</translation>
-<translation id="9170397650136757332">Nyní prst lehce natočte, aby se zaznamenaly všechny části otisku</translation>
 <translation id="9170848237812810038">Z&amp;pět</translation>
 <translation id="9170884462774788842">Jiný program ve vašem počítači nainstaloval motiv, který může měnit funkce Chromu.</translation>
 <translation id="9173995187295789444">Vyhledávání zařízení Bluetooth...</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 3a2eb4d..c182470 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Hyldeelement 5</translation>
 <translation id="1227507814927581609">Godkendelsen mislykkedes under oprettelse af forbindelse til "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">systemmenu</translation>
+<translation id="123186018454553812">Prøv en anden nøgle</translation>
 <translation id="1232569758102978740">Unavngivet</translation>
 <translation id="1233721473400465416">Landestandard</translation>
 <translation id="1234808891666923653">Servicearbejdere</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Brug synkronisering og alle tjenester</translation>
 <translation id="1272079795634619415">Stop</translation>
-<translation id="1272242203003205253">Google-partnere samarbejder med Google-assistenten om at hjælpe dig</translation>
 <translation id="1272978324304772054">Denne brugerkonto tilhører ikke det domæne, som enheden er tilmeldt. Hvis du vil foretage en tilmelding til et andet domæne, skal enheden først genoprettes.</translation>
 <translation id="1274977772557788323">Lagerindstillinger for Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies og andre websitedata</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Version <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Søg i adgangskoder</translation>
 <translation id="1487335504823219454">Til – tilpassede indstillinger</translation>
+<translation id="1489664337021920575">Vælg en anden mulighed</translation>
 <translation id="1493892686965953381">Venter på <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> andre tilgængelige enheder.</translation>
 <translation id="1497522201463361063">"<ph name="FILE_NAME" />" kunne ikke omdøbes. <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Appvindue</translation>
 <translation id="15373452373711364">Stor musemarkør</translation>
 <translation id="1538729222189715449">Åbner Linux-filer...</translation>
+<translation id="153933193410874873">Din identitet kunne ikke bekræftes på denne enhed</translation>
 <translation id="1540605929960647700">Aktivér demotilstand</translation>
 <translation id="1543284117603151572">Importeret fra Edge</translation>
 <translation id="1545177026077493356">Automatisk terminaltilstand</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Du kan ikke bruge dette billede. Vælg et andet billede.</translation>
 <translation id="1566049601598938765">Website</translation>
 <translation id="1567387640189251553">Der er tilsluttet et andet tastatur, siden du sidst indtastede din adgangskode. Det forsøger muligvis at stjæle dine indtastninger.</translation>
+<translation id="1567750922576943685">Bekræftelse af din identitet hjælper med at beskytte dine personlige oplysninger</translation>
 <translation id="1567993339577891801">JavaScript-konsol</translation>
 <translation id="1568067597247500137">Slå lyden fra på et website</translation>
 <translation id="1568323446248056064">Åbn enhedens skærmindstillinger</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Din telefon kan ikke registreres</translation>
 <translation id="1616206807336925449">Denne udvidelse kræver ikke nogen særlige tilladelser.</translation>
 <translation id="1616298854599875024">Udvidelsen "<ph name="IMPORT_NAME" />" kan ikke importeres, da den ikke er delt</translation>
-<translation id="161707228174452095">Fingeraftryk er tilføjet.</translation>
 <translation id="1618268899808219593">Hjælp</translation>
 <translation id="162035744160882748">Aktivér synkronisering, tilpasning og andre Google-tjenester</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -692,7 +694,6 @@
 <translation id="2028997212275086731">RAR-arkiv</translation>
 <translation id="2034346955588403444">Tilføj andre Wi-Fi-netværk</translation>
 <translation id="203574396658008164">Aktivér notatskrivning via låseskærmen</translation>
-<translation id="2039623879703305659">Du bevægede fingeren for hurtigt</translation>
 <translation id="2040460856718599782">Ups! Der opstod en fejl under forsøget på at godkende dig. Kontrollér dine loginoplysninger, og prøv igen.</translation>
 <translation id="2043818754674261542">Nødvendig afstand for, at telefonen kan låse denne <ph name="DEVICE_TYPE" /> op</translation>
 <translation id="204497730941176055">Navn på skabelon til Microsoft-certifikat</translation>
@@ -736,7 +737,6 @@
 <translation id="2099686503067610784">Slet servercertifikatet "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Automatisk login</translation>
 <translation id="2101225219012730419">Version:</translation>
-<translation id="2107494551712864447">Tilføj et fingeraftryk</translation>
 <translation id="2112877397266219826">Slå berøringskontrol til for starte konfigurationen</translation>
 <translation id="21133533946938348">Fastgør fane</translation>
 <translation id="2113479184312716848">Åbn &amp;fil...</translation>
@@ -1015,7 +1015,6 @@
 <translation id="2526590354069164005">Skrivebord</translation>
 <translation id="2526619973349913024">Søg efter opdatering</translation>
 <translation id="2527167509808613699">Enhver form for forbindelse</translation>
-<translation id="2532026602297547439">Sensoren er snavset</translation>
 <translation id="2532589005999780174">Tilstanden Høj kontrast</translation>
 <translation id="253434972992662860">&amp;Pause</translation>
 <translation id="2534460670861217804">Sikker HTTP-proxy</translation>
@@ -1195,6 +1194,7 @@
 <translation id="2783298271312924866">Downloadet</translation>
 <translation id="2783321960289401138">Opret genvej...</translation>
 <translation id="2783829359200813069">Vælg krypteringstyper</translation>
+<translation id="2783952358106015700">Brug din sikkerhedsnøgle med <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Aktiverer din mobildatatjeneste</translation>
 <translation id="2785873697295365461">Filbeskrivelser</translation>
 <translation id="2787047795752739979">Overskriv originalen</translation>
@@ -1375,7 +1375,6 @@
 <translation id="3057861065630527966">Sikkerhedskopiér dine billeder og videoer</translation>
 <translation id="3060379269883947824">Aktivér Tekstoplæsning</translation>
 <translation id="3061707000357573562">Tjeneste til programrettelse</translation>
-<translation id="3064410671692449875">Utilstrækkelige data</translation>
 <translation id="3065041951436100775">Feedback i tilfælde, hvor fanen døde.</translation>
 <translation id="3067198179881736288">Vil du installere appen?</translation>
 <translation id="3067198360141518313">Kør dette plugin</translation>
@@ -1508,6 +1507,7 @@
 <translation id="3285322247471302225">Ny &amp;fane</translation>
 <translation id="3288047731229977326">Udvidelser, der kører i udviklertilstand, kan skade din computer. Hvis du ikke er udvikler, skal du deaktivere udvidelserne, der kører i udviklertilstand, af hensyn til sikkerheden.</translation>
 <translation id="3289856944988573801">Du kan søge efter opdateringer via Ethernet eller Wi-Fi.</translation>
+<translation id="3292421191230118801">Genoptag visning af websites fra din mobilenhed på din Chromebook</translation>
 <translation id="32939749466444286">Linux-containeren startede ikke. Prøv igen.</translation>
 <translation id="3294437725009624529">Gæst</translation>
 <translation id="329838636886466101">Reparer</translation>
@@ -1550,6 +1550,7 @@
 <translation id="3348038390189153836">Der er registreret en flytbar enhed</translation>
 <translation id="3348459612390503954">Tillykke</translation>
 <translation id="3349933790966648062">Hukommelsesforbrug</translation>
+<translation id="3350117557200012647">Start parringstilstand</translation>
 <translation id="3353984535370177728">Vælg en mappe, der skal uploades</translation>
 <translation id="3355936511340229503">Forbindelsesfejl</translation>
 <translation id="3356797067524893661">Du kan nu fortsætte til Hangouts Meet</translation>
@@ -1689,6 +1690,7 @@
 <translation id="3556000484321257665">Din søgemaskine blev ændret til <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Terminalapplikationen kunne ikke downloades.</translation>
 <translation id="3564334271939054422">Det Wi-Fi-netværk, du bruger (<ph name="NETWORK_ID" />), kan kræve, at du går til netværkets loginside.</translation>
+<translation id="3564848315152754834">USB-sikkerhedsnøgle</translation>
 <translation id="3566721612727112615">Der er ikke tilføjet nogen websites</translation>
 <translation id="3569382839528428029">Vil du acceptere, at <ph name="APP_NAME" /> deler din skærm?</translation>
 <translation id="3570985609317741174">Webindhold</translation>
@@ -1739,6 +1741,7 @@
 <translation id="3627588569887975815">Åbn link i inkognitovindue</translation>
 <translation id="3627671146180677314">Tidspunkt for fornyelse af Netscape-certifikat</translation>
 <translation id="3627879631695760395">Installer <ph name="APP" />...</translation>
+<translation id="3630132874740063857">Din telefon</translation>
 <translation id="3630995161997703415">Føj dette website til din hylde for at bruge det når som helst</translation>
 <translation id="3635030235490426869">Fane 1</translation>
 <translation id="3636096452488277381">Goddag <ph name="USER_GIVEN_NAME" /></translation>
@@ -1760,6 +1763,7 @@
 <translation id="3664511988987167893">Udvidelsesikon</translation>
 <translation id="3665589677786828986">Chrome har registreret, at nogle af dine indstillinger er blevet ændret af et andet program, og har derfor gendannet standardindstillingerne.</translation>
 <translation id="3668570675727296296">Sprogindstillinger</translation>
+<translation id="3668801437375206837">Googlere kan medtage yderligere Bluetooth-logfiler i deres feedbackrapporter for at forbedre diagnosticeringen af Bluetooth-problemer. Når denne mulighed er valgt, omfatter din rapport btsnoop- og HCI-logfiler fra din nuværende session. Disse er renset for at fjerne så mange personhenførbare oplysninger som muligt. Det er kun administratorer af Chrome OS-produktgruppen i Listnr, der har adgang til disse. Logfiler ryddes efter 90 dage.</translation>
 <translation id="3668823961463113931">Håndtering</translation>
 <translation id="3670229581627177274">Slå Bluetooth til</translation>
 <translation id="3672681487849735243">Der blev registreret er fabriksfejl</translation>
@@ -1778,6 +1782,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> anmoder om at dele din skærm</translation>
 <translation id="3693415264595406141">Adgangskode:</translation>
 <translation id="3694027410380121301">Vælg forrige fane</translation>
+<translation id="369489984217678710">Adgangskoder og andre logindata</translation>
 <translation id="3699624789011381381">Mailadresse</translation>
 <translation id="3699920817649120894">Vil du deaktivere synkronisering og tilpasning?</translation>
 <translation id="3700888195348409686">Præsenterer (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1801,6 +1806,7 @@
 <translation id="3727148787322499904">Hvis denne indstilling ændres, påvirker det alle delte netværk</translation>
 <translation id="3727187387656390258">Undersøg pop op-vindue</translation>
 <translation id="3729506734996624908">Tilladte websites</translation>
+<translation id="3731997362820527097">Vælg din sikkerhedsnøgle</translation>
 <translation id="3732078975418297900">Der er fejl på linjen <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-server med optrapning</translation>
 <translation id="3735740477244556633">Sortér efter</translation>
@@ -1901,6 +1907,7 @@
 <translation id="3860381078714302691">Velkommen til Hangouts Meet</translation>
 <translation id="3861241522664181545">Siden er sat på pause.</translation>
 <translation id="3862134173397075045">Velkommen til Cast-oplevelsen i Chrome!</translation>
+<translation id="3862693525629180217">Bekræft via indbygget sensor</translation>
 <translation id="3862788408946266506">Appen med manifestattributten "kiosk_only" skal installeres i ChromeOS-terminaltilstand</translation>
 <translation id="3865414814144988605">Opløsning</translation>
 <translation id="386548886866354912">Pak sammen med <ph name="EXTENSION_NAME" /></translation>
@@ -2026,6 +2033,7 @@
 <translation id="4055023634561256217">Enheden skal genstartes, før den kan nulstilles med Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Se i Webshop</translation>
+<translation id="4058647953897694817">Bekræft via Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Tjek dokument nu</translation>
 <translation id="406070391919917862">Apps i baggrunden</translation>
@@ -2039,6 +2047,7 @@
 <translation id="407520071244661467">Skaler</translation>
 <translation id="4075639477629295004"><ph name="FILE_NAME" /> kunne ikke castes.</translation>
 <translation id="4077917118009885966">Annoncer er blokeret på dette website</translation>
+<translation id="4079799245038595838">Der blev sendt en underretning til din telefon. Følg anvisningerne for at bekræfte, at det er dig.</translation>
 <translation id="4081242589061676262">Filen kunne ikke castes.</translation>
 <translation id="4084682180776658562">Bogmærke</translation>
 <translation id="4084835346725913160">Luk <ph name="TAB_NAME" /></translation>
@@ -2081,7 +2090,7 @@
 <translation id="4138267921960073861">Vis brugernavne og billeder på loginskærmen</translation>
 <translation id="4144218403971135344">Se video i bedre kvalitet, og forlæng batteritiden. Der afspilles kun video på din Cast-kompatible skærm.</translation>
 <translation id="4146026355784316281">Åbn altid med systemets visningsprogram</translation>
-<translation id="4146785383423576110">Nulstil, og ryd op</translation>
+<translation id="4146785383423576110">Nulstil og ryd op</translation>
 <translation id="4147897805161313378">Google Fotos</translation>
 <translation id="4150201353443180367">Skærm</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 fane}one{# faner}other{# faner}}</translation>
@@ -2138,6 +2147,7 @@
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="4250680216510889253">Nej</translation>
 <translation id="4252852543720145436">Beskyttet indholds-id</translation>
+<translation id="4252899949534773101">Bluetooth er deaktiveret</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – faneindholdet deles</translation>
 <translation id="4254813446494774748">Sprog, der skal oversættes til:</translation>
 <translation id="425573743389990240">Batteriets afladningshastighed i watt (en negativ værdi betyder, at batteriet oplader)</translation>
@@ -2263,8 +2273,8 @@
 <translation id="4480590691557335796">Chrome kan finde og fjerne skadelig software på din computer</translation>
 <translation id="4481530544597605423">Ikke-parrede enheder</translation>
 <translation id="4482194545587547824">Google bruger muligvis din browserhistorik til at personliggøre Søgning og andre Google-tjenester</translation>
-<translation id="4493287891836751813">Sig hej til Google-assistenten</translation>
 <translation id="4495419450179050807">Vis ikke på denne side</translation>
+<translation id="449938344715680828">Tryk på |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| efterfulgt af |<ph name="ACCELERATOR3" />| for at afslutte</translation>
 <translation id="4499718683476608392">Aktivér AutoFyld for kreditkort for at udfylde formularer med et enkelt klik</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> er gået ned</translation>
 <translation id="450099669180426158">Ikon for udråbstegn</translation>
@@ -2318,7 +2328,6 @@
 <translation id="4572659312570518089">Godkendelsen blev annulleret under tilslutning til "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-fil</translation>
 <translation id="457386861538956877">Flere...</translation>
-<translation id="4576537685267142337">Løft fingeren, og tryk på sensoren igen</translation>
 <translation id="4576541033847873020">Par Bluetooth-enhed</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> kunne ikke castes.</translation>
 <translation id="4580526846085481512">Er du sikker på, at du vil slette $1 elementer?</translation>
@@ -2341,6 +2350,7 @@
 <translation id="4611114513649582138">Tilgængelig dataforbindelse</translation>
 <translation id="4613271546271159013">En udvidelse har ændret, hvilken side der vises, når du åbner en ny fane.</translation>
 <translation id="4615586811063744755">der er ikke valgt nogen cookie</translation>
+<translation id="4615618657481886098">Du har allerede registreret denne nøgle én gang. Du behøver ikke at registrere den igen.</translation>
 <translation id="4617270414136722281">Valgmuligheder for udvidelser</translation>
 <translation id="4619615317237390068">Faner fra andre enheder</translation>
 <translation id="4620809267248568679">Denne indstilling håndhæves af en udvidelse.</translation>
@@ -2450,6 +2460,7 @@
 <translation id="4790972063719531840">Send automatisk diagnostik og brugsdata til Google</translation>
 <translation id="4792711294155034829">&amp;Rapporter et problem...</translation>
 <translation id="479536056609751218">Webside, kun HTML</translation>
+<translation id="4798236378408895261">Vedhæft <ph name="BEGIN_LINK" />Bluetooth-logfiler<ph name="END_LINK" /> (internt hos Google)</translation>
 <translation id="479989351350248267">søg</translation>
 <translation id="4801448226354548035">Skjul konti</translation>
 <translation id="4801512016965057443">Tillad dataroaming for mobil</translation>
@@ -2516,6 +2527,7 @@
 <translation id="4882473678324857464">Fokuser på bogmærker</translation>
 <translation id="4882831918239250449">Styr, hvordan din browserhistorik anvendes til at tilpasse søgeresultater, annoncer og meget mere</translation>
 <translation id="4883178195103750615">Eksporter bogmærker til HTML-fil...</translation>
+<translation id="4883274597792587930">Find navnet, der står på bagsiden af din nøgle</translation>
 <translation id="4883436287898674711">Alle websites på <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">&amp;Jobliste</translation>
 <translation id="4883898390143004266">Hjælp apps med at finde placeringer. Brug Googles placeringstjeneste til at forbedre placeringer i apps. Google kan med jævne mellemrum indsamle placeringsdata og bruge oplysningerne anonymt til at gøre placeringen mere nøjagtig og forbedre placeringsbaserede tjenester. <ph name="BEGIN_LINK1" />Få flere oplysninger<ph name="END_LINK1" /></translation>
@@ -2563,7 +2575,6 @@
 <translation id="4941627891654116707">Skriftstørrelse</translation>
 <translation id="494286511941020793">Hjælp til proxykonfiguration</translation>
 <translation id="4945444280533270988">Smart Lock er aktiveret</translation>
-<translation id="494660967831069720">Ufuldstændige data</translation>
 <translation id="4953689047182316270">Reagere på hændelser med hjælpefunktioner</translation>
 <translation id="4953808748584563296">Orange standardavatar</translation>
 <translation id="4955814292505481804">Årligt</translation>
@@ -2989,6 +3000,7 @@
 <translation id="55601339223879446">Tilpas grænserne for dit skrivebord inden for skærmvisningen</translation>
 <translation id="5562781907504170924">Denne fane er tilsluttet en Bluetooth-enhed.</translation>
 <translation id="5563234215388768762">Søg på Google, eller angiv en webadresse</translation>
+<translation id="5567950944308676169">Tilslut din sikkerhedsnøgle, og aktivér den</translation>
 <translation id="5567989639534621706">Applikationscaches</translation>
 <translation id="5568069709869097550">Kan ikke logge ind</translation>
 <translation id="5568144734023334204">Android-lagerplads</translation>
@@ -3235,6 +3247,7 @@
 <translation id="5931146425219109062">Læse og redigere alle dine data på de websites, du besøger</translation>
 <translation id="5932881020239635062">Serienummer</translation>
 <translation id="5933376509899483611">Tidszone</translation>
+<translation id="5938002010494270685">Der er en tilgængelig sikkerhedsopgradering</translation>
 <translation id="5939518447894949180">Nulstil</translation>
 <translation id="5939847200023027600">PDF Compositor Service</translation>
 <translation id="5941153596444580863">Tilføj person...</translation>
@@ -3271,6 +3284,7 @@
 <translation id="6006484371116297560">Klassisk</translation>
 <translation id="6007237601604674381">Flytningen mislykkedes. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Talesøgning er ikke tilgængelig på dit sprog.</translation>
+<translation id="6009781704028455063">Indbygget sensor</translation>
 <translation id="6010869025736512584">Åbner videoinput</translation>
 <translation id="6011193465932186973">Fingeraftryk</translation>
 <translation id="6011449291337289699">Ryd websitedata</translation>
@@ -3281,6 +3295,7 @@
 <translation id="6020431688553761150">Serveren godkendte dig ikke til at få adgang til denne ressource.</translation>
 <translation id="602251597322198729">Dette website forsøger at downloade flere filer. Vil du tillade dette?</translation>
 <translation id="6022526133015258832">Åbn i fuld skærm</translation>
+<translation id="6022705094403139349">Er du klar til at parre din sikkerhedsnøgle?</translation>
 <translation id="6023643151125006053">Denne enhed (serienummer: <ph name="SERIAL_NUMBER" />) blev låst af administratoren på <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">Stakspor</translation>
 <translation id="6026047032548434446">Vil du installere appen?</translation>
@@ -3344,6 +3359,7 @@
 <translation id="6105877918873366097">Sidst åbnet</translation>
 <translation id="6107012941649240045">Udstedt til</translation>
 <translation id="6112294629795967147">Tryk for at vælge en anden størrelse</translation>
+<translation id="6112931163620622315">Tjek din telefon</translation>
 <translation id="6112952769866305444">Rediger person, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Se tekst og billeder, der er kopieret til udklipsholderen</translation>
 <translation id="6116921718742659598">Rediger indstillingerne for sprog og indtastning</translation>
@@ -3390,6 +3406,7 @@
 <translation id="6169666352732958425">Skrivebordet kunne ikke castes.</translation>
 <translation id="6171948306033499786">Sæt udskrivning på pause</translation>
 <translation id="6175314957787328458">Microsoft-domæne-GUID</translation>
+<translation id="6176043333338857209">Bluetooth aktiveres midlertidigt, så der kan kommunikeres med din sikkerhedsnøgle</translation>
 <translation id="6178664161104547336">Vælg et certifikat</translation>
 <translation id="6181431612547969857">Downloaden blev blokeret</translation>
 <translation id="6185132558746749656">Enhedsplacering</translation>
@@ -3477,6 +3494,7 @@
 <translation id="6311220991371174222">Chrome kan ikke startes, da der gik noget galt ved åbningen af din profil. Prøv at genstarte Chrome.</translation>
 <translation id="6312400084708441752">Indeholder oplysninger om skadelig software, systemindstillinger og processer på din computer</translation>
 <translation id="6312403991423642364">Ukendt netværksfejl</translation>
+<translation id="6313320178014547270">Du bruger en nøgle, som ikke er registreret på dette website</translation>
 <translation id="6313641880021325787">LUK VR</translation>
 <translation id="6314819609899340042">Du har aktiveret fejlfindingsfunktioner på denne <ph name="IDS_SHORT_PRODUCT_NAME" />-enhed.</translation>
 <translation id="6315493146179903667">Læg alle forrest</translation>
@@ -3521,7 +3539,6 @@
 <translation id="6384275966486438344">Skifte dine søgeindstillinger til: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Websites kan gemme og læse cookiedata</translation>
 <translation id="6388429472088318283">Søg efter sprog</translation>
-<translation id="6388771388956873507">Find fingeraftrykslæseren på din enhed, og tryk på den med fingeren</translation>
 <translation id="6390799748543157332">De sider, du ser i dette vindue, vises ikke i browserhistorikken, og de efterlader ikke andre spor som f.eks. cookies på computeren, når du lukker alle åbne vinduer i gæstesessionen. Alle de filer, du downloader, vil dog blive gemt.</translation>
 <translation id="6390994422085833176">Gennemgå funktioner for synkronisering og tilpasning efter konfiguration</translation>
 <translation id="6395423953133416962">Send <ph name="BEGIN_LINK1" />systemoplysninger<ph name="END_LINK1" /> og <ph name="BEGIN_LINK2" />metrics<ph name="END_LINK2" /></translation>
@@ -3533,6 +3550,7 @@
 <translation id="6399774419735315745">Spion</translation>
 <translation id="6401445054534215853">Hyldeelement 1</translation>
 <translation id="6404511346730675251">Rediger bogmærke</translation>
+<translation id="6405510437656969977">Fortsæt, når du er klar til at indtaste pinkoden</translation>
 <translation id="6406303162637086258">Simuler genstart af browser</translation>
 <translation id="6406506848690869874">Synkronisering</translation>
 <translation id="6408118934673775994">Læse og redigere dine data på <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> og <ph name="WEBSITE_3" /></translation>
@@ -3651,6 +3669,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – skrivebordsindholdet deles</translation>
 <translation id="6580151766480067746">ARC-version</translation>
 <translation id="6581162200855843583">Link til Google Drev</translation>
+<translation id="6582080224869403177">Nulstil din <ph name="DEVICE_TYPE" /> for at opgradere din beskyttelse.</translation>
 <translation id="6582421931165117398">Skift din adgangskode nu for at beskytte dine personlige oplysninger. Du bliver bedt om at logge ind, før du kan skifte din adgangskode.</translation>
 <translation id="6583851739559471707">Blokeret på websites, der har tendens til at vise påtrængende annoncer (anbefales)</translation>
 <translation id="6584878029876017575">Microsoft-signering af levetid</translation>
@@ -3700,6 +3719,7 @@
 <translation id="6644846457769259194">Opdaterer din enhed (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">Webadresse for tilbagekaldelse af Netscape-certifikatautoritet</translation>
 <translation id="6647838571840953560">I øjeblikket på <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">En sikkerhedsnøgle er aktiveret...</translation>
 <translation id="6648911618876616409">En vigtig opdatering er klar til at blive installeret. Log ind for at komme godt i gang.</translation>
 <translation id="6649018507441623493">Vent et øjeblik…</translation>
 <translation id="6649563841575838401">Arkivformatet understøttes ikke, eller filen er beskadiget.</translation>
@@ -3775,6 +3795,7 @@
 <translation id="6759193508432371551">Gendannelse af fabriksindstillinger</translation>
 <translation id="6767639283522617719">Enheden kunne ikke knyttes til domænet. Sørg for, at indstillingerne er angivet korrekt for organisationsenheden.</translation>
 <translation id="6769712124046837540">Tilføjer printer...</translation>
+<translation id="6770664076092644100">Bekræft via NFC</translation>
 <translation id="6771503742377376720">Er en certificeringsautoritet</translation>
 <translation id="6777817260680419853">Omdirigeringen blev blokeret</translation>
 <translation id="6778959797435875428">Slå lyden til på websites</translation>
@@ -3810,6 +3831,7 @@
 <translation id="6823506025919456619">Du skal logge ind i Chrome for at se dine enheder</translation>
 <translation id="6824564591481349393">Kopier &amp;e-mailadresse</translation>
 <translation id="6825184156888454064">Sorter efter navn</translation>
+<translation id="6826872289184051766">Bekræft via USB</translation>
 <translation id="6827236167376090743">Denne video vil spille lige til juleaften.</translation>
 <translation id="6828153365543658583">Begræns login for følgende brugere:</translation>
 <translation id="6828860976882136098">Automatiske opdateringer kunne ikke konfigureres for alle brugere (fejl ved forhåndsudførelse: <ph name="ERROR_NUMBER" />)</translation>
@@ -3843,6 +3865,7 @@
 <translation id="6880587130513028875">Billeder blev blokeret på denne side.</translation>
 <translation id="6883319974225028188">Ups! Systemet kunne ikke gemme enhedskonfigurationen.</translation>
 <translation id="6885771755599377173">Forhåndsvisning af systemoplysninger</translation>
+<translation id="6886476658664859389">NFC-sikkerhedsnøgle</translation>
 <translation id="6886871292305414135">Åbn link i ny &amp;fane</translation>
 <translation id="6892812721183419409">Åbn linket som <ph name="USER" /></translation>
 <translation id="6896758677409633944">Kopiér</translation>
@@ -4008,6 +4031,7 @@
 <translation id="713122686776214250">Tilføj side...</translation>
 <translation id="7133578150266914903">Din administrator gendanner en tidligere version på denne enhed (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Gør teksten mindre</translation>
+<translation id="7135729336746831607">Vil du aktivere Bluetooth?</translation>
 <translation id="7136694880210472378">Gør til standard</translation>
 <translation id="7136984461011502314">Velkommen til <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Der opstod en fejl. Prøv igen ved at vælge andre billeder.</translation>
@@ -4053,6 +4077,7 @@
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" er slettet</translation>
 <translation id="7206693748120342859">Downloader <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Forlad side}one{Forlad side}other{Forlad sider}}</translation>
+<translation id="721467499098558573">Hold knappen på din sikkerhedsnøgle inde i mindst fem sekunder</translation>
 <translation id="7216409898977639127">Mobilselskab</translation>
 <translation id="7216595297012131718">Sortér sprog efter dine præferencer</translation>
 <translation id="7220019174139618249">Adgangskoderne kan ikke eksporteres til "<ph name="FOLDER" />"</translation>
@@ -4088,6 +4113,7 @@
 <translation id="7256710573727326513">Åbn på en fane</translation>
 <translation id="725758059478686223">Udskrivningstjeneste</translation>
 <translation id="7257666756905341374">Læs de data, du kopierer og indsætter</translation>
+<translation id="7260764918845374269">Din sikkerhedsnøgle skal være i parringstilstand, før du kan se den. Hold knappen på din nøgle inde i mindst fem sekunder.</translation>
 <translation id="7262004276116528033">Denne logintjeneste hostes af <ph name="SAML_DOMAIN" />.</translation>
 <translation id="7268365133021434339">Luk faner</translation>
 <translation id="7268659760406822741">Tilgængelige tjenester</translation>
@@ -4124,7 +4150,6 @@
 <translation id="7309257895202129721">Vis &amp;knapper</translation>
 <translation id="7310598146671372464">Der kunne ikke logges ind. Serveren understøtter ikke de angivne Kerberos-krypteringstyper. Kontakt din administrator.</translation>
 <translation id="7311079019872751559">Adgang til plugin, der ikke er gemt i sandbox</translation>
-<translation id="7311891583377621132">Flyt fingeren en smule for at registrere en anden del af fingeraftrykket</translation>
 <translation id="7317680720589234980">Valgmuligheder for skærmlås og login</translation>
 <translation id="7321545336522791733">Serveren er utilgængelig</translation>
 <translation id="7324297612904500502">Betaforum</translation>
@@ -4206,6 +4231,7 @@
 <translation id="7464490149090366184">Komprimering mislykkedes, elementet findes: "$1"</translation>
 <translation id="7465778193084373987">Webadresse for tilbagekaldelse af Netscape-certifikat</translation>
 <translation id="7469406957790636836">Hvis du vil aktivere indstillingen, skal du først aktivere stavekontrol under <ph name="BEGIN_LINK" />Sprog og indtastning<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Få tilsendt underretninger, og vælg, om denne computer som standard skal huskes til Beskeder</translation>
 <translation id="7469894403370665791">Opret automatisk forbindelse til dette netværk</translation>
 <translation id="747114903913869239">Fejl: Udvidelsen kunne ikke afkodes</translation>
 <translation id="7473753388963818366">Lad os gøre din <ph name="DEVICE_TYPE" /> klar til dig</translation>
@@ -4255,6 +4281,7 @@
 <translation id="7531779363494549572">Gå til Indstillinger &gt; Apps og underretninger &gt; Underretninger.</translation>
 <translation id="7536709149194614609">Genstart enheden, og prøv igen senere.</translation>
 <translation id="7537601449003285327">Fastgør til proceslinje</translation>
+<translation id="7539856059004947393">Bluetooth-sikkerhedsnøgle</translation>
 <translation id="7540972813190816353">Der opstod en fejl ved søgning efter opdateringer: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Aktivér fejlfindingsfunktioner på denne <ph name="IDS_SHORT_PRODUCT_NAME" />-enhed</translation>
 <translation id="7544853251252956727">Bland</translation>
@@ -4357,6 +4384,7 @@
 <translation id="7709152031285164251">Mislykket - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Cast...</translation>
 <translation id="7711920809702896782">Billedoplysninger</translation>
+<translation id="7712740978240882272">Lås din Chromebook op med din telefon. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Ukendt udvidelse med id'et <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Cookies fra <ph name="DOMAIN" /> er tilladt</translation>
 <translation id="7714464543167945231">Certifikat</translation>
@@ -4571,6 +4599,7 @@
 <translation id="7984068253310542383">Spejl <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Læse og redigere gemte indstillinger for adgangskode</translation>
 <translation id="7987764905897278458">Få flere af Googles smarte funktioner</translation>
+<translation id="798835209536175951">Send og modtag sms-beskeder fra din Chromebook. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Aktiver tilgængelighedsfunktioner</translation>
 <translation id="7994702968232966508">EAP-metode</translation>
 <translation id="799547531016638432">Fjern genvej</translation>
@@ -4703,6 +4732,7 @@
 <translation id="8185331656081929126">Vis underretninger, når der registreres nye printere på netværket</translation>
 <translation id="8186609076106987817">Serveren kunne ikke finde filen.</translation>
 <translation id="8188120771410500975">&amp;Kontrollér stavning i tekstfelter</translation>
+<translation id="8188389033983459049">Tjek enhedens indstillinger, og aktivér Bluetooth for at fortsætte</translation>
 <translation id="8190193592390505034">Forbinder til <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Administrere dine apps, udvidelser og temaer</translation>
 <translation id="8191453843330043793">V8-proxyresolver</translation>
@@ -4797,6 +4827,7 @@
 <translation id="8353683614194668312">Den kan:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> – <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Vil du gendanne siderne?</translation>
+<translation id="8362993567435070757">Find den sekscifrede pinkode på bagsiden af nøglen</translation>
 <translation id="8363095875018065315">stabil</translation>
 <translation id="8363142353806532503">Der er blokeret for adgang til mikrofonen</translation>
 <translation id="8366396658833131068">Netværksforbindelsen er genoprettet. Vælg et andet netværk, eller tryk på knappen "Fortsæt" nedenfor for at åbne din terminalapp.</translation>
@@ -4805,6 +4836,7 @@
 <translation id="8371695176452482769">Indtal nu</translation>
 <translation id="8372369524088641025">Ugyldig WEP-nøgle</translation>
 <translation id="8373553483208508744">Slå fanernes lyd fra</translation>
+<translation id="8379878387931047019">Denne enhed understøtter ikke den type sikkerhedsnøgle, der anmodes om på dette website</translation>
 <translation id="8382913212082956454">Kopier &amp;e-mailadresse</translation>
 <translation id="8386903983509584791">Scanningen er udført</translation>
 <translation id="8389492867173948260">Tillad, at denne udvidelse læser og ændrer alle dine data på websites, du besøger:</translation>
@@ -4923,6 +4955,7 @@
 <translation id="8557930019681227453">Manifest</translation>
 <translation id="8559694214572302298">Værktøj til afkodning af billeder</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Læs videre</translation>
 <translation id="8565650234829130278">Forsøgte at nedgradere appen.</translation>
 <translation id="8569002732135253578"><ph name="DOCUMENT_NAME" /> udskrives nu</translation>
 <translation id="8569682776816196752">Der blev ikke fundet nogen destinationer</translation>
@@ -4963,7 +4996,6 @@
 <translation id="8639047128869322042">Søger efter skadelig software...</translation>
 <translation id="8639963783467694461">Indstillinger for AutoFyld</translation>
 <translation id="8642171459927087831">Adgangstoken</translation>
-<translation id="8642267168767642381">Du bevægede fingeren for langsomt</translation>
 <translation id="8642947597466641025">Gør teksten større</translation>
 <translation id="8643418457919840804">Vælg en indstilling for at fortsætte:</translation>
 <translation id="8645354835496065562">Fortsæt med at tillade adgang til sensorer</translation>
@@ -4978,6 +5010,7 @@
 <translation id="8655295600908251630">Kanal</translation>
 <translation id="8655319619291175901">Ups! Der opstod en fejl.</translation>
 <translation id="8655972064210167941">Login mislykkedes, da din adgangskode ikke kunne bekræftes. Kontakt din administrator, eller prøv igen.</translation>
+<translation id="8656619792520327915">Tilføj en anden Bluetooth-sikkerhedsnøgle</translation>
 <translation id="8656768832129462377">Undlad at kontrollere</translation>
 <translation id="8658595122208653918">Skift printerindstillinger...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> deler din skærm og lyd med <ph name="TAB_NAME" />.</translation>
@@ -5101,6 +5134,7 @@
 <translation id="8814687660896548945">Vent et øjeblik, mens arkivet scannes…</translation>
 <translation id="881799181680267069">Skjul andre</translation>
 <translation id="8818152010000655963">Baggrund</translation>
+<translation id="8818958672113348984">Bekræft via din telefon</translation>
 <translation id="8820817407110198400">Bogmærker</translation>
 <translation id="8821045908425223359">Konfigurer automatisk IP-adressen</translation>
 <translation id="882204272221080310">Opdater firmwaren for ekstra beskyttelse.</translation>
@@ -5131,11 +5165,13 @@
 <translation id="8872155268274985541">Den eksterne opdateringsmanifestfil for terminalen er ugyldig. Terminalappen kunne ikke opdateres. Fjern USB-stikket.</translation>
 <translation id="8874184842967597500">Ikke tilsluttet</translation>
 <translation id="8876215549894133151">Format:</translation>
+<translation id="8876307312329369159">Denne indstilling kan ikke ændres i en demosession.</translation>
 <translation id="8876309039915144086">Generér adgangskode…</translation>
 <translation id="8877448029301136595">[parent directory]</translation>
 <translation id="8879284080359814990">&amp;Vis som fane</translation>
 <translation id="8883847527783433352">Synkroniser med en anden konto</translation>
 <translation id="8885197664446363138">Smart Lock er ikke tilgængelig</translation>
+<translation id="88870264962436283">Brug Touch ID med <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Farve:</translation>
 <translation id="8890516388109605451">Kilder</translation>
 <translation id="8892168913673237979">Fuldført</translation>
@@ -5156,6 +5192,7 @@
 <translation id="8915370057835397490">Indlæser forslag</translation>
 <translation id="8916476537757519021">Underramme for inkognitotilstand: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Log ind, og aktivér synkronisering for at få alle dine adgangskoder på alle dine enheder.</translation>
+<translation id="8921366488406707015">Bekræfter din sikkerhedsnøgle...</translation>
 <translation id="8922013791253848639">Tillad altid annoncer på dette website</translation>
 <translation id="8925458182817574960">&amp;Indstillinger</translation>
 <translation id="8926389886865778422">Spørg ikke igen</translation>
@@ -5264,6 +5301,7 @@
 <translation id="9066782832737749352">Oplæsning</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> logger dig automatisk ind på kvalificerede websites og apps med adgangskoder, du har gemt.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Par din nøgle med denne enhed, så du kan bruge den til at logge ind på din konto</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-mus er tilsluttet</translation>
 <translation id="9076523132036239772">Din mail eller adgangskode blev ikke bekræftet. Prøv at oprette forbindelse til et netværk først.</translation>
@@ -5325,7 +5363,6 @@
 <translation id="916607977885256133">Integreret billede</translation>
 <translation id="9169496697824289689">Se tastaturgenveje</translation>
 <translation id="9169931577761441333">Føj <ph name="APP_NAME" /> til startskærmen</translation>
-<translation id="9170397650136757332">Bevæg derefter fingeren en smule for at registrere hele fingeraftrykket</translation>
 <translation id="9170848237812810038">&amp;Fortryd</translation>
 <translation id="9170884462774788842">Et andet program på din computer tilføjede et tema, der kan ændre den måde, hvorpå Chrome fungerer.</translation>
 <translation id="9173995187295789444">Søger efter Bluetooth-enheder...</translation>
@@ -5389,6 +5426,7 @@
 <translation id="971774202801778802">Bogmærkets webadresse</translation>
 <translation id="973473557718930265">Afslut</translation>
 <translation id="974555521953189084">Angiv din adgangssætning for at starte synkroniseringen</translation>
+<translation id="977640333593638907">På de fleste nøgler skal du bare trykke på knappen for at bruge dem</translation>
 <translation id="981121421437150478">Offline</translation>
 <translation id="983511809958454316">Denne funktion understøttes ikke i VR</translation>
 <translation id="984275831282074731">Betalingsmetoder</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 9dd7d2cb..feaf932 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Ablageartikel 5</translation>
 <translation id="1227507814927581609">Beim Herstellen der Verbindung zu "<ph name="DEVICE_NAME" />" ist ein Authentifizierungsfehler aufgetreten.</translation>
 <translation id="1230807973377071856">Systemmenü</translation>
+<translation id="123186018454553812">Anderen Schlüssel verwenden</translation>
 <translation id="1232569758102978740">Unbenannt</translation>
 <translation id="1233721473400465416">Sprache</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16-fach</translation>
 <translation id="127138278192656016">Synchronisierung und alle Dienste nutzen</translation>
 <translation id="1272079795634619415">Stopp</translation>
-<translation id="1272242203003205253">Google-Partner arbeiten mit Assistant zusammen, um Ihnen im Alltag zu helfen</translation>
 <translation id="1272978324304772054">Dieses Nutzerkonto gehört nicht zu der Domain, in der das Gerät angemeldet ist. Wenn Sie sich in einer anderen Domain anmelden möchten, müssen Sie zunächst eine Gerätewiederherstellung durchführen.</translation>
 <translation id="1274977772557788323">Speichereinstellungen für Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies und andere Websitedaten</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Version <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Passwörter suchen</translation>
 <translation id="1487335504823219454">An – benutzerdefinierte Einstellungen</translation>
+<translation id="1489664337021920575">Andere Option auswählen</translation>
 <translation id="1493892686965953381">Warten auf <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> weitere Geräte verfügbar</translation>
 <translation id="1497522201463361063">"<ph name="FILE_NAME" />" kann nicht umbenannt werden. <ph name="ERROR_MESSAGE" /></translation>
@@ -364,6 +365,7 @@
 <translation id="1531004739673299060">Anwendungsfenster</translation>
 <translation id="15373452373711364">Großer Cursor</translation>
 <translation id="1538729222189715449">Linux-Dateien werden geöffnet…</translation>
+<translation id="153933193410874873">Wir konnten Ihre Identität auf diesem Gerät nicht überprüfen</translation>
 <translation id="1540605929960647700">Demomodus aktivieren</translation>
 <translation id="1543284117603151572">Aus Edge importiert</translation>
 <translation id="1545177026077493356">Automatischer Kioskmodus</translation>
@@ -380,6 +382,7 @@
 <translation id="1564414980088536597">Dieses Bild kann nicht verwendet werden. Bitte wählen Sie ein anderes Bild aus.</translation>
 <translation id="1566049601598938765">Website</translation>
 <translation id="1567387640189251553">Seit der letzten Eingabe Ihres Passwortes wurde eine andere Tastatur angeschlossen. Möglicherweise versucht jemand, darüber Ihre Tastatureingaben zu erfassen.</translation>
+<translation id="1567750922576943685">Wenn Ihre Identität überprüft wird, hilft dies, Ihre personenbezogenen Daten zu schützen</translation>
 <translation id="1567993339577891801">JavaScript-Konsole</translation>
 <translation id="1568067597247500137">Website stummschalten</translation>
 <translation id="1568323446248056064">Einstellungen für Anzeigegerät öffnen</translation>
@@ -414,7 +417,6 @@
 <translation id="161460670679785907">Ihr Smartphone wurde nicht erkannt</translation>
 <translation id="1616206807336925449">Diese Erweiterung erfordert keine speziellen Berechtigungen.</translation>
 <translation id="1616298854599875024">Die Erweiterung "<ph name="IMPORT_NAME" />" konnte nicht importiert werden, da es sich nicht um ein freigegebenes Modul handelt</translation>
-<translation id="161707228174452095">Fingerabdruck hinzugefügt.</translation>
 <translation id="1618268899808219593">H&amp;ilfe</translation>
 <translation id="162035744160882748">Synchronisierung, Personalisierung und andere Google-Dienste aktivieren</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -692,7 +694,6 @@
 <translation id="2028997212275086731">RAR-Archiv</translation>
 <translation id="2034346955588403444">Anderes WLAN hinzufügen</translation>
 <translation id="203574396658008164">Notizen über Sperrbildschirm aktivieren</translation>
-<translation id="2039623879703305659">Finger zu schnell bewegt</translation>
 <translation id="2040460856718599782">Hoppla! Bei der Authentifizierung ist ein Fehler aufgetreten. Bitte überprüfen Sie Ihre Anmeldedaten und versuchen Sie es erneut.</translation>
 <translation id="2043818754674261542">Maximaler Abstand zwischen Smartphone und <ph name="DEVICE_TYPE" /> fürs Entsperren</translation>
 <translation id="204497730941176055">Name der Microsoft-Zertifikatsvorlage</translation>
@@ -736,7 +737,6 @@
 <translation id="2099686503067610784">Serverzertifikat "<ph name="CERTIFICATE_NAME" />" löschen?</translation>
 <translation id="2100273922101894616">Automatisch anmelden</translation>
 <translation id="2101225219012730419">Version:</translation>
-<translation id="2107494551712864447">Fingerabdruck hinzufügen</translation>
 <translation id="2112877397266219826">Schalten Sie zur Einrichtung den Touch-Controller ein.</translation>
 <translation id="21133533946938348">Tab anheften</translation>
 <translation id="2113479184312716848">&amp;Datei öffnen...</translation>
@@ -1015,7 +1015,6 @@
 <translation id="2526590354069164005">Desktop</translation>
 <translation id="2526619973349913024">Nach Updates suchen</translation>
 <translation id="2527167509808613699">Jede Verbindungsart</translation>
-<translation id="2532026602297547439">Sensor verschmutzt</translation>
 <translation id="2532589005999780174">Modus mit hohem Kontrast</translation>
 <translation id="253434972992662860">&amp;Anhalten</translation>
 <translation id="2534460670861217804">Sicherer HTTP-Proxy</translation>
@@ -1193,6 +1192,7 @@
 <translation id="2783298271312924866">Heruntergeladen</translation>
 <translation id="2783321960289401138">Verknüpfung erstellen...</translation>
 <translation id="2783829359200813069">Verschlüsselungstypen auswählen</translation>
+<translation id="2783952358106015700">Sicherheitsschlüssel mit <ph name="APP_NAME" /> verwenden</translation>
 <translation id="2784407158394623927">Ihr mobiler Datendienst wird aktiviert.</translation>
 <translation id="2785873697295365461">Dateideskriptoren</translation>
 <translation id="2787047795752739979">Original überschreiben</translation>
@@ -1373,7 +1373,6 @@
 <translation id="3057861065630527966">Fotos und Videos sichern</translation>
 <translation id="3060379269883947824">Vorlesen aktivieren</translation>
 <translation id="3061707000357573562">Patchdienst</translation>
-<translation id="3064410671692449875">Daten reichen nicht aus</translation>
 <translation id="3065041951436100775">Feedback zur Tab-Beendigung</translation>
 <translation id="3067198179881736288">App installieren?</translation>
 <translation id="3067198360141518313">Dieses Plug-in ausführen</translation>
@@ -1506,6 +1505,7 @@
 <translation id="3285322247471302225">Neuer &amp;Tab</translation>
 <translation id="3288047731229977326">Erweiterungen im Entwicklermodus können auf Ihrem Computer Schaden anrichten. Wenn Sie kein Entwickler sind, sollten Sie diese Erweiterungen im Entwicklermodus deaktivieren, um sicher zu sein.</translation>
 <translation id="3289856944988573801">Verwenden Sie Ethernet oder WLAN zur Suche nach Updates.</translation>
+<translation id="3292421191230118801">Sie können Websites, die Sie auf Mobilgeräten aufgerufen haben, weiter auf Ihrem Chromebook ansehen</translation>
 <translation id="32939749466444286">Der Linux-Container konnte nicht gestartet werden. Bitte versuchen Sie es noch einmal.</translation>
 <translation id="3294437725009624529">Gast</translation>
 <translation id="329838636886466101">Reparieren</translation>
@@ -1548,6 +1548,7 @@
 <translation id="3348038390189153836">Externes Gerät erkannt</translation>
 <translation id="3348459612390503954">Glückwunsch</translation>
 <translation id="3349933790966648062">Speicherbedarf</translation>
+<translation id="3350117557200012647">In den Pairing-Modus wechseln</translation>
 <translation id="3353984535370177728">Ordner zum Hochladen auswählen</translation>
 <translation id="3355936511340229503">Verbindungsfehler</translation>
 <translation id="3356797067524893661">Hangouts Meet-Einrichtung abgeschlossen</translation>
@@ -1687,6 +1688,7 @@
 <translation id="3556000484321257665">Ihre Suchmaschine wurde in <ph name="URL" /> geändert.</translation>
 <translation id="3563432852173030730">Die Kioskanwendung konnte nicht heruntergeladen werden.</translation>
 <translation id="3564334271939054422">Eventuell müssen Sie die Anmeldeseite des verwendeten WLAN-Netzwerken (<ph name="NETWORK_ID" />) aufrufen.</translation>
+<translation id="3564848315152754834">USB-Sicherheitsschlüssel</translation>
 <translation id="3566721612727112615">Keine Websites hinzugefügt</translation>
 <translation id="3569382839528428029">Soll <ph name="APP_NAME" /> Ihren Bildschirm freigeben?</translation>
 <translation id="3570985609317741174">Webinhalte</translation>
@@ -1737,6 +1739,7 @@
 <translation id="3627588569887975815">Link in Inko&amp;gnito-Fenster öffnen</translation>
 <translation id="3627671146180677314">Verlängerungszeit für Netscape-Zertifikate</translation>
 <translation id="3627879631695760395"><ph name="APP" /> installieren</translation>
+<translation id="3630132874740063857">Meine Telefonnummer</translation>
 <translation id="3630995161997703415">Fügen Sie diese Website Ihrer Ablage hinzu, um sie jederzeit zu verwenden</translation>
 <translation id="3635030235490426869">Tab 1</translation>
 <translation id="3636096452488277381">Hallo <ph name="USER_GIVEN_NAME" /></translation>
@@ -1758,6 +1761,7 @@
 <translation id="3664511988987167893">Erweiterungssymbol</translation>
 <translation id="3665589677786828986">Chrome hat festgestellt, dass einige Ihrer Einstellungen von einem anderen Programm manipuliert wurden, und hat sie auf die ursprünglichen Standardwerte zurückgesetzt.</translation>
 <translation id="3668570675727296296">Spracheinstellungen</translation>
+<translation id="3668801437375206837">Damit Bluetooth-Probleme besser diagnostiziert werden können, haben Google-Mitarbeiter die Möglichkeit, Feedbackberichte durch zusätzliche Bluetooth-Protokolle zu ergänzen. Wenn diese Option ausgewählt ist, enthält Ihr Bericht btsnoop- und HCI-Protokolle der aktuellen Sitzung. Personenbezogene Daten werden dabei so gut wie möglich entfernt. Nur die Administratoren der entsprechenden Chrome OS-Produktgruppe in Listnr haben Zugriff auf die Protokolle. Diese werden nach 90 Tagen dauerhaft gelöscht.</translation>
 <translation id="3668823961463113931">Handler</translation>
 <translation id="3670229581627177274">Bluetooth aktivieren</translation>
 <translation id="3672681487849735243">Ein werkseitiger Fehler wurde festgestellt.</translation>
@@ -1776,6 +1780,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> möchte Ihren Bildschirm freigeben</translation>
 <translation id="3693415264595406141">Passwort:</translation>
 <translation id="3694027410380121301">Vorherigen Tab auswählen</translation>
+<translation id="369489984217678710">Passwörter und andere Anmeldedaten</translation>
 <translation id="3699624789011381381">E-Mail-Adresse</translation>
 <translation id="3699920817649120894">Synchronisierung und Personalisierung deaktivieren?</translation>
 <translation id="3700888195348409686">(<ph name="PAGE_ORIGIN" />) wird präsentiert</translation>
@@ -1799,6 +1804,7 @@
 <translation id="3727148787322499904">Änderungen dieser Einstellung wirken sich auf alle freigegebenen Netzwerke aus</translation>
 <translation id="3727187387656390258">Pop-up prüfen</translation>
 <translation id="3729506734996624908">Erlaubte Websites</translation>
+<translation id="3731997362820527097">Sicherheitsschlüssel auswählen</translation>
 <translation id="3732078975418297900">Fehler in Zeile <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-Server mit Step-up</translation>
 <translation id="3735740477244556633">Sortieren nach</translation>
@@ -1899,6 +1905,7 @@
 <translation id="3860381078714302691">Willkommen bei Hangouts Meet</translation>
 <translation id="3861241522664181545">Seite pausiert.</translation>
 <translation id="3862134173397075045">Herzlich willkommen bei Cast in Chrome!</translation>
+<translation id="3862693525629180217">Über integrierten Sensor bestätigen</translation>
 <translation id="3862788408946266506">App mit Manifest-Attribut "kiosk_only" muss im Chrome OS-Kioskmodus installiert werden</translation>
 <translation id="3865414814144988605">Auflösung</translation>
 <translation id="386548886866354912">Mit <ph name="EXTENSION_NAME" /> packen</translation>
@@ -2024,6 +2031,7 @@
 <translation id="4055023634561256217">Für das Zurücksetzen Ihres Geräts mit Powerwash ist ein Neustart erforderlich.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Im Store ansehen</translation>
+<translation id="4058647953897694817">Über Bluetooth bestätigen</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Dokument jetzt prüfen</translation>
 <translation id="406070391919917862">Apps im Hintergrund</translation>
@@ -2037,6 +2045,7 @@
 <translation id="407520071244661467">Skalieren</translation>
 <translation id="4075639477629295004"><ph name="FILE_NAME" /> kann nicht gestreamt werden.</translation>
 <translation id="4077917118009885966">Werbung auf dieser Website blockiert</translation>
+<translation id="4079799245038595838">Eine Benachrichtigung wurde an Ihr Smartphone gesendet. Folgen Sie den Schritten, um Ihre Identität zu bestätigen.</translation>
 <translation id="4081242589061676262">Datei kann nicht gestreamt werden.</translation>
 <translation id="4084682180776658562">Lesezeichen</translation>
 <translation id="4084835346725913160"><ph name="TAB_NAME" /> schließen</translation>
@@ -2136,6 +2145,7 @@
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="4250680216510889253">Nein</translation>
 <translation id="4252852543720145436">Kennzeichnungen für geschützte Inhalte</translation>
+<translation id="4252899949534773101">Bluetooth ist deaktiviert</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – Tabinhalte geteilt</translation>
 <translation id="4254813446494774748">Zielsprache:</translation>
 <translation id="425573743389990240">Entladerate des Akkus in Watt. Ein negativer Wert bedeutet, dass der Akku gerade aufgeladen wird.</translation>
@@ -2261,8 +2271,8 @@
 <translation id="4480590691557335796">Chrome kann auf Ihrem Computer schädliche Software suchen und entfernen</translation>
 <translation id="4481530544597605423">Entkoppelte Geräte</translation>
 <translation id="4482194545587547824">Google kann die Suche und andere Google-Dienste anhand Ihres Browserverlaufs für Sie personalisieren.</translation>
-<translation id="4493287891836751813">Dein Google Assistant</translation>
 <translation id="4495419450179050807">Nicht auf dieser Seite anzeigen</translation>
+<translation id="449938344715680828">Zum Beenden |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| gefolgt von |<ph name="ACCELERATOR3" />| drücken</translation>
 <translation id="4499718683476608392">AutoFill für Kreditkarten aktivieren, um Formulare mit nur einem Klick auszufüllen</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ist abgestürzt</translation>
 <translation id="450099669180426158">Ausrufezeichensymbol</translation>
@@ -2316,7 +2326,6 @@
 <translation id="4572659312570518089">Beim Herstellen der Verbindung zu "<ph name="DEVICE_NAME" />" wurde die Authentifizierung abgebrochen.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-Datei</translation>
 <translation id="457386861538956877">Mehr...</translation>
-<translation id="4576537685267142337">Heben Sie den Finger und tippen Sie dann noch einmal auf den Sensor</translation>
 <translation id="4576541033847873020">Bluetooth-Gerät koppeln</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> kann nicht gestreamt werden.</translation>
 <translation id="4580526846085481512">Möchten Sie wirklich $1 Elemente löschen?</translation>
@@ -2339,6 +2348,7 @@
 <translation id="4611114513649582138">Datenverbindung verfügbar</translation>
 <translation id="4613271546271159013">Die Seite, die beim Öffnen eines neuen Tabs angezeigt wird, wurde durch eine Erweiterung geändert.</translation>
 <translation id="4615586811063744755">Kein Cookie ausgewählt</translation>
+<translation id="4615618657481886098">Sie haben diesen Schlüssel bereits registriert. Er muss nicht noch einmal registriert werden.</translation>
 <translation id="4617270414136722281">Erweiterungsoptionen</translation>
 <translation id="4619615317237390068">Tabs von anderen Geräten</translation>
 <translation id="4620809267248568679">Diese Einstellung wird durch eine Erweiterung erzwungen.</translation>
@@ -2448,6 +2458,7 @@
 <translation id="4790972063719531840">Diagnose- und Nutzungsdaten automatisch an Google senden</translation>
 <translation id="4792711294155034829">&amp;Probleme melden...</translation>
 <translation id="479536056609751218">Webseite, nur HTML</translation>
+<translation id="4798236378408895261"><ph name="BEGIN_LINK" />Bluetooth-Protokolle<ph name="END_LINK" /> anhängen (Google-intern)</translation>
 <translation id="479989351350248267">Suchen</translation>
 <translation id="4801448226354548035">Konten ausblenden</translation>
 <translation id="4801512016965057443">Mobilfunk-Roaming zulassen</translation>
@@ -2514,6 +2525,7 @@
 <translation id="4882473678324857464">Fokus auf Lesezeichen</translation>
 <translation id="4882831918239250449">Legen Sie fest, wie Ihr Browserverlauf zur Personalisierung verwendet wird, z. B. bei der Suche und bei Werbung</translation>
 <translation id="4883178195103750615">Lesezeichen in HTML-Datei exportieren...</translation>
+<translation id="4883274597792587930">Den Namen finden Sie auf der Rückseite Ihres Schlüssels</translation>
 <translation id="4883436287898674711">Alle <ph name="WEBSITE_1" />-Websites</translation>
 <translation id="48838266408104654">&amp;Taskmanager</translation>
 <translation id="4883898390143004266">Apps helfen, den Standort zu ermitteln. Apps dürfen den Standortdienst von Google nutzen. Google kann in regelmäßigen Abständen anonymisierte Standortdaten erfassen und diese zur Verbesserung von Standortbestimmung und standortbasierten Diensten verwenden. <ph name="BEGIN_LINK1" />Weitere Informationen<ph name="END_LINK1" /></translation>
@@ -2561,7 +2573,6 @@
 <translation id="4941627891654116707">Schriftgröße</translation>
 <translation id="494286511941020793">Proxy-Konfigurationshilfe</translation>
 <translation id="4945444280533270988">Smart Lock ist an</translation>
-<translation id="494660967831069720">Teildaten</translation>
 <translation id="4953689047182316270">Auf Bedienungshilfen reagieren</translation>
 <translation id="4953808748584563296">Orangefarbener Standardavatar</translation>
 <translation id="4955814292505481804">Jährlich</translation>
@@ -2987,6 +2998,7 @@
 <translation id="55601339223879446">Desktopbegrenzungen auf dem Bildschirm anpassen</translation>
 <translation id="5562781907504170924">Dieser Tab ist mit einem Bluetooth-Gerät verbunden.</translation>
 <translation id="5563234215388768762">Mit Google suchen oder eine URL eingeben</translation>
+<translation id="5567950944308676169">Stecken Sie Ihren Sicherheitsschlüssel ein und aktivieren Sie ihn</translation>
 <translation id="5567989639534621706">Caches</translation>
 <translation id="5568069709869097550">Anmeldung nicht möglich</translation>
 <translation id="5568144734023334204">Android-Speicherplatz</translation>
@@ -3233,6 +3245,7 @@
 <translation id="5931146425219109062">Alle Ihre Daten auf von Ihnen besuchten Websites lesen und ändern</translation>
 <translation id="5932881020239635062">Seriennummer</translation>
 <translation id="5933376509899483611">Zeitzone</translation>
+<translation id="5938002010494270685">Sicherheitsupdate verfügbar</translation>
 <translation id="5939518447894949180">Zurücksetzen</translation>
 <translation id="5939847200023027600">PDF-Kompositionsdienst</translation>
 <translation id="5941153596444580863">Person hinzufügen...</translation>
@@ -3269,6 +3282,7 @@
 <translation id="6006484371116297560">Klassisch</translation>
 <translation id="6007237601604674381">Fehler beim Verschieben. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Die Sprachsuche ist nicht in Ihrer Sprache verfügbar.</translation>
+<translation id="6009781704028455063">Integrierter Sensor</translation>
 <translation id="6010869025736512584">Zugriff auf Video-Eingang</translation>
 <translation id="6011193465932186973">Fingerabdruck</translation>
 <translation id="6011449291337289699">Websitedaten löschen</translation>
@@ -3279,6 +3293,7 @@
 <translation id="6020431688553761150">Sie wurden vom Server nicht für den Zugriff auf diese Ressource autorisiert.</translation>
 <translation id="602251597322198729">Die Website versucht, mehrere Dateien herunterzuladen. Möchten Sie dies zulassen?</translation>
 <translation id="6022526133015258832">Im Vollbildmodus öffnen</translation>
+<translation id="6022705094403139349">Bereit zum Koppeln des Sicherheitsschlüssels?</translation>
 <translation id="6023643151125006053">Dieses Gerät (SN: <ph name="SERIAL_NUMBER" />) wurde durch den Administrator von <ph name="SAML_DOMAIN" /> gesperrt.</translation>
 <translation id="6025215716629925253">Stacktrace</translation>
 <translation id="6026047032548434446">App installieren?</translation>
@@ -3342,6 +3357,7 @@
 <translation id="6105877918873366097">Letzter Zugriff am:</translation>
 <translation id="6107012941649240045">Ausgestellt für</translation>
 <translation id="6112294629795967147">Zum Anpassen der Größe tippen</translation>
+<translation id="6112931163620622315">Smartphone prüfen</translation>
 <translation id="6112952769866305444">Person bearbeiten: <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Texte und Bilder aus der Zwischenablage abrufen</translation>
 <translation id="6116921718742659598">Sprach- und Eingabeeinstellungen ändern</translation>
@@ -3387,6 +3403,7 @@
 <translation id="6169666352732958425">Der Desktop kann nicht übertragen werden</translation>
 <translation id="6171948306033499786">Druckvorgang pausieren</translation>
 <translation id="6175314957787328458">Microsoft-Domain-GUID</translation>
+<translation id="6176043333338857209">Bluetooth wird vorübergehend aktiviert, damit eine Kommunikation mit dem Sicherheitsschlüssel möglich ist</translation>
 <translation id="6178664161104547336">Zertifikat auswählen</translation>
 <translation id="6181431612547969857">Download blockiert</translation>
 <translation id="6185132558746749656">Gerätestandort</translation>
@@ -3474,6 +3491,7 @@
 <translation id="6311220991371174222">Chrome kann nicht gestartet werden, da beim Öffnen Ihres Profils ein Fehler aufgetreten ist. Versuchen Sie, Chrome neu zu starten.</translation>
 <translation id="6312400084708441752">Die Angaben umfassen Informationen zu schädlicher Software, Systemeinstellungen und Prozessen auf Ihrem Computer</translation>
 <translation id="6312403991423642364">Unbekannter Netzwerkfehler</translation>
+<translation id="6313320178014547270">Sie verwenden einen Schlüssel, der nicht auf dieser Website registriert ist</translation>
 <translation id="6313641880021325787">VR BEENDEN</translation>
 <translation id="6314819609899340042">Sie haben die Debugging-Funktionen auf diesem <ph name="IDS_SHORT_PRODUCT_NAME" />-Gerät aktiviert.</translation>
 <translation id="6315493146179903667">Alle nach vorn bringen</translation>
@@ -3518,7 +3536,6 @@
 <translation id="6384275966486438344">Sucheinstellungen in <ph name="SEARCH_HOST" /> ändern</translation>
 <translation id="6385543213911723544">Websites können Cookiedaten speichern und lesen.</translation>
 <translation id="6388429472088318283">Nach Sprache suchen</translation>
-<translation id="6388771388956873507">Suchen Sie den Fingerabdrucksensor Ihres Geräts und berühren Sie ihn mit dem Finger</translation>
 <translation id="6390799748543157332">In diesem Fenster aufgerufene Seiten erscheinen nicht im Browserverlauf und hinterlassen auch keine anderweitigen Spuren wie Cookies auf dem Computer, nachdem Sie alle geöffneten Gastmodus-Fenster geschlossen haben. Heruntergeladene Dateien bleiben jedoch erhalten.</translation>
 <translation id="6390994422085833176">Synchronisierungs- und Personalisierungsfunktionen nach der Einrichtung prüfen</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />Systeminformationen<ph name="END_LINK1" /> und <ph name="BEGIN_LINK2" />Messwerte<ph name="END_LINK2" /> senden</translation>
@@ -3530,6 +3547,7 @@
 <translation id="6399774419735315745">Spionin</translation>
 <translation id="6401445054534215853">Ablageartikel 1</translation>
 <translation id="6404511346730675251">Lesezeichen bearbeiten</translation>
+<translation id="6405510437656969977">Fahren Sie fort, wenn Sie bereit sind, den PIN einzugeben</translation>
 <translation id="6406303162637086258">Browser-Neustart simulieren</translation>
 <translation id="6406506848690869874">Synchronisierung</translation>
 <translation id="6408118934673775994">Eigene Daten auf <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> und <ph name="WEBSITE_3" /> lesen und ändern</translation>
@@ -3648,6 +3666,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – Desktopinhalte geteilt</translation>
 <translation id="6580151766480067746">ARC-Version</translation>
 <translation id="6581162200855843583">Google Drive-Link</translation>
+<translation id="6582080224869403177">Setzen Sie Ihr <ph name="DEVICE_TYPE" /> zurück, um das Sicherheitsupdate durchzuführen.</translation>
 <translation id="6582421931165117398">Ändern Sie jetzt Ihr Passwort, um Ihre persönlichen Informationen zu schützen. Bevor Sie Ihr Passwort ändern können, werden Sie aufgefordert, sich anzumelden.</translation>
 <translation id="6583851739559471707">Auf Websites blockiert, die für gewöhnlich aufdringliche Werbung anzeigen (empfohlen)</translation>
 <translation id="6584878029876017575">Microsoft-Lebensdauersignatur</translation>
@@ -3697,6 +3716,7 @@
 <translation id="6644846457769259194">Gerät wird aktualisiert (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL zum Zurückrufen der Zertifizierungsstelle von Netscape-Zertifikaten</translation>
 <translation id="6647838571840953560">Derzeit auf <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Sicherheitsschlüssel aktiviert…</translation>
 <translation id="6648911618876616409">Ein wichtiges Update ist zur Installation bereit. Melden Sie sich an, um die Installation zu starten.</translation>
 <translation id="6649018507441623493">Bitte warten...</translation>
 <translation id="6649563841575838401">Das Archivformat wird nicht unterstützt oder die Datei ist fehlerhaft.</translation>
@@ -3772,6 +3792,7 @@
 <translation id="6759193508432371551">Zurücksetzen auf Werkseinstellungen</translation>
 <translation id="6767639283522617719">Beitritt zur Domain nicht möglich. Achten Sie darauf, dass die Einstellungen für die Organisationseinheit richtig sind.</translation>
 <translation id="6769712124046837540">Drucker wird hinzugefügt...</translation>
+<translation id="6770664076092644100">Über NFC bestätigen</translation>
 <translation id="6771503742377376720">Ist eine Zertifizierungsstelle</translation>
 <translation id="6777817260680419853">Weiterleitung blockiert</translation>
 <translation id="6778959797435875428">Stummschaltung für Websites aufheben</translation>
@@ -3807,6 +3828,7 @@
 <translation id="6823506025919456619">Melden Sie sich in Chrome an, um Ihre Geräte zu sehen.</translation>
 <translation id="6824564591481349393">E-Mail-Adr&amp;esse kopieren</translation>
 <translation id="6825184156888454064">Nach Namen sortieren</translation>
+<translation id="6826872289184051766">Über USB bestätigen</translation>
 <translation id="6827236167376090743">Dieses Video läuft immer weiter und weiter...</translation>
 <translation id="6828153365543658583">Anmeldung auf die folgenden Nutzer beschränken:</translation>
 <translation id="6828860976882136098">Automatische Updates für alle Nutzer konnten nicht eingerichtet werden (Preflight-Ausführungsfehler: <ph name="ERROR_NUMBER" />)</translation>
@@ -3840,6 +3862,7 @@
 <translation id="6880587130513028875">Bilder wurden auf dieser Seite blockiert.</translation>
 <translation id="6883319974225028188">Hoppla! Das System konnte die Gerätekonfiguration nicht speichern.</translation>
 <translation id="6885771755599377173">Vorschau der Systeminformationen</translation>
+<translation id="6886476658664859389">NFC-Sicherheitsschlüssel</translation>
 <translation id="6886871292305414135">Link in neuem &amp;Tab öffnen</translation>
 <translation id="6892812721183419409">Link als <ph name="USER" /> öffnen</translation>
 <translation id="6896758677409633944">Kopieren</translation>
@@ -4005,6 +4028,7 @@
 <translation id="713122686776214250">&amp;Seite hinzufügen...</translation>
 <translation id="7133578150266914903">Ihr Administrator setzt dieses Gerät zurück (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Schrift verkleinern</translation>
+<translation id="7135729336746831607">Bluetooth aktivieren?</translation>
 <translation id="7136694880210472378">Als Standard festlegen</translation>
 <translation id="7136984461011502314">Herzlich willkommen bei <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Ein Fehler ist aufgetreten. Versuchen Sie es noch einmal mit anderen Bildern.</translation>
@@ -4050,6 +4074,7 @@
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" wurde gelöscht</translation>
 <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> wird heruntergeladen...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Seite verlassen}other{Seiten verlassen}}</translation>
+<translation id="721467499098558573">Halten Sie die Taste auf Ihrem Sicherheitsschlüssel mindestens fünf Sekunden lang gedrückt</translation>
 <translation id="7216409898977639127">Mobilfunkanbieter</translation>
 <translation id="7216595297012131718">Ordnen Sie Sprachen in der gewünschten Reihenfolge an</translation>
 <translation id="7220019174139618249">Passwort kann nicht in "<ph name="FOLDER" />" exportiert werden</translation>
@@ -4085,6 +4110,7 @@
 <translation id="7256710573727326513">In Tab öffnen</translation>
 <translation id="725758059478686223">Druckdienst</translation>
 <translation id="7257666756905341374">Daten lesen, die Sie kopieren und einfügen</translation>
+<translation id="7260764918845374269">Damit Ihr Sicherheitsschlüssel angezeigt werden kann, muss er sich im Kopplungsmodus befinden. Halten Sie die Taste auf Ihrem Sicherheitsschlüssel mindestens fünf Sekunden lang gedrückt.</translation>
 <translation id="7262004276116528033">Dieser Anmeldedienst wird von <ph name="SAML_DOMAIN" /> gehostet.</translation>
 <translation id="7268365133021434339">Tabs schließen</translation>
 <translation id="7268659760406822741">Verfügbare Dienste</translation>
@@ -4121,7 +4147,6 @@
 <translation id="7309257895202129721">&amp;Steuerelemente anzeigen</translation>
 <translation id="7310598146671372464">Fehler beim Anmelden. Der Server unterstützt keine angegebenen Kerberos-Verschlüsselungstypen. Bitte wenden Sie sich an Ihren Administrator.</translation>
 <translation id="7311079019872751559">Plug-in-Zugriff ohne Sandbox</translation>
-<translation id="7311891583377621132">Bewegen Sie Ihren Finger etwas, um einen anderen Teil des Fingerabdrucks zu erfassen</translation>
 <translation id="7317680720589234980">Optionen für Bildschirmsperre und Anmeldung</translation>
 <translation id="7321545336522791733">Server nicht erreichbar</translation>
 <translation id="7324297612904500502">Beta-Forum</translation>
@@ -4203,6 +4228,7 @@
 <translation id="7464490149090366184">Fehler beim Zippen, Element bereits vorhanden: "$1"</translation>
 <translation id="7465778193084373987">URL zum Zurückrufen von Netscape-Zertifikaten</translation>
 <translation id="7469406957790636836">Wenn Sie diese Funktion aktivieren möchten, müssen Sie zuerst die Rechtschreibprüfung unter <ph name="BEGIN_LINK" />Sprache und Eingabe<ph name="END_LINK" /> einschalten</translation>
+<translation id="7469518857922439236">Sie erhalten Benachrichtigungen für SMS und der Computer wird gemerkt</translation>
 <translation id="7469894403370665791">Verbindung zu diesem Netzwerk automatisch herstellen</translation>
 <translation id="747114903913869239">Fehler: Erweiterung kann nicht entschlüsselt werden.</translation>
 <translation id="7473753388963818366"><ph name="DEVICE_TYPE" /> einrichten</translation>
@@ -4252,6 +4278,7 @@
 <translation id="7531779363494549572">Gehen Sie zu "Einstellungen" &gt; "Apps &amp; Benachrichtigungen" &gt; "Benachrichtigungen".</translation>
 <translation id="7536709149194614609">Bitte starten Sie Ihr Gerät neu und versuchen Sie es dann noch einmal.</translation>
 <translation id="7537601449003285327">An Taskleiste anheften</translation>
+<translation id="7539856059004947393">Bluetooth-Sicherheitsschlüssel</translation>
 <translation id="7540972813190816353">Fehler beim Suchen nach Updates: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Debugging-Funktionen auf diesem <ph name="IDS_SHORT_PRODUCT_NAME" />-Gerät aktivieren</translation>
 <translation id="7544853251252956727">Zufallsmix</translation>
@@ -4354,6 +4381,7 @@
 <translation id="7709152031285164251">Fehler – <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Streamen...</translation>
 <translation id="7711920809702896782">Bildinformationen</translation>
+<translation id="7712740978240882272">Sie können Ihr Chromebook mit Ihrem Smartphone entsperren. <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Unbekannte Erweiterung mit der ID "<ph name="EXTENSION_ID" />"</translation>
 <translation id="7714307061282548371">Cookies von <ph name="DOMAIN" /> zugelassen</translation>
 <translation id="7714464543167945231">Zertifikat</translation>
@@ -4569,6 +4597,7 @@
 <translation id="7984068253310542383"><ph name="DISPLAY_NAME" /> spiegeln</translation>
 <translation id="7986295104073916105">Einstellungen für gespeicherte Passwörter aufrufen und ändern</translation>
 <translation id="7987764905897278458">Google clever nutzen</translation>
+<translation id="798835209536175951">Sie können SMS auf Ihrem Chromebook senden und empfangen. <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Bedienungshilfen aktivieren</translation>
 <translation id="7994702968232966508">EAP-Methode</translation>
 <translation id="799547531016638432">Verknüpfung entfernen</translation>
@@ -4701,6 +4730,7 @@
 <translation id="8185331656081929126">Benachrichtigung anzeigen, wenn neue Drucker im Netzwerk gefunden werden</translation>
 <translation id="8186609076106987817">Die Datei konnte nicht gefunden werden.</translation>
 <translation id="8188120771410500975">&amp;Rechtschreibung in allen Textfeldern prüfen</translation>
+<translation id="8188389033983459049">Überprüfen Sie Ihre Geräteeinstellungen und aktivieren Sie Bluetooth, um fortzufahren</translation>
 <translation id="8190193592390505034">Verbindung zu <ph name="PROVIDER_NAME" /> wird hergestellt.</translation>
 <translation id="8191230140820435481">Apps, Erweiterungen und Designs verwalten</translation>
 <translation id="8191453843330043793">V8-Proxy-Resolver</translation>
@@ -4796,6 +4826,7 @@
 <translation id="8353683614194668312">Berechtigungen:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> – <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Seiten wiederherstellen?</translation>
+<translation id="8362993567435070757">Sie finden die sechsstellige PIN auf der Rückseite Ihres Schlüssels</translation>
 <translation id="8363095875018065315">Stabil</translation>
 <translation id="8363142353806532503">Mikrofon blockiert</translation>
 <translation id="8366396658833131068">Ihre Netzwerkverbindung wurde wiederhergestellt. Wählen Sie ein anderes Netzwerk aus oder klicken Sie unten auf "Weiter", um Ihre Kiosk-App zu starten.</translation>
@@ -4804,6 +4835,7 @@
 <translation id="8371695176452482769">Jetzt sprechen</translation>
 <translation id="8372369524088641025">Ungültiger WEP-Schlüssel</translation>
 <translation id="8373553483208508744">Tabs stummschalten</translation>
+<translation id="8379878387931047019">Das Gerät ist nicht mit dem Sicherheitsschlüssel kompatibel, der von dieser Website angefordert wird</translation>
 <translation id="8382913212082956454">E-Mail-Adr&amp;esse kopieren</translation>
 <translation id="8386903983509584791">Suche abgeschlossen</translation>
 <translation id="8389492867173948260">Dieser Erweiterung erlauben, alle Ihre Daten auf von Ihnen besuchten Websites zu lesen und zu ändern:</translation>
@@ -4922,6 +4954,7 @@
 <translation id="8557930019681227453">Manifest</translation>
 <translation id="8559694214572302298">Bild-Decodierer</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Weiterlesen</translation>
 <translation id="8565650234829130278">Sie haben versucht, ein Downgrade der App auszuführen.</translation>
 <translation id="8569002732135253578"><ph name="DOCUMENT_NAME" /> wird gedruckt</translation>
 <translation id="8569682776816196752">Keine Ziele gefunden</translation>
@@ -4962,7 +4995,6 @@
 <translation id="8639047128869322042">Nach schädlicher Software wird gesucht...</translation>
 <translation id="8639963783467694461">AutoFill-Einstellungen</translation>
 <translation id="8642171459927087831">Zugriffs-Token</translation>
-<translation id="8642267168767642381">Finger zu langsam bewegt</translation>
 <translation id="8642947597466641025">Schriftgrad vergrößern</translation>
 <translation id="8643418457919840804">Wählen Sie eine Option aus, um fortzufahren:</translation>
 <translation id="8645354835496065562">Zugriff auf Sensor weiterhin zulassen</translation>
@@ -4977,6 +5009,7 @@
 <translation id="8655295600908251630">Kanal</translation>
 <translation id="8655319619291175901">Hoppla... etwas ist schiefgelaufen.</translation>
 <translation id="8655972064210167941">Sie konnten nicht angemeldet werden, weil Ihr Passwort nicht bestätigt werden konnte. Bitte wenden Sie sich an Ihren Administrator oder versuchen Sie es erneut.</translation>
+<translation id="8656619792520327915">Weiteren Sicherheitsschlüssel hinzufügen</translation>
 <translation id="8656768832129462377">Nicht überprüfen</translation>
 <translation id="8658595122208653918">Druckeroptionen ändern...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> teilt Bildschirm und Audio mit <ph name="TAB_NAME" />.</translation>
@@ -5099,6 +5132,7 @@
 <translation id="8814687660896548945">Das Archiv wird geprüft. Bitte warten...</translation>
 <translation id="881799181680267069">Andere ausblenden</translation>
 <translation id="8818152010000655963">Hintergrund</translation>
+<translation id="8818958672113348984">Über mein Smartphone bestätigen</translation>
 <translation id="8820817407110198400">Lesezeichen</translation>
 <translation id="8821045908425223359">IP-Adresse automatisch konfigurieren</translation>
 <translation id="882204272221080310">Für mehr Sicherheit Firmware aktualisieren.</translation>
@@ -5129,11 +5163,13 @@
 <translation id="8872155268274985541">Ungültige Manifestdatei für externes Kiosk-Update gefunden. Die Kiosk-App konnte nicht aktualisiert werden. Bitte entfernen Sie den USB-Stick.</translation>
 <translation id="8874184842967597500">Nicht verbunden</translation>
 <translation id="8876215549894133151">Format:</translation>
+<translation id="8876307312329369159">Diese Einstellung kann nicht in einer Demositzung geändert werden.</translation>
 <translation id="8876309039915144086">Passwort generieren...</translation>
 <translation id="8877448029301136595">[übergeordnetes Verzeichnis]</translation>
 <translation id="8879284080359814990">Tab "Anzeigen al&amp;s"</translation>
 <translation id="8883847527783433352">Mit einem anderen Konto synchronisieren</translation>
 <translation id="8885197664446363138">Smart Lock ist nicht verfügbar.</translation>
+<translation id="88870264962436283">Touch ID mit <ph name="APP_NAME" /> verwenden</translation>
 <translation id="8888432776533519951">Farbe:</translation>
 <translation id="8890516388109605451">Quellen</translation>
 <translation id="8892168913673237979">Fertig!</translation>
@@ -5154,6 +5190,7 @@
 <translation id="8915370057835397490">Vorschläge werden geladen</translation>
 <translation id="8916476537757519021">Inkognito-Subframe: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Wenn Sie Ihre Passwörter auf allen Ihren Geräten verfügbar haben möchten, melden Sie sich an und aktivieren Sie die Synchronisierung.</translation>
+<translation id="8921366488406707015">Sicherheitsschlüssel wird geprüft…</translation>
 <translation id="8922013791253848639">Werbung auf dieser Website immer zulassen</translation>
 <translation id="8925458182817574960">&amp;Einstellungen</translation>
 <translation id="8926389886865778422">Nicht mehr fragen</translation>
@@ -5263,6 +5300,7 @@
 <translation id="9066782832737749352">Sprachausgabe</translation>
 <translation id="9072550133391925347">Mit <ph name="PASSWORD_MANAGER_BRAND" /> werden Sie mit Ihren gespeicherten Passwörtern automatisch auf allen entsprechenden Websites und Apps angemeldet.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Koppeln Sie Ihren Schlüssel mit diesem Gerät, um sich damit in Ihrem Konto anmelden zu können</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-Maus angeschlossen</translation>
 <translation id="9076523132036239772">Ihre E-Mail-Adresse bzw. Ihr Passwort konnte nicht bestätigt werden. Stellen Sie zunächst eine Netzwerkverbindung her.</translation>
@@ -5324,7 +5362,6 @@
 <translation id="916607977885256133">Bild-in-Bild</translation>
 <translation id="9169496697824289689">Tastenkombinationen ansehen</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" /> zum Startbildschirm hinzufügen</translation>
-<translation id="9170397650136757332">Bewegen Sie Ihren Finger nun etwas, damit Ihr Fingerabdruck vollständig erfasst wird</translation>
 <translation id="9170848237812810038">&amp;Rückgängig</translation>
 <translation id="9170884462774788842">Ein anderes Programm auf Ihrem Computer hat ein Design hinzugefügt, das sich möglicherweise auf die Funktionsweise von Chrome auswirkt.</translation>
 <translation id="9173995187295789444">Nach Bluetooth-Geräten wird gesucht…</translation>
@@ -5388,6 +5425,7 @@
 <translation id="971774202801778802">URL als Lesezeichen speichern</translation>
 <translation id="973473557718930265">Beenden</translation>
 <translation id="974555521953189084">Geben Sie Ihre Passphrase ein, um die Synchronisierung zu starten</translation>
+<translation id="977640333593638907">Bei den meisten Schlüsseln genügt es, zur Verwendung die Taste zu drücken</translation>
 <translation id="981121421437150478">Offline</translation>
 <translation id="983511809958454316">Diese Funktion wird im VR-Modus nicht unterstützt</translation>
 <translation id="984275831282074731">Zahlungsmethoden</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 80906c57..738eb91 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Χρήση συγχρονισμού και όλων των υπηρεσιών</translation>
 <translation id="1272079795634619415">Διακοπή</translation>
-<translation id="1272242203003205253">Οι Συνεργάτες Google μαζί με τον Βοηθό σας είναι διαθέσιμοι για την εξυπηρέτησή σας</translation>
 <translation id="1272978324304772054">Αυτός ο λογαριασμός χρήστη δεν ανήκει στον τομέα στον οποίο έχει εγγραφεί η συσκευή.  Εάν επιθυμείτε να εγγραφείτε σε έναν διαφορετικό τομέα θα πρέπει πρώτα να κάνετε ανάκτηση συσκευής.</translation>
 <translation id="1274977772557788323">Ρυθμίσεις αποθήκευσης του Adobe Flash Player</translation>
 <translation id="1274997165432133392">Εμφάνιση cookie και άλλων δεδομένων ιστότοπου</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Δεν ήταν δυνατός ο εντοπισμός του τηλεφώνου σας</translation>
 <translation id="1616206807336925449">Αυτή η επέκταση δεν απαιτεί ειδικά δικαιώματα.</translation>
 <translation id="1616298854599875024">Δεν είναι δυνατή η εισαγωγή της επέκτασης "<ph name="IMPORT_NAME" />", επειδή δεν είναι κοινόχρηστη λειτουργική μονάδα</translation>
-<translation id="161707228174452095">Προστέθηκε δακτυλικό αποτύπωμα!</translation>
 <translation id="1618268899808219593">Κέντρο βοήθειας</translation>
 <translation id="162035744160882748">Ενεργοποιήστε τον συγχρονισμό, την εξατομίκευση και άλλες υπηρεσίες Google</translation>
 <translation id="1620510694547887537">Κάμερα</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">Αρχείο RAR</translation>
 <translation id="2034346955588403444">Προσθήκη άλλου δικτύου WiFi</translation>
 <translation id="203574396658008164">Ενεργοποίηση λήψης σημειώσεων από την οθόνη κλειδώματος</translation>
-<translation id="2039623879703305659">Το δάχτυλο μετακινήθηκε πάρα πολύ γρήγορα</translation>
 <translation id="2040460856718599782">Ωχ! Κάτι πήγε στραβά κατά την προσπάθειά μας να ελέγξουμε την ταυτότητά σας. Ελέγξτε πάλι τα διαπιστευτήρια σύνδεσής σας και δοκιμάστε ξανά.</translation>
 <translation id="2043818754674261542">Η απόσταση που απαιτείται, προκειμένου το τηλέφωνο να ξεκλειδώσει αυτό το <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Να διαγραφεί το πιστοποιητικό διακομιστή "<ph name="CERTIFICATE_NAME" />";</translation>
 <translation id="2100273922101894616">Αυτόματη σύνδεση</translation>
 <translation id="2101225219012730419">Έκδοση:</translation>
-<translation id="2107494551712864447">Προσθήκη δακτυλικού αποτυπώματος</translation>
 <translation id="2112877397266219826">Ενεργοποιήστε τον ελεγκτή αφής για ρύθμιση</translation>
 <translation id="21133533946938348">Καρφίτσωμα καρτέλας</translation>
 <translation id="2113479184312716848">Άνοιγμα αρχείου...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Επιφάνεια εργασίας</translation>
 <translation id="2526619973349913024">Έλεγχος για ενημερώσεις</translation>
 <translation id="2527167509808613699">Όλα τα είδη συνδέσεων</translation>
-<translation id="2532026602297547439">Λερωμένος αισθητήρας</translation>
 <translation id="2532589005999780174">Λειτουργία υψηλής αντίθεσης</translation>
 <translation id="253434972992662860">&amp;Παύση</translation>
 <translation id="2534460670861217804">Ασφαλής διακομιστής μεσολάβησης HTTP</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">Δημιουργία αντιγράφων ασφαλείας για τις φωτογραφίες και τα βίντεό σας</translation>
 <translation id="3060379269883947824">Ενεργοποίηση λειτουργίας "Επιλέξτε για εκφώνηση"</translation>
 <translation id="3061707000357573562">Υπηρεσία ενημέρωσης κώδικα</translation>
-<translation id="3064410671692449875">Ανεπαρκή δεδομένα</translation>
 <translation id="3065041951436100775">Σχόλια για απότομο κλείσιμο καρτέλας.</translation>
 <translation id="3067198179881736288">Εγκατάσταση εφαρμογής;</translation>
 <translation id="3067198360141518313">Εκτέλεση αυτής της προσθήκης</translation>
@@ -2265,7 +2259,6 @@
 <translation id="4480590691557335796">Το Chrome μπορεί να εντοπίσει και να καταργήσει επιβλαβές λογισμικό από τον υπολογιστή σας</translation>
 <translation id="4481530544597605423">Συσκευές στις οποίες διακόπηκε η σύζευξη</translation>
 <translation id="4482194545587547824">Η Google μπορεί να χρησιμοποιεί το ιστορικό περιήγησής σας για να εξατομικεύει την Αναζήτηση και άλλες υπηρεσίες Google</translation>
-<translation id="4493287891836751813">Γνωρίστε τον Βοηθό Google</translation>
 <translation id="4495419450179050807">Να μην γίνεται εμφάνιση σε αυτήν τη σελίδα</translation>
 <translation id="4499718683476608392">Ενεργοποίηση Αυτόματης συμπλήρωσης στοιχείων πιστωτικής κάρτας για τη συμπλήρωση φορμών με ένα μόνο κλικ</translation>
 <translation id="4500114933761911433">Η προσθήκη <ph name="PLUGIN_NAME" /> παρουσίασε σφάλμα</translation>
@@ -2320,7 +2313,6 @@
 <translation id="4572659312570518089">Ο έλεγχος ταυτότητας ακυρώθηκε κατά τη σύνδεση στη συσκευή "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">Αρχείο <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Περισσότερα...</translation>
-<translation id="4576537685267142337">Σηκώστε το δάχτυλο και, στη συνέχεια, αγγίξτε ξανά τον αισθητήρα</translation>
 <translation id="4576541033847873020">Σύζευξη συσκευής Bluetooth</translation>
 <translation id="4579581181964204535">Δεν είναι δυνατή η μετάδοση <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Είστε σίγουροι ότι θέλετε να διαγράψετε $1 στοιχεία;</translation>
@@ -2509,7 +2501,7 @@
 <translation id="4876273079589074638">Βοηθήστε τους τεχνικούς μας να ερευνήσουν και να διορθώσουν αυτό το σφάλμα. Παραθέστε με ακρίβεια τα βήματα που ακολουθήσατε, αν αυτό είναι δυνατόν. Όλες οι λεπτομέρειες είναι σημαντικές!</translation>
 <translation id="4876895919560854374">Κλείδωμα και ξεκλείδωμα της οθόνης</translation>
 <translation id="4877017884043316611">Σύζευξη με Chromebox</translation>
-<translation id="4879491255372875719">Αυτόματος (προεπιλογή)</translation>
+<translation id="4879491255372875719">Αυτόματο (προεπιλογή)</translation>
 <translation id="4880214202172289027">Ρυθμιστικό έντασης ήχου</translation>
 <translation id="4880328057631981605">Όνομα σημείου πρόσβασης</translation>
 <translation id="4880520557730313061">Αυτόματη επιδιόρθωση</translation>
@@ -2565,7 +2557,6 @@
 <translation id="4941627891654116707">Μέγεθος γραμματοσειράς</translation>
 <translation id="494286511941020793">Βοήθεια για τη διαμόρφωση διακομιστή μεσολάβησης</translation>
 <translation id="4945444280533270988">Το Smart Lock είναι ενεργό</translation>
-<translation id="494660967831069720">Μερικά δεδομένα</translation>
 <translation id="4953689047182316270">Απάντηση σε συμβάντα προσβασιμότητας</translation>
 <translation id="4953808748584563296">Προεπιλεγμένο πορτοκαλί avatar</translation>
 <translation id="4955814292505481804">Ετήσια</translation>
@@ -3523,7 +3514,6 @@
 <translation id="6384275966486438344">Αλλαγή των ρυθμίσεων αναζήτησης σε: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Οι ιστότοποι ενδέχεται να αποθηκεύουν και να διαβάζουν δεδομένα cookie</translation>
 <translation id="6388429472088318283">Αναζήτηση γλωσσών</translation>
-<translation id="6388771388956873507">Βρείτε τον αισθητήρα δακτυλικών αποτυπωμάτων στη συσκευή σας και αγγίξτε τον με το δάχτυλό σας</translation>
 <translation id="6390799748543157332">Οι σελίδες που βλέπετε σε αυτό το παράθυρο δεν θα εμφανίζεται στο ιστορικό του προγράμματος περιήγησης και δεν θα αφήνουν άλλα ίχνη, όπως cookie, στον υπολογιστή αφού κλείσετε όλα τα ανοιχτά παράθυρα Επισκέπτη. Ωστόσο, τυχόν αρχεία τα οποία έχετε κατεβάσει θα διατηρηθούν.</translation>
 <translation id="6390994422085833176">Ελέγξτε τις λειτουργίες συγχρονισμού και εξατομίκευσης μετά τη ρύθμιση</translation>
 <translation id="6395423953133416962">Αποστολή <ph name="BEGIN_LINK1" />πληροφοριών συστήματος<ph name="END_LINK1" /> και <ph name="BEGIN_LINK2" />μετρήσεων<ph name="END_LINK2" /></translation>
@@ -4126,7 +4116,6 @@
 <translation id="7309257895202129721">Εμφάνιση &amp;στοιχείων ελέγχου</translation>
 <translation id="7310598146671372464">Η σύνδεση απέτυχε. Ο διακομιστής δεν υποστηρίζει τους καθορισμένους τύπους κρυπτογράφησης Kerberos. Επικοινωνήστε με τον διαχειριστή σας.</translation>
 <translation id="7311079019872751559">Πρόσβαση σε προσθήκη εκτός περιβάλλοντος δοκιμών</translation>
-<translation id="7311891583377621132">Μετακινήστε ελαφρώς για να αποτυπώσετε ένα διαφορετικό τμήμα του δακτυλικού αποτυπώματος</translation>
 <translation id="7317680720589234980">Επιλογές κλειδώματος οθόνης και σύνδεσης</translation>
 <translation id="7321545336522791733">Μη προσβάσιμος διακομιστής</translation>
 <translation id="7324297612904500502">Φόρουμ για την έκδοση beta</translation>
@@ -4966,7 +4955,6 @@
 <translation id="8639047128869322042">Έλεγχος για επιβλαβές λογισμικό…</translation>
 <translation id="8639963783467694461">Ρυθμίσεις αυτόματης συμπλήρωσης</translation>
 <translation id="8642171459927087831">Διακριτικό πρόσβασης</translation>
-<translation id="8642267168767642381">Το δάχτυλο μετακινήθηκε πάρα πολύ αργά</translation>
 <translation id="8642947597466641025">Μεγέθυνση κειμένου</translation>
 <translation id="8643418457919840804">Για να συνεχίσετε, ορίστε μια επιλογή:</translation>
 <translation id="8645354835496065562">Να εξακολουθήσει να επιτρέπεται η πρόσβαση στους αισθητήρες</translation>
@@ -5325,7 +5313,6 @@
 <translation id="916607977885256133">Παράθεση εικόνων</translation>
 <translation id="9169496697824289689">Προβολή συντομεύσεων πληκτρολογίου</translation>
 <translation id="9169931577761441333">Προσθήκη του <ph name="APP_NAME" /> στην Αρχική οθόνη</translation>
-<translation id="9170397650136757332">Μετακινήστε ελαφρώς το δάχτυλό σας για να καταγράψετε όλα τα διαφορετικά τμήματα του δαχτυλικού σας αποτυπώματος</translation>
 <translation id="9170848237812810038">Αναί&amp;ρεση</translation>
 <translation id="9170884462774788842">Κάποιο άλλο πρόγραμμα στον υπολογιστή σας πρόσθεσε ένα θέμα, το οποίο ενδέχεται να αλλάξει τον τρόπο λειτουργίας του Chrome.</translation>
 <translation id="9173995187295789444">Σάρωση για συσκευές Bluetooth…</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 8a54154d..c7fd1cbb3 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Shelf item 5</translation>
 <translation id="1227507814927581609">Authentication failed while connecting to "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">system menu</translation>
+<translation id="123186018454553812">Try a different key</translation>
 <translation id="1232569758102978740">Untitled</translation>
 <translation id="1233721473400465416">Locale</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Use sync and all services</translation>
 <translation id="1272079795634619415">Stop</translation>
-<translation id="1272242203003205253">Google Partners work with your Assistant to help you</translation>
 <translation id="1272978324304772054">This user account does not belong to the domain that the device is enrolled to.  If you want to enrol to a different domain you need to go through device recovery first.</translation>
 <translation id="1274977772557788323">Adobe Flash Player Storage settings</translation>
 <translation id="1274997165432133392">Cookies and other site data</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Version <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Search passwords</translation>
 <translation id="1487335504823219454">On – customised settings</translation>
+<translation id="1489664337021920575">Choose another option</translation>
 <translation id="1493892686965953381">Waiting for <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> other available devices.</translation>
 <translation id="1497522201463361063">Unable to rename "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Application Window</translation>
 <translation id="15373452373711364">Large mouse cursor</translation>
 <translation id="1538729222189715449">Opening Linux files...</translation>
+<translation id="153933193410874873">We couldn't verify your identity on this device</translation>
 <translation id="1540605929960647700">Enable demo mode</translation>
 <translation id="1543284117603151572">Imported From Edge</translation>
 <translation id="1545177026077493356">Automatic Kiosk Mode</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">This image can't be used. Choose a different image.</translation>
 <translation id="1566049601598938765">Website</translation>
 <translation id="1567387640189251553">A different keyboard has been connected since you last entered your password. It may be attempting to steal your keystrokes.</translation>
+<translation id="1567750922576943685">Verifying your identity helps protect your personal information</translation>
 <translation id="1567993339577891801">JavaScript Console</translation>
 <translation id="1568067597247500137">Mute Site</translation>
 <translation id="1568323446248056064">Open display device settings</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Unable to detect your phone</translation>
 <translation id="1616206807336925449">This extension requires no special permissions.</translation>
 <translation id="1616298854599875024">Unable to import extension '<ph name="IMPORT_NAME" />' because it is not a shared module</translation>
-<translation id="161707228174452095">Fingerprint added!</translation>
 <translation id="1618268899808219593">Help Centre</translation>
 <translation id="162035744160882748">Turn on sync, personalisation and other Google services</translation>
 <translation id="1620510694547887537">Camera</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">RAR archive</translation>
 <translation id="2034346955588403444">Add other Wi-Fi network</translation>
 <translation id="203574396658008164">Enable note taking from lock screen</translation>
-<translation id="2039623879703305659">Finger moved too quickly</translation>
 <translation id="2040460856718599782">Oops!  Something went wrong when trying to authenticate you. Please double-check your sign-in credentials and try again.</translation>
 <translation id="2043818754674261542">Distance needed for phone to unlock this <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Delete server certificate "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Auto Sign-in</translation>
 <translation id="2101225219012730419">Version:</translation>
-<translation id="2107494551712864447">Add a fingerprint</translation>
 <translation id="2112877397266219826">Turn on your touch controller to set me up</translation>
 <translation id="21133533946938348">Pin Tab</translation>
 <translation id="2113479184312716848">Open &amp;File...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Desktop</translation>
 <translation id="2526619973349913024">Check for update</translation>
 <translation id="2527167509808613699">Any kind of connection</translation>
-<translation id="2532026602297547439">Sensor dirty</translation>
 <translation id="2532589005999780174">High contrast mode</translation>
 <translation id="253434972992662860">&amp;Pause</translation>
 <translation id="2534460670861217804">Secure HTTP Proxy</translation>
@@ -1196,6 +1195,7 @@
 <translation id="2783298271312924866">Downloaded</translation>
 <translation id="2783321960289401138">Create shortcut...</translation>
 <translation id="2783829359200813069">Select encryption types</translation>
+<translation id="2783952358106015700">Use your security key with <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Activating your mobile data service</translation>
 <translation id="2785873697295365461">File descriptors</translation>
 <translation id="2787047795752739979">Overwrite original</translation>
@@ -1376,7 +1376,6 @@
 <translation id="3057861065630527966">Backup your photos and videos</translation>
 <translation id="3060379269883947824">Enable Select to Speak</translation>
 <translation id="3061707000357573562">Patch Service</translation>
-<translation id="3064410671692449875">Insufficient data</translation>
 <translation id="3065041951436100775">Tab killed feedback.</translation>
 <translation id="3067198179881736288">Install app?</translation>
 <translation id="3067198360141518313">Run this plug-in</translation>
@@ -1509,6 +1508,7 @@
 <translation id="3285322247471302225">New &amp;Tab</translation>
 <translation id="3288047731229977326">Extensions running in developer mode can harm your computer. If you're not a developer, you should disable these extensions running in developer mode to stay safe.</translation>
 <translation id="3289856944988573801">To check for updates, please use Ethernet or Wi-Fi.</translation>
+<translation id="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="329838636886466101">Repair</translation>
@@ -1551,6 +1551,7 @@
 <translation id="3348038390189153836">Removable device detected</translation>
 <translation id="3348459612390503954">Congratulations</translation>
 <translation id="3349933790966648062">Memory footprint</translation>
+<translation id="3350117557200012647">Get into pairing mode</translation>
 <translation id="3353984535370177728">Select a folder to upload</translation>
 <translation id="3355936511340229503">Connection error</translation>
 <translation id="3356797067524893661">You're all set to continue on to Hangouts Meet</translation>
@@ -1690,6 +1691,7 @@
 <translation id="3556000484321257665">Your search engine was changed to <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Kiosk application could not be downloaded.</translation>
 <translation id="3564334271939054422">The Wi-Fi network that you are using (<ph name="NETWORK_ID" />) may require you to visit its login page.</translation>
+<translation id="3564848315152754834">USB security key</translation>
 <translation id="3566721612727112615">No sites added</translation>
 <translation id="3569382839528428029">Do you want <ph name="APP_NAME" /> to share your screen?</translation>
 <translation id="3570985609317741174">Web content</translation>
@@ -1740,6 +1742,7 @@
 <translation id="3627588569887975815">Open link in inco&amp;gnito window</translation>
 <translation id="3627671146180677314">Netscape Certificate Renewal Time</translation>
 <translation id="3627879631695760395">Install <ph name="APP" />…</translation>
+<translation id="3630132874740063857">Your phone</translation>
 <translation id="3630995161997703415">Add this site to your shelf to use it at any time</translation>
 <translation id="3635030235490426869">Tab 1</translation>
 <translation id="3636096452488277381">Hi, <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1761,6 +1764,7 @@
 <translation id="3664511988987167893">Extension Icon</translation>
 <translation id="3665589677786828986">Chrome detected that some of your settings were corrupted by another program and reset them to their original defaults.</translation>
 <translation id="3668570675727296296">Language settings</translation>
+<translation id="3668801437375206837">To better diagnose Bluetooth issues, Googlers can include additional Bluetooth logs with their feedback reports. When this option is ticked, your report will include btsnoop and HCI logs from your current session, sanitised to remove as much PII as possible. Access to these logs will be restricted to managers of the Chrome OS product group in Listnr. Logs will be purged after 90 days.</translation>
 <translation id="3668823961463113931">Handlers</translation>
 <translation id="3670229581627177274">Turn on Bluetooth</translation>
 <translation id="3672681487849735243">A factory error has been detected</translation>
@@ -1779,6 +1783,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> wants to share your screen</translation>
 <translation id="3693415264595406141">Password:</translation>
 <translation id="3694027410380121301">Select Previous Tab</translation>
+<translation id="369489984217678710">Passwords and other sign-in data</translation>
 <translation id="3699624789011381381">Email address</translation>
 <translation id="3699920817649120894">Turn off sync and personalisation?</translation>
 <translation id="3700888195348409686">Presenting (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1802,6 +1807,7 @@
 <translation id="3727148787322499904">Changing this setting will affect all shared networks</translation>
 <translation id="3727187387656390258">Inspect pop-up</translation>
 <translation id="3729506734996624908">Allowed sites</translation>
+<translation id="3731997362820527097">Select your security key</translation>
 <translation id="3732078975418297900">Error on line <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL Server with Step-up</translation>
 <translation id="3735740477244556633">Sort by</translation>
@@ -1902,6 +1908,7 @@
 <translation id="3860381078714302691">Welcome to Hangouts Meet</translation>
 <translation id="3861241522664181545">Page paused.</translation>
 <translation id="3862134173397075045">Welcome to the Cast experience in Chrome!</translation>
+<translation id="3862693525629180217">Verify via built-in sensor</translation>
 <translation id="3862788408946266506">App with 'kiosk_only' manifest attribute must be installed in Chrome OS kiosk mode</translation>
 <translation id="3865414814144988605">Resolution</translation>
 <translation id="386548886866354912">Pack with <ph name="EXTENSION_NAME" /></translation>
@@ -2027,6 +2034,7 @@
 <translation id="4055023634561256217">A restart is required before your device can be reset with Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">View in Store</translation>
+<translation id="4058647953897694817">Verify via Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Check Document Now</translation>
 <translation id="406070391919917862">Background Apps</translation>
@@ -2040,6 +2048,7 @@
 <translation id="407520071244661467">Scale</translation>
 <translation id="4075639477629295004">Unable to cast <ph name="FILE_NAME" />.</translation>
 <translation id="4077917118009885966">Ads blocked on this site</translation>
+<translation id="4079799245038595838">A notification was sent to your phone. Follow the prompts to confirm that it's you.</translation>
 <translation id="4081242589061676262">Unable to cast file.</translation>
 <translation id="4084682180776658562">Bookmark</translation>
 <translation id="4084835346725913160">Close <ph name="TAB_NAME" /></translation>
@@ -2139,6 +2148,7 @@
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="4250680216510889253">No</translation>
 <translation id="4252852543720145436">Protected content identifiers</translation>
+<translation id="4252899949534773101">Bluetooth is disabled</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – Tab content shared</translation>
 <translation id="4254813446494774748">Translation language:</translation>
 <translation id="425573743389990240">Battery Discharge Rate in Watts (Negative value means battery is charging)</translation>
@@ -2264,8 +2274,8 @@
 <translation id="4480590691557335796">Chrome can find harmful software on your computer and remove it</translation>
 <translation id="4481530544597605423">Unpaired devices</translation>
 <translation id="4482194545587547824">Google may use your browsing history to personalise Search and other Google services</translation>
-<translation id="4493287891836751813">Meet your Google Assistant</translation>
 <translation id="4495419450179050807">Don't show on this page</translation>
+<translation id="449938344715680828">Press |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| followed by |<ph name="ACCELERATOR3" />| to exit</translation>
 <translation id="4499718683476608392">Enable credit card Auto-fill to fill in forms in a single click</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> has crashed</translation>
 <translation id="450099669180426158">Exclamation mark icon</translation>
@@ -2319,7 +2329,6 @@
 <translation id="4572659312570518089">Authentication cancelled while connecting to "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> file</translation>
 <translation id="457386861538956877">More...</translation>
-<translation id="4576537685267142337">Lift finger, then touch sensor again</translation>
 <translation id="4576541033847873020">Pair Bluetooth device</translation>
 <translation id="4579581181964204535">Unable to cast <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Are you sure that you want to delete these $1 items?</translation>
@@ -2342,6 +2351,7 @@
 <translation id="4611114513649582138">Data connection available</translation>
 <translation id="4613271546271159013">An extension has changed what page is shown when you open a new tab.</translation>
 <translation id="4615586811063744755">no cookie selected</translation>
+<translation id="4615618657481886098">You have already registered this key. You don't have to register it again.</translation>
 <translation id="4617270414136722281">Extension options</translation>
 <translation id="4619615317237390068">Tabs from other devices</translation>
 <translation id="4620809267248568679">This setting is enforced by an extension.</translation>
@@ -2451,6 +2461,7 @@
 <translation id="4790972063719531840">Automatically send diagnostic and usage data to Google</translation>
 <translation id="4792711294155034829">&amp;Report an Issue...</translation>
 <translation id="479536056609751218">Web Page, HTML Only</translation>
+<translation id="4798236378408895261">Attach <ph name="BEGIN_LINK" />Bluetooth Logs<ph name="END_LINK" /> (Google internal)</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4801448226354548035">Hide accounts</translation>
 <translation id="4801512016965057443">Allow mobile data roaming</translation>
@@ -2517,6 +2528,7 @@
 <translation id="4882473678324857464">Focus bookmarks</translation>
 <translation id="4882831918239250449">Control how your browsing history is used to personalise Search, ads and more</translation>
 <translation id="4883178195103750615">Export bookmarks to HTML file...</translation>
+<translation id="4883274597792587930">Find the name printed on the back of your key</translation>
 <translation id="4883436287898674711">All <ph name="WEBSITE_1" /> sites</translation>
 <translation id="48838266408104654">&amp;Task Manager</translation>
 <translation id="4883898390143004266">Help apps find location. Use Google’s Location service to help improve location for apps. Google may collect location data periodically and use this data anonymously to improve location accuracy and location-based services. <ph name="BEGIN_LINK1" />Learn More<ph name="END_LINK1" /></translation>
@@ -2564,7 +2576,6 @@
 <translation id="4941627891654116707">Font size</translation>
 <translation id="494286511941020793">Proxy Configuration Help</translation>
 <translation id="4945444280533270988">Smart Lock is on</translation>
-<translation id="494660967831069720">Partial data</translation>
 <translation id="4953689047182316270">Respond to Accessibility Events</translation>
 <translation id="4953808748584563296">Default orange avatar</translation>
 <translation id="4955814292505481804">Annual</translation>
@@ -2990,6 +3001,7 @@
 <translation id="55601339223879446">Adjust the boundaries of your desktop within the display</translation>
 <translation id="5562781907504170924">This tab is connected to a Bluetooth device.</translation>
 <translation id="5563234215388768762">Search Google or type a URL</translation>
+<translation id="5567950944308676169">Plug in your security key and activate it</translation>
 <translation id="5567989639534621706">Application Caches</translation>
 <translation id="5568069709869097550">Can't sign in</translation>
 <translation id="5568144734023334204">Android storage</translation>
@@ -3236,6 +3248,7 @@
 <translation id="5931146425219109062">Read and change all your data on the websites that you visit</translation>
 <translation id="5932881020239635062">Serial</translation>
 <translation id="5933376509899483611">Time Zone</translation>
+<translation id="5938002010494270685">Security upgrade available</translation>
 <translation id="5939518447894949180">Reset</translation>
 <translation id="5939847200023027600">PDF Compositor Service</translation>
 <translation id="5941153596444580863">Add person</translation>
@@ -3272,6 +3285,7 @@
 <translation id="6006484371116297560">Classic</translation>
 <translation id="6007237601604674381">Move failed. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Voice search in your language is not available.</translation>
+<translation id="6009781704028455063">Built-in sensor</translation>
 <translation id="6010869025736512584">Accessing video input</translation>
 <translation id="6011193465932186973">Fingerprint</translation>
 <translation id="6011449291337289699">Clear site data</translation>
@@ -3282,6 +3296,7 @@
 <translation id="6020431688553761150">Server did not authorise you to access this resource.</translation>
 <translation id="602251597322198729">This site is attempting to download multiple files. Do you want to allow this?</translation>
 <translation id="6022526133015258832">Open Full Screen</translation>
+<translation id="6022705094403139349">Ready to pair your security key?</translation>
 <translation id="6023643151125006053">This device (SN: <ph name="SERIAL_NUMBER" />) was locked by the <ph name="SAML_DOMAIN" /> administrator.</translation>
 <translation id="6025215716629925253">Stack Trace</translation>
 <translation id="6026047032548434446">Install App?</translation>
@@ -3345,6 +3360,7 @@
 <translation id="6105877918873366097">Last accessed</translation>
 <translation id="6107012941649240045">Issued To</translation>
 <translation id="6112294629795967147">Touch to resize</translation>
+<translation id="6112931163620622315">Check your phone</translation>
 <translation id="6112952769866305444">Edit person, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">See text and images copied to the clipboard</translation>
 <translation id="6116921718742659598">Change language and input settings</translation>
@@ -3390,6 +3406,7 @@
 <translation id="6169666352732958425">Unable to cast desktop.</translation>
 <translation id="6171948306033499786">Pause printing</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>
 <translation id="6181431612547969857">Download blocked</translation>
 <translation id="6185132558746749656">Device Location</translation>
@@ -3477,6 +3494,7 @@
 <translation id="6311220991371174222">Cannot start Chrome because something went wrong when opening your profile. Try to restart Chrome.</translation>
 <translation id="6312400084708441752">Includes information about harmful software, system settings and processes on your computer</translation>
 <translation id="6312403991423642364">Unknown network error</translation>
+<translation id="6313320178014547270">You're using a key that's not registered with this website</translation>
 <translation id="6313641880021325787">EXIT VR</translation>
 <translation id="6314819609899340042">You have successfully enabled debugging features on this <ph name="IDS_SHORT_PRODUCT_NAME" /> device.</translation>
 <translation id="6315493146179903667">Bring All to Front</translation>
@@ -3521,7 +3539,6 @@
 <translation id="6384275966486438344">Change your search settings to: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Sites can save and read cookie data</translation>
 <translation id="6388429472088318283">Search languages</translation>
-<translation id="6388771388956873507">Find the fingerprint sensor on your device and touch it with your finger</translation>
 <translation id="6390799748543157332">Pages that you view in this window won’t appear in the browser history and they won’t leave other traces, like cookies, on the computer after you close all open Guest windows. Any files that you download, however, will be preserved.</translation>
 <translation id="6390994422085833176">Review sync and personalisation features following setup</translation>
 <translation id="6395423953133416962">Send <ph name="BEGIN_LINK1" />system information<ph name="END_LINK1" /> and <ph name="BEGIN_LINK2" />metrics<ph name="END_LINK2" /></translation>
@@ -3533,6 +3550,7 @@
 <translation id="6399774419735315745">Spy</translation>
 <translation id="6401445054534215853">Shelf item 1</translation>
 <translation id="6404511346730675251">Edit bookmark</translation>
+<translation id="6405510437656969977">Continue when you're ready to enter the PIN</translation>
 <translation id="6406303162637086258">Simulate browser restart</translation>
 <translation id="6406506848690869874">Sync</translation>
 <translation id="6408118934673775994">Read and change your data on <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> and <ph name="WEBSITE_3" /></translation>
@@ -3651,6 +3669,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – Desktop content shared</translation>
 <translation id="6580151766480067746">ARC Version</translation>
 <translation id="6581162200855843583">Google Drive link</translation>
+<translation id="6582080224869403177">Reset your <ph name="DEVICE_TYPE" /> to upgrade your security.</translation>
 <translation id="6582421931165117398">To protect your personal information, change your password now. Before you can change your password, you’ll be asked to sign in.</translation>
 <translation id="6583851739559471707">Blocked on sites that tend to show intrusive ads (recommended)</translation>
 <translation id="6584878029876017575">Microsoft Lifetime Signing</translation>
@@ -3700,6 +3719,7 @@
 <translation id="6644846457769259194">Updating your device (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">Netscape Certification Authority Revocation URL</translation>
 <translation id="6647838571840953560">Currently on <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Security key activated...</translation>
 <translation id="6648911618876616409">A critical update is ready to install. Sign in to get started.</translation>
 <translation id="6649018507441623493">Just a sec...</translation>
 <translation id="6649563841575838401">The archive format is not supported, or the file is broken.</translation>
@@ -3775,6 +3795,7 @@
 <translation id="6759193508432371551">Factory reset</translation>
 <translation id="6767639283522617719">Can’t join the domain. Make sure that the settings are correct for the organisational unit.</translation>
 <translation id="6769712124046837540">Adding printer...</translation>
+<translation id="6770664076092644100">Verify via NFC</translation>
 <translation id="6771503742377376720">Is a Certification Authority</translation>
 <translation id="6777817260680419853">Redirect blocked</translation>
 <translation id="6778959797435875428">Unmute Sites</translation>
@@ -3810,6 +3831,7 @@
 <translation id="6823506025919456619">You need to sign in to Chrome to see your devices</translation>
 <translation id="6824564591481349393">Copy &amp;Email Address</translation>
 <translation id="6825184156888454064">Sort by name</translation>
+<translation id="6826872289184051766">Verify via USB</translation>
 <translation id="6827236167376090743">This video will keep playing until the cows come home.</translation>
 <translation id="6828153365543658583">Restrict sign-in to the following users:</translation>
 <translation id="6828860976882136098">Failed to set up automatic updates for all users (preflight execution error: <ph name="ERROR_NUMBER" />)</translation>
@@ -3843,6 +3865,7 @@
 <translation id="6880587130513028875">Images were blocked on this page.</translation>
 <translation id="6883319974225028188">Oops!  The system failed to save device configuration.</translation>
 <translation id="6885771755599377173">System information preview</translation>
+<translation id="6886476658664859389">NFC security key</translation>
 <translation id="6886871292305414135">Open link in new &amp;tab</translation>
 <translation id="6892812721183419409">Open Link as <ph name="USER" /></translation>
 <translation id="6896758677409633944">Copy</translation>
@@ -4008,6 +4031,7 @@
 <translation id="713122686776214250">Add pa&amp;ge...</translation>
 <translation id="7133578150266914903">Your administrator is rolling back this device (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Make Text Smaller</translation>
+<translation id="7135729336746831607">Turn on Bluetooth?</translation>
 <translation id="7136694880210472378">Make default</translation>
 <translation id="7136984461011502314">Welcome to <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">There's an error. Please try again by choosing other images.</translation>
@@ -4053,6 +4077,7 @@
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' deleted</translation>
 <translation id="7206693748120342859">Downloading <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Exit page}other{Exit pages}}</translation>
+<translation id="721467499098558573">Press and hold the button on your security key for at least 5 seconds</translation>
 <translation id="7216409898977639127">Mobile provider</translation>
 <translation id="7216595297012131718">Order languages based on your preference</translation>
 <translation id="7220019174139618249">Can't export passwords to '<ph name="FOLDER" />'</translation>
@@ -4088,6 +4113,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="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>
 <translation id="7268659760406822741">Available services</translation>
@@ -4124,7 +4150,6 @@
 <translation id="7309257895202129721">Show &amp;controls</translation>
 <translation id="7310598146671372464">Failed to log in. The server does not support specified Kerberos encryption types. Please contact your administrator.</translation>
 <translation id="7311079019872751559">Unsandboxed plug-in access</translation>
-<translation id="7311891583377621132">Move slightly to capture a different part of the fingerprint</translation>
 <translation id="7317680720589234980">Screen lock and sign-in options</translation>
 <translation id="7321545336522791733">Server unreachable</translation>
 <translation id="7324297612904500502">Beta forum</translation>
@@ -4206,6 +4231,7 @@
 <translation id="7464490149090366184">Zipping failed, item exists: "$1"</translation>
 <translation id="7465778193084373987">Netscape Certificate Revocation URL</translation>
 <translation id="7469406957790636836">To turn this on, first turn on spell check in <ph name="BEGIN_LINK" />Languages and input<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Send you notifications and default to remembering this computer for Messages</translation>
 <translation id="7469894403370665791">Automatically connect to this network</translation>
 <translation id="747114903913869239">Error: Unable to decode extension</translation>
 <translation id="7473753388963818366">Let's get your <ph name="DEVICE_TYPE" /> ready for you</translation>
@@ -4255,6 +4281,7 @@
 <translation id="7531779363494549572">Go to Settings &gt; Apps &amp; notifications &gt; Notifications.</translation>
 <translation id="7536709149194614609">Please restart the device and try again later.</translation>
 <translation id="7537601449003285327">Pin to taskbar</translation>
+<translation id="7539856059004947393">Bluetooth security key</translation>
 <translation id="7540972813190816353">An error occurred while checking for updates: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Enable debugging features on this <ph name="IDS_SHORT_PRODUCT_NAME" /> device</translation>
 <translation id="7544853251252956727">Shuffle</translation>
@@ -4357,6 +4384,7 @@
 <translation id="7709152031285164251">Failed - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Cast...</translation>
 <translation id="7711920809702896782">Image info</translation>
+<translation id="7712740978240882272">Unlock your Chromebook with your phone. <ph name="LINK_BEGIN" />Find out more<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Unknown extension with ID <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Cookies from <ph name="DOMAIN" /> allowed</translation>
 <translation id="7714464543167945231">Certificate</translation>
@@ -4572,6 +4600,7 @@
 <translation id="7984068253310542383">Mirror <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Read and change saved password settings</translation>
 <translation id="7987764905897278458">Get more Google smarts</translation>
+<translation id="798835209536175951">Send and receive text messages from your Chromebook. <ph name="LINK_BEGIN" />Find out more<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Enable accessibility features</translation>
 <translation id="7994702968232966508">EAP method</translation>
 <translation id="799547531016638432">Remove shortcut</translation>
@@ -4704,6 +4733,7 @@
 <translation id="8185331656081929126">Show notifications when new printers are detected on the network</translation>
 <translation id="8186609076106987817">The server could not find the file.</translation>
 <translation id="8188120771410500975">&amp;Check the spelling of text fields</translation>
+<translation id="8188389033983459049">Check your device settings and turn it on to continue</translation>
 <translation id="8190193592390505034">Connecting to <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Manage your apps, extensions, and themes</translation>
 <translation id="8191453843330043793">V8 Proxy Resolver</translation>
@@ -4798,6 +4828,7 @@
 <translation id="8353683614194668312">It can:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Restore pages?</translation>
+<translation id="8362993567435070757">Find the 6-digit PIN on the back of your key</translation>
 <translation id="8363095875018065315">stable</translation>
 <translation id="8363142353806532503">Microphone blocked</translation>
 <translation id="8366396658833131068">Your network connectivity is restored. Please select a different network or press 'Continue' button below to launch your kiosk app.</translation>
@@ -4806,6 +4837,7 @@
 <translation id="8371695176452482769">Speak now</translation>
 <translation id="8372369524088641025">Bad WEP key</translation>
 <translation id="8373553483208508744">Mute tabs</translation>
+<translation id="8379878387931047019">This device doesn't support the type of security key requested by this website</translation>
 <translation id="8382913212082956454">Copy &amp;email address</translation>
 <translation id="8386903983509584791">Scan completed</translation>
 <translation id="8389492867173948260">Allow this extension to read and change all your data on websites that you visit:</translation>
@@ -4924,6 +4956,7 @@
 <translation id="8557930019681227453">Manifest</translation>
 <translation id="8559694214572302298">Image Decoder</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Continue reading</translation>
 <translation id="8565650234829130278">Attempted to downgrade app.</translation>
 <translation id="8569002732135253578">Now printing <ph name="DOCUMENT_NAME" /></translation>
 <translation id="8569682776816196752">No destinations found</translation>
@@ -4964,7 +4997,6 @@
 <translation id="8639047128869322042">Checking for harmful software…</translation>
 <translation id="8639963783467694461">Auto-fill settings</translation>
 <translation id="8642171459927087831">Access Token</translation>
-<translation id="8642267168767642381">Finger moved too slowly</translation>
 <translation id="8642947597466641025">Make Text Larger</translation>
 <translation id="8643418457919840804">To continue, choose an option:</translation>
 <translation id="8645354835496065562">Continue allowing sensor access</translation>
@@ -4979,6 +5011,7 @@
 <translation id="8655295600908251630">Channel</translation>
 <translation id="8655319619291175901">Oops, something went wrong.</translation>
 <translation id="8655972064210167941">Sign-in failed because your password could not be verified. Please contact your administrator or try again.</translation>
+<translation id="8656619792520327915">Add another Bluetooth security key</translation>
 <translation id="8656768832129462377">Do not check</translation>
 <translation id="8658595122208653918">Change printer options...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> is sharing your screen and audio with <ph name="TAB_NAME" />.</translation>
@@ -5101,6 +5134,7 @@
 <translation id="8814687660896548945">Please wait, the archive is being scanned…</translation>
 <translation id="881799181680267069">Hide Others</translation>
 <translation id="8818152010000655963">Wallpaper</translation>
+<translation id="8818958672113348984">Verify via your phone</translation>
 <translation id="8820817407110198400">Bookmarks</translation>
 <translation id="8821045908425223359">Configure IP address automatically</translation>
 <translation id="882204272221080310">Update firmware for added security.</translation>
@@ -5131,11 +5165,13 @@
 <translation id="8872155268274985541">Invalid Kiosk external update manifest file found. Failed to update Kiosk app. Please remove the USB stick.</translation>
 <translation id="8874184842967597500">Not connected</translation>
 <translation id="8876215549894133151">Format:</translation>
+<translation id="8876307312329369159">This setting can't be changed in a demo session.</translation>
 <translation id="8876309039915144086">Generate password…</translation>
 <translation id="8877448029301136595">[parent directory]</translation>
 <translation id="8879284080359814990">&amp;Show As Tab</translation>
 <translation id="8883847527783433352">Sync to another account</translation>
 <translation id="8885197664446363138">Smart Lock is unavailable</translation>
+<translation id="88870264962436283">Use Touch ID with <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Colour:</translation>
 <translation id="8890516388109605451">Sources</translation>
 <translation id="8892168913673237979">Ready!</translation>
@@ -5156,6 +5192,7 @@
 <translation id="8915370057835397490">Loading suggestion</translation>
 <translation id="8916476537757519021">Incognito Subframe: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">To get all of your passwords on all your devices, sign in and turn on sync.</translation>
+<translation id="8921366488406707015">Verifying your security key...</translation>
 <translation id="8922013791253848639">Always allow ads on this site</translation>
 <translation id="8925458182817574960">&amp;Settings</translation>
 <translation id="8926389886865778422">Don't ask again</translation>
@@ -5264,6 +5301,7 @@
 <translation id="9066782832737749352">Text-to-Speech</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> automatically signs you in to eligible sites and apps with passwords that you saved.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Pair your key to this device so that you can use it to sign into your account</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB mouse connected</translation>
 <translation id="9076523132036239772">Sorry, your email or password could not be verified. Try connecting to a network first.</translation>
@@ -5325,7 +5363,6 @@
 <translation id="916607977885256133">Picture in Picture</translation>
 <translation id="9169496697824289689">View keyboard shortcuts</translation>
 <translation id="9169931577761441333">Add <ph name="APP_NAME" /> to Home screen</translation>
-<translation id="9170397650136757332">Now move your finger slightly to capture all the different parts of your fingerprint</translation>
 <translation id="9170848237812810038">&amp;Undo</translation>
 <translation id="9170884462774788842">Another programme on your computer added a theme that may change the way Chrome works.</translation>
 <translation id="9173995187295789444">Scanning for Bluetooth devices...</translation>
@@ -5389,6 +5426,7 @@
 <translation id="971774202801778802">Bookmark URL</translation>
 <translation id="973473557718930265">Quit</translation>
 <translation id="974555521953189084">Enter your passphrase to start sync</translation>
+<translation id="977640333593638907">To use most keys, simply press the button</translation>
 <translation id="981121421437150478">Offline</translation>
 <translation id="983511809958454316">This feature is not supported in VR</translation>
 <translation id="984275831282074731">Payment methods</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 68ef801..cba65e758 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Usar la sincronización y todos los servicios</translation>
 <translation id="1272079795634619415">Interrumpir</translation>
-<translation id="1272242203003205253">Los socios de Google trabajan con el Asistente para brindarte ayuda</translation>
 <translation id="1272978324304772054">Esta cuenta de usuario no pertenece al dominio en el que se inscribió el dispositivo. Si deseas inscribirte en un dominio diferente, primero tendrás que realizar el proceso de recuperación del dispositivo.</translation>
 <translation id="1274977772557788323">Configuración de almacenamiento de Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies y otros datos de sitios</translation>
@@ -414,7 +413,6 @@
 <translation id="161460670679785907">No se puede detectar tu teléfono</translation>
 <translation id="1616206807336925449">Esta extensión no requiere permisos especiales.</translation>
 <translation id="1616298854599875024">No se puede importar la extensión "<ph name="IMPORT_NAME" />" porque no es un módulo compartido</translation>
-<translation id="161707228174452095">Se agregó una huella digital.</translation>
 <translation id="1618268899808219593">C&amp;entro de ayuda</translation>
 <translation id="162035744160882748">Activar la sincronización, la personalización y otros servicios de Google</translation>
 <translation id="1620510694547887537">Cámara</translation>
@@ -692,7 +690,6 @@
 <translation id="2028997212275086731">Archivo RAR</translation>
 <translation id="2034346955588403444">Agregar otra red Wi-Fi</translation>
 <translation id="203574396658008164">Habilitar la toma de notas de la pantalla bloqueada</translation>
-<translation id="2039623879703305659">Moviste el dedo demasiado rápido</translation>
 <translation id="2040460856718599782">Se produjo un error cuando intentábamos autenticarte. Verifica tus credenciales de acceso y vuelve a intentarlo.</translation>
 <translation id="2043818754674261542">Distancia a la que debe estar el teléfono para desbloquear esta <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Nombre de la plantilla de certificado de Microsoft</translation>
@@ -736,7 +733,6 @@
 <translation id="2099686503067610784">¿Eliminar certificado "<ph name="CERTIFICATE_NAME" />" del servidor?</translation>
 <translation id="2100273922101894616">Acceso automático</translation>
 <translation id="2101225219012730419">Versión:</translation>
-<translation id="2107494551712864447">Agregar una huella digital</translation>
 <translation id="2112877397266219826">Activa el controlador táctil para realizar la configuración.</translation>
 <translation id="21133533946938348">Fijar pestaña</translation>
 <translation id="2113479184312716848">Abrir &amp;archivo...</translation>
@@ -1015,7 +1011,6 @@
 <translation id="2526590354069164005">Escritorio</translation>
 <translation id="2526619973349913024">Verificar actualización</translation>
 <translation id="2527167509808613699">Cualquier tipo de conexión</translation>
-<translation id="2532026602297547439">El sensor está sucio</translation>
 <translation id="2532589005999780174">Modo de contraste alto</translation>
 <translation id="253434972992662860">Pausa</translation>
 <translation id="2534460670861217804">Proxy HTTP seguro</translation>
@@ -1374,7 +1369,6 @@
 <translation id="3057861065630527966">Crea una copia de seguridad de tus fotos y videos.</translation>
 <translation id="3060379269883947824">Habilitar Seleccionar para pronunciar</translation>
 <translation id="3061707000357573562">Aplicar parche al servicio</translation>
-<translation id="3064410671692449875">Datos insuficientes</translation>
 <translation id="3065041951436100775">La pestaña terminó los comentarios.</translation>
 <translation id="3067198179881736288">¿Deseas instalar la app?</translation>
 <translation id="3067198360141518313">Ejecutar este complemento</translation>
@@ -2262,7 +2256,6 @@
 <translation id="4480590691557335796">Chrome puede buscar software dañino en tu computadora y quitarlo</translation>
 <translation id="4481530544597605423">Dispositivos no sincronizados</translation>
 <translation id="4482194545587547824">Es posible que Google use tu historial de navegación para personalizar Búsqueda y otros servicios de Google</translation>
-<translation id="4493287891836751813">Conoce a tu Asistente de Google</translation>
 <translation id="4495419450179050807">No mostrar en esta página</translation>
 <translation id="4499718683476608392">Habilita Autocompletar datos de tarjetas de crédito para llenar formularios con un solo clic</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> se bloqueó</translation>
@@ -2317,7 +2310,6 @@
 <translation id="4572659312570518089">La autenticación se canceló mientras se establecía la conexión a "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">Archivo <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Más ...</translation>
-<translation id="4576537685267142337">Levanta el dedo y vuelve a tocar el sensor</translation>
 <translation id="4576541033847873020">Sincronizar dispositivo Bluetooth</translation>
 <translation id="4579581181964204535">No se puede transmitir <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">¿Estás seguro de que deseas eliminar los elementos $1?</translation>
@@ -2562,7 +2554,6 @@
 <translation id="4941627891654116707">Tamaño de fuente</translation>
 <translation id="494286511941020793">Ayuda para la configuración de proxy</translation>
 <translation id="4945444280533270988">Se activó "Smart Lock"</translation>
-<translation id="494660967831069720">Datos parciales</translation>
 <translation id="4953689047182316270">Responder a los eventos de accesibilidad</translation>
 <translation id="4953808748584563296">Avatar naranja predeterminado</translation>
 <translation id="4955814292505481804">Anual</translation>
@@ -3519,7 +3510,6 @@
 <translation id="6384275966486438344">Cambiar la configuración de búsqueda por <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Los sitios pueden guardar y leer los datos de las cookies</translation>
 <translation id="6388429472088318283">Buscar idiomas</translation>
-<translation id="6388771388956873507">Busca el sensor de huellas digitales en tu dispositivo y tócalo con el dedo</translation>
 <translation id="6390799748543157332">Las páginas a las que accedas desde esta ventana no aparecerán en el historial del navegador ni dejarán rastros (por ejemplo, cookies) en la computadora después de cerrar todas las ventanas abiertas de la sesión de invitado. Los archivos descargados permanecerán intactos.</translation>
 <translation id="6390994422085833176">Después de establecer la configuración, revisa las funciones de sincronización y personalización</translation>
 <translation id="6395423953133416962">Enviar <ph name="BEGIN_LINK1" />información del sistema<ph name="END_LINK1" /> y <ph name="BEGIN_LINK2" />métricas<ph name="END_LINK2" /></translation>
@@ -4122,7 +4112,6 @@
 <translation id="7309257895202129721">Mostrar &amp;controles</translation>
 <translation id="7310598146671372464">No pudiste acceder porque el servidor no es compatible con los tipos de encriptación de Kerberos especificados. Comunícate con el administrador.</translation>
 <translation id="7311079019872751559">Acceso a complementos no incluidos en la zona de pruebas</translation>
-<translation id="7311891583377621132">Mueve el dedo ligeramente para capturar otra parte de la huella digital</translation>
 <translation id="7317680720589234980">Opciones del bloqueo de pantalla y el acceso</translation>
 <translation id="7321545336522791733">No se puede acceder al servidor</translation>
 <translation id="7324297612904500502">Foro de la versión Beta</translation>
@@ -4963,7 +4952,6 @@
 <translation id="8639047128869322042">Buscando software dañino…</translation>
 <translation id="8639963783467694461">Configuración de Autocompletar</translation>
 <translation id="8642171459927087831">Token de acceso</translation>
-<translation id="8642267168767642381">Moviste el dedo muy lento</translation>
 <translation id="8642947597466641025">Aumentar el tamaño del texto</translation>
 <translation id="8643418457919840804">Para continuar, elige una opción:</translation>
 <translation id="8645354835496065562">Seguir permitiendo el acceso a los sensores</translation>
@@ -5324,7 +5312,6 @@
 <translation id="916607977885256133">Pantalla en pantalla</translation>
 <translation id="9169496697824289689">Ver combinación de teclas para acceso directo</translation>
 <translation id="9169931577761441333">Agrega <ph name="APP_NAME" /> a la pantalla principal</translation>
-<translation id="9170397650136757332">Mueve el dedo ligeramente para capturar todas las partes de tu huella digital</translation>
 <translation id="9170848237812810038">&amp;Deshacer</translation>
 <translation id="9170884462774788842">Otro programa en tu computadora agregó un tema que puede cambiar el funcionamiento de Chrome.</translation>
 <translation id="9173995187295789444">Buscando dispositivos Bluetooth…</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index a9c9c0c..69fdb3a 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Elemento 5 de la estantería</translation>
 <translation id="1227507814927581609">Se ha producido un error de autenticación al establecer conexión con <ph name="DEVICE_NAME" />.</translation>
 <translation id="1230807973377071856">menú del sistema</translation>
+<translation id="123186018454553812">Probar con otra llave</translation>
 <translation id="1232569758102978740">Sin título</translation>
 <translation id="1233721473400465416">Configuración regional</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Usar la sincronización y todos los servicios</translation>
 <translation id="1272079795634619415">Interrumpir</translation>
-<translation id="1272242203003205253">Los colaboradores de Google trabajan con tu Asistente para ayudarte</translation>
 <translation id="1272978324304772054">Esta cuenta de usuario no pertenece al dominio en el que se ha registrado el dispositivo. Si quieres registrarlo en un dominio diferente, primero debes llevar a cabo el proceso de recuperación de dispositivo.</translation>
 <translation id="1274977772557788323">Configuración de almacenamiento de Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies y otros datos de sitios</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Versión <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Buscar contraseñas</translation>
 <translation id="1487335504823219454">Activada: configuración personalizada</translation>
+<translation id="1489664337021920575">Elegir otra opción</translation>
 <translation id="1493892686965953381">Esperando <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033">Otros <ph name="NUM_PRINTERS" /> dispositivos disponibles.</translation>
 <translation id="1497522201463361063">No se puede cambiar el nombre del archivo "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Ventana de la aplicación</translation>
 <translation id="15373452373711364">Cursor del ratón grande</translation>
 <translation id="1538729222189715449">Abriendo archivos de Linux...</translation>
+<translation id="153933193410874873">No hemos podido verificar tu identidad en este dispositivo</translation>
 <translation id="1540605929960647700">Habilitar modo de demostración</translation>
 <translation id="1543284117603151572">Importado desde Edge</translation>
 <translation id="1545177026077493356">Modo kiosco automático</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">No se puede usar esta imagen. Elige otra.</translation>
 <translation id="1566049601598938765">Sitio web</translation>
 <translation id="1567387640189251553">Se ha conectado otro teclado desde la última vez que introdujiste la contraseña. Es posible que esté intentando captar tus pulsaciones de teclas.</translation>
+<translation id="1567750922576943685">Verificar tu identidad ayuda a proteger tu información personal</translation>
 <translation id="1567993339577891801">Consola JavaScript</translation>
 <translation id="1568067597247500137">Silenciar sitio web</translation>
 <translation id="1568323446248056064">Abrir la configuración de la pantalla</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">No se puede detectar tu teléfono</translation>
 <translation id="1616206807336925449">Esta extensión no requiere permisos especiales.</translation>
 <translation id="1616298854599875024">No se ha podido importar la extensión "<ph name="IMPORT_NAME" />" porque no es un módulo compartido</translation>
-<translation id="161707228174452095">Huella digital añadida.</translation>
 <translation id="1618268899808219593">C&amp;entro de ayuda</translation>
 <translation id="162035744160882748">Activar la sincronización, la personalización y otros servicios de Google</translation>
 <translation id="1620510694547887537">Cámara</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">Archivo RAR</translation>
 <translation id="2034346955588403444">Añadir otra red Wi-Fi</translation>
 <translation id="203574396658008164">Habilitar la toma de notas desde la pantalla de bloqueo</translation>
-<translation id="2039623879703305659">Has movido el dedo demasiado rápido</translation>
 <translation id="2040460856718599782">¡Vaya! Parece que algo ha fallado al intentar identificarte. Vuelve a comprobar tus credenciales de inicio de sesión e inténtalo de nuevo.</translation>
 <translation id="2043818754674261542">Distancia necesaria para que el teléfono desbloquee este <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Nombre de plantilla de certificado de Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">¿Quieres eliminar el certificado de servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Iniciar sesión automáticamente</translation>
 <translation id="2101225219012730419">Versión:</translation>
-<translation id="2107494551712864447">Añadir una huella digital</translation>
 <translation id="2112877397266219826">Activa el controlador táctil para realizar la configuración</translation>
 <translation id="21133533946938348">Fijar pestaña</translation>
 <translation id="2113479184312716848">Abrir &amp;archivo...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Escritorio</translation>
 <translation id="2526619973349913024">Buscar actualizaciones</translation>
 <translation id="2527167509808613699">Cualquier tipo de conexión</translation>
-<translation id="2532026602297547439">Sensor sucio</translation>
 <translation id="2532589005999780174">Modo de contraste alto</translation>
 <translation id="253434972992662860">&amp;Pausa</translation>
 <translation id="2534460670861217804">Proxy HTTP seguro</translation>
@@ -1197,6 +1196,7 @@
 <translation id="2783298271312924866">Descargado</translation>
 <translation id="2783321960289401138">Crear acceso directo...</translation>
 <translation id="2783829359200813069">Seleccionar tipos de cifrado</translation>
+<translation id="2783952358106015700">Usar la llave de seguridad con <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Activando el servicio de datos móviles</translation>
 <translation id="2785873697295365461">Descriptores de archivo</translation>
 <translation id="2787047795752739979">Sobrescribir original</translation>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">Realiza copias de seguridad de tus fotos y vídeos</translation>
 <translation id="3060379269883947824">Habilitar Enunciar Selección</translation>
 <translation id="3061707000357573562">Aplicar parche a servicio</translation>
-<translation id="3064410671692449875">Datos insuficientes</translation>
 <translation id="3065041951436100775">Comentarios sobre una pestaña que se ha cerrado.</translation>
 <translation id="3067198179881736288">¿Quieres instalar la aplicación?</translation>
 <translation id="3067198360141518313">Ejecutar este complemento</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">Nueva &amp;pestaña</translation>
 <translation id="3288047731229977326">Las extensiones que se ejecutan en modo de desarrollador pueden causar daños en el ordenador. Si no eres desarrollador, debes inhabilitar esas extensiones para mantener protegido tu ordenador.</translation>
 <translation id="3289856944988573801">Para comprobar si hay actualizaciones, utiliza una conexión Ethernet o Wi-Fi.</translation>
+<translation id="3292421191230118801">Sigue leyendo en tu Chromebook los sitios web que tengas en el móvil</translation>
 <translation id="32939749466444286">El contenedor de Linux no se ha iniciado. Inténtalo de nuevo.</translation>
 <translation id="3294437725009624529">Invitado</translation>
 <translation id="329838636886466101">Reparar</translation>
@@ -1550,6 +1550,7 @@
 <translation id="3348038390189153836">Se ha detectado un dispositivo extraíble.</translation>
 <translation id="3348459612390503954">¡Enhorabuena!</translation>
 <translation id="3349933790966648062">Uso de memoria</translation>
+<translation id="3350117557200012647">Acceder al modo de vinculación</translation>
 <translation id="3353984535370177728">Seleccionar una carpeta para subirla</translation>
 <translation id="3355936511340229503">Error de conexión</translation>
 <translation id="3356797067524893661">Ya puedes utilizar Hangouts Meet</translation>
@@ -1689,6 +1690,7 @@
 <translation id="3556000484321257665">Tu motor de búsqueda ha cambiado a <ph name="URL" />.</translation>
 <translation id="3563432852173030730">La aplicación de kiosco no se ha podido descargar.</translation>
 <translation id="3564334271939054422">La red Wi-Fi que estás utilizando (<ph name="NETWORK_ID" />) puede requerir que accedas a su página de inicio de sesión.</translation>
+<translation id="3564848315152754834">Llave de seguridad USB</translation>
 <translation id="3566721612727112615">No se ha añadido ningún sitio web</translation>
 <translation id="3569382839528428029">¿Quieres que <ph name="APP_NAME" /> comparta tu pantalla?</translation>
 <translation id="3570985609317741174">Contenido web</translation>
@@ -1739,6 +1741,7 @@
 <translation id="3627588569887975815">Abrir el enlace en una ventana de incó&amp;gnito</translation>
 <translation id="3627671146180677314">Tiempo de renovación de certificado de Netscape</translation>
 <translation id="3627879631695760395">Installar <ph name="APP" />...</translation>
+<translation id="3630132874740063857">Tu teléfono</translation>
 <translation id="3630995161997703415">Añade este sitio web a tu estantería para usarlo en cualquier momento</translation>
 <translation id="3635030235490426869">Pestaña 1</translation>
 <translation id="3636096452488277381">Hola, <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1760,6 +1763,7 @@
 <translation id="3664511988987167893">Icono de la extensión</translation>
 <translation id="3665589677786828986">Chrome ha detectado que otro programa ha dañado algunas opciones de configuración y ha restablecido la configuración predeterminada original.</translation>
 <translation id="3668570675727296296">Configuración de idioma</translation>
+<translation id="3668801437375206837">Para diagnosticar mejor los problemas de Bluetooth, los Googlers pueden incluir registros en sus comentarios. Si seleccionas esta opción, tu informe contendrá registros btsnoop y HCI de la sesión actual modificados para retirar tanta información personal identificable como sea posible. Solo los administradores de grupo de Chrome OS de Listnr podrán acceder a estos registros, que se eliminarán definitivamente después de 90 días.</translation>
 <translation id="3668823961463113931">Controladores</translation>
 <translation id="3670229581627177274">Activar Bluetooth</translation>
 <translation id="3672681487849735243">Se ha detectado un error de fabricación</translation>
@@ -1778,6 +1782,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> quiere compartir tu pantalla</translation>
 <translation id="3693415264595406141">Contraseña:</translation>
 <translation id="3694027410380121301">Seleccionar pestaña anterior</translation>
+<translation id="369489984217678710">Contraseñas y otros datos de inicio de sesión</translation>
 <translation id="3699624789011381381">Dirección de correo electrónico</translation>
 <translation id="3699920817649120894">¿Quieres desactivar la sincronización y la personalización?</translation>
 <translation id="3700888195348409686">Mostrando (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1801,6 +1806,7 @@
 <translation id="3727148787322499904">Si cambias esta opción, todas las redes compartidas se verán afectadas</translation>
 <translation id="3727187387656390258">Inspeccionar ventana emergente</translation>
 <translation id="3729506734996624908">Sitios web permitidos</translation>
+<translation id="3731997362820527097">Seleccionar la llave de seguridad</translation>
 <translation id="3732078975418297900">Error en la línea <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Servidor SSL con certificado Step-Up</translation>
 <translation id="3735740477244556633">Ordenar por</translation>
@@ -1901,6 +1907,7 @@
 <translation id="3860381078714302691">Te damos la bienvenida a Hangouts Meet</translation>
 <translation id="3861241522664181545">Se ha pausado la página.</translation>
 <translation id="3862134173397075045">Te damos la bienvenida a la experiencia Cast en Chrome</translation>
+<translation id="3862693525629180217">Verificar mediante sensor integrado</translation>
 <translation id="3862788408946266506">La aplicación con el atributo del archivo de manifiesto "kiosk_only" se debe instalar en el modo kiosco de Chrome OS</translation>
 <translation id="3865414814144988605">Resolución</translation>
 <translation id="386548886866354912">Comprimir con <ph name="EXTENSION_NAME" /></translation>
@@ -2025,6 +2032,7 @@
 <translation id="4055023634561256217">Es necesario reiniciar el dispositivo antes de poder restablecerlo con Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Ver en Chrome Web Store</translation>
+<translation id="4058647953897694817">Verificar mediante Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Comprobar el documento ahora</translation>
 <translation id="406070391919917862">Aplicaciones en segundo plano</translation>
@@ -2038,6 +2046,7 @@
 <translation id="407520071244661467">Escala</translation>
 <translation id="4075639477629295004">No se puede enviar <ph name="FILE_NAME" />.</translation>
 <translation id="4077917118009885966">Los anuncios están bloqueados en este sitio web</translation>
+<translation id="4079799245038595838">Se ha enviado una notificación a tu teléfono. Sigue las indicaciones para confirmar que eres tú.</translation>
 <translation id="4081242589061676262">No se ha podido enviar el archivo.</translation>
 <translation id="4084682180776658562">Marcador</translation>
 <translation id="4084835346725913160">Cerrar <ph name="TAB_NAME" /></translation>
@@ -2137,6 +2146,7 @@
 <translation id="4250229828105606438">Captura de pantalla</translation>
 <translation id="4250680216510889253">No</translation>
 <translation id="4252852543720145436">Identificadores de contenido protegido</translation>
+<translation id="4252899949534773101">El Bluetooth está inhabilitado</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" />: contenido de la pestaña compartido</translation>
 <translation id="4254813446494774748">Idioma de traducción:</translation>
 <translation id="425573743389990240">Tasa de descarga de la batería en vatios (si el valor es negativo, significa que la batería se está cargando)</translation>
@@ -2262,8 +2272,8 @@
 <translation id="4480590691557335796">Chrome puede encontrar software dañino en tu ordenador y eliminarlo</translation>
 <translation id="4481530544597605423">Dispositivos desvinculados</translation>
 <translation id="4482194545587547824">Google puede utilizar tu historial de navegación para personalizar la Búsqueda y otros servicios de Google</translation>
-<translation id="4493287891836751813">Te presentamos a tu Asistente de Google</translation>
 <translation id="4495419450179050807">No mostrar en esta página</translation>
+<translation id="449938344715680828">Para salir, pulsa <ph name="ACCELERATOR1" /> + <ph name="ACCELERATOR2" /> + <ph name="ACCELERATOR3" /></translation>
 <translation id="4499718683476608392">Habilita la función de autocompletar tarjetas de crédito para rellenar formularios web con un solo clic</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ha fallado</translation>
 <translation id="450099669180426158">Icono de signo de exclamación</translation>
@@ -2317,7 +2327,6 @@
 <translation id="4572659312570518089">Se canceló la autenticación mientras se establecía conexión con <ph name="DEVICE_NAME" />.</translation>
 <translation id="4572815280350369984">Archivo <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Más...</translation>
-<translation id="4576537685267142337">Levanta el dedo y vuelve a tocar el sensor</translation>
 <translation id="4576541033847873020">Vincular dispositivo Bluetooth</translation>
 <translation id="4579581181964204535">No se puede enviar <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">¿Seguro que quieres eliminar estos $1 elementos?</translation>
@@ -2340,6 +2349,7 @@
 <translation id="4611114513649582138">Conexión de datos disponible</translation>
 <translation id="4613271546271159013">Una extensión ha cambiado la página que se muestra cuando abres una nueva pestaña.</translation>
 <translation id="4615586811063744755">no se ha seleccionado ninguna cookie</translation>
+<translation id="4615618657481886098">Ya has registrado esta llave; no es necesario registrarla de nuevo.</translation>
 <translation id="4617270414136722281">Opciones de extensión</translation>
 <translation id="4619615317237390068">Pestañas de otros dispositivos</translation>
 <translation id="4620809267248568679">Una extensión aplica esta opción.</translation>
@@ -2449,6 +2459,7 @@
 <translation id="4790972063719531840">Enviar automáticamente los datos de uso y diagnóstico a Google</translation>
 <translation id="4792711294155034829">&amp;Notificar un error...</translation>
 <translation id="479536056609751218">Página web (solo HTML)</translation>
+<translation id="4798236378408895261">Adjuntar <ph name="BEGIN_LINK" />registros de Bluetooth<ph name="END_LINK" /> (opción interna de Google)</translation>
 <translation id="479989351350248267">buscar</translation>
 <translation id="4801448226354548035">Ocultar cuentas</translation>
 <translation id="4801512016965057443">Permitir la itinerancia de datos móviles</translation>
@@ -2515,6 +2526,7 @@
 <translation id="4882473678324857464">Seleccionar marcadores</translation>
 <translation id="4882831918239250449">Controlar cómo se utiliza el historial de navegación para personalizar la Búsqueda, los anuncios y mucho más</translation>
 <translation id="4883178195103750615">Exportar marcadores a archivo HTML...</translation>
+<translation id="4883274597792587930">El nombre está en la parte trasera de la llave</translation>
 <translation id="4883436287898674711">Todos los sitios de <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">&amp;Administrador de tareas</translation>
 <translation id="4883898390143004266">Permitir que las aplicaciones detecten la ubicación. Usa el servicio de ubicación de Google para mejorar la ubicación de las aplicaciones. Es posible que Google recoja datos de ubicación periódicamente y que los utilice de forma anónima para mejorar la precisión de la ubicación y los servicios basados en la ubicación. <ph name="BEGIN_LINK1" />Más información<ph name="END_LINK1" /></translation>
@@ -2562,7 +2574,6 @@
 <translation id="4941627891654116707">Tamaño de la fuente</translation>
 <translation id="494286511941020793">Ayuda para la configuración de proxy</translation>
 <translation id="4945444280533270988">Smart Lock está activado</translation>
-<translation id="494660967831069720">Datos parciales</translation>
 <translation id="4953689047182316270">Responder a eventos de accesibilidad</translation>
 <translation id="4953808748584563296">Avatar naranja predeterminado</translation>
 <translation id="4955814292505481804">Anual</translation>
@@ -2814,7 +2825,7 @@
 <translation id="532776649628038357">Acepto</translation>
 <translation id="532943162177641444">Toca la notificación en el <ph name="PHONE_NAME" /> para configurar el punto de acceso móvil que este dispositivo puede usar.</translation>
 <translation id="5329858601952122676">&amp;Suprimir</translation>
-<translation id="5329945517224105597">El Asistente puede ofrecer sugerencias más relevantes y acciones específicas en función de los elementos de la pantalla. Puedes cambiar estas opciones en la configuración del Asistente.</translation>
+<translation id="5329945517224105597">El Asistente puede ofrecer sugerencias más relevantes y acciones específicas en función de los elementos que haya en la pantalla. Puedes cambiar estas opciones en la configuración del Asistente.</translation>
 <translation id="5330145655348521461">Estos archivos se han abierto en un escritorio diferente. Ve a <ph name="USER_NAME" /> (<ph name="MAIL_ADDRESS" />) para verlo.</translation>
 <translation id="5330512191124428349">Obtener información</translation>
 <translation id="5331069282670671859">No tienes certificados en esta categoría</translation>
@@ -2987,6 +2998,7 @@
 <translation id="55601339223879446">Ajusta los extremos de tu escritorio en la pantalla</translation>
 <translation id="5562781907504170924">Esta pestaña está conectada a un dispositivo Bluetooth.</translation>
 <translation id="5563234215388768762">Buscar en Google o escribir una URL</translation>
+<translation id="5567950944308676169">Inserta la llave de seguridad y actívala</translation>
 <translation id="5567989639534621706">Cachés de aplicación</translation>
 <translation id="5568069709869097550">No puedo iniciar sesión</translation>
 <translation id="5568144734023334204">Almacenamiento de Android</translation>
@@ -3233,6 +3245,7 @@
 <translation id="5931146425219109062">Leer y modificar todos los datos de los sitios web que visites</translation>
 <translation id="5932881020239635062">Número de serie</translation>
 <translation id="5933376509899483611">Zona horaria</translation>
+<translation id="5938002010494270685">Actualización de seguridad disponible</translation>
 <translation id="5939518447894949180">Restablecer</translation>
 <translation id="5939847200023027600">Servicio de composición de PDF</translation>
 <translation id="5941153596444580863">Añadir perfil...</translation>
@@ -3269,6 +3282,7 @@
 <translation id="6006484371116297560">Clásico</translation>
 <translation id="6007237601604674381">Se ha producido un error al mover el archivo (<ph name="ERROR_MESSAGE" />).</translation>
 <translation id="6007240208646052708">La búsqueda por voz no está disponible en tu idioma.</translation>
+<translation id="6009781704028455063">Sensor integrado</translation>
 <translation id="6010869025736512584">Accediendo a la entrada de vídeo</translation>
 <translation id="6011193465932186973">Huella digital</translation>
 <translation id="6011449291337289699">Borrar datos de sitios web</translation>
@@ -3279,6 +3293,7 @@
 <translation id="6020431688553761150">El servidor no te ha autorizado a acceder a este recurso.</translation>
 <translation id="602251597322198729">Este sitio está intentando descargar varios archivos. ¿Aceptar?</translation>
 <translation id="6022526133015258832">Abrir en pantalla completa</translation>
+<translation id="6022705094403139349">¿Todo listo para vincular tu llave de seguridad?</translation>
 <translation id="6023643151125006053">El administrador de <ph name="SAML_DOMAIN" /> ha bloqueado este dispositivo (número de serie: <ph name="SERIAL_NUMBER" />).</translation>
 <translation id="6025215716629925253">Seguimiento de la pila</translation>
 <translation id="6026047032548434446">¿Quieres instalar la aplicación?</translation>
@@ -3342,6 +3357,7 @@
 <translation id="6105877918873366097">Último acceso</translation>
 <translation id="6107012941649240045">Enviado a</translation>
 <translation id="6112294629795967147">Tocar para cambiar el tamaño</translation>
+<translation id="6112931163620622315">Comprobar el teléfono</translation>
 <translation id="6112952769866305444">Editar persona (<ph name="PROFILE_NAME" />, <ph name="USERNAME" />)</translation>
 <translation id="6116338172782435947">Ver el texto y las imágenes que se hayan copiado en el portapapeles</translation>
 <translation id="6116921718742659598">Cambiar configuración de idioma y de introducción de texto</translation>
@@ -3387,6 +3403,7 @@
 <translation id="6169666352732958425">No se ha podido enviar el escritorio.</translation>
 <translation id="6171948306033499786">Poner en pausa la impresión</translation>
 <translation id="6175314957787328458">GUID de dominio de Microsoft</translation>
+<translation id="6176043333338857209">El Bluetooth se activará temporalmente para establecer comunicación con la llave de seguridad</translation>
 <translation id="6178664161104547336">Seleccionar un certificado</translation>
 <translation id="6181431612547969857">Descarga bloqueada</translation>
 <translation id="6185132558746749656">Ubicación del dispositivo</translation>
@@ -3474,6 +3491,7 @@
 <translation id="6311220991371174222">No se puede iniciar Chrome porque se ha producido un error al abrir el perfil. Prueba a reiniciar el navegador.</translation>
 <translation id="6312400084708441752">Incluye información sobre software dañino, configuración del sistema y procesos de tu ordenador</translation>
 <translation id="6312403991423642364">Error desconocido de red</translation>
+<translation id="6313320178014547270">Estás usando una llave que no está registrada en este sitio web</translation>
 <translation id="6313641880021325787">SALIR DE RV</translation>
 <translation id="6314819609899340042">Has habilitado correctamente funciones de depuración en este dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="6315493146179903667">Traer todo al frente</translation>
@@ -3518,18 +3536,18 @@
 <translation id="6384275966486438344">Cambiar configuración de búsqueda por: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Los sitios web pueden guardar y consultar datos de cookies</translation>
 <translation id="6388429472088318283">Buscar idiomas</translation>
-<translation id="6388771388956873507">Busca el sensor de huellas digitales del dispositivo y tócalo con el dedo</translation>
 <translation id="6390799748543157332">Las páginas que aparezcan en esta ventana no se mostrarán en el historial del navegador y no dejarán otros rastros como cookies en el ordenador después de cerrar todas las ventanas abiertas de la sesión de invitado. No obstante, se conservará cualquier archivo que descargues.</translation>
 <translation id="6390994422085833176">Revisar funciones de sincronización y personalización al terminar</translation>
 <translation id="6395423953133416962">Enviar <ph name="BEGIN_LINK2" />métricas<ph name="END_LINK2" /> e <ph name="BEGIN_LINK1" />información del sistema<ph name="END_LINK1" /></translation>
 <translation id="6397094776139756010">Opciones de sincronización y personalización</translation>
 <translation id="6397592254427394018">Abrir todos los marcadores en una ventana de &amp;incógnito</translation>
-<translation id="639777613761517128">Para abrir los archivos con 1 $, debes copiarlos en la carpeta Archivos de Linux.</translation>
+<translation id="639777613761517128">Para abrir los archivos con $1, debes copiarlos en la carpeta Archivos de Linux.</translation>
 <translation id="6398715114293939307">Quitar Google Play Store</translation>
 <translation id="6398765197997659313">Salir del modo de pantalla completa</translation>
 <translation id="6399774419735315745">Espía</translation>
 <translation id="6401445054534215853">Elemento 1 de la estantería</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
+<translation id="6405510437656969977">Continúa cuando puedas introducir el PIN</translation>
 <translation id="6406303162637086258">Simular reinicio del navegador</translation>
 <translation id="6406506848690869874">Sincronización</translation>
 <translation id="6408118934673775994">Leer y modificar tus datos en <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> y <ph name="WEBSITE_3" /></translation>
@@ -3647,6 +3665,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Contenido del ordenador compartido</translation>
 <translation id="6580151766480067746">Versión de ARC</translation>
 <translation id="6581162200855843583">Enlace de Google Drive</translation>
+<translation id="6582080224869403177">Restablece tu <ph name="DEVICE_TYPE" /> para actualizar la seguridad.</translation>
 <translation id="6582421931165117398">Cambia tu contraseña ahora para proteger tu información personal. Antes de cambiarla, se te solicitará que inicies sesión.</translation>
 <translation id="6583851739559471707">Bloqueados en sitios web que suelen mostrar anuncios invasivos (recomendado)</translation>
 <translation id="6584878029876017575">Firma de vigencia de Microsoft</translation>
@@ -3696,6 +3715,7 @@
 <translation id="6644846457769259194">Actualizando el dispositivo (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL de revocación de la entidad emisora de certificados de Netscape</translation>
 <translation id="6647838571840953560">Actualmente en <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Llave de seguridad activada...</translation>
 <translation id="6648911618876616409">Hay una actualización importante que puedes instalar. Inicia sesión para empezar.</translation>
 <translation id="6649018507441623493">Un segundo...</translation>
 <translation id="6649563841575838401">El formato del archivo no se admite o el archivo está dañado.</translation>
@@ -3771,6 +3791,7 @@
 <translation id="6759193508432371551">Restablecer estado de fábrica</translation>
 <translation id="6767639283522617719">No se puede vincular el dominio. Comprueba que la configuración de la unidad organizativa sea correcta.</translation>
 <translation id="6769712124046837540">Añadiendo impresora...</translation>
+<translation id="6770664076092644100">Verificar mediante NFC</translation>
 <translation id="6771503742377376720">Es una entidad emisora de certificados.</translation>
 <translation id="6777817260680419853">Redirección bloqueada</translation>
 <translation id="6778959797435875428">Activar sonido de sitios web</translation>
@@ -3806,6 +3827,7 @@
 <translation id="6823506025919456619">Debes iniciar sesión en Chrome para poder ver tus dispositivos</translation>
 <translation id="6824564591481349393">Copiar &amp;dirección de correo electrónico</translation>
 <translation id="6825184156888454064">Ordenar por nombre</translation>
+<translation id="6826872289184051766">Verificar mediante USB</translation>
 <translation id="6827236167376090743">Este vídeo seguirá reproduciéndose sin parar.</translation>
 <translation id="6828153365543658583">Restringir el inicio de sesión a los siguientes usuarios:</translation>
 <translation id="6828860976882136098">Se ha producido un error al configurar las actualizaciones automáticas para todos los usuarios (error de ejecución preliminar: <ph name="ERROR_NUMBER" />)</translation>
@@ -3839,6 +3861,7 @@
 <translation id="6880587130513028875">Se han bloqueado las imágenes en esta página.</translation>
 <translation id="6883319974225028188">¡Vaya! El sistema no ha podido guardar la configuración del dispositivo.</translation>
 <translation id="6885771755599377173">Vista previa de información del sistema</translation>
+<translation id="6886476658664859389">Llave de seguridad NFC</translation>
 <translation id="6886871292305414135">Abrir enlace en una pes&amp;taña nueva</translation>
 <translation id="6892812721183419409">Abrir enlace como <ph name="USER" /></translation>
 <translation id="6896758677409633944">Copiar</translation>
@@ -4004,6 +4027,7 @@
 <translation id="713122686776214250">Añadir pá&amp;gina...</translation>
 <translation id="7133578150266914903">Tu administrador va a instalar una versión anterior en este dispositivo (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Reducir el tamaño del texto</translation>
+<translation id="7135729336746831607">Activar Bluetooth</translation>
 <translation id="7136694880210472378">Establecer como predeterminado</translation>
 <translation id="7136984461011502314">Te damos la bienvenida a <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Se ha producido un error. Selecciona otras imágenes e inténtalo de nuevo.</translation>
@@ -4049,6 +4073,7 @@
 <translation id="7201118060536064622">Se ha eliminado "<ph name="DELETED_ITEM_NAME" />"</translation>
 <translation id="7206693748120342859">Descargando <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Salir de la página}other{Salir de las páginas}}</translation>
+<translation id="721467499098558573">Mantén pulsado el botón de la llave de seguridad durante al menos 5 segundos</translation>
 <translation id="7216409898977639127">Proveedor de servicios móviles</translation>
 <translation id="7216595297012131718">Ordena los idiomas según tus preferencias</translation>
 <translation id="7220019174139618249">No se pueden exportar contraseñas a la carpeta "<ph name="FOLDER" />"</translation>
@@ -4084,6 +4109,7 @@
 <translation id="7256710573727326513">Abrir en una pestaña</translation>
 <translation id="725758059478686223">Servicio de impresión</translation>
 <translation id="7257666756905341374">Leer los datos que copias y pegas</translation>
+<translation id="7260764918845374269">Para que la llave de seguridad aparezca, debe estar en el modo de vinculación. Puedes activar este modo manteniendo pulsado el botón de la llave durante al menos 5 segundos.</translation>
 <translation id="7262004276116528033">Este servicio de inicio de sesión está alojado por <ph name="SAML_DOMAIN" /></translation>
 <translation id="7268365133021434339">Cerrar pestañas</translation>
 <translation id="7268659760406822741">Servicios disponibles</translation>
@@ -4120,7 +4146,6 @@
 <translation id="7309257895202129721">Mostrar &amp;controles</translation>
 <translation id="7310598146671372464">No se ha podido iniciar sesión. El servidor no admite los tipos de cifrado Kerberos especificados. Ponte en contacto con tu administrador.</translation>
 <translation id="7311079019872751559">Acceso de complementos sin pasar por la zona de pruebas</translation>
-<translation id="7311891583377621132">Mueve el dedo ligeramente para capturar otra parte de la huella digital</translation>
 <translation id="7317680720589234980">Opciones de bloqueo de pantalla e inicio de sesión</translation>
 <translation id="7321545336522791733">No se puede acceder al servidor</translation>
 <translation id="7324297612904500502">Foro beta</translation>
@@ -4202,6 +4227,7 @@
 <translation id="7464490149090366184">Error al comprimir porque el elemento ya existe ("$1")</translation>
 <translation id="7465778193084373987">URL de revocación de certificado de Netscape</translation>
 <translation id="7469406957790636836">Para activar esta opción, antes debes activar la revisión ortográfica en <ph name="BEGIN_LINK" />Idiomas y métodos de entrada<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Recibe notificaciones en este ordenador y establécelo como predeterminado para los mensajes</translation>
 <translation id="7469894403370665791">Conectarse automáticamente a esta red</translation>
 <translation id="747114903913869239">Error: no es posible decodificar la extensión.</translation>
 <translation id="7473753388963818366">Vamos a dejar listo tu <ph name="DEVICE_TYPE" /></translation>
@@ -4251,6 +4277,7 @@
 <translation id="7531779363494549572">Accede a Ajustes &gt; Aplicaciones y notificaciones &gt; Notificaciones.</translation>
 <translation id="7536709149194614609">Reinicia el dispositivo y vuelve a intentarlo más tarde.</translation>
 <translation id="7537601449003285327">Fijar a barra de tareas</translation>
+<translation id="7539856059004947393">Llave de seguridad Bluetooth</translation>
 <translation id="7540972813190816353">Se ha producido un error al comprobar las actualizaciones: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Se habilitarán las funciones de depurado en este dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="7544853251252956727">Reproducir aleatoriamente</translation>
@@ -4353,6 +4380,7 @@
 <translation id="7709152031285164251">Error: <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Enviar...</translation>
 <translation id="7711920809702896782">Información de la imagen</translation>
+<translation id="7712740978240882272">Desbloquea tu Chromebook con el teléfono. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Extensión desconocida con ID <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Se han habilitado las cookies de <ph name="DOMAIN" /></translation>
 <translation id="7714464543167945231">Certificado</translation>
@@ -4568,6 +4596,7 @@
 <translation id="7984068253310542383">Proyectar <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Leer y cambiar la configuración de contraseñas guardadas</translation>
 <translation id="7987764905897278458">Obtener más funciones inteligentes de Google</translation>
+<translation id="798835209536175951">Envía y recibe mensajes de texto con tu Chromebook. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Habilitar funciones de accesibilidad</translation>
 <translation id="7994702968232966508">Método EAP</translation>
 <translation id="799547531016638432">Eliminar acceso directo</translation>
@@ -4700,6 +4729,7 @@
 <translation id="8185331656081929126">Mostrar notificaciones cuando se detecten nuevas impresoras en la red</translation>
 <translation id="8186609076106987817">El servidor no ha podido encontrar el archivo.</translation>
 <translation id="8188120771410500975">&amp;Comprobar la ortografía de los campos de texto</translation>
+<translation id="8188389033983459049">Comprueba los ajustes del dispositivo y actívalo para continuar</translation>
 <translation id="8190193592390505034">Conectando con <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Administrar tus aplicaciones, extensiones y temas</translation>
 <translation id="8191453843330043793">Solucionador de proxies V8</translation>
@@ -4794,6 +4824,7 @@
 <translation id="8353683614194668312">Puede:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" />: <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">¿Quieres restaurar las páginas?</translation>
+<translation id="8362993567435070757">El PIN de 6 dígitos está en la parte trasera de la llave</translation>
 <translation id="8363095875018065315">estable</translation>
 <translation id="8363142353806532503">Micrófono bloqueado</translation>
 <translation id="8366396658833131068">Tu conexión de red se ha restaurado. Selecciona una red diferente o pulsa el botón "Continuar" para ejecutar tu aplicación de kiosco.</translation>
@@ -4802,6 +4833,7 @@
 <translation id="8371695176452482769">Habla ahora</translation>
 <translation id="8372369524088641025">Clave WEP incorrecta</translation>
 <translation id="8373553483208508744">Silenciar pestañas</translation>
+<translation id="8379878387931047019">Este dispositivo no es compatible con el tipo de llave de seguridad solicitado por el sitio web</translation>
 <translation id="8382913212082956454">Copiar dir&amp;ección de correo electrónico</translation>
 <translation id="8386903983509584791">Búsqueda completada</translation>
 <translation id="8389492867173948260">Permitir que esta extensión lea y cambie todos los datos de los sitios web que visites:</translation>
@@ -4920,6 +4952,7 @@
 <translation id="8557930019681227453">Archivo de manifiesto</translation>
 <translation id="8559694214572302298">Decodificador de imágenes</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Seguir leyendo</translation>
 <translation id="8565650234829130278">Se ha intentado instalar una versión anterior de la aplicación.</translation>
 <translation id="8569002732135253578">Imprimiendo <ph name="DOCUMENT_NAME" /></translation>
 <translation id="8569682776816196752">No se ha encontrado ningún destino.</translation>
@@ -4960,7 +4993,6 @@
 <translation id="8639047128869322042">Buscando software dañino...</translation>
 <translation id="8639963783467694461">Configuración de Autocompletar</translation>
 <translation id="8642171459927087831">Token de acceso</translation>
-<translation id="8642267168767642381">Has movido el dedo demasiado despacio</translation>
 <translation id="8642947597466641025">Ampliar el tamaño del texto</translation>
 <translation id="8643418457919840804">Para continuar, selecciona una opción:</translation>
 <translation id="8645354835496065562">Seguir permitiendo el acceso a los sensores</translation>
@@ -4975,6 +5007,7 @@
 <translation id="8655295600908251630">Canal</translation>
 <translation id="8655319619291175901">Vaya, algo ha salido mal...</translation>
 <translation id="8655972064210167941">Se ha producido un error al iniciar sesión porque no ha sido posible verificar la contraseña. Ponte en contacto con el administrador o vuelve a intentarlo.</translation>
+<translation id="8656619792520327915">Añadir otra llave de seguridad Bluetooth</translation>
 <translation id="8656768832129462377">No comprobar</translation>
 <translation id="8658595122208653918">Cambiar opciones de impresora...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> está compartiendo la pantalla y el audio con <ph name="TAB_NAME" />.</translation>
@@ -5097,6 +5130,7 @@
 <translation id="8814687660896548945">Espera, se está analizando el archivo...</translation>
 <translation id="881799181680267069">Ocultar otras</translation>
 <translation id="8818152010000655963">Fondo de pantalla</translation>
+<translation id="8818958672113348984">Verificar mediante el teléfono</translation>
 <translation id="8820817407110198400">Marcadores</translation>
 <translation id="8821045908425223359">Configurar la dirección IP automáticamente</translation>
 <translation id="882204272221080310">Actualizar firmware para mayor seguridad</translation>
@@ -5127,11 +5161,13 @@
 <translation id="8872155268274985541">El archivo de manifiesto de la actualización externa de kiosco no es válido. Se ha producido un error al actualizar la aplicación de kiosco. Extrae el dispositivo USB.</translation>
 <translation id="8874184842967597500">No conectado</translation>
 <translation id="8876215549894133151">Formato:</translation>
+<translation id="8876307312329369159">Este ajuste no se puede cambiar en una sesión de demostración.</translation>
 <translation id="8876309039915144086">Generar contraseña...</translation>
 <translation id="8877448029301136595">[directorio principal]</translation>
 <translation id="8879284080359814990">&amp;Mostrar como pestaña</translation>
 <translation id="8883847527783433352">Sincronizar con otra cuenta</translation>
 <translation id="8885197664446363138">Smart Lock no está disponible</translation>
+<translation id="88870264962436283">Usar Touch ID con <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Color:</translation>
 <translation id="8890516388109605451">Fuentes</translation>
 <translation id="8892168913673237979">¡Listo!</translation>
@@ -5152,6 +5188,7 @@
 <translation id="8915370057835397490">Cargando sugerencia</translation>
 <translation id="8916476537757519021">Submarco incógnito: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Inicia sesión y activa la sincronización para tener tus contraseñas en todos tus dispositivos.</translation>
+<translation id="8921366488406707015">Verificando la llave de seguridad...</translation>
 <translation id="8922013791253848639">Permite los anuncios siempre en este sitio web</translation>
 <translation id="8925458182817574960">&amp;Configuración</translation>
 <translation id="8926389886865778422">No preguntar de nuevo</translation>
@@ -5260,6 +5297,7 @@
 <translation id="9066782832737749352">Síntesis de voz</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> inicia sesión automáticamente en aplicaciones y sitios web aptos con las contraseñas que has guardado.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Si quieres iniciar sesión en tu cuenta con la llave, vincúlala con este dispositivo</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Ratón USB conectado</translation>
 <translation id="9076523132036239772">Tu dirección de correo electrónico y tu contraseña no se han podido verificar. Intenta conectarte primero a una red.</translation>
@@ -5321,7 +5359,6 @@
 <translation id="916607977885256133">Imagen en imagen</translation>
 <translation id="9169496697824289689">Ver combinaciones de teclas</translation>
 <translation id="9169931577761441333">Añadir <ph name="APP_NAME" /> a la pantalla de inicio</translation>
-<translation id="9170397650136757332">Mueve el dedo ligeramente para capturar todas las partes de tu huella digital</translation>
 <translation id="9170848237812810038">&amp;Deshacer</translation>
 <translation id="9170884462774788842">Otro programa de tu ordenador ha añadido un tema que puede cambiar el funcionamiento de Chrome.</translation>
 <translation id="9173995187295789444">Buscando dispositivos Bluetooth...</translation>
@@ -5385,6 +5422,7 @@
 <translation id="971774202801778802">Añadir URL a marcadores</translation>
 <translation id="973473557718930265">Salir</translation>
 <translation id="974555521953189084">Introduce la frase de contraseña para iniciar la sincronización</translation>
+<translation id="977640333593638907">Para utilizar la mayoría de las llaves, solo tienes que pulsar el botón</translation>
 <translation id="981121421437150478">Sin conexión</translation>
 <translation id="983511809958454316">Esta función no se admite en RV</translation>
 <translation id="984275831282074731">Métodos de pago</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index ce66c50..7e503a59 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16-kordne</translation>
 <translation id="127138278192656016">Sünkroonimise ja kõigi teenuste kasutamine</translation>
 <translation id="1272079795634619415">Peata</translation>
-<translation id="1272242203003205253">Google'i partnerid teevad teie abistamiseks teie assistendiga koostööd</translation>
 <translation id="1272978324304772054">See kasutajakonto ei kuulu domeeni, kus seade on registreeritud. Kui soovite registreeruda mõnel teisel domeenil, peate esmalt tegema seadmetaaste.</translation>
 <translation id="1274977772557788323">Adobe Flash Playeri salvestusruumi seaded</translation>
 <translation id="1274997165432133392">Küpsised ja muud saidi andmed</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Teie telefoni ei saa tuvastada</translation>
 <translation id="1616206807336925449">Selle laienduse jaoks pole erilube vaja.</translation>
 <translation id="1616298854599875024">Laiendust „<ph name="IMPORT_NAME" />” ei saa importida, kuna see pole jagatud moodul</translation>
-<translation id="161707228174452095">Sõrmejälg lisati.</translation>
 <translation id="1618268899808219593">A&amp;bikeskus</translation>
 <translation id="162035744160882748">Sünkroonimise, isikupärastamise ja muude Google'i teenuste sisselülitamine</translation>
 <translation id="1620510694547887537">Kaamera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">RAR-arhiiv</translation>
 <translation id="2034346955588403444">Muu WiFi-võrgu lisamine</translation>
 <translation id="203574396658008164">Luba lukustuskuval märkmete tegemine</translation>
-<translation id="2039623879703305659">Sõrm liikus liiga kiiresti</translation>
 <translation id="2040460856718599782">Vabandust! Teie autentimisel läks midagi valesti. Kontrollige veel kord sisselogimise mandaate ja proovige uuesti.</translation>
 <translation id="2043818754674261542">Seadme <ph name="DEVICE_TYPE" /> telefoniga avamiseks vajalik vahemaa</translation>
 <translation id="204497730941176055">Microsofti sertifikaadi malli nimi</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Kustutada serveri sertifikaat „<ph name="CERTIFICATE_NAME" />”</translation>
 <translation id="2100273922101894616">Automaatne sisselogimine</translation>
 <translation id="2101225219012730419">Versioon:</translation>
-<translation id="2107494551712864447">Sõrmejälje lisamine</translation>
 <translation id="2112877397266219826">Lülitage oma puutetundlik pult seadistamiseks sisse</translation>
 <translation id="21133533946938348">Kinnita vaheleht</translation>
 <translation id="2113479184312716848">Ava &amp;fail ...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Töölaud</translation>
 <translation id="2526619973349913024">Otsi värskendusi</translation>
 <translation id="2527167509808613699">Igat laadi ühendus</translation>
-<translation id="2532026602297547439">Andur on must</translation>
 <translation id="2532589005999780174">Suure kontrastsusega režiim</translation>
 <translation id="253434972992662860">&amp;Peata</translation>
 <translation id="2534460670861217804">Turvaline HTTP-puhverserver</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">Fotode ja videote varundamine</translation>
 <translation id="3060379269883947824">Luba funktsioon Vali ja kuula</translation>
 <translation id="3061707000357573562">Teenuse paikamine</translation>
-<translation id="3064410671692449875">Andmeid pole piisavalt</translation>
 <translation id="3065041951436100775">Tagasiside vahelehe sulgumise kohta.</translation>
 <translation id="3067198179881736288">Kas soovite rakenduse installida?</translation>
 <translation id="3067198360141518313">Käita pistikprogramm</translation>
@@ -2265,7 +2259,6 @@
 <translation id="4480590691557335796">Chrome võib teie arvutist otsida kahjulikku tarkvara ja selle eemaldada</translation>
 <translation id="4481530544597605423">Sidumata seadmed</translation>
 <translation id="4482194545587547824">Google võib kasutada teie sirvimisajalugu otsingu ja teiste Google'i teenuste isikupärastamiseks</translation>
-<translation id="4493287891836751813">Tutvustame teie Google'i assistenti</translation>
 <translation id="4495419450179050807">Ära sellel lehel kuva</translation>
 <translation id="4499718683476608392">Saate lubada krediitkaardiandmete automaattäite, et täita vormid ühe klikiga</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> jooksis kokku</translation>
@@ -2320,7 +2313,6 @@
 <translation id="4572659312570518089">Autentimine tühistati seadmega „<ph name="DEVICE_NAME" />” ühenduse loomisel.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-file</translation>
 <translation id="457386861538956877">Rohkem ...</translation>
-<translation id="4576537685267142337">Tõstke sõrm üles, seejärel puudutage andurit uuesti</translation>
 <translation id="4576541033847873020">Bluetoothi seadme sidumine</translation>
 <translation id="4579581181964204535">Hosti <ph name="HOST_NAME" /> ei saa üle kanda.</translation>
 <translation id="4580526846085481512">Kas soovite kindlasti $1 üksust kustutada?</translation>
@@ -2565,7 +2557,6 @@
 <translation id="4941627891654116707">Fondi suurus</translation>
 <translation id="494286511941020793">Puhverserveri konfigureerimise abi</translation>
 <translation id="4945444280533270988">Smart Lock on sisse lülitatud</translation>
-<translation id="494660967831069720">Osalised andmed</translation>
 <translation id="4953689047182316270">Juurdepääsetavuse sündmustele vastamine</translation>
 <translation id="4953808748584563296">Oranž vaikeavatar</translation>
 <translation id="4955814292505481804">Aastane</translation>
@@ -3522,7 +3513,6 @@
 <translation id="6384275966486438344">Muutke oma otsinguseadeid: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Saidid saavad salvestada ja lugeda küpsisefaili andmeid</translation>
 <translation id="6388429472088318283">Otsige keeli</translation>
-<translation id="6388771388956873507">Leidke seadmel olev sõrmejäljeandur ja puudutage seda sõrmega</translation>
 <translation id="6390799748543157332">Lehti, mida vaatate selles aknas, ei lisata teie brauseri ajalukku ja pärast kõikide avatud külalise režiimi akende sulgemist ei jää neist arvutisse ka muid jälgi (nt küpsiseid). Kõik allalaaditud failid siiski säilitatakse.</translation>
 <translation id="6390994422085833176">Pärast seadistamist vaadake üle sünkroonimise ja isikupärastamise funktsioonid</translation>
 <translation id="6395423953133416962">Saada <ph name="BEGIN_LINK1" />süsteemiteave<ph name="END_LINK1" /> ja <ph name="BEGIN_LINK2" />mõõdikud<ph name="END_LINK2" /></translation>
@@ -4125,7 +4115,6 @@
 <translation id="7309257895202129721">Kuva &amp;juhtelemendid</translation>
 <translation id="7310598146671372464">Sisselogimine ebaõnnestus. Server ei toeta määratud Kerberose krüpteerimistüüpe. Võtke ühendust administraatoriga.</translation>
 <translation id="7311079019872751559">Liivakastist eemaldatud pistikprogrammi juurdepääs</translation>
-<translation id="7311891583377621132">Liigutage veidi, et sõrmejälje teine osa jäädvustada</translation>
 <translation id="7317680720589234980">Ekraaniluku ja sisselogimise valikud</translation>
 <translation id="7321545336522791733">Serveriga ei saa ühendust</translation>
 <translation id="7324297612904500502">Beeta foorum</translation>
@@ -4966,7 +4955,6 @@
 <translation id="8639047128869322042">Ohtliku tarkvara otsimine …</translation>
 <translation id="8639963783467694461">Automaatse täitmise seaded</translation>
 <translation id="8642171459927087831">Juurdepääsuluba</translation>
-<translation id="8642267168767642381">Sõrm liikus liiga aeglaselt</translation>
 <translation id="8642947597466641025">Saate teksti suurendada</translation>
 <translation id="8643418457919840804">Jätkamiseks tehke valik:</translation>
 <translation id="8645354835496065562">Luba ka edaspidi juurdepääs anduritele</translation>
@@ -5327,7 +5315,6 @@
 <translation id="916607977885256133">Pilt pildis</translation>
 <translation id="9169496697824289689">Kuva klaviatuuri otseteed</translation>
 <translation id="9169931577761441333">Lisa <ph name="APP_NAME" /> avaekraanile</translation>
-<translation id="9170397650136757332">Nüüd liigutage veidi oma sõrme, et jäädvustada oma sõrmejälje kõik eri osad</translation>
 <translation id="9170848237812810038">&amp;Võta tagasi</translation>
 <translation id="9170884462774788842">Teine programm teie arvutis lisas teema, mis võib muuta Chrome'i toimimist.</translation>
 <translation id="9173995187295789444">Bluetoothi seadmete otsimine …</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 2364170..37b9129 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">۱۶ برابر</translation>
 <translation id="127138278192656016">استفاده از همگام‌سازی و همه سرویس‌ها</translation>
 <translation id="1272079795634619415">توقف</translation>
-<translation id="1272242203003205253">‏«شریکان Google» برای کمک به شما با «دستیار» همکاری می‌کند</translation>
 <translation id="1272978324304772054">این حساب کاربری متعلق به دامنه‌ای که دستگاه در آن ثبت‌ شده است، نیست. اگر می‌خواهید در دامنه دیگری ثبت‌نام کنید ابتدا باید دستگاه را بازیابی کنید.</translation>
 <translation id="1274977772557788323">‏تنظیمات فضای ذخیره‌سازی Adobe Flash Player</translation>
 <translation id="1274997165432133392">کوکی‌ها و دیگر داده‌های سایت</translation>
@@ -414,7 +413,6 @@
 <translation id="161460670679785907">تلفن شناسایی نشد</translation>
 <translation id="1616206807336925449">این برنامه افزودنی به مجوز خاصی نیاز ندارد.</translation>
 <translation id="1616298854599875024">نمی‌توان افزونه «<ph name="IMPORT_NAME" />» را وارد کرد زیرا مدول هم‌رسانی‌شده‌ای نیست.</translation>
-<translation id="161707228174452095">اثرانگشت اضافه شد.</translation>
 <translation id="1618268899808219593">مرکز را&amp;هنمایی</translation>
 <translation id="162035744160882748">‏روشن کردن همگام‌سازی، شخصی‌سازی و سرویس‌های دیگر Google</translation>
 <translation id="1620510694547887537">دوربین</translation>
@@ -692,7 +690,6 @@
 <translation id="2028997212275086731">‏بایگانی RAR</translation>
 <translation id="2034346955588403444">‏افزودن شبکه WiFi دیگر</translation>
 <translation id="203574396658008164">فعال کردن یادداشت‌برداری از صفحه درحالت قفل</translation>
-<translation id="2039623879703305659">حرکت انگشت خیلی سریع بود</translation>
 <translation id="2040460856718599782">وای! هنگام احراز هویت شما مشکلی پیش آمد. لطفاً اطلاعات کاربری ورود به سیستمتان را دوباره بررسی کرده و دوباره امتحان نمایید.</translation>
 <translation id="2043818754674261542">برای باز کردن قفل این <ph name="DEVICE_TYPE" />، باید تلفن از آن فاصله بگیرد</translation>
 <translation id="204497730941176055">‏نام الگوی گواهی Microsoft</translation>
@@ -736,7 +733,6 @@
 <translation id="2099686503067610784">مجوز سرور "<ph name="CERTIFICATE_NAME" />" حذف شود؟</translation>
 <translation id="2100273922101894616">ورود به سیستم خودکار</translation>
 <translation id="2101225219012730419">نسخه:</translation>
-<translation id="2107494551712864447">افزودن اثرانگشت</translation>
 <translation id="2112877397266219826">برای تنظیم کردن من، کنترل‌کننده لمسی‌تان را روشن کنید</translation>
 <translation id="21133533946938348">کوچک کردن برگه</translation>
 <translation id="2113479184312716848">باز کردن &amp;فایل...</translation>
@@ -1015,7 +1011,6 @@
 <translation id="2526590354069164005">دسک تاپ</translation>
 <translation id="2526619973349913024">بررسی برای وجود به‌روزرسانی</translation>
 <translation id="2527167509808613699">هر نوع اتصال</translation>
-<translation id="2532026602297547439">حسگر کثیف است</translation>
 <translation id="2532589005999780174">حالت کنتراست بالا</translation>
 <translation id="253434972992662860">&amp;توقف موقت</translation>
 <translation id="2534460670861217804">‏پروکسی HTTP امن</translation>
@@ -1373,7 +1368,6 @@
 <translation id="3057861065630527966">از عکس‌ها و ویدئوهایتان پشتیبان بگیرید</translation>
 <translation id="3060379269883947824">فعال کردن «انتخاب برای شنیدن»</translation>
 <translation id="3061707000357573562">سرویس وصله</translation>
-<translation id="3064410671692449875">داده ناکافی</translation>
 <translation id="3065041951436100775">بازخورد بسته شدن برگه.</translation>
 <translation id="3067198179881736288">برنامه نصب شود؟</translation>
 <translation id="3067198360141518313">اجرای این افزایه</translation>
@@ -2261,7 +2255,6 @@
 <translation id="4480590691557335796">‏Chrome می‌تواند نرم‌افزار مضر را در رایانه‌تان پیدا کرده و آن را حذف کند</translation>
 <translation id="4481530544597605423">دستگاه‌های لغو ارتباط‌شده</translation>
 <translation id="4482194545587547824">‏Google ممکن است از سابقه مرورتان برای شخصی‌سازی جستجو و سایر سرویس‌های Google استفاده کند.</translation>
-<translation id="4493287891836751813">‏با «دستیار Google» خود آشنا شوید</translation>
 <translation id="4495419450179050807">در این صفحه نشان داده نشود</translation>
 <translation id="4499718683476608392">به تکمیل خودکار کارت اعتباری امکان می‌دهد فرم‌ها را با یک کلیک پر کند</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> خراب شده است</translation>
@@ -2316,7 +2309,6 @@
 <translation id="4572659312570518089">هنگام اتصال به «<ph name="DEVICE_NAME" />» راستی‌آزمایی لغو شد.</translation>
 <translation id="4572815280350369984">فایل <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">بیشتر...</translation>
-<translation id="4576537685267142337">انگشت را بلند کنید، سپس دوباره حسگر را لمس کنید</translation>
 <translation id="4576541033847873020">مرتبط‌سازی دستگاه بلوتوث</translation>
 <translation id="4579581181964204535">ارسال محتوای <ph name="HOST_NAME" /> امکان‌پذیر نیست.</translation>
 <translation id="4580526846085481512">آیا مطمئنید می‌خواهید موارد $1 را حذف کنید؟</translation>
@@ -2561,7 +2553,6 @@
 <translation id="4941627891654116707">اندازه قلم</translation>
 <translation id="494286511941020793">راهنمای پیکربندی پراکسی</translation>
 <translation id="4945444280533270988">‏Smart Lock روشن است</translation>
-<translation id="494660967831069720">داده‌های جزئی</translation>
 <translation id="4953689047182316270">پاسخ دادن به رویدادهای مربوط به دسترس‌پذیری</translation>
 <translation id="4953808748584563296">چهره‌نمای پیش‌فرض نارنجی</translation>
 <translation id="4955814292505481804">سالانه</translation>
@@ -3518,7 +3509,6 @@
 <translation id="6384275966486438344">تغییر تنظیمات جستجویتان به: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">سایت‌ها می‌توانند داده‌های کوکی را ذخیره کرده و بخوانند</translation>
 <translation id="6388429472088318283">زبان‌های جستجو</translation>
-<translation id="6388771388956873507">حسگر اثر انگشت را در دستگاهتان پیدا کنید و آن را با انگشتتان لمس کنید</translation>
 <translation id="6390799748543157332">صفحاتی که در این پنجره مشاهده می‌کنید در سابقه مرورگر نشان داده نمی‌شوند و بعد از بسته شدن همه پنجره‌های مهمان باز، هیچ رد دیگری (مانند کوکی) در رایانه از خود به جای نمی‌گذارند. با این وجود، فایل‌هایی که بارگیری می‌کنید، حفظ می‌شوند.</translation>
 <translation id="6390994422085833176">مرور ویژگی‌های همگام‌سازی و شخصی‌سازی بعد از راه‌اندازی</translation>
 <translation id="6395423953133416962">ارسال <ph name="BEGIN_LINK1" />اطلاعات سیستم<ph name="END_LINK1" /> و <ph name="BEGIN_LINK2" />معیارها<ph name="END_LINK2" /></translation>
@@ -4121,7 +4111,6 @@
 <translation id="7309257895202129721">نمایش &amp;کنترل‌ها</translation>
 <translation id="7310598146671372464">‏ورود به سیستم انجام نشد. این سرور از رمزگذاری‌های Kerberos مشخص‌شده پشتیبانی نمی‌کند. لطفاً با سرپرست سیستم تماس بگیرید.</translation>
 <translation id="7311079019872751559">دسترسی به افزایه خارج از جعبه ایمنی</translation>
-<translation id="7311891583377621132">انگشتتان را کمی حرکت دهید تا بخش دیگری از اثرانگشت ثبت شود</translation>
 <translation id="7317680720589234980">گزینه‌های قفل صفحه و ورود به سیستم</translation>
 <translation id="7321545336522791733">سرور غیرقابل دسترسی است</translation>
 <translation id="7324297612904500502">تالار گفتمان بتا</translation>
@@ -4961,7 +4950,6 @@
 <translation id="8639047128869322042">درحال بررسی وجود نرم‌افزار مضر...</translation>
 <translation id="8639963783467694461">تنظیمات تکمیل خودکار</translation>
 <translation id="8642171459927087831">کد دسترسی</translation>
-<translation id="8642267168767642381">حرکت انگشت خیلی کند بود</translation>
 <translation id="8642947597466641025">طولانی تر کردن متن</translation>
 <translation id="8643418457919840804">برای ادامه، گزینه‌ای را انتخاب کنید:</translation>
 <translation id="8645354835496065562">دسترسی به حسگر همچنان مجاز باشد</translation>
@@ -5322,7 +5310,6 @@
 <translation id="916607977885256133">تصویر در تصویر</translation>
 <translation id="9169496697824289689">مشاهده میان‌برهای صفحه‌کلید</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" /> را به صفحه اصلی اضافه کنید</translation>
-<translation id="9170397650136757332">حالا کمی انگشتتان را حرکت دهید تا قسمت‌های متفاوت اثرانگشتتان ثبت شود</translation>
 <translation id="9170848237812810038">&amp;واگرد</translation>
 <translation id="9170884462774788842">‏برنامه‌ای دیگر بر روی رایانه شما یک طرح زمینه را اضافه کرده است که ممکن است نحوه کارکرد Chrome را تغییر دهد.</translation>
 <translation id="9173995187295789444">درحال جستجوی دستگاه‌های بلوتوث...</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 5f0a1da..a271c68 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Käytä synkronointia ja kaikkia palveluja</translation>
 <translation id="1272079795634619415">Pysäytä</translation>
-<translation id="1272242203003205253">Google Partners ja Assistant auttavat sinua yhdessä</translation>
 <translation id="1272978324304772054">Tämä käyttäjätili ei kuulu verkkotunnukselle, jossa laite on otettu käyttöön. Jos haluat ottaa laitteen käyttöön eri verkkotunnuksessa, sinun tulee ensin suorittaa laitteen palauttaminen.</translation>
 <translation id="1274977772557788323">Adobe Flash Playerin tallennusasetukset</translation>
 <translation id="1274997165432133392">Evästeet ja muut sivuston tiedot</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Puhelinta ei havaittu</translation>
 <translation id="1616206807336925449">Tämä laajennus ei vaadi erityisiä käyttöoikeuksia.</translation>
 <translation id="1616298854599875024">Laajennusta <ph name="IMPORT_NAME" /> ei voi tuoda, koska se ei ole jaettu moduuli.</translation>
-<translation id="161707228174452095">Sormenjälki lisättiin!</translation>
 <translation id="1618268899808219593">Ohj&amp;ekeskus</translation>
 <translation id="162035744160882748">Ota synkronointi, personointi ja muut Google-palvelut käyttöön</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">RAR-arkisto</translation>
 <translation id="2034346955588403444">Lisää muu Wi-Fi-verkko</translation>
 <translation id="203574396658008164">Salli muistiinpanojen tekeminen lukitusnäytöllä</translation>
-<translation id="2039623879703305659">Liikutit sormea liian nopeasti</translation>
 <translation id="2040460856718599782">Hups! Jotain meni vikaan todennuksen aikana. Tarkista kirjautumistietosi ja yritä uudelleen.</translation>
 <translation id="2043818754674261542">Puhelimen etäisyys, joka tarvitaan tämän laitteen (<ph name="DEVICE_TYPE" />) lukituksen avaamiseen</translation>
 <translation id="204497730941176055">Microsoftin varmenteen mallin nimi</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Poistetaanko palvelimen varmenne <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Automaattinen kirjautuminen</translation>
 <translation id="2101225219012730419">Versio:</translation>
-<translation id="2107494551712864447">Lisää sormenjälki</translation>
 <translation id="2112877397266219826">Ota kosketussäädin käyttöön, jotta voit määrittää minut</translation>
 <translation id="21133533946938348">Kiinnitä välilehti</translation>
 <translation id="2113479184312716848">Avaa &amp;tiedosto...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Työpöytä</translation>
 <translation id="2526619973349913024">Tarkista päivitykset</translation>
 <translation id="2527167509808613699">Mikä tahansa yhteys</translation>
-<translation id="2532026602297547439">Anturi likainen</translation>
 <translation id="2532589005999780174">Suuri kontrasti -tila</translation>
 <translation id="253434972992662860">&amp;Tauko</translation>
 <translation id="2534460670861217804">Suojattu HTTP-välityspalvelin</translation>
@@ -1378,7 +1373,6 @@
 <translation id="3057861065630527966">Varmuuskopioi valokuvasi ja videosi.</translation>
 <translation id="3060379269883947824">Ota käyttöön Teksti puhuttuna</translation>
 <translation id="3061707000357573562">Virheenkorjauspalvelu</translation>
-<translation id="3064410671692449875">Riittämättömät tiedot</translation>
 <translation id="3065041951436100775">Välilehti sulki palautesivun.</translation>
 <translation id="3067198179881736288">Asennetaanko sovellus?</translation>
 <translation id="3067198360141518313">Suorita laajennus</translation>
@@ -2263,7 +2257,6 @@
 <translation id="4480590691557335796">Chrome etsii haitallisia ohjelmia tietokoneestasi ja voi poistaa ne</translation>
 <translation id="4481530544597605423">Laitteet ilman paria</translation>
 <translation id="4482194545587547824">Google voi muokata hakua ja muita Googlen palveluita selaushistoriasi perusteella.</translation>
-<translation id="4493287891836751813">Tutustu Google Assistantiin</translation>
 <translation id="4495419450179050807">Älä näytä tällä sivulla</translation>
 <translation id="4499718683476608392">Ota luottokorttien automaattinen täyttö käyttöön, niin voit täyttää lomakkeita yhdellä klikkauksella</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> on kaatunut.</translation>
@@ -2318,7 +2311,6 @@
 <translation id="4572659312570518089">Todennus peruutettiin yhdistettäessä laitteeseen <ph name="DEVICE_NAME" />.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-tiedosto</translation>
 <translation id="457386861538956877">Lisää...</translation>
-<translation id="4576537685267142337">Nosta sormesi ja kosketa tunnistinta uudelleen.</translation>
 <translation id="4576541033847873020">Parin muodostus Bluetooth-laitteen kanssa</translation>
 <translation id="4579581181964204535">Osoitteen <ph name="HOST_NAME" /> suoratoisto ei onnistu.</translation>
 <translation id="4580526846085481512">Haluatko varmasti poistaa $1 kohdetta?</translation>
@@ -2563,7 +2555,6 @@
 <translation id="4941627891654116707">Kirjasinkoko</translation>
 <translation id="494286511941020793">Välityspalvelinmäärityksen ohje</translation>
 <translation id="4945444280533270988">Smart Lock on käytössä</translation>
-<translation id="494660967831069720">Osittaiset tiedot</translation>
 <translation id="4953689047182316270">Vastata esteettömyystapahtumiin</translation>
 <translation id="4953808748584563296">Oranssi oletusavatar</translation>
 <translation id="4955814292505481804">Vuosittainen</translation>
@@ -3522,7 +3513,6 @@
 <translation id="6384275966486438344">Ota käyttöön seuraava hakukone: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Sivustot voivat lukea ja tallentaa evästetietoja.</translation>
 <translation id="6388429472088318283">Hae kieliä</translation>
-<translation id="6388771388956873507">Etsi laitteen sormenjälkitunnistin ja kosketa sitä sormellasi.</translation>
 <translation id="6390799748543157332">Tässä ikkunassa katselemasi sivut eivät näy selaushistoriassa, eikä niistä jää tietokoneelle muita jälkiä, kuten evästeitä, suljettuasi kaikki vierailijaikkunat. Kaikki lataamasi tiedostot kuitenkin säilytetään.</translation>
 <translation id="6390994422085833176">Tarkasta synkronointi- ja räätälöintiominaisuudet määrityksen jälkeen</translation>
 <translation id="6395423953133416962">Lähetä <ph name="BEGIN_LINK1" />järjestelmän tiedot<ph name="END_LINK1" /> ja <ph name="BEGIN_LINK2" />tilastot<ph name="END_LINK2" /></translation>
@@ -4125,7 +4115,6 @@
 <translation id="7309257895202129721">Näytä &amp;painikkeet</translation>
 <translation id="7310598146671372464">Kirjautuminen epäonnistui. Palvelin ei tue määritettyjä Kerberos-salaustyyppejä. Ota yhteyttä järjestelmänvalvojaan.</translation>
 <translation id="7311079019872751559">Ei hiekkalaatikossa toimivan laajennuksen käyttö</translation>
-<translation id="7311891583377621132">Liikuta sormeasi hieman, niin sormenjäljen toinen osa tallennetaan.</translation>
 <translation id="7317680720589234980">Näytön lukituksen ja sisäänkirjautumisen asetukset</translation>
 <translation id="7321545336522791733">Palvelimeen ei saada yhteyttä.</translation>
 <translation id="7324297612904500502">Beta-keskusteluryhmä</translation>
@@ -4964,7 +4953,6 @@
 <translation id="8639047128869322042">Etsitään haittaohjelmia…</translation>
 <translation id="8639963783467694461">Automaattisen täytön asetukset</translation>
 <translation id="8642171459927087831">Käyttötunnus</translation>
-<translation id="8642267168767642381">Liikutit sormea liian hitaasti</translation>
 <translation id="8642947597466641025">Suurenna tekstiä</translation>
 <translation id="8643418457919840804">Jatka valitsemalla vaihtoehto:</translation>
 <translation id="8645354835496065562">Salli edelleen tunnistimien käyttö</translation>
@@ -5325,7 +5313,6 @@
 <translation id="916607977885256133">Kuva kuvassa</translation>
 <translation id="9169496697824289689">Näytä pikanäppäimet</translation>
 <translation id="9169931577761441333">Lisää <ph name="APP_NAME" /> aloitusnäytölle</translation>
-<translation id="9170397650136757332">Tallenna sormenjälkesi kokonaisuudessaan liikuttamalla sormeasi varovasti.</translation>
 <translation id="9170848237812810038">K&amp;umoa</translation>
 <translation id="9170884462774788842">Toinen tietokoneellasi oleva ohjelma lisäsi teeman, joka voi muuttaa Chromen toimintaa.</translation>
 <translation id="9173995187295789444">Haetaan Bluetooth-laitteita…</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 1a3f80a..e796c24 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Item 5 sa shelf</translation>
 <translation id="1227507814927581609">Nabigo ang pagpapatunay habang kumokonekta sa "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">menu ng system</translation>
+<translation id="123186018454553812">Sumubok ng ibang key</translation>
 <translation id="1232569758102978740">Walang pamagat</translation>
 <translation id="1233721473400465416">Lokal</translation>
 <translation id="1234808891666923653">Mga Service Worker</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Gamitin ang pag-sync at ang lahat ng serbisyo</translation>
 <translation id="1272079795634619415">Stop</translation>
-<translation id="1272242203003205253">Nakikipagtulungan ang Google Partners sa iyong Assistant para matulungan ka</translation>
 <translation id="1272978324304772054">Ang user account na ito ay hindi pagmamay-ari ng domain kung saan nakatala ang device.  Kung nais mong magpatala sa ibang domain, kailangan mo munang sumailalim sa pagbawi ng device.</translation>
 <translation id="1274977772557788323">Mga setting ng Storage ng Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies at iba pang data ng site</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Bersyon <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Maghanap ng mga password</translation>
 <translation id="1487335504823219454">Naka-on - mga custom na setting</translation>
+<translation id="1489664337021920575">Pumili ng ibang opsyon</translation>
 <translation id="1493892686965953381">Hinihintay ang <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> (na) iba pang available na device.</translation>
 <translation id="1497522201463361063">Hindi mapalatan ang pangalan "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Window ng Application</translation>
 <translation id="15373452373711364">Malaking mouse cursor</translation>
 <translation id="1538729222189715449">Binubuksan ang mga Linux file...</translation>
+<translation id="153933193410874873">Hindi namin ma-verify ang iyong pagkakakilanlan sa device na ito</translation>
 <translation id="1540605929960647700">I-enable ang demo mode</translation>
 <translation id="1543284117603151572">Na-import Mula Sa Edge</translation>
 <translation id="1545177026077493356">Awtomatikong Kiosk Mode</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Hindi magagamit ang larawang ito. Pumili ng ibang larawan.</translation>
 <translation id="1566049601598938765">Website</translation>
 <translation id="1567387640189251553">Nagkonekta ng ibang keyboard mula nang huli mong inilagay ang iyong password. Maaaring sinusubukan nitong nakawin ang iyong mga keystroke.</translation>
+<translation id="1567750922576943685">Nakakatulong ang pag-verify sa iyong pagkakakilanlang maprotektahan ang personal na impormasyon mo</translation>
 <translation id="1567993339577891801">Console ng JavaScript</translation>
 <translation id="1568067597247500137">I-mute ang site</translation>
 <translation id="1568323446248056064">Buksan ang mga setting ng display device</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Hindi makita ang iyong telepono</translation>
 <translation id="1616206807336925449">Hindi nangangailangan ang extension na ito ng mga espesyal na pahintulot.</translation>
 <translation id="1616298854599875024">Hindi ma-import ang extension na "<ph name="IMPORT_NAME" />" dahil hindi ito nakabahaging module</translation>
-<translation id="161707228174452095">Naidagdag na ang fingerprint!</translation>
 <translation id="1618268899808219593">Help Center</translation>
 <translation id="162035744160882748">I-on ang pag-sync, pag-personalize, at iba pang serbisyo ng Google</translation>
 <translation id="1620510694547887537">Camera</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">Archive na RAR</translation>
 <translation id="2034346955588403444">Magdagdag ng isa pang Wi-Fi network</translation>
 <translation id="203574396658008164">I-enable ang pagtatala mula sa lock screen</translation>
-<translation id="2039623879703305659">Masyadong mabilis ang paggalaw ng daliri</translation>
 <translation id="2040460856718599782">Oops!  May maling nangyari habang sinusubukan kang i-authenticate.  Mangyaring i-double check ang iyong mga credential sa pag-sign in at subukan ulit.</translation>
 <translation id="2043818754674261542">Kailangang distansya ng telepono upang ma-unlock ang <ph name="DEVICE_TYPE" /> na ito</translation>
 <translation id="204497730941176055">Pangalan ng Template ng Certificate sa Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Tanggalin ang certificate ng server na "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Awtomatikong Mag-sign in</translation>
 <translation id="2101225219012730419">Bersyon:</translation>
-<translation id="2107494551712864447">Magdagdag ng fingerprint</translation>
 <translation id="2112877397266219826">I-on ang iyong controller ng pagpindot upang i-set up ako</translation>
 <translation id="21133533946938348">Pin Tab</translation>
 <translation id="2113479184312716848">Buksan ang &amp;File...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Desktop</translation>
 <translation id="2526619973349913024">Tumingin para sa update</translation>
 <translation id="2527167509808613699">Anumang uri ng koneksyon</translation>
-<translation id="2532026602297547439">Marumi ang sensor</translation>
 <translation id="2532589005999780174">High contrast mode</translation>
 <translation id="253434972992662860">I-&amp;pause</translation>
 <translation id="2534460670861217804">Secure na HTTP Proxy</translation>
@@ -1197,6 +1196,7 @@
 <translation id="2783298271312924866">Na-download</translation>
 <translation id="2783321960289401138">Gumawa ng shortcut...</translation>
 <translation id="2783829359200813069">Pumili ng mga uri ng pag-encrypt</translation>
+<translation id="2783952358106015700">Gamitin ang iyong security key sa <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Pag-activate ng iyong serbisyo ng data ng mobile</translation>
 <translation id="2785873697295365461">Mga descriptor ng file</translation>
 <translation id="2787047795752739979">Patungan ang orihinal</translation>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">I-back up ang iyong mga larawan at video</translation>
 <translation id="3060379269883947824">I-enable ang Select to Speak</translation>
 <translation id="3061707000357573562">Serbisyo sa Pag-patch</translation>
-<translation id="3064410671692449875">Hindi sapat ang data</translation>
 <translation id="3065041951436100775">Feedback na isinara ang tab</translation>
 <translation id="3067198179881736288">I-install ang app?</translation>
 <translation id="3067198360141518313">Patakbuhin ang plugin na ito</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">Bagong &amp;Tab</translation>
 <translation id="3288047731229977326">Ang mga extension na tumatakbo sa developer mode ay maaaring makapinsala sa iyong computer. Kung hindi ka isang developer, dapat mong i-disable ang mga extension na tumatakbo sa developer mode upang manatiling ligtas.</translation>
 <translation id="3289856944988573801">Upang tumingin ng mga update, mangyaring gumamit ng Ethernet o Wi-Fi.</translation>
+<translation id="3292421191230118801">Ipagpatuloy sa iyong Chromebook ang pagtingin sa mga site mula sa mobile</translation>
 <translation id="32939749466444286">Hindi nalunsad ang Linux container. Pakisubukang muli.</translation>
 <translation id="3294437725009624529">Bisita</translation>
 <translation id="329838636886466101">Ayusin</translation>
@@ -1552,6 +1552,7 @@
 <translation id="3348038390189153836">Natuklasan ang natatanggal na device</translation>
 <translation id="3348459612390503954">Binabati ka namin</translation>
 <translation id="3349933790966648062">Footprint ng Memory</translation>
+<translation id="3350117557200012647">Pumunta sa pairing mode</translation>
 <translation id="3353984535370177728">Pumili ng folder na i-a-upload</translation>
 <translation id="3355936511340229503">Error sa koneksyon</translation>
 <translation id="3356797067524893661">Handa ka nang magpatuloy sa Hangouts Meet</translation>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">Ginawang <ph name="URL" /> ang iyong search engine.</translation>
 <translation id="3563432852173030730">Hindi ma-download ang Kiosk application.</translation>
 <translation id="3564334271939054422">Maaaring humiling sa iyo ang ginagamit mong Wi-Fi network (<ph name="NETWORK_ID" />) na bisitahin mo ang page ng pag-log in nito.</translation>
+<translation id="3564848315152754834">USB security key</translation>
 <translation id="3566721612727112615">Walang naidagdag na site</translation>
 <translation id="3569382839528428029">Gusto mo bang ibahagi ng <ph name="APP_NAME" /> ang iyong screen?</translation>
 <translation id="3570985609317741174">Web content</translation>
@@ -1741,6 +1743,7 @@
 <translation id="3627588569887975815">Buksan ang link sa inco&amp;gnito window</translation>
 <translation id="3627671146180677314">Oras ng Pag-renew ng Netscape Certificate</translation>
 <translation id="3627879631695760395">I-install ang <ph name="APP" />...</translation>
+<translation id="3630132874740063857">Iyong telepono</translation>
 <translation id="3630995161997703415">Idagdag ang site na ito sa iyong shelf upang magamit ito anumang oras</translation>
 <translation id="3635030235490426869">Tab 1</translation>
 <translation id="3636096452488277381">Kamusta, <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">Icon ng Extension</translation>
 <translation id="3665589677786828986">Natunton ng Chrome na ilan sa iyong mga setting ay nasira ng isa pang program at ni-reset ang mga ito sa kanilang mga orihinal na default.</translation>
 <translation id="3668570675727296296">Mga setting ng wika</translation>
+<translation id="3668801437375206837">Para mas mahusay na ma-diagnose ang mga isyu sa Bluetooth, maaaring magsama ang mga Googler ng karagdagang mga log ng Bluetooth sa kanilang mga ulat ng feedback. Kapag naka-check ang opsyong ito, maisasama sa iyong ulat ang mga log ng btsnoop at HCI mula sa kasalukuyan mong session, na nalinis para maalis ang lahat ng PII na maaaring alisin. Paghihigpitan ang access sa mga log na ito sa mga manager ng grupo ng produkto ng Chrome OS sa Listnr. Ipu-purge ang mga log pagkatapos ng 90 araw.</translation>
 <translation id="3668823961463113931">Mga Handler</translation>
 <translation id="3670229581627177274">I-on ang Bluetooth</translation>
 <translation id="3672681487849735243">Nakakita ng factory error</translation>
@@ -1780,6 +1784,7 @@
 <translation id="3691267899302886494">Gustong ibahagi ng <ph name="HOST" /> ang iyong screen</translation>
 <translation id="3693415264595406141">Password:</translation>
 <translation id="3694027410380121301">Select Previous Tab</translation>
+<translation id="369489984217678710">Mga password at iba pang data sa pag-sign in</translation>
 <translation id="3699624789011381381">Email address</translation>
 <translation id="3699920817649120894">I-off ang pag-sync at pag-personalize?</translation>
 <translation id="3700888195348409686">Ipinapakita (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1803,6 +1808,7 @@
 <translation id="3727148787322499904">Maaapektuhan ang lahat ng nakabahaging network kung babaguhin ang setting na ito</translation>
 <translation id="3727187387656390258">Siyasatin ang popup</translation>
 <translation id="3729506734996624908">Mga pinapahintulutang site</translation>
+<translation id="3731997362820527097">Piliin ang iyong security key</translation>
 <translation id="3732078975418297900">Error sa linya <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL Server na may Step-up</translation>
 <translation id="3735740477244556633">Pagbukud-bukurin ayon sa</translation>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">Welcome sa Hangouts Meet</translation>
 <translation id="3861241522664181545">Na-pause ang page.</translation>
 <translation id="3862134173397075045">Welcome sa karanasan sa Cast sa Chrome!</translation>
+<translation id="3862693525629180217">I-verify sa pamamagitan ng built-in na sensor</translation>
 <translation id="3862788408946266506">Naka-install dapat sa kiosk mode ng Chrome OS ang app na may 'kiosk_only' na manifest attribute</translation>
 <translation id="3865414814144988605">Resolution</translation>
 <translation id="386548886866354912">I-pack kasama ng <ph name="EXTENSION_NAME" /></translation>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">Kinakailangang mag-restart bago maaaring ma-reset ang iyong device gamit ang Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Tingnan sa Store</translation>
+<translation id="4058647953897694817">I-verify sa pamamagitan ng Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Check Document Now</translation>
 <translation id="406070391919917862">Background na Apps</translation>
@@ -2041,6 +2049,7 @@
 <translation id="407520071244661467">Scale</translation>
 <translation id="4075639477629295004">Hindi ma-cast ang <ph name="FILE_NAME" />.</translation>
 <translation id="4077917118009885966">Naka-block ang mga ad sa site na ito</translation>
+<translation id="4079799245038595838">May ipinadalang notification sa iyong telepono. Sundin ang mga prompt para kumpirmahing ikaw ito.</translation>
 <translation id="4081242589061676262">Hindi ma-cast ang file.</translation>
 <translation id="4084682180776658562">Bookmark</translation>
 <translation id="4084835346725913160">Isara ang <ph name="TAB_NAME" /></translation>
@@ -2140,6 +2149,7 @@
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="4250680216510889253">Hindi</translation>
 <translation id="4252852543720145436">Mga identifier ng pinoprotektahang content</translation>
+<translation id="4252899949534773101">Naka-disable ang Bluetooth</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Nakabahagi ang content ng tab</translation>
 <translation id="4254813446494774748">Wika ng Pagsasalin:</translation>
 <translation id="425573743389990240">Rate ng Pagdiskarga ng Baterya sa Watts (Ang ibig sabihin ng negatibong halaga ay nagcha-charge ang baterya)</translation>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">Makakahanap at makakapag-alis ang Chrome ng mapaminsalang software sa iyong computer</translation>
 <translation id="4481530544597605423">Mga hindi nakapares na device</translation>
 <translation id="4482194545587547824">Maaaring gamitin ng Google ang iyong history ng pagba-browse upang ma-personalize ang Search at iba pang mga serbisyo ng Google</translation>
-<translation id="4493287891836751813">Kilalanin ang iyong Google Assistant</translation>
 <translation id="4495419450179050807">Huwag ipakita sa pahinang ito</translation>
+<translation id="449938344715680828">Pindutin ang |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| at pagkatapos ay |<ph name="ACCELERATOR3" />| para lumabas</translation>
 <translation id="4499718683476608392">Ine-enable ang Autofill ng credit card para mapunan ang mga form sa isang pag-click</translation>
 <translation id="4500114933761911433">Nag-crash ang <ph name="PLUGIN_NAME" /></translation>
 <translation id="450099669180426158">Icon na exclamation mark</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">Nakansela ang pagpapatunay habang kumokonekta sa "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> na file</translation>
 <translation id="457386861538956877">Higit pa...</translation>
-<translation id="4576537685267142337">Iangat ang daliri, pagkatapos ay pinduting muli ang sensor</translation>
 <translation id="4576541033847873020">Magpares ng Bluetooth device</translation>
 <translation id="4579581181964204535">Hindi ma-cast ang <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Sigurado ka bang gusto mong tanggalin ang $1 (na) item?</translation>
@@ -2343,6 +2352,7 @@
 <translation id="4611114513649582138">Available ang koneksyon sa data</translation>
 <translation id="4613271546271159013">Binago ng isang extension ang ipinapakitang page kapag nagbukas ka ng bagong tab.</translation>
 <translation id="4615586811063744755">walang piniling cookie</translation>
+<translation id="4615618657481886098">Nairehistro mo na ang key na ito dati. Hindi mo na ito kailangang irehistrong muli.</translation>
 <translation id="4617270414136722281">Mga opsyon ng extension</translation>
 <translation id="4619615317237390068">Mga tab mula sa iba pang mga device</translation>
 <translation id="4620809267248568679">Ipinapatupad ng isang extension ang setting na ito.</translation>
@@ -2452,6 +2462,7 @@
 <translation id="4790972063719531840">Awtomatikong magpadala ng data ng diagnostic at paggamit sa Google.</translation>
 <translation id="4792711294155034829">&amp;Mag-ulat ng Isyu...</translation>
 <translation id="479536056609751218">Webpage, HTML Lamang</translation>
+<translation id="4798236378408895261">Mag-attach ng <ph name="BEGIN_LINK" />Mga Log ng Bluetooth<ph name="END_LINK" /> (Google internal)</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4801448226354548035">Itago ang mga account</translation>
 <translation id="4801512016965057443">Payagan ang pag-roam ng mobile data</translation>
@@ -2518,6 +2529,7 @@
 <translation id="4882473678324857464">Tumuon sa mga bookmark</translation>
 <translation id="4882831918239250449">Kontrolin kung paano ginagamit ang iyong history ng pag-browse para i-personalize ang Paghahanap, mga ad, at iba pa</translation>
 <translation id="4883178195103750615">I-export ang mga bookmark sa file na HTML...</translation>
+<translation id="4883274597792587930">Hanapin ang pangalang naka-print sa likod ng iyong key</translation>
 <translation id="4883436287898674711">Lahat ng site ng <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">&amp;Task Manager</translation>
 <translation id="4883898390143004266">Tulungan ang mga app na makita ang lokasyon. Gamitin ang serbisyo sa lokasyon ng Google para makatulong na mapahusay ang lokasyon para sa mga app. Maaaring pana-panahong mangolekta ang Google ng data ng lokasyon at gamitin ang data na ito nang anonymous para pahusayin ang katumpakan ng lokasyon at mga serbisyong batay sa lokasyon. <ph name="BEGIN_LINK1" />Matuto Pa<ph name="END_LINK1" /></translation>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">Laki ng font</translation>
 <translation id="494286511941020793">Tulong sa Configuration ng Proxy</translation>
 <translation id="4945444280533270988">Naka-on ang Smart Lock</translation>
-<translation id="494660967831069720">Hindi kumpletong data</translation>
 <translation id="4953689047182316270">Tumugon sa Mga Kaganapan ng Pagiging Naa-access</translation>
 <translation id="4953808748584563296">Default na orange na avatar</translation>
 <translation id="4955814292505481804">Taunan</translation>
@@ -2991,6 +3002,7 @@
 <translation id="55601339223879446">Isaayos ang mga hangganan ng iyong desktop sa display</translation>
 <translation id="5562781907504170924">Nakakonekta ang tab na ito sa isang Bluetooth Device.</translation>
 <translation id="5563234215388768762">Maghanap sa Google o mag-type ng URL</translation>
+<translation id="5567950944308676169">I-plug in ang iyong security key at i-activate ito</translation>
 <translation id="5567989639534621706">Mga cache ng application</translation>
 <translation id="5568069709869097550">Hindi makapag-sign in</translation>
 <translation id="5568144734023334204">Storage ng Android</translation>
@@ -3237,6 +3249,7 @@
 <translation id="5931146425219109062">Basahin at baguhin ang lahat ng iyong data sa mga website na iyong binibisita</translation>
 <translation id="5932881020239635062">Serial</translation>
 <translation id="5933376509899483611">Timezone</translation>
+<translation id="5938002010494270685">May available na upgrade sa seguridad</translation>
 <translation id="5939518447894949180">I-reset</translation>
 <translation id="5939847200023027600">Serbisyo sa PDF Compositor</translation>
 <translation id="5941153596444580863">Magdagdag ng tao...</translation>
@@ -3273,6 +3286,7 @@
 <translation id="6006484371116297560">Classic</translation>
 <translation id="6007237601604674381">Nabigo ang paglipat. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Hindi available sa iyong wika ang paghahanap gamit ang boses.</translation>
+<translation id="6009781704028455063">Built-in na sensor</translation>
 <translation id="6010869025736512584">Ina-access ang input ng video</translation>
 <translation id="6011193465932186973">Fingerprint</translation>
 <translation id="6011449291337289699">I-clear ang data ng site</translation>
@@ -3283,6 +3297,7 @@
 <translation id="6020431688553761150">Hindi ka pinahintulutan ng server na i-access ang mapagkukunang ito.</translation>
 <translation id="602251597322198729">Tinatangka ng site na ito na mag-download ng maramihang file. Nais mo ba itong payagan?</translation>
 <translation id="6022526133015258832">Buksan sa Full Screen</translation>
+<translation id="6022705094403139349">Handa ka na bang ipares ang iyong security key?</translation>
 <translation id="6023643151125006053">Na-lock ng administrator ng <ph name="SAML_DOMAIN" /> ang device na ito (SN: <ph name="SERIAL_NUMBER" />).</translation>
 <translation id="6025215716629925253">Stack Trace</translation>
 <translation id="6026047032548434446">I-install ang App?</translation>
@@ -3346,6 +3361,7 @@
 <translation id="6105877918873366097">Huling na-access</translation>
 <translation id="6107012941649240045">Ibinigay Kay</translation>
 <translation id="6112294629795967147">Pindutin para i-resize</translation>
+<translation id="6112931163620622315">Tingnan ang iyong telepono</translation>
 <translation id="6112952769866305444">I-edit ang tao, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Tingnan ang text at mga larawang kinopya sa clipboard</translation>
 <translation id="6116921718742659598">Baguhin ang mga setting ng wika at input</translation>
@@ -3391,6 +3407,7 @@
 <translation id="6169666352732958425">Hindi ma-cast ang desktop.</translation>
 <translation id="6171948306033499786">I-pause ang pag-print</translation>
 <translation id="6175314957787328458">Microsoft Domain GUID</translation>
+<translation id="6176043333338857209">Pansamantalang io-on ang Bluetooth para makipag-ugnayan sa iyong security key</translation>
 <translation id="6178664161104547336">Pumili ng certificate</translation>
 <translation id="6181431612547969857">Na-block ang pagda-download</translation>
 <translation id="6185132558746749656">Lokasyon ng Device</translation>
@@ -3478,6 +3495,7 @@
 <translation id="6311220991371174222">Hindi masimulan ang Chrome dahil nagkaproblema noong binubuksan ang iyong profile. Subukang i-restart ang Chrome.</translation>
 <translation id="6312400084708441752">May impormasyon tungkol sa mapaminsalang software, mga setting ng system, at mga proseso sa iyong computer</translation>
 <translation id="6312403991423642364">Hindi alam na error sa network</translation>
+<translation id="6313320178014547270">Gumagamit ka ng key na hindi nakarehistro sa website na ito</translation>
 <translation id="6313641880021325787">LUMABAS SA VR</translation>
 <translation id="6314819609899340042">Matagumpay mong na-enable ang mga feature para sa pagde-debug sa <ph name="IDS_SHORT_PRODUCT_NAME" /> device na ito.</translation>
 <translation id="6315493146179903667">Bring All to Front</translation>
@@ -3522,7 +3540,6 @@
 <translation id="6384275966486438344">Gawing ito ang iyong mga setting ng paghahanap: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Maaaring mag-save at magbasa ng data ng cookie ang mga site</translation>
 <translation id="6388429472088318283">Maghanap sa mga wika</translation>
-<translation id="6388771388956873507">Hanapin ang sensor para sa fingerprint sa iyong device at pindutin ito gamit ang iyong daliri</translation>
 <translation id="6390799748543157332">Hindi lalabas sa iyong history ng browser ang mga page na tiningnan mo sa window na ito at hindi mag-iiwan ang mga ito ng iba pang mga palatandaan, tulad ng cookies, sa computer pagkatapos mong isara ang lahat ng nakabukas na mga window ng Bisita. Gayunpaman, papanatilihin ang anumang mga file na na-download mo.</translation>
 <translation id="6390994422085833176">Suriin ang mga feature ng pag-sync at pag-personalize pagkatapos ng pag-set up</translation>
 <translation id="6395423953133416962">Ipadala ang <ph name="BEGIN_LINK1" />impormasyon ng system<ph name="END_LINK1" /> at <ph name="BEGIN_LINK2" />mga sukatan<ph name="END_LINK2" /></translation>
@@ -3534,6 +3551,7 @@
 <translation id="6399774419735315745">Espiya</translation>
 <translation id="6401445054534215853">Item 1 sa shelf</translation>
 <translation id="6404511346730675251">I-edit ang bookmark</translation>
+<translation id="6405510437656969977">Magpatuloy kapag handa ka nang ilagay ang PIN</translation>
 <translation id="6406303162637086258">I-simulate ang pag-restart ng browser</translation>
 <translation id="6406506848690869874">Pag-sync</translation>
 <translation id="6408118934673775994">Basahin at baguhin ang iyong data sa <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> at <ph name="WEBSITE_3" /></translation>
@@ -3652,6 +3670,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Ibinabahagi ang content ng desktop</translation>
 <translation id="6580151766480067746">Bersyon ng ARC</translation>
 <translation id="6581162200855843583">link ng Google Drive</translation>
+<translation id="6582080224869403177">I-reset ang iyong <ph name="DEVICE_TYPE" /> para i-upgrade ang iyong seguridad.</translation>
 <translation id="6582421931165117398">Upang maprotektahan ang iyong personal na impormasyon, palitan na ang password mo. Bago mo palitan ang iyong password, hihilingin sa iyong mag-sign in.</translation>
 <translation id="6583851739559471707">Naka-block sa mga site na malamang na magpakita ng mga nakakasagabal na ad (inirerekomenda)</translation>
 <translation id="6584878029876017575">Microsoft Lifetime Signing</translation>
@@ -3701,6 +3720,7 @@
 <translation id="6644846457769259194">Ina-update ang iyong device (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">Netscape Certification Authority Revocation URL</translation>
 <translation id="6647838571840953560">Kasalukuyang nasa <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Na-activate ang security key...</translation>
 <translation id="6648911618876616409">Handa nang ma-install ang isang mahalagang update. Mag-sign in para makapagsimula.</translation>
 <translation id="6649018507441623493">Sandali lang...</translation>
 <translation id="6649563841575838401">Hindi sinusuportahan ang format ng archive, o sira ang file.</translation>
@@ -3776,6 +3796,7 @@
 <translation id="6759193508432371551">Factory reset</translation>
 <translation id="6767639283522617719">Hindi maisama sa domain. Tiyaking tama ang mga setting para sa unit ng organisasyon.</translation>
 <translation id="6769712124046837540">Idinaragdag ang printer...</translation>
+<translation id="6770664076092644100">I-verify sa pamamagitan ng NFC</translation>
 <translation id="6771503742377376720">Ay isang Certificate Authority</translation>
 <translation id="6777817260680419853">Na-block ang pag-redirect</translation>
 <translation id="6778959797435875428">I-unmute ang mga site</translation>
@@ -3811,6 +3832,7 @@
 <translation id="6823506025919456619">Kailangan mong mag-sign in sa Chrome upang makita ang iyong mga device</translation>
 <translation id="6824564591481349393">Kopyahin ang &amp;Email Address</translation>
 <translation id="6825184156888454064">Uriin ayon sa pangalan</translation>
+<translation id="6826872289184051766">I-verify sa pamamagitan ng USB</translation>
 <translation id="6827236167376090743">Magpe-play ang video na ito nang paulit-ulit sa napakahabang panahon.</translation>
 <translation id="6828153365543658583">Higpitan ang pag-sign-in sa mga sumusunod na user:</translation>
 <translation id="6828860976882136098">Hindi na-set up ang mga awtomatikong pag-update para sa lahat ng user (error sa pagpapatupad sa preflight: <ph name="ERROR_NUMBER" />)</translation>
@@ -3844,6 +3866,7 @@
 <translation id="6880587130513028875">Hinarangan ang mga larawan sa pahinang ito.</translation>
 <translation id="6883319974225028188">Oops!  Hindi na-save ng system ang configuration ng device.</translation>
 <translation id="6885771755599377173">Preview ng Impormasyon ng System</translation>
+<translation id="6886476658664859389">NFC security key</translation>
 <translation id="6886871292305414135">Buksan ang link sa bagong &amp;tab</translation>
 <translation id="6892812721183419409">Buksan ang Link bilang <ph name="USER" /></translation>
 <translation id="6896758677409633944">Copy</translation>
@@ -4009,6 +4032,7 @@
 <translation id="713122686776214250">Magdagdag ng Pahina...</translation>
 <translation id="7133578150266914903">Niro-roll back ng iyong administrator ang device na ito (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Gawing Mas Maliit ang Teksto</translation>
+<translation id="7135729336746831607">I-on ang Bluetooth?</translation>
 <translation id="7136694880210472378">Gawing default</translation>
 <translation id="7136984461011502314">Maligayang Pagdating sa <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Mayroong error. Pakisubukang muli sa pamamagitan ng pagpili ng iba pang larawan.</translation>
@@ -4054,6 +4078,7 @@
 <translation id="7201118060536064622">Na-delete ang '<ph name="DELETED_ITEM_NAME" />'</translation>
 <translation id="7206693748120342859">Dina-download ang <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Umalis sa Page}one{Umalis sa Mga Page}other{Umalis sa Mga Page}}</translation>
+<translation id="721467499098558573">Pindutin ang button sa iyong security key sa loob ng hindi bababa sa 5 segundo</translation>
 <translation id="7216409898977639127">Cellular provider</translation>
 <translation id="7216595297012131718">Pagsunud-sunurin ang mga wika batay sa iyong kagustuhan</translation>
 <translation id="7220019174139618249">Hindi ma-export ang mga password sa "<ph name="FOLDER" />"</translation>
@@ -4089,6 +4114,7 @@
 <translation id="7256710573727326513">Buksan sa isang tab</translation>
 <translation id="725758059478686223">Serbisyo sa Pag-print</translation>
 <translation id="7257666756905341374">Basahin ang data na iyong kinokopya at pine-paste</translation>
+<translation id="7260764918845374269">Para makita ang iyong security key, kailangang nasa pairing mode ito. Pindutin ang button sa iyong key sa loob ng hindi bababa sa 5 segundo.</translation>
 <translation id="7262004276116528033">Hino-host ng <ph name="SAML_DOMAIN" /> ang serbisyo sa pag-sign in</translation>
 <translation id="7268365133021434339">Isara ang Mga Tab</translation>
 <translation id="7268659760406822741">Mga available na serbisyo</translation>
@@ -4125,7 +4151,6 @@
 <translation id="7309257895202129721">Ipakita ang &amp;mga control</translation>
 <translation id="7310598146671372464">Hindi makapag-log in. Hindi sinusuportahan ng server ang mga natukoy na uri ng Kerberos na pag-encrypt. Makipag-ugnayan sa iyong administrator.</translation>
 <translation id="7311079019872751559">Access sa hindi naka-sandbox na plugin</translation>
-<translation id="7311891583377621132">Gumalaw nang bahagya upang makunan ang ibang bahagi ng fingerprint</translation>
 <translation id="7317680720589234980">Mga opsyon sa lock ng screen at pag-sign in</translation>
 <translation id="7321545336522791733">Hindi makakonekta sa server</translation>
 <translation id="7324297612904500502">Forum sa Beta</translation>
@@ -4207,6 +4232,7 @@
 <translation id="7464490149090366184">Nabigo ang pag-zip, umiiral ang item: "$1"</translation>
 <translation id="7465778193084373987">URL ng Pagpapawalang-bisa ng Netscape Certificate</translation>
 <translation id="7469406957790636836">Para i-on ito, i-on muna ang pang-check ng pagbabaybay sa <ph name="BEGIN_LINK" />Mga wika at input<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Padadalhan ka ng mga notification at made-default sa pag-alala sa computer na ito para sa Messages</translation>
 <translation id="7469894403370665791">Awtomatikong kumonekta sa network na ito</translation>
 <translation id="747114903913869239">Error: Hindi magawang i-decode ang extension</translation>
 <translation id="7473753388963818366">Ihanda natin ang <ph name="DEVICE_TYPE" /> mo para sa iyo</translation>
@@ -4256,6 +4282,7 @@
 <translation id="7531779363494549572">Pumunta sa Mga Setting &gt; Mga app at notification &gt; Mga Notification.</translation>
 <translation id="7536709149194614609">Paki-restart ang device at subukang muli sa ibang pagkakataon.</translation>
 <translation id="7537601449003285327">I-pin sa taskbar</translation>
+<translation id="7539856059004947393">Bluetooth security key</translation>
 <translation id="7540972813190816353">Naganap ang isang error habang nagsusuri ng mga update: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">I-enable ang mga feature para sa pagde-debug sa <ph name="IDS_SHORT_PRODUCT_NAME" /> device na ito</translation>
 <translation id="7544853251252956727">I-shuffle</translation>
@@ -4358,6 +4385,7 @@
 <translation id="7709152031285164251">Nabigo - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Cast...</translation>
 <translation id="7711920809702896782">Impormasyon ng larawan</translation>
+<translation id="7712740978240882272">I-unlock ang iyong Chromebook gamit ang telepono mo. <ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Hindi kilalang extension na may ID na <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Pinapayagan ang cookies mula sa <ph name="DOMAIN" /></translation>
 <translation id="7714464543167945231">Certificate</translation>
@@ -4573,6 +4601,7 @@
 <translation id="7984068253310542383">I-mirror ang <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Basahin at baguhin ang mga setting ng naka-save na password</translation>
 <translation id="7987764905897278458">Magkaroon ng higit pang smart na feature ng Google</translation>
+<translation id="798835209536175951">Magpadala at makatanggap ng mga text message mula sa iyong Chromebook. <ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Paganahin ang mga tampok sa pagiging maa-access</translation>
 <translation id="7994702968232966508">Pamamaraang EAP</translation>
 <translation id="799547531016638432">Alisin ang shortcut</translation>
@@ -4705,6 +4734,7 @@
 <translation id="8185331656081929126">Magpakita ng mga notification kapag may nakitang mga bagong printer sa network</translation>
 <translation id="8186609076106987817">Hindi makita ng server ang file.</translation>
 <translation id="8188120771410500975">&amp;Tingnan ang spelling ng mga field ng text</translation>
+<translation id="8188389033983459049">Suriin ang mga setting ng iyong device at i-on ito para magpatuloy</translation>
 <translation id="8190193592390505034">Kumukonekta sa <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Pamahalaan ang iyong apps, mga extension, at tema</translation>
 <translation id="8191453843330043793">Panglutas ng Proxy ng V8</translation>
@@ -4799,6 +4829,7 @@
 <translation id="8353683614194668312">Maaari itong:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Ipanumbalik ang mga page?</translation>
+<translation id="8362993567435070757">Hanapin ang 6 na digit na PIN sa likod ng iyong key</translation>
 <translation id="8363095875018065315">matatag</translation>
 <translation id="8363142353806532503">Naka-block ang mikropono</translation>
 <translation id="8366396658833131068">Naipanumbalik na ang connectivity ng iyong network. Mangyaring pumili ng ibang network o pindutin ang button sa ibaba na 'Magpatuloy' upang ilunsad ang iyong kiosk app.</translation>
@@ -4807,6 +4838,7 @@
 <translation id="8371695176452482769">Magsalita ngayon</translation>
 <translation id="8372369524088641025">Mahinang WEP key</translation>
 <translation id="8373553483208508744">Mag-mute ng mga tab</translation>
+<translation id="8379878387931047019">Hindi sinusuportahan ng device na ito ang uri ng security key na hiniling ng website na ito</translation>
 <translation id="8382913212082956454">Kopyahin ang &amp;email address</translation>
 <translation id="8386903983509584791">Nakumpleto ang pag-scan</translation>
 <translation id="8389492867173948260">Pahintulutan ang extension na ito na i-read at baguhin ang lahat ng iyong data sa mga website na binibisita mo:</translation>
@@ -4926,6 +4958,7 @@
 <translation id="8557930019681227453">Manifest</translation>
 <translation id="8559694214572302298">Pang-decode ng Larawan</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Magpatuloy sa Pagbabasa</translation>
 <translation id="8565650234829130278">Tinangkang i-downgrade ang app.</translation>
 <translation id="8569002732135253578">Pini-print ngayon ang <ph name="DOCUMENT_NAME" /></translation>
 <translation id="8569682776816196752">Walang nahanap na mga destinasyon</translation>
@@ -4966,7 +4999,6 @@
 <translation id="8639047128869322042">Tinitingnan kung may mapaminsalang software...</translation>
 <translation id="8639963783467694461">Mga setting ng autofill</translation>
 <translation id="8642171459927087831">Token ng Access</translation>
-<translation id="8642267168767642381">Masyadong mabagal ang paggalaw ng daliri</translation>
 <translation id="8642947597466641025">Gawing Mas Malaki Ang Teksto</translation>
 <translation id="8643418457919840804">Para magpatuloy, pumili ng opsyon:</translation>
 <translation id="8645354835496065562">Patuloy na payagan ang access sa sensor</translation>
@@ -4981,6 +5013,7 @@
 <translation id="8655295600908251630">Channel</translation>
 <translation id="8655319619291175901">Oops, nagkaroon ng problema.</translation>
 <translation id="8655972064210167941">Hindi nakapag-sign in dahil hindi ma-verify ang iyong password. Mangyaring makipag-ugnayan sa iyong administrator o subukang muli.</translation>
+<translation id="8656619792520327915">Magdagdag ng isa pang Bluetooth security key</translation>
 <translation id="8656768832129462377">Huwag suriin</translation>
 <translation id="8658595122208653918">Baguhin ang mga opsyon sa printer...</translation>
 <translation id="8658645149275195032">Ibinabahagi ng <ph name="APP_NAME" /> ang iyong screen at audio sa <ph name="TAB_NAME" />.</translation>
@@ -5103,6 +5136,7 @@
 <translation id="8814687660896548945">Maghintay, sini-scan ang archive...</translation>
 <translation id="881799181680267069">Hide Others</translation>
 <translation id="8818152010000655963">Wallpaper</translation>
+<translation id="8818958672113348984">I-verify sa pamamagitan ng iyong telepono</translation>
 <translation id="8820817407110198400">Mga Bookmark</translation>
 <translation id="8821045908425223359">Awtomatikong i-configure ang IP address</translation>
 <translation id="882204272221080310">I-update ang firmware para sa karagdagang seguridad.</translation>
@@ -5134,11 +5168,13 @@
 <translation id="8872155268274985541">May nahanap na di-wastong manifest file ng external na pag-update ng Kiosk. Hindi na-update ang Kiosk app. Mangyaring alisin ang USB stick.</translation>
 <translation id="8874184842967597500">Hindi nakakonekta</translation>
 <translation id="8876215549894133151">Format:</translation>
+<translation id="8876307312329369159">Hindi mababago ang setting na ito sa demo session.</translation>
 <translation id="8876309039915144086">Bumuo ng password...</translation>
 <translation id="8877448029301136595">[parent directory]</translation>
 <translation id="8879284080359814990">&amp;Ipakita Bilang Tab</translation>
 <translation id="8883847527783433352">I-sync sa Isa pang Account</translation>
 <translation id="8885197664446363138">Hindi available ang Smart Lock</translation>
+<translation id="88870264962436283">Gamitin ang Touch ID sa <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Kulay</translation>
 <translation id="8890516388109605451">Mga Source</translation>
 <translation id="8892168913673237979">Handa na ang lahat!</translation>
@@ -5159,6 +5195,7 @@
 <translation id="8915370057835397490">Nilo-load ang suhestiyon</translation>
 <translation id="8916476537757519021">Incognito na Subframe: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Para mailagay ang lahat ng iyong password sa lahat ng device mo, mag-sign in at i-on ang pag-sync.</translation>
+<translation id="8921366488406707015">Vine-verify ang iyong security key...</translation>
 <translation id="8922013791253848639">Palaging payagan ang mga ad sa site na ito</translation>
 <translation id="8925458182817574960">&amp;Mga Setting</translation>
 <translation id="8926389886865778422">Huwag nang itanong ulit</translation>
@@ -5267,6 +5304,7 @@
 <translation id="9066782832737749352">Text-to-Speech</translation>
 <translation id="9072550133391925347">Awtomatiko kang sina-sign in ng <ph name="PASSWORD_MANAGER_BRAND" /> sa mga karapat-dapat na site at app gamit ang mga password na na-save mo.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Ipares ang iyong key sa device na ito para magamit mo ito sa pag-sign in sa iyong account</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Nakakonekta ang USB mouse</translation>
 <translation id="9076523132036239772">Paumanhin, hindi ma-verify ang iyong email o password. Subukan munang kumonekta sa network.</translation>
@@ -5328,7 +5366,6 @@
 <translation id="916607977885256133">Picture in Picture</translation>
 <translation id="9169496697824289689">Tingnan ang mga keyboard shortcut</translation>
 <translation id="9169931577761441333">Idagdag ang <ph name="APP_NAME" /> sa Home screen</translation>
-<translation id="9170397650136757332">Ngayon, bahagya mong igalaw ang iyong daliri upang makunan ang lahat ng iba't ibang bahagi ng fingerprint mo</translation>
 <translation id="9170848237812810038">&amp;I-undo</translation>
 <translation id="9170884462774788842">Ang isa pang program sa iyong computer ay nagdagdag ng tema na maaaring magpabago sa paraan ng paggana ng Chrome.</translation>
 <translation id="9173995187295789444">Nagsa-scan ng mga Bluetooth device...</translation>
@@ -5392,6 +5429,7 @@
 <translation id="971774202801778802">URL ng Bookmark</translation>
 <translation id="973473557718930265">Isara</translation>
 <translation id="974555521953189084">Ilagay ang iyong passphrase upang simulan ang pag-sync</translation>
+<translation id="977640333593638907">Para magamit ang karamihan sa mga key, pindutin lang ang button</translation>
 <translation id="981121421437150478">Offline</translation>
 <translation id="983511809958454316">Hindi sinusuportahan ang feature na ito sa VR</translation>
 <translation id="984275831282074731">Mga paraan ng pagbabayad</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 35271d1..20149b43 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Élément d'étagère 5</translation>
 <translation id="1227507814927581609">Échec de l'authentification lors de la connexion à l'appareil "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">menu système</translation>
+<translation id="123186018454553812">Essayer une autre clé</translation>
 <translation id="1232569758102978740">Sans titre</translation>
 <translation id="1233721473400465416">Paramètres régionaux</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Utiliser la synchronisation et tous les services</translation>
 <translation id="1272079795634619415">Arrêter</translation>
-<translation id="1272242203003205253">Les partenaires de Google collaborent avec l'Assistant pour vous aider</translation>
 <translation id="1272978324304772054">Ce compte utilisateur n'appartient pas au domaine auprès duquel l'appareil est enregistré. Si vous souhaitez vous enregistrer auprès d'un autre domaine, vous devez d'abord suivre la procédure de récupération de votre appareil.</translation>
 <translation id="1274977772557788323">Paramètres de stockage d'Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies et autres données de site</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Version <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Rechercher</translation>
 <translation id="1487335504823219454">Activée – Paramètres personnalisés</translation>
+<translation id="1489664337021920575">Sélectionner une autre option</translation>
 <translation id="1493892686965953381">En attente de <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> autres périphériques disponibles</translation>
 <translation id="1497522201463361063">Impossible de renommer "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Fenêtre de l'application</translation>
 <translation id="15373452373711364">Grand curseur</translation>
 <translation id="1538729222189715449">Ouverture des fichiers Linux…</translation>
+<translation id="153933193410874873">Impossible de valider votre identité sur cet appareil</translation>
 <translation id="1540605929960647700">Activer le mode de démonstration</translation>
 <translation id="1543284117603151572">Importés depuis Edge</translation>
 <translation id="1545177026077493356">Mode Kiosque automatique</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Impossible d'utiliser cette image. Sélectionnez-en une autre.</translation>
 <translation id="1566049601598938765">Site Web</translation>
 <translation id="1567387640189251553">Un clavier différent a été branché depuis la dernière fois où vous avez saisi votre mot de passe. Il est possible que ce soit pour enregistrer les touches sur lesquelles vous appuyez et vous soutirer ainsi des informations.</translation>
+<translation id="1567750922576943685">La validation de votre identité contribue à protéger vos informations personnelles</translation>
 <translation id="1567993339577891801">Console JavaScript</translation>
 <translation id="1568067597247500137">Couper le son du site</translation>
 <translation id="1568323446248056064">Ouvrir les paramètres de l'écran</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Impossible de détecter votre téléphone</translation>
 <translation id="1616206807336925449">Cette extension ne nécessite aucune autorisation spéciale.</translation>
 <translation id="1616298854599875024">Impossible d'importer l'extension <ph name="IMPORT_NAME" />, car il ne s'agit pas d'un module partagé</translation>
-<translation id="161707228174452095">Empreinte digitale ajoutée</translation>
 <translation id="1618268899808219593">C&amp;entre d'aide</translation>
 <translation id="162035744160882748">Activer la synchronisation, la personnalisation et d'autres services Google</translation>
 <translation id="1620510694547887537">Appareil photo</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">Archive RAR</translation>
 <translation id="2034346955588403444">Ajouter un réseau Wi-Fi</translation>
 <translation id="203574396658008164">Activer la prise de notes depuis l'écran de verrouillage</translation>
-<translation id="2039623879703305659">Doigt déplacé trop rapidement</translation>
 <translation id="2040460856718599782">Petit problème… Une erreur s'est produite lors de la tentative d'authentification. Veuillez vérifier vos identifiants de connexion, puis réessayer.</translation>
 <translation id="2043818754674261542">Distance requise pour que le téléphone déverrouille ce <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Nom du modèle de certificat Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Supprimer le certificat de serveur "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Connexion automatique</translation>
 <translation id="2101225219012730419">Version :</translation>
-<translation id="2107494551712864447">Ajouter une empreinte digitale</translation>
 <translation id="2112877397266219826">Activez votre contrôleur tactile pour la configuration</translation>
 <translation id="21133533946938348">Épingler l'onglet</translation>
 <translation id="2113479184312716848">&amp;Ouvrir un fichier...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Bureau</translation>
 <translation id="2526619973349913024">Rechercher des mises à jour</translation>
 <translation id="2527167509808613699">Toutes sortes de connexions</translation>
-<translation id="2532026602297547439">Capteur sale</translation>
 <translation id="2532589005999780174">Mode Contraste élevé</translation>
 <translation id="253434972992662860">&amp;Pause</translation>
 <translation id="2534460670861217804">Proxy HTTP sécurisé</translation>
@@ -1197,6 +1196,7 @@
 <translation id="2783298271312924866">Téléchargé</translation>
 <translation id="2783321960289401138">Créer un raccourci…</translation>
 <translation id="2783829359200813069">Sélectionner les types de chiffrement</translation>
+<translation id="2783952358106015700">Utiliser votre clé de sécurité avec <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Activation de votre service Internet mobile</translation>
 <translation id="2785873697295365461">Descripteurs de fichiers</translation>
 <translation id="2787047795752739979">Écraser l'original</translation>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">Sauvegarder vos photos et vos vidéos</translation>
 <translation id="3060379269883947824">Activer "Sélectionner pour prononcer"</translation>
 <translation id="3061707000357573562">Service d'application de correctifs</translation>
-<translation id="3064410671692449875">Données insuffisantes</translation>
 <translation id="3065041951436100775">Commentaires relatifs à l'arrêt de l'onglet</translation>
 <translation id="3067198179881736288">Installer l'application ?</translation>
 <translation id="3067198360141518313">Exécuter ce plug-in</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">Nouvel ongle&amp;t</translation>
 <translation id="3288047731229977326">Les extensions exécutées en mode développeur peuvent nuire à votre ordinateur. Si vous n'êtes pas un développeur, nous vous recommandons de désactiver celles-ci afin d'assurer la sécurité de votre ordinateur.</translation>
 <translation id="3289856944988573801">Pour rechercher des mises à jour, veuillez utiliser une connexion Ethernet ou Wi-Fi.</translation>
+<translation id="3292421191230118801">Poursuivre la visite des sites consultés sur mobile, sur votre Chromebook</translation>
 <translation id="32939749466444286">Impossible de démarrer le conteneur Linux. Veuillez réessayer.</translation>
 <translation id="3294437725009624529">Invité</translation>
 <translation id="329838636886466101">Réparer</translation>
@@ -1552,6 +1552,7 @@
 <translation id="3348038390189153836">Nouveau matériel détecté</translation>
 <translation id="3348459612390503954">Félicitations</translation>
 <translation id="3349933790966648062">Espace mémoire utilisé</translation>
+<translation id="3350117557200012647">Associer</translation>
 <translation id="3353984535370177728">Sélectionner le dossier d'importation</translation>
 <translation id="3355936511340229503">Erreur de connexion</translation>
 <translation id="3356797067524893661">Vous pouvez accéder à Hangouts Meet</translation>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">Votre moteur de recherche a été remplacé par <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Impossible de télécharger l'application kiosque.</translation>
 <translation id="3564334271939054422">Pour utiliser ce réseau Wi-Fi (<ph name="NETWORK_ID" />), vous devrez peut-être vous rendre sur la page de connexion correspondante.</translation>
+<translation id="3564848315152754834">Clé de sécurité USB</translation>
 <translation id="3566721612727112615">Aucun site ajouté</translation>
 <translation id="3569382839528428029">Voulez-vous que l'application <ph name="APP_NAME" /> partage votre écran ?</translation>
 <translation id="3570985609317741174">Contenu Web</translation>
@@ -1741,6 +1743,7 @@
 <translation id="3627588569887975815">Ouvrir le lien dans une fenêtre en navi&amp;gation privée</translation>
 <translation id="3627671146180677314">Date de renouvellement du certificat Netscape</translation>
 <translation id="3627879631695760395">Installer <ph name="APP" />...</translation>
+<translation id="3630132874740063857">Votre téléphone</translation>
 <translation id="3630995161997703415">Ajoutez ce site à votre étagère pour l'utiliser à tout moment</translation>
 <translation id="3635030235490426869">Tab 1</translation>
 <translation id="3636096452488277381">Bonjour <ph name="USER_GIVEN_NAME" /></translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">Icône de l'extension</translation>
 <translation id="3665589677786828986">Chrome a détecté que certains de vos paramètres ont été corrompus par un autre programme. Leurs valeurs par défaut ont été rétablies.</translation>
 <translation id="3668570675727296296">Paramètres linguistiques</translation>
+<translation id="3668801437375206837">Afin de mieux analyser les problèmes liés au Bluetooth, les Googleurs peuvent fournir des journaux Bluetooth supplémentaires en plus de leurs rapports de commentaires. Lorsque cette option est cochée, le rapport contient les journaux btsnoop et HCI de la session en cours, qui ont été vérifiés pour retirer le maximum d'informations personnelles. Seuls les responsables du groupe de produits Chrome OS ont accès aux journaux dans Listnr. Ceux-ci sont définitivement supprimés au bout de 90 jours.</translation>
 <translation id="3668823961463113931">Gestionnaires</translation>
 <translation id="3670229581627177274">Activer le Bluetooth</translation>
 <translation id="3672681487849735243">Une erreur a été détectée dans la configuration d'usine</translation>
@@ -1780,6 +1784,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> souhaite partager votre écran</translation>
 <translation id="3693415264595406141">Mot de passe :</translation>
 <translation id="3694027410380121301">Sélectionner l'onglet précédent</translation>
+<translation id="369489984217678710">Mots de passe et autres données de connexion</translation>
 <translation id="3699624789011381381">Adresse e-mail</translation>
 <translation id="3699920817649120894">Désactiver la synchronisation et la personnalisation ?</translation>
 <translation id="3700888195348409686">Présentation de <ph name="PAGE_ORIGIN" />…</translation>
@@ -1803,6 +1808,7 @@
 <translation id="3727148787322499904">Les modifications apportées à ce paramètre s'appliquent à tous les réseaux partagés</translation>
 <translation id="3727187387656390258">Inspecter le pop-up</translation>
 <translation id="3729506734996624908">Sites autorisés</translation>
+<translation id="3731997362820527097">Sélectionner votre clé de sécurité</translation>
 <translation id="3732078975418297900">Erreur à la ligne <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Serveur SSL avec fonction d'optimisation</translation>
 <translation id="3735740477244556633">Trier par</translation>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">Bienvenue dans Hangouts Meet</translation>
 <translation id="3861241522664181545">Chargement de la page suspendu.</translation>
 <translation id="3862134173397075045">Bienvenue dans l'expérience Cast sur Chrome</translation>
+<translation id="3862693525629180217">Valider via le capteur intégré</translation>
 <translation id="3862788408946266506">L'application dont le fichier manifeste comporte un attribut "kiosk_only" doit être installée en mode Kiosque pour Chrome OS</translation>
 <translation id="3865414814144988605">Résolution</translation>
 <translation id="386548886866354912">Empaqueter avec <ph name="EXTENSION_NAME" /></translation>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">Vous devez redémarrer votre appareil avant de pouvoir le réinitialiser avec le Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Afficher dans la boutique</translation>
+<translation id="4058647953897694817">Valider via Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Vérifier le document maintenant</translation>
 <translation id="406070391919917862">Applications en arrière-plan</translation>
@@ -2041,6 +2049,7 @@
 <translation id="407520071244661467">Mise à l'échelle</translation>
 <translation id="4075639477629295004">Impossible de caster "<ph name="FILE_NAME" />"</translation>
 <translation id="4077917118009885966">Annonces bloquées sur ce site</translation>
+<translation id="4079799245038595838">Une notification a été envoyée à votre téléphone. Suivez les invites afin de confirmer votre identité.</translation>
 <translation id="4081242589061676262">Impossible de caster le fichier.</translation>
 <translation id="4084682180776658562">Favori</translation>
 <translation id="4084835346725913160">Fermer <ph name="TAB_NAME" /></translation>
@@ -2140,6 +2149,7 @@
 <translation id="4250229828105606438">Capture d'écran</translation>
 <translation id="4250680216510889253">Non</translation>
 <translation id="4252852543720145436">Identifiants de contenu protégé</translation>
+<translation id="4252899949534773101">Bluetooth désactivé</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – Contenu de l'onglet partagé</translation>
 <translation id="4254813446494774748">Langue de traduction :</translation>
 <translation id="425573743389990240">Taux de décharge de la batterie en watts (une valeur négative signifie que la batterie est en charge)</translation>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">Chrome peut détecter et supprimer les logiciels malveillants sur votre ordinateur</translation>
 <translation id="4481530544597605423">Appareils dissociés</translation>
 <translation id="4482194545587547824">Google peut utiliser votre historique de navigation pour personnaliser la recherche et d'autres services Google.</translation>
-<translation id="4493287891836751813">Faites connaissance avec l'Assistant Google</translation>
 <translation id="4495419450179050807">Ne pas afficher sur cette page</translation>
+<translation id="449938344715680828">Appuyez sur |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| et |<ph name="ACCELERATOR3" />| pour quitter la page</translation>
 <translation id="4499718683476608392">Activer la saisie automatique des informations de paiement pour remplir les formulaires d'un simple clic</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> a planté</translation>
 <translation id="450099669180426158">Icône représentant un point d'exclamation</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">Annulation de l'authentification lors de la connexion à l'appareil "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">Fichier <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Autres...</translation>
-<translation id="4576537685267142337">Relevez le doigt, puis appuyez de nouveau sur le capteur</translation>
 <translation id="4576541033847873020">Associer un appareil Bluetooth</translation>
 <translation id="4579581181964204535">Impossible de caster <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Voulez-vous vraiment supprimer $1 éléments ?</translation>
@@ -2343,6 +2352,7 @@
 <translation id="4611114513649582138">Connexion de données disponible</translation>
 <translation id="4613271546271159013">Une extension a modifié la page qui s'affiche lorsque vous ouvrez un nouvel onglet.</translation>
 <translation id="4615586811063744755">aucun cookie sélectionné</translation>
+<translation id="4615618657481886098">Cette clé est déjà enregistrée. Il n'est pas nécessaire de l'enregistrer à nouveau.</translation>
 <translation id="4617270414136722281">Options d'extension</translation>
 <translation id="4619615317237390068">Onglets d'autres appareils</translation>
 <translation id="4620809267248568679">Ce paramètre est appliqué par une extension.</translation>
@@ -2452,6 +2462,7 @@
 <translation id="4790972063719531840">Envoyer automatiquement des données de diagnostic et d'utilisation à Google</translation>
 <translation id="4792711294155034829">&amp;Signaler un problème...</translation>
 <translation id="479536056609751218">Page Web, HTML uniquement</translation>
+<translation id="4798236378408895261">Joindre les <ph name="BEGIN_LINK" />journaux Bluetooth<ph name="END_LINK" /> (usage interne de Google)</translation>
 <translation id="479989351350248267">rechercher</translation>
 <translation id="4801448226354548035">Masquer les comptes</translation>
 <translation id="4801512016965057443">Autoriser l'itinérance des données mobiles</translation>
@@ -2518,6 +2529,7 @@
 <translation id="4882473678324857464">Favoris</translation>
 <translation id="4882831918239250449">Contrôler la manière dont votre historique de navigation est utilisé pour personnaliser la recherche, les annonces, etc.</translation>
 <translation id="4883178195103750615">Exporter les favoris vers un fichier HTML...</translation>
+<translation id="4883274597792587930">Localisez le nom imprimé au dos de votre clé</translation>
 <translation id="4883436287898674711">Tous les sites <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">&amp;Gestionnaire de tâches</translation>
 <translation id="4883898390143004266">Aider les applications à détecter la position. La localisation dans les applications sera améliorée à l'aide du service de localisation de Google. Nous sommes susceptibles de recueillir régulièrement des données de localisation et de les utiliser de façon anonyme afin d'améliorer la précision de la localisation et les services géolocalisés. <ph name="BEGIN_LINK1" />En savoir plus<ph name="END_LINK1" /></translation>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">Taille de police</translation>
 <translation id="494286511941020793">Aide pour la configuration de proxy</translation>
 <translation id="4945444280533270988">Smart Lock activé</translation>
-<translation id="494660967831069720">Données partielles</translation>
 <translation id="4953689047182316270">Répondre aux événements d'accessibilité</translation>
 <translation id="4953808748584563296">Avatar orange par défaut</translation>
 <translation id="4955814292505481804">Annuelle</translation>
@@ -2991,6 +3002,7 @@
 <translation id="55601339223879446">Adaptez les dimensions de votre Bureau à l'écran</translation>
 <translation id="5562781907504170924">Cet onglet est associé à un appareil Bluetooth.</translation>
 <translation id="5563234215388768762">Effectuez une recherche sur Google ou saisissez une URL</translation>
+<translation id="5567950944308676169">Insérez votre clé de sécurité et activez-la</translation>
 <translation id="5567989639534621706">Caches des applications</translation>
 <translation id="5568069709869097550">Impossible de se connecter</translation>
 <translation id="5568144734023334204">Taille de stockage Android</translation>
@@ -3238,6 +3250,7 @@
 <translation id="5931146425219109062">Accéder à toutes vos données sur les sites Web que vous consultez et les modifier</translation>
 <translation id="5932881020239635062">Série</translation>
 <translation id="5933376509899483611">Fuseau horaire</translation>
+<translation id="5938002010494270685">Mise à niveau de sécurité disponible</translation>
 <translation id="5939518447894949180">Réinitialiser</translation>
 <translation id="5939847200023027600">Service de composition de PDF</translation>
 <translation id="5941153596444580863">Ajouter un profil utilisateur…</translation>
@@ -3274,6 +3287,7 @@
 <translation id="6006484371116297560">Classique</translation>
 <translation id="6007237601604674381">Échec du transfert. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">La recherche vocale n'est pas disponible dans votre langue.</translation>
+<translation id="6009781704028455063">Capteur intégré</translation>
 <translation id="6010869025736512584">Accès à l'entrée vidéo en cours…</translation>
 <translation id="6011193465932186973">Empreinte digitale</translation>
 <translation id="6011449291337289699">Effacer les données de sites</translation>
@@ -3284,6 +3298,7 @@
 <translation id="6020431688553761150">Vous ne disposez pas des autorisations serveur nécessaires pour accéder à cette ressource.</translation>
 <translation id="602251597322198729">Ce site tente de télécharger plusieurs fichiers. Voulez-vous autoriser le chargement ?</translation>
 <translation id="6022526133015258832">Ouvrir en mode plein écran</translation>
+<translation id="6022705094403139349">Prêt à associer votre clé de sécurité ?</translation>
 <translation id="6023643151125006053">L'administrateur de <ph name="SAML_DOMAIN" /> a verrouillé cet appareil (n° de série : <ph name="SERIAL_NUMBER" />).</translation>
 <translation id="6025215716629925253">Trace de la pile</translation>
 <translation id="6026047032548434446">Installer l'application ?</translation>
@@ -3347,6 +3362,7 @@
 <translation id="6105877918873366097">Dernier accès</translation>
 <translation id="6107012941649240045">Émis pour</translation>
 <translation id="6112294629795967147">Appuyer pour redimensionner</translation>
+<translation id="6112931163620622315">Vérifier le téléphone</translation>
 <translation id="6112952769866305444">Modifier la personne, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Voir le texte et les images copiés dans le presse-papiers</translation>
 <translation id="6116921718742659598">Modifier les paramètres de langue et de saisie</translation>
@@ -3392,6 +3408,7 @@
 <translation id="6169666352732958425">Impossible de caster le bureau</translation>
 <translation id="6171948306033499786">Suspendre l'impression</translation>
 <translation id="6175314957787328458">GUID de domaine Microsoft</translation>
+<translation id="6176043333338857209">Chrome va activer provisoirement le Bluetooth pour pouvoir communiquer avec votre clé de sécurité</translation>
 <translation id="6178664161104547336">Sélectionner un certificat</translation>
 <translation id="6181431612547969857">Téléchargement bloqué</translation>
 <translation id="6185132558746749656">Position de l'appareil</translation>
@@ -3479,6 +3496,7 @@
 <translation id="6311220991371174222">Impossible de démarrer Chrome, car une erreur s'est produite lors de l'ouverture de votre profil. Essayez de relancer Chrome.</translation>
 <translation id="6312400084708441752">Inclut des informations sur les logiciels malveillants, les paramètres système et les processus de l'ordinateur</translation>
 <translation id="6312403991423642364">Erreur de réseau inconnue.</translation>
+<translation id="6313320178014547270">La clé n'est pas enregistrée auprès de ce site Web</translation>
 <translation id="6313641880021325787">QUITTER LA RV</translation>
 <translation id="6314819609899340042">Les fonctionnalités de débogage ont été activées sur cet appareil <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="6315493146179903667">Tout ramener au premier plan</translation>
@@ -3523,7 +3541,6 @@
 <translation id="6384275966486438344">Modifier les paramètres de la recherche pour utiliser l'adresse <ph name="SEARCH_HOST" />.</translation>
 <translation id="6385543213911723544">Les sites peuvent enregistrer et consulter les données liées aux cookies.</translation>
 <translation id="6388429472088318283">Rechercher des langues</translation>
-<translation id="6388771388956873507">Localisez le lecteur d'empreinte digitale de votre appareil, puis posez le doigt dessus</translation>
 <translation id="6390799748543157332">Les pages que vous consultez dans cette fenêtre ne sont pas consignées dans l'historique du navigateur et ne laissent aucune autre trace sur votre ordinateur (des cookies, par exemple), une fois que vous avez fermé toutes les fenêtres Invité ouvertes. Tous les fichiers téléchargés sont toutefois conservés.</translation>
 <translation id="6390994422085833176">Vérifier les fonctionnalités de synchronisation et de personnalisation après la configuration</translation>
 <translation id="6395423953133416962">Envoyer les <ph name="BEGIN_LINK1" />informations système<ph name="END_LINK1" /> et les <ph name="BEGIN_LINK2" />statistiques<ph name="END_LINK2" /></translation>
@@ -3535,6 +3552,7 @@
 <translation id="6399774419735315745">Espionne</translation>
 <translation id="6401445054534215853">Élément d'étagère 1</translation>
 <translation id="6404511346730675251">Modifier le favori</translation>
+<translation id="6405510437656969977">Continuez lorsque vous êtes prêt à saisir le code</translation>
 <translation id="6406303162637086258">Simuler le redémarrage du navigateur</translation>
 <translation id="6406506848690869874">Synchronisation</translation>
 <translation id="6408118934673775994">Accéder aux données des sites <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> et <ph name="WEBSITE_3" />, et les modifier</translation>
@@ -3653,6 +3671,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – Contenu du bureau partagé</translation>
 <translation id="6580151766480067746">Version d'ARC</translation>
 <translation id="6581162200855843583">Lien Google Drive</translation>
+<translation id="6582080224869403177">Réinitialisez votre appareil <ph name="DEVICE_TYPE" /> pour procéder à la mise à niveau de sécurité.</translation>
 <translation id="6582421931165117398">Pour protéger vos informations personnelles, modifiez votre mot de passe maintenant. Vous devrez vous connecter au préalable.</translation>
 <translation id="6583851739559471707">Bloqué sur les sites qui ont tendance à afficher des annonces intrusives (recommandé)</translation>
 <translation id="6584878029876017575">Signature permanente Microsoft</translation>
@@ -3702,6 +3721,7 @@
 <translation id="6644846457769259194">Mise à jour de votre appareil (<ph name="PROGRESS_PERCENT" />)…</translation>
 <translation id="6647228709620733774">URL de révocation de l'autorité de certification Netscape</translation>
 <translation id="6647838571840953560">Version actuelle : <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Clé de sécurité activée</translation>
 <translation id="6648911618876616409">Une mise à jour critique est disponible. Connectez-vous pour lancer l'installation.</translation>
 <translation id="6649018507441623493">Un instant…</translation>
 <translation id="6649563841575838401">Le format de l'archive n'est pas compatible, ou le fichier est endommagé.</translation>
@@ -3777,6 +3797,7 @@
 <translation id="6759193508432371551">Rétablir la configuration d'usine</translation>
 <translation id="6767639283522617719">Impossible d'effectuer l'association au domaine. Assurez-vous que les paramètres sont corrects pour l'unité organisationnelle.</translation>
 <translation id="6769712124046837540">Ajout d'une imprimante en cours…</translation>
+<translation id="6770664076092644100">Valider via NFC</translation>
 <translation id="6771503742377376720">Est une autorité de certification</translation>
 <translation id="6777817260680419853">Redirection bloquée</translation>
 <translation id="6778959797435875428">Réactiver le son des sites</translation>
@@ -3812,6 +3833,7 @@
 <translation id="6823506025919456619">Vous devez vous connecter à Chrome pour voir vos périphériques.</translation>
 <translation id="6824564591481349393">Copi&amp;er l'adresse e-mail</translation>
 <translation id="6825184156888454064">Trier par nom</translation>
+<translation id="6826872289184051766">Valider via USB</translation>
 <translation id="6827236167376090743">Cette vidéo va être lue en boucle.</translation>
 <translation id="6828153365543658583">Autoriser uniquement les utilisateurs suivants à se connecter :</translation>
 <translation id="6828860976882136098">Échec de la configuration des mises à jour automatiques pour tous les utilisateurs (erreur d'exécution avant la période de diffusion : <ph name="ERROR_NUMBER" />)</translation>
@@ -3845,6 +3867,7 @@
 <translation id="6880587130513028875">Des images ont été bloquées sur cette page.</translation>
 <translation id="6883319974225028188">Petit problème… Échec de l'enregistrement de la configuration de l'appareil par le système.</translation>
 <translation id="6885771755599377173">Aperçu des informations système</translation>
+<translation id="6886476658664859389">Clé de sécurité NFC</translation>
 <translation id="6886871292305414135">Ouvrir le lien dans un nouvel ongle&amp;t</translation>
 <translation id="6892812721183419409">Ouvrir le lien avec le compte <ph name="USER" /></translation>
 <translation id="6896758677409633944">Copier</translation>
@@ -4010,6 +4033,7 @@
 <translation id="713122686776214250">Ajouter une pa&amp;ge...</translation>
 <translation id="7133578150266914903">Votre administrateur rétablit une version antérieure du système d'exploitation sur cet appareil (<ph name="PROGRESS_PERCENT" />)…</translation>
 <translation id="7134098520442464001">Réduit la taille du texte</translation>
+<translation id="7135729336746831607">Activer le Bluetooth ?</translation>
 <translation id="7136694880210472378">Utiliser par défaut</translation>
 <translation id="7136984461011502314">Bienvenue dans <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Une erreur s'est produite. Veuillez réessayer en sélectionnant d'autres images.</translation>
@@ -4055,6 +4079,7 @@
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" supprimé</translation>
 <translation id="7206693748120342859">Téléchargement de <ph name="PLUGIN_NAME" /> en cours…</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Quitter la page}one{Quitter la page}other{Quitter les pages}}</translation>
+<translation id="721467499098558573">Appuyez sur le bouton situé sur votre clé de sécurité pendant au moins cinq secondes</translation>
 <translation id="7216409898977639127">Opérateur de téléphonie mobile</translation>
 <translation id="7216595297012131718">Classer les langues selon vos préférences</translation>
 <translation id="7220019174139618249">Impossible d'exporter les mots de passe vers "<ph name="FOLDER" />"</translation>
@@ -4090,6 +4115,7 @@
 <translation id="7256710573727326513">Ouvrir dans un onglet</translation>
 <translation id="725758059478686223">Service d'impression</translation>
 <translation id="7257666756905341374">Accéder aux données que vous copiez et collez</translation>
+<translation id="7260764918845374269">Votre clé de sécurité doit être associée pour apparaître dans la liste. Appuyez sur le bouton situé sur votre clé pendant au moins cinq secondes.</translation>
 <translation id="7262004276116528033">Ce service de connexion est hébergé par <ph name="SAML_DOMAIN" />.</translation>
 <translation id="7268365133021434339">Fermer les onglets</translation>
 <translation id="7268659760406822741">Services disponibles</translation>
@@ -4126,7 +4152,6 @@
 <translation id="7309257895202129721">Afficher les &amp;commandes</translation>
 <translation id="7310598146671372464">Échec de la connexion. Le serveur n'accepte pas les types de chiffrement Kerberos spécifiés. Veuillez contacter votre administrateur.</translation>
 <translation id="7311079019872751559">Accès via un plug-in sans système de bac à sable</translation>
-<translation id="7311891583377621132">Déplacez légèrement votre doigt pour enregistrer une autre partie de votre empreinte digitale</translation>
 <translation id="7317680720589234980">Options de verrouillage de l'écran et de connexion</translation>
 <translation id="7321545336522791733">Serveur inaccessible</translation>
 <translation id="7324297612904500502">Forum bêta</translation>
@@ -4208,6 +4233,7 @@
 <translation id="7464490149090366184">Échec de la compression au format .zip, car l'élément existe déjà : $1.</translation>
 <translation id="7465778193084373987">URL de révocation de certificat Netscape</translation>
 <translation id="7469406957790636836">Pour activer cette option, activez d'abord la vérification orthographique sous <ph name="BEGIN_LINK" />Langues et saisie<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Vous envoyer des notifications et mémoriser cet ordinateur pour les messages</translation>
 <translation id="7469894403370665791">Se connecter automatiquement à ce réseau</translation>
 <translation id="747114903913869239">Erreur : impossible de décoder l'extension.</translation>
 <translation id="7473753388963818366">Préparons votre <ph name="DEVICE_TYPE" /></translation>
@@ -4257,6 +4283,7 @@
 <translation id="7531779363494549572">Accédez à Paramètres &gt; Applications et notifications &gt; Notifications.</translation>
 <translation id="7536709149194614609">Veuillez redémarrer l'appareil, puis réessayer plus tard.</translation>
 <translation id="7537601449003285327">Épingler à la barre des tâches</translation>
+<translation id="7539856059004947393">Clé de sécurité Bluetooth</translation>
 <translation id="7540972813190816353">Une erreur s'est produite pendant la vérification des mises à jour : <ph name="ERROR" />.</translation>
 <translation id="7543104066686362383">Activer les fonctionnalités de débogage sur cet appareil <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="7544853251252956727">Aléatoire</translation>
@@ -4359,6 +4386,7 @@
 <translation id="7709152031285164251">Échec – <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Caster…</translation>
 <translation id="7711920809702896782">Informations sur les fichiers image</translation>
+<translation id="7712740978240882272">Déverrouillez votre Chromebook avec votre téléphone. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Extension inconnue avec l'ID <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Les cookies du domaine <ph name="DOMAIN" /> ont été autorisés</translation>
 <translation id="7714464543167945231">Certificat</translation>
@@ -4574,6 +4602,7 @@
 <translation id="7984068253310542383">Dupliquer l'écran <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Consulter et modifier les paramètres relatifs aux mots de passe enregistrés</translation>
 <translation id="7987764905897278458">Profitez d'encore plus de fonctionnalités intelligentes de Google</translation>
+<translation id="798835209536175951">Envoyez et recevez des SMS depuis votre Chromebook. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Activer les fonctionnalités d'accessibilité</translation>
 <translation id="7994702968232966508">Méthode EAP</translation>
 <translation id="799547531016638432">Supprimer le raccourci</translation>
@@ -4706,6 +4735,7 @@
 <translation id="8185331656081929126">Afficher des notifications lorsque de nouvelles imprimantes sont détectées sur le réseau</translation>
 <translation id="8186609076106987817">Impossible de trouver le fichier sur le serveur.</translation>
 <translation id="8188120771410500975">&amp;Vérifier l'orthographe des zones de texte</translation>
+<translation id="8188389033983459049">Activez le Bluetooth dans les paramètres de votre appareil pour continuer</translation>
 <translation id="8190193592390505034">Connexion à <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Gérer vos applications, vos extensions et vos thèmes</translation>
 <translation id="8191453843330043793">Résolution de proxy V8</translation>
@@ -4800,6 +4830,7 @@
 <translation id="8353683614194668312">Cette extension Chrome peut :</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> – <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Restaurer les pages ?</translation>
+<translation id="8362993567435070757">Localisez le code à six chiffres au dos de votre clé</translation>
 <translation id="8363095875018065315">stable</translation>
 <translation id="8363142353806532503">Micro bloqué</translation>
 <translation id="8366396658833131068">Votre connexion réseau est rétablie. Veuillez sélectionner un autre réseau ou appuyer sur "Continuer" ci-dessous pour lancer votre application kiosque.</translation>
@@ -4808,6 +4839,7 @@
 <translation id="8371695176452482769">Parlez maintenant.</translation>
 <translation id="8372369524088641025">Clé WEP incorrecte</translation>
 <translation id="8373553483208508744">Couper le son des onglets</translation>
+<translation id="8379878387931047019">Cet appareil n'est pas compatible avec la clé de sécurité demandée par le site Web</translation>
 <translation id="8382913212082956454">Copi&amp;er l'adresse e-mail</translation>
 <translation id="8386903983509584791">Recherche terminée</translation>
 <translation id="8389492867173948260">Autorisez cette extension à lire et à modifier toutes vos données sur les sites Web que vous consultez :</translation>
@@ -4926,6 +4958,7 @@
 <translation id="8557930019681227453">Manifeste</translation>
 <translation id="8559694214572302298">Décodage d'images</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Poursuivre la lecture</translation>
 <translation id="8565650234829130278">Tentative de passage à une version antérieure de l'application.</translation>
 <translation id="8569002732135253578">Impression de "<ph name="DOCUMENT_NAME" />"…</translation>
 <translation id="8569682776816196752">Aucun emplacement de destination trouvé.</translation>
@@ -4966,7 +4999,6 @@
 <translation id="8639047128869322042">Recherche de logiciels malveillants…</translation>
 <translation id="8639963783467694461">Paramètres de saisie automatique</translation>
 <translation id="8642171459927087831">Jeton d'accès</translation>
-<translation id="8642267168767642381">Doigt déplacé trop lentement</translation>
 <translation id="8642947597466641025">Augmente la taille du texte</translation>
 <translation id="8643418457919840804">Pour continuer, sélectionnez une option :</translation>
 <translation id="8645354835496065562">Continuer d'autoriser l'accès aux capteurs</translation>
@@ -4981,6 +5013,7 @@
 <translation id="8655295600908251630">Version</translation>
 <translation id="8655319619291175901">Petit problème... Une erreur s'est produite.</translation>
 <translation id="8655972064210167941">Échec de la connexion, car il est impossible de valider votre mot de passe. Veuillez contacter votre administrateur ou réessayer.</translation>
+<translation id="8656619792520327915">Ajouter une clé de sécurité Bluetooth</translation>
 <translation id="8656768832129462377">Ne pas vérifier</translation>
 <translation id="8658595122208653918">Modifier les options de l'imprimante…</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> partage votre écran et un contenu audio avec <ph name="TAB_NAME" />.</translation>
@@ -5103,6 +5136,7 @@
 <translation id="8814687660896548945">Veuillez patienter. Analyse de l'archive…</translation>
 <translation id="881799181680267069">Masquer les autres</translation>
 <translation id="8818152010000655963">Fond d'écran</translation>
+<translation id="8818958672113348984">Valider via le téléphone</translation>
 <translation id="8820817407110198400">Favoris</translation>
 <translation id="8821045908425223359">Configurer l'adresse IP automatiquement</translation>
 <translation id="882204272221080310">Mettre à jour le micrologiciel pour plus de sécurité.</translation>
@@ -5133,11 +5167,13 @@
 <translation id="8872155268274985541">Fichier manifeste de mise à jour externe de kiosque non valide. Échec de la mise à jour de l'application kiosque. Veuillez débrancher la clé USB.</translation>
 <translation id="8874184842967597500">Non connecté</translation>
 <translation id="8876215549894133151">Format :</translation>
+<translation id="8876307312329369159">Impossible de modifier ce paramètre dans une session de démonstration.</translation>
 <translation id="8876309039915144086">Génération d'un mot de passe…</translation>
 <translation id="8877448029301136595">[répertoire parent]</translation>
 <translation id="8879284080359814990">Afficher dan&amp;s un onglet</translation>
 <translation id="8883847527783433352">Synchroniser avec un autre compte</translation>
 <translation id="8885197664446363138">Smart Lock indisponible</translation>
+<translation id="88870264962436283">Utiliser Touch ID avec <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Couleur :</translation>
 <translation id="8890516388109605451">Sources</translation>
 <translation id="8892168913673237979">Vous êtes prêt</translation>
@@ -5158,6 +5194,7 @@
 <translation id="8915370057835397490">Chargement des suggestions en cours…</translation>
 <translation id="8916476537757519021">Sous-cadre de navigation privée : <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Pour enregistrer tous vos mots de passe sur tous vos appareils, connectez-vous et activez la synchronisation.</translation>
+<translation id="8921366488406707015">Validation de votre clé de sécurité…</translation>
 <translation id="8922013791253848639">Toujours autoriser les annonces sur ce site</translation>
 <translation id="8925458182817574960">&amp;Paramètres</translation>
 <translation id="8926389886865778422">Ne plus afficher ce message</translation>
@@ -5266,6 +5303,7 @@
 <translation id="9066782832737749352">Synthèse vocale</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> vous connecte automatiquement aux sites et aux applications éligibles avec les mots de passe que vous avez enregistrés.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Associez votre clé à cet appareil afin de pouvoir l'utiliser pour vous connecter à votre compte</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Souris USB connectée.</translation>
 <translation id="9076523132036239772">Adresse e-mail ou mot de passe incorrect. Essayez tout d'abord de vous connecter à un réseau.</translation>
@@ -5327,7 +5365,6 @@
 <translation id="916607977885256133">Picture-in-picture</translation>
 <translation id="9169496697824289689">Afficher les raccourcis clavier</translation>
 <translation id="9169931577761441333">Ajouter <ph name="APP_NAME" /> à l'écran d'accueil</translation>
-<translation id="9170397650136757332">À présent, déplacez légèrement votre doigt pour enregistrer toutes les parties de votre empreinte digitale</translation>
 <translation id="9170848237812810038">Ann&amp;uler</translation>
 <translation id="9170884462774788842">Un autre programme sur votre ordinateur a ajouté un thème qui risque de modifier le fonctionnement de Google Chrome.</translation>
 <translation id="9173995187295789444">Recherche d'appareils Bluetooth…</translation>
@@ -5391,6 +5428,7 @@
 <translation id="971774202801778802">URL du favori</translation>
 <translation id="973473557718930265">Quitter</translation>
 <translation id="974555521953189084">Saisissez votre phrase secrète pour lancer la synchronisation.</translation>
+<translation id="977640333593638907">Pour utiliser la plupart des clés, il vous suffit d'appuyer sur le bouton</translation>
 <translation id="981121421437150478">Hors connexion</translation>
 <translation id="983511809958454316">Cette fonctionnalité n'est pas compatible avec la RV</translation>
 <translation id="984275831282074731">Modes de paiement</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index c616667f..f02206df 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">સિંક અને બધી સેવાઓનો ઉપયોગ કરો</translation>
 <translation id="1272079795634619415">રોકો</translation>
-<translation id="1272242203003205253">તમને સહાય કરવા માટે, Google પાર્ટનર તમારા આસિસ્ટંટ સાથે કાર્ય કરે છે</translation>
 <translation id="1272978324304772054">આ વપરાશકર્તા એકાઉન્ટ ઉપકરણની નોંધણી થયેલા ડોમેનમાંનું નથી. જો તમે કોઈ અલગ ડોમેન પર નોંધણી કરવા માગતા હો તો તમારે પ્રથમ ઉપકરણ પુનઃપ્રાપ્તિથી જવાની જરૂર પડશે.</translation>
 <translation id="1274977772557788323">Adobe Flash Player સ્ટોરેજ સેટિંગ્સ</translation>
 <translation id="1274997165432133392">કુકીઝ અને અન્ય સાઇટ ડેટા</translation>
@@ -411,7 +410,6 @@
 <translation id="161460670679785907">તમારો ફોન શોધવામાં અસમર્થ</translation>
 <translation id="1616206807336925449">આ એક્સટેન્શનને કોઈ વિશિષ્ટ પરવાનગીઓની જરૂર નથી.</translation>
 <translation id="1616298854599875024">એક્સટેંશન "<ph name="IMPORT_NAME" />" આયાત કરવામાં અસમર્થ કારણ કે તે કોઈ શેર કરેલ મૉડ્યૂલ નથી</translation>
-<translation id="161707228174452095">ફિંગરપ્રિન્ટ ઉમેરી!</translation>
 <translation id="1618268899808219593">સ&amp;હાય કેન્દ્ર</translation>
 <translation id="162035744160882748">સિંક, વૈયક્તિકરણ અને અન્ય Google સેવાઓ ચાલુ કરો</translation>
 <translation id="1620510694547887537">કૅમેરો</translation>
@@ -689,7 +687,6 @@
 <translation id="2028997212275086731">RAR આર્કાઇવ</translation>
 <translation id="2034346955588403444">અન્ય WiFi નેટવર્ક ઉમેરો</translation>
 <translation id="203574396658008164">લૉક સ્ક્રીનમાંથી નોંધ લેવાનું સક્ષમ કરો</translation>
-<translation id="2039623879703305659">ફિંગરપ્રિન્ટ બહુ જ ઝડપથી ખસેડી</translation>
 <translation id="2040460856718599782">અરેરે! તમને પ્રમાણિત કરવાનો પ્રયાસ કરતી વખતે કંઈક ખોટું થયું. કૃપા કરીને તમારા સાઇન-ઇન ઓળખપત્રોને બીજીવાર તપાસો અને ફરી પ્રયાસ કરો.</translation>
 <translation id="2043818754674261542">આ <ph name="DEVICE_TYPE" />ને અનલૉક કરવા માટે ફોન માટેનું જરૂરી અંતર</translation>
 <translation id="204497730941176055">Microsoft પ્રમાણપત્ર નમૂના નામ</translation>
@@ -733,7 +730,6 @@
 <translation id="2099686503067610784">સર્વર પ્રમાણપત્ર "<ph name="CERTIFICATE_NAME" />" ને કાઢી નાખીએ?</translation>
 <translation id="2100273922101894616">સ્વતઃ સાઇન-ઇન</translation>
 <translation id="2101225219012730419">સંસ્કરણ:</translation>
-<translation id="2107494551712864447">કોઈ ફિંગરપ્રિન્ટ ઉમેરો</translation>
 <translation id="2112877397266219826">મને સેટ કરવા માટે તમારા ટચ નિયંત્રકોને ચાલુ કરો</translation>
 <translation id="21133533946938348">ટૅબ પિન કરો</translation>
 <translation id="2113479184312716848">Open &amp;File...</translation>
@@ -1009,7 +1005,6 @@
 <translation id="2526590354069164005">ડેસ્કટૉપ</translation>
 <translation id="2526619973349913024">અપડેટ માટે તપાસો</translation>
 <translation id="2527167509808613699">કોઈપણ પ્રકારનું કનેક્શન</translation>
-<translation id="2532026602297547439">સેન્સર ગંદું છે</translation>
 <translation id="2532589005999780174">ઉચ્ચ કોન્ટ્રાસ્ટ મોડ</translation>
 <translation id="253434972992662860">&amp;થોભો</translation>
 <translation id="2534460670861217804">સુરક્ષિત HTTP પ્રોક્સી</translation>
@@ -1367,7 +1362,6 @@
 <translation id="3057861065630527966">તમારા ફોટો અને વિડિઓઝનો બેકઅપ લો</translation>
 <translation id="3060379269883947824">સાંભળવા માટે પસંદ કરોને ચાલુ કરો</translation>
 <translation id="3061707000357573562">પૅચ સેવા</translation>
-<translation id="3064410671692449875">અપૂરતો ડેટા</translation>
 <translation id="3065041951436100775">ટેબ ફરજિયાત બંધ કરવાનો પ્રતિસાદ.</translation>
 <translation id="3067198179881736288">ઍપ ઇન્સ્ટૉલ કરીએ?</translation>
 <translation id="3067198360141518313">આ પ્લગિન ચલાવો</translation>
@@ -2307,7 +2301,6 @@
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" થી કનેક્ટ કરતી વખતે પ્રમાણીકરણ રદ કરવામાં આવ્યું.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ફાઇલ</translation>
 <translation id="457386861538956877">વધુ...</translation>
-<translation id="4576537685267142337">આંગળીને ઉંચકો, પછી ફરીથી સેન્સરને ટચ કરો</translation>
 <translation id="4576541033847873020">Bluetooth ઉપકરણની જોડી કરો</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> કાસ્ટ કરવામાં અસમર્થ.</translation>
 <translation id="4580526846085481512">શું તમે ખરેખર $1 આઇટમ્સને કાઢવા માંગો છો?</translation>
@@ -2550,7 +2543,6 @@
 <translation id="4941627891654116707">ફૉન્ટનું કદ</translation>
 <translation id="494286511941020793">Proxy ગોઠવણી સહાય</translation>
 <translation id="4945444280533270988">Smart Lock સુવિધા ચાલુ છે</translation>
-<translation id="494660967831069720">આંશિક ડેટા</translation>
 <translation id="4953689047182316270">ઍક્સેસિબિલિટી ઇવેન્ટનો જવાબ આપો</translation>
 <translation id="4953808748584563296">ડિફોલ્ટ નારંગી અવતાર</translation>
 <translation id="4955814292505481804">વાર્ષિક</translation>
@@ -3507,7 +3499,6 @@
 <translation id="6384275966486438344">આ પર તમારી શોધ સેટિંગ્સ બદલો: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">સાઇટ્સ કુકી ડેટા સાચવી અને વાંચી શકે છે</translation>
 <translation id="6388429472088318283">ભાષાઓ શોધો</translation>
-<translation id="6388771388956873507">તમારા ઉપકરણ પર ફિંગરપ્રિન્ટ સેન્સર શોધો અને તેને તમારી આંગળી વડે ટચ કરો</translation>
 <translation id="6390799748543157332">આ વિંડોમાં તમે જે પૃષ્ઠો જોઈ રહ્યાં છો તે બ્રાઉઝર ઇતિહાસમાં દેખાશે નહીં અને તે તમે બધી ખુલેલી અતિથિ વિંડોઝ બંધ કરી દો તે પછી તમારા કમ્પ્યુટર પર કૂકીઝ જેવા કોઈ અન્ય નિશાન છોડશે નહીં. જો કે, તમે ડાઉનલોડ કરેલી કોઈપણ ફાઇલો જાળવવામાં આવશે.</translation>
 <translation id="6390994422085833176">સેટઅપ પછી સિંક અને વૈયક્તિકરણ સુવિધાઓનું રિવ્યૂ કરો</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />સિસ્ટમ માહિતી<ph name="END_LINK1" /> અને <ph name="BEGIN_LINK2" />મેટ્રિક્સ<ph name="END_LINK2" /> મોકલો</translation>
@@ -4106,7 +4097,6 @@
 <translation id="7309257895202129721">&amp;નિયંત્રણો બતાવો</translation>
 <translation id="7310598146671372464">લૉગ ઇન કરવામાં નિષ્ફળ થયા. સર્વર આપેલ Kerberos ઍન્ક્રિપ્શન પ્રકારોનું સમર્થન કરતું નથી. કૃપા કરીને તમારા વ્યવસ્થાપકનો સપર્ક કરો.</translation>
 <translation id="7311079019872751559">અનસેન્ડબૉક્સ કરેલ પ્લગિનની ઍક્સેસ</translation>
-<translation id="7311891583377621132">ફિંગરપ્રિન્ટનો ભિન્ન ભાગ કૅપ્ચર કરવા માટે સહેજ ખસેડો</translation>
 <translation id="7317680720589234980">સ્ક્રીન લૉક અને સાઇન ઇન વિકલ્પો</translation>
 <translation id="7321545336522791733">સર્વર પહોંચની બહાર છે</translation>
 <translation id="7324297612904500502">બીટા ચર્ચા મંચ</translation>
@@ -4938,7 +4928,6 @@
 <translation id="8639047128869322042">નુકસાનકારક સૉફ્ટવેરની તપાસ કરી રહ્યાં છીએ…</translation>
 <translation id="8639963783467694461">સ્વતઃભરો સેટિંગ્સ</translation>
 <translation id="8642171459927087831">ઍક્સેસ ટોકન</translation>
-<translation id="8642267168767642381">આંગળી બહુ જ ધીમેથી ખસેડી</translation>
 <translation id="8642947597466641025">ટેક્સ્ટ મોટો કરો</translation>
 <translation id="8643418457919840804">આગળ વધવા માટે, એક વિકલ્પ પસંદ કરો:</translation>
 <translation id="8645354835496065562">સેન્સરના ઍક્સેસની મંજૂરી ચાલુ રાખો</translation>
@@ -5298,7 +5287,6 @@
 <translation id="916607977885256133">ચિત્ર-માં-ચિત્ર</translation>
 <translation id="9169496697824289689">કીબોર્ડ શૉર્ટકટ્સ જુઓ</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" />ને હોમ સ્ક્રીનમાં ઉમેરો</translation>
-<translation id="9170397650136757332">હવે તમારી ફિંગરપ્રિન્ટના નામ ભિન્ન ભાગોને કૅપ્ચર કરવા માટે તમારી આંગળીને સહેજ ખસેડો</translation>
 <translation id="9170848237812810038">&amp;પૂર્વવત્ કરો</translation>
 <translation id="9170884462774788842">તમારા કમ્પ્યુટર પરના બીજા પ્રોગ્રામે એક થીમ ઉમેરી જે Chrome કાર્ય કરે છે તે રીતને બદલી શકે છે.</translation>
 <translation id="9173995187295789444">બ્લૂટૂથ ઉપકરણો માટે સ્કૅન કરી રહ્યાં છીએ...</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 0dcf7e2..4f9be1a2 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">सिंक और सभी सेवाएं इस्तेमाल करें</translation>
 <translation id="1272079795634619415">रोकें</translation>
-<translation id="1272242203003205253">आपकी मदद करने के लिए, Google Partners आपकी Assistant के साथ काम करता है</translation>
 <translation id="1272978324304772054">यह उपयोगकर्ता खाता उस डोमेन से संबंधित नहीं है जिसमें डिवाइस का नाम दर्ज है.  अगर आप किसी दूसरे डोमेन में नाम दर्ज करना चाहते हैं तो, आपको पहले डिवाइस बहाल करना होगा.</translation>
 <translation id="1274977772557788323">Adobe Flash Player जगह सेटिंग</translation>
 <translation id="1274997165432133392">कुकी और साइट का अन्य डेटा</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">आपका फ़ोन नहीं मिल पा रहा है</translation>
 <translation id="1616206807336925449">इस एक्‍सटेंशन को किसी विशेष अनुमति की आवश्‍यकता नहीं है.</translation>
 <translation id="1616298854599875024">"<ph name="IMPORT_NAME" />" एक्‍सटेंशन को आयात नहीं किया जा सका, क्‍योंकि वह एक शेयर किया गया मॉड्यूल नहीं है</translation>
-<translation id="161707228174452095">फ़िंगरप्रिंट जोड़ा गया!</translation>
 <translation id="1618268899808219593">&amp;सहायता केंद्र</translation>
 <translation id="162035744160882748">'सिंक करें', 'मनमुताबिक बनाएं' और दूसरी 'Google सेवाएं' चालू करें</translation>
 <translation id="1620510694547887537">कैमरा</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">RAR संग्रह</translation>
 <translation id="2034346955588403444">अन्य वाई-फ़ाई नेटवर्क जोड़ें</translation>
 <translation id="203574396658008164">लॉक स्क्रीन से नोट लेना सक्षम करें</translation>
-<translation id="2039623879703305659">उंगली बहुत जल्दी चलाई गई</translation>
 <translation id="2040460856718599782">ओह!  आपको प्रमाणित करने का प्रयास करते समय कुछ गलत हो गया.   कृपया अपने प्रवेश प्रमाणिकता दोबारा जाँचें और पुन: प्रयास करें.</translation>
 <translation id="2043818754674261542">इस <ph name="DEVICE_TYPE" /> को अनलॉक करने के लिए फ़ोन का दूर होना ज़रूरी है</translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">सर्वर प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" हटाएं?</translation>
 <translation id="2100273922101894616">स्वतः प्रवेश करें</translation>
 <translation id="2101225219012730419">वर्शन:</translation>
-<translation id="2107494551712864447">फ़िंगरप्रिंट जोड़ें</translation>
 <translation id="2112877397266219826">मुझे सेट करने के लिए अपना स्पर्श नियंत्रक चालू करें</translation>
 <translation id="21133533946938348">टैब छोटा करें</translation>
 <translation id="2113479184312716848">&amp;फ़ाइल खोलें...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">डेस्कटॉप</translation>
 <translation id="2526619973349913024">अपडेट देखें</translation>
 <translation id="2527167509808613699">किसी प्रकार का कनेक्शन</translation>
-<translation id="2532026602297547439">सेंसर साफ़ नहीं है</translation>
 <translation id="2532589005999780174">उच्च कंट्रास्ट मोड</translation>
 <translation id="253434972992662860">&amp;रोकें</translation>
 <translation id="2534460670861217804">सुरक्षित HTTP प्रॉक्‍सी</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">अपनी फ़ोटो और वीडियो का बैक अप लें</translation>
 <translation id="3060379269883947824">चुनें और सुनें सुविधा चालू करें</translation>
 <translation id="3061707000357573562">पैच सेवा</translation>
-<translation id="3064410671692449875">अपर्याप्त डेटा</translation>
 <translation id="3065041951436100775">टैब किल्ड फ़ीडबैक.</translation>
 <translation id="3067198179881736288">ऐप्लिकेशन इंस्टॉल करें?</translation>
 <translation id="3067198360141518313">यह प्लग इन चलाएं</translation>
@@ -2264,7 +2258,6 @@
 <translation id="4480590691557335796">Chrome आपके कंप्यूटर पर नुकसान पहुंचाने वाला सॉफ़्टवेयर ढूंढ सकता है और उसे हटा सकता है</translation>
 <translation id="4481530544597605423">अयुग्मित किए गए डिवाइस</translation>
 <translation id="4482194545587547824">खोज और अन्य Google सेवाओं को वैयक्तिकृत करने के लिए Google आपके ब्राउज़िंग इतिहास का उपयोग कर सकता है</translation>
-<translation id="4493287891836751813">अपनी Google Assistant से मिलें</translation>
 <translation id="4495419450179050807">इस पेज पर न दिखाएं</translation>
 <translation id="4499718683476608392">फ़ॉर्म को एक ही क्लिक में भरने के लिए, क्रेडिट कार्ड की जानकारी ऑटोमैटिक भरने की सुविधा चालू करें</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> बंद हो गया है</translation>
@@ -2319,7 +2312,6 @@
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" से कनेक्ट होते समय प्रमाणीकरण रद्द हो गया.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> फ़ाइल</translation>
 <translation id="457386861538956877">अधिक...</translation>
-<translation id="4576537685267142337">उंगली उठाएं, फिर सेंसर को दोबारा स्पर्श करें</translation>
 <translation id="4576541033847873020">ब्लूटूथ डिवाइस युग्मित करें</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> को कास्ट करने में असमर्थ.</translation>
 <translation id="4580526846085481512">क्या आप वाकई $1 आइटम हटाना चाहते हैं?</translation>
@@ -2564,7 +2556,6 @@
 <translation id="4941627891654116707">फ़ॉन्ट का आकार</translation>
 <translation id="494286511941020793">प्रॉक्सी कॉन्फ़िगरेशन सहायता</translation>
 <translation id="4945444280533270988">Smart Lock चालू है</translation>
-<translation id="494660967831069720">आंशिक डेटा</translation>
 <translation id="4953689047182316270">सुलभता इवेंट का जवाब दें</translation>
 <translation id="4953808748584563296">डिफ़ॉल्ट नारंगी अवतार</translation>
 <translation id="4955814292505481804">वार्षिक</translation>
@@ -3521,7 +3512,6 @@
 <translation id="6384275966486438344">अपनी खोज सेटिंग इसमें बदलें: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">साइटें कुकी डेटा को सहेज और पढ़ सकती हैं</translation>
 <translation id="6388429472088318283">खोज की भाषाएं</translation>
-<translation id="6388771388956873507">अपने डिवाइस पर फ़िंगरप्रिंट सेंसर ढूंढें और उस पर अपनी उंगली से स्पर्श करें</translation>
 <translation id="6390799748543157332">इस विंडो में आपके द्वारा देखे जाने वाले पेज ब्राउज़र इतिहास में दिखाई नहीं देंगे और वे आपके द्वारा खोली गईं सभी अतिथि विंडो बंद करने के बाद कंप्यूटर पर कुकी जैसे अन्य चिह्न नहीं छोड़ेंगे. हालांकि, आपके द्वारा डाउनलोड की जाने वाली सभी फ़ाइलें संरक्षित कर ली जाएंगी.</translation>
 <translation id="6390994422085833176">सेटअप हो जाने के बाद सिंक करने और मनमुताबिक बनाने की सुविधाएं देखें</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />सिस्टम की जानकारी<ph name="END_LINK1" /> और <ph name="BEGIN_LINK2" />मेट्रिक्स<ph name="END_LINK2" /> भेजें</translation>
@@ -4124,7 +4114,6 @@
 <translation id="7309257895202129721">&amp;नियंत्रण दिखाएं</translation>
 <translation id="7310598146671372464">लॉगिन नहीं कर पाए. सर्वर पर बताए गए केर्बेरोस सुरक्षा प्रकार काम नहीं करते हैं. कृपया अपने एडमिन से संपर्क करें.</translation>
 <translation id="7311079019872751559">सैंडबॉक्‍स नहीं किए गए प्‍लग इन की ऐक्‍सेस</translation>
-<translation id="7311891583377621132">फ़िंगरप्रिंट का दूसरा हिस्सा कैप्चर करने के लिए धीरे से हिलाएं</translation>
 <translation id="7317680720589234980">स्क्रीन लॉक और साइन-इन के विकल्प</translation>
 <translation id="7321545336522791733">सर्वर पहुंच योग्य नहीं है</translation>
 <translation id="7324297612904500502">बीटा फ़ोरम</translation>
@@ -4964,7 +4953,6 @@
 <translation id="8639047128869322042">नुकसान पहुंचाने वाला सॉफ़्टवेयर ढूंढा जा रहा है...</translation>
 <translation id="8639963783467694461">ऑटोमैटिक भरना की सेटिंग...</translation>
 <translation id="8642171459927087831">पहुंच टोकन</translation>
-<translation id="8642267168767642381">उंगली बहुत धीरे चलाई गई.</translation>
 <translation id="8642947597466641025">लेख को बड़ा करें</translation>
 <translation id="8643418457919840804">जारी रखने के लिए, कोई विकल्प चुनें:</translation>
 <translation id="8645354835496065562">सेंसर का एक्सेस जारी रहने दें</translation>
@@ -5325,7 +5313,6 @@
 <translation id="916607977885256133">पिक्चर में पिक्चर</translation>
 <translation id="9169496697824289689">कीबोर्ड शॉर्टकट देखें</translation>
 <translation id="9169931577761441333">होम स्क्रीन पर <ph name="APP_NAME" /> जोड़ें</translation>
-<translation id="9170397650136757332">अब अपने फ़िंगरप्रिंट के सभी अलग-अलग हिस्सों को कैप्चर करने के लिए अपनी उंगली को धीरे से हिलाएं</translation>
 <translation id="9170848237812810038">&amp;पूर्ववत् करें</translation>
 <translation id="9170884462774788842">आपके कंप्यूटर पर किसी अन्य प्रोग्राम ने एक्सटेंशन जोड़ा है, जो Chrome के काम करने के तरीके को बदल सकता है.</translation>
 <translation id="9173995187295789444">ब्लूटूथ डिवाइस के लिए स्कैन किया जा रहा है...</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 45cc9820..3c48393 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Stavka police 5</translation>
 <translation id="1227507814927581609">Autentifikacija nije uspjela prilikom povezivanja s uređajem "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">Izbornik sustava</translation>
+<translation id="123186018454553812">Pokušajte s nekim drugim ključem</translation>
 <translation id="1232569758102978740">Neimenovano</translation>
 <translation id="1233721473400465416">Oznaka zemlje/jezika</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Upotreba sinkronizacije i svih usluga</translation>
 <translation id="1272079795634619415">Zaustavi</translation>
-<translation id="1272242203003205253">Googleovi partneri surađuju s Asistentom da bi vam pomogli</translation>
 <translation id="1272978324304772054">Ovaj korisnički račun ne pripada domeni na koju je uređaj prijavljen. Ako se želite prijaviti na neku drugu domenu, prvo morate proći oporavak uređaja.</translation>
 <translation id="1274977772557788323">Postavke pohrane Adobe Flash Playera</translation>
 <translation id="1274997165432133392">Kolačići i ostali podaci o web-lokacijama</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Verzija <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Pretraživanje zaporki</translation>
 <translation id="1487335504823219454">Uključeno – prilagođene postavke</translation>
+<translation id="1489664337021920575">Odaberite neku drugu opciju</translation>
 <translation id="1493892686965953381">Čeka se <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033">Broj ostalih dostupnih uređaja: <ph name="NUM_PRINTERS" />.</translation>
 <translation id="1497522201463361063">Nije moguće promijeniti naziv datoteke "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Prozor aplikacije</translation>
 <translation id="15373452373711364">Veliki pokazivač miša</translation>
 <translation id="1538729222189715449">Otvaranje Linux datoteka...</translation>
+<translation id="153933193410874873">Nismo uspjeli potvrditi vaš identitet na ovom uređaju</translation>
 <translation id="1540605929960647700">Omogućite demo-način</translation>
 <translation id="1543284117603151572">Uvezeno iz Edgea</translation>
 <translation id="1545177026077493356">Automatski način kioska</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Ta se slika ne može koristiti. Odaberite neku drugu sliku.</translation>
 <translation id="1566049601598938765">Web-lokacija</translation>
 <translation id="1567387640189251553">Nakon vašeg posljednjeg unosa zaporke povezana je neka druga tipkovnica. Možda pokušava ukrasti podatke o pritisnutim tipkama.</translation>
+<translation id="1567750922576943685">Potvrđivanjem identiteta bolje štitite svoje osobne podatke</translation>
 <translation id="1567993339577891801">Konzola JavaScripta</translation>
 <translation id="1568067597247500137">Zanemari web-lokaciju</translation>
 <translation id="1568323446248056064">Otvorite postavke zaslona na uređaju</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Nije moguće otkriti vaš telefon</translation>
 <translation id="1616206807336925449">To proširenje ne zahtijeva nikakva posebna dopuštenja.</translation>
 <translation id="1616298854599875024">Nije moguće uvesti proširenje "<ph name="IMPORT_NAME" />" jer nije dijeljeni modul</translation>
-<translation id="161707228174452095">Otisak prsta je dodan!</translation>
 <translation id="1618268899808219593">Centar za pomoć</translation>
 <translation id="162035744160882748">Uključite sinkronizaciju, prilagodbu i druge Googleove usluge</translation>
 <translation id="1620510694547887537">Fotoaparat</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">RAR arhiva</translation>
 <translation id="2034346955588403444">Dodavanje druge Wi-Fi mreže</translation>
 <translation id="203574396658008164">Omogući izradu bilježaka na zaključanom zaslonu</translation>
-<translation id="2039623879703305659">Prebrzo ste pomaknuli prst</translation>
 <translation id="2040460856718599782">Ups! Nešto nije u redu s vašom autentifikacijom. Još jedanput provjerite svoje vjerodajnice za prijavu i pokušajte ponovo.</translation>
 <translation id="2043818754674261542">Udaljenost koja je potrebna da telefon otključa ovaj <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Naziv predloška Microsoftovog certifikata</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Izbrisati certifikat poslužitelja "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Automatska prijava</translation>
 <translation id="2101225219012730419">Verzija:</translation>
-<translation id="2107494551712864447">Dodajte otisak prsta</translation>
 <translation id="2112877397266219826">Uključite svoj dodirni upravljač kako biste me postavili</translation>
 <translation id="21133533946938348">Pričvrsti karticu</translation>
 <translation id="2113479184312716848">Open &amp;File... (Otvori datoteku...)</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Radna površina</translation>
 <translation id="2526619973349913024">Provjeri ažuriranja</translation>
 <translation id="2527167509808613699">Bilo koja vrsta veze</translation>
-<translation id="2532026602297547439">Senzor je prljav</translation>
 <translation id="2532589005999780174">Način visokog kontrasta</translation>
 <translation id="253434972992662860">&amp;Pauziraj</translation>
 <translation id="2534460670861217804">Sigurni HTTP proxy</translation>
@@ -1197,6 +1196,7 @@
 <translation id="2783298271312924866">Preuzeto</translation>
 <translation id="2783321960289401138">Izradi prečac...</translation>
 <translation id="2783829359200813069">Odabir vrsta enkripcije</translation>
+<translation id="2783952358106015700">Upotreba sigurnosnog ključa s aplikacijom <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Aktiviranje vaše mobilne podatkovne usluge</translation>
 <translation id="2785873697295365461">Deskriptori datoteke</translation>
 <translation id="2787047795752739979">Prebriši izvornik</translation>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">Izrada sigurnosnih kopija fotografija i videozapisa</translation>
 <translation id="3060379269883947824">Omogući Odabir za govor</translation>
 <translation id="3061707000357573562">Usluga zakrpe</translation>
-<translation id="3064410671692449875">Nema dovoljno podataka</translation>
 <translation id="3065041951436100775">Povratne informacije o zatvorenoj kartici.</translation>
 <translation id="3067198179881736288">Želite li instalirati aplikaciju?</translation>
 <translation id="3067198360141518313">Pokrenite ovaj dodatak</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">Nova &amp;kartica</translation>
 <translation id="3288047731229977326">Proširenja pokrenuta u načinu rada razvojnog programera mogu naštetiti vašem računalu. Ako niste razvojni programer, trebali biste onemogućiti proširenja koja su pokrenuta u načinu rada razvojnog programera radi svoje zaštite.</translation>
 <translation id="3289856944988573801">Da biste provjerili ima li ažuriranja, upotrijebite Ethernet ili Wi-Fi.</translation>
+<translation id="3292421191230118801">Nastavite pregledavati web-lokacije s mobilnog uređaja na Chromebooku</translation>
 <translation id="32939749466444286">Linuxov spremnik nije se pokrenuo. Pokušajte ponovo.</translation>
 <translation id="3294437725009624529">Gost</translation>
 <translation id="329838636886466101">Popravak</translation>
@@ -1552,6 +1552,7 @@
 <translation id="3348038390189153836">Otkriven je uklonjivi uređaj</translation>
 <translation id="3348459612390503954">Čestitamo</translation>
 <translation id="3349933790966648062">Upotreba memorije</translation>
+<translation id="3350117557200012647">Pokreni način uparivanja</translation>
 <translation id="3353984535370177728">Odaberite mapu za prijenos</translation>
 <translation id="3355936511340229503">Pogreška veze</translation>
 <translation id="3356797067524893661">Spremni ste za nastavak na Hangouts Meet</translation>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">Vaša je tražilica promijenjena u <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Aplikacija kioska nije preuzeta.</translation>
 <translation id="3564334271939054422">Wi-Fi mreža koju upotrebljavate (<ph name="NETWORK_ID" />) može tražiti da otvorite njezinu stranicu za prijavu.</translation>
+<translation id="3564848315152754834">USB sigurnosni ključ</translation>
 <translation id="3566721612727112615">Nema dodanih web-lokacija</translation>
 <translation id="3569382839528428029">Želite li da <ph name="APP_NAME" /> dijeli vaš zaslon?</translation>
 <translation id="3570985609317741174">Web-sadržaj</translation>
@@ -1741,6 +1743,7 @@
 <translation id="3627588569887975815">Otvori vezu u anonimnom prozoru</translation>
 <translation id="3627671146180677314">Vrijeme za obnavljanje Netscape certifikata</translation>
 <translation id="3627879631695760395">Instaliranje aplikacije <ph name="APP" />...</translation>
+<translation id="3630132874740063857">Vaš telefon</translation>
 <translation id="3630995161997703415">Dodajte tu web-lokaciju na svoju policu da biste je koristili kad želite</translation>
 <translation id="3635030235490426869">Kartica 1</translation>
 <translation id="3636096452488277381">Pozdrav, <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">Ikona proširenja</translation>
 <translation id="3665589677786828986">Chrome je otkrio da je neki drugi program promijenio vaše postavke, pa ih je vratio na izvorne zadane vrijednosti.</translation>
 <translation id="3668570675727296296">Postavke jezika</translation>
+<translation id="3668801437375206837">Kako bi lakše dijagnosticirali poteškoće s Bluetoothom, Googleovi zaposlenici mogu uključiti dodatne Bluetooth zapisnike u svoja izvješća s povratnim informacijama. Kada se stavi kvačica u okvir te opcije, u vaše će izvješće biti uključeni btsnoop i HCI zapisnici iz vaše trenutačne sesije, a iz njih će u najvećoj mogućoj mjeri biti uklonjeni podaci koji otkrivaju identitet. Pristup tim zapisnicima bit će ograničen na upravitelje grupe proizvoda OS-a Chrome u Listnru. Zapisnici će se nepovratno ukloniti nakon 90 dana.</translation>
 <translation id="3668823961463113931">Rukovatelji</translation>
 <translation id="3670229581627177274">Uključite Bluetooth</translation>
 <translation id="3672681487849735243">Otkrivena je tvornička pogreška</translation>
@@ -1780,6 +1784,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> želi podijeliti vaš zaslon</translation>
 <translation id="3693415264595406141">Zaporka:</translation>
 <translation id="3694027410380121301">Odaberi prethodnu karticu</translation>
+<translation id="369489984217678710">Zaporke i drugi podaci za prijavu</translation>
 <translation id="3699624789011381381">E-adresa</translation>
 <translation id="3699920817649120894">Želite li isključiti sinkronizaciju i prilagođavanje?</translation>
 <translation id="3700888195348409686">Prikazivanje (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1803,6 +1808,7 @@
 <translation id="3727148787322499904">Promjena te postavke utjecat će na sve dijeljene mreže</translation>
 <translation id="3727187387656390258">Provjeri skočni prozor</translation>
 <translation id="3729506734996624908">Dopuštene web-lokacije</translation>
+<translation id="3731997362820527097">Odaberite sigurnosni ključ</translation>
 <translation id="3732078975418297900">Pogreška u <ph name="ERROR_LINE" />. retku</translation>
 <translation id="3733127536501031542">SSL poslužitelj s iskorakom</translation>
 <translation id="3735740477244556633">Poredaj po</translation>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">Dobro došli u Hangouts Meet</translation>
 <translation id="3861241522664181545">Stranica je pauzirana.</translation>
 <translation id="3862134173397075045">Dobro došli u značajku Cast u Chromeu!</translation>
+<translation id="3862693525629180217">Potvrda putem ugrađenog senzora</translation>
 <translation id="3862788408946266506">Aplikaciju s atributom manifesta "kiosk_only" potrebno je instalirati u načinu kioska OS-a Chrome</translation>
 <translation id="3865414814144988605">Razlučivost</translation>
 <translation id="386548886866354912">Zapakiraj proširenjem <ph name="EXTENSION_NAME" /></translation>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">Potrebno je ponovno pokretanje prije nego što vaš uređaj može biti ponovo vraćen s funkcijom Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Pogledaj u web-trgovini</translation>
+<translation id="4058647953897694817">Potvrda putem Bluetootha</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Odmah provjeri dokument</translation>
 <translation id="406070391919917862">Aplikacije u pozadini</translation>
@@ -2041,6 +2049,7 @@
 <translation id="407520071244661467">Skaliranje</translation>
 <translation id="4075639477629295004">Nije moguće emitirati <ph name="FILE_NAME" />.</translation>
 <translation id="4077917118009885966">Oglasi su blokirani na ovoj web-lokaciji</translation>
+<translation id="4079799245038595838">Poslali smo obavijest na vaš telefon. Slijedite upute da biste potvrdili da ste to vi.</translation>
 <translation id="4081242589061676262">Nije moguće emitirati datoteku.</translation>
 <translation id="4084682180776658562">Oznaka</translation>
 <translation id="4084835346725913160">Zatvori karticu <ph name="TAB_NAME" /></translation>
@@ -2140,6 +2149,7 @@
 <translation id="4250229828105606438">Snimka zaslona</translation>
 <translation id="4250680216510889253">Ne</translation>
 <translation id="4252852543720145436">Identifikatori zaštićenog sadržaja</translation>
+<translation id="4252899949534773101">Bluetooth je onemogućen</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – dijeljenje sadržaja kartice</translation>
 <translation id="4254813446494774748">Jezik prijevoda:</translation>
 <translation id="425573743389990240">Stopa pražnjenja baterije u vatima (negativna vrijednost znači da se baterija puni)</translation>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">Chrome može pronaći i ukloniti štetni softver na vašem računalu</translation>
 <translation id="4481530544597605423">Neupareni uređaji</translation>
 <translation id="4482194545587547824">Google može upotrebljavati vašu povijest pregledavanja za prilagodbu Pretraživanja i drugih Googleovih usluga.</translation>
-<translation id="4493287891836751813">Upoznajte svojeg Google asistenta</translation>
 <translation id="4495419450179050807">Ne prikazuj na ovoj stranici</translation>
+<translation id="449938344715680828">Pritisnite |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| pa |<ph name="ACCELERATOR3" />| za zatvaranje</translation>
 <translation id="4499718683476608392">Omogućuje automatsko popunjavanje obrazaca podacima o kreditnoj kartici jednim klikom</translation>
 <translation id="4500114933761911433">Srušio se dodatak <ph name="PLUGIN_NAME" /></translation>
 <translation id="450099669180426158">Ikona uskličnika</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">Autentifikacija je otkazana prilikom povezivanja s uređajem "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> datoteka</translation>
 <translation id="457386861538956877">Više...</translation>
-<translation id="4576537685267142337">Podignite prst, a zatim ponovo dodirnite senzor</translation>
 <translation id="4576541033847873020">Uparivanje Bluetooth uređaja</translation>
 <translation id="4579581181964204535">Ne može se emitirati <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Jeste li sigurni da želite izbrisati ovoliko stavki: $1?</translation>
@@ -2343,6 +2352,7 @@
 <translation id="4611114513649582138">Dostupna je podatkovna veza</translation>
 <translation id="4613271546271159013">Proširenje je promijenilo stranicu koja se prikazuje kada otvorite novu karticu.</translation>
 <translation id="4615586811063744755">nije odabran nijedan kolačić</translation>
+<translation id="4615618657481886098">Već ste prije registrirali taj ključ. Ne morate ga ponovo registrirati.</translation>
 <translation id="4617270414136722281">Opcije proširenja</translation>
 <translation id="4619615317237390068">Kartice s drugih uređaja</translation>
 <translation id="4620809267248568679">Ovom postavkom upravlja proširenje.</translation>
@@ -2452,6 +2462,7 @@
 <translation id="4790972063719531840">Automatski šalji Googleu podatke o upotrebi i dijagnostici</translation>
 <translation id="4792711294155034829">&amp;Prijavljivanje problema...</translation>
 <translation id="479536056609751218">Web-stranica, samo HTML</translation>
+<translation id="4798236378408895261">Priloži <ph name="BEGIN_LINK" />Bluetooth zapisnike<ph name="END_LINK" /> (Google interno)</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4801448226354548035">Sakrij račune</translation>
 <translation id="4801512016965057443">Omogući roaming mobilnih podataka</translation>
@@ -2518,6 +2529,7 @@
 <translation id="4882473678324857464">Fokusiraj oznake</translation>
 <translation id="4882831918239250449">Odredite na koji će se način vaša povijest pregledavanja upotrebljavati za prilagodbu Pretraživanja, oglasa i drugog</translation>
 <translation id="4883178195103750615">Izvoz oznaka u HTML datoteku ...</translation>
+<translation id="4883274597792587930">Pronađite naziv na poleđini ključa</translation>
 <translation id="4883436287898674711">Sve web-lokacije <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">&amp;Upravitelj zadataka</translation>
 <translation id="4883898390143004266">Pomognite aplikacijama da pronađu lokaciju. Upotrebljavajte Googleovu uslugu lokacije radi točnijeg određivanja lokacije u aplikacijama. Google povremeno može prikupljati podatke o lokaciji i upotrebljavati te podatke na anoniman način radi poboljšanja točnosti lokacije i usluga temeljenih na lokaciji. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">Veličina fonta</translation>
 <translation id="494286511941020793">Pomoć za proxy konfiguraciju</translation>
 <translation id="4945444280533270988">Smart Lock uključen</translation>
-<translation id="494660967831069720">Djelomični podaci</translation>
 <translation id="4953689047182316270">Odgovori na događaje pristupačnosti</translation>
 <translation id="4953808748584563296">Zadani narančasti avatar</translation>
 <translation id="4955814292505481804">Godišnji</translation>
@@ -2991,6 +3002,7 @@
 <translation id="55601339223879446">Prilagodba granica radne površine unutar zaslona</translation>
 <translation id="5562781907504170924">Kartica je povezana s Bluetooth uređajem.</translation>
 <translation id="5563234215388768762">Pretražite Google ili unesite URL</translation>
+<translation id="5567950944308676169">Priključite sigurnosni ključ i aktivirajte ga</translation>
 <translation id="5567989639534621706">Predmemorije aplikacije</translation>
 <translation id="5568069709869097550">Ne mogu se prijaviti</translation>
 <translation id="5568144734023334204">Pohrana Androida</translation>
@@ -3237,6 +3249,7 @@
 <translation id="5931146425219109062">čitati i mijenjati vaše podatke na web-lokacijama koje posjećujete</translation>
 <translation id="5932881020239635062">Serijski</translation>
 <translation id="5933376509899483611">Vremenska zona</translation>
+<translation id="5938002010494270685">Dostupna je sigurnosna nadogradnja</translation>
 <translation id="5939518447894949180">Ponovno postavi</translation>
 <translation id="5939847200023027600">Usluga za slaganje PDF-a</translation>
 <translation id="5941153596444580863">Dodavanje osobe...</translation>
@@ -3273,6 +3286,7 @@
 <translation id="6006484371116297560">Klasična</translation>
 <translation id="6007237601604674381">Premještanje nije uspjelo. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Glasovno pretraživanje na vašem jeziku nije dostupno.</translation>
+<translation id="6009781704028455063">Ugrađeni senzor</translation>
 <translation id="6010869025736512584">Pristupanje videoulazu</translation>
 <translation id="6011193465932186973">Otisak prsta</translation>
 <translation id="6011449291337289699">Brisanje podataka web-lokacija</translation>
@@ -3283,6 +3297,7 @@
 <translation id="6020431688553761150">Poslužitelj vas nije ovlastio za pristup ovom resursu.</translation>
 <translation id="602251597322198729">Ova web lokacija pokušava preuzeti više datoteka. Želite li to dopustiti?</translation>
 <translation id="6022526133015258832">Otvori na cijelom zaslonu</translation>
+<translation id="6022705094403139349">Jeste li spremni za uparivanje sigurnosnog ključa?</translation>
 <translation id="6023643151125006053">Taj uređaj (serijski broj: <ph name="SERIAL_NUMBER" />) zaključao je administrator domene <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">Trag stoga</translation>
 <translation id="6026047032548434446">Želite li instalirati aplikaciju?</translation>
@@ -3346,6 +3361,7 @@
 <translation id="6105877918873366097">Zadnji pristup</translation>
 <translation id="6107012941649240045">Izdano za</translation>
 <translation id="6112294629795967147">Dodirnite za promjenu veličine</translation>
+<translation id="6112931163620622315">Provjerite telefon</translation>
 <translation id="6112952769866305444">Uređivanje osobe, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">vidjeti tekst i slike koje kopirate u međuspremnik</translation>
 <translation id="6116921718742659598">Promijenite postavke jezika i unosa</translation>
@@ -3391,6 +3407,7 @@
 <translation id="6169666352732958425">Emitiranje radne površine nije moguće.</translation>
 <translation id="6171948306033499786">Pauziraj ispis</translation>
 <translation id="6175314957787328458">Microsoft Domain GUID</translation>
+<translation id="6176043333338857209">Bluetooth će se privremeno uključiti radi komunikacije sa sigurnosnim ključem</translation>
 <translation id="6178664161104547336">Odabir certifikata</translation>
 <translation id="6181431612547969857">Preuzimanje je blokirano</translation>
 <translation id="6185132558746749656">Lokacija uređaja</translation>
@@ -3478,6 +3495,7 @@
 <translation id="6311220991371174222">Chrome se ne može pokrenuti zbog pogreške prilikom otvaranja vašeg profila. Pokušajte ponovo pokrenuti Chrome.</translation>
 <translation id="6312400084708441752">Obuhvaća informacije o štetnom softveru, postavkama sustava i procesima na vašem računalu</translation>
 <translation id="6312403991423642364">Nepoznata mrežna pogreška</translation>
+<translation id="6313320178014547270">Upotrebljavate ključ koji nije registriran na toj web-lokaciji</translation>
 <translation id="6313641880021325787">ZATVORI VR</translation>
 <translation id="6314819609899340042">Uspješno ste omogućili značajke za otklanjanje pogrešaka na ovom uređaju <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="6315493146179903667">Postavi sve u prednji plan</translation>
@@ -3522,7 +3540,6 @@
 <translation id="6384275966486438344">promijeniti postavke pretraživanja u: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Web-lokacije mogu spremiti i čitati podatke kolačića</translation>
 <translation id="6388429472088318283">Pretražite jezike</translation>
-<translation id="6388771388956873507">Pronađite senzor otiska prsta na uređaju i dodirnite ga prstom</translation>
 <translation id="6390799748543157332">Stranice koje gledate u ovom prozoru neće se pojaviti u povijesti preglednika niti će ostaviti druge tragove, poput kolačića, na računalu nakon što zatvorite sve otvorene gostujuće prozore. Međutim, datoteke koje preuzmete sačuvat će se.</translation>
 <translation id="6390994422085833176">Pregledajte značajke sinkronizacije i prilagodbe nakon postavljanja</translation>
 <translation id="6395423953133416962">Šalji <ph name="BEGIN_LINK1" />informacije o sustavu<ph name="END_LINK1" /> i <ph name="BEGIN_LINK2" />mjerne podatke<ph name="END_LINK2" /></translation>
@@ -3534,6 +3551,7 @@
 <translation id="6399774419735315745">Špijunka</translation>
 <translation id="6401445054534215853">Stavka police 1</translation>
 <translation id="6404511346730675251">Uredi oznaku</translation>
+<translation id="6405510437656969977">Nastavite kada budete spremni unijeti PIN</translation>
 <translation id="6406303162637086258">Simulacija ponovnog pokretanja preglednika</translation>
 <translation id="6406506848690869874">Sinkronizacija</translation>
 <translation id="6408118934673775994">pročitati i promijeniti vaše podatke na <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> i <ph name="WEBSITE_3" /></translation>
@@ -3652,6 +3670,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – dijeli se sadržaj radne površine</translation>
 <translation id="6580151766480067746">Verzija ARC-a</translation>
 <translation id="6581162200855843583">Veza na Google disk</translation>
+<translation id="6582080224869403177">Vratite uređaj <ph name="DEVICE_TYPE" /> na zadano radi sigurnosne nadogradnje.</translation>
 <translation id="6582421931165117398">Radi zaštite osobnih podataka odmah promijenite zaporku. Prije promjene zaporke morat ćete se prijaviti.</translation>
 <translation id="6583851739559471707">Blokirano na web-lokacijama koje često prikazuju ometajuće oglase (preporučeno)</translation>
 <translation id="6584878029876017575">Microsoftovo cjeloživotno potpisivanje</translation>
@@ -3701,6 +3720,7 @@
 <translation id="6644846457769259194">Ažuriranje uređaja (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL za opoziv tijela za izdavanje Netscape certifikata</translation>
 <translation id="6647838571840953560">Trenutačni kanal: <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Aktiviran je sigurnosni ključ...</translation>
 <translation id="6648911618876616409">Kritično ažuriranje spremno je za instalaciju. Prijavite se za početak.</translation>
 <translation id="6649018507441623493">Samo tren...</translation>
 <translation id="6649563841575838401">Format arhive nije podržan ili je datoteka oštećena.</translation>
@@ -3776,6 +3796,7 @@
 <translation id="6759193508432371551">Vraćanje na tvorničke postavke</translation>
 <translation id="6767639283522617719">Nije uspjelo pridruživanje domeni. Provjerite jesu li postavke ispravne za organizacijsku jedinicu.</translation>
 <translation id="6769712124046837540">Dodavanje pisača...</translation>
+<translation id="6770664076092644100">Potvrda putem NFC-a</translation>
 <translation id="6771503742377376720">jest tijelo za izdavanje certifikata</translation>
 <translation id="6777817260680419853">Preusmjeravanje je blokirano</translation>
 <translation id="6778959797435875428">Prestani zanemarivati web-lokacije</translation>
@@ -3811,6 +3832,7 @@
 <translation id="6823506025919456619">Morate se prijaviti na Chrome da biste vidjeli svoje uređaje</translation>
 <translation id="6824564591481349393">Kopiraj &amp;adresu e-pošte</translation>
 <translation id="6825184156888454064">Poredaj prema nazivu</translation>
+<translation id="6826872289184051766">Potvrda putem USB-a</translation>
 <translation id="6827236167376090743">Videozapis će se reproducirati unedogled.</translation>
 <translation id="6828153365543658583">Ograniči prijavu na sljedeće korisnike:</translation>
 <translation id="6828860976882136098">Postavljanje automatskih ažuriranja za sve korisnike nije uspjelo (pogreška prilikom izvršavanja pripremne provjere: <ph name="ERROR_NUMBER" />)</translation>
@@ -3844,6 +3866,7 @@
 <translation id="6880587130513028875">Na ovoj su stranici blokirane slike.</translation>
 <translation id="6883319974225028188">Ups! Sustav nije uspio spremiti konfiguraciju uređaja.</translation>
 <translation id="6885771755599377173">Pregled informacija o sustavu</translation>
+<translation id="6886476658664859389">NFC sigurnosni ključ</translation>
 <translation id="6886871292305414135">Otvori vezu u novoj &amp;kartici</translation>
 <translation id="6892812721183419409">Otvori vezu kao <ph name="USER" /></translation>
 <translation id="6896758677409633944">Kopiraj</translation>
@@ -4009,6 +4032,7 @@
 <translation id="713122686776214250">Dodavanje stra&amp;nice...</translation>
 <translation id="7133578150266914903">Vaš administrator vraća uređaj na prethodnu verziju sustava (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Smanji tekst</translation>
+<translation id="7135729336746831607">Želite li uključiti Bluetooth?</translation>
 <translation id="7136694880210472378">Postavi kao zadano</translation>
 <translation id="7136984461011502314">Dobro došli u <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Došlo je do pogreške. Pokušajte ponovo kasnije odabirom drugih slika.</translation>
@@ -4054,6 +4078,7 @@
 <translation id="7201118060536064622">Izbrisana je stavka "<ph name="DELETED_ITEM_NAME" />"</translation>
 <translation id="7206693748120342859">Preuzimanje dodatka <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Zatvori stranicu}one{Zatvori stranicu}few{Zatvori stranice}other{Zatvori stranica}}</translation>
+<translation id="721467499098558573">Pritisnite i zadržite tipku na sigurnosnom ključu najmanje 5 sekundi</translation>
 <translation id="7216409898977639127">Davatelj mobilnih usluga</translation>
 <translation id="7216595297012131718">Poredajte jezike prema svojim preferencijama</translation>
 <translation id="7220019174139618249">Izvoz zaporki u mapu "<ph name="FOLDER" />" nije moguć</translation>
@@ -4089,6 +4114,7 @@
 <translation id="7256710573727326513">Otvori na kartici</translation>
 <translation id="725758059478686223">Usluga ispisa</translation>
 <translation id="7257666756905341374">čitati podatke koje kopirate i lijepite</translation>
+<translation id="7260764918845374269">Da bi bio vidljiv, sigurnosni ključ mora biti u načinu uparivanja. Pritisnite i zadržite tipku na ključu najmanje 5 sekundi.</translation>
 <translation id="7262004276116528033">Tu uslugu prijave hostira <ph name="SAML_DOMAIN" /></translation>
 <translation id="7268365133021434339">Zatvori kartice</translation>
 <translation id="7268659760406822741">Dostupne usluge</translation>
@@ -4125,7 +4151,6 @@
 <translation id="7309257895202129721">Prikaži &amp;upravljačke gumbe</translation>
 <translation id="7310598146671372464">Prijava nije uspjela. Poslužitelj ne podržava navedene vrste enkripcije Kerberos. Obratite se administratoru.</translation>
 <translation id="7311079019872751559">Pristup dodatka izvan testnog okruženja</translation>
-<translation id="7311891583377621132">Lagano pomaknite prst da biste snimili različite dijelove otiska prsta</translation>
 <translation id="7317680720589234980">Opcije zaključavanja zaslona i prijave</translation>
 <translation id="7321545336522791733">Poslužitelj nije dostupan</translation>
 <translation id="7324297612904500502">Forum za beta verziju</translation>
@@ -4207,6 +4232,7 @@
 <translation id="7464490149090366184">Komprimiranje nije uspjelo, stavka postoji: "$1"</translation>
 <translation id="7465778193084373987">URL za opoziv Netscape certifikata</translation>
 <translation id="7469406957790636836">Da biste uključili tu postavku, prvo uključite provjeru pravopisa u odjeljku <ph name="BEGIN_LINK" />Jezici i unos<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Slanje obavijesti i vraćanje na postavku pamćenja ovog računala za Poruke</translation>
 <translation id="7469894403370665791">Automatski se povežite s tom mrežom</translation>
 <translation id="747114903913869239">Pogreška: Nije moguće dekodirati proširenje</translation>
 <translation id="7473753388963818366">Idemo pripremiti uređaj <ph name="DEVICE_TYPE" /> za vas</translation>
@@ -4256,6 +4282,7 @@
 <translation id="7531779363494549572">Otvorite Postavke &gt; Aplikacije i obavijesti &gt; Obavijesti.</translation>
 <translation id="7536709149194614609">Ponovo pokrenite uređaj i pokušajte kasnije.</translation>
 <translation id="7537601449003285327">Prikvači na programsku traku</translation>
+<translation id="7539856059004947393">Bluetooth sigurnosni ključ</translation>
 <translation id="7540972813190816353">Došlo je do pogreške prilikom traženja ažuriranja: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Omogući značajke za otklanjanje pogrešaka na ovom uređaju <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="7544853251252956727">Reproduciraj nasumično</translation>
@@ -4358,6 +4385,7 @@
 <translation id="7709152031285164251">Nije uspjelo – <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Emitiraj...</translation>
 <translation id="7711920809702896782">Informacije o slici</translation>
+<translation id="7712740978240882272">Otključajte Chromebook telefonom. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Nepoznato proširenje s ID-jem <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Dopušteni su kolačići s domene <ph name="DOMAIN" /></translation>
 <translation id="7714464543167945231">Certifikat</translation>
@@ -4573,6 +4601,7 @@
 <translation id="7984068253310542383">Zrcali <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">čitati i mijenjati postavke spremljenih zaporki</translation>
 <translation id="7987764905897278458">Iskoristite više pametnih Googleovih značajki</translation>
+<translation id="798835209536175951">Šaljite i primajte tekstne poruke na Chromebooku. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Omogući značajke dostupnosti</translation>
 <translation id="7994702968232966508">EAP metoda</translation>
 <translation id="799547531016638432">Uklanjanje prečaca</translation>
@@ -4705,6 +4734,7 @@
 <translation id="8185331656081929126">Prikaži obavijesti kada se otkriju novi pisači na mreži</translation>
 <translation id="8186609076106987817">Poslužitelj nije mogao pronaći datoteku.</translation>
 <translation id="8188120771410500975">&amp;Provjeri pravopis tekstnih polja</translation>
+<translation id="8188389033983459049">Pregledajte postavke uređaja i uključite ga da biste nastavili</translation>
 <translation id="8190193592390505034">Povezivanje s mrežom <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">upravljati vašim aplikacijama, proširenjima i temama</translation>
 <translation id="8191453843330043793">Razrješavanje V8 proxyja</translation>
@@ -4800,6 +4830,7 @@
 <translation id="8353683614194668312">Proširenje ili aplikacija može:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> – <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Želite li vratiti stranice?</translation>
+<translation id="8362993567435070757">Pronađite šesteroznamenkasti PIN sa stražnje strane ključa</translation>
 <translation id="8363095875018065315">stabilan</translation>
 <translation id="8363142353806532503">Mikrofon je blokiran</translation>
 <translation id="8366396658833131068">Veza s mrežom ponovno je uspostavljena. Odaberite neku drugu mrežu ili pritisnite gumb "Nastavi" u nastavku kako biste pokrenuli aplikaciju kioska.</translation>
@@ -4808,6 +4839,7 @@
 <translation id="8371695176452482769">Govorite sad</translation>
 <translation id="8372369524088641025">Neispravan WEP ključ</translation>
 <translation id="8373553483208508744">Isključi zvuk na karticama</translation>
+<translation id="8379878387931047019">Ovaj uređaj ne podržava vrstu sigurnosnog ključa koju zahtijeva ta web-lokacija</translation>
 <translation id="8382913212082956454">Kopiraj &amp;adresu e-pošte</translation>
 <translation id="8386903983509584791">Traženje je dovršeno</translation>
 <translation id="8389492867173948260">Dopustite ovom proširenju da čita i mijenja sve vaše podatke na web-lokacijama koje posjećujete:</translation>
@@ -4926,6 +4958,7 @@
 <translation id="8557930019681227453">Manifest</translation>
 <translation id="8559694214572302298">Dekodiranje slika</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Nastavite čitati</translation>
 <translation id="8565650234829130278">Pokušaj vraćanja aplikacije na stariju verziju.</translation>
 <translation id="8569002732135253578">Ispisuje se <ph name="DOCUMENT_NAME" /></translation>
 <translation id="8569682776816196752">Nije pronađeno nijedno odredište</translation>
@@ -4966,7 +4999,6 @@
 <translation id="8639047128869322042">Traženje štetnog softvera...</translation>
 <translation id="8639963783467694461">Postavke automatske ispune</translation>
 <translation id="8642171459927087831">Token pristupa</translation>
-<translation id="8642267168767642381">Presporo ste pomaknuli prst</translation>
 <translation id="8642947597466641025">Uvećaj tekst</translation>
 <translation id="8643418457919840804">Da biste nastavili, odaberite opciju:</translation>
 <translation id="8645354835496065562">Nastavi dopuštati pristup senzorima</translation>
@@ -4981,6 +5013,7 @@
 <translation id="8655295600908251630">Kanal</translation>
 <translation id="8655319619291175901">Ups... Nešto je pošlo po krivu.</translation>
 <translation id="8655972064210167941">Prijava nije uspjela jer zaporka nije potvrđena. Obratite se administratoru ili pokušajte ponovo.</translation>
+<translation id="8656619792520327915">Dodajte neki drugi Bluetooth sigurnosni ključ</translation>
 <translation id="8656768832129462377">Nemoj provjeravati</translation>
 <translation id="8658595122208653918">Promjena opcija pisača...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> dijeli zaslon i zvuk s karticom <ph name="TAB_NAME" />.</translation>
@@ -5103,6 +5136,7 @@
 <translation id="8814687660896548945">Pričekajte, arhiva se skenira...</translation>
 <translation id="881799181680267069">Sakrij ostale</translation>
 <translation id="8818152010000655963">Pozadina</translation>
+<translation id="8818958672113348984">Potvrda putem telefona</translation>
 <translation id="8820817407110198400">Knjižne oznake</translation>
 <translation id="8821045908425223359">Konfiguriraj IP adresu automatski</translation>
 <translation id="882204272221080310">Ažuriraj opremu radi dodatne zaštite.</translation>
@@ -5133,11 +5167,13 @@
 <translation id="8872155268274985541">Pronađena je nevažeća datoteka manifesta vanjskog ažuriranja kioska. Aplikacija kioska nije ažurirana. Uklonite USB privjesak.</translation>
 <translation id="8874184842967597500">Niste povezani</translation>
 <translation id="8876215549894133151">Oblik:</translation>
+<translation id="8876307312329369159">Ta se postavka ne može promijeniti u demo sesiji.</translation>
 <translation id="8876309039915144086">Generiranje zaporke...</translation>
 <translation id="8877448029301136595">[matični direktorij]</translation>
 <translation id="8879284080359814990">&amp;Prikaži kao karticu</translation>
 <translation id="8883847527783433352">Sinkroniziraj s drugim računom</translation>
 <translation id="8885197664446363138">Smart Lock nije dostupan</translation>
+<translation id="88870264962436283">Upotreba Touch ID-a s aplikacijom <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Boja:</translation>
 <translation id="8890516388109605451">Izvori</translation>
 <translation id="8892168913673237979">Sve je spremno!</translation>
@@ -5158,6 +5194,7 @@
 <translation id="8915370057835397490">Učitavanje prijedloga</translation>
 <translation id="8916476537757519021">Anonimni podokvir: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Da biste imali sve svoje zaporke na svim svojim uređajima, prijavite se i uključite sinkronizaciju.</translation>
+<translation id="8921366488406707015">Potvrđivanje sigurnosnog ključa...</translation>
 <translation id="8922013791253848639">Uvijek dopusti oglase na ovoj web-lokaciji</translation>
 <translation id="8925458182817574960">&amp;Postavke</translation>
 <translation id="8926389886865778422">Više me ne pitaj</translation>
@@ -5266,6 +5303,7 @@
 <translation id="9066782832737749352">Pretvaranje teksta u govor</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> može upotrijebiti spremljene zaporke kako bi vas automatski prijavio na web-lokacije i aplikacije koje ispunjavaju uvjete.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Uparite ključ s ovim uređajem da biste se pomoću njega prijavljivali na svoj račun</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB miš povezan</translation>
 <translation id="9076523132036239772">Nažalost, nismo uspjeli provjeriti vašu e-poštu ili zaporku. Pokušajte se prvo povezati s mrežom.</translation>
@@ -5327,7 +5365,6 @@
 <translation id="916607977885256133">Slika u slici</translation>
 <translation id="9169496697824289689">Prikaz tipkovnih prečaca</translation>
 <translation id="9169931577761441333">Dodajte <ph name="APP_NAME" /> na početni zaslon</translation>
-<translation id="9170397650136757332">Sada lagano pomaknite prst da biste snimili sve različite dijelove otiska prsta</translation>
 <translation id="9170848237812810038">&amp;Poništi</translation>
 <translation id="9170884462774788842">Drugi program na vašem računalu dodao je temu koja može promijeniti način na koji radi Chrome.</translation>
 <translation id="9173995187295789444">Traženje Bluetooth uređaja...</translation>
@@ -5391,6 +5428,7 @@
 <translation id="971774202801778802">URL oznake</translation>
 <translation id="973473557718930265">Odustani</translation>
 <translation id="974555521953189084">Unesite šifru da biste pokrenuli sinkronizaciju</translation>
+<translation id="977640333593638907">Na većini ključeva jednostavno pritisnite tipku</translation>
 <translation id="981121421437150478">Izvanmrežno</translation>
 <translation id="983511809958454316">VR ne podržava tu značajku</translation>
 <translation id="984275831282074731">Načini plaćanja</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index a4a5f6d3..2b076d98 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16×</translation>
 <translation id="127138278192656016">A szinkronizálás és az összes szolgáltatás használata</translation>
 <translation id="1272079795634619415">Leállítás</translation>
-<translation id="1272242203003205253">Segédjével Google-partnerek működnek együtt, hogy az Ön segítségére legyenek</translation>
 <translation id="1272978324304772054">Ez a felhasználói fiók nem ahhoz a domainhez tartozik, amelyhez az eszköz. Ha másik domainen kívánja regisztrálni azt, először vissza kell állítania az eszköz beállításait.</translation>
 <translation id="1274977772557788323">Adobe Flash Player tárolási beállítások</translation>
 <translation id="1274997165432133392">Cookie-k és egyéb webhelyadatok</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Nem sikerült észlelni a telefont</translation>
 <translation id="1616206807336925449">A bővítmény nem igényel különleges engedélyeket.</translation>
 <translation id="1616298854599875024">A(z) „<ph name="IMPORT_NAME" />” bővítményt nem lehetett importálni, mivel az nem megosztott modul</translation>
-<translation id="161707228174452095">Ujjlenyomat hozzáadva!</translation>
 <translation id="1618268899808219593">Súgó</translation>
 <translation id="162035744160882748">A szinkronizálás, személyre szabás és más Google-szolgáltatások bekapcsolása</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">RAR-archívum</translation>
 <translation id="2034346955588403444">Másik Wi-Fi-hálózat hozzáadása</translation>
 <translation id="203574396658008164">Jegyzetkészítés engedélyezése a lezárási képernyőn</translation>
-<translation id="2039623879703305659">Túl gyorsan mozgatta az ujját</translation>
 <translation id="2040460856718599782">Hoppá! Hiba történt, miközben a rendszer megpróbálta azonosítani. Kérjük, ellenőrizze még egyszer bejelentkezési adatait, majd próbálja meg ismét.</translation>
 <translation id="2043818754674261542">Milyen távolságra lehet a telefon a(z) <ph name="DEVICE_TYPE" /> zárolásának feloldásához?</translation>
 <translation id="204497730941176055">Microsoft tanúsítványsablon neve</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Törli a(z) "<ph name="CERTIFICATE_NAME" />" szervertanúsítványt?</translation>
 <translation id="2100273922101894616">Automatikus bejelentkezés</translation>
 <translation id="2101225219012730419">Verzió:</translation>
-<translation id="2107494551712864447">Ujjlenyomat hozzáadása</translation>
 <translation id="2112877397266219826">Kapcsolja be az érintőképernyőt a beállításhoz</translation>
 <translation id="21133533946938348">Lap rögzítése</translation>
 <translation id="2113479184312716848">&amp;Fájl megnyitása...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Asztal</translation>
 <translation id="2526619973349913024">Frissítés keresése</translation>
 <translation id="2527167509808613699">Bármilyen kapcsolódás</translation>
-<translation id="2532026602297547439">Szennyeződés van az érzékelőn</translation>
 <translation id="2532589005999780174">Nagy kontrasztú mód</translation>
 <translation id="253434972992662860">&amp;Szünet</translation>
 <translation id="2534460670861217804">Biztonságos HTTP-proxy</translation>
@@ -1378,7 +1373,6 @@
 <translation id="3057861065630527966">Biztonsági másolat készítése a fotókról és videókról</translation>
 <translation id="3060379269883947824">Felolvasás engedélyezése</translation>
 <translation id="3061707000357573562">Javítókészlet szolgáltatás</translation>
-<translation id="3064410671692449875">Nincs elegendő adat</translation>
 <translation id="3065041951436100775">Visszajelzés megszakított lapról.</translation>
 <translation id="3067198179881736288">Telepíti az alkalmazást?</translation>
 <translation id="3067198360141518313">A plug-in futtatása</translation>
@@ -2265,7 +2259,6 @@
 <translation id="4480590691557335796">A Chrome képes a számítógépen lévő kártékony szoftverek megkeresésére és eltávolítására</translation>
 <translation id="4481530544597605423">Párosítatlan eszközök</translation>
 <translation id="4482194545587547824">A Google felhasználhatja a böngészési előzményeket a Keresés és más Google-szolgáltatások személyre szabására.</translation>
-<translation id="4493287891836751813">Ismerje meg a Google Segédet</translation>
 <translation id="4495419450179050807">Ne jelenjen meg ezen az oldalon</translation>
 <translation id="4499718683476608392">Használja a hitelkártyaadatokra vonatkozó automatikus kitöltés funkciót, amellyel az űrlapokat egyetlen kattintással kitöltheti</translation>
 <translation id="4500114933761911433">A(z) <ph name="PLUGIN_NAME" /> összeomlott</translation>
@@ -2320,7 +2313,6 @@
 <translation id="4572659312570518089">Hitelesítés visszavonva a következőhöz való csatlakozáskor: „<ph name="DEVICE_NAME" />”.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> fájl</translation>
 <translation id="457386861538956877">Továbbiak...</translation>
-<translation id="4576537685267142337">Emelje fel ujját, majd érintse meg újra az érzékelőt</translation>
 <translation id="4576541033847873020">Bluetooth-eszköz párosítása</translation>
 <translation id="4579581181964204535">Nem lehet átküldeni a következőt: <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Biztos, hogy törölni szeretné ezt az elemet: $1?</translation>
@@ -2565,7 +2557,6 @@
 <translation id="4941627891654116707">Betűméret</translation>
 <translation id="494286511941020793">Proxykonfigurációs súgó</translation>
 <translation id="4945444280533270988">Smart Lock bekapcsolva</translation>
-<translation id="494660967831069720">Részleges adatok</translation>
 <translation id="4953689047182316270">Válasz kisegítő lehetőségekkel kapcsolatos eseményekre</translation>
 <translation id="4953808748584563296">Alapértelmezett narancssárga avatar</translation>
 <translation id="4955814292505481804">Éves</translation>
@@ -3524,7 +3515,6 @@
 <translation id="6384275966486438344">A keresési beállítások módosítása a következőre: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">A webhelyek menthetik és olvashatják a cookie-adatokat</translation>
 <translation id="6388429472088318283">Nyelv keresése</translation>
-<translation id="6388771388956873507">Keresse meg az eszköz ujjlenyomat-érzékelőjét, és érintse meg ujjával</translation>
 <translation id="6390799748543157332">Az ebben az ablakban megtekintett oldalak a vendégmódban megnyitott ablakok bezárását követően nem fognak megjelenni a böngészési előzmények között, és nem hagynak egyéb nyomokat, például cookie-kat a számítógépen. Azonban az Ön által letöltött fájlokat a rendszer megőrzi.</translation>
 <translation id="6390994422085833176">A szinkronizálási és személyre szabási funkciók áttekintése a beállítást követően</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />Rendszer-információk<ph name="END_LINK1" /> és <ph name="BEGIN_LINK2" />mutatószámok<ph name="END_LINK2" /> küldése</translation>
@@ -4127,7 +4117,6 @@
 <translation id="7309257895202129721">&amp;Vezérlők megjelenítése</translation>
 <translation id="7310598146671372464">Nem sikerült a bejelentkezés. A szerver nem támogatja a megadott Kerberos-titkosítástípusokat. Forduljon a rendszergazdához.</translation>
 <translation id="7311079019872751559">Sandbox-technológiát nem alkalmazó beépülő modul hozzáférése</translation>
-<translation id="7311891583377621132">Óvatosan mozgassa ujját az ujjlenyomat újabb részének rögzítéséhez</translation>
 <translation id="7317680720589234980">Képernyőzárral és bejelentkezéssel kapcsolatos beállítások</translation>
 <translation id="7321545336522791733">A szerver nem áll rendelkezésre</translation>
 <translation id="7324297612904500502">Béta fórum</translation>
@@ -4967,7 +4956,6 @@
 <translation id="8639047128869322042">Kártékony szoftverek keresése…</translation>
 <translation id="8639963783467694461">Automatikus kitöltési beállítások</translation>
 <translation id="8642171459927087831">Hozzáférési token</translation>
-<translation id="8642267168767642381">Túl lassan mozgatta az ujját</translation>
 <translation id="8642947597466641025">Szöveg nagyítása</translation>
 <translation id="8643418457919840804">A folytatáshoz válasszon a lehetőségek közül:</translation>
 <translation id="8645354835496065562">Érzékelőhöz való hozzáférés engedélyezésének fenntartása</translation>
@@ -5328,7 +5316,6 @@
 <translation id="916607977885256133">Kép a képben</translation>
 <translation id="9169496697824289689">Billentyűparancsok megtekintése</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" /> hozzáadása a kezdőképernyőhöz</translation>
-<translation id="9170397650136757332">Óvatosan mozgassa ujját a teljes ujjlenyomat rögzítéséhez</translation>
 <translation id="9170848237812810038">&amp;Visszavonás</translation>
 <translation id="9170884462774788842">A számítógépen lévő egyik program olyan témát adott hozzá, amely módosíthatja a Chrome működését.</translation>
 <translation id="9173995187295789444">Bluetooth-eszközök keresése…</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index aaffa6f..3fc70a9 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Item rak 5</translation>
 <translation id="1227507814927581609">Autentikasi gagal saat menyambung ke "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">menu sistem</translation>
+<translation id="123186018454553812">Coba kunci lain</translation>
 <translation id="1232569758102978740">Tanpa Judul</translation>
 <translation id="1233721473400465416">Lokal</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Gunakan sinkronisasi dan semua layanan</translation>
 <translation id="1272079795634619415">Berhenti</translation>
-<translation id="1272242203003205253">Google Partners berfungsi dengan Asisten untuk membantu Anda</translation>
 <translation id="1272978324304772054">Akun pengguna ini tidak berada di domain tempat perangkat mendaftar.  Jika Anda ingin mendaftar ke domain lain, Anda perlu melakukan pemulihan perangkat terlebih dulu.</translation>
 <translation id="1274977772557788323">Setelan Penyimpanan Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookie dan data situs lain</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Versi <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Telusuri sandi</translation>
 <translation id="1487335504823219454">Aktif - setelan khusus</translation>
+<translation id="1489664337021920575">Pilih opsi lain</translation>
 <translation id="1493892686965953381">Menunggu <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> perangkat lain tersedia.</translation>
 <translation id="1497522201463361063">Tidak dapat mengubah nama "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Jendela Aplikasi</translation>
 <translation id="15373452373711364">Kursor mouse besar</translation>
 <translation id="1538729222189715449">Membuka file Linux...</translation>
+<translation id="153933193410874873">Kami tidak dapat memverifikasi identitas Anda di perangkat ini</translation>
 <translation id="1540605929960647700">Aktifkan mode demo</translation>
 <translation id="1543284117603151572">Diimpor Dari Edge</translation>
 <translation id="1545177026077493356">Mode Kios Otomatis</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Gambar ini tidak dapat digunakan. Pilih gambar lain.</translation>
 <translation id="1566049601598938765">Situs web</translation>
 <translation id="1567387640189251553">Keyboard yang berbeda telah terhubung sejak Anda terakhir memasukkan sandi. Keyboard tersebut mungkin mencoba mencuri ketukan tombol Anda.</translation>
+<translation id="1567750922576943685">Memverifikasi identitas membantu melindungi informasi pribadi Anda</translation>
 <translation id="1567993339577891801">Konsol Javascript</translation>
 <translation id="1568067597247500137">Matikan notifikasi situs</translation>
 <translation id="1568323446248056064">Buka setelan perangkat layar</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Tidak dapat mendeteksi ponsel Anda</translation>
 <translation id="1616206807336925449">Ekstensi ini tidak memerlukan izin khusus.</translation>
 <translation id="1616298854599875024">Tidak dapat mengimpor ekstensi "<ph name="IMPORT_NAME" />" karena bukan modul yang dibagikan</translation>
-<translation id="161707228174452095">Sidik jari ditambahkan!</translation>
 <translation id="1618268899808219593">Pusat Bantuan</translation>
 <translation id="162035744160882748">Aktifkan sinkronisasi, personalisasi, dan layanan Google lainnya</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">Arsip RAR</translation>
 <translation id="2034346955588403444">Tambahkan jaringan Wi-Fi lainnya</translation>
 <translation id="203574396658008164">Aktifkan pencatat dari layar kunci</translation>
-<translation id="2039623879703305659">Jari bergerak terlalu cepat</translation>
 <translation id="2040460856718599782">Ups!  Terjadi masalah saat mencoba mengautentikasi Anda.  Periksa lagi kredensial login Anda dan coba lagi.</translation>
 <translation id="2043818754674261542">Jauhkan ponsel untuk membuka kunci <ph name="DEVICE_TYPE" /> ini</translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Hapus sertifikat server "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Masuk Otomatis</translation>
 <translation id="2101225219012730419">Versi:</translation>
-<translation id="2107494551712864447">Tambahkan sidik jari</translation>
 <translation id="2112877397266219826">Aktifkan pengontrol sentuh untuk menyiapkan</translation>
 <translation id="21133533946938348">Pasang pin pada Tab</translation>
 <translation id="2113479184312716848">Buka &amp;Berkas...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Desktop</translation>
 <translation id="2526619973349913024">Periksa pembaruan</translation>
 <translation id="2527167509808613699">Jenis sambungan apa pun</translation>
-<translation id="2532026602297547439">Sensor kotor</translation>
 <translation id="2532589005999780174">Mode kontras tinggi</translation>
 <translation id="253434972992662860">&amp;Jeda</translation>
 <translation id="2534460670861217804">Proxy HTTP Aman</translation>
@@ -1197,6 +1196,7 @@
 <translation id="2783298271312924866">Telah Didownload</translation>
 <translation id="2783321960289401138">Membuat pintasan...</translation>
 <translation id="2783829359200813069">Pilih jenis enkripsi</translation>
+<translation id="2783952358106015700">Gunakan kunci keamanan dengan <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Mengaktifkan layanan data seluler Anda</translation>
 <translation id="2785873697295365461">Deskriptor file</translation>
 <translation id="2787047795752739979">Timpa yang asli</translation>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">Cadangkan foto dan video</translation>
 <translation id="3060379269883947824">Aktifkan fitur klik untuk diucapkan</translation>
 <translation id="3061707000357573562">Layanan Patch</translation>
-<translation id="3064410671692449875">Data tidak cukup</translation>
 <translation id="3065041951436100775">Masukan tab yang ditutup.</translation>
 <translation id="3067198179881736288">Instal aplikasi?</translation>
 <translation id="3067198360141518313">Jalankan plugin ini</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">&amp;Tab Baru</translation>
 <translation id="3288047731229977326">Ekstensi yang berjalan dalam mode pengembang dapat membahayakan komputer Anda. Jika Anda bukan pengembang, Anda sebaiknya menonaktifkan ekstensi yang berjalan dalam mode pengembang ini agar tetap aman.</translation>
 <translation id="3289856944988573801">Untuk memeriksa pembaruan, gunakan Ethernet atau Wi-Fi.</translation>
+<translation id="3292421191230118801">Lanjutkan melihat situs dari seluler di Chromebook Anda</translation>
 <translation id="32939749466444286">Container Linux tidak dimulai. Harap coba lagi.</translation>
 <translation id="3294437725009624529">Tamu</translation>
 <translation id="329838636886466101">Perbaiki</translation>
@@ -1552,6 +1552,7 @@
 <translation id="3348038390189153836">Perangkat yang dapat dicopot terdeteksi</translation>
 <translation id="3348459612390503954">Selamat</translation>
 <translation id="3349933790966648062">Jejak Memori</translation>
+<translation id="3350117557200012647">Masuk mode penyambungan</translation>
 <translation id="3353984535370177728">Pilih folder untuk diunggah</translation>
 <translation id="3355936511340229503">Kesalahan sambungan</translation>
 <translation id="3356797067524893661">Anda siap untuk melanjutkan ke Hangouts Meet</translation>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">Mesin telusur diubah ke <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Aplikasi Kios tidak dapat didownload.</translation>
 <translation id="3564334271939054422">Jaringan Wi-Fi yang Anda gunakan (<ph name="NETWORK_ID" />) mungkin mengharuskan Anda mengunjungi halaman masuknya.</translation>
+<translation id="3564848315152754834">Kunci keamanan USB</translation>
 <translation id="3566721612727112615">Tidak ada situs yang ditambahkan</translation>
 <translation id="3569382839528428029">Apakah Anda ingin <ph name="APP_NAME" /> membagikan layar Anda?</translation>
 <translation id="3570985609317741174">Konten web</translation>
@@ -1741,6 +1743,7 @@
 <translation id="3627588569887975815">Buka link di jendela penya&amp;maran</translation>
 <translation id="3627671146180677314">Netscape Certificate Renewal Time</translation>
 <translation id="3627879631695760395">Menginstal <ph name="APP" />...</translation>
+<translation id="3630132874740063857">Telepon Anda</translation>
 <translation id="3630995161997703415">Tambahkan situs ini ke rak Anda agar dapat digunakan setiap saat</translation>
 <translation id="3635030235490426869">Tab 1</translation>
 <translation id="3636096452488277381">Hai, <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">Ikon Ekstensi</translation>
 <translation id="3665589677786828986">Chrome mendeteksi bahwa beberapa setelan Anda dirusak oleh program lain dan menyetelnya ulang ke setelan default aslinya.</translation>
 <translation id="3668570675727296296">Setelan bahasa</translation>
+<translation id="3668801437375206837">Untuk mendiagnosis masalah Bluetooth dengan lebih baik, Googler dapat menyertakan log Bluetooth tambahan dengan laporan umpannya. Jika opsi ini dicentang, laporan Anda akan menyertakan log HCI dan btsnoop dari sesi Anda saat ini, yang dihapus untuk membuang PII sebanyak mungkin. Akses ke log ini akan dibatasi pada pengelola grup produk Chrome OS di Listnr. Log akan dihapus setelah 90 hari.</translation>
 <translation id="3668823961463113931">Penangan</translation>
 <translation id="3670229581627177274">Aktifkan Bluetooth</translation>
 <translation id="3672681487849735243">Kesalahan pabrik terdeteksi</translation>
@@ -1780,6 +1784,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> ingin berbagi layar Anda</translation>
 <translation id="3693415264595406141">Sandi:</translation>
 <translation id="3694027410380121301">Pilih Tab Sebelumnya</translation>
+<translation id="369489984217678710">Sandi dan data login lainnya</translation>
 <translation id="3699624789011381381">Alamat email</translation>
 <translation id="3699920817649120894">Nonaktifkan sinkronisasi dan personalisasi?</translation>
 <translation id="3700888195348409686">Menampilkan (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1803,6 +1808,7 @@
 <translation id="3727148787322499904">Perubahan pada setelan ini akan berpengaruh pada semua jaringan bersama</translation>
 <translation id="3727187387656390258">Periksa pop-up</translation>
 <translation id="3729506734996624908">Situs yang diizinkan</translation>
+<translation id="3731997362820527097">Pilih kunci keamanan</translation>
 <translation id="3732078975418297900">Error pada saluran <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Server SSL dengan Step-up</translation>
 <translation id="3735740477244556633">Urutkan menurut</translation>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">Selamat datang di Hangouts Meet</translation>
 <translation id="3861241522664181545">Halaman dijeda.</translation>
 <translation id="3862134173397075045">Sambutlah pengalaman Cast di Chrome!</translation>
+<translation id="3862693525629180217">Verifikasi melalui sensor bawaan</translation>
 <translation id="3862788408946266506">Aplikasi dengan atribut manifes 'kiosk_only' harus diinstal dalam mode kios Chrome OS</translation>
 <translation id="3865414814144988605">Resolusi</translation>
 <translation id="386548886866354912">Paketkan dengan <ph name="EXTENSION_NAME" /></translation>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">Mulai ulang diperlukan sebelum perangkat Anda dapat disetel ulang dengan Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Lihat di Toko</translation>
+<translation id="4058647953897694817">Verifikasi melalui Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Periksa Dokumen Sekarang</translation>
 <translation id="406070391919917862">Aplikasi Latar Belakang</translation>
@@ -2041,6 +2049,7 @@
 <translation id="407520071244661467">Skala</translation>
 <translation id="4075639477629295004">Tidak dapat mentransmisikan <ph name="FILE_NAME" />.</translation>
 <translation id="4077917118009885966">Iklan diblokir di situs ini</translation>
+<translation id="4079799245038595838">Notifikasi telah dikirim ke telepon Anda. Ikuti petunjuk untuk mengonfirmasi bahwa itu memang Anda.</translation>
 <translation id="4081242589061676262">Tidak dapat mentransmisikan file.</translation>
 <translation id="4084682180776658562">Bookmark</translation>
 <translation id="4084835346725913160">Tutup <ph name="TAB_NAME" /></translation>
@@ -2140,6 +2149,7 @@
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="4250680216510889253">Tidak</translation>
 <translation id="4252852543720145436">Pengenal konten yang dilindungi</translation>
+<translation id="4252899949534773101">Bluetooth dinonaktifkan</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Konten tab dibagikan</translation>
 <translation id="4254813446494774748">Bahasa Terjemahan:</translation>
 <translation id="425573743389990240">Laju Penggunaan Daya Baterai dalam Watt (Nilai negatif menunjukkan bahwa daya baterai sedang diisi)</translation>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">Chrome dapat menemukan software berbahaya di komputer dan menghapusnya</translation>
 <translation id="4481530544597605423">Perangkat tidak tersambung</translation>
 <translation id="4482194545587547824">Google dapat menggunakan histori penjelajahan Anda untuk mempersonalisasi Penelusuran dan layanan Google lainnya</translation>
-<translation id="4493287891836751813">Perkenalkan, Asisten Google Anda</translation>
 <translation id="4495419450179050807">Jangan tampilkan pada halaman ini</translation>
+<translation id="449938344715680828">Tekan |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| lalu |<ph name="ACCELERATOR3" />| untuk keluar</translation>
 <translation id="4499718683476608392">Aktifkan IsiOtomatis kartu kredit untuk mengisi formulir dengan sekali klik</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> telah error</translation>
 <translation id="450099669180426158">Ikon tanda seru</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">Autentikasi dibatalkan saat menyambung ke "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">File <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Lainnya...</translation>
-<translation id="4576537685267142337">Angkat jari, lalu sentuh sensor lagi</translation>
 <translation id="4576541033847873020">Sandingkan perangkat Bluetooth</translation>
 <translation id="4579581181964204535">Tidak dapat mentransmisi <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Yakin ingin menghapus $1 item?</translation>
@@ -2343,6 +2352,7 @@
 <translation id="4611114513649582138">Koneksi data tersedia</translation>
 <translation id="4613271546271159013">Ekstensi telah mengubah apa yang ditampilkan halaman saat Anda membuka tab baru.</translation>
 <translation id="4615586811063744755">tidak ada cookie yang dipilih</translation>
+<translation id="4615618657481886098">Kunci ini telah didaftarkan sebelumnya dan tidak perlu didaftarkan lagi.</translation>
 <translation id="4617270414136722281">Opsi ekstensi</translation>
 <translation id="4619615317237390068">Tab dari perangkat lain</translation>
 <translation id="4620809267248568679">Setelan ini diberlakukan oleh ekstensi.</translation>
@@ -2452,6 +2462,7 @@
 <translation id="4790972063719531840">Otomatis kirimkan data diagnostik dan penggunaan ke Google</translation>
 <translation id="4792711294155034829">Lapo&amp;rkan Masalah...</translation>
 <translation id="479536056609751218">Halaman Web, HTML Saja</translation>
+<translation id="4798236378408895261">Lampirkan <ph name="BEGIN_LINK" />Log Bluetooth<ph name="END_LINK" /> (internal Google)</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4801448226354548035">Sembunyikan akun</translation>
 <translation id="4801512016965057443">Izinkan roaming data seluler</translation>
@@ -2518,6 +2529,7 @@
 <translation id="4882473678324857464">Memfokuskan pada bookmark</translation>
 <translation id="4882831918239250449">Kontrol cara histori browsing digunakan untuk mempersonalisasi Penelusuran, iklan, dan lainnya</translation>
 <translation id="4883178195103750615">Ekspor bookmark ke file HTML...</translation>
+<translation id="4883274597792587930">Cari nama yang tercetak di bagian belakang kunci</translation>
 <translation id="4883436287898674711">Semua situs <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">Pengelola &amp;Tugas</translation>
 <translation id="4883898390143004266">Bantu aplikasi menemukan lokasi. Gunakan layanan lokasi Google untuk membantu meningkatkan keakuratan lokasi aplikasi. Google dapat mengumpulkan data lokasi secara berkala dan menggunakan data ini secara anonim untuk meningkatkan keakuratan lokasi dan layanan berbasis lokasi. <ph name="BEGIN_LINK1" />Pelajari Lebih Lanjut<ph name="END_LINK1" /></translation>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">Ukuran font</translation>
 <translation id="494286511941020793">Bantuan Konfigurasi Proxy</translation>
 <translation id="4945444280533270988">Smart Lock aktif</translation>
-<translation id="494660967831069720">Data sebagian</translation>
 <translation id="4953689047182316270">Merespons Acara Aksesibilitas</translation>
 <translation id="4953808748584563296">Avatar oranye default</translation>
 <translation id="4955814292505481804">Tahunan</translation>
@@ -2991,6 +3002,7 @@
 <translation id="55601339223879446">Menyesuaikan batas desktop Anda dalam tampilan</translation>
 <translation id="5562781907504170924">Tab ini terhubung ke Perangkat Bluetooth.</translation>
 <translation id="5563234215388768762">Telusuri Google atau ketik URL</translation>
+<translation id="5567950944308676169">Colokkan kunci keamanan Anda dan aktifkan</translation>
 <translation id="5567989639534621706">Cache aplikasi</translation>
 <translation id="5568069709869097550">Tidak dapat sign in</translation>
 <translation id="5568144734023334204">Penyimpanan Android</translation>
@@ -3237,6 +3249,7 @@
 <translation id="5931146425219109062">Membaca dan mengubah semua data Anda di situs web yang dikunjungi</translation>
 <translation id="5932881020239635062">Nomor Seri</translation>
 <translation id="5933376509899483611">Zona waktu</translation>
+<translation id="5938002010494270685">Upgrade keamanan tersedia</translation>
 <translation id="5939518447894949180">Setel ulang</translation>
 <translation id="5939847200023027600">Layanan Penggabung PDF</translation>
 <translation id="5941153596444580863">Tambahkan pengguna...</translation>
@@ -3273,6 +3286,7 @@
 <translation id="6006484371116297560">Klasik</translation>
 <translation id="6007237601604674381">Pemindahan gagal. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Penelusuran suara dalam bahasa Anda tidak tersedia.</translation>
+<translation id="6009781704028455063">Sensor bawaan</translation>
 <translation id="6010869025736512584">Mengakses masukan video</translation>
 <translation id="6011193465932186973">Sidik jari</translation>
 <translation id="6011449291337289699">Hapus data situs</translation>
@@ -3283,6 +3297,7 @@
 <translation id="6020431688553761150">Server tidak dapat memberi otorisasi kepada Anda untuk mengakses sumber daya ini.</translation>
 <translation id="602251597322198729">Situs ini mencoba mendownload beberapa file. Izinkan?</translation>
 <translation id="6022526133015258832">Buka Layar Penuh</translation>
+<translation id="6022705094403139349">Siap untuk menyambungkan kunci keamanan?</translation>
 <translation id="6023643151125006053">Perangkat ini (NS: <ph name="SERIAL_NUMBER" />) dikunci oleh administrator <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">Pelacakan Tumpukan</translation>
 <translation id="6026047032548434446">Instal aplikasi?</translation>
@@ -3346,6 +3361,7 @@
 <translation id="6105877918873366097">Terakhir diakses</translation>
 <translation id="6107012941649240045">Diterbitkan Untuk</translation>
 <translation id="6112294629795967147">Sentuh untuk mengubah ukuran</translation>
+<translation id="6112931163620622315">Periksa ponsel Anda</translation>
 <translation id="6112952769866305444">Mengedit orang, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Melihat teks dan gambar yang disalin ke papan klip</translation>
 <translation id="6116921718742659598">Ubah setelan masukan dan bahasa</translation>
@@ -3391,6 +3407,7 @@
 <translation id="6169666352732958425">Tidak dapat mentransmisi desktop.</translation>
 <translation id="6171948306033499786">Jeda pencetakan</translation>
 <translation id="6175314957787328458">Microsoft Domain GUID</translation>
+<translation id="6176043333338857209">Bluetooth akan diaktifkan untuk sementara untuk berkomunikasi dengan kunci keamanan</translation>
 <translation id="6178664161104547336">Pilih sertifikat</translation>
 <translation id="6181431612547969857">Download diblokir</translation>
 <translation id="6185132558746749656">Lokasi Perangkat</translation>
@@ -3478,6 +3495,7 @@
 <translation id="6311220991371174222">Tidak dapat memulai Chrome karena terjadi kesalahan saat membuka profil Anda. Coba mulai ulang Chrome.</translation>
 <translation id="6312400084708441752">Berisi informasi tentang software yang berbahaya, setelan sistem, dan proses di komputer Anda</translation>
 <translation id="6312403991423642364">Kesalahan jaringan tidak dikenal</translation>
+<translation id="6313320178014547270">Anda menggunakan kunci yang tidak terdaftar di situs ini</translation>
 <translation id="6313641880021325787">KELUAR VR</translation>
 <translation id="6314819609899340042">Anda berhasil mengaktifkan fitur debug di perangkat <ph name="IDS_SHORT_PRODUCT_NAME" /> ini.</translation>
 <translation id="6315493146179903667">Pindahkan Semua ke Depan</translation>
@@ -3522,7 +3540,6 @@
 <translation id="6384275966486438344">Ubah setelan penelusuran Anda menjadi: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Situs dapat menyimpan dan membaca data cookie</translation>
 <translation id="6388429472088318283">Bahasa penelusuran</translation>
-<translation id="6388771388956873507">Temukan sensor sidik jari di perangkat dan sentuh sensor tersebut dengan jari Anda</translation>
 <translation id="6390799748543157332">Halaman yang Anda lihat di jendela ini tidak akan muncul dalam histori browser dan tidak meninggalkan jejak lain, seperti cookie, di komputer setelah Anda menutup semua jendela Tamu yang terbuka. Namun, file apa pun yang Anda download akan tersimpan.</translation>
 <translation id="6390994422085833176">Tinjau fitur sinkronisasi dan personalisasi setelah penyiapan</translation>
 <translation id="6395423953133416962">Kirim <ph name="BEGIN_LINK1" />informasi sistem<ph name="END_LINK1" /> dan <ph name="BEGIN_LINK2" />metrik<ph name="END_LINK2" /></translation>
@@ -3534,6 +3551,7 @@
 <translation id="6399774419735315745">Mata-mata</translation>
 <translation id="6401445054534215853">Item rak 1</translation>
 <translation id="6404511346730675251">Edit bookmark</translation>
+<translation id="6405510437656969977">Lanjutkan jika Anda sudah siap memasukkan PIN</translation>
 <translation id="6406303162637086258">Simulasikan mulai ulang browser</translation>
 <translation id="6406506848690869874">Sinkronisasi</translation>
 <translation id="6408118934673775994">Membaca dan mengubah data Anda di <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, dan <ph name="WEBSITE_3" /></translation>
@@ -3652,6 +3670,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Konten desktop dibagikan</translation>
 <translation id="6580151766480067746">Versi ARC</translation>
 <translation id="6581162200855843583">Tautan Google Drive</translation>
+<translation id="6582080224869403177">Setel ulang <ph name="DEVICE_TYPE" /> untuk mengupgrade keamanan Anda.</translation>
 <translation id="6582421931165117398">Untuk melindungi informasi pribadi, ubah sandi Anda sekarang. Sebelum dapat mengubah sandi, Anda akan diminta untuk login.</translation>
 <translation id="6583851739559471707">Diblokir di situs yang cenderung menampilkan iklan mengganggu (direkomendasikan)</translation>
 <translation id="6584878029876017575">Microsoft Lifetime Signing</translation>
@@ -3701,6 +3720,7 @@
 <translation id="6644846457769259194">Memperbarui perangkat (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL Kebijakan Otoritas Sertifikasi Netscape</translation>
 <translation id="6647838571840953560">Saat ini di <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Kunci keamanan diaktifkan...</translation>
 <translation id="6648911618876616409">Update penting siap diinstal. Login untuk memulai.</translation>
 <translation id="6649018507441623493">Tunggu sebentar...</translation>
 <translation id="6649563841575838401">Format arsip tidak didukung atau file rusak.</translation>
@@ -3776,6 +3796,7 @@
 <translation id="6759193508432371551">Kembalikan ke setelan pabrik</translation>
 <translation id="6767639283522617719">Tidak dapat bergabung dengan domain. Pastikan setelan sudah benar untuk unit organisasi.</translation>
 <translation id="6769712124046837540">Menambahkan printer...</translation>
+<translation id="6770664076092644100">Verifikasi melalui NFC</translation>
 <translation id="6771503742377376720">Adalah Otoritas Sertifikasi</translation>
 <translation id="6777817260680419853">Pengalihan diblokir</translation>
 <translation id="6778959797435875428">Nyalakan notifikasi situs</translation>
@@ -3811,6 +3832,7 @@
 <translation id="6823506025919456619">Anda harus masuk ke Chrome untuk melihat perangkat Anda</translation>
 <translation id="6824564591481349393">Salin Alamat &amp;Email</translation>
 <translation id="6825184156888454064">Urutkan menurut nama</translation>
+<translation id="6826872289184051766">Verifikasi melalui USB</translation>
 <translation id="6827236167376090743">Video ini akan terus berputar sampai sapinya pulang.</translation>
 <translation id="6828153365543658583">Batasi akses masuk hanya untuk pengguna berikut:</translation>
 <translation id="6828860976882136098">Gagal menyiapkan pembaruan otomatis bagi semua pengguna (terjadi kesalahan saat mengeksekusi preflight: <ph name="ERROR_NUMBER" />)</translation>
@@ -3844,6 +3866,7 @@
 <translation id="6880587130513028875">Gambar diblokir di halaman ini.</translation>
 <translation id="6883319974225028188">Maaf!  Sistem gagal menyimpan konfigurasi ponsel.</translation>
 <translation id="6885771755599377173">Pratinjau Informasi Sistem</translation>
+<translation id="6886476658664859389">Kunci keamanan NFC</translation>
 <translation id="6886871292305414135">Buka link di &amp;tab baru</translation>
 <translation id="6892812721183419409">Buka Tautan sebagai <ph name="USER" /></translation>
 <translation id="6896758677409633944">Salin</translation>
@@ -4009,6 +4032,7 @@
 <translation id="713122686776214250">Tambahkan la&amp;man...</translation>
 <translation id="7133578150266914903">Administrator sedang memulihkan perangkat ini (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Perkecil Teks</translation>
+<translation id="7135729336746831607">Aktifkan Bluetooth?</translation>
 <translation id="7136694880210472378">Jadikan default</translation>
 <translation id="7136984461011502314">Selamat datang di <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Terjadi error. Coba lagi dengan memilih gambar lain.</translation>
@@ -4054,6 +4078,7 @@
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' dihapus</translation>
 <translation id="7206693748120342859">Mendownload <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Keluar dari halaman}other{Keluar dari halaman}}</translation>
+<translation id="721467499098558573">Tekan dan tahan tombol di kunci keamanan minimal selama 5 detik</translation>
 <translation id="7216409898977639127">Operator seluler</translation>
 <translation id="7216595297012131718">Urutkan bahasa berdasarkan preferensi Anda</translation>
 <translation id="7220019174139618249">Tidak dapat mengekspor sandi ke "<ph name="FOLDER" />"</translation>
@@ -4089,6 +4114,7 @@
 <translation id="7256710573727326513">Buka di tab</translation>
 <translation id="725758059478686223">Layanan Pencetakan</translation>
 <translation id="7257666756905341374">Mengakses data yang Anda salin dan tempel</translation>
+<translation id="7260764918845374269">Kunci keamanan harus berada dalam mode penyambungan jika Anda ingin melihatnya. Tekan tombol di kunci Anda minimal selama 5 detik.</translation>
 <translation id="7262004276116528033">Layanan masuk ini dihosting oleh <ph name="SAML_DOMAIN" /></translation>
 <translation id="7268365133021434339">Tutup Tab</translation>
 <translation id="7268659760406822741">Layanan yang tersedia</translation>
@@ -4125,7 +4151,6 @@
 <translation id="7309257895202129721">Tampilkan &amp;kontrol</translation>
 <translation id="7310598146671372464">Gagal login. Server tidak mendukung jenis enkripsi Kerberos yang ditentukan. Harap hubungi administrator.</translation>
 <translation id="7311079019872751559">Akses plugin yang tidak dimasukkan kotak pasir</translation>
-<translation id="7311891583377621132">Gerakkan jari sedikit untuk menangkap bagian sidik jari yang lain</translation>
 <translation id="7317680720589234980">Opsi kunci layar dan login</translation>
 <translation id="7321545336522791733">Server tidak dapat dijangkau</translation>
 <translation id="7324297612904500502">Forum Beta</translation>
@@ -4207,6 +4232,7 @@
 <translation id="7464490149090366184">Gagal membuat file zip, item sudah ada: "$1"</translation>
 <translation id="7465778193084373987">Netscape Certificate Revocation URL</translation>
 <translation id="7469406957790636836">Untuk mengaktifkannya, terlebih dahulu aktifkan fitur periksa ejaan di <ph name="BEGIN_LINK" />Bahasa dan masukan<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Kirim notifikasi dan setel secara default untuk mengingat komputer ini untuk Message</translation>
 <translation id="7469894403370665791">Sambungkan ke jaringan ini secara otomatis</translation>
 <translation id="747114903913869239">Kesalahan: Tidak dapat mendekodekan ekstensi</translation>
 <translation id="7473753388963818366">Mari menyiapkan <ph name="DEVICE_TYPE" /> Anda</translation>
@@ -4256,6 +4282,7 @@
 <translation id="7531779363494549572">Buka Setelan &gt; Aplikasi &amp; notifikasi &gt; Notifikasi.</translation>
 <translation id="7536709149194614609">Mulai ulang perangkat dan coba lagi nanti.</translation>
 <translation id="7537601449003285327">Pin to taskbar</translation>
+<translation id="7539856059004947393">Kunci keamanan Bluetooth</translation>
 <translation id="7540972813190816353">Terjadi kesalahan saat memeriksa untuk pembaruan: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Aktifkan fitur debug pada perangkat <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="7544853251252956727">Acak</translation>
@@ -4358,6 +4385,7 @@
 <translation id="7709152031285164251">Gagal - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Cast...</translation>
 <translation id="7711920809702896782">Info gambar</translation>
+<translation id="7712740978240882272">Membuka kunci Chromebook dengan ponsel. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Ekstensi tidak dikenal dengan ID <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Cookie dari <ph name="DOMAIN" /> diizinkan</translation>
 <translation id="7714464543167945231">Sertifikat</translation>
@@ -4573,6 +4601,7 @@
 <translation id="7984068253310542383">Cerminkan <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Membaca dan mengubah setelan sandi yang tersimpan</translation>
 <translation id="7987764905897278458">Dapatkan kecanggihan Google lainnya</translation>
+<translation id="798835209536175951">Mengirim dan menerima pesan teks dari Chromebook. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Aktifkan fitur aksesibilitas</translation>
 <translation id="7994702968232966508">Metode EAP</translation>
 <translation id="799547531016638432">Hapus pintasan</translation>
@@ -4705,6 +4734,7 @@
 <translation id="8185331656081929126">Tampilkan pemberitahuan saat printer baru terdeteksi pada jaringan.</translation>
 <translation id="8186609076106987817">Server tidak dapat menemukan file.</translation>
 <translation id="8188120771410500975">&amp;Periksa ejaan di bidang teks</translation>
+<translation id="8188389033983459049">Periksa setelan perangkat Anda dan aktifkan untuk melanjutkan</translation>
 <translation id="8190193592390505034">Menyambung ke <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Mengelola aplikasi, ekstensi, dan tema Anda</translation>
 <translation id="8191453843330043793">Pemecah Proxy V8</translation>
@@ -4799,6 +4829,7 @@
 <translation id="8353683614194668312">Aplikasi/ekstensi dapat:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Pulihkan halaman?</translation>
+<translation id="8362993567435070757">Lihat PIN 6 digit di bagian belakang kunci</translation>
 <translation id="8363095875018065315">stabil</translation>
 <translation id="8363142353806532503">Mikrofon diblokir</translation>
 <translation id="8366396658833131068">Konektivitas jaringan Anda dipulihkan. Pilih jaringan lain atau tekan tombol 'Lanjutkan' di bawah untuk meluncurkan aplikasi kios.</translation>
@@ -4807,6 +4838,7 @@
 <translation id="8371695176452482769">Bicaralah sekarang</translation>
 <translation id="8372369524088641025">Kunci WEP yang buruk</translation>
 <translation id="8373553483208508744">Nonaktifkan tab</translation>
+<translation id="8379878387931047019">Perangkat ini tidak mendukung jenis kunci keamanan yang diminta oleh situs ini</translation>
 <translation id="8382913212082956454">Salin alamat &amp;email</translation>
 <translation id="8386903983509584791">Pemindaian selesai</translation>
 <translation id="8389492867173948260">Mengizinkan ekstensi ini membaca dan mengubah semua data Anda di situs yang dibuka:</translation>
@@ -4925,6 +4957,7 @@
 <translation id="8557930019681227453">Manifes</translation>
 <translation id="8559694214572302298">Pendekode Gambar</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Lanjutkan Membaca</translation>
 <translation id="8565650234829130278">Berusaha menurunkan versi aplikasi.</translation>
 <translation id="8569002732135253578">Sedang mencetak <ph name="DOCUMENT_NAME" /></translation>
 <translation id="8569682776816196752">Tidak ditemukan tujuan</translation>
@@ -4965,7 +4998,6 @@
 <translation id="8639047128869322042">Memeriksa software berbahaya...</translation>
 <translation id="8639963783467694461">Setelan Isi-otomatis</translation>
 <translation id="8642171459927087831">Token Akses</translation>
-<translation id="8642267168767642381">Jari bergerak terlalu lambat</translation>
 <translation id="8642947597466641025">Perbesar Teks</translation>
 <translation id="8643418457919840804">Untuk melanjutkan, pilih salah satu opsi:</translation>
 <translation id="8645354835496065562">Terus izinkan akses sensor</translation>
@@ -4980,6 +5012,7 @@
 <translation id="8655295600908251630">Saluran</translation>
 <translation id="8655319619291175901">Ups ... Ada sesuatu yang salah.</translation>
 <translation id="8655972064210167941">Proses masuk gagal karena sandi Anda tidak dapat diverifikasi. Hubungi administrator atau coba lagi.</translation>
+<translation id="8656619792520327915">Tambahkan kunci keamanan Bluetooth lainnya</translation>
 <translation id="8656768832129462377">Jangan periksa</translation>
 <translation id="8658595122208653918">Ubah opsi printer...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> membagikan layar dan audio Anda dengan <ph name="TAB_NAME" />.</translation>
@@ -5102,6 +5135,7 @@
 <translation id="8814687660896548945">Harap tunggu, arsip sedang dipindai...</translation>
 <translation id="881799181680267069">Sembunyikan Lainnya</translation>
 <translation id="8818152010000655963">Wallpaper</translation>
+<translation id="8818958672113348984">Verifikasi melalui ponsel</translation>
 <translation id="8820817407110198400">Bookmark</translation>
 <translation id="8821045908425223359">Konfigurasi alamat IP secara otomatis</translation>
 <translation id="882204272221080310">Update firmware untuk tambahan keamanan.</translation>
@@ -5132,11 +5166,13 @@
 <translation id="8872155268274985541">File manifes pembaruan eksternal Kios yang tidak valid ditemukan. Gagal memperbarui aplikasi Kios. Lepaskan stik USB.</translation>
 <translation id="8874184842967597500">Tidak tersambung</translation>
 <translation id="8876215549894133151">Format:</translation>
+<translation id="8876307312329369159">Setelan ini tidak dapat diubah dalam sesi demo.</translation>
 <translation id="8876309039915144086">Buat sandi...</translation>
 <translation id="8877448029301136595">[direktori induk]</translation>
 <translation id="8879284080359814990">Tampilkan &amp;Sebagai Tab</translation>
 <translation id="8883847527783433352">Sinkronkan ke Akun Lain</translation>
 <translation id="8885197664446363138">Smart Lock tidak tersedia</translation>
+<translation id="88870264962436283">Gunakan Touch ID dengan <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Warna:</translation>
 <translation id="8890516388109605451">Sumber</translation>
 <translation id="8892168913673237979">Semua sudah siap!</translation>
@@ -5157,6 +5193,7 @@
 <translation id="8915370057835397490">Memuat saran</translation>
 <translation id="8916476537757519021">Subframe Mode Penyamaran: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Untuk mendapatkan semua sandi di semua perangkat, login dan aktifkan sinkronisasi.</translation>
+<translation id="8921366488406707015">Memverifikasi kunci keamanan...</translation>
 <translation id="8922013791253848639">Selalu izinkan iklan di situs ini</translation>
 <translation id="8925458182817574960">&amp;Setelan</translation>
 <translation id="8926389886865778422">Jangan tanya lagi</translation>
@@ -5265,6 +5302,7 @@
 <translation id="9066782832737749352">Text-to-Speech</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> otomatis memasukkan Anda ke situs dan aplikasi yang memenuhi syarat menggunakan sandi tersimpan.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Sambungkan kunci ke perangkat ini agar dapat digunakan untuk login ke akun</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Mouse USB tersambung</translation>
 <translation id="9076523132036239772">Maaf, email atau sandi Anda tidak dapat diverifikasi. Coba sambungkan ke jaringan terlebih dulu.</translation>
@@ -5326,7 +5364,6 @@
 <translation id="916607977885256133">Picture-in-Picture</translation>
 <translation id="9169496697824289689">Lihat pintasan keyboard</translation>
 <translation id="9169931577761441333">Tambahkan <ph name="APP_NAME" /> ke layar Utama</translation>
-<translation id="9170397650136757332">Sekarang gerakkan jari sedikit untuk menangkap seluruh bagian sidik jari Anda</translation>
 <translation id="9170848237812810038">&amp;Urung</translation>
 <translation id="9170884462774788842">Program lain di komputer Anda menambahkan tema yang dapat mengubah cara kerja Chrome.</translation>
 <translation id="9173995187295789444">Memindai perangkat Bluetooth...</translation>
@@ -5390,6 +5427,7 @@
 <translation id="971774202801778802">URL bookmark</translation>
 <translation id="973473557718930265">Keluar</translation>
 <translation id="974555521953189084">Masukkan frasa sandi Anda untuk memulai sinkronisasi</translation>
+<translation id="977640333593638907">Untuk menggunakan sebagian besar kunci, cukup tekan tombol</translation>
 <translation id="981121421437150478">Offline</translation>
 <translation id="983511809958454316">Fitur ini tidak didukung di VR</translation>
 <translation id="984275831282074731">Metode pembayaran</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index f2f1e74..ad0e4b80 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Elemento 5 della shelf</translation>
 <translation id="1227507814927581609">Autenticazione non riuscita durante la connessione a "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">menu di sistema</translation>
+<translation id="123186018454553812">Prova con un token diverso</translation>
 <translation id="1232569758102978740">Senza titolo</translation>
 <translation id="1233721473400465416">Lingua</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Usa la sincronizzazione e tutti i servizi</translation>
 <translation id="1272079795634619415">Interrompi</translation>
-<translation id="1272242203003205253">I partner di Google collaborano con l'assistente per aiutarti</translation>
 <translation id="1272978324304772054">Questo account utente non appartiene al dominio con cui è registrato il dispositivo. Se vuoi registrarti a un altro dominio devi prima effettuare il recupero del dispositivo.</translation>
 <translation id="1274977772557788323">Impostazioni di archiviazione Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookie e altri dati dei siti</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Versione <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Cerca password</translation>
 <translation id="1487335504823219454">Con: impostazioni personalizzate</translation>
+<translation id="1489664337021920575">Scegli un'altra opzione</translation>
 <translation id="1493892686965953381">In attesa di <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033">Ci sono altri <ph name="NUM_PRINTERS" /> dispositivi disponibili.</translation>
 <translation id="1497522201463361063">Impossibile ridenominare "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Finestra dell'applicazione</translation>
 <translation id="15373452373711364">Puntatore del mouse grande</translation>
 <translation id="1538729222189715449">Apertura di file Linux…</translation>
+<translation id="153933193410874873">Non siamo riusciti a verificare la tua identità su questo dispositivo</translation>
 <translation id="1540605929960647700">Attiva modalità demo</translation>
 <translation id="1543284117603151572">Importati da Edge</translation>
 <translation id="1545177026077493356">Modalità kiosk automatica</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Impossibile utilizzare l'immagine. Scegline un'altra.</translation>
 <translation id="1566049601598938765">Sito web</translation>
 <translation id="1567387640189251553">È stata collegata una tastiera diversa dall'ultimo inserimento della password. Potrebbe essere un tentativo di rubare i tasti premuti.</translation>
+<translation id="1567750922576943685">La verifica della tua identità aiuta a proteggere le tue informazioni personali</translation>
 <translation id="1567993339577891801">Console JavaScript</translation>
 <translation id="1568067597247500137">Disattiva l'audio del sito</translation>
 <translation id="1568323446248056064">Apri le impostazioni dello schermo</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Impossibile rilevare il tuo telefono</translation>
 <translation id="1616206807336925449">Questa estensione non richiede autorizzazioni speciali.</translation>
 <translation id="1616298854599875024">Impossibile importare l'estensione "<ph name="IMPORT_NAME" />" perché non è un modulo condiviso</translation>
-<translation id="161707228174452095">Impronta digitale aggiunta</translation>
 <translation id="1618268899808219593">Centro assistenza</translation>
 <translation id="162035744160882748">Attiva la sincronizzazione, la personalizzazione e altri servizi Google</translation>
 <translation id="1620510694547887537">Videocamera</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">Archivio RAR</translation>
 <translation id="2034346955588403444">Aggiungi un'altra rete Wi-Fi</translation>
 <translation id="203574396658008164">Attiva la scrittura di note dalla schermata di blocco</translation>
-<translation id="2039623879703305659">Hai spostato il dito troppo in fretta</translation>
 <translation id="2040460856718599782">Spiacenti. Si è verificato un problema durante il tentativo di autenticazione. Controlla attentamente le tue credenziali di accesso e riprova.</translation>
 <translation id="2043818754674261542">Distanza necessaria per poter sbloccare questo dispositivo <ph name="DEVICE_TYPE" /> con il telefono</translation>
 <translation id="204497730941176055">Nome modello di certificato Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Eliminare il certificato del server "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Accesso automatico</translation>
 <translation id="2101225219012730419">Versione:</translation>
-<translation id="2107494551712864447">Aggiungi un'impronta digitale</translation>
 <translation id="2112877397266219826">Attiva il tuo touch controller per configurare il dispositivo</translation>
 <translation id="21133533946938348">Blocca scheda</translation>
 <translation id="2113479184312716848">Apri &amp;file...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Desktop</translation>
 <translation id="2526619973349913024">Verifica la presenza di aggiornamenti</translation>
 <translation id="2527167509808613699">Qualsiasi tipo di connessione</translation>
-<translation id="2532026602297547439">Sensore sporco</translation>
 <translation id="2532589005999780174">Modalità ad alto contrasto</translation>
 <translation id="253434972992662860">&amp;Pausa</translation>
 <translation id="2534460670861217804">Proxy HTTP sicuro</translation>
@@ -1196,6 +1195,7 @@
 <translation id="2783298271312924866">Scaricato</translation>
 <translation id="2783321960289401138">Crea scorciatoia...</translation>
 <translation id="2783829359200813069">Seleziona i tipi di crittografia</translation>
+<translation id="2783952358106015700">Utilizza il token di sicurezza con <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Attivazione del servizio dati mobile</translation>
 <translation id="2785873697295365461">Descrittori di file</translation>
 <translation id="2787047795752739979">Sovrascrivi originale</translation>
@@ -1376,7 +1376,6 @@
 <translation id="3057861065630527966">Effettua il backup di foto e video</translation>
 <translation id="3060379269883947824">Attiva Seleziona per ascoltare</translation>
 <translation id="3061707000357573562">Servizio di applicazione patch</translation>
-<translation id="3064410671692449875">Dati insufficienti</translation>
 <translation id="3065041951436100775">Feedback relativo alle schede ignorate</translation>
 <translation id="3067198179881736288">Vuoi installare l'app?</translation>
 <translation id="3067198360141518313">Esegui questo plug-in</translation>
@@ -1509,6 +1508,7 @@
 <translation id="3285322247471302225">Nuova &amp;scheda</translation>
 <translation id="3288047731229977326">Le estensioni in esecuzione in modalità sviluppatore potrebbero danneggiare il computer. Se non sei uno sviluppatore, dovresti disattivare queste estensioni per la tua sicurezza.</translation>
 <translation id="3289856944988573801">Per verificare la disponibilità di aggiornamenti, utilizza una rete Ethernet o Wi-Fi.</translation>
+<translation id="3292421191230118801">Riprendi la visualizzazione dei siti da dispositivi mobili sul tuo Chromebook</translation>
 <translation id="32939749466444286">Il container Linux non è stato avviato. Riprova.</translation>
 <translation id="3294437725009624529">Ospite</translation>
 <translation id="329838636886466101">Ripara</translation>
@@ -1549,6 +1549,7 @@
 <translation id="3348038390189153836">Dispositivo rimovibile rilevato</translation>
 <translation id="3348459612390503954">Complimenti</translation>
 <translation id="3349933790966648062">Footprint di memoria</translation>
+<translation id="3350117557200012647">Attiva la modalità di accoppiamento</translation>
 <translation id="3353984535370177728">Seleziona una cartella da caricare</translation>
 <translation id="3355936511340229503">Errore di connessione</translation>
 <translation id="3356797067524893661">Sei pronto per continuare su Hangouts Meet</translation>
@@ -1688,6 +1689,7 @@
 <translation id="3556000484321257665">Motore di ricerca sostituito con: <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Impossibile scaricare l'applicazione kiosk.</translation>
 <translation id="3564334271939054422">La rete Wi-Fi in uso (<ph name="NETWORK_ID" />) potrebbe richiedere la visita della relativa pagina di accesso.</translation>
+<translation id="3564848315152754834">Token di sicurezza USB</translation>
 <translation id="3566721612727112615">Nessun sito aggiunto</translation>
 <translation id="3569382839528428029">Vuoi consentire a <ph name="APP_NAME" /> di condividere il tuo schermo?</translation>
 <translation id="3570985609317741174">Contenuti web</translation>
@@ -1738,6 +1740,7 @@
 <translation id="3627588569887975815">Apri link in finestra di navigazione in inco&amp;gnito</translation>
 <translation id="3627671146180677314">Data di rinnovo certificato Netscape</translation>
 <translation id="3627879631695760395">Installa <ph name="APP" />...</translation>
+<translation id="3630132874740063857">Il tuo telefono</translation>
 <translation id="3630995161997703415">Aggiungi questo sito alla shelf per usarlo in qualsiasi momento</translation>
 <translation id="3635030235490426869">Scheda 1</translation>
 <translation id="3636096452488277381">Salve <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1759,6 +1762,7 @@
 <translation id="3664511988987167893">Icona dell'estensione</translation>
 <translation id="3665589677786828986">Chrome ha rilevato che alcune impostazioni sono state danneggiate da un altro programma e le ha ripristinate con i valori originali predefiniti.</translation>
 <translation id="3668570675727296296">Impostazioni lingua</translation>
+<translation id="3668801437375206837">Per meglio diagnosticare i problemi del Bluetooth, i Googler possono includere log Bluetooth aggiuntivi nei loro rapporti di feedback. Quando questa opzione è selezionata, il rapporto includerà i log btsnoop e HCI relativi alla tua sessione attuale, bonificati per rimuovere il maggior numero possibile di PII. L'accesso a questi log verrà limitato agli amministratori del gruppo di prodotti Chrome OS in Listnr. I log verranno eliminati dopo 90 giorni.</translation>
 <translation id="3668823961463113931">Gestori</translation>
 <translation id="3670229581627177274">Attiva il Bluetooth</translation>
 <translation id="3672681487849735243">È stato rilevato un errore di fabbrica</translation>
@@ -1777,6 +1781,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> vuole condividere il tuo schermo</translation>
 <translation id="3693415264595406141">Password:</translation>
 <translation id="3694027410380121301">Seleziona scheda precedente</translation>
+<translation id="369489984217678710">Password e altri dati di accesso</translation>
 <translation id="3699624789011381381">Indirizzo email</translation>
 <translation id="3699920817649120894">Disattivare la sincronizzazione e la personalizzazione?</translation>
 <translation id="3700888195348409686">Presentazione di (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1800,6 +1805,7 @@
 <translation id="3727148787322499904">La modifica di questa impostazione avrà effetto su tutte le reti condivise</translation>
 <translation id="3727187387656390258">Ispeziona popup</translation>
 <translation id="3729506734996624908">Siti consentiti</translation>
+<translation id="3731997362820527097">Seleziona il tuo token di sicurezza</translation>
 <translation id="3732078975418297900">Errore nella riga <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Server SSL con step-up</translation>
 <translation id="3735740477244556633">Ordina per</translation>
@@ -1900,6 +1906,7 @@
 <translation id="3860381078714302691">Benvenuto in Hangouts Meet</translation>
 <translation id="3861241522664181545">Pagina in pausa.</translation>
 <translation id="3862134173397075045">Benvenuto nell'esperienza Cast di Chrome.</translation>
+<translation id="3862693525629180217">Verifica tramite sensore integrato</translation>
 <translation id="3862788408946266506">L'app con l'attributo del file manifest "kiosk_only" deve essere installata in modalità kiosk di Chrome OS</translation>
 <translation id="3865414814144988605">Risoluzione</translation>
 <translation id="386548886866354912">Comprimi tramite l'estensione <ph name="EXTENSION_NAME" /></translation>
@@ -2025,6 +2032,7 @@
 <translation id="4055023634561256217">È necessario riavviare prima che il dispositivo possa essere reimpostato con Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Visualizza nello Store</translation>
+<translation id="4058647953897694817">Verifica tramite Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Controlla documento ora</translation>
 <translation id="406070391919917862">Applicazioni in background</translation>
@@ -2038,6 +2046,7 @@
 <translation id="407520071244661467">Scala</translation>
 <translation id="4075639477629295004">Impossibile trasmettere <ph name="FILE_NAME" />.</translation>
 <translation id="4077917118009885966">Annunci bloccati su questo sito</translation>
+<translation id="4079799245038595838">È stata inviata una notifica al tuo telefono. Segui le istruzioni per confermare la tua identità.</translation>
 <translation id="4081242589061676262">Impossibile trasmettere il file.</translation>
 <translation id="4084682180776658562">Aggiungi ai Preferiti</translation>
 <translation id="4084835346725913160">Chiudi <ph name="TAB_NAME" /></translation>
@@ -2137,6 +2146,7 @@
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="4250680216510889253">No</translation>
 <translation id="4252852543720145436">Identificatori di contenuti protetti</translation>
+<translation id="4252899949534773101">Il Bluetooth è disabilitato</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Contenuti delle schede condivisi</translation>
 <translation id="4254813446494774748">Lingua della traduzione:</translation>
 <translation id="425573743389990240">Velocità di esaurimento della batteria in watt (un valore negativo indica che la batteria è in carica)</translation>
@@ -2262,8 +2272,8 @@
 <translation id="4480590691557335796">Chrome può trovare software dannoso sul computer e rimuoverlo</translation>
 <translation id="4481530544597605423">Dispositivi disaccoppiati</translation>
 <translation id="4482194545587547824">Google può utilizzare la tua cronologia di navigazione per personalizzare la Ricerca e altri servizi Google</translation>
-<translation id="4493287891836751813">Ecco il tuo Assistente Google</translation>
 <translation id="4495419450179050807">Non visualizzare in questa pagina</translation>
+<translation id="449938344715680828">Premi |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| seguito da |<ph name="ACCELERATOR3" />| per uscire</translation>
 <translation id="4499718683476608392">Attiva la Compilazione automatica per la carta di credito per compilare i moduli con un singolo clic</translation>
 <translation id="4500114933761911433">Arresto anomalo di <ph name="PLUGIN_NAME" /></translation>
 <translation id="450099669180426158">Icona punto esclamativo</translation>
@@ -2317,7 +2327,6 @@
 <translation id="4572659312570518089">Autenticazione annullata durante la connessione a "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">File <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Altro...</translation>
-<translation id="4576537685267142337">Solleva il dito, quindi tocca di nuovo il sensore</translation>
 <translation id="4576541033847873020">Accoppia dispositivo Bluetooth</translation>
 <translation id="4579581181964204535">Impossibile trasmettere <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Eliminare $1 elementi?</translation>
@@ -2340,6 +2349,7 @@
 <translation id="4611114513649582138">Connessione dati disponibile</translation>
 <translation id="4613271546271159013">Un'estensione ha cambiato la pagina visualizzata all'apertura di una nuova scheda.</translation>
 <translation id="4615586811063744755">nessun cookie selezionato</translation>
+<translation id="4615618657481886098">Hai già registrato questo token in precedenza. Non è necessario registrarlo di nuovo.</translation>
 <translation id="4617270414136722281">Opzioni estensione</translation>
 <translation id="4619615317237390068">Schede di altri dispositivi</translation>
 <translation id="4620809267248568679">Questa impostazione è applicata da un'estensione.</translation>
@@ -2449,6 +2459,7 @@
 <translation id="4790972063719531840">Invia automaticamente a Google dati di diagnostica e utilizzo</translation>
 <translation id="4792711294155034829">&amp;Segnala un problema...</translation>
 <translation id="479536056609751218">Pagina web, solo HTML</translation>
+<translation id="4798236378408895261">Allega <ph name="BEGIN_LINK" />log Bluetooth<ph name="END_LINK" /> (interno di Google)</translation>
 <translation id="479989351350248267">ricerca</translation>
 <translation id="4801448226354548035">Nascondi account</translation>
 <translation id="4801512016965057443">Consenti roaming dati mobile</translation>
@@ -2515,6 +2526,7 @@
 <translation id="4882473678324857464">Evidenzia preferiti</translation>
 <translation id="4882831918239250449">Controlla il modo in cui la cronologia di navigazione viene utilizzata per personalizzare la Ricerca, gli annunci e altro ancora</translation>
 <translation id="4883178195103750615">Esporta i preferiti in file HTML...</translation>
+<translation id="4883274597792587930">Cerca il nome stampato sul retro del tuo token</translation>
 <translation id="4883436287898674711">Tutti i siti <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">&amp;Task Manager</translation>
 <translation id="4883898390143004266">Aiuta le app a rilevare la posizione. Usa il servizio di geolocalizzazione di Google per migliorare il rilevamento della posizione da parte delle app. Google potrebbe raccogliere periodicamente dati sulla posizione da usare in forma anonima per migliorare la precisione della geolocalizzazione e i servizi basati sulla posizione. <ph name="BEGIN_LINK1" />Ulteriori informazioni<ph name="END_LINK1" /></translation>
@@ -2562,7 +2574,6 @@
 <translation id="4941627891654116707">Dimensioni carattere</translation>
 <translation id="494286511941020793">Guida configurazione proxy</translation>
 <translation id="4945444280533270988">Smart Lock attivo</translation>
-<translation id="494660967831069720">Dati parziali</translation>
 <translation id="4953689047182316270">Rispondi agli eventi di accessibilità</translation>
 <translation id="4953808748584563296">Avatar arancione predefinito</translation>
 <translation id="4955814292505481804">Annuale</translation>
@@ -2987,6 +2998,7 @@
 <translation id="55601339223879446">Regola i bordi del desktop all'interno del display</translation>
 <translation id="5562781907504170924">Questa scheda è connessa a un dispositivo Bluetooth.</translation>
 <translation id="5563234215388768762">Cerca con Google o digita un URL</translation>
+<translation id="5567950944308676169">Collega il token di sicurezza e attivalo</translation>
 <translation id="5567989639534621706">Cache applicazione</translation>
 <translation id="5568069709869097550">Non riesco a effettuare l'accesso</translation>
 <translation id="5568144734023334204">Spazio di archiviazione di Android</translation>
@@ -3233,6 +3245,7 @@
 <translation id="5931146425219109062">Leggere e modificare tutti i dati sui siti web visitati</translation>
 <translation id="5932881020239635062">Numero di serie</translation>
 <translation id="5933376509899483611">Fuso orario</translation>
+<translation id="5938002010494270685">Aggiornamento di sicurezza disponibile</translation>
 <translation id="5939518447894949180">Ripristina</translation>
 <translation id="5939847200023027600">Servizio compositore di PDF</translation>
 <translation id="5941153596444580863">Aggiungi persona...</translation>
@@ -3269,6 +3282,7 @@
 <translation id="6006484371116297560">Classico</translation>
 <translation id="6007237601604674381">Spostamento non riuscito. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">La ricerca vocale nella tua lingua non è disponibile.</translation>
+<translation id="6009781704028455063">Sensore integrato</translation>
 <translation id="6010869025736512584">Accesso all'input video in corso</translation>
 <translation id="6011193465932186973">Impronta digitale</translation>
 <translation id="6011449291337289699">Cancella i dati del sito</translation>
@@ -3279,6 +3293,7 @@
 <translation id="6020431688553761150">Il server non ti ha autorizzato ad accedere a questa risorsa.</translation>
 <translation id="602251597322198729">Questo sito sta tentando di scaricare più file. Consentire l'operazione?</translation>
 <translation id="6022526133015258832">Apri a schermo intero</translation>
+<translation id="6022705094403139349">È tutto pronto per accoppiare il tuo token di sicurezza?</translation>
 <translation id="6023643151125006053">Questo dispositivo (numero di serie <ph name="SERIAL_NUMBER" />) è stato bloccato dall'amministratore di <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">Analisi dello stack</translation>
 <translation id="6026047032548434446">Vuoi installare l'app?</translation>
@@ -3342,6 +3357,7 @@
 <translation id="6105877918873366097">Ultimo accesso</translation>
 <translation id="6107012941649240045">Rilasciato a</translation>
 <translation id="6112294629795967147">Tocca per ridimensionare</translation>
+<translation id="6112931163620622315">Controlla il tuo telefono</translation>
 <translation id="6112952769866305444">Modifica persona, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Leggere testi e immagini copiati negli appunti</translation>
 <translation id="6116921718742659598">Modifica impostazioni della lingua e di immissione</translation>
@@ -3387,6 +3403,7 @@
 <translation id="6169666352732958425">Impossibile trasmettere il desktop.</translation>
 <translation id="6171948306033499786">Metti in pausa la stampa</translation>
 <translation id="6175314957787328458">GUID di dominio Microsoft</translation>
+<translation id="6176043333338857209">Il Bluetooth verrà temporaneamente abilitato per comunicare con il tuo token di sicurezza</translation>
 <translation id="6178664161104547336">Seleziona un certificato</translation>
 <translation id="6181431612547969857">Download bloccato</translation>
 <translation id="6185132558746749656">Posizione del dispositivo</translation>
@@ -3474,6 +3491,7 @@
 <translation id="6311220991371174222">Impossibile avviare Chrome perché si è verificato un errore durante l'apertura del profilo. Prova a riavviare il browser.</translation>
 <translation id="6312400084708441752">Sono incluse informazioni relative a software dannoso, impostazioni di sistema e processi sul computer</translation>
 <translation id="6312403991423642364">Errore di rete sconosciuto</translation>
+<translation id="6313320178014547270">Stai utilizzando un token che non è registrato per questo servizio</translation>
 <translation id="6313641880021325787">ESCI DA REALTÀ VIRTUALE</translation>
 <translation id="6314819609899340042">Hai attivato le funzioni di debug su questo dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="6315493146179903667">Porta tutto in primo piano</translation>
@@ -3518,7 +3536,6 @@
 <translation id="6384275966486438344">Modifica delle impostazioni di ricerca per: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">I siti possono memorizzare e leggere i dati dei cookie</translation>
 <translation id="6388429472088318283">Cerca lingue</translation>
-<translation id="6388771388956873507">Individua il sensore di impronte digitali sul dispositivo e toccalo con il dito</translation>
 <translation id="6390799748543157332">Le pagine visualizzate in questa finestra non verranno memorizzate nella cronologia del browser e non lasceranno altre tracce, ad esempio cookie, sul computer dopo la chiusura di tutte le finestre Ospite aperte. Tutti i file scaricati verranno comunque conservati.</translation>
 <translation id="6390994422085833176">Verifica le funzioni di sincronizzazione e personalizzazione dopo l'installazione</translation>
 <translation id="6395423953133416962">Invia <ph name="BEGIN_LINK1" />informazioni di sistema<ph name="END_LINK1" /> e <ph name="BEGIN_LINK2" />metriche<ph name="END_LINK2" /></translation>
@@ -3530,6 +3547,7 @@
 <translation id="6399774419735315745">Spia</translation>
 <translation id="6401445054534215853">Elemento 1 della shelf</translation>
 <translation id="6404511346730675251">Modifica preferito</translation>
+<translation id="6405510437656969977">Continua quando tutto è pronto per inserire il PIN</translation>
 <translation id="6406303162637086258">Simula riavvio browser</translation>
 <translation id="6406506848690869874">Sincronizzazione</translation>
 <translation id="6408118934673775994">Leggere e modificare i tuoi dati su <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> e <ph name="WEBSITE_3" /></translation>
@@ -3648,6 +3666,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Contenuti del desktop condivisi</translation>
 <translation id="6580151766480067746">Versione ARC</translation>
 <translation id="6581162200855843583">Link Google Drive</translation>
+<translation id="6582080224869403177">Ripristina il tuo <ph name="DEVICE_TYPE" /> per migliorare la sicurezza.</translation>
 <translation id="6582421931165117398">Cambia subito la password per proteggere le tue informazioni personali. Ti verrà chiesto di accedere per cambiare la password.</translation>
 <translation id="6583851739559471707">Bloccati sui siti che tendono a mostrare annunci invasivi (opzione consigliata)</translation>
 <translation id="6584878029876017575">Firma definitiva Microsoft</translation>
@@ -3697,6 +3716,7 @@
 <translation id="6644846457769259194">Aggiornamento del dispositivo in corso (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL di revoca dell'autorità di certificazione Netscape</translation>
 <translation id="6647838571840953560">Attualmente su <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Token di sicurezza attivato…</translation>
 <translation id="6648911618876616409">Un aggiornamento critico è pronto per essere installato. Accedi per iniziare.</translation>
 <translation id="6649018507441623493">Solo un secondo...</translation>
 <translation id="6649563841575838401">Il formato dell'archivio non è supportato oppure il file è danneggiato.</translation>
@@ -3772,6 +3792,7 @@
 <translation id="6759193508432371551">Ripristino dati di fabbrica</translation>
 <translation id="6767639283522617719">Impossibile aggiungere al dominio. Assicurati che le impostazioni dell'unità organizzativa siano corrette.</translation>
 <translation id="6769712124046837540">Aggiunta della stampante...</translation>
+<translation id="6770664076092644100">Verifica tramite NFC</translation>
 <translation id="6771503742377376720">È un'autorità di certificazione</translation>
 <translation id="6777817260680419853">Reindirizzamento bloccato</translation>
 <translation id="6778959797435875428">Riattiva l'audio dei siti</translation>
@@ -3807,6 +3828,7 @@
 <translation id="6823506025919456619">Devi accedere a Chrome per visualizzare i tuoi dispositivi</translation>
 <translation id="6824564591481349393">Copia indirizzo &amp;email</translation>
 <translation id="6825184156888454064">Ordina per nome</translation>
+<translation id="6826872289184051766">Verifica tramite USB</translation>
 <translation id="6827236167376090743">La riproduzione di questo video continuerà indefinitamente.</translation>
 <translation id="6828153365543658583">Limita l'accesso ai seguenti utenti</translation>
 <translation id="6828860976882136098">Impostazione degli aggiornamenti automatici per tutti gli utenti non riuscita (errore di esecuzione preliminare: <ph name="ERROR_NUMBER" />)</translation>
@@ -3840,6 +3862,7 @@
 <translation id="6880587130513028875">Le immagini sono state bloccate in questa pagina.</translation>
 <translation id="6883319974225028188">Spiacenti. Impossibile salvare la configurazione del dispositivo.</translation>
 <translation id="6885771755599377173">Anteprima informazioni di sistema</translation>
+<translation id="6886476658664859389">Token di sicurezza NFC</translation>
 <translation id="6886871292305414135">Apri link in un'altra &amp;scheda</translation>
 <translation id="6892812721183419409">Apri link come <ph name="USER" /></translation>
 <translation id="6896758677409633944">Copia</translation>
@@ -4005,6 +4028,7 @@
 <translation id="713122686776214250">Aggiungi pa&amp;gina...</translation>
 <translation id="7133578150266914903">L'amministratore sta eseguendo il rollback del tuo dispositivo (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Riduci le dimensioni del testo</translation>
+<translation id="7135729336746831607">Attivare il Bluetooth?</translation>
 <translation id="7136694880210472378">Imposta come predefinito</translation>
 <translation id="7136984461011502314">Benvenuto in <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Si è verificato un errore. Riprova scegliendo altre immagini.</translation>
@@ -4050,6 +4074,7 @@
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" eliminato</translation>
 <translation id="7206693748120342859">Download di <ph name="PLUGIN_NAME" /> in corso...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Esci dalla pagina}other{Esci dalle pagine}}</translation>
+<translation id="721467499098558573">Tieni premuto il pulsante del token di sicurezza per almeno 5 secondi</translation>
 <translation id="7216409898977639127">Fornitore del servizio di telefonia mobile</translation>
 <translation id="7216595297012131718">Ordina le lingue in base alle tue preferenze</translation>
 <translation id="7220019174139618249">Impossibile esportare le password in "<ph name="FOLDER" />"</translation>
@@ -4085,6 +4110,7 @@
 <translation id="7256710573727326513">Apri in una scheda</translation>
 <translation id="725758059478686223">Servizio di stampa</translation>
 <translation id="7257666756905341374">Lettura dei dati copiati e incollati</translation>
+<translation id="7260764918845374269">Per vedere il tuo token di sicurezza, deve trovarsi in modalità di accoppiamento. Tieni premuto il pulsante del token di sicurezza per almeno 5 secondi.</translation>
 <translation id="7262004276116528033">Questo servizio di accesso è in hosting su <ph name="SAML_DOMAIN" /></translation>
 <translation id="7268365133021434339">Chiudi schede</translation>
 <translation id="7268659760406822741">Servizi disponibili</translation>
@@ -4121,7 +4147,6 @@
 <translation id="7309257895202129721">Visualizza &amp;comandi</translation>
 <translation id="7310598146671372464">Impossibile accedere. Il server non supporta i tipi di crittografia Kerberos specificati. Contatta l'amministratore.</translation>
 <translation id="7311079019872751559">Accesso con plug-in senza sandbox</translation>
-<translation id="7311891583377621132">Muovi leggermente il dito per acquisire una parte diversa dell'impronta digitale</translation>
 <translation id="7317680720589234980">Opzioni di blocco schermo e accesso</translation>
 <translation id="7321545336522791733">Server non raggiungibile</translation>
 <translation id="7324297612904500502">Forum per la versione Beta</translation>
@@ -4203,6 +4228,7 @@
 <translation id="7464490149090366184">Compressione non riuscita. Elemento esistente: "$1"</translation>
 <translation id="7465778193084373987">URL di revoca certificato Netscape</translation>
 <translation id="7469406957790636836">Per attivare questa funzione, attiva per prima cosa il controllo ortografico in <ph name="BEGIN_LINK" />Lingue e immissione<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Ricevi notifiche e valori predefiniti per memorizzare questo computer per Messaggi</translation>
 <translation id="7469894403370665791">Collegati automaticamente a questa rete</translation>
 <translation id="747114903913869239">Errore: impossibile decodificare l'estensione</translation>
 <translation id="7473753388963818366">Avvia la configurazione del tuo <ph name="DEVICE_TYPE" /></translation>
@@ -4252,6 +4278,7 @@
 <translation id="7531779363494549572">Seleziona Impostazioni &gt; App e notifiche &gt; Notifiche.</translation>
 <translation id="7536709149194614609">Riavvia il dispositivo e riprova più tardi.</translation>
 <translation id="7537601449003285327">Aggiungi alla barra delle applicazioni</translation>
+<translation id="7539856059004947393">Token di sicurezza Bluetooth</translation>
 <translation id="7540972813190816353">Si è verificato un errore durante il controllo della disponibilità di aggiornamenti: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Attiva funzioni di debug su questo dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="7544853251252956727">Riproduzione casuale</translation>
@@ -4352,6 +4379,7 @@
 <translation id="7709152031285164251">Operazione non riuscita. <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Trasmetti...</translation>
 <translation id="7711920809702896782">Info immagine</translation>
+<translation id="7712740978240882272">Sblocca il Chromebook con il telefono. <ph name="LINK_BEGIN" />Ulteriori informazioni<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Estensione sconosciuta con ID <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">I cookie provenienti da <ph name="DOMAIN" /> sono consentiti</translation>
 <translation id="7714464543167945231">Certificato</translation>
@@ -4567,6 +4595,7 @@
 <translation id="7984068253310542383">Esegui il mirroring di <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Lettura e modifica delle impostazioni relative alle password salvate</translation>
 <translation id="7987764905897278458">Utilizza il meglio dell'intelligenza di Google</translation>
+<translation id="798835209536175951">Invia e ricevi SMS dal Chromebook. <ph name="LINK_BEGIN" />Ulteriori informazioni<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Attiva funzioni di accessibilità</translation>
 <translation id="7994702968232966508">Metodo EAP</translation>
 <translation id="799547531016638432">Rimuovi scorciatoia</translation>
@@ -4699,6 +4728,7 @@
 <translation id="8185331656081929126">Mostra notifiche quando vengono rilevate nuove stampanti in rete</translation>
 <translation id="8186609076106987817">Impossibile trovare il file sul server.</translation>
 <translation id="8188120771410500975">&amp;Esegui il controllo ortografico nei campi di testo</translation>
+<translation id="8188389033983459049">Controlla le impostazioni sul dispositivo e attivalo per continuare</translation>
 <translation id="8190193592390505034">Connessione a <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Gestire applicazioni, estensioni e temi</translation>
 <translation id="8191453843330043793">V8 Proxy Resolver</translation>
@@ -4793,6 +4823,7 @@
 <translation id="8353683614194668312">Può:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Ripristinare le pagine?</translation>
+<translation id="8362993567435070757">Individua il PIN di sei cifre sul retro del token</translation>
 <translation id="8363095875018065315">stabile</translation>
 <translation id="8363142353806532503">Microfono bloccato</translation>
 <translation id="8366396658833131068">La connettività di rete è stata ripristinata. Seleziona un'altra rete o premi il pulsante "Continua" sotto per avviare l'app kiosk.</translation>
@@ -4801,6 +4832,7 @@
 <translation id="8371695176452482769">Parla adesso</translation>
 <translation id="8372369524088641025">Chiave WEP non valida</translation>
 <translation id="8373553483208508744">Disattiva audio schede</translation>
+<translation id="8379878387931047019">Questo dispositivo non supporta il tipo di token di sicurezza richiesto da questo sito web</translation>
 <translation id="8382913212082956454">Copia indirizzo &amp;email</translation>
 <translation id="8386903983509584791">Scansione completata</translation>
 <translation id="8389492867173948260">Permetti a questa estensione di leggere e modificare tutti i dati relativi ai siti web che hai visitato:</translation>
@@ -4919,6 +4951,7 @@
 <translation id="8557930019681227453">Manifest</translation>
 <translation id="8559694214572302298">Image Decoder</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Continua a leggere</translation>
 <translation id="8565650234829130278">Hai tentato di eseguire il downgrade dell'applicazione.</translation>
 <translation id="8569002732135253578">Stampa di <ph name="DOCUMENT_NAME" /> in corso</translation>
 <translation id="8569682776816196752">Nessuna destinazione trovata</translation>
@@ -4959,7 +4992,6 @@
 <translation id="8639047128869322042">Controllo della presenza di software dannoso...</translation>
 <translation id="8639963783467694461">Impostazioni di Compilazione automatica</translation>
 <translation id="8642171459927087831">Token di accesso</translation>
-<translation id="8642267168767642381">Hai spostato il dito troppo lentamente</translation>
 <translation id="8642947597466641025">Ingrandisci le dimensioni del testo</translation>
 <translation id="8643418457919840804">Per continuare, scegli un'opzione:</translation>
 <translation id="8645354835496065562">Continua a consentire l'accesso ai sensori</translation>
@@ -4974,6 +5006,7 @@
 <translation id="8655295600908251630">Canale</translation>
 <translation id="8655319619291175901">Spiacenti, qualcosa è andato storto.</translation>
 <translation id="8655972064210167941">Accesso non riuscito perché non è stato possibile verificare la password. Contatta l'amministratore o riprova.</translation>
+<translation id="8656619792520327915">Aggiungi un altro token di sicurezza Bluetooth</translation>
 <translation id="8656768832129462377">Non verificare</translation>
 <translation id="8658595122208653918">Cambia opzioni stampante...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> condivide l'audio e il tuo schermo con <ph name="TAB_NAME" />.</translation>
@@ -5096,6 +5129,7 @@
 <translation id="8814687660896548945">Attendi, è in corso la scansione dell'archivio...</translation>
 <translation id="881799181680267069">Nascondi altre</translation>
 <translation id="8818152010000655963">Sfondo</translation>
+<translation id="8818958672113348984">Verifica tramite telefono</translation>
 <translation id="8820817407110198400">Preferiti</translation>
 <translation id="8821045908425223359">Configura automaticamente indirizzo IP</translation>
 <translation id="882204272221080310">Aggiorna il firmware per maggiore sicurezza.</translation>
@@ -5126,11 +5160,13 @@
 <translation id="8872155268274985541">È stato trovato un file manifest di aggiornamento esterno delle app kiosk non valido. Impossibile aggiornare l'app kiosk. Rimuovi la chiavetta USB.</translation>
 <translation id="8874184842967597500">Non connessa</translation>
 <translation id="8876215549894133151">Formato:</translation>
+<translation id="8876307312329369159">Questa impostazione non può essere modificata in una sessione demo.</translation>
 <translation id="8876309039915144086">Genera password...</translation>
 <translation id="8877448029301136595">[directory principale]</translation>
 <translation id="8879284080359814990">Mostra come &amp;scheda</translation>
 <translation id="8883847527783433352">Sincronizza con un altro account</translation>
 <translation id="8885197664446363138">Smart Lock non disponibile</translation>
+<translation id="88870264962436283">Usa Touch ID con <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Colore:</translation>
 <translation id="8890516388109605451">Fonti</translation>
 <translation id="8892168913673237979">Finito.</translation>
@@ -5151,6 +5187,7 @@
 <translation id="8915370057835397490">Caricamento suggerimento</translation>
 <translation id="8916476537757519021">Frame secondario modalità di navigazione in incognito: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Accedi e attiva la sincronizzazione per trovare tutte le tue password su tutti i dispositivi.</translation>
+<translation id="8921366488406707015">Verifica del token di sicurezza…</translation>
 <translation id="8922013791253848639">Consenti sempre gli annunci su questo sito</translation>
 <translation id="8925458182817574960">&amp;Impostazioni</translation>
 <translation id="8926389886865778422">Non visualizzare più questo avviso</translation>
@@ -5259,6 +5296,7 @@
 <translation id="9066782832737749352">Sintesi vocale</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> ti consente di accedere automaticamente alle app e ai siti idonei con le password salvate.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Accoppia il tuo token a questo dispositivo per poterlo utilizzare per accedere al tuo account.</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Mouse USB collegato</translation>
 <translation id="9076523132036239772">Spiacenti, impossibile verificare l'indirizzo email o la password. Prova a collegarti a una rete prima.</translation>
@@ -5320,7 +5358,6 @@
 <translation id="916607977885256133">Picture in picture</translation>
 <translation id="9169496697824289689">Visualizza scorciatoie da tastiera</translation>
 <translation id="9169931577761441333">Aggiungi <ph name="APP_NAME" /> alla schermata Home</translation>
-<translation id="9170397650136757332">Ora muovi leggermente il dito per acquisire tutte le varie parti dell'impronta digitale</translation>
 <translation id="9170848237812810038">&amp;Annulla</translation>
 <translation id="9170884462774788842">Un altro programma sul computer ha aggiunto un tema che potrebbe modificare il funzionamento di Chrome.</translation>
 <translation id="9173995187295789444">Ricerca di dispositivi Bluetooth...</translation>
@@ -5384,6 +5421,7 @@
 <translation id="971774202801778802">Aggiungi l'URL ai segnalibri</translation>
 <translation id="973473557718930265">Esci</translation>
 <translation id="974555521953189084">Inserisci la passphrase per avviare la sincronizzazione</translation>
+<translation id="977640333593638907">Per usare la maggior parte dei token basta premere il pulsante</translation>
 <translation id="981121421437150478">Offline</translation>
 <translation id="983511809958454316">Questa funzione non è supportata in realtà virtuale</translation>
 <translation id="984275831282074731">Metodi di pagamento</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index e666720f..d17ef1f 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">שימוש בסינכרון ובכל השירותים</translation>
 <translation id="1272079795634619415">הפסק</translation>
-<translation id="1272242203003205253">‏שותפים של Google עובדים עם ה-Assistant כדי לעזור לך</translation>
 <translation id="1272978324304772054">חשבון משתמש זה אינו שייך לדומיין שאליו רשום המכשיר. אם ברצונך להירשם לדומיין אחר, ראשית עליך לבצע שחזור מכשיר.</translation>
 <translation id="1274977772557788323">‏הגדרות אחסון של Adobe Flash Player</translation>
 <translation id="1274997165432133392">‏קובצי Cookie ונתוני אתר נוספים</translation>
@@ -414,7 +413,6 @@
 <translation id="161460670679785907">לא ניתן לזהות את הטלפון שלך</translation>
 <translation id="1616206807336925449">אין צורך בהרשאות מיוחדות כדי להשתמש בתוסף זה.</translation>
 <translation id="1616298854599875024">לא ניתן לייבא את התוסף "<ph name="IMPORT_NAME" />" כי הוא לא מודול משותף</translation>
-<translation id="161707228174452095">טביעת האצבע נוספה.</translation>
 <translation id="1618268899808219593">מרכז עזרה</translation>
 <translation id="162035744160882748">‏הפעלת סינכרון, התאמה אישית ושירותים אחרים של Google</translation>
 <translation id="1620510694547887537">מצלמה</translation>
@@ -692,7 +690,6 @@
 <translation id="2028997212275086731">‏ארכיון RAR</translation>
 <translation id="2034346955588403444">‏הוסף עוד רשת Wi-Fi</translation>
 <translation id="203574396658008164">הפעל רישום הערות ממסך הנעילה</translation>
-<translation id="2039623879703305659">הזזת את האצבע מהר מדי</translation>
 <translation id="2040460856718599782">אופס! משהו השתבש במהלך ניסיון האימות שלך. בדוק שוב את פרטי הכניסה שלך ונסה שוב.</translation>
 <translation id="2043818754674261542">המרחק הדרוש לביטול הנעילה של <ph name="DEVICE_TYPE" /> באמצעות הטלפון</translation>
 <translation id="204497730941176055">‏שם תבנית אישור של Microsoft</translation>
@@ -736,7 +733,6 @@
 <translation id="2099686503067610784">למחוק את אישור השרת "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">כניסה אוטומטית</translation>
 <translation id="2101225219012730419">גרסה:</translation>
-<translation id="2107494551712864447">הוספה של טביעת אצבע</translation>
 <translation id="2112877397266219826">הפעל את בקר המגע שלך כדי להגדיר אותי</translation>
 <translation id="21133533946938348">הצמד כרטיסייה</translation>
 <translation id="2113479184312716848">פתח &amp;קובץ...</translation>
@@ -1015,7 +1011,6 @@
 <translation id="2526590354069164005">שולחן עבודה</translation>
 <translation id="2526619973349913024">בדוק אם קיים עדכון</translation>
 <translation id="2527167509808613699">חיבור מכל סוג שהוא</translation>
-<translation id="2532026602297547439">החיישן מלוכלך</translation>
 <translation id="2532589005999780174">מצב ניגודיות גבוהה</translation>
 <translation id="253434972992662860">&amp;השהה</translation>
 <translation id="2534460670861217804">‏שרת proxy של Secure HTTP</translation>
@@ -1374,7 +1369,6 @@
 <translation id="3057861065630527966">גבה את התמונות והסרטונים</translation>
 <translation id="3060379269883947824">הפעלת הקראה</translation>
 <translation id="3061707000357573562">שירות תיקון</translation>
-<translation id="3064410671692449875">אין מספיק נתונים</translation>
 <translation id="3065041951436100775">משוב על כרטיסייה שנסגרה.</translation>
 <translation id="3067198179881736288">להתקין את האפליקציה?</translation>
 <translation id="3067198360141518313">הרץ פלאגין זה</translation>
@@ -2262,7 +2256,6 @@
 <translation id="4480590691557335796">‏Chrome יכול לאתר תוכנות מזיקות במחשב ולהסיר אותן</translation>
 <translation id="4481530544597605423">מכשירים לא מותאמים</translation>
 <translation id="4482194545587547824">‏Google עשויה להשתמש בהיסטוריית הגלישה שלך כדי להתאים אישית את החיפוש ושירותים אחרים של Google</translation>
-<translation id="4493287891836751813">‏היכרות עם Google Assistant</translation>
 <translation id="4495419450179050807">אל תציג בדף זה</translation>
 <translation id="4499718683476608392">התכונה 'מילוי אוטומטי' של כרטיסי אשראי יכולה למלא טפסים בקליק אחד</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> קרס</translation>
@@ -2317,7 +2310,6 @@
 <translation id="4572659312570518089">האימות בוטל בעת ההתחברות ל-"<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">קובץ <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">עוד...</translation>
-<translation id="4576537685267142337">הרם את האצבע ואז גע שוב בחיישן</translation>
 <translation id="4576541033847873020">‏התאמת מכשיר Bluetooth</translation>
 <translation id="4579581181964204535">לא ניתן להעביר את <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">האם אתה בטוח שברצונך למחוק את פריטי $1 אלה?</translation>
@@ -2562,7 +2554,6 @@
 <translation id="4941627891654116707">גודל גופן</translation>
 <translation id="494286511941020793">‏עזרה של תצורת שרת Proxy</translation>
 <translation id="4945444280533270988">נעילה חכמה מופעלת</translation>
-<translation id="494660967831069720">נתונים חלקיים</translation>
 <translation id="4953689047182316270">להגיב לאירועי נגישות</translation>
 <translation id="4953808748584563296">דמות ברירת מחדל כתומה</translation>
 <translation id="4955814292505481804">שנתי</translation>
@@ -3520,7 +3511,6 @@
 <translation id="6384275966486438344">שנה את הגדרות החיפוש שלך ל: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">‏אתרים יכולים לשמור ולקרוא נתונים של קובצי cookie</translation>
 <translation id="6388429472088318283">חיפוש שפות</translation>
-<translation id="6388771388956873507">מצא את חיישן טביעות האצבע במכשיר וגע בו עם האצבע</translation>
 <translation id="6390799748543157332">‏הדפים שאתה מציג בחלון זה לא יופיעו בהיסטוריית הדפדפן, ולאחר שתסגור את כל חלונות האורח הפתוחים, לא יותירו במחשב עקבות, כמו קובצי Cookie. עם זאת, כל הקבצים שאתה מוריד יישמרו.</translation>
 <translation id="6390994422085833176">בדיקת תכונות ההתאמה האישית והסינכרון אחרי ההגדרה</translation>
 <translation id="6395423953133416962">שלח <ph name="BEGIN_LINK1" />פרטי מערכת<ph name="END_LINK1" /> ו<ph name="BEGIN_LINK2" />ערכים<ph name="END_LINK2" /></translation>
@@ -4123,7 +4113,6 @@
 <translation id="7309257895202129721">הצג &amp;פקדים</translation>
 <translation id="7310598146671372464">‏ההתחברות נכשלה. השרת לא תומך בסוגי הצפנת Kerberos שצוינו. צריך לפנות אל מנהל המערכת.</translation>
 <translation id="7311079019872751559">גישה לפלאגין ללא ארגז חול</translation>
-<translation id="7311891583377621132">הזז קצת את האצבע כדי לסרוק חלק אחר של טביעת האצבע</translation>
 <translation id="7317680720589234980">אפשרויות לנעילת מסך וכניסה</translation>
 <translation id="7321545336522791733">השרת אינו נגיש</translation>
 <translation id="7324297612904500502">פורום ביטא</translation>
@@ -4960,7 +4949,6 @@
 <translation id="8639047128869322042">מחפש תוכנות מזיקות...</translation>
 <translation id="8639963783467694461">הגדרות מילוי אוטומטי</translation>
 <translation id="8642171459927087831">אסימון גישה</translation>
-<translation id="8642267168767642381">הזזת את האצבע לאט מדי</translation>
 <translation id="8642947597466641025">הגדל טקסט</translation>
 <translation id="8643418457919840804">כדי להמשיך יש לבחור אפשרות:</translation>
 <translation id="8645354835496065562">המשך התרת הגישה לחיישנים</translation>
@@ -5321,7 +5309,6 @@
 <translation id="916607977885256133">תמונה בתוך תמונה</translation>
 <translation id="9169496697824289689">הצג מקשי קיצור</translation>
 <translation id="9169931577761441333">הוספה של <ph name="APP_NAME" /> למסך דף הבית</translation>
-<translation id="9170397650136757332">עכשיו הזז מעט את האצבע כדי שהחיישן יזהה את כל חלקי טביעת האצבע</translation>
 <translation id="9170848237812810038">&amp;ביטול</translation>
 <translation id="9170884462774788842">‏תכנית אחרת במחשב שלך הוסיפה עיצוב שעשוי לשנות את אופן הפעולה של Chrome.</translation>
 <translation id="9173995187295789444">‏מחפש מכשירי Bluetooth...</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 1cbb6a5..cc12f89 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">シェルフ アイテム 5</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>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16 倍</translation>
 <translation id="127138278192656016">同期とすべてのサービスを使用する</translation>
 <translation id="1272079795634619415">中止</translation>
-<translation id="1272242203003205253">Google のパートナーがアシスタントと連携してあなたをサポートします</translation>
 <translation id="1272978324304772054">このユーザー アカウントは、デバイスが登録されているドメインに属していません。別のドメインに登録する場合は、まず、デバイス リカバリ操作を行う必要があります。</translation>
 <translation id="1274977772557788323">Adobe Flash Player のストレージ設定</translation>
 <translation id="1274997165432133392">Cookie と他のサイト データ</translation>
@@ -332,6 +332,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>
@@ -367,6 +368,7 @@
 <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">自動キオスク モード</translation>
@@ -383,6 +385,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>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">スマートフォンが見つかりません</translation>
 <translation id="1616206807336925449">この拡張機能は特別な権限を必要としません。</translation>
 <translation id="1616298854599875024">拡張機能「<ph name="IMPORT_NAME" />」は、共有モジュールではないためインポートできません</translation>
-<translation id="161707228174452095">指紋の登録完了</translation>
 <translation id="1618268899808219593">ヘルプセンター(&amp;E)</translation>
 <translation id="162035744160882748">同期、カスタマイズ、その他の Google サービスを有効にする</translation>
 <translation id="1620510694547887537">カメラ</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">RAR アーカイブ</translation>
 <translation id="2034346955588403444">他の Wi-Fi ネットワークを追加</translation>
 <translation id="203574396658008164">ロック画面からメモを取れるようにする</translation>
-<translation id="2039623879703305659">指の動きが速すぎました</translation>
 <translation id="2040460856718599782">ユーザー認証時に問題が発生しました。ログイン情報をお確かめのうえ、もう一度お試しください。</translation>
 <translation id="2043818754674261542">この <ph name="DEVICE_TYPE" /> のロックを解除するには、スマートフォンを少し離してください</translation>
 <translation id="204497730941176055">Microsoft 証明書テンプレート名</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">サーバー証明書「<ph name="CERTIFICATE_NAME" />」を削除しますか?</translation>
 <translation id="2100273922101894616">自動ログイン</translation>
 <translation id="2101225219012730419">バージョン:</translation>
-<translation id="2107494551712864447">指紋の登録</translation>
 <translation id="2112877397266219826">設定するにはタッチ コントローラをオンにしてください</translation>
 <translation id="21133533946938348">タブを固定</translation>
 <translation id="2113479184312716848">ファイルを開く(&amp;F)...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">デスクトップ</translation>
 <translation id="2526619973349913024">アップデートを確認</translation>
 <translation id="2527167509808613699">あらゆる種類の接続</translation>
-<translation id="2532026602297547439">センサーが汚れています</translation>
 <translation id="2532589005999780174">ハイコントラスト モード</translation>
 <translation id="253434972992662860">一時停止(&amp;P)</translation>
 <translation id="2534460670861217804">保護された HTTP プロキシ</translation>
@@ -1197,6 +1196,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>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">写真や動画をバックアップします</translation>
 <translation id="3060379269883947824">「選択して読み上げ」を有効にする</translation>
 <translation id="3061707000357573562">サービスへのパッチの適用</translation>
-<translation id="3064410671692449875">データが不足しています</translation>
 <translation id="3065041951436100775">タブの強制終了に関するフィードバック。</translation>
 <translation id="3067198179881736288">アプリをインストールしますか?</translation>
 <translation id="3067198360141518313">このプラグインを実行する</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">新しいタブ(&amp;T)</translation>
 <translation id="3288047731229977326">デベロッパー モードで実行される拡張機能はパソコンにダメージを与える恐れがあります。デベロッパーでない場合は、安全のため、デベロッパー モードで実行されているこれらの拡張機能を無効にしてください。</translation>
 <translation id="3289856944988573801">アップデートの有無を確認するには、イーサネットまたは Wi-Fi を使用してください。</translation>
+<translation id="3292421191230118801">Chromebook でモバイル接続を使ってサイトの閲覧を再開します</translation>
 <translation id="32939749466444286">Linux コンテナを起動できませんでした。もう一度お試しください。</translation>
 <translation id="3294437725009624529">ゲスト</translation>
 <translation id="329838636886466101">修復</translation>
@@ -1552,6 +1552,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">設定が完了しました。ハングアウト Meet を使用できます</translation>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">検索エンジンが <ph name="URL" /> に変更されました。</translation>
 <translation id="3563432852173030730">キオスク アプリケーションをダウンロードできませんでした。</translation>
 <translation id="3564334271939054422">ご利用の Wi-Fi(<ph name="NETWORK_ID" />)では、ログインページへのアクセスが必要になる可能性があります。</translation>
+<translation id="3564848315152754834">USB セキュリティ キー</translation>
 <translation id="3566721612727112615">サイトが追加されていません</translation>
 <translation id="3569382839528428029"><ph name="APP_NAME" /> と画面を共有しますか?</translation>
 <translation id="3570985609317741174">ウェブ コンテンツ</translation>
@@ -1741,6 +1743,7 @@
 <translation id="3627588569887975815">シークレット ウィンドウで開く(&amp;G)</translation>
 <translation id="3627671146180677314">Netscape 証明書更新時間</translation>
 <translation id="3627879631695760395">「<ph name="APP" />」をインストールしています...</translation>
+<translation id="3630132874740063857">スマートフォン</translation>
 <translation id="3630995161997703415">このサイトをシェルフに追加するといつでも使えるようになります</translation>
 <translation id="3635030235490426869">タブ 1</translation>
 <translation id="3636096452488277381">こんにちは、<ph name="USER_GIVEN_NAME" /> さん。</translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">拡張機能アイコン</translation>
 <translation id="3665589677786828986">設定の一部が別のプログラムによって変更されていたため、元のデフォルト設定に戻しました。</translation>
 <translation id="3668570675727296296">言語設定</translation>
+<translation id="3668801437375206837">Bluetooth の問題の診断に向けて、Google 社員はフィードバック レポートに追加の Bluetooth ログを含めることができます。このオプションのチェックボックスがオンになっている場合、レポートには現在のセッションの btsnoop ログと HCI ログが含められます。その際、個人を特定できる情報は可能な限り削除されます。これらのログへのアクセスは、Listnr での Chrome OS プロダクト グループのマネージャーのみに制限されます。ログは 90 日経過後に消去されます。</translation>
 <translation id="3668823961463113931">ハンドラ</translation>
 <translation id="3670229581627177274">Bluetooth を ON にする</translation>
 <translation id="3672681487849735243">出荷時のエラーが見つかりました</translation>
@@ -1780,6 +1784,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>
@@ -1803,6 +1808,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">International Step-UP 対応の SSL サーバー</translation>
 <translation id="3735740477244556633">並べ替え</translation>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">ハングアウト 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>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">デバイスを Powerwash でリセットするには再起動が必要です。</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">ストアで見る</translation>
+<translation id="4058647953897694817">Bluetooth を使って確認</translation>
 <translation id="4058720513957747556">AppSocket(TCP/IP)</translation>
 <translation id="4058793769387728514">書類を今すぐチェック</translation>
 <translation id="406070391919917862">バックグラウンド アプリ</translation>
@@ -2041,6 +2049,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>
@@ -2140,6 +2149,7 @@
 <translation id="4250229828105606438">スクリーンショット</translation>
 <translation id="4250680216510889253">いいえ</translation>
 <translation id="4252852543720145436">保護されているコンテンツの識別子</translation>
+<translation id="4252899949534773101">Bluetooth が無効です</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - タブのコンテンツが共有されています</translation>
 <translation id="4254813446494774748">翻訳言語:</translation>
 <translation id="425573743389990240">バッテリーの放電率(ワット、負の値の場合は充電中)</translation>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">Chrome で、パソコン上の有害なソフトウェアを探して削除することができます</translation>
 <translation id="4481530544597605423">ペア設定されていないデバイス</translation>
 <translation id="4482194545587547824">検索やその他の Google サービスをカスタマイズする目的で、Google が閲覧履歴を使用することがあります</translation>
-<translation id="4493287891836751813">いつでもどこでも。あなただけのGoogleアシスタント</translation>
 <translation id="4495419450179050807">このページに表示しない</translation>
+<translation id="449938344715680828">終了するには |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />|+|<ph name="ACCELERATOR3" />| キーを押してください</translation>
 <translation id="4499718683476608392">フォームにクレジット カード情報をワンクリックで自動入力できるようにします</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> で問題が発生しました</translation>
 <translation id="450099669180426158">感嘆符アイコン</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">「<ph name="DEVICE_NAME" />」への接続中に、認証がキャンセルされました。</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ファイル</translation>
 <translation id="457386861538956877">その他...</translation>
-<translation id="4576537685267142337">いったん指を上げて、センサーに置き直してください</translation>
 <translation id="4576541033847873020">Bluetooth デバイスのペア設定</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> をキャストできません。</translation>
 <translation id="4580526846085481512">$1 項目を削除してもよろしいですか?</translation>
@@ -2343,6 +2352,7 @@
 <translation id="4611114513649582138">データ接続が可能です</translation>
 <translation id="4613271546271159013">拡張機能によって、新しいタブを開いたときに表示されるページが変更されました。</translation>
 <translation id="4615586811063744755">Cookie が選択されていません</translation>
+<translation id="4615618657481886098">このキーは登録済みです。再び登録する必要はありません。</translation>
 <translation id="4617270414136722281">拡張機能のオプション</translation>
 <translation id="4619615317237390068">他のデバイスからのタブ</translation>
 <translation id="4620809267248568679">この設定は拡張機能によって行われました。</translation>
@@ -2452,6 +2462,7 @@
 <translation id="4790972063719531840">診断と使用状況のデータを Google に自動送信する</translation>
 <translation id="4792711294155034829">問題の報告(&amp;R)...</translation>
 <translation id="479536056609751218">ウェブページ、HTML のみ</translation>
+<translation id="4798236378408895261"><ph name="BEGIN_LINK" />Bluetooth ログ<ph name="END_LINK" />を添付する(Google 内部)</translation>
 <translation id="479989351350248267">検索</translation>
 <translation id="4801448226354548035">アカウントを非表示にする</translation>
 <translation id="4801512016965057443">モバイル データ ローミングを許可する</translation>
@@ -2518,6 +2529,7 @@
 <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;T)</translation>
 <translation id="4883898390143004266">アプリで現在地を特定しやすいように、Google の位置情報サービスを使用して、より高い精度の位置情報をアプリに提供します。Google は位置情報を定期的に収集し、このデータを匿名の方法で活用して位置情報の精度や位置情報を利用したサービスを改善します。<ph name="BEGIN_LINK1" />詳細<ph name="END_LINK1" /></translation>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">フォントサイズ</translation>
 <translation id="494286511941020793">プロキシ設定ヘルプ</translation>
 <translation id="4945444280533270988">Smart Lock がオンになっています</translation>
-<translation id="494660967831069720">部分的なデータ</translation>
 <translation id="4953689047182316270">ユーザー補助機能のイベントへの応答</translation>
 <translation id="4953808748584563296">デフォルトのオレンジのアバター</translation>
 <translation id="4955814292505481804">年間</translation>
@@ -2991,6 +3002,7 @@
 <translation id="55601339223879446">ディスプレイ内のデスクトップの境界線を調整します</translation>
 <translation id="5562781907504170924">このタブは Bluetooth デバイスに接続しています。</translation>
 <translation id="5563234215388768762">Google で検索または URL を入力</translation>
+<translation id="5567950944308676169">セキュリティ キーを差し込み、有効にします</translation>
 <translation id="5567989639534621706">アプリケーション キャッシュ</translation>
 <translation id="5568069709869097550">ログインできない</translation>
 <translation id="5568144734023334204">Android のストレージ</translation>
@@ -3237,6 +3249,7 @@
 <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="5941153596444580863">ユーザーを追加...</translation>
@@ -3273,6 +3286,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>
@@ -3283,6 +3297,7 @@
 <translation id="6020431688553761150">このリソースへのアクセスがサーバーで認証されませんでした。</translation>
 <translation id="602251597322198729">このサイトは複数のファイルをダウンロードしようとしています。許可しますか?</translation>
 <translation id="6022526133015258832">全画面表示</translation>
+<translation id="6022705094403139349">セキュリティ キーをペア設定する準備はできましたか?</translation>
 <translation id="6023643151125006053">この端末(SN: <ph name="SERIAL_NUMBER" />)は <ph name="SAML_DOMAIN" /> の管理者によってロックされています。</translation>
 <translation id="6025215716629925253">スタック トレース</translation>
 <translation id="6026047032548434446">アプリをインストールしますか?</translation>
@@ -3346,6 +3361,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>
@@ -3391,6 +3407,7 @@
 <translation id="6169666352732958425">デスクトップをキャストできません。</translation>
 <translation id="6171948306033499786">印刷を一時停止</translation>
 <translation id="6175314957787328458">Microsoft ドメイン GUID</translation>
+<translation id="6176043333338857209">セキュリティ キーとの通信のため、Bluetooth が一時的にオンになります</translation>
 <translation id="6178664161104547336">証明書の選択</translation>
 <translation id="6181431612547969857">ダウンロードがブロックされました</translation>
 <translation id="6185132558746749656">デバイスの位置情報</translation>
@@ -3478,6 +3495,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>
@@ -3522,7 +3540,6 @@
 <translation id="6384275966486438344">検索設定を次に変更します: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">サイトでは Cookie データの保存と読み込みが可能です</translation>
 <translation id="6388429472088318283">言語を検索</translation>
-<translation id="6388771388956873507">端末の指紋認証センサーに指を置きます</translation>
 <translation id="6390799748543157332">このウィンドウで開いたページはブラウザの履歴に記録されません。また、開いているゲスト ウィンドウをすべて閉じると、Cookie などのデータはパソコンから消去されます。ただし、ダウンロードしたファイルは保持されます。</translation>
 <translation id="6390994422085833176">設定の完了後、同期とカスタマイズの機能を確認する</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />システム情報<ph name="END_LINK1" />と<ph name="BEGIN_LINK2" />指標データ<ph name="END_LINK2" />を送信する</translation>
@@ -3534,6 +3551,7 @@
 <translation id="6399774419735315745">スパイ</translation>
 <translation id="6401445054534215853">シェルフ アイテム 1</translation>
 <translation id="6404511346730675251">ブックマークを編集</translation>
+<translation id="6405510437656969977">PIN を入力する準備ができたら続行してください</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>
@@ -3652,6 +3670,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 ライフタイム署名</translation>
@@ -3701,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>
@@ -3776,6 +3796,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>
@@ -3811,6 +3832,7 @@
 <translation id="6823506025919456619">デバイスを見るには Chrome にログインする必要があります</translation>
 <translation id="6824564591481349393">メール アドレスをコピー(&amp;E)</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>
@@ -3844,6 +3866,7 @@
 <translation id="6880587130513028875">このページの画像はブロックされました。</translation>
 <translation id="6883319974225028188">デバイスの設定を保存できませんでした。</translation>
 <translation id="6885771755599377173">システム情報のプレビュー</translation>
+<translation id="6886476658664859389">NFC セキュリティ キー</translation>
 <translation id="6886871292305414135">新しいタブで開く(&amp;T)</translation>
 <translation id="6892812721183419409"><ph name="USER" /> としてリンクを開く</translation>
 <translation id="6896758677409633944">コピー</translation>
@@ -4009,6 +4032,7 @@
 <translation id="713122686776214250">ページを追加(&amp;G)...</translation>
 <translation id="7133578150266914903">管理者がこの端末をロールバックしています(<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">テキストを縮小する</translation>
+<translation id="7135729336746831607">Bluetooth をオンにしますか?</translation>
 <translation id="7136694880210472378">デフォルトに設定</translation>
 <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> へようこそ</translation>
 <translation id="7136993520339022828">エラーが発生しました。別の画像を選択して、もう一度お試しください。</translation>
@@ -4054,6 +4078,7 @@
 <translation id="7201118060536064622">「<ph name="DELETED_ITEM_NAME" />」が削除されました</translation>
 <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> をダウンロードしています...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{ページを離れる}other{ページを離れる}}</translation>
+<translation id="721467499098558573">セキュリティ キーのボタンを 5 秒以上押し続けます</translation>
 <translation id="7216409898977639127">モバイル プロバイダ</translation>
 <translation id="7216595297012131718">言語を希望の順序に並べ替えます</translation>
 <translation id="7220019174139618249">パスワードを「<ph name="FOLDER" />」にエクスポートできません</translation>
@@ -4089,6 +4114,7 @@
 <translation id="7256710573727326513">タブで開く</translation>
 <translation id="725758059478686223">印刷サービス</translation>
 <translation id="7257666756905341374">コピー&ペーストするデータの読み取り</translation>
+<translation id="7260764918845374269">セキュリティ キーはペア設定モードのときに表示されます。キーのボタンを 5 秒以上押し続けてください。</translation>
 <translation id="7262004276116528033">このログイン サービスは <ph name="SAML_DOMAIN" /> でホストされています</translation>
 <translation id="7268365133021434339">複数のタブを閉じる</translation>
 <translation id="7268659760406822741">利用可能なサービス</translation>
@@ -4125,7 +4151,6 @@
 <translation id="7309257895202129721">コントロールを表示(&amp;C)</translation>
 <translation id="7310598146671372464">ログインできませんでした。指定した Kerberos 暗号化タイプがサーバーでサポートされていません。管理者にお問い合わせください。</translation>
 <translation id="7311079019872751559">サンドボックスの無効化プラグインのアクセス</translation>
-<translation id="7311891583377621132">指紋の別の部分を登録するため、指を少し移動してください</translation>
 <translation id="7317680720589234980">画面ロックとログインのオプション</translation>
 <translation id="7321545336522791733">サーバーにアクセスできません</translation>
 <translation id="7324297612904500502">ベータ版フォーラム</translation>
@@ -4208,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="7473753388963818366"><ph name="DEVICE_TYPE" /> の設定を始めましょう</translation>
@@ -4257,6 +4283,7 @@
 <translation id="7531779363494549572">[設定] &gt; [アプリと通知] &gt; [通知] の順に選択します。</translation>
 <translation id="7536709149194614609">端末を再起動してもう一度お試しください。</translation>
 <translation id="7537601449003285327">タスクバーにピン留めする</translation>
+<translation id="7539856059004947393">Bluetooth セキュリティ キー</translation>
 <translation id="7540972813190816353">更新の確認中にエラーが発生しました: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">この <ph name="IDS_SHORT_PRODUCT_NAME" /> 搭載デバイスでデバッグ機能を有効にします</translation>
 <translation id="7544853251252956727">シャッフル</translation>
@@ -4359,6 +4386,7 @@
 <translation id="7709152031285164251">失敗 - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">キャスト(&amp;C)...</translation>
 <translation id="7711920809702896782">画像情報</translation>
+<translation id="7712740978240882272">スマートフォンで Chromebook のロックを解除します。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">不明な拡張機能(ID「<ph name="EXTENSION_ID" />」)</translation>
 <translation id="7714307061282548371"><ph name="DOMAIN" /> からの Cookie が許可されました</translation>
 <translation id="7714464543167945231">証明書</translation>
@@ -4574,6 +4602,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>
@@ -4706,6 +4735,7 @@
 <translation id="8185331656081929126">ネットワーク上で新しいプリンタが検出されたときに通知を表示する</translation>
 <translation id="8186609076106987817">お探しのファイルはサーバーにはありません。</translation>
 <translation id="8188120771410500975">テキスト フィールドのスペルチェック(&amp;C)</translation>
+<translation id="8188389033983459049">続行するには、端末の設定で Bluetooth をオンにしてください</translation>
 <translation id="8190193592390505034"><ph name="PROVIDER_NAME" /> に接続中</translation>
 <translation id="8191230140820435481">アプリ、拡張機能、テーマを管理する</translation>
 <translation id="8191453843330043793">V8 プロキシ リゾルバ</translation>
@@ -4800,6 +4830,7 @@
 <translation id="8353683614194668312">次の権限にアクセス可能:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">ページを復元しますか?</translation>
+<translation id="8362993567435070757">キーの背面に記載されている 6 桁の PIN を確認します</translation>
 <translation id="8363095875018065315">Stable</translation>
 <translation id="8363142353806532503">マイクがブロックされています</translation>
 <translation id="8366396658833131068">ネットワーク接続が復元されました。キオスク アプリを起動するには、別のネットワークを選択するか、下の [続行] ボタンを押してください。</translation>
@@ -4808,6 +4839,7 @@
 <translation id="8371695176452482769">お話しください</translation>
 <translation id="8372369524088641025">WEP キーが正しくありません</translation>
 <translation id="8373553483208508744">タブをミュート</translation>
+<translation id="8379878387931047019">この端末では、このウェブサイトからリクエストされているセキュリティ キーのタイプはサポートされていません。</translation>
 <translation id="8382913212082956454">メール アドレスをコピー(&amp;E)</translation>
 <translation id="8386903983509584791">スキャンが完了しました</translation>
 <translation id="8389492867173948260">アクセスしたウェブサイト上にある自分の全データの読み取りと変更をこの拡張機能に許可します。</translation>
@@ -4926,6 +4958,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>
@@ -4966,7 +4999,6 @@
 <translation id="8639047128869322042">有害なソフトウェアを確認しています...</translation>
 <translation id="8639963783467694461">自動入力の設定</translation>
 <translation id="8642171459927087831">アクセス トークン</translation>
-<translation id="8642267168767642381">指の動きが遅すぎました</translation>
 <translation id="8642947597466641025">テキストを拡大する</translation>
 <translation id="8643418457919840804">続行するには次のいずれかを選択してください。</translation>
 <translation id="8645354835496065562">センサーへのアクセスを引き続き許可する</translation>
@@ -4981,6 +5013,7 @@
 <translation id="8655295600908251630">チャンネル</translation>
 <translation id="8655319619291175901">エラーが発生しました。</translation>
 <translation id="8655972064210167941">パスワードを確認できなかったためログインできませんでした。管理者に問い合わせるか、もう一度お試しください。</translation>
+<translation id="8656619792520327915">別の Bluetooth セキュリティ キーを追加</translation>
 <translation id="8656768832129462377">確認しない</translation>
 <translation id="8658595122208653918">プリンタ オプションを変更...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> が <ph name="TAB_NAME" /> の画面と音声を共有しています。</translation>
@@ -5103,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>
@@ -5133,11 +5167,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;S)</translation>
 <translation id="8883847527783433352">別のアカウントに同期</translation>
 <translation id="8885197664446363138">Smart Lock は使用できません</translation>
+<translation id="88870264962436283">「<ph name="APP_NAME" />」で Touch ID を使用</translation>
 <translation id="8888432776533519951">色:</translation>
 <translation id="8890516388109605451">ソース</translation>
 <translation id="8892168913673237979">設定完了。</translation>
@@ -5158,6 +5194,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;S)</translation>
 <translation id="8926389886865778422">再表示させない</translation>
@@ -5266,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">Bluetooth</translation>
 <translation id="9074836595010225693">USB マウスが接続されました</translation>
 <translation id="9076523132036239772">メール アドレスまたはパスワードを確認できませんでした。まずネットワークに接続してください。</translation>
@@ -5327,7 +5365,6 @@
 <translation id="916607977885256133">ピクチャー イン ピクチャー</translation>
 <translation id="9169496697824289689">キーボード ショートカットの表示</translation>
 <translation id="9169931577761441333">ホーム画面に <ph name="APP_NAME" /> を追加</translation>
-<translation id="9170397650136757332">指紋のすべての部分を登録するために、指を少しずつ動かします</translation>
 <translation id="9170848237812810038">取消(&amp;U)</translation>
 <translation id="9170884462774788842">パソコン上の別のプログラムにより、Chrome の動作方法を変更する可能性のあるテーマが追加されました。</translation>
 <translation id="9173995187295789444">Bluetooth デバイスをスキャンしています...</translation>
@@ -5391,6 +5428,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_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 05540ded..722e878 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -183,7 +183,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">ಸಿಂಕ್ ಮತ್ತು ಎಲ್ಲಾ ಸೇವೆಗಳನ್ನು ಬಳಸಿ</translation>
 <translation id="1272079795634619415">ನಿಲ್ಲಿಸಿ</translation>
-<translation id="1272242203003205253">ನಿಮಗೆ ಸಹಾಯ ಮಾಡಲು, Google ಪಾಲುದಾರರು ನಿಮ್ಮ ಅಸಿಸ್ಟೆಂಟ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತಾರೆ</translation>
 <translation id="1272978324304772054">ಈ ಬಳಕೆದಾರನ ಖಾತೆಯು ಸಾಧನವು ದಾಖಲಾಗಿರುವ ಡೊಮೇನ್‌ಗೆ ಸಂಬಂಧಿಸಿಲ್ಲ. ನೀವು ವಿಭಿನ್ನ ಡೊಮೆನ್ ಅನ್ನು ದಾಖಲಿಸಲು ಬಯಸುವುದಾದರೆ ನೀವು ಮೊದಲು ಮರುಪ್ರಾಪ್ತಿಯ ಸಾಧನದ ಮೂಲಕ ಹೋಗುವ ಅವಶ್ಯಕತೆ ಇದೆ.</translation>
 <translation id="1274977772557788323">Adobe Flash Player ಸಂಗ್ರಹಣೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="1274997165432133392">ಕುಕೀಗಳು ಮತ್ತು ಇತರ ಡೇಟಾ</translation>
@@ -207,6 +206,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>
@@ -362,6 +362,7 @@
 <translation id="1530838837447122178">ಮೌಸ್ ಮತ್ತು ಟಚ್‌ಪ್ಯಾಡ್ ಸಾಧನ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="1531004739673299060">ಅಪ್ಲಿಕೇಶನ್ ವಿಂಡೋ</translation>
 <translation id="15373452373711364">ದೊಡ್ಡ ಮೌಸ್ ಕರ್ಸರ್</translation>
+<translation id="1538729222189715449">Linux ಫೈಲ್‌ಗಳನ್ನು ತೆರೆಯಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="1540605929960647700">ಡೆಮೊ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="1543284117603151572">Edge ನಿಂದ ಆಮದು ಮಾಡಿಕೊಳ್ಳಲಾಗಿದೆ</translation>
 <translation id="1545177026077493356">ಸ್ವಯಂಚಾಲಿತ ಕಿಯೋಸ್ಕ್ ಮೋಡ್</translation>
@@ -412,7 +413,6 @@
 <translation id="161460670679785907">ನಿಮ್ಮ ಫೋನ್‌ ಅನ್ನು ಪತ್ತೆ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
 <translation id="1616206807336925449">ಈ ವಿಸ್ತರಣೆಗೆ ಯಾವುದೇ ವಿಶೇಷ ಅನುಮತಿಗಳ ಅಗತ್ಯವಿಲ್ಲ.</translation>
 <translation id="1616298854599875024">"<ph name="IMPORT_NAME" />" ವಿಸ್ತರಣೆಯು ಹಂಚಿಕೊಂಡ ಮಾಡ್ಯೂಲ್ ಆಗಿಲ್ಲದಿರುವ ಕಾರಣ ಅದನ್ನು ಆಮದು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
-<translation id="161707228174452095">ಬೆರಳಚ್ಚು ಸೇರಿಸಲಾಗಿದೆ!</translation>
 <translation id="1618268899808219593">ಸ&amp;ಹಾಯ ಕೇಂದ್ರ</translation>
 <translation id="162035744160882748">ಸಿಂಕ್, ವೈಯಕ್ತೀಕರಣ ಮತ್ತು ಇತರ Google ಸೇವೆಗಳನ್ನು ಆನ್ ಮಾಡಿ</translation>
 <translation id="1620510694547887537">ಕ್ಯಾಮರಾ</translation>
@@ -690,7 +690,6 @@
 <translation id="2028997212275086731">RAR ಆರ್ಕೈವ್</translation>
 <translation id="2034346955588403444">ಇತರ ವೈಫೈ ನೆಟ್‌ವರ್ಕ್ ಸೇರಿಸಿ</translation>
 <translation id="203574396658008164">ಲಾಕ್ ಪರದೆಯಿಂದ ಟಿಪ್ಪಣಿ ತೆಗೆದುಕೊಳ್ಳುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
-<translation id="2039623879703305659">ಬೆರಳನ್ನು ತೀರಾ ತ್ವರಿತವಾಗಿ ಸರಿಸಲಾಗಿದೆ</translation>
 <translation id="2040460856718599782">ಓಹ್! ನೀವು ದೃಢೀಕರಿಸುವ ಪ್ರಯತ್ನದಲ್ಲಿರುವಾಗ ಏನೋ ತಪ್ಪು ನಡೆದಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸೈನ್‌-ಇನ್‌ ರುಜುವಾತುಗಳನ್ನು ಎರಡು ಬಾರಿ ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="2043818754674261542">ಈ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಅನ್‌ಲಾಕ್‌ ಮಾಡಲು ಫೋನ್‌ಗೆ ಅಂತರದ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="204497730941176055">Microsoft ಪ್ರಮಾಣಪತ್ರ ಟೆಂಪ್ಲೇಟ್ ಹೆಸರು</translation>
@@ -734,7 +733,6 @@
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಅಳಿಸುವುದೆ?</translation>
 <translation id="2100273922101894616">ಸ್ವಯಂ ಸೈನ್-ಇನ್</translation>
 <translation id="2101225219012730419">ಆವೃತ್ತಿ:</translation>
-<translation id="2107494551712864447">ಬೆರಳಚ್ಚು ಸೇರಿಸಿ</translation>
 <translation id="2112877397266219826">ನನ್ನನ್ನು ಹೊಂದಿಸಲು ನಿಮ್ಮ ಟಚ್ ನಿಯಂತ್ರಕವನ್ನು ಆನ್ ಮಾಡಿ</translation>
 <translation id="21133533946938348">ಪಿನ್ ಟ್ಯಾಬ್</translation>
 <translation id="2113479184312716848">&amp;ಫೈಲ್ ತೆರೆಯಿರಿ...</translation>
@@ -787,6 +785,7 @@
 <translation id="2178098616815594724"><ph name="PEPPER_PLUGIN_NAME" /> ನಲ್ಲಿ ಇರುವ <ph name="PEPPER_PLUGIN_DOMAIN" />, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ಗೆ ಪ್ರವೇಶಿಸಲು ಬಯಸುತ್ತದೆ</translation>
 <translation id="2178614541317717477">CA ಹೊಂದಾಣಿಕೆ</translation>
 <translation id="218070003709087997">ಎಷ್ಟು ಪ್ರತಿಗಳನ್ನು ಮುದ್ರಿಸಬೇಕೆಂದು (1 ರಿಂದ 999) ಸೂಚಿಸಲು ಸಂಖ್ಯೆಯನ್ನು ಬಳಸಿ.</translation>
+<translation id="2184515124301515068">ಯಾವ ಸೈಟ್‌ಗಳು ಧ್ವನಿಯನ್ನು ಪ್ಲೇ ಮಾಡಬೇಕು ಎಂಬುದನ್ನು Chrome ಆಯ್ಕೆ ಮಾಡಲಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="2187895286714876935">ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರದ ಆಮದು ದೋಷ</translation>
 <translation id="2187906491731510095">ವಿಸ್ತರಣೆಗಳನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="2188881192257509750"><ph name="APPLICATION" /> ತೆರೆಯಿರಿ</translation>
@@ -831,6 +830,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>
@@ -871,6 +871,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>
@@ -1010,7 +1011,6 @@
 <translation id="2526590354069164005">ಡೆಸ್ಕ್‌ಟಾಪ್</translation>
 <translation id="2526619973349913024">ಅಪ್‌ಡೇಟ್‌ಗಾಗಿ ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="2527167509808613699">ಯಾವುದೇ ರೀತಿಯ ಸಂಪರ್ಕ</translation>
-<translation id="2532026602297547439">ಸಂವೇದಕ ಕೊಳೆಯಾಗಿದೆ</translation>
 <translation id="2532589005999780174">ಹೆಚ್ಚಿನ ಕಾಂಟ್ರಾಸ್ಟ್ ಮೋಡ್</translation>
 <translation id="253434972992662860">&amp;ವಿರಾಮ</translation>
 <translation id="2534460670861217804">ಸುರಕ್ಷಿತ HTTP ಪ್ರಾಕ್ಸಿ</translation>
@@ -1045,6 +1045,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 ಖಾತೆಯನ್ನು ಮತ್ತು ಅದರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ರಚಿಸಿದಂತಾಗುವುದಿಲ್ಲ, 
@@ -1368,7 +1369,6 @@
 <translation id="3057861065630527966">ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಿ</translation>
 <translation id="3060379269883947824">ಧ್ವನಿ ಆಯ್ಕೆ ಮಾಡಿ ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="3061707000357573562">ಪ್ಯಾಚ್ ಸೇವೆ</translation>
-<translation id="3064410671692449875">ಸಾಕಷ್ಟು ಡೇಟಾ ಇಲ್ಲ</translation>
 <translation id="3065041951436100775">ಟ್ಯಾಬ್ ನಾಶಪಡಿಸಿದ ಪ್ರತಿಕ್ರಿಯೆ.</translation>
 <translation id="3067198179881736288">ಅಪ್ಲಿಕೇಶನ್ ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಬೇಕೇ?</translation>
 <translation id="3067198360141518313">ಈ ಪ್ಲಗಿನ್ ಚಾಲನೆ ಮಾಡು</translation>
@@ -1892,6 +1892,7 @@
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: ಸಿಂಕ್ ಮಾಡುವುದನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="3860381078714302691">Hangouts ಸಭೆಗೆ ಸುಸ್ವಾಗತ</translation>
+<translation id="3861241522664181545">ಪುಟ ಲೋಡ್ ಮಾಡುವುದನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ.</translation>
 <translation id="3862134173397075045">Chrome ನಲ್ಲಿನ ಬಿತ್ತರಿಸು ಅನುಭವಕ್ಕೆ ಸುಸ್ವಾಗತ!</translation>
 <translation id="3862788408946266506">ChromeOS ಕಿಯೋಸ್ಕ್ ಮೋಡ್‌ನಲ್ಲಿ 'kiosk_only' ಮ್ಯಾನಿಫೆಸ್ಟ್‌ ಲಕ್ಷಣವನ್ನು ಹೊಂದಿರುವ ಅಪ್ಲಿಕೇಶನ್‌ ಅನ್ನು ಇನ್‍ಸ್ಟಾಲ್ ಮಾಡಿರಬೇಕು</translation>
 <translation id="3865414814144988605">ರೆಸಲ್ಯೂಶನ್</translation>
@@ -2206,6 +2207,7 @@
 <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>
@@ -2308,7 +2310,6 @@
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" ಗೆ ಸಂಪರ್ಕಪಡಿಸುವಾಗ ದೃಢೀಕರಣವನ್ನು ರದ್ದು ಮಾಡಲಾಗಿದೆ.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ಫೈಲ್</translation>
 <translation id="457386861538956877">ಇನ್ನಷ್ಟು...</translation>
-<translation id="4576537685267142337">ಎಡ ಬೆರಳು, ನಂತರ ಮತ್ತೊಮ್ಮೆ ಸಂವೇದಕವನ್ನು ಸ್ಪರ್ಶಿಸಿ</translation>
 <translation id="4576541033847873020">ಬ್ಲೂಟೂತ್‌ ಸಾಧನವನ್ನು ಜೋಡಿ ಮಾಡಿ</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> ಬಿತ್ತರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.</translation>
 <translation id="4580526846085481512">$1 ಐಟಂಗಳನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</translation>
@@ -2457,6 +2458,7 @@
 </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>
@@ -2497,6 +2499,7 @@
 <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>
@@ -2552,7 +2555,6 @@
 <translation id="4941627891654116707">ಫಾಂಟ್ ಗಾತ್ರ</translation>
 <translation id="494286511941020793">ಪ್ರಾಕ್ಸಿ ಕಾನ್ಫಿಗರೇಶನ್ ಸಹಾಯ</translation>
 <translation id="4945444280533270988">Smart Lock ಆನ್ ಆಗಿದೆ</translation>
-<translation id="494660967831069720">ಭಾಗಶಃ ಡೇಟಾ</translation>
 <translation id="4953689047182316270">ಪ್ರವೇಶಿಸುವಿಕೆ ಈವೆಂಟ್‌ಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸಿ</translation>
 <translation id="4953808748584563296">ಡಿಫಾಲ್ಟ್ ಕೇಸರಿ ಅವತಾರ್</translation>
 <translation id="4955814292505481804">ವಾರ್ಷಿಕ</translation>
@@ -2806,6 +2808,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>
@@ -3056,6 +3059,7 @@
 <translation id="5684661240348539843">ಸ್ವತ್ತು ಗುರುತಿಸುವಿಕೆ</translation>
 <translation id="5686799162999241776"><ph name="BEGIN_BOLD" />ಆರ್ಕೈವ್ ಅಥವಾ ವರ್ಚುವಲ್ ಡಿಸ್ಕ್‌ನಿಂದ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ<ph name="END_BOLD" /> <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>
@@ -3507,12 +3511,12 @@
 <translation id="6384275966486438344">ನಿಮ್ಮ ಹುಡುಕಾಟದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಹೀಗೆ ಬದಲಾಯಿಸಿ: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">ಸೈಟ್‌ಗಳು ಕುಕೀ ಡೇಟಾವನ್ನು ಉಳಿಸಬಹುದು ಮತ್ತು ಓದಬಹುದು</translation>
 <translation id="6388429472088318283">ಭಾಷೆಗಳನ್ನು ಹುಡುಕಾಡಿ</translation>
-<translation id="6388771388956873507">ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್‌ ಅನ್ನು ಹುಡುಕಿ ಮತ್ತು ಅದನ್ನು ಬೆರಳಿನಿಂದ ಸ್ಪರ್ಶಿಸಿ</translation>
 <translation id="6390799748543157332">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ತೆರೆದಿರುವ ಎಲ್ಲ ಅತಿಥಿ ವಿಂಡೊಗಳನ್ನು ಮುಚ್ಚಿದ ನಂತರ ಈ ವಿಂಡೊದಲ್ಲಿ ನೀವು ವೀಕ್ಷಿಸುವ ಪುಟಗಳು ಬ್ರೌಸರ್ ಇತಿಹಾಸದಲ್ಲಿ ಗೋಚರಿಸುವುದಿಲ್ಲ ಮತ್ತು ಅವುಗಳು ಕುಕೀಗಳಂತಹ ಇತರ ಗುರುತುಗಳನ್ನು ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಬಿಡುವುದಿಲ್ಲ. ಆದಾಗ್ಯೂ, ನೀವು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಯಾವುದೇ ಫೈಲ್‌ಗಳನ್ನು ರಕ್ಷಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="6390994422085833176">ಸೆಟಪ್ ಮಾಡಿದ ನಂತರ ಸಿಂಕ್ ಮತ್ತು ವೈಯಕ್ತೀಕರಣದ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <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>
@@ -3848,6 +3852,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>
@@ -3879,6 +3884,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>
@@ -4028,6 +4034,7 @@
 <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>
@@ -4105,7 +4112,6 @@
 <translation id="7309257895202129721">&amp;ನಿಯಂತ್ರಣಗಳನ್ನು ತೋರಿಸು</translation>
 <translation id="7310598146671372464">ಲಾಗಿನ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾದ Kerberos ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಪ್ರಕಾರಗಳನ್ನು ಸರ್ವರ್ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="7311079019872751559">ಸ್ಯಾಂಡ್‌ಬಾಕ್ಸ್ ರದ್ದುಗೊಳಿಸಲಾಗಿರುವ ಪ್ಲಗಿನ್ ಪ್ರವೇಶ</translation>
-<translation id="7311891583377621132">ಫಿಂಗರ್‌ ಫ್ರಿಂಟ್‌‌ನ ವಿವಿಧ ಭಾಗಗಳನ್ನು ಸೆರೆಹಿಡಿಯಲು ಬೆರಳನ್ನು ನಿಧಾನವಾಗಿ ಸರಿಸಿ</translation>
 <translation id="7317680720589234980">ಪರದೆ ಲಾಕ್‌ಗಳು ಮತ್ತು ಸೈನ್‌ ಇನ್‌ ಆಯ್ಕೆಗಳು</translation>
 <translation id="7321545336522791733">ಸರ್ವರ್ ತಲುಪಲಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="7324297612904500502">ಬೀಟಾ ಫೋರಮ್‌</translation>
@@ -4533,6 +4539,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>
@@ -4753,6 +4760,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>
@@ -4937,7 +4945,6 @@
 <translation id="8639047128869322042">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್‌ಗಾಗಿ ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="8639963783467694461">ಸ್ವಯಂತುಂಬುವಿಕೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="8642171459927087831">ಪ್ರವೇಶ ಟೋಕನ್</translation>
-<translation id="8642267168767642381">ಬೆರಳನ್ನು ತೀರಾ ನಿಧಾನ ಸರಿಸಲಾಗಿದೆ</translation>
 <translation id="8642947597466641025">ಪಠ್ಯವನ್ನು ದೊಡ್ಡದಾಗಿ ಮಾಡಿಕೊಳ್ಳಿ</translation>
 <translation id="8643418457919840804">ಮುಂದುವರಿಸಲು, ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ:</translation>
 <translation id="8645354835496065562">ಸೆನ್ಸರ್‌ ಪ್ರವೇಶದ ಅನುಮತಿಯನ್ನು ಮುಂದುವರೆಸಿ</translation>
@@ -5005,6 +5012,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>
@@ -5297,7 +5305,6 @@
 <translation id="916607977885256133">ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ</translation>
 <translation id="9169496697824289689">ಕೀಬೋರ್ಡ್ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಿ</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" /> ಅನ್ನು ಮುಖಪುಟದ ಪರದೆಗೆ ಸೇರಿಸಿ</translation>
-<translation id="9170397650136757332">ನಿಮ್ಮ ಫಿಂಗರ್‌ ಫ್ರಿಂಟ್‌‌ನ ಎಲ್ಲಾ ವಿವಿಧ ಭಾಗಗಳನ್ನು ಸೆರೆಹಿಡಿಯಲು ಇದೀಗ ನಿಮ್ಮ ಬೆರಳನ್ನು ನಿಧಾನವಾಗಿ ಸರಿಸಿ</translation>
 <translation id="9170848237812810038">&amp;ರದ್ದುಮಾಡು</translation>
 <translation id="9170884462774788842">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿನ ಮತ್ತೊಂದು ಪ್ರೋಗ್ರಾಂ Chrome ಕಾರ್ಯನಿರ್ವಹಿಸುವ ವಿಧಾನವನ್ನು ಬದಲಿಸಬಹುದಾದಂತಹ ಥೀಮ್ ಅನ್ನು ಸೇರಿಸಿದೆ.</translation>
 <translation id="9173995187295789444">ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳಿಗಾಗಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index b611b5e..904b5cb 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16배</translation>
 <translation id="127138278192656016">동기화 및 모든 서비스 사용</translation>
 <translation id="1272079795634619415">중지</translation>
-<translation id="1272242203003205253">Google 파트너사는 어시스턴트와 함께 사용자를 돕습니다</translation>
 <translation id="1272978324304772054">이 사용자 계정은 기기가 등록된 도메인에 속해 있지 않습니다. 다른 도메인에 등록하려면 먼저 기기 복구 절차를 거쳐야 합니다.</translation>
 <translation id="1274977772557788323">Adobe Flash Player 저장용량 설정</translation>
 <translation id="1274997165432133392">쿠키 및 기타 사이트 데이터</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">휴대전화를 인식할 수 없습니다</translation>
 <translation id="1616206807336925449">이 확장 프로그램은 특별한 권한이 필요하지 않습니다.</translation>
 <translation id="1616298854599875024">확장 프로그램 '<ph name="IMPORT_NAME" />'은(는) 공유 모듈이 아니므로 가져올 수 없습니다</translation>
-<translation id="161707228174452095">지문이 추가되었습니다.</translation>
 <translation id="1618268899808219593">고객센터(H)</translation>
 <translation id="162035744160882748">동기화, 맞춤설정 및 기타 Google 서비스 사용 설정</translation>
 <translation id="1620510694547887537">카메라</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">RAR 압축 파일</translation>
 <translation id="2034346955588403444">다른 Wi-Fi 네트워크 추가</translation>
 <translation id="203574396658008164">잠금 화면에서 메모 작성 사용</translation>
-<translation id="2039623879703305659">손가락을 너무 빨리 움직였습니다.</translation>
 <translation id="2040460856718599782">인증을 시도하는 중에 문제가 발생했습니다. 로그인 사용자 인증 정보를 확인하고 다시 시도해 주세요.</translation>
 <translation id="2043818754674261542">휴대전화로 이 <ph name="DEVICE_TYPE" />을(를) 잠금 해제하는 데 필요한 거리</translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">서버 인증서 '<ph name="CERTIFICATE_NAME" />'을(를) 삭제하시겠습니까?</translation>
 <translation id="2100273922101894616">자동 로그인</translation>
 <translation id="2101225219012730419">버전:</translation>
-<translation id="2107494551712864447">지문 추가</translation>
 <translation id="2112877397266219826">설정이 필요하면 터치 컨트롤러를 사용하도록 설정하세요.</translation>
 <translation id="21133533946938348">탭 고정</translation>
 <translation id="2113479184312716848">파일 열기(&amp;F)...</translation>
@@ -792,7 +788,7 @@
 <translation id="2178098616815594724"><ph name="PEPPER_PLUGIN_DOMAIN" />의 <ph name="PEPPER_PLUGIN_NAME" />에서 내 컴퓨터에 액세스하려고 합니다</translation>
 <translation id="2178614541317717477">CA 손상</translation>
 <translation id="218070003709087997">숫자로 인쇄 부수를 표시하세요(1부터 999까지).</translation>
-<translation id="2184515124301515068">소리를 재생할 수 있는 사이트를 Chrome이 결정(권장)</translation>
+<translation id="2184515124301515068">사이트의 소리 재생 여부를 Chrome이 결정(권장)</translation>
 <translation id="2187895286714876935">서버 인증서 가져오기 오류</translation>
 <translation id="2187906491731510095">확장 프로그램 업데이트됨</translation>
 <translation id="2188881192257509750"><ph name="APPLICATION" /> 열기</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">데스크톱</translation>
 <translation id="2526619973349913024">업데이트 상태 확인</translation>
 <translation id="2527167509808613699">모든 종류의 연결</translation>
-<translation id="2532026602297547439">센서가 오염되었습니다.</translation>
 <translation id="2532589005999780174">고대비 모드</translation>
 <translation id="253434972992662860">일시중지(&amp;P)</translation>
 <translation id="2534460670861217804">보안 HTTP 프록시</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">사진 및 동영상을 백업합니다.</translation>
 <translation id="3060379269883947824">텍스트 읽어주기 사용</translation>
 <translation id="3061707000357573562">서비스 패치</translation>
-<translation id="3064410671692449875">데이터 부족</translation>
 <translation id="3065041951436100775">탭 사용 중지 관련 피드백</translation>
 <translation id="3067198179881736288">앱을 설치하시겠습니까?</translation>
 <translation id="3067198360141518313">이 플러그인 실행</translation>
@@ -2263,7 +2257,6 @@
 <translation id="4480590691557335796">Chrome이 컴퓨터에서 유해한 소프트웨어를 찾아 삭제할 수 있습니다.</translation>
 <translation id="4481530544597605423">페어링 해제된 기기</translation>
 <translation id="4482194545587547824">검색 및 다른 Google 서비스를 맞춤설정하기 위하여 Google에서 인터넷 사용 기록을 사용할 수 있습니다.</translation>
-<translation id="4493287891836751813">나만의 Google 어시스턴트를 만나보세요</translation>
 <translation id="4495419450179050807">이 페이지에 표시하지 않음</translation>
 <translation id="4499718683476608392">신용카드 자동 완성을 사용하여 클릭 한 번으로 양식을 작성합니다.</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" />이(가) 다운되었습니다</translation>
@@ -2318,7 +2311,6 @@
 <translation id="4572659312570518089">'<ph name="DEVICE_NAME" />'에 연결하는 동안 인증이 취소되었습니다.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> 파일</translation>
 <translation id="457386861538956877">더보기...</translation>
-<translation id="4576537685267142337">손가락을 들어 올린 후 센서를 다시 터치하세요.</translation>
 <translation id="4576541033847873020">블루투스 기기 페어링</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" />을(를) 전송할 수 없습니다.</translation>
 <translation id="4580526846085481512">선택한 $1개의 항목을 삭제하시겠습니까?</translation>
@@ -2563,7 +2555,6 @@
 <translation id="4941627891654116707">글꼴 크기</translation>
 <translation id="494286511941020793">프록시 설정 도움말</translation>
 <translation id="4945444280533270988">Smart Lock 사용</translation>
-<translation id="494660967831069720">일부 데이터</translation>
 <translation id="4953689047182316270">접근성 이벤트에 응답</translation>
 <translation id="4953808748584563296">기본 주황색 아바타</translation>
 <translation id="4955814292505481804">연간</translation>
@@ -3520,7 +3511,6 @@
 <translation id="6384275966486438344">다음으로 검색 설정 변경: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">사이트에서 쿠키 데이터를 저장하고 읽을 수 있음</translation>
 <translation id="6388429472088318283">언어 검색</translation>
-<translation id="6388771388956873507">기기에서 지문 센서를 찾아 손가락으로 터치합니다.</translation>
 <translation id="6390799748543157332">이 창에서 보는 페이지는 브라우저 기록에 나타나지 않으며 열려 있는 모든 손님 창을 닫은 후에도 컴퓨터에 쿠키와 같은 다른 흔적을 남기지 않습니다. 하지만 다운로드한 파일은 모두 저장됩니다.</translation>
 <translation id="6390994422085833176">설정 후 동기화 및 맞춤설정 기능 검토</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />시스템 정보<ph name="END_LINK1" /> 및 <ph name="BEGIN_LINK2" />통계<ph name="END_LINK2" /> 전송</translation>
@@ -4123,7 +4113,6 @@
 <translation id="7309257895202129721">컨트롤 표시(&amp;C)</translation>
 <translation id="7310598146671372464">로그인하지 못했습니다. 서버가 지정된 Kerberos 암호화 유형을 지원하지 않습니다. 관리자에게 문의하세요.</translation>
 <translation id="7311079019872751559">샌드박스 처리되지 않은 플러그인 액세스</translation>
-<translation id="7311891583377621132">지문의 다른 부분이 인식되도록 손가락을 살짝 움직이세요.</translation>
 <translation id="7317680720589234980">화면 잠금 및 로그인 옵션</translation>
 <translation id="7321545336522791733">서버에 연결할 수 없음</translation>
 <translation id="7324297612904500502">베타 포럼</translation>
@@ -4963,7 +4952,6 @@
 <translation id="8639047128869322042">유해한 소프트웨어 확인 중...</translation>
 <translation id="8639963783467694461">자동 완성 설정</translation>
 <translation id="8642171459927087831">액세스 토큰</translation>
-<translation id="8642267168767642381">손가락을 너무 느리게 움직였습니다.</translation>
 <translation id="8642947597466641025">텍스트 확대</translation>
 <translation id="8643418457919840804">계속하려면 옵션을 선택하세요.</translation>
 <translation id="8645354835496065562">계속해서 센서 액세스 허용</translation>
@@ -5324,7 +5312,6 @@
 <translation id="916607977885256133">PIP 모드</translation>
 <translation id="9169496697824289689">단축키 보기</translation>
 <translation id="9169931577761441333">홈 화면에 <ph name="APP_NAME" /> 추가</translation>
-<translation id="9170397650136757332">이제 지문의 다른 부분도 모두 인식되도록 손가락을 살짝 움직이세요.</translation>
 <translation id="9170848237812810038">실행 취소(&amp;U)</translation>
 <translation id="9170884462774788842">컴퓨터의 다른 프로그램에서 Chrome 작동에 영향을 줄 수 있는 테마를 추가했습니다.</translation>
 <translation id="9173995187295789444">블루투스 기기 검색 중...</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 85f3b37..70f011b 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16 k.</translation>
 <translation id="127138278192656016">Sinchronizavimo ir visų paslaugų naudojimas</translation>
 <translation id="1272079795634619415">Sustabdyti</translation>
-<translation id="1272242203003205253">„Google“ partneriai bendradarbiauja su Padėjėju, kad jums padėtų</translation>
 <translation id="1272978324304772054">Ši naudotojo paskyra nepriklauso domenui, prie kurio priregistruotas įrenginys. Jei norite naudoti su kitu domenu, pirma turite atlikti įrenginio atkūrimo procedūrą.</translation>
 <translation id="1274977772557788323">„Adobe Flash Player“ saugyklos nustatymai</translation>
 <translation id="1274997165432133392">Slapukai ir kiti svetainių duomenys</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Nepavyko aptikti telefono</translation>
 <translation id="1616206807336925449">Šiam plėtiniui nereikalingi jokie specialūs leidimai.</translation>
 <translation id="1616298854599875024">Nepavyko importuoti plėtinio „<ph name="IMPORT_NAME" />“, nes tai nėra bendrinamas modulis</translation>
-<translation id="161707228174452095">Kontrolinis kodas pridėtas!</translation>
 <translation id="1618268899808219593">P&amp;agalbos centras</translation>
 <translation id="162035744160882748">Įjunkite sinchronizavimą, suasmeninimą ir kitas „Google“ paslaugas</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">RAR archyvas</translation>
 <translation id="2034346955588403444">Pridėti kitą „WiFi“ tinklą</translation>
 <translation id="203574396658008164">Įgalinti užrašų rašymą užrakinimo ekrane</translation>
-<translation id="2039623879703305659">Per greitai judinate pirštą</translation>
 <translation id="2040460856718599782">Oi! Kažkas atsitiko bandant nustatyti jūsų tapatybę. Dar kartą patikrinkite prisijungimo duomenis ir bandykite iš naujo.</translation>
 <translation id="2043818754674261542">Atstumas, reikalingas norint atrakinti šį „<ph name="DEVICE_TYPE" />“ telefonu</translation>
 <translation id="204497730941176055">„Microsoft“ sertifikato šablono pavadinimas</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Ištrinti „<ph name="CERTIFICATE_NAME" />“ serverio sertifikatą?</translation>
 <translation id="2100273922101894616">Automatinis prisijungimas</translation>
 <translation id="2101225219012730419">Versija:</translation>
-<translation id="2107494551712864447">Kontrolinio kodo pridėjimas</translation>
 <translation id="2112877397266219826">Įjunkite jutiklinį valdiklį, kad nustatytumėte</translation>
 <translation id="21133533946938348">Pažymėti skirtuką</translation>
 <translation id="2113479184312716848">Atidaryti &amp;failą...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Darbalaukis</translation>
 <translation id="2526619973349913024">Patikrinti, ar yra naujinių</translation>
 <translation id="2527167509808613699">Bet koks ryšys</translation>
-<translation id="2532026602297547439">Jutiklis purvinas</translation>
 <translation id="2532589005999780174">Didelio kontrasto režimas</translation>
 <translation id="253434972992662860">&amp;Pristabdyti</translation>
 <translation id="2534460670861217804">Saugus HTTP tarpinis serveris</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">Kurkite atsargines nuotraukų ir vaizdo įrašų kopijas</translation>
 <translation id="3060379269883947824">Įgalinti funkciją „Teksto ištarimas“</translation>
 <translation id="3061707000357573562">Pataisos paslauga</translation>
-<translation id="3064410671692449875">Nepakanka duomenų</translation>
 <translation id="3065041951436100775">Atsiliepimai dėl uždaryto skirtuko.</translation>
 <translation id="3067198179881736288">Įdiegti programą?</translation>
 <translation id="3067198360141518313">Paleisti šį papildinį</translation>
@@ -2265,7 +2259,6 @@
 <translation id="4480590691557335796">„Chrome“ gali rasti kenkėjišką programinę įrangą jūsų kompiuteryje ir ją pašalinti</translation>
 <translation id="4481530544597605423">Atsieti įrenginiai</translation>
 <translation id="4482194545587547824">„Google“ gali naudoti jūsų naršymo istoriją, kad suasmenintų Paiešką ir kitas „Google“ paslaugas</translation>
-<translation id="4493287891836751813">Susipažinkite su „Google“ padėjėju</translation>
 <translation id="4495419450179050807">Nerodyti šiame puslapyje</translation>
 <translation id="4499718683476608392">Įgalinamas automatinis kredito kortelės informacijos pildymas, kad būtų galima užpildyti formas vienu paspaudimu</translation>
 <translation id="4500114933761911433">Papildinys „<ph name="PLUGIN_NAME" />“ užstrigo</translation>
@@ -2320,7 +2313,6 @@
 <translation id="4572659312570518089">Autentifikavimas atšauktas prisijungiant prie „<ph name="DEVICE_NAME" />“.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> failas</translation>
 <translation id="457386861538956877">Daugiau...</translation>
-<translation id="4576537685267142337">Patraukite pirštą, tada vėl palieskite jutiklį</translation>
 <translation id="4576541033847873020">„Bluetooth“ įrenginio susiejimas</translation>
 <translation id="4579581181964204535">Nepavyko perduoti <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Ar tikrai norite ištrinti $1 elementus?</translation>
@@ -2565,7 +2557,6 @@
 <translation id="4941627891654116707">Šrifto dydis</translation>
 <translation id="494286511941020793">Tarpinio serverio konfigūracijos pagalba</translation>
 <translation id="4945444280533270988">„Smart Lock“ įjungta</translation>
-<translation id="494660967831069720">Daliniai duomenys</translation>
 <translation id="4953689047182316270">Reaguoti į pritaikymo neįgaliesiems įvykius</translation>
 <translation id="4953808748584563296">Numatytasis oranžinis pseudoportretas</translation>
 <translation id="4955814292505481804">Metinė licencija</translation>
@@ -3523,7 +3514,6 @@
 <translation id="6384275966486438344">Pakeiskite paieškos nustatymus į: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Svetainės gali išsaugoti ir skaityti slapukų duomenis</translation>
 <translation id="6388429472088318283">Ieškoti kalbų</translation>
-<translation id="6388771388956873507">Raskite įrenginio kontrolinio kodo jutiklį ir palieskite jį pirštu</translation>
 <translation id="6390799748543157332">Puslapiai, kuriuos peržiūrite šiame lange, nerodomi naršyklės istorijoje. Kai uždarysite visus svečio langus, kompiuteryje neliks ir kitų jų pėdsakų, pvz., slapukų, tačiau atsisiųsti failai bus išsaugoti.</translation>
 <translation id="6390994422085833176">Užbaigus sąranką peržiūrėti sinchronizavimo ir suasmeninimo funkcijas</translation>
 <translation id="6395423953133416962">Siųsti <ph name="BEGIN_LINK1" />sistemos informaciją<ph name="END_LINK1" /> ir <ph name="BEGIN_LINK2" />metriką<ph name="END_LINK2" /></translation>
@@ -4126,7 +4116,6 @@
 <translation id="7309257895202129721">Rodyti &amp;valdiklius</translation>
 <translation id="7310598146671372464">Nepavyko prisijungti. Serveris nepalaiko nurodytų „Kerberos“ šifruotės tipų. Susisiekite su administratoriumi.</translation>
 <translation id="7311079019872751559">Ne „smėlio dėžės“ papildinio prieiga</translation>
-<translation id="7311891583377621132">Truputį pajudinkite pirštą, kad būtų užfiksuota kita kontrolinio kodo dalis</translation>
 <translation id="7317680720589234980">Ekrano užrakto ir prisijungimo parinktys</translation>
 <translation id="7321545336522791733">Serveris nepasiekiamas</translation>
 <translation id="7324297612904500502">Beta forumas</translation>
@@ -4966,7 +4955,6 @@
 <translation id="8639047128869322042">Tikrinama, ar nėra kenkėjiškos programinės įrangos...</translation>
 <translation id="8639963783467694461">Automatinio pildymo nustatymai</translation>
 <translation id="8642171459927087831">Prieigos raktas</translation>
-<translation id="8642267168767642381">Per lėtai judinate pirštą</translation>
 <translation id="8642947597466641025">Padidinti tekstą</translation>
 <translation id="8643418457919840804">Norėdami tęsti pasirinkite toliau pateiktą parinktį.</translation>
 <translation id="8645354835496065562">Toliau leisti prieigą prie jutiklio</translation>
@@ -5327,7 +5315,6 @@
 <translation id="916607977885256133">Vaizdas vaizde</translation>
 <translation id="9169496697824289689">Peržiūrėti sparčiuosius klavišus</translation>
 <translation id="9169931577761441333">Pridėkite „<ph name="APP_NAME" />“ prie pagrindinio ekrano</translation>
-<translation id="9170397650136757332">Dabar truputį pajudinkite pirštą, kad būtų užfiksuotos visos skirtingos kontrolinio kodo dalys</translation>
 <translation id="9170848237812810038">&amp;Atšaukti</translation>
 <translation id="9170884462774788842">Kita jūsų kompiuteryje esanti programa pridėjo temą, kuri gali pakeisti „Chrome“ veikimo būdą.</translation>
 <translation id="9173995187295789444">Nuskaitoma ieškant „Bluetooth“ įrenginių...</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 0ec293d0..b4fa51b 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Sinhronizēšanas un visu pakalpojumu izmantošana</translation>
 <translation id="1272079795634619415">Apturēt</translation>
-<translation id="1272242203003205253">Google partneri sadarbojas ar Asistentu, lai jums palīdzētu</translation>
 <translation id="1272978324304772054">Šis lietotāja konts nepieder domēnam, kurā ierīce ir reģistrēta. Ja vēlaties ierīci reģistrēt citā domēnā, vispirms ir jāveic ierīces atkopšana.</translation>
 <translation id="1274977772557788323">Adobe Flash Player krātuves iestatījumi</translation>
 <translation id="1274997165432133392">Sīkfaili un citi vietņu dati</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Nevar noteikt jūsu tālruni.</translation>
 <translation id="1616206807336925449">Šim paplašinājumam nav nepieciešamas īpašas atļaujas.</translation>
 <translation id="1616298854599875024">Nevar importēt paplašinājumu <ph name="IMPORT_NAME" />, jo tas nav kopīgots modulis.</translation>
-<translation id="161707228174452095">Nospiedums pievienots!</translation>
 <translation id="1618268899808219593">P&amp;alīdzības centrs</translation>
 <translation id="162035744160882748">Sinhronizācijas, personalizācijas un citu Google pakalpojumu ieslēgšana</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">RAR arhīvs</translation>
 <translation id="2034346955588403444">Pievienot citu Wi-Fi tīklu</translation>
 <translation id="203574396658008164">Iespējot piezīmju pierakstīšanu bloķēšanas ekrānā</translation>
-<translation id="2039623879703305659">Pārāk strauja pirksta kustība</translation>
 <translation id="2040460856718599782">Diemžēl, mēģinot jūs autentificēt, radās problēma. Lūdzu, vēlreiz pārbaudiet savus akreditācijas datus un mēģiniet vēlreiz pierakstīties.</translation>
 <translation id="2043818754674261542">Attālums, kurā tālrunis var atbloķēt šo ierīci (<ph name="DEVICE_TYPE" />)</translation>
 <translation id="204497730941176055">Microsoft sertifikāta veidnes nosaukums</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Vai dzēst servera sertifikātu “<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="2100273922101894616">Automātiski pierakstīties</translation>
 <translation id="2101225219012730419">versija:</translation>
-<translation id="2107494551712864447">Pirksta nospieduma pievienošana</translation>
 <translation id="2112877397266219826">Ieslēdziet skārienjutīgo vadāmierīci, lai varētu iestatīt šo sistēmu</translation>
 <translation id="21133533946938348">Piespraust cilni</translation>
 <translation id="2113479184312716848">Atvērt failu...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Darbvirsma</translation>
 <translation id="2526619973349913024">Pārbaudīt atjauninājumus</translation>
 <translation id="2527167509808613699">Jebkāda veida savienojums</translation>
-<translation id="2532026602297547439">Sensors ir netīrs</translation>
 <translation id="2532589005999780174">Augsta kontrasta režīms</translation>
 <translation id="253434972992662860">&amp;Pauzēt</translation>
 <translation id="2534460670861217804">Drošs HTTP starpniekserveris</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">Dublēt fotoattēlus un videoklipus</translation>
 <translation id="3060379269883947824">Iespējot funkciju “Atlasīt, lai izrunātu”</translation>
 <translation id="3061707000357573562">Ielāpu pakalpojums</translation>
-<translation id="3064410671692449875">Nepietiek datu</translation>
 <translation id="3065041951436100775">Atsauksme par cilnes darbības pārtraukšanu.</translation>
 <translation id="3067198179881736288">Vai instalēt lietotni?</translation>
 <translation id="3067198360141518313">Izpildīt šo spraudni</translation>
@@ -2265,7 +2259,6 @@
 <translation id="4480590691557335796">Pārlūks Chrome jūsu datorā var atrast kaitīgu programmatūru un noņemt to.</translation>
 <translation id="4481530544597605423">Pārī nesavienotās ierīces</translation>
 <translation id="4482194545587547824">Google var izmantot jūsu pārlūkošanas vēsturi, lai personalizētu Meklēšanu un citus Google pakalpojumus.</translation>
-<translation id="4493287891836751813">Iepazīstieties ar Google asistentu!</translation>
 <translation id="4495419450179050807">Nerādīt šajā lapā</translation>
 <translation id="4499718683476608392">Iespējojiet kredītkaršu automātisko aizpildi, lai varētu aizpildīt veidlapas ar vienu klikšķi</translation>
 <translation id="4500114933761911433">Spraudnis <ph name="PLUGIN_NAME" /> avarēja.</translation>
@@ -2320,7 +2313,6 @@
 <translation id="4572659312570518089">Veidojot savienojumu ar ierīci <ph name="DEVICE_NAME" />, autentifikācija tika atcelta.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> fails</translation>
 <translation id="457386861538956877">Vēl...</translation>
-<translation id="4576537685267142337">Paceliet pirkstu un pēc tam vēlreiz pieskarieties sensoram</translation>
 <translation id="4576541033847873020">Bluetooth ierīces savienošana pārī</translation>
 <translation id="4579581181964204535">Nevar apraidīt <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Vai tiešām vēlaties dzēst $1 vienumus?</translation>
@@ -2565,7 +2557,6 @@
 <translation id="4941627891654116707">Fonta lielums</translation>
 <translation id="494286511941020793">Starpniekservera konfigurācijas palīdzība</translation>
 <translation id="4945444280533270988">Funkcija Smart Lock ieslēgta</translation>
-<translation id="494660967831069720">Dati nav pilnīgi</translation>
 <translation id="4953689047182316270">Atbildēt uz pieejamības notikumiem</translation>
 <translation id="4953808748584563296">Noklusējuma iemiesojums oranžā krāsā</translation>
 <translation id="4955814292505481804">Gada licence</translation>
@@ -3522,7 +3513,6 @@
 <translation id="6384275966486438344">Mainiet savus meklēšanas iestatījumus uz šiem: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Vietnes var saglabāt un lasīt sīkfailu datus</translation>
 <translation id="6388429472088318283">Meklēt valodas</translation>
-<translation id="6388771388956873507">Ar pirkstu pieskarieties savas ierīces pirkstu nospiedumu sensoram.</translation>
 <translation id="6390799748543157332">Lapas, ko skatāt šajā logā, nebūs redzamas pārlūka vēsturē, un, kad aizvērsiet visus viesa režīmā atvērtos logus, datorā nepaliks nekādi vienumi, piemēram, sīkfaili. Tomēr visi lejupielādētie faili tiks saglabāti.</translation>
 <translation id="6390994422085833176">Pēc iestatīšanas pārskatīt sinhronizācijas un personalizācijas funkcijas</translation>
 <translation id="6395423953133416962">Sūtīt <ph name="BEGIN_LINK1" />sistēmas informāciju<ph name="END_LINK1" /> un <ph name="BEGIN_LINK2" />datus<ph name="END_LINK2" /></translation>
@@ -4125,7 +4115,6 @@
 <translation id="7309257895202129721">Rādīt &amp;vadīklas</translation>
 <translation id="7310598146671372464">Neizdevās pieteikties. Serveris neatbalsta norādītos Kerberos šifrēšanas veidus. Lūdzu, sazinieties ar administratoru.</translation>
 <translation id="7311079019872751559">Piekļuve, izmantojot spraudni, kas nav ievietots smilškastē</translation>
-<translation id="7311891583377621132">Mazliet pakustiniet, lai uzņemtu citu pirksta nospieduma daļu</translation>
 <translation id="7317680720589234980">Ekrāna bloķēšanas un pierakstīšanās opcijas</translation>
 <translation id="7321545336522791733">Serveris nav sasniedzams</translation>
 <translation id="7324297612904500502">Beta versijas forums</translation>
@@ -4965,7 +4954,6 @@
 <translation id="8639047128869322042">Notiek kaitīgas programmatūras meklēšana...</translation>
 <translation id="8639963783467694461">Automātiskās aizpildes iestatījumi</translation>
 <translation id="8642171459927087831">Piekļuves pilnvara</translation>
-<translation id="8642267168767642381">Pārāk lēna pirksta kustība</translation>
 <translation id="8642947597466641025">Palielināt tekstu</translation>
 <translation id="8643418457919840804">Lai turpinātu, izvēlieties opciju:</translation>
 <translation id="8645354835496065562">Turpināt atļaut piekļuvi sensoriem</translation>
@@ -5326,7 +5314,6 @@
 <translation id="916607977885256133">Attēls attēlā</translation>
 <translation id="9169496697824289689">Skatīt īsinājumtaustiņus</translation>
 <translation id="9169931577761441333">Pievienot lietotni <ph name="APP_NAME" /> sākuma ekrānam</translation>
-<translation id="9170397650136757332">Tagad nedaudz pakustiniet pirkstu, lai uzņemtu dažādas pirksta nospieduma daļas.</translation>
 <translation id="9170848237812810038">&amp;Atsaukt</translation>
 <translation id="9170884462774788842">Cita datorā instalēta programma ir izraisījusi tāda motīva pievienošanu, kas var ietekmēt pārlūkprogrammas Chrome darbību.</translation>
 <translation id="9173995187295789444">Notiek Bluetooth ierīču meklēšana...</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 3cbcad0..76756877 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">സമന്വയവും എല്ലാ സേവനങ്ങളും ഉപയോഗിക്കുക</translation>
 <translation id="1272079795634619415">നിര്‍ത്തുക</translation>
-<translation id="1272242203003205253">നിങ്ങളെ സഹായിക്കാനായി Google സഹകാരികൾ അസിസ്‌റ്റന്റുമായി ബന്ധപ്പെട്ട് പ്രവർത്തിക്കുന്നു</translation>
 <translation id="1272978324304772054">ഈ ഉപയോക്തൃ അക്കൗണ്ട്, ഉപകരണം ചേർത്തിരിക്കുന്ന ഡൊമെയ്‌നിന്റെ ഭാഗമല്ല.  നിങ്ങൾക്ക് മറ്റൊരു ഡൊമെയ്ൻ ചേർക്കണമെങ്കിൽ, ആദ്യം ഉപകരണം വീണ്ടെടുക്കുന്നതിലേക്ക് പോകേണ്ടതുണ്ട്.</translation>
 <translation id="1274977772557788323">Adobe Flash Player സ്റ്റോറേജ് ക്രമീകരണം</translation>
 <translation id="1274997165432133392">കുക്കികളും മറ്റ് സൈറ്റ് ഡാറ്റയും</translation>
@@ -414,7 +413,6 @@
 <translation id="161460670679785907">നിങ്ങളുടെ ഫോൺ തിരിച്ചറിയാനാകുന്നില്ല</translation>
 <translation id="1616206807336925449">ഈ വിപുലീകരണത്തിന് പ്രത്യേക അനുമതികളൊന്നും ആവശ്യമില്ല.</translation>
 <translation id="1616298854599875024">വിപുലീകരണം "<ph name="IMPORT_NAME" /> ഒരു പങ്കിട്ട മൊഡ്യൂൾ അല്ലാത്തതിനാൽ ഇമ്പോർട്ട് ചെയ്യാനാവില്ല</translation>
-<translation id="161707228174452095">വിരലടയാളം ചേർത്തു!</translation>
 <translation id="1618268899808219593">സഹായ കേന്ദ്രം</translation>
 <translation id="162035744160882748">സമന്വയം, വ്യക്തിപരമാക്കൽ എന്നിവയും, മറ്റ് Google സേവനങ്ങളും ഓണാക്കുക</translation>
 <translation id="1620510694547887537">ക്യാമറ</translation>
@@ -692,7 +690,6 @@
 <translation id="2028997212275086731">RAR ആർക്കൈവ്</translation>
 <translation id="2034346955588403444">മറ്റൊരു WiFi നെറ്റ്‌വർക്ക് ചേർക്കുക</translation>
 <translation id="203574396658008164">ലോക്ക് സ്‌ക്രീനിൽ നിന്ന് കുറിപ്പെടുക്കുന്നത് പ്രവർത്തനക്ഷമമാക്കുക</translation>
-<translation id="2039623879703305659">വിരൽ വളരെ വേഗത്തിൽ നീക്കി</translation>
 <translation id="2040460856718599782">ക്ഷമിക്കണം! നിങ്ങളെ പ്രാമാണീകരിക്കാന്‍ ശ്രമിക്കുമ്പോൾ എന്തോ കുഴപ്പം സംഭവിച്ചു. നിങ്ങളുടെ സൈൻ ഇൻ ക്രെഡൻഷ്യലുകൾ രണ്ടുതവണ പരിശോധിച്ചതിനുശേഷം വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="2043818754674261542">ഈ <ph name="DEVICE_TYPE" /> അൺലോക്കുചെയ്യാൻ ഫോണിനാവശ്യമായ ദൂരം</translation>
 <translation id="204497730941176055">Microsoft സര്‍‌ട്ടിഫിക്കറ്റ് ടെംപ്ലേറ്റ് നാമം</translation>
@@ -736,7 +733,6 @@
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" സെര്‍വര്‍ സാക്‍ഷ്യപത്രം ഇല്ലാതാക്കണോ?</translation>
 <translation id="2100273922101894616">സ്വയമേയുള്ള സൈൻ ഇൻ</translation>
 <translation id="2101225219012730419">പതിപ്പ്:</translation>
-<translation id="2107494551712864447">ഒരു വിരലടയാളം ചേർത്തു</translation>
 <translation id="2112877397266219826">എന്നെ സജ്ജീകരിക്കുന്നതിന് നിങ്ങളുടെ ടച്ച് കൺട്രോളർ ഓണാക്കുക</translation>
 <translation id="21133533946938348">പിന്‍ ടാബ്</translation>
 <translation id="2113479184312716848">&amp;സ്ഥാനം തുറക്കുക...</translation>
@@ -1015,7 +1011,6 @@
 <translation id="2526590354069164005">ഡെസ്ക്‌ടോപ്പ്</translation>
 <translation id="2526619973349913024">അപ്ഡേറ്റിനായി പരിശോധിക്കുക</translation>
 <translation id="2527167509808613699">ഏത് രീതിയിലുള്ള കണക്ഷനും</translation>
-<translation id="2532026602297547439">സെൻസർ വൃത്തിയില്ലാത്തതാണ്</translation>
 <translation id="2532589005999780174">ഉയർന്ന ദൃശ്യതീവ്രത മോഡ്</translation>
 <translation id="253434972992662860">&amp;താല്‍ക്കാലികമായി നിര്‍ത്തുക</translation>
 <translation id="2534460670861217804">സുരക്ഷിത HTTP പ്രോക്‌സി</translation>
@@ -1374,7 +1369,6 @@
 <translation id="3057861065630527966">നിങ്ങളുടെ ഫോട്ടോകളും വീഡിയോകളും ബാക്കപ്പുചെയ്യുക</translation>
 <translation id="3060379269883947824">'വായിച്ചുകേൾക്കാൻ തിരഞ്ഞെടുക്കുക' പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="3061707000357573562">പാച്ച് സേവനം</translation>
-<translation id="3064410671692449875">ഡാറ്റ അപര്യാപ്‌തമാണ്</translation>
 <translation id="3065041951436100775">ടാബ് പ്രവർത്തനരഹിതമായതിനെക്കുറിച്ചുള്ള ഫീഡ്‌ബാക്ക്.</translation>
 <translation id="3067198179881736288">ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്യണോ?</translation>
 <translation id="3067198360141518313">ഈ പ്ലഗിന്‍ പ്രവര്‍ത്തിപ്പിക്കുക</translation>
@@ -2261,7 +2255,6 @@
 <translation id="4480590691557335796">Chrome-ന് നിങ്ങളുടെ കമ്പ്യൂട്ടറിലെ ദോഷകരമായ സോഫ്‌റ്റ്‌വെയർ കണ്ടെത്താനും അത് നീക്കം ചെയ്യാനുമാവും.</translation>
 <translation id="4481530544597605423">ജോടി മാറ്റിയ ഉപകരണങ്ങൾ</translation>
 <translation id="4482194545587547824">തിരയലും മറ്റ് Google സേവനങ്ങളും വ്യക്തിപരമാക്കാൻ Google നിങ്ങളുടെ ബ്രൗസിംഗ് ചരിത്രം ഉപയോഗിച്ചേക്കാം</translation>
-<translation id="4493287891836751813">നിങ്ങളുടെ Google അസിസ്‌റ്റന്റിനെ പരിചയപ്പെടൂ</translation>
 <translation id="4495419450179050807">ഈ പേജില്‍ കാണിക്കരുത്</translation>
 <translation id="4499718683476608392">ഒറ്റ ക്ലിക്കിൽ ഫോമുകൾ പൂരിപ്പിക്കാൻ ക്രെഡിറ്റ് കാർഡിന്റെ സ്വമേധയാ പൂരിപ്പിക്കൽ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ക്രാഷ് ചെയ്തിരിക്കുന്നു</translation>
@@ -2316,7 +2309,6 @@
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" എന്നതിലേക്ക് കണക്റ്റുചെയ്യുമ്പോൾ പ്രാമാണീകരണം റദ്ദാക്കി.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ഫയൽ</translation>
 <translation id="457386861538956877">കൂടുതൽ‍‌...</translation>
-<translation id="4576537685267142337">വിരൽ ഉയർത്തുക, തുടർന്ന് സെൻസർ വീണ്ടും തൊടുക</translation>
 <translation id="4576541033847873020">Bluetooth ഉപകരണം ജോടിയാക്കുക</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> കാസ്‌റ്റുചെയ്യാനാവുന്നില്ല.</translation>
 <translation id="4580526846085481512">$1 ഇനങ്ങൾ ഇല്ലാതാക്കാൻ നിങ്ങൾ താൽപ്പര്യപ്പെടുന്നോ?</translation>
@@ -2561,7 +2553,6 @@
 <translation id="4941627891654116707">ഫോണ്ട് വലുപ്പം</translation>
 <translation id="494286511941020793">പ്രോക്സി ക്രമീകരണ സഹായം</translation>
 <translation id="4945444280533270988">Smart Lock ഓണാണ്</translation>
-<translation id="494660967831069720">ഭാഗികമായ ഡാറ്റ</translation>
 <translation id="4953689047182316270">ഉപയോഗസഹായി ഇവന്‍റുകളോട് പ്രതികരിക്കുക</translation>
 <translation id="4953808748584563296">ഡിഫോൾട്ടായ ഓറഞ്ച് അവതാർ</translation>
 <translation id="4955814292505481804">വാർഷികം</translation>
@@ -3519,7 +3510,6 @@
 <translation id="6384275966486438344">നിങ്ങളുടെ തിരയൽ ക്രമീകരണങ്ങൾ മാറ്റുക: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">സൈറ്റുകൾക്ക് കുക്കി വിവരം സംരക്ഷിക്കാനും വായിക്കാനുമാകും</translation>
 <translation id="6388429472088318283">ഭാഷകൾ തിരയുക</translation>
-<translation id="6388771388956873507">നിങ്ങളുടെ ഉപകരണത്തിലെ വിരലടയാള സെൻസർ കണ്ടെത്തി, അത് വിരൽ കൊണ്ട് സ്‌പർശിക്കുക</translation>
 <translation id="6390799748543157332">തുറന്നിരിക്കുന്ന എല്ലാ അതിഥി വിൻഡോകളും അടച്ചുകഴിഞ്ഞാൽ, ഈ വിൻഡോയിൽ നിങ്ങൾ കാണുന്ന പേജുകൾ നിങ്ങളുടെ ബ്രൗസർ ചരിത്രത്തിൽ ദൃശ്യമാകില്ല, അവ കുക്കികൾ പോലുള്ള മറ്റ് തെളിവുകൾ നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ അവശേഷിപ്പിക്കുകയുമില്ല. എന്നിരുന്നാലും, നിങ്ങൾ ഡൗൺലോഡുചെയ്യുന്ന എല്ലാ ഫയലുകളും സൂക്ഷിക്കും.</translation>
 <translation id="6390994422085833176">സജ്ജീകരണത്തിന് ശേഷം സമന്വയിപ്പിക്കൽ, വ്യക്തിഗതമാക്കൽ ഫീച്ചറുകൾ അവലോകനം ചെയ്യുക</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />സിസ്റ്റം വിവരങ്ങളും<ph name="END_LINK1" /> <ph name="BEGIN_LINK2" />മെട്രിക്‌സും<ph name="END_LINK2" /> അയയ്‌ക്കുക</translation>
@@ -4123,7 +4113,6 @@
 <translation id="7309257895202129721">&amp;നിയന്ത്രണങ്ങള്‍‌ കാണിക്കുക</translation>
 <translation id="7310598146671372464">ലോഗിൻ ചെയ്യൽ പരാജയപ്പെട്ടു. വ്യക്തമാക്കിയ Kerberos എൻക്രിപ്ഷൻ തരങ്ങളെ സെർവർ പിന്തുണയ്ക്കുന്നില്ല. നിങ്ങളുടെ അഡ്‌മിനുമായി ബന്ധപ്പെടുക.</translation>
 <translation id="7311079019872751559">അൺസാൻഡ്‌ബോക്‌സ് ചെയ്‌ത പ്ലഗിൻ ആക്‌സസ്സ്</translation>
-<translation id="7311891583377621132">ഫിംഗർപ്രിന്റിന്റെ മറ്റൊരു ഭാഗം ക്യാപ്‌ചർ ചെയ്യാൻ ‌ചെറുതായി നീക്കുക</translation>
 <translation id="7317680720589234980">സ്‌ക്രീൻ ലോക്ക്, സൈൻ-ഇൻ ഓപ്‌ഷനുകൾ</translation>
 <translation id="7321545336522791733">സെർവർ ലഭ്യമല്ല</translation>
 <translation id="7324297612904500502">ബീറ്റ ഫോറം</translation>
@@ -4963,7 +4952,6 @@
 <translation id="8639047128869322042">ദോഷകരമായ സോഫ്‌റ്റ്‌വെയർ ഉണ്ടോയെന്ന് പരിശോധിക്കുന്നു...</translation>
 <translation id="8639963783467694461">ഓട്ടോഫില്‍ ക്രമീകരണങ്ങള്‍</translation>
 <translation id="8642171459927087831">ആക്‌സസ്സ് ടോക്കൺ</translation>
-<translation id="8642267168767642381">വിരൽ വളരെ പതുക്കെ നീക്കി</translation>
 <translation id="8642947597466641025">പാഠത്തെ വലുതാക്കുക</translation>
 <translation id="8643418457919840804">തുടരാൻ, ഒരു ഓപ്ഷൻ തിരഞ്ഞെടുക്കുക:</translation>
 <translation id="8645354835496065562">സെൻസർ ആക്‌സസ് അനുവദിക്കുന്നത് തുടരുക</translation>
@@ -5323,7 +5311,6 @@
 <translation id="916607977885256133">ചിത്രത്തിനുള്ളിൽ ചിത്രം</translation>
 <translation id="9169496697824289689">കീബോർഡ് കുറുക്കുവഴികൾ കാണുക</translation>
 <translation id="9169931577761441333">ഹോം സ്‌ക്രീനിലേക്ക് <ph name="APP_NAME" /> ചേർക്കുക</translation>
-<translation id="9170397650136757332">നിങ്ങളുടെ വിരലടയാളത്തിന്റെ വ്യത്യസ്‌ത ഭാഗങ്ങളെല്ലാം ക്യാപ്‌ചർ ചെയ്യാൻ വിരൽ പതുക്കെ നീക്കുക</translation>
 <translation id="9170848237812810038">‍&amp;പൂര്‍വാവസ്ഥയിലാക്കുക</translation>
 <translation id="9170884462774788842">നിങ്ങളുടെ കമ്പ്യൂട്ടറിലെ മറ്റൊരു പ്രോഗ്രാം Chrome പ്രവർത്തിക്കുന്ന രീതി മാറ്റിയേക്കാവുന്ന ഒരു തീം ചേർത്തു.</translation>
 <translation id="9173995187295789444">Bluetooth ഉപകരണങ്ങൾക്കായി സ്‌കാൻ ചെയ്യുന്നു...</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index a7b4460a..29f5c79 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">१६x</translation>
 <translation id="127138278192656016">सिंक आणि सर्व सेवा वापरा</translation>
 <translation id="1272079795634619415">थांबा</translation>
-<translation id="1272242203003205253">Google पार्टनर तुम्हाला मदत करण्यासाठी तुमच्या असिस्टंट सोबत काम करतात</translation>
 <translation id="1272978324304772054">हे वापरकर्ता खाते ज्यावर डिव्हाइसने नोंदणी केली आहे त्या डोमेनशी संबंधित नाही. आपण एखादे वेगळ्या डोमेनची नोंदणी करू इच्छित असल्यास, आपल्याला प्रथम डिव्हाइस पुनर्प्राप्तीद्वारा जाणे आवश्यक आहे.</translation>
 <translation id="1274977772557788323">Adobe Flash Player स्टोरेज सेटिंग्ज</translation>
 <translation id="1274997165432133392">कुकीज आणि इतर साइट डेटा</translation>
@@ -416,7 +415,6 @@
 <translation id="161460670679785907">तुमचा फोन शोधता आला नाही</translation>
 <translation id="1616206807336925449">या विस्तारास कोणत्याही विशिष्ट परवानग्यांची आवश्यकता नाही.</translation>
 <translation id="1616298854599875024">एक्स्टेंशन "<ph name="IMPORT_NAME" />" आयात करू शकत नाही कारण ते शेअर केलेले मॉड्युल नाही</translation>
-<translation id="161707228174452095">फिंगरप्रिंट जोडले!</translation>
 <translation id="1618268899808219593">म&amp;दत केंद्र</translation>
 <translation id="162035744160882748">सिंक, पर्सनलायझेशन आणि इतर Google सेवा सुरू करा</translation>
 <translation id="1620510694547887537">कॅमेरा</translation>
@@ -694,7 +692,6 @@
 <translation id="2028997212275086731">RAR संग्रहण</translation>
 <translation id="2034346955588403444">इतर WiFi नेटवर्क जोडा</translation>
 <translation id="203574396658008164">लॉक स्क्रीनवरून टीप घेणे चालू करा</translation>
-<translation id="2039623879703305659">बोट खूप द्रुतपणे हलविले</translation>
 <translation id="2040460856718599782">अरेरे! आपल्याला प्रमाणीकृत करण्याचा प्रयत्न करताना काहीतरी चूक झाली. कृपया तुमची साइन इन क्रेडेन्शियल दोनदा तपासा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="2043818754674261542">फोनला हे <ph name="DEVICE_TYPE" /> अनलॉक करण्यासाठी अंतर ठेवण्याची आवश्यकता आहे</translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
@@ -738,7 +735,6 @@
 <translation id="2099686503067610784">सर्व्हर प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
 <translation id="2100273922101894616">स्वयं साइन इन करा</translation>
 <translation id="2101225219012730419">आवृत्ती:</translation>
-<translation id="2107494551712864447">एक फिंगरप्रिंट जोडा</translation>
 <translation id="2112877397266219826">मला सेट करण्यासाठी आपला स्पर्श नियंत्रक चालू करा</translation>
 <translation id="21133533946938348">टॅब पिन करा</translation>
 <translation id="2113479184312716848">&amp;फाइल उघडा...</translation>
@@ -1017,7 +1013,6 @@
 <translation id="2526590354069164005">डेस्कटॉप</translation>
 <translation id="2526619973349913024">अद्यतनासाठी तपासा</translation>
 <translation id="2527167509808613699">कोणत्याही प्रकारचे कनेक्शन</translation>
-<translation id="2532026602297547439">सेन्सर खराब आहे</translation>
 <translation id="2532589005999780174">उच्च तीव्रता मोड</translation>
 <translation id="253434972992662860">&amp;विराम द्या</translation>
 <translation id="2534460670861217804">सुरक्षित HTTP प्रॉक्सी</translation>
@@ -1376,7 +1371,6 @@
 <translation id="3057861065630527966">आपले फोटो आणि व्हिडिओंचा बॅकअप घ्या</translation>
 <translation id="3060379269883947824">बोलण्यासाठी निवडा सुरू करा</translation>
 <translation id="3061707000357573562">पॅच सेवा</translation>
-<translation id="3064410671692449875">अपुरा डेटा</translation>
 <translation id="3065041951436100775">टॅबने नष्ट केलेला अभिप्राय</translation>
 <translation id="3067198179881736288">अ‍ॅप इंस्टॉल करायचे?</translation>
 <translation id="3067198360141518313">हे प्लगइन चालवा</translation>
@@ -2264,7 +2258,6 @@
 <translation id="4480590691557335796">Chrome तुमच्या काँप्युटरवरील नुकसानकारक सॉफ्टवेअर शोधू शकते आणि ते काढू शकते</translation>
 <translation id="4481530544597605423">जोडणी वेगळी केलेली डिव्हाइस</translation>
 <translation id="4482194545587547824">शोध आणि इतर Google सेवा वैयक्तीकृत करण्यासाठी Google आपल्या ब्राउझिंग इतिहासाचा वापर करू शकते</translation>
-<translation id="4493287891836751813">Google असिस्टंटला भेटा</translation>
 <translation id="4495419450179050807">या पृष्ठावर दर्शवू नका</translation>
 <translation id="4499718683476608392">एका क्लिकमध्ये फॉर्म भरण्यासाठी क्रेडिट कार्ड ऑटोफिल सुरू करा</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> क्रॅश झाले आहे</translation>
@@ -2319,7 +2312,6 @@
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना प्रमाणीकरण रद्द झाले.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> फाइल</translation>
 <translation id="457386861538956877">अधिक...</translation>
-<translation id="4576537685267142337">बोट उचला, नंतर पुन्हा सेन्सरला स्पर्श करा</translation>
 <translation id="4576541033847873020">Bluetooth डिव्हाइस जोडा</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> कास्ट करण्यात अक्षम.</translation>
 <translation id="4580526846085481512">तुमची खात्री आहे की आपण $1 आयटम हटवू इच्छिता?</translation>
@@ -2564,7 +2556,6 @@
 <translation id="4941627891654116707">फॉन्ट आकार</translation>
 <translation id="494286511941020793">प्रॉक्सी कॉन्फिगरेशन मदत</translation>
 <translation id="4945444280533270988">Smart Lock सुरू आहे</translation>
-<translation id="494660967831069720">आंशिक डेटा</translation>
 <translation id="4953689047182316270">प्रवेशयोग्यता कार्यक्रमांना प्रतिसाद द्या</translation>
 <translation id="4953808748584563296">डीफॉल्ट नारिंगी अवतार</translation>
 <translation id="4955814292505481804">वार्षिक</translation>
@@ -3523,7 +3514,6 @@
 <translation id="6384275966486438344">आपल्या शोध सेटिंग्ज यावर बदला: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">साइट कुकी डेटा सेव्ह करू आणि वाचू शकतात</translation>
 <translation id="6388429472088318283">भाषा शोधा</translation>
-<translation id="6388771388956873507">आपल्या डिव्हाइस वरील फिंगरप्रिंट सेन्सर शोधा आणि आपल्या बोटाने त्यास स्पर्श करा</translation>
 <translation id="6390799748543157332">या विंडोमध्ये आपण पाहत असलेली पेज ब्राउझर इतिहासात दिसणार नाहीत आणि आपण सर्व उघड्या अतिथी विंडो बंद केल्यानंतर संगणकावरील, कुकीज सारखे, अन्य ट्रेस ते सोडणार नाहीत. असे असले तरीही, आपण डाउनलोड करता त्या कोणत्याही फायली संरक्षित केल्या जातील.</translation>
 <translation id="6390994422085833176">सेटअपला फॉलो करणाऱ्या सिंक आणि पर्सनलाइझ वैशिष्ट्यांचे परीक्षण करा</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />सिस्टम माहिती<ph name="END_LINK1" /> आणि <ph name="BEGIN_LINK2" />मेट्रिक्स<ph name="END_LINK2" /> पाठवा</translation>
@@ -4127,7 +4117,6 @@
 <translation id="7309257895202129721">नियंत्रणे &amp;दर्शवा</translation>
 <translation id="7310598146671372464">लॉग इन करता आले नाही. सर्व्हर निर्दिष्ट केलेल्या Kerberos एंक्रिप्शन प्रकारांना सपोर्ट करत नाही. कृपया तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="7311079019872751559">सॅन्डबॉक्स न केलेला प्लगिन प्रवेश</translation>
-<translation id="7311891583377621132">फिंगरप्रिंटचा वेगळा भाग कॅप्चर करण्यासाठी थोडीशी हालचाल करा</translation>
 <translation id="7317680720589234980">स्क्रीन लॉक आणि साइन इन पर्याय</translation>
 <translation id="7321545336522791733">सर्व्हर आवाक्याबाहेर आहे</translation>
 <translation id="7324297612904500502">बीटा फोरम</translation>
@@ -4965,7 +4954,6 @@
 <translation id="8639047128869322042">हानिकारक सॉफ्टवेअरसाठी तपासत आहे...</translation>
 <translation id="8639963783467694461">स्वयंभरण सेटिंग्ज</translation>
 <translation id="8642171459927087831">प्रवेश टोकन</translation>
-<translation id="8642267168767642381">बोट खूप धीमे हलविले</translation>
 <translation id="8642947597466641025">मजकूर मोठा करा</translation>
 <translation id="8643418457919840804">पुढे सुरू ठेवण्यासाठी, पर्याय निवडा:</translation>
 <translation id="8645354835496065562">सेन्सर अॅक्सेस देणे सुरू ठेवा</translation>
@@ -5327,7 +5315,6 @@
 <translation id="916607977885256133">चित्रात-चित्र</translation>
 <translation id="9169496697824289689">कीबोर्ड शॉर्टकट पहा</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" /> ला होम स्क्रीनवर जोडा</translation>
-<translation id="9170397650136757332">आपल्या फिंगरप्रिंटचे सर्व भिन्न भाग कॅप्चर करण्यासाठी आता आपले बोट किंचित हलवा</translation>
 <translation id="9170848237812810038">&amp;पूर्ववत करा</translation>
 <translation id="9170884462774788842">आपल्या संगणकावरील दुसऱ्या प्रोग्रामने Chrome च्या कार्य करण्याचा मार्ग बदलू शकणारी थीम जोडली.</translation>
 <translation id="9173995187295789444">ब्लूटूथ डिव्हाइससाठी स्कॅन करत आहे...</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index e048ff8..848fc7b 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Item rak 5</translation>
 <translation id="1227507814927581609">Pengesahan gagal semasa menyambung ke "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">menu sistem</translation>
+<translation id="123186018454553812">Cuba kunci lain</translation>
 <translation id="1232569758102978740">Tidak Bertajuk</translation>
 <translation id="1233721473400465416">Tempat</translation>
 <translation id="1234808891666923653">Pekerja Perkhidmatan</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Gunakan penyegerakan dan semua perkhidmatan</translation>
 <translation id="1272079795634619415">Berhenti</translation>
-<translation id="1272242203003205253">Google Partner berfungsi dengan Assistant anda untuk membantu anda</translation>
 <translation id="1272978324304772054">Akaun pengguna ini tidak tergolong dalam domain tempat peranti anda didaftarkan. Jika anda ingin mendaftar untuk domain yang berbeza, anda perlu melalui pemulihan peranti terlebih dahulu.</translation>
 <translation id="1274977772557788323">Tetapan Storan Adobe Flash Player</translation>
 <translation id="1274997165432133392">Kuki dan data tapak yang lain</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Versi <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Cari kata laluan</translation>
 <translation id="1487335504823219454">Hidup - tetapan tersuai</translation>
+<translation id="1489664337021920575">Buat pilihan lain</translation>
 <translation id="1493892686965953381">Menunggu untuk <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> peranti lain yang tersedia.</translation>
 <translation id="1497522201463361063">Tidak dapat menamakan semula "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Tetingkap Aplikasi</translation>
 <translation id="15373452373711364">Kursor tetikus besar</translation>
 <translation id="1538729222189715449">Membuka fail Linux...</translation>
+<translation id="153933193410874873">Kami tidak dapat mengesahkan identiti anda pada peranti ini</translation>
 <translation id="1540605929960647700">Dayakan mod tunjuk cara</translation>
 <translation id="1543284117603151572">Diimport Daripada Edge</translation>
 <translation id="1545177026077493356">Mod Kios Automatik</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Imej ini tidak boleh digunakan. Pilih imej yang lain.</translation>
 <translation id="1566049601598938765">Tapak web</translation>
 <translation id="1567387640189251553">Papan kekunci lain telah disambungkan sejak kali terakhir anda memasukkan kata laluan. Papan kekunci ini mungkin sedang cuba mencuri ketukan kekunci anda.</translation>
+<translation id="1567750922576943685">Pengesahan identiti anda dapat melindungi maklumat peribadi anda</translation>
 <translation id="1567993339577891801">JavaScript Console</translation>
 <translation id="1568067597247500137">Redam tapak</translation>
 <translation id="1568323446248056064">Buka tetapan peranti paparan</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Tidak dapat mengesan telefon anda</translation>
 <translation id="1616206807336925449">Sambungan ini tidak memerlukan kebenaran khas.</translation>
 <translation id="1616298854599875024">Tidak dapat mengimport sambungan "<ph name="IMPORT_NAME" />" kerana bukan modul kongsi</translation>
-<translation id="161707228174452095">Cap jari ditambahkan!</translation>
 <translation id="1618268899808219593">P&amp;usat Bantuan</translation>
 <translation id="162035744160882748">Hidupkan penyegerakan, pemperibadian dan perkhidmatan Google yang lain</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">Arkib RAR</translation>
 <translation id="2034346955588403444">Tambahkan rangkaian Wi-Fi lain</translation>
 <translation id="203574396658008164">Dayakan ciri catatan nota daripada skrin kunci</translation>
-<translation id="2039623879703305659">Jari digerakkan terlalu cepat</translation>
 <translation id="2040460856718599782">Op! Berlaku masalah semasa cuba mengesahkan anda. Sila semak bukti kelayakan log masuk anda sekali lagi dan cuba semula.</translation>
 <translation id="2043818754674261542">Jarak yang diperlukan untuk telefon membuka kunci <ph name="DEVICE_TYPE" /> ini</translation>
 <translation id="204497730941176055">Nama Templat Sijil Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Padamkan sijil pelayan "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Auto Log masuk</translation>
 <translation id="2101225219012730419">Versi:</translation>
-<translation id="2107494551712864447">Tambahkan cap jari</translation>
 <translation id="2112877397266219826">Hidupkan pengawal sentuhan anda untuk menyediakan saya</translation>
 <translation id="21133533946938348">Pin Tab</translation>
 <translation id="2113479184312716848">Buka &amp;Fail...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Desktop</translation>
 <translation id="2526619973349913024">Semak kemas kini</translation>
 <translation id="2527167509808613699">Mana-mana jenis sambungan</translation>
-<translation id="2532026602297547439">Penderia kotor</translation>
 <translation id="2532589005999780174">Mod kontras tinggi</translation>
 <translation id="253434972992662860">&amp;Jeda</translation>
 <translation id="2534460670861217804">Proksi HTTP Selamat</translation>
@@ -1198,6 +1197,7 @@
 <translation id="2783298271312924866">Sudah dimuat turun</translation>
 <translation id="2783321960289401138">Buat pintasan...</translation>
 <translation id="2783829359200813069">Pilih jenis penyulitan</translation>
+<translation id="2783952358106015700">Gunakan kunci keselamatan anda dengan <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Mengaktifkan perkhidmatan data mudah alih anda</translation>
 <translation id="2785873697295365461">Pemerihal fail</translation>
 <translation id="2787047795752739979">Tulis ganti yang asal</translation>
@@ -1378,7 +1378,6 @@
 <translation id="3057861065630527966">Sandarkan foto dan video anda</translation>
 <translation id="3060379269883947824">Dayakan pilih untuk bercakap</translation>
 <translation id="3061707000357573562">Perkhidmatan Tampung</translation>
-<translation id="3064410671692449875">Data tidak mencukupi</translation>
 <translation id="3065041951436100775">Maklum balas tab dibunuh.</translation>
 <translation id="3067198179881736288">Pasang apl?</translation>
 <translation id="3067198360141518313">Jalankan pemalam ini</translation>
@@ -1511,6 +1510,7 @@
 <translation id="3285322247471302225">&amp;Tab Baharu</translation>
 <translation id="3288047731229977326">Sambungan yang dijalankan dalam mod pembangun boleh membahayakan komputer anda. Jika anda bukan pembangun, anda harus melumpuhkan sambungan yang dijalankan dalam mod pembangun ini supaya kekal selamat.</translation>
 <translation id="3289856944988573801">Untuk menyemak kemas kini, sila gunakan Ethernet atau Wi-Fi.</translation>
+<translation id="3292421191230118801">Sambung semula melihat tapak daripada mudah alih pada Chromebook anda</translation>
 <translation id="32939749466444286">Bekas Linux tidak dimulakan. Sila cuba lagi.</translation>
 <translation id="3294437725009624529">Tetamu</translation>
 <translation id="329838636886466101">Baiki</translation>
@@ -1553,6 +1553,7 @@
 <translation id="3348038390189153836">Peranti boleh tanggal dikesan</translation>
 <translation id="3348459612390503954">Tahniah!</translation>
 <translation id="3349933790966648062">Jejak Memori</translation>
+<translation id="3350117557200012647">Masuk ke mod penggandingan</translation>
 <translation id="3353984535370177728">Pilih folder untuk dimuat naik</translation>
 <translation id="3355936511340229503">Ralat sambungan</translation>
 <translation id="3356797067524893661">Anda telah sedia untuk terus ke Hangout Meet</translation>
@@ -1692,6 +1693,7 @@
 <translation id="3556000484321257665">Enjin carian anda telah ditukar kepada <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Aplikasi kios tidak dapat dimuat turun.</translation>
 <translation id="3564334271939054422">Rangkaian Wi-Fi yang anda gunakan (<ph name="NETWORK_ID" />) mungkin menghendaki anda melawati halaman log masuknya.</translation>
+<translation id="3564848315152754834">Kunci keselamatan USB</translation>
 <translation id="3566721612727112615">Tiada tapak ditambahkan</translation>
 <translation id="3569382839528428029">Adakah anda ingin <ph name="APP_NAME" /> berkongsi skrin anda?</translation>
 <translation id="3570985609317741174">Kandungan web</translation>
@@ -1742,6 +1744,7 @@
 <translation id="3627588569887975815">Buka pautan dalam tetingkap inko&amp;gnito</translation>
 <translation id="3627671146180677314">Masa Pembaharuan Sijil Netscape</translation>
 <translation id="3627879631695760395">Pasang <ph name="APP" />...</translation>
+<translation id="3630132874740063857">Telefon anda</translation>
 <translation id="3630995161997703415">Tambahkan tapak ini pada rak anda untuk digunakan pada bila-bila masa</translation>
 <translation id="3635030235490426869">Tab 1</translation>
 <translation id="3636096452488277381">Helo, <ph name="USER_GIVEN_NAME" /> .</translation>
@@ -1763,6 +1766,7 @@
 <translation id="3664511988987167893">Ikon Sambungan</translation>
 <translation id="3665589677786828986">Chrome mengesan bahawa sesetengah tetapan anda telah terganggu oleh program lain dan menetapkannya semula kepada tetapan lalainya yang asal.</translation>
 <translation id="3668570675727296296">Tetapan bahasa</translation>
+<translation id="3668801437375206837">Untuk mendiagnosis isu Bluetooth dengan lebih berkesan, Googler boleh menyertakan log Bluetooth tambahan dengan laporan maklum balas mereka. Apabila pilihan ini ditandai, laporan anda akan merangkumi log btsnoop dan HCI daripada sesi semasa anda, dibersihkan untuk mengalih keluar sebanyak mungkin PII. Akses kepada log ini akan dihadkan kepada pengurus kumpulan produk OS Chrome dalam Listnr. Log akan dihapuskan selepas 90 hari.</translation>
 <translation id="3668823961463113931">Pengendali</translation>
 <translation id="3670229581627177274">Hidupkan Bluetooth</translation>
 <translation id="3672681487849735243">Ralat kilang telah dikesan</translation>
@@ -1781,6 +1785,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> ingin berkongsi skrin anda</translation>
 <translation id="3693415264595406141">Kata laluan:</translation>
 <translation id="3694027410380121301">Pilih Tab Sebelumnya</translation>
+<translation id="369489984217678710">Kata laluan dan data log masuk yang lain</translation>
 <translation id="3699624789011381381">Alamat e-mel</translation>
 <translation id="3699920817649120894">Matikan penyegerakan dan pemperibadian?</translation>
 <translation id="3700888195348409686">Mempersembahkan (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1804,6 +1809,7 @@
 <translation id="3727148787322499904">Tindakan menukar tetapan ini akan menjejaskan semua rangkaian yang dikongsi</translation>
 <translation id="3727187387656390258">Periksa pop muncul</translation>
 <translation id="3729506734996624908">Tapak yang dibenarkan</translation>
+<translation id="3731997362820527097">Pilih kunci keselamatan anda</translation>
 <translation id="3732078975418297900">Ralat pada baris <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Pelayan SSL dengan Peningkatan</translation>
 <translation id="3735740477244556633">Isih mengikut</translation>
@@ -1904,6 +1910,7 @@
 <translation id="3860381078714302691">Selamat datang ke Hangout Meet</translation>
 <translation id="3861241522664181545">Halaman dijeda.</translation>
 <translation id="3862134173397075045">Selamat datang ke pengalaman Cast dalam Chrome!</translation>
+<translation id="3862693525629180217">Sahkan melalui penderia terbina dalam</translation>
 <translation id="3862788408946266506">Apl dengan atribut manifes 'kiosk_only' mesti dipasang dalam mod kios OS Chrome OS</translation>
 <translation id="3865414814144988605">Peleraian</translation>
 <translation id="386548886866354912">Dipek dengan <ph name="EXTENSION_NAME" /></translation>
@@ -2029,6 +2036,7 @@
 <translation id="4055023634561256217">Mula semula diperlukan sebelum peranti anda boleh ditetapkan semula dengan Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Lihat di Gedung</translation>
+<translation id="4058647953897694817">Sahkan melalui Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Periksa Dokumen Sekarang</translation>
 <translation id="406070391919917862">Apl Latar Belakang</translation>
@@ -2042,6 +2050,7 @@
 <translation id="407520071244661467">Skala</translation>
 <translation id="4075639477629295004">Tidak dapat menghantar <ph name="FILE_NAME" />.</translation>
 <translation id="4077917118009885966">Iklan disekat di tapak ini</translation>
+<translation id="4079799245038595838">Pemberitahuan telah dihantar ke telefon anda. Ikut arahan untuk mengesahkan identiti anda.</translation>
 <translation id="4081242589061676262">Tidak dapat menghantar fail.</translation>
 <translation id="4084682180776658562">Penanda halaman</translation>
 <translation id="4084835346725913160">Tutup <ph name="TAB_NAME" /></translation>
@@ -2141,6 +2150,7 @@
 <translation id="4250229828105606438">Tangkapan skrin</translation>
 <translation id="4250680216510889253">Tidak</translation>
 <translation id="4252852543720145436">Pengecam kandungan yang dilindungi</translation>
+<translation id="4252899949534773101">Bluetooth dilumpuhkan</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Kandungan tab dikongsi</translation>
 <translation id="4254813446494774748">Bahasa Terjemahan:</translation>
 <translation id="425573743389990240">Kadar Nyahcas Bateri dalam Watt (Nilai negatif bermakna bateri sedang dicas)</translation>
@@ -2266,8 +2276,8 @@
 <translation id="4480590691557335796">Chrome boleh mencari perisian yang berbahaya pada komputer anda dan mengalih keluar perisian tersebut</translation>
 <translation id="4481530544597605423">Peranti dinyahganding</translation>
 <translation id="4482194545587547824">Google boleh menggunakan sejarah penyemakan imbas anda untuk memperibadikan Carian dan perkhidmatan Google yang lain.</translation>
-<translation id="4493287891836751813">Temui Google Assistant anda</translation>
 <translation id="4495419450179050807">Jangan paparkan pada halaman ini</translation>
+<translation id="449938344715680828">Tekan |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| diikuti oleh |<ph name="ACCELERATOR3" />| untuk keluar</translation>
 <translation id="4499718683476608392">Dayakan Autolengkap kad kredit untuk mengisi borang dengan satu klikan</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> telah ranap</translation>
 <translation id="450099669180426158">Ikon tanda seru</translation>
@@ -2321,7 +2331,6 @@
 <translation id="4572659312570518089">Pengesahan dibatalkan semasa menyambung ke "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">Fail <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Lagi...</translation>
-<translation id="4576537685267142337">Angkat jari, kemudian sentuh penderia sekali lagi</translation>
 <translation id="4576541033847873020">Gandingkan peranti Bluetooth</translation>
 <translation id="4579581181964204535">Tidak dapat menghantar <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Adakah anda pasti anda mahu memadamkan item $1?</translation>
@@ -2344,6 +2353,7 @@
 <translation id="4611114513649582138">Sambungan data tersedia</translation>
 <translation id="4613271546271159013">Sambungan telah menukar halaman yang ditunjukkan apabila anda membuka halaman baharu.</translation>
 <translation id="4615586811063744755">tiada kuki dipilih</translation>
+<translation id="4615618657481886098">Anda sudah mendaftarkan kunci ini sebelum ini. Anda tidak perlu mendaftarkan kunci ini semula.</translation>
 <translation id="4617270414136722281">Pilihan sambungan</translation>
 <translation id="4619615317237390068">Tab daripada peranti lain</translation>
 <translation id="4620809267248568679">Tetapan ini dikuatkuasakan oleh sambungan.</translation>
@@ -2453,6 +2463,7 @@
 <translation id="4790972063719531840">Hantar data diagnostik dan penggunaan kepada Google secara automatik</translation>
 <translation id="4792711294155034829">&amp;Laporkan Isu...</translation>
 <translation id="479536056609751218">Laman Web, HTML Sahaja</translation>
+<translation id="4798236378408895261">Lampirkan <ph name="BEGIN_LINK" />Log Bluetooth<ph name="END_LINK" /> (dalaman Google)</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4801448226354548035">Sembunyikan akaun</translation>
 <translation id="4801512016965057443">Membenarkan perayauan data mudah alih</translation>
@@ -2519,6 +2530,7 @@
 <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>
+<translation id="4883274597792587930">Cari nama yang dicetak pada bahagian belakang kunci anda</translation>
 <translation id="4883436287898674711">Semua tapak <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">&amp;Pengurus Tugas</translation>
 <translation id="4883898390143004266">Bantu apl mencari lokasi anda. Gunakan perkhidmatan lokasi Google untuk membantu meningkatkan lokasi bagi apl. Google mungkin mengumpulkan data lokasi secara berkala dan menggunakan data ini secara awanama untuk meningkatkan ketepatan lokasi dan perkhidmatan berasaskan lokasi.<ph name="BEGIN_LINK1" />Ketahui Lebih Lanjut<ph name="END_LINK1" /></translation>
@@ -2566,7 +2578,6 @@
 <translation id="4941627891654116707">Saiz fon</translation>
 <translation id="494286511941020793">Bantuan Konfigurasi Proksi</translation>
 <translation id="4945444280533270988">Smart Lock dihidupkan</translation>
-<translation id="494660967831069720">Data sebahagian</translation>
 <translation id="4953689047182316270">Jawab Acara Kebolehaksesan</translation>
 <translation id="4953808748584563296">Avatar jingga lalai</translation>
 <translation id="4955814292505481804">Tahunan</translation>
@@ -2992,6 +3003,7 @@
 <translation id="55601339223879446">Laraskan sempadan desktop anda dalam lingkungan paparan</translation>
 <translation id="5562781907504170924">Tab ini disambungkan ke Peranti Bluetooth.</translation>
 <translation id="5563234215388768762">Cari di Google atau taip URL</translation>
+<translation id="5567950944308676169">Palamkan kunci keselamatan anda dan aktifkannya</translation>
 <translation id="5567989639534621706">Cache aplikasi</translation>
 <translation id="5568069709869097550">Tidak boleh log masuk</translation>
 <translation id="5568144734023334204">Storan Android</translation>
@@ -3238,6 +3250,7 @@
 <translation id="5931146425219109062">Baca dan ubah semua data anda pada tapak web yang anda lawati</translation>
 <translation id="5932881020239635062">Siri</translation>
 <translation id="5933376509899483611">Zon waktu</translation>
+<translation id="5938002010494270685">Peningkatan keselamatan tersedia</translation>
 <translation id="5939518447894949180">Tetapkan semula</translation>
 <translation id="5939847200023027600">Perkhidmatan Pengatur Huruf PDF</translation>
 <translation id="5941153596444580863">Tambah orang...</translation>
@@ -3274,6 +3287,7 @@
 <translation id="6006484371116297560">Klasik</translation>
 <translation id="6007237601604674381">Pemindahan gagal. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Carian suara dalam bahasa anda tidak tersedia.</translation>
+<translation id="6009781704028455063">Penderia terbina dalam</translation>
 <translation id="6010869025736512584">Mengakses input video</translation>
 <translation id="6011193465932186973">Cap jari</translation>
 <translation id="6011449291337289699">Kosongkan data tapak</translation>
@@ -3284,6 +3298,7 @@
 <translation id="6020431688553761150">Pelayan tidak membenarkan anda mengakses sumber ini.</translation>
 <translation id="602251597322198729">Tapak ini mencuba untuk memuat turun berbilang fail. Adakah anda mahu membenarkan ini?</translation>
 <translation id="6022526133015258832">Buka Skrin Penuh</translation>
+<translation id="6022705094403139349">Bersedia untuk menggandingkan kunci keselamatan anda?</translation>
 <translation id="6023643151125006053">Peranti ini (SN: <ph name="SERIAL_NUMBER" />) telah dikunci oleh pentadbir <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">Pengesanan Susunan</translation>
 <translation id="6026047032548434446">Pasang Apl?</translation>
@@ -3347,6 +3362,7 @@
 <translation id="6105877918873366097">Kali terakhir diakses</translation>
 <translation id="6107012941649240045">Dikeluarkan Kepada</translation>
 <translation id="6112294629795967147">Sentuh untuk mengubah saiz</translation>
+<translation id="6112931163620622315">Semak telefon anda</translation>
 <translation id="6112952769866305444">Edit orang, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Lihat teks dan imej yang disalin ke papan keratan</translation>
 <translation id="6116921718742659598">Tukar tetapan bahasa dan input</translation>
@@ -3392,6 +3408,7 @@
 <translation id="6169666352732958425">Tidak dapat menghantar desktop.</translation>
 <translation id="6171948306033499786">Jedakan pencetakan</translation>
 <translation id="6175314957787328458">Microsoft Domain GUID</translation>
+<translation id="6176043333338857209">Bluetooth akan dihidupkan buat sementara waktu untuk berkomunikasi dengan kunci keselamatan anda</translation>
 <translation id="6178664161104547336">Pilih sijil</translation>
 <translation id="6181431612547969857">Muat turun disekat</translation>
 <translation id="6185132558746749656">Lokasi Peranti</translation>
@@ -3479,6 +3496,7 @@
 <translation id="6311220991371174222">Tidak dapat memulakan Chrome kerana berlaku kesilapan semasa membuka profil anda. Cuba mulakan semula Chrome.</translation>
 <translation id="6312400084708441752">Merangkumi maklumat tentang perisian, tetapan sistem dan proses yang berbahaya pada komputer anda</translation>
 <translation id="6312403991423642364">Ralat rangkaian tidak diketahui</translation>
+<translation id="6313320178014547270">Anda menggunakan kunci yang tidak berdaftar dengan tapak web ini</translation>
 <translation id="6313641880021325787">KELUAR DARIPADA VR</translation>
 <translation id="6314819609899340042">Anda telah berjaya mendayakan ciri penyahpepijatan pada <ph name="IDS_SHORT_PRODUCT_NAME" /> peranti ini.</translation>
 <translation id="6315493146179903667">Bring All to Front</translation>
@@ -3523,7 +3541,6 @@
 <translation id="6384275966486438344">Ubah tetapan carian anda kepada: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Tapak boleh menyimpan dan membaca data kuki</translation>
 <translation id="6388429472088318283">Cari bahasa</translation>
-<translation id="6388771388956873507">Cari penderia cap jari pada peranti anda dan sentuh penderia itu menggunakan jari anda</translation>
 <translation id="6390799748543157332">Halaman yang anda lihat dalam tetingkap ini tidak akan dipaparkan dalam sejarah penyemak imbas dan halaman ini tidak akan meninggalkan kesan lain, seperti kuki, pada komputer selepas anda menutup semua tetingkap Tetamu yang terbuka. Walau bagaimanapun, sebarang fail yang anda muat turun akan disimpan.</translation>
 <translation id="6390994422085833176">Semak ciri penyegerakan dan pemeribadian selepas penyediaan dilakukan</translation>
 <translation id="6395423953133416962">Hantar <ph name="BEGIN_LINK1" />maklumat sistem<ph name="END_LINK1" /> dan <ph name="BEGIN_LINK2" />metrik<ph name="END_LINK2" /></translation>
@@ -3535,6 +3552,7 @@
 <translation id="6399774419735315745">Perisik</translation>
 <translation id="6401445054534215853">Item rak 1</translation>
 <translation id="6404511346730675251">Edit penanda halaman</translation>
+<translation id="6405510437656969977">Teruskan apabila anda bersedia untuk memasukkan PIN</translation>
 <translation id="6406303162637086258">Rangsang mula semula penyemak imbas</translation>
 <translation id="6406506848690869874">Segerak</translation>
 <translation id="6408118934673775994">Baca dan tukar data anda di <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> dan <ph name="WEBSITE_3" /></translation>
@@ -3653,6 +3671,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Kandungan desktop dikongsi</translation>
 <translation id="6580151766480067746">Versi ARC</translation>
 <translation id="6581162200855843583">Pautan Google Drive</translation>
+<translation id="6582080224869403177">Tetapkan semula <ph name="DEVICE_TYPE" /> anda untuk meningkatkan keselamatan anda.</translation>
 <translation id="6582421931165117398">Untuk melindungi maklumat peribadi anda, tukar kata laluan anda sekarang. Sebelum anda boleh menukar kata laluan, anda akan diminta untuk log masuk.</translation>
 <translation id="6583851739559471707">Disekat di tapak yang cenderung menyiarkan iklan yang mengganggu (disyorkan)</translation>
 <translation id="6584878029876017575">Menandatangani Microsoft Sepanjang Hayat</translation>
@@ -3702,6 +3721,7 @@
 <translation id="6644846457769259194">Mengemas kini peranti anda (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL Pembatalan Pihak Berkuasa Pensijilan Netscape</translation>
 <translation id="6647838571840953560">Pada masa ini di <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Kunci keselamatan diaktifkan...</translation>
 <translation id="6648911618876616409">Kemas kini genting sudah sedia untuk dipasang. Log masuk untuk bermula.</translation>
 <translation id="6649018507441623493">Tunggu sebentar...</translation>
 <translation id="6649563841575838401">Format arkib tidak disokong atau fail rosak.</translation>
@@ -3777,6 +3797,7 @@
 <translation id="6759193508432371551">Tetapan semula kilang</translation>
 <translation id="6767639283522617719">Tidak dapat menghubungkan domain. Pastikan tetapan untuk unit organisasi adalah betul.</translation>
 <translation id="6769712124046837540">Menambah pencetak...</translation>
+<translation id="6770664076092644100">Sahkan melalui NFC</translation>
 <translation id="6771503742377376720">Adalah Pihak Berkuasa Pensijilan</translation>
 <translation id="6777817260680419853">Ubah hala disekat</translation>
 <translation id="6778959797435875428">Nyahredam tapak</translation>
@@ -3812,6 +3833,7 @@
 <translation id="6823506025919456619">Anda perlu log masuk ke Chrome untuk melihat peranti anda</translation>
 <translation id="6824564591481349393">Salin &amp;Alamat E-mel</translation>
 <translation id="6825184156888454064">Isih mengikut nama</translation>
+<translation id="6826872289184051766">Sahkan melalui USB</translation>
 <translation id="6827236167376090743">Video ini akan terus dimainkan untuk tempoh yang lama.</translation>
 <translation id="6828153365543658583">Hadkan log masuk bagi pengguna berikut:</translation>
 <translation id="6828860976882136098">Gagal menyediakan kemas kini automatik untuk semua pengguna (ralat sebelum pelaksanaan: <ph name="ERROR_NUMBER" />)</translation>
@@ -3845,6 +3867,7 @@
 <translation id="6880587130513028875">Imej disekat pada halaman ini.</translation>
 <translation id="6883319974225028188">Op!  Sistem gagal menyimpan konfigurasi peranti.</translation>
 <translation id="6885771755599377173">Pratonton Maklumat Sistem</translation>
+<translation id="6886476658664859389">Kunci keselamatan NFC</translation>
 <translation id="6886871292305414135">Buka pautan dalam &amp;tab baharu</translation>
 <translation id="6892812721183419409">Buka Pautan sebagai <ph name="USER" /></translation>
 <translation id="6896758677409633944">Salin</translation>
@@ -4010,6 +4033,7 @@
 <translation id="713122686776214250">Tambah ha&amp;laman...</translation>
 <translation id="7133578150266914903">Pentadbir anda sedang membalikkan peranti ini (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Jadikan Teks Lebih Kecil</translation>
+<translation id="7135729336746831607">Hidupkan Bluetooth?</translation>
 <translation id="7136694880210472378">Jadikan lalai</translation>
 <translation id="7136984461011502314">Selamat datang ke <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Terdapat ralat. Sila cuba lagi dengan memilih imej lain.</translation>
@@ -4055,6 +4079,7 @@
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' dipadamkan</translation>
 <translation id="7206693748120342859">Memuat turun <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Keluar daripada halaman}other{Keluar daripada halaman}}</translation>
+<translation id="721467499098558573">Tekan dan tahan butang pada kunci keselamatan anda selama sekurang-kurangnya 5 saat</translation>
 <translation id="7216409898977639127">Penyedia selular</translation>
 <translation id="7216595297012131718">Susun bahasa berdasarkan pilihan anda</translation>
 <translation id="7220019174139618249">Tidak dapat mengeksport kata laluan ke "<ph name="FOLDER" />"</translation>
@@ -4090,6 +4115,7 @@
 <translation id="7256710573727326513">Buka dalam tab</translation>
 <translation id="725758059478686223">Perkhidmatan Cetak</translation>
 <translation id="7257666756905341374">Baca data yang anda salin dan tampal</translation>
+<translation id="7260764918845374269">Untuk melihat kunci keselamatan anda, kunci tersebut perlu berada dalam mod penggandingan. Tekan butang pada kunci anda selama sekurang-kurangnya 5 saat.</translation>
 <translation id="7262004276116528033">Perkhidmatan log masuk ini dihoskan oleh <ph name="SAML_DOMAIN" /></translation>
 <translation id="7268365133021434339">Tutup Tab</translation>
 <translation id="7268659760406822741">Perkhidmatan yang tersedia</translation>
@@ -4126,7 +4152,6 @@
 <translation id="7309257895202129721">Paparkan &amp;kawalan</translation>
 <translation id="7310598146671372464">Gagal log masuk. Pelayan tidak menyokong jenis penyulitan Kerberos yang dinyatakan. Sila hubungi pentadbir anda.</translation>
 <translation id="7311079019872751559">Akses pemalam tanpa kotak pasir</translation>
-<translation id="7311891583377621132">Bergerak sedikit untuk menangkap bahagian lain cap jari anda</translation>
 <translation id="7317680720589234980">Pilihan kunci skrin dan log masuk</translation>
 <translation id="7321545336522791733">Pelayan tidak dapat dihubungi</translation>
 <translation id="7324297612904500502">Forum Beta</translation>
@@ -4208,6 +4233,7 @@
 <translation id="7464490149090366184">Gagal mengezip, item wujud: $1</translation>
 <translation id="7465778193084373987">URL Pembatalan Sijil Netscape</translation>
 <translation id="7469406957790636836">Untuk menghidupkan ciri ini, hidupkan semakan ejaan dahulu dalam <ph name="BEGIN_LINK" />Bahasa dan input<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Hantar pemberitahuan kepada anda dan tetapkan mengingati komputer ini untuk Messages sebagai pilihan lalai</translation>
 <translation id="7469894403370665791">Menyambung ke rangkaian ini secara automatik</translation>
 <translation id="747114903913869239">Ralat: Tidak dapat menyahkod sambungan</translation>
 <translation id="7473753388963818366">Mari sediakan <ph name="DEVICE_TYPE" /> anda</translation>
@@ -4257,6 +4283,7 @@
 <translation id="7531779363494549572">Pergi ke Tetapan &gt; Apl &amp; pemberitahuan &gt; Pemberitahuan.</translation>
 <translation id="7536709149194614609">Sila mulakan semula peranti dan cuba lagi kemudian.</translation>
 <translation id="7537601449003285327">Sematkan pada bar tugas</translation>
+<translation id="7539856059004947393">Kunci keselamatan Bluetooth</translation>
 <translation id="7540972813190816353">Ralat berlaku semasa menyemak kemas kini: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Dayakan ciri penyahpepijatan pada peranti <ph name="IDS_SHORT_PRODUCT_NAME" /> ini</translation>
 <translation id="7544853251252956727">Rombak</translation>
@@ -4359,6 +4386,7 @@
 <translation id="7709152031285164251">Gagal - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Cast...</translation>
 <translation id="7711920809702896782">Maklumat imej</translation>
+<translation id="7712740978240882272">Buka kunci Chromebook dengan telefon anda. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Sambungan tidak diketahui dengan ID <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Kuki daripada <ph name="DOMAIN" /> dibenarkan</translation>
 <translation id="7714464543167945231">Sijil</translation>
@@ -4574,6 +4602,7 @@
 <translation id="7984068253310542383">Cerminkan <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Baca dan ubah tetapan kata laluan yang disimpan</translation>
 <translation id="7987764905897278458">Dapatkan lagi Google pintar</translation>
+<translation id="798835209536175951">Hantar dan terima mesej teks daripada Chromebook anda. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Dayakan ciri kebolehcapaian</translation>
 <translation id="7994702968232966508">Kaedah EAP</translation>
 <translation id="799547531016638432">Alih keluar pintasan</translation>
@@ -4706,6 +4735,7 @@
 <translation id="8185331656081929126">Paparkan pemberitahuan apabila pencetak baharu dikesan pada rangkaian</translation>
 <translation id="8186609076106987817">Pelayan tidak dapat mencari fail.</translation>
 <translation id="8188120771410500975">&amp;Semak ejaan medan teks</translation>
+<translation id="8188389033983459049">Semak tetapan peranti anda dan hidupkannya untuk meneruskan</translation>
 <translation id="8190193592390505034">Disambungkan ke <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Uruskan apl, sambungan dan tema anda</translation>
 <translation id="8191453843330043793">Pelerai Proksi V8</translation>
@@ -4801,6 +4831,7 @@
 <translation id="8353683614194668312">Item boleh:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Pulihkan halaman?</translation>
+<translation id="8362993567435070757">Cari PIN 6 digit di bahagian belakang kunci anda</translation>
 <translation id="8363095875018065315">stabil</translation>
 <translation id="8363142353806532503">Mikrofon disekat</translation>
 <translation id="8366396658833131068">Sambungan rangkaian anda sudah dipulihkan. Sila pilih rangkaian lain atau tekan butang 'Teruskan' di bawah untuk melancarkan apl kios anda.</translation>
@@ -4809,6 +4840,7 @@
 <translation id="8371695176452482769">Cakap sekarang</translation>
 <translation id="8372369524088641025">Kekunci WEP teruk</translation>
 <translation id="8373553483208508744">Redam beberapa tab</translation>
+<translation id="8379878387931047019">Peranti ini tidak menyokong jenis kunci keselamatan yang diminta oleh tapak web ini</translation>
 <translation id="8382913212082956454">Salin &amp;alamat e-mel</translation>
 <translation id="8386903983509584791">Pengimbasan selesai</translation>
 <translation id="8389492867173948260">Benarkan sambungan ini membaca dan mengubah semua data anda di tapak web yang anda lawati:</translation>
@@ -4927,6 +4959,7 @@
 <translation id="8557930019681227453">Manifes</translation>
 <translation id="8559694214572302298">Penyahkod Imej</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Teruskan Membaca</translation>
 <translation id="8565650234829130278">Cuba untuk menurunkan taraf apl.</translation>
 <translation id="8569002732135253578">Sekarang mencetak <ph name="DOCUMENT_NAME" /></translation>
 <translation id="8569682776816196752">Tiada destinasi dijumpai</translation>
@@ -4967,7 +5000,6 @@
 <translation id="8639047128869322042">Menyemak untuk mengesan perisian berbahaya...</translation>
 <translation id="8639963783467694461">Tetapan auto isi</translation>
 <translation id="8642171459927087831">Token Akses</translation>
-<translation id="8642267168767642381">Jari digerakkan terlalu perlahan</translation>
 <translation id="8642947597466641025">Jadikan Teks Lebih Besar</translation>
 <translation id="8643418457919840804">Buat pilihan untuk meneruskan:</translation>
 <translation id="8645354835496065562">Teruskan membenarkan akses penderia</translation>
@@ -4982,6 +5014,7 @@
 <translation id="8655295600908251630">Saluran</translation>
 <translation id="8655319619291175901">Op, sesuatu telah berlaku.</translation>
 <translation id="8655972064210167941">Log masuk gagal kerana kata laluan anda tidak dapat disahkan. Sila hubungi pentadbir anda atau cuba lagi.</translation>
+<translation id="8656619792520327915">Tambah kunci keselamatan Bluetooth yang lain</translation>
 <translation id="8656768832129462377">Jangan periksa</translation>
 <translation id="8658595122208653918">Tukar pilihan pencetak...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> berkongsi skrin dan audio anda dengan <ph name="TAB_NAME" />.</translation>
@@ -5104,6 +5137,7 @@
 <translation id="8814687660896548945">Sila tunggu, arkib sedang diimbas…</translation>
 <translation id="881799181680267069">Sembunyikan Yang Lain</translation>
 <translation id="8818152010000655963">Kertas dinding</translation>
+<translation id="8818958672113348984">Sahkan melalui telefon anda</translation>
 <translation id="8820817407110198400">Penanda buku</translation>
 <translation id="8821045908425223359">Konfigurasikan alamat IP secara automatik</translation>
 <translation id="882204272221080310">Kemas kini perisian tegar untuk keselamatan tambahan.</translation>
@@ -5134,11 +5168,13 @@
 <translation id="8872155268274985541">Fail manifes kemas kini luar Kiosk yang tidak sah dijumpai. Gagal mengemas kini apl Kiosk. Sila alih keluar batang USB.</translation>
 <translation id="8874184842967597500">Tidak bersambung</translation>
 <translation id="8876215549894133151">Format:</translation>
+<translation id="8876307312329369159">Tetapan ini tidak boleh ditukar dalam sesi tunjuk cara.</translation>
 <translation id="8876309039915144086">Jana kata laluan...</translation>
 <translation id="8877448029301136595">[direktori induk]</translation>
 <translation id="8879284080359814990">&amp;Paparkan Sebagai Tab</translation>
 <translation id="8883847527783433352">Segerakkan ke Akaun Lain</translation>
 <translation id="8885197664446363138">Smart Lock tidak tersedia</translation>
+<translation id="88870264962436283">Gunakan ID Sentuh dengan <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Warna:</translation>
 <translation id="8890516388109605451">Sumber</translation>
 <translation id="8892168913673237979">Sudah bersedia!</translation>
@@ -5159,6 +5195,7 @@
 <translation id="8915370057835397490">Memuatkan cadangan</translation>
 <translation id="8916476537757519021">Subbingkai Inkognito: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Log masuk dan hidupkan penyegerakan untuk mendapatkan semua kata laluan anda pada semua peranti anda.</translation>
+<translation id="8921366488406707015">Mengesahkan kunci keselamatan anda...</translation>
 <translation id="8922013791253848639">Sentiasa benarkan iklan di tapak ini</translation>
 <translation id="8925458182817574960">&amp;Tetapan</translation>
 <translation id="8926389886865778422">Jangan tanya lagi</translation>
@@ -5267,6 +5304,7 @@
 <translation id="9066782832737749352">Teks kepada Pertuturan</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> melog masuk anda secara automatik ke tapak web dan apl yang layak menggunakan kata laluan yang disimpan.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Gandingkan kunci anda dengan peranti ini supaya anda boleh menggunakan kunci itu untuk log masuk ke akaun anda</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Tetikus USB disambungkan</translation>
 <translation id="9076523132036239772">Maaf, e-mel atau kata laluan anda tidak dapat disahkan. Cuba menyambung ke rangkaian dahulu.</translation>
@@ -5328,7 +5366,6 @@
 <translation id="916607977885256133">Gambar dalam Gambar</translation>
 <translation id="9169496697824289689">Lihat pintasan papan kekunci</translation>
 <translation id="9169931577761441333">Tambahkan <ph name="APP_NAME" /> pada Skrin utama</translation>
-<translation id="9170397650136757332">Sekarang, gerakkan jari anda sedikit untuk menangkap semua bahagian lain cap jari anda</translation>
 <translation id="9170848237812810038">&amp;Buat asal</translation>
 <translation id="9170884462774788842">Program lain pada komputer anda menambah tema yang boleh mengubah cara Chrome berfungsi.</translation>
 <translation id="9173995187295789444">Mengimbas peranti Bluetooth...</translation>
@@ -5392,6 +5429,7 @@
 <translation id="971774202801778802">URL Penanda Halaman</translation>
 <translation id="973473557718930265">Keluar</translation>
 <translation id="974555521953189084">Masukkan ungkapan laluan anda untuk memulakan penyegerakan</translation>
+<translation id="977640333593638907">Untuk menggunakan kebanyakan kunci, tekan sahaja butangnya</translation>
 <translation id="981121421437150478">Luar talian</translation>
 <translation id="983511809958454316">Ciri ini tidak disokong dalam VR</translation>
 <translation id="984275831282074731">Kaedah pembayaran</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 20d880f..cf6f7cd 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Plankartikel 5</translation>
 <translation id="1227507814927581609">Verificatie mislukt tijdens verbinden met '<ph name="DEVICE_NAME" />'.</translation>
 <translation id="1230807973377071856">systeemmenu</translation>
+<translation id="123186018454553812">Een andere sleutel proberen</translation>
 <translation id="1232569758102978740">Naamloos</translation>
 <translation id="1233721473400465416">Landinstelling</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Synchronisatie en alle services gebruiken</translation>
 <translation id="1272079795634619415">Stop</translation>
-<translation id="1272242203003205253">Google-partners werken samen met je Assistent om je te helpen</translation>
 <translation id="1272978324304772054">Dit gebruikersaccount hoort niet bij het domein waarbij het apparaat is geregistreerd. Als je het apparaat wilt registreren bij een ander domein, moet je eerst apparaatherstel uitvoeren.</translation>
 <translation id="1274977772557788323">Opslaginstellingen voor Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies en andere sitegegevens</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Versie <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Wachtwoorden zoeken</translation>
 <translation id="1487335504823219454">Aan - aangepaste instellingen</translation>
+<translation id="1489664337021920575">Een andere optie kiezen</translation>
 <translation id="1493892686965953381">Wachten op <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> andere beschikbare apparaten.</translation>
 <translation id="1497522201463361063">Kan de naam van '<ph name="FILE_NAME" />' niet wijzigen. <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">App-venster</translation>
 <translation id="15373452373711364">Grote muisaanwijzer</translation>
 <translation id="1538729222189715449">Linux-bestanden openen…</translation>
+<translation id="153933193410874873">We kunnen je identiteit niet verifiëren op dit apparaat</translation>
 <translation id="1540605929960647700">Demomodus inschakelen</translation>
 <translation id="1543284117603151572">Geïmporteerd uit Edge</translation>
 <translation id="1545177026077493356">Automatische kioskmodus</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Deze afbeelding kan niet worden gebruikt. Kies een andere afbeelding.</translation>
 <translation id="1566049601598938765">Website</translation>
 <translation id="1567387640189251553">Er is een ander toetsenbord aangesloten sinds de laatste keer dat je je wachtwoord hebt ingevoerd. Mogelijk wordt geprobeerd om je toetsaanslagen te stelen.</translation>
+<translation id="1567750922576943685">Wanneer je je identiteit verifieert, blijven je persoonlijke gegevens beter beschermd</translation>
 <translation id="1567993339577891801">JavaScript-console</translation>
 <translation id="1568067597247500137">Geluid van site dempen</translation>
 <translation id="1568323446248056064">Weergave-instellingen van apparaat openen</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Je telefoon kan niet worden gedetecteerd</translation>
 <translation id="1616206807336925449">De extensie vereist geen speciale rechten.</translation>
 <translation id="1616298854599875024">Kan '<ph name="IMPORT_NAME" />' niet importeren, omdat dit geen gedeelde module is</translation>
-<translation id="161707228174452095">Vingerafdruk is toegevoegd.</translation>
 <translation id="1618268899808219593">H&amp;elpcentrum</translation>
 <translation id="162035744160882748">Synchronisatie, personalisatie en andere Google-services inschakelen</translation>
 <translation id="1620510694547887537">Camera</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">RAR-archief</translation>
 <translation id="2034346955588403444">Ander wifi-netwerk toevoegen</translation>
 <translation id="203574396658008164">Notities maken vanaf inlogscherm inschakelen</translation>
-<translation id="2039623879703305659">Vinger te snel bewogen</translation>
 <translation id="2040460856718599782">Er is iets verkeerd gegaan tijdens de verificatie. Controleer je inloggegevens en probeer het opnieuw.</translation>
 <translation id="2043818754674261542">Afstand die nodig is om deze <ph name="DEVICE_TYPE" /> te ontgrendelen met de telefoon</translation>
 <translation id="204497730941176055">Sjabloonnaam van Microsoft-certificaat</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Servercertificaat '<ph name="CERTIFICATE_NAME" />' verwijderen?</translation>
 <translation id="2100273922101894616">Automatisch inloggen</translation>
 <translation id="2101225219012730419">Versie:</translation>
-<translation id="2107494551712864447">Een vingerafdruk toevoegen</translation>
 <translation id="2112877397266219826">Schakel je touch-controller in om mij in te stellen</translation>
 <translation id="21133533946938348">Tabblad vastzetten</translation>
 <translation id="2113479184312716848">Bestand &amp;openen...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Bureaublad</translation>
 <translation id="2526619973349913024">Controleren op updates</translation>
 <translation id="2527167509808613699">Elk soort verbinding</translation>
-<translation id="2532026602297547439">Vuil op sensor</translation>
 <translation id="2532589005999780174">Modus voor hoog contrast</translation>
 <translation id="253434972992662860">&amp;Onderbreken</translation>
 <translation id="2534460670861217804">Beveiligde HTTP-proxy</translation>
@@ -1197,6 +1196,7 @@
 <translation id="2783298271312924866">Gedownload</translation>
 <translation id="2783321960289401138">Snelle link maken…</translation>
 <translation id="2783829359200813069">Versleutelingstypen selecteren</translation>
+<translation id="2783952358106015700">Je beveiligingssleutel gebruiken met <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Je mobiele netwerk activeren</translation>
 <translation id="2785873697295365461">Bestandsdescriptors</translation>
 <translation id="2787047795752739979">Oorspronkelijk bestand overschrijven</translation>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">Een back-up van je foto's en video's maken</translation>
 <translation id="3060379269883947824">'Selecteer om uitgesproken te worden' inschakelen</translation>
 <translation id="3061707000357573562">Patchservice</translation>
-<translation id="3064410671692449875">Onvoldoende gegevens</translation>
 <translation id="3065041951436100775">Feedback over gesloten tabblad.</translation>
 <translation id="3067198179881736288">App installeren?</translation>
 <translation id="3067198360141518313">Deze plugin uitvoeren</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">Nieuw &amp;tabblad</translation>
 <translation id="3288047731229977326">Extensies die in de ontwikkelaarmodus worden uitgevoerd, kunnen je computer beschadigen. Als je geen ontwikkelaar bent, moet je deze extensies uitschakelen, die in de ontwikkelaarsmodus worden uitgevoerd, om beveiligd te blijven.</translation>
 <translation id="3289856944988573801">Gebruik Ethernet of wifi om op updates te controleren.</translation>
+<translation id="3292421191230118801">Doorgaan met sites bekijken via mobiel op je Chromebook</translation>
 <translation id="32939749466444286">De Linux-container is niet gestart. Probeer het opnieuw.</translation>
 <translation id="3294437725009624529">Gast</translation>
 <translation id="329838636886466101">Repareren</translation>
@@ -1552,6 +1552,7 @@
 <translation id="3348038390189153836">Verwisselbaar apparaat gedetecteerd</translation>
 <translation id="3348459612390503954">Gefeliciteerd</translation>
 <translation id="3349933790966648062">Geheugenvoetafdruk</translation>
+<translation id="3350117557200012647">De koppelingsmodus activeren</translation>
 <translation id="3353984535370177728">Een map voor uploaden selecteren</translation>
 <translation id="3355936511340229503">Verbindingsfout</translation>
 <translation id="3356797067524893661">Je bent gereed om door te gaan met Hangouts Meet</translation>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">Je zoekmachine is gewijzigd in <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Kiosk-app kan niet worden gedownload.</translation>
 <translation id="3564334271939054422">Het is mogelijk dat je de inlogpagina moet bezoeken van het wifi-netwerk dat je gebruikt (<ph name="NETWORK_ID" />).</translation>
+<translation id="3564848315152754834">USB-beveiligingssleutel</translation>
 <translation id="3566721612727112615">Geen sites toegevoegd</translation>
 <translation id="3569382839528428029">Wil je je scherm delen met <ph name="APP_NAME" />?</translation>
 <translation id="3570985609317741174">Webinhoud</translation>
@@ -1741,6 +1743,7 @@
 <translation id="3627588569887975815">Link openen in inco&amp;gnitovenster</translation>
 <translation id="3627671146180677314">Vernieuwingsmoment voor Netscape-certificaat</translation>
 <translation id="3627879631695760395"><ph name="APP" /> installeren...</translation>
+<translation id="3630132874740063857">Je telefoon</translation>
 <translation id="3630995161997703415">Voeg deze site aan je plank toe om hem altijd te kunnen gebruiken</translation>
 <translation id="3635030235490426869">Tabblad 1</translation>
 <translation id="3636096452488277381">Hallo, <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">Extensiepictogram</translation>
 <translation id="3665589677786828986">Chrome heeft gedetecteerd dat sommige van je instellingen zijn beschadigd door een ander programma en heeft de instellingen teruggezet naar de oorspronkelijke standaardwaarden.</translation>
 <translation id="3668570675727296296">Taalinstellingen</translation>
+<translation id="3668801437375206837">Googlers kunnen aanvullende Bluetooth-logboeken toevoegen aan hun feedbackrapporten om Bluetooth-problemen beter te analyseren. Als deze optie is aangevinkt, bevat je rapport btsnoop- en HCI-logboeken van je huidige sessie die zijn opgeschoond om zo veel mogelijk PII te verwijderen. Toegang tot deze logboeken is beperkt tot beheerders van de productgroep Chrome OS in Listnr. Logboeken worden na negentig dagen verwijderd.</translation>
 <translation id="3668823961463113931">Handlers</translation>
 <translation id="3670229581627177274">Bluetooth inschakelen</translation>
 <translation id="3672681487849735243">Er is een fabrieksfout gedetecteerd</translation>
@@ -1780,6 +1784,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> wil je scherm delen</translation>
 <translation id="3693415264595406141">Wachtwoord:</translation>
 <translation id="3694027410380121301">Selecteer vorig tabblad</translation>
+<translation id="369489984217678710">Wachtwoorden en andere inloggegevens</translation>
 <translation id="3699624789011381381">E-mailadres</translation>
 <translation id="3699920817649120894">Synchronisatie en personalisatie uitschakelen?</translation>
 <translation id="3700888195348409686">Gepresenteerd (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1803,6 +1808,7 @@
 <translation id="3727148787322499904">Het wijzigen van deze instelling is van invloed op alle gedeelde netwerken</translation>
 <translation id="3727187387656390258">Pop-up controleren</translation>
 <translation id="3729506734996624908">Toegestane sites</translation>
+<translation id="3731997362820527097">Je beveiligingssleutel selecteren</translation>
 <translation id="3732078975418297900">Fout op regel <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-server met step-up</translation>
 <translation id="3735740477244556633">Sorteren op</translation>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">Welkom bij Hangouts Meet</translation>
 <translation id="3861241522664181545">Pagina is onderbroken.</translation>
 <translation id="3862134173397075045">Welkom bij de Cast-functie in Chrome!</translation>
+<translation id="3862693525629180217">Verifiëren via ingebouwde sensor</translation>
 <translation id="3862788408946266506">Een app met het manifestkenmerk 'kiosk_only' moet worden geïnstalleerd in de Chrome OS-kioskmodus</translation>
 <translation id="3865414814144988605">Resolutie</translation>
 <translation id="386548886866354912">Inpakken met <ph name="EXTENSION_NAME" /></translation>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">Opnieuw starten is vereist voordat je apparaat opnieuw kan worden ingesteld met Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Bekijken in de Web Store</translation>
+<translation id="4058647953897694817">Verifiëren via Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Controleer document nu</translation>
 <translation id="406070391919917862">Achtergrondapplicaties</translation>
@@ -2041,6 +2049,7 @@
 <translation id="407520071244661467">Schaal</translation>
 <translation id="4075639477629295004">Kan <ph name="FILE_NAME" /> niet casten.</translation>
 <translation id="4077917118009885966">Advertenties geblokkeerd op deze site</translation>
+<translation id="4079799245038595838">Er is een melding verstuurd naar je telefoon. Volg de aanwijzingen om te bevestigen dat jij het bent.</translation>
 <translation id="4081242589061676262">Kan bestand niet casten.</translation>
 <translation id="4084682180776658562">Bladwijzer maken</translation>
 <translation id="4084835346725913160"><ph name="TAB_NAME" /> sluiten</translation>
@@ -2140,6 +2149,7 @@
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="4250680216510889253">Nee</translation>
 <translation id="4252852543720145436">ID's voor beveiligde content</translation>
+<translation id="4252899949534773101">Bluetooth is uitgeschakeld</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" />: content van tabblad gedeeld</translation>
 <translation id="4254813446494774748">Doeltaal:</translation>
 <translation id="425573743389990240">Batterij-ontlading in Watt (een negatieve waarde betekent dat de batterij wordt opgeladen)</translation>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">Chrome kan schadelijke software op je computer vinden en verwijderen</translation>
 <translation id="4481530544597605423">Ontkoppelde apparaten</translation>
 <translation id="4482194545587547824">Google kan je browsegeschiedenis gebruiken om Google Zoeken en andere Google-services te personaliseren</translation>
-<translation id="4493287891836751813">Ontdek de Google Assistent</translation>
 <translation id="4495419450179050807">Niet op deze pagina weergeven</translation>
+<translation id="449938344715680828">Druk op |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| gevolgd door |<ph name="ACCELERATOR3" />| om af te sluiten</translation>
 <translation id="4499718683476608392">Automatisch aanvullen van creditcardgegevens inschakelen om formulieren met één klik in te vullen</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> is gecrasht</translation>
 <translation id="450099669180426158">Uitroeptekenpictogram</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">Verificatie geannuleerd tijdens verbinden met '<ph name="DEVICE_NAME" />'.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-bestand</translation>
 <translation id="457386861538956877">Meer...</translation>
-<translation id="4576537685267142337">Til je vinger op en raak de sensor opnieuw aan</translation>
 <translation id="4576541033847873020">Bluetooth-apparaat koppelen</translation>
 <translation id="4579581181964204535">Kan <ph name="HOST_NAME" /> niet casten.</translation>
 <translation id="4580526846085481512">Weet je zeker dat je $1 items wilt verwijderen?</translation>
@@ -2343,6 +2352,7 @@
 <translation id="4611114513649582138">Gegevensverbinding beschikbaar</translation>
 <translation id="4613271546271159013">Een extensie heeft de pagina gewijzigd die wordt weergegeven wanneer je een nieuw tabblad opent.</translation>
 <translation id="4615586811063744755">geen cookie geselecteerd</translation>
+<translation id="4615618657481886098">Je hebt deze sleutel al eerder geregistreerd. Je hoeft deze niet opnieuw te registreren.</translation>
 <translation id="4617270414136722281">Opties voor extensies</translation>
 <translation id="4619615317237390068">Tabbladen van andere apparaten</translation>
 <translation id="4620809267248568679">Deze instelling wordt door een extensie afgedwongen.</translation>
@@ -2452,6 +2462,7 @@
 <translation id="4790972063719531840">Automatisch diagnostische en gebruiksgegevens verzenden naar Google</translation>
 <translation id="4792711294155034829">&amp;Een probleem melden...</translation>
 <translation id="479536056609751218">Webpagina, alleen HTML</translation>
+<translation id="4798236378408895261"><ph name="BEGIN_LINK" />Bluetooth-logboeken<ph name="END_LINK" /> toevoegen (voor intern Google-gebruik)</translation>
 <translation id="479989351350248267">zoeken</translation>
 <translation id="4801448226354548035">Accounts verbergen</translation>
 <translation id="4801512016965057443">Mobiele dataroaming toestaan</translation>
@@ -2518,6 +2529,7 @@
 <translation id="4882473678324857464">Focus op bladwijzers</translation>
 <translation id="4882831918239250449">Beheren hoe je browsegeschiedenis wordt gebruikt om Google Zoeken, advertenties en meer te personaliseren</translation>
 <translation id="4883178195103750615">Bladwijzers exporteren naar HTML-bestand...</translation>
+<translation id="4883274597792587930">Zoek de naam op de achterkant van je sleutel</translation>
 <translation id="4883436287898674711">Alle sites op <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">&amp;Taakbeheer</translation>
 <translation id="4883898390143004266">Apps je locatie laten vaststellen. Zorg dat apps gemakkelijker je locatie kunnen vinden met de locatieservice van Google. Google kan periodiek locatiegegevens verzamelen en deze op een anonieme manier gebruiken om de locatienauwkeurigheid en locatiegebaseerde services te verbeteren. <ph name="BEGIN_LINK1" />Meer informatie<ph name="END_LINK1" /></translation>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">Lettergrootte</translation>
 <translation id="494286511941020793">Ondersteuning voor proxyconfiguratie</translation>
 <translation id="4945444280533270988">Smart Lock is ingeschakeld</translation>
-<translation id="494660967831069720">Gedeeltelijke gegevens</translation>
 <translation id="4953689047182316270">Reageren op toegankelijkheidsgebeurtenissen</translation>
 <translation id="4953808748584563296">Standaard oranje avatar</translation>
 <translation id="4955814292505481804">Jaarlijks</translation>
@@ -2992,6 +3003,7 @@
 <translation id="55601339223879446">De grenzen van je bureaublad aanpassen binnen de weergave</translation>
 <translation id="5562781907504170924">Dit tabblad is gekoppeld aan een Bluetooth-apparaat.</translation>
 <translation id="5563234215388768762">Zoek op Google of typ een URL</translation>
+<translation id="5567950944308676169">Sluit je beveiligingssleutel aan en activeer deze</translation>
 <translation id="5567989639534621706">Applicatiecaches</translation>
 <translation id="5568069709869097550">Kan niet aanmelden</translation>
 <translation id="5568144734023334204">Android-opslag</translation>
@@ -3238,6 +3250,7 @@
 <translation id="5931146425219109062">Al je gegevens lezen en wijzigen op de websites die je bezoekt</translation>
 <translation id="5932881020239635062">Serienummer</translation>
 <translation id="5933376509899483611">Tijdzone</translation>
+<translation id="5938002010494270685">Beveiligingsupgrade beschikbaar</translation>
 <translation id="5939518447894949180">Resetten</translation>
 <translation id="5939847200023027600">PDF-samenstellerservice</translation>
 <translation id="5941153596444580863">Persoon toevoegen...</translation>
@@ -3274,6 +3287,7 @@
 <translation id="6006484371116297560">Klassiek</translation>
 <translation id="6007237601604674381">Verplaatsen mislukt. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Gesproken zoekopdracht is niet beschikbaar in jouw taal.</translation>
+<translation id="6009781704028455063">Ingebouwde sensor</translation>
 <translation id="6010869025736512584">Video-invoer openen</translation>
 <translation id="6011193465932186973">Vingerafdruk</translation>
 <translation id="6011449291337289699">Sitegegevens wissen</translation>
@@ -3284,6 +3298,7 @@
 <translation id="6020431688553761150">De server heeft je niet geautoriseerd voor toegang tot deze resource.</translation>
 <translation id="602251597322198729">Deze site probeert meerdere bestanden te downloaden. Wil je dit toestaan?</translation>
 <translation id="6022526133015258832">Openen in volledig scherm</translation>
+<translation id="6022705094403139349">Klaar om je beveiligingssleutel te koppelen?</translation>
 <translation id="6023643151125006053">Dit apparaat (serienummer: <ph name="SERIAL_NUMBER" />) is vergrendeld door de beheerder van <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">Stack-tracering</translation>
 <translation id="6026047032548434446">App installeren?</translation>
@@ -3347,6 +3362,7 @@
 <translation id="6105877918873366097">Laatst geopend</translation>
 <translation id="6107012941649240045">Verleend aan</translation>
 <translation id="6112294629795967147">Tikken om het formaat aan te passen</translation>
+<translation id="6112931163620622315">Controleer je telefoon</translation>
 <translation id="6112952769866305444">Persoon bewerken: <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Tekst en afbeeldingen bekijken die naar het klembord zijn gekopieerd</translation>
 <translation id="6116921718742659598">Taal- en invoerinstellingen wijzigen</translation>
@@ -3392,6 +3408,7 @@
 <translation id="6169666352732958425">Kan desktop niet casten.</translation>
 <translation id="6171948306033499786">Afdrukken onderbreken</translation>
 <translation id="6175314957787328458">Microsoft-domein-GUID</translation>
+<translation id="6176043333338857209">Bluetooth wordt tijdelijk ingeschakeld om te communiceren met je beveiligingssleutel</translation>
 <translation id="6178664161104547336">Een certificaat selecteren</translation>
 <translation id="6181431612547969857">Download geblokkeerd</translation>
 <translation id="6185132558746749656">Apparaatlocatie</translation>
@@ -3479,6 +3496,7 @@
 <translation id="6311220991371174222">Kan Chrome niet starten omdat er een fout is opgetreden bij het openen van je profiel. Probeer Chrome opnieuw te starten.</translation>
 <translation id="6312400084708441752">Hieronder valt informatie over schadelijke software, systeeminstellingen en processen op je computer</translation>
 <translation id="6312403991423642364">Onbekende netwerkfout</translation>
+<translation id="6313320178014547270">Je gebruikt een sleutel die niet is geregistreerd voor deze website</translation>
 <translation id="6313641880021325787">VR AFSLUITEN</translation>
 <translation id="6314819609899340042">Je hebt foutopsporingsfuncties ingeschakeld voor dit <ph name="IDS_SHORT_PRODUCT_NAME" />-apparaat.</translation>
 <translation id="6315493146179903667">Alles op voorgrond</translation>
@@ -3523,7 +3541,6 @@
 <translation id="6384275966486438344">Je zoekinstellingen wijzigen in: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Sites kunnen cookiegegevens opslaan en lezen</translation>
 <translation id="6388429472088318283">Talen zoeken</translation>
-<translation id="6388771388956873507">Zoek de vingerafdruksensor op je apparaat en raak deze aan met je vinger</translation>
 <translation id="6390799748543157332">De pagina's die je in dit venster bekijkt, worden niet in de browsergeschiedenis weergegeven en laten geen sporen op de computer achter (zoals cookies) nadat je alle geopende gastvensters hebt gesloten. Bestanden die je downloadt, blijven echter wel behouden.</translation>
 <translation id="6390994422085833176">De synchronisatie- en personalisatiefuncties controleren na de installatie</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />Systeeminformatie<ph name="END_LINK1" /> en <ph name="BEGIN_LINK2" />statistische gegevens<ph name="END_LINK2" /> verzenden</translation>
@@ -3535,6 +3552,7 @@
 <translation id="6399774419735315745">Spionne</translation>
 <translation id="6401445054534215853">Plankartikel 1</translation>
 <translation id="6404511346730675251">Bladwijzer bewerken</translation>
+<translation id="6405510437656969977">Ga door wanneer je klaar bent om de pincode op te geven</translation>
 <translation id="6406303162637086258">Opnieuw starten van browser simuleren</translation>
 <translation id="6406506848690869874">Synchronisatie</translation>
 <translation id="6408118934673775994">Je gegevens lezen en wijzigen op <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> en <ph name="WEBSITE_3" /></translation>
@@ -3653,6 +3671,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" />: content van bureaublad gedeeld</translation>
 <translation id="6580151766480067746">ARC-versie</translation>
 <translation id="6581162200855843583">Google Drive-link</translation>
+<translation id="6582080224869403177">Reset je <ph name="DEVICE_TYPE" /> om je beveiliging te upgraden.</translation>
 <translation id="6582421931165117398">Wijzig je wachtwoord nu om je persoonlijke gegevens te beschermen. Voordat je je wachtwoord kunt wijzigen, wordt je gevraagd in te loggen.</translation>
 <translation id="6583851739559471707">Geblokkeerd op sites die opdringerige advertenties weergeven (aanbevolen)</translation>
 <translation id="6584878029876017575">Microsoft-ondertekening van levensduur</translation>
@@ -3702,6 +3721,7 @@
 <translation id="6644846457769259194">Je apparaat updaten (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL voor intrekken van certificeringsinstantie voor Netscape-certificaat</translation>
 <translation id="6647838571840953560">Momenteel op <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Beveiligingssleutel geactiveerd…</translation>
 <translation id="6648911618876616409">Er is een nieuwe essentiële update beschikbaar. Log in om aan de slag te gaan.</translation>
 <translation id="6649018507441623493">Een ogenblik…</translation>
 <translation id="6649563841575838401">De archiefindeling wordt niet ondersteund of het bestand is beschadigd.</translation>
@@ -3777,6 +3797,7 @@
 <translation id="6759193508432371551">Terugzetten op fabrieksinstellingen</translation>
 <translation id="6767639283522617719">Kan het domein niet koppelen. Zorg ervoor dat je de juiste instellingen gebruikt voor de organisatie-eenheid.</translation>
 <translation id="6769712124046837540">Printer toevoegen…</translation>
+<translation id="6770664076092644100">Verifiëren via NFC</translation>
 <translation id="6771503742377376720">Is een certificeringsinstantie</translation>
 <translation id="6777817260680419853">Omleiding geblokkeerd</translation>
 <translation id="6778959797435875428">Geluid van sites dempen opheffen</translation>
@@ -3812,6 +3833,7 @@
 <translation id="6823506025919456619">Je moet inloggen bij Chrome om je apparaten te bekijken</translation>
 <translation id="6824564591481349393">&amp;E-mailadres kopiëren</translation>
 <translation id="6825184156888454064">Sorteren op naam</translation>
+<translation id="6826872289184051766">Verifiëren via USB</translation>
 <translation id="6827236167376090743">Deze video wordt eindeloos afgespeeld.</translation>
 <translation id="6828153365543658583">Inloggen beperken tot de volgende gebruikers:</translation>
 <translation id="6828860976882136098">Kan automatische updates niet instellen voor alle gebruikers (uitvoeringsfout bij pre-flight-procedure: <ph name="ERROR_NUMBER" />)</translation>
@@ -3845,6 +3867,7 @@
 <translation id="6880587130513028875">Er zijn afbeeldingen op deze pagina geblokkeerd.</translation>
 <translation id="6883319974225028188">Het systeem kan de apparaatconfiguratie niet opslaan.</translation>
 <translation id="6885771755599377173">Voorbeeld van systeeminformatie</translation>
+<translation id="6886476658664859389">NFC-beveiligingssleutel</translation>
 <translation id="6886871292305414135">Link openen in nieuw &amp;tabblad</translation>
 <translation id="6892812721183419409">Link openen als <ph name="USER" /></translation>
 <translation id="6896758677409633944">Kopieer</translation>
@@ -4010,6 +4033,7 @@
 <translation id="713122686776214250">Pa&amp;gina toevoegen...</translation>
 <translation id="7133578150266914903">Je beheerder zet dit apparaat terug naar een oudere versie (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">De tekst kleiner maken</translation>
+<translation id="7135729336746831607">Bluetooth inschakelen?</translation>
 <translation id="7136694880210472378">Instellen als standaard</translation>
 <translation id="7136984461011502314">Welkom bij <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Er is een fout opgetreden. Probeer het later opnieuw door andere afbeeldingen te kiezen.</translation>
@@ -4055,6 +4079,7 @@
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' verwijderd</translation>
 <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> downloaden...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Pagina afsluiten}other{Pagina's afsluiten}}</translation>
+<translation id="721467499098558573">Druk de knop op je beveiligingssleutel ten minste vijf seconden in</translation>
 <translation id="7216409898977639127">Mobiele provider</translation>
 <translation id="7216595297012131718">Talen rangschikken op basis van je voorkeur</translation>
 <translation id="7220019174139618249">Kan geen wachtwoorden exporteren naar '<ph name="FOLDER" />'</translation>
@@ -4090,6 +4115,7 @@
 <translation id="7256710573727326513">Openen in een tabblad</translation>
 <translation id="725758059478686223">Afdrukservice</translation>
 <translation id="7257666756905341374">Gegevens lezen die je kopieert en plakt</translation>
+<translation id="7260764918845374269">Je beveiligingssleutel moet in de koppelingsmodus staan om te worden weergegeven. Druk de knop op je beveiligingssleutel ten minste vijf seconden in.</translation>
 <translation id="7262004276116528033">Deze inlogservice wordt gehost door <ph name="SAML_DOMAIN" />.</translation>
 <translation id="7268365133021434339">Tabbladen sluiten</translation>
 <translation id="7268659760406822741">Beschikbare services</translation>
@@ -4126,7 +4152,6 @@
 <translation id="7309257895202129721">Besturingselementen &amp;weergeven</translation>
 <translation id="7310598146671372464">Kan niet inloggen. De server ondersteunt de opgegeven Kerberos-versleutelingstypen niet. Neem contact op met je beheerder.</translation>
 <translation id="7311079019872751559">Plug-intoegang zonder sandbox</translation>
-<translation id="7311891583377621132">Beweeg je vinger enigszins om een ander deel van de vingerafdruk vast te leggen</translation>
 <translation id="7317680720589234980">Schermvergrendeling en inlogopties</translation>
 <translation id="7321545336522791733">Server niet bereikbaar</translation>
 <translation id="7324297612904500502">Bètaforum</translation>
@@ -4208,6 +4233,7 @@
 <translation id="7464490149090366184">Inpakken mislukt, item bestaat al: '$1'</translation>
 <translation id="7465778193084373987">URL voor intrekken van Netscape-certificaat</translation>
 <translation id="7469406957790636836">Als je dit wilt inschakelen, moet je eerst de spellingcontrole inschakelen bij <ph name="BEGIN_LINK" />Talen en invoer<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Je meldingen sturen en deze computer standaard onthouden voor Berichten</translation>
 <translation id="7469894403370665791">Automatisch verbinding maken met dit netwerk</translation>
 <translation id="747114903913869239">Fout: kan extensie niet decoderen</translation>
 <translation id="7473753388963818366">Laten we je <ph name="DEVICE_TYPE" /> klaarmaken voor gebruik</translation>
@@ -4257,6 +4283,7 @@
 <translation id="7531779363494549572">Ga naar Instellingen &gt; Apps en meldingen &gt; Meldingen.</translation>
 <translation id="7536709149194614609">Start het apparaat opnieuw op en probeer het later opnieuw.</translation>
 <translation id="7537601449003285327">Vastzetten op taakbalk</translation>
+<translation id="7539856059004947393">Bluetooth-beveiligingssleutel</translation>
 <translation id="7540972813190816353">Er is een fout opgetreden bij het ​​controleren op updates: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Foutopsporingsfuncties inschakelen voor dit <ph name="IDS_SHORT_PRODUCT_NAME" />-apparaat</translation>
 <translation id="7544853251252956727">Shuffle</translation>
@@ -4359,6 +4386,7 @@
 <translation id="7709152031285164251">Mislukt - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Casten...</translation>
 <translation id="7711920809702896782">Afbeeldingsgegevens</translation>
+<translation id="7712740978240882272">Je Chromebook ontgrendelen met je telefoon. <ph name="LINK_BEGIN" />Meer informatie.<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Onbekende extensie met ID <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Cookies van <ph name="DOMAIN" /> toegestaan</translation>
 <translation id="7714464543167945231">Certificaat</translation>
@@ -4573,6 +4601,7 @@
 <translation id="7984068253310542383"><ph name="DISPLAY_NAME" /> mirroren</translation>
 <translation id="7986295104073916105">Instellingen voor opgeslagen wachtwoorden lezen en wijzigen</translation>
 <translation id="7987764905897278458">Gebruik meer slimme Google-functies</translation>
+<translation id="798835209536175951">Sms'jes verzenden en ontvangen op je Chromebook. <ph name="LINK_BEGIN" />Meer informatie<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Functies voor toegankelijkheid inschakelen</translation>
 <translation id="7994702968232966508">EAP-methode</translation>
 <translation id="799547531016638432">Snelle link verwijderen</translation>
@@ -4705,6 +4734,7 @@
 <translation id="8185331656081929126">Meldingen weergeven wanneer er nieuwe printers in het netwerk worden gedetecteerd</translation>
 <translation id="8186609076106987817">De server kan het bestand niet vinden.</translation>
 <translation id="8188120771410500975">&amp;Controleer de spelling van tekstvelden</translation>
+<translation id="8188389033983459049">Controleer de instellingen van je apparaat en schakel het in om door te gaan</translation>
 <translation id="8190193592390505034">Verbinding maken met <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Je apps, extensies en thema's beheren</translation>
 <translation id="8191453843330043793">V8 Proxy Resolver</translation>
@@ -4799,6 +4829,7 @@
 <translation id="8353683614194668312">De app/extensie kan het volgende doen:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Pagina's herstellen?</translation>
+<translation id="8362993567435070757">Zoek de pincode van zes cijfers op de achterkant van je sleutel</translation>
 <translation id="8363095875018065315">stabiel</translation>
 <translation id="8363142353806532503">Microfoon geblokkeerd</translation>
 <translation id="8366396658833131068">Je netwerkverbinding is hersteld. Selecteer een ander netwerk of druk hieronder op de knop 'Doorgaan' om je kiosk-app te starten.</translation>
@@ -4807,6 +4838,7 @@
 <translation id="8371695176452482769">Begin nu te spreken</translation>
 <translation id="8372369524088641025">Slechte WEP-sleutel</translation>
 <translation id="8373553483208508744">Tabbladen dempen</translation>
+<translation id="8379878387931047019">Dit apparaat biedt geen ondersteuning voor het type beveiligingssleutel dat is vereist voor deze website</translation>
 <translation id="8382913212082956454">&amp;E-mailadres kopiëren</translation>
 <translation id="8386903983509584791">Scan voltooid</translation>
 <translation id="8389492867173948260">Hiermee kan deze extensie al je gegevens lezen en wijzigen op de websites die je bezoekt:</translation>
@@ -4925,6 +4957,7 @@
 <translation id="8557930019681227453">Manifest</translation>
 <translation id="8559694214572302298">Image Decoder</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Verder lezen</translation>
 <translation id="8565650234829130278">Je probeert een oudere versie van de app te installeren.</translation>
 <translation id="8569002732135253578"><ph name="DOCUMENT_NAME" /> wordt nu afgedrukt</translation>
 <translation id="8569682776816196752">Geen bestemmingen gevonden</translation>
@@ -4965,7 +4998,6 @@
 <translation id="8639047128869322042">Controleren op schadelijke software...</translation>
 <translation id="8639963783467694461">Instellingen voor Automatisch aanvullen</translation>
 <translation id="8642171459927087831">Toegangstoken</translation>
-<translation id="8642267168767642381">Vinger te langzaam bewogen</translation>
 <translation id="8642947597466641025">De tekst groter maken</translation>
 <translation id="8643418457919840804">Kies een optie om door te gaan:</translation>
 <translation id="8645354835496065562">Toegang tot sensoren blijven toestaan</translation>
@@ -4980,6 +5012,7 @@
 <translation id="8655295600908251630">Kanaal</translation>
 <translation id="8655319619291175901">Er is een fout opgetreden.</translation>
 <translation id="8655972064210167941">Het inloggen is mislukt omdat je wachtwoord niet kan worden geverifieerd. Neem contact op met je beheerder of probeer het opnieuw.</translation>
+<translation id="8656619792520327915">Nog een Bluetooth-beveiligingssleutel toevoegen</translation>
 <translation id="8656768832129462377">Niet controleren</translation>
 <translation id="8658595122208653918">Printeropties wijzigen...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> deelt je scherm en audio met <ph name="TAB_NAME" />.</translation>
@@ -5103,6 +5136,7 @@
 <translation id="8814687660896548945">Het archief wordt gescand. Een ogenblik geduld…</translation>
 <translation id="881799181680267069">Verberg andere</translation>
 <translation id="8818152010000655963">Achtergrond</translation>
+<translation id="8818958672113348984">Verifiëren via je telefoon</translation>
 <translation id="8820817407110198400">Bladwijzers</translation>
 <translation id="8821045908425223359">IP-adres automatisch configureren</translation>
 <translation id="882204272221080310">Firmware updaten voor extra beveiliging</translation>
@@ -5133,11 +5167,13 @@
 <translation id="8872155268274985541">Ongeldig manifestbestand voor de externe update van Kiosk gevonden. Het updaten van de Kiosk-app is mislukt. Verwijder de USB-stick.</translation>
 <translation id="8874184842967597500">Niet verbonden</translation>
 <translation id="8876215549894133151">Indeling:</translation>
+<translation id="8876307312329369159">Deze instelling kan niet worden gewijzigd tijdens een demosessie.</translation>
 <translation id="8876309039915144086">Wachtwoord genereren...</translation>
 <translation id="8877448029301136595">[hoofddirectory]</translation>
 <translation id="8879284080359814990">Weergeven al&amp;s tabblad</translation>
 <translation id="8883847527783433352">Synchroniseren met een ander account</translation>
 <translation id="8885197664446363138">Smart Lock is niet beschikbaar</translation>
+<translation id="88870264962436283">Touch ID gebruiken voor <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Kleur:</translation>
 <translation id="8890516388109605451">Bronnen</translation>
 <translation id="8892168913673237979">Helemaal klaar!</translation>
@@ -5158,6 +5194,7 @@
 <translation id="8915370057835397490">Suggestie wordt geladen</translation>
 <translation id="8916476537757519021">Incognito-subframe: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Log in en schakel synchronisatie in om al je wachtwoorden op al je apparaten beschikbaar te maken.</translation>
+<translation id="8921366488406707015">Je beveiligingssleutel verifiëren…</translation>
 <translation id="8922013791253848639">Altijd advertenties op deze site toestaan</translation>
 <translation id="8925458182817574960">&amp;Instellingen</translation>
 <translation id="8926389886865778422">Niet meer vragen</translation>
@@ -5266,6 +5303,7 @@
 <translation id="9066782832737749352">Tekst-naar-spraak</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> logt je automatisch in bij geschikte sites en apps met wachtwoorden die je hebt opgeslagen.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Koppel je sleutel met dit apparaat zodat je de sleutel kunt gebruiken om in te loggen op je account</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-muis aangesloten</translation>
 <translation id="9076523132036239772">Je e-mailadres of wachtwoord kan niet worden geverifieerd. Probeer eerst verbinding met een netwerk te maken.</translation>
@@ -5327,7 +5365,6 @@
 <translation id="916607977885256133">Scherm-in-scherm</translation>
 <translation id="9169496697824289689">Sneltoetsen bekijken</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" /> toevoegen aan startscherm</translation>
-<translation id="9170397650136757332">Beweeg je vinger nu een beetje zodat alle delen van je vingerafdruk kunnen worden vastgelegd</translation>
 <translation id="9170848237812810038">&amp;Ongedaan maken</translation>
 <translation id="9170884462774788842">Een ander programma op je computer heeft een thema toegevoegd dat de manier waarop Chrome werkt kan wijzigen.</translation>
 <translation id="9173995187295789444">Scannen naar Bluetooth-apparaten...</translation>
@@ -5391,6 +5428,7 @@
 <translation id="971774202801778802">Bladwijzer-URL</translation>
 <translation id="973473557718930265">Sluiten</translation>
 <translation id="974555521953189084">Voer je wachtwoordzin in om de synchronisatie te starten</translation>
+<translation id="977640333593638907">De meeste beveiligingssleutels hebben een knop waarop je kunt drukken om ze te gebruiken</translation>
 <translation id="981121421437150478">Offline</translation>
 <translation id="983511809958454316">Deze functie wordt niet ondersteund in VR</translation>
 <translation id="984275831282074731">Betaalmethoden</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index ccee95b..966a35e7 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Bruk synkronisering og alle tjenester</translation>
 <translation id="1272079795634619415">Stopp</translation>
-<translation id="1272242203003205253">Google-samarbeidspartnere jobber med assistenten din for å hjelpe deg</translation>
 <translation id="1272978324304772054">Denne brukerkontoen tilhører ikke domenet som enheten er registrert for. Hvis du vil registrere deg for et annet domene, må du først gå gjennom enhetsgjenoppretting.</translation>
 <translation id="1274977772557788323">Lagringsinnstillinger for Adobe Flash Player</translation>
 <translation id="1274997165432133392">Informasjonskapsler og andre nettstedsdata</translation>
@@ -414,7 +413,6 @@
 <translation id="161460670679785907">Finner ikke telefonen din</translation>
 <translation id="1616206807336925449">Denne utvidelsen krever ingen spesielle tillatelser.</translation>
 <translation id="1616298854599875024">Kan ikke importere utvidelsen «<ph name="IMPORT_NAME" />», fordi den ikke er en delt modul</translation>
-<translation id="161707228174452095">Fingeravtrykket er lagt til.</translation>
 <translation id="1618268899808219593">&amp;Brukerstøtte</translation>
 <translation id="162035744160882748">Slå på synkronisering, personlig tilpasning og andre Google-tjenester</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -692,7 +690,6 @@
 <translation id="2028997212275086731">RAR-arkiv</translation>
 <translation id="2034346955588403444">Legg til et annet Wi-Fi-nettverk</translation>
 <translation id="203574396658008164">Slå på notatskriving på låseskjermen</translation>
-<translation id="2039623879703305659">Du flyttet fingeren for raskt</translation>
 <translation id="2040460856718599782">Beklager!  Det oppsto en feil da vi forsøkte å autentisere deg. Kontrollér påloggingslegitimasjonen, og prøv på nytt.</translation>
 <translation id="2043818754674261542">Avstanden som kreves for at telefonen skal kunne låse opp denne <ph name="DEVICE_TYPE" />-enheten</translation>
 <translation id="204497730941176055">Navn på Microsoft sertifikatmal</translation>
@@ -736,7 +733,6 @@
 <translation id="2099686503067610784">Slette tjenersertifikatet «<ph name="CERTIFICATE_NAME" />»?</translation>
 <translation id="2100273922101894616">Automatisk pålogging</translation>
 <translation id="2101225219012730419">Versjon:</translation>
-<translation id="2107494551712864447">Legg til et fingeravtrykk</translation>
 <translation id="2112877397266219826">Slå på berøringskontrolleren din for å konfigurere meg</translation>
 <translation id="21133533946938348">Fest fanen</translation>
 <translation id="2113479184312716848">Åpne &amp;fil ...</translation>
@@ -1015,7 +1011,6 @@
 <translation id="2526590354069164005">Skrivebordet</translation>
 <translation id="2526619973349913024">Se etter oppdateringer</translation>
 <translation id="2527167509808613699">Alle typer tilkobling</translation>
-<translation id="2532026602297547439">Sensoren er skitten</translation>
 <translation id="2532589005999780174">Høykontrastmodus</translation>
 <translation id="253434972992662860">&amp;Stans midlertidig</translation>
 <translation id="2534460670861217804">Sikker HTTP-proxy-tjener</translation>
@@ -1373,7 +1368,6 @@
 <translation id="3057861065630527966">Sikkerhetskopiér bildene og videoene dine</translation>
 <translation id="3060379269883947824">Slå på Tekstopplesing</translation>
 <translation id="3061707000357573562">Feilrettingstjeneste</translation>
-<translation id="3064410671692449875">Ikke nok data</translation>
 <translation id="3065041951436100775">Tilbakemelding for lukket fane.</translation>
 <translation id="3067198179881736288">Vil du installere appen?</translation>
 <translation id="3067198360141518313">Kjør dette programtillegget</translation>
@@ -2258,7 +2252,6 @@
 <translation id="4480590691557335796">Chrome kan finne skadelig programvare på datamaskinen din og fjerne den</translation>
 <translation id="4481530544597605423">Frakoblede enheter</translation>
 <translation id="4482194545587547824">Google kan bruke nettlesingsloggen din for å gi Søk og andre Google-tjenester et personlig preg</translation>
-<translation id="4493287891836751813">Her er Google-assistenten din</translation>
 <translation id="4495419450179050807">Ikke vis på denne siden</translation>
 <translation id="4499718683476608392">Slå på autofyll for kredittkort for å fylle ut skjemaer med ett klikk</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> har kræsjet</translation>
@@ -2313,7 +2306,6 @@
 <translation id="4572659312570518089">Autentiseringen ble avbrutt under tilkobling til <ph name="DEVICE_NAME" />.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-fil</translation>
 <translation id="457386861538956877">Mer</translation>
-<translation id="4576537685267142337">Løft fingeren, og trykk på sensoren på nytt</translation>
 <translation id="4576541033847873020">Koble til Bluetooth-enhet</translation>
 <translation id="4579581181964204535">Kunne ikke caste <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Er du sikker på at du vil slette $1 elementer?</translation>
@@ -2558,7 +2550,6 @@
 <translation id="4941627891654116707">Skriftstørrelse</translation>
 <translation id="494286511941020793">Hjelp for konfigurering av mellomtjenere</translation>
 <translation id="4945444280533270988">Smart Lock er på</translation>
-<translation id="494660967831069720">Delvise data</translation>
 <translation id="4953689047182316270">Svar på tilgjengelighetshendelser</translation>
 <translation id="4953808748584563296">Oransje standardbrukerbilde</translation>
 <translation id="4955814292505481804">Årlig</translation>
@@ -3514,7 +3505,6 @@
 <translation id="6384275966486438344">endre søkeinnstillingene dine til: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Nettsteder kan lagre og lese data fra informasjonskapsler</translation>
 <translation id="6388429472088318283">Søk etter språk</translation>
-<translation id="6388771388956873507">Finn frem til fingeravtrykkssensoren på enheten din, og legg en finger på den</translation>
 <translation id="6390799748543157332">Sider du åpner i dette vinduet, vises ikke i nettloggen og de etterlater ingen andre spor (f.eks. informasjonskapsler) på datamaskinen etter at du har lukket alle åpne gjestevinduer. Filer du laster ned, blir imidlertid lagret.</translation>
 <translation id="6390994422085833176">Gjennomgå funksjonene for synkronisering og personlig tilpasning etter konfigureringen</translation>
 <translation id="6395423953133416962">Send <ph name="BEGIN_LINK1" />systeminformasjon<ph name="END_LINK1" /> og <ph name="BEGIN_LINK2" />-målinger<ph name="END_LINK2" /></translation>
@@ -4116,7 +4106,6 @@
 <translation id="7309257895202129721">Vis &amp;kontroller</translation>
 <translation id="7310598146671372464">Kan ikke logge på. Tjeneren støtter ikke de angitte Kerberos-krypteringstypene. Ta kontakt med administratoren din.</translation>
 <translation id="7311079019872751559">Tilgang for programtillegg uten prosessisolering</translation>
-<translation id="7311891583377621132">Flytt litt på fingeren for å registrere en annen del av fingeravtrykket</translation>
 <translation id="7317680720589234980">Alternativer for skjermlås og pålogging</translation>
 <translation id="7321545336522791733">Tjeneren er ikke tilgjengelig</translation>
 <translation id="7324297612904500502">Forumet for betaversjoner</translation>
@@ -4954,7 +4943,6 @@
 <translation id="8639047128869322042">Ser etter skadelig programvare …</translation>
 <translation id="8639963783467694461">Innstillinger for autofyll</translation>
 <translation id="8642171459927087831">Tilgangstoken</translation>
-<translation id="8642267168767642381">Du flyttet fingeren for sakte</translation>
 <translation id="8642947597466641025">Forstørr teksten</translation>
 <translation id="8643418457919840804">Velg et alternativ for å fortsette:</translation>
 <translation id="8645354835496065562">Fortsett å tillate sensortilgang</translation>
@@ -5315,7 +5303,6 @@
 <translation id="916607977885256133">Bilde i bilde</translation>
 <translation id="9169496697824289689">Se tastaturets hurtigtaster</translation>
 <translation id="9169931577761441333">Legg til <ph name="APP_NAME" /> på startskjermen</translation>
-<translation id="9170397650136757332">Flytt litt på fingeren for å registrere alle deler av fingeravtrykket</translation>
 <translation id="9170848237812810038">&amp;Angre</translation>
 <translation id="9170884462774788842">Et annet program på datamaskinen la til et tema som kan endre måten Chrome fungerer på.</translation>
 <translation id="9173995187295789444">Skanner etter Bluetooth-enheter …</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 96154513..d098e01 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Używaj synchronizacji i wszystkich usług</translation>
 <translation id="1272079795634619415">Zatrzymaj</translation>
-<translation id="1272242203003205253">Aby Ci pomagać, Asystent współpracuje z partnerami Google</translation>
 <translation id="1272978324304772054">To konto użytkownika nie należy do domeny, w której urządzenie jest zarejestrowane. Jeśli chcesz się zarejestrować w innej domenie, musisz najpierw przeprowadzić odzyskiwanie urządzenia.</translation>
 <translation id="1274977772557788323">Ustawienia pamięci Adobe Flash Playera</translation>
 <translation id="1274997165432133392">Pliki cookie i inne dane witryn</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Nie można wykryć telefonu</translation>
 <translation id="1616206807336925449">To rozszerzenie nie wymaga specjalnych uprawnień.</translation>
 <translation id="1616298854599875024">Nie można zaimportować rozszerzenia „<ph name="IMPORT_NAME" />”, ponieważ nie jest to moduł udostępniany</translation>
-<translation id="161707228174452095">Odcisk palca dodany</translation>
 <translation id="1618268899808219593">C&amp;entrum pomocy</translation>
 <translation id="162035744160882748">Włącz synchronizację, personalizację i inne usługi Google</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">Archiwum RAR</translation>
 <translation id="2034346955588403444">Dodaj inną sieć Wi-Fi</translation>
 <translation id="203574396658008164">Włącz robienie notatek na ekranie blokady</translation>
-<translation id="2039623879703305659">Palec został przesunięty zbyt szybko</translation>
 <translation id="2040460856718599782">Ups, wystąpił błąd podczas próby uwierzytelnienia. Sprawdź poprawność danych logowania i spróbuj ponownie.</translation>
 <translation id="2043818754674261542">Wymagana odległość do odblokowania urządzenia <ph name="DEVICE_TYPE" /> przy użyciu telefonu</translation>
 <translation id="204497730941176055">Nazwa szablonu certyfikatu firmy Microsoft</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Czy usunąć certyfikat serwera „<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="2100273922101894616">Autologowanie</translation>
 <translation id="2101225219012730419">Wersja:</translation>
-<translation id="2107494551712864447">Dodaj odcisk palca</translation>
 <translation id="2112877397266219826">Włącz kontroler dotykowy, by skonfigurować urządzenie</translation>
 <translation id="21133533946938348">Przypnij kartę</translation>
 <translation id="2113479184312716848">&amp;Otwórz plik</translation>
@@ -857,7 +853,7 @@
 <translation id="2271088077909873520">Zarządzaj zsynchronizowanymi danymi w <ph name="BEGIN_LINK" />Panelu Google<ph name="END_LINK" />.</translation>
 <translation id="2272570998639520080">Kieliszek do martini</translation>
 <translation id="2276503375879033601">Dodaj więcej aplikacji</translation>
-<translation id="2277255602909579701">Wszystkie pliki cookie i dane stron</translation>
+<translation id="2277255602909579701">Wszystkie pliki cookie i dane witryn</translation>
 <translation id="2277769717710009150">{COUNT,plural, =1{Skopiowano 1 element}few{Skopiowano # elementy}many{Skopiowano # elementów}other{Skopiowano # elementu}}</translation>
 <translation id="2278562042389100163">Otwórz okno przeglądarki</translation>
 <translation id="2279874276457403668">Można utworzyć tylko jedną sesję na raz.</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Pulpit</translation>
 <translation id="2526619973349913024">Sprawdź dostępność aktualizacji</translation>
 <translation id="2527167509808613699">Dowolny rodzaj połączenia</translation>
-<translation id="2532026602297547439">Zabrudzony czytnik</translation>
 <translation id="2532589005999780174">Tryb wysokiego kontrastu</translation>
 <translation id="253434972992662860">&amp;Wstrzymaj</translation>
 <translation id="2534460670861217804">Serwer proxy HTTPS</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">Utwórz kopię zapasową zdjęć i filmów</translation>
 <translation id="3060379269883947824">Włącz funkcję Przeczytaj na głos</translation>
 <translation id="3061707000357573562">Zastosowanie poprawki do usługi</translation>
-<translation id="3064410671692449875">Niewystarczające dane</translation>
 <translation id="3065041951436100775">Informacje o zakończeniu działania karty.</translation>
 <translation id="3067198179881736288">Zainstalować aplikację?</translation>
 <translation id="3067198360141518313">Uruchom wtyczkę</translation>
@@ -1496,7 +1490,7 @@
 <translation id="3269093882174072735">Wczytaj obraz</translation>
 <translation id="326999365752735949">Pobieram zmiany</translation>
 <translation id="3270965368676314374">Odczyt, zmiana i usuwanie zdjęć, muzyki oraz innych multimediów na komputerze</translation>
-<translation id="327147043223061465">Wyświetl wszystkie pliki cookie i dane stron</translation>
+<translation id="327147043223061465">Wyświetl wszystkie pliki cookie i dane witryn</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> chce się połączyć</translation>
 <translation id="3274763671541996799">Pracujesz w trybie pełnoekranowym.</translation>
 <translation id="3275778913554317645">Otwórz jako okno</translation>
@@ -2265,7 +2259,6 @@
 <translation id="4480590691557335796">Chrome może znaleźć i usunąć szkodliwe oprogramowanie na Twoim komputerze</translation>
 <translation id="4481530544597605423">Niesparowane urządzenia</translation>
 <translation id="4482194545587547824">Google może korzystać z Twojej historii przeglądania, by dostosowywać wyniki wyszukiwania i działanie innych usług</translation>
-<translation id="4493287891836751813">Poznaj swojego Asystenta Google</translation>
 <translation id="4495419450179050807">Nie pokazuj na tej stronie</translation>
 <translation id="4499718683476608392">Włącz autouzupełnianie danych karty kredytowej, by wypełniać formularze jednym kliknięciem</translation>
 <translation id="4500114933761911433">We wtyczce <ph name="PLUGIN_NAME" /> wystąpił poważny błąd</translation>
@@ -2320,7 +2313,6 @@
 <translation id="4572659312570518089">Podczas łączenia się z urządzeniem „<ph name="DEVICE_NAME" />” zostało anulowane uwierzytelnianie.</translation>
 <translation id="4572815280350369984">Plik <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Więcej</translation>
-<translation id="4576537685267142337">Podnieś palec, a potem przyłóż go do czytnika jeszcze raz</translation>
 <translation id="4576541033847873020">Sparuj urządzenie Bluetooth</translation>
 <translation id="4579581181964204535">Nie udało się przesłać <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Czy na pewno chcesz usunąć następującą liczbę elementów: $1?</translation>
@@ -2565,7 +2557,6 @@
 <translation id="4941627891654116707">Rozmiar czcionki</translation>
 <translation id="494286511941020793">Konfiguracja serwera proxy – pomoc</translation>
 <translation id="4945444280533270988">Funkcja Smart Lock jest włączona</translation>
-<translation id="494660967831069720">Częściowe dane</translation>
 <translation id="4953689047182316270">Odpowiadanie na zdarzenia dotyczące ułatwień dostępu</translation>
 <translation id="4953808748584563296">Domyślny pomarańczowy awatar</translation>
 <translation id="4955814292505481804">Roczna</translation>
@@ -3522,7 +3513,6 @@
 <translation id="6384275966486438344">Zmiana ustawień wyszukiwania na: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Strony mogą zapisywać dane w plikach cookie i je odczytywać</translation>
 <translation id="6388429472088318283">Wyszukaj języki</translation>
-<translation id="6388771388956873507">Znajdź na urządzeniu czytnik linii papilarnych i dotknij go palcem</translation>
 <translation id="6390799748543157332">Strony wyświetlane w tym oknie nie pojawią się w historii przeglądarki. Po zamknięciu wszystkich okien otwartych w trybie gościa nie zostanie po nich na komputerze żaden ślad (np. w postaci plików cookie). Pobrane pliki zostaną jednak zachowane.</translation>
 <translation id="6390994422085833176">Przejrzyj ustawienia funkcji synchronizacji i personalizacji po ich skonfigurowaniu</translation>
 <translation id="6395423953133416962">Przesyłaj <ph name="BEGIN_LINK1" />informacje o systemie<ph name="END_LINK1" /> i <ph name="BEGIN_LINK2" />dane<ph name="END_LINK2" /></translation>
@@ -4125,7 +4115,6 @@
 <translation id="7309257895202129721">Pokaż elementy sterują&amp;ce</translation>
 <translation id="7310598146671372464">Logowanie nie udało się. Serwer nie obsługuje wybranych typów szyfrowania Kerberos. Skontaktuj się z administratorem.</translation>
 <translation id="7311079019872751559">Dostęp przez wtyczkę spoza piaskownicy</translation>
-<translation id="7311891583377621132">Przesuń odrobinę, by zeskanować inną część odcisku palca</translation>
 <translation id="7317680720589234980">Opcje blokady ekranu i logowania</translation>
 <translation id="7321545336522791733">Serwer niedostępny</translation>
 <translation id="7324297612904500502">Forum użytkowników wersji beta</translation>
@@ -4966,7 +4955,6 @@
 <translation id="8639047128869322042">Szukam szkodliwego oprogramowania…</translation>
 <translation id="8639963783467694461">Ustawienia autouzupełniania</translation>
 <translation id="8642171459927087831">Token dostępu</translation>
-<translation id="8642267168767642381">Palec został przesunięty zbyt wolno</translation>
 <translation id="8642947597466641025">Powiększ tekst</translation>
 <translation id="8643418457919840804">Aby kontynuować, wybierz opcję:</translation>
 <translation id="8645354835496065562">Nadal zezwalaj na dostęp do czujników</translation>
@@ -5327,7 +5315,6 @@
 <translation id="916607977885256133">Obraz w obrazie</translation>
 <translation id="9169496697824289689">Pokaż skróty klawiszowe</translation>
 <translation id="9169931577761441333">Dodaj aplikację <ph name="APP_NAME" /> do ekranu głównego</translation>
-<translation id="9170397650136757332">Teraz powoli przesuń palec, by dokładnie zeskanować linie papilarne</translation>
 <translation id="9170848237812810038">&amp;Cofnij</translation>
 <translation id="9170884462774788842">Inny program na Twoim komputerze dodał motyw, który może zmienić działanie Chrome.</translation>
 <translation id="9173995187295789444">Skanuję w poszukiwaniu urządzeń Bluetooth…</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 0deb136..a76a932 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Item 5 da estante</translation>
 <translation id="1227507814927581609">Falha na autenticação ao conectar-se com "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">menu do sistema</translation>
+<translation id="123186018454553812">Tentar uma chave diferente</translation>
 <translation id="1232569758102978740">Sem título</translation>
 <translation id="1233721473400465416">Localidade</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Usar a sincronização e todos os serviços</translation>
 <translation id="1272079795634619415">Parar</translation>
-<translation id="1272242203003205253">O Google Partners trabalha com o Assistente para ajudar você</translation>
 <translation id="1272978324304772054">Esta conta de usuário não pertence ao domínio no qual o dispositivo está inscrito. Para se inscrever em um domínio diferente, é preciso passar pela recuperação do dispositivo primeiro.</translation>
 <translation id="1274977772557788323">Configurações de armazenamento do Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies e outros dados do site</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Versão <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Pesquisar senhas</translation>
 <translation id="1487335504823219454">Sincronização ativada - configurações personalizadas</translation>
+<translation id="1489664337021920575">Escolher outra opção</translation>
 <translation id="1493892686965953381">Aguardando <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> outros dispositivos disponíveis.</translation>
 <translation id="1497522201463361063">Não foi possível renomear "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Janela do aplicativo</translation>
 <translation id="15373452373711364">Cursor grande do mouse</translation>
 <translation id="1538729222189715449">Abrindo arquivos do Linux…</translation>
+<translation id="153933193410874873">Não foi possível verificar sua identidade neste dispositivo</translation>
 <translation id="1540605929960647700">Ativar modo de demonstração</translation>
 <translation id="1543284117603151572">Importados do Edge</translation>
 <translation id="1545177026077493356">Modo de quiosque automático</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Não é possível usar esta imagem. Escolha outra.</translation>
 <translation id="1566049601598938765">Website</translation>
 <translation id="1567387640189251553">Um teclado diferente foi conectado desde a última vez que você inseriu sua senha. Ele pode estar tentando capturar sua digitação.</translation>
+<translation id="1567750922576943685">A verificação da sua identidade ajuda a proteger suas informações pessoais</translation>
 <translation id="1567993339577891801">Console JavaScript</translation>
 <translation id="1568067597247500137">Desativar som do site</translation>
 <translation id="1568323446248056064">Abrir configurações de exibição do dispositivo</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Não foi possível detectar seu smartphone</translation>
 <translation id="1616206807336925449">Esta extensão não requer permissões especiais.</translation>
 <translation id="1616298854599875024">Não foi possível importar a extensão "<ph name="IMPORT_NAME" />", porque ela não é um módulo compartilhado</translation>
-<translation id="161707228174452095">Impressão digital adicionada.</translation>
 <translation id="1618268899808219593">Central de ajuda</translation>
 <translation id="162035744160882748">Ativar sincronização, personalização e outros serviços do Google</translation>
 <translation id="1620510694547887537">Câmera</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">Arquivo RAR</translation>
 <translation id="2034346955588403444">Adicionar outra rede Wi-Fi</translation>
 <translation id="203574396658008164">Ativar anotações a partir da tela de bloqueio</translation>
-<translation id="2039623879703305659">Movimento muito rápido do dedo</translation>
 <translation id="2040460856718599782">Epa! Ocorreu um erro na tentativa de autenticação. Verifique suas credenciais de login e tente novamente.</translation>
 <translation id="2043818754674261542">Distância necessária para o smartphone desbloquear este <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Nome do modelo de certificado da Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Tem certeza que quer excluir o certificado do servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Login automático</translation>
 <translation id="2101225219012730419">Versão:</translation>
-<translation id="2107494551712864447">Adicionar uma impressão digital</translation>
 <translation id="2112877397266219826">Ativar controle por toque para configurar</translation>
 <translation id="21133533946938348">Fixar guia</translation>
 <translation id="2113479184312716848">Abrir &amp;arquivo...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Área de trabalho</translation>
 <translation id="2526619973349913024">Verificar atualizações</translation>
 <translation id="2527167509808613699">Qualquer tipo de conexão</translation>
-<translation id="2532026602297547439">Sujeira no sensor</translation>
 <translation id="2532589005999780174">Modo de alto contraste</translation>
 <translation id="253434972992662860">&amp;Pausar</translation>
 <translation id="2534460670861217804">Proxy HTTP seguro</translation>
@@ -1197,6 +1196,7 @@
 <translation id="2783298271312924866">Download concluído</translation>
 <translation id="2783321960289401138">Criar atalho...</translation>
 <translation id="2783829359200813069">Selecionar tipos de criptografia</translation>
+<translation id="2783952358106015700">Usar sua chave de segurança com <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Ativando seu serviço de dados móveis</translation>
 <translation id="2785873697295365461">Descritores de arquivos</translation>
 <translation id="2787047795752739979">Substituir original</translation>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">Fazer backup de suas fotos e seus vídeos</translation>
 <translation id="3060379269883947824">Ativar Selecionar para ouvir</translation>
 <translation id="3061707000357573562">Aplicar patch ao serviço</translation>
-<translation id="3064410671692449875">Dados insuficientes</translation>
 <translation id="3065041951436100775">Feedback para guia desativada.</translation>
 <translation id="3067198179881736288">Instalar app?</translation>
 <translation id="3067198360141518313">Executar este plug-in</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">Nova &amp;guia</translation>
 <translation id="3288047731229977326">Extensões executadas no modo de desenvolvedor podem prejudicar o computador. Se você não for desenvolvedor, para sua segurança, desative essas extensões que estão sendo executadas no modo de desenvolvedor.</translation>
 <translation id="3289856944988573801">Para verificar se há atualizações, utilize Ethernet ou Wi-Fi.</translation>
+<translation id="3292421191230118801">Retomar a visualização de sites do dispositivo móvel no seu Chromebook</translation>
 <translation id="32939749466444286">O contêiner Linux não foi iniciado. Tente novamente.</translation>
 <translation id="3294437725009624529">Visitante</translation>
 <translation id="329838636886466101">Reparo</translation>
@@ -1552,6 +1552,7 @@
 <translation id="3348038390189153836">Dispositivo removível detectado</translation>
 <translation id="3348459612390503954">Parabéns</translation>
 <translation id="3349933790966648062">Ocupação da memória</translation>
+<translation id="3350117557200012647">Entrar no modo de pareamento</translation>
 <translation id="3353984535370177728">Selecionar uma pasta para upload</translation>
 <translation id="3355936511340229503">Erro de conexão</translation>
 <translation id="3356797067524893661">Está tudo pronto para usar o Hangouts Meet</translation>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">Seu mecanismo de pesquisa foi alterado para <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Não foi possível fazer o download do aplicativo Kiosk.</translation>
 <translation id="3564334271939054422">A rede Wi-Fi que você está usando (<ph name="NETWORK_ID" />) pode exigir que você visite sua página de login.</translation>
+<translation id="3564848315152754834">Chave de segurança USB</translation>
 <translation id="3566721612727112615">Nenhum site adicionado</translation>
 <translation id="3569382839528428029">Quer que o <ph name="APP_NAME" /> compartilhe sua tela?</translation>
 <translation id="3570985609317741174">Conteúdo da Web</translation>
@@ -1741,6 +1743,7 @@
 <translation id="3627588569887975815">Abrir link em janela &amp;anônima</translation>
 <translation id="3627671146180677314">Hora de renovação do certificado do Netscape</translation>
 <translation id="3627879631695760395">Instalar <ph name="APP" />…</translation>
+<translation id="3630132874740063857">Seu smartphone</translation>
 <translation id="3630995161997703415">Adicione este site à sua estante para usá-lo a qualquer momento</translation>
 <translation id="3635030235490426869">Aba 1</translation>
 <translation id="3636096452488277381">Olá, <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">Ícone de extensão</translation>
 <translation id="3665589677786828986">O Google Chrome detectou que algumas das suas configurações foram corrompidas por outro programa e as redefiniu para os padrões originais.</translation>
 <translation id="3668570675727296296">Configurações de idioma</translation>
+<translation id="3668801437375206837">Para diagnosticar melhor os problemas de Bluetooth, os Googlers podem incluir outros registros de Bluetooth aos relatórios de feedback deles. Quando essa opção estiver marcada, seu relatório incluirá registros btsnoop e HCI da sua sessão atual, depois de terem sido corrigidos para remover o máximo de PII possível. O acesso a esses registros será restrito aos gerentes do grupo de produtos do Chrome OS no Listnr. Os registros serão excluídos após 90 dias.</translation>
 <translation id="3668823961463113931">Manipuladores</translation>
 <translation id="3670229581627177274">Ativar Bluetooth</translation>
 <translation id="3672681487849735243">Foi detectado um erro de fábrica</translation>
@@ -1780,6 +1784,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> quer compartilhar sua tela</translation>
 <translation id="3693415264595406141">Senha:</translation>
 <translation id="3694027410380121301">Selecionar guia anterior</translation>
+<translation id="369489984217678710">Senhas e outros dados de login</translation>
 <translation id="3699624789011381381">Endereço de e-mail</translation>
 <translation id="3699920817649120894">Desativar a sincronização e a personalização?</translation>
 <translation id="3700888195348409686">Apresentando (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1803,6 +1808,7 @@
 <translation id="3727148787322499904">A alteração dessa configuração afetará todas as redes compartilhadas</translation>
 <translation id="3727187387656390258">Inspecionar pop-up</translation>
 <translation id="3729506734996624908">Sites permitidos</translation>
+<translation id="3731997362820527097">Selecionar chave de segurança</translation>
 <translation id="3732078975418297900">Erro na linha <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Servidor SSL com Step-up</translation>
 <translation id="3735740477244556633">Classificar por</translation>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">Bem-vindo ao Hangouts Meet</translation>
 <translation id="3861241522664181545">Página pausada.</translation>
 <translation id="3862134173397075045">Bem-vindo à experiência de transmissão no Chrome!</translation>
+<translation id="3862693525629180217">Verificar pelo sensor integrado</translation>
 <translation id="3862788408946266506">O app com o atributo de manifesto "kiosk_only" precisa ser instalado no modo quiosque do Chrome OS</translation>
 <translation id="3865414814144988605">Resolução</translation>
 <translation id="386548886866354912">Compactar com <ph name="EXTENSION_NAME" /></translation>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">Para que seu dispositivo possa ser redefinido com o Powerwash, é necessário reiniciá-lo.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Ver na Store</translation>
+<translation id="4058647953897694817">Verificar pelo Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Verificar documento agora</translation>
 <translation id="406070391919917862">Aplicativos de fundo</translation>
@@ -2041,6 +2049,7 @@
 <translation id="407520071244661467">Escala</translation>
 <translation id="4075639477629295004">Não foi possível transmitir o arquivo <ph name="FILE_NAME" /></translation>
 <translation id="4077917118009885966">Anúncios bloqueados neste site</translation>
+<translation id="4079799245038595838">Uma notificação foi enviada para seu smartphone. Siga as instruções para confirmar sua identidade.</translation>
 <translation id="4081242589061676262">Não foi possível transmitir o arquivo.</translation>
 <translation id="4084682180776658562">Favorito</translation>
 <translation id="4084835346725913160">Fechar <ph name="TAB_NAME" /></translation>
@@ -2140,6 +2149,7 @@
 <translation id="4250229828105606438">Captura de tela</translation>
 <translation id="4250680216510889253">Não</translation>
 <translation id="4252852543720145436">Identificadores de conteúdo protegido</translation>
+<translation id="4252899949534773101">Bluetooth desativado</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Conteúdo da guia compartilhado</translation>
 <translation id="4254813446494774748">Idioma de tradução:</translation>
 <translation id="425573743389990240">Taxa de descarga da bateria em Watts (um valor negativo significa que a bateria está sendo carregada)</translation>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">O Chrome pode localizar softwares nocivos no seu computador e removê-los</translation>
 <translation id="4481530544597605423">Dispositvos não pareados</translation>
 <translation id="4482194545587547824">O Google pode usar seu histórico de navegação para personalizar a Pesquisa e outros serviços Google</translation>
-<translation id="4493287891836751813">Conheça o seu Google Assistente</translation>
 <translation id="4495419450179050807">Não mostrar esta página</translation>
+<translation id="449938344715680828">Pressione |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| seguido de |<ph name="ACCELERATOR3" />| para sair</translation>
 <translation id="4499718683476608392">Ativa o preenchimento automático de cartão de crédito para preencher formulários com um único clique</translation>
 <translation id="4500114933761911433">O plug-in <ph name="PLUGIN_NAME" /> falhou</translation>
 <translation id="450099669180426158">Ícone de ponto de exclamação</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">Autenticação cancelada durante a conexão com "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">Arquivo <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Mais...</translation>
-<translation id="4576537685267142337">Levante o dedo e depois toque no sensor novamente</translation>
 <translation id="4576541033847873020">Parear dispositivo Bluetooth</translation>
 <translation id="4579581181964204535">Não foi possível transmitir <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Tem certeza que quer excluir $1 itens?</translation>
@@ -2343,6 +2352,7 @@
 <translation id="4611114513649582138">Conexão de dados disponível</translation>
 <translation id="4613271546271159013">Uma extensão alterou a página exibida quando uma nova guia é aberta.</translation>
 <translation id="4615586811063744755">nenhum cookie foi selecionado</translation>
+<translation id="4615618657481886098">Você já registrou essa chave. Não é necessário registrá-la novamente.</translation>
 <translation id="4617270414136722281">Opções de extensão</translation>
 <translation id="4619615317237390068">Guias de outros dispositivos</translation>
 <translation id="4620809267248568679">Esta configuração é aplicada por uma extensão.</translation>
@@ -2452,6 +2462,7 @@
 <translation id="4790972063719531840">Enviar automaticamente dados de uso e diagnóstico ao Google</translation>
 <translation id="4792711294155034829">&amp;Informar um problema...</translation>
 <translation id="479536056609751218">Página da web, somente HTML</translation>
+<translation id="4798236378408895261">Anexar <ph name="BEGIN_LINK" />registros de Bluetooth<ph name="END_LINK" /> (interno do Google)</translation>
 <translation id="479989351350248267">pesquisar</translation>
 <translation id="4801448226354548035">Ocultar contas</translation>
 <translation id="4801512016965057443">Permitir roaming de dados móveis</translation>
@@ -2518,6 +2529,7 @@
 <translation id="4882473678324857464">Focar favoritos</translation>
 <translation id="4882831918239250449">Controlar como o histórico de navegação é usado para personalizar a Pesquisa, os anúncios e muito mais</translation>
 <translation id="4883178195103750615">Exportar favoritos para arquivo HTML...</translation>
+<translation id="4883274597792587930">Localize o nome impresso na parte de trás da sua chave</translation>
 <translation id="4883436287898674711">Todos os sites de <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">&amp;Gerenciador de tarefas</translation>
 <translation id="4883898390143004266">Ajude os apps a encontrar o local. Use o serviço de localização do Google para ajudar a melhorar a localização para apps. O Google pode coletar dados de local periodicamente e usá-los de forma anônima para melhorar a precisão do local e os serviços com base na localização. <ph name="BEGIN_LINK1" />Saiba mais<ph name="END_LINK1" /></translation>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">Tamanho da fonte</translation>
 <translation id="494286511941020793">Ajuda da configuração de proxy</translation>
 <translation id="4945444280533270988">O Smart Lock está ativado</translation>
-<translation id="494660967831069720">Dados parciais</translation>
 <translation id="4953689047182316270">Responder a eventos de acessibilidade</translation>
 <translation id="4953808748584563296">Avatar laranja padrão</translation>
 <translation id="4955814292505481804">Anual</translation>
@@ -2991,6 +3002,7 @@
 <translation id="55601339223879446">Ajustar as fronteiras da sua área de trabalho dentro da tela</translation>
 <translation id="5562781907504170924">Esta guia está conectada a um dispositivo Bluetooth.</translation>
 <translation id="5563234215388768762">Pesquise no Google ou digite um URL</translation>
+<translation id="5567950944308676169">Conecte sua chave de segurança e ative-a</translation>
 <translation id="5567989639534621706">Caches de aplicativos</translation>
 <translation id="5568069709869097550">Não consigo acessar</translation>
 <translation id="5568144734023334204">Armazenamento do Android</translation>
@@ -3238,6 +3250,7 @@
 <translation id="5931146425219109062">Ler e modificar todos os seus dados nos websites que você visitar</translation>
 <translation id="5932881020239635062">Serial</translation>
 <translation id="5933376509899483611">Fuso horário</translation>
+<translation id="5938002010494270685">Atualização de segurança disponível</translation>
 <translation id="5939518447894949180">Redefinir</translation>
 <translation id="5939847200023027600">Serviço de criação de PDF</translation>
 <translation id="5941153596444580863">Adicionar pessoa...</translation>
@@ -3274,6 +3287,7 @@
 <translation id="6006484371116297560">Clássico</translation>
 <translation id="6007237601604674381">Falha na transferência. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">A pesquisa por voz no seu idioma não está disponível.</translation>
+<translation id="6009781704028455063">Sensor integrado</translation>
 <translation id="6010869025736512584">Acessando entrada de vídeo</translation>
 <translation id="6011193465932186973">Impressão digital</translation>
 <translation id="6011449291337289699">Limpar dados de sites</translation>
@@ -3284,6 +3298,7 @@
 <translation id="6020431688553761150">O servidor não autorizou você a acessar este recurso.</translation>
 <translation id="602251597322198729">Este site está tentando fazer o download de vários arquivos. Você deseja permitir isso?</translation>
 <translation id="6022526133015258832">Abrir em tela cheia</translation>
+<translation id="6022705094403139349">Pronto para parear sua chave de segurança?</translation>
 <translation id="6023643151125006053">Este dispositivo (SN: <ph name="SERIAL_NUMBER" />) foi bloqueado pelo administrador de <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">Rastreamento de pilha</translation>
 <translation id="6026047032548434446">Instalar app?</translation>
@@ -3347,6 +3362,7 @@
 <translation id="6105877918873366097">Data do último acesso</translation>
 <translation id="6107012941649240045">Emitido para</translation>
 <translation id="6112294629795967147">Toque para redimensionar</translation>
+<translation id="6112931163620622315">Verificar o smartphone</translation>
 <translation id="6112952769866305444">Editar pessoa, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Ver os textos e imagens copiados para a área de transferência</translation>
 <translation id="6116921718742659598">Alterar configurações de idioma e de entrada</translation>
@@ -3393,6 +3409,7 @@
 <translation id="6169666352732958425">Não é possível transmitir a área de trabalho.</translation>
 <translation id="6171948306033499786">Pausar impressão</translation>
 <translation id="6175314957787328458">GUID do domínio da Microsoft</translation>
+<translation id="6176043333338857209">O Bluetooth será temporariamente ativado para se comunicar com sua chave de segurança</translation>
 <translation id="6178664161104547336">Selecione um certificado</translation>
 <translation id="6181431612547969857">Download bloqueado</translation>
 <translation id="6185132558746749656">Localização do dispositivo</translation>
@@ -3480,6 +3497,7 @@
 <translation id="6311220991371174222">Não foi possível iniciar o Chrome porque algo deu errado ao abrir seu perfil. Tente reiniciar o Chrome.</translation>
 <translation id="6312400084708441752">Inclui informações sobre softwares nocivos, configurações do sistema e processos no seu computador</translation>
 <translation id="6312403991423642364">Erro de rede desconhecido</translation>
+<translation id="6313320178014547270">Você está usando uma chave que não está registrada neste site</translation>
 <translation id="6313641880021325787">SAIR DE RV</translation>
 <translation id="6314819609899340042">Você ativou os recursos de depuração neste dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="6315493146179903667">Trazer todas para frente</translation>
@@ -3524,7 +3542,6 @@
 <translation id="6384275966486438344">Alterar suas configurações de pesquisa para: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Os sites podem salvar e ler os dados dos cookies</translation>
 <translation id="6388429472088318283">Idiomas de pesquisa</translation>
-<translation id="6388771388956873507">Encontre o sensor de impressão digital no dispositivo e toque nele com seu dedo</translation>
 <translation id="6390799748543157332">As páginas que você visualiza nesta janela não aparecem no histórico do navegador e não deixam outros rastros, como cookies, no computador depois que todas as janelas abertas no modo de visitante são fechadas. No entanto, todos os arquivos baixados serão preservados.</translation>
 <translation id="6390994422085833176">Revise os recursos de sincronização e personalização após a configuração</translation>
 <translation id="6395423953133416962">Enviar <ph name="BEGIN_LINK1" />informações<ph name="END_LINK1" /> e <ph name="BEGIN_LINK2" />métricas do sistema<ph name="END_LINK2" /></translation>
@@ -3536,6 +3553,7 @@
 <translation id="6399774419735315745">Espião</translation>
 <translation id="6401445054534215853">Item 1 da estante</translation>
 <translation id="6404511346730675251">Editar favorito</translation>
+<translation id="6405510437656969977">Prossiga quando estiver pronto para informar o PIN</translation>
 <translation id="6406303162637086258">Simular reinicialização do navegador</translation>
 <translation id="6406506848690869874">Sincronizar</translation>
 <translation id="6408118934673775994">Ler e alterar seus dados em <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> e <ph name="WEBSITE_3" /></translation>
@@ -3654,6 +3672,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Conteúdo da área de trabalho compartilhado</translation>
 <translation id="6580151766480067746">Versão de ARC</translation>
 <translation id="6581162200855843583">Link do Google Drive</translation>
+<translation id="6582080224869403177">Redefina seu <ph name="DEVICE_TYPE" /> para aumentar a segurança.</translation>
 <translation id="6582421931165117398">Para proteger suas informações pessoais, altere sua senha agora. Antes de alterar sua senha, você precisará fazer login.</translation>
 <translation id="6583851739559471707">Bloqueados em sites que costumam mostrar anúncios invasivos (recomendado)</translation>
 <translation id="6584878029876017575">Assinatura de tempo de vida da Microsoft</translation>
@@ -3703,6 +3722,7 @@
 <translation id="6644846457769259194">Atualizando seu dispositivo (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL da revogação da Autoridade de certificação do Netscape</translation>
 <translation id="6647838571840953560">No momento, no <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Chave de segurança ativada…</translation>
 <translation id="6648911618876616409">Uma atualização crítica está pronta para ser instalada. Faça login para começar.</translation>
 <translation id="6649018507441623493">Só um segundo…</translation>
 <translation id="6649563841575838401">O formato do arquivo não é compatível ou o arquivo está corrompido.</translation>
@@ -3778,6 +3798,7 @@
 <translation id="6759193508432371551">Configuração original</translation>
 <translation id="6767639283522617719">Não é possível vincular ao domínio. Verifique se as configurações da unidade organizacional estão corretas.</translation>
 <translation id="6769712124046837540">Adicionando impressora...</translation>
+<translation id="6770664076092644100">Verificar por NFC</translation>
 <translation id="6771503742377376720">É uma Autoridade de certificação</translation>
 <translation id="6777817260680419853">Redirecionamento bloqueado</translation>
 <translation id="6778959797435875428">Parar de ignorar sites</translation>
@@ -3813,6 +3834,7 @@
 <translation id="6823506025919456619">É necessário fazer login no Chrome para ver seus dispositivos</translation>
 <translation id="6824564591481349393">Copiar &amp;endereço de e-mail</translation>
 <translation id="6825184156888454064">Classificar por nome</translation>
+<translation id="6826872289184051766">Verificar por USB</translation>
 <translation id="6827236167376090743">Este vídeo continuará sendo reproduzido indefinidamente.</translation>
 <translation id="6828153365543658583">Restringir o login para os seguintes usuários:</translation>
 <translation id="6828860976882136098">Falha ao configurar atualizações automáticas para todos os usuários (erro de execução de simulação: <ph name="ERROR_NUMBER" />)</translation>
@@ -3846,6 +3868,7 @@
 <translation id="6880587130513028875">As imagens foram bloqueadas nesta página.</translation>
 <translation id="6883319974225028188">Oops! O sistema falhou ao salvar a configuração do dispositivo.</translation>
 <translation id="6885771755599377173">Visualização de informações do sistema</translation>
+<translation id="6886476658664859389">Chave de segurança NFC</translation>
 <translation id="6886871292305414135">Abrir link em uma nova &amp;guia</translation>
 <translation id="6892812721183419409">Abrir link como <ph name="USER" /></translation>
 <translation id="6896758677409633944">Copiar</translation>
@@ -4011,6 +4034,7 @@
 <translation id="713122686776214250">Adicionar pá&amp;gina...</translation>
 <translation id="7133578150266914903">O administrador está revertendo este dispositivo (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Diminuir o texto</translation>
+<translation id="7135729336746831607">Ativar o Bluetooth?</translation>
 <translation id="7136694880210472378">Tornar padrão</translation>
 <translation id="7136984461011502314">Bem-vindo ao <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Ocorreu um erro. Tente novamente escolhendo outras imagens.</translation>
@@ -4056,6 +4080,7 @@
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' excluído</translation>
 <translation id="7206693748120342859">Fazendo download do <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Sair da página}one{Sair da página}other{Sair das páginas}}</translation>
+<translation id="721467499098558573">Toque no botão da sua chave de segurança e mantenha-o pressionado por pelo menos cinco segundos</translation>
 <translation id="7216409898977639127">Operadora de celular</translation>
 <translation id="7216595297012131718">Ordenar idiomas com base na sua preferência</translation>
 <translation id="7220019174139618249">Não é possível exportar senhas para "<ph name="FOLDER" />"</translation>
@@ -4091,6 +4116,7 @@
 <translation id="7256710573727326513">Abrir em uma guia</translation>
 <translation id="725758059478686223">Serviço de impressão</translation>
 <translation id="7257666756905341374">Ler dados que você copia e cola</translation>
+<translation id="7260764918845374269">Para ver sua chave de segurança, ela precisa estar no modo de pareamento. Pressione o botão na chave por pelo menos cinco segundos.</translation>
 <translation id="7262004276116528033">Este serviço de login é hospedado por <ph name="SAML_DOMAIN" /></translation>
 <translation id="7268365133021434339">Fechar guias</translation>
 <translation id="7268659760406822741">Serviços disponíveis</translation>
@@ -4127,7 +4153,6 @@
 <translation id="7309257895202129721">Mostrar &amp;controles</translation>
 <translation id="7310598146671372464">Não foi possível fazer login. O servidor não é compatível com os tipos de criptografia do Kerberos especificados. Entre em contato com seu administrador.</translation>
 <translation id="7311079019872751559">Acesso a plug-in sem sandbox</translation>
-<translation id="7311891583377621132">Mova levemente para capturar uma parte diferente da impressão digital</translation>
 <translation id="7317680720589234980">Opções de bloqueio de tela e login</translation>
 <translation id="7321545336522791733">Servidor inacessível</translation>
 <translation id="7324297612904500502">Fórum do Beta</translation>
@@ -4209,6 +4234,7 @@
 <translation id="7464490149090366184">Falha na compactação, o item existe: "$1"</translation>
 <translation id="7465778193084373987">URL da revogação do certificado do Netscape</translation>
 <translation id="7469406957790636836">Para ativar essa configuração, primeiro ative a verificação ortográfica em <ph name="BEGIN_LINK" />Idiomas e entrada<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Enviar notificações para você e lembrar por padrão deste computador para exibição de mensagens recebidas</translation>
 <translation id="7469894403370665791">Conectar-se automaticamente a esta rede</translation>
 <translation id="747114903913869239">Erro: Não foi possível decodificar a extensão</translation>
 <translation id="7473753388963818366">É hora de preparar seu <ph name="DEVICE_TYPE" /></translation>
@@ -4258,6 +4284,7 @@
 <translation id="7531779363494549572">Acesse Config. &gt; Apps e notificações &gt; Notificações.</translation>
 <translation id="7536709149194614609">Reinicie o dispositivo e tente novamente mais tarde.</translation>
 <translation id="7537601449003285327">Fixar na barra de tarefas</translation>
+<translation id="7539856059004947393">Chave de segurança Bluetooth</translation>
 <translation id="7540972813190816353">Ocorreu um erro durante a verificação de atualizações: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Ativar os recursos de depuração neste dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="7544853251252956727">Ordem aleatória</translation>
@@ -4360,6 +4387,7 @@
 <translation id="7709152031285164251">Falha - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Transmitir…</translation>
 <translation id="7711920809702896782">Informações sobre a imagem</translation>
+<translation id="7712740978240882272">Desbloqueie o Chromebook com seu smartphone. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" />.</translation>
 <translation id="7712836429117959503">Extensão desconhecida com o código <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Cookies de <ph name="DOMAIN" /> permitidos</translation>
 <translation id="7714464543167945231">Certificado</translation>
@@ -4575,6 +4603,7 @@
 <translation id="7984068253310542383">Espelhar <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Ler e alterar as configurações de senhas salvas</translation>
 <translation id="7987764905897278458">Aproveite mais a tecnologia do Google</translation>
+<translation id="798835209536175951">Envie e receba mensagens de texto no seu Chromebook.<ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Permitir recursos de acessibilidade</translation>
 <translation id="7994702968232966508">Método EAP</translation>
 <translation id="799547531016638432">Remover atalho</translation>
@@ -4707,6 +4736,7 @@
 <translation id="8185331656081929126">Mostrar notificações quando novas impressoras forem detectadas na rede</translation>
 <translation id="8186609076106987817">O servidor não encontrou o arquivo.</translation>
 <translation id="8188120771410500975">&amp;Verificar a ortografia de campos de texto</translation>
+<translation id="8188389033983459049">Verifique as configurações do seu dispositivo e ative-o para continuar</translation>
 <translation id="8190193592390505034">Conectando-se a <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Gerenciar seus aplicativos, extensões e temas</translation>
 <translation id="8191453843330043793">V8 Proxy Resolver</translation>
@@ -4802,6 +4832,7 @@
 <translation id="8353683614194668312">Ele pode:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Restaurar páginas?</translation>
+<translation id="8362993567435070757">Localize o PIN de seis dígitos na parte de trás da sua chave</translation>
 <translation id="8363095875018065315">estável</translation>
 <translation id="8363142353806532503">Microfone bloqueado</translation>
 <translation id="8366396658833131068">Sua conectividade de rede foi restaurada. Selecione outra rede ou pressione o botão "Continuar" abaixo para iniciar seu aplicativo de quiosque.</translation>
@@ -4810,6 +4841,7 @@
 <translation id="8371695176452482769">Fale agora</translation>
 <translation id="8372369524088641025">Chave WEP incorreta</translation>
 <translation id="8373553483208508744">Desativar som das guias</translation>
+<translation id="8379878387931047019">Este dispositivo não é compatível com o tipo de chave de segurança solicitado por este site</translation>
 <translation id="8382913212082956454">Copiar &amp;endereço de e-mail</translation>
 <translation id="8386903983509584791">Verificação concluída</translation>
 <translation id="8389492867173948260">Permitir que a extensão leia e modifique todos os seus dados nos sites que você visitar:</translation>
@@ -4928,6 +4960,7 @@
 <translation id="8557930019681227453">Manifesto</translation>
 <translation id="8559694214572302298">Decodificador de imagem</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Continuar lendo</translation>
 <translation id="8565650234829130278">Tentativa de downgrade de aplicativo.</translation>
 <translation id="8569002732135253578">Imprimindo o documento <ph name="DOCUMENT_NAME" /> agora</translation>
 <translation id="8569682776816196752">Nenhum destino encontrado</translation>
@@ -4968,7 +5001,6 @@
 <translation id="8639047128869322042">Procurando softwares perigosos…</translation>
 <translation id="8639963783467694461">Configurações de preenchimento automático</translation>
 <translation id="8642171459927087831">Token de acesso</translation>
-<translation id="8642267168767642381">Movimento muito lento do dedo</translation>
 <translation id="8642947597466641025">Aumentar o texto</translation>
 <translation id="8643418457919840804">Para continuar, escolha uma opção:</translation>
 <translation id="8645354835496065562">Continuar permitindo acesso ao sensor</translation>
@@ -4983,6 +5015,7 @@
 <translation id="8655295600908251630">Canal</translation>
 <translation id="8655319619291175901">Ops... Algo deu errado.</translation>
 <translation id="8655972064210167941">O login falhou porque não foi possível confirmar sua senha. Entre em contato com o administrador ou tente novamente.</translation>
+<translation id="8656619792520327915">Adicionar outra chave de segurança Bluetooth</translation>
 <translation id="8656768832129462377">Não verificar</translation>
 <translation id="8658595122208653918">Alterar opções da impressora...</translation>
 <translation id="8658645149275195032">O app <ph name="APP_NAME" /> está compartilhando sua tela e áudio com <ph name="TAB_NAME" />.</translation>
@@ -5105,6 +5138,7 @@
 <translation id="8814687660896548945">Aguarde. O arquivo está sendo verificado...</translation>
 <translation id="881799181680267069">Ocultar outros</translation>
 <translation id="8818152010000655963">Plano de fundo</translation>
+<translation id="8818958672113348984">Verificar pelo smartphone</translation>
 <translation id="8820817407110198400">Favoritos</translation>
 <translation id="8821045908425223359">Configurar endereço IP automaticamente</translation>
 <translation id="882204272221080310">Atualizar firmware para maior segurança.</translation>
@@ -5135,11 +5169,13 @@
 <translation id="8872155268274985541">Arquivo de manifesto de atualização externa do modo quiosque inválido encontrado. Falha ao atualizar o aplicativo de quiosque. Remova o pendrive.</translation>
 <translation id="8874184842967597500">Não conectado</translation>
 <translation id="8876215549894133151">Formato:</translation>
+<translation id="8876307312329369159">Não é possível alterar essa configuração em uma sessão de demonstração.</translation>
 <translation id="8876309039915144086">Gerar senha…</translation>
 <translation id="8877448029301136595">[diretório pai]</translation>
 <translation id="8879284080359814990">&amp;Mostrar como guia</translation>
 <translation id="8883847527783433352">Sincronizar com outra conta</translation>
 <translation id="8885197664446363138">O Smart Lock não está disponível</translation>
+<translation id="88870264962436283">Usar Touch ID com <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Cor:</translation>
 <translation id="8890516388109605451">Fontes</translation>
 <translation id="8892168913673237979">Tudo pronto!</translation>
@@ -5160,6 +5196,7 @@
 <translation id="8915370057835397490">Carregando sugestão</translation>
 <translation id="8916476537757519021">Subquadro anônimo: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Para ter todas as suas senhas em todos os seus dispositivos, faça login e ative a sincronização.</translation>
+<translation id="8921366488406707015">Verificando sua chave de segurança…</translation>
 <translation id="8922013791253848639">Sempre permitir anúncios neste site</translation>
 <translation id="8925458182817574960">&amp;Configurações</translation>
 <translation id="8926389886865778422">Não perguntar novamente</translation>
@@ -5268,6 +5305,7 @@
 <translation id="9066782832737749352">Conversão de texto em voz</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> conecta você automaticamente a apps e sites qualificados com senhas que você salvou.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Pareie sua chave com este dispositivo para fazer login na sua conta</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Mouse USB conectado</translation>
 <translation id="9076523132036239772">Seu e-mail ou sua senha não pode ser verificado. Tente conectar-se a uma rede.</translation>
@@ -5329,7 +5367,6 @@
 <translation id="916607977885256133">Picture-in-picture</translation>
 <translation id="9169496697824289689">Ver atalhos de teclado</translation>
 <translation id="9169931577761441333">Adicionar o app <ph name="APP_NAME" /> à tela inicial</translation>
-<translation id="9170397650136757332">Agora, mova o dedo levemente para capturar todas as partes da sua impressão digital</translation>
 <translation id="9170848237812810038">&amp;Desfazer</translation>
 <translation id="9170884462774788842">Outro programa em seu computador adicionou um tema que pode mudar a forma como o Google Chrome funciona.</translation>
 <translation id="9173995187295789444">Procurando dispositivos Bluetooth…</translation>
@@ -5393,6 +5430,7 @@
 <translation id="971774202801778802">URL do favorito</translation>
 <translation id="973473557718930265">Sair</translation>
 <translation id="974555521953189084">Digite sua senha longa para iniciar a sincronização</translation>
+<translation id="977640333593638907">Para usar a maioria das chaves, basta pressionar o botão</translation>
 <translation id="981121421437150478">Off-line</translation>
 <translation id="983511809958454316">Esse recurso não é compatível com RV</translation>
 <translation id="984275831282074731">Formas de pagamento</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 38bff51..f6919cd 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Artigo de prateleira 5</translation>
 <translation id="1227507814927581609">A autenticação falhou ao ligar a "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">menu do sistema</translation>
+<translation id="123186018454553812">Experimentar uma chave diferente</translation>
 <translation id="1232569758102978740">Sem nome</translation>
 <translation id="1233721473400465416">Local</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Utilizar a sincronização e todos os serviços</translation>
 <translation id="1272079795634619415">Parar</translation>
-<translation id="1272242203003205253">Os colaboradores Google trabalham em conjunto com o Assistente para o ajudar</translation>
 <translation id="1272978324304772054">Esta conta de utilizador não pertence ao domínio no qual o dispositivo está inscrito. Se pretender inscrever-se num outro domínio, necessita de efetuar a recuperação do dispositivo em primeiro lugar.</translation>
 <translation id="1274977772557788323">Definições de armazenamento do Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies e outros dados do site</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Versão <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Pesquisar palavras-passe</translation>
 <translation id="1487335504823219454">Ativado - definições personalizadas</translation>
+<translation id="1489664337021920575">Escolher outra opção</translation>
 <translation id="1493892686965953381">A aguardar <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033">Mais <ph name="NUM_PRINTERS" /> dispositivos disponíveis.</translation>
 <translation id="1497522201463361063">Não é possível mudar o nome de "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Janela da aplicação</translation>
 <translation id="15373452373711364">Cursor do rato grande</translation>
 <translation id="1538729222189715449">A abrir ficheiros Linux…</translation>
+<translation id="153933193410874873">Não foi possível validar a sua identidade neste dispositivo.</translation>
 <translation id="1540605929960647700">Ativar o modo de demonstração</translation>
 <translation id="1543284117603151572">Importado do Edge</translation>
 <translation id="1545177026077493356">Modo quiosque automático</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Não é possível utilizar esta imagem. Utilize uma imagem diferente.</translation>
 <translation id="1566049601598938765">Website</translation>
 <translation id="1567387640189251553">Foi ligado um teclado diferente desde a última vez que introduziu a palavra-passe. É possível que esteja a tentar roubar os seus toques de teclas.</translation>
+<translation id="1567750922576943685">A validação da sua identidade ajuda a proteger as suas informações pessoais.</translation>
 <translation id="1567993339577891801">Consola de JavaScript</translation>
 <translation id="1568067597247500137">Desativar som do site</translation>
 <translation id="1568323446248056064">Abrir definições do dispositivo de visualização</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Não é possível detetar o telemóvel.</translation>
 <translation id="1616206807336925449">Esta extensão não requer autorizações especiais.</translation>
 <translation id="1616298854599875024">Não é possível importar a extensão "<ph name="IMPORT_NAME" />" porque não é um módulo partilhado.</translation>
-<translation id="161707228174452095">Impressão digital adicionada!</translation>
 <translation id="1618268899808219593">C&amp;entro de Ajuda</translation>
 <translation id="162035744160882748">Ativar a sincronização, a personalização e outros serviços Google</translation>
 <translation id="1620510694547887537">Câmara</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">Arquivo RAR</translation>
 <translation id="2034346955588403444">Adicionar outra rede Wi-Fi</translation>
 <translation id="203574396658008164">Ativar a opção de tirar notas a partir do ecrã de bloqueio</translation>
-<translation id="2039623879703305659">Moveu o dedo demasiado depressa</translation>
 <translation id="2040460856718599782">Ups! Ocorreu um erro ao tentar autenticá-lo. Verifique bem as suas credenciais de início de sessão e tente novamente.</translation>
 <translation id="2043818754674261542">Distância necessária para o telemóvel desbloquear este <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Nome do modelo de certificado Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Eliminar o certificado do servidor "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Início de sessão automático</translation>
 <translation id="2101225219012730419">Versão:</translation>
-<translation id="2107494551712864447">Adicionar uma impressão digital</translation>
 <translation id="2112877397266219826">Ligar o controlador de toque para configurar</translation>
 <translation id="21133533946938348">Fixar Separador</translation>
 <translation id="2113479184312716848">Abrir &amp;Ficheiro...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Ambiente de trabalho</translation>
 <translation id="2526619973349913024">Verificar se existem actualizações</translation>
 <translation id="2527167509808613699">Qualquer tipo de ligação</translation>
-<translation id="2532026602297547439">Sensor sujo</translation>
 <translation id="2532589005999780174">Modo de alto contraste</translation>
 <translation id="253434972992662860">&amp;Pausa</translation>
 <translation id="2534460670861217804">Proxy de HTTP seguro</translation>
@@ -1197,6 +1196,7 @@
 <translation id="2783298271312924866">Transferido</translation>
 <translation id="2783321960289401138">Criar atalho...</translation>
 <translation id="2783829359200813069">Selecionar tipos de encriptação</translation>
+<translation id="2783952358106015700">Utilizar a chave de segurança com a aplicação <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">A ativar o serviço de dados móveis</translation>
 <translation id="2785873697295365461">Descritores de ficheiros</translation>
 <translation id="2787047795752739979">Substituir original</translation>
@@ -1378,7 +1378,6 @@
 <translation id="3057861065630527966">Fazer uma cópia de segurança de fotos e vídeos</translation>
 <translation id="3060379269883947824">Ativar Selecionar para ativar voz</translation>
 <translation id="3061707000357573562">Serviço de patch</translation>
-<translation id="3064410671692449875">Dados insuficientes</translation>
 <translation id="3065041951436100775">Comentários acerca de separador desativado.</translation>
 <translation id="3067198179881736288">Pretende instalar a aplicação?</translation>
 <translation id="3067198360141518313">Executar este plug-in</translation>
@@ -1511,6 +1510,7 @@
 <translation id="3285322247471302225">Novo &amp;Separador</translation>
 <translation id="3288047731229977326">As extensões que funcionam no modo de programador podem danificar o seu computador. Se não é programador, deverá desativar as extensões que sejam executadas neste modo para se manter protegido.</translation>
 <translation id="3289856944988573801">Para verificar se existem atualizações, utilize Ethernet ou Wi-Fi.</translation>
+<translation id="3292421191230118801">Retomar a visualização de sites a partir de dispositivos móveis no Chromebook</translation>
 <translation id="32939749466444286">Não é possível iniciar o contentor do Linux. Tente novamente.</translation>
 <translation id="3294437725009624529">Convidado</translation>
 <translation id="329838636886466101">Reparar</translation>
@@ -1553,6 +1553,7 @@
 <translation id="3348038390189153836">Detetado dispositivo removível</translation>
 <translation id="3348459612390503954">Parabéns</translation>
 <translation id="3349933790966648062">Utilização da memória</translation>
+<translation id="3350117557200012647">Aceder ao modo de sincronização</translation>
 <translation id="3353984535370177728">Selecionar uma pasta a carregar</translation>
 <translation id="3355936511340229503">Erro de ligação</translation>
 <translation id="3356797067524893661">Está preparado para continuar para o Hangouts Meet</translation>
@@ -1692,6 +1693,7 @@
 <translation id="3556000484321257665">O seu motor de pesquisa foi alterado para <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Não foi possível transferir a aplicação de quiosque.</translation>
 <translation id="3564334271939054422">A rede Wi-Fi que está a utilizar (<ph name="NETWORK_ID" />) pode exigir que aceda à respetiva página de início de sessão.</translation>
+<translation id="3564848315152754834">Chave de segurança USB</translation>
 <translation id="3566721612727112615">Nenhum site adicionado</translation>
 <translation id="3569382839528428029">Deseja que <ph name="APP_NAME" /> partilhe o seu ecrã?</translation>
 <translation id="3570985609317741174">Conteúdo da Web</translation>
@@ -1742,6 +1744,7 @@
 <translation id="3627588569887975815">Abrir link numa janela sem re&amp;gisto</translation>
 <translation id="3627671146180677314">Período de renovação do certificado Netscape</translation>
 <translation id="3627879631695760395">Instalar a aplicação <ph name="APP" />...</translation>
+<translation id="3630132874740063857">O seu telemóvel</translation>
 <translation id="3630995161997703415">Adicione este site à prateleira para o utilizar a qualquer momento.</translation>
 <translation id="3635030235490426869">Separador 1</translation>
 <translation id="3636096452488277381">Olá <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1763,6 +1766,7 @@
 <translation id="3664511988987167893">Ícone da extensão</translation>
 <translation id="3665589677786828986">O Chrome detetou que algumas das suas definições foram danificadas por outro programa e repôs as respetivas predefinições originais.</translation>
 <translation id="3668570675727296296">Definições de idioma</translation>
+<translation id="3668801437375206837">Para melhorar o diagnóstico de problemas com o Bluetooth, os funcionários da Google podem incluir registos do Bluetooth adicionais nos respetivos relatórios de comentários. Quando esta opção está selecionada, o seu relatório inclui os registos btsnoop e HCI da sua sessão atual, limpos para remover o máximo de PII possível. O acesso a estes registos será restringido aos gestores do grupo de produtos do Chrome OS no Listnr. Os registos são removidos completamente após 90 dias.</translation>
 <translation id="3668823961463113931">Processadores</translation>
 <translation id="3670229581627177274">Ativar o Bluetooth</translation>
 <translation id="3672681487849735243">Foi detetado um erro de fábrica</translation>
@@ -1781,6 +1785,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> pretende partilhar o seu ecrã.</translation>
 <translation id="3693415264595406141">Palavra-passe:</translation>
 <translation id="3694027410380121301">Selecionar o separador anterior</translation>
+<translation id="369489984217678710">Palavras-passe e outros dados de início de sessão</translation>
 <translation id="3699624789011381381">Endereço de email</translation>
 <translation id="3699920817649120894">Pretende desativar a sincronização e a personalização?</translation>
 <translation id="3700888195348409686">A apresentar (<ph name="PAGE_ORIGIN" />)…</translation>
@@ -1804,6 +1809,7 @@
 <translation id="3727148787322499904">Alterar esta definição afetará todas as redes partilhadas</translation>
 <translation id="3727187387656390258">Inspeccionar pop-up</translation>
 <translation id="3729506734996624908">Sites permitidos</translation>
+<translation id="3731997362820527097">Selecionar a sua chave de segurança</translation>
 <translation id="3732078975418297900">Erro na linha <ph name="ERROR_LINE" />.</translation>
 <translation id="3733127536501031542">Servidor SSL com "Step-up"</translation>
 <translation id="3735740477244556633">Ordenar por</translation>
@@ -1904,6 +1910,7 @@
 <translation id="3860381078714302691">Bem-vindo ao Hangouts Meet</translation>
 <translation id="3861241522664181545">Página em pausa.</translation>
 <translation id="3862134173397075045">Bem-vindo à experiência do Google Cast no Chrome!</translation>
+<translation id="3862693525629180217">Validar através do sensor integrado</translation>
 <translation id="3862788408946266506">É necessário instalar a aplicação com o atributo de manifesto "kiosk_only" no modo quiosque do Chrome OS.</translation>
 <translation id="3865414814144988605">Resolução</translation>
 <translation id="386548886866354912">Comprimir com <ph name="EXTENSION_NAME" /></translation>
@@ -2029,6 +2036,7 @@
 <translation id="4055023634561256217">É necessário reiniciar antes de ser possível repor o dispositivo com o Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Ver na Web Store</translation>
+<translation id="4058647953897694817">Validar através de Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Verificar documento agora</translation>
 <translation id="406070391919917862">Aplicações em segundo plano</translation>
@@ -2042,6 +2050,7 @@
 <translation id="407520071244661467">Escala</translation>
 <translation id="4075639477629295004">Não é possível transmitir <ph name="FILE_NAME" />.</translation>
 <translation id="4077917118009885966">Anúncios bloqueados neste site</translation>
+<translation id="4079799245038595838">Foi enviada uma notificação para o seu telemóvel. Siga as instruções para confirmar a sua identidade.</translation>
 <translation id="4081242589061676262">Não é possível transmitir o ficheiro.</translation>
 <translation id="4084682180776658562">Marcar</translation>
 <translation id="4084835346725913160">Fechar <ph name="TAB_NAME" /></translation>
@@ -2141,6 +2150,7 @@
 <translation id="4250229828105606438">Captura de ecrã</translation>
 <translation id="4250680216510889253">Não</translation>
 <translation id="4252852543720145436">Identificadores de conteúdo protegido</translation>
+<translation id="4252899949534773101">O Bluetooth está desativado</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – conteúdo do separador partilhado</translation>
 <translation id="4254813446494774748">Idioma de tradução:</translation>
 <translation id="425573743389990240">Taxa de descarga da bateria em Watts (Um valor negativo significa que a bateria está em carregamento)</translation>
@@ -2266,8 +2276,8 @@
 <translation id="4480590691557335796">O Chrome pode encontrar software prejudicial no seu computador e removê-lo.</translation>
 <translation id="4481530544597605423">Dispositivos dessincronizados</translation>
 <translation id="4482194545587547824">A Google pode utilizar o seu histórico de navegação para personalizar a Pesquisa Google e outros serviços Google</translation>
-<translation id="4493287891836751813">Conheça o seu Assistente Google</translation>
 <translation id="4495419450179050807">Não mostrar nesta página</translation>
+<translation id="449938344715680828">Prima |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| seguido de |<ph name="ACCELERATOR3" />| para sair.</translation>
 <translation id="4499718683476608392">Ativar o Preenchimento automático de cartões de crédito para preencher formulários com um único clique</translation>
 <translation id="4500114933761911433">O plug-in <ph name="PLUGIN_NAME" /> falhou.</translation>
 <translation id="450099669180426158">Ícone de ponto de exclamação</translation>
@@ -2321,7 +2331,6 @@
 <translation id="4572659312570518089">A autenticação foi cancelada ao ligar a "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">Ficheiro <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Mais...</translation>
-<translation id="4576537685267142337">Levante o dedo e toque no sensor novamente</translation>
 <translation id="4576541033847873020">Sincronizar dispositivo Bluetooth</translation>
 <translation id="4579581181964204535">Não é possível transmitir <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Tem a certeza de que pretende eliminar $1 itens?</translation>
@@ -2344,6 +2353,7 @@
 <translation id="4611114513649582138">Ligação de dados disponível</translation>
 <translation id="4613271546271159013">Uma extensão alterou a página que é apresentada quando abre um novo separador.</translation>
 <translation id="4615586811063744755">nenhum cookie selecionado</translation>
+<translation id="4615618657481886098">Já registou esta chave anteriormente. Não tem de a registar novamente.</translation>
 <translation id="4617270414136722281">Opções de extensão</translation>
 <translation id="4619615317237390068">Separadores de outros dispositivos</translation>
 <translation id="4620809267248568679">Esta definição é gerida por uma extensão.</translation>
@@ -2453,6 +2463,7 @@
 <translation id="4790972063719531840">Enviar automaticamente dados de diagnóstico e de utilização para a Google</translation>
 <translation id="4792711294155034829">&amp;Comunicar um problema...</translation>
 <translation id="479536056609751218">Página Web, Apenas HTML</translation>
+<translation id="4798236378408895261">Anexar <ph name="BEGIN_LINK" />registos do Bluetooth<ph name="END_LINK" /> (interno da Google)</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4801448226354548035">Ocultar contas</translation>
 <translation id="4801512016965057443">Permitir roaming de dados móveis</translation>
@@ -2519,6 +2530,7 @@
 <translation id="4882473678324857464">Foco nos marcadores</translation>
 <translation id="4882831918239250449">Controlar a forma como o histórico de navegação é utilizado para personalizar a Pesquisa, os anúncios e muito mais</translation>
 <translation id="4883178195103750615">Exportar marcadores para ficheiro HTML...</translation>
+<translation id="4883274597792587930">Procure o nome impresso na parte posterior da sua chave.</translation>
 <translation id="4883436287898674711">Todos os sites de <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">Gestor de &amp;Tarefas</translation>
 <translation id="4883898390143004266">Ajude as aplicações a identificarem a localização. Utilize o serviço de localização da Google para ajudar a melhorar a localização das aplicações. A Google pode recolher periodicamente dados de localização e utilizar estes dados anonimamente para melhorar a precisão da localização e os serviços baseados na localização. <ph name="BEGIN_LINK1" />Saiba mais<ph name="END_LINK1" /></translation>
@@ -2566,7 +2578,6 @@
 <translation id="4941627891654116707">Tamanho do tipo de letra</translation>
 <translation id="494286511941020793">Ajuda de configuração de proxy</translation>
 <translation id="4945444280533270988">Smart Lock ativado.</translation>
-<translation id="494660967831069720">Dados parciais</translation>
 <translation id="4953689047182316270">Responder a eventos de acessibilidade</translation>
 <translation id="4953808748584563296">Avatar cor de laranja predefinido</translation>
 <translation id="4955814292505481804">Anual</translation>
@@ -2992,6 +3003,7 @@
 <translation id="55601339223879446">Ajustar os limites do seu ambiente de trabalho no ecrã</translation>
 <translation id="5562781907504170924">Este separador está ligado a um dispositivo Bluetooth.</translation>
 <translation id="5563234215388768762">Pesquisar no Google ou escrever um URL</translation>
+<translation id="5567950944308676169">Ligue e ative a chave de segurança.</translation>
 <translation id="5567989639534621706">Caches de aplicações</translation>
 <translation id="5568069709869097550">Não é possível iniciar sessão</translation>
 <translation id="5568144734023334204">Armazenamento Android</translation>
@@ -3239,6 +3251,7 @@
 <translation id="5931146425219109062">Ler e alterar todos os dados nos Sites que visita</translation>
 <translation id="5932881020239635062">Série</translation>
 <translation id="5933376509899483611">Fuso horário</translation>
+<translation id="5938002010494270685">Atualização de segurança disponível</translation>
 <translation id="5939518447894949180">Repor</translation>
 <translation id="5939847200023027600">Serviço do compositor de PDFs</translation>
 <translation id="5941153596444580863">Adicionar pessoa...</translation>
@@ -3275,6 +3288,7 @@
 <translation id="6006484371116297560">Clássico</translation>
 <translation id="6007237601604674381">Falha ao mover. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">A pesquisa por voz não está disponível no seu idioma.</translation>
+<translation id="6009781704028455063">Sensor integrado</translation>
 <translation id="6010869025736512584">A aceder à entrada de vídeo</translation>
 <translation id="6011193465932186973">Impressão digital</translation>
 <translation id="6011449291337289699">Limpar dados do site</translation>
@@ -3285,6 +3299,7 @@
 <translation id="6020431688553761150">O servidor não lhe deu autorização para aceder a este recurso.</translation>
 <translation id="602251597322198729">Este site está a tentar transferir vários ficheiros. Pretende autorizar?</translation>
 <translation id="6022526133015258832">Abrir em Ecrã Inteiro</translation>
+<translation id="6022705094403139349">Está pronto para sincronizar a sua chave de segurança?</translation>
 <translation id="6023643151125006053">Este dispositivo (SN: <ph name="SERIAL_NUMBER" />) foi bloqueado pelo administrador de <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">Rastreio de pilha</translation>
 <translation id="6026047032548434446">Pretende instalar a aplicação?</translation>
@@ -3348,6 +3363,7 @@
 <translation id="6105877918873366097">Último acesso</translation>
 <translation id="6107012941649240045">Emitido para</translation>
 <translation id="6112294629795967147">Tocar para redimensionar</translation>
+<translation id="6112931163620622315">Verificar o seu telemóvel</translation>
 <translation id="6112952769866305444">Editar pessoa: <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Ver o texto e as imagens copiados para a área de transferência</translation>
 <translation id="6116921718742659598">Alterar idioma e definições de introdução</translation>
@@ -3393,6 +3409,7 @@
 <translation id="6169666352732958425">Não é possível transmitir o ambiente de trabalho.</translation>
 <translation id="6171948306033499786">Interromper impressão</translation>
 <translation id="6175314957787328458">GUID de Domínio do Windows</translation>
+<translation id="6176043333338857209">O Bluetooth vai ser ativado temporariamente para comunicar com a sua chave de segurança.</translation>
 <translation id="6178664161104547336">Selecionar um certificado</translation>
 <translation id="6181431612547969857">Transferência bloqueada</translation>
 <translation id="6185132558746749656">Localização do dispositivo</translation>
@@ -3480,6 +3497,7 @@
 <translation id="6311220991371174222">Não é possível iniciar o Chrome porque ocorreu um erro ao abrir o seu perfil. Experimente reiniciar o Chrome.</translation>
 <translation id="6312400084708441752">São incluídas informações acerca do software prejudicial, das definições do sistema e dos processos no seu computador.</translation>
 <translation id="6312403991423642364">Erro de rede desconhecido</translation>
+<translation id="6313320178014547270">Está a utilizar uma chave que não está registada neste Website.</translation>
 <translation id="6313641880021325787">SAIR DA RV</translation>
 <translation id="6314819609899340042">Ativou com êxito as funcionalidades de depuração neste dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="6315493146179903667">Trazer tudo para a frente</translation>
@@ -3524,7 +3542,6 @@
 <translation id="6384275966486438344">Alterar as definições de pesquisa para: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Os sites podem guardar e ler os dados de cookies</translation>
 <translation id="6388429472088318283">Pesquisar idiomas</translation>
-<translation id="6388771388956873507">Localize o sensor de impressões digitais no dispositivo e toque nele com o dedo</translation>
 <translation id="6390799748543157332">As páginas visualizadas nesta janela não serão apresentadas no histórico do navegador e não deixarão outros vestígios, como cookies, no computador depois de fechar todas as janelas de Convidado abertas. No entanto, todos os ficheiros transferidos serão preservados.</translation>
 <translation id="6390994422085833176">Rever as funcionalidades de sincronização e de personalização após a configuração</translation>
 <translation id="6395423953133416962">Enviar <ph name="BEGIN_LINK1" />informações do sistema<ph name="END_LINK1" /> e <ph name="BEGIN_LINK2" />métricas<ph name="END_LINK2" /></translation>
@@ -3536,6 +3553,7 @@
 <translation id="6399774419735315745">Espiã</translation>
 <translation id="6401445054534215853">Artigo de prateleira 1</translation>
 <translation id="6404511346730675251">Editar marcador</translation>
+<translation id="6405510437656969977">Continue quando estiver pronto a introduzir o PIN.</translation>
 <translation id="6406303162637086258">Simular reinício do navegador</translation>
 <translation id="6406506848690869874">Sincronização</translation>
 <translation id="6408118934673775994">Ler e alterar os seus dados em <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> e <ph name="WEBSITE_3" /></translation>
@@ -3654,6 +3672,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – conteúdo do ambiente de trabalho partilhado.</translation>
 <translation id="6580151766480067746">Versão do ARC</translation>
 <translation id="6581162200855843583">Link do Google Drive</translation>
+<translation id="6582080224869403177">Efetue a reposição do dispositivo <ph name="DEVICE_TYPE" /> para atualizar a sua segurança.</translation>
 <translation id="6582421931165117398">Para proteger as suas informações pessoais, altere a palavra-passe agora. Antes de poder alterar a palavra-passe, é-lhe pedido para iniciar sessão.</translation>
 <translation id="6583851739559471707">Bloqueados em sites que têm tendência para mostrar anúncios intrusivos (recomendado)</translation>
 <translation id="6584878029876017575">Assinatura vitalícia Microsoft</translation>
@@ -3703,6 +3722,7 @@
 <translation id="6644846457769259194">A atualizar o dispositivo (<ph name="PROGRESS_PERCENT" />)…</translation>
 <translation id="6647228709620733774">URL de revogação da autoridade de certificação Netscape</translation>
 <translation id="6647838571840953560">Atualmente no canal <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Chave de segurança ativada…</translation>
 <translation id="6648911618876616409">Existe uma nova atualização crítica pronta para instalação. Inicie sessão para começar.</translation>
 <translation id="6649018507441623493">Aguarde um momento...</translation>
 <translation id="6649563841575838401">O formato do arquivo não é suportado ou o ficheiro está danificado.</translation>
@@ -3778,6 +3798,7 @@
 <translation id="6759193508432371551">Reposição de dados de fábrica</translation>
 <translation id="6767639283522617719">Não é possível associar ao domínio. Certifique-se de que as definições estão corretas para a unidade organizacional.</translation>
 <translation id="6769712124046837540">A adicionar impressora…</translation>
+<translation id="6770664076092644100">Validar através de NFC</translation>
 <translation id="6771503742377376720">É uma autoridade de certificação</translation>
 <translation id="6777817260680419853">Redirecionamento bloqueado</translation>
 <translation id="6778959797435875428">Reativar som dos sites</translation>
@@ -3813,6 +3834,7 @@
 <translation id="6823506025919456619">É necessário iniciar sessão no Chrome para ver os seus dispositivos</translation>
 <translation id="6824564591481349393">Copiar &amp;endereço de email</translation>
 <translation id="6825184156888454064">Ordenar por nome</translation>
+<translation id="6826872289184051766">Validar através de USB</translation>
 <translation id="6827236167376090743">Este vídeo continuará a ser reproduzido durante um tempo indefinido.</translation>
 <translation id="6828153365543658583">Restringir início de sessão para os seguintes utilizadores:</translation>
 <translation id="6828860976882136098">Falha ao configurar atualizações automáticas para todos os utilizadores (erro de execução da verificação prévia: <ph name="ERROR_NUMBER" />)</translation>
@@ -3846,6 +3868,7 @@
 <translation id="6880587130513028875">As imagens foram bloqueadas nesta página.</translation>
 <translation id="6883319974225028188">Ups! O sistema não conseguiu guardar a configuração do dispositivo.</translation>
 <translation id="6885771755599377173">Pré-visualização das informações do sistema</translation>
+<translation id="6886476658664859389">Chave de segurança de NFC</translation>
 <translation id="6886871292305414135">Abrir link num novo &amp;separador</translation>
 <translation id="6892812721183419409">Abrir link como <ph name="USER" /></translation>
 <translation id="6896758677409633944">Copiar</translation>
@@ -4011,6 +4034,7 @@
 <translation id="713122686776214250">Adicionar pá&amp;gina...</translation>
 <translation id="7133578150266914903">O administrador está a reverter este dispositivo (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Diminuir o tamanho do texto</translation>
+<translation id="7135729336746831607">Pretende ativar o Bluetooth?</translation>
 <translation id="7136694880210472378">Predefinir</translation>
 <translation id="7136984461011502314">Bem-vindo ao <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Ocorreu um erro. Tente novamente ao escolher outras imagens.</translation>
@@ -4056,6 +4080,7 @@
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" eliminado</translation>
 <translation id="7206693748120342859">A transferir <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Sair da página}other{Sair das páginas}}</translation>
+<translation id="721467499098558573">Prima sem soltar o botão na sua chave de segurança durante, pelo menos, 5 segundos.</translation>
 <translation id="7216409898977639127">Operador de telemóvel</translation>
 <translation id="7216595297012131718">Ordene idiomas com base na sua preferência</translation>
 <translation id="7220019174139618249">Não é possível exportar as palavras-passe para "<ph name="FOLDER" />"</translation>
@@ -4091,6 +4116,7 @@
 <translation id="7256710573727326513">Abrir num separador</translation>
 <translation id="725758059478686223">Serviço de impressão</translation>
 <translation id="7257666756905341374">Ler dados que copia e cola</translation>
+<translation id="7260764918845374269">Para ver a sua chave de segurança, esta tem de estar no modo de sincronização. Prima o botão na chave durante, pelo menos, 5 segundos.</translation>
 <translation id="7262004276116528033">Este serviço de início de sessão é alojado por <ph name="SAML_DOMAIN" /></translation>
 <translation id="7268365133021434339">Fechar separadores</translation>
 <translation id="7268659760406822741">Serviços disponíveis</translation>
@@ -4127,7 +4153,6 @@
 <translation id="7309257895202129721">Mostrar &amp;controlos</translation>
 <translation id="7310598146671372464">Não é possível iniciar sessão. O servidor não suporta os tipos de encriptação Kerberos especificados. Contacte o administrador.</translation>
 <translation id="7311079019872751559">Acesso de plug-in sem isolamento de processos</translation>
-<translation id="7311891583377621132">Mova ligeiramente para capturar uma parte diferente da impressão digital</translation>
 <translation id="7317680720589234980">Opções de bloqueio de ecrã e início de sessão</translation>
 <translation id="7321545336522791733">Servidor inacessível</translation>
 <translation id="7324297612904500502">Fórum da versão beta</translation>
@@ -4209,6 +4234,7 @@
 <translation id="7464490149090366184">Falha na criação de zip; o item existe: "$1"</translation>
 <translation id="7465778193084373987">URL de revogação do certificado Netscape</translation>
 <translation id="7469406957790636836">Para ativar esta opção, ative primeiro a verificação ortográfica em <ph name="BEGIN_LINK" />Idiomas e introdução<ph name="END_LINK" />.</translation>
+<translation id="7469518857922439236">Enviar-lhe notificações e memorizar este computador para mensagens como predefinição</translation>
 <translation id="7469894403370665791">Ligar automaticamente a esta rede</translation>
 <translation id="747114903913869239">Erro: não foi possível descodificar a extensão</translation>
 <translation id="7473753388963818366">Vamos preparar o seu <ph name="DEVICE_TYPE" /></translation>
@@ -4258,6 +4284,7 @@
 <translation id="7531779363494549572">Aceda a Definições &gt; Aplicações e notificações &gt; Notificações.</translation>
 <translation id="7536709149194614609">Reinicie o dispositivo e tente novamente mais tarde.</translation>
 <translation id="7537601449003285327">Afixar na barra de tarefas</translation>
+<translation id="7539856059004947393">Chave de segurança de Bluetooth</translation>
 <translation id="7540972813190816353">Ocorreu um erro durante a verificação de atualizações: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Ativar as funcionalidades de depuração neste dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="7544853251252956727">Reproduzir aleatoriamente</translation>
@@ -4360,6 +4387,7 @@
 <translation id="7709152031285164251">Falha - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Transmitir…</translation>
 <translation id="7711920809702896782">Informações da imagem</translation>
+<translation id="7712740978240882272">Desbloqueie o Chromebook com o telemóvel. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Extensão desconhecida com o ID <ph name="EXTENSION_ID" />.</translation>
 <translation id="7714307061282548371">Cookies de <ph name="DOMAIN" /> permitidos.</translation>
 <translation id="7714464543167945231">Certificado</translation>
@@ -4575,6 +4603,7 @@
 <translation id="7984068253310542383">Espelhar <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Ler e alterar as definições de palavras-passe guardadas</translation>
 <translation id="7987764905897278458">Mais inteligência da Google</translation>
+<translation id="798835209536175951">Envie e receba mensagens de texto com o Chromebook. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Activar funcionalidades de acessibilidade</translation>
 <translation id="7994702968232966508">Método EAP</translation>
 <translation id="799547531016638432">Remover atalho</translation>
@@ -4707,6 +4736,7 @@
 <translation id="8185331656081929126">Mostrar notificações quando forem detetadas novas impressoras na rede</translation>
 <translation id="8186609076106987817">O servidor não conseguiu encontrar o ficheiro.</translation>
 <translation id="8188120771410500975">&amp;Verificar a ortografia dos campos de texto</translation>
+<translation id="8188389033983459049">Verifique as definições do dispositivo e ative-o para continuar.</translation>
 <translation id="8190193592390505034">A ligar a <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Gerir as suas aplicações, extensões e temas</translation>
 <translation id="8191453843330043793">Resolução de proxy V8</translation>
@@ -4801,6 +4831,7 @@
 <translation id="8353683614194668312">Esta pode:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> – <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Restaurar páginas?</translation>
+<translation id="8362993567435070757">Procure o PIN de 6 dígitos na parte de trás da sua chave.</translation>
 <translation id="8363095875018065315">estável</translation>
 <translation id="8363142353806532503">Microfone bloqueado</translation>
 <translation id="8366396658833131068">A conetividade de rede foi restaurada. Selecione uma rede diferente ou prima "Continuar" abaixo para iniciar a aplicação de quiosque.</translation>
@@ -4809,6 +4840,7 @@
 <translation id="8371695176452482769">Falar agora</translation>
 <translation id="8372369524088641025">Chave WEP incorrecta</translation>
 <translation id="8373553483208508744">Desativar som dos separadores</translation>
+<translation id="8379878387931047019">Este dispositivo não suporta o tipo de chave de segurança necessário para este Website.</translation>
 <translation id="8382913212082956454">Copiar &amp;endereço de email</translation>
 <translation id="8386903983509584791">Análise concluída</translation>
 <translation id="8389492867173948260">Permitir que esta extensão leia e altere todos os dados nos Websites que visita:</translation>
@@ -4927,6 +4959,7 @@
 <translation id="8557930019681227453">Manifesto</translation>
 <translation id="8559694214572302298">Descodificador de imagem</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Continuar a ler</translation>
 <translation id="8565650234829130278">Tentativa de alterar a aplicação para a versão anterior</translation>
 <translation id="8569002732135253578">A imprimir agora <ph name="DOCUMENT_NAME" />…</translation>
 <translation id="8569682776816196752">Não foram encontrados destinos</translation>
@@ -4967,7 +5000,6 @@
 <translation id="8639047128869322042">A procurar software prejudicial...</translation>
 <translation id="8639963783467694461">Definições de Preenchimento automático</translation>
 <translation id="8642171459927087831">Chave de Acesso</translation>
-<translation id="8642267168767642381">Moveu o dedo demasiado devagar</translation>
 <translation id="8642947597466641025">Aumentar o tamanho do texto</translation>
 <translation id="8643418457919840804">Para continuar, selecione uma opção:</translation>
 <translation id="8645354835496065562">Continuar a permitir o acesso aos sensores</translation>
@@ -4982,6 +5014,7 @@
 <translation id="8655295600908251630">Canal</translation>
 <translation id="8655319619291175901">Ups... algo correu mal.</translation>
 <translation id="8655972064210167941">O início de sessão falhou porque não foi possível validar a sua palavra-passe. Contacte o gestor ou tente novamente.</translation>
+<translation id="8656619792520327915">Adicionar outra chave de segurança de Bluetooth</translation>
 <translation id="8656768832129462377">Não verificar</translation>
 <translation id="8658595122208653918">Alterar opções da impressora…</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> está a partilhar o ecrã e o áudio com <ph name="TAB_NAME" />.</translation>
@@ -5104,6 +5137,7 @@
 <translation id="8814687660896548945">Aguarde enquanto o arquivo está a ser analisado...</translation>
 <translation id="881799181680267069">Ocultar as outras</translation>
 <translation id="8818152010000655963">Imagem de fundo</translation>
+<translation id="8818958672113348984">Validar através do telemóvel</translation>
 <translation id="8820817407110198400">Marcadores</translation>
 <translation id="8821045908425223359">Configurar endereço IP automaticamente</translation>
 <translation id="882204272221080310">Atualize o firmware para maior segurança.</translation>
@@ -5134,11 +5168,13 @@
 <translation id="8872155268274985541">Foi encontrado um ficheiro do manifesto de atualização externa do Quiosque inválido. Falha ao atualizar a aplicação Quiosque. Remova a pen USB.</translation>
 <translation id="8874184842967597500">Sem ligação</translation>
 <translation id="8876215549894133151">Formato:</translation>
+<translation id="8876307312329369159">Não é possível alterar esta definição numa sessão de demonstração.</translation>
 <translation id="8876309039915144086">Gerar palavra-passe...</translation>
 <translation id="8877448029301136595">[directório principal]</translation>
 <translation id="8879284080359814990">Mo&amp;strar Como Separador</translation>
 <translation id="8883847527783433352">Sincronizar com outra conta</translation>
 <translation id="8885197664446363138">Smart Lock não disponível</translation>
+<translation id="88870264962436283">Utilizar o Touch ID com a aplicação <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Cor:</translation>
 <translation id="8890516388109605451">Fontes</translation>
 <translation id="8892168913673237979">Está tudo pronto!</translation>
@@ -5159,6 +5195,7 @@
 <translation id="8915370057835397490">A carregar sugestão</translation>
 <translation id="8916476537757519021">Subestrutura da navegação anónima: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Para obter todas as suas palavras-passe em todos os dispositivos, inicie sessão e ative a sincronização.</translation>
+<translation id="8921366488406707015">A validar a sua chave de segurança…</translation>
 <translation id="8922013791253848639">Permitir sempre anúncios neste site</translation>
 <translation id="8925458182817574960">&amp;Definições</translation>
 <translation id="8926389886865778422">Não voltar a perguntar</translation>
@@ -5267,6 +5304,7 @@
 <translation id="9066782832737749352">Síntese de voz</translation>
 <translation id="9072550133391925347">O <ph name="PASSWORD_MANAGER_BRAND" /> inicia automaticamente sessão em sites e aplicações elegíveis com as palavras-passe que guardou.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Sincronize a sua chave com este dispositivo para a poder utilizar ao iniciar sessão na sua conta.</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Rato USB ligado</translation>
 <translation id="9076523132036239772">Não foi possível confirmar o seu email ou a sua palavra-passe. Tente ligar primeiro a uma rede.</translation>
@@ -5328,7 +5366,6 @@
 <translation id="916607977885256133">Ecrã no ecrã</translation>
 <translation id="9169496697824289689">Ver atalhos de teclado</translation>
 <translation id="9169931577761441333">Adicionar <ph name="APP_NAME" /> ao ecrã principal</translation>
-<translation id="9170397650136757332">Agora, mova ligeiramente o dedo para capturar as diferentes partes da sua impressão digital</translation>
 <translation id="9170848237812810038">An&amp;ular</translation>
 <translation id="9170884462774788842">Outro programa do computador adicionou um tema que pode alterar o funcionamento do Chrome.</translation>
 <translation id="9173995187295789444">A procurar dispositivos Bluetooth…</translation>
@@ -5392,6 +5429,7 @@
 <translation id="971774202801778802">URL do marcador</translation>
 <translation id="973473557718930265">Sair</translation>
 <translation id="974555521953189084">Introduza a frase de acesso para iniciar a sincronização</translation>
+<translation id="977640333593638907">Para utilizar a maioria das chaves, basta premir o botão.</translation>
 <translation id="981121421437150478">Offline</translation>
 <translation id="983511809958454316">Esta funcionalidade não é compatível com RV</translation>
 <translation id="984275831282074731">Métodos de pagamento</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index dd83a12..68a7913 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Folosește sincronizarea și toate serviciile</translation>
 <translation id="1272079795634619415">Oprește</translation>
-<translation id="1272242203003205253">Google Partners colaborează cu Asistentul pentru a te ajuta</translation>
 <translation id="1272978324304772054">Acest cont de utilizator nu aparține domeniului pe care este înscris dispozitivul. Dacă doriți să vă înscrieți pe un alt domeniu, trebuie să parcurgeți mai întâi procesul de recuperare a dispozitivului.</translation>
 <translation id="1274977772557788323">Setări privind stocarea Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookie-urile și alte date privind site-ul</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Nu se poate detecta telefonul</translation>
 <translation id="1616206807336925449">Această extensie nu necesită permisiuni speciale.</translation>
 <translation id="1616298854599875024">Nu se poate importa extensia „<ph name="IMPORT_NAME" />”, deoarece nu este un modul folosit în comun</translation>
-<translation id="161707228174452095">Amprentă adăugată!</translation>
 <translation id="1618268899808219593">C&amp;entrul de ajutor</translation>
 <translation id="162035744160882748">Activează sincronizarea, personalizarea și alte servicii Google</translation>
 <translation id="1620510694547887537">Camera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">Arhivă RAR</translation>
 <translation id="2034346955588403444">Adaugă altă rețea Wi-Fi</translation>
 <translation id="203574396658008164">Activează scrierea de note din ecranul de blocare</translation>
-<translation id="2039623879703305659">Ai mișcat degetul prea rapid</translation>
 <translation id="2040460856718599782">Hopa! A apărut o eroare la autentificarea dvs. Verificați încă o dată datele de conectare și încercați din nou.</translation>
 <translation id="2043818754674261542">Distanța necesară pentru ca telefonul să deblocheze acest dispozitiv <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Nume șablon de certificat Microsoft</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Șterge certificatul de server „<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="2100273922101894616">Conectare automată</translation>
 <translation id="2101225219012730419">Versiune:</translation>
-<translation id="2107494551712864447">Adaugă o amprentă</translation>
 <translation id="2112877397266219826">Activează controlerul tactil pentru a mă configura</translation>
 <translation id="21133533946938348">Fixează fila</translation>
 <translation id="2113479184312716848">Deschide &amp;fișierul...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Desktop</translation>
 <translation id="2526619973349913024">Verifică dacă există actualizări</translation>
 <translation id="2527167509808613699">Orice fel de conexiune</translation>
-<translation id="2532026602297547439">Senzorul este murdar</translation>
 <translation id="2532589005999780174">Mod de contrast ridicat</translation>
 <translation id="253434972992662860">&amp;Întrerupe</translation>
 <translation id="2534460670861217804">Proxy HTTP securizat</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">Fă backup pentru fotografii și videoclipuri</translation>
 <translation id="3060379269883947824">Activează „Selectează și ascultă”</translation>
 <translation id="3061707000357573562">Serviciu de corecție</translation>
-<translation id="3064410671692449875">Date insuficiente</translation>
 <translation id="3065041951436100775">Feedback despre fila eliminată.</translation>
 <translation id="3067198179881736288">Instalezi aplicația?</translation>
 <translation id="3067198360141518313">Rulează acest plugin</translation>
@@ -2265,7 +2259,6 @@
 <translation id="4480590691557335796">Chrome poate să găsească software dăunător pe computer și să îl elimine</translation>
 <translation id="4481530544597605423">Dispozitive neasociate</translation>
 <translation id="4482194545587547824">Google poate folosi istoricul de navigare pentru a personaliza Căutarea și alte servicii Google</translation>
-<translation id="4493287891836751813">Îți prezentăm Asistentul Google</translation>
 <translation id="4495419450179050807">Nu afișa pe această pagină</translation>
 <translation id="4499718683476608392">Activează completarea automată a cardurilor de credit pentru a completa formularele cu un singur clic</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> s-a blocat</translation>
@@ -2320,7 +2313,6 @@
 <translation id="4572659312570518089">Autentificarea a fost anulată în timpul conectării la „<ph name="DEVICE_NAME" />”.</translation>
 <translation id="4572815280350369984">Fișier <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Mai multe...</translation>
-<translation id="4576537685267142337">Ridică degetul, apoi atinge senzorul din nou</translation>
 <translation id="4576541033847873020">Asociază dispozitivul Bluetooth</translation>
 <translation id="4579581181964204535">Nu se poate proiecta <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Sigur vrei să ștergi $1 elemente?</translation>
@@ -2565,7 +2557,6 @@
 <translation id="4941627891654116707">Dimensiunea fontului</translation>
 <translation id="494286511941020793">Ajutor de configurare pentru proxy</translation>
 <translation id="4945444280533270988">Smart Lock este activat</translation>
-<translation id="494660967831069720">Date parțiale</translation>
 <translation id="4953689047182316270">să răspundă evenimentelor de accesibilitate</translation>
 <translation id="4953808748584563296">Avatar portocaliu prestabilit</translation>
 <translation id="4955814292505481804">Anuală</translation>
@@ -3522,7 +3513,6 @@
 <translation id="6384275966486438344">Schimbați setările de căutare la: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Site-urile pot să salveze și să citească date despre cookie-uri</translation>
 <translation id="6388429472088318283">Caută limbi</translation>
-<translation id="6388771388956873507">Găsește senzorul de amprentă de pe dispozitiv și atinge-l cu degetul</translation>
 <translation id="6390799748543157332">Paginile pe care le accesați în această fereastră nu vor apărea în istoricul browserului și nu vor lăsa alte urme pe computer (de ex., cookie-uri) după ce închideți toate ferestrele deschise în modul Invitat. Cu toate acestea, fișierele pe care le descărcați vor fi păstrate.</translation>
 <translation id="6390994422085833176">Examinează funcțiile de sincronizare și personalizare după configurare</translation>
 <translation id="6395423953133416962">Trimiteți <ph name="BEGIN_LINK2" />valori<ph name="END_LINK2" /> și <ph name="BEGIN_LINK1" />informații de sistem<ph name="END_LINK1" /></translation>
@@ -4125,7 +4115,6 @@
 <translation id="7309257895202129721">Afișați &amp;comenzile</translation>
 <translation id="7310598146671372464">Conectarea nu a reușit. Serverul nu acceptă tipurile de criptare Kerberos specificate. Contactează administratorul.</translation>
 <translation id="7311079019872751559">Acces pluginuri scoase din mediul de testare</translation>
-<translation id="7311891583377621132">Mută ușor pentru a înregistra o altă parte a amprentei</translation>
 <translation id="7317680720589234980">Opțiuni pentru blocarea ecranului și conectare</translation>
 <translation id="7321545336522791733">Serverul nu poate fi accesat</translation>
 <translation id="7324297612904500502">Forumul pentru versiunea beta</translation>
@@ -4965,7 +4954,6 @@
 <translation id="8639047128869322042">Se caută software dăunător...</translation>
 <translation id="8639963783467694461">Setări pentru Completare automată</translation>
 <translation id="8642171459927087831">Indicativ de acces</translation>
-<translation id="8642267168767642381">Ai mișcat degetul prea lent</translation>
 <translation id="8642947597466641025">Măriți textul</translation>
 <translation id="8643418457919840804">Pentru a continua, alege o opțiune:</translation>
 <translation id="8645354835496065562">Permite în continuare accesul la senzori</translation>
@@ -5326,7 +5314,6 @@
 <translation id="916607977885256133">Picture-in-Picture</translation>
 <translation id="9169496697824289689">Vedeți comenzile rapide de la tastatură</translation>
 <translation id="9169931577761441333">Adaugă <ph name="APP_NAME" /> la ecranul de pornire</translation>
-<translation id="9170397650136757332">Acum mișcă ușor degetul pentru a captura toate porțiunile amprentei</translation>
 <translation id="9170848237812810038">&amp;Anulează</translation>
 <translation id="9170884462774788842">Un alt program de pe computerul dvs. a adăugat o temă care poate schimba modul în care funcționează Chrome.</translation>
 <translation id="9173995187295789444">Se caută dispozitive Bluetooth...</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 24f3fb275..8c1faa0 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">5-й объект на панели запуска</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">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Включить синхронизацию и все сервисы Chrome</translation>
 <translation id="1272079795634619415">Остановить</translation>
-<translation id="1272242203003205253">Как партнеры Google расширяют возможности Ассистента</translation>
 <translation id="1272978324304772054">Этот аккаунт не относится к домену, в котором зарегистрировано устройство. Чтобы зарегистрироваться в другом домене, сначала восстановите настройки устройства.</translation>
 <translation id="1274977772557788323">Настройки хранилища Adobe Flash Player</translation>
 <translation id="1274997165432133392">Файлы cookie и другие данные сайтов</translation>
@@ -332,6 +332,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>
@@ -366,6 +367,7 @@
 <translation id="1531004739673299060">Окно программы</translation>
 <translation id="15373452373711364">Большой курсор мыши</translation>
 <translation id="1538729222189715449">Файлы Linux открываются…</translation>
+<translation id="153933193410874873">Не удалось проверить вашу личность на этом устройстве.</translation>
 <translation id="1540605929960647700">Демонстрационный режим</translation>
 <translation id="1543284117603151572">Импортированные из Microsoft Edge</translation>
 <translation id="1545177026077493356">Автоматическое включение режима киоска</translation>
@@ -382,6 +384,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>
@@ -416,7 +419,6 @@
 <translation id="161460670679785907">Не удалось обнаружить телефон</translation>
 <translation id="1616206807336925449">Расширению не требуются особые разрешения.</translation>
 <translation id="1616298854599875024">Не удалось импортировать расширение "<ph name="IMPORT_NAME" />", поскольку это не общий модуль</translation>
-<translation id="161707228174452095">Отпечаток добавлен!</translation>
 <translation id="1618268899808219593">Справочный &amp;центр</translation>
 <translation id="162035744160882748">Включить синхронизацию, персонализацию и другие сервисы Google</translation>
 <translation id="1620510694547887537">Камера</translation>
@@ -694,7 +696,6 @@
 <translation id="2028997212275086731">Архив RAR</translation>
 <translation id="2034346955588403444">Добавить сеть Wi-Fi</translation>
 <translation id="203574396658008164">Делать заметки, когда экран заблокирован</translation>
-<translation id="2039623879703305659">Вы слишком быстро перемещали палец</translation>
 <translation id="2040460856718599782">Не удалось выполнить аутентификацию. Проверьте учетные данные и повторите попытку.</translation>
 <translation id="2043818754674261542">Расстояние до телефона, необходимое для разблокировки устройства <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Название шаблона сертификата Microsoft</translation>
@@ -738,7 +739,6 @@
 <translation id="2099686503067610784">Удалить сертификат сервера <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Автоматический вход</translation>
 <translation id="2101225219012730419">Версия:</translation>
-<translation id="2107494551712864447">Добавление отпечатка пальца</translation>
 <translation id="2112877397266219826">Для установки включите сенсорный контроллер</translation>
 <translation id="21133533946938348">Закрепить вкладку</translation>
 <translation id="2113479184312716848">Открыть &amp;файл...</translation>
@@ -1017,7 +1017,6 @@
 <translation id="2526590354069164005">Рабочий стол</translation>
 <translation id="2526619973349913024">Проверить обновления</translation>
 <translation id="2527167509808613699">при любом типе подключения</translation>
-<translation id="2532026602297547439">Сканер отпечатков загрязнен</translation>
 <translation id="2532589005999780174">Режим высокой контрастности</translation>
 <translation id="253434972992662860">&amp;Пауза</translation>
 <translation id="2534460670861217804">Безопасный HTTP-прокси</translation>
@@ -1198,6 +1197,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>
@@ -1378,7 +1378,6 @@
 <translation id="3057861065630527966">Создать резервные копии фото и видео</translation>
 <translation id="3060379269883947824">Включить озвучивание при нажатии</translation>
 <translation id="3061707000357573562">Исправление сервиса</translation>
-<translation id="3064410671692449875">Недостаточно данных</translation>
 <translation id="3065041951436100775">Сообщение о вкладке, закрытой из-за отсутствия ответа.</translation>
 <translation id="3067198179881736288">Установить приложение?</translation>
 <translation id="3067198360141518313">Запустить подключаемый модуль</translation>
@@ -1511,6 +1510,7 @@
 <translation id="3285322247471302225">Новая вкладка</translation>
 <translation id="3288047731229977326">Расширения, запущенные в режиме разработчика, могут причинить вред вашему компьютеру. Если вы не являетесь разработчиком, их следует отключить, чтобы обеспечить безопасность данных.</translation>
 <translation id="3289856944988573801">Чтобы проверить наличие обновлений, подключитесь через сеть Ethernet или Wi-Fi.</translation>
+<translation id="3292421191230118801">Открыть на компьютере Chromebook сайты, которые вы смотрели на мобильном устройстве</translation>
 <translation id="32939749466444286">Не удалось запустить контейнер Linux. Повторите попытку.</translation>
 <translation id="3294437725009624529">Гость</translation>
 <translation id="329838636886466101">Восстановить</translation>
@@ -1553,6 +1553,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>
@@ -1692,6 +1693,7 @@
 <translation id="3556000484321257665">Поисковая система изменена на <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Не удалось скачать киоск-приложение</translation>
 <translation id="3564334271939054422">Возможно, вам нужно перейти на страницу входа сети Wi-Fi (<ph name="NETWORK_ID" />).</translation>
+<translation id="3564848315152754834">Электронный USB-ключ</translation>
 <translation id="3566721612727112615">Добавленных сайтов нет</translation>
 <translation id="3569382839528428029">Предоставить приложению "<ph name="APP_NAME" />" доступ к вашему экрану?</translation>
 <translation id="3570985609317741174">Вид страниц</translation>
@@ -1742,6 +1744,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">Вкладка 1</translation>
 <translation id="3636096452488277381">Привет, <ph name="USER_GIVEN_NAME" />!</translation>
@@ -1763,6 +1766,7 @@
 <translation id="3664511988987167893">Значок расширения</translation>
 <translation id="3665589677786828986">Некоторые настройки Chrome недавно были изменены посторонней программой. Браузер восстановил их значения по умолчанию.</translation>
 <translation id="3668570675727296296">Настройки языка</translation>
+<translation id="3668801437375206837">Если установить этот флажок, сотрудники Google смогут прикрепить к вашему отчету дополнительные журналы Bluetooth (btsnoop и HCI), относящиеся к текущему сеансу. Информация, позволяющая идентифицировать личность, будет из них удалена. Эти журналы нужны для более точной диагностики, и доступ к ним имеют только менеджеры Chrome OS в Listnr. Через 90 дней журналы будут удалены без возможности восстановления.</translation>
 <translation id="3668823961463113931">Обработчики</translation>
 <translation id="3670229581627177274">Включить Bluetooth</translation>
 <translation id="3672681487849735243">Обнаружен производственный брак</translation>
@@ -1781,6 +1785,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>
@@ -1804,6 +1809,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>
@@ -1904,6 +1910,7 @@
 <translation id="3860381078714302691">Добро пожаловать в Hangouts Meet</translation>
 <translation id="3861241522664181545">Загрузка страницы приостановлена</translation>
 <translation id="3862134173397075045">Добро пожаловать в Cast для Chrome!</translation>
+<translation id="3862693525629180217">Подтвердить с помощью встроенного датчика</translation>
 <translation id="3862788408946266506">Приложения, у которых в манифесте есть атрибут kiosk_only, можно устанавливать только в режиме киоска</translation>
 <translation id="3865414814144988605">Разрешение</translation>
 <translation id="386548886866354912">Создать архив <ph name="EXTENSION_NAME" /></translation>
@@ -2029,6 +2036,7 @@
 <translation id="4055023634561256217">Необходимо перезагрузить устройство, прежде чем восстанавливать заводские настройки с помощью Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Открыть в Интернет-магазине</translation>
+<translation id="4058647953897694817">Подтвердить через Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Проверить документ</translation>
 <translation id="406070391919917862">Фоновые приложения</translation>
@@ -2042,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>
@@ -2141,6 +2150,7 @@
 <translation id="4250229828105606438">Скриншот</translation>
 <translation id="4250680216510889253">Нет</translation>
 <translation id="4252852543720145436">Идентификаторы защищенного контента</translation>
+<translation id="4252899949534773101">Включите Bluetooth</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" />: доступ к содержимому вкладки открыт</translation>
 <translation id="4254813446494774748">Перевести на:</translation>
 <translation id="425573743389990240">Скорость разрядки батареи в ваттах (при зарядке значение отрицательное)</translation>
@@ -2266,8 +2276,8 @@
 <translation id="4480590691557335796">Браузер Chrome может найти вредоносные программы на вашем компьютере и удалить их.</translation>
 <translation id="4481530544597605423">Отключенные устройства</translation>
 <translation id="4482194545587547824">Google может использовать историю просмотров для персонализации Поиска и других сервисов.</translation>
-<translation id="4493287891836751813">Ваш ассистент от Google</translation>
 <translation id="4495419450179050807">Не показывать на этой странице</translation>
+<translation id="449938344715680828">Чтобы выйти, нажмите |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />|, а затем |<ph name="ACCELERATOR3" />|</translation>
 <translation id="4499718683476608392">Включить автозаполнение данных банковской карты</translation>
 <translation id="4500114933761911433">Сбой в плагине <ph name="PLUGIN_NAME" /></translation>
 <translation id="450099669180426158">Значок восклицательного знака.</translation>
@@ -2321,7 +2331,6 @@
 <translation id="4572659312570518089">При подключении к "<ph name="DEVICE_NAME" />" аутентификация была отменена.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-файл</translation>
 <translation id="457386861538956877">Ещё...</translation>
-<translation id="4576537685267142337">Поднимите палец и снова приложите его к сканеру</translation>
 <translation id="4576541033847873020">Подключение устройства Bluetooth</translation>
 <translation id="4579581181964204535">Трансляция с сайта <ph name="HOST_NAME" /> невозможна</translation>
 <translation id="4580526846085481512">Действительно удалить объекты ($1)?</translation>
@@ -2344,6 +2353,7 @@
 <translation id="4611114513649582138">Доступно Интернет-подключение</translation>
 <translation id="4613271546271159013">Одно из расширений изменило страницу, которая открывается в новой вкладке.</translation>
 <translation id="4615586811063744755">файлы cookie не выбраны</translation>
+<translation id="4615618657481886098">Вы уже зарегистрировали этот ключ ранее.</translation>
 <translation id="4617270414136722281">Параметры расширений</translation>
 <translation id="4619615317237390068">Вкладки с других устройств</translation>
 <translation id="4620809267248568679">Этот параметр определяется расширением.</translation>
@@ -2453,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" />журналы Bluetooth<ph name="END_LINK" /> (доступно только сотрудникам Google)</translation>
 <translation id="479989351350248267">поиск</translation>
 <translation id="4801448226354548035">Скрыть аккаунты</translation>
 <translation id="4801512016965057443">Разрешить мобильный интернет-роуминг</translation>
@@ -2519,6 +2530,7 @@
 <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">Диспетчер задач</translation>
 <translation id="4883898390143004266">Определение местоположения. Благодаря службам геолокации Google приложения могут определять, где вы находитесь. Чтобы эта функция работала ещё точнее, Google время от времени собирает анонимную информацию о вашем местоположении. Эти сведения также помогают улучшить работу служб, использующих данные о местоположении пользователей. <ph name="BEGIN_LINK1" />Подробнее…<ph name="END_LINK1" /></translation>
@@ -2566,7 +2578,6 @@
 <translation id="4941627891654116707">Размер шрифта</translation>
 <translation id="494286511941020793">Справка по конфигурации прокси-сервера</translation>
 <translation id="4945444280533270988">Функция Smart Lock включена</translation>
-<translation id="494660967831069720">Неполные данные</translation>
 <translation id="4953689047182316270">Использование специальных возможностей</translation>
 <translation id="4953808748584563296">Аватар по умолчанию (оранжевый)</translation>
 <translation id="4955814292505481804">Годовая</translation>
@@ -2992,6 +3003,7 @@
 <translation id="55601339223879446">Подогнать границы рабочего стола под размер экрана</translation>
 <translation id="5562781907504170924">Эта вкладка подключена к одному устройству по Bluetooth.</translation>
 <translation id="5563234215388768762">Введите поисковый запрос или URL</translation>
+<translation id="5567950944308676169">Вставьте электронный ключ и активируйте его.</translation>
 <translation id="5567989639534621706">Кеш приложений</translation>
 <translation id="5568069709869097550">Не удается войти</translation>
 <translation id="5568144734023334204">Хранилище Android</translation>
@@ -3238,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">Сервис для компоновки PDF-файлов</translation>
 <translation id="5941153596444580863">Добавить пользователя</translation>
@@ -3274,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>
@@ -3284,6 +3298,7 @@
 <translation id="6020431688553761150">Сервер не разрешил вам доступ к этому ресурсу.</translation>
 <translation id="602251597322198729">Этот сайт пытается скачать несколько файлов. Разрешить?</translation>
 <translation id="6022526133015258832">Открыть в полноэкранном режиме</translation>
+<translation id="6022705094403139349">Подключить электронный ключ?</translation>
 <translation id="6023643151125006053">Устройство (серийный номер <ph name="SERIAL_NUMBER" />) заблокировано администратором домена <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">Трассировка стека</translation>
 <translation id="6026047032548434446">Установить приложение?</translation>
@@ -3347,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>
@@ -3392,6 +3408,7 @@
 <translation id="6169666352732958425">Не удается транслировать рабочий стол</translation>
 <translation id="6171948306033499786">Приостановить печать</translation>
 <translation id="6175314957787328458">Идентификатор GUID домена Microsoft</translation>
+<translation id="6176043333338857209">Для подключения электронного ключа будет временно активирован модуль Bluetooth.</translation>
 <translation id="6178664161104547336">Выбор сертификата</translation>
 <translation id="6181431612547969857">Скачивание запрещено</translation>
 <translation id="6185132558746749656">Местоположение устройства</translation>
@@ -3479,6 +3496,7 @@
 <translation id="6311220991371174222">Не удалось открыть профиль. Перезапустите 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>
@@ -3523,7 +3541,6 @@
 <translation id="6384275966486438344">Использование поисковой системы <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Сайты могут сохранять и считывать файлы cookie</translation>
 <translation id="6388429472088318283">Поиск по языкам</translation>
-<translation id="6388771388956873507">Приложите палец к сканеру отпечатков пальцев на устройстве</translation>
 <translation id="6390799748543157332">Страницы, открытые в гостевом режиме, не сохранятся в истории браузера и не оставят на компьютере следов, таких как файлы cookie. После того как вы их закроете, будут сохранены только скачанные вами файлы.</translation>
 <translation id="6390994422085833176">Проверить настройки синхронизации и персонализации после завершения установки</translation>
 <translation id="6395423953133416962">Отправлять <ph name="BEGIN_LINK1" />сведения о системе<ph name="END_LINK1" /> и <ph name="BEGIN_LINK2" />значения показателей<ph name="END_LINK2" /></translation>
@@ -3535,6 +3552,7 @@
 <translation id="6399774419735315745">Шпион</translation>
 <translation id="6401445054534215853">1-й объект на панели запуска</translation>
 <translation id="6404511346730675251">Изменить закладку</translation>
+<translation id="6405510437656969977">Продолжите, когда будете готовы ввести PIN-код.</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>
@@ -3653,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</translation>
@@ -3702,6 +3721,7 @@
 <translation id="6644846457769259194">Обновление устройства (<ph name="PROGRESS_PERCENT" />)…</translation>
 <translation id="6647228709620733774">URL отзыва ЦС Netscape</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>
@@ -3777,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>
@@ -3812,6 +3833,7 @@
 <translation id="6823506025919456619">Войдите в Chrome, чтобы увидеть свои устройства</translation>
 <translation id="6824564591481349393">Скопировать адрес электронной почты</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>
@@ -3845,6 +3867,7 @@
 <translation id="6880587130513028875">Показ изображений запрещен для этой страниц.</translation>
 <translation id="6883319974225028188">Не удалось сохранить конфигурацию устройства</translation>
 <translation id="6885771755599377173">Cведения о системе</translation>
+<translation id="6886476658664859389">Электронный NFC-ключ</translation>
 <translation id="6886871292305414135">Открыть ссылку в новой &amp;вкладке</translation>
 <translation id="6892812721183419409">Открыть ссылку как <ph name="USER" /></translation>
 <translation id="6896758677409633944">Копировать</translation>
@@ -4010,6 +4033,7 @@
 <translation id="713122686776214250">Добавить &amp;страницу</translation>
 <translation id="7133578150266914903">Администратор возвращает ваше устройство к прежней версии системы. Выполнено <ph name="PROGRESS_PERCENT" />.</translation>
 <translation id="7134098520442464001">Уменьшить размер текста</translation>
+<translation id="7135729336746831607">Включить Bluetooth?</translation>
 <translation id="7136694880210472378">Использовать по умолчанию</translation>
 <translation id="7136984461011502314">Добро пожаловать в <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Произошла ошибка. Выберите другое изображение.</translation>
@@ -4055,6 +4079,7 @@
 <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{Закрыть страницы}few{Закрыть страницы}many{Закрыть страницы}other{Закрыть страницы}}</translation>
+<translation id="721467499098558573">Нажмите и удерживайте кнопку на электронном ключе в течение пяти секунд.</translation>
 <translation id="7216409898977639127">Оператор сотовой связи</translation>
 <translation id="7216595297012131718">Расположите языки, исходя из своих предпочтений</translation>
 <translation id="7220019174139618249">Не удалось экспортировать пароли в папку "<ph name="FOLDER" />"</translation>
@@ -4090,6 +4115,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>
@@ -4126,7 +4152,6 @@
 <translation id="7309257895202129721">Показать &amp;элементы управления</translation>
 <translation id="7310598146671372464">Не удалось выполнить вход. Сервер не поддерживает выбранные типы шифрования Kerberos. Обратитесь к администратору.</translation>
 <translation id="7311079019872751559">Доступ к плагинам вне тестовой среды</translation>
-<translation id="7311891583377621132">Немного перемещайте палец, чтобы отсканировать его полностью</translation>
 <translation id="7317680720589234980">Блокировка экрана и параметры входа</translation>
 <translation id="7321545336522791733">Сервер недоступен</translation>
 <translation id="7324297612904500502">Форум бета-версии</translation>
@@ -4208,6 +4233,7 @@
 <translation id="7464490149090366184">Не удалось выполнить архивирование, элемент "$1" уже присутствует в архиве.</translation>
 <translation id="7465778193084373987">URL отзыва сертификатов Netscape</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="7473753388963818366">Давайте настроим устройство <ph name="DEVICE_TYPE" /></translation>
@@ -4257,6 +4283,7 @@
 <translation id="7531779363494549572">Откройте настройки устройства и выберите "Приложения и уведомления &gt; Уведомления".</translation>
 <translation id="7536709149194614609">Перезапустите устройство и повторите попытку позже.</translation>
 <translation id="7537601449003285327">Закрепить на панели задач</translation>
+<translation id="7539856059004947393">Электронный Bluetooth-ключ</translation>
 <translation id="7540972813190816353">При проверке обновлений произошла ошибка: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Включите функции отладки на устройстве <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="7544853251252956727">Перемешать</translation>
@@ -4359,6 +4386,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">Файлы cookie с сайта <ph name="DOMAIN" /> разрешены</translation>
 <translation id="7714464543167945231">Сертификат</translation>
@@ -4574,6 +4602,7 @@
 <translation id="7984068253310542383">Дублировать изображение с экрана <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Чтение и изменение настроек пароля</translation>
 <translation id="7987764905897278458">Расширенный доступ к интеллектуальным функциям Google</translation>
+<translation id="798835209536175951">Отправлять и получать SMS на устройстве Chromebook. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Включить функции для людей с ограниченными возможностями</translation>
 <translation id="7994702968232966508">Метод EAP</translation>
 <translation id="799547531016638432">Удалить ярлык</translation>
@@ -4706,6 +4735,7 @@
 <translation id="8185331656081929126">Показывать уведомления о новых принтерах в сети</translation>
 <translation id="8186609076106987817">Этот файл отсутствует на сервере.</translation>
 <translation id="8188120771410500975">Проверка правописания &amp;в текстовых полях</translation>
+<translation id="8188389033983459049">Чтобы продолжить, проверьте настройки устройства и включите Bluetooth.</translation>
 <translation id="8190193592390505034">Соединение с <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Управление приложениями, расширениями и темами</translation>
 <translation id="8191453843330043793">Прокси-сервер V8</translation>
@@ -4800,6 +4830,7 @@
 <translation id="8353683614194668312">Разрешения:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> (<ph name="COUNT" />)</translation>
 <translation id="8358685469073206162">Восстановить страницы?</translation>
+<translation id="8362993567435070757">Найдите на обратной стороне ключа шестизначный PIN-код.</translation>
 <translation id="8363095875018065315">стабильная</translation>
 <translation id="8363142353806532503">Доступ к микрофону запрещен</translation>
 <translation id="8366396658833131068">Подключение к сети восстановлено. Выберите другую сеть или нажмите кнопку "Продолжить", чтобы запустить киоск-приложение.</translation>
@@ -4808,6 +4839,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>
@@ -4926,6 +4958,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>
@@ -4966,7 +4999,6 @@
 <translation id="8639047128869322042">Поиск вредоносного ПО…</translation>
 <translation id="8639963783467694461">Настройки автозаполнения</translation>
 <translation id="8642171459927087831">Токен доступа</translation>
-<translation id="8642267168767642381">Вы слишком медленно перемещали палец</translation>
 <translation id="8642947597466641025">Увеличить размер шрифта</translation>
 <translation id="8643418457919840804">Чтобы продолжить, выберите один из вариантов:</translation>
 <translation id="8645354835496065562">Всегда разрешать использовать датчики</translation>
@@ -4981,6 +5013,7 @@
 <translation id="8655295600908251630">Канал</translation>
 <translation id="8655319619291175901">Ошибка</translation>
 <translation id="8655972064210167941">Ошибка входа: не удалось подтвердить пароль. Обратитесь к администратору или повторите попытку.</translation>
+<translation id="8656619792520327915">Добавить другой электронный Bluetooth-ключ</translation>
 <translation id="8656768832129462377">Не проверять</translation>
 <translation id="8658595122208653918">Изменить настройки принтера</translation>
 <translation id="8658645149275195032">Приложение "<ph name="APP_NAME" />" предоставило сайту <ph name="TAB_NAME" /> доступ к экрану и аудио.</translation>
@@ -5103,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>
@@ -5133,11 +5167,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">Показать как вкладку</translation>
 <translation id="8883847527783433352">Синхронизировать с другим аккаунтом</translation>
 <translation id="8885197664446363138">Функция Smart Lock недоступна</translation>
+<translation id="88870264962436283">Используйте функцию Touch ID в приложении "<ph name="APP_NAME" />"</translation>
 <translation id="8888432776533519951">Цвет:</translation>
 <translation id="8890516388109605451">Источники</translation>
 <translation id="8892168913673237979">Все готово!</translation>
@@ -5158,6 +5194,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>
@@ -5266,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">Bluetooth</translation>
 <translation id="9074836595010225693">USB-мышь подключена</translation>
 <translation id="9076523132036239772">Не удалось проверить адрес электронной почты или пароль. Подключитесь к сети.</translation>
@@ -5327,7 +5365,6 @@
 <translation id="916607977885256133">Картинка в картинке</translation>
 <translation id="9169496697824289689">Просмотреть быстрые клавиши</translation>
 <translation id="9169931577761441333">Добавить приложение "<ph name="APP_NAME" />" на главный экран</translation>
-<translation id="9170397650136757332">Немного перемещайте палец, чтобы отсканировать его полностью</translation>
 <translation id="9170848237812810038">&amp;Отменить</translation>
 <translation id="9170884462774788842">Одна из программ на вашем компьютере установила тему, которая может влиять на работу Chrome.</translation>
 <translation id="9173995187295789444">Поиск устройств Bluetooth…</translation>
@@ -5391,6 +5428,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_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 5320e86..e342d34 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Používať synchronizáciu a všetky služby</translation>
 <translation id="1272079795634619415">Zastaviť</translation>
-<translation id="1272242203003205253">Partneri Googlu vám pomáhajú spolu s vaším Asistentom</translation>
 <translation id="1272978324304772054">Tento používateľský účet nepatrí do domény, do ktorej je zaregistrované toto zariadenie. Ak sa chcete zaregistrovať do inej domény, musíte najprv zariadenie obnoviť.</translation>
 <translation id="1274977772557788323">Nastavenia úložiska aplikácie Adobe Flash Player</translation>
 <translation id="1274997165432133392">Súbory cookie a ďalšie dáta webov</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Telefón sa nedarí nájsť</translation>
 <translation id="1616206807336925449">Toto rozšírenie nevyžaduje žiadne špeciálne povolenia.</translation>
 <translation id="1616298854599875024">Rozšírenie <ph name="IMPORT_NAME" /> sa nepodarilo importovať, pretože nie je zdieľaným modulom</translation>
-<translation id="161707228174452095">Odtlačok prsta bol pridaný!</translation>
 <translation id="1618268899808219593">Centrum pomoci</translation>
 <translation id="162035744160882748">Zapnutie synchronizácie, prispôsobenia a ďalších služieb Googlu</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">Archív vo formáte RAR</translation>
 <translation id="2034346955588403444">Pridať inú sieť Wi‑Fi</translation>
 <translation id="203574396658008164">Povoliť písanie poznámok na uzamknutej obrazovke</translation>
-<translation id="2039623879703305659">Pohyb prsta bol príliš rýchly</translation>
 <translation id="2040460856718599782">Hops, pri overovaní vašej totožnosti sa vyskytla chyba. Skontrolujte znova svoje prihlasovacie údaje a skúste to znova.</translation>
 <translation id="2043818754674261542">Vzdialenosť potrebná na odomknutie zariadenia <ph name="DEVICE_TYPE" /> telefónom</translation>
 <translation id="204497730941176055">Názov šablóny certifikátu od spoločnosti Microsoft</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Odstrániť certifikát servera „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Automatické prihlasovanie</translation>
 <translation id="2101225219012730419">Verzia:</translation>
-<translation id="2107494551712864447">Pridanie odtlačku prsta</translation>
 <translation id="2112877397266219826">Zariadenie nastavíte zapnutím nástroja na ovládanie 
 dotyku</translation>
 <translation id="21133533946938348">Pripnúť kartu</translation>
@@ -1019,7 +1015,6 @@
 <translation id="2526590354069164005">Pracovná plocha</translation>
 <translation id="2526619973349913024">Skontrolovať aktualizáciu</translation>
 <translation id="2527167509808613699">Ľubovoľný typ pripojenia</translation>
-<translation id="2532026602297547439">Senzor je znečistený</translation>
 <translation id="2532589005999780174">Režim s vysokým kontrastom</translation>
 <translation id="253434972992662860">&amp;Pozastaviť</translation>
 <translation id="2534460670861217804">Server proxy so zabezpečeným protokolom HTTP</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">Zálohovať fotky a videá</translation>
 <translation id="3060379269883947824">Povoliť počúvanie vybraného textu</translation>
 <translation id="3061707000357573562">Služba opráv</translation>
-<translation id="3064410671692449875">Nedostatok dát</translation>
 <translation id="3065041951436100775">Spätná väzba týkajúca sa vynútene ukončenej karty</translation>
 <translation id="3067198179881736288">Inštalovať aplikáciu?</translation>
 <translation id="3067198360141518313">Spustiť tento doplnok</translation>
@@ -2265,7 +2259,6 @@
 <translation id="4480590691557335796">Chrome dokáže vo vašom počítači nájsť škodlivý softvér a odstrániť ho</translation>
 <translation id="4481530544597605423">Nespárované zariadenia</translation>
 <translation id="4482194545587547824">Google môže používať vašu históriu prehliadania na prispôsobenie Vyhľadávania a ďalších služieb Google</translation>
-<translation id="4493287891836751813">Zoznámte sa so svojím Asistentom Google</translation>
 <translation id="4495419450179050807">Nezobrazovať na tejto stránke</translation>
 <translation id="4499718683476608392">Povoľte automatické dopĺňanie kreditných kariet na vypĺňanie formulárov jediným kliknutím</translation>
 <translation id="4500114933761911433">Doplnok <ph name="PLUGIN_NAME" /> zlyhal</translation>
@@ -2320,7 +2313,6 @@
 <translation id="4572659312570518089">Overenie totožnosti sa počas pripájania k zariadeniu <ph name="DEVICE_NAME" /> zrušilo.</translation>
 <translation id="4572815280350369984">Súbor <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Viac...</translation>
-<translation id="4576537685267142337">Nadvihnite prst, potom sa opäť dotknite senzora</translation>
 <translation id="4576541033847873020">Párovanie zariadenia Bluetooth</translation>
 <translation id="4579581181964204535">Nie je možné prenášať hostiteľskú službu <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Naozaj chcete odstrániť položky ($1)?</translation>
@@ -2565,7 +2557,6 @@
 <translation id="4941627891654116707">Veľkosť písma</translation>
 <translation id="494286511941020793">Pomocník konfigurácie servera proxy</translation>
 <translation id="4945444280533270988">Funkcia Smart Lock je zapnutá</translation>
-<translation id="494660967831069720">Čiastočné dáta</translation>
 <translation id="4953689047182316270">Reagovať na udalosti dostupnosti</translation>
 <translation id="4953808748584563296">Predvolený oranžový avatar</translation>
 <translation id="4955814292505481804">Ročná</translation>
@@ -3522,7 +3513,6 @@
 <translation id="6384275966486438344">Zmeniť nastavenia vyhľadávania na: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Webové stránky môžu ukladať a čítať údaje súborov cookie</translation>
 <translation id="6388429472088318283">Vyhľadajte jazyky</translation>
-<translation id="6388771388956873507">Nájdite senzor odtlačkov prstov na zariadení a dotknite sa ho prstom</translation>
 <translation id="6390799748543157332">Stránky otvorené v tomto okne sa nezobrazia v histórii prehliadača. Po zavretí všetkých otvorených okien režimu hosťa nezanechajú na počítači žiadne ďalšie stopy, ako napríklad súbory cookie. Všetky stiahnuté súbory však zostanú zachované.</translation>
 <translation id="6390994422085833176">Skontrolovať funkcie synchronizácie a prispôsobenia po dokončení nastavovania</translation>
 <translation id="6395423953133416962">Odosielať <ph name="BEGIN_LINK1" />informácie o systéme<ph name="END_LINK1" /> a <ph name="BEGIN_LINK2" />metriky<ph name="END_LINK2" /></translation>
@@ -4125,7 +4115,6 @@
 <translation id="7309257895202129721">Zobraziť &amp;ovládacie prvky</translation>
 <translation id="7310598146671372464">Nepodarilo sa prihlásiť. Server nepodporuje stanovené typy šifrovania Kerberos. Kontaktujte správcu.</translation>
 <translation id="7311079019872751559">Prístup k doplnku mimo karantény</translation>
-<translation id="7311891583377621132">Zľahka pohýbte, aby sa nasnímala ďalšia časť odtlačku</translation>
 <translation id="7317680720589234980">Zámka obrazovky a možnosti prihlásenia</translation>
 <translation id="7321545336522791733">Server je nedostupný</translation>
 <translation id="7324297612904500502">Beta fórum</translation>
@@ -4965,7 +4954,6 @@
 <translation id="8639047128869322042">Vyhľadáva sa škodlivý softvér…</translation>
 <translation id="8639963783467694461">Nastavenia automatického dopĺňania</translation>
 <translation id="8642171459927087831">Prístupový token</translation>
-<translation id="8642267168767642381">Pohyb prsta bol príliš pomalý</translation>
 <translation id="8642947597466641025">Zväčšiť text</translation>
 <translation id="8643418457919840804">Ak chcete pokračovať, vyberte možnosť:</translation>
 <translation id="8645354835496065562">Naďalej umožňovať prístup k senzorom</translation>
@@ -5326,7 +5314,6 @@
 <translation id="916607977885256133">Obraz v obraze</translation>
 <translation id="9169496697824289689">Zobraziť klávesové skratky</translation>
 <translation id="9169931577761441333">Pridať aplikáciu <ph name="APP_NAME" /> na plochu</translation>
-<translation id="9170397650136757332">Teraz pohýbte zľahka prstom, aby ste nasnímali všetky odlišné časti vášho odtlačku</translation>
 <translation id="9170848237812810038">&amp;Naspäť</translation>
 <translation id="9170884462774788842">Iný program v počítači pridal motív, ktorý môže zmeniť spôsob fungovania prehliadača Chrome.</translation>
 <translation id="9173995187295789444">Vyhľadávajú sa zariadenia Bluetooth...</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index a7d6e3d..448fdd3f 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16 x</translation>
 <translation id="127138278192656016">Uporaba sinhronizacije in vseh storitev</translation>
 <translation id="1272079795634619415">Ustavi</translation>
-<translation id="1272242203003205253">Googlovi partnerji sodelujejo s Pomočnikom, da vam lahko skupaj pomagajo</translation>
 <translation id="1272978324304772054">Uporabniški račun ne sodi v domeno, v katero je včlanjena naprava. Če se želite včlaniti v drugo domeno, morate najprej obnoviti napravo.</translation>
 <translation id="1274977772557788323">Nastavitve shranjevanja za Adobe Flash Player</translation>
 <translation id="1274997165432133392">Piškotki in drugi podatki spletnega mesta</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">Ni mogoče zaznati vašega telefona</translation>
 <translation id="1616206807336925449">Za to razširitev so potrebna posebna dovoljenja.</translation>
 <translation id="1616298854599875024">Razširitve »<ph name="IMPORT_NAME" />« ni mogoče uvoziti, ker ni modul v skupni rabi.</translation>
-<translation id="161707228174452095">Prstni odtis dodan.</translation>
 <translation id="1618268899808219593">Center za pomoč</translation>
 <translation id="162035744160882748">Vklop sinhronizacije, prilagajanja in drugih Googlovih storitev</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">Arhiv RAR</translation>
 <translation id="2034346955588403444">Dodaj drugo omrežje Wi-Fi</translation>
 <translation id="203574396658008164">Omogoči ustvarjanje zapiskov na zaklenjenem zaslonu</translation>
-<translation id="2039623879703305659">Prehiter premik prsta</translation>
 <translation id="2040460856718599782">Pri preverjanju pristnosti je prišlo do težav. Še enkrat preverite poverilnice za prijavo in poskusite znova.</translation>
 <translation id="2043818754674261542">Razdalja, ki je potrebna, da telefon odklene to napravo <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Microsoftovo ime predloge potrdila</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">Ali želite izbrisati strežniško potrdilo »<ph name="CERTIFICATE_NAME" />«?</translation>
 <translation id="2100273922101894616">Samodejna prijava</translation>
 <translation id="2101225219012730419">Različica:</translation>
-<translation id="2107494551712864447">Dodajanje prstnega odtisa</translation>
 <translation id="2112877397266219826">Vklopite krmilnik na dotik, da me nastavite</translation>
 <translation id="21133533946938348">Pripni zavihek</translation>
 <translation id="2113479184312716848">Odpri &amp;datoteko ...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">Namizje</translation>
 <translation id="2526619973349913024">Poišči posodobitev</translation>
 <translation id="2527167509808613699">Kakršna koli povezava</translation>
-<translation id="2532026602297547439">Tipalo je umazano</translation>
 <translation id="2532589005999780174">Visokokontrastni način</translation>
 <translation id="253434972992662860">&amp;Premor</translation>
 <translation id="2534460670861217804">Varni proxy HTTP</translation>
@@ -1377,7 +1372,6 @@
 <translation id="3057861065630527966">Varnostno kopiranje fotografij videoposnetkov</translation>
 <translation id="3060379269883947824">Omogoči storitev Izberite in poslušajte</translation>
 <translation id="3061707000357573562">Storitev za popravke</translation>
-<translation id="3064410671692449875">Nezadostni podatki</translation>
 <translation id="3065041951436100775">Povratne informacije o zaustavitvi zavihka.</translation>
 <translation id="3067198179881736288">Želite namestiti aplikacijo?</translation>
 <translation id="3067198360141518313">Zaženi vtičnik</translation>
@@ -2265,7 +2259,6 @@
 <translation id="4480590691557335796">Chrome lahko poišče škodljivo programsko opremo v računalniku in jo odstrani</translation>
 <translation id="4481530544597605423">Naprave, za katere je bila preklicana seznanitev</translation>
 <translation id="4482194545587547824">Google lahko vašo zgodovino brskanja uporabi za prilagajanje Iskanja Google in drugih Googlovih storitev</translation>
-<translation id="4493287891836751813">Spoznajte Pomočnika Google</translation>
 <translation id="4495419450179050807">Ne pokaži na tej strani</translation>
 <translation id="4499718683476608392">Omogoči samodejno izpolnjevanje za kreditne kartice za izpolnjevanje obrazcev z enim klikom</translation>
 <translation id="4500114933761911433">Vtičnik <ph name="PLUGIN_NAME" /> se je zrušil</translation>
@@ -2320,7 +2313,6 @@
 <translation id="4572659312570518089">Med povezovanjem z napravo »<ph name="DEVICE_NAME" />« je bilo preklicano preverjanje pristnosti.</translation>
 <translation id="4572815280350369984">Datoteka <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Več ...</translation>
-<translation id="4576537685267142337">Dvignite prst in se znova dotaknite tipala</translation>
 <translation id="4576541033847873020">Seznanitev naprave Bluetooth</translation>
 <translation id="4579581181964204535">Ni mogoče predvajati <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Ali ste prepričani, da želite izbrisati $1 elementov?</translation>
@@ -2565,7 +2557,6 @@
 <translation id="4941627891654116707">Velikost pisave</translation>
 <translation id="494286511941020793">Pomoč pri nastavitvi strežnika proxy</translation>
 <translation id="4945444280533270988">Funkcija Smart Lock je vklopljena</translation>
-<translation id="494660967831069720">Delni podatki</translation>
 <translation id="4953689047182316270">Odzivanje na dogodke funkcij za ljudi s posebnimi potrebami</translation>
 <translation id="4953808748584563296">Privzeti oranžni avatar</translation>
 <translation id="4955814292505481804">Letna</translation>
@@ -3523,7 +3514,6 @@
 <translation id="6384275966486438344">Sprememba nastavitev iskanja na: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Spletna mesta lahko shranjujejo in berejo podatke piškotkov</translation>
 <translation id="6388429472088318283">Iskanje jezikov</translation>
-<translation id="6388771388956873507">Poiščite tipalo prstnih odtisov na napravi in se ga dotaknite s prstom</translation>
 <translation id="6390799748543157332">Strani, ki si jih ogledujete v tem oknu, ne bodo prikazane v zgodovini brskalnika in v računalniku ne bodo pustile drugih sledi, na primer piškotkov, ko boste zaprli vsa odprta okna gostujočih sej. Datoteke, ki jih prenesete, se bodo ohranile.</translation>
 <translation id="6390994422085833176">Po nastavitvi preglejte funkcije sinhronizacije in prilagajanja</translation>
 <translation id="6395423953133416962">Pošlji <ph name="BEGIN_LINK1" />podatke o sistemu<ph name="END_LINK1" /> in <ph name="BEGIN_LINK2" />meritve<ph name="END_LINK2" /></translation>
@@ -4125,7 +4115,6 @@
 <translation id="7309257895202129721">Pokaži &amp;kontrolnike</translation>
 <translation id="7310598146671372464">Prijava ni uspela. Strežnik ne podpira navedenih vrst šifriranja Kerberos. Obrnite se na skrbnika.</translation>
 <translation id="7311079019872751559">Dostop do vtičnika, ki ni v peskovniku</translation>
-<translation id="7311891583377621132">Rahlo premaknite prst, da bo zajet drug del prstnega odtisa</translation>
 <translation id="7317680720589234980">Možnosti zaklepanja zaslona in prijave</translation>
 <translation id="7321545336522791733">Strežnik ni dosegljiv</translation>
 <translation id="7324297612904500502">Forum za beto</translation>
@@ -4965,7 +4954,6 @@
 <translation id="8639047128869322042">Iskanje škodljive programske opreme ...</translation>
 <translation id="8639963783467694461">Nastavitve samodejnega izpolnjevanja</translation>
 <translation id="8642171459927087831">Žeton za dostop</translation>
-<translation id="8642267168767642381">Prepočasen premik prsta</translation>
 <translation id="8642947597466641025">Povečaj besedilo</translation>
 <translation id="8643418457919840804">Če želite nadaljevati, izberite možnost:</translation>
 <translation id="8645354835496065562">Še naprej dovoli dostop do tipal</translation>
@@ -5326,7 +5314,6 @@
 <translation id="916607977885256133">Slika v sliki</translation>
 <translation id="9169496697824289689">Ogled bližnjičnih tipk</translation>
 <translation id="9169931577761441333">Dodajanje aplikacije <ph name="APP_NAME" /> na začetni zaslon</translation>
-<translation id="9170397650136757332">Rahlo premaknite prst, da bodo zajeti vsi različni deli prstnega odtisa</translation>
 <translation id="9170848237812810038">&amp;Razveljavi</translation>
 <translation id="9170884462774788842">Drug program v računalniku je dodal temo, ki lahko spremeni način delovanja Chroma.</translation>
 <translation id="9173995187295789444">Iskanje naprav Bluetooth ...</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index c64ac34b..c61a71d6 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Користите синхронизацију и све услуге</translation>
 <translation id="1272079795634619415">Заустави</translation>
-<translation id="1272242203003205253">Google партнери сарађују са Помоћником да би вам помогли</translation>
 <translation id="1272978324304772054">Овај кориснички налог не припада домену на ком је уређај регистрован. Ако желите да се региструјете на другом домену, прво морате да обавите опоравак уређаја.</translation>
 <translation id="1274977772557788323">Подешавања Adobe Flash Player меморијског простора</translation>
 <translation id="1274997165432133392">Колачићи и други подаци о сајтовима</translation>
@@ -414,7 +413,6 @@
 <translation id="161460670679785907">Нисмо успели да откријемо телефон</translation>
 <translation id="1616206807336925449">Овај додатак не захтева никакве специјалне дозволе.</translation>
 <translation id="1616298854599875024">Увоз додатка „<ph name="IMPORT_NAME" />“ није успео зато што није дељени модул</translation>
-<translation id="161707228174452095">Додали сте отисак прста!</translation>
 <translation id="1618268899808219593">Ц&amp;ентар за помоћ</translation>
 <translation id="162035744160882748">Укључите синхронизацију, персонализацију и друге Google услуге</translation>
 <translation id="1620510694547887537">Камера</translation>
@@ -692,7 +690,6 @@
 <translation id="2028997212275086731">RAR архива</translation>
 <translation id="2034346955588403444">Додај другу Wi-Fi мрежу</translation>
 <translation id="203574396658008164">Омогући прављење белешки са закључаног екрана</translation>
-<translation id="2039623879703305659">Превише брзо сте померили прст</translation>
 <translation id="2040460856718599782">Упс! Нешто је пошло наопако док смо покушавали да потврдимо вашу аутентичност. Проверите поново акредитиве за пријављивање и покушајте поново.</translation>
 <translation id="2043818754674261542">Раздаљина потребна да би телефон откључао овај <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Назив шаблона Microsoft сертификата</translation>
@@ -736,7 +733,6 @@
 <translation id="2099686503067610784">Желите да избришете серверски сертификат „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="2100273922101894616">Аутоматско пријављивање</translation>
 <translation id="2101225219012730419">Верзија:</translation>
-<translation id="2107494551712864447">Додајте отисак прста</translation>
 <translation id="2112877397266219826">Укључите додирни контролер да бисте ме подесили</translation>
 <translation id="21133533946938348">Закачи картицу</translation>
 <translation id="2113479184312716848">Open &amp;File... (Отвори датотеку)</translation>
@@ -1015,7 +1011,6 @@
 <translation id="2526590354069164005">Радна површина</translation>
 <translation id="2526619973349913024">Провери да ли постоји ажурирање</translation>
 <translation id="2527167509808613699">Било која врста везе</translation>
-<translation id="2532026602297547439">Сензор је прљав</translation>
 <translation id="2532589005999780174">Режим високог контраста</translation>
 <translation id="253434972992662860">&amp;Паузирај</translation>
 <translation id="2534460670861217804">Безбедан HTTP прокси</translation>
@@ -1373,7 +1368,6 @@
 <translation id="3057861065630527966">Направите резервне копије слика и видео снимака</translation>
 <translation id="3060379269883947824">Омогући услугу Изаберите за говор</translation>
 <translation id="3061707000357573562">Услуга крпљења</translation>
-<translation id="3064410671692449875">Недовољно података</translation>
 <translation id="3065041951436100775">Повратне информације о затварању картице.</translation>
 <translation id="3067198179881736288">Желите ли да инсталирате апликацију?</translation>
 <translation id="3067198360141518313">Покрени овај додатак</translation>
@@ -2261,7 +2255,6 @@
 <translation id="4480590691557335796">Chrome може да пронађе штетан софтвер на рачунару и да га уклони</translation>
 <translation id="4481530544597605423">Уређаји чије је упаривање опозвано</translation>
 <translation id="4482194545587547824">Google може да користи историју прегледања за персонализацију Претраге и других Google услуга</translation>
-<translation id="4493287891836751813">Упознајте Google помоћник</translation>
 <translation id="4495419450179050807">Не приказуј на овој страници</translation>
 <translation id="4499718683476608392">Омогућава аутоматско попуњавање образаца подацима о кредитним картицама једним кликом</translation>
 <translation id="4500114933761911433">Додатна компонента <ph name="PLUGIN_NAME" /> је отказала</translation>
@@ -2316,7 +2309,6 @@
 <translation id="4572659312570518089">Потврда аутентичности је отказана током повезивања са „<ph name="DEVICE_NAME" />“.</translation>
 <translation id="4572815280350369984">Датотека <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Још...</translation>
-<translation id="4576537685267142337">Подигните прст, па поново додирните сензор</translation>
 <translation id="4576541033847873020">Упарите Bluetooth уређај</translation>
 <translation id="4579581181964204535">Није успело пребацивање за <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Да ли стварно желите да избришете $1 ставке(и)?</translation>
@@ -2561,7 +2553,6 @@
 <translation id="4941627891654116707">Величина фонта</translation>
 <translation id="494286511941020793">Помоћ за конфигурацију проксија</translation>
 <translation id="4945444280533270988">Smart Lock је укључен</translation>
-<translation id="494660967831069720">Делимични подаци</translation>
 <translation id="4953689047182316270">одговара на догађаје приступачности</translation>
 <translation id="4953808748584563296">Подразумевани наранџасти аватар</translation>
 <translation id="4955814292505481804">Годишња</translation>
@@ -3520,7 +3511,6 @@
 <translation id="6384275966486438344">Промените подешавања претраге на: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Сајтови могу да чувају и читају податке колачића</translation>
 <translation id="6388429472088318283">Претражите језике</translation>
-<translation id="6388771388956873507">Пронађите сензор за отисак прста на уређају и додирните га прстом</translation>
 <translation id="6390799748543157332">Странице које видите у овом прозору се неће појављивати у историји прегледача и неће остављати друге трагове, попут колачића, на рачунару када затворите све отворене прозоре режима госта. Међутим, све датотеке које преузмете ће бити сачуване.</translation>
 <translation id="6390994422085833176">Прегледајте функције синхронизације и персонализације после подешавања</translation>
 <translation id="6395423953133416962">Шаљи <ph name="BEGIN_LINK1" />информације<ph name="END_LINK1" /> и <ph name="BEGIN_LINK2" />показатеље<ph name="END_LINK2" /> о систему</translation>
@@ -4122,7 +4112,6 @@
 <translation id="7309257895202129721">Прикажи &amp;контроле</translation>
 <translation id="7310598146671372464">Пријављивање није успело. Сервер не подржава наведене Kerberos типове шифровања. Контактирајте администратора.</translation>
 <translation id="7311079019872751559">Приступ помоћу додатне компоненте ван заштићеног окружења</translation>
-<translation id="7311891583377621132">Мало померите да бисте снимили други део отиска прста</translation>
 <translation id="7317680720589234980">Опције закључавања екрана и пријављивања</translation>
 <translation id="7321545336522791733">Сервер није доступан</translation>
 <translation id="7324297612904500502">Форум за бета верзију</translation>
@@ -4962,7 +4951,6 @@
 <translation id="8639047128869322042">Тражи се штетни софтвер…</translation>
 <translation id="8639963783467694461">Подешавања Аутоматског попуњавања</translation>
 <translation id="8642171459927087831">Ознака приступа</translation>
-<translation id="8642267168767642381">Превише споро сте померили прст</translation>
 <translation id="8642947597466641025">Увећај текст</translation>
 <translation id="8643418457919840804">Да бисте наставили, изаберите неку опцију:</translation>
 <translation id="8645354835496065562">Настави да дозвољаваш приступ сензорима</translation>
@@ -5323,7 +5311,6 @@
 <translation id="916607977885256133">Слика у слици</translation>
 <translation id="9169496697824289689">Приказ тастерских пречица</translation>
 <translation id="9169931577761441333">Додајте <ph name="APP_NAME" /> на почетни екран</translation>
-<translation id="9170397650136757332">Сада мало померите прст да бисте снимили све различите делове отиска прста</translation>
 <translation id="9170848237812810038">&amp;Опозови</translation>
 <translation id="9170884462774788842">Други програм на рачунару је додао тему која може да промени начин на који Chrome функционише.</translation>
 <translation id="9173995187295789444">Траже се Bluetooth уређаји...</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 8d56a6d..142dcaa8 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Hyllobjekt 5</translation>
 <translation id="1227507814927581609">Autentiseringen misslyckades vid anslutning till <ph name="DEVICE_NAME" />.</translation>
 <translation id="1230807973377071856">systemmeny</translation>
+<translation id="123186018454553812">Testa med en annan nyckel</translation>
 <translation id="1232569758102978740">Namnlös</translation>
 <translation id="1233721473400465416">Språkkod</translation>
 <translation id="1234808891666923653">ServiceWorker-funktioner</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Använd synkronisering och alla tjänster</translation>
 <translation id="1272079795634619415">Stopp</translation>
-<translation id="1272242203003205253">Google-partner samarbetar med assistenten för att hjälpa dig</translation>
 <translation id="1272978324304772054">Det här användarkontot hör inte till den domän som enheten är registrerad för. Om du vill registrera enheten för en annan domän måste du återställa den först.</translation>
 <translation id="1274977772557788323">Lagringsinställningar för Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookies och andra webbplatsdata</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Version <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Sök efter lösenord</translation>
 <translation id="1487335504823219454">Aktiverat – anpassade inställningar</translation>
+<translation id="1489664337021920575">Välj ett annat alternativ</translation>
 <translation id="1493892686965953381">Väntar på <ph name="LOAD_STATE_PARAMETER" /> ...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> andra tillgängliga enheter.</translation>
 <translation id="1497522201463361063">Det gick inte att byta namn på <ph name="FILE_NAME" />. <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Appfönster</translation>
 <translation id="15373452373711364">Stor muspekare</translation>
 <translation id="1538729222189715449">Linux-filerna öppnas …</translation>
+<translation id="153933193410874873">Vi kunde inte verifiera din identitet på enheten</translation>
 <translation id="1540605929960647700">Aktivera demoläge</translation>
 <translation id="1543284117603151572">Importerade från Edge</translation>
 <translation id="1545177026077493356">Automatiskt kioskläge</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Det går inte att använda den här bilden. Välj en annan.</translation>
 <translation id="1566049601598938765">Webbplats</translation>
 <translation id="1567387640189251553">Ett annat tangentbord har anslutits sedan du senast angav lösenordet. Det kan försöka stjäla dina tangenttryckningar.</translation>
+<translation id="1567750922576943685">Skydda personliga uppgifter genom att verifiera din identitet</translation>
 <translation id="1567993339577891801">JavaScript-konsol</translation>
 <translation id="1568067597247500137">Stäng av webbplatsens ljud</translation>
 <translation id="1568323446248056064">Öppna enhetsinställningarna för skärm</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Mobilen hittades inte</translation>
 <translation id="1616206807336925449">Det här tillägget kräver inga särskilda behörigheter.</translation>
 <translation id="1616298854599875024">Det gick inte att importera tillägget <ph name="IMPORT_NAME" /> eftersom det inte är en delad modul</translation>
-<translation id="161707228174452095">Fingeravtrycket har lagts till!</translation>
 <translation id="1618268899808219593">Hjälpc&amp;enter</translation>
 <translation id="162035744160882748">Aktivera synkronisering, anpassning och andra tjänster från Google</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -694,7 +696,6 @@
 <translation id="2028997212275086731">RAR-arkiv</translation>
 <translation id="2034346955588403444">Lägg till ett annat Wi-Fi-nätverk</translation>
 <translation id="203574396658008164">Aktivera anteckningar på låsskärmen</translation>
-<translation id="2039623879703305659">Fingret flyttades för snabbt</translation>
 <translation id="2040460856718599782">Hoppsan! Något gick fel när du försökte verifiera dig. Dubbelkolla dina inloggningsuppgifter och försök igen.</translation>
 <translation id="2043818754674261542"><ph name="DEVICE_TYPE" />-enheten låses upp när mobilen kommer inom följande avstånd</translation>
 <translation id="204497730941176055">Namn på Microsoft-certifikatmall</translation>
@@ -738,7 +739,6 @@
 <translation id="2099686503067610784">Vill du ta bort servercertifikatet <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="2100273922101894616">Automatisk inloggning</translation>
 <translation id="2101225219012730419">Version:</translation>
-<translation id="2107494551712864447">Lägg till ett fingeravtryck</translation>
 <translation id="2112877397266219826">Aktivera tryckkontrollen för att konfigurera</translation>
 <translation id="21133533946938348">Fäst flik</translation>
 <translation id="2113479184312716848">Öppna fil...</translation>
@@ -1017,7 +1017,6 @@
 <translation id="2526590354069164005">Skrivbord</translation>
 <translation id="2526619973349913024">Sök efter uppdatering</translation>
 <translation id="2527167509808613699">Ospecificerad anslutning</translation>
-<translation id="2532026602297547439">Sensorn är smutsig</translation>
 <translation id="2532589005999780174">Högkontrastläge</translation>
 <translation id="253434972992662860">&amp;Paus</translation>
 <translation id="2534460670861217804">Säker HTTP-proxy</translation>
@@ -1196,6 +1195,7 @@
 <translation id="2783298271312924866">Nedladdad</translation>
 <translation id="2783321960289401138">Skapa genväg ...</translation>
 <translation id="2783829359200813069">Välj krypteringstyper</translation>
+<translation id="2783952358106015700">Använd säkerhetsnyckeln med <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Den mobila datatjänsten aktiveras</translation>
 <translation id="2785873697295365461">Filbeskrivningar</translation>
 <translation id="2787047795752739979">Ersätt original</translation>
@@ -1376,7 +1376,6 @@
 <translation id="3057861065630527966">Säkerhetskopiera foton och videor</translation>
 <translation id="3060379269883947824">Aktivera Textuppläsning</translation>
 <translation id="3061707000357573562">Tjänst för programkorrigering</translation>
-<translation id="3064410671692449875">Otillräckligt med data</translation>
 <translation id="3065041951436100775">Feedback vid stängd flik.</translation>
 <translation id="3067198179881736288">Vill du installera appen?</translation>
 <translation id="3067198360141518313">Kör det här plugin-programmet</translation>
@@ -1509,6 +1508,7 @@
 <translation id="3285322247471302225">Ny &amp;flik</translation>
 <translation id="3288047731229977326">Tillägg som körs i utvecklarläge kan skada datorn. Om du inte är en utvecklare bör du inaktivera tillägg som körs i utvecklarläge för att skydda dig.</translation>
 <translation id="3289856944988573801">Använd Ethernet eller Wi-Fi om du vill söka efter uppdateringar.</translation>
+<translation id="3292421191230118801">Fortsätt att visa webbplatser från mobilen på Chromebook</translation>
 <translation id="32939749466444286">Det gick inte att starta Linux-behållaren. Försök igen.</translation>
 <translation id="3294437725009624529">Gäst</translation>
 <translation id="329838636886466101">Reparera</translation>
@@ -1551,6 +1551,7 @@
 <translation id="3348038390189153836">Flyttbar enhet upptäckt</translation>
 <translation id="3348459612390503954">Grattis</translation>
 <translation id="3349933790966648062">Minnesanvändning</translation>
+<translation id="3350117557200012647">Aktivera kopplingsläget</translation>
 <translation id="3353984535370177728">Välj en mapp för uppladdning</translation>
 <translation id="3355936511340229503">Anslutningsfel</translation>
 <translation id="3356797067524893661">Klart att fortsätta med Hangouts Meet</translation>
@@ -1690,6 +1691,7 @@
 <translation id="3556000484321257665">Sökmotorn har ändrats till <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Det gick inte att ladda ned kioskappen.</translation>
 <translation id="3564334271939054422">Wi-Fi-nätverket du använder (<ph name="NETWORK_ID" />) kanske kräver att du besöker dess inloggningssida.</translation>
+<translation id="3564848315152754834">USB-säkerhetsnyckel</translation>
 <translation id="3566721612727112615">Inga webbplatser har lagts till</translation>
 <translation id="3569382839528428029">Vill du att <ph name="APP_NAME" /> ska dela din skärm?</translation>
 <translation id="3570985609317741174">Webbinnehåll</translation>
@@ -1740,6 +1742,7 @@
 <translation id="3627588569887975815">Öppna länk i inko&amp;gnitofönster</translation>
 <translation id="3627671146180677314">Förnyelsetid för Netscape-certifikat</translation>
 <translation id="3627879631695760395">Installera <ph name="APP" /> …</translation>
+<translation id="3630132874740063857">Din mobil</translation>
 <translation id="3630995161997703415">Lägg till den här webbplatsen på hyllan och använd den när som helst</translation>
 <translation id="3635030235490426869">Flik 1</translation>
 <translation id="3636096452488277381">Hejsan <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1761,6 +1764,7 @@
 <translation id="3664511988987167893">Tilläggsikon</translation>
 <translation id="3665589677786828986">Chrome har upptäckt att visa av inställningarna har skadats av ett annat program och återställer dem till standardinställningarna.</translation>
 <translation id="3668570675727296296">Språkinställningar</translation>
+<translation id="3668801437375206837">Anställda hos Google kan inkludera ytterligare Bluetooth-loggar i sina feedbackrapporter för att underlätta diagnosticeringen av problem med Bluetooth. När alternativet är markerat ingår HCI-loggar i btsnoop-format från den nuvarande sessionen i din rapport. Dessa loggar rensas på så mycket personligt identifierande information som möjligt. Åtkomsten till loggarna begränsas till ansvariga i produktgruppen för Chrome OS på Listnr. Loggarna raderas permanent efter 90 dagar.</translation>
 <translation id="3668823961463113931">Hanterare</translation>
 <translation id="3670229581627177274">Aktivera Bluetooth</translation>
 <translation id="3672681487849735243">Ett fabriksfel har upptäckts</translation>
@@ -1779,6 +1783,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> vill dela skärmen</translation>
 <translation id="3693415264595406141">Lösenord:</translation>
 <translation id="3694027410380121301">Välj föregående flik</translation>
+<translation id="369489984217678710">Lösenord och andra inloggningsuppgifter</translation>
 <translation id="3699624789011381381">E-postadress</translation>
 <translation id="3699920817649120894">Vill du inaktivera synkronisering och anpassning?</translation>
 <translation id="3700888195348409686">Presenteras (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1802,6 +1807,7 @@
 <translation id="3727148787322499904">Om du ändrar denna inställning påverkas alla delade nätverk</translation>
 <translation id="3727187387656390258">Kontrollera popup</translation>
 <translation id="3729506734996624908">Tillåtna webbplatser</translation>
+<translation id="3731997362820527097">Välj säkerhetsnyckel</translation>
 <translation id="3732078975418297900">Fel på rad <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-server med uppgradering</translation>
 <translation id="3735740477244556633">Sortera efter</translation>
@@ -1902,6 +1908,7 @@
 <translation id="3860381078714302691">Välkommen till Hangouts Meet</translation>
 <translation id="3861241522664181545">Sidan har pausats.</translation>
 <translation id="3862134173397075045">Välkommen till Cast-upplevelsen i Chrome!</translation>
+<translation id="3862693525629180217">Verifiera via inbyggd sensor</translation>
 <translation id="3862788408946266506">En app med manifestattributet kiosk_only måste installeras i kioskläget i Chrome OS</translation>
 <translation id="3865414814144988605">Upplösning</translation>
 <translation id="386548886866354912">Packa med <ph name="EXTENSION_NAME" /></translation>
@@ -2027,6 +2034,7 @@
 <translation id="4055023634561256217">En omstart krävs innan enheten kan återställas med Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Visa i butik</translation>
+<translation id="4058647953897694817">Verifiera via Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Kontrollera dokumentet nu</translation>
 <translation id="406070391919917862">Bakgrundsappar</translation>
@@ -2040,6 +2048,7 @@
 <translation id="407520071244661467">Skaländra</translation>
 <translation id="4075639477629295004">Det gick inte att casta <ph name="FILE_NAME" />.</translation>
 <translation id="4077917118009885966">Annonser blockeras på den här webbplatsen</translation>
+<translation id="4079799245038595838">En avisering har skickats till din mobil. Följ anvisningarna för att bekräfta din identitet.</translation>
 <translation id="4081242589061676262">Det går inte att casta filen.</translation>
 <translation id="4084682180776658562">Infoga bokmärke</translation>
 <translation id="4084835346725913160">Stäng <ph name="TAB_NAME" /></translation>
@@ -2139,6 +2148,7 @@
 <translation id="4250229828105606438">Skärmdump</translation>
 <translation id="4250680216510889253">Nej</translation>
 <translation id="4252852543720145436">Identifierare för skyddat innehåll</translation>
+<translation id="4252899949534773101">Bluetooth har inaktiverats</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – innehållet på fliken delas</translation>
 <translation id="4254813446494774748">Översättningsspråk:</translation>
 <translation id="425573743389990240">Batteriurladdningstakt i watt (ett negativt värde betyder att batteriet laddas)</translation>
@@ -2264,8 +2274,8 @@
 <translation id="4480590691557335796">Chrome kan hjälpa dig att upptäcka skadlig programvara på datorn och ta bort den</translation>
 <translation id="4481530544597605423">Frånkopplade enheter</translation>
 <translation id="4482194545587547824">Google kan använda webbhistoriken för att anpassa Sök och andra tjänster från Google.</translation>
-<translation id="4493287891836751813">Det här är Google Assistent</translation>
 <translation id="4495419450179050807">Visa inte den här sidan</translation>
+<translation id="449938344715680828">Tryck på |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| följt av |<ph name="ACCELERATOR3" />| om du vill avsluta</translation>
 <translation id="4499718683476608392">Aktivera Autofyll för kreditkort och fyll i formulär med ett enda klick</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> har kraschat</translation>
 <translation id="450099669180426158">Ikon med utropstecken</translation>
@@ -2319,7 +2329,6 @@
 <translation id="4572659312570518089">Autentiseringen avbröts vid anslutning till <ph name="DEVICE_NAME" />.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" />-fil</translation>
 <translation id="457386861538956877">Mer...</translation>
-<translation id="4576537685267142337">Lyft fingret och tryck sedan på sensorn igen</translation>
 <translation id="4576541033847873020">Koppla Bluetooth-enhet</translation>
 <translation id="4579581181964204535">Det gick inte att casta <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Vill du ta bort $1 objekt?</translation>
@@ -2342,6 +2351,7 @@
 <translation id="4611114513649582138">Dataanslutningar är tillgängliga</translation>
 <translation id="4613271546271159013">Vilken sida som visas när du öppnar en ny flik har ändrats av ett tillägg.</translation>
 <translation id="4615586811063744755">inga cookies har valts</translation>
+<translation id="4615618657481886098">Du har redan registrerat den här nyckeln. Du behöver inte registrera den igen.</translation>
 <translation id="4617270414136722281">Tilläggsalternativ</translation>
 <translation id="4619615317237390068">Flikar från andra enheter</translation>
 <translation id="4620809267248568679">Den här inställningen är låst av ett tillägg.</translation>
@@ -2451,6 +2461,7 @@
 <translation id="4790972063719531840">Skicka diagnostik- och användningsdata automatiskt till Google</translation>
 <translation id="4792711294155034829">&amp;Rapportera ett problem...</translation>
 <translation id="479536056609751218">Webbsida, endast HTML</translation>
+<translation id="4798236378408895261">Bifoga <ph name="BEGIN_LINK" />Bluetooth-loggar<ph name="END_LINK" /> (internt för Google)</translation>
 <translation id="479989351350248267">sök</translation>
 <translation id="4801448226354548035">Dölj konton</translation>
 <translation id="4801512016965057443">Tillåt mobil dataroaming</translation>
@@ -2517,6 +2528,7 @@
 <translation id="4882473678324857464">Fokus på bokmärken</translation>
 <translation id="4882831918239250449">Styr hur Sök, annonser och annat ska anpassas utifrån webbhistoriken</translation>
 <translation id="4883178195103750615">Exportera bokmärken till HTML-fil...</translation>
+<translation id="4883274597792587930">Leta reda på namnet som står på nyckelns baksida</translation>
 <translation id="4883436287898674711">Alla <ph name="WEBSITE_1" />-webbplatser</translation>
 <translation id="48838266408104654">&amp;Aktivitetshanteraren</translation>
 <translation id="4883898390143004266">Gör det lättare för appar att hitta din plats. Förbättra platsens exakthet med hjälp av Googles platstjänster. Google kan med jämna mellanrum samla in data som används anonymt i syfte att förbättra platsangivelsens exakthet och platsbaserade tjänster. <ph name="BEGIN_LINK1" />Läs mer<ph name="END_LINK1" /></translation>
@@ -2564,7 +2576,6 @@
 <translation id="4941627891654116707">Teckenstorlek</translation>
 <translation id="494286511941020793">Hjälp för proxykonfiguration</translation>
 <translation id="4945444280533270988">Smart Lock har aktiverats</translation>
-<translation id="494660967831069720">Ofullständig data</translation>
 <translation id="4953689047182316270">Svara på tillgänglighetshändelser</translation>
 <translation id="4953808748584563296">Orange standardavatar</translation>
 <translation id="4955814292505481804">Årslicens</translation>
@@ -2990,6 +3001,7 @@
 <translation id="55601339223879446">Justera skrivbordets avgränsning på skärmen</translation>
 <translation id="5562781907504170924">Den här fliken är ansluten till en Bluetooth-enhet.</translation>
 <translation id="5563234215388768762">Sök på Google eller skriv en webbadress</translation>
+<translation id="5567950944308676169">Sätt i säkerhetsnyckeln och aktivera den</translation>
 <translation id="5567989639534621706">Programmets cacheminnen</translation>
 <translation id="5568069709869097550">Kan inte logga in</translation>
 <translation id="5568144734023334204">Android-lagring</translation>
@@ -3236,6 +3248,7 @@
 <translation id="5931146425219109062">Läsa och ändra all din data på de webbplatser du besöker</translation>
 <translation id="5932881020239635062">Serienummer</translation>
 <translation id="5933376509899483611">Tidszon</translation>
+<translation id="5938002010494270685">En säkerhetsuppgradering är tillgänglig</translation>
 <translation id="5939518447894949180">Återställ</translation>
 <translation id="5939847200023027600">Tjänst för PDF-sammansättning</translation>
 <translation id="5941153596444580863">Lägg till person …</translation>
@@ -3272,6 +3285,7 @@
 <translation id="6006484371116297560">Klassiskt</translation>
 <translation id="6007237601604674381">Flytten misslyckades. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Röstsökning är inte tillgängligt på ditt språk.</translation>
+<translation id="6009781704028455063">Inbyggd sensor</translation>
 <translation id="6010869025736512584">Får åtkomst till videoindata</translation>
 <translation id="6011193465932186973">Fingeravtryck</translation>
 <translation id="6011449291337289699">Rensa webbplatsdata</translation>
@@ -3282,6 +3296,7 @@
 <translation id="6020431688553761150">Servern auktoriserade inte din åtkomst till den här resursen.</translation>
 <translation id="602251597322198729">Den här webbplatsen försöker ladda ned flera filer. Vill du tillåta detta?</translation>
 <translation id="6022526133015258832">Öppna helskärmsläge</translation>
+<translation id="6022705094403139349">Vill du parkoppla säkerhetsnyckeln nu?</translation>
 <translation id="6023643151125006053">Den här enheten (serienr: <ph name="SERIAL_NUMBER" />) har låsts av administratören för <ph name="SAML_DOMAIN" />.</translation>
 <translation id="6025215716629925253">Stack trace</translation>
 <translation id="6026047032548434446">Vill du installera appen?</translation>
@@ -3345,6 +3360,7 @@
 <translation id="6105877918873366097">Senast öppnad</translation>
 <translation id="6107012941649240045">Utfärdat till</translation>
 <translation id="6112294629795967147">Ändra storlek genom att trycka</translation>
+<translation id="6112931163620622315">Kontrollera mobilen</translation>
 <translation id="6112952769866305444">Redigera personen <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Tillgång till text och bilder som kopierats till Urklipp</translation>
 <translation id="6116921718742659598">Ändra språk- och inmatningsinställningar</translation>
@@ -3390,6 +3406,7 @@
 <translation id="6169666352732958425">Det gick inte att casta skrivbordet.</translation>
 <translation id="6171948306033499786">Pausa utskriften</translation>
 <translation id="6175314957787328458">Grafiskt användargränssnitt för Microsoft-domänen</translation>
+<translation id="6176043333338857209">Bluetooth aktiveras tillfälligt för att kommunicera med säkerhetsnyckeln</translation>
 <translation id="6178664161104547336">Välj ett certifikat</translation>
 <translation id="6181431612547969857">Nedladdningen blockerades</translation>
 <translation id="6185132558746749656">Enhetsplats</translation>
@@ -3477,6 +3494,7 @@
 <translation id="6311220991371174222">Det gick inte att starta Chrome eftersom något gick snett när profilen skulle öppnas. Testa att starta om Chrome.</translation>
 <translation id="6312400084708441752">Skickar med information om skadlig programvara, systeminställningar och processer på datorn</translation>
 <translation id="6312403991423642364">Okänt nätverksfel</translation>
+<translation id="6313320178014547270">Säkerhetsnyckeln som du använder är inte registrerad på den här webbplatsen</translation>
 <translation id="6313641880021325787">AVSLUTA VR-LÄGET</translation>
 <translation id="6314819609899340042">Du har aktiverat felsökningsfunktioner på den här <ph name="IDS_SHORT_PRODUCT_NAME" />-enheten.</translation>
 <translation id="6315493146179903667">Flytta fram alla</translation>
@@ -3521,7 +3539,6 @@
 <translation id="6384275966486438344">Ändra sökinställningarna till: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Webbplatser får spara och läsa uppgifter i cookies</translation>
 <translation id="6388429472088318283">Sök på språk</translation>
-<translation id="6388771388956873507">Sätt fingret på enhetens fingeravtryckssensor</translation>
 <translation id="6390799748543157332">Sidorna du visar i den här fliken visas inte i webbläsarhistoriken och lämnar inga andra spår, till exempel cookies, på datorn när du har stängt alla öppna gästfönster. Filer som du laddar ned kommer dock att sparas.</translation>
 <translation id="6390994422085833176">Granska synkroniserings- och anpassningsfunktioner efter konfigureringen</translation>
 <translation id="6395423953133416962">Skicka <ph name="BEGIN_LINK1" />systeminformation<ph name="END_LINK1" /> och <ph name="BEGIN_LINK2" />statistik<ph name="END_LINK2" /></translation>
@@ -3533,6 +3550,7 @@
 <translation id="6399774419735315745">Spion</translation>
 <translation id="6401445054534215853">Hyllobjekt 1</translation>
 <translation id="6404511346730675251">Redigera bokmärke</translation>
+<translation id="6405510437656969977">Fortsätt när du är redo att ange pinkoden</translation>
 <translation id="6406303162637086258">Simulera omstart av webbläsaren</translation>
 <translation id="6406506848690869874">Synkronisera</translation>
 <translation id="6408118934673775994">Läs och ändra dina uppgifter på <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> och <ph name="WEBSITE_3" /></translation>
@@ -3651,6 +3669,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – skrivbordet delas</translation>
 <translation id="6580151766480067746">ARC-version</translation>
 <translation id="6581162200855843583">Google Drive-länk</translation>
+<translation id="6582080224869403177">Du måste återställa <ph name="DEVICE_TYPE" /> för att uppgradera säkerheten.</translation>
 <translation id="6582421931165117398">Ändra lösenordet nu så att dina personliga uppgifter skyddas. Du måste logga in innan du kan ändra lösenordet.</translation>
 <translation id="6583851739559471707">Blockeras på webbplatser där påträngande annonser brukar visas (rekommenderas)</translation>
 <translation id="6584878029876017575">Microsofts Livstids signering</translation>
@@ -3700,6 +3719,7 @@
 <translation id="6644846457769259194">Enheten uppdateras(<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">Webbadress till Netscapes spärrlista för certifikatutfärdare</translation>
 <translation id="6647838571840953560">För närvarande på <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Säkerhetsnyckeln har aktiverats …</translation>
 <translation id="6648911618876616409">En viktig uppdatering är klar för installation. Logga in för att komma igång.</translation>
 <translation id="6649018507441623493">Ett ögonblick …</translation>
 <translation id="6649563841575838401">Arkivformatet stöds inte, eller så är filen trasig.</translation>
@@ -3775,6 +3795,7 @@
 <translation id="6759193508432371551">Återställ standardinställningar</translation>
 <translation id="6767639283522617719">Det gick inte att ansluta till domänen. Kontrollera inställningarna för organisationsenheten.</translation>
 <translation id="6769712124046837540">Lägger till skrivare ...</translation>
+<translation id="6770664076092644100">Verifiera via NFC</translation>
 <translation id="6771503742377376720">Är en certifikatutfärdare</translation>
 <translation id="6777817260680419853">Omdirigeringen blockerades</translation>
 <translation id="6778959797435875428">Ta fram dolda webbplatser</translation>
@@ -3810,6 +3831,7 @@
 <translation id="6823506025919456619">Du måste logga in i Chrome för att kunna visa dina enheter</translation>
 <translation id="6824564591481349393">Kopiera &amp;e-postadress</translation>
 <translation id="6825184156888454064">Sortera efter namn</translation>
+<translation id="6826872289184051766">Verifiera via USB</translation>
 <translation id="6827236167376090743">Denna video spelas upp för evigt.</translation>
 <translation id="6828153365543658583">Begränsa inloggning till följande användare:</translation>
 <translation id="6828860976882136098">Det gick inte att konfigurera automatiska uppdateringar för alla användare (preliminärt körningsfel: <ph name="ERROR_NUMBER" />)</translation>
@@ -3843,6 +3865,7 @@
 <translation id="6880587130513028875">Bilder är blockerade på den här sidan.</translation>
 <translation id="6883319974225028188">Det gick inte att spara enhetskonfigurationen.</translation>
 <translation id="6885771755599377173">Förhandsgranska systeminformation</translation>
+<translation id="6886476658664859389">NFC-säkerhetsnyckel</translation>
 <translation id="6886871292305414135">Öppna länk i ny &amp;flik</translation>
 <translation id="6892812721183419409">Öppna länk som <ph name="USER" /></translation>
 <translation id="6896758677409633944">Kopiera</translation>
@@ -4008,6 +4031,7 @@
 <translation id="713122686776214250">Lägg till si&amp;da ...</translation>
 <translation id="7133578150266914903">Enheten återställs av administratören (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Förminska texten</translation>
+<translation id="7135729336746831607">Vill du aktivera Bluetooth?</translation>
 <translation id="7136694880210472378">Ange som standard</translation>
 <translation id="7136984461011502314">Välkommen till <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Ett fel har uppstått. Välj andra bilder och försök igen.</translation>
@@ -4053,6 +4077,7 @@
 <translation id="7201118060536064622"><ph name="DELETED_ITEM_NAME" /> har raderats</translation>
 <translation id="7206693748120342859">Laddar ned <ph name="PLUGIN_NAME" /> ...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Lämna sidan}other{Lämna sidorna}}</translation>
+<translation id="721467499098558573">Håll knappen på säkerhetsnyckeln nedtryckt i minst fem sekunder</translation>
 <translation id="7216409898977639127">Mobiloperatör</translation>
 <translation id="7216595297012131718">Sortera språk i prioriteringsordning</translation>
 <translation id="7220019174139618249">Det gick inte att exportera lösenord till <ph name="FOLDER" /></translation>
@@ -4088,6 +4113,7 @@
 <translation id="7256710573727326513">Öppna i en flik</translation>
 <translation id="725758059478686223">Utskriftstjänst</translation>
 <translation id="7257666756905341374">Läsa data som du kopierar och klistrar in</translation>
+<translation id="7260764918845374269">Säkerhetsnyckeln måste vara i parkopplingsläge för att visas. Tryck på knappen på nyckeln i minst fem sekunder.</translation>
 <translation id="7262004276116528033">Inloggningstjänsten tillhandahålls av <ph name="SAML_DOMAIN" />.</translation>
 <translation id="7268365133021434339">Stäng flikar</translation>
 <translation id="7268659760406822741">Tillgängliga tjänster</translation>
@@ -4124,7 +4150,6 @@
 <translation id="7309257895202129721">Visa &amp;kontroller</translation>
 <translation id="7310598146671372464">Det gick inte att logga in. Servern har inte stöd för de angivna typerna av Kerberos-kryptering. Kontakta administratören.</translation>
 <translation id="7311079019872751559">Åtkomst till plugin utanför sandlåda</translation>
-<translation id="7311891583377621132">Flytta fingret något så att en annan del av fingeravtrycket registreras</translation>
 <translation id="7317680720589234980">Alternativ för skärmlås och inloggning</translation>
 <translation id="7321545336522791733">Servern kan inte nås</translation>
 <translation id="7324297612904500502">Forum för betaversionen</translation>
@@ -4206,6 +4231,7 @@
 <translation id="7464490149090366184">Komprimeringen misslyckades. Objektet finns: $1</translation>
 <translation id="7465778193084373987">Återkallandeadress för Netscape-certifikat</translation>
 <translation id="7469406957790636836">Aktivera först stavningskontroll under <ph name="BEGIN_LINK" />Språk och inmatning<ph name="END_LINK" /> om du vill aktivera detta</translation>
+<translation id="7469518857922439236">Skicka aviseringar till dig och komma ihåg den här datorn som standard för Messages</translation>
 <translation id="7469894403370665791">Anslut automatiskt till det här nätverket.</translation>
 <translation id="747114903913869239">Fel: det går inte att avkoda tillägget</translation>
 <translation id="7473753388963818366">Nu gör vi din <ph name="DEVICE_TYPE" /> körklar</translation>
@@ -4255,6 +4281,7 @@
 <translation id="7531779363494549572">Öppna Inställningar &gt; Appar och aviseringar &gt; Aviseringar.</translation>
 <translation id="7536709149194614609">Starta om enheten och försök igen senare.</translation>
 <translation id="7537601449003285327">Fäst i aktivitetsfältet</translation>
+<translation id="7539856059004947393">Bluetooth-säkerhetsnyckel</translation>
 <translation id="7540972813190816353">Det gick inte att söka efter uppdateringar: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Aktiverar felsökningsfunktioner på den här <ph name="IDS_SHORT_PRODUCT_NAME" />-enheten</translation>
 <translation id="7544853251252956727">Blanda</translation>
@@ -4357,6 +4384,7 @@
 <translation id="7709152031285164251">Misslyckades – <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Casta …</translation>
 <translation id="7711920809702896782">Bildinformation</translation>
+<translation id="7712740978240882272">Lås upp Chomebook med mobilen. <ph name="LINK_BEGIN" />Läs mer.<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Okänt tillägg med id <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Cookies från <ph name="DOMAIN" /> tillåts</translation>
 <translation id="7714464543167945231">Certifikat</translation>
@@ -4572,6 +4600,7 @@
 <translation id="7984068253310542383">Spegla <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Läsa och ändra inställningar för sparade lösenord</translation>
 <translation id="7987764905897278458">Få mer Google-teknik</translation>
+<translation id="798835209536175951">Skicka och ta emot sms på Chromebook. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Aktivera tillgänglighetsfunktioner</translation>
 <translation id="7994702968232966508">EAP-metod</translation>
 <translation id="799547531016638432">Ta bort genväg</translation>
@@ -4704,6 +4733,7 @@
 <translation id="8185331656081929126">Visa aviseringar när nya skrivare hittas i nätverket</translation>
 <translation id="8186609076106987817">Servern kunde inte hitta filen.</translation>
 <translation id="8188120771410500975">&amp;Kontrollera stavning i textfält</translation>
+<translation id="8188389033983459049">Kontrollera enhetsinställningarna och aktivera Bluetooth om du vill fortsätta</translation>
 <translation id="8190193592390505034">Ansluter till <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Hantera dina appar, tillägg och teman</translation>
 <translation id="8191453843330043793">V8-proxytolk</translation>
@@ -4798,6 +4828,7 @@
 <translation id="8353683614194668312">Appen eller tillägget kan:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> – <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Vill du återställa sidorna?</translation>
+<translation id="8362993567435070757">Titta efter den sexsiffriga pinkoden på nyckelns baksida</translation>
 <translation id="8363095875018065315">stabil</translation>
 <translation id="8363142353806532503">Mikrofon är blockerad</translation>
 <translation id="8366396658833131068">Nätverksanslutningen har återställts. Välj ett annat nätverk eller tryck på knappen Fortsätt om du vill starta kioskappen.</translation>
@@ -4806,6 +4837,7 @@
 <translation id="8371695176452482769">Prata nu</translation>
 <translation id="8372369524088641025">Felaktig WEP-nyckel</translation>
 <translation id="8373553483208508744">Stäng av ljud från flikar</translation>
+<translation id="8379878387931047019">Enheten stöder inte den typ av säkerhetsnyckel som begärs av webbplatsen</translation>
 <translation id="8382913212082956454">Kopiera &amp;e-postadress</translation>
 <translation id="8386903983509584791">Sökningen har slutförts</translation>
 <translation id="8389492867173948260">Tillåt det här tillägget att läsa och ändra all din data på webbplatser du besöker</translation>
@@ -4924,6 +4956,7 @@
 <translation id="8557930019681227453">Manifest</translation>
 <translation id="8559694214572302298">Bildavkodare</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Fortsätt läsa</translation>
 <translation id="8565650234829130278">Försökte nedgradera appen.</translation>
 <translation id="8569002732135253578"><ph name="DOCUMENT_NAME" /> skrivs ut</translation>
 <translation id="8569682776816196752">Det gick inte att hitta några platser</translation>
@@ -4964,7 +4997,6 @@
 <translation id="8639047128869322042">Söker efter skadlig programvara …</translation>
 <translation id="8639963783467694461">Inställningar för Autofyll</translation>
 <translation id="8642171459927087831">Åtkomsttoken</translation>
-<translation id="8642267168767642381">Fingret flyttades för långsamt</translation>
 <translation id="8642947597466641025">Förstora texten</translation>
 <translation id="8643418457919840804">Välj ett av alternativen:</translation>
 <translation id="8645354835496065562">Fortsätt att tillåta sensoråtkomst</translation>
@@ -4979,6 +5011,7 @@
 <translation id="8655295600908251630">Kanal</translation>
 <translation id="8655319619291175901">Hoppsan! Ett fel uppstod.</translation>
 <translation id="8655972064210167941">Inloggningen misslyckades eftersom ditt lösenord inte kunde verifieras. Kontakta administratören eller försök igen.</translation>
+<translation id="8656619792520327915">Lägg till ytterligare en Bluetooth-säkerhetsnyckel</translation>
 <translation id="8656768832129462377">Kontrollera inte</translation>
 <translation id="8658595122208653918">Ändra skrivaralternativ …</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> delar skärmen och ljudet med <ph name="TAB_NAME" />.</translation>
@@ -5101,6 +5134,7 @@
 <translation id="8814687660896548945">Arkivet genomsöks. Vänta …</translation>
 <translation id="881799181680267069">Dölj andra</translation>
 <translation id="8818152010000655963">Bakgrund</translation>
+<translation id="8818958672113348984">Verifiera via mobilen</translation>
 <translation id="8820817407110198400">Bokmärken</translation>
 <translation id="8821045908425223359">Konfigurera IP-adress automatiskt</translation>
 <translation id="882204272221080310">Uppdatera firmware för ökad säkerhet.</translation>
@@ -5131,11 +5165,13 @@
 <translation id="8872155268274985541">Ogiltig manifestfil för extern kioskuppdatering hittades. Det gick inte att uppdatera kioskappen. Ta bort USB-minnet.</translation>
 <translation id="8874184842967597500">Inte ansluten</translation>
 <translation id="8876215549894133151">Format:</translation>
+<translation id="8876307312329369159">Inställningen kan inte ändras i demoläget.</translation>
 <translation id="8876309039915144086">Generera lösenord …</translation>
 <translation id="8877448029301136595">[överordnad katalog]</translation>
 <translation id="8879284080359814990">&amp;Visa som flik</translation>
 <translation id="8883847527783433352">Synkronisera med ett annat konto</translation>
 <translation id="8885197664446363138">Smart Lock är inte tillgängligt</translation>
+<translation id="88870264962436283">Använd Touch ID med <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Färg:</translation>
 <translation id="8890516388109605451">Källor</translation>
 <translation id="8892168913673237979">Klart!</translation>
@@ -5156,6 +5192,7 @@
 <translation id="8915370057835397490">Läser in förslag</translation>
 <translation id="8916476537757519021">Underram i inkognitoläge: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Logga in och aktivera synkronisering om du vill ha tillgång till alla lösenord oavsett vilken enhet du använder.</translation>
+<translation id="8921366488406707015">Säkerhetsnyckeln verifieras …</translation>
 <translation id="8922013791253848639">Tillåt alltid annonser på den här webbplatsen</translation>
 <translation id="8925458182817574960">&amp;Inställningar</translation>
 <translation id="8926389886865778422">Fråga inte igen.</translation>
@@ -5264,6 +5301,7 @@
 <translation id="9066782832737749352">Text till tal</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> loggar automatiskt in på godkända webbplatser och appar med de lösenord du sparat.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Parkoppla nyckeln till den här enheten så att du kan använda den för att logga in på ditt konto</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-mus har anslutits</translation>
 <translation id="9076523132036239772">Det gick inte att verifiera e-postadressen eller lösenordet. Anslut till ett nätverk först.</translation>
@@ -5325,7 +5363,6 @@
 <translation id="916607977885256133">Bild-i-bild</translation>
 <translation id="9169496697824289689">Visa kortkommandon</translation>
 <translation id="9169931577761441333">Lägg till <ph name="APP_NAME" /> på startskärmen</translation>
-<translation id="9170397650136757332">Flytta nu fingret något så att hela fingeravtrycket läggs till</translation>
 <translation id="9170848237812810038">&amp;Ångra</translation>
 <translation id="9170884462774788842">Ett annat program i datorn har lagt till ett tema som kan ändra hur Chrome fungerar.</translation>
 <translation id="9173995187295789444">Söker efter Bluetooth-enheter …</translation>
@@ -5389,6 +5426,7 @@
 <translation id="971774202801778802">Bokmärkets webbadress</translation>
 <translation id="973473557718930265">Avsluta</translation>
 <translation id="974555521953189084">Ange lösenfrasen för att starta synkroniseringen</translation>
+<translation id="977640333593638907">På de flesta nycklar trycker du bara på knappen</translation>
 <translation id="981121421437150478">Offline</translation>
 <translation id="983511809958454316">Den här funktionen stöds inte i VR-läget</translation>
 <translation id="984275831282074731">Betalningsmetoder</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 84fb7b2..f237025 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Tumia kipengele cha usawazishaji na huduma zote</translation>
 <translation id="1272079795634619415">Simamisha</translation>
-<translation id="1272242203003205253">Washirika wa Google hutumia programu yako ya Mratibu kukusaidia</translation>
 <translation id="1272978324304772054">Akaunti hii ya mtumiaji siyo ya kikoa ambacho kifaa kimesajiliwa. Ikiwa unataka kujisajili kwenye kikoa tofauti unahitaji kuenda katika ufufuaji wa kifaa kwanza.</translation>
 <translation id="1274977772557788323">Mipangilio ya Hifadhi ya Adobe Flash Player</translation>
 <translation id="1274997165432133392">Vidakuzi na data ya tovuti nyingine</translation>
@@ -414,7 +413,6 @@
 <translation id="161460670679785907">Imeshindwa kutambua simu yako</translation>
 <translation id="1616206807336925449">Kiendelezi hiki hakihitaji ruhusa maalum.</translation>
 <translation id="1616298854599875024">Imeshindwa kupakia kiendelezi "<ph name="IMPORT_NAME" />" kwa sababu si sehemu iliyoshirikiwa</translation>
-<translation id="161707228174452095">Alama ya kidole imeongezwa!</translation>
 <translation id="1618268899808219593">Kituo cha Usaidizi</translation>
 <translation id="162035744160882748">Washa usawazishaji, mapendeleo na huduma nyingine za Google</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -692,7 +690,6 @@
 <translation id="2028997212275086731">Kumbukumbu la RAR</translation>
 <translation id="2034346955588403444">Ongeza mtandao mwingine wa WiFi</translation>
 <translation id="203574396658008164">Washa kipengele cha kuandika vidokezo kutoka kwenye skrini iliyofungwa</translation>
-<translation id="2039623879703305659">Umesogeza kidole haraka sana</translation>
 <translation id="2040460856718599782">Lo! Kuna kitu kimeharibika wakati wa kujaribu kukuthibitisha. Tafadhali angalia tena kitambulisho cha kuingia katika akaunti na ujaribu tena.</translation>
 <translation id="2043818754674261542">Unahitaji kuiweka simu yako mbali kiasi ili uweze kuifungua <ph name="DEVICE_TYPE" /> hii</translation>
 <translation id="204497730941176055">Jina la Kiolezo cha Cheti kutoka Microsoft</translation>
@@ -736,7 +733,6 @@
 <translation id="2099686503067610784">Futa cheti cha seva "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Ingia katika Akaunti Kiotomatiki</translation>
 <translation id="2101225219012730419">Toleo:</translation>
-<translation id="2107494551712864447">Ongeza alama ya kidole</translation>
 <translation id="2112877397266219826">Washa kidhibiti chako cha kugusa ili niweke mipangilio</translation>
 <translation id="21133533946938348">Bandikiza Kichupo</translation>
 <translation id="2113479184312716848">Fungua Faili...</translation>
@@ -1015,7 +1011,6 @@
 <translation id="2526590354069164005">Eneo-kazi</translation>
 <translation id="2526619973349913024">Kagua Usasishaji</translation>
 <translation id="2527167509808613699">Aina yoyote ya muunganisho.</translation>
-<translation id="2532026602297547439">Sensa yako ni chafu</translation>
 <translation id="2532589005999780174">Hali ya juu ya utofautishaji</translation>
 <translation id="253434972992662860">&amp;Pumzisha</translation>
 <translation id="2534460670861217804">Linda Seva Mbadala ya HTTP</translation>
@@ -1373,7 +1368,6 @@
 <translation id="3057861065630527966">Weka hifadhi rudufu ya picha na video zako</translation>
 <translation id="3060379269883947824">Washa kipengele cha chagua ili izungumze</translation>
 <translation id="3061707000357573562">Huduma ya Kurekebisha</translation>
-<translation id="3064410671692449875">Data haitoshi</translation>
 <translation id="3065041951436100775">Majibu ya kichupo kilichoangamizwa.</translation>
 <translation id="3067198179881736288">Ungependa kusakinisha programu?</translation>
 <translation id="3067198360141518313">Tekeleza programu-jalizi hii</translation>
@@ -2256,7 +2250,6 @@
 <translation id="4480590691557335796">Chrome inaweza kupata programu hatari kwenye kompyuta yako na kuiondoa</translation>
 <translation id="4481530544597605423">Vifaa visivyooanishwa</translation>
 <translation id="4482194545587547824">Google inaweza kutumia historia yako ya mambo uliyovinjari kuweka mapendeleo ya huduma za Tafuta na huduma nyingine za Google.</translation>
-<translation id="4493287891836751813">Tunakuletea programu ya Mratibu wa Google</translation>
 <translation id="4495419450179050807">Usionyeshe kwenye ukurasa huu</translation>
 <translation id="4499718683476608392">Ruhusu huduma ya Kujaza Kiotomatiki kadi za mikopo ijaze fomu kwa kubofya mara moja</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> imeacha kufanya kazi</translation>
@@ -2311,7 +2304,6 @@
 <translation id="4572659312570518089">Uthibitishaji ulighairiwa wakati ikiunganishwa kwa "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">Faili ya <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Zaidi...</translation>
-<translation id="4576537685267142337">Inua kidole, kisha uguse sensa tena</translation>
 <translation id="4576541033847873020">Oanisha kifaa cha Bluetooth</translation>
 <translation id="4579581181964204535">Haijatuma <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Je, una uhakika unataka kufuta vipengee %1$?</translation>
@@ -2556,7 +2548,6 @@
 <translation id="4941627891654116707">Ukubwa wa fonti</translation>
 <translation id="494286511941020793">Msaada wa Usanidi wa Proksi</translation>
 <translation id="4945444280533270988">Smart Lock imewashwa</translation>
-<translation id="494660967831069720">Sehemu ya data</translation>
 <translation id="4953689047182316270">Kushughulikia Matukio ya Zana za Walio na Matatizo ya Kuona au Kusikia</translation>
 <translation id="4953808748584563296">Ishara chaguomsingi ya rangi ya machungwa</translation>
 <translation id="4955814292505481804">Kila mwaka</translation>
@@ -3513,7 +3504,6 @@
 <translation id="6384275966486438344">Badilisha mipangilio yako ya kutafuta iwe: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Tovuti zinaweza kuhifadhi na kusoma data ya vidakuzi</translation>
 <translation id="6388429472088318283">Tafuta lugha</translation>
-<translation id="6388771388956873507">Pata kitambua alama ya kidole kwenye kifaa chako na ukiguse kwa kidole chako</translation>
 <translation id="6390799748543157332">Kurasa unazoangalia katika dirisha hili hazitaonekana katika historia ya kivinjari na hazitaacha alama nyingine, kama vile vidakuzi, kwenye kompyuta baada ya wewe kufunga madirisha yote Geni yaliyo wazi. Hata hivyo, faili zozote unazopakua zitahifadhiwa.</translation>
 <translation id="6390994422085833176">Kagua vipengee vya kuweka mapendeleo na usawazishaji vinavyotokana na mipangilio</translation>
 <translation id="6395423953133416962">Tuma <ph name="BEGIN_LINK1" />maelezo ya mfumo<ph name="END_LINK1" /> na <ph name="BEGIN_LINK2" />hesabu<ph name="END_LINK2" /></translation>
@@ -4116,7 +4106,6 @@
 <translation id="7309257895202129721">Onyesha &amp;vidhibiti</translation>
 <translation id="7310598146671372464">Imeshindwa kuingia katika akaunti. Seva haitumii aina zilizobainishwa za usimbaji fiche wa Kerberos. Tafadhali wasiliana na msimamizi wako.</translation>
 <translation id="7311079019872751559">Idhini ya kufikia programu-jalizi isiyo kwenye sandbox</translation>
-<translation id="7311891583377621132">Sogeza kidogo ili unase sehemu tofauti ya alama ya kidole</translation>
 <translation id="7317680720589234980">Chaguo za kuingia katika akaunti na kufunga skrini</translation>
 <translation id="7321545336522791733">Seva haifikiki</translation>
 <translation id="7324297612904500502">Mfumo wa Beta</translation>
@@ -4958,7 +4947,6 @@
 <translation id="8639047128869322042">Inatafuta programu hatari...</translation>
 <translation id="8639963783467694461">Mipangilio ya Kujaza Kiotomatiki</translation>
 <translation id="8642171459927087831">Tokeni ya Ufikiaji</translation>
-<translation id="8642267168767642381">Umesogeza kidole polepole sana</translation>
 <translation id="8642947597466641025">Fanya Matini Kuwa Makubwa</translation>
 <translation id="8643418457919840804">Ili uendelee, teua chaguo moja:</translation>
 <translation id="8645354835496065562">Endelea kuruhusu ufikiaji wa vitambuzi</translation>
@@ -5319,7 +5307,6 @@
 <translation id="916607977885256133">Picha ndani ya Picha</translation>
 <translation id="9169496697824289689">Angalia njia za mkato za kibodi</translation>
 <translation id="9169931577761441333">Ongeza <ph name="APP_NAME" /> kwenye Skrini ya Mwanzo</translation>
-<translation id="9170397650136757332">Sasa sogeza kidole chako taratibu ili kupiga picha sehemu zote za alama ya kidole chako</translation>
 <translation id="9170848237812810038">&amp;Tendua</translation>
 <translation id="9170884462774788842">Programu nyingine kwenye kompyuta yako iliongeza mandhari ambayo yanaweza kubadilisha jinsi Chrome inavyofanya kazi.</translation>
 <translation id="9173995187295789444">Inatafuta vifaa vya Bluetooth...</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 598d1b03..90652c02 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">ஒத்திசைவையும் அனைத்துச் சேவைகளையும் பயன்படுத்து</translation>
 <translation id="1272079795634619415">நிறுத்து</translation>
-<translation id="1272242203003205253">உங்களுக்கு உதவுவதற்காக, அசிஸ்டண்ட்டுடன் இணைந்து Google பார்ட்னர்கள் பணியாற்றுகிறார்கள்</translation>
 <translation id="1272978324304772054">இந்தப் பயனர் கணக்கானது சாதனம் பதிவுசெய்யப்பட்ட களத்திற்கு உரியது அல்ல. வேறொரு களத்தில் பதிவுசெய்ய விரும்பினால், முதலில் சாதன மீட்புக்குச் செல்ல வேண்டும்.</translation>
 <translation id="1274977772557788323">Adobe Flash Player இன் சேமிப்பக அமைப்புகள்</translation>
 <translation id="1274997165432133392">குக்கீகள் மற்றும் பிற தளத்தின் தரவு</translation>
@@ -417,7 +416,6 @@
 <translation id="161460670679785907">உங்கள் மொபைலைக் கண்டறிய முடியவில்லை</translation>
 <translation id="1616206807336925449">இந்த நீட்டிப்பிற்குச் சிறப்பு அனுமதிகள் தேவையில்லை.</translation>
 <translation id="1616298854599875024">"<ph name="IMPORT_NAME" />" நீட்டிப்பு பகிரப்பட்ட மாட்யூலாக இல்லாததால், இறக்க முடியவில்லை</translation>
-<translation id="161707228174452095">கைரேகை சேர்க்கப்பட்டது!</translation>
 <translation id="1618268899808219593">உதவி மையம்</translation>
 <translation id="162035744160882748">ஒத்திசைவு, தனிப்பயனாக்கம் மற்றும் பிற Google சேவைகளை இயக்குக</translation>
 <translation id="1620510694547887537">கேமரா</translation>
@@ -695,7 +693,6 @@
 <translation id="2028997212275086731">RAR archive</translation>
 <translation id="2034346955588403444">பிற வைஃபை நெட்வொர்க்கைச் சேர்</translation>
 <translation id="203574396658008164">லாக் ஸ்கிரீனில் குறிப்பெடுப்பதை இயக்கு</translation>
-<translation id="2039623879703305659">விரலை மிகவும் வேகமாக நகர்த்திவிட்டீர்கள்</translation>
 <translation id="2040460856718599782">அச்சச்சோ! உங்களை அங்கீகரிக்க முயற்சிக்கும்போது ஏதோ தவறு நடந்துவிட்டது. உங்கள் உள்நுழைவு நற்சான்றிதழ்களை இருமுறை சரிபார்த்து மீண்டும் முயற்சி செய்க.</translation>
 <translation id="2043818754674261542"><ph name="DEVICE_TYPE" /> சாதனத்தைத் திறக்க, அதற்கும் மொபைலுக்கும் இருக்க வேண்டிய தொலைவு</translation>
 <translation id="204497730941176055">Microsoft சான்றிதழ் டெம்பிளேட் பெயர்</translation>
@@ -739,7 +736,6 @@
 <translation id="2099686503067610784">சேவையக சான்றிதழ் "<ph name="CERTIFICATE_NAME" />" ஐ நீக்கவா?</translation>
 <translation id="2100273922101894616">தானாக உள்நுழையவும்</translation>
 <translation id="2101225219012730419">பதிப்பு:</translation>
-<translation id="2107494551712864447">கைரேகையைச் சேர்க்கவும்</translation>
 <translation id="2112877397266219826">அமைப்பதற்கு, உங்கள் தொடுதல் கட்டுப்பாட்டை இயக்கவும்</translation>
 <translation id="21133533946938348">தாவலைப் பொருத்து</translation>
 <translation id="2113479184312716848">Open &amp;File...</translation>
@@ -1018,7 +1014,6 @@
 <translation id="2526590354069164005">டெஸ்க்டாப்</translation>
 <translation id="2526619973349913024">புதுப்பிப்புக்காக சோதி</translation>
 <translation id="2527167509808613699">எந்த வகையான இணைப்பும்</translation>
-<translation id="2532026602297547439">உணர்வி அழுக்காக உள்ளது</translation>
 <translation id="2532589005999780174">அதிக ஒளி மாறுபாட்டுப் பயன்முறை</translation>
 <translation id="253434972992662860">&amp;இடைநிறுத்து</translation>
 <translation id="2534460670861217804">பாதுகாப்பான HTTP ப்ராக்ஸி</translation>
@@ -1378,7 +1373,6 @@
 <translation id="3057861065630527966">உங்கள் படங்கள் மற்றும் வீடியோக்களைக் காப்புப் பிரதியெடுக்கவும்</translation>
 <translation id="3060379269883947824">பேசும் திரையை இயக்கு</translation>
 <translation id="3061707000357573562">பேட்ச் சேவை</translation>
-<translation id="3064410671692449875">போதுமான தரவு இல்லை</translation>
 <translation id="3065041951436100775">தாவல் நிறுத்தப்பட்டது பற்றிய கருத்து.</translation>
 <translation id="3067198179881736288">பயன்பாட்டை நிறுவவா?</translation>
 <translation id="3067198360141518313">இந்தச் செருகுநிரலை இயக்கு</translation>
@@ -2265,7 +2259,6 @@
 <translation id="4480590691557335796">உங்கள் கணினியில் உள்ள தீங்கிழைக்கும் மென்பொருளை Chrome கண்டறிந்து, அதை அகற்றும்</translation>
 <translation id="4481530544597605423">இணைக்காத சாதனங்கள்</translation>
 <translation id="4482194545587547824">தேடல் மற்றும் பிற Google சேவைகளைத் தனிப்பயனாக்க, உங்கள் உலாவல் வரலாற்றை Google பயன்படுத்தக்கூடும்</translation>
-<translation id="4493287891836751813">Google அசிஸ்டண்ட்டைப் பற்றித் தெரிந்துகொள்ளவும்</translation>
 <translation id="4495419450179050807">இந்தப் பக்கத்தில் காண்பிக்க வேண்டாம்</translation>
 <translation id="4499718683476608392">படிவங்களை ஒரே கிளிக்கில் நிரப்புவதற்காக, கிரெடிட் கார்டுத் தன்னிரப்பி அம்சத்தை இயக்கும்</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> செயலிழந்தது</translation>
@@ -2320,7 +2313,6 @@
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" உடன் இணைக்கும்போது அங்கீகரிப்பு ரத்தானது.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> கோப்பு</translation>
 <translation id="457386861538956877">மேலும்...</translation>
-<translation id="4576537685267142337">விரலை எடுத்துவிட்டு, மீண்டும் உணர்வியைத் தொடவும்</translation>
 <translation id="4576541033847873020">புளூடூத் சாதனத்தை இணை</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" />ஐ அனுப்ப முடியவில்லை.</translation>
 <translation id="4580526846085481512">$1 உருப்படிகளை நிச்சயமாக நீக்க வேண்டுமா?</translation>
@@ -2565,7 +2557,6 @@
 <translation id="4941627891654116707">எழுத்துரு அளவு</translation>
 <translation id="494286511941020793">பதிலி உள்ளமைவு உதவி</translation>
 <translation id="4945444280533270988">Smart Lock இயக்கப்பட்டுள்ளது</translation>
-<translation id="494660967831069720">பகுதியளவுத் தரவு</translation>
 <translation id="4953689047182316270">அணுகல்தன்மை நிகழ்வுகளுக்குப் பதிலளித்தல்</translation>
 <translation id="4953808748584563296">இயல்பு ஆரஞ்சுநிற அவதார்</translation>
 <translation id="4955814292505481804">வருடாந்திரம்</translation>
@@ -3523,7 +3514,6 @@
 <translation id="6384275966486438344">உங்கள் தேடல் அமைப்புகளை இதற்கு மாற்றவும்: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">தளங்களால் குக்கீத் தரவைச் சேமித்துப் படிக்க முடியும்</translation>
 <translation id="6388429472088318283">மொழிகளைத் தேடு</translation>
-<translation id="6388771388956873507">உங்கள் சாதனத்தில் கைரேகை உணர்வியைக் கண்டறிந்து, விரலால் தொடவும்</translation>
 <translation id="6390799748543157332">இந்தச் சாளரத்தில் பார்க்கும் பக்கங்கள் உங்களின் உலாவி வரலாற்றில் தோன்றாது, மேலும் திறக்கப்பட்டிருக்கும் எல்லா விருந்தினர் சாளரங்களையும் மூடிய பிறகு, பிற தடங்களான குக்கீகள் போன்றவற்றைக் கணினியில் விட்டுச் செல்லாது. எனினும், நீங்கள் பதிவிறக்கிய எல்லா கோப்புகளும் பாதுகாக்கப்படும்.</translation>
 <translation id="6390994422085833176">அமைவைத் தொடர்ந்து, ஒத்திசைவு மற்றும் தனிப்பயனாக்க அம்சங்களை மதிப்பாய்வு செய்</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />கணினியின் தகவல்<ph name="END_LINK1" /> மற்றும் <ph name="BEGIN_LINK2" />அளவீடுகளை<ph name="END_LINK2" /> அனுப்பு</translation>
@@ -4126,7 +4116,6 @@
 <translation id="7309257895202129721">&amp;கட்டுப்பாடுகளைக் காண்பி</translation>
 <translation id="7310598146671372464">உள்நுழைய முடியவில்லை. குறிப்பிடப்பட்டுள்ள Kerberos என்க்ரிப்ஷன் வகைகளைச் சேவையகம் ஆதரிக்கவில்லை. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="7311079019872751559">சாண்ட்பாக்ஸ் செய்யப்படாத செருகுநிரல் அணுகல்</translation>
-<translation id="7311891583377621132">கைரேகையின் வேறுபட்ட பகுதியைப் பதிவுசெய்ய, லேசாக நகர்த்தவும்</translation>
 <translation id="7317680720589234980">திரைப் பூட்டு மற்றும் உள்நுழைவு விருப்பங்கள்</translation>
 <translation id="7321545336522791733">சேவையகத்தைத் தொடர்புகொள்ள  முடியவில்லை</translation>
 <translation id="7324297612904500502">பீட்டா மன்றம்</translation>
@@ -4964,7 +4953,6 @@
 <translation id="8639047128869322042">தீங்கிழைக்கும் மென்பொருள் உள்ளதா எனத் தேடுகிறது...</translation>
 <translation id="8639963783467694461">தானியங்குநிரப்பி அமைப்புகள்</translation>
 <translation id="8642171459927087831">அணுகல் டோக்கன்</translation>
-<translation id="8642267168767642381">விரலை மிகவும் மெதுவாக நகர்த்திவிட்டீர்கள்</translation>
 <translation id="8642947597466641025">உரையை இன்னும் பெரிதாக்கு</translation>
 <translation id="8643418457919840804">தொடர, விருப்பத்தைத் தேர்வுசெய்யவும்:</translation>
 <translation id="8645354835496065562">தொடர்ந்து சென்சார் அணுகலை அனுமதி</translation>
@@ -5325,7 +5313,6 @@
 <translation id="916607977885256133">பிக்ச்சர்-இன்-பிக்ச்சர்</translation>
 <translation id="9169496697824289689">விசைப்பலகைக் குறுக்குவழிகளைக் காட்டு</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" />ஐ முகப்புத் திரையில் சேர்க்கவும்</translation>
-<translation id="9170397650136757332">இப்போது, உங்கள் கைரேகையின் வெவ்வேறு பகுதிகளைப் பதிவு செய்ய, விரலைச் சற்று நகர்த்தவும்</translation>
 <translation id="9170848237812810038">&amp;செயல்தவிர்</translation>
 <translation id="9170884462774788842">உங்கள் கணினியில் உள்ள மற்றொரு நிரலானது, Chrome வேலைசெய்யும் வழியை மாற்றும் தீம் ஐச் சேர்த்துள்ளது.</translation>
 <translation id="9173995187295789444">புளூடூத் சாதனங்களை ஸ்கேன் செய்கிறது...</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index bb58302..7ff76bd5 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">సమకాలీకరణ మరియు అన్ని సేవలను ఉపయోగించండి</translation>
 <translation id="1272079795634619415">ఆపు</translation>
-<translation id="1272242203003205253">Google భాగస్వాములు మీకు సహాయం చేయడానికి మీ Assistantతో కలిసి పనిచేస్తారు</translation>
 <translation id="1272978324304772054">ఈ వినియోగదారు ఖాతా పరికరం నమోదు చేయబడిన డొమైన్‌కు చెందినది కాదు. మీరు వేరొక డొమైన్‌కు నమోదు చేయాలనుకుంటే మీరు ముందుగా పరికరాన్ని పునరుద్ధరించాలి.</translation>
 <translation id="1274977772557788323">Adobe Flash Player నిల్వ సెట్టింగ్‌లు</translation>
 <translation id="1274997165432133392">కుక్కీలు మరియు ఇతర సైట్ డేటా</translation>
@@ -415,7 +414,6 @@
 <translation id="161460670679785907">మీ ఫోన్‌ని గుర్తించడం సాధ్యపడలేదు</translation>
 <translation id="1616206807336925449">ఈ పొడిగింపుకు ప్రత్యేక అనుమతులు ఏవీ అవసరం లేదు.</translation>
 <translation id="1616298854599875024">ఇది షేర్ చేసిన మాడ్యూల్ కానందున పొడిగింపు "<ph name="IMPORT_NAME" />"ని దిగుమతి చేయడం సాధ్యపడలేదు</translation>
-<translation id="161707228174452095">వేలిముద్ర జోడించబడింది!</translation>
 <translation id="1618268899808219593">స&amp;హాయ కేంద్రం</translation>
 <translation id="162035744160882748">సమకాలీకరణ, వ్యక్తిగతీకరణ మరియు ఇతర Google సేవలను ఆన్ చేయండి</translation>
 <translation id="1620510694547887537">కెమెరా</translation>
@@ -693,7 +691,6 @@
 <translation id="2028997212275086731">RAR ఆర్కైవ్</translation>
 <translation id="2034346955588403444">మరో WiFi నెట్‌వర్క్‌ని జోడించండి</translation>
 <translation id="203574396658008164">లాక్ స్క్రీన్ నుండి విషయ సేకరణను ప్రారంభించండి</translation>
-<translation id="2039623879703305659">వేలిని చాలా వేగంగా కదిలించారు</translation>
 <translation id="2040460856718599782">అయ్యో!  మిమ్మల్ని ప్రామాణీకరించడానికి ప్రయత్నిస్తున్నప్పుడు ఏదో తప్పు జరిగింది.  దయచేసి మీ సైన్-ఇన్ ప్రమాణాలను ఒకటికి రెండుసార్లు తనిఖీ చేసుకుని మళ్లీ ప్రయత్నించండి.</translation>
 <translation id="2043818754674261542">ఈ <ph name="DEVICE_TYPE" />ని అన్‌లాక్ చేయడానికి ఫోన్‌ను ఉంచాల్సిన దూరం</translation>
 <translation id="204497730941176055">Microsoft సర్టిఫికెట్ టెంప్లేట్ పేరు</translation>
@@ -737,7 +734,6 @@
 <translation id="2099686503067610784">సర్వర్ ప్రమాణపత్రం "<ph name="CERTIFICATE_NAME" />"ని తొలగించాలా?</translation>
 <translation id="2100273922101894616">స్వీయ సైన్-ఇన్</translation>
 <translation id="2101225219012730419">సంస్కరణ:</translation>
-<translation id="2107494551712864447">వేలిముద్రను జోడించండి</translation>
 <translation id="2112877397266219826">నన్ను సెటప్ చేయడానికి మీ టచ్ కంట్రోలర్‌ను ఆన్ చేయండి</translation>
 <translation id="21133533946938348">టాబ్‌ను పిన్ చెయ్యి</translation>
 <translation id="2113479184312716848">ఫైల్‌ను &amp;తెరువు...</translation>
@@ -1013,7 +1009,6 @@
 <translation id="2526590354069164005">డెస్క్‌టాప్</translation>
 <translation id="2526619973349913024">నవీకరణ కోసం తనిఖీ చెయ్యి</translation>
 <translation id="2527167509808613699">ఎలాంటి కనెక్షన్ అయినా</translation>
-<translation id="2532026602297547439">సెన్సార్ మురికిగా ఉంది</translation>
 <translation id="2532589005999780174">అధిక కాంట్రాస్ట్ మోడ్</translation>
 <translation id="253434972992662860">&amp;పాజ్ చెయ్యి</translation>
 <translation id="2534460670861217804">సురక్షిత HTTP ప్రాక్సీ</translation>
@@ -1371,7 +1366,6 @@
 <translation id="3057861065630527966">మీ ఫోటోలను మరియు వీడియోలను బ్యాకప్ చేయండి</translation>
 <translation id="3060379269883947824">వినడానికి-ఎంచుకోండిని ప్రారంభించు</translation>
 <translation id="3061707000357573562">ప్యాచ్ సేవ</translation>
-<translation id="3064410671692449875">తగినంత డేటా లేదు</translation>
 <translation id="3065041951436100775">ట్యాబ్ మూసివేత అభిప్రాయం.</translation>
 <translation id="3067198179881736288">యాప్‌ని ఇన్‌స్టాల్ చేయాలా?</translation>
 <translation id="3067198360141518313">ఈ ప్లగ్ఇన్‌ని అమలు చెయ్యి</translation>
@@ -2311,7 +2305,6 @@
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />"కి కనెక్ట్ చేస్తున్నప్పుడు ప్రామాణీకరణ రద్దు చేయబడింది.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ఫైల్</translation>
 <translation id="457386861538956877">మరిన్ని...</translation>
-<translation id="4576537685267142337">వేలిని పైకి ఎత్తి, ఆపై మళ్లీ సెన్సార్‌ను తాకండి</translation>
 <translation id="4576541033847873020">బ్లూటూత్ పరికరాన్ని జత చేయండి</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" />ని ప్రసారం చేయడం సాధ్యపడలేదు.</translation>
 <translation id="4580526846085481512">మీరు $1 ఐటమ్‌లను ఖచ్చితంగా తొలగించాలనుకుంటున్నారా?</translation>
@@ -2554,7 +2547,6 @@
 <translation id="4941627891654116707">ఫాంట్ పరిమాణం</translation>
 <translation id="494286511941020793">ప్రాక్సీ కన్ఫిగరేషన్ సహాయం</translation>
 <translation id="4945444280533270988">Smart Lock ఆన్‌లో ఉంది</translation>
-<translation id="494660967831069720">డేటా పాక్షికంగా సంగ్రహించబడింది</translation>
 <translation id="4953689047182316270">యాక్సెస్ సామర్థ్యం ఉన్న ఈవెంట్‌లకు ప్రతిస్పందించండి</translation>
 <translation id="4953808748584563296">డిఫాల్ట్ నారింజ రంగు అవతార్</translation>
 <translation id="4955814292505481804">వార్షికం</translation>
@@ -3509,7 +3501,6 @@
 <translation id="6384275966486438344">మీ శోధన సెట్టింగ్‌లను దీనికి మార్చండి: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">సైట్‌లు కుక్కీ డేటాను సేవ్ చేయగలవు మరియు చదవగలవు</translation>
 <translation id="6388429472088318283">భాషలను వెతకండి</translation>
-<translation id="6388771388956873507">మీ పరికరంలో వేలిముద్ర సెన్సార్ ఎక్కడ ఉందో చూసి, మీ వేలితో దాన్ని తాకండి</translation>
 <translation id="6390799748543157332">మీరు ఈ విండో‌లో వీక్షించే పేజీలు బ్రౌజర్ చరిత్రలో కనిపించవు మరియు తెరవబడిన అన్ని అతిథి విండోలను మీరు మూసివేసిన తర్వాత అవి కంప్యూటర్‌లో కుక్కీల వంటి ఇతర జాడలను వదిలిపెట్టవు. అయితే, మీరు డౌన్‌లోడ్ చేసే ఫైల్‌లు భద్రపరచబడతాయి.</translation>
 <translation id="6390994422085833176">సెటప్ పూర్తయిన తర్వాత సమకాలీకరణ మరియు వ్యక్తిగతీకరణ ఫీచర్‌లను సమీక్షించండి</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />సిస్టమ్ సమాచారం<ph name="END_LINK1" /> మరియు <ph name="BEGIN_LINK2" />గణాంకాలు<ph name="END_LINK2" /> పంపు</translation>
@@ -4108,7 +4099,6 @@
 <translation id="7309257895202129721">&amp;నియంత్రణలను చూపించు</translation>
 <translation id="7310598146671372464">లాగిన్ చేయడం విఫలమైంది. పేర్కొనబడిన Kerberos ఎన్‌క్రిప్షన్ రకాలకు ఈ సర్వర్ మద్దతు ఇవ్వదు. దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి.</translation>
 <translation id="7311079019872751559">శాండ్‌బాక్స్ చేయని ప్లగిన్ ప్రాప్యత</translation>
-<translation id="7311891583377621132">వేలిముద్ర యొక్క వేరే భాగాన్ని క్యాప్చర్ చేయడం కోసం స్వల్పంగా కదిలించండి</translation>
 <translation id="7317680720589234980">స్క్రీన్ లాక్ మరియు సైన్ ఇన్ ఎంపికలు</translation>
 <translation id="7321545336522791733">సర్వర్ అందుబాటులో లేదు</translation>
 <translation id="7324297612904500502">బీటా ఫోరమ్</translation>
@@ -4943,7 +4933,6 @@
 <translation id="8639047128869322042">హానికరమైన సాఫ్ట్‌వేర్‌ కోసం తనిఖీ చేస్తోంది...</translation>
 <translation id="8639963783467694461">స్వీయపూర్తి సెట్టింగ్‌లు</translation>
 <translation id="8642171459927087831">ప్రాప్యత టోకెన్</translation>
-<translation id="8642267168767642381">వేలిని చాలా నెమ్మదిగా కదిలించారు</translation>
 <translation id="8642947597466641025">టెక్స్ట్‌ని పెద్దదిగా చెయ్యి</translation>
 <translation id="8643418457919840804">కొనసాగడానికి, ఒక ఎంపికను ఎంచుకోండి:</translation>
 <translation id="8645354835496065562">సెన్సార్ యాక్సెన్‌ను అనుమతించడం కొనసాగించు</translation>
@@ -5303,7 +5292,6 @@
 <translation id="916607977885256133">చిత్రంలో చిత్రం</translation>
 <translation id="9169496697824289689">కీబోర్డ్ సత్వరమార్గాలను వీక్షించండి</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" />ని హోమ్ స్క్రీన్‌కి జోడించండి</translation>
-<translation id="9170397650136757332">మీ వేలిముద్రలోని వివిధ భాగాలన్నింటినీ సంగ్రహించడానికి ఇప్పుడు మీ వేలిని మెల్లగా అటూ ఇటూ కదిలించండి</translation>
 <translation id="9170848237812810038">&amp;అన్డు</translation>
 <translation id="9170884462774788842">మీ కంప్యూటర్‌లోని మరో ప్రోగ్రామ్ జోడించిన థీమ్ కారణంగా Chrome పని చేసే విధానం మారవచ్చు.</translation>
 <translation id="9173995187295789444">బ్లూటూత్ పరికరాల కోసం స్కాన్ చేస్తోంది...</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index d7ba892..3b30f066 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">รายการชั้นวาง 5</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">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">ใช้การซิงค์และบริการทั้งหมด</translation>
 <translation id="1272079795634619415">หยุด</translation>
-<translation id="1272242203003205253">พาร์ทเนอร์ของ Google ทำงานกับ Assistant เพื่อช่วยเหลือคุณ</translation>
 <translation id="1272978324304772054">บัญชีผู้ใช้นี้ไม่ได้อยู่ในโดเมนที่ลงทะเบียนอุปกรณ์ ถ้าคุณต้องการลงทะเบียนไปยังโดเมนอื่น คุณจะต้องกู้คืนอุปกรณ์ก่อน</translation>
 <translation id="1274977772557788323">การตั้งค่าพื้นที่เก็บข้อมูล Adobe Flash Player</translation>
 <translation id="1274997165432133392">คุกกี้และข้อมูลอื่นของไซต์</translation>
@@ -332,6 +332,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>
@@ -367,6 +368,7 @@
 <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">โหมดคีออสก์อัตโนมัติ</translation>
@@ -383,6 +385,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>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">ไม่พบโทรศัพท์ของคุณ</translation>
 <translation id="1616206807336925449">ส่วนขยายนี้ไม่จำเป็นต้องมีสิทธิ์พิเศษ</translation>
 <translation id="1616298854599875024">นำเข้าส่วนขยาย "<ph name="IMPORT_NAME" />" ไม่ได้เนื่องจากไม่ใช่โมดูลที่แชร์</translation>
-<translation id="161707228174452095">เพิ่มลายนิ้วมือแล้ว!</translation>
 <translation id="1618268899808219593">ศู&amp;นย์ช่วยเหลือ</translation>
 <translation id="162035744160882748">เปิดการซิงค์ การปรับเปลี่ยนในแบบของคุณ และบริการอื่นๆ ของ Google</translation>
 <translation id="1620510694547887537">กล้องถ่ายรูป</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">ไฟล์ RAR</translation>
 <translation id="2034346955588403444">เพิ่มเครือข่าย Wi-Fi อื่นๆ</translation>
 <translation id="203574396658008164">เปิดใช้การจดบันทึกจากหน้าจอล็อก</translation>
-<translation id="2039623879703305659">เลื่อนนิ้วเร็วเกินไป</translation>
 <translation id="2040460856718599782">อ๊ะ! เกิดข้อผิดพลาดขณะตรวจสอบสิทธิ์ของคุณ โปรดตรวจสอบข้อมูลรับรองสำหรับลงชื่อเข้าใช้อีกครั้ง แล้วลองอีกครั้ง</translation>
 <translation id="2043818754674261542">ระยะห่างที่โทรศัพท์จะปลดล็อก <ph name="DEVICE_TYPE" /> นี้ได้</translation>
 <translation id="204497730941176055">ชื่อแม่แบบใบรับรองของ Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">ลบใบรับรองของเซิร์ฟเวอร์ "<ph name="CERTIFICATE_NAME" />" หรือไม่</translation>
 <translation id="2100273922101894616">ลงชื่อเข้าใช้อัตโนมัติ</translation>
 <translation id="2101225219012730419">รุ่น:</translation>
-<translation id="2107494551712864447">เพิ่มลายนิ้วมือ</translation>
 <translation id="2112877397266219826">เปิดอุปกรณ์ควบคุมการแตะเพื่อตั้งค่าให้เสร็จสิ้น</translation>
 <translation id="21133533946938348">ตรึงแท็บ</translation>
 <translation id="2113479184312716848">เปิดไ&amp;ฟล์...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">เดสก์ท็อป</translation>
 <translation id="2526619973349913024">ตรวจหาอัปเดต</translation>
 <translation id="2527167509808613699">การเชื่อมต่อทุกประเภท</translation>
-<translation id="2532026602297547439">เซ็นเซอร์สกปรก</translation>
 <translation id="2532589005999780174">โหมดคอนทราสต์สูง</translation>
 <translation id="253434972992662860">&amp;หยุดชั่วคราว</translation>
 <translation id="2534460670861217804">พร็อกซี HTTP ที่ปลอดภัย</translation>
@@ -1197,6 +1196,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>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">สำรองรูปภาพและวิดีโอ</translation>
 <translation id="3060379269883947824">เปิดใช้การเลือกเพื่อให้อ่าน</translation>
 <translation id="3061707000357573562">แพตช์บริการ</translation>
-<translation id="3064410671692449875">ข้อมูลไม่เพียงพอ</translation>
 <translation id="3065041951436100775">แตะความคิดเห็นที่ปิดไป</translation>
 <translation id="3067198179881736288">ติดตั้งแอปไหม</translation>
 <translation id="3067198360141518313">เรียกใช้ปลั๊กอินนี้</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">แ&amp;ท็บใหม่</translation>
 <translation id="3288047731229977326">ส่วนขยายที่ทำงานอยู่ในโหมดนักพัฒนาซอฟต์แวร์อาจเป็นอันตรายต่อคอมพิวเตอร์ของคุณ หากคุณไม่ใช่นักพัฒนาซอฟต์แวร์ คุณควรปิดส่วนขยายที่ทำงานอยู่ในโหมดนักพัฒนาซอฟต์แวร์เพื่อรักษาความปลอดภัย</translation>
 <translation id="3289856944988573801">ในการตรวจหาการอัปเดต โปรดใช้อีเทอร์เน็ตหรือ WiFi</translation>
+<translation id="3292421191230118801">ดูเว็บไซต์จากอุปกรณ์เคลื่อนที่ใน Chromebook ต่อ</translation>
 <translation id="32939749466444286">คอนเทนเนอร์ Linux ไม่เริ่มทำงาน โปรดลองอีกครั้ง</translation>
 <translation id="3294437725009624529">ผู้มาเยือน</translation>
 <translation id="329838636886466101">ซ่อม</translation>
@@ -1552,6 +1552,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 แล้ว</translation>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">เครื่องมือค้นหาของคุณเปลี่ยนเป็น <ph name="URL" /></translation>
 <translation id="3563432852173030730">ไม่สามารถดาวน์โหลดแอปพลิเคชันคีออสก์</translation>
 <translation id="3564334271939054422">เครือข่าย Wi-Fi ที่คุณใช้ (<ph name="NETWORK_ID" />) อาจกำหนดให้คุณต้องไปที่หน้าการเข้าสู่ระบบของตน</translation>
+<translation id="3564848315152754834">คีย์ความปลอดภัย USB</translation>
 <translation id="3566721612727112615">ยังไม่ได้เพิ่มเว็บไซต์</translation>
 <translation id="3569382839528428029">คุณต้องการให้ <ph name="APP_NAME" /> แชร์หน้าจอของคุณหรือไม่</translation>
 <translation id="3570985609317741174">เนื้อหาเว็บ</translation>
@@ -1741,6 +1743,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">แท็บ 1</translation>
 <translation id="3636096452488277381">สวัสดี <ph name="USER_GIVEN_NAME" /></translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">ไอคอนส่วนขยาย</translation>
 <translation id="3665589677786828986">Chrome ตรวจพบว่าการตั้งค่าของคุณบางส่วนได้รับความเสียหายจากโปรแกรมอื่น และรีเซ็ตการตั้งค่าเป็นค่าเริ่มต้นเดิม</translation>
 <translation id="3668570675727296296">การตั้งค่าภาษา</translation>
+<translation id="3668801437375206837">เพื่อการวินิจฉัยปัญหาบลูทูธที่แม่นยำยิ่งขึ้น Googler จะช่วยรวมบันทึกเพิ่มเติมเกี่ยวกับบลูทูธไว้กับรายงานความคิดเห็นได้ เมื่อคุณเลือกตัวเลือกนี้ รายงานจะรวมบันทึก btsnoop และ HCI จากเซสชันปัจจุบัน โดยจะทำความสะอาดไฟล์เพื่อนำ PII ออกไปให้ได้มากที่สุด จะมีเพียงผู้จัดการกลุ่มผลิตภัณฑ์ Chrome OS ใน Listnr เท่านั้นที่มีสิทธิ์เข้าถึงบันทึกเหล่านั้น และระบบจะลบบันทึกออกไปอย่างถาวรหลังผ่านไป 90 วัน</translation>
 <translation id="3668823961463113931">เครื่องจัดการ</translation>
 <translation id="3670229581627177274">เปิดบลูทูธ</translation>
 <translation id="3672681487849735243">ตรวจพบข้อผิดพลาดจากโรงงาน</translation>
@@ -1780,6 +1784,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>
@@ -1803,6 +1808,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>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">ยินดีต้อนรับสู่การประชุม Hangouts </translation>
 <translation id="3861241522664181545">หยุดการโหลดหน้านี้ชั่วคราวแล้ว</translation>
 <translation id="3862134173397075045">ยินดีต้อนรับสู่ประสบการณ์การใช้ Cast ใน Chrome!</translation>
+<translation id="3862693525629180217">ยืนยันผ่านเซ็นเซอร์ในเครื่อง</translation>
 <translation id="3862788408946266506">ต้องติดตั้งแอปที่มีแอตทริบิวต์ไฟล์ Manifest ที่ชื่อ "kiosk_only" ในโหมดคีออสก์ของ Chrome OS</translation>
 <translation id="3865414814144988605">ความละเอียด</translation>
 <translation id="386548886866354912">แพ็กด้วย <ph name="EXTENSION_NAME" /></translation>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">ต้องรีสตาร์ทก่อน จึงจะสามารถรีเซ็ตอุปกรณ์ของคุณด้วย Powerwash ได้</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">ดูในสโตร์</translation>
+<translation id="4058647953897694817">ยืนยันผ่านบลูทูธ</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">ตรวจสอบเอกสารทันที</translation>
 <translation id="406070391919917862">แอปพลิเคชันพื้นหลัง</translation>
@@ -2041,6 +2049,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>
@@ -2140,6 +2149,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>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">Chrome ค้นหาซอฟต์แวร์ที่เป็นอันตรายในคอมพิวเตอร์และนำซอฟต์แวร์นั้นออกได้</translation>
 <translation id="4481530544597605423">อุปกรณ์ที่ไม่ได้จับคู่</translation>
 <translation id="4482194545587547824">Google อาจใช้ประวัติการท่องเว็บของคุณเพื่อปรับเปลี่ยน Search และบริการอื่นๆ ของ Google ในแบบของคุณ</translation>
-<translation id="4493287891836751813">พบกับ Google Assistant ของคุณ</translation>
 <translation id="4495419450179050807">ไม่แสดงในหน้านี้อีก</translation>
+<translation id="449938344715680828">กด |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| ตามด้วย |<ph name="ACCELERATOR3" />| เพื่อออก</translation>
 <translation id="4499718683476608392">เปิดใช้การป้อนข้อมูลบัตรเครดิตอัตโนมัติเพื่อกรอกฟอร์มด้วยการคลิกเพียงครั้งเดียว</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ขัดข้อง</translation>
 <translation id="450099669180426158">ไอคอนเครื่องหมายอัศเจรีย์</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">การตรวจสอบสิทธิ์ถูกยกเลิกขณะที่เชื่อมต่อกับ "<ph name="DEVICE_NAME" />"</translation>
 <translation id="4572815280350369984">ไฟล์ <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">เพิ่มเติม...</translation>
-<translation id="4576537685267142337">ยกนิ้วขึ้น แล้วแตะเซ็นเซอร์อีกครั้ง</translation>
 <translation id="4576541033847873020">จับคู่อุปกรณ์บลูทูธ</translation>
 <translation id="4579581181964204535">ไม่สามารถแคสต์ <ph name="HOST_NAME" /></translation>
 <translation id="4580526846085481512">คุณแน่ใจหรือไม่ว่าต้องการลบ $1 รายการ</translation>
@@ -2343,6 +2352,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>
@@ -2452,6 +2462,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">ค้นหา</translation>
 <translation id="4801448226354548035">ซ่อนบัญชี</translation>
 <translation id="4801512016965057443">อนุญาตการโรมมิ่งข้อมูลมือถือ</translation>
@@ -2468,7 +2479,7 @@
 <translation id="4821935166599369261">&amp;เปิดใช้งานการทำแฟ้มประวัติ</translation>
 <translation id="4823484602432206655">อ่านและเปลี่ยนการตั้งค่าผู้ใช้และอุปกรณ์</translation>
 <translation id="4823651846660089135">อุปกรณ์เป็นแบบอ่านอย่างเดียว</translation>
-<translation id="4823955295535347797">เข้าถึง Assistant ได้ทุกเมื่อเพียงพูดว่า "Ok Google" เมื่อหน้าจอเปิดอยู่</translation>
+<translation id="4823955295535347797">เข้าถึง Assistant ได้ทุกเพียงแค่พูดว่า Ok Google เมื่อหน้าจอเปิดอยู่</translation>
 <translation id="4828937774870308359">ออสเตรเลีย</translation>
 <translation id="4829768588131278040">ตั้งค่า PIN</translation>
 <translation id="4830502475412647084">กำลังติดตั้งอัปเดตระบบปฏิบัติการ</translation>
@@ -2518,6 +2529,7 @@
 <translation id="4882473678324857464">โฟกัสบุ๊กมาร์ก</translation>
 <translation id="4882831918239250449">ควบคุมการใช้ประวัติการท่องเว็บเพื่อปรับเปลี่ยน Search, โฆษณา และบริการอื่นๆ ในแบบของคุณ</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>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">ขนาดแบบอักษร</translation>
 <translation id="494286511941020793">ความช่วยเหลือในการกำหนดค่าพร็อกซี</translation>
 <translation id="4945444280533270988">Smart Lock เปิดอยู่</translation>
-<translation id="494660967831069720">ข้อมูลบางส่วน</translation>
 <translation id="4953689047182316270">ตอบสนองต่อเหตุการณ์การเข้าถึงพิเศษ</translation>
 <translation id="4953808748584563296">รูปโปรไฟล์เริ่มต้นสีส้ม</translation>
 <translation id="4955814292505481804">รายปี</translation>
@@ -2818,7 +2829,7 @@
 <translation id="532776649628038357">ฉันยอมรับ</translation>
 <translation id="532943162177641444">แตะการแจ้งเตือนใน <ph name="PHONE_NAME" /> เพื่อตั้งค่าฮอตสปอตเคลื่อนที่ที่อุปกรณ์นี้ใช้ได้</translation>
 <translation id="5329858601952122676">&amp;ลบ</translation>
-<translation id="5329945517224105597">Assistant ให้คำแนะนำที่เกี่ยวข้องมากขึ้นและการดำเนินการเฉพาะเกี่ยวกับสิ่งที่อยู่ในหน้าจอได้ คุณเปลี่ยนแปลงการดำเนินการนี้ได้ในการตั้งค่า Assistant</translation>
+<translation id="5329945517224105597">Assistant จะให้คำแนะนำตามที่คุณขอและดำเนินการให้สัมพันธ์กับสิ่งที่เปิดอยู่บนหน้าจอของคุณมากขึ้น ซึ่งเปลี่ยนแปลงได้ในการตั้งค่า Assistant</translation>
 <translation id="5330145655348521461">ไฟล์เหล่านี้เปิดอยู่บนเดสก์ท็อปเครื่องอื่น โปรดย้ายมายัง <ph name="USER_NAME" /> (<ph name="MAIL_ADDRESS" />) เพื่อดู</translation>
 <translation id="5330512191124428349">รับข้อมูล</translation>
 <translation id="5331069282670671859">คุณไม่มีใบรับรองในหมวดหมู่นี้</translation>
@@ -2991,6 +3002,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>
@@ -3070,7 +3082,7 @@
    <ph name="LINE_BREAKS" />
    ปิดไฟล์ทั้งหมดในที่เก็บถาวรหรือดิสก์เสมือน จากนั้นลองอีกครั้ง</translation>
 <translation id="5687326903064479980">เขตเวลา</translation>
-<translation id="568824803367507355">การตรวจพบ "Ok Google"</translation>
+<translation id="568824803367507355">การตรวจพบ Ok Google</translation>
 <translation id="5689516760719285838">ตำแหน่ง</translation>
 <translation id="56907980372820799">ลิงก์ข้อมูล</translation>
 <translation id="5691511426247308406">ครอบครัว</translation>
@@ -3237,6 +3249,7 @@
 <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="5941153596444580863">เพิ่มบุคคล...</translation>
@@ -3273,6 +3286,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>
@@ -3283,6 +3297,7 @@
 <translation id="6020431688553761150">เซิร์ฟเวอร์ไม่อนุมัติให้คุณเข้าถึงทรัพยากรนี้</translation>
 <translation id="602251597322198729">ไซต์นี้พยายามดาวน์โหลดไฟล์หลายไฟล์ คุณจะอนุญาตหรือไม่</translation>
 <translation id="6022526133015258832">เปิดแบบเต็มหน้าจอ</translation>
+<translation id="6022705094403139349">พร้อมจับคู่คีย์ความปลอดภัยไหม</translation>
 <translation id="6023643151125006053">ผู้ดูแลระบบของ <ph name="SAML_DOMAIN" /> ล็อกอุปกรณ์นี้ไว้ (หมายเลขประจำเครื่อง: <ph name="SERIAL_NUMBER" />)</translation>
 <translation id="6025215716629925253">Stack Trace</translation>
 <translation id="6026047032548434446">ติดตั้งแอปไหม</translation>
@@ -3346,6 +3361,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>
@@ -3391,6 +3407,7 @@
 <translation id="6169666352732958425">ไม่สามารถแคสต์เดสก์ท็อป</translation>
 <translation id="6171948306033499786">หยุดการพิมพ์ชั่วคราว</translation>
 <translation id="6175314957787328458">โดเมน GUID ของ Microsoft</translation>
+<translation id="6176043333338857209">ระบบจะเปิดบลูทูธชั่วคราวเพื่อสื่อสารกับคีย์ความปลอดภัย</translation>
 <translation id="6178664161104547336">เลือกใบรับรอง</translation>
 <translation id="6181431612547969857">การดาวน์โหลดถูกบล็อก</translation>
 <translation id="6185132558746749656">ตำแหน่งของอุปกรณ์</translation>
@@ -3478,6 +3495,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>
@@ -3522,7 +3540,6 @@
 <translation id="6384275966486438344">เปลี่ยนการตั้งค่าการค้นหาของคุณเป็น: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">เว็บไซต์สามารถบันทึกและอ่านข้อมูลคุกกี้ได้</translation>
 <translation id="6388429472088318283">ค้นหาภาษา</translation>
-<translation id="6388771388956873507">ค้นหาเซ็นเซอร์ลายนิ้วมือในอุปกรณ์แล้วใช้นิ้วแตะเซ็นเซอร์</translation>
 <translation id="6390799748543157332">หน้าที่คุณดูในหน้าต่างนี้จะไม่ปรากฏในประวัติเบราว์เซอร์และจะไม่ทิ้งร่องรอยอื่นๆ เช่น คุกกี้ ไว้ในคอมพิวเตอร์หลังจากที่คุณปิดหน้าต่างผู้เยี่ยมชมที่เปิดไว้ทั้งหมด อย่างไรก็ตาม ไฟล์ที่คุณดาวน์โหลดจะได้รับการเก็บรักษาไว้</translation>
 <translation id="6390994422085833176">ดูฟีเจอร์การซิงค์และการปรับเปลี่ยนในแบบของคุณเมื่อตั้งค่าเสร็จ</translation>
 <translation id="6395423953133416962">ส่ง<ph name="BEGIN_LINK1" />ข้อมูลระบบ<ph name="END_LINK1" />และ<ph name="BEGIN_LINK2" />เมตริก<ph name="END_LINK2" /></translation>
@@ -3534,6 +3551,7 @@
 <translation id="6399774419735315745">สายลับ</translation>
 <translation id="6401445054534215853">รายการชั้นวาง 1</translation>
 <translation id="6404511346730675251">แก้ไขบุ๊กมาร์ก</translation>
+<translation id="6405510437656969977">ทำต่อเมื่อพร้อมใส่ PIN</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>
@@ -3652,6 +3670,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</translation>
@@ -3701,6 +3720,7 @@
 <translation id="6644846457769259194">กำลังอัปเดตอุปกรณ์ (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL การเพิกถอนผู้ออกใบรับรองของ Netscape</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>
@@ -3776,6 +3796,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>
@@ -3811,6 +3832,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>
@@ -3844,6 +3866,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>
@@ -4009,6 +4032,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>
@@ -4054,6 +4078,7 @@
 <translation id="7201118060536064622">ลบ "<ph name="DELETED_ITEM_NAME" />" แล้ว</translation>
 <translation id="7206693748120342859">กำลังดาวน์โหลด <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{หน้าที่ออกไป}other{หน้าที่ออกไป}}</translation>
+<translation id="721467499098558573">กดปุ่มบนคีย์ความปลอดภัยค้างไว้อย่างน้อย 5 วินาที</translation>
 <translation id="7216409898977639127">ผู้ให้บริการเครือข่ายมือถือ</translation>
 <translation id="7216595297012131718">เรียงลำดับภาษาตามความต้องการของคุณ</translation>
 <translation id="7220019174139618249">ส่งออกรหัสผ่านไปยัง "<ph name="FOLDER" />" ไม่ได้</translation>
@@ -4089,6 +4114,7 @@
 <translation id="7256710573727326513">เปิดในแท็บ</translation>
 <translation id="725758059478686223">บริการการพิมพ์</translation>
 <translation id="7257666756905341374">อ่านข้อมูลที่คุณคัดลอกและวาง</translation>
+<translation id="7260764918845374269">อุปกรณ์ต้องอยู่ในโหมดจับคู่อุปกรณ์จึงจะเห็นคีย์ความปลอดภัย กดปุ่มบนคีย์ความปลอดภัยค้างไว้อย่างน้อย 5 วินาที</translation>
 <translation id="7262004276116528033">บริการลงชื่อเข้าใช้นี้โฮสต์โดย <ph name="SAML_DOMAIN" /></translation>
 <translation id="7268365133021434339">ปิดแท็บ</translation>
 <translation id="7268659760406822741">บริการที่มี</translation>
@@ -4125,7 +4151,6 @@
 <translation id="7309257895202129721">แสดงปุ่ม&amp;ควบคุม</translation>
 <translation id="7310598146671372464">เข้าสู่ระบบไม่สำเร็จ เซิร์ฟเวอร์ไม่รองรับประเภทการเข้ารหัส Kerberos ที่ระบุ โปรดติดต่อผู้ดูแลระบบ</translation>
 <translation id="7311079019872751559">การเข้าถึงปลั๊กอินที่ไม่ได้อยู่ในแซนด์บ็อกซ์</translation>
-<translation id="7311891583377621132">เลื่อนนิ้วเล็กน้อยเพื่อจับภาพส่วนต่างๆ ของลายนิ้วมือ</translation>
 <translation id="7317680720589234980">ตัวเลือกล็อกหน้าจอและการเข้าสู่ระบบ</translation>
 <translation id="7321545336522791733">ไม่สามารถเข้าถึงเซิร์ฟเวอร์</translation>
 <translation id="7324297612904500502">ฟอรัมเบต้า</translation>
@@ -4207,6 +4232,7 @@
 <translation id="7464490149090366184">การซิปล้มเหลว "$1" มีอยู่แล้ว</translation>
 <translation id="7465778193084373987">URL การเพิกถอนใบรับรองของ Netscape</translation>
 <translation id="7469406957790636836">หากจะเปิดการตั้งค่านี้ ก่อนอื่นให้เปิดการตรวจตัวสะกดใน<ph name="BEGIN_LINK" />ภาษาและการป้อนข้อมูล<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">ส่งการแจ้งเตือนให้คุณและจดจำคอมพิวเตอร์เครื่องนี้สำหรับ Messages โดยค่าเริ่มต้น</translation>
 <translation id="7469894403370665791">เชื่อมต่อกับเครือข่ายนี้อัตโนมัติ</translation>
 <translation id="747114903913869239">ข้อผิดพลาด: ไม่สามารถถอดรหัสส่วนขยาย</translation>
 <translation id="7473753388963818366">มาเตรียม <ph name="DEVICE_TYPE" /> ให้คุณพร้อมใช้งานกัน</translation>
@@ -4256,6 +4282,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>
@@ -4358,6 +4385,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>
@@ -4573,6 +4601,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>
@@ -4705,6 +4734,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>
@@ -4799,6 +4829,7 @@
 <translation id="8353683614194668312">ส่วนขยายหรือแอปพลิเคชันสามารถ:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">ต้องการกู้คืนหน้าเว็บไหม</translation>
+<translation id="8362993567435070757">ค้นหา PIN 6 หลักที่ด้านหลังคีย์</translation>
 <translation id="8363095875018065315">เสถียร</translation>
 <translation id="8363142353806532503">บล็อกไมโครโฟน</translation>
 <translation id="8366396658833131068">กู้คืนการเชื่อมต่อเครือข่ายของคุณแล้ว โปรดเลือกเครือข่ายอื่นหรือกดปุ่ม "ดำเนินการต่อ" ที่ด้านล่างเพื่อเปิดแอปคีออสก์</translation>
@@ -4807,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>
@@ -4925,6 +4957,7 @@
 <translation id="8557930019681227453">ไฟล์ Manifest</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>
@@ -4965,7 +4998,6 @@
 <translation id="8639047128869322042">กำลังตรวจหาซอฟต์แวร์ที่เป็นอันตราย...</translation>
 <translation id="8639963783467694461">การตั้งค่าป้อนอัตโนมัติ</translation>
 <translation id="8642171459927087831">โทเค็นการเข้าถึง</translation>
-<translation id="8642267168767642381">เลื่อนนิ้วช้าเกินไป</translation>
 <translation id="8642947597466641025">ทำให้ข้อความใหญ่ขึ้น</translation>
 <translation id="8643418457919840804">เลือกตัวเลือกใดก็ได้เพื่อดำเนินการต่อ</translation>
 <translation id="8645354835496065562">อนุญาตการเข้าถึงเซ็นเซอร์ต่อไป</translation>
@@ -4980,6 +5012,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>
@@ -5102,6 +5135,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>
@@ -5132,11 +5166,13 @@
 <translation id="8872155268274985541">พบไฟล์ Manifest การอัปเดตภายนอกของคีออสก์ที่ไม่ถูกต้อง ไม่สามารถอัปเดตแอปคีออสก์ได้ โปรดนำ 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">ใช้ Touch ID กับ <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">สี:</translation>
 <translation id="8890516388109605451">แหล่งที่มา</translation>
 <translation id="8892168913673237979">เรียบร้อยแล้ว!</translation>
@@ -5157,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>
@@ -5265,6 +5302,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>
@@ -5326,7 +5364,6 @@
 <translation id="916607977885256133">การแสดงภาพซ้อนภาพ</translation>
 <translation id="9169496697824289689">ดูแป้นพิมพ์ลัด</translation>
 <translation id="9169931577761441333">เพิ่ม <ph name="APP_NAME" /> ในหน้าจอหลัก</translation>
-<translation id="9170397650136757332">เลื่อนนิ้วเล็กน้อยเพื่อจับภาพส่วนต่างๆ ทั้งหมดของลายนิ้วมือ</translation>
 <translation id="9170848237812810038">เ&amp;ลิกทำ</translation>
 <translation id="9170884462774788842">โปรแกรมอื่นในคอมพิวเตอร์ของคุณเพิ่มธีมที่อาจเปลี่ยนวิธีการทำงานของ Chrome</translation>
 <translation id="9173995187295789444">กำลังสแกนหาอุปกรณ์บลูทูธ...</translation>
@@ -5390,6 +5427,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_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 71de3f2..95b19380 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Raf öğesi 5</translation>
 <translation id="1227507814927581609">"<ph name="DEVICE_NAME" />" cihazına bağlanırken kimlik doğrulaması başarısız oldu.</translation>
 <translation id="1230807973377071856">sistem menüsü</translation>
+<translation id="123186018454553812">Başka bir anahtar deneyin</translation>
 <translation id="1232569758102978740">Adsız</translation>
 <translation id="1233721473400465416">Yerel ayar</translation>
 <translation id="1234808891666923653">Hizmet Çalışanları</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Senkronizasyonu ve tüm hizmetleri kullan</translation>
 <translation id="1272079795634619415">Durdur</translation>
-<translation id="1272242203003205253">Google İş Ortakları size yardımcı olmak için Asistanınızla birlikte çalışır</translation>
 <translation id="1272978324304772054">Bu kullanıcı hesabı, cihazın kaydedildiği alan adına ait değil. Farklı bir alan adına kaydolmak istiyorsanız, öncelikle cihaz kurtarma işlemini tamamlamanız gerekir.</translation>
 <translation id="1274977772557788323">Adobe Flash Player Depolama ayarları</translation>
 <translation id="1274997165432133392">Çerezler ve diğer site verileri</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924"><ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /> Sürümü</translation>
 <translation id="1486096554574027028">Şifrelerde ara</translation>
 <translation id="1487335504823219454">Açık - özel ayarlar</translation>
+<translation id="1489664337021920575">Başka bir seçenek belirleyin</translation>
 <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> bekleniyor...</translation>
 <translation id="1495486559005647033">Kullanılabilir <ph name="NUM_PRINTERS" /> cihaz daha var.</translation>
 <translation id="1497522201463361063">"<ph name="FILE_NAME" />" yeniden adlandırılamıyor. <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Uygulama Penceresi</translation>
 <translation id="15373452373711364">Büyük fare imleci</translation>
 <translation id="1538729222189715449">Linux dosyaları açılıyor...</translation>
+<translation id="153933193410874873">Bu cihazda kimliğinizi doğrulayamadık</translation>
 <translation id="1540605929960647700">Demo modunu etkinleştir</translation>
 <translation id="1543284117603151572">Edge'den Aktarıldı</translation>
 <translation id="1545177026077493356">Otomatik Kiosk Modu</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Bu resim kullanılamaz. Farklı bir resim seçin.</translation>
 <translation id="1566049601598938765">Web sitesi</translation>
 <translation id="1567387640189251553">Şifrenizi son girdiğinizden bu yana farklı bir klavye bağlandı. Bu klavye, tuş vuruşlarınızı çalmaya çalışıyor olabilir.</translation>
+<translation id="1567750922576943685">Kimliğinizin doğrulanması kişisel bilgilerinizin korunmasına yardımcı olur</translation>
 <translation id="1567993339577891801">JavaScript Konsolu</translation>
 <translation id="1568067597247500137">Sitenin sesini kapat</translation>
 <translation id="1568323446248056064">Ekran cihaz ayarlarını aç</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Telefonunuz algılanamadı</translation>
 <translation id="1616206807336925449">Bu uzantı herhangi bir özel izin gerektirmiyor.</translation>
 <translation id="1616298854599875024">Paylaşılan bir modül olmadığından "<ph name="IMPORT_NAME" />" uzantısı içe aktarılamıyor</translation>
-<translation id="161707228174452095">Parmak izi eklendi!</translation>
 <translation id="1618268899808219593">Y&amp;ardım Merkezi</translation>
 <translation id="162035744160882748">Senkronizasyon, kişiselleştirme ve diğer Google hizmetlerini aç</translation>
 <translation id="1620510694547887537">Kamera</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">RAR arşivi</translation>
 <translation id="2034346955588403444">Başka kablosuz ağ ekle</translation>
 <translation id="203574396658008164">Kilit ekranından not almayı etkinleştir</translation>
-<translation id="2039623879703305659">Parmak hareketi çok hızlıydı.</translation>
 <translation id="2040460856718599782">Hata! Kimliğiniz doğrulanmaya çalışılırken bir şeyler ters gitti. Lütfen oturum açma kimlik bilgilerinizi tekrar kontrol edin ve yeniden deneyin.</translation>
 <translation id="2043818754674261542">Telefonun bu <ph name="DEVICE_TYPE" /> cihazının kilidini açması için gereken mesafe</translation>
 <translation id="204497730941176055">Microsoft Sertifika Şablonu Adı</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">"<ph name="CERTIFICATE_NAME" />" sunucusu sertifikası silinsin mi?</translation>
 <translation id="2100273922101894616">Otomatik Oturum Aç</translation>
 <translation id="2101225219012730419">Sürüm:</translation>
-<translation id="2107494551712864447">Parmak izi ekleyin</translation>
 <translation id="2112877397266219826">Beni ayarlamak için dokunmatik denetleyicinizi etkinleştirin</translation>
 <translation id="21133533946938348">Sekmeyi İğnele</translation>
 <translation id="2113479184312716848">&amp;Dosya Aç...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Masaüstü</translation>
 <translation id="2526619973349913024">Güncellemeleri denetle</translation>
 <translation id="2527167509808613699">Herhangi bir bağlantı türü</translation>
-<translation id="2532026602297547439">Sensör kirli</translation>
 <translation id="2532589005999780174">Yüksek kontrast modu</translation>
 <translation id="253434972992662860">&amp;Duraklat</translation>
 <translation id="2534460670861217804">Güvenli HTTP Proxy'si</translation>
@@ -1197,6 +1196,7 @@
 <translation id="2783298271312924866">İndirildi</translation>
 <translation id="2783321960289401138">Kısayol oluştur...</translation>
 <translation id="2783829359200813069">Şifreleme türlerini seçme</translation>
+<translation id="2783952358106015700">Güvenlik anahtarınızı <ph name="APP_NAME" /> ile kullanın</translation>
 <translation id="2784407158394623927">Mobil veri hizmetiniz etkinleştiriliyor</translation>
 <translation id="2785873697295365461">Dosya açıklayıcıları</translation>
 <translation id="2787047795752739979">Orijinalin üzerine yaz</translation>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">Fotoğraflarınızı ve videolarınızı yedekleyin</translation>
 <translation id="3060379269883947824">Seç ve Dinle'yi etkinleştir</translation>
 <translation id="3061707000357573562">Yama Hizmeti</translation>
-<translation id="3064410671692449875">Yetersiz veri</translation>
 <translation id="3065041951436100775">Sekme sonlandırıldı geri bildirimi.</translation>
 <translation id="3067198179881736288">Uygulama yüklensin mi?</translation>
 <translation id="3067198360141518313">Bu eklentiyi çalıştır</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">Yeni &amp;Sekme</translation>
 <translation id="3288047731229977326">Geliştirici modunda çalışan uzantılar bilgisayarınıza zarar verebilir. Geliştirici değilseniz, geliştirici modundayken güvende olmak için bu uzantıların çalışmasını devre dışı bırakmanız gerekir.</translation>
 <translation id="3289856944988573801">Güncellemeleri kontrol etmek için lütfen Ethernet veya Kablosuz kullanın.</translation>
+<translation id="3292421191230118801">Mobil cihazınızdan ziyaret ettiğiniz siteleri Chromebook'unuzda görüntülemeye devam edin</translation>
 <translation id="32939749466444286">Linux kapsayıcısı başlamadı. Lütfen tekrar deneyin.</translation>
 <translation id="3294437725009624529">Misafir</translation>
 <translation id="329838636886466101">Onar</translation>
@@ -1552,6 +1552,7 @@
 <translation id="3348038390189153836">Kaldırılabilir cihaz algılandı</translation>
 <translation id="3348459612390503954">Tebrikler</translation>
 <translation id="3349933790966648062">Kullanılan Bellek Miktarı</translation>
+<translation id="3350117557200012647">Eşleme moduna geçin</translation>
 <translation id="3353984535370177728">Yüklemek için bir klasör seçin</translation>
 <translation id="3355936511340229503">Bağlantı hatası</translation>
 <translation id="3356797067524893661">Artık Hangouts Meet'e devam edebilirsiniz</translation>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">Arama motorunuz <ph name="URL" /> olarak değiştirildi.</translation>
 <translation id="3563432852173030730">Kiosk uygulaması indirilemedi.</translation>
 <translation id="3564334271939054422">Kullandığınız Kablosuz ağ (<ph name="NETWORK_ID" />) kendi giriş sayfasını ziyaret etmenizi gerektiriyor olabilir.</translation>
+<translation id="3564848315152754834">USB güvenlik anahtarı</translation>
 <translation id="3566721612727112615">Site eklenmedi</translation>
 <translation id="3569382839528428029"><ph name="APP_NAME" /> uygulamasının ekranınızı paylaşmasını istiyor musunuz?</translation>
 <translation id="3570985609317741174">Web içeriği</translation>
@@ -1741,6 +1743,7 @@
 <translation id="3627588569887975815">&amp;Bağlantıyı gizli pencerede aç</translation>
 <translation id="3627671146180677314">Netscape Sertifikası Yenileme Zamanı</translation>
 <translation id="3627879631695760395"><ph name="APP" /> Uygulamasını Yükle...</translation>
+<translation id="3630132874740063857">Telefonunuz</translation>
 <translation id="3630995161997703415">Bu siteyi istediğiniz zaman kullanmak için rafınıza ekleyin</translation>
 <translation id="3635030235490426869">Sekme 1</translation>
 <translation id="3636096452488277381">Merhaba <ph name="USER_GIVEN_NAME" />.</translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">Uzantı Simgesi</translation>
 <translation id="3665589677786828986">Chrome, bazı ayarlarınızın başka bir program tarafından bozulduğunu algıladı ve onları orijinal varsayılan değerlerine sıfırladı.</translation>
 <translation id="3668570675727296296">Dil ayarları</translation>
+<translation id="3668801437375206837">Google çalışanları Bluetooth sorunlarını daha iyi teşhis etmek için geri bildirim raporlarına ek Bluetooth günlükleri dahil edebilirler. Bu seçenek işaretlendiğinde, geçerli oturumunuzdan btsnoop ve HCI günlükleri raporunuza eklenecektir. Bu şekilde mümkün olan en fazla sayıda PII temizlenecektir. Bu günlüklere erişim, Listnr'da Chrome OS ürün grubu yöneticileri ile kısıtlı olacaktır. Günlükler 90 gün sonra tamamen silinecektir.</translation>
 <translation id="3668823961463113931">İşleyiciler</translation>
 <translation id="3670229581627177274">Bluetooth'u aç</translation>
 <translation id="3672681487849735243">Bir fabrika hatası saptandı</translation>
@@ -1780,6 +1784,7 @@
 <translation id="3691267899302886494"><ph name="HOST" />, ekranınızı paylaşmak istiyor</translation>
 <translation id="3693415264595406141">Şifre:</translation>
 <translation id="3694027410380121301">Önceki Sekmeyi Seç</translation>
+<translation id="369489984217678710">Şifreler ve diğer oturum açma verileri</translation>
 <translation id="3699624789011381381">E-posta adresi</translation>
 <translation id="3699920817649120894">Senkronizasyon ve kişiselleştirme kapatılsın mı?</translation>
 <translation id="3700888195348409686">(<ph name="PAGE_ORIGIN" />) gösteriliyor</translation>
@@ -1803,6 +1808,7 @@
 <translation id="3727148787322499904">Bu ayarı değiştirmek tüm paylaşılan ağları etkiler</translation>
 <translation id="3727187387656390258">Pop-up'ı incele</translation>
 <translation id="3729506734996624908">İzin verilen siteler</translation>
+<translation id="3731997362820527097">Güvenlik anahtarınızı seçin</translation>
 <translation id="3732078975418297900"><ph name="ERROR_LINE" />. satırda hata</translation>
 <translation id="3733127536501031542">İlerlemeli SSL Sunucusu</translation>
 <translation id="3735740477244556633">Sıralama ölçütü</translation>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">Hangouts Meet'e hoş geldiniz</translation>
 <translation id="3861241522664181545">Sayfa duraklatıldı.</translation>
 <translation id="3862134173397075045">Chrome'da Google Cast deneyimine hoş geldiniz!</translation>
+<translation id="3862693525629180217">Yerleşik sensör kullanarak doğrula</translation>
 <translation id="3862788408946266506">"kiosk_only" manifest özelliğine sahip uygulamalar ChromeOS kiosk modunda yüklenmelidir</translation>
 <translation id="3865414814144988605">Çözünürlük</translation>
 <translation id="386548886866354912"><ph name="EXTENSION_NAME" /> uzantısıyla paketle</translation>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">Cihazınızın Powerwash ile sıfırlanabilmesi için yeniden başlatılması gerekir.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Mağazada Görüntüle</translation>
+<translation id="4058647953897694817">Bluetooth kullanarak doğrula</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Dokümanı Şimdi Denetle</translation>
 <translation id="406070391919917862">Arka Plan Uygulamaları</translation>
@@ -2041,6 +2049,7 @@
 <translation id="407520071244661467">Ölçek</translation>
 <translation id="4075639477629295004"><ph name="FILE_NAME" /> yayınlanamıyor.</translation>
 <translation id="4077917118009885966">Reklamlar bu sitede engellendi</translation>
+<translation id="4079799245038595838">Telefoununuza bir bildirim gönderildi. Kimliğinizi onaylamak için istemleri uygulayın.</translation>
 <translation id="4081242589061676262">Dosya yayınlanamıyor.</translation>
 <translation id="4084682180776658562">Yer İşareti</translation>
 <translation id="4084835346725913160"><ph name="TAB_NAME" /> sekmesini kapat</translation>
@@ -2140,6 +2149,7 @@
 <translation id="4250229828105606438">Ekran görüntüsü</translation>
 <translation id="4250680216510889253">Hayır</translation>
 <translation id="4252852543720145436">Korumalı içerik tanımlayıcıları</translation>
+<translation id="4252899949534773101">Bluetooth devre dışı</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Sekme içeriği paylaşılıyor</translation>
 <translation id="4254813446494774748">Çeviri Dili:</translation>
 <translation id="425573743389990240">Vat Cinsinden Pil Boşalma Oranı (Negatif değer, pilin şarj edilmekte olduğu anlamına gelir)</translation>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">Chrome, bilgisayarınızdaki zararlı yazılımları bulabilir ve kaldırabilir</translation>
 <translation id="4481530544597605423">Eşlemesi kaldırılmış cihazlar</translation>
 <translation id="4482194545587547824">Google, Arama ve diğer Google hizmetlerini kişiselleştirmek için tarama geçmişinizi kullanabilir</translation>
-<translation id="4493287891836751813">Google Asistanınızla tanışın</translation>
 <translation id="4495419450179050807">Bu sayfada gösterme</translation>
+<translation id="449938344715680828">Çıkmak için |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| ve arkasından |<ph name="ACCELERATOR3" />| tuşlarına basın</translation>
 <translation id="4499718683476608392">Formları tek bir tıklamayla doldurmak için kredi kartı bilgilerini Otomatik Doldurma özelliğini etkinleştirir</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> eklentisi kilitlendi</translation>
 <translation id="450099669180426158">Ünlem işareti simgesi</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" cihazına bağlanırken kimlik doğrulaması iptal edildi.</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> dosyası</translation>
 <translation id="457386861538956877">Diğer...</translation>
-<translation id="4576537685267142337">Parmağınızı kaldırın ve sensöre tekrar dokunun</translation>
 <translation id="4576541033847873020">Bluetooth cihazı eşle</translation>
 <translation id="4579581181964204535"><ph name="HOST_NAME" /> yayınlanamıyor.</translation>
 <translation id="4580526846085481512">$1 öğeyi silmek istediğiniz emin misiniz?</translation>
@@ -2343,6 +2352,7 @@
 <translation id="4611114513649582138">Veri bağlantısı mevcut</translation>
 <translation id="4613271546271159013">Bir uzantı, yeni sekme açtığınızda hangi sayfanın görüntüleneceğini değiştirdi.</translation>
 <translation id="4615586811063744755">çerez seçilmedi</translation>
+<translation id="4615618657481886098">Bu anahtarı daha önce kaydettirdiniz. Tekrar kaydettirmeniz gerekmiyor.</translation>
 <translation id="4617270414136722281">Uzantı seçenekleri</translation>
 <translation id="4619615317237390068">Diğer cihazlardan sekmeler</translation>
 <translation id="4620809267248568679">Bu ayar bir uzantı tarafından zorunlu tutuluyor.</translation>
@@ -2452,6 +2462,7 @@
 <translation id="4790972063719531840">Teşhis ve kullanım verilerini Google'a otomatik olarak gönder</translation>
 <translation id="4792711294155034829">&amp;Sorun Bildirin...</translation>
 <translation id="479536056609751218">Web sayfası, Sadece HTML</translation>
+<translation id="4798236378408895261"><ph name="BEGIN_LINK" />Bluetooth Günlükleri<ph name="END_LINK" /> ekle (Google dahili)</translation>
 <translation id="479989351350248267">ara</translation>
 <translation id="4801448226354548035">Hesapları gizle</translation>
 <translation id="4801512016965057443">Mobil veri dolaşımına izin ver</translation>
@@ -2518,6 +2529,7 @@
 <translation id="4882473678324857464">Yer işaretlerine odaklan</translation>
 <translation id="4882831918239250449">Göz atma geçmişinizin Arama, reklamlar ve diğer hizmetleri kişiselleştirmek için nasıl kullanıldığını kontrol edin</translation>
 <translation id="4883178195103750615">Yer işaretlerini HTML dosyasına aktar...</translation>
+<translation id="4883274597792587930">Anahtarınızın arkasında yazılı olan adı bulun</translation>
 <translation id="4883436287898674711">Tüm <ph name="WEBSITE_1" /> siteleri</translation>
 <translation id="48838266408104654">&amp;Görev Yöneticisi</translation>
 <translation id="4883898390143004266">Uygulamaların konumu bulmasına yardımcı olun. Uygulamaların daha kolay konum bulmasına yardımcı olmak için Google'ın konum hizmetini kullanın. Google, konum verilerini düzenli olarak toplayabilir ve konum doğruluğu ile konuma dayalı hizmetleri iyileştirmek için bu verileri anonim bir şekilde kullanabilir. <ph name="BEGIN_LINK1" />Daha Fazla Bilgi<ph name="END_LINK1" /></translation>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">Yazı tipi boyutu</translation>
 <translation id="494286511941020793">Proxy Yapılandırması Yardımı</translation>
 <translation id="4945444280533270988">Smart Lock açık</translation>
-<translation id="494660967831069720">Kısmi veri</translation>
 <translation id="4953689047182316270">Erişilebilirlikle İlgili Etkinliklere Yanıt Verme</translation>
 <translation id="4953808748584563296">Varsayılan turuncu avatar</translation>
 <translation id="4955814292505481804">Yıllık</translation>
@@ -2991,6 +3002,7 @@
 <translation id="55601339223879446">Ekranda masaüstünüzün sınırlarını ayarlayın</translation>
 <translation id="5562781907504170924">Bu sekme bir Bluetooth Cihazına bağlı.</translation>
 <translation id="5563234215388768762">Google'da arama yapın veya bir URL yazın</translation>
+<translation id="5567950944308676169">Güvenlik anahtarınızı takın ve etkinleştirin</translation>
 <translation id="5567989639534621706">Uygulama önbellekleri</translation>
 <translation id="5568069709869097550">Oturum açılamıyor</translation>
 <translation id="5568144734023334204">Android depolama alanı</translation>
@@ -3238,6 +3250,7 @@
 <translation id="5931146425219109062">Ziyaret ettiğiniz web sitelerindeki tüm verilerinizi okuma ve değiştirme</translation>
 <translation id="5932881020239635062">Seri numarası</translation>
 <translation id="5933376509899483611">Saat dilimi</translation>
+<translation id="5938002010494270685">Güvenlik yeni sürümü mevcut</translation>
 <translation id="5939518447894949180">Sıfırla</translation>
 <translation id="5939847200023027600">PDF Birleştirme Hizmeti</translation>
 <translation id="5941153596444580863">Kişi ekle...</translation>
@@ -3274,6 +3287,7 @@
 <translation id="6006484371116297560">Klasik</translation>
 <translation id="6007237601604674381">Taşıma başarısız oldu. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Sesli arama özelliği dilinizde kullanılamaz.</translation>
+<translation id="6009781704028455063">Yerleşik sensör</translation>
 <translation id="6010869025736512584">Video girişine erişiliyor</translation>
 <translation id="6011193465932186973">Parmak izi</translation>
 <translation id="6011449291337289699">Site verilerini temizle</translation>
@@ -3284,6 +3298,7 @@
 <translation id="6020431688553761150">Sunucu, bu kaynağa erişmeniz için yetki vermedi.</translation>
 <translation id="602251597322198729">Bu site birden çok dosyayı indirmeye çalışıyor. Buna izin vermek istiyor musunuz?</translation>
 <translation id="6022526133015258832">Tam Ekranı Aç</translation>
+<translation id="6022705094403139349">Güvenlik anahtarınızı eşlemeye hazır mısınız?</translation>
 <translation id="6023643151125006053">Bu cihaz (SN: <ph name="SERIAL_NUMBER" />) <ph name="SAML_DOMAIN" /> yöneticisi tarafından kilitlendi.</translation>
 <translation id="6025215716629925253">Yığın İzleme</translation>
 <translation id="6026047032548434446">Uygulama Yüklensin mi?</translation>
@@ -3347,6 +3362,7 @@
 <translation id="6105877918873366097">Son erişim zamanı</translation>
 <translation id="6107012941649240045">Verilen:</translation>
 <translation id="6112294629795967147">Yeniden boyutlandırmak için dokunun</translation>
+<translation id="6112931163620622315">Telefonunuzu kontrol edin</translation>
 <translation id="6112952769866305444"><ph name="PROFILE_NAME" />, <ph name="USERNAME" /> kişisini düzenleyin</translation>
 <translation id="6116338172782435947">Panoya kopyalanan metin ve resimleri görme</translation>
 <translation id="6116921718742659598">Dil ve giriş ayarlarını değiştir</translation>
@@ -3392,6 +3408,7 @@
 <translation id="6169666352732958425">Masaüstü yayınlanamıyor.</translation>
 <translation id="6171948306033499786">Yazdırmayı duraklat</translation>
 <translation id="6175314957787328458">Microsoft Etki Alanı GUID'si</translation>
+<translation id="6176043333338857209">Bluetooth, güvenlik anahtarınızla iletişim kurmak için geçici olarak açılacak</translation>
 <translation id="6178664161104547336">Sertifika seç</translation>
 <translation id="6181431612547969857">İndirme engellendi</translation>
 <translation id="6185132558746749656">Cihaz Konumu</translation>
@@ -3479,6 +3496,7 @@
 <translation id="6311220991371174222">Profiliniz açılırken bir sorun oluştuğundan Chrome başlatılamıyor. Chrome'u yeniden başlatmayı deneyin.</translation>
 <translation id="6312400084708441752">Bilgisayarınızdaki zararlı yazılımlar, sistem ayarları ve işlemlerle ilgili bilgileri içerir</translation>
 <translation id="6312403991423642364">Bilinmeyen ağ hatası</translation>
+<translation id="6313320178014547270">Bu web sitesine kaydettirilmemiş bir anahtar kullanıyorsunuz</translation>
 <translation id="6313641880021325787">VR'DAN ÇIK</translation>
 <translation id="6314819609899340042">Bu <ph name="IDS_SHORT_PRODUCT_NAME" /> cihazında hata ayıklama özelliklerini başarıyla etkinleştirdiniz.</translation>
 <translation id="6315493146179903667">Tümünü Öne Getir</translation>
@@ -3523,7 +3541,6 @@
 <translation id="6384275966486438344">Arama ayarlarınızı <ph name="SEARCH_HOST" /> olarak değiştirme</translation>
 <translation id="6385543213911723544">Siteler çerez verilerini kaydedebilir ve okuyabilir</translation>
 <translation id="6388429472088318283">Dil ara</translation>
-<translation id="6388771388956873507">Cihazınızın parmak izi sensörünü bulun ve parmağınızla sensöre dokunun</translation>
 <translation id="6390799748543157332">Bu pencerede görüntülediğiniz sayfalar, göz atma geçmişinde görünmez ve açık olan tüm Misafir pencerelerini kapattığınızda bilgisayarda çerez gibi başka izler bırakmaz. Ancak indirdiğiniz dosyalar saklanır.</translation>
 <translation id="6390994422085833176">Kurulumun ardından senkronizasyon ve kişiselleştirme özelliklerini incele</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />Sistem bilgileri<ph name="END_LINK1" /> ve <ph name="BEGIN_LINK2" />metrikleri<ph name="END_LINK2" /> gönder</translation>
@@ -3535,6 +3552,7 @@
 <translation id="6399774419735315745">Casus</translation>
 <translation id="6401445054534215853">Raf öğesi 1</translation>
 <translation id="6404511346730675251">Yer işaretini düzenle</translation>
+<translation id="6405510437656969977">PIN'i girmek için hazır olduğunuzda devam edin</translation>
 <translation id="6406303162637086258">Tarayıcı yeniden başlatmasını simüle et</translation>
 <translation id="6406506848690869874">Senkronizasyon</translation>
 <translation id="6408118934673775994"><ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> ve <ph name="WEBSITE_3" /> web sitelerinde verilerinizi okuma ve değiştirme</translation>
@@ -3653,6 +3671,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Masaüstü içeriği paylaşıldı</translation>
 <translation id="6580151766480067746">ARC Sürümü</translation>
 <translation id="6581162200855843583">Google Drive bağlantısı</translation>
+<translation id="6582080224869403177">Güvenliğinizi yeni sürüme geçirmek için <ph name="DEVICE_TYPE" /> cihazınızı sıfırlayın.</translation>
 <translation id="6582421931165117398">Kişisel bilgilerinizi korumak için şifrenizi hemen değiştirin. Şifrenizi değiştirebilmek için önce oturum açmanız gerekir.</translation>
 <translation id="6583851739559471707">Araya giren reklamlar gösterme eğiliminde olan sitelerde engellendi (önerilen)</translation>
 <translation id="6584878029876017575">Microsoft Ömür Boyu İmzalama</translation>
@@ -3702,6 +3721,7 @@
 <translation id="6644846457769259194">Cihazınız güncelleniyor (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">Netscape Sertifika Yetki İptali URL'si</translation>
 <translation id="6647838571840953560">Şu anda <ph name="CHANNEL_NAME" /> kanalında</translation>
+<translation id="6648051959475508072">Güvenlik anahtarı etkinleştirildi...</translation>
 <translation id="6648911618876616409">Önemli bir güncelleme yüklenmeye hazır. Başlamak için oturum açın.</translation>
 <translation id="6649018507441623493">Bir saniye...</translation>
 <translation id="6649563841575838401">Arşiv biçimi desteklenmiyor veya dosya bozuk.</translation>
@@ -3777,6 +3797,7 @@
 <translation id="6759193508432371551">Fabrika ayarlarına sıfırlama</translation>
 <translation id="6767639283522617719">Alan adına katılınamıyor. Kuruluş birimi ayarlarının doğruluğundan emin olun.</translation>
 <translation id="6769712124046837540">Yazıcı ekleniyor...</translation>
+<translation id="6770664076092644100">NFC kullanarak doğrula</translation>
 <translation id="6771503742377376720">Sertifika Yetkilisidir</translation>
 <translation id="6777817260680419853">Yönlendirme engellendi</translation>
 <translation id="6778959797435875428">Sitelerin sesini aç</translation>
@@ -3812,6 +3833,7 @@
 <translation id="6823506025919456619">Cihazlarınızı görebilmek için Chrome'da oturum açmanız gerekir.</translation>
 <translation id="6824564591481349393">&amp;E-posta Adresini Kopyala</translation>
 <translation id="6825184156888454064">Ada göre sırala</translation>
+<translation id="6826872289184051766">USB kullanarak doğrula</translation>
 <translation id="6827236167376090743">Bu video sürekli olarak oynatılacaktır.</translation>
 <translation id="6828153365543658583">Yalnızca aşağıdaki kullanıcıların oturum açmasına izin ver:</translation>
 <translation id="6828860976882136098">Otomatik güncellemeler tüm kullanıcılar için ayarlanamadı (yayın öncesi yürütme hatası: <ph name="ERROR_NUMBER" />)</translation>
@@ -3845,6 +3867,7 @@
 <translation id="6880587130513028875">Bu sayfadaki resimler engellendi.</translation>
 <translation id="6883319974225028188">Hay aksi! Sistem cihaz yapılandırmasını kaydedemedi.</translation>
 <translation id="6885771755599377173">Sistem Bilgisi Önizlemesi</translation>
+<translation id="6886476658664859389">NFC güvenlik anahtarı</translation>
 <translation id="6886871292305414135">Bağlan&amp;tıyı yeni sekmede aç</translation>
 <translation id="6892812721183419409">Bağlantıyı <ph name="USER" /> Olarak Aç</translation>
 <translation id="6896758677409633944">Kopyala</translation>
@@ -4010,6 +4033,7 @@
 <translation id="713122686776214250">&amp;Sayfa ekle...</translation>
 <translation id="7133578150266914903">Yöneticiniz bu cihazı ilk haline döndürüyor (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Metni Küçült</translation>
+<translation id="7135729336746831607">Bluetooth açılsın mı?</translation>
 <translation id="7136694880210472378">Varsayılan yap</translation>
 <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> Uygulamasına Hoş Geldiniz</translation>
 <translation id="7136993520339022828">Hata oluştu. Lütfen diğer görselleri seçerek tekrar deneyin.</translation>
@@ -4055,6 +4079,7 @@
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" silindi</translation>
 <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> indiriliyor...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Sayfadan çık}other{Sayfalardan çık}}</translation>
+<translation id="721467499098558573">Güvenlik anahtarınızın üzerindeki düğmeyi en az 5 saniye süreyle basılı tutun</translation>
 <translation id="7216409898977639127">Hücresel sağlayıcı</translation>
 <translation id="7216595297012131718">Dilleri tercihinize göre sıralayın</translation>
 <translation id="7220019174139618249">Şifreler "<ph name="FOLDER" />" klasörüne aktarılamıyor</translation>
@@ -4090,6 +4115,7 @@
 <translation id="7256710573727326513">Sekme içinde aç</translation>
 <translation id="725758059478686223">Yazdırma Hizmeti</translation>
 <translation id="7257666756905341374">Kopyaladığınız ve yapıştırdığınız verileri okuma</translation>
+<translation id="7260764918845374269">Güvenlik anahtarınızı görebilmeniz için eşleme modunda olması gerekir. Anahtarınızdaki düğmeye en az 5 saniye süreyle basın.</translation>
 <translation id="7262004276116528033">Bu oturum açma hizmeti, <ph name="SAML_DOMAIN" /> tarafından barındırılıyor.</translation>
 <translation id="7268365133021434339">Sekmeleri Kapat</translation>
 <translation id="7268659760406822741">Kullanılabilir hizmetler</translation>
@@ -4126,7 +4152,6 @@
 <translation id="7309257895202129721">Denetimleri &amp;göster</translation>
 <translation id="7310598146671372464">Giriş yapılamadı. Sunucu belirtilen Kerberos şifreleme türlerini desteklemiyor. Lütfen yöneticinizle iletişim kurun.</translation>
 <translation id="7311079019872751559">Korumalı alan içinde olmayan eklenti erişimi</translation>
-<translation id="7311891583377621132">Parmak izinizin farklı bir kısmının yakalanması için parmağınızı çok az hareket ettirin</translation>
 <translation id="7317680720589234980">Ekran kilidi ve oturum açma seçenekleri</translation>
 <translation id="7321545336522791733">Sunucuya ulaşılamıyor</translation>
 <translation id="7324297612904500502">Beta Forumu</translation>
@@ -4208,6 +4233,7 @@
 <translation id="7464490149090366184">Sıkıştırma başarısız oldu, öğe mevcut: "$1"</translation>
 <translation id="7465778193084373987">Netscape Sertifika İptali URL'si</translation>
 <translation id="7469406957790636836">Bu özelliği açmak için önce <ph name="BEGIN_LINK" />Dil ve giriş<ph name="END_LINK" />'te yazım denetimini etkinleştirin</translation>
+<translation id="7469518857922439236">Size bildirimler gönderir ve Mesaj göndermek için bu bilgisayarın hatırlanmasını varsayılan ayar yapar</translation>
 <translation id="7469894403370665791">Bu ağa otomatik olarak bağlan</translation>
 <translation id="747114903913869239">Hata: Uzantının kodu çözülemiyor</translation>
 <translation id="7473753388963818366"><ph name="DEVICE_TYPE" /> cihazınızı sizin için hazırlayalım</translation>
@@ -4257,6 +4283,7 @@
 <translation id="7531779363494549572">Ayarlar &gt; Uygulamalar ve bildirimler &gt; Bildirimler'e gidin.</translation>
 <translation id="7536709149194614609">Lütfen cihazı yeniden başlatın ve daha sonra tekrar deneyin.</translation>
 <translation id="7537601449003285327">Görev çubuğuna sabitle</translation>
+<translation id="7539856059004947393">Bluetooth güvenlik anahtarı</translation>
 <translation id="7540972813190816353">Güncelleme olup olmadığı kontrol edilirken bir hata oluştu: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Bu <ph name="IDS_SHORT_PRODUCT_NAME" /> cihazında hata ayıklama özelliklerini etkinleştir</translation>
 <translation id="7544853251252956727">Karıştır</translation>
@@ -4359,6 +4386,7 @@
 <translation id="7709152031285164251">Başarısız - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Yayınla...</translation>
 <translation id="7711920809702896782">Resim bilgileri</translation>
+<translation id="7712740978240882272">Chromebook'unuzun kilidini telefonunuzla açın. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503"><ph name="EXTENSION_ID" /> kimlikli bilinmeyen uzantı</translation>
 <translation id="7714307061282548371"><ph name="DOMAIN" /> tarafından gönderilen çerezlere izin veriliyor</translation>
 <translation id="7714464543167945231">Sertifika</translation>
@@ -4573,6 +4601,7 @@
 <translation id="7984068253310542383"><ph name="DISPLAY_NAME" /> adlı ekranı yansıt</translation>
 <translation id="7986295104073916105">Kaydedilmiş şifre ayarlarını okuma ve değiştirme</translation>
 <translation id="7987764905897278458">Google zekasından daha fazla yararlanın</translation>
+<translation id="798835209536175951">Chromebook'unuzdan kısa mesaj gönderip alın. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Erişilebilirlik özelliklerini etkinleştir</translation>
 <translation id="7994702968232966508">EAP yöntemi</translation>
 <translation id="799547531016638432">Kısayolu kaldır</translation>
@@ -4705,6 +4734,7 @@
 <translation id="8185331656081929126">Ağ üzerinde yeni yazıcılar algılandığında bildirim göster</translation>
 <translation id="8186609076106987817">Sunucu dosyayı bulamadı.</translation>
 <translation id="8188120771410500975">&amp;Metin alanlarında yazım denetimi yap</translation>
+<translation id="8188389033983459049">Cihaz ayarlarınızı kontrol edin ve devam etmek için açın</translation>
 <translation id="8190193592390505034"><ph name="PROVIDER_NAME" /> ağına bağlanılıyor</translation>
 <translation id="8191230140820435481">Uygulamalarınızı, uzantılarınızı ve temalarınızı yönetme</translation>
 <translation id="8191453843330043793">V8 Proxy Çözümleyici</translation>
@@ -4799,6 +4829,7 @@
 <translation id="8353683614194668312">Şunları yapabilir:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Sayfalar geri yüklensin mi?</translation>
+<translation id="8362993567435070757">Anahtarınızın arkasındaki 6 basamaklı PIN'i bulun</translation>
 <translation id="8363095875018065315">kararlı</translation>
 <translation id="8363142353806532503">Mikrofon engellendi</translation>
 <translation id="8366396658833131068">Ağ bağlantınız geri yüklendi. Lütfen farklı bir ağ seçin veya kiosk uygulamanızı başlatmak için "Devam Et" düğmesine basın.</translation>
@@ -4807,6 +4838,7 @@
 <translation id="8371695176452482769">Şimdi konuşun</translation>
 <translation id="8372369524088641025">Hatalı WEP anahtarı</translation>
 <translation id="8373553483208508744">Sekmelerin sesini kapat</translation>
+<translation id="8379878387931047019">Bu cihaz, bu web sitesi tarafından istenen türde güvenlik anahtarını desteklemiyor</translation>
 <translation id="8382913212082956454">E-posta &amp;adresini kopyala</translation>
 <translation id="8386903983509584791">Tarama tamamlandı</translation>
 <translation id="8389492867173948260">Bu uzantının ziyaret ettiğiniz web sitelerindeki tüm verilerinizi okuması ve değiştirmesine izin verin:</translation>
@@ -4925,6 +4957,7 @@
 <translation id="8557930019681227453">Manifest</translation>
 <translation id="8559694214572302298">Görsel Kod Çözücüsü</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Okumaya Devam Et</translation>
 <translation id="8565650234829130278">Uygulamanın eski sürümüne geçilmeye çalışıldı.</translation>
 <translation id="8569002732135253578"><ph name="DOCUMENT_NAME" /> şimdi yazdırılıyor</translation>
 <translation id="8569682776816196752">Hiçbir hedef bulunamadı</translation>
@@ -4965,7 +4998,6 @@
 <translation id="8639047128869322042">Zararlı yazılımlar denetleniyor...</translation>
 <translation id="8639963783467694461">Otomatik doldurma ayarları</translation>
 <translation id="8642171459927087831">Erişim Verisi</translation>
-<translation id="8642267168767642381">Parmak hareketi çok yavaştı.</translation>
 <translation id="8642947597466641025">Metni Büyüt</translation>
 <translation id="8643418457919840804">Devam etmek için bir seçenek belirleyin:</translation>
 <translation id="8645354835496065562">Sensör erişimine izin vermeye devam et</translation>
@@ -4980,6 +5012,7 @@
 <translation id="8655295600908251630">Kanal</translation>
 <translation id="8655319619291175901">Hata, bir sorun var.</translation>
 <translation id="8655972064210167941">Şifreniz doğrulanamadığı için oturum açma işlemi başarısız oldu. Lütfen yöneticinizle iletişime geçin veya tekrar deneyin.</translation>
+<translation id="8656619792520327915">Başka bir Bluetooth güvenlik anahtarı ekle</translation>
 <translation id="8656768832129462377">Kontrol etme</translation>
 <translation id="8658595122208653918">Yazıcı seçeneklerini değiştir...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" />, ekranınızı ve sesinizi <ph name="TAB_NAME" /> ile paylaşıyor.</translation>
@@ -5102,6 +5135,7 @@
 <translation id="8814687660896548945">Arşiv taranırken lütfen bekleyin...</translation>
 <translation id="881799181680267069">Diğerlerini Gizle</translation>
 <translation id="8818152010000655963">Duvar kağıdı</translation>
+<translation id="8818958672113348984">Telefonumu kullanarak doğrula</translation>
 <translation id="8820817407110198400">Favoriler</translation>
 <translation id="8821045908425223359">IP adresini otomatik olarak yapılandır</translation>
 <translation id="882204272221080310">Daha fazla güvenlik için donanım yazılımını güncelle.</translation>
@@ -5132,11 +5166,13 @@
 <translation id="8872155268274985541">Geçersiz Kiosk harici güncelleme manifest dosyası bulundu. Kiosk uygulaması güncellenemedi. Lütfen USB çubuğunu çıkarın.</translation>
 <translation id="8874184842967597500">Bağlı değil</translation>
 <translation id="8876215549894133151">Biçim:</translation>
+<translation id="8876307312329369159">Bu ayar demo oturumunda değiştirilemez.</translation>
 <translation id="8876309039915144086">Şifre oluştur...</translation>
 <translation id="8877448029301136595">[üst dizin]</translation>
 <translation id="8879284080359814990">&amp;Sekme Olarak Göster</translation>
 <translation id="8883847527783433352">Başka bir Hesapla Senkronize Et</translation>
 <translation id="8885197664446363138">Smart Lock kullanılamıyor</translation>
+<translation id="88870264962436283"><ph name="APP_NAME" /> uygulamasında Touch ID'yi kullanma</translation>
 <translation id="8888432776533519951">Renk:</translation>
 <translation id="8890516388109605451">Kaynaklar</translation>
 <translation id="8892168913673237979">Her şey hazır!</translation>
@@ -5157,6 +5193,7 @@
 <translation id="8915370057835397490">Öneriler yükleniyor</translation>
 <translation id="8916476537757519021">Gizli Alt Çerçeve: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Tüm şifrelerinize tüm cihazlarınızda ulaşmak için oturum açın ve senkronizasyonu etkinleştirin.</translation>
+<translation id="8921366488406707015">Güvenlik anahtarınız doğrulanıyor...</translation>
 <translation id="8922013791253848639">Bu sitede her zaman reklamlara izin ver</translation>
 <translation id="8925458182817574960">&amp;Ayarlar</translation>
 <translation id="8926389886865778422">Bir daha sorma</translation>
@@ -5265,6 +5302,7 @@
 <translation id="9066782832737749352">Metin-Konuşma</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" />, kaydettiğiniz şifrelerle uygun sitelerde ve uygulamalarda otomatik olarak oturum açmanızı sağlar.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Anahtarınızı hesabınızda oturum açarken kullanabilmeniz için bu cihazla eşleyin</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB fare bağlandı</translation>
 <translation id="9076523132036239772">Maalesef, e-postanız veya şifreniz doğrulanamadı. Önce bir ağa bağlanmayı deneyin.</translation>
@@ -5326,7 +5364,6 @@
 <translation id="916607977885256133">Pencere içinde Pencere</translation>
 <translation id="9169496697824289689">Klavye kısayollarını görüntüle</translation>
 <translation id="9169931577761441333"><ph name="APP_NAME" /> uygulamasını Ana ekrana ekle</translation>
-<translation id="9170397650136757332">Şimdi parmak izinizin tüm farklı noktalarını yakalamak için parmağınızı çok az hareket ettirin</translation>
 <translation id="9170848237812810038">&amp;Geri al</translation>
 <translation id="9170884462774788842">Bilgisayarınızdaki başka bir program, Chrome'un çalışma şeklini değiştirebilecek bir tema ekledi.</translation>
 <translation id="9173995187295789444">Bluetooth cihazları taranıyor...</translation>
@@ -5390,6 +5427,7 @@
 <translation id="971774202801778802">Yer işareti URL'si</translation>
 <translation id="973473557718930265">Çık</translation>
 <translation id="974555521953189084">Senkronizasyonu başlatmak için parolanızı girin</translation>
+<translation id="977640333593638907">Çoğu anahtarı kullanmak için düğmeye basmanız yeterlidir</translation>
 <translation id="981121421437150478">Çevrimdışı</translation>
 <translation id="983511809958454316">Bu özellik VR'da desteklenmiyor</translation>
 <translation id="984275831282074731">Ödeme yöntemleri</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index dadcfdc..afbc012d 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Елемент полиці 5</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">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Використовувати синхронізацію та всі сервіси</translation>
 <translation id="1272079795634619415">Зупинити</translation>
-<translation id="1272242203003205253">Партнери Google співпрацюють з Асистентом, щоб допомагати вам</translation>
 <translation id="1272978324304772054">Цей обліковий запис користувача не належить домену, в якому зареєстровано пристрій. Якщо ви хочете зареєструватися в іншому домені, спершу потрібно виконати процедуру відновлення пристрою.</translation>
 <translation id="1274977772557788323">Налаштування пам’яті Adobe Flash Player</translation>
 <translation id="1274997165432133392">Файли cookie та інші дані із сайтів</translation>
@@ -332,6 +332,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>
@@ -367,6 +368,7 @@
 <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">Автоматичний режим термінала</translation>
@@ -383,6 +385,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>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Не вдалося виявити телефон</translation>
 <translation id="1616206807336925449">Для цього розширення не потрібні спеціальні дозволи.</translation>
 <translation id="1616298854599875024">Не вдається імпортувати розширення <ph name="IMPORT_NAME" />, оскільки воно не є спільним модулем</translation>
-<translation id="161707228174452095">Відбиток пальця додано.</translation>
 <translation id="1618268899808219593">Довідковий центр</translation>
 <translation id="162035744160882748">Увімкнути синхронізацію, персоналізацію й інші служби Google</translation>
 <translation id="1620510694547887537">Камера</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">Архів у форматі RAR</translation>
 <translation id="2034346955588403444">Додати іншу мережу Wi-Fi</translation>
 <translation id="203574396658008164">Увімкнути створення нотаток на заблокованому екрані</translation>
-<translation id="2039623879703305659">Ви провели пальцем надто швидко</translation>
 <translation id="2040460856718599782">На жаль, під час спроби автентифікації сталася помилка. Ретельно перевірте свої облікові дані для входу та повторіть спробу.</translation>
 <translation id="2043818754674261542">Відстань, потрібна, щоб розблокувати цей пристрій <ph name="DEVICE_TYPE" /></translation>
 <translation id="204497730941176055">Ім'я шаблону сертифіката Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Видалити сертифікат сервера "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Автоматичний вхід</translation>
 <translation id="2101225219012730419">Версія:</translation>
-<translation id="2107494551712864447">Додати відбиток пальця</translation>
 <translation id="2112877397266219826">Увімкніть сенсорний контролер, щоб налаштувати Chromebox для відеоконференцій</translation>
 <translation id="21133533946938348">Закріпити вкладку</translation>
 <translation id="2113479184312716848">Відкрити &amp;файл...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Google Desktop</translation>
 <translation id="2526619973349913024">Перевірити наявність оновлення</translation>
 <translation id="2527167509808613699">Будь-яке з’єднання</translation>
-<translation id="2532026602297547439">Датчик забруднено</translation>
 <translation id="2532589005999780174">Режим високого контрасту</translation>
 <translation id="253434972992662860">&amp;Пауза</translation>
 <translation id="2534460670861217804">Захищений проксі-сервер HTTP</translation>
@@ -1197,6 +1196,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>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">Створити резервні копії фотографій і відео</translation>
 <translation id="3060379269883947824">Увімкнути службу Читання з екрана</translation>
 <translation id="3061707000357573562">Служба виправлень</translation>
-<translation id="3064410671692449875">Недостатньо даних</translation>
 <translation id="3065041951436100775">Відповідь "Вкладка закрилась".</translation>
 <translation id="3067198179881736288">Установити додаток?</translation>
 <translation id="3067198360141518313">Запустити цей плагін</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">Нова &amp;вкладка</translation>
 <translation id="3288047731229977326">Розширення, які працюють у режимі розробника, можуть пошкодити ваш комп’ютер. Якщо ви не розробник, вимкніть їх заради безпеки.</translation>
 <translation id="3289856944988573801">Щоб перевірити наявність оновлень, скористайтеся мережею Ethernet чи Wi-Fi.</translation>
+<translation id="3292421191230118801">Продовжуйте переглядати сайт із мобільного пристрою на Chromebook</translation>
 <translation id="32939749466444286">Не вдалося запустити контейнер Linux. Повторіть спробу.</translation>
 <translation id="3294437725009624529">Гість</translation>
 <translation id="329838636886466101">Відновити</translation>
@@ -1552,6 +1552,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>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">Пошукову систему змінено на <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Не вдалося завантажити додаток для терміналів.</translation>
 <translation id="3564334271939054422">Можливо, щоб під’єднатися до цієї мережі Wi-Fi (<ph name="NETWORK_ID" />), потрібно перейти на її сторінку входу.</translation>
+<translation id="3564848315152754834">Ключ безпеки USB</translation>
 <translation id="3566721612727112615">Немає сайтів</translation>
 <translation id="3569382839528428029">Надати програмі <ph name="APP_NAME" /> доступ до вашого екрана?</translation>
 <translation id="3570985609317741174">Веб-вміст</translation>
@@ -1741,6 +1743,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">Вкладка 1</translation>
 <translation id="3636096452488277381">Вітаємо, <ph name="USER_GIVEN_NAME" />!</translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">Значок розширення</translation>
 <translation id="3665589677786828986">Chrome виявив, що інша програма пошкодила деякі ваші налаштування, і відновив початкові налаштування за умовчанням.</translation>
 <translation id="3668570675727296296">Налаштування мови</translation>
+<translation id="3668801437375206837">Щоб краще виявляти проблеми з Bluetooth, працівники компанії Google можуть включати у звіти додаткові журнали Bluetooth. Якщо цю опцію вибрано, ваш звіт міститиме журнали btsnoop і HCI із поточного сеансу з мінімальною кількістю ідентифікаційних даних. Доступ до цих журналів матимуть лише адміністратори групи продуктів ОС Chrome в Listnr. Журнали буде видалено назавжди через 90 днів.</translation>
 <translation id="3668823961463113931">Обробники</translation>
 <translation id="3670229581627177274">Увімкніть Bluetooth</translation>
 <translation id="3672681487849735243">Виявлено заводську помилку</translation>
@@ -1780,6 +1784,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>
@@ -1803,6 +1808,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>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">Вітаємо в Hangouts Meet</translation>
 <translation id="3861241522664181545">Сторінку призупинено.</translation>
 <translation id="3862134173397075045">Вітаємо в Cast для Chrome!</translation>
+<translation id="3862693525629180217">Підтвердити через вбудований датчик</translation>
 <translation id="3862788408946266506">Додаток з атрибутом маніфесту "kiosk_only" потрібно встановлювати в режимі термінала ОС Chrome</translation>
 <translation id="3865414814144988605">Роздільна здатність</translation>
 <translation id="386548886866354912">Архівувати за допомогою розширення "<ph name="EXTENSION_NAME" />"</translation>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">Перш ніж відновити налаштування за допомогою функції "Очищення", потрібно перезапустити пристрій.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Переглянути в магазині</translation>
+<translation id="4058647953897694817">Підтвердити через Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Перевірити документ зараз</translation>
 <translation id="406070391919917862">Фонові програми</translation>
@@ -2041,6 +2049,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>
@@ -2140,6 +2149,7 @@
 <translation id="4250229828105606438">Знімок екрана</translation>
 <translation id="4250680216510889253">ні</translation>
 <translation id="4252852543720145436">Ідентифікатори захищеного вмісту</translation>
+<translation id="4252899949534773101">Bluetooth вимкнено</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – надано доступ до вмісту вкладки</translation>
 <translation id="4254813446494774748">Мова перекладу:</translation>
 <translation id="425573743389990240">Швидкість розряджання акумулятора у ватах (від’ємне значення означає, що акумулятор заряджається)</translation>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">Chrome може знайти на вашому комп’ютері шкідливе програмне забезпечення й видалити його</translation>
 <translation id="4481530544597605423">Відключені пристрої</translation>
 <translation id="4482194545587547824">Google може використовувати вашу історію веб-перегляду, щоб персоналізувати Пошук та інші служби Google</translation>
-<translation id="4493287891836751813">Представляємо Google Асистент</translation>
 <translation id="4495419450179050807">Не показувати на цій сторінці</translation>
+<translation id="449938344715680828">Щоб вийти, натисніть клавіші |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />|, а потім |<ph name="ACCELERATOR3" />|</translation>
 <translation id="4499718683476608392">Вмикає "Автозаповнення" для кредитних карток, щоб вводити дані у форми одним кліком</translation>
 <translation id="4500114933761911433">Плагін <ph name="PLUGIN_NAME" /> аварійно завершив роботу</translation>
 <translation id="450099669180426158">Значок знака оклику</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">Автентифікацію скасовано під час під’єднання до "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">Файл <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Інші...</translation>
-<translation id="4576537685267142337">Підніміть палець і знову торкніться датчика</translation>
 <translation id="4576541033847873020">Підключити пристрій Bluetooth</translation>
 <translation id="4579581181964204535">Не вдається транслювати з <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Дійсно видалити елементи $1?</translation>
@@ -2343,6 +2352,7 @@
 <translation id="4611114513649582138">Доступне передавання даних</translation>
 <translation id="4613271546271159013">Розширення змінило сторінку, яка з’являється, коли ви відкриваєте нову вкладку.</translation>
 <translation id="4615586811063744755">файли cookie не вибрано</translation>
+<translation id="4615618657481886098">Ви вже зареєстрували цей ключ. Не потрібно робити це знову.</translation>
 <translation id="4617270414136722281">Параметри розширень</translation>
 <translation id="4619615317237390068">Вкладки з інших пристроїв</translation>
 <translation id="4620809267248568679">Це налаштування встановлюється розширенням.</translation>
@@ -2452,6 +2462,7 @@
 <translation id="4790972063719531840">Автоматично надсилати в Google дані про діагностику та використання</translation>
 <translation id="4792711294155034829">&amp;Повідомити про проблему...</translation>
 <translation id="479536056609751218">Веб-сторінка, тільки HTML</translation>
+<translation id="4798236378408895261">Вкласти <ph name="BEGIN_LINK" />журнали Bluetooth<ph name="END_LINK" /> (для внутрішнього використання в Google)</translation>
 <translation id="479989351350248267">пошук</translation>
 <translation id="4801448226354548035">Сховати облікові записи</translation>
 <translation id="4801512016965057443">Дозволити роумінг мобільних даних</translation>
@@ -2518,6 +2529,7 @@
 <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. Ми можемо періодично збирати геодані й анонімно обробляти їх, щоб покращувати точність визначення місцезнаходження та роботу сервісів, які працюють на основі геоданих. <ph name="BEGIN_LINK1" />Докладніше<ph name="END_LINK1" /></translation>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">Розмір шрифту</translation>
 <translation id="494286511941020793">Довідка про конфігурацію проксі-сервера</translation>
 <translation id="4945444280533270988">Smart Lock увімкнено</translation>
-<translation id="494660967831069720">Часткові дані</translation>
 <translation id="4953689047182316270">реагувати на події спеціальних можливостей</translation>
 <translation id="4953808748584563296">Стандартний оранжевий аватар</translation>
 <translation id="4955814292505481804">Річна ліцензія</translation>
@@ -2991,6 +3002,7 @@
 <translation id="55601339223879446">Налаштуйте межі робочого столу на дисплеї</translation>
 <translation id="5562781907504170924">Цю вкладку під’єднано до пристрою Bluetooth.</translation>
 <translation id="5563234215388768762">Шукайте в Google або введіть URL-адресу</translation>
+<translation id="5567950944308676169">Підключіть і активуйте ключ безпеки</translation>
 <translation id="5567989639534621706">Кеші програми</translation>
 <translation id="5568069709869097550">Не вдалося ввійти</translation>
 <translation id="5568144734023334204">Пам’ять Android</translation>
@@ -3237,6 +3249,7 @@
 <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="5941153596444580863">Додати користувача…</translation>
@@ -3273,6 +3286,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>
@@ -3283,6 +3297,7 @@
 <translation id="6020431688553761150">Сервер не авторизував ваш доступ до цього ресурсу.</translation>
 <translation id="602251597322198729">Здійснюється спроба завантажити декілька файлів із цього сайта. Надати дозвіл на завантаження?</translation>
 <translation id="6022526133015258832">Відкрити на весь екран</translation>
+<translation id="6022705094403139349">Готові підключити ключ безпеки?</translation>
 <translation id="6023643151125006053">Адміністратор домену <ph name="SAML_DOMAIN" /> заблокував цей пристрій (серійний номер <ph name="SERIAL_NUMBER" />).</translation>
 <translation id="6025215716629925253">Запис стека</translation>
 <translation id="6026047032548434446">Установити додаток?</translation>
@@ -3346,6 +3361,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>
@@ -3391,6 +3407,7 @@
 <translation id="6169666352732958425">Не вдається транслювати робочий стіл.</translation>
 <translation id="6171948306033499786">Призупинити друк</translation>
 <translation id="6175314957787328458">GUID домену Microsoft</translation>
+<translation id="6176043333338857209">Bluetooth буде тимчасово ввімкнено для обміну даними з ключем безпеки</translation>
 <translation id="6178664161104547336">Вибір сертифіката</translation>
 <translation id="6181431612547969857">Завантаження заблоковано</translation>
 <translation id="6185132558746749656">Місцезнаходження пристрою</translation>
@@ -3478,6 +3495,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>
@@ -3522,7 +3540,6 @@
 <translation id="6384275966486438344">Використовувати пошукову систему <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Сайти можуть зберігати та переглядати дані файлів cookie</translation>
 <translation id="6388429472088318283">Шукати мови</translation>
-<translation id="6388771388956873507">Знайдіть на пристрої сканер відбитків пальців і торкніться його</translation>
 <translation id="6390799748543157332">Сторінки, які ви переглядаєте в цьому вікні, не відображатимуться в історії веб-переглядача, а після закривання всіх вікон, відкритих у гостьовому режимі, не залишать у комп’ютері інших слідів, наприклад файлів cookie. Однак завантажені файли зберігаються.</translation>
 <translation id="6390994422085833176">Переглянути функції синхронізації та персоналізації після налаштування</translation>
 <translation id="6395423953133416962">Надсилати <ph name="BEGIN_LINK1" />інформацію про систему<ph name="END_LINK1" /> та <ph name="BEGIN_LINK2" />показники<ph name="END_LINK2" /></translation>
@@ -3534,6 +3551,7 @@
 <translation id="6399774419735315745">Шпигунка</translation>
 <translation id="6401445054534215853">Елемент полиці 1</translation>
 <translation id="6404511346730675251">Редагувати закладку</translation>
+<translation id="6405510437656969977">Продовжте, коли будете готові ввести PIN-код</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>
@@ -3652,6 +3670,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</translation>
@@ -3701,6 +3720,7 @@
 <translation id="6644846457769259194">Пристрій оновлюється (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL-адреса відкликання Центру сертифікації Netscape</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>
@@ -3776,6 +3796,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>
@@ -3811,6 +3832,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>
@@ -3844,6 +3866,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>
@@ -4009,6 +4032,7 @@
 <translation id="713122686776214250">Додати стор&amp;інку...</translation>
 <translation id="7133578150266914903">Адміністратор відновлює цей пристрій до попереднього стану (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Зменшити розмір тексту</translation>
+<translation id="7135729336746831607">Увімкнути Bluetooth?</translation>
 <translation id="7136694880210472378">Установити за умовчанням</translation>
 <translation id="7136984461011502314">Вас вітає <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Виявлено помилку. Повторіть спробу, вибравши інші зображення.</translation>
@@ -4054,6 +4078,7 @@
 <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{Закрити сторінки}few{Закрити сторінки}many{Закрити сторінки}other{Закрити сторінки}}</translation>
+<translation id="721467499098558573">Утримуйте кнопку на ключі безпеки принаймні 5 секунд</translation>
 <translation id="7216409898977639127">Постачальник мобільного зв’язку</translation>
 <translation id="7216595297012131718">Мови замовлень на основі ваших налаштувань</translation>
 <translation id="7220019174139618249">Не вдається експортувати паролі в папку "<ph name="FOLDER" />"</translation>
@@ -4089,6 +4114,7 @@
 <translation id="7256710573727326513">Відкрити у вкладці</translation>
 <translation id="725758059478686223">Служба друку</translation>
 <translation id="7257666756905341374">Читати дані, які ви копіюєте та вставляєте</translation>
+<translation id="7260764918845374269">Щоб переглянути ключ безпеки, він має бути в режимі підключення. Утримуйте кнопку на ключі безпеки принаймні 5 секунд.</translation>
 <translation id="7262004276116528033">Ця служба входу в обліковий запис зареєстрована в домені <ph name="SAML_DOMAIN" /></translation>
 <translation id="7268365133021434339">Закрити вкладки</translation>
 <translation id="7268659760406822741">Доступні сервіси</translation>
@@ -4125,7 +4151,6 @@
 <translation id="7309257895202129721">Показати &amp;елементи керування</translation>
 <translation id="7310598146671372464">Не вдалося ввійти. Сервер не підтримує вказані типи шифрування Kerberos. Зв’яжіться з адміністратором.</translation>
 <translation id="7311079019872751559">Доступ плагіна з неізольованим програмним середовищем</translation>
-<translation id="7311891583377621132">Трохи перемістіть палець, щоб зісканувати всі його частини</translation>
 <translation id="7317680720589234980">Параметри блокування екрана та входу</translation>
 <translation id="7321545336522791733">Сервер недоступний</translation>
 <translation id="7324297612904500502">Форум бета-версії</translation>
@@ -4207,6 +4232,7 @@
 <translation id="7464490149090366184">Помилка архівування, елемент існує: "$1"</translation>
 <translation id="7465778193084373987">URL-адреса відкликання сертифіката Netscape</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="7473753388963818366">Налаштуйте свій <ph name="DEVICE_TYPE" /></translation>
@@ -4256,6 +4282,7 @@
 <translation id="7531779363494549572">Перейдіть у меню "Налаштування" &gt; "Додатки та сповіщення" &gt; "Сповіщення".</translation>
 <translation id="7536709149194614609">Перезапустіть пристрій і повторіть спробу.</translation>
 <translation id="7537601449003285327">Закріпити на панелі завдань</translation>
+<translation id="7539856059004947393">Ключ безпеки Bluetooth</translation>
 <translation id="7540972813190816353">Під час перевірки наявності оновлень сталася помилка: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Увімкнути функції налагодження на цьому пристрої <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="7544853251252956727">Перемішати</translation>
@@ -4358,6 +4385,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">Файли cookie із сайту <ph name="DOMAIN" /> дозволено</translation>
 <translation id="7714464543167945231">Сертифікат</translation>
@@ -4573,6 +4601,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>
@@ -4705,6 +4734,7 @@
 <translation id="8185331656081929126">Показувати сповіщення, якщо в мережі виявлено нові принтери</translation>
 <translation id="8186609076106987817">Серверу не вдалося знайти файл.</translation>
 <translation id="8188120771410500975">&amp;Перевіряти правопис у текстових полях</translation>
+<translation id="8188389033983459049">Щоб продовжити, перегляньте налаштування пристрою й увімкніть Bluetooth</translation>
 <translation id="8190193592390505034">З'єднання з <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Керувати вашими програмами, розширеннями та темами</translation>
 <translation id="8191453843330043793">Засіб розпізнавання проксі-сервера V8</translation>
@@ -4799,6 +4829,7 @@
 <translation id="8353683614194668312">Може:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> (<ph name="COUNT" />)</translation>
 <translation id="8358685469073206162">Відновити сторінки?</translation>
+<translation id="8362993567435070757">Знайдіть шестизначний PIN-код на звороті ключа</translation>
 <translation id="8363095875018065315">стабільна</translation>
 <translation id="8363142353806532503">Заборонено використовувати мікрофон</translation>
 <translation id="8366396658833131068">З’єднання з мережею відновлено. Виберіть іншу мережу або натисніть кнопку "Продовжити" нижче, щоб запустити додаток для терміналів.</translation>
@@ -4807,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>
@@ -4925,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>
@@ -4965,7 +4998,6 @@
 <translation id="8639047128869322042">Пошук шкідливих програм…</translation>
 <translation id="8639963783467694461">Налаштування автозаповнення</translation>
 <translation id="8642171459927087831">Маркер доступу</translation>
-<translation id="8642267168767642381">Ви провели пальцем надто повільно</translation>
 <translation id="8642947597466641025">Збільшити розмір тексту</translation>
 <translation id="8643418457919840804">Щоб продовжити, виберіть опцію:</translation>
 <translation id="8645354835496065562">Дозволяти доступ до датчиків</translation>
@@ -4980,6 +5012,7 @@
 <translation id="8655295600908251630">Канал</translation>
 <translation id="8655319619291175901">На жаль, сталася помилка.</translation>
 <translation id="8655972064210167941">Помилка входу. Не вдалося підтвердити ваш пароль. Зв’яжіться з адміністратором або повторіть спробу.</translation>
+<translation id="8656619792520327915">Додати інший ключ безпеки Bluetooth</translation>
 <translation id="8656768832129462377">Не перевіряти</translation>
 <translation id="8658595122208653918">Змінити параметри принтера…</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> транслює ваш екран і аудіо на вкладку <ph name="TAB_NAME" />.</translation>
@@ -5102,6 +5135,7 @@
 <translation id="8814687660896548945">Сканування архіву. Зачекайте…</translation>
 <translation id="881799181680267069">Сховати інші</translation>
 <translation id="8818152010000655963">Фоновий малюнок</translation>
+<translation id="8818958672113348984">Підтвердити через телефон</translation>
 <translation id="8820817407110198400">Закладки</translation>
 <translation id="8821045908425223359">Автоматично налаштовувати ІР-адресу</translation>
 <translation id="882204272221080310">Оновити мікропрограму для додаткового захисту</translation>
@@ -5132,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">Використовуйте Touch ID з додатком <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Колір:</translation>
 <translation id="8890516388109605451">Джерела</translation>
 <translation id="8892168913673237979">Готово!</translation>
@@ -5157,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>
@@ -5265,6 +5302,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">Bluetooth</translation>
 <translation id="9074836595010225693">Під’єднано мишу USB</translation>
 <translation id="9076523132036239772">На жаль, не вдалося підтвердити вашу електронну адресу чи пароль. Спробуйте спершу під’єднатися до мережі.</translation>
@@ -5326,7 +5364,6 @@
 <translation id="916607977885256133">Картинка в картинці</translation>
 <translation id="9169496697824289689">Переглянути комбінації клавіш</translation>
 <translation id="9169931577761441333">Додати додаток <ph name="APP_NAME" /> на головний екран</translation>
-<translation id="9170397650136757332">Тепер трохи перемістіть палець, щоб зісканувати всі його частини</translation>
 <translation id="9170848237812810038">&amp;Скасувати</translation>
 <translation id="9170884462774788842">Інша програма на вашому комп’ютері додала тему, яка може змінити роботу Chrome.</translation>
 <translation id="9173995187295789444">Пошук пристроїв Bluetooth…</translation>
@@ -5390,6 +5427,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_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index d21f3b8..183ec65 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">Mục giá 5</translation>
 <translation id="1227507814927581609">Xác thực không thành công trong khi kết nối với "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1230807973377071856">menu hệ thống</translation>
+<translation id="123186018454553812">Thử khóa khác</translation>
 <translation id="1232569758102978740">Không tên</translation>
 <translation id="1233721473400465416">Ngôn ngữ</translation>
 <translation id="1234808891666923653">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">Sử dụng tùy chọn đồng bộ hóa và tất cả dịch vụ</translation>
 <translation id="1272079795634619415">Dừng</translation>
-<translation id="1272242203003205253">Đối tác của Google hợp tác với Trợ lý để trợ giúp bạn</translation>
 <translation id="1272978324304772054">Tài khoản người dùng này không thuộc về miền mà thiết bị được đăng ký. Nếu bạn muốn đăng ký miền khác, bạn cần tìm thiết bị trước tiên.</translation>
 <translation id="1274977772557788323">Cài đặt bộ nhớ của Adobe Flash Player</translation>
 <translation id="1274997165432133392">Cookie và các dữ liệu trang web khác</translation>
@@ -332,6 +332,7 @@
 <translation id="1485141095922496924">Phiên bản <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Tìm kiếm mật khẩu</translation>
 <translation id="1487335504823219454">Bật - cài đặt tùy chỉnh</translation>
+<translation id="1489664337021920575">Chọn tùy chọn khác</translation>
 <translation id="1493892686965953381">Đang đợi <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> thiết bị hiện có khác.</translation>
 <translation id="1497522201463361063">Không thể đổi tên "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
@@ -367,6 +368,7 @@
 <translation id="1531004739673299060">Cửa sổ ứng dụng</translation>
 <translation id="15373452373711364">Con trỏ chuột lớn</translation>
 <translation id="1538729222189715449">Đang mở tệp Linux...</translation>
+<translation id="153933193410874873">Chúng tôi không xác minh được thông tin định danh của bạn trên thiết bị này</translation>
 <translation id="1540605929960647700">Bật chế độ minh họa</translation>
 <translation id="1543284117603151572">Được nhập từ Edge</translation>
 <translation id="1545177026077493356">Chế độ kiosk tự động</translation>
@@ -383,6 +385,7 @@
 <translation id="1564414980088536597">Không thể sử dụng hình ảnh này. Hãy chọn một hình ảnh khác.</translation>
 <translation id="1566049601598938765">Trang web</translation>
 <translation id="1567387640189251553">Một bàn phím khác đã được kết nối kể từ lần gần đây nhất bạn nhập mật khẩu của mình. Bàn phím này có thể đang cố gắng đánh cắp thao tác nhấn phím của bạn.</translation>
+<translation id="1567750922576943685">Việc xác minh thông tin định danh giúp bảo vệ thông tin cá nhân của bạn</translation>
 <translation id="1567993339577891801">Bảng điều khiển JavaScript</translation>
 <translation id="1568067597247500137">Tắt tiếng trang web</translation>
 <translation id="1568323446248056064">Mở cài đặt thiết bị hiển thị</translation>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">Không phát hiện được điện thoại của bạn</translation>
 <translation id="1616206807336925449">Tiện ích này không yêu cầu quyền đặc biệt.</translation>
 <translation id="1616298854599875024">Không thể nhập tiện ích "<ph name="IMPORT_NAME" />" do tiện ích này không phải là mô-đun được chia sẻ</translation>
-<translation id="161707228174452095">Đã thêm vân tay!</translation>
 <translation id="1618268899808219593">Trung tâm trợ g&amp;iúp</translation>
 <translation id="162035744160882748">Bật tính năng đồng bộ hóa, cá nhân hóa và các dịch vụ khác của Google</translation>
 <translation id="1620510694547887537">Máy ảnh</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">Lưu trữ RAR</translation>
 <translation id="2034346955588403444">Thêm mạng Wi-Fi khác</translation>
 <translation id="203574396658008164">Bật tính năng ghi chú từ màn hình khóa</translation>
-<translation id="2039623879703305659">Di chuyển ngón tay quá nhanh</translation>
 <translation id="2040460856718599782">Rất tiếc! Đã xảy ra sự cố khi tìm cách xác thực bạn. Vui lòng kiểm tra kỹ thông tin xác thực đăng nhập của bạn và thử lại.</translation>
 <translation id="2043818754674261542">Khoảng cách cần để điện thoại mở khóa <ph name="DEVICE_TYPE" /> này</translation>
 <translation id="204497730941176055">Tên Mẫu Chứng chỉ của Microsoft</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">Xóa chứng chỉ máy chủ "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="2100273922101894616">Tự động đăng nhập</translation>
 <translation id="2101225219012730419">Phiên bản:</translation>
-<translation id="2107494551712864447">Thêm vân tay</translation>
 <translation id="2112877397266219826">Bật trình điều khiển cảm ứng của bạn để thiết lập</translation>
 <translation id="21133533946938348">Ghim Tab</translation>
 <translation id="2113479184312716848">Mở &amp;tệp...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">Màn hình nền</translation>
 <translation id="2526619973349913024">Kiểm tra bản cập nhật</translation>
 <translation id="2527167509808613699">Bất kỳ loại kết nối</translation>
-<translation id="2532026602297547439">Cảm biến bị bẩn</translation>
 <translation id="2532589005999780174">Chế độ tương phản cao</translation>
 <translation id="253434972992662860">&amp;Tạm dừng</translation>
 <translation id="2534460670861217804">Proxy HTTP bảo mật</translation>
@@ -1197,6 +1196,7 @@
 <translation id="2783298271312924866">Đã tải xuống</translation>
 <translation id="2783321960289401138">Tạo phím tắt...</translation>
 <translation id="2783829359200813069">Chọn loại mã hóa</translation>
+<translation id="2783952358106015700">Sử dụng khóa bảo mật cho <ph name="APP_NAME" /></translation>
 <translation id="2784407158394623927">Đang kích hoạt dịch vụ dữ liệu di động của bạn</translation>
 <translation id="2785873697295365461">Phần mô tả tệp</translation>
 <translation id="2787047795752739979">Ghi đè tệp gốc</translation>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">Sao lưu ảnh và video của bạn</translation>
 <translation id="3060379269883947824">Bật chọn để nói</translation>
 <translation id="3061707000357573562">Dịch vụ vá lỗi</translation>
-<translation id="3064410671692449875">Không đủ dữ liệu</translation>
 <translation id="3065041951436100775">Phản hồi tab bị lỗi.</translation>
 <translation id="3067198179881736288">Cài đặt ứng dụng?</translation>
 <translation id="3067198360141518313">Chạy plugin này</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">&amp;Tab Mới</translation>
 <translation id="3288047731229977326">Tiện ích chạy ở chế độ nhà phát triển có thể gây hại cho máy tính của bạn. Nếu bạn không phải là nhà phát triển, bạn nên vô hiệu hóa các tiện ích này chạy trong chế độ nhà phát triển để giữ an toàn.</translation>
 <translation id="3289856944988573801">Để kiểm tra các cập nhật, hãy sử dụng kết nối Ethernet hoặc Wi-Fi.</translation>
+<translation id="3292421191230118801">Tiếp tục xem trên Chromebook các trang web bạn đang xem trên điện thoại di động</translation>
 <translation id="32939749466444286">Vùng chứa Linux không khởi động. Vui lòng thử lại.</translation>
 <translation id="3294437725009624529">Khách</translation>
 <translation id="329838636886466101">Sửa</translation>
@@ -1552,6 +1552,7 @@
 <translation id="3348038390189153836">Phát hiện thiết bị di động</translation>
 <translation id="3348459612390503954">Xin chúc mừng</translation>
 <translation id="3349933790966648062">Mức sử dụng bộ nhớ</translation>
+<translation id="3350117557200012647">Chuyển sang chế độ ghép nối</translation>
 <translation id="3353984535370177728">Chọn thư mục để tải lên</translation>
 <translation id="3355936511340229503">Lỗi kết nối</translation>
 <translation id="3356797067524893661">Bạn đã thiết lập xong và sẵn sàng tiếp tục với Hangouts Meet</translation>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">Công cụ tìm kiếm của bạn đã được thay đổi thành <ph name="URL" />.</translation>
 <translation id="3563432852173030730">Không thể tải xuống ứng dụng Kiosk.</translation>
 <translation id="3564334271939054422">Mạng Wi-Fi bạn đang sử dụng (<ph name="NETWORK_ID" />) có thể yêu cầu bạn truy cập vào trang đăng nhập của mạng đó.</translation>
+<translation id="3564848315152754834">Khóa bảo mật USB</translation>
 <translation id="3566721612727112615">Chưa thêm trang web nào</translation>
 <translation id="3569382839528428029">Bạn có muốn <ph name="APP_NAME" /> chia sẻ màn hình của bạn không?</translation>
 <translation id="3570985609317741174">Nội dung web</translation>
@@ -1741,6 +1743,7 @@
 <translation id="3627588569887975815">Mở liên kết bằn&amp;g cửa số ẩn danh</translation>
 <translation id="3627671146180677314">Thời gian Gia hạn Chứng chỉ Netscape</translation>
 <translation id="3627879631695760395">Cài đặt <ph name="APP" />...</translation>
+<translation id="3630132874740063857">Điện thoại</translation>
 <translation id="3630995161997703415">Thêm trang web này vào giá của bạn để sử dụng bất cứ lúc nào</translation>
 <translation id="3635030235490426869">Tab 1</translation>
 <translation id="3636096452488277381">Xin chào <ph name="USER_GIVEN_NAME" />!</translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">Biểu tượng tiện ích</translation>
 <translation id="3665589677786828986">Chrome phát hiện thấy rằng một số cài đặt của bạn đã bị lỗi do một chương trình khác gây ra và đặt lại các cài đặt đó về giá trị mặc định ban đầu.</translation>
 <translation id="3668570675727296296">Cài đặt ngôn ngữ</translation>
+<translation id="3668801437375206837">Để chẩn đoán tốt hơn các vấn đề về Bluetooth, nhân viên Google có thể đưa thêm nhật ký Bluetooth vào báo cáo phản hồi. Khi bạn chọn tùy chọn này, báo cáo của bạn sẽ bao gồm cả nhật ký btsnoop và HCI từ phiên hoạt động hiện tại, trong đó đã loại bỏ nhiều thông tin nhận dạng cá nhân nhất có thể. Chỉ người quản lý nhóm sản phẩm Chrome OS trong Listnr mới có quyền truy cập vào các nhật ký này. Nhật ký sẽ bị xóa hoàn toàn sau 90 ngày.</translation>
 <translation id="3668823961463113931">Trình xử lý</translation>
 <translation id="3670229581627177274">Bật Bluetooth</translation>
 <translation id="3672681487849735243">Đã phát hiện lỗi khi xuất xưởng</translation>
@@ -1780,6 +1784,7 @@
 <translation id="3691267899302886494"><ph name="HOST" /> muốn chia sẻ màn hình của bạn</translation>
 <translation id="3693415264595406141">Mật khẩu:</translation>
 <translation id="3694027410380121301">Chọn Tab Trước</translation>
+<translation id="369489984217678710">Mật khẩu và các dữ liệu đăng nhập khác</translation>
 <translation id="3699624789011381381">Địa chỉ email</translation>
 <translation id="3699920817649120894">Bạn có muốn tắt tính năng đồng bộ hóa và cá nhân hóa không?</translation>
 <translation id="3700888195348409686">Đang hiển thị (<ph name="PAGE_ORIGIN" />)</translation>
@@ -1803,6 +1808,7 @@
 <translation id="3727148787322499904">Việc thay đổi cài đặt này sẽ ảnh hưởng đến tất cả các mạng chia sẻ</translation>
 <translation id="3727187387656390258">Kiểm tra cửa sổ bật lên</translation>
 <translation id="3729506734996624908">Trang web được phép</translation>
+<translation id="3731997362820527097">Chọn khóa bảo mật của bạn</translation>
 <translation id="3732078975418297900">Lỗi trên dòng <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Máy chủ SSL với Step-up</translation>
 <translation id="3735740477244556633">Sắp xếp theo</translation>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">Chào mừng bạn đến với Hangouts Meet</translation>
 <translation id="3861241522664181545">Đã tạm dừng trang.</translation>
 <translation id="3862134173397075045">Chào mừng bạn đến với trải nghiệm Truyền trong Chrome!</translation>
+<translation id="3862693525629180217">Xác minh qua cảm biến tích hợp</translation>
 <translation id="3862788408946266506">Phải cài đặt ứng dụng có thuộc tính tệp kê khai 'kiosk_only' ở chế độ kiosk Chrome OS</translation>
 <translation id="3865414814144988605">Độ phân giải</translation>
 <translation id="386548886866354912">Gói đi kèm <ph name="EXTENSION_NAME" /></translation>
@@ -2028,6 +2035,7 @@
 <translation id="4055023634561256217">Cần khởi động lại trước khi có thể đặt lại thiết bị của bạn bằng Powerwash.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">Xem trong cửa hàng</translation>
+<translation id="4058647953897694817">Xác minh qua Bluetooth</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">Kiểm tra Tài liệu Ngay bây giờ</translation>
 <translation id="406070391919917862">Ứng dụng nền</translation>
@@ -2041,6 +2049,7 @@
 <translation id="407520071244661467">Tỷ lệ</translation>
 <translation id="4075639477629295004">Không thể truyền <ph name="FILE_NAME" />.</translation>
 <translation id="4077917118009885966">Đã chặn quảng cáo trên trang web này</translation>
+<translation id="4079799245038595838">Chúng tôi đã gửi thông báo đến điện thoại của bạn. Hãy làm theo các lời nhắc trong đó để xác nhận đó là bạn.</translation>
 <translation id="4081242589061676262">Không thể truyền tệp.</translation>
 <translation id="4084682180776658562">Dấu trang</translation>
 <translation id="4084835346725913160">Đóng <ph name="TAB_NAME" /></translation>
@@ -2140,6 +2149,7 @@
 <translation id="4250229828105606438">Ảnh chụp màn hình</translation>
 <translation id="4250680216510889253">Không</translation>
 <translation id="4252852543720145436">Giá trị nhận dạng cho nội dung được bảo vệ</translation>
+<translation id="4252899949534773101">Bluetooth đã tắt</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Đã chia sẻ nội dung tab</translation>
 <translation id="4254813446494774748">Ngôn ngữ dịch:</translation>
 <translation id="425573743389990240">Tốc độ phóng điện của pin tính bằng Watt (giá trị âm có nghĩa là đang sạc pin)</translation>
@@ -2265,8 +2275,8 @@
 <translation id="4480590691557335796">Chrome có thể tìm và xóa phần mềm gây hại trên máy tính của bạn</translation>
 <translation id="4481530544597605423">Thiết bị được hủy ghép nối</translation>
 <translation id="4482194545587547824">Google có thể sử dụng lịch sử duyệt web của bạn để cá nhân hóa Tìm kiếm và các dịch vụ khác của Google.</translation>
-<translation id="4493287891836751813">Làm quen với Trợ lý Google</translation>
 <translation id="4495419450179050807">Không hiển thị trên trang này</translation>
+<translation id="449938344715680828">Nhấn tổ hợp phím |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />|, sau đó nhấn phím |<ph name="ACCELERATOR3" />| để thoát</translation>
 <translation id="4499718683476608392">Bật tính năng Tự động điền thẻ tín dụng để điền vào các biểu mẫu chỉ bằng một lần nhấp</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> đã bị lỗi</translation>
 <translation id="450099669180426158">Biểu tượng dấu chấm than</translation>
@@ -2320,7 +2330,6 @@
 <translation id="4572659312570518089">Đã hủy xác thực trong khi kết nối với "<ph name="DEVICE_NAME" />".</translation>
 <translation id="4572815280350369984">Tệp <ph name="FILE_TYPE" /></translation>
 <translation id="457386861538956877">Thêm...</translation>
-<translation id="4576537685267142337">Nhấc ngón tay, sau đó chạm lại vào cảm biến</translation>
 <translation id="4576541033847873020">Ghép nối thiết bị Bluetooth</translation>
 <translation id="4579581181964204535">Không thể truyền <ph name="HOST_NAME" />.</translation>
 <translation id="4580526846085481512">Bạn có chắc chắn muốn xóa các mục $1 không?</translation>
@@ -2343,6 +2352,7 @@
 <translation id="4611114513649582138">Kết nối dữ liệu có sẵn</translation>
 <translation id="4613271546271159013">Tiện ích đã thay đổi trang nào sẽ được hiển thị khi bạn mở một tab mới.</translation>
 <translation id="4615586811063744755">chưa chọn cookie nào</translation>
+<translation id="4615618657481886098">Bạn đã đăng ký khóa này trước đây. Bạn không cần đăng ký lại khóa này nữa.</translation>
 <translation id="4617270414136722281">Tùy chọn tiện ích</translation>
 <translation id="4619615317237390068">Tab từ các thiết bị khác</translation>
 <translation id="4620809267248568679">Cài đặt này được tiện ích thực hiện.</translation>
@@ -2452,6 +2462,7 @@
 <translation id="4790972063719531840">Tự động gửi dữ liệu chẩn đoán và dữ liệu sử dụng cho Google</translation>
 <translation id="4792711294155034829">&amp;Báo cáo sự cố...</translation>
 <translation id="479536056609751218">Trang web, chỉ HTML</translation>
+<translation id="4798236378408895261">Đính kèm <ph name="BEGIN_LINK" />Nhật ký Bluetooth<ph name="END_LINK" /> (nội bộ Google)</translation>
 <translation id="479989351350248267">search</translation>
 <translation id="4801448226354548035">Ẩn tài khoản</translation>
 <translation id="4801512016965057443">Cho phép chuyển vùng dữ liệu di động</translation>
@@ -2518,6 +2529,7 @@
 <translation id="4882473678324857464">Lấy tiêu điểm dấu trang</translation>
 <translation id="4882831918239250449">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 dịch vụ Tìm kiếm, quảng cáo và các dịch vụ khác</translation>
 <translation id="4883178195103750615">Xuất dấu trang sang tệp  HTML...</translation>
+<translation id="4883274597792587930">Tìm tên in trên mặt sau của khóa</translation>
 <translation id="4883436287898674711">Tất cả trang web <ph name="WEBSITE_1" /></translation>
 <translation id="48838266408104654">&amp;Trình quản lý Tác vụ</translation>
 <translation id="4883898390143004266">Giúp các ứng dụng tìm vị trí. Bạn có thể sử dụng dịch vụ vị trí của Google để giúp cải thiện vị trí cho các ứng dụng. Google có thể định kỳ thu thập dữ liệu vị trí và sử dụng dữ liệu này theo cách ẩn danh để cải thiện độ chính xác của vị trí và các dịch vụ dựa trên vị trí. <ph name="BEGIN_LINK1" />Tìm hiểu thêm<ph name="END_LINK1" /></translation>
@@ -2565,7 +2577,6 @@
 <translation id="4941627891654116707">Cỡ chữ</translation>
 <translation id="494286511941020793">Trợ giúp Cấu hình Proxy</translation>
 <translation id="4945444280533270988">Smart Lock đang bật</translation>
-<translation id="494660967831069720">Một phần dữ liệu</translation>
 <translation id="4953689047182316270">Phản hồi các sự kiện trợ năng</translation>
 <translation id="4953808748584563296">Hình đại diện màu cam mặc định</translation>
 <translation id="4955814292505481804">Hàng năm</translation>
@@ -2991,6 +3002,7 @@
 <translation id="55601339223879446">Điều chỉnh các ranh giới của màn hình trong vòng hiển thị</translation>
 <translation id="5562781907504170924">Tab này được kết nối với thiết bị Bluetooth.</translation>
 <translation id="5563234215388768762">Tìm kiếm trên Google hoặc nhập một URL</translation>
+<translation id="5567950944308676169">Cắm và kích hoạt khóa bảo mật</translation>
 <translation id="5567989639534621706">Bộ nhớ đệm của ứng dụng</translation>
 <translation id="5568069709869097550">Không thể đăng nhập</translation>
 <translation id="5568144734023334204">Bộ nhớ Android</translation>
@@ -3237,6 +3249,7 @@
 <translation id="5931146425219109062">Đọc và thay đổi tất cả dữ liệu của bạn trên các trang web bạn truy cập</translation>
 <translation id="5932881020239635062">Sê-ri</translation>
 <translation id="5933376509899483611">Múi giờ</translation>
+<translation id="5938002010494270685">Hiện đã có bản nâng cấp bảo mật</translation>
 <translation id="5939518447894949180">Đặt lại</translation>
 <translation id="5939847200023027600">Dịch vụ bộ sắp xếp PDF</translation>
 <translation id="5941153596444580863">Thêm người...</translation>
@@ -3273,6 +3286,7 @@
 <translation id="6006484371116297560">Cổ điển</translation>
 <translation id="6007237601604674381">Di chuyển không thành công. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="6007240208646052708">Chưa có dịch vụ tìm kiếm bằng giọng nói cho ngôn ngữ của bạn.</translation>
+<translation id="6009781704028455063">Cảm biến tích hợp</translation>
 <translation id="6010869025736512584">Đang truy cập thiết bị đầu vào video</translation>
 <translation id="6011193465932186973">Vân tay</translation>
 <translation id="6011449291337289699">Xóa dữ liệu trang web</translation>
@@ -3283,6 +3297,7 @@
 <translation id="6020431688553761150">Máy chủ không cho phép bạn truy cập vào tài nguyên này.</translation>
 <translation id="602251597322198729">Trang web này đang cố tải xuống nhiều tệp. Bạn có muốn thực hiện việc tải xuống này không?</translation>
 <translation id="6022526133015258832">Mở chế độ toàn màn hình</translation>
+<translation id="6022705094403139349">Bạn đã sẵn sàng ghép nối khóa bảo mật?</translation>
 <translation id="6023643151125006053">Thiết bị này (Số sê-ri: <ph name="SERIAL_NUMBER" />) đã bị quản trị viên <ph name="SAML_DOMAIN" /> khóa.</translation>
 <translation id="6025215716629925253">Dấu vết ngăn xếp</translation>
 <translation id="6026047032548434446">Cài đặt ứng dụng?</translation>
@@ -3346,6 +3361,7 @@
 <translation id="6105877918873366097">Truy cập lần cuối</translation>
 <translation id="6107012941649240045">Cấp cho</translation>
 <translation id="6112294629795967147">Chạm để đổi kích thước</translation>
+<translation id="6112931163620622315">Kiểm tra điện thoại của bạn</translation>
 <translation id="6112952769866305444">Chỉnh sửa người, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6116338172782435947">Xem văn bản và hình ảnh đã sao chép sang khay nhớ tạm</translation>
 <translation id="6116921718742659598">Thay đổi cài đặt ngôn ngữ và phương thức nhập</translation>
@@ -3391,6 +3407,7 @@
 <translation id="6169666352732958425">Không thể truyền màn hình nền.</translation>
 <translation id="6171948306033499786">Tạm dừng in</translation>
 <translation id="6175314957787328458">GUID Tên miền của Microsoft</translation>
+<translation id="6176043333338857209">Bluetooth sẽ tạm thời bật để kết nối với khóa bảo mật của bạn</translation>
 <translation id="6178664161104547336">Chọn một chứng chỉ</translation>
 <translation id="6181431612547969857">Tải xuống bị chặn</translation>
 <translation id="6185132558746749656">Vị trí thiết bị</translation>
@@ -3478,6 +3495,7 @@
 <translation id="6311220991371174222">Không thể khởi động Chrome do đã xảy ra lỗi khi mở hồ sơ của bạn. Hãy thử khởi động lại Chrome.</translation>
 <translation id="6312400084708441752">Bao gồm thông tin về phần mềm có hại, cài đặt hệ thống và các quy trình trên máy tính của bạn</translation>
 <translation id="6312403991423642364">Lỗi mạng không xác định</translation>
+<translation id="6313320178014547270">Bạn đang sử dụng khóa chưa đăng ký với trang web này</translation>
 <translation id="6313641880021325787">THOÁT VR</translation>
 <translation id="6314819609899340042">Bạn đã bật thành công tính năng gỡ lỗi trên thiết bị <ph name="IDS_SHORT_PRODUCT_NAME" /> này.</translation>
 <translation id="6315493146179903667">Đưa Tất cả lên Trước</translation>
@@ -3522,7 +3540,6 @@
 <translation id="6384275966486438344">Thay đổi cài đặt tìm kiếm của bạn thành: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Trang web có thể lưu và đọc dữ liệu cookie</translation>
 <translation id="6388429472088318283">Ngôn ngữ tìm kiếm</translation>
-<translation id="6388771388956873507">Tìm cảm biến vân tay trên thiết bị của bạn và chạm vào bằng ngón tay</translation>
 <translation id="6390799748543157332">Những trang bạn xem trong cửa sổ này sẽ không xuất hiện trong lịch sử trình duyệt và sẽ không để lại các dấu vết khác như cookie trên máy tính sau khi bạn đóng tất cả cửa sổ Khách đang mở. Tuy nhiên, bất kỳ tệp nào bạn tải xuống cũng sẽ được giữ nguyên.</translation>
 <translation id="6390994422085833176">Xem lại các tính năng đồng bộ hóa và cá nhân hóa sau khi thiết lập</translation>
 <translation id="6395423953133416962">Gửi <ph name="BEGIN_LINK1" />thông tin hệ thống<ph name="END_LINK1" /> và <ph name="BEGIN_LINK2" />số liệu<ph name="END_LINK2" /></translation>
@@ -3534,6 +3551,7 @@
 <translation id="6399774419735315745">Điệp viên</translation>
 <translation id="6401445054534215853">Mục giá 1</translation>
 <translation id="6404511346730675251">Chỉnh sửa dấu trang</translation>
+<translation id="6405510437656969977">Tiếp tục khi bạn đã sẵn sàng nhập mã PIN</translation>
 <translation id="6406303162637086258">Mô phỏng khởi động lại trình duyệt</translation>
 <translation id="6406506848690869874">Đồng bộ hóa</translation>
 <translation id="6408118934673775994">Đọc và thay đổi dữ liệu của bạn trên <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> và <ph name="WEBSITE_3" /></translation>
@@ -3652,6 +3670,7 @@
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Đã chia sẻ nội dung trên màn hình</translation>
 <translation id="6580151766480067746">Phiên bản ARC</translation>
 <translation id="6581162200855843583">Liên kết Google Drive</translation>
+<translation id="6582080224869403177">Đặt lại <ph name="DEVICE_TYPE" /> của bạn để nâng cấp bảo mật.</translation>
 <translation id="6582421931165117398">Để bảo vệ thông tin cá nhân, hãy thay đổi mật khẩu của bạn ngay bây giờ. Bạn sẽ được yêu cầu đăng nhập trước khi có thể thay đổi mật khẩu của mình.</translation>
 <translation id="6583851739559471707">Đã chặn trên những trang web thường hiển thị quảng cáo xâm nhập (được đề xuất)</translation>
 <translation id="6584878029876017575">Ký Trọn đời của Microsoft</translation>
@@ -3701,6 +3720,7 @@
 <translation id="6644846457769259194">Đang cập nhật thiết bị của bạn (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">URL thu hồi của tổ chức phát hành chứng chỉ Netscape</translation>
 <translation id="6647838571840953560">Hiện ở trên <ph name="CHANNEL_NAME" /></translation>
+<translation id="6648051959475508072">Đã kích hoạt khóa bảo mật...</translation>
 <translation id="6648911618876616409">Một bản cập nhật quan trọng đã sẵn sàng cài đặt. Hãy đăng nhập để bắt đầu.</translation>
 <translation id="6649018507441623493">Hãy đợi giây lát…</translation>
 <translation id="6649563841575838401">Định dạng lưu trữ không được hỗ trợ hoặc tệp bị hỏng.</translation>
@@ -3776,6 +3796,7 @@
 <translation id="6759193508432371551">Khôi phục cài đặt gốc</translation>
 <translation id="6767639283522617719">Không thể kết hợp miền. Hãy đảm bảo các tùy chọn cài đặt cho đơn vị tổ chức là chính xác.</translation>
 <translation id="6769712124046837540">Đang thêm máy in...</translation>
+<translation id="6770664076092644100">Xác minh qua NFC</translation>
 <translation id="6771503742377376720">Là Tổ chức phát hành chứng chỉ</translation>
 <translation id="6777817260680419853">Đã chặn chuyển hướng</translation>
 <translation id="6778959797435875428">Bật tiếng các trang web</translation>
@@ -3811,6 +3832,7 @@
 <translation id="6823506025919456619">Bạn cần đăng nhập vào Chrome để thấy thiết bị của mình</translation>
 <translation id="6824564591481349393">Sao chép Địa chỉ &amp;Email</translation>
 <translation id="6825184156888454064">Sắp xếp theo tên</translation>
+<translation id="6826872289184051766">Xác minh qua USB</translation>
 <translation id="6827236167376090743">Video này sẽ tiếp tục phát đi phát lại.</translation>
 <translation id="6828153365543658583">Giới hạn đăng nhập cho những người dùng sau:</translation>
 <translation id="6828860976882136098">Không thiết lập được cập nhật tự động cho tất cả người dùng (lỗi thực thi kiểm tra <ph name="ERROR_NUMBER" />)</translation>
@@ -3844,6 +3866,7 @@
 <translation id="6880587130513028875">Hình ảnh đã bị chặn trên trang này.</translation>
 <translation id="6883319974225028188">Rất tiếc! Hệ thống không lưu được cấu hình thiết bị.</translation>
 <translation id="6885771755599377173">Xem trước thông tin hệ thống</translation>
+<translation id="6886476658664859389">Khóa bảo mật NFC</translation>
 <translation id="6886871292305414135">Mở liên kết trong &amp;tab mới</translation>
 <translation id="6892812721183419409">Mở liên kết bằng tài khoản <ph name="USER" /></translation>
 <translation id="6896758677409633944">Sao chép</translation>
@@ -4009,6 +4032,7 @@
 <translation id="713122686776214250">Thêm tran&amp;g...</translation>
 <translation id="7133578150266914903">Quản trị viên đang hạ cấp hệ điều hành của thiết bị này (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="7134098520442464001">Thu nhỏ Văn bản</translation>
+<translation id="7135729336746831607">Bạn muốn bật Bluetooth?</translation>
 <translation id="7136694880210472378">Đặt làm mặc định</translation>
 <translation id="7136984461011502314">Chào mừng bạn đến với <ph name="PRODUCT_NAME" /></translation>
 <translation id="7136993520339022828">Đã xảy ra lỗi. Vui lòng thử lại bằng cách chọn các hình ảnh khác.</translation>
@@ -4054,6 +4078,7 @@
 <translation id="7201118060536064622">Đã xóa '<ph name="DELETED_ITEM_NAME" />'</translation>
 <translation id="7206693748120342859">Đang tải xuống <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Thoát khỏi trang}other{Thoát khỏi các trang}}</translation>
+<translation id="721467499098558573">Nhấn và giữ nút trên khóa bảo mật trong ít nhất 5 giây</translation>
 <translation id="7216409898977639127">Nhà cung cấp dịch vụ di động</translation>
 <translation id="7216595297012131718">Sắp xếp ngôn ngữ dựa trên tùy chọn của bạn</translation>
 <translation id="7220019174139618249">Không thể xuất mật khẩu sang "<ph name="FOLDER" />"</translation>
@@ -4089,6 +4114,7 @@
 <translation id="7256710573727326513">Mở trong một tab</translation>
 <translation id="725758059478686223">Dịch vụ in</translation>
 <translation id="7257666756905341374">Đọc dữ liệu bạn sao chép và dán</translation>
+<translation id="7260764918845374269">Bạn cần chuyển sang chế độ ghép nối để xem khóa bảo mật của mình. Hãy nhấn nút trên khóa trong ít nhất 5 giây.</translation>
 <translation id="7262004276116528033">Dịch vụ đăng nhập này do <ph name="SAML_DOMAIN" /> lưu trữ</translation>
 <translation id="7268365133021434339">Đóng tab</translation>
 <translation id="7268659760406822741">Dịch vụ khả dụng</translation>
@@ -4125,7 +4151,6 @@
 <translation id="7309257895202129721">Hiển thị &amp;các điều khiển</translation>
 <translation id="7310598146671372464">Không đăng nhập được. Máy chủ không hỗ trợ loại mã hóa Kerberos đã chỉ định. Vui lòng liên hệ với quản trị viên của bạn.</translation>
 <translation id="7311079019872751559">Truy cập plugin không có hộp cát</translation>
-<translation id="7311891583377621132">Di chuyển nhẹ để chụp một phần khác của vân tay</translation>
 <translation id="7317680720589234980">Các tùy chọn màn hình khóa và đăng nhập</translation>
 <translation id="7321545336522791733">Máy chủ không truy cập được</translation>
 <translation id="7324297612904500502">Diễn đàn beta</translation>
@@ -4207,6 +4232,7 @@
 <translation id="7464490149090366184">Nén không thành công, mục tồn tại: "$1"</translation>
 <translation id="7465778193084373987">ULR Thu hồi của Tổ chức Cấp Chứng chỉ Netscape</translation>
 <translation id="7469406957790636836">Để bật tính năng này, trước tiên hãy bật tính năng kiểm tra chính tả trong phần <ph name="BEGIN_LINK" />Ngôn ngữ và phương thức nhập<ph name="END_LINK" /></translation>
+<translation id="7469518857922439236">Gửi cho bạn thông báo và đặt mặc định ghi nhớ máy tính này cho ứng dụng Messages</translation>
 <translation id="7469894403370665791">Tự động kết nối vào mạng này</translation>
 <translation id="747114903913869239">Lỗi: Không thể giải mã tiện ích</translation>
 <translation id="7473753388963818366">Hãy bắt đầu thiết lập <ph name="DEVICE_TYPE" /> của bạn</translation>
@@ -4256,6 +4282,7 @@
 <translation id="7531779363494549572">Chuyển đến Cài đặt &gt; Ứng dụng và thông báo &gt; Thông báo.</translation>
 <translation id="7536709149194614609">Vui lòng khởi động lại thiết bị và thử lại sau.</translation>
 <translation id="7537601449003285327">Ghim vào thanh tác vụ</translation>
+<translation id="7539856059004947393">Khóa bảo mật Bluetooth</translation>
 <translation id="7540972813190816353">Đã xảy ra lỗi khi kiểm tra cập nhật: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">Bật tính năng gỡ lỗi trên thiết bị <ph name="IDS_SHORT_PRODUCT_NAME" /> này</translation>
 <translation id="7544853251252956727">Phát ngẫu nhiên</translation>
@@ -4358,6 +4385,7 @@
 <translation id="7709152031285164251">Không thành công - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">&amp;Truyền...</translation>
 <translation id="7711920809702896782">Thông tin về tệp hình ảnh</translation>
+<translation id="7712740978240882272">Mở khóa Chromebook bằng điện thoại. <ph name="LINK_BEGIN" />Bạn có thể tìm hiểu thêm tại đây.<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">Tiện ích không xác định có ID <ph name="EXTENSION_ID" /></translation>
 <translation id="7714307061282548371">Cho phép các cookie từ <ph name="DOMAIN" /></translation>
 <translation id="7714464543167945231">Chứng chỉ</translation>
@@ -4573,6 +4601,7 @@
 <translation id="7984068253310542383">Phản chiếu <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">Đọc và thay đổi cài đặt mật khẩu đã lưu</translation>
 <translation id="7987764905897278458">Trải nghiệm thêm các tính năng thông minh của Google</translation>
+<translation id="798835209536175951">Gửi và nhận tin nhắn văn bản từ Chromebook. <ph name="LINK_BEGIN" />Bạn có thể tìm hiểu thêm tại đây<ph name="LINK_END" /></translation>
 <translation id="7988355189918024273">Bật các tính năng hỗ trợ truy cập</translation>
 <translation id="7994702968232966508">Phương pháp EAP</translation>
 <translation id="799547531016638432">Xóa lối tắt</translation>
@@ -4705,6 +4734,7 @@
 <translation id="8185331656081929126">Hiển thị thông báo khi phát hiện thấy máy in mới trên mạng</translation>
 <translation id="8186609076106987817">Máy chủ không thể tìm thấy tệp.</translation>
 <translation id="8188120771410500975">&amp;Kiểm tra chính tả các trường văn bản</translation>
+<translation id="8188389033983459049">Kiểm tra mục cài đặt thiết bị và bật Bluetooth để tiếp tục</translation>
 <translation id="8190193592390505034">Đang kết nối đến <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">Quản lý ứng dụng, tiện ích và chủ đề của bạn</translation>
 <translation id="8191453843330043793">Trình phân giải proxy V8</translation>
@@ -4799,6 +4829,7 @@
 <translation id="8353683614194668312">Tiện ích/ứng dụng có thể:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">Bạn có muốn khôi phục trang không?</translation>
+<translation id="8362993567435070757">Tìm mã PIN có 6 chữ số ở mặt sau của khóa</translation>
 <translation id="8363095875018065315">chính thức</translation>
 <translation id="8363142353806532503">Micrô bị chặn</translation>
 <translation id="8366396658833131068">Kết nối mạng của bạn đã được khôi phục. Hãy chọn mạng khác hoặc nhấn nút 'Tiếp tục' bên dưới để khởi chạy ứng dụng kiosk của bạn.</translation>
@@ -4807,6 +4838,7 @@
 <translation id="8371695176452482769">Nói ngay bây giờ</translation>
 <translation id="8372369524088641025">Khóa WEP sai</translation>
 <translation id="8373553483208508744">Tắt tiếng tab</translation>
+<translation id="8379878387931047019">Thiết bị này không hỗ trợ loại khóa bảo mật mà trang web này yêu cầu</translation>
 <translation id="8382913212082956454">Sao chép địa chỉ &amp;email</translation>
 <translation id="8386903983509584791">Đã quét xong</translation>
 <translation id="8389492867173948260">Cho phép tiện ích này đọc và thay đổi tất cả dữ liệu trên các trang web bạn truy cập:</translation>
@@ -4925,6 +4957,7 @@
 <translation id="8557930019681227453">Tệp kê khai</translation>
 <translation id="8559694214572302298">Trình giải mã hình ảnh</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
+<translation id="8562084399541316921">Tiếp tục đọc</translation>
 <translation id="8565650234829130278">Đã cố gắng hạ cấp ứng dụng.</translation>
 <translation id="8569002732135253578">Hiện đang in <ph name="DOCUMENT_NAME" /></translation>
 <translation id="8569682776816196752">Không tìm thấy điểm đến nào</translation>
@@ -4965,7 +4998,6 @@
 <translation id="8639047128869322042">Đang kiểm tra để tìm phần mềm độc hại...</translation>
 <translation id="8639963783467694461">Cài đặt tự động điền</translation>
 <translation id="8642171459927087831">Mã thông báo truy cập</translation>
-<translation id="8642267168767642381">Di chuyển ngón tay quá chậm</translation>
 <translation id="8642947597466641025">Phóng to Văn bản</translation>
 <translation id="8643418457919840804">Để tiếp tục, hãy chọn một tùy chọn:</translation>
 <translation id="8645354835496065562">Tiếp tục cho phép sử dụng cảm biến</translation>
@@ -4980,6 +5012,7 @@
 <translation id="8655295600908251630">Kênh</translation>
 <translation id="8655319619291175901">Rất tiếc, đã xảy ra lỗi.</translation>
 <translation id="8655972064210167941">Đăng nhập không thành công vì không thể xác minh mật khẩu của bạn. Vui lòng liên hệ với quản trị viên của bạn hoặc thử lại.</translation>
+<translation id="8656619792520327915">Thêm khóa bảo mật Bluetooth khác</translation>
 <translation id="8656768832129462377">Không kiểm tra</translation>
 <translation id="8658595122208653918">Thay đổi tùy chọn máy in...</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> đang chia sẻ màn hình và âm thanh của bạn với <ph name="TAB_NAME" />.</translation>
@@ -5102,6 +5135,7 @@
 <translation id="8814687660896548945">Vui lòng đợi, tệp lưu trữ đang được quét...</translation>
 <translation id="881799181680267069">Ẩn Cửa sổ khác</translation>
 <translation id="8818152010000655963">Hình nền</translation>
+<translation id="8818958672113348984">Xác minh qua điện thoại</translation>
 <translation id="8820817407110198400">Dấu trang</translation>
 <translation id="8821045908425223359">Tự động định cấu hình địa chỉ IP</translation>
 <translation id="882204272221080310">Cập nhật chương trình cơ sở để tăng cường bảo mật.</translation>
@@ -5132,11 +5166,13 @@
 <translation id="8872155268274985541">Đã tìm thấy tệp kê khai cập nhật bên ngoài Kiosk không hợp lệ. Không cập nhật được ứng dụng Kiosk. Vui lòng rút thẻ USB.</translation>
 <translation id="8874184842967597500">Chưa kết nối</translation>
 <translation id="8876215549894133151">Định dạng:</translation>
+<translation id="8876307312329369159">Không thể thay đổi tùy chọn cài đặt này trong phiên minh họa.</translation>
 <translation id="8876309039915144086">Tạo mật khẩu...</translation>
 <translation id="8877448029301136595">[thư mục cha]</translation>
 <translation id="8879284080359814990">&amp;Hiển thị Dưới dạng Tab</translation>
 <translation id="8883847527783433352">Đồng bộ hóa với một tài khoản khác</translation>
 <translation id="8885197664446363138">Smart Lock không khả dụng</translation>
+<translation id="88870264962436283">Sử dụng Touch ID với <ph name="APP_NAME" /></translation>
 <translation id="8888432776533519951">Màu:</translation>
 <translation id="8890516388109605451">Nguồn</translation>
 <translation id="8892168913673237979">Đã hoàn tất!</translation>
@@ -5157,6 +5193,7 @@
 <translation id="8915370057835397490">Đang tải đề xuất</translation>
 <translation id="8916476537757519021">Khung ẩn danh phụ: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="8919275547519617350">Để lấy tất cả mật khẩu của bạn trên mọi thiết bị, hãy đăng nhập rồi bật tính năng đồng bộ hóa.</translation>
+<translation id="8921366488406707015">Đang xác minh khóa bảo mật...</translation>
 <translation id="8922013791253848639">Luôn cho phép quảng cáo trên trang web này</translation>
 <translation id="8925458182817574960">&amp;Cài đặt</translation>
 <translation id="8926389886865778422">Đừng hỏi lại</translation>
@@ -5265,6 +5302,7 @@
 <translation id="9066782832737749352">Chuyển văn bản thành giọng nói</translation>
 <translation id="9072550133391925347"><ph name="PASSWORD_MANAGER_BRAND" /> tự động đăng nhập bạn vào các trang web và ứng dụng đủ điều kiện bằng mật khẩu bạn đã lưu.</translation>
 <translation id="9073281213608662541">PAP</translation>
+<translation id="90737709606140813">Ghép nối khóa với thiết bị này để bạn có thể đăng nhập vào tài khoản bằng khóa đó</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Đã kết nối chuột USB</translation>
 <translation id="9076523132036239772">Rất tiếc, email hoặc mật khẩu của bạn không thể xác minh được. Trước tiên hãy thử kết nối với một mạng.</translation>
@@ -5326,7 +5364,6 @@
 <translation id="916607977885256133">Ảnh trong ảnh</translation>
 <translation id="9169496697824289689">Xem phím tắt</translation>
 <translation id="9169931577761441333">Thêm <ph name="APP_NAME" /> vào Màn hình chính</translation>
-<translation id="9170397650136757332">Bây giờ, hãy di chuyển nhẹ ngón tay để chụp tất cả các phần khác nhau của dấu vân tay của bạn</translation>
 <translation id="9170848237812810038">H&amp;oàn tác</translation>
 <translation id="9170884462774788842">Một chương trình khác trên máy tính của bạn đã thêm một chủ đề có thể thay đổi cách Chrome hoạt động.</translation>
 <translation id="9173995187295789444">Đang quét tìm thiết bị Bluetooth...</translation>
@@ -5390,6 +5427,7 @@
 <translation id="971774202801778802">URL dấu trang</translation>
 <translation id="973473557718930265">Thoát</translation>
 <translation id="974555521953189084">Nhập cụm mật khẩu của bạn để bắt đầu đồng bộ hóa</translation>
+<translation id="977640333593638907">Bạn chỉ cần nhấn nút để sử dụng hầu hết các khóa</translation>
 <translation id="981121421437150478">Ngoại tuyến</translation>
 <translation id="983511809958454316">Tính năng này không được hỗ trợ trong VR</translation>
 <translation id="984275831282074731">Phương thức thanh toán</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index d8d4f91..ce986cb 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -187,7 +187,6 @@
 <translation id="126768002343224824">16 倍</translation>
 <translation id="127138278192656016">使用同步功能和所有服务</translation>
 <translation id="1272079795634619415">停止</translation>
-<translation id="1272242203003205253">Google 合作商家可与 Google 助理密切配合,一起为您提供帮助</translation>
 <translation id="1272978324304772054">此用户帐号不属于设备所注册的域。如果想注册其他域,那么您首先需要执行设备恢复。</translation>
 <translation id="1274977772557788323">Adobe Flash Player 存储设置</translation>
 <translation id="1274997165432133392">Cookie 及其他网站数据</translation>
@@ -211,6 +210,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>
@@ -362,6 +362,7 @@
 <translation id="1530838837447122178">打开鼠标和触控板设备设置</translation>
 <translation id="1531004739673299060">应用窗口</translation>
 <translation id="15373452373711364">大号鼠标光标</translation>
+<translation id="1538729222189715449">正在打开 Linux 文件…</translation>
 <translation id="1540605929960647700">启用演示模式</translation>
 <translation id="1543284117603151572">从 Edge 导入的书签</translation>
 <translation id="1545177026077493356">自动自助服务终端模式</translation>
@@ -412,7 +413,6 @@
 <translation id="161460670679785907">检测不到您的手机</translation>
 <translation id="1616206807336925449">此扩展程序无需任何特殊权限。</translation>
 <translation id="1616298854599875024">无法导入扩展程序“<ph name="IMPORT_NAME" />”,因为它不是共享模块</translation>
-<translation id="161707228174452095">已成功添加指纹!</translation>
 <translation id="1618268899808219593">帮助中心(&amp;E)</translation>
 <translation id="162035744160882748">开启同步、个性化和其他 Google 服务</translation>
 <translation id="1620510694547887537">摄像头</translation>
@@ -690,7 +690,6 @@
 <translation id="2028997212275086731">RAR 归档</translation>
 <translation id="2034346955588403444">添加其他 Wi-Fi 网络</translation>
 <translation id="203574396658008164">从锁定屏幕启用备注功能</translation>
-<translation id="2039623879703305659">手指移动太快</translation>
 <translation id="2040460856718599782">糟糕!尝试验证您的身份时出现错误。请仔细检查您的登录凭据,然后重试。</translation>
 <translation id="2043818754674261542">用于为此 <ph name="DEVICE_TYPE" /> 解锁的手机所需处于的距离范围</translation>
 <translation id="204497730941176055">Microsoft 证书模板名称</translation>
@@ -734,7 +733,6 @@
 <translation id="2099686503067610784">要删除服务器证书“<ph name="CERTIFICATE_NAME" />”吗?</translation>
 <translation id="2100273922101894616">自动登录</translation>
 <translation id="2101225219012730419">版本:</translation>
-<translation id="2107494551712864447">添加指纹</translation>
 <translation id="2112877397266219826">打开触摸控制器即可进行设置</translation>
 <translation id="21133533946938348">固定标签页</translation>
 <translation id="2113479184312716848">打开文件(&amp;F)...</translation>
@@ -787,6 +785,7 @@
 <translation id="2178098616815594724"><ph name="PEPPER_PLUGIN_DOMAIN" /> 上的“<ph name="PEPPER_PLUGIN_NAME" />”想访问您的计算机</translation>
 <translation id="2178614541317717477">CA 泄漏</translation>
 <translation id="218070003709087997">用数字表示要打印多少份(1 到 999 份)。</translation>
+<translation id="2184515124301515068">让 Chrome 选择何时允许网站播放声音(推荐)</translation>
 <translation id="2187895286714876935">服务器证书导入错误</translation>
 <translation id="2187906491731510095">扩展程序已更新</translation>
 <translation id="2188881192257509750">打开 <ph name="APPLICATION" /></translation>
@@ -831,6 +830,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>
@@ -871,6 +871,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>
@@ -1010,7 +1011,6 @@
 <translation id="2526590354069164005">桌面</translation>
 <translation id="2526619973349913024">检查是否有更新</translation>
 <translation id="2527167509808613699">各种连接</translation>
-<translation id="2532026602297547439">传感器有脏污</translation>
 <translation id="2532589005999780174">高反差模式</translation>
 <translation id="253434972992662860">暂停(&amp;P)</translation>
 <translation id="2534460670861217804">安全的 HTTP 代理</translation>
@@ -1045,6 +1045,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">请输入一个较短的网址</translation>
 <translation id="2587922270115112871">创建受监管用户不会随之创建 Google 帐号,因此这些受监管用户无法借助 Chrome 同步功能将其设置和数据同步到其他设备。受监管用户的设置只能应用于此设备。</translation>
@@ -1367,7 +1368,6 @@
 <translation id="3057861065630527966">备份您的照片和视频</translation>
 <translation id="3060379269883947824">启用“随选朗读”</translation>
 <translation id="3061707000357573562">修补服务</translation>
-<translation id="3064410671692449875">数据不足</translation>
 <translation id="3065041951436100775">标签页意外关闭反馈。</translation>
 <translation id="3067198179881736288">安装应用?</translation>
 <translation id="3067198360141518313">运行此插件</translation>
@@ -1889,6 +1889,7 @@
 <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="3862788408946266506">具有“kiosk_only”这项清单属性的应用必须在 Chrome 操作系统自助服务终端模式下进行安装</translation>
 <translation id="3865414814144988605">分辨率</translation>
@@ -2202,6 +2203,7 @@
 <translation id="4394049700291259645">停用</translation>
 <translation id="4400367121200150367">一律不保存密码的网站将显示在这里</translation>
 <translation id="4400632832271803360">按住启动器键可切换顶行键的行为</translation>
+<translation id="4405117686468554883">*.jpeg、*.jpg、*.png</translation>
 <translation id="4408599188496843485">帮助(&amp;E)</translation>
 <translation id="4409697491990005945">边距</translation>
 <translation id="4411578466613447185">代码签名人</translation>
@@ -2304,7 +2306,6 @@
 <translation id="4572659312570518089">连接到“<ph name="DEVICE_NAME" />”时取消了身份验证。</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> 文件</translation>
 <translation id="457386861538956877">更多...</translation>
-<translation id="4576537685267142337">移开手指,然后再次触摸传感器</translation>
 <translation id="4576541033847873020">配对蓝牙设备</translation>
 <translation id="4579581181964204535">无法投射 <ph name="HOST_NAME" />。</translation>
 <translation id="4580526846085481512">您确定要删除这 $1 项吗?</translation>
@@ -2452,6 +2453,7 @@
 <translation id="4821935166599369261">分析已启用(&amp;P)</translation>
 <translation id="4823484602432206655">读取和更改用户设置与设备设置</translation>
 <translation id="4823651846660089135">设备目前处于只读模式</translation>
+<translation id="4823955295535347797">当屏幕处于开启状态时,您可以随时访问自己的 Google 助理,只需说“Ok Google”即可。</translation>
 <translation id="4828937774870308359">澳大利亚</translation>
 <translation id="4829768588131278040">设置 PIN 码</translation>
 <translation id="4830502475412647084">正在安装操作系统更新</translation>
@@ -2492,6 +2494,7 @@
 <translation id="4876273079589074638">帮助我们的工程师调查并解决此崩溃问题。请列出您的具体操作,越详细越好!</translation>
 <translation id="4876895919560854374">将屏幕锁定和解锁</translation>
 <translation id="4877017884043316611">与 Chromebox 配对</translation>
+<translation id="4879491255372875719">自动(默认)</translation>
 <translation id="4880214202172289027">音量滑块</translation>
 <translation id="4880328057631981605">接入点名称 (APN)</translation>
 <translation id="4880520557730313061">自动修正</translation>
@@ -2547,7 +2550,6 @@
 <translation id="4941627891654116707">字号</translation>
 <translation id="494286511941020793">代理配置帮助</translation>
 <translation id="4945444280533270988">Smart Lock 已开启</translation>
-<translation id="494660967831069720">部分数据</translation>
 <translation id="4953689047182316270">对无障碍事件做出响应</translation>
 <translation id="4953808748584563296">默认的橙色头像</translation>
 <translation id="4955814292505481804">年度</translation>
@@ -2794,6 +2796,7 @@
 <translation id="532776649628038357">我同意</translation>
 <translation id="532943162177641444">请点按您的 <ph name="PHONE_NAME" /> 设备上的通知,以设置可供此设备使用的移动热点。</translation>
 <translation id="5329858601952122676">删除(&amp;D)</translation>
+<translation id="5329945517224105597">您的 Google 助理可根据您屏幕上的内容,提供更多相关建议和具体操作。您可在 Google 助理的“设置”中更改此项设置</translation>
 <translation id="5330145655348521461">这些文件已在其他桌面打开。请转至<ph name="USER_NAME" />(<ph name="MAIL_ADDRESS" />)查看这些文件。</translation>
 <translation id="5330512191124428349">获取信息</translation>
 <translation id="5331069282670671859">您没有此类别的证书</translation>
@@ -3045,6 +3048,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>
@@ -3496,12 +3500,12 @@
 <translation id="6384275966486438344">将您的搜索设置更改为:<ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">网站可以保存和读取 Cookie 数据</translation>
 <translation id="6388429472088318283">搜索语言</translation>
-<translation id="6388771388956873507">找到您设备上的指纹传感器并用手指触摸它</translation>
 <translation id="6390799748543157332">当您关闭以访客身份打开的所有窗口后,您在此窗口中浏览的网页将不会显示在浏览器历史记录中,也不会在计算机上留下其他痕迹(例如Cookie)。不过,您下载的所有文件均会保留下来。</translation>
 <translation id="6390994422085833176">在完成设置后查看同步及个性化功能</translation>
 <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;I)</translation>
+<translation id="639777613761517128">要使用 $1 打开文件,请先将文件复制到“Linux 文件”文件夹。</translation>
 <translation id="6398715114293939307">移除 Google Play 商店</translation>
 <translation id="6398765197997659313">退出全屏模式</translation>
 <translation id="6399774419735315745">间谍</translation>
@@ -3836,6 +3840,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>
@@ -3869,6 +3874,7 @@
 <translation id="6978121630131642226">搜索引擎</translation>
 <translation id="6978611942794658017">此文件适用于采用 Windows 软件的 PC,不适用于运行 Chrome 操作系统的设备。请在 Chrome 网上应用店中搜索合适的替代应用。</translation>
 <translation id="6979158407327259162">Google 云端硬盘</translation>
+<translation id="6979440798594660689">静音(默认)</translation>
 <translation id="6979737339423435258">时间不限</translation>
 <translation id="6980462514016882061">Google 可能会利用您的浏览记录为您提供个性化的 Google 搜索、广告和其他 Google 服务</translation>
 <translation id="6981982820502123353">无障碍</translation>
@@ -4017,6 +4023,7 @@
 <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">获取帮助(&amp;E)</translation>
 <translation id="7200083590239651963">选择配置</translation>
 <translation id="720110658997053098">让此设备永久处于自助服务终端模式</translation>
@@ -4094,7 +4101,6 @@
 <translation id="7309257895202129721">显示控件(&amp;C)</translation>
 <translation id="7310598146671372464">未能成功登录。服务器不支持指定的 Kerberos 加密类型。请与您的管理员联系。</translation>
 <translation id="7311079019872751559">未经过沙盒屏蔽的插件访问</translation>
-<translation id="7311891583377621132">请稍微移动一下手指,以便系统记录您指纹的不同部分</translation>
 <translation id="7317680720589234980">屏幕锁定和登录选项</translation>
 <translation id="7321545336522791733">无法连接到服务器</translation>
 <translation id="7324297612904500502">Chrome(测试版)论坛</translation>
@@ -4527,6 +4533,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>
@@ -4749,6 +4756,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>
@@ -4930,7 +4938,6 @@
 <translation id="8639047128869322042">正在查找有害软件…</translation>
 <translation id="8639963783467694461">自动填充设置</translation>
 <translation id="8642171459927087831">访问令牌</translation>
-<translation id="8642267168767642381">手指移动太慢</translation>
 <translation id="8642947597466641025">放大文字</translation>
 <translation id="8643418457919840804">要继续,请选择一个选项:</translation>
 <translation id="8645354835496065562">继续允许使用传感器</translation>
@@ -4998,6 +5005,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;S)</translation>
@@ -5290,7 +5298,6 @@
 <translation id="916607977885256133">画中画</translation>
 <translation id="9169496697824289689">查看键盘快捷键</translation>
 <translation id="9169931577761441333">将“<ph name="APP_NAME" />”添加到主屏幕</translation>
-<translation id="9170397650136757332">现在请稍微移动一下您的手指,以便系统记录您指纹的各个部分</translation>
 <translation id="9170848237812810038">撤消(&amp;U)</translation>
 <translation id="9170884462774788842">您计算机上的其他程序添加了一个主题背景,该主题背景可能会改变 Chrome 的工作方式。</translation>
 <translation id="9173995187295789444">正在扫描蓝牙设备…</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 1a11df4..d2f8006 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -163,6 +163,7 @@
 <translation id="1225211345201532184">檔案櫃項目 5</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">Service Workers</translation>
@@ -187,7 +188,6 @@
 <translation id="126768002343224824">16x</translation>
 <translation id="127138278192656016">使用同步處理功能和所有服務</translation>
 <translation id="1272079795634619415">停止</translation>
-<translation id="1272242203003205253">Google 合作夥伴可透過 Google 助理為你提供服務</translation>
 <translation id="1272978324304772054">裝置註冊的網域中沒有這個使用者帳戶。如果你要使用其他網域進行註冊,必須先完成裝置修復作業。</translation>
 <translation id="1274977772557788323">Adobe Flash Player 儲存設定</translation>
 <translation id="1274997165432133392">Cookie 和其他網站資料</translation>
@@ -332,6 +332,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>
@@ -367,6 +368,7 @@
 <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>
@@ -383,6 +385,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>
@@ -417,7 +420,6 @@
 <translation id="161460670679785907">偵測不到你的手機</translation>
 <translation id="1616206807336925449">這個擴充功能不需要特殊權限。</translation>
 <translation id="1616298854599875024">「<ph name="IMPORT_NAME" />」擴充功能不是共用模組,因此無法匯入</translation>
-<translation id="161707228174452095">指紋新增成功!</translation>
 <translation id="1618268899808219593">說明中心(&amp;E)</translation>
 <translation id="162035744160882748">啟用同步處理、個人化功能和其他 Google 服務</translation>
 <translation id="1620510694547887537">攝影機</translation>
@@ -695,7 +697,6 @@
 <translation id="2028997212275086731">RAR 封存</translation>
 <translation id="2034346955588403444">新增其他 WiFi 網路</translation>
 <translation id="203574396658008164">允許在螢幕鎖定狀態下建立記事</translation>
-<translation id="2039623879703305659">手指移動速度過快</translation>
 <translation id="2040460856718599782">糟糕!嘗試驗證你的身分時發生錯誤。請重新檢查你的登入憑證,然後再試一次。</translation>
 <translation id="2043818754674261542">以手機為這部 <ph name="DEVICE_TYPE" /> 解鎖的適當距離</translation>
 <translation id="204497730941176055">Microsoft 憑證範本名稱</translation>
@@ -739,7 +740,6 @@
 <translation id="2099686503067610784">要刪除伺服器憑證「<ph name="CERTIFICATE_NAME" />」嗎?</translation>
 <translation id="2100273922101894616">自動登入</translation>
 <translation id="2101225219012730419">版本:</translation>
-<translation id="2107494551712864447">新增指紋</translation>
 <translation id="2112877397266219826">開啟你的觸控控制器以進行設定</translation>
 <translation id="21133533946938348">固定分頁</translation>
 <translation id="2113479184312716848">開啟檔案(&amp;F)...</translation>
@@ -1018,7 +1018,6 @@
 <translation id="2526590354069164005">桌面</translation>
 <translation id="2526619973349913024">檢查更新</translation>
 <translation id="2527167509808613699">任何類型的連線</translation>
-<translation id="2532026602297547439">感應器上有髒污</translation>
 <translation id="2532589005999780174">高反差模式</translation>
 <translation id="253434972992662860">暫停(&amp;P)</translation>
 <translation id="2534460670861217804">安全 HTTP Proxy</translation>
@@ -1197,6 +1196,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>
@@ -1377,7 +1377,6 @@
 <translation id="3057861065630527966">備份您的相片和影片</translation>
 <translation id="3060379269883947824">啟用隨選朗讀功能</translation>
 <translation id="3061707000357573562">修補服務</translation>
-<translation id="3064410671692449875">資料不足</translation>
 <translation id="3065041951436100775">分頁毀損意見回饋。</translation>
 <translation id="3067198179881736288">要安裝應用程式嗎?</translation>
 <translation id="3067198360141518313">執行這個外掛程式</translation>
@@ -1510,6 +1509,7 @@
 <translation id="3285322247471302225">新增分頁(&amp;T)</translation>
 <translation id="3288047731229977326">在開發人員模式中執行擴充功能可能會損害你的電腦。如果你不是開發人員,最好在開發人員模式中停用這些擴充功能,以策安全。</translation>
 <translation id="3289856944988573801">如要檢查更新,請使用乙太網路或 Wi-Fi。</translation>
+<translation id="3292421191230118801">透過 Chromebook 繼續瀏覽先前在行動裝置上造訪的網站</translation>
 <translation id="32939749466444286">無法啟動 Linux 容器,請再試一次。</translation>
 <translation id="3294437725009624529">訪客</translation>
 <translation id="329838636886466101">修復</translation>
@@ -1552,6 +1552,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>
@@ -1691,6 +1692,7 @@
 <translation id="3556000484321257665">你的搜尋引擎已變更為 <ph name="URL" />。</translation>
 <translation id="3563432852173030730">無法下載 Kiosk 應用程式。</translation>
 <translation id="3564334271939054422">您所使用的 Wi-Fi 網路 (<ph name="NETWORK_ID" />) 可能會要求您造訪登入頁面。</translation>
+<translation id="3564848315152754834">USB 安全金鑰</translation>
 <translation id="3566721612727112615">未新增任何網站</translation>
 <translation id="3569382839528428029">你想讓 <ph name="APP_NAME" /> 共用你的畫面嗎?</translation>
 <translation id="3570985609317741174">網頁內容</translation>
@@ -1741,6 +1743,7 @@
 <translation id="3627588569887975815">在無痕式視窗中開啟連結(&amp;G)</translation>
 <translation id="3627671146180677314">Netscape 憑證更新時間</translation>
 <translation id="3627879631695760395">安裝「<ph name="APP" />」...</translation>
+<translation id="3630132874740063857">你的電話號碼</translation>
 <translation id="3630995161997703415">請將這個網站加入檔案櫃,以便隨時使用</translation>
 <translation id="3635030235490426869">分頁 1</translation>
 <translation id="3636096452488277381"><ph name="USER_GIVEN_NAME" />,你好!</translation>
@@ -1762,6 +1765,7 @@
 <translation id="3664511988987167893">擴充功能圖示</translation>
 <translation id="3665589677786828986">Chrome 偵測到另一個程式竄改了部分瀏覽器設定,現已將這些設定重設為原始預設值。</translation>
 <translation id="3668570675727296296">語言設定</translation>
+<translation id="3668801437375206837">為了進一步診斷藍牙問題,Google 員工可在意見回饋報告額外納入藍牙記錄。勾選這個選項後,你的報告就會納入你目前工作階段的 btsnoop 和 HCI 記錄;這些記錄會經過處理,儘可能移除個人識別資訊 (PII)。這些記錄只有 Listnr 的 Chrome 作業系統產品小組主管可以存取,且會在 90 天後遭到清除。</translation>
 <translation id="3668823961463113931">處理常式</translation>
 <translation id="3670229581627177274">開啟藍牙功能</translation>
 <translation id="3672681487849735243">系統偵測到原廠錯誤</translation>
@@ -1780,6 +1784,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>
@@ -1803,6 +1808,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">具有 Step-Up 功能的 SSL 伺服器</translation>
 <translation id="3735740477244556633">排序依據</translation>
@@ -1903,6 +1909,7 @@
 <translation id="3860381078714302691">歡迎使用 Hangouts Meet</translation>
 <translation id="3861241522664181545">已暫停載入頁面。</translation>
 <translation id="3862134173397075045">歡迎在 Chrome 中體驗 Cast 服務!</translation>
+<translation id="3862693525629180217">透過內建感應器進行驗證</translation>
 <translation id="3862788408946266506">含有「kiosk_only」資訊清單屬性的應用程式只能在 Chrome 作業系統 Kiosk 模式中安裝</translation>
 <translation id="3865414814144988605">解析度</translation>
 <translation id="386548886866354912">使用「<ph name="EXTENSION_NAME" />」封裝</translation>
@@ -2027,6 +2034,7 @@
 <translation id="4055023634561256217">你必須先重新啟動裝置,才能透過 Powerwash 重設裝置。</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">前往商店查看</translation>
+<translation id="4058647953897694817">透過藍牙進行驗證</translation>
 <translation id="4058720513957747556">AppSocket (TCP/IP)</translation>
 <translation id="4058793769387728514">立即檢查文件</translation>
 <translation id="406070391919917862">背景應用程式</translation>
@@ -2040,6 +2048,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>
@@ -2139,6 +2148,7 @@
 <translation id="4250229828105606438">螢幕擷取畫面</translation>
 <translation id="4250680216510889253">否</translation>
 <translation id="4252852543720145436">受保護內容 ID</translation>
+<translation id="4252899949534773101">已停用藍牙</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - 已分享分頁內容</translation>
 <translation id="4254813446494774748">翻譯語言:</translation>
 <translation id="425573743389990240">電池放電速率 (瓦特) (如為負值,表示電池正在充電)</translation>
@@ -2264,8 +2274,8 @@
 <translation id="4480590691557335796">Chrome 可以找出電腦上有害的軟體並予以移除</translation>
 <translation id="4481530544597605423">解除配對的裝置</translation>
 <translation id="4482194545587547824">Google 可能會使用您的瀏覽記錄,為您提供個人化的搜尋服務和其他各項 Google 服務。</translation>
-<translation id="4493287891836751813">認識你的 Google 助理</translation>
 <translation id="4495419450179050807">不要顯示這個網頁</translation>
+<translation id="449938344715680828">按下 |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| 鍵,再按下 |<ph name="ACCELERATOR3" />| 鍵即可結束</translation>
 <translation id="4499718683476608392">啟用信用卡自動填入功能,輕鬆一按即可填妥表單</translation>
 <translation id="4500114933761911433">「<ph name="PLUGIN_NAME" />」當機了</translation>
 <translation id="450099669180426158">驚嘆號圖示</translation>
@@ -2319,7 +2329,6 @@
 <translation id="4572659312570518089">驗證在連線至「<ph name="DEVICE_NAME" />」時遭到取消。</translation>
 <translation id="4572815280350369984"><ph name="FILE_TYPE" /> 檔案</translation>
 <translation id="457386861538956877">更多…</translation>
-<translation id="4576537685267142337">移開手指,然後再次輕觸感應器</translation>
 <translation id="4576541033847873020">配對藍牙裝置</translation>
 <translation id="4579581181964204535">無法投放 <ph name="HOST_NAME" />。</translation>
 <translation id="4580526846085481512">你確定要刪除 $1 個項目嗎?</translation>
@@ -2342,6 +2351,7 @@
 <translation id="4611114513649582138">可使用數據連線</translation>
 <translation id="4613271546271159013">擴充功能已變更開啟新分頁時所顯示的頁面。</translation>
 <translation id="4615586811063744755">未選取任何 Cookie</translation>
+<translation id="4615618657481886098">你先前已經註冊過這個金鑰,無需重複註冊。</translation>
 <translation id="4617270414136722281">擴充功能選項</translation>
 <translation id="4619615317237390068">在其他裝置上開啟的分頁</translation>
 <translation id="4620809267248568679">這項設定是由擴充功能執行。</translation>
@@ -2451,6 +2461,7 @@
 <translation id="4790972063719531840">自動將診斷資料和使用情況資料傳送給 Google</translation>
 <translation id="4792711294155034829">回報問題(&amp;R)...</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>
@@ -2517,6 +2528,7 @@
 <translation id="4882473678324857464">將焦點移至書籤</translation>
 <translation id="4882831918239250449">控制 Google 使用瀏覽記錄提供個人化搜尋服務、廣告和其他內容的方式</translation>
 <translation id="4883178195103750615">將書籤匯出為 HTML 檔案...</translation>
+<translation id="4883274597792587930">找出印在金鑰背面的名稱</translation>
 <translation id="4883436287898674711">所有 <ph name="WEBSITE_1" /> 網站</translation>
 <translation id="48838266408104654">工作管理員(&amp;T)</translation>
 <translation id="4883898390143004266">協助應用程式判斷位置。使用 Google 的定位服務,讓應用程式更準確地判斷你的位置。Google 可能會定期收集位置資料,並以匿名方式使用這類資料,藉此提高定位精確度及改善適地性服務。<ph name="BEGIN_LINK1" />瞭解詳情<ph name="END_LINK1" /></translation>
@@ -2564,7 +2576,6 @@
 <translation id="4941627891654116707">字型大小</translation>
 <translation id="494286511941020793">Proxy 設定說明</translation>
 <translation id="4945444280533270988">Smart Lock 已開啟</translation>
-<translation id="494660967831069720">資料不全</translation>
 <translation id="4953689047182316270">回應協助工具活動</translation>
 <translation id="4953808748584563296">預設的橘色顯示圖片</translation>
 <translation id="4955814292505481804">年約</translation>
@@ -2989,6 +3000,7 @@
 <translation id="55601339223879446">調整顯示畫面中的桌面邊界</translation>
 <translation id="5562781907504170924">這個分頁已連線至藍牙裝置。</translation>
 <translation id="5563234215388768762">搜尋 Google 或輸入網址</translation>
+<translation id="5567950944308676169">插入並啟用你的安全金鑰</translation>
 <translation id="5567989639534621706">應用程式快取</translation>
 <translation id="5568069709869097550">無法登入</translation>
 <translation id="5568144734023334204">Android 儲存空間</translation>
@@ -3235,6 +3247,7 @@
 <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="5941153596444580863">新增使用者...</translation>
@@ -3271,6 +3284,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>
@@ -3281,6 +3295,7 @@
 <translation id="6020431688553761150">伺服器未授予你這個資源的存取權。</translation>
 <translation id="602251597322198729">此網站試圖下載多個檔案,請問你要允許下載嗎?</translation>
 <translation id="6022526133015258832">開啟全螢幕</translation>
+<translation id="6022705094403139349">準備好配對你的安全金鑰了嗎?</translation>
 <translation id="6023643151125006053">這部裝置 (序號:<ph name="SERIAL_NUMBER" />) 已被 <ph name="SAML_DOMAIN" /> 管理員鎖定。</translation>
 <translation id="6025215716629925253">堆疊追蹤</translation>
 <translation id="6026047032548434446">要安裝應用程式嗎?</translation>
@@ -3344,6 +3359,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>
@@ -3389,6 +3405,7 @@
 <translation id="6169666352732958425">無法投放桌面。</translation>
 <translation id="6171948306033499786">暫停列印</translation>
 <translation id="6175314957787328458">Microsoft 網域 GUID</translation>
+<translation id="6176043333338857209">系統會暫時開啟藍牙功能,以便與你的安全金鑰通訊</translation>
 <translation id="6178664161104547336">選取憑證</translation>
 <translation id="6181431612547969857">下載遭封鎖</translation>
 <translation id="6185132558746749656">裝置位置</translation>
@@ -3476,6 +3493,7 @@
 <translation id="6311220991371174222">開啟你的設定檔時發生錯誤,因此無法啟動 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>
@@ -3520,7 +3538,6 @@
 <translation id="6384275966486438344">將你的搜尋設定變更為:<ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">網站可以儲存及讀取 Cookie 資料</translation>
 <translation id="6388429472088318283">搜尋語言</translation>
-<translation id="6388771388956873507">找到裝置上的指紋感應器,並以手指輕觸</translation>
 <translation id="6390799748543157332">你在這個視窗瀏覽的網頁不會顯示在瀏覽器記錄中,而且在你關閉所有開啟的訪客視窗後,電腦也不會留下 Cookie 等其他記錄。不過,系統將會保留你下載的所有檔案。</translation>
 <translation id="6390994422085833176">在設定完成後檢閱同步處理和個人化功能</translation>
 <translation id="6395423953133416962">傳送<ph name="BEGIN_LINK1" />系統資訊<ph name="END_LINK1" />和<ph name="BEGIN_LINK2" />指標<ph name="END_LINK2" /></translation>
@@ -3532,6 +3549,7 @@
 <translation id="6399774419735315745">女間諜</translation>
 <translation id="6401445054534215853">檔案櫃項目 1</translation>
 <translation id="6404511346730675251">編輯書籤</translation>
+<translation id="6405510437656969977">當你準備好輸入 PIN 碼時再繼續操作</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>
@@ -3649,6 +3667,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 永久簽署</translation>
@@ -3698,6 +3717,7 @@
 <translation id="6644846457769259194">正在更新你的裝置 (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6647228709620733774">Netscape 憑證授權撤銷網址</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>
@@ -3773,6 +3793,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>
@@ -3808,6 +3829,7 @@
 <translation id="6823506025919456619">你必須登入 Chrome 才能查看自己的裝置</translation>
 <translation id="6824564591481349393">複製電子郵件地址(&amp;E)</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>
@@ -3841,6 +3863,7 @@
 <translation id="6880587130513028875">系統已封鎖此網頁的圖片。</translation>
 <translation id="6883319974225028188">糟糕!  系統無法儲存裝置設定。</translation>
 <translation id="6885771755599377173">預覽系統資訊</translation>
+<translation id="6886476658664859389">NFC 安全金鑰</translation>
 <translation id="6886871292305414135">在新分頁中開啟連結(&amp;T)</translation>
 <translation id="6892812721183419409">以 <ph name="USER" /> 身分開啟連結</translation>
 <translation id="6896758677409633944">複製</translation>
@@ -4006,6 +4029,7 @@
 <translation id="713122686776214250">新增網頁(&amp;G)...</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>
@@ -4051,6 +4075,7 @@
 <translation id="7201118060536064622">已刪除「<ph name="DELETED_ITEM_NAME" />」</translation>
 <translation id="7206693748120342859">正在下載 <ph name="PLUGIN_NAME" />...</translation>
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{離開網頁}other{離開網頁}}</translation>
+<translation id="721467499098558573">按住安全金鑰上的按鈕至少 5 秒</translation>
 <translation id="7216409898977639127">行動網路提供者</translation>
 <translation id="7216595297012131718">根據你的偏好設定排列語言順序</translation>
 <translation id="7220019174139618249">無法將密碼匯出到「<ph name="FOLDER" />」</translation>
@@ -4086,6 +4111,7 @@
 <translation id="7256710573727326513">在分頁中開啟</translation>
 <translation id="725758059478686223">列印服務</translation>
 <translation id="7257666756905341374">讀取你複製和貼上的資料</translation>
+<translation id="7260764918845374269">你的安全金鑰必須處於配對模式才會顯示。請按住安全金鑰上的按鈕至少 5 秒。</translation>
 <translation id="7262004276116528033">這是由 <ph name="SAML_DOMAIN" /> 代管的登入服務。</translation>
 <translation id="7268365133021434339">關閉分頁</translation>
 <translation id="7268659760406822741">可用的服務</translation>
@@ -4122,7 +4148,6 @@
 <translation id="7309257895202129721">顯示控制介面(&amp;C)</translation>
 <translation id="7310598146671372464">無法登入,伺服器不支援指定的 Kerberos 加密類型。請與你的管理員聯絡。</translation>
 <translation id="7311079019872751559">無沙箱防護的外掛程式存取行為</translation>
-<translation id="7311891583377621132">請稍微移動手指,讓系統擷取完整指紋</translation>
 <translation id="7317680720589234980">螢幕鎖定和登入選項</translation>
 <translation id="7321545336522791733">無法連上伺服器</translation>
 <translation id="7324297612904500502">測試版論壇</translation>
@@ -4204,6 +4229,7 @@
 <translation id="7464490149090366184">壓縮失敗,項目已存在:「$1」</translation>
 <translation id="7465778193084373987">Netscape 憑證撤銷網址</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="7473753388963818366">讓我們開始設定你的 <ph name="DEVICE_TYPE" /> 吧!</translation>
@@ -4253,6 +4279,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>
@@ -4354,6 +4381,7 @@
 <translation id="7709152031285164251">失敗 - <ph name="INTERRUPT_REASON" /></translation>
 <translation id="7710568461918838723">投放(&amp;C)...</translation>
 <translation id="7711920809702896782">圖片資訊</translation>
+<translation id="7712740978240882272">使用你的手機解鎖 Chromebook。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="7712836429117959503">不明的擴充功能 (ID:<ph name="EXTENSION_ID" />)</translation>
 <translation id="7714307061282548371">系統允許使用 <ph name="DOMAIN" /> 的 Cookie</translation>
 <translation id="7714464543167945231">憑證</translation>
@@ -4569,6 +4597,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>
@@ -4701,6 +4730,7 @@
 <translation id="8185331656081929126">在網路上偵測到新印表機時顯示通知</translation>
 <translation id="8186609076106987817">伺服器找不到檔案。</translation>
 <translation id="8188120771410500975">檢查文字欄位的拼字(&amp;C)</translation>
+<translation id="8188389033983459049">檢查裝置設定並開啟藍牙功能以便繼續</translation>
 <translation id="8190193592390505034">正在連線至 <ph name="PROVIDER_NAME" /></translation>
 <translation id="8191230140820435481">管理你的應用程式、擴充功能和主題</translation>
 <translation id="8191453843330043793">V8 Proxy 解析工具</translation>
@@ -4795,6 +4825,7 @@
 <translation id="8353683614194668312">可用權限:</translation>
 <translation id="8356197132883132838"><ph name="TITLE" /> - <ph name="COUNT" /></translation>
 <translation id="8358685469073206162">你要還原網頁嗎?</translation>
+<translation id="8362993567435070757">找出金鑰背面的 6 位數 PIN 碼</translation>
 <translation id="8363095875018065315">穩定版</translation>
 <translation id="8363142353806532503">無法使用麥克風</translation>
 <translation id="8366396658833131068">你的網路連線已恢復。請選取其他網路,或按底下的 [繼續] 按鈕啟動 Kiosk 應用程式。</translation>
@@ -4803,6 +4834,7 @@
 <translation id="8371695176452482769">請說話</translation>
 <translation id="8372369524088641025">WEP 金鑰有誤</translation>
 <translation id="8373553483208508744">關閉多個分頁音訊</translation>
+<translation id="8379878387931047019">這部裝置不支援這個網站所要求的安全金鑰類型</translation>
 <translation id="8382913212082956454">複製電子郵件地址(&amp;E)</translation>
 <translation id="8386903983509584791">掃描完成</translation>
 <translation id="8389492867173948260">允許這個擴充功能讀取及變更你在造訪過的網站留下的所有資料:</translation>
@@ -4921,6 +4953,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>
@@ -4961,7 +4994,6 @@
 <translation id="8639047128869322042">正在檢查有害軟體...</translation>
 <translation id="8639963783467694461">自動填入設定</translation>
 <translation id="8642171459927087831">存取憑證</translation>
-<translation id="8642267168767642381">手指移動速度過慢</translation>
 <translation id="8642947597466641025">放大文字</translation>
 <translation id="8643418457919840804">如要繼續,請選擇一個選項:</translation>
 <translation id="8645354835496065562">繼續允許存取感應器</translation>
@@ -4976,6 +5008,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>
@@ -5098,6 +5131,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>
@@ -5128,11 +5162,13 @@
 <translation id="8872155268274985541">找到的 Kiosk 外部更新資訊清單檔案無效,無法更新 Kiosk 應用程式。請移除 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;S)</translation>
 <translation id="8883847527783433352">同步到其他帳戶</translation>
 <translation id="8885197664446363138">無法使用 Smart Lock</translation>
+<translation id="88870264962436283">在「<ph name="APP_NAME" />」中使用 Touch ID</translation>
 <translation id="8888432776533519951">顏色:</translation>
 <translation id="8890516388109605451">來源</translation>
 <translation id="8892168913673237979">設定完成!</translation>
@@ -5153,6 +5189,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;S)</translation>
 <translation id="8926389886865778422">不再詢問這個問題</translation>
@@ -5261,6 +5298,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>
@@ -5322,7 +5360,6 @@
 <translation id="916607977885256133">子母畫面</translation>
 <translation id="9169496697824289689">查看鍵盤快速鍵</translation>
 <translation id="9169931577761441333">將 <ph name="APP_NAME" /> 新增至主畫面</translation>
-<translation id="9170397650136757332">現在請稍微移動你的手指,讓系統擷取完整的指紋</translation>
 <translation id="9170848237812810038">取消(&amp;U)</translation>
 <translation id="9170884462774788842">電腦中其他程式所新增的主題可能會變更 Chrome 的運作方式。</translation>
 <translation id="9173995187295789444">正在掃描藍牙裝置…</translation>
@@ -5386,6 +5423,7 @@
 <translation id="971774202801778802">書籤網址</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/browser/accessibility/accessibility_extension_api.cc b/chrome/browser/accessibility/accessibility_extension_api.cc
index fa43e45..2ffd012 100644
--- a/chrome/browser/accessibility/accessibility_extension_api.cc
+++ b/chrome/browser/accessibility/accessibility_extension_api.cc
@@ -41,7 +41,6 @@
 #include "ash/shell.h"
 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
 #include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h"
-#include "services/ui/public/interfaces/accessibility_manager.mojom.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/ui_base_features.h"
 #include "ui/events/event_sink.h"
diff --git a/chrome/browser/android/download/available_offline_content_provider.cc b/chrome/browser/android/download/available_offline_content_provider.cc
index 25d7063..bdf81923 100644
--- a/chrome/browser/android/download/available_offline_content_provider.cc
+++ b/chrome/browser/android/download/available_offline_content_provider.cc
@@ -9,6 +9,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "chrome/browser/android/chrome_feature_list.h"
+#include "chrome/browser/android/download/download_manager_service.h"
 #include "chrome/browser/offline_items_collection/offline_content_aggregator_factory.h"
 #include "components/offline_items_collection/core/offline_content_aggregator.h"
 #include "components/offline_items_collection/core/offline_item.h"
@@ -223,6 +224,20 @@
                                          base::Unretained(aggregator)));
 }
 
+void AvailableOfflineContentProvider::LaunchItem(
+    const std::string& item_id,
+    const std::string& name_space) {
+  offline_items_collection::OfflineContentAggregator* aggregator =
+      OfflineContentAggregatorFactory::GetForBrowserContext(browser_context_);
+  aggregator->OpenItem(
+      offline_items_collection::LaunchLocation::NET_ERROR_SUGGESTION,
+      offline_items_collection::ContentId(name_space, item_id));
+}
+
+void AvailableOfflineContentProvider::LaunchDownloadsPage() {
+  DownloadManagerService::GetInstance()->ShowDownloadManager();
+}
+
 void AvailableOfflineContentProvider::Create(
     content::BrowserContext* browser_context,
     chrome::mojom::AvailableOfflineContentProviderRequest request) {
diff --git a/chrome/browser/android/download/available_offline_content_provider.h b/chrome/browser/android/download/available_offline_content_provider.h
index 5d9787f..257b4f684 100644
--- a/chrome/browser/android/download/available_offline_content_provider.h
+++ b/chrome/browser/android/download/available_offline_content_provider.h
@@ -27,6 +27,9 @@
 
   // chrome::mojom::AvailableOfflineContentProvider methods.
   void List(ListCallback callback) override;
+  void LaunchItem(const std::string& item_id,
+                  const std::string& name_space) override;
+  void LaunchDownloadsPage() override;
 
   static void Create(
       content::BrowserContext* browser_context,
diff --git a/chrome/browser/android/download/download_manager_service.cc b/chrome/browser/android/download/download_manager_service.cc
index ebbbebc..6a46b9f1 100644
--- a/chrome/browser/android/download/download_manager_service.cc
+++ b/chrome/browser/android/download/download_manager_service.cc
@@ -218,6 +218,11 @@
   return nullptr;
 }
 
+void DownloadManagerService::ShowDownloadManager() {
+  JNIEnv* env = base::android::AttachCurrentThread();
+  Java_DownloadManagerService_showDownloadManager(env, java_ref_);
+}
+
 void DownloadManagerService::OpenDownload(download::DownloadItem* download,
                                           int source) {
   JNIEnv* env = base::android::AttachCurrentThread();
diff --git a/chrome/browser/android/download/download_manager_service.h b/chrome/browser/android/download/download_manager_service.h
index d32a310f..a1b42a5 100644
--- a/chrome/browser/android/download/download_manager_service.h
+++ b/chrome/browser/android/download/download_manager_service.h
@@ -61,6 +61,9 @@
   // Called when full browser process starts.
   void OnFullBrowserStarted(JNIEnv* env, jobject obj);
 
+  // Called to show the download manager.
+  void ShowDownloadManager();
+
   // Called to open a given download item.
   void OpenDownload(download::DownloadItem* download, int source);
 
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device.cc b/chrome/browser/android/vr/arcore_device/arcore_device.cc
index 5314478..60dcc33 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_device.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_device.cc
@@ -312,7 +312,7 @@
 
 void ARCoreDevice::RequestHitTest(
     mojom::XRRayPtr ray,
-    mojom::XREnviromentIntegrationProvider::RequestHitTestCallback callback) {
+    mojom::XREnvironmentIntegrationProvider::RequestHitTestCallback callback) {
   DCHECK(IsOnMainThread());
 
   PostTaskToGlThread(base::BindOnce(
@@ -442,15 +442,16 @@
   }
 
   mojom::XRFrameDataProviderPtr data_provider;
-  mojom::XREnviromentIntegrationProviderPtr enviroment_provider;
+  mojom::XREnvironmentIntegrationProviderPtr environment_provider;
   mojom::XRSessionControllerPtr controller;
-  magic_window_sessions_.push_back(std::make_unique<VRDisplayImpl>(
-      this, mojo::MakeRequest(&data_provider),
-      mojo::MakeRequest(&enviroment_provider), mojo::MakeRequest(&controller)));
+  magic_window_sessions_.push_back(
+      std::make_unique<VRDisplayImpl>(this, mojo::MakeRequest(&data_provider),
+                                      mojo::MakeRequest(&environment_provider),
+                                      mojo::MakeRequest(&controller)));
 
   auto session = mojom::XRSession::New();
   session->data_provider = data_provider.PassInterface();
-  session->enviroment_provider = enviroment_provider.PassInterface();
+  session->environment_provider = environment_provider.PassInterface();
   session->display_info = display_info_.Clone();
 
   std::move(callback).Run(std::move(session), std::move(controller));
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device.h b/chrome/browser/android/vr/arcore_device/arcore_device.h
index 0dfe03f..c7d54dd1 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_device.h
+++ b/chrome/browser/android/vr/arcore_device/arcore_device.h
@@ -55,7 +55,7 @@
       mojom::XRFrameDataProvider::GetFrameDataCallback callback) override;
   void RequestHitTest(
       mojom::XRRayPtr ray,
-      mojom::XREnviromentIntegrationProvider::RequestHitTestCallback callback)
+      mojom::XREnvironmentIntegrationProvider::RequestHitTestCallback callback)
       override;
 
   void OnMailboxBridgeReady();
diff --git a/chrome/browser/android/vr/arcore_device/arcore_gl.cc b/chrome/browser/android/vr/arcore_device/arcore_gl.cc
index 1962ad7..8ddcad9 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_gl.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_gl.cc
@@ -82,7 +82,7 @@
   ARCoreHitTestRequest() = default;
   ~ARCoreHitTestRequest() = default;
   mojom::XRRayPtr ray;
-  mojom::XREnviromentIntegrationProvider::RequestHitTestCallback callback;
+  mojom::XREnvironmentIntegrationProvider::RequestHitTestCallback callback;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ARCoreHitTestRequest);
@@ -251,7 +251,7 @@
 
 void ARCoreGl::RequestHitTest(
     mojom::XRRayPtr ray,
-    mojom::XREnviromentIntegrationProvider::RequestHitTestCallback callback) {
+    mojom::XREnvironmentIntegrationProvider::RequestHitTestCallback callback) {
   DCHECK(IsOnGlThread());
   DCHECK(is_initialized_);
 
diff --git a/chrome/browser/android/vr/arcore_device/arcore_gl.h b/chrome/browser/android/vr/arcore_device/arcore_gl.h
index 5e941f3..00ad774 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_gl.h
+++ b/chrome/browser/android/vr/arcore_device/arcore_gl.h
@@ -59,7 +59,7 @@
 
   void RequestHitTest(
       mojom::XRRayPtr,
-      mojom::XREnviromentIntegrationProvider::RequestHitTestCallback);
+      mojom::XREnvironmentIntegrationProvider::RequestHitTestCallback);
 
   base::WeakPtr<ARCoreGl> GetWeakPtr();
 
diff --git a/chrome/browser/android/vr/gl_browser_interface.h b/chrome/browser/android/vr/gl_browser_interface.h
index 86a6f000..9535c74 100644
--- a/chrome/browser/android/vr/gl_browser_interface.h
+++ b/chrome/browser/android/vr/gl_browser_interface.h
@@ -24,10 +24,11 @@
 
 // VrShellGl talks to VrShell through this interface. This could be split up if
 // VrShellGl is refactored into components.
-class GlBrowserInterface : public RenderLoopBrowserInterface {
+class GlBrowserInterface {
  public:
-  ~GlBrowserInterface() override = default;
+  virtual ~GlBrowserInterface() {}
 
+  virtual void ForceExitVr() = 0;
   virtual void ContentSurfaceCreated(jobject surface,
                                      gl::SurfaceTexture* texture) = 0;
   virtual void ContentOverlaySurfaceCreated(jobject surface,
diff --git a/chrome/browser/android/vr/gvr_controller_delegate.cc b/chrome/browser/android/vr/gvr_controller_delegate.cc
index 1985b58..f5543b0 100644
--- a/chrome/browser/android/vr/gvr_controller_delegate.cc
+++ b/chrome/browser/android/vr/gvr_controller_delegate.cc
@@ -25,10 +25,10 @@
 
 GvrControllerDelegate::~GvrControllerDelegate() = default;
 
-void GvrControllerDelegate::UpdateController(const RenderInfo& render_info,
+void GvrControllerDelegate::UpdateController(const gfx::Transform& head_pose,
                                              base::TimeTicks current_time,
                                              bool is_webxr_frame) {
-  controller_->UpdateState(render_info.head_pose);
+  controller_->UpdateState(head_pose);
 
   device::GvrGamepadData controller_data = controller_->GetGamepadData();
   if (!is_webxr_frame)
@@ -36,8 +36,9 @@
   browser_->UpdateGamepadData(controller_data);
 }
 
-ControllerModel GvrControllerDelegate::GetModel(const RenderInfo& render_info) {
-  gfx::Vector3dF head_direction = GetForwardVector(render_info.head_pose);
+ControllerModel GvrControllerDelegate::GetModel(
+    const gfx::Transform& head_pose) {
+  gfx::Vector3dF head_direction = GetForwardVector(head_pose);
 
   gfx::Vector3dF controller_direction;
   gfx::Quaternion controller_quat;
diff --git a/chrome/browser/android/vr/gvr_controller_delegate.h b/chrome/browser/android/vr/gvr_controller_delegate.h
index 2e0eed1..8c3c9437 100644
--- a/chrome/browser/android/vr/gvr_controller_delegate.h
+++ b/chrome/browser/android/vr/gvr_controller_delegate.h
@@ -26,10 +26,10 @@
   ~GvrControllerDelegate() override;
 
   // ControllerDelegate implementation.
-  void UpdateController(const RenderInfo& render_info,
+  void UpdateController(const gfx::Transform& head_pose,
                         base::TimeTicks current_time,
                         bool is_webxr_frame) override;
-  ControllerModel GetModel(const RenderInfo& render_info) override;
+  ControllerModel GetModel(const gfx::Transform& head_pose) override;
   InputEventList GetGestures(base::TimeTicks current_time) override;
   device::mojom::XRInputSourceStatePtr GetInputSourceState() override;
   void OnResume() override;
diff --git a/chrome/browser/android/vr/render_loop_factory.cc b/chrome/browser/android/vr/render_loop_factory.cc
index 5121c95..9d96194 100644
--- a/chrome/browser/android/vr/render_loop_factory.cc
+++ b/chrome/browser/android/vr/render_loop_factory.cc
@@ -43,7 +43,7 @@
 
 RenderLoopFactory::Params::~Params() = default;
 
-std::unique_ptr<VrShellGl> RenderLoopFactory::Create(
+std::unique_ptr<RenderLoop> RenderLoopFactory::Create(
     VrGLThread* vr_gl_thread,
     UiFactory* ui_factory,
     std::unique_ptr<Params> params) {
@@ -65,22 +65,28 @@
   auto controller_delegate =
       std::make_unique<GvrControllerDelegate>(params->gvr_api, vr_gl_thread);
   auto vr_shell_gl = std::make_unique<VrShellGl>(
-      std::move(ui), std::move(controller_delegate), 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_shell_gl->SetDrawWebXrCallback(base::BindRepeating(
-      &RenderLoop::Draw, base::Unretained(vr_shell_gl.get()),
-      CompositorDelegate::kWebXrFrame));
-  vr_shell_gl->SetDrawBrowserCallback(base::BindRepeating(
-      &RenderLoop::Draw, base::Unretained(vr_shell_gl.get()),
-      CompositorDelegate::kUiFrame));
+      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(
       FROM_HERE,
       base::BindOnce(&VrShellGl::Init, vr_shell_gl->GetWeakPtr(),
                      base::Unretained(params->gl_surface_created_event),
                      base::Passed(std::move(params->surface_callback))));
-  return vr_shell_gl;
+  SchedulerDelegate* scheduler_delegate = vr_shell_gl.get();
+  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())));
+  return render_loop;
 }
 
 }  // namespace vr
diff --git a/chrome/browser/android/vr/render_loop_factory.h b/chrome/browser/android/vr/render_loop_factory.h
index 5bbca18..4c2cdb9 100644
--- a/chrome/browser/android/vr/render_loop_factory.h
+++ b/chrome/browser/android/vr/render_loop_factory.h
@@ -22,9 +22,9 @@
 
 namespace vr {
 
+class RenderLoop;
 class UiFactory;
 class VrGLThread;
-class VrShellGl;
 
 class VR_EXPORT RenderLoopFactory {
  public:
@@ -48,10 +48,9 @@
     base::OnceCallback<gfx::AcceleratedWidget()> surface_callback;
   };
 
-  // TODO(acondor): Build an instance of RenderLoop owning VrShellGl.
-  static std::unique_ptr<VrShellGl> Create(VrGLThread* vr_gl_thread,
-                                           UiFactory* ui_factory,
-                                           std::unique_ptr<Params> params);
+  static std::unique_ptr<RenderLoop> Create(VrGLThread* vr_gl_thread,
+                                            UiFactory* ui_factory,
+                                            std::unique_ptr<Params> params);
 };
 
 }  // namespace vr
diff --git a/chrome/browser/android/vr/vr_gl_thread.cc b/chrome/browser/android/vr/vr_gl_thread.cc
index d190e38a..e3828025 100644
--- a/chrome/browser/android/vr/vr_gl_thread.cc
+++ b/chrome/browser/android/vr/vr_gl_thread.cc
@@ -53,8 +53,8 @@
   Stop();
 }
 
-base::WeakPtr<VrShellGl> VrGLThread::GetVrShellGl() {
-  return vr_shell_gl_->GetWeakPtr();
+base::WeakPtr<RenderLoop> VrGLThread::GetRenderLoop() {
+  return render_loop_->GetWeakPtr();
 }
 
 void VrGLThread::SetInputConnection(VrInputConnection* input_connection) {
@@ -64,13 +64,13 @@
 
 void VrGLThread::Init() {
   ui_factory_ = std::make_unique<UiFactory>();
-  vr_shell_gl_ = RenderLoopFactory::Create(this, ui_factory_.get(),
+  render_loop_ = RenderLoopFactory::Create(this, ui_factory_.get(),
                                            std::move(factory_params_));
-  weak_browser_ui_ = vr_shell_gl_->GetBrowserUiWeakPtr();
+  weak_browser_ui_ = render_loop_->GetBrowserUiWeakPtr();
 }
 
 void VrGLThread::CleanUp() {
-  vr_shell_gl_.reset();
+  render_loop_.reset();
 }
 
 void VrGLThread::ContentSurfaceCreated(jobject surface,
@@ -168,9 +168,7 @@
   DCHECK(OnGlThread());
   main_thread_task_runner_->PostTask(
       FROM_HERE, base::BindOnce(&VrShell::ExitPresent, weak_vr_shell_));
-  // TODO(vollick): Ui should hang onto the appropriate pointer rather than
-  // bouncing through VrGLThread.
-  vr_shell_gl_->OnExitPresent();
+  render_loop_->OnExitPresent();
 }
 
 void VrGLThread::ExitFullscreen() {
diff --git a/chrome/browser/android/vr/vr_gl_thread.h b/chrome/browser/android/vr/vr_gl_thread.h
index 8688a873..0d088aa9 100644
--- a/chrome/browser/android/vr/vr_gl_thread.h
+++ b/chrome/browser/android/vr/vr_gl_thread.h
@@ -18,6 +18,7 @@
 #include "chrome/browser/vr/model/omnibox_suggestions.h"
 #include "chrome/browser/vr/model/sound_id.h"
 #include "chrome/browser/vr/platform_input_handler.h"
+#include "chrome/browser/vr/render_loop_browser_interface.h"
 #include "chrome/browser/vr/text_input_delegate.h"
 #include "chrome/browser/vr/ui_browser_interface.h"
 #include "chrome/browser/vr/ui_test_input.h"
@@ -36,10 +37,10 @@
 
 class VrInputConnection;
 class VrShell;
-class VrShellGl;
 
 class VrGLThread : public base::android::JavaHandlerThread,
                    public PlatformInputHandler,
+                   public RenderLoopBrowserInterface,
                    public GlBrowserInterface,
                    public UiBrowserInterface,
                    public BrowserUiInterface {
@@ -57,7 +58,7 @@
       base::OnceCallback<gfx::AcceleratedWidget()> surface_callback);
 
   ~VrGLThread() override;
-  base::WeakPtr<VrShellGl> GetVrShellGl();
+  base::WeakPtr<RenderLoop> GetRenderLoop();
   void SetInputConnection(VrInputConnection* input_connection);
 
   // GlBrowserInterface implementation (GL calling to VrShell).
@@ -170,7 +171,7 @@
 
   // Created on GL thread.
   std::unique_ptr<UiFactory> ui_factory_;
-  std::unique_ptr<VrShellGl> vr_shell_gl_;
+  std::unique_ptr<RenderLoop> render_loop_;
   std::unique_ptr<gvr::GvrApi> gvr_api_;
 
   // This state is used for initializing the RenderLoop.
diff --git a/chrome/browser/android/vr/vr_shell.cc b/chrome/browser/android/vr/vr_shell.cc
index 988b04ea..7cc8e26d 100644
--- a/chrome/browser/android/vr/vr_shell.cc
+++ b/chrome/browser/android/vr/vr_shell.cc
@@ -27,7 +27,6 @@
 #include "chrome/browser/android/vr/vr_gl_thread.h"
 #include "chrome/browser/android/vr/vr_input_connection.h"
 #include "chrome/browser/android/vr/vr_shell_delegate.h"
-#include "chrome/browser/android/vr/vr_shell_gl.h"
 #include "chrome/browser/android/vr/vr_web_contents_observer.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/component_updater/vr_assets_component_installer.h"
@@ -44,6 +43,7 @@
 #include "chrome/browser/vr/model/assets.h"
 #include "chrome/browser/vr/model/omnibox_suggestions.h"
 #include "chrome/browser/vr/model/text_input_info.h"
+#include "chrome/browser/vr/render_loop.h"
 #include "chrome/browser/vr/toolbar_helper.h"
 #include "chrome/browser/vr/ui_test_input.h"
 #include "chrome/browser/vr/vr_tab_helper.h"
@@ -221,8 +221,8 @@
                            const JavaParamRef<jobject>& tab) {
   content_id_++;
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::OnSwapContents,
-                                gl_thread_->GetVrShellGl(), content_id_));
+                 base::BindOnce(&RenderLoop::OnSwapContents,
+                                gl_thread_->GetRenderLoop(), content_id_));
   TabAndroid* active_tab =
       tab.is_null()
           ? nullptr
@@ -492,13 +492,13 @@
   }
 
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::OnTriggerEvent,
-                                gl_thread_->GetVrShellGl(), touched));
+                 base::BindOnce(&RenderLoop::OnTriggerEvent,
+                                gl_thread_->GetRenderLoop(), touched));
 }
 
 void VrShell::OnPause(JNIEnv* env, const JavaParamRef<jobject>& obj) {
-  PostToGlThread(FROM_HERE, base::BindOnce(&VrShellGl::OnPause,
-                                           gl_thread_->GetVrShellGl()));
+  PostToGlThread(FROM_HERE, base::BindOnce(&RenderLoop::OnPause,
+                                           gl_thread_->GetRenderLoop()));
 
   // exit vr session
   SessionMetricsHelper* metrics_helper =
@@ -511,15 +511,15 @@
 }
 
 void VrShell::OnResume(JNIEnv* env, const JavaParamRef<jobject>& obj) {
-  // Calling WaitForAssets before VrShellGl::OnResume so that the UI won't
+  // Calling WaitForAssets before RenderLoop::OnResume so that the UI won't
   // accidentally produce an initial frame with UI.
   if (can_load_new_assets_) {
     ui_->WaitForAssets();
     LoadAssets();
   }
 
-  PostToGlThread(FROM_HERE, base::BindOnce(&VrShellGl::OnResume,
-                                           gl_thread_->GetVrShellGl()));
+  PostToGlThread(FROM_HERE, base::BindOnce(&RenderLoop::OnResume,
+                                           gl_thread_->GetRenderLoop()));
 
   SessionMetricsHelper* metrics_helper =
       SessionMetricsHelper::FromWebContents(web_contents_);
@@ -550,8 +550,8 @@
   if (metrics_helper)
     metrics_helper->SetWebVREnabled(enabled);
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::SetWebVrMode,
-                                gl_thread_->GetVrShellGl(), enabled));
+                 base::BindOnce(&RenderLoop::SetWebXrMode,
+                                gl_thread_->GetRenderLoop(), enabled));
   // We create and dispose a page info in order to get notifed of page
   // permissions.
   CreatePageInfo();
@@ -637,16 +637,16 @@
                              const base::android::JavaParamRef<jobject>& obj,
                              float width,
                              float height) {
-  PostToGlThread(FROM_HERE, base::BindOnce(&VrShellGl::EnableAlertDialog,
-                                           gl_thread_->GetVrShellGl(),
+  PostToGlThread(FROM_HERE, base::BindOnce(&RenderLoop::EnableAlertDialog,
+                                           gl_thread_->GetRenderLoop(),
                                            gl_thread_.get(), width, height));
 }
 
 void VrShell::CloseAlertDialog(
     JNIEnv* env,
     const base::android::JavaParamRef<jobject>& obj) {
-  PostToGlThread(FROM_HERE, base::BindOnce(&VrShellGl::DisableAlertDialog,
-                                           gl_thread_->GetVrShellGl()));
+  PostToGlThread(FROM_HERE, base::BindOnce(&RenderLoop::DisableAlertDialog,
+                                           gl_thread_->GetRenderLoop()));
   // This will refresh our permissions after an alert is closed which should
   // ensure that long press on the app button gives accurate results.
   CreatePageInfo();
@@ -667,24 +667,24 @@
     float width,
     float height) {
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::SetAlertDialogSize,
-                                gl_thread_->GetVrShellGl(), width, height));
+                 base::BindOnce(&RenderLoop::SetAlertDialogSize,
+                                gl_thread_->GetRenderLoop(), width, height));
 }
 
 void VrShell::SetDialogLocation(JNIEnv* env,
                                 const base::android::JavaParamRef<jobject>& obj,
                                 float x,
                                 float y) {
-  PostToGlThread(FROM_HERE, base::BindOnce(&VrShellGl::SetDialogLocation,
-                                           gl_thread_->GetVrShellGl(), x, y));
+  PostToGlThread(FROM_HERE, base::BindOnce(&RenderLoop::SetDialogLocation,
+                                           gl_thread_->GetRenderLoop(), x, y));
 }
 
 void VrShell::SetDialogFloating(JNIEnv* env,
                                 const base::android::JavaParamRef<jobject>& obj,
                                 bool floating) {
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::SetDialogFloating,
-                                gl_thread_->GetVrShellGl(), floating));
+                 base::BindOnce(&RenderLoop::SetDialogFloating,
+                                gl_thread_->GetRenderLoop(), floating));
 }
 
 void VrShell::ShowToast(JNIEnv* env,
@@ -692,22 +692,22 @@
                         jstring jtext) {
   base::string16 text;
   base::android::ConvertJavaStringToUTF16(env, jtext, &text);
-  PostToGlThread(FROM_HERE, base::BindOnce(&VrShellGl::ShowToast,
-                                           gl_thread_->GetVrShellGl(), text));
+  PostToGlThread(FROM_HERE, base::BindOnce(&RenderLoop::ShowToast,
+                                           gl_thread_->GetRenderLoop(), text));
 }
 
 void VrShell::CancelToast(JNIEnv* env,
                           const base::android::JavaParamRef<jobject>& obj) {
-  PostToGlThread(FROM_HERE, base::BindOnce(&VrShellGl::CancelToast,
-                                           gl_thread_->GetVrShellGl()));
+  PostToGlThread(FROM_HERE, base::BindOnce(&RenderLoop::CancelToast,
+                                           gl_thread_->GetRenderLoop()));
 }
 
 void VrShell::ConnectPresentingService(
     device::mojom::VRDisplayInfoPtr display_info,
     device::mojom::XRRuntimeSessionOptionsPtr options) {
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::ConnectPresentingService,
-                                gl_thread_->GetVrShellGl(),
+                 base::BindOnce(&RenderLoop::ConnectPresentingService,
+                                gl_thread_->GetRenderLoop(),
                                 std::move(display_info), std::move(options)));
 }
 
@@ -772,16 +772,16 @@
                                                    overlay_height);
   }
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::BufferBoundsChanged,
-                                gl_thread_->GetVrShellGl(),
+                 base::BindOnce(&RenderLoop::BufferBoundsChanged,
+                                gl_thread_->GetRenderLoop(),
                                 gfx::Size(content_width, content_height),
                                 gfx::Size(overlay_width, overlay_height)));
 }
 
 void VrShell::ResumeContentRendering(JNIEnv* env,
                                      const JavaParamRef<jobject>& object) {
-  PostToGlThread(FROM_HERE, base::BindOnce(&VrShellGl::ResumeContentRendering,
-                                           gl_thread_->GetVrShellGl()));
+  PostToGlThread(FROM_HERE, base::BindOnce(&RenderLoop::ResumeContentRendering,
+                                           gl_thread_->GetRenderLoop()));
 }
 
 void VrShell::OnOverlayTextureEmptyChanged(JNIEnv* env,
@@ -952,9 +952,9 @@
                                  window_size.height(), dpr);
 
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::ContentBoundsChanged,
-                                gl_thread_->GetVrShellGl(), window_size.width(),
-                                window_size.height()));
+                 base::BindOnce(&RenderLoop::ContentBoundsChanged,
+                                gl_thread_->GetRenderLoop(),
+                                window_size.width(), window_size.height()));
 }
 
 void VrShell::SetVoiceSearchActive(bool active) {
@@ -1249,8 +1249,8 @@
     JNIEnv* env,
     const base::android::JavaParamRef<jobject>& obj) {
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::AcceptDoffPromptForTesting,
-                                gl_thread_->GetVrShellGl()));
+                 base::BindOnce(&RenderLoop::AcceptDoffPromptForTesting,
+                                gl_thread_->GetRenderLoop()));
 }
 
 void VrShell::SetUiExpectingActivityForTesting(
@@ -1260,8 +1260,8 @@
   UiTestActivityExpectation ui_expectation;
   ui_expectation.quiescence_timeout_ms = quiescence_timeout_ms;
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::SetUiExpectingActivityForTesting,
-                                gl_thread_->GetVrShellGl(), ui_expectation));
+                 base::BindOnce(&RenderLoop::SetUiExpectingActivityForTesting,
+                                gl_thread_->GetRenderLoop(), ui_expectation));
 }
 
 void VrShell::ReportUiActivityResultForTesting(VrUiTestActivityResult result) {
@@ -1283,8 +1283,8 @@
   controller_input.action = static_cast<VrControllerTestAction>(action_type);
   controller_input.position = gfx::PointF(x, y);
   PostToGlThread(FROM_HERE,
-                 base::BindOnce(&VrShellGl::PerformControllerActionForTesting,
-                                gl_thread_->GetVrShellGl(), controller_input));
+                 base::BindOnce(&RenderLoop::PerformControllerActionForTesting,
+                                gl_thread_->GetRenderLoop(), controller_input));
 }
 
 std::unique_ptr<PageInfo> VrShell::CreatePageInfo() {
diff --git a/chrome/browser/android/vr/vr_shell_gl.cc b/chrome/browser/android/vr/vr_shell_gl.cc
index 210b7e8..0a95595 100644
--- a/chrome/browser/android/vr/vr_shell_gl.cc
+++ b/chrome/browser/android/vr/vr_shell_gl.cc
@@ -182,9 +182,7 @@
 
 }  // namespace
 
-VrShellGl::VrShellGl(std::unique_ptr<UiInterface> ui,
-                     std::unique_ptr<ControllerDelegate> controller_delegate,
-                     GlBrowserInterface* browser,
+VrShellGl::VrShellGl(GlBrowserInterface* browser,
                      gvr::GvrApi* gvr_api,
                      bool reprojected_rendering,
                      bool daydream_support,
@@ -192,13 +190,7 @@
                      bool pause_content,
                      bool low_density,
                      size_t sliding_time_size)
-    : RenderLoop(std::move(ui),
-                 this,
-                 this,
-                 std::move(controller_delegate),
-                 browser,
-                 sliding_time_size),
-      webvr_vsync_align_(
+    : webvr_vsync_align_(
           base::FeatureList::IsEnabled(features::kWebVrVsyncAlign)),
       gvr_api_(gvr_api),
       low_density_(low_density),
@@ -240,7 +232,7 @@
   if (gl::GetGLImplementation() == gl::kGLImplementationNone &&
       !gl::init::InitializeGLOneOff()) {
     LOG(ERROR) << "gl::init::InitializeGLOneOff failed";
-    ForceExitVr();
+    browser_->ForceExitVr();
     return;
   }
   scoped_refptr<gl::GLSurface> surface;
@@ -253,12 +245,12 @@
   }
   if (!surface.get()) {
     LOG(ERROR) << "gl::init::CreateOffscreenGLSurface failed";
-    ForceExitVr();
+    browser_->ForceExitVr();
     return;
   }
 
   if (!BaseCompositorDelegate::Initialize(surface)) {
-    ForceExitVr();
+    browser_->ForceExitVr();
     return;
   }
 
@@ -412,7 +404,7 @@
     // 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.
-    ForceExitVr();
+    browser_->ForceExitVr();
     return;
   }
   glBindTexture(GL_TEXTURE_EXTERNAL_OES, buffer->local_texture);
@@ -1548,10 +1540,6 @@
   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());
-  TRACE_COUNTER2("gpu", "VR UI timing (us)", "scene update",
-                 ui_processing_time().GetAverage().InMicroseconds(),
-                 "controller",
-                 ui_controller_update_time().GetAverage().InMicroseconds());
 
   if (frame_type == kWebXrFrame) {
     // We finished processing a frame, this may make pending WebVR
@@ -1571,14 +1559,14 @@
   return web_vr_mode_ && !showing_vr_dialog_ && webvr_frames_received_ > 0;
 }
 
-void VrShellGl::OnSchedulerPause() {
+void VrShellGl::OnPause() {
   vsync_helper_.CancelVSyncRequest();
   gvr_api_->PauseTracking();
   webvr_frame_timeout_.Cancel();
   webvr_spinner_timeout_.Cancel();
 }
 
-void VrShellGl::OnSchedulerResume() {
+void VrShellGl::OnResume() {
   gvr_api_->RefreshViewerProfile();
   viewports_need_updating_ = true;
   gvr_api_->ResumeTracking();
@@ -1600,12 +1588,16 @@
   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::SetWebVrMode(bool enabled) {
+void VrShellGl::SetWebXrMode(bool enabled) {
   web_vr_mode_ = enabled;
 
   if (web_vr_mode_ && submit_client_) {
@@ -1792,13 +1784,18 @@
     // like app button presses, process the controller here.
     device::GvrDelegate::GetGvrPoseWithNeckModel(gvr_api_,
                                                  &render_info_.head_pose);
-    input_states_.push_back(
-        ProcessControllerInputForWebXr(render_info_, frame_time));
+    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__);
diff --git a/chrome/browser/android/vr/vr_shell_gl.h b/chrome/browser/android/vr/vr_shell_gl.h
index afba116..a5558ea 100644
--- a/chrome/browser/android/vr/vr_shell_gl.h
+++ b/chrome/browser/android/vr/vr_shell_gl.h
@@ -26,7 +26,6 @@
 #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/public/mojom/vr_service.mojom.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"
@@ -60,13 +59,11 @@
 namespace vr {
 
 class CompositorUiInterface;
-class ControllerDelegate;
 class FPSMeter;
 class GlBrowserInterface;
 class MailboxToSurfaceBridge;
 class ScopedGpuTrace;
 class SlidingTimeDeltaAverage;
-class UiInterface;
 class VrShell;
 
 struct WebVrBounds {
@@ -96,15 +93,12 @@
 
 // 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 RenderLoop,
-                  public BaseCompositorDelegate,
+class VrShellGl : public BaseCompositorDelegate,
                   public SchedulerDelegate,
                   public device::mojom::XRPresentationProvider,
                   public device::mojom::XRFrameDataProvider {
  public:
-  VrShellGl(std::unique_ptr<UiInterface> ui,
-            std::unique_ptr<ControllerDelegate> controller_delegate,
-            GlBrowserInterface* browser,
+  VrShellGl(GlBrowserInterface* browser,
             gvr::GvrApi* gvr_api,
             bool reprojected_rendering,
             bool daydream_support,
@@ -117,9 +111,6 @@
   void Init(base::WaitableEvent* gl_surface_created_event,
             base::OnceCallback<gfx::AcceleratedWidget()> callback);
 
-  void OnTriggerEvent(bool pressed);
-  void OnExitPresent();
-
   // CompositorDelegate overrides.
   FovRectangles GetRecommendedFovs() override;
   float GetZNear() override;
@@ -141,36 +132,33 @@
   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;
 
   // SchedulerDelegate overrides.
   void SetDrawWebXrCallback(DrawCallback callback) override;
   void SetDrawBrowserCallback(DrawCallback callback) override;
-  // TODO(acondor): Drop "Scheduler" from these names once RenderLoop owns
-  // VrShellGl.
-  void OnSchedulerPause() override;
-  void OnSchedulerResume() 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;
 
-  scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() {
-    return task_runner_;
-  }
-
-  void SetWebVrMode(bool enabled);
   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 BufferBoundsChanged(const gfx::Size& content_buffer_size,
-                           const gfx::Size& overlay_buffer_size);
   void UIBoundsChanged(int width, int height);
-  void ResumeContentRendering();
 
   base::WeakPtr<VrShellGl> GetWeakPtr();
 
-  void ConnectPresentingService(
-      device::mojom::VRDisplayInfoPtr display_info,
-      device::mojom::XRRuntimeSessionOptionsPtr options);
-
  private:
   void InitializeGl(gfx::AcceleratedWidget surface);
   void GvrInit();
@@ -408,6 +396,7 @@
 
   DrawCallback web_xr_draw_callback_;
   DrawCallback browser_draw_callback_;
+  WebXrInputCallback webxr_input_callback_;
 
   std::vector<gvr::BufferSpec> specs_;
 
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc
index 6d53e3d..1ab4de97b 100644
--- a/chrome/browser/apps/guest_view/web_view_browsertest.cc
+++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -4430,26 +4430,3 @@
       embedder->GetRenderWidgetHostView()->GetRenderWidgetHost()->GetProcess(),
       guest->GetRenderWidgetHostView()->GetRenderWidgetHost()));
 }
-
-// Test that a guest sees the synthetic wheel events of a touchpad pinch.
-IN_PROC_BROWSER_TEST_F(WebViewTest, TouchpadPinchSyntheticWheelEvents) {
-  ASSERT_TRUE(StartEmbeddedTestServer());
-  LoadAppWithGuest("web_view/touchpad_pinch");
-  content::WebContents* guest_contents = GetGuestWebContents();
-
-  // Ensure the compositor thread is aware of the wheel listener.
-  content::MainThreadFrameObserver synchronize_threads(
-      guest_contents->GetRenderWidgetHostView()->GetRenderWidgetHost());
-  synchronize_threads.Wait();
-
-  ExtensionTestMessageListener synthetic_wheel_listener("Seen wheel event",
-                                                        false);
-
-  const gfx::Rect contents_rect = guest_contents->GetContainerBounds();
-  const gfx::Point pinch_position(contents_rect.width() / 2,
-                                  contents_rect.height() / 2);
-  content::SimulateGesturePinchSequence(guest_contents, pinch_position, 1.23,
-                                        blink::kWebGestureDeviceTouchpad);
-
-  ASSERT_TRUE(synthetic_wheel_listener.WaitUntilSatisfied());
-}
diff --git a/chrome/browser/apps/platform_apps/app_browsertest.cc b/chrome/browser/apps/platform_apps/app_browsertest.cc
index 079e017b3..bc99655 100644
--- a/chrome/browser/apps/platform_apps/app_browsertest.cc
+++ b/chrome/browser/apps/platform_apps/app_browsertest.cc
@@ -1400,32 +1400,4 @@
   ASSERT_TRUE(RunPlatformAppTest("platform_apps/new_window_about_blank"));
 }
 
-// Test that an app window sees the synthetic wheel events of a touchpad pinch.
-// While the app window itself does not scale in response to a pinch, we
-// still offer the synthetic wheels for pages that want to implement custom
-// pinch zoom behaviour.
-IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest,
-                       TouchpadPinchSyntheticWheelEvents) {
-  LoadAndLaunchPlatformApp("touchpad_pinch", "Launched");
-
-  WebContents* web_contents = GetFirstAppWindowWebContents();
-  ASSERT_TRUE(web_contents);
-
-  // Ensure the compositor thread is aware of the wheel listener.
-  content::MainThreadFrameObserver synchronize_threads(
-      web_contents->GetRenderWidgetHostView()->GetRenderWidgetHost());
-  synchronize_threads.Wait();
-
-  ExtensionTestMessageListener synthetic_wheel_listener("Seen wheel event",
-                                                        false);
-
-  const gfx::Rect contents_rect = web_contents->GetContainerBounds();
-  const gfx::Point pinch_position(contents_rect.width() / 2,
-                                  contents_rect.height() / 2);
-  content::SimulateGesturePinchSequence(web_contents, pinch_position, 1.23,
-                                        blink::kWebGestureDeviceTouchpad);
-
-  ASSERT_TRUE(synthetic_wheel_listener.WaitUntilSatisfied());
-}
-
 }  // namespace extensions
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc
index 4aae22f..bc37eec2 100644
--- a/chrome/browser/autofill/autofill_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -233,7 +233,6 @@
  protected:
   explicit AutofillInteractiveTestBase(bool popup_views_enabled)
       : https_server_(net::EmbeddedTestServer::TYPE_HTTPS),
-        cert_verifier_(&mock_cert_verifier_),
         popup_views_enabled_(popup_views_enabled) {
     scoped_feature_list_.InitWithFeatureState(kAutofillExpandedPopupViews,
                                               popup_views_enabled_);
@@ -266,21 +265,21 @@
 
     // By default, all SSL cert checks are valid. Can be overriden in tests if
     // needed.
-    cert_verifier_.set_default_result(net::OK);
+    cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
   }
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     AutofillUiTest::SetUpCommandLine(command_line);
-    command_line->AppendSwitch(switches::kUseMockCertVerifierForTesting);
+    cert_verifier_.SetUpCommandLine(command_line);
   }
 
   void SetUpInProcessBrowserTestFixture() override {
     AutofillUiTest::SetUpInProcessBrowserTestFixture();
-    ProfileIOData::SetCertVerifierForTesting(&mock_cert_verifier_);
+    cert_verifier_.SetUpInProcessBrowserTestFixture();
   }
 
   void TearDownInProcessBrowserTestFixture() override {
-    ProfileIOData::SetCertVerifierForTesting(nullptr);
+    cert_verifier_.TearDownInProcessBrowserTestFixture();
     AutofillUiTest::TearDownInProcessBrowserTestFixture();
   }
 
@@ -610,12 +609,10 @@
  private:
   net::EmbeddedTestServer https_server_;
 
-  net::MockCertVerifier mock_cert_verifier_;
-
   // Similar to net::MockCertVerifier, but also updates the CertVerifier
   // used by the NetworkService. This is needed for when tests run with
   // the NetworkService enabled.
-  CertVerifierBrowserTest::CertVerifier cert_verifier_;
+  ChromeMockCertVerifier cert_verifier_;
 
   net::TestURLFetcherFactory url_fetcher_factory_;
 
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 5dff86767..9887053c 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -1316,7 +1316,7 @@
   subresource_filter_ruleset_service_ =
       std::make_unique<subresource_filter::ContentRulesetService>(
           blocking_task_runner);
-  subresource_filter_ruleset_service_->set_ruleset_service(
+  subresource_filter_ruleset_service_->SetAndInitializeRulesetService(
       std::make_unique<subresource_filter::RulesetService>(
           local_state(), background_task_runner,
           subresource_filter_ruleset_service_.get(), indexed_ruleset_base_dir));
diff --git a/chrome/browser/chrome_browser_main_browsertest.cc b/chrome/browser/chrome_browser_main_browsertest.cc
index 84eb5064..df0b485 100644
--- a/chrome/browser/chrome_browser_main_browsertest.cc
+++ b/chrome/browser/chrome_browser_main_browsertest.cc
@@ -14,8 +14,15 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/variations/service/variations_service.h"
 #include "components/variations/variations_switches.h"
+#include "content/public/browser/network_service_instance.h"
+#include "content/public/common/service_manager_connection.h"
+#include "content/public/common/service_names.mojom.h"
+#include "content/public/test/browser_test_utils.h"
 #include "net/base/mock_network_change_notifier.h"
 #include "net/base/network_change_notifier_factory.h"
+#include "services/network/public/cpp/features.h"
+#include "services/network/public/mojom/network_service_test.mojom.h"
+#include "services/service_manager/public/cpp/connector.h"
 
 // Friend of ChromeBrowserMainPartsTestApi to poke at internal state.
 class ChromeBrowserMainPartsTestApi {
@@ -36,44 +43,50 @@
 
 namespace {
 
+// Simulates a network connection change.
+void SimulateNetworkChange(network::mojom::ConnectionType type) {
+  if (base::FeatureList::IsEnabled(network::features::kNetworkService) &&
+      !content::IsNetworkServiceRunningInProcess()) {
+    network::mojom::NetworkServiceTestPtr network_service_test;
+    content::ServiceManagerConnection::GetForProcess()
+        ->GetConnector()
+        ->BindInterface(content::mojom::kNetworkServiceName,
+                        &network_service_test);
+    base::RunLoop run_loop;
+    network_service_test->SimulateNetworkChange(type, run_loop.QuitClosure());
+    run_loop.Run();
+    return;
+  }
+  net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
+      net::NetworkChangeNotifier::ConnectionType(type));
+}
+
 // ChromeBrowserMainExtraParts used to install a MockNetworkChangeNotifier.
 class ChromeBrowserMainExtraPartsNetFactoryInstaller
     : public ChromeBrowserMainExtraParts {
  public:
   ChromeBrowserMainExtraPartsNetFactoryInstaller() = default;
-  ~ChromeBrowserMainExtraPartsNetFactoryInstaller() override {
-    // |network_change_notifier_| needs to be destroyed before |net_installer_|.
-    network_change_notifier_.reset();
-  }
-
-  net::test::MockNetworkChangeNotifier* network_change_notifier() {
-    return network_change_notifier_.get();
-  }
 
   // ChromeBrowserMainExtraParts:
   void PreEarlyInitialization() override {}
-  void PostMainMessageLoopStart() override {
-    ASSERT_TRUE(net::NetworkChangeNotifier::HasNetworkChangeNotifier());
-    net_installer_ =
-        std::make_unique<net::NetworkChangeNotifier::DisableForTest>();
-    network_change_notifier_ =
-        std::make_unique<net::test::MockNetworkChangeNotifier>();
-    network_change_notifier_->SetConnectionType(
-        net::NetworkChangeNotifier::CONNECTION_NONE);
+  void ServiceManagerConnectionStarted(
+      content::ServiceManagerConnection* connection) override {
+    SimulateNetworkChange(network::mojom::ConnectionType::CONNECTION_NONE);
   }
 
  private:
-  std::unique_ptr<net::test::MockNetworkChangeNotifier>
-      network_change_notifier_;
-  std::unique_ptr<net::NetworkChangeNotifier::DisableForTest> net_installer_;
-
   DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainExtraPartsNetFactoryInstaller);
 };
 
-class ChromeBrowserMainBrowserTest : public InProcessBrowserTest {
+class ChromeBrowserMainBrowserTest
+    : public InProcessBrowserTest,
+      network::NetworkConnectionTracker::NetworkConnectionObserver {
  public:
   ChromeBrowserMainBrowserTest() = default;
-  ~ChromeBrowserMainBrowserTest() override = default;
+  ~ChromeBrowserMainBrowserTest() override {
+    content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(
+        this);
+  }
 
  protected:
   // InProcessBrowserTest:
@@ -95,8 +108,35 @@
     chrome_browser_main_parts->AddParts(extra_parts_);
   }
 
+  void SetUpOnMainThread() override {
+    content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this);
+  }
+
+  void WaitForConnectionType(network::mojom::ConnectionType type) {
+    if (connection_type_ == type)
+      return;
+
+    expected_connection_type_ = type;
+    run_loop_ = std::make_unique<base::RunLoop>();
+    run_loop_->Run();
+  }
+
   ChromeBrowserMainExtraPartsNetFactoryInstaller* extra_parts_ = nullptr;
 
+ private:
+  // network::NetworkConnectionTracker::NetworkConnectionObserver:
+  void OnConnectionChanged(network::mojom::ConnectionType type) override {
+    connection_type_ = type;
+    if (expected_connection_type_ == connection_type_ && run_loop_)
+      run_loop_->Quit();
+  }
+
+  network::mojom::ConnectionType expected_connection_type_ =
+      network::mojom::ConnectionType::CONNECTION_UNKNOWN;
+  network::mojom::ConnectionType connection_type_ =
+      network::mojom::ConnectionType::CONNECTION_UNKNOWN;
+  std::unique_ptr<base::RunLoop> run_loop_;
+
   DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainBrowserTest);
 };
 
@@ -107,14 +147,11 @@
   const int initial_request_count =
       g_browser_process->variations_service()->request_count();
   ASSERT_TRUE(extra_parts_);
-  extra_parts_->network_change_notifier()->SetConnectionType(
-      net::NetworkChangeNotifier::CONNECTION_WIFI);
-  net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
-      net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkChange(network::mojom::ConnectionType::CONNECTION_WIFI);
+  WaitForConnectionType(network::mojom::ConnectionType::CONNECTION_WIFI);
   // NotifyObserversOfNetworkChangeForTests uses PostTask, so run the loop until
   // idle to ensure VariationsService processes the network change.
-  base::RunLoop run_loop;
-  run_loop.RunUntilIdle();
+  base::RunLoop().RunUntilIdle();
   const int final_request_count =
       g_browser_process->variations_service()->request_count();
   EXPECT_EQ(initial_request_count + 1, final_request_count);
diff --git a/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc b/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc
index ded1e33..75dd0ed2 100644
--- a/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc
+++ b/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc
@@ -113,7 +113,8 @@
         &pref_service_, base::ThreadTaskRunnerHandle::Get(),
         content_service.get(), ruleset_service_dir_.GetPath());
     test_ruleset_service_ = test_ruleset_service.get();
-    content_service->set_ruleset_service(std::move(test_ruleset_service));
+    content_service->SetAndInitializeRulesetService(
+        std::move(test_ruleset_service));
 
     TestingBrowserProcess::GetGlobal()->SetRulesetService(
         std::move(content_service));
diff --git a/chrome/browser/extensions/bookmark_app_navigation_browsertest.cc b/chrome/browser/extensions/bookmark_app_navigation_browsertest.cc
index 3fa9767..e905a7c 100644
--- a/chrome/browser/extensions/bookmark_app_navigation_browsertest.cc
+++ b/chrome/browser/extensions/bookmark_app_navigation_browsertest.cc
@@ -212,9 +212,7 @@
 }
 
 BookmarkAppNavigationBrowserTest::BookmarkAppNavigationBrowserTest()
-    : https_server_(net::EmbeddedTestServer::TYPE_HTTPS),
-      mock_cert_verifier_(),
-      cert_verifier_(&mock_cert_verifier_) {}
+    : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {}
 
 BookmarkAppNavigationBrowserTest::~BookmarkAppNavigationBrowserTest() = default;
 
@@ -241,24 +239,24 @@
 
 void BookmarkAppNavigationBrowserTest::SetUpInProcessBrowserTestFixture() {
   ExtensionBrowserTest::SetUpInProcessBrowserTestFixture();
-  ProfileIOData::SetCertVerifierForTesting(&mock_cert_verifier_);
+  cert_verifier_.SetUpInProcessBrowserTestFixture();
 }
 
 void BookmarkAppNavigationBrowserTest::TearDownInProcessBrowserTestFixture() {
   ExtensionBrowserTest::TearDownInProcessBrowserTestFixture();
-  ProfileIOData::SetCertVerifierForTesting(nullptr);
+  cert_verifier_.TearDownInProcessBrowserTestFixture();
 }
 
 void BookmarkAppNavigationBrowserTest::SetUpCommandLine(
     base::CommandLine* command_line) {
-  command_line->AppendSwitch(switches::kUseMockCertVerifierForTesting);
+  cert_verifier_.SetUpCommandLine(command_line);
 }
 
 void BookmarkAppNavigationBrowserTest::SetUpOnMainThread() {
   ExtensionBrowserTest::SetUpOnMainThread();
   host_resolver()->AddRule("*", "127.0.0.1");
   // By default, all SSL cert checks are valid. Can be overriden in tests.
-  cert_verifier_.set_default_result(net::OK);
+  cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
 }
 
 void BookmarkAppNavigationBrowserTest::InstallTestBookmarkApp() {
diff --git a/chrome/browser/extensions/bookmark_app_navigation_browsertest.h b/chrome/browser/extensions/bookmark_app_navigation_browsertest.h
index 27d6354..65dca86 100644
--- a/chrome/browser/extensions/bookmark_app_navigation_browsertest.h
+++ b/chrome/browser/extensions/bookmark_app_navigation_browsertest.h
@@ -14,7 +14,6 @@
 #include "chrome/browser/extensions/extension_browsertest.h"
 #include "chrome/browser/ssl/cert_verifier_browser_test.h"
 #include "extensions/common/extension.h"
-#include "net/cert/mock_cert_verifier.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "url/gurl.h"
 
@@ -196,8 +195,8 @@
 
   const net::EmbeddedTestServer& https_server() { return https_server_; }
 
-  CertVerifierBrowserTest::CertVerifier& mock_cert_verifier() {
-    return cert_verifier_;
+  content::ContentMockCertVerifier::CertVerifier& mock_cert_verifier() {
+    return *cert_verifier_.mock_cert_verifier();
   }
 
  private:
@@ -206,7 +205,7 @@
   // Similar to net::MockCertVerifier, but also updates the CertVerifier
   // used by the NetworkService. This is needed for when tests run with
   // the NetworkService enabled.
-  CertVerifierBrowserTest::CertVerifier cert_verifier_;
+  ChromeMockCertVerifier cert_verifier_;
   const Extension* test_bookmark_app_;
   base::HistogramTester histogram_tester_;
 };
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc
index d225d09..d4b100e 100644
--- a/chrome/browser/extensions/chrome_extensions_browser_client.cc
+++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc
@@ -33,6 +33,7 @@
 #include "chrome/browser/extensions/menu_manager.h"
 #include "chrome/browser/extensions/updater/chrome_update_client_config.h"
 #include "chrome/browser/external_protocol/external_protocol_handler.h"
+#include "chrome/browser/net/system_network_context_manager.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/renderer_host/chrome_navigation_ui_data.h"
@@ -47,6 +48,7 @@
 #include "components/net_log/chrome_net_log.h"
 #include "components/update_client/update_client.h"
 #include "components/version_info/version_info.h"
+#include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/resource_request_info.h"
 #include "content/public/common/content_switches.h"
@@ -528,6 +530,12 @@
       origin);
 }
 
+network::mojom::NetworkContext*
+ChromeExtensionsBrowserClient::GetSystemNetworkContext() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  return g_browser_process->system_network_context_manager()->GetContext();
+}
+
 // static
 void ChromeExtensionsBrowserClient::set_did_chrome_update_for_testing(
     bool did_update) {
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.h b/chrome/browser/extensions/chrome_extensions_browser_client.h
index 0c13d34..c22ee9a 100644
--- a/chrome/browser/extensions/chrome_extensions_browser_client.h
+++ b/chrome/browser/extensions/chrome_extensions_browser_client.h
@@ -150,6 +150,7 @@
   bool IsExtensionEnabled(const std::string& extension_id,
                           content::BrowserContext* context) const override;
   bool IsWebUIAllowedToMakeNetworkRequests(const url::Origin& origin) override;
+  network::mojom::NetworkContext* GetSystemNetworkContext() override;
 
   static void set_did_chrome_update_for_testing(bool did_update);
 
diff --git a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl.cc b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl.cc
index 54aeb86..34e3e88c 100644
--- a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl.cc
+++ b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl.cc
@@ -8,14 +8,17 @@
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/time/default_clock.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/media/router/discovery/mdns/media_sink_util.h"
 #include "chrome/browser/media/router/media_router_feature.h"
+#include "chrome/browser/net/system_network_context_manager.h"
 #include "chrome/common/media_router/discovery/media_sink_internal.h"
 #include "chrome/common/media_router/media_sink.h"
 #include "components/cast_channel/cast_channel_enum.h"
 #include "components/cast_channel/cast_socket_service.h"
 #include "components/cast_channel/logger.h"
 #include "components/net_log/chrome_net_log.h"
+#include "content/public/browser/browser_thread.h"
 #include "net/base/backoff_entry.h"
 #include "net/base/net_errors.h"
 
@@ -450,7 +453,7 @@
   // TODO(crbug.com/814419): Switching cast socket implementation to use network
   // service will allow us to get back NetLog.
   return cast_channel::CastSocketOpenParams(
-      sink.cast_data().ip_endpoint, nullptr,
+      sink.cast_data().ip_endpoint,
       base::TimeDelta::FromSeconds(connect_timeout_in_seconds),
       base::TimeDelta::FromSeconds(liveness_timeout_in_seconds),
       base::TimeDelta::FromSeconds(open_params_.ping_interval_in_seconds),
@@ -517,6 +520,11 @@
   cast_channel::CastSocketOpenParams open_params =
       CreateCastSocketOpenParams(cast_sink);
   cast_socket_service_->OpenSocket(
+      base::BindRepeating([] {
+        DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+        return g_browser_process->system_network_context_manager()
+            ->GetContext();
+      }),
       open_params,
       base::BindOnce(&CastMediaSinkServiceImpl::OnChannelOpened, GetWeakPtr(),
                      cast_sink, std::move(backoff_entry), sink_source,
diff --git a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl_unittest.cc b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl_unittest.cc
index 47ffa101..2c5c369 100644
--- a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl_unittest.cc
+++ b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl_unittest.cc
@@ -105,11 +105,10 @@
  protected:
   void ExpectOpenSocketInternal(cast_channel::CastSocket* socket) {
     EXPECT_CALL(*mock_cast_socket_service_,
-                OpenSocketInternal(socket->ip_endpoint(), _, _))
-        .WillOnce(Invoke(
-            [socket](const auto& ip_endpoint, auto* net_log, auto open_cb) {
-              std::move(open_cb).Run(socket);
-            }));
+                OpenSocketInternal(socket->ip_endpoint(), _))
+        .WillOnce(Invoke([socket](const auto& ip_endpoint, auto open_cb) {
+          std::move(open_cb).Run(socket);
+        }));
   }
 
   static const std::vector<DiscoveryNetworkInfo> fake_ethernet_info_;
@@ -280,13 +279,13 @@
   socket.SetErrorState(cast_channel::ChannelError::NONE);
 
   // No pending sink
-  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint, _, _))
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint, _))
       .Times(1);
   media_sink_service_impl_.OpenChannel(
       cast_sink, nullptr, CastMediaSinkServiceImpl::SinkSource::kMdns);
 
   // One pending sink, the same as |cast_sink|
-  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint, _, _))
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint, _))
       .Times(0);
   media_sink_service_impl_.OpenChannel(
       cast_sink, nullptr, CastMediaSinkServiceImpl::SinkSource::kMdns);
@@ -323,11 +322,10 @@
   socket.SetIPEndpoint(ip_endpoint);
   socket.SetErrorState(cast_channel::ChannelError::CAST_SOCKET_ERROR);
 
-  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint, _, _))
-      .WillRepeatedly(
-          Invoke([&](const auto& ip_endpoint1, auto* net_log, auto open_cb) {
-            std::move(open_cb).Run(&socket);
-          }));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint, _))
+      .WillRepeatedly(Invoke([&](const auto& ip_endpoint1, auto open_cb) {
+        std::move(open_cb).Run(&socket);
+      }));
   media_sink_service_impl_.OpenChannel(
       cast_sink, nullptr, CastMediaSinkServiceImpl::SinkSource::kMdns);
 
@@ -349,10 +347,8 @@
   clock.SetNow(start_time);
   media_sink_service_impl_.SetClockForTest(&clock);
 
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _));
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint2, _, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint2, _));
 
   // 1st round finds service 1 & 2.
   std::vector<MediaSinkInternal> sinks1{cast_sink1, cast_sink2};
@@ -376,11 +372,9 @@
                             delta.InMilliseconds(), 1);
 
   // There is already a socket open for |ip_endpoint2|.
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint2, _, _))
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint2, _))
       .Times(0);
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint3, _, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint3, _));
 
   // 2nd round finds service 2 & 3.
   std::vector<MediaSinkInternal> sinks2{cast_sink2, cast_sink3};
@@ -422,12 +416,10 @@
   clock.SetNow(start_time);
   media_sink_service_impl_.SetClockForTest(&clock);
 
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _))
-      .WillRepeatedly(
-          Invoke([&](const auto& ip_endpoint1, auto* net_log, auto open_cb) {
-            std::move(open_cb).Run(&socket);
-          }));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _))
+      .WillRepeatedly(Invoke([&](const auto& ip_endpoint1, auto open_cb) {
+        std::move(open_cb).Run(&socket);
+      }));
   std::vector<MediaSinkInternal> sinks1 = {cast_sink1};
   media_sink_service_impl_.OpenChannels(
       sinks1, CastMediaSinkServiceImpl::SinkSource::kMdns);
@@ -442,12 +434,10 @@
   extra_data.ip_endpoint = ip_endpoint2;
   cast_sink1.set_cast_data(extra_data);
 
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint2, _, _))
-      .WillRepeatedly(
-          Invoke([&](const auto& ip_endpoint1, auto* net_log, auto open_cb) {
-            std::move(open_cb).Run(&socket);
-          }));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint2, _))
+      .WillRepeatedly(Invoke([&](const auto& ip_endpoint1, auto open_cb) {
+        std::move(open_cb).Run(&socket);
+      }));
 
   std::vector<MediaSinkInternal> updated_sinks1 = {cast_sink1};
   media_sink_service_impl_.OpenChannels(
@@ -474,11 +464,10 @@
   clock.SetNow(start_time);
   media_sink_service_impl_.SetClockForTest(&clock);
 
-  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint, _, _))
-      .WillRepeatedly(
-          Invoke([&](const auto& ip_endpoint, auto* net_log, auto open_cb) {
-            std::move(open_cb).Run(&socket);
-          }));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint, _))
+      .WillRepeatedly(Invoke([&](const auto& ip_endpoint, auto open_cb) {
+        std::move(open_cb).Run(&socket);
+      }));
   std::vector<MediaSinkInternal> sinks = {cast_sink};
   OpenChannels(sinks, CastMediaSinkServiceImpl::SinkSource::kMdns);
 
@@ -488,7 +477,7 @@
   cast_sink.sink().set_name("Updated name");
   std::vector<MediaSinkInternal> updated_sinks = {cast_sink};
 
-  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(_, _, _)).Times(0);
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(_, _)).Times(0);
   EXPECT_CALL(observer_, OnSinkAddedOrUpdated(cast_sink));
   OpenChannels(updated_sinks, CastMediaSinkServiceImpl::SinkSource::kMdns);
 
@@ -540,12 +529,10 @@
 
   // Sink is removed on |OnError|, but we will retry.
   EXPECT_CALL(observer_, OnSinkRemoved(cast_sink));
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _))
-      .WillRepeatedly(
-          Invoke([&](const auto& ip_endpoint1, auto* net_log, auto open_cb) {
-            std::move(open_cb).Run(&socket);
-          }));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _))
+      .WillRepeatedly(Invoke([&](const auto& ip_endpoint1, auto open_cb) {
+        std::move(open_cb).Run(&socket);
+      }));
   media_sink_service_impl_.OnError(socket,
                                    cast_channel::ChannelError::PING_TIMEOUT);
 
@@ -568,7 +555,7 @@
   // No op for CONNECTING cast channel.
   EXPECT_CALL(socket, ready_state())
       .WillOnce(Return(cast_channel::ReadyState::CONNECTING));
-  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(_, _, _)).Times(0);
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(_, _)).Times(0);
 
   base::HistogramTester tester;
   media_sink_service_impl_.OnError(
@@ -592,8 +579,7 @@
   media_sink_service_impl_.OnError(
       socket, cast_channel::ChannelError::CHANNEL_NOT_OPEN);
 
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _))
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _))
       .Times(0);
   mock_time_task_runner_->FastForwardUntilNoTasksRemain();
 }
@@ -617,15 +603,13 @@
   socket2.SetAudioOnly(true);
 
   // Channel 1, 2 opened.
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _))
-      .WillOnce(WithArgs<2>(
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _))
+      .WillOnce(WithArgs<1>(
           [&socket1](
               const base::Callback<void(cast_channel::CastSocket * socket)>&
                   callback) { callback.Run(&socket1); }));
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint2, _, _))
-      .WillOnce(WithArgs<2>(
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint2, _))
+      .WillOnce(WithArgs<1>(
           [&socket2](
               const base::Callback<void(cast_channel::CastSocket * socket)>&
                   callback) { callback.Run(&socket2); }));
@@ -664,10 +648,9 @@
   socket1.set_id(1);
   socket1.SetErrorState(cast_channel::ChannelError::CONNECT_ERROR);
 
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _))
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _))
       .Times(1)
-      .WillOnce(WithArgs<2>(Invoke(
+      .WillOnce(WithArgs<1>(Invoke(
           [&socket1](
               const base::Callback<void(cast_channel::CastSocket * socket)>&
                   callback) { std::move(callback).Run(&socket1); })));
@@ -677,10 +660,9 @@
   // failure count once.
   for (int i = 0; i < CastMediaSinkServiceImpl::kMaxDialSinkFailureCount - 1;
        ++i) {
-    EXPECT_CALL(*mock_cast_socket_service_,
-                OpenSocketInternal(ip_endpoint1, _, _))
+    EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _))
         .Times(1)
-        .WillOnce(WithArgs<2>(Invoke(
+        .WillOnce(WithArgs<1>(Invoke(
             [&socket1](
                 const base::Callback<void(cast_channel::CastSocket * socket)>&
                     callback) { std::move(callback).Run(&socket1); })));
@@ -689,8 +671,7 @@
 
   // OnChannelOpenFailed too many times; next time OnSinkAddedOrUpdated is
   // called, we won't attempt to open channel.
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _))
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _))
       .Times(0);
 
   media_sink_service_impl_.OnSinkAddedOrUpdated(dial_sink1);
@@ -705,7 +686,7 @@
   ASSERT_EQ(ip_endpoint1.address(),
             cast_sink.cast_data().ip_endpoint.address());
   EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(cast_sink.cast_data().ip_endpoint, _, _))
+              OpenSocketInternal(cast_sink.cast_data().ip_endpoint, _))
       .Times(1);
   media_sink_service_impl_.OpenChannels(
       cast_sinks, CastMediaSinkServiceImpl::SinkSource::kMdns);
@@ -724,11 +705,9 @@
   // Find Cast sink 1
   media_sink_service_impl_.AddOrUpdateSink(cast_sink1);
 
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _))
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _))
       .Times(0);
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint2, _, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint2, _));
 
   // Attempt to connect to |cast_sink2| only since |cast_sink1| is already
   // connected.
@@ -793,10 +772,8 @@
   content::RunAllTasksUntilIdle();
   mock_time_task_runner_->FastForwardUntilNoTasksRemain();
 
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _));
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint2, _, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint2, _));
   fake_network_info_ = fake_ethernet_info_;
   ChangeConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
   content::RunAllTasksUntilIdle();
@@ -860,10 +837,8 @@
   content::RunAllTasksUntilIdle();
   mock_time_task_runner_->FastForwardUntilNoTasksRemain();
 
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _));
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint2, _, _))
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint2, _))
       .Times(0);
   fake_network_info_ = fake_ethernet_info_;
   ChangeConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
@@ -923,7 +898,7 @@
   content::RunAllTasksUntilIdle();
   mock_time_task_runner_->FastForwardUntilNoTasksRemain();
 
-  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(_, _, _)).Times(0);
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(_, _)).Times(0);
   fake_network_info_ = fake_ethernet_info_;
   ChangeConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
   content::RunAllTasksUntilIdle();
@@ -982,7 +957,7 @@
 
   // Connecting to a network whose ID resolves to __unknown__ shouldn't pull any
   // cache items from another unknown network.
-  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(_, _, _)).Times(0);
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(_, _)).Times(0);
   fake_network_info_ = fake_unknown_info_;
   ChangeConnectionType(network::mojom::ConnectionType::CONNECTION_WIFI);
   content::RunAllTasksUntilIdle();
@@ -1084,8 +1059,7 @@
   media_sink_service_impl_.OnChannelOpenFailed(ip_endpoint4, sink4);
 
   // Reconnect and expect only |sink4| to be cached.
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint4, _, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint4, _));
   fake_network_info_ = fake_ethernet_info_;
   ChangeConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
   content::RunAllTasksUntilIdle();
@@ -1169,10 +1143,8 @@
   content::RunAllTasksUntilIdle();
   mock_time_task_runner_->FastForwardUntilNoTasksRemain();
 
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _));
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint2, _, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint2, _));
   fake_network_info_ = fake_ethernet_info_;
   ChangeConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
   content::RunAllTasksUntilIdle();
@@ -1209,7 +1181,7 @@
   socket1_cast.set_id(2);
 
   EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1_cast, _, _))
+              OpenSocketInternal(ip_endpoint1_cast, _))
       .Times(0);
   media_sink_service_impl_.OpenChannels(
       sink_list1, CastMediaSinkServiceImpl::SinkSource::kMdns);
@@ -1246,7 +1218,7 @@
   mock_time_task_runner_->FastForwardUntilNoTasksRemain();
 
   EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1_cast, _, _));
+              OpenSocketInternal(ip_endpoint1_cast, _));
   fake_network_info_ = fake_ethernet_info_;
   ChangeConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
   content::RunAllTasksUntilIdle();
@@ -1300,10 +1272,8 @@
 
   // Reconnecting to the previous ethernet network should restore the same sinks
   // from the cache and attempt to resolve them.
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint1, _, _));
-  EXPECT_CALL(*mock_cast_socket_service_,
-              OpenSocketInternal(ip_endpoint2, _, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint1, _));
+  EXPECT_CALL(*mock_cast_socket_service_, OpenSocketInternal(ip_endpoint2, _));
   fake_network_info_ = fake_ethernet_info_;
   ChangeConnectionType(network::mojom::ConnectionType::CONNECTION_ETHERNET);
   content::RunAllTasksUntilIdle();
diff --git a/chrome/browser/metrics/chrome_metrics_services_manager_client.cc b/chrome/browser/metrics/chrome_metrics_services_manager_client.cc
index 714c4f2..38cae30 100644
--- a/chrome/browser/metrics/chrome_metrics_services_manager_client.cc
+++ b/chrome/browser/metrics/chrome_metrics_services_manager_client.cc
@@ -28,6 +28,7 @@
 #include "components/variations/variations_associated_data.h"
 #include "components/version_info/version_info.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/network_service_instance.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
 #if defined(OS_ANDROID)
@@ -240,7 +241,8 @@
   return variations::VariationsService::Create(
       std::make_unique<ChromeVariationsServiceClient>(), local_state_,
       GetMetricsStateManager(), switches::kDisableBackgroundNetworking,
-      chrome_variations::CreateUIStringOverrider());
+      chrome_variations::CreateUIStringOverrider(),
+      base::BindOnce(&content::GetNetworkConnectionTracker));
 }
 
 std::unique_ptr<metrics::MetricsServiceClient>
diff --git a/chrome/browser/offline_pages/android/offline_page_bridge.cc b/chrome/browser/offline_pages/android/offline_page_bridge.cc
index f15d6ff..1ec5bd2 100644
--- a/chrome/browser/offline_pages/android/offline_page_bridge.cc
+++ b/chrome/browser/offline_pages/android/offline_page_bridge.cc
@@ -199,7 +199,6 @@
     launch_url = url;
   else
     launch_url = net::FilePathToFileURL(file_path);
-
   offline_pages::OfflinePageHeader offline_header;
   switch (launch_location) {
     case offline_items_collection::LaunchLocation::NOTIFICATION:
@@ -218,8 +217,10 @@
       offline_header.reason =
           offline_pages::OfflinePageHeader::Reason::DOWNLOAD;
       break;
-    default:
-      NOTREACHED();
+    case offline_items_collection::LaunchLocation::NET_ERROR_SUGGESTION:
+      offline_header.reason =
+          offline_pages::OfflinePageHeader::Reason::NET_ERROR_SUGGESTION;
+      break;
   }
   offline_header.need_to_persist = true;
   offline_header.id = base::Int64ToString(offline_id);
diff --git a/chrome/browser/offline_pages/offline_page_request_handler.cc b/chrome/browser/offline_pages/offline_page_request_handler.cc
index f63f0a6..71b5c6a46 100644
--- a/chrome/browser/offline_pages/offline_page_request_handler.cc
+++ b/chrome/browser/offline_pages/offline_page_request_handler.cc
@@ -705,7 +705,11 @@
       return AccessEntryPoint::PROGRESS_BAR;
     case OfflinePageHeader::Reason::SUGGESTION:
       return AccessEntryPoint::NTP_SUGGESTIONS_OR_BOOKMARKS;
-    default:
+    case OfflinePageHeader::Reason::NET_ERROR_SUGGESTION:
+      return AccessEntryPoint::NET_ERROR_PAGE;
+    case OfflinePageHeader::Reason::NONE:
+    case OfflinePageHeader::Reason::NET_ERROR:
+    case OfflinePageHeader::Reason::RELOAD:
       break;
   }
 
diff --git a/chrome/browser/offline_pages/offline_page_request_handler.h b/chrome/browser/offline_pages/offline_page_request_handler.h
index 07204c9..dfb70320 100644
--- a/chrome/browser/offline_pages/offline_page_request_handler.h
+++ b/chrome/browser/offline_pages/offline_page_request_handler.h
@@ -80,9 +80,9 @@
   // This enum is used for UMA reporting of the UI location from which an
   // offline page was launched.
   // NOTE: because this is used for UMA reporting, these values should not be
-  // changed or reused; new values should be appended immediately before the MAX
-  // value. Make sure to update the histogram enum (OfflinePagesAcessEntryPoint
-  // in enums.xml) accordingly.
+  // changed or reused; new values should be appended immediately before COUNT.
+  // Make sure to update the histogram enum (OfflinePagesAcessEntryPoint in
+  // enums.xml) accordingly.
   enum class AccessEntryPoint {
     // Any other cases not listed below.
     UNKNOWN = 0,
@@ -107,7 +107,9 @@
     CONTENT_URL_INTENT = 9,
     // Launched due to clicking "Open" link in the progress bar.
     PROGRESS_BAR = 10,
-    COUNT
+    // Launched from content suggestion on the net error page.
+    NET_ERROR_PAGE = 11,
+    COUNT  // Must be last.
   };
 
   enum class NetworkState {
diff --git a/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc b/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc
index e5ea1f1..6192613 100644
--- a/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc
+++ b/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc
@@ -860,6 +860,8 @@
       return OfflinePageRequestHandler::AccessEntryPoint::FILE_URL_INTENT;
     case OfflinePageHeader::Reason::CONTENT_URL_INTENT:
       return OfflinePageRequestHandler::AccessEntryPoint::CONTENT_URL_INTENT;
+    case OfflinePageHeader::Reason::NET_ERROR_SUGGESTION:
+      return OfflinePageRequestHandler::AccessEntryPoint::NET_ERROR_PAGE;
     default:
       return OfflinePageRequestHandler::AccessEntryPoint::LINK;
   }
@@ -1492,6 +1494,24 @@
 }
 
 TYPED_TEST(OfflinePageRequestHandlerTest,
+           NetErrorPageSuggestionOnDisconnectedNetwork) {
+  this->SimulateHasNetworkConnectivity(false);
+
+  int64_t offline_id = this->SaveInternalPage(kUrl, GURL(), kFilename1,
+                                              kFileSize1, std::string());
+
+  net::HttpRequestHeaders extra_headers;
+  extra_headers.AddHeaderFromString(this->UseOfflinePageHeader(
+      OfflinePageHeader::Reason::NET_ERROR_SUGGESTION, 0));
+  this->LoadPageWithHeaders(kUrl, extra_headers);
+
+  this->ExpectOfflinePageServed(
+      offline_id, kFileSize1,
+      OfflinePageRequestHandler::AggregatedRequestResult::
+          SHOW_OFFLINE_ON_DISCONNECTED_NETWORK);
+}
+
+TYPED_TEST(OfflinePageRequestHandlerTest,
            LoadOfflinePageOnProhibitivelySlowNetwork) {
   this->SimulateHasNetworkConnectivity(true);
   this->set_allow_preview(true);
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc
index 1dcdd5f6..7a32956 100644
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc
@@ -640,7 +640,6 @@
     const mojom::PageLoadTiming& timing,
     const mojom::PageLoadMetadata& metadata,
     const mojom::PageLoadFeatures& new_features,
-    const mojom::PageLoadDataUse& new_data_use,
     const std::vector<mojom::ResourceDataUpdatePtr>& resources) {
   // We may receive notifications from frames that have been navigated away
   // from. We simply ignore them.
@@ -674,8 +673,7 @@
 
   if (committed_load_) {
     committed_load_->metrics_update_dispatcher()->UpdateMetrics(
-        render_frame_host, timing, metadata, new_features, new_data_use,
-        resources);
+        render_frame_host, timing, metadata, new_features, resources);
   }
 }
 
@@ -683,12 +681,11 @@
     const mojom::PageLoadTimingPtr timing,
     const mojom::PageLoadMetadataPtr metadata,
     const mojom::PageLoadFeaturesPtr new_features,
-    const mojom::PageLoadDataUsePtr new_data_use,
     const std::vector<mojom::ResourceDataUpdatePtr> resources) {
   content::RenderFrameHost* render_frame_host =
       page_load_metrics_binding_.GetCurrentTargetFrame();
   OnTimingUpdated(render_frame_host, *timing, *metadata, *new_features,
-                  *new_data_use, resources);
+                  resources);
 }
 
 bool MetricsWebContentsObserver::ShouldTrackNavigation(
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer.h b/chrome/browser/page_load_metrics/metrics_web_contents_observer.h
index a842109..5499f04 100644
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer.h
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer.h
@@ -151,7 +151,6 @@
       const mojom::PageLoadTiming& timing,
       const mojom::PageLoadMetadata& metadata,
       const mojom::PageLoadFeatures& new_features,
-      const mojom::PageLoadDataUse& new_data_use,
       const std::vector<mojom::ResourceDataUpdatePtr>& resources);
 
   // Informs the observers of the currently committed load that the event
@@ -168,7 +167,6 @@
       const mojom::PageLoadTimingPtr timing,
       const mojom::PageLoadMetadataPtr metadata,
       const mojom::PageLoadFeaturesPtr new_features,
-      const mojom::PageLoadDataUsePtr new_data_use,
       const std::vector<mojom::ResourceDataUpdatePtr> resources) override;
 
   void HandleFailedNavigationForTrackedLoad(
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
index 8307a50..6424469 100644
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
@@ -258,8 +258,7 @@
       content::RenderFrameHost* render_frame_host) {
     observer()->OnTimingUpdated(
         render_frame_host, timing, mojom::PageLoadMetadata(),
-        mojom::PageLoadFeatures(), mojom::PageLoadDataUse(),
-        std::vector<mojom::ResourceDataUpdatePtr>());
+        mojom::PageLoadFeatures(), std::vector<mojom::ResourceDataUpdatePtr>());
   }
 
   void AttachObserver() {
diff --git a/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer.cc
index 7a720fc..d0660af 100644
--- a/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer.cc
@@ -40,9 +40,9 @@
   return CONTINUE_OBSERVING;
 }
 
-void DataSaverSiteBreakdownMetricsObserver::OnDataUseObserved(
-    int64_t received_data_length,
-    int64_t data_reduction_proxy_bytes_saved) {
+void DataSaverSiteBreakdownMetricsObserver::OnResourceDataUseObserved(
+    const std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr>&
+        resources) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   data_reduction_proxy::DataReductionProxySettings*
       data_reduction_proxy_settings =
@@ -51,6 +51,14 @@
   if (data_reduction_proxy_settings &&
       data_reduction_proxy_settings->data_reduction_proxy_service()) {
     DCHECK(!committed_host_.empty());
+    int64_t received_data_length = 0;
+    int64_t data_reduction_proxy_bytes_saved = 0;
+    for (auto const& resource : resources) {
+      received_data_length += resource->delta_bytes;
+      data_reduction_proxy_bytes_saved +=
+          resource->delta_bytes *
+          (resource->data_reduction_proxy_compression_ratio_estimate - 1.0);
+    }
     data_reduction_proxy_settings->data_reduction_proxy_service()
         ->UpdateDataUseForHost(
             received_data_length,
diff --git a/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer.h b/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer.h
index c7d3f50..1b8ee51 100644
--- a/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer.h
@@ -30,8 +30,9 @@
   ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
                          ukm::SourceId source_id) override;
 
-  void OnDataUseObserved(int64_t received_data_length,
-                         int64_t data_reduction_proxy_bytes_saved) override;
+  void OnResourceDataUseObserved(
+      const std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr>&
+          resources) override;
 
   std::string committed_host_;
 
diff --git a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.cc
index 87fb685..f380c02 100644
--- a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.cc
@@ -178,10 +178,12 @@
   }
 }
 
-void NoScriptPreviewPageLoadMetricsObserver::OnDataUseObserved(
-    int64_t received_data_length,
-    int64_t data_reduction_proxy_bytes_saved) {
-  total_network_bytes_ += received_data_length;
+void NoScriptPreviewPageLoadMetricsObserver::OnResourceDataUseObserved(
+    const std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr>&
+        resources) {
+  for (auto const& resource : resources) {
+    total_network_bytes_ += resource->delta_bytes;
+  }
 }
 
 void NoScriptPreviewPageLoadMetricsObserver::WriteToSavings(
diff --git a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.h
index dfca652..8931ab8 100644
--- a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.h
@@ -53,8 +53,9 @@
   void OnLoadEventStart(
       const page_load_metrics::mojom::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& info) override;
-  void OnDataUseObserved(int64_t received_data_length,
-                         int64_t data_reduction_proxy_bytes_saved) override;
+  void OnResourceDataUseObserved(
+      const std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr>&
+          resources) override;
 
  protected:
   // Virtual for testing. Writes the savings to the data saver feature.
diff --git a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer_unittest.cc
index eaaa6ce..98a55014 100644
--- a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer_unittest.cc
@@ -31,6 +31,9 @@
 
 namespace {
 
+using page_load_metrics::mojom::ResourceDataUpdate;
+using page_load_metrics::mojom::ResourceDataUpdatePtr;
+
 const char kDefaultTestUrl[] = "https://www.google.com";
 
 class TestNoScriptPreviewPageLoadMetricsObserver
@@ -263,10 +266,19 @@
 
   int64_t data_use = 0;
   NavigateAndCommitWithPreviewsState(content::NOSCRIPT_ON);
-  SimulatePageLoadDataUseUpdate({5 * 1024, 0});
+  std::vector<ResourceDataUpdatePtr> resources;
+  auto resource_data_update = ResourceDataUpdate::New();
+  resource_data_update->delta_bytes = 5 * 1024;
+  resources.push_back(std::move(resource_data_update));
+  SimulateResourceDataUseUpdate(resources);
   data_use += (5 * 1024);
 
-  SimulatePageLoadDataUseUpdate({20 * 1024, 13});
+  resources.clear();
+
+  resource_data_update = ResourceDataUpdate::New();
+  resource_data_update->delta_bytes = 20 * 1024;
+  resources.push_back(std::move(resource_data_update));
+  SimulateResourceDataUseUpdate(resources);
   data_use += (20 * 1024);
 
   SimulateTimingUpdate(timing_);
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
index c07e6c2..727d12f4 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
@@ -59,9 +59,9 @@
   tester_->SimulateTimingAndMetadataUpdate(timing, metadata);
 }
 
-void PageLoadMetricsObserverTestHarness::SimulatePageLoadDataUseUpdate(
-    const mojom::PageLoadDataUse& data_use) {
-  tester_->SimulatePageLoadDataUseUpdate(data_use);
+void PageLoadMetricsObserverTestHarness::SimulateResourceDataUseUpdate(
+    const std::vector<mojom::ResourceDataUpdatePtr>& resources) {
+  tester_->SimulateResourceDataUseUpdate(resources);
 }
 
 void PageLoadMetricsObserverTestHarness::SimulateFeaturesUpdate(
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h
index 50e016e..0ea5a77d 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h
@@ -83,7 +83,8 @@
       const mojom::PageLoadTiming& timing,
       const mojom::PageLoadMetadata& metadata,
       const mojom::PageLoadFeatures& new_features);
-  void SimulatePageLoadDataUseUpdate(const mojom::PageLoadDataUse& data_use);
+  void SimulateResourceDataUseUpdate(
+      const std::vector<mojom::ResourceDataUpdatePtr>& resources);
 
   // Simulates a loaded resource. Main frame resources must specify a
   // GlobalRequestID, using the SimulateLoadedResource() method that takes a
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.cc b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.cc
index 9d99233..7c6861e 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.cc
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.cc
@@ -88,7 +88,7 @@
     const mojom::PageLoadMetadata& metadata,
     const mojom::PageLoadFeatures& new_features) {
   observer_->OnTimingUpdated(web_contents()->GetMainFrame(), timing, metadata,
-                             new_features, mojom::PageLoadDataUse(),
+                             new_features,
                              std::vector<mojom::ResourceDataUpdatePtr>());
   // If sending the timing update caused the PageLoadMetricsUpdateDispatcher to
   // schedule a buffering timer, then fire it now so metrics are dispatched to
@@ -98,12 +98,11 @@
     mock_timer->Fire();
 }
 
-void PageLoadMetricsObserverTester::SimulatePageLoadDataUseUpdate(
-    const mojom::PageLoadDataUse& data_use) {
+void PageLoadMetricsObserverTester::SimulateResourceDataUseUpdate(
+    const std::vector<mojom::ResourceDataUpdatePtr>& resources) {
   observer_->OnTimingUpdated(web_contents()->GetMainFrame(),
                              mojom::PageLoadTiming(), mojom::PageLoadMetadata(),
-                             mojom::PageLoadFeatures(), data_use,
-                             std::vector<mojom::ResourceDataUpdatePtr>());
+                             mojom::PageLoadFeatures(), resources);
 }
 
 void PageLoadMetricsObserverTester::SimulateLoadedResource(
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.h b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.h
index 1c7ce82..c227ce2 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.h
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.h
@@ -54,7 +54,8 @@
       const mojom::PageLoadTiming& timing,
       const mojom::PageLoadMetadata& metadata,
       const mojom::PageLoadFeatures& new_features);
-  void SimulatePageLoadDataUseUpdate(const mojom::PageLoadDataUse& data_use);
+  void SimulateResourceDataUseUpdate(
+      const std::vector<mojom::ResourceDataUpdatePtr>& resources);
 
   // Simulates a loaded resource. Main frame resources must specify a
   // GlobalRequestID, using the SimulateLoadedResource() method that takes a
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
index 1e6ab3f..9857d0c 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
+++ b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
@@ -1766,93 +1766,6 @@
   ExpectFirstPaintMetricsTotalCount(1);
 }
 
-// TODO(rajendrant): Add tests for data reduction proxy savings, and tests for
-// page loads in brand new renderers that the navigation response is recorded
-// (e.g. do window.open('/some-cross-site-page')).
-IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ReceivedDataLength) {
-  ASSERT_TRUE(embedded_test_server()->Start());
-
-  auto waiter = CreatePageLoadMetricsTestWaiter();
-  waiter->AddPageExpectation(TimingField::kLoadEvent);
-  ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL(
-                                              "/page_load_metrics/large.html"));
-  waiter->AddMinimumPageLoadDataUseExpectation(10000);
-  waiter->Wait();
-}
-
-IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
-                       ReceivedDataLengthControlledLoad) {
-  const char kHttpResponseHeader[] =
-      "HTTP/1.1 200 OK\r\n"
-      "Content-Type: text/html; charset=utf-8\r\n"
-      "\r\n";
-
-  auto main_html_response =
-      std::make_unique<net::test_server::ControllableHttpResponse>(
-          embedded_test_server(), "/mock_page.html",
-          true /*relative_url_is_prefix*/);
-  auto css_response =
-      std::make_unique<net::test_server::ControllableHttpResponse>(
-          embedded_test_server(), "/mock_css.css",
-          true /*relative_url_is_prefix*/);
-  ASSERT_TRUE(embedded_test_server()->Start());
-
-  auto waiter = CreatePageLoadMetricsTestWaiter();
-
-  browser()->OpenURL(content::OpenURLParams(
-      embedded_test_server()->GetURL("/mock_page.html"), content::Referrer(),
-      WindowOpenDisposition::CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false));
-
-  main_html_response->WaitForRequest();
-  main_html_response->Send(kHttpResponseHeader);
-  main_html_response->Send(
-      "<html><link rel=\"stylesheet\" href=\"mock_css.css\">");
-  main_html_response->Send(std::string(1000, ' '));
-  // TODO(rajendrant): Verify that 1000 bytes are received at this point before
-  // the request completes. This is hard to verify now since
-  // MojoAsyncResourceHandler throttles the transfer size updates, and calls
-  // only when a read is called after 1 second from previous update.
-
-  main_html_response->Send("</html>");
-  main_html_response->Send(std::string(1000, ' '));
-  main_html_response->Done();
-  waiter->AddMinimumPageLoadDataUseExpectation(2000);
-  waiter->Wait();
-
-  css_response->WaitForRequest();
-  css_response->Send(kHttpResponseHeader);
-  css_response->Send(std::string(1000, ' '));
-  css_response->Done();
-  waiter->AddMinimumPageLoadDataUseExpectation(3000);
-  waiter->Wait();
-}
-
-IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
-                       ReceivedDataLengthCrossSiteIframe) {
-  embedded_test_server()->ServeFilesFromSourceDirectory("content/test/data");
-  content::SetupCrossSiteRedirector(embedded_test_server());
-  ASSERT_TRUE(embedded_test_server()->Start());
-
-  auto waiter = CreatePageLoadMetricsTestWaiter();
-  waiter->AddPageExpectation(TimingField::kLoadEvent);
-  ui_test_utils::NavigateToURL(
-      browser(), embedded_test_server()->GetURL(
-                     "foo.com", "/cross_site_iframe_factory.html?foo"));
-  waiter->Wait();
-  int64_t one_frame_page_size = waiter->current_page_load_data_use();
-
-  waiter = CreatePageLoadMetricsTestWaiter();
-  waiter->AddPageExpectation(TimingField::kLoadEvent);
-  ui_test_utils::NavigateToURL(
-      browser(),
-      embedded_test_server()->GetURL(
-          "a.com", "/cross_site_iframe_factory.html?a(b,c,d(e,f,g))"));
-  // Verify that 7 iframes are fetched, with some amount of tolerance since
-  // favicon is fetched only once.
-  waiter->AddMinimumPageLoadDataUseExpectation(7 * (one_frame_page_size - 100));
-  waiter->Wait();
-}
-
 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
                        ReceivedAggregateResourceDataLength) {
   embedded_test_server()->ServeFilesFromSourceDirectory("content/test/data");
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_observer.h b/chrome/browser/page_load_metrics/page_load_metrics_observer.h
index 3ac74d5..471272b 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/page_load_metrics_observer.h
@@ -420,14 +420,6 @@
   virtual void OnFeaturesUsageObserved(const mojom::PageLoadFeatures& features,
                                        const PageLoadExtraInfo& extra_info) {}
 
-  // Invoked when data use is observed for the page load across all frames.
-  // These bytes are the additional bytes reported since the last call to
-  // OnDataUseObserved. |received_data_length| is the received network bytes.
-  // |data_reduction_proxy_bytes_saved| is the bytes saved by the data reduction
-  // proxy, which could be negative if the proxy had inflated the resource.
-  virtual void OnDataUseObserved(int64_t received_data_length,
-                                 int64_t data_reduction_proxy_bytes_saved) {}
-
   // Invoked when there is data use for loading a resource on the page
   // acrosss all frames. This only contains resources that have had new
   // data use since the last callback.
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_test_waiter.cc b/chrome/browser/page_load_metrics/page_load_metrics_test_waiter.cc
index 6a69dc5..eb832d5 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_test_waiter.cc
+++ b/chrome/browser/page_load_metrics/page_load_metrics_test_waiter.cc
@@ -48,11 +48,6 @@
   expected_minimum_resource_bytes_ = expected_minimum_resource_bytes;
 }
 
-void PageLoadMetricsTestWaiter::AddMinimumPageLoadDataUseExpectation(
-    int expected_minimum_page_load_data_use) {
-  expected_minimum_page_load_data_use_ = expected_minimum_page_load_data_use;
-}
-
 bool PageLoadMetricsTestWaiter::DidObserveInPage(TimingField field) const {
   return observed_page_fields_.IsSet(field);
 }
@@ -111,14 +106,6 @@
     run_loop_->Quit();
 }
 
-void PageLoadMetricsTestWaiter::OnDataUseObserved(
-    int64_t received_data_length,
-    int64_t data_reduction_proxy_bytes_saved) {
-  current_page_load_data_use_ += received_data_length;
-  if (ExpectationsSatisfied() && run_loop_)
-    run_loop_->Quit();
-}
-
 void PageLoadMetricsTestWaiter::OnResourceDataUseObserved(
     const std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr>&
         resources) {
@@ -203,14 +190,9 @@
           current_resource_bytes_ >= expected_minimum_resource_bytes_);
 }
 
-bool PageLoadMetricsTestWaiter::DataUseExpectationsSatisfied() const {
-  return (expected_minimum_page_load_data_use_ == 0 ||
-          current_page_load_data_use_ >= expected_minimum_page_load_data_use_);
-}
-
 bool PageLoadMetricsTestWaiter::ExpectationsSatisfied() const {
   return subframe_expected_fields_.Empty() && page_expected_fields_.Empty() &&
-         DataUseExpectationsSatisfied() && ResourceUseExpectationsSatisfied();
+         ResourceUseExpectationsSatisfied();
 }
 
 PageLoadMetricsTestWaiter::WaiterMetricsObserver::~WaiterMetricsObserver() {}
@@ -234,15 +216,6 @@
     waiter_->OnLoadedResource(extra_request_complete_info);
 }
 
-void PageLoadMetricsTestWaiter::WaiterMetricsObserver::OnDataUseObserved(
-    int64_t received_data_length,
-    int64_t data_reduction_proxy_bytes_saved) {
-  if (waiter_) {
-    waiter_->OnDataUseObserved(received_data_length,
-                               data_reduction_proxy_bytes_saved);
-  }
-}
-
 void PageLoadMetricsTestWaiter::WaiterMetricsObserver::
     OnResourceDataUseObserved(
         const std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr>&
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_test_waiter.h b/chrome/browser/page_load_metrics/page_load_metrics_test_waiter.h
index 17ece08..74b385e 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_test_waiter.h
+++ b/chrome/browser/page_load_metrics/page_load_metrics_test_waiter.h
@@ -46,22 +46,13 @@
   // Add aggregate received resource bytes expectation
   void AddMinimumResourceBytesExpectation(int expected_minimum_resource_bytes);
 
-  // Add a data use expectation
-  void AddMinimumPageLoadDataUseExpectation(
-      int expected_minimum_page_load_data_use);
-
   // Whether the given TimingField was observed in the page.
   bool DidObserveInPage(TimingField field) const;
 
-  // Waits for PageLoadMetrics events that match the fields set by
-  // |AddPageExpectation| and |AddSubFrameExpectation|. All matching fields
-  // must be set to end this wait.
+  // Waits for PageLoadMetrics events that match the fields set by the add
+  // expectation methods. All matching fields must be set to end this wait.
   void Wait();
 
-  int64_t current_page_load_data_use() const {
-    return current_page_load_data_use_;
-  }
-
   int64_t current_resource_bytes() const { return current_resource_bytes_; }
 
  private:
@@ -84,9 +75,6 @@
     void OnLoadedResource(const page_load_metrics::ExtraRequestCompleteInfo&
                               extra_request_complete_info) override;
 
-    void OnDataUseObserved(int64_t received_data_length,
-                           int64_t data_reduction_proxy_bytes_saved) override;
-
     void OnResourceDataUseObserved(
         const std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr>&
             resources) override;
@@ -145,12 +133,6 @@
   void OnLoadedResource(const page_load_metrics::ExtraRequestCompleteInfo&
                             extra_request_complete_info);
 
-  // Updates data counters when data use is seen by the
-  // MetricsWebContentsObserver. Stops waiting if expectations are satsfied
-  // after update.
-  void OnDataUseObserved(int64_t received_data_length,
-                         int64_t data_reduction_proxy_bytes_saved);
-
   // Updates resource map and associated data counters as updates are received
   // from a resource load. Stops waiting if expectations are satisfied after
   // update.
@@ -164,8 +146,6 @@
 
   bool ResourceUseExpectationsSatisfied() const;
 
-  bool DataUseExpectationsSatisfied() const;
-
   virtual bool ExpectationsSatisfied() const;
 
   std::unique_ptr<base::RunLoop> run_loop_;
@@ -175,8 +155,6 @@
 
   TimingFieldBitSet observed_page_fields_;
 
-  int64_t expected_minimum_page_load_data_use_ = 0;
-  int64_t current_page_load_data_use_ = 0;
   int current_complete_resources_ = 0;
   int64_t current_resource_bytes_ = 0;
   int expected_num_complete_resources_ = 0;
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc b/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc
index 32ac745..384e8c1 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc
+++ b/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc
@@ -431,7 +431,6 @@
     const mojom::PageLoadTiming& new_timing,
     const mojom::PageLoadMetadata& new_metadata,
     const mojom::PageLoadFeatures& new_features,
-    const mojom::PageLoadDataUse& new_data_use,
     const std::vector<mojom::ResourceDataUpdatePtr>& resources) {
   if (render_frame_host->GetLastCommittedURL().SchemeIs(
           extensions::kExtensionScheme)) {
@@ -442,7 +441,6 @@
 
   // Report data usage before new timing and metadata for messages that have
   // both updates.
-  client_->UpdateDataUse(new_data_use);
   client_->UpdateResourceDataUse(resources);
   if (render_frame_host->GetParent() == nullptr) {
     UpdateMainFrameMetadata(new_metadata);
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.h b/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.h
index ee61a70e..d9c8b18 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.h
+++ b/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.h
@@ -109,7 +109,6 @@
     virtual void OnSubframeMetadataChanged() = 0;
     virtual void UpdateFeaturesUsage(
         const mojom::PageLoadFeatures& new_features) = 0;
-    virtual void UpdateDataUse(const mojom::PageLoadDataUse& new_data_use) = 0;
     virtual void UpdateResourceDataUse(
         const std::vector<mojom::ResourceDataUpdatePtr>& resources) = 0;
   };
@@ -126,7 +125,6 @@
       const mojom::PageLoadTiming& new_timing,
       const mojom::PageLoadMetadata& new_metadata,
       const mojom::PageLoadFeatures& new_features,
-      const mojom::PageLoadDataUse& new_data_use,
       const std::vector<mojom::ResourceDataUpdatePtr>& resources);
 
   // This method is only intended to be called for PageLoadFeatures being
@@ -164,8 +162,6 @@
   void MaybeDispatchTimingUpdates(bool did_merge_new_timing_value);
   void DispatchTimingUpdates();
 
-  void UpdateDataUse(const mojom::PageLoadDataUse& new_data_use);
-
   // The client is guaranteed to outlive this object.
   Client* const client_;
 
diff --git a/chrome/browser/page_load_metrics/page_load_tracker.cc b/chrome/browser/page_load_metrics/page_load_tracker.cc
index 2d020269..4e38876 100644
--- a/chrome/browser/page_load_metrics/page_load_tracker.cc
+++ b/chrome/browser/page_load_metrics/page_load_tracker.cc
@@ -643,14 +643,6 @@
   }
 }
 
-void PageLoadTracker::UpdateDataUse(
-    const mojom::PageLoadDataUse& new_data_use) {
-  for (const auto& observer : observers_) {
-    observer->OnDataUseObserved(new_data_use.received_data_length,
-                                new_data_use.data_reduction_proxy_bytes_saved);
-  }
-}
-
 void PageLoadTracker::UpdateResourceDataUse(
     const std::vector<mojom::ResourceDataUpdatePtr>& resources) {
   for (const auto& observer : observers_) {
diff --git a/chrome/browser/page_load_metrics/page_load_tracker.h b/chrome/browser/page_load_metrics/page_load_tracker.h
index 7fa8e67d1..183eca92 100644
--- a/chrome/browser/page_load_metrics/page_load_tracker.h
+++ b/chrome/browser/page_load_metrics/page_load_tracker.h
@@ -180,7 +180,6 @@
   void OnSubframeMetadataChanged() override;
   void UpdateFeaturesUsage(
       const mojom::PageLoadFeatures& new_features) override;
-  void UpdateDataUse(const mojom::PageLoadDataUse& new_datause) override;
   void UpdateResourceDataUse(
       const std::vector<mojom::ResourceDataUpdatePtr>& resources) override;
 
diff --git a/chrome/browser/payments/chrome_payment_request_delegate.cc b/chrome/browser/payments/chrome_payment_request_delegate.cc
index 47c7d76..1e7c4ef 100644
--- a/chrome/browser/payments/chrome_payment_request_delegate.cc
+++ b/chrome/browser/payments/chrome_payment_request_delegate.cc
@@ -67,6 +67,11 @@
   shown_dialog_->ShowDialog();
 }
 
+void ChromePaymentRequestDelegate::RetryDialog() {
+  if (shown_dialog_)
+    shown_dialog_->RetryDialog();
+}
+
 void ChromePaymentRequestDelegate::CloseDialog() {
   if (shown_dialog_) {
     shown_dialog_->CloseDialog();
diff --git a/chrome/browser/payments/chrome_payment_request_delegate.h b/chrome/browser/payments/chrome_payment_request_delegate.h
index a519a5b6..49406603 100644
--- a/chrome/browser/payments/chrome_payment_request_delegate.h
+++ b/chrome/browser/payments/chrome_payment_request_delegate.h
@@ -26,6 +26,7 @@
 
   // PaymentRequestDelegate:
   void ShowDialog(PaymentRequest* request) override;
+  void RetryDialog() override;
   void CloseDialog() override;
   void ShowErrorMessage() override;
   void ShowProcessingSpinner() override;
diff --git a/chrome/browser/plugins/plugins_resource_service.cc b/chrome/browser/plugins/plugins_resource_service.cc
index b553264..8223414 100644
--- a/chrome/browser/plugins/plugins_resource_service.cc
+++ b/chrome/browser/plugins/plugins_resource_service.cc
@@ -14,6 +14,7 @@
 #include "chrome/common/pref_names.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
+#include "content/public/browser/network_service_instance.h"
 #include "content/public/common/service_manager_connection.h"
 #include "services/data_decoder/public/cpp/safe_json_parser.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
@@ -89,7 +90,8 @@
           base::Bind(data_decoder::SafeJsonParser::Parse,
                      content::ServiceManagerConnection::GetForProcess()
                          ->GetConnector()),
-          kPluginResourceServiceTrafficAnnotation) {}
+          kPluginResourceServiceTrafficAnnotation,
+          base::BindOnce(&content::GetNetworkConnectionTracker)) {}
 
 void PluginsResourceService::Init() {
   const base::DictionaryValue* metadata =
diff --git a/chrome/browser/prefs/pref_service_incognito_whitelist.cc b/chrome/browser/prefs/pref_service_incognito_whitelist.cc
index 61b3980..e232f45 100644
--- a/chrome/browser/prefs/pref_service_incognito_whitelist.cc
+++ b/chrome/browser/prefs/pref_service_incognito_whitelist.cc
@@ -119,6 +119,16 @@
     metrics::prefs::kUninstallMetricsUptimeSec, metrics::prefs::kUkmCellDataUse,
     metrics::prefs::kUmaCellDataUse, metrics::prefs::kUserCellDataUse,
 
+    // Devtools preferences are stored cross profiles as they are not storing
+    // user data and just keep debugging environment settings.
+    prefs::kDevToolsAdbKey, prefs::kDevToolsAvailability,
+    prefs::kDevToolsDiscoverUsbDevicesEnabled, prefs::kDevToolsEditedFiles,
+    prefs::kDevToolsFileSystemPaths, prefs::kDevToolsPortForwardingEnabled,
+    prefs::kDevToolsPortForwardingDefaultSet,
+    prefs::kDevToolsPortForwardingConfig, prefs::kDevToolsPreferences,
+    prefs::kDevToolsDiscoverTCPTargetsEnabled,
+    prefs::kDevToolsTCPDiscoveryConfig,
+
     // Google URL prefs don't store user data and just keep track of the URL.
     prefs::kLastKnownGoogleURL, prefs::kLastPromptedGoogleURL,
 
@@ -382,17 +392,6 @@
     prefs::kSuppressUnsupportedOSWarning, prefs::kWasRestarted,
 #endif  // !defined(OS_ANDROID)
 
-    prefs::kDevToolsAdbKey, prefs::kDevToolsAvailability,
-    prefs::kDevToolsDiscoverUsbDevicesEnabled, prefs::kDevToolsEditedFiles,
-    prefs::kDevToolsFileSystemPaths, prefs::kDevToolsPortForwardingEnabled,
-    prefs::kDevToolsPortForwardingDefaultSet,
-    prefs::kDevToolsPortForwardingConfig, prefs::kDevToolsPreferences,
-    prefs::kDevToolsDiscoverTCPTargetsEnabled,
-    prefs::kDevToolsTCPDiscoveryConfig,
-#if defined(OS_ANDROID)
-    prefs::kDevToolsRemoteEnabled,
-#endif
-
     prefs::kGoogleServicesPasswordHash,
 
     prefs::kWebAppCreateOnDesktop, prefs::kWebAppCreateInAppsMenu,
diff --git a/chrome/browser/previews/previews_browsertest.cc b/chrome/browser/previews/previews_browsertest.cc
index c2e286a..503c6a64 100644
--- a/chrome/browser/previews/previews_browsertest.cc
+++ b/chrome/browser/previews/previews_browsertest.cc
@@ -80,18 +80,21 @@
     // Set up https server with resource monitor.
     https_server_.reset(
         new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS));
-    https_server_->ServeFilesFromSourceDirectory("chrome/test/data/previews");
+    https_server_->ServeFilesFromSourceDirectory("chrome/test/data");
     https_server_->RegisterRequestMonitor(base::BindRepeating(
         &PreviewsBrowserTest::MonitorResourceRequest, base::Unretained(this)));
     ASSERT_TRUE(https_server_->Start());
 
-    https_url_ = https_server_->GetURL("/noscript_test.html");
+    https_url_ = https_server_->GetURL("/previews/noscript_test.html");
     ASSERT_TRUE(https_url_.SchemeIs(url::kHttpsScheme));
 
-    https_no_transform_url_ =
-        https_server_->GetURL("/noscript_test_with_no_transform_header.html");
+    https_no_transform_url_ = https_server_->GetURL(
+        "/previews/noscript_test_with_no_transform_header.html");
     ASSERT_TRUE(https_no_transform_url_.SchemeIs(url::kHttpsScheme));
 
+    https_media_url_ = https_server_->GetURL("/image_decoding/droids.jpg");
+    ASSERT_TRUE(https_media_url_.SchemeIs(url::kHttpsScheme));
+
     // Set up http server with resource monitor and redirect handler.
     http_server_.reset(
         new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTP));
@@ -124,6 +127,7 @@
 
   const GURL& https_url() const { return https_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& redirect_url() const { return redirect_url_; }
   const GURL& subframe_url() const { return subframe_url_; }
@@ -159,6 +163,7 @@
   std::unique_ptr<net::EmbeddedTestServer> http_server_;
   GURL https_url_;
   GURL https_no_transform_url_;
+  GURL https_media_url_;
   GURL http_url_;
   GURL redirect_url_;
   GURL subframe_url_;
@@ -380,7 +385,8 @@
       scoped_refptr<base::FieldTrial> trial =
           base::FieldTrialList::CreateFieldTrial("TrialName1", "GroupName1");
       std::map<std::string, std::string> feature_parameters = {
-          {"previews_host", previews_server().spec()}};
+          {"previews_host", previews_server().spec()},
+          {"blacklisted_path_suffixes", ".mp4,.jpg"}};
       base::FieldTrialParamAssociator::GetInstance()->AssociateFieldTrialParams(
           "TrialName1", "GroupName1", feature_parameters);
 
@@ -523,6 +529,10 @@
   ui_test_utils::NavigateToURL(browser(), https_lite_page_url(200));
   VerifyPreviewLoaded();
 
+  // Verify the preview is not triggered when loading a media resource.
+  ui_test_utils::NavigateToURL(browser(), https_media_url());
+  VerifyPreviewNotLoaded();
+
   // Verify the preview is not triggered for POST navigations.
   std::string post_data = "helloworld";
   NavigateParams params(browser(), https_url(), ui::PAGE_TRANSITION_LINK);
diff --git a/chrome/browser/previews/previews_lite_page_navigation_throttle.cc b/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
index b4ca7959..a340acfc 100644
--- a/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
+++ b/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
@@ -85,7 +85,8 @@
     default;
 
 bool PreviewsLitePageNavigationThrottle::IsEligibleForPreview() const {
-  if (!navigation_handle()->GetURL().SchemeIs(url::kHttpsScheme))
+  const GURL& url = navigation_handle()->GetURL();
+  if (!url.SchemeIs(url::kHttpsScheme))
     return false;
 
   if (navigation_handle()->IsPost())
@@ -97,9 +98,18 @@
   if (manager_->IsServerUnavailable())
     return false;
 
-  if (IsPreviewsDomain(navigation_handle()->GetURL()))
+  if (IsPreviewsDomain(url))
     return false;
 
+  std::vector<std::string> blacklisted_path_suffixes =
+      previews::params::LitePagePreviewsBlacklistedPathSuffixes();
+  for (std::string suffix : blacklisted_path_suffixes) {
+    if (base::EndsWith(url.path(), suffix,
+                       base::CompareCase::INSENSITIVE_ASCII)) {
+      return false;
+    }
+  }
+
   return true;
 }
 
diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc
index 9c3e6fdf..3bb5207d 100644
--- a/chrome/browser/profiles/profile.cc
+++ b/chrome/browser/profiles/profile.cc
@@ -185,10 +185,6 @@
                              std::make_unique<base::ListValue>());
 #endif
 
-#if defined(OS_ANDROID)
-  registry->RegisterBooleanPref(prefs::kDevToolsRemoteEnabled, false);
-#endif
-
   registry->RegisterBooleanPref(prefs::kDataSaverEnabled, false);
   data_reduction_proxy::RegisterSyncableProfilePrefs(registry);
 
diff --git a/chrome/browser/profiles/profile_shortcut_manager_win.cc b/chrome/browser/profiles/profile_shortcut_manager_win.cc
index 8ca940a..271c5d1 100644
--- a/chrome/browser/profiles/profile_shortcut_manager_win.cc
+++ b/chrome/browser/profiles/profile_shortcut_manager_win.cc
@@ -47,6 +47,7 @@
 #include "content/public/browser/notification_service.h"
 #include "skia/ext/image_operations.h"
 #include "skia/ext/platform_canvas.h"
+#include "third_party/skia/include/core/SkRRect.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/gfx/icon_util.h"
@@ -62,7 +63,8 @@
 
 // Characters that are not allowed in Windows filenames. Taken from
 // http://msdn.microsoft.com/en-us/library/aa365247.aspx
-const base::char16 kReservedCharacters[] = L"<>:\"/\\|?*\x01\x02\x03\x04\x05"
+const base::char16 kReservedCharacters[] =
+    L"<>:\"/\\|?*\x01\x02\x03\x04\x05"
     L"\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17"
     L"\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F";
 
@@ -82,38 +84,25 @@
 // Incrementing this number will cause profile icons to be regenerated on
 // profile startup (it should be incremented whenever the product/avatar icons
 // change, etc).
-const int kCurrentProfileIconVersion = 4;
+const int kCurrentProfileIconVersion = 5;
 
 // 2x sized profile avatar icons. Mirrors |kDefaultAvatarIconResources| in
 // profile_info_cache.cc.
 const int kProfileAvatarIconResources2x[] = {
-  IDR_PROFILE_AVATAR_2X_0,
-  IDR_PROFILE_AVATAR_2X_1,
-  IDR_PROFILE_AVATAR_2X_2,
-  IDR_PROFILE_AVATAR_2X_3,
-  IDR_PROFILE_AVATAR_2X_4,
-  IDR_PROFILE_AVATAR_2X_5,
-  IDR_PROFILE_AVATAR_2X_6,
-  IDR_PROFILE_AVATAR_2X_7,
-  IDR_PROFILE_AVATAR_2X_8,
-  IDR_PROFILE_AVATAR_2X_9,
-  IDR_PROFILE_AVATAR_2X_10,
-  IDR_PROFILE_AVATAR_2X_11,
-  IDR_PROFILE_AVATAR_2X_12,
-  IDR_PROFILE_AVATAR_2X_13,
-  IDR_PROFILE_AVATAR_2X_14,
-  IDR_PROFILE_AVATAR_2X_15,
-  IDR_PROFILE_AVATAR_2X_16,
-  IDR_PROFILE_AVATAR_2X_17,
-  IDR_PROFILE_AVATAR_2X_18,
-  IDR_PROFILE_AVATAR_2X_19,
-  IDR_PROFILE_AVATAR_2X_20,
-  IDR_PROFILE_AVATAR_2X_21,
-  IDR_PROFILE_AVATAR_2X_22,
-  IDR_PROFILE_AVATAR_2X_23,
-  IDR_PROFILE_AVATAR_2X_24,
-  IDR_PROFILE_AVATAR_2X_25,
-  IDR_PROFILE_AVATAR_2X_26,
+    IDR_PROFILE_AVATAR_2X_0,  IDR_PROFILE_AVATAR_2X_1,
+    IDR_PROFILE_AVATAR_2X_2,  IDR_PROFILE_AVATAR_2X_3,
+    IDR_PROFILE_AVATAR_2X_4,  IDR_PROFILE_AVATAR_2X_5,
+    IDR_PROFILE_AVATAR_2X_6,  IDR_PROFILE_AVATAR_2X_7,
+    IDR_PROFILE_AVATAR_2X_8,  IDR_PROFILE_AVATAR_2X_9,
+    IDR_PROFILE_AVATAR_2X_10, IDR_PROFILE_AVATAR_2X_11,
+    IDR_PROFILE_AVATAR_2X_12, IDR_PROFILE_AVATAR_2X_13,
+    IDR_PROFILE_AVATAR_2X_14, IDR_PROFILE_AVATAR_2X_15,
+    IDR_PROFILE_AVATAR_2X_16, IDR_PROFILE_AVATAR_2X_17,
+    IDR_PROFILE_AVATAR_2X_18, IDR_PROFILE_AVATAR_2X_19,
+    IDR_PROFILE_AVATAR_2X_20, IDR_PROFILE_AVATAR_2X_21,
+    IDR_PROFILE_AVATAR_2X_22, IDR_PROFILE_AVATAR_2X_23,
+    IDR_PROFILE_AVATAR_2X_24, IDR_PROFILE_AVATAR_2X_25,
+    IDR_PROFILE_AVATAR_2X_26,
 };
 
 // Badges |app_icon_bitmap| with |avatar_bitmap| at the bottom right corner and
@@ -121,16 +110,29 @@
 SkBitmap BadgeIcon(const SkBitmap& app_icon_bitmap,
                    const SkBitmap& avatar_bitmap,
                    int scale_factor) {
+  // TODO(dfried): This function often doesn't actually do the thing it claims
+  // to. We should probably fix it.
   SkBitmap source_bitmap =
       profiles::GetAvatarIconAsSquare(avatar_bitmap, scale_factor);
-  int avatar_badge_size = kProfileAvatarBadgeSize;
+
+  int avatar_badge_width = kProfileAvatarBadgeSize;
   if (app_icon_bitmap.width() != kShortcutIconSize) {
-    avatar_badge_size =
-        app_icon_bitmap.width() * kProfileAvatarBadgeSize / kShortcutIconSize;
+    avatar_badge_width =
+        std::ceilf(app_icon_bitmap.width() *
+                   (float{kProfileAvatarBadgeSize} / float{kShortcutIconSize}));
   }
+
+  // Resize the avatar image down to the desired badge size, maintaining aspect
+  // ratio (but prefer more square than rectangular when rounding).
+  const int avatar_badge_height =
+      std::ceilf(avatar_badge_width * (float{source_bitmap.height()} /
+                                       float{source_bitmap.width()}));
   SkBitmap sk_icon = skia::ImageOperations::Resize(
-      source_bitmap, skia::ImageOperations::RESIZE_LANCZOS3, avatar_badge_size,
-      source_bitmap.height() * avatar_badge_size / source_bitmap.width());
+      source_bitmap, skia::ImageOperations::RESIZE_LANCZOS3,
+      avatar_badge_height, avatar_badge_width);
+
+  // Sanity check - avatars shouldn't be taller than they are wide.
+  DCHECK_GE(avatar_badge_width, avatar_badge_height);
 
   // Overlay the avatar on the icon, anchoring it to the bottom-right of the
   // icon.
@@ -139,11 +141,21 @@
                                app_icon_bitmap.height());
   SkCanvas offscreen_canvas(badged_bitmap);
   offscreen_canvas.clear(SK_ColorTRANSPARENT);
-
   offscreen_canvas.drawBitmap(app_icon_bitmap, 0, 0);
-  offscreen_canvas.drawBitmap(sk_icon,
-                              app_icon_bitmap.width() - sk_icon.width(),
-                              app_icon_bitmap.height() - sk_icon.height());
+
+  // Render the avatar in a cutout circle. If the avatar is not square, center
+  // it in the circle but favor pushing it further down.
+  const int cutout_size = avatar_badge_width;
+  const int cutout_left = app_icon_bitmap.width() - cutout_size;
+  const int cutout_top = app_icon_bitmap.height() - cutout_size;
+  const int icon_left = cutout_left;
+  const int icon_top =
+      cutout_top + int{std::ceilf((cutout_size - avatar_badge_height) / 2.0f)};
+  const SkRRect clip_circle = SkRRect::MakeOval(
+      SkRect::MakeXYWH(cutout_left, cutout_top, cutout_size, cutout_size));
+
+  offscreen_canvas.clipRRect(clip_circle, true);
+  offscreen_canvas.drawBitmap(sk_icon, icon_left, icon_top);
   return badged_bitmap;
 }
 
@@ -480,10 +492,8 @@
     const CreateOrUpdateShortcutsParams& params) {
   base::AssertBlockingAllowed();
 
-  const base::FilePath shortcut_icon =
-      CreateOrUpdateShortcutIconForProfile(params.profile_path,
-                                           params.avatar_image_1x,
-                                           params.avatar_image_2x);
+  const base::FilePath shortcut_icon = CreateOrUpdateShortcutIconForProfile(
+      params.profile_path, params.avatar_image_1x, params.avatar_image_2x);
   if (shortcut_icon.empty() ||
       params.create_mode ==
           ProfileShortcutManagerWin::CREATE_OR_UPDATE_ICON_ONLY) {
@@ -522,7 +532,6 @@
   installer::Product product(distribution);
   product.AddDefaultShortcutProperties(chrome_exe, &properties);
 
-
   // Only set the profile-specific properties when |profile_name| is non empty.
   // If it is empty, it means the shortcut being created should be a regular,
   // non-profile Chrome shortcut.
@@ -554,7 +563,7 @@
     const base::FilePath shortcut_name = shortcut.BaseName().RemoveExtension();
     properties.set_shortcut_name(shortcut_name.value());
     ShellUtil::CreateOrUpdateShortcut(ShellUtil::SHORTCUT_LOCATION_DESKTOP,
-        distribution, properties, operation);
+                                      distribution, properties, operation);
   }
 }
 
@@ -764,10 +773,9 @@
 }
 
 base::string16 CreateProfileShortcutFlags(const base::FilePath& profile_path) {
-  return base::StringPrintf(L"--%ls=\"%ls\"",
-                            base::ASCIIToUTF16(
-                                switches::kProfileDirectory).c_str(),
-                            profile_path.BaseName().value().c_str());
+  return base::StringPrintf(
+      L"--%ls=\"%ls\"", base::ASCIIToUTF16(switches::kProfileDirectory).c_str(),
+      profile_path.BaseName().value().c_str());
 }
 
 }  // namespace internal
@@ -807,9 +815,8 @@
 
 ProfileShortcutManagerWin::ProfileShortcutManagerWin(ProfileManager* manager)
     : profile_manager_(manager) {
-  DCHECK_EQ(
-      arraysize(kProfileAvatarIconResources2x),
-      profiles::GetDefaultAvatarIconCount());
+  DCHECK_EQ(arraysize(kProfileAvatarIconResources2x),
+            profiles::GetDefaultAvatarIconCount());
 
   registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CREATED,
                  content::NotificationService::AllSources());
@@ -823,9 +830,8 @@
 
 void ProfileShortcutManagerWin::CreateOrUpdateProfileIcon(
     const base::FilePath& profile_path) {
-  CreateOrUpdateShortcutsForProfileAtPath(profile_path,
-                                          CREATE_OR_UPDATE_ICON_ONLY,
-                                          IGNORE_NON_PROFILE_SHORTCUTS);
+  CreateOrUpdateShortcutsForProfileAtPath(
+      profile_path, CREATE_OR_UPDATE_ICON_ONLY, IGNORE_NON_PROFILE_SHORTCUTS);
 }
 
 void ProfileShortcutManagerWin::CreateProfileShortcut(
@@ -872,10 +878,13 @@
     shortcut_profile_name = entry->GetName();
 
   *name = base::FilePath(profiles::internal::GetShortcutFilenameForProfile(
-      shortcut_profile_name,
-      BrowserDistribution::GetDistribution())).RemoveExtension().value();
+                             shortcut_profile_name,
+                             BrowserDistribution::GetDistribution()))
+              .RemoveExtension()
+              .value();
 
-  command_line->ParseFromString(L"\"" + chrome_exe.value() + L"\" " +
+  command_line->ParseFromString(
+      L"\"" + chrome_exe.value() + L"\" " +
       profiles::internal::CreateProfileShortcutFlags(profile_path));
 
   *icon_path = profiles::internal::GetProfileIconPath(profile_path);
@@ -885,7 +894,7 @@
     const base::FilePath& profile_path) {
   CreateOrUpdateProfileIcon(profile_path);
   if (profile_manager_->GetProfileAttributesStorage().GetNumberOfProfiles() ==
-          2u) {
+      2u) {
     // When the second profile is added, make existing non-profile shortcuts
     // point to the first profile and be badged/named appropriately.
     CreateOrUpdateShortcutsForProfileAtPath(GetOtherProfilePath(profile_path),
@@ -907,8 +916,7 @@
     // This is needed to unbadge the icon.
     CreateOrUpdateShortcutsForProfileAtPath(
         storage.GetAllProfilesAttributes().front()->GetPath(),
-        UPDATE_EXISTING_ONLY,
-        IGNORE_NON_PROFILE_SHORTCUTS);
+        UPDATE_EXISTING_ONLY, IGNORE_NON_PROFILE_SHORTCUTS);
   }
 
   base::CreateCOMSTATaskRunnerWithTraits({base::MayBlock()})
@@ -935,9 +943,10 @@
   DCHECK_EQ(2u, storage.GetNumberOfProfiles());
   // Get the index of the current profile, in order to find the index of the
   // other profile.
-  std::vector<ProfileAttributesEntry*> entries = g_browser_process->
-      profile_manager()->GetProfileAttributesStorage().
-          GetAllProfilesAttributes();
+  std::vector<ProfileAttributesEntry*> entries =
+      g_browser_process->profile_manager()
+          ->GetProfileAttributesStorage()
+          .GetAllProfilesAttributes();
   for (ProfileAttributesEntry* entry : entries) {
     base::FilePath path = entry->GetPath();
     if (path != profile_path)
@@ -959,6 +968,7 @@
       profile_manager_->GetProfileAttributesStorage();
   ProfileAttributesEntry* entry;
   bool has_entry = storage.GetProfileAttributesWithPath(profile_path, &entry);
+
   if (!has_entry)
     return;
   bool remove_badging = (storage.GetNumberOfProfiles() == 1u);
@@ -968,8 +978,7 @@
   // Exit early if the mode is to update existing profile shortcuts only and
   // none were ever created for this profile, per the shortcut name not being
   // set in the profile attributes storage.
-  if (params.old_profile_name.empty() &&
-      create_mode == UPDATE_EXISTING_ONLY &&
+  if (params.old_profile_name.empty() && create_mode == UPDATE_EXISTING_ONLY &&
       action == IGNORE_NON_PROFILE_SHORTCUTS) {
     return;
   }
diff --git a/chrome/browser/resources/chromeos/chromevox/chromevox/background/background.js b/chrome/browser/resources/chromeos/chromevox/chromevox/background/background.js
index a0d94d7..e635e0f 100644
--- a/chrome/browser/resources/chromeos/chromevox/chromevox/background/background.js
+++ b/chrome/browser/resources/chromeos/chromevox/chromevox/background/background.js
@@ -193,7 +193,7 @@
   if (localStorage['active'] == 'false') {
     // Warn the user when the browser first starts if ChromeVox is inactive.
     this.tts.speak(Msgs.getMsg('chromevox_inactive'), cvox.QueueMode.QUEUE);
-  } else if (cvox.PlatformUtil.matchesPlatform(cvox.PlatformFilter.WML)) {
+  } else if (!cvox.ChromeVox.isChromeOS) {
     // Introductory message.
     this.tts.speak(Msgs.getMsg('chromevox_intro'), cvox.QueueMode.QUEUE);
     cvox.ChromeVox.braille.write(
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb
index eda2109..54ff105 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.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{علامة أكبر من واحدة}zero{# greater than signs}two{علامتا أكبر من (#)}few{# علامات أكبر من}many{# علامة أكبر من}other{# من علامات أكبر من}}</translation>
 <translation id="1653266918374749391">عنوان المستوى الثالث السابق</translation>
+<translation id="1657616855184033958">عرض فلترات بث الحدث</translation>
 <translation id="1659072772017912254">غير محدد</translation>
 <translation id="1669290819662866522">أسبوع</translation>
 <translation id="1674262202423278359">‏التنقل في ChromeVox</translation>
@@ -412,6 +414,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>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{فاصلة منقوطة واحدة}zero{# semicolons}two{فاصلتان منقوطتان (#)}few{# فواصل منقوطة}many{# فاصلة منقوطة}other{# من الفواصل المنقوطة}}</translation>
 <translation id="5411891038905756502">ليست هناك نقطة انتقال سابقة.</translation>
 <translation id="5417034931411865818">النقر على العنصر أسفل مفتاح التوجيه $1</translation>
+<translation id="5435274640623994081">تفعيل تسجيل الرمز الصوتي</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{علامة أقل من واحدة}zero{# less than signs}two{علامتا أقل من (#)}few{# علامات أقل من}many{# علامة أقل من}other{# من علامات أقل من}}</translation>
 <translation id="5444587279251314700">(نشط)</translation>
 <translation id="5446809554778706307">‏لم يتم التركيز على أي عنصر. يُرجى الضغط على Ctrl+T لفتح علامة تبويب جديدة.</translation>
@@ -899,6 +903,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{شريط رأسي واحد}zero{# vertical pipes}two{شريطان رأسيان (#)}few{# أشرطة رأسية}many{# شريطًا رأسيًا}other{# من الأشرطة الرأسية}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb
index 283510d7..59a962f 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb
@@ -757,7 +757,7 @@
 <translation id="7241683698754534149">Obre la descripció llarga en una pestanya nova.</translation>
 <translation id="7248671827512403053">Aplicació</translation>
 <translation id="725969808843520477">Botó d'opció següent</translation>
-<translation id="7261612856573623172">Veu del sistema síntesi de veu</translation>
+<translation id="7261612856573623172">Veu de la síntesi de veu del sistema</translation>
 <translation id="7269119382257320590">Sense cap signe de puntuació.</translation>
 <translation id="7273174640290488576">En blanc</translation>
 <translation id="7274770952766771364">Referència de la nota</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb
index 71dd650..343be93 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Ugyldigt input</translation>
 <translation id="1080471004309605942">Slut kursiv</translation>
 <translation id="1082209053475788238">Ingen tidligere niveau 6-overskrifter.</translation>
+<translation id="1087788677726983142">Skjul filtre for begivenhedsstreaming</translation>
 <translation id="1088219014394087294">Ingen overskrifter.</translation>
 <translation id="1106741348836243114">Slå lydfeedback (earcons) til eller fra.</translation>
 <translation id="1108651818222110612">undertitel</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Angiver en komplet beskrivelse af den aktuelle position</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{større end}one{# større end-tegn}other{# større end-tegn}}</translation>
 <translation id="1653266918374749391">Forrige niveau 3-overskrift</translation>
+<translation id="1657616855184033958">Vis filtre for begivenhedsstreaming</translation>
 <translation id="1659072772017912254">Ikke kontrolleret</translation>
 <translation id="1669290819662866522">uge</translation>
 <translation id="1674262202423278359">Navigation i ChromeVox</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Brug indstillingerne nedenfor til at tilpasse ChromeVox. Ændringer træder i kraft med det samme.</translation>
 <translation id="4271220233568730077">Næste matematiske udtryk</translation>
 <translation id="4271521365602459209">Ikke flere resultater.</translation>
+<translation id="4275397969489577657">Aktivér logning af begivenhedsstreaming</translation>
 <translation id="4287520460805643128">Ikke flere artikler.</translation>
 <translation id="4289540628985791613">Oversigt</translation>
 <translation id="4300318234632215983">Offentliggør webadressen bag et link</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{semikolon}one{# semikoloner}other{# semikoloner}}</translation>
 <translation id="5411891038905756502">Ingen tidligere hoppunkter.</translation>
 <translation id="5417034931411865818">Klik på elementet under routingtasten $1</translation>
+<translation id="5435274640623994081">Aktivér logning af lydikoner</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{mindre end}one{# mindre end-tegn}other{# mindre end-tegn}}</translation>
 <translation id="5444587279251314700">(aktiv)</translation>
 <translation id="5446809554778706307">Der er intet fokus. Tryk på Ctrl+T for at åbne en ny fane.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">Ingen tidligere lister.</translation>
 <translation id="8651481478098336970">slå lyden fra</translation>
 <translation id="8653646212587894517">Vis liste over links</translation>
+<translation id="8656888282555543604">Aktivér logning af braille</translation>
 <translation id="8664519043722036194">sekunder</translation>
 <translation id="867187640362843212">Overskrift 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{streg}one{# lodrette streger}other{# lodrette streger}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb
index 40fda7c..4b7f80c 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Ungültige Eingabe</translation>
 <translation id="1080471004309605942">Ende kursiver Text</translation>
 <translation id="1082209053475788238">Keine vorherige Überschrift der Ebene 6</translation>
+<translation id="1087788677726983142">Event-Stream-Filter ausblenden</translation>
 <translation id="1088219014394087294">Keine Überschriften</translation>
 <translation id="1106741348836243114">Akustisches Feedback (Earcons) aktivieren bzw. deaktivieren</translation>
 <translation id="1108651818222110612">Untertitel</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Vollständige Beschreibung der aktuellen Position ansagen</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{Größer-als-Zeichen}other{# Größer-als-Zeichen}}</translation>
 <translation id="1653266918374749391">Vorherige Überschrift der Ebene 3</translation>
+<translation id="1657616855184033958">Event-Stream-Filter einblenden</translation>
 <translation id="1659072772017912254">Nicht aktiviert</translation>
 <translation id="1669290819662866522">week</translation>
 <translation id="1674262202423278359">ChromeVox-Navigation</translation>
@@ -411,6 +413,7 @@
 <translation id="4255943572433203166">Verwenden Sie die Optionen unten, um ChromeVox anzupassen. Änderungen werden sofort wirksam.</translation>
 <translation id="4271220233568730077">Nächster mathematischer Ausdruck</translation>
 <translation id="4271521365602459209">Keine weiteren Ergebnisse</translation>
+<translation id="4275397969489577657">Event-Stream-Protokollierung aktivieren</translation>
 <translation id="4287520460805643128">Kein weiterer Artikel</translation>
 <translation id="4289540628985791613">Übersicht</translation>
 <translation id="4300318234632215983">URL hinter einem Link ansagen</translation>
@@ -549,6 +552,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{Strichpunkt}other{# Strichpunkte}}</translation>
 <translation id="5411891038905756502">Kein vorheriger Ausgangspunkt</translation>
 <translation id="5417034931411865818">Klicken Sie auf das Element unterhalb des Routing-Schlüssels $1</translation>
+<translation id="5435274640623994081">Earcon-Protokollierung aktivieren</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{Kleiner-als-Zeichen}other{# Kleiner-als-Zeichen}}</translation>
 <translation id="5444587279251314700">(aktiv)</translation>
 <translation id="5446809554778706307">Kein Fokus. Drücken Sie Strg + T, um einen neuen Tab zu öffnen.</translation>
@@ -898,6 +902,7 @@
 <translation id="8650576015643545550">Keine vorherige Liste</translation>
 <translation id="8651481478098336970">Stummschalten</translation>
 <translation id="8653646212587894517">Linkliste anzeigen</translation>
+<translation id="8656888282555543604">Braille-Protokollierung aktivieren</translation>
 <translation id="8664519043722036194">Sekunden</translation>
 <translation id="867187640362843212">Überschrift 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{senkrechter Strich}other{# senkrechte Striche}}</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 b3a9a0db..e43a3f64 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
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Invalid input</translation>
 <translation id="1080471004309605942">Italic end</translation>
 <translation id="1082209053475788238">No previous level 6 heading.</translation>
+<translation id="1087788677726983142">Hide event stream filters</translation>
 <translation id="1088219014394087294">No headings.</translation>
 <translation id="1106741348836243114">Turn sound feedback (earcons) on or off.</translation>
 <translation id="1108651818222110612">subti</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Announces a complete description of the current position</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{greater than}other{# greater than signs}}</translation>
 <translation id="1653266918374749391">Previous level 3 heading</translation>
+<translation id="1657616855184033958">Show event stream filters</translation>
 <translation id="1659072772017912254">Not ticked</translation>
 <translation id="1669290819662866522">week</translation>
 <translation id="1674262202423278359">ChromeVox Navigation</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Use the options below to customise ChromeVox. Changes take effect immediately.</translation>
 <translation id="4271220233568730077">Next math</translation>
 <translation id="4271521365602459209">No more results.</translation>
+<translation id="4275397969489577657">Enable event stream logging</translation>
 <translation id="4287520460805643128">No next article.</translation>
 <translation id="4289540628985791613">Overview</translation>
 <translation id="4300318234632215983">Announce the URL behind a link</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{semicolon}other{# semicolons}}</translation>
 <translation id="5411891038905756502">No previous jump point.</translation>
 <translation id="5417034931411865818">Click the item under routing key $1</translation>
+<translation id="5435274640623994081">Enable earcon logging</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{less than}other{# less than signs}}</translation>
 <translation id="5444587279251314700">(active)</translation>
 <translation id="5446809554778706307">No focus. Press Ctrl+T to open a new tab.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">No previous list.</translation>
 <translation id="8651481478098336970">volume mute</translation>
 <translation id="8653646212587894517">Show links list</translation>
+<translation id="8656888282555543604">Enable braille logging</translation>
 <translation id="8664519043722036194">seconds</translation>
 <translation id="867187640362843212">Heading 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{pipe}other{# vertical pipes}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb
index 08bcedeb..53ba5711 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Entrada inválida</translation>
 <translation id="1080471004309605942">Fin de la cursiva</translation>
 <translation id="1082209053475788238">No hay ningún título de nivel 6 anterior.</translation>
+<translation id="1087788677726983142">Ocultar filtros de emisión de eventos</translation>
 <translation id="1088219014394087294">No hay títulos.</translation>
 <translation id="1106741348836243114">Activa o desactiva el sonido.</translation>
 <translation id="1108651818222110612">subtítulo</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Muestra una descripción completa de la posición actual.</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{mayor que}other{# signos mayor que}}</translation>
 <translation id="1653266918374749391">Encabezado anterior de nivel 3</translation>
+<translation id="1657616855184033958">Mostrar filtros de emisión de eventos</translation>
 <translation id="1659072772017912254">Sin marcar</translation>
 <translation id="1669290819662866522">semana</translation>
 <translation id="1674262202423278359">Navegación de ChromeVox</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Puedes personalizar ChromeVox con las opciones que aparecen a continuación. Los cambios se aplican inmediatamente.</translation>
 <translation id="4271220233568730077">Siguiente expresión matemática</translation>
 <translation id="4271521365602459209">No hay más resultados.</translation>
+<translation id="4275397969489577657">Habilitar registro de emisión de eventos</translation>
 <translation id="4287520460805643128">No hay más artículos.</translation>
 <translation id="4289540628985791613">Descripción general</translation>
 <translation id="4300318234632215983">Indica la URL de un enlace</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{punto y coma}other{# puntos y comas}}</translation>
 <translation id="5411891038905756502">No hay ningún punto de salto anterior.</translation>
 <translation id="5417034931411865818">Haz clic en el elemento que aparece debajo de la tecla de enrutamiento $1</translation>
+<translation id="5435274640623994081">Habilitar registro de audiconos</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{menor que}other{# signos menor que}}</translation>
 <translation id="5444587279251314700">(activa)</translation>
 <translation id="5446809554778706307">Ningún elemento seleccionado. Pulsa Ctrl + T para abrir una pestaña nueva.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">No hay ninguna lista anterior.</translation>
 <translation id="8651481478098336970">silenciar volumen</translation>
 <translation id="8653646212587894517">Muestra la lista de enlaces</translation>
+<translation id="8656888282555543604">Habilitar registro de braille</translation>
 <translation id="8664519043722036194">segundos</translation>
 <translation id="867187640362843212">Título 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{barra vertical}other{# barras verticales}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb
index 9e5f47d..e885893 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Hindi wastong input</translation>
 <translation id="1080471004309605942">Dulo ng italic</translation>
 <translation id="1082209053475788238">Walang nakaraang heading sa antas 6.</translation>
+<translation id="1087788677726983142">Itago ang mga filter ng stream ng event</translation>
 <translation id="1088219014394087294">Walang mga heading.</translation>
 <translation id="1106741348836243114">I-on o i-off ang feedback ng tunog (mga earcon).</translation>
 <translation id="1108651818222110612">subti</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Nagpapahayag ng kumpletong paglalarawan sa kasalukuyang posisyon</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{greater than}one{# greater than sign}other{# na greater than sign}}</translation>
 <translation id="1653266918374749391">Nakaraang heading sa antas 3</translation>
+<translation id="1657616855184033958">Ipakita ang mga filter ng stream ng event</translation>
 <translation id="1659072772017912254">Hindi nilagyan ng check</translation>
 <translation id="1669290819662866522">linggo</translation>
 <translation id="1674262202423278359">Nabigasyon sa ChromeVox</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Gamitin ang mga opsyon sa ibaba upang i-customize ang ChromeVox. Agad na magkakabisa ang mga pagbabago.</translation>
 <translation id="4271220233568730077">Susunod na math</translation>
 <translation id="4271521365602459209">Wala nang mga resulta.</translation>
+<translation id="4275397969489577657">I-enable ang pag-log ng stream ng event</translation>
 <translation id="4287520460805643128">Walang susunod na artikulo.</translation>
 <translation id="4289540628985791613">Pangkalahatang-ideya</translation>
 <translation id="4300318234632215983">Ianunsyo ang URL sa likod ng isang link</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{semicolon}one{# semicolon}other{# na semicolon}}</translation>
 <translation id="5411891038905756502">Walang nakaraang jump point.</translation>
 <translation id="5417034931411865818">I-click ang item sa ilalim ng routing key $1</translation>
+<translation id="5435274640623994081">I-enable ang pag-log ng earcon</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{less than}one{# less than sign}other{# na less than sign}}</translation>
 <translation id="5444587279251314700">(aktibo)</translation>
 <translation id="5446809554778706307">Walang focus. Pindutin ang Ctrl+T upang magbukas ng bagong tab.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">Walang nakaraang listahan.</translation>
 <translation id="8651481478098336970">i-mute ang volume</translation>
 <translation id="8653646212587894517">Ipakita ang listahan ng mga link</translation>
+<translation id="8656888282555543604">I-enable ang pag-log ng braille</translation>
 <translation id="8664519043722036194">mga segundo</translation>
 <translation id="867187640362843212">Heading 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{pipe}one{# vertical pipe}other{# na vertical pipe}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb
index d434d8b4..9cf57c4e 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Données incorrectes</translation>
 <translation id="1080471004309605942">Fin du texte en italique</translation>
 <translation id="1082209053475788238">Aucun titre de niveau 6 précédent</translation>
+<translation id="1087788677726983142">Masquer les filtres de flux d'événements</translation>
 <translation id="1088219014394087294">Aucun titre</translation>
 <translation id="1106741348836243114">Activer ou désactiver les commentaires audio (icônes audio)</translation>
 <translation id="1108651818222110612">sous-titre</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Énonce la description complète de la position actuelle.</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{signe supérieur à}one{# signe supérieur à}other{# signes supérieur à}}</translation>
 <translation id="1653266918374749391">En-tête précédent de niveau 3</translation>
+<translation id="1657616855184033958">Afficher les filtres de flux d'événements</translation>
 <translation id="1659072772017912254">Non cochée</translation>
 <translation id="1669290819662866522">semaine</translation>
 <translation id="1674262202423278359">Navigation ChromeVox</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Utilisez les options ci-dessous pour personnaliser ChromeVox. Les modifications prendront effet immédiatement.</translation>
 <translation id="4271220233568730077">Objet Math suivant</translation>
 <translation id="4271521365602459209">Aucun autre résultat</translation>
+<translation id="4275397969489577657">Activer l'enregistrement des flux d'événements dans le journal</translation>
 <translation id="4287520460805643128">Aucun article suivant</translation>
 <translation id="4289540628985791613">Présentation</translation>
 <translation id="4300318234632215983">Énoncer l'URL du lien</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{point-virgule}one{# point-virgule}other{# points-virgules}}</translation>
 <translation id="5411891038905756502">Aucun renvoi précédent</translation>
 <translation id="5417034931411865818">Cliquez sur l'élément sous la clé de routage $1</translation>
+<translation id="5435274640623994081">Activer l'enregistrement des icônes sonores dans le journal</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{signe inférieur à}one{# signe inférieur à}other{# signes inférieur à}}</translation>
 <translation id="5444587279251314700">(activé)</translation>
 <translation id="5446809554778706307">Aucune sélection. Appuyez sur Ctrl+T pour ouvrir un nouvel onglet.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">Aucune liste précédente</translation>
 <translation id="8651481478098336970">couper le son</translation>
 <translation id="8653646212587894517">Afficher la liste des liens</translation>
+<translation id="8656888282555543604">Activer l'enregistrement des caractères braille dans le journal</translation>
 <translation id="8664519043722036194">secondes</translation>
 <translation id="867187640362843212">Titre 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{barre verticale}one{# barre verticale}other{# barres verticales}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb
index c9c570e..1c6c771 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Unos nije valjan</translation>
 <translation id="1080471004309605942">Kraj kurziva</translation>
 <translation id="1082209053475788238">Nema prethodnog naslova razine 6.</translation>
+<translation id="1087788677726983142">Sakrij filtre streama događaja</translation>
 <translation id="1088219014394087294">Nema naslova.</translation>
 <translation id="1106741348836243114">Uključuje ili isključuje zvučne povratne informacije (zvučne ikone).</translation>
 <translation id="1108651818222110612">titl</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Najavljuje potpun opis trenutačnog položaja</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{znak "veće od"}one{# znak "veće od"}few{# znaka "veće od"}other{# znakova "veće od"}}</translation>
 <translation id="1653266918374749391">Prethodni naslov razine 3</translation>
+<translation id="1657616855184033958">Prikaži filtre streama događaja</translation>
 <translation id="1659072772017912254">Nije označen</translation>
 <translation id="1669290819662866522">tjedan</translation>
 <translation id="1674262202423278359">Navigacija ChromeVoxa</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Za prilagodbu ChromeVoxa upotrijebite opcije u nastavku. Promjene odmah stupaju na snagu.</translation>
 <translation id="4271220233568730077">Sljedeći matematički izraz</translation>
 <translation id="4271521365602459209">Nema više rezultata.</translation>
+<translation id="4275397969489577657">Omogući zapisnik streama događaja</translation>
 <translation id="4287520460805643128">Nema sljedećeg članka.</translation>
 <translation id="4289540628985791613">Pregled</translation>
 <translation id="4300318234632215983">Izgovaranje URL-a veze</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{točka sa zarezom}one{# točka sa zarezom}few{# točke sa zarezom}other{# točaka sa zarezom}}</translation>
 <translation id="5411891038905756502">Nema prethodne točke skoka.</translation>
 <translation id="5417034931411865818">Klikanje stavke ispod tipke za usmjeravanje $1</translation>
+<translation id="5435274640623994081">Omogući zapisnik zvučnih ikona</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{znak "manje od"}one{# znak "manje od"}few{# znaka "manje od"}other{# znakova "manje od"}}</translation>
 <translation id="5444587279251314700">(aktivno)</translation>
 <translation id="5446809554778706307">Nema fokusa. Pritisnite Ctrl + T za otvaranje nove kartice.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">Nema prethodnog popisa.</translation>
 <translation id="8651481478098336970">isključivanje zvuka</translation>
 <translation id="8653646212587894517">Prikaz popisa veza</translation>
+<translation id="8656888282555543604">Omogući zapisnik brajice</translation>
 <translation id="8664519043722036194">sekunde</translation>
 <translation id="867187640362843212">Naslov 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{okomita crta}one{# okomita crta}few{# okomite crte}other{# okomitih crta}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_id.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_id.xtb
index 4167296..bc212ce 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_id.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_id.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Input tidak valid</translation>
 <translation id="1080471004309605942">Akhir teks berformat miring</translation>
 <translation id="1082209053475788238">Tidak ada judul tingkat 6 sebelumnya.</translation>
+<translation id="1087788677726983142">Sembunyikan filter streaming acara</translation>
 <translation id="1088219014394087294">Tanpa judul.</translation>
 <translation id="1106741348836243114">Mengaktifkan atau menonaktifkan masukan suara (earcons).</translation>
 <translation id="1108651818222110612">subti</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Mengumumkan deskripsi lengkap dari posisi saat ini</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{lebih dari}other{# tanda lebih dari}}</translation>
 <translation id="1653266918374749391">Judul tingkat 3 sebelumnya</translation>
+<translation id="1657616855184033958">Tampilkan filter streaming acara</translation>
 <translation id="1659072772017912254">Tidak dicentang</translation>
 <translation id="1669290819662866522">week</translation>
 <translation id="1674262202423278359">Navigasi ChromeVox</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Gunakan opsi di bawah untuk menyesuaikan ChromeVox. Perubahan segera diterapkan.</translation>
 <translation id="4271220233568730077">Matematika berikutnya</translation>
 <translation id="4271521365602459209">Tidak ada hasil lainnya.</translation>
+<translation id="4275397969489577657">Aktifkan pencatatan streaming acara</translation>
 <translation id="4287520460805643128">Tidak ada artikel berikutnya.</translation>
 <translation id="4289540628985791613">Ikhtisar</translation>
 <translation id="4300318234632215983">Mengumumkan URL di belakang link</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{titik koma}other{# titik koma}}</translation>
 <translation id="5411891038905756502">Tidak ada titik lompatan sebelumnya.</translation>
 <translation id="5417034931411865818">Klik item di bawah tombol perutean $1</translation>
+<translation id="5435274640623994081">Aktifkan pencatatan earcon</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{kurang dari}other{# tanda kurang dari}}</translation>
 <translation id="5444587279251314700">(aktif)</translation>
 <translation id="5446809554778706307">Tidak ada fokus. Tekan Ctrl+T untuk membuka tab baru.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">Tidak ada daftar sebelumnya.</translation>
 <translation id="8651481478098336970">membisukan volume</translation>
 <translation id="8653646212587894517">Menampilkan daftar link</translation>
+<translation id="8656888282555543604">Aktifkan pencatatan braille</translation>
 <translation id="8664519043722036194">detik</translation>
 <translation id="867187640362843212">Judul 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{pipa}other{# pipa vertikal}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb
index 4327ee10..4de51bd 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Dati non validi</translation>
 <translation id="1080471004309605942">Fine del testo corsivo</translation>
 <translation id="1082209053475788238">Nessuna intestazione livello 6 precedente.</translation>
+<translation id="1087788677726983142">Nascondi i filtri della sequenza di eventi</translation>
 <translation id="1088219014394087294">Nessuna intestazione.</translation>
 <translation id="1106741348836243114">Attiva o disattiva feedback audio (icone audio).</translation>
 <translation id="1108651818222110612">sottotitolo</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Fornisce una descrizione completa della posizione corrente</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{simbolo di maggiore}other{# simboli di maggiore}}</translation>
 <translation id="1653266918374749391">Intestazione livello 3 precedente</translation>
+<translation id="1657616855184033958">Mostra i filtri della sequenza di eventi</translation>
 <translation id="1659072772017912254">Non selezionato</translation>
 <translation id="1669290819662866522">settimana</translation>
 <translation id="1674262202423278359">Navigazione in ChromeVox</translation>
@@ -411,6 +413,7 @@
 <translation id="4255943572433203166">Utilizza le opzioni sotto per personalizzare ChromeVox. Le modifiche hanno effetto immediato.</translation>
 <translation id="4271220233568730077">Espressione matematica successiva</translation>
 <translation id="4271521365602459209">Nessun altro risultato.</translation>
+<translation id="4275397969489577657">Abilita la registrazione della sequenza di eventi</translation>
 <translation id="4287520460805643128">Nessun articolo successivo.</translation>
 <translation id="4289540628985791613">Panoramica</translation>
 <translation id="4300318234632215983">Pronuncia l'URL di un link</translation>
@@ -549,6 +552,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{punto e virgola}other{# punti e virgola}}</translation>
 <translation id="5411891038905756502">Nessun passaggio precedente.</translation>
 <translation id="5417034931411865818">Fai clic sull'elemento sotto la chiave di routing $1</translation>
+<translation id="5435274640623994081">Abilita registrazione earcon</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{simbolo di minore}other{# simboli di minore}}</translation>
 <translation id="5444587279251314700">(attiva)</translation>
 <translation id="5446809554778706307">Nessuno stato attivo. Premi CTRL + T per aprire una nuova scheda.</translation>
@@ -898,6 +902,7 @@
 <translation id="8650576015643545550">Nessun elenco precedente.</translation>
 <translation id="8651481478098336970">azzera volume</translation>
 <translation id="8653646212587894517">Mostra elenco link</translation>
+<translation id="8656888282555543604">Abilita registrazione braille</translation>
 <translation id="8664519043722036194">secondi</translation>
 <translation id="867187640362843212">Intestazione 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{barra verticale}other{# barre verticali}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb
index 9711e059..3e1e329 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">無効な入力値</translation>
 <translation id="1080471004309605942">斜体の末尾</translation>
 <translation id="1082209053475788238">前のレベル 6 見出しはありません。</translation>
+<translation id="1087788677726983142">イベント ストリーム フィルタを非表示にする</translation>
 <translation id="1088219014394087294">見出しがありません。</translation>
 <translation id="1106741348836243114">音声フィードバック(イアコン)をオンまたはオフにします。</translation>
 <translation id="1108651818222110612">副題</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">現在位置の詳細な説明を読み上げます</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{大なり}other{# 個の大なり記号}}</translation>
 <translation id="1653266918374749391">前のレベル 3 見出し</translation>
+<translation id="1657616855184033958">イベント ストリーム フィルタを表示する</translation>
 <translation id="1659072772017912254">オフ</translation>
 <translation id="1669290819662866522">週間</translation>
 <translation id="1674262202423278359">ChromeVox ナビゲーション</translation>
@@ -412,6 +414,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>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{セミコロン}other{# 個のセミコロン}}</translation>
 <translation id="5411891038905756502">前のジャンプ ポイントはありません。</translation>
 <translation id="5417034931411865818">ルーティング キー $1 の下のアイテムをクリックします</translation>
+<translation id="5435274640623994081">イアコンのログを有効にする</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{小なり}other{# 個の小なり記号}}</translation>
 <translation id="5444587279251314700">(有効)</translation>
 <translation id="5446809554778706307">対象がありません。Ctrl+T キーで新しいタブを開きます。</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">前のリストはありません。</translation>
 <translation id="8651481478098336970">音量をミュート</translation>
 <translation id="8653646212587894517">リンク リストを表示</translation>
+<translation id="8656888282555543604">点字のログを有効にする</translation>
 <translation id="8664519043722036194">秒</translation>
 <translation id="867187640362843212">見出し 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{パイプ}other{# 個のパイプ}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb
index 09a93f2..8682858 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb
@@ -490,6 +490,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 +502,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">ಹಿಂದಿನ ಹಂತದ 4 ಶಿರೋನಾಮೆ</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb
index 05c5d5d3..d9f2317 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Input tidak sah</translation>
 <translation id="1080471004309605942">Huruf condong tamat</translation>
 <translation id="1082209053475788238">Tiada tajuk tahap 6 terdahulu.</translation>
+<translation id="1087788677726983142">Sembunyikan penapis strim acara</translation>
 <translation id="1088219014394087294">Tiada tajuk.</translation>
 <translation id="1106741348836243114">Hidupkan atau matikan maklum balas bunyi (earcon).</translation>
 <translation id="1108651818222110612">sari kata</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Mengumumkan huraian lengkap tentang kedudukan semasa</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{lebih besar daripada}other{# tanda lebih besar daripada}}</translation>
 <translation id="1653266918374749391">Tajuk tahap 3 sebelumnya</translation>
+<translation id="1657616855184033958">Tunjukkan penapis strim acara</translation>
 <translation id="1659072772017912254">Tidak ditandai</translation>
 <translation id="1669290819662866522">minggu</translation>
 <translation id="1674262202423278359">Navigasi ChromeVox</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Gunakan pilihan di bawah untuk menyesuaikan ChromeVox. Perubahan berkuat kuasa serta-merta.</translation>
 <translation id="4271220233568730077">Matematik seterusnya</translation>
 <translation id="4271521365602459209">Tiada lagi hasil carian.</translation>
+<translation id="4275397969489577657">Dayakan pengelogan strim acara</translation>
 <translation id="4287520460805643128">Tiada artikel seterusnya.</translation>
 <translation id="4289540628985791613">Gambaran keseluruhan</translation>
 <translation id="4300318234632215983">Umumkan URL di sebalik pautan</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{koma bertitik}other{# koma bertitik}}</translation>
 <translation id="5411891038905756502">Tiada titik langkau terdahulu.</translation>
 <translation id="5417034931411865818">Klik item di bawah kekunci penghalaan $1</translation>
+<translation id="5435274640623994081">Dayakan pengelogan ikon audio</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{kurang daripada}other{# tanda kurang daripada}}</translation>
 <translation id="5444587279251314700">(aktif)</translation>
 <translation id="5446809554778706307">Tiada fokus. Tekan Ctrl+T untuk membuka tab baharu.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">Tiada senarai terdahulu.</translation>
 <translation id="8651481478098336970">redam kelantangan</translation>
 <translation id="8653646212587894517">Paparkan senarai pautan</translation>
+<translation id="8656888282555543604">Dayakan pengelogan braille</translation>
 <translation id="8664519043722036194">saat</translation>
 <translation id="867187640362843212">Tajuk 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{paip}other{# paip menegak}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb
index cd727ee..c6b7af8 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Ongeldige invoer.</translation>
 <translation id="1080471004309605942">Einde van cursieve tekst</translation>
 <translation id="1082209053475788238">Geen vorige kop voor niveau 6.</translation>
+<translation id="1087788677726983142">Filters voor gebeurtenisstream verbergen</translation>
 <translation id="1088219014394087294">Geen koppen.</translation>
 <translation id="1106741348836243114">Geluidsfeedback (earcons) in- of uitschakelen.</translation>
 <translation id="1108651818222110612">ondertitel</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Geeft een volledige beschrijving van de huidige positie</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{groter-dan-teken}other{# groter-dan-tekens}}</translation>
 <translation id="1653266918374749391">Vorige kop voor niveau 3</translation>
+<translation id="1657616855184033958">Filters voor gebeurtenisstream weergeven</translation>
 <translation id="1659072772017912254">Niet aangevinkt</translation>
 <translation id="1669290819662866522">week</translation>
 <translation id="1674262202423278359">ChromeVox-navigatie</translation>
@@ -411,6 +413,7 @@
 <translation id="4255943572433203166">Gebruik de opties hieronder om ChromeVox aan te passen. Wijzigingen worden onmiddellijk van kracht.</translation>
 <translation id="4271220233568730077">Volgende wiskundige uitdrukking</translation>
 <translation id="4271521365602459209">Geen andere resultaten.</translation>
+<translation id="4275397969489577657">Filters voor gebeurtenisstream inschakelen</translation>
 <translation id="4287520460805643128">Geen volgend artikel.</translation>
 <translation id="4289540628985791613">Overzicht</translation>
 <translation id="4300318234632215983">De URL achter een link melden</translation>
@@ -549,6 +552,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{puntkomma}other{# puntkomma's}}</translation>
 <translation id="5411891038905756502">Geen vorig punt om naar te springen.</translation>
 <translation id="5417034931411865818">Klik op het item onder de routeringstoets $1</translation>
+<translation id="5435274640623994081">Earconregistratie inschakelen</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{kleiner-dan-teken}other{# kleiner-dan-tekens}}</translation>
 <translation id="5444587279251314700">(actief)</translation>
 <translation id="5446809554778706307">Geen focus. Druk op Ctrl+T om een nieuw tabblad te openen.</translation>
@@ -897,6 +901,7 @@
 <translation id="8650576015643545550">Geen vorige lijst.</translation>
 <translation id="8651481478098336970">volume dempen</translation>
 <translation id="8653646212587894517">Lijst met links weergeven</translation>
+<translation id="8656888282555543604">Brailleregistratie inschakelen</translation>
 <translation id="8664519043722036194">seconden</translation>
 <translation id="867187640362843212">Kop 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{pijpteken}other{# verticale pijptekens}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb
index baf7942..1b0cc15 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Entrada inválida</translation>
 <translation id="1080471004309605942">Fim do itálico</translation>
 <translation id="1082209053475788238">Nenhum cabeçalho anterior de nível 6.</translation>
+<translation id="1087788677726983142">Ocultar filtros de stream de eventos</translation>
 <translation id="1088219014394087294">Nenhum cabeçalho.</translation>
 <translation id="1106741348836243114">Ativa ou desativa o feedback sonoro (earcons).</translation>
 <translation id="1108651818222110612">subtítulo</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Anuncia uma descrição completa da posição atual</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{sinal maior que}one{# sinais de maior que}other{# sinais de maior que}}</translation>
 <translation id="1653266918374749391">Cabeçalho de nível 3 anterior</translation>
+<translation id="1657616855184033958">Mostrar filtros de stream de eventos</translation>
 <translation id="1659072772017912254">Não marcado</translation>
 <translation id="1669290819662866522">week</translation>
 <translation id="1674262202423278359">Navegação no ChromeVox</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Use as opções abaixo para personalizar o ChromeVox. As alterações têm efeito imediato.</translation>
 <translation id="4271220233568730077">Próxima expressão matemática</translation>
 <translation id="4271521365602459209">Não há mais resultados.</translation>
+<translation id="4275397969489577657">Ativar registro de stream de eventos</translation>
 <translation id="4287520460805643128">Não há artigos a seguir.</translation>
 <translation id="4289540628985791613">Visão geral</translation>
 <translation id="4300318234632215983">Anunciar o URL associado a um link</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{sinal de ponto-e-vírgula}one{# sinais de ponto-e-vírgula}other{# sinais de ponto-e-vírgula}}</translation>
 <translation id="5411891038905756502">No previous jump point.</translation>
 <translation id="5417034931411865818">Clique no item abaixo da chave de roteamento $1</translation>
+<translation id="5435274640623994081">Ativar registro de ícone auditivo</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{sinal de menor que}one{# sinais de menor que}other{# sinais de menor que}}</translation>
 <translation id="5444587279251314700">(ativo)</translation>
 <translation id="5446809554778706307">Nenhum foco. Pressione Ctrl+T para abrir uma nova guia.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">Nenhuma lista anterior.</translation>
 <translation id="8651481478098336970">desativar o som</translation>
 <translation id="8653646212587894517">Mostrar lista de links</translation>
+<translation id="8656888282555543604">Ativar registro de braille</translation>
 <translation id="8664519043722036194">segundos</translation>
 <translation id="867187640362843212">Cabeçalho 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{barra vertical}one{# barras verticais}other{# barras verticais}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb
index c5f0ef08..da2074509 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Entrada inválida</translation>
 <translation id="1080471004309605942">Fim de itálico</translation>
 <translation id="1082209053475788238">Não existe nenhum título de nível 6 anterior.</translation>
+<translation id="1087788677726983142">Ocultar filtros de transmissões de eventos</translation>
 <translation id="1088219014394087294">Não existe nenhum título.</translation>
 <translation id="1106741348836243114">Ativar ou desativar respostas sonoras (ícones sonoros).</translation>
 <translation id="1108651818222110612">legenda</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Anuncia uma descrição completa da posição atual</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{maior que}other{# sinais de maior que}}</translation>
 <translation id="1653266918374749391">Título de nível 3 anterior</translation>
+<translation id="1657616855184033958">Mostrar filtros de transmissões de eventos</translation>
 <translation id="1659072772017912254">Não marcado</translation>
 <translation id="1669290819662866522">semana</translation>
 <translation id="1674262202423278359">Navegação do ChromeVox</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Utilize as opções abaixo para personalizar o ChromeVox. As alterações são aplicadas de imediato.</translation>
 <translation id="4271220233568730077">Matemática seguinte</translation>
 <translation id="4271521365602459209">Sem resultados novos.</translation>
+<translation id="4275397969489577657">Ativar o registo de transmissões de eventos</translation>
 <translation id="4287520460805643128">Não existe nenhum artigo seguinte.</translation>
 <translation id="4289540628985791613">Vista geral</translation>
 <translation id="4300318234632215983">Anunciar o URL por detrás de um link</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{ponto e vírgula}other{# pontos e vírgulas}}</translation>
 <translation id="5411891038905756502">Não existe nenhum ponto de avanço anterior.</translation>
 <translation id="5417034931411865818">Clique no item sob a chave de encaminhamento $1</translation>
+<translation id="5435274640623994081">Ativar o registo do ícone sonoro</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{menor que}other{# sinais de menor que}}</translation>
 <translation id="5444587279251314700">(ativo)</translation>
 <translation id="5446809554778706307">Sem foco. Prima Ctrl + T para abrir um novo separador.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">Não existe nenhuma lista anterior.</translation>
 <translation id="8651481478098336970">desativar o som</translation>
 <translation id="8653646212587894517">Mostrar lista de links</translation>
+<translation id="8656888282555543604">Ativar o registo de braille</translation>
 <translation id="8664519043722036194">segundos</translation>
 <translation id="867187640362843212">Título 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{traço vertical}other{# traços verticais}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb
index bf6e70c..4656e95 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.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">Включить или отключить озвучивание (звуковые сигналы)</translation>
 <translation id="1108651818222110612">подзаголовок</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Озвучить полное описание текущего элемента</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{знак "больше"}one{# знак "больше"}few{# знака "больше"}many{# знаков "больше"}other{# greater than signs}}</translation>
 <translation id="1653266918374749391">Перейти к предыдущему заголовку третьего уровня</translation>
+<translation id="1657616855184033958">Показать фильтры потока событий</translation>
 <translation id="1659072772017912254">Не проверено</translation>
 <translation id="1669290819662866522">week</translation>
 <translation id="1674262202423278359">Навигация ChromeVox</translation>
@@ -412,6 +414,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>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{точка с запятой}one{# точка с запятой}few{# точки с запятой}many{# точек с запятой}other{# semicolons}}</translation>
 <translation id="5411891038905756502">Предыдущей точки перехода нет.</translation>
 <translation id="5417034931411865818">Нажать на элемент под ключом маршрутизации $1</translation>
+<translation id="5435274640623994081">Включить ведение журнала для звуковых сигналов</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{знак "меньше"}one{# знак "меньше"}few{# знака "меньше"}many{# знаков "меньше"}other{# less than signs}}</translation>
 <translation id="5444587279251314700">(активна)</translation>
 <translation id="5446809554778706307">Нет аудиофокуса. Нажмите Ctrl + T, чтобы открыть новую вкладку.</translation>
@@ -899,6 +903,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{# вертикальная черта}few{# вертикальные черты}many{# вертикальных черт}other{# vertical pipes}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb
index f0e1c3762..a6117bb 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb
@@ -490,7 +490,7 @@
 <translation id="4973762002207131920">Пребачено је на <ph name="KEY" />.</translation>
 <translation id="4975416682604111799">милисекунде</translation>
 <translation id="49787999531187221">ChromeVox је сада неактиван.</translation>
-<translation id="4979263087381759787">Опције за програмера</translation>
+<translation id="4979263087381759787">Опције за програмере</translation>
 <translation id="4979404613699303341">Претходно дугме</translation>
 <translation id="4982773647088557172"><ph name="VALUE" />, <ph name="NAME" />, оквир листе</translation>
 <translation id="4983588134362688868">Прелазак на врх странице</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sv.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sv.xtb
index a495d85..2a87ed14 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sv.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sv.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Ogiltiga indata</translation>
 <translation id="1080471004309605942">Kursiv slutar</translation>
 <translation id="1082209053475788238">Det finns ingen föregående rubrik på nivå 6.</translation>
+<translation id="1087788677726983142">Göm filter för händelseflöden</translation>
 <translation id="1088219014394087294">Det finns inga rubriker.</translation>
 <translation id="1106741348836243114">Aktivera eller inaktivera ljudsignaler (ljudikoner).</translation>
 <translation id="1108651818222110612">underrubrik</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Ger en komplett beskrivning av den aktuella positionen</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{större än-tecken}other{# större än-tecken}}</translation>
 <translation id="1653266918374749391">Föregående rubrik på nivå 3</translation>
+<translation id="1657616855184033958">Visa filter för händelseflöden</translation>
 <translation id="1659072772017912254">Inte markerat</translation>
 <translation id="1669290819662866522">vecka</translation>
 <translation id="1674262202423278359">Navigering med ChromeVox</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Anpassa ChromeVox med alternativen nedan. Ändringarna börjar gälla direkt.</translation>
 <translation id="4271220233568730077">Nästa matematiska uttryck</translation>
 <translation id="4271521365602459209">Inga fler resultat.</translation>
+<translation id="4275397969489577657">Aktivera loggning av händelseflöden</translation>
 <translation id="4287520460805643128">Det finns inga fler artiklar.</translation>
 <translation id="4289540628985791613">Översikt</translation>
 <translation id="4300318234632215983">Läs upp webbadressen bakom en länk</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{semikolon}other{# semikolon}}</translation>
 <translation id="5411891038905756502">Det finns inga tidigare punkter att hoppa till.</translation>
 <translation id="5417034931411865818">Klicka på objektet under markörhämtaren $1</translation>
+<translation id="5435274640623994081">Aktivera loggning av ljudikoner</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{mindre än-tecken}other{# mindre än-tecken}}</translation>
 <translation id="5444587279251314700">(aktiv)</translation>
 <translation id="5446809554778706307">Inget objekt är i fokus. Öppna en ny flik med Ctrl+T.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">Det finns ingen föregående lista.</translation>
 <translation id="8651481478098336970">ljud av</translation>
 <translation id="8653646212587894517">Visa länklistan</translation>
+<translation id="8656888282555543604">Aktivera loggning av punktskrift</translation>
 <translation id="8664519043722036194">sekunder</translation>
 <translation id="867187640362843212">Rubrik 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{lodstreck}other{# lodstreck}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb
index eeff264..f1d4d37 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">อินพุตไม่ถูกต้อง</translation>
 <translation id="1080471004309605942">สิ้นสุดส่วนที่เป็นตัวเอียง</translation>
 <translation id="1082209053475788238">ไม่มีส่วนหัวระดับ 6 ก่อนหน้า</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{เครื่องหมายมากกว่า}other{# เครื่องหมายมากกว่า}}</translation>
 <translation id="1653266918374749391">ส่วนหัวระดับ 3 ก่อนหน้า</translation>
+<translation id="1657616855184033958">แสดงตัวกรองสตรีมเหตุการณ์</translation>
 <translation id="1659072772017912254">ไม่ได้เลือก</translation>
 <translation id="1669290819662866522">สัปดาห์</translation>
 <translation id="1674262202423278359">การนำทางของ ChromeVox</translation>
@@ -411,6 +413,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>
@@ -549,6 +552,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{เครื่องหมายอัฒภาค}other{# เครื่องหมายอัฒภาค}}</translation>
 <translation id="5411891038905756502">ไม่มีจุดสำหรับข้ามก่อนหน้า</translation>
 <translation id="5417034931411865818">คลิกรายการใต้แป้นกำหนดเส้นทาง $1</translation>
+<translation id="5435274640623994081">เปิดใช้การบันทึกเอียร์คอน</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{เครื่องหมายน้อยกว่า}other{# เครื่องหมายน้อยกว่า}}</translation>
 <translation id="5444587279251314700">(ใช้งานอยู่)</translation>
 <translation id="5446809554778706307">โฟกัสไม่ได้ กด Ctrl+T เพื่อเปิดแท็บใหม่</translation>
@@ -898,6 +902,7 @@
 <translation id="8650576015643545550">ไม่มีรายการก่อนหน้า</translation>
 <translation id="8651481478098336970">ปิดเสียง</translation>
 <translation id="8653646212587894517">แสดงรายการลิงก์</translation>
+<translation id="8656888282555543604">เปิดใช้การบันทึกอักษรเบรลล์</translation>
 <translation id="8664519043722036194">วินาที</translation>
 <translation id="867187640362843212">ส่วนหัวระดับ 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{เครื่องหมายขีดตั้ง}other{# เครื่องหมายขีดตั้ง}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb
index a78bdaa..4bdabe5 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Geçersiz giriş</translation>
 <translation id="1080471004309605942">İtalik metin sonu</translation>
 <translation id="1082209053475788238">Önceki 6. düzey başlık yok.</translation>
+<translation id="1087788677726983142">Etkinlik akış filtrelerini gizle</translation>
 <translation id="1088219014394087294">Başlık yok.</translation>
 <translation id="1106741348836243114">Sesli geri bildirimi (ses sinyalleri) aç veya kapat.</translation>
 <translation id="1108651818222110612">alt başlık</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Mevcut konumun tam açıklamasını söyler</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{büyüktür işareti}other{# büyüktür işareti}}</translation>
 <translation id="1653266918374749391">Önceki 3. düzey başlık</translation>
+<translation id="1657616855184033958">Etkinlik akış filtrelerini göster</translation>
 <translation id="1659072772017912254">İşaretli değil</translation>
 <translation id="1669290819662866522">week</translation>
 <translation id="1674262202423278359">ChromeVox Gezinme</translation>
@@ -411,6 +413,7 @@
 <translation id="4255943572433203166">ChromeVox'u özelleştirmek için aşağıdaki seçenekleri kullanın. Değişiklikler anında geçerli olur.</translation>
 <translation id="4271220233568730077">Sonraki matematik tuşu</translation>
 <translation id="4271521365602459209">Başka sonuç yok.</translation>
+<translation id="4275397969489577657">Etkinlik akış günlük kaydını etkinleştir</translation>
 <translation id="4287520460805643128">Sonraki makale yok.</translation>
 <translation id="4289540628985791613">Genel bakış</translation>
 <translation id="4300318234632215983">Bir bağlantının arkasındaki URL'yi söyle</translation>
@@ -549,6 +552,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{noktalı virgül}other{# noktalı virgül}}</translation>
 <translation id="5411891038905756502">Önceki atlama noktası yok.</translation>
 <translation id="5417034931411865818">$1 yönlendirme tuşunun altındaki öğeyi tıklayın</translation>
+<translation id="5435274640623994081">Ses sinyali günlük kaydını etkinleştir</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{küçüktür işareti}other{# küçüktür işareti}}</translation>
 <translation id="5444587279251314700">(etkin)</translation>
 <translation id="5446809554778706307">Odak yok. Yeni bir sekme açmak için Ctrl+T tuşlarına basın.</translation>
@@ -898,6 +902,7 @@
 <translation id="8650576015643545550">Önceki liste yok.</translation>
 <translation id="8651481478098336970">sesi kapat</translation>
 <translation id="8653646212587894517">Bağlantı listesini göster</translation>
+<translation id="8656888282555543604">Braille günlük kaydını etkinleştir</translation>
 <translation id="8664519043722036194">saniye</translation>
 <translation id="867187640362843212">Başlık 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{dikey çizgi işareti}other{# dikey çizgi işareti}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb
index 984bde3..1a35e7af 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Неправильно введені дані</translation>
 <translation id="1080471004309605942">Кінець тексту курсивом</translation>
 <translation id="1082209053475788238">Немає попереднього заголовка рівня 6.</translation>
+<translation id="1087788677726983142">Сховати фільтри потоку подій</translation>
 <translation id="1088219014394087294">Немає заголовків.</translation>
 <translation id="1106741348836243114">Увімкнути або вимкнути звуковий сигнал (звуковий ефект).</translation>
 <translation id="1108651818222110612">підзаголовок</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Повідомляє повний опис поточної позиції</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{знак "більше"}one{# знак "більше"}few{# знаки "більше"}many{# знаків "більше"}other{# greater than signs}}</translation>
 <translation id="1653266918374749391">Попередній заголовок рівня 3</translation>
+<translation id="1657616855184033958">Показати фільтри потоку подій</translation>
 <translation id="1659072772017912254">Без прапорця</translation>
 <translation id="1669290819662866522">тиждень</translation>
 <translation id="1674262202423278359">Навігація в ChromeVox</translation>
@@ -411,6 +413,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>
@@ -549,6 +552,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{крапка з комою}one{# крапка з комою}few{# крапки з комою}many{# крапок із комою}other{# semicolons}}</translation>
 <translation id="5411891038905756502">Немає попередньої точки переходу.</translation>
 <translation id="5417034931411865818">Натиснути елемент під клавішею напрямку $1</translation>
+<translation id="5435274640623994081">Увімкнути реєстрацію звукових ефектів</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{знак "менше"}one{# знак "менше"}few{# знаки "менше"}many{# знаків "менше"}other{# less than signs}}</translation>
 <translation id="5444587279251314700">(активна)</translation>
 <translation id="5446809554778706307">Елемент не вибрано. Натисніть Ctrl + T, щоб відкрити нову вкладку.</translation>
@@ -898,6 +902,7 @@
 <translation id="8650576015643545550">Немає попереднього списку.</translation>
 <translation id="8651481478098336970">вимкнути звук</translation>
 <translation id="8653646212587894517">Показати список посилань</translation>
+<translation id="8656888282555543604">Увімкнути реєстрацію шрифту Брайля</translation>
 <translation id="8664519043722036194">секунд</translation>
 <translation id="867187640362843212">Заголовок 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{вертикальна риска}one{# вертикальна риска}few{# вертикальні риски}many{# вертикальних рисок}other{# vertical pipes}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
index 9ae23422..a37159a 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">Nhập vào không hợp lệ</translation>
 <translation id="1080471004309605942">Cuối chữ in nghiêng</translation>
 <translation id="1082209053475788238">Không có tiêu đề cấp 6 trước nào.</translation>
+<translation id="1087788677726983142">Ẩn các bộ lọc luồng sự kiện</translation>
 <translation id="1088219014394087294">Không có tiêu đề nào.</translation>
 <translation id="1106741348836243114">Bật hoặc tắt phản hồi bằng âm thanh (kết nối tai nghe).</translation>
 <translation id="1108651818222110612">phụ đề</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">Thông báo mô tả đầy đủ của vị trí hiện tại</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{dấu lớn hơn}other{# dấu lớn hơn}}</translation>
 <translation id="1653266918374749391">Tiêu đề cấp 3 trước</translation>
+<translation id="1657616855184033958">Hiển thị các bộ lọc luồng sự kiện</translation>
 <translation id="1659072772017912254">Chưa chọn</translation>
 <translation id="1669290819662866522">tuần</translation>
 <translation id="1674262202423278359">Điều hướng ChromeVox</translation>
@@ -412,6 +414,7 @@
 <translation id="4255943572433203166">Sử dụng các tùy chọn bên dưới để tùy chỉnh ChromeVox. Các thay đổi sẽ có hiệu lực ngay lập tức.</translation>
 <translation id="4271220233568730077">Biểu thức toán tiếp theo</translation>
 <translation id="4271521365602459209">Không còn kết quả nào nữa.</translation>
+<translation id="4275397969489577657">Bật tùy chọn ghi nhật ký luồng sự kiện</translation>
 <translation id="4287520460805643128">Không có bài viết tiếp theo nào.</translation>
 <translation id="4289540628985791613">Tổng quan</translation>
 <translation id="4300318234632215983">Thông báo URL ở sau liên kết</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{dấu chấm phẩy}other{# dấu chấm phẩy}}</translation>
 <translation id="5411891038905756502">Không có điểm nhảy trước nào.</translation>
 <translation id="5417034931411865818">Nhấp vào mục bên dưới phím định tuyến $1</translation>
+<translation id="5435274640623994081">Bật tùy chọn ghi nhật ký âm báo</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{dấu nhỏ hơn}other{# dấu nhỏ hơn}}</translation>
 <translation id="5444587279251314700">(hiện hoạt)</translation>
 <translation id="5446809554778706307">Không có tiêu điểm. Hãy nhấn tổ hợp phím Ctrl+T để mở tab mới.</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">Không có danh sách trước nào.</translation>
 <translation id="8651481478098336970">tắt tiếng</translation>
 <translation id="8653646212587894517">Hiển thị danh sách liên kết</translation>
+<translation id="8656888282555543604">Bật tùy chọn ghi nhật ký chữ nổi</translation>
 <translation id="8664519043722036194">giây</translation>
 <translation id="867187640362843212">Tiêu đề 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{dấu sổ thẳng}other{# dấu sổ thẳng}}</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb
index 6ced38c..3660cc6 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb
@@ -489,6 +489,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>
@@ -500,6 +501,7 @@
 <translation id="5000760171916499057">无表单。</translation>
 <translation id="5005670136041063723">不存在其他类似元素。</translation>
 <translation id="501473567976723023">1月</translation>
+<translation id="5020651427400641814">启用语音登录功能</translation>
 <translation id="5041394372352067729">将盲文显示移动到页首</translation>
 <translation id="5042770794184672516">调大朗读音量</translation>
 <translation id="5050015258024679800">上一个4级标题</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb
index 9608093d..04433c4f 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb
@@ -16,6 +16,7 @@
 <translation id="1065552602950927991">輸入無效</translation>
 <translation id="1080471004309605942">斜體結尾</translation>
 <translation id="1082209053475788238">沒有上一個第 6 階標題。</translation>
+<translation id="1087788677726983142">隱藏活動訊息串篩選器</translation>
 <translation id="1088219014394087294">沒有標題。</translation>
 <translation id="1106741348836243114">開啟或關閉音效回饋 (聽覺標示)。</translation>
 <translation id="1108651818222110612">副標題</translation>
@@ -78,6 +79,7 @@
 <translation id="1618597272655350600">朗讀目前位置的完整說明</translation>
 <translation id="1639634871799530612">{COUNT,plural, =1{大於符號}other{# 個大於符號}}</translation>
 <translation id="1653266918374749391">上一個第 3 階標題</translation>
+<translation id="1657616855184033958">顯示活動訊息串篩選器</translation>
 <translation id="1659072772017912254">未勾選</translation>
 <translation id="1669290819662866522">週</translation>
 <translation id="1674262202423278359">ChromeVox 導覽</translation>
@@ -412,6 +414,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">朗讀連結的網址</translation>
@@ -550,6 +553,7 @@
 <translation id="5407530583102765689">{COUNT,plural, =1{分號}other{# 個分號}}</translation>
 <translation id="5411891038905756502">沒有上一個跳躍點。</translation>
 <translation id="5417034931411865818">按一下路由機碼 $1 下方的項目</translation>
+<translation id="5435274640623994081">啟用語音記錄功能</translation>
 <translation id="5436105723448703439">{COUNT,plural, =1{小於符號}other{# 個小於符號}}</translation>
 <translation id="5444587279251314700">(運作中)</translation>
 <translation id="5446809554778706307">沒有焦點。按下 Ctrl + T 鍵即可開啟新分頁。</translation>
@@ -899,6 +903,7 @@
 <translation id="8650576015643545550">沒有上一個清單。</translation>
 <translation id="8651481478098336970">靜音</translation>
 <translation id="8653646212587894517">顯示連結清單</translation>
+<translation id="8656888282555543604">啟用點字記錄功能</translation>
 <translation id="8664519043722036194">秒</translation>
 <translation id="867187640362843212">標題 5</translation>
 <translation id="8697111817566059991">{COUNT,plural, =1{直立線符號}other{# 個直立線符號}}</translation>
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 5a376a65..6beafdb 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
@@ -14,7 +14,7 @@
 <translation id="6017514345406065928">Verd</translation>
 <translation id="6475604559827479857">Color per destacar paraules:</translation>
 <translation id="6837853484260746864">Selecciona una veu:</translation>
-<translation id="7261612856573623172">Veu del sistema síntesi de veu</translation>
+<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="8324974933005349667">Personalitza la configuració de síntesi de veu</translation>
diff --git a/chrome/browser/resources/discards/discards.js b/chrome/browser/resources/discards/discards.js
index 66f58cd..f6b5503 100644
--- a/chrome/browser/resources/discards/discards.js
+++ b/chrome/browser/resources/discards/discards.js
@@ -217,11 +217,11 @@
    */
   function visibilityToString(visibility) {
     switch (visibility) {
-      case 0:
+      case mojom.LifecycleUnitVisibility.HIDDEN:
         return 'hidden';
-      case 1:
+      case mojom.LifecycleUnitVisibility.OCCLUDED:
         return 'occluded';
-      case 2:
+      case mojom.LifecycleUnitVisibility.VISIBLE:
         return 'visible';
     }
     assertNotReached('Unknown visibility: ' + visibility);
@@ -235,11 +235,11 @@
    */
   function loadingStateToString(loadingState) {
     switch (loadingState) {
-      case 0:
+      case mojom.LifecycleUnitLoadingState.UNLOADED:
         return 'unloaded';
-      case 1:
+      case mojom.LifecycleUnitLoadingState.LOADING:
         return 'loading';
-      case 2:
+      case mojom.LifecycleUnitLoadingState.LOADED:
         return 'loaded';
     }
     assertNotReached('Unknown loadingState: ' + loadingState);
@@ -248,7 +248,7 @@
   /**
    * Returns a string representation of a discard reason.
    * @param {mojom.LifecycleUnitDiscardReason} reason The discard reason.
-   * @param {string} A string representation of the discarding reason.
+   * @return {string} A string representation of the discarding reason.
    */
   function discardReasonToString(reason) {
     switch (reason) {
@@ -267,25 +267,40 @@
    * @param {mojom.LifecycleUnitState} state The lifecycle state.
    * @param {mojom.LifecycleUnitDiscardReason} reason The discard reason. This
    *     is only used if the state is discard related.
-   * @param {string} A string representation of the lifecycle state, augmented
+   * @param {int} visibility A value in LifecycleUnitVisibility.
+   * @param {boolean} hasFocus Whether or not the tab has input focus.
+   * @return {string} A string representation of the lifecycle state, augmented
    *     with the discard reason if appropriate.
    */
-  function lifecycleStateToString(state, reason) {
+  function lifecycleStateToString(state, reason, visibility, hasFocus) {
+    let pageLifecycleStateFromVisibilityAndFocus = function() {
+      switch (visibility) {
+        case mojom.LifecycleUnitVisibility.HIDDEN:
+        case mojom.LifecycleUnitVisibility.OCCLUDED:
+          // An occluded page is also considered hidden.
+          return 'hidden';
+        case mojom.LifecycleUnitVisibility.VISIBLE:
+          return hasFocus ? 'active' : 'passive';
+      }
+      assertNotReached('Unknown visibility: ' + visibility);
+    };
+
     switch (state) {
       case mojom.LifecycleUnitState.ACTIVE:
-        return 'active';
+        return pageLifecycleStateFromVisibilityAndFocus();
       case mojom.LifecycleUnitState.THROTTLED:
-        return 'throttled';
+        return pageLifecycleStateFromVisibilityAndFocus() + ' (throttled)';
       case mojom.LifecycleUnitState.PENDING_FREEZE:
-        return 'pending frozen';
+        return pageLifecycleStateFromVisibilityAndFocus() + ' (pending frozen)';
       case mojom.LifecycleUnitState.FROZEN:
         return 'frozen';
       case mojom.LifecycleUnitState.PENDING_DISCARD:
-        return 'pending discard (' + discardReasonToString(reason) + ')';
+        return pageLifecycleStateFromVisibilityAndFocus() +
+            ' (pending discard (' + discardReasonToString(reason) + '))';
       case mojom.LifecycleUnitState.DISCARDED:
         return 'discarded (' + discardReasonToString(reason) + ')';
       case mojom.LifecycleUnitState.PENDING_UNFREEZE:
-        return 'pending unfreeze';
+        return 'frozen (pending unfreeze)';
     }
     assertNotReached('Unknown lifecycle state: ' + state);
   }
@@ -401,7 +416,8 @@
     row.querySelector('.state-cell').textContent =
         (info.loadingState != mojom.LifecycleUnitLoadingState.UNLOADED ||
          info.discardCount > 0) ?
-        lifecycleStateToString(info.state, info.discardReason) :
+        lifecycleStateToString(
+            info.state, info.discardReason, info.visibility, info.hasFocus) :
         '';
     row.querySelector('.discard-count-cell').textContent =
         info.discardCount.toString();
@@ -437,7 +453,9 @@
     let discardUrgentEnabled = false;
     if (info.loadingState == mojom.LifecycleUnitLoadingState.UNLOADED) {
       loadEnabled = true;
-    } else if (info.visibility == 0) {
+    } else if (
+        info.visibility == mojom.LifecycleUnitVisibility.HIDDEN ||
+        info.visibility == mojom.LifecycleUnitVisibility.OCCLUDED) {
       // Only tabs that aren't visible can be frozen or discarded for now.
       freezeEnabled = true;
       discardEnabled = true;
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.js b/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.js
index 39a6c75..67c11b3 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.js
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.js
@@ -82,7 +82,7 @@
 
   /** @private */
   handleForgetDeviceClick_: function() {
-    // TODO(jordynass): Have this navigate to the route for dialog once it is
+    // TODO(khorimoto): Have this navigate to the route for dialog once it is
     // built.
   },
 
diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc
index 70a8a42..ccefbe99 100644
--- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc
@@ -150,8 +150,7 @@
       if (nav_event->source_url.is_empty() &&
           nav_event->source_main_frame_url.is_empty()) {
         NavigationEvent* retargeting_nav_event = FindRetargetingNavigationEvent(
-            nav_event->last_updated, nav_event->original_request_url,
-            nav_event->target_tab_id);
+            nav_event->last_updated, nav_event->target_tab_id);
         if (!retargeting_nav_event)
           return nav_event;
         // If there is a server redirection immediately after retargeting, we
@@ -172,11 +171,7 @@
 
 NavigationEvent* NavigationEventList::FindRetargetingNavigationEvent(
     const base::Time& last_event_timestamp,
-    const GURL& target_url,
     SessionID target_tab_id) {
-  if (target_url.is_empty())
-    return nullptr;
-
   // Since navigation events are recorded in chronological order, we traverse
   // the vector in reverse order to get the latest match.
   for (auto rit = navigation_events_.rbegin(); rit != navigation_events_.rend();
@@ -189,8 +184,7 @@
 
     // In addition to url and tab_id checking, we need to compare the
     // source_tab_id and target_tab_id to make sure it is a retargeting event.
-    if (nav_event->original_request_url == target_url &&
-        nav_event->target_tab_id == target_tab_id &&
+    if (nav_event->target_tab_id == target_tab_id &&
         nav_event->source_tab_id != nav_event->target_tab_id) {
       return nav_event;
     }
diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h
index a542d21..d38e96b 100644
--- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h
+++ b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h
@@ -85,11 +85,10 @@
                                        const GURL& target_main_frame_url,
                                        SessionID target_tab_id);
 
-  // Finds the most recent retargeting NavigationEvent that satisfies
-  // |target_url|, and |target_tab_id|.
+  // Finds the most recent retargeting NavigationEvent that satisfies the
+  // |target_tab_id|.
   NavigationEvent* FindRetargetingNavigationEvent(
       const base::Time& last_event_timestamp,
-      const GURL& target_url,
       SessionID target_tab_id);
 
   void RecordNavigationEvent(std::unique_ptr<NavigationEvent> nav_event);
diff --git a/chrome/browser/ssl/cert_verifier_browser_test.cc b/chrome/browser/ssl/cert_verifier_browser_test.cc
index 031138b0..b47891c 100644
--- a/chrome/browser/ssl/cert_verifier_browser_test.cc
+++ b/chrome/browser/ssl/cert_verifier_browser_test.cc
@@ -4,115 +4,35 @@
 
 #include "chrome/browser/ssl/cert_verifier_browser_test.h"
 
-#include "base/command_line.h"
 #include "chrome/browser/profiles/profile_io_data.h"
-#include "content/public/common/content_switches.h"
-#include "content/public/common/service_manager_connection.h"
-#include "content/public/common/service_names.mojom.h"
-#include "content/public/test/browser_test_utils.h"
-#include "content/public/test/network_service_test_helper.h"
-#include "mojo/public/cpp/bindings/sync_call_restrictions.h"
-#include "services/network/network_context.h"
-#include "services/network/public/cpp/features.h"
-#include "services/service_manager/public/cpp/connector.h"
 
-CertVerifierBrowserTest::CertVerifier::CertVerifier(
-    net::MockCertVerifier* verifier)
-    : verifier_(verifier) {}
+ChromeMockCertVerifier::ChromeMockCertVerifier() = default;
 
-CertVerifierBrowserTest::CertVerifier::~CertVerifier() = default;
+ChromeMockCertVerifier::~ChromeMockCertVerifier() = default;
 
-void CertVerifierBrowserTest::CertVerifier::set_default_result(
-    int default_result) {
-  verifier_->set_default_result(default_result);
-
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService) ||
-      content::IsNetworkServiceRunningInProcess()) {
-    return;
-  }
-
-  EnsureNetworkServiceTestInitialized();
-  mojo::ScopedAllowSyncCallForTesting allow_sync_call;
-  network_service_test_->MockCertVerifierSetDefaultResult(default_result);
+void ChromeMockCertVerifier::SetUpInProcessBrowserTestFixture() {
+  IOThread::SetCertVerifierForTesting(mock_cert_verifier_internal());
+  ProfileIOData::SetCertVerifierForTesting(mock_cert_verifier_internal());
 }
 
-void CertVerifierBrowserTest::CertVerifier::AddResultForCert(
-    scoped_refptr<net::X509Certificate> cert,
-    const net::CertVerifyResult& verify_result,
-    int rv) {
-  AddResultForCertAndHost(cert, "*", verify_result, rv);
+void ChromeMockCertVerifier::TearDownInProcessBrowserTestFixture() {
+  IOThread::SetCertVerifierForTesting(nullptr);
+  ProfileIOData::SetCertVerifierForTesting(nullptr);
 }
 
-void CertVerifierBrowserTest::CertVerifier::AddResultForCertAndHost(
-    scoped_refptr<net::X509Certificate> cert,
-    const std::string& host_pattern,
-    const net::CertVerifyResult& verify_result,
-    int rv) {
-  verifier_->AddResultForCertAndHost(cert, host_pattern, verify_result, rv);
+CertVerifierBrowserTest::CertVerifierBrowserTest() = default;
 
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService) ||
-      content::IsNetworkServiceRunningInProcess()) {
-    return;
-  }
-
-  EnsureNetworkServiceTestInitialized();
-  mojo::ScopedAllowSyncCallForTesting allow_sync_call;
-  network_service_test_->MockCertVerifierAddResultForCertAndHost(
-      cert, host_pattern, verify_result, rv);
-}
-
-void CertVerifierBrowserTest::CertVerifier::
-    EnsureNetworkServiceTestInitialized() {
-  if (network_service_test_)
-    return;
-
-  content::ServiceManagerConnection::GetForProcess()
-      ->GetConnector()
-      ->BindInterface(content::mojom::kNetworkServiceName,
-                      &network_service_test_);
-}
-
-CertVerifierBrowserTest::CertVerifierBrowserTest()
-    : InProcessBrowserTest(),
-      mock_cert_verifier_(new net::MockCertVerifier()),
-      cert_verifier_(mock_cert_verifier_.get()) {}
-
-CertVerifierBrowserTest::~CertVerifierBrowserTest() {}
+CertVerifierBrowserTest::~CertVerifierBrowserTest() = default;
 
 void CertVerifierBrowserTest::SetUpCommandLine(
     base::CommandLine* command_line) {
-  // Check here instead of the constructor since some tests may set the feature
-  // flag in their constructor.
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService) ||
-      content::IsNetworkServiceRunningInProcess()) {
-    return;
-  }
-
-  // Enable the MockCertVerifier in the network process via a switch. This is
-  // because it's too early to call the service manager at this point (it's not
-  // created yet), and by the time we can call the service manager in
-  // SetUpOnMainThread the main profile has already been created.
-  command_line->AppendSwitch(switches::kUseMockCertVerifierForTesting);
+  mock_cert_verifier_.SetUpCommandLine(command_line);
 }
 
 void CertVerifierBrowserTest::SetUpInProcessBrowserTestFixture() {
-  IOThread::SetCertVerifierForTesting(mock_cert_verifier_.get());
-  ProfileIOData::SetCertVerifierForTesting(mock_cert_verifier_.get());
-
-  if (content::IsNetworkServiceRunningInProcess()) {
-    network::NetworkContext::SetCertVerifierForTesting(
-        mock_cert_verifier_.get());
-  }
+  mock_cert_verifier_.SetUpInProcessBrowserTestFixture();
 }
 
 void CertVerifierBrowserTest::TearDownInProcessBrowserTestFixture() {
-  IOThread::SetCertVerifierForTesting(nullptr);
-  ProfileIOData::SetCertVerifierForTesting(nullptr);
-  if (content::IsNetworkServiceRunningInProcess())
-    network::NetworkContext::SetCertVerifierForTesting(nullptr);
-}
-
-CertVerifierBrowserTest::CertVerifier*
-CertVerifierBrowserTest::mock_cert_verifier() {
-  return &cert_verifier_;
+  mock_cert_verifier_.TearDownInProcessBrowserTestFixture();
 }
diff --git a/chrome/browser/ssl/cert_verifier_browser_test.h b/chrome/browser/ssl/cert_verifier_browser_test.h
index 984ec02d..d30270c0 100644
--- a/chrome/browser/ssl/cert_verifier_browser_test.h
+++ b/chrome/browser/ssl/cert_verifier_browser_test.h
@@ -5,15 +5,21 @@
 #ifndef CHROME_BROWSER_SSL_CERT_VERIFIER_BROWSER_TEST_H_
 #define CHROME_BROWSER_SSL_CERT_VERIFIER_BROWSER_TEST_H_
 
-#include <memory>
-
 #include "chrome/test/base/in_process_browser_test.h"
-#include "net/cert/mock_cert_verifier.h"
-#include "services/network/public/mojom/network_service_test.mojom.h"
+#include "content/public/test/content_mock_cert_verifier.h"
 
-namespace net {
-class MockCertVerifier;
-}  // namespace net
+// Helper class for use by tests that already derive from
+// InProcessBrowserTest so can't use CertVerifierBrowserTest.
+class ChromeMockCertVerifier : public content::ContentMockCertVerifier {
+ public:
+  ChromeMockCertVerifier();
+  ~ChromeMockCertVerifier() override;
+  void SetUpInProcessBrowserTestFixture() override;
+  void TearDownInProcessBrowserTestFixture() override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ChromeMockCertVerifier);
+};
 
 // CertVerifierBrowserTest allows tests to force certificate
 // verification results for requests made with any profile's main
@@ -30,40 +36,14 @@
   void SetUpInProcessBrowserTestFixture() override;
   void TearDownInProcessBrowserTestFixture() override;
 
-  // Has the same methods as net::MockCertVerifier and updates the network
-  // service as well if it's in use. See the documentation of the net class
-  // for documentation on the methods.
-  // Once all requests use the NetworkContext even when network service is not
-  // enabled, we can stop also updating net::MockCertVerifier here and always
-  // go through the NetworkServiceTest mojo interface.
-  class CertVerifier {
-   public:
-    explicit CertVerifier(net::MockCertVerifier* verifier);
-    ~CertVerifier();
-    void set_default_result(int default_result);
-    void AddResultForCert(scoped_refptr<net::X509Certificate> cert,
-                          const net::CertVerifyResult& verify_result,
-                          int rv);
-    void AddResultForCertAndHost(scoped_refptr<net::X509Certificate> cert,
-                                 const std::string& host_pattern,
-                                 const net::CertVerifyResult& verify_result,
-                                 int rv);
-
-   private:
-    void EnsureNetworkServiceTestInitialized();
-
-    net::MockCertVerifier* verifier_;
-    network::mojom::NetworkServiceTestPtr network_service_test_;
-  };
-
-  // Returns a pointer to the MockCertVerifier used by all profiles in
-  // this test.
-  CertVerifier* mock_cert_verifier();
+  content::ContentMockCertVerifier::CertVerifier* mock_cert_verifier() {
+    return mock_cert_verifier_.mock_cert_verifier();
+  }
 
  private:
-  std::unique_ptr<net::MockCertVerifier> mock_cert_verifier_;
+  ChromeMockCertVerifier mock_cert_verifier_;
 
-  CertVerifier cert_verifier_;
+  DISALLOW_COPY_AND_ASSIGN(CertVerifierBrowserTest);
 };
 
 #endif  // CHROME_BROWSER_SSL_CERT_VERIFIER_BROWSER_TEST_H_
diff --git a/chrome/browser/subresource_filter/ruleset_browsertest.cc b/chrome/browser/subresource_filter/ruleset_browsertest.cc
new file mode 100644
index 0000000..b80fadcb
--- /dev/null
+++ b/chrome/browser/subresource_filter/ruleset_browsertest.cc
@@ -0,0 +1,196 @@
+// 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/subresource_filter/subresource_filter_browser_test_harness.h"
+
+#include "base/bind.h"
+#include "base/run_loop.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/test/base/testing_browser_process.h"
+#include "components/subresource_filter/content/browser/async_document_subresource_filter.h"
+#include "components/subresource_filter/content/browser/async_document_subresource_filter_test_utils.h"
+#include "components/subresource_filter/content/browser/content_ruleset_service.h"
+#include "components/subresource_filter/core/browser/ruleset_service.h"
+#include "components/subresource_filter/core/common/common_features.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace subresource_filter {
+
+namespace {
+
+void OpenAndPublishRuleset(ContentRulesetService* content_ruleset_service,
+                           const base::FilePath& path) {
+  base::File index_file;
+  base::RunLoop open_loop;
+  auto open_callback = base::BindRepeating(
+      [](base::OnceClosure quit_closure, base::File* out, base::File result) {
+        *out = std::move(result);
+        std::move(quit_closure).Run();
+      },
+      open_loop.QuitClosure(), &index_file);
+  IndexedRulesetVersion version =
+      content_ruleset_service->GetMostRecentlyIndexedVersion();
+  content_ruleset_service->TryOpenAndSetRulesetFile(path, version.checksum,
+                                                    std::move(open_callback));
+  open_loop.Run();
+  ASSERT_TRUE(index_file.IsValid());
+  content_ruleset_service->PublishNewRulesetVersion(std::move(index_file));
+}
+
+RulesetVerificationStatus GetRulesetVerification() {
+  ContentRulesetService* service =
+      g_browser_process->subresource_filter_ruleset_service();
+  VerifiedRulesetDealer::Handle* dealer_handle = service->ruleset_dealer();
+
+  auto callback_method = [](base::OnceClosure quit_closure,
+                            RulesetVerificationStatus* status,
+                            VerifiedRulesetDealer* verified_dealer) {
+    *status = verified_dealer->status();
+    std::move(quit_closure).Run();
+  };
+
+  RulesetVerificationStatus status;
+  base::RunLoop run_loop;
+  auto callback =
+      base::BindRepeating(callback_method, run_loop.QuitClosure(), &status);
+
+  dealer_handle->GetDealerAsync(callback);
+  run_loop.Run();
+  return status;
+}
+
+}  // namespace
+
+IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest,
+                       RulesetVerified_Activation) {
+  ASSERT_NO_FATAL_FAILURE(
+      SetRulesetToDisallowURLsWithPathSuffix("included_script.js"));
+  ContentRulesetService* service =
+      g_browser_process->subresource_filter_ruleset_service();
+  ASSERT_TRUE(service->ruleset_dealer());
+  auto ruleset_handle =
+      std::make_unique<VerifiedRuleset::Handle>(service->ruleset_dealer());
+  AsyncDocumentSubresourceFilter::InitializationParams params(
+      GURL("https://example.com/"), ActivationLevel::ENABLED, false);
+
+  testing::TestActivationStateCallbackReceiver receiver;
+  AsyncDocumentSubresourceFilter filter(ruleset_handle.get(), std::move(params),
+                                        receiver.GetCallback());
+  receiver.WaitForActivationDecision();
+  receiver.ExpectReceivedOnce(ActivationState(ActivationLevel::ENABLED));
+}
+
+// TODO(ericrobinson): Add a test using a PRE_ phase that corrupts the ruleset
+// on disk to test something closer to an actual execution path for checksum.
+
+IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, NoRuleset_NoActivation) {
+  // Do not set the ruleset, which results in an invalid ruleset.
+  ContentRulesetService* service =
+      g_browser_process->subresource_filter_ruleset_service();
+  ASSERT_TRUE(service->ruleset_dealer());
+  auto ruleset_handle =
+      std::make_unique<VerifiedRuleset::Handle>(service->ruleset_dealer());
+  AsyncDocumentSubresourceFilter::InitializationParams params(
+      GURL("https://example.com/"), ActivationLevel::ENABLED, false);
+
+  testing::TestActivationStateCallbackReceiver receiver;
+  AsyncDocumentSubresourceFilter filter(ruleset_handle.get(), std::move(params),
+                                        receiver.GetCallback());
+  receiver.WaitForActivationDecision();
+  receiver.ExpectReceivedOnce(ActivationState(ActivationLevel::DISABLED));
+}
+
+IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, InvalidRuleset_Checksum) {
+  const char kTestRulesetSuffix[] = "foo";
+  const int kNumberOfRules = 500;
+  TestRulesetCreator ruleset_creator;
+  TestRulesetPair test_ruleset_pair;
+  ASSERT_NO_FATAL_FAILURE(
+      ruleset_creator.CreateRulesetToDisallowURLsWithManySuffixes(
+          kTestRulesetSuffix, kNumberOfRules, &test_ruleset_pair));
+  ContentRulesetService* service =
+      g_browser_process->subresource_filter_ruleset_service();
+
+  // Publish the good ruleset.
+  TestRulesetPublisher publisher;
+  publisher.SetRuleset(test_ruleset_pair.unindexed);
+
+  // Now corrupt it by flipping one entry.  This can only be detected
+  // via the checksum, and not the Flatbuffer Verifier.  This was determined
+  // at random by flipping elements until this test failed, then adding
+  // the checksum code and ensuring it passed.
+  testing::TestRuleset::CorruptByFilling(test_ruleset_pair.indexed, 28250,
+                                         28251, 32);
+  OpenAndPublishRuleset(service, test_ruleset_pair.indexed.path);
+  ASSERT_TRUE(service->ruleset_dealer());
+
+  auto ruleset_handle =
+      std::make_unique<VerifiedRuleset::Handle>(service->ruleset_dealer());
+  AsyncDocumentSubresourceFilter::InitializationParams params(
+      GURL("https://example.com/"), ActivationLevel::ENABLED, false);
+
+  testing::TestActivationStateCallbackReceiver receiver;
+  AsyncDocumentSubresourceFilter filter(ruleset_handle.get(), std::move(params),
+                                        receiver.GetCallback());
+  receiver.WaitForActivationDecision();
+  receiver.ExpectReceivedOnce(ActivationState(ActivationLevel::DISABLED));
+  RulesetVerificationStatus dealer_status = GetRulesetVerification();
+  EXPECT_EQ(RulesetVerificationStatus::kCorrupt, dealer_status);
+}
+
+IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest,
+                       InvalidRuleset_NoActivation) {
+  const char kTestRulesetSuffix[] = "foo";
+  const int kNumberOfRules = 500;
+  TestRulesetCreator ruleset_creator;
+  TestRulesetPair test_ruleset_pair;
+  ASSERT_NO_FATAL_FAILURE(
+      ruleset_creator.CreateRulesetToDisallowURLsWithManySuffixes(
+          kTestRulesetSuffix, kNumberOfRules, &test_ruleset_pair));
+  testing::TestRuleset::CorruptByTruncating(test_ruleset_pair.indexed, 123);
+
+  // Just publish the corrupt indexed file directly, to simulate it being
+  // corrupt on startup.
+  ContentRulesetService* service =
+      g_browser_process->subresource_filter_ruleset_service();
+  ASSERT_TRUE(service->ruleset_dealer());
+  OpenAndPublishRuleset(service, test_ruleset_pair.indexed.path);
+
+  auto ruleset_handle =
+      std::make_unique<VerifiedRuleset::Handle>(service->ruleset_dealer());
+  AsyncDocumentSubresourceFilter::InitializationParams params(
+      GURL("https://example.com/"), ActivationLevel::ENABLED, false);
+
+  testing::TestActivationStateCallbackReceiver receiver;
+  AsyncDocumentSubresourceFilter filter(ruleset_handle.get(), std::move(params),
+                                        receiver.GetCallback());
+  receiver.WaitForActivationDecision();
+  receiver.ExpectReceivedOnce(ActivationState(ActivationLevel::DISABLED));
+  RulesetVerificationStatus dealer_status = GetRulesetVerification();
+  EXPECT_EQ(RulesetVerificationStatus::kCorrupt, dealer_status);
+}
+
+IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, LazyRulesetValidation) {
+  // The ruleset shouldn't be validated until it's used, unless ad tagging is
+  // enabled.
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndDisableFeature(subresource_filter::kAdTagging);
+  SetRulesetToDisallowURLsWithPathSuffix("included_script.js");
+  RulesetVerificationStatus dealer_status = GetRulesetVerification();
+  EXPECT_EQ(RulesetVerificationStatus::kNotVerified, dealer_status);
+}
+
+IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest,
+                       AdsTaggingImmediateRulesetValidation) {
+  // When Ads Tagging is enabled, the ruleset should be validated as soon as
+  // it's published.
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(subresource_filter::kAdTagging);
+
+  SetRulesetToDisallowURLsWithPathSuffix("included_script.js");
+  RulesetVerificationStatus dealer_status = GetRulesetVerification();
+  EXPECT_EQ(RulesetVerificationStatus::kIntact, dealer_status);
+}
+
+}  // namespace subresource_filter
diff --git a/chrome/browser/subresource_filter/subresource_filter_browsertest.cc b/chrome/browser/subresource_filter/subresource_filter_browsertest.cc
index 4fda1352..1cd0302 100644
--- a/chrome/browser/subresource_filter/subresource_filter_browsertest.cc
+++ b/chrome/browser/subresource_filter/subresource_filter_browsertest.cc
@@ -136,45 +136,6 @@
   return url.ReplaceComponents(replacements);
 }
 
-void OpenAndPublishRuleset(ContentRulesetService* content_ruleset_service,
-                           const base::FilePath& path) {
-  base::File index_file;
-  base::RunLoop open_loop;
-  auto open_callback = base::BindRepeating(
-      [](base::OnceClosure quit_closure, base::File* out, base::File result) {
-        *out = std::move(result);
-        std::move(quit_closure).Run();
-      },
-      open_loop.QuitClosure(), &index_file);
-  content_ruleset_service->TryOpenAndSetRulesetFile(path,
-                                                    std::move(open_callback));
-  open_loop.Run();
-  ASSERT_TRUE(index_file.IsValid());
-  content_ruleset_service->PublishNewRulesetVersion(std::move(index_file));
-}
-
-RulesetVerificationStatus GetRulesetVerification() {
-  ContentRulesetService* service =
-      g_browser_process->subresource_filter_ruleset_service();
-  VerifiedRulesetDealer::Handle* dealer_handle = service->ruleset_dealer();
-
-  auto callback_method = [](base::OnceClosure quit_closure,
-                            RulesetVerificationStatus* status,
-                            VerifiedRulesetDealer* verified_dealer) {
-    *status = verified_dealer->status();
-    std::move(quit_closure).Run();
-  };
-
-  RulesetVerificationStatus status;
-  base::RunLoop run_loop;
-  auto callback =
-      base::BindRepeating(callback_method, run_loop.QuitClosure(), &status);
-
-  dealer_handle->GetDealerAsync(callback);
-  run_loop.Run();
-  return status;
-}
-
 }  // namespace
 
 // Tests -----------------------------------------------------------------------
@@ -621,96 +582,6 @@
 }
 
 IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest,
-                       RulesetVerified_Activation) {
-  ASSERT_NO_FATAL_FAILURE(
-      SetRulesetToDisallowURLsWithPathSuffix("included_script.js"));
-  ContentRulesetService* service =
-      g_browser_process->subresource_filter_ruleset_service();
-  ASSERT_TRUE(service->ruleset_dealer());
-  auto ruleset_handle =
-      std::make_unique<VerifiedRuleset::Handle>(service->ruleset_dealer());
-  AsyncDocumentSubresourceFilter::InitializationParams params(
-      GURL("https://example.com/"), ActivationLevel::ENABLED, false);
-
-  testing::TestActivationStateCallbackReceiver receiver;
-  AsyncDocumentSubresourceFilter filter(ruleset_handle.get(), std::move(params),
-                                        receiver.GetCallback());
-  receiver.WaitForActivationDecision();
-  receiver.ExpectReceivedOnce(ActivationState(ActivationLevel::ENABLED));
-}
-
-IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, NoRuleset_NoActivation) {
-  // Do not set the ruleset, which results in an invalid ruleset.
-  ContentRulesetService* service =
-      g_browser_process->subresource_filter_ruleset_service();
-  ASSERT_TRUE(service->ruleset_dealer());
-  auto ruleset_handle =
-      std::make_unique<VerifiedRuleset::Handle>(service->ruleset_dealer());
-  AsyncDocumentSubresourceFilter::InitializationParams params(
-      GURL("https://example.com/"), ActivationLevel::ENABLED, false);
-
-  testing::TestActivationStateCallbackReceiver receiver;
-  AsyncDocumentSubresourceFilter filter(ruleset_handle.get(), std::move(params),
-                                        receiver.GetCallback());
-  receiver.WaitForActivationDecision();
-  receiver.ExpectReceivedOnce(ActivationState(ActivationLevel::DISABLED));
-}
-
-IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest,
-                       InvalidRuleset_NoActivation) {
-  const char kTestRulesetSuffix[] = "foo";
-  const int kNumberOfRules = 500;
-  TestRulesetCreator ruleset_creator;
-  TestRulesetPair test_ruleset_pair;
-  ASSERT_NO_FATAL_FAILURE(
-      ruleset_creator.CreateRulesetToDisallowURLsWithManySuffixes(
-          kTestRulesetSuffix, kNumberOfRules, &test_ruleset_pair));
-  testing::TestRuleset::CorruptByTruncating(test_ruleset_pair.indexed, 123);
-
-  // Just publish the corrupt indexed file directly, to simulate it being
-  // corrupt on startup.
-  ContentRulesetService* service =
-      g_browser_process->subresource_filter_ruleset_service();
-  ASSERT_TRUE(service->ruleset_dealer());
-  OpenAndPublishRuleset(service, test_ruleset_pair.indexed.path);
-
-  auto ruleset_handle =
-      std::make_unique<VerifiedRuleset::Handle>(service->ruleset_dealer());
-  AsyncDocumentSubresourceFilter::InitializationParams params(
-      GURL("https://example.com/"), ActivationLevel::ENABLED, false);
-
-  testing::TestActivationStateCallbackReceiver receiver;
-  AsyncDocumentSubresourceFilter filter(ruleset_handle.get(), std::move(params),
-                                        receiver.GetCallback());
-  receiver.WaitForActivationDecision();
-  receiver.ExpectReceivedOnce(ActivationState(ActivationLevel::DISABLED));
-  RulesetVerificationStatus dealer_status = GetRulesetVerification();
-  EXPECT_EQ(RulesetVerificationStatus::kCorrupt, dealer_status);
-}
-
-IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, LazyRulesetValidation) {
-  // The ruleset shouldn't be validated until it's used, unless ad tagging is
-  // enabled.
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndDisableFeature(subresource_filter::kAdTagging);
-  SetRulesetToDisallowURLsWithPathSuffix("included_script.js");
-  RulesetVerificationStatus dealer_status = GetRulesetVerification();
-  EXPECT_EQ(RulesetVerificationStatus::kNotVerified, dealer_status);
-}
-
-IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest,
-                       AdsTaggingImmediateRulesetValidation) {
-  // When Ads Tagging is enabled, the ruleset should be validated as soon as
-  // it's published.
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(subresource_filter::kAdTagging);
-
-  SetRulesetToDisallowURLsWithPathSuffix("included_script.js");
-  RulesetVerificationStatus dealer_status = GetRulesetVerification();
-  EXPECT_EQ(RulesetVerificationStatus::kIntact, dealer_status);
-}
-
-IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest,
                        PRE_MainFrameActivationOnStartup) {
   SetRulesetToDisallowURLsWithPathSuffix("included_script.js");
 }
diff --git a/chrome/browser/subresource_filter/subresource_filter_test_harness.cc b/chrome/browser/subresource_filter/subresource_filter_test_harness.cc
index e4a777b0..966c256 100644
--- a/chrome/browser/subresource_filter/subresource_filter_test_harness.cc
+++ b/chrome/browser/subresource_filter/subresource_filter_test_harness.cc
@@ -94,7 +94,7 @@
   auto ruleset_service = std::make_unique<subresource_filter::RulesetService>(
       &pref_service_, base::ThreadTaskRunnerHandle::Get(),
       content_service.get(), ruleset_service_dir_.GetPath());
-  content_service->set_ruleset_service(std::move(ruleset_service));
+  content_service->SetAndInitializeRulesetService(std::move(ruleset_service));
   TestingBrowserProcess::GetGlobal()->SetRulesetService(
       std::move(content_service));
 
diff --git a/chrome/browser/translate/translate_manager_render_view_host_unittest.cc b/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
index d56e4c1..24ba4a2 100644
--- a/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
+++ b/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
@@ -474,7 +474,8 @@
     // Clears the translate script so it is fetched every time and sets the
     // expiration delay to a large value by default (in case it was zeroed in a
     // previous test).
-    TranslateService::InitializeForTesting();
+    TranslateService::InitializeForTesting(
+        network::mojom::ConnectionType::CONNECTION_WIFI);
     translate::TranslateDownloadManager* download_manager =
         translate::TranslateDownloadManager::GetInstance();
     download_manager->ClearTranslateScriptForTesting();
diff --git a/chrome/browser/translate/translate_service.cc b/chrome/browser/translate/translate_service.cc
index aa44331..14be91b 100644
--- a/chrome/browser/translate/translate_service.cc
+++ b/chrome/browser/translate/translate_service.cc
@@ -19,6 +19,7 @@
 #include "components/prefs/pref_service.h"
 #include "components/translate/core/browser/translate_download_manager.h"
 #include "components/translate/core/browser/translate_manager.h"
+#include "content/public/browser/network_service_instance.h"
 #include "content/public/common/url_constants.h"
 #include "url/gurl.h"
 
@@ -29,14 +30,15 @@
 
 namespace {
 // The singleton instance of TranslateService.
-TranslateService* g_translate_service = NULL;
+TranslateService* g_translate_service = nullptr;
 }
 
 TranslateService::TranslateService()
     : resource_request_allowed_notifier_(
           g_browser_process->local_state(),
-          switches::kDisableBackgroundNetworking) {
-  resource_request_allowed_notifier_.Init(this);
+          switches::kDisableBackgroundNetworking,
+          base::BindOnce(&content::GetNetworkConnectionTracker)) {
+  resource_request_allowed_notifier_.Init(this, true /* leaky */);
 }
 
 TranslateService::~TranslateService() {}
@@ -75,14 +77,18 @@
 }
 
 // static
-void TranslateService::InitializeForTesting() {
+void TranslateService::InitializeForTesting(
+    network::mojom::ConnectionType type) {
   if (!g_translate_service) {
     TranslateService::Initialize();
     translate::TranslateManager::SetIgnoreMissingKeyForTesting(true);
   } else {
     translate::TranslateDownloadManager::GetInstance()->ResetForTesting();
-    g_translate_service->OnResourceRequestsAllowed();
   }
+
+  g_translate_service->resource_request_allowed_notifier_
+      .SetConnectionTypeForTesting(type);
+  g_translate_service->OnResourceRequestsAllowed();
 }
 
 // static
diff --git a/chrome/browser/translate/translate_service.h b/chrome/browser/translate/translate_service.h
index 8b8901d2..8cd6b36 100644
--- a/chrome/browser/translate/translate_service.h
+++ b/chrome/browser/translate/translate_service.h
@@ -27,7 +27,7 @@
   // Initializes the TranslateService in a way that it can be initialized
   // multiple times in a unit test suite (once for each test). Should be paired
   // with ShutdownForTesting at the end of the test.
-  static void InitializeForTesting();
+  static void InitializeForTesting(network::mojom::ConnectionType type);
 
   // Shuts down the TranslateService at the end of a test in a way that the next
   // test can initialize and use the service.
diff --git a/chrome/browser/translate/translate_service_unittest.cc b/chrome/browser/translate/translate_service_unittest.cc
index 5e925d16..99c79b5 100644
--- a/chrome/browser/translate/translate_service_unittest.cc
+++ b/chrome/browser/translate/translate_service_unittest.cc
@@ -10,6 +10,7 @@
 #include "components/prefs/testing_pref_service.h"
 #include "components/translate/core/browser/translate_download_manager.h"
 #include "content/public/common/url_constants.h"
+#include "content/public/test/test_browser_thread_bundle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
@@ -49,7 +50,9 @@
 
 // Tests that download and history URLs are not translatable.
 TEST(TranslateServiceTest, DownloadsAndHistoryNotTranslated) {
-  TranslateService::InitializeForTesting();
+  content::TestBrowserThreadBundle thread_bundle;
+  TranslateService::InitializeForTesting(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_FALSE(
       TranslateService::IsTranslatableURL(GURL(chrome::kChromeUIDownloadsURL)));
   EXPECT_FALSE(
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index a1a942b..27ca8b6 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -3899,7 +3899,10 @@
   }
 
   if (is_win && is_chrome_branded) {
-    deps += [ "//components/nux:google_apps_feature" ]
+    deps += [
+      "//components/nux:email_feature",
+      "//components/nux:google_apps_feature",
+    ]
   }
 
   if (enable_plugins) {
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc
index 0c5213da..f892198 100644
--- a/chrome/browser/ui/browser_commands.cc
+++ b/chrome/browser/ui/browser_commands.cc
@@ -213,12 +213,12 @@
 #endif
 
 // Based on |disposition|, creates a new tab as necessary, and returns the
-// appropriate tab to navigate.  If that tab is the current tab, reverts the
+// appropriate tab to navigate.  If that tab is the |current_tab|, reverts the
 // location bar contents, since all browser-UI-triggered navigations should
-// revert any omnibox edits in the current tab.
-WebContents* GetTabAndRevertIfNecessary(Browser* browser,
-                                        WindowOpenDisposition disposition) {
-  WebContents* current_tab = browser->tab_strip_model()->GetActiveWebContents();
+// revert any omnibox edits in the |current_tab|.
+WebContents* GetTabAndRevertIfNecessaryHelper(Browser* browser,
+                                              WindowOpenDisposition disposition,
+                                              WebContents* current_tab) {
   switch (disposition) {
     case WindowOpenDisposition::NEW_FOREGROUND_TAB:
     case WindowOpenDisposition::NEW_BACKGROUND_TAB: {
@@ -250,27 +250,48 @@
   }
 }
 
+// Like the above, but auto-computes the current tab
+WebContents* GetTabAndRevertIfNecessary(Browser* browser,
+                                        WindowOpenDisposition disposition) {
+  WebContents* activate_tab =
+      browser->tab_strip_model()->GetActiveWebContents();
+  return GetTabAndRevertIfNecessaryHelper(browser, disposition, activate_tab);
+}
+
 void ReloadInternal(Browser* browser,
                     WindowOpenDisposition disposition,
                     bool bypass_cache) {
-  // As this is caused by a user action, give the focus to the page.
-  //
-  // Also notify RenderViewHostDelegate of the user gesture; this is
-  // normally done in Browser::Navigate, but a reload bypasses Navigate.
-  WebContents* new_tab = GetTabAndRevertIfNecessary(browser, disposition);
-  new_tab->NavigatedByUser();
-  if (!new_tab->FocusLocationBarByDefault())
-    new_tab->Focus();
+  const WebContents* active_contents =
+      browser->tab_strip_model()->GetActiveWebContents();
+  const auto& selected_indices =
+      browser->tab_strip_model()->selection_model().selected_indices();
+  for (int index : selected_indices) {
+    WebContents* selected_tab =
+        browser->tab_strip_model()->GetWebContentsAt(index);
+    WebContents* new_tab =
+        GetTabAndRevertIfNecessaryHelper(browser, disposition, selected_tab);
 
-  DevToolsWindow* devtools =
-      DevToolsWindow::GetInstanceForInspectedWebContents(new_tab);
-  if (devtools && devtools->ReloadInspectedWebContents(bypass_cache))
-    return;
+    // Notify RenderViewHostDelegate of the user gesture; this is
+    // normally done in Browser::Navigate, but a reload bypasses Navigate.
+    new_tab->NavigatedByUser();
 
-  new_tab->GetController().Reload(bypass_cache
-                                      ? content::ReloadType::BYPASSING_CACHE
-                                      : content::ReloadType::NORMAL,
-                                  true);
+    // If the selected_tab is the activated page, give the focus to it, as this
+    // is caused by a user action
+    if (selected_tab == active_contents &&
+        !new_tab->FocusLocationBarByDefault()) {
+      new_tab->Focus();
+    }
+
+    DevToolsWindow* devtools =
+        DevToolsWindow::GetInstanceForInspectedWebContents(new_tab);
+    constexpr content::ReloadType kBypassingType =
+        content::ReloadType::BYPASSING_CACHE;
+    constexpr content::ReloadType kNormalType = content::ReloadType::NORMAL;
+    if (!devtools || !devtools->ReloadInspectedWebContents(bypass_cache)) {
+      new_tab->GetController().Reload(
+          bypass_cache ? kBypassingType : kNormalType, true);
+    }
+  }
 }
 
 bool IsShowingWebContentsModalDialog(Browser* browser) {
diff --git a/chrome/browser/ui/browser_commands_browsertest.cc b/chrome/browser/ui/browser_commands_browsertest.cc
index 980562b8..27ff9ce 100644
--- a/chrome/browser/ui/browser_commands_browsertest.cc
+++ b/chrome/browser/ui/browser_commands_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ui/browser_commands.h"
 
+#include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -19,4 +20,48 @@
   BookmarkCurrentPageIgnoringExtensionOverrides(browser());
 }
 
+class ReloadObserver : public content::WebContentsObserver {
+ public:
+  ~ReloadObserver() override = default;
+
+  int load_count() const { return load_count_; }
+  void SetWebContents(content::WebContents* web_contents) {
+    Observe(web_contents);
+  }
+
+  // content::WebContentsObserver
+  void DidStartLoading() override { load_count_++; }
+
+ private:
+  int load_count_ = 0;
+};
+
+// Verify that all of selected tabs can be refreshed after executing
+// RELOAD command. https://crbug.com/862102
+IN_PROC_BROWSER_TEST_F(BrowserCommandsTest, ReloadSelectedTabs) {
+  constexpr char kUrl[] = "chrome://version/";
+  constexpr int kTabCount = 3;
+  std::vector<ReloadObserver> watcher_vec(kTabCount);
+  for (int i = 0; i < kTabCount; i++) {
+    AddTabAtIndexToBrowser(browser(), i + 1, GURL(kUrl),
+                           ui::PAGE_TRANSITION_LINK, false);
+    content::WebContents* tab =
+        browser()->tab_strip_model()->GetWebContentsAt(i + 1);
+    watcher_vec[i].SetWebContents(tab);
+  }
+
+  for (ReloadObserver& watcher : watcher_vec)
+    EXPECT_EQ(0, watcher.load_count());
+
+  // Select three tabs and trigger a reload command on all of them.
+  for (int i = 0; i < kTabCount; i++)
+    browser()->tab_strip_model()->AddTabAtToSelection(i + 1);
+  EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_RELOAD));
+
+  int load_sum = 0;
+  for (ReloadObserver& watcher : watcher_vec)
+    load_sum += watcher.load_count();
+  EXPECT_EQ(kTabCount, load_sum);
+}
+
 }  // namespace chrome
diff --git a/chrome/browser/ui/extensions/hosted_app_browsertest.cc b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
index c7fd49e..aa447481 100644
--- a/chrome/browser/ui/extensions/hosted_app_browsertest.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
@@ -62,7 +62,6 @@
 #include "extensions/common/extension_set.h"
 #include "extensions/test/test_extension_dir.h"
 #include "net/base/host_port_pair.h"
-#include "net/cert/mock_cert_verifier.h"
 #include "net/dns/mock_host_resolver.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "net/test/embedded_test_server/request_handler_util.h"
@@ -260,9 +259,7 @@
   HostedAppTest()
       : app_browser_(nullptr),
         app_(nullptr),
-        https_server_(net::EmbeddedTestServer::TYPE_HTTPS),
-        mock_cert_verifier_(),
-        cert_verifier_(&mock_cert_verifier_) {}
+        https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {}
   ~HostedAppTest() override {}
 
   void SetUp() override {
@@ -363,26 +360,26 @@
 
   void SetUpInProcessBrowserTestFixture() override {
     extensions::ExtensionBrowserTest::SetUpInProcessBrowserTestFixture();
-    ProfileIOData::SetCertVerifierForTesting(&mock_cert_verifier_);
+    cert_verifier_.SetUpInProcessBrowserTestFixture();
   }
 
   void TearDownInProcessBrowserTestFixture() override {
     extensions::ExtensionBrowserTest::TearDownInProcessBrowserTestFixture();
-    ProfileIOData::SetCertVerifierForTesting(nullptr);
+    cert_verifier_.TearDownInProcessBrowserTestFixture();
   }
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     extensions::ExtensionBrowserTest::SetUpCommandLine(command_line);
     // Browser will both run and display insecure content.
     command_line->AppendSwitch(switches::kAllowRunningInsecureContent);
-    command_line->AppendSwitch(switches::kUseMockCertVerifierForTesting);
+    cert_verifier_.SetUpCommandLine(command_line);
   }
 
   void SetUpOnMainThread() override {
     extensions::ExtensionBrowserTest::SetUpOnMainThread();
     host_resolver()->AddRule("*", "127.0.0.1");
     // By default, all SSL cert checks are valid. Can be overriden in tests.
-    cert_verifier_.set_default_result(net::OK);
+    cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
   }
 
   // Tests that performing |action| results in a new foreground tab
@@ -428,8 +425,8 @@
 
   net::EmbeddedTestServer* https_server() { return &https_server_; }
 
-  CertVerifierBrowserTest::CertVerifier* cert_verifier() {
-    return &cert_verifier_;
+  content::ContentMockCertVerifier::CertVerifier* cert_verifier() {
+    return cert_verifier_.mock_cert_verifier();
   }
 
  private:
@@ -447,11 +444,10 @@
   AppType app_type_;
 
   net::EmbeddedTestServer https_server_;
-  net::MockCertVerifier mock_cert_verifier_;
   // Similar to net::MockCertVerifier, but also updates the CertVerifier
   // used by the NetworkService. This is needed for when tests run with
   // the NetworkService enabled.
-  CertVerifierBrowserTest::CertVerifier cert_verifier_;
+  ChromeMockCertVerifier cert_verifier_;
 
   DISALLOW_COPY_AND_ASSIGN(HostedAppTest);
 };
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
index 909d7cd..8fcfaa3 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
@@ -699,8 +699,7 @@
     : public TopChromeMdParamTest<BrowserActionsBarBrowserTest> {
  public:
   HostedAppNonClientFrameViewAshTest()
-      : https_server_(net::EmbeddedTestServer::TYPE_HTTPS),
-        cert_verifier_(&mock_cert_verifier_) {}
+      : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {}
 
   ~HostedAppNonClientFrameViewAshTest() override = default;
 
@@ -717,10 +716,22 @@
   BrowserActionsContainer* browser_actions_container_ = nullptr;
   views::MenuButton* app_menu_button_ = nullptr;
 
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    TopChromeMdParamTest<BrowserActionsBarBrowserTest>::SetUpCommandLine(
+        command_line);
+    cert_verifier_.SetUpCommandLine(command_line);
+  }
+
   void SetUpInProcessBrowserTestFixture() override {
     TopChromeMdParamTest<
         BrowserActionsBarBrowserTest>::SetUpInProcessBrowserTestFixture();
-    ProfileIOData::SetCertVerifierForTesting(&mock_cert_verifier_);
+    cert_verifier_.SetUpInProcessBrowserTestFixture();
+  }
+
+  void TearDownInProcessBrowserTestFixture() override {
+    cert_verifier_.TearDownInProcessBrowserTestFixture();
+    TopChromeMdParamTest<
+        BrowserActionsBarBrowserTest>::TearDownInProcessBrowserTestFixture();
   }
 
   void SetUpOnMainThread() override {
@@ -731,7 +742,7 @@
 
     // Start secure local server.
     host_resolver()->AddRule("*", "127.0.0.1");
-    cert_verifier_.set_default_result(net::OK);
+    cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
     https_server_.AddDefaultHandlers(base::FilePath(kDocRoot));
     ASSERT_TRUE(https_server_.Start());
     ASSERT_TRUE(embedded_test_server()->Start());
@@ -816,8 +827,7 @@
 
   // For mocking a secure site.
   net::EmbeddedTestServer https_server_;
-  net::MockCertVerifier mock_cert_verifier_;
-  CertVerifierBrowserTest::CertVerifier cert_verifier_;
+  ChromeMockCertVerifier cert_verifier_;
 
   DISALLOW_COPY_AND_ASSIGN(HostedAppNonClientFrameViewAshTest);
 };
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc
index fdcc404..55a0414 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc
@@ -46,15 +46,13 @@
     : public extensions::ExtensionBrowserTest {
  public:
   ImmersiveModeControllerAshHostedAppBrowserTest()
-      : https_server_(net::EmbeddedTestServer::TYPE_HTTPS),
-        mock_cert_verifier_(),
-        cert_verifier_(&mock_cert_verifier_) {}
+      : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {}
 
   ~ImmersiveModeControllerAshHostedAppBrowserTest() override = default;
 
   // InProcessBrowserTest override:
   void SetUpOnMainThread() override {
-    cert_verifier_.set_default_result(net::OK);
+    cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
     https_server_.AddDefaultHandlers(
         base::FilePath(FILE_PATH_LITERAL("chrome/test/data")));
     ASSERT_TRUE(https_server_.Start());
@@ -89,17 +87,17 @@
 
   void SetUpInProcessBrowserTestFixture() override {
     extensions::ExtensionBrowserTest::SetUpInProcessBrowserTestFixture();
-    ProfileIOData::SetCertVerifierForTesting(&mock_cert_verifier_);
+    cert_verifier_.SetUpInProcessBrowserTestFixture();
   }
 
   void TearDownInProcessBrowserTestFixture() override {
-    ProfileIOData::SetCertVerifierForTesting(nullptr);
+    cert_verifier_.TearDownInProcessBrowserTestFixture();
     extensions::ExtensionBrowserTest::TearDownInProcessBrowserTestFixture();
   }
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     extensions::ExtensionBrowserTest::SetUpCommandLine(command_line);
-    command_line->AppendSwitch(switches::kUseMockCertVerifierForTesting);
+    cert_verifier_.SetUpCommandLine(command_line);
   }
 
   // Returns the bounds of |view| in widget coordinates.
@@ -153,11 +151,10 @@
   std::unique_ptr<ImmersiveRevealedLock> revealed_lock_;
 
   net::EmbeddedTestServer https_server_;
-  net::MockCertVerifier mock_cert_verifier_;
   // Similar to net::MockCertVerifier, but also updates the CertVerifier
   // used by the NetworkService. This is needed for when tests run with
   // the NetworkService enabled.
-  CertVerifierBrowserTest::CertVerifier cert_verifier_;
+  ChromeMockCertVerifier cert_verifier_;
 
   DISALLOW_COPY_AND_ASSIGN(ImmersiveModeControllerAshHostedAppBrowserTest);
 };
diff --git a/chrome/browser/ui/views/frame/taskbar_decorator_win.cc b/chrome/browser/ui/views/frame/taskbar_decorator_win.cc
index 0f2ccaa..98732ed 100644
--- a/chrome/browser/ui/views/frame/taskbar_decorator_win.cc
+++ b/chrome/browser/ui/views/frame/taskbar_decorator_win.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/profiles/profile_avatar_icon_util.h"
 #include "skia/ext/image_operations.h"
 #include "skia/ext/platform_canvas.h"
+#include "third_party/skia/include/core/SkRRect.h"
 #include "ui/gfx/icon_util.h"
 #include "ui/gfx/image/image.h"
 #include "ui/views/win/hwnd_util.h"
@@ -23,6 +24,10 @@
 
 namespace {
 
+constexpr int kOverlayIconSize = 16;
+static const SkRRect kOverlayIconClip =
+    SkRRect::MakeOval(SkRect::MakeWH(kOverlayIconSize, kOverlayIconSize));
+
 // Responsible for invoking TaskbarList::SetOverlayIcon(). The call to
 // TaskbarList::SetOverlayIcon() runs a nested run loop that proves
 // problematic when called on the UI thread. Additionally it seems the call may
@@ -40,10 +45,13 @@
   base::win::ScopedGDIObject<HICON> icon;
   if (bitmap.get()) {
     DCHECK_GE(bitmap.get()->width(), bitmap.get()->height());
-    // Maintain aspect ratio on resize.
-    const int kOverlayIconSize = 16;
-    int resized_height =
-        bitmap.get()->height() * kOverlayIconSize / bitmap.get()->width();
+
+    // Maintain aspect ratio on resize, but prefer more square.
+    // (We used to round down here, but rounding up produces nicer results.)
+    const int resized_height =
+        std::ceilf(kOverlayIconSize * (float{bitmap.get()->height()} /
+                                       float{bitmap.get()->width()}));
+
     DCHECK_GE(kOverlayIconSize, resized_height);
     // Since the target size is so small, we use our best resizer.
     SkBitmap sk_icon = skia::ImageOperations::Resize(
@@ -52,12 +60,21 @@
         kOverlayIconSize, resized_height);
 
     // Paint the resized icon onto a 16x16 canvas otherwise Windows will badly
-    // hammer it to 16x16.
+    // hammer it to 16x16. We'll use a circular clip to be consistent with the
+    // way profile icons are rendered in the profile switcher.
     SkBitmap offscreen_bitmap;
     offscreen_bitmap.allocN32Pixels(kOverlayIconSize, kOverlayIconSize);
     SkCanvas offscreen_canvas(offscreen_bitmap);
     offscreen_canvas.clear(SK_ColorTRANSPARENT);
-    offscreen_canvas.drawBitmap(sk_icon, 0, kOverlayIconSize - resized_height);
+    offscreen_canvas.clipRRect(kOverlayIconClip, true);
+
+    // Note: the original code used kOverlayIconSize - resized_height, but in
+    // order to center the icon in the circle clip area, we're going to center
+    // it in the paintable region instead, rounding up to the closest pixel to
+    // avoid smearing.
+    const int y_offset = std::ceilf((kOverlayIconSize - resized_height) / 2.0f);
+    offscreen_canvas.drawBitmap(sk_icon, 0, y_offset);
+
     icon = IconUtil::CreateHICONFromSkBitmap(offscreen_bitmap);
     if (!icon.is_valid())
       return;
diff --git a/chrome/browser/ui/views/payments/contact_info_editor_view_controller.cc b/chrome/browser/ui/views/payments/contact_info_editor_view_controller.cc
index 839849f9..bf44f0d 100644
--- a/chrome/browser/ui/views/payments/contact_info_editor_view_controller.cc
+++ b/chrome/browser/ui/views/payments/contact_info_editor_view_controller.cc
@@ -79,6 +79,7 @@
     autofill::ServerFieldType type) {
   if (!profile_to_edit_)
     return base::string16();
+  return GetValueForType(*profile_to_edit_, type);
 
   if (type == autofill::PHONE_HOME_WHOLE_NUMBER) {
     return autofill::i18n::GetFormattedPhoneNumberForDisplay(
@@ -150,10 +151,21 @@
   return true;
 }
 
+base::string16 ContactInfoEditorViewController::GetValueForType(
+    const autofill::AutofillProfile& profile,
+    autofill::ServerFieldType type) {
+  if (type == autofill::PHONE_HOME_WHOLE_NUMBER) {
+    return autofill::i18n::GetFormattedPhoneNumberForDisplay(
+        profile, state()->GetApplicationLocale());
+  }
+
+  return profile.GetInfo(type, state()->GetApplicationLocale());
+}
+
 ContactInfoEditorViewController::ContactInfoValidationDelegate::
     ContactInfoValidationDelegate(const EditorField& field,
                                   const std::string& locale,
-                                  EditorViewController* controller)
+                                  ContactInfoEditorViewController* controller)
     : field_(field), controller_(controller), locale_(locale) {}
 
 ContactInfoEditorViewController::ContactInfoValidationDelegate::
@@ -194,6 +206,17 @@
                       base::string16* error_message) {
   bool is_valid = true;
 
+  // Show errors from merchant's retry() call.
+  autofill::AutofillProfile* invalid_contact_profile =
+      controller_->state()->invalid_contact_profile();
+  if (invalid_contact_profile && error_message &&
+      textfield->text() ==
+          controller_->GetValueForType(*invalid_contact_profile, field_.type)) {
+    *error_message = controller_->spec()->GetPayerError(field_.type);
+    if (!error_message->empty())
+      return false;
+  }
+
   if (textfield->text().empty()) {
     is_valid = false;
     if (error_message) {
diff --git a/chrome/browser/ui/views/payments/contact_info_editor_view_controller.h b/chrome/browser/ui/views/payments/contact_info_editor_view_controller.h
index 94c2fe3..1e8303c 100644
--- a/chrome/browser/ui/views/payments/contact_info_editor_view_controller.h
+++ b/chrome/browser/ui/views/payments/contact_info_editor_view_controller.h
@@ -56,6 +56,8 @@
   // |profile|.
   void PopulateProfile(autofill::AutofillProfile* profile);
   bool GetSheetId(DialogViewID* sheet_id) override;
+  base::string16 GetValueForType(const autofill::AutofillProfile& profile,
+                                 autofill::ServerFieldType type);
 
   autofill::AutofillProfile* profile_to_edit_;
 
@@ -69,7 +71,7 @@
    public:
     ContactInfoValidationDelegate(const EditorField& field,
                                   const std::string& locale,
-                                  EditorViewController* controller);
+                                  ContactInfoEditorViewController* controller);
     ~ContactInfoValidationDelegate() override;
 
     // ValidationDelegate:
@@ -90,7 +92,7 @@
 
     EditorField field_;
     // Outlives this class. Never null.
-    EditorViewController* controller_;
+    ContactInfoEditorViewController* controller_;
     const std::string& locale_;
   };
 };
diff --git a/chrome/browser/ui/views/payments/contact_info_editor_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/contact_info_editor_view_controller_browsertest.cc
index 94512f71..a634467 100644
--- a/chrome/browser/ui/views/payments/contact_info_editor_view_controller_browsertest.cc
+++ b/chrome/browser/ui/views/payments/contact_info_editor_view_controller_browsertest.cc
@@ -9,6 +9,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
+#include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 
 namespace payments {
@@ -322,4 +323,76 @@
                              GetLocale()));
 }
 
+IN_PROC_BROWSER_TEST_F(PaymentRequestContactInfoEditorTest,
+                       RetryWithPayerErrors) {
+  NavigateTo("/payment_request_retry_with_payer_errors.html");
+
+  autofill::AutofillProfile contact = autofill::test::GetFullProfile();
+  AddAutofillProfile(contact);
+
+  autofill::CreditCard card = autofill::test::GetCreditCard();
+  card.set_billing_address_id(contact.guid());
+  AddCreditCard(card);
+
+  InvokePaymentRequestUI();
+  PayWithCreditCard(base::ASCIIToUTF16("123"));
+
+  ResetEventWaiter(DialogEvent::CONTACT_INFO_EDITOR_OPENED);
+  RetryPaymentRequest(
+      "{"
+      "  payer: {"
+      "    email: 'EMAIL ERROR',"
+      "    name: 'NAME ERROR',"
+      "    phone: 'PHONE ERROR'"
+      "  }"
+      "}");
+  WaitForObservedEvent();
+
+  EXPECT_EQ(base::ASCIIToUTF16("EMAIL ERROR"),
+            GetErrorLabelForType(autofill::EMAIL_ADDRESS));
+  EXPECT_EQ(base::ASCIIToUTF16("NAME ERROR"),
+            GetErrorLabelForType(autofill::NAME_FULL));
+  EXPECT_EQ(base::ASCIIToUTF16("PHONE ERROR"),
+            GetErrorLabelForType(autofill::PHONE_HOME_WHOLE_NUMBER));
+}
+
+IN_PROC_BROWSER_TEST_F(
+    PaymentRequestContactInfoEditorTest,
+    RetryWithPayerErrors_HasSameValueButDifferentErrorsShown) {
+  NavigateTo("/payment_request_retry_with_payer_errors.html");
+
+  autofill::AutofillProfile contact = autofill::test::GetFullProfile();
+  // Set the same value in both of email and name field.
+  contact.SetRawInfo(autofill::EMAIL_ADDRESS,
+                     base::ASCIIToUTF16("johndoe@hades.com"));
+  contact.SetRawInfo(autofill::NAME_FULL,
+                     base::ASCIIToUTF16("johndoe@hades.com"));
+  AddAutofillProfile(contact);
+
+  autofill::CreditCard card = autofill::test::GetCreditCard();
+  card.set_billing_address_id(contact.guid());
+  AddCreditCard(card);
+
+  InvokePaymentRequestUI();
+  PayWithCreditCard(base::ASCIIToUTF16("123"));
+
+  ResetEventWaiter(DialogEvent::CONTACT_INFO_EDITOR_OPENED);
+  RetryPaymentRequest(
+      "{"
+      "  payer: {"
+      "    email: 'EMAIL ERROR',"
+      "    name: 'NAME ERROR',"
+      "    phone: 'PHONE ERROR'"
+      "  }"
+      "}");
+  WaitForObservedEvent();
+
+  EXPECT_EQ(base::ASCIIToUTF16("EMAIL ERROR"),
+            GetErrorLabelForType(autofill::EMAIL_ADDRESS));
+  EXPECT_EQ(base::ASCIIToUTF16("NAME ERROR"),
+            GetErrorLabelForType(autofill::NAME_FULL));
+  EXPECT_EQ(base::ASCIIToUTF16("PHONE ERROR"),
+            GetErrorLabelForType(autofill::PHONE_HOME_WHOLE_NUMBER));
+}
+
 }  // namespace payments
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 7662e41..b26ff27 100644
--- a/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest_base.cc
@@ -88,6 +88,7 @@
   // HTTPS server only serves a valid cert for localhost, so this is needed to
   // load pages from "a.com" without an interstitial.
   command_line->AppendSwitch(switches::kIgnoreCertificateErrors);
+  command_line->AppendSwitch(switches::kEnableExperimentalWebPlatformFeatures);
 }
 
 void PaymentRequestBrowserTestBase::SetUpOnMainThread() {
@@ -627,6 +628,28 @@
                            dialog_view);
 }
 
+void PaymentRequestBrowserTestBase::PayWithCreditCard(
+    const base::string16& cvc) {
+  OpenCVCPromptWithCVC(cvc, delegate_->dialog_view());
+
+  ResetEventWaiter(DialogEvent::PROCESSING_SPINNER_SHOWN);
+  ClickOnDialogViewAndWait(DialogViewID::CVC_PROMPT_CONFIRM_BUTTON,
+                           delegate_->dialog_view());
+}
+
+void PaymentRequestBrowserTestBase::RetryPaymentRequest(
+    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(),
+                                     "retry(" + validation_errors + ");"));
+
+  WaitForObservedEvent();
+}
+
 base::string16 PaymentRequestBrowserTestBase::GetEditorTextfieldValue(
     autofill::ServerFieldType type) {
   ValidatingTextfield* textfield =
diff --git a/chrome/browser/ui/views/payments/payment_request_browsertest_base.h b/chrome/browser/ui/views/payments/payment_request_browsertest_base.h
index c270a2d6..bebef49 100644
--- a/chrome/browser/ui/views/payments/payment_request_browsertest_base.h
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest_base.h
@@ -208,6 +208,8 @@
   void PayWithCreditCardAndWait(const base::string16& cvc);
   void PayWithCreditCardAndWait(const base::string16& cvc,
                                 PaymentRequestDialogView* dialog_view);
+  void PayWithCreditCard(const base::string16& cvc);
+  void RetryPaymentRequest(const std::string& validation_errors);
 
   // Getting/setting the |value| in the textfield of a given |type|.
   base::string16 GetEditorTextfieldValue(autofill::ServerFieldType type);
diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
index 6668837..2230ad9 100644
--- a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
+++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
@@ -187,6 +187,35 @@
   HideProcessingSpinner();
 }
 
+void PaymentRequestDialogView::RetryDialog() {
+  HideProcessingSpinner();
+  ShowInitialPaymentSheet();
+
+  if (request_->spec()->has_shipping_address_error()) {
+    autofill::AutofillProfile* profile =
+        request_->state()->invalid_shipping_profile();
+    ShowShippingAddressEditor(
+        BackNavigationType::kOneStep,
+        /*on_edited=*/
+        base::BindOnce(&PaymentRequestState::SetSelectedShippingProfile,
+                       base::Unretained(request_->state()), profile),
+        /*on_added=*/
+        base::OnceCallback<void(const autofill::AutofillProfile&)>(), profile);
+  }
+
+  if (request_->spec()->has_payer_error()) {
+    autofill::AutofillProfile* profile =
+        request_->state()->invalid_contact_profile();
+    ShowContactInfoEditor(
+        BackNavigationType::kOneStep,
+        /*on_edited=*/
+        base::BindOnce(&PaymentRequestState::SetSelectedContactProfile,
+                       base::Unretained(request_->state()), profile),
+        /*on_added=*/
+        base::OnceCallback<void(const autofill::AutofillProfile&)>(), profile);
+  }
+}
+
 void PaymentRequestDialogView::OnStartUpdating(
     PaymentRequestSpec::UpdateReason reason) {
   ShowProcessingSpinner();
diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.h b/chrome/browser/ui/views/payments/payment_request_dialog_view.h
index 652570d..7a5a76c 100644
--- a/chrome/browser/ui/views/payments/payment_request_dialog_view.h
+++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.h
@@ -113,6 +113,7 @@
   void ShowPaymentHandlerScreen(
       const GURL& url,
       PaymentHandlerOpenWindowCallback callback) override;
+  void RetryDialog() override;
 
   // PaymentRequestSpec::Observer:
   void OnStartUpdating(PaymentRequestSpec::UpdateReason reason) override;
diff --git a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc
index b4b8d77..e09e92f 100644
--- a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc
+++ b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc
@@ -82,40 +82,7 @@
 
 base::string16 ShippingAddressEditorViewController::GetInitialValueForType(
     autofill::ServerFieldType type) {
-  if (type == autofill::PHONE_HOME_WHOLE_NUMBER) {
-    return autofill::i18n::GetFormattedPhoneNumberForDisplay(
-        temporary_profile_, state()->GetApplicationLocale());
-  }
-
-  if (type == autofill::ADDRESS_HOME_STATE && region_model_) {
-    // For the state, check if the inital value matches either a region code or
-    // a region name.
-    base::string16 initial_region =
-        temporary_profile_.GetInfo(type, state()->GetApplicationLocale());
-    autofill::l10n::CaseInsensitiveCompare compare;
-
-    for (const auto& region : region_model_->GetRegions()) {
-      if (compare.StringsEqual(initial_region,
-                               base::UTF8ToUTF16(region.first)) ||
-          compare.StringsEqual(initial_region,
-                               base::UTF8ToUTF16(region.second))) {
-        return base::UTF8ToUTF16(region.second);
-      }
-    }
-
-    return initial_region;
-  }
-
-  if (type == autofill::ADDRESS_HOME_STREET_ADDRESS) {
-    std::string street_address_line;
-    i18n::addressinput::GetStreetAddressLinesAsSingleLine(
-        *autofill::i18n::CreateAddressDataFromAutofillProfile(
-            temporary_profile_, state()->GetApplicationLocale()),
-        &street_address_line);
-    return base::UTF8ToUTF16(street_address_line);
-  }
-
-  return temporary_profile_.GetInfo(type, state()->GetApplicationLocale());
+  return GetValueForType(temporary_profile_, type);
 }
 
 bool ShippingAddressEditorViewController::ValidateModelAndSave() {
@@ -318,6 +285,18 @@
 
 bool ShippingAddressEditorViewController::ShippingAddressValidationDelegate::
     ValidateValue(const base::string16& value, base::string16* error_message) {
+  // Show errors from merchant's retry() call. Note that changing the selected
+  // shipping address will clear the validation errors from retry().
+  autofill::AutofillProfile* invalid_shipping_profile =
+      controller_->state()->invalid_shipping_profile();
+  if (invalid_shipping_profile && error_message &&
+      value == controller_->GetValueForType(*invalid_shipping_profile,
+                                            field_.type)) {
+    *error_message = controller_->spec()->GetShippingAddressError(field_.type);
+    if (!error_message->empty())
+      return false;
+  }
+
   if (!value.empty()) {
     if (field_.type == autofill::PHONE_HOME_WHOLE_NUMBER &&
         controller_->chosen_country_index_ < controller_->countries_.size() &&
@@ -347,6 +326,45 @@
   return !field_.required;
 }
 
+base::string16 ShippingAddressEditorViewController::GetValueForType(
+    const autofill::AutofillProfile& profile,
+    autofill::ServerFieldType type) {
+  if (type == autofill::PHONE_HOME_WHOLE_NUMBER) {
+    return autofill::i18n::GetFormattedPhoneNumberForDisplay(
+        profile, state()->GetApplicationLocale());
+  }
+
+  if (type == autofill::ADDRESS_HOME_STATE && region_model_) {
+    // For the state, check if the initial value matches either a region code or
+    // a region name.
+    base::string16 initial_region =
+        profile.GetInfo(type, state()->GetApplicationLocale());
+    autofill::l10n::CaseInsensitiveCompare compare;
+
+    for (const auto& region : region_model_->GetRegions()) {
+      if (compare.StringsEqual(initial_region,
+                               base::UTF8ToUTF16(region.first)) ||
+          compare.StringsEqual(initial_region,
+                               base::UTF8ToUTF16(region.second))) {
+        return base::UTF8ToUTF16(region.second);
+      }
+    }
+
+    return initial_region;
+  }
+
+  if (type == autofill::ADDRESS_HOME_STREET_ADDRESS) {
+    std::string street_address_line;
+    i18n::addressinput::GetStreetAddressLinesAsSingleLine(
+        *autofill::i18n::CreateAddressDataFromAutofillProfile(
+            profile, state()->GetApplicationLocale()),
+        &street_address_line);
+    return base::UTF8ToUTF16(street_address_line);
+  }
+
+  return profile.GetInfo(type, state()->GetApplicationLocale());
+}
+
 bool ShippingAddressEditorViewController::GetSheetId(DialogViewID* sheet_id) {
   *sheet_id = DialogViewID::SHIPPING_ADDRESS_EDITOR_SHEET;
   return true;
diff --git a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.h b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.h
index dce1ecd..6619de0 100644
--- a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.h
+++ b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.h
@@ -96,6 +96,9 @@
     DISALLOW_COPY_AND_ASSIGN(ShippingAddressValidationDelegate);
   };
 
+  base::string16 GetValueForType(const autofill::AutofillProfile& profile,
+                                 autofill::ServerFieldType type);
+
   bool GetSheetId(DialogViewID* sheet_id) override;
 
   // Updates |countries_| with the content of |model| if it's not null,
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 9a990189..f73bcf3 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
@@ -26,6 +26,8 @@
 #include "ui/views/controls/combobox/combobox.h"
 #include "ui/views/controls/label.h"
 
+#include "components/web_modal/web_contents_modal_dialog_manager.h"
+
 namespace payments {
 
 namespace {
@@ -1263,4 +1265,72 @@
                                /*accept_empty_phone_number=*/false);
 }
 
+// Tests that there is error label for an impossible
+IN_PROC_BROWSER_TEST_F(PaymentRequestShippingAddressEditorTest,
+                       RetryWithShippingAddressErrors) {
+  NavigateTo("/payment_request_retry_with_shipping_address_errors.html");
+
+  autofill::AutofillProfile address = autofill::test::GetFullProfile();
+  AddAutofillProfile(address);
+
+  autofill::CreditCard card = autofill::test::GetCreditCard();
+  card.set_billing_address_id(address.guid());
+  AddCreditCard(card);
+
+  InvokePaymentRequestUI();
+  PayWithCreditCard(base::ASCIIToUTF16("123"));
+
+  ResetEventWaiter(DialogEvent::SHIPPING_ADDRESS_EDITOR_OPENED);
+  RetryPaymentRequest(
+      "{"
+      "  shippingAddress: {"
+      "    addressLine: 'ADDRESS LINE ERROR',"
+      "    city: 'CITY ERROR'"
+      "  }"
+      "}");
+  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));
+}
+
+// Tests that there is error label for an impossible
+IN_PROC_BROWSER_TEST_F(
+    PaymentRequestShippingAddressEditorTest,
+    RetryWithShippingAddressErrors_HasSameValueButDifferentErrorsShown) {
+  NavigateTo("/payment_request_retry_with_shipping_address_errors.html");
+
+  autofill::AutofillProfile address = autofill::test::GetFullProfile();
+  // Set the same value in both of address line and city field.
+  address.SetRawInfo(autofill::ADDRESS_HOME_STREET_ADDRESS,
+                     base::ASCIIToUTF16("Elysium"));
+  address.SetRawInfo(autofill::ADDRESS_HOME_CITY,
+                     base::ASCIIToUTF16("Elysium"));
+  AddAutofillProfile(address);
+
+  autofill::CreditCard card = autofill::test::GetCreditCard();
+  card.set_billing_address_id(address.guid());
+  AddCreditCard(card);
+
+  InvokePaymentRequestUI();
+  PayWithCreditCard(base::ASCIIToUTF16("123"));
+
+  ResetEventWaiter(DialogEvent::SHIPPING_ADDRESS_EDITOR_OPENED);
+  RetryPaymentRequest(
+      "{"
+      "  shippingAddress: {"
+      "    addressLine: 'ADDRESS LINE ERROR',"
+      "    city: 'CITY ERROR'"
+      "  }"
+      "}");
+  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/multidevice_setup/multidevice_setup_dialog.cc b/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc
index 5b6c1b3..6ea7f93f 100644
--- a/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc
+++ b/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc
@@ -32,8 +32,6 @@
 constexpr int kDialogWidthPx = 768;
 
 void AddMultiDeviceSetupStrings(content::WebUIDataSource* html_source) {
-  // TODO(jordynass): Translate the newly added strings from
-  // //chrome/app/chromeos_strings.grdp.
   static constexpr struct {
     const char* name;
     int id;
diff --git a/chrome/browser/ui/webui/discards/discards.mojom b/chrome/browser/ui/webui/discards/discards.mojom
index 470015a..b9c02585 100644
--- a/chrome/browser/ui/webui/discards/discards.mojom
+++ b/chrome/browser/ui/webui/discards/discards.mojom
@@ -58,6 +58,8 @@
   double reactivation_score;
   // Site engagement score.
   double site_engagement_score;
+  // Whether or not the tab has input focus.
+  bool has_focus;
 };
 
 // Interface for providing information about discards. Lives in the browser
diff --git a/chrome/browser/ui/webui/discards/discards_ui.cc b/chrome/browser/ui/webui/discards/discards_ui.cc
index fa00856..a0cc1e9 100644
--- a/chrome/browser/ui/webui/discards/discards_ui.cc
+++ b/chrome/browser/ui/webui/discards/discards_ui.cc
@@ -150,6 +150,11 @@
       if (info->has_reactivation_score)
         info->reactivation_score = reactivation_score.value();
       info->site_engagement_score = GetSiteEngagementScore(contents);
+      // TODO(crbug.com/876340): The focus is used to compute the page lifecycle
+      // state. This should be replaced with the actual page lifecycle state
+      // information from Blink, but this depends on implementing the passive
+      // state and plumbing it to the browser.
+      info->has_focus = lifecycle_unit->GetLastFocusedTime().is_max();
 
       infos.push_back(std::move(info));
     }
diff --git a/chrome/browser/ui/webui/welcome_ui.cc b/chrome/browser/ui/webui/welcome_ui.cc
index c037af96..bc0a667 100644
--- a/chrome/browser/ui/webui/welcome_ui.cc
+++ b/chrome/browser/ui/webui/welcome_ui.cc
@@ -25,6 +25,8 @@
 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
 #include "base/metrics/histogram_macros.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
+#include "components/nux/email/constants.h"
+#include "components/nux/email/email_handler.h"
 #include "components/nux/google_apps/constants.h"
 #include "components/nux/google_apps/google_apps_handler.h"
 #include "components/nux/show_promo_delegate.h"
@@ -111,6 +113,18 @@
   }
 
 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
+  if (base::FeatureList::IsEnabled(nux::kNuxEmailFeature)) {
+    content::BrowserContext* browser_context =
+        web_ui->GetWebContents()->GetBrowserContext();
+    web_ui->AddMessageHandler(std::make_unique<nux::EmailHandler>(
+        profile->GetPrefs(),
+        FaviconServiceFactory::GetForProfile(
+            profile, ServiceAccessType::EXPLICIT_ACCESS),
+        BookmarkModelFactory::GetForBrowserContext(browser_context)));
+
+    nux::EmailHandler::AddSources(html_source);
+  }
+
   if (base::FeatureList::IsEnabled(nux::kNuxGoogleAppsFeature)) {
     content::BrowserContext* browser_context =
         web_ui->GetWebContents()->GetBrowserContext();
diff --git a/chrome/browser/vr/compositor_delegate.h b/chrome/browser/vr/compositor_delegate.h
index e5254d7..fedc8eb 100644
--- a/chrome/browser/vr/compositor_delegate.h
+++ b/chrome/browser/vr/compositor_delegate.h
@@ -9,6 +9,8 @@
 #include "chrome/browser/vr/compositor_ui_interface.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 Transform;
@@ -43,6 +45,9 @@
   virtual void OnFinishedDrawingBuffer() = 0;
   virtual void GetWebXrDrawParams(int* texture_id, Transform* uv_transform) = 0;
   virtual bool IsContentQuadReady() = 0;
+  virtual void ResumeContentRendering() = 0;
+  virtual void BufferBoundsChanged(const gfx::Size& content_buffer_size,
+                                   const gfx::Size& overlay_buffer_size) = 0;
   virtual void GetContentQuadDrawParams(Transform* uv_transform,
                                         float* border_x,
                                         float* border_y) = 0;
@@ -52,6 +57,10 @@
   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/controller_delegate.h b/chrome/browser/vr/controller_delegate.h
index 1df466e3..bb93fa6 100644
--- a/chrome/browser/vr/controller_delegate.h
+++ b/chrome/browser/vr/controller_delegate.h
@@ -11,11 +11,14 @@
 #include "base/time/time.h"
 #include "device/vr/public/mojom/vr_service.mojom.h"
 
+namespace gfx {
+class Transform;
+}
+
 namespace vr {
 
 class InputEvent;
 struct ControllerModel;
-struct RenderInfo;
 
 using InputEventList = std::vector<std::unique_ptr<InputEvent>>;
 
@@ -25,10 +28,10 @@
  public:
   virtual ~ControllerDelegate() {}
 
-  virtual void UpdateController(const RenderInfo& render_info,
+  virtual void UpdateController(const gfx::Transform& head_pose,
                                 base::TimeTicks current_time,
                                 bool is_webxr_frame) = 0;
-  virtual ControllerModel GetModel(const RenderInfo& render_info) = 0;
+  virtual ControllerModel GetModel(const gfx::Transform& head_pose) = 0;
   virtual InputEventList GetGestures(base::TimeTicks current_time) = 0;
   virtual device::mojom::XRInputSourceStatePtr GetInputSourceState() = 0;
   virtual void OnResume() = 0;
diff --git a/chrome/browser/vr/controller_delegate_for_testing.cc b/chrome/browser/vr/controller_delegate_for_testing.cc
index 67ee0ff..2604fdbe 100644
--- a/chrome/browser/vr/controller_delegate_for_testing.cc
+++ b/chrome/browser/vr/controller_delegate_for_testing.cc
@@ -97,7 +97,7 @@
 }
 
 void ControllerDelegateForTesting::UpdateController(
-    const RenderInfo& render_info,
+    const gfx::Transform& head_pose,
     base::TimeTicks current_time,
     bool is_webxr_frame) {
   if (!controller_model_queue_.empty()) {
@@ -109,7 +109,7 @@
 }
 
 ControllerModel ControllerDelegateForTesting::GetModel(
-    const RenderInfo& render_info) {
+    const gfx::Transform& head_pose) {
   return cached_controller_model_;
 }
 
diff --git a/chrome/browser/vr/controller_delegate_for_testing.h b/chrome/browser/vr/controller_delegate_for_testing.h
index dc368c0..deac978 100644
--- a/chrome/browser/vr/controller_delegate_for_testing.h
+++ b/chrome/browser/vr/controller_delegate_for_testing.h
@@ -25,10 +25,10 @@
   bool IsQueueEmpty() const;
 
   // ControllerDelegate implementation.
-  void UpdateController(const RenderInfo& render_info,
+  void UpdateController(const gfx::Transform& head_pose,
                         base::TimeTicks current_time,
                         bool is_webxr_frame) override;
-  ControllerModel GetModel(const RenderInfo& render_info) override;
+  ControllerModel GetModel(const gfx::Transform& head_pose) override;
   InputEventList GetGestures(base::TimeTicks current_time) override;
   device::mojom::XRInputSourceStatePtr GetInputSourceState() override;
   void OnResume() override;
diff --git a/chrome/browser/vr/render_loop.cc b/chrome/browser/vr/render_loop.cc
index c382baf..b6861660 100644
--- a/chrome/browser/vr/render_loop.cc
+++ b/chrome/browser/vr/render_loop.cc
@@ -23,18 +23,19 @@
 namespace vr {
 
 RenderLoop::RenderLoop(std::unique_ptr<UiInterface> ui,
-                       CompositorDelegate* compositor_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)),
-      compositor_delegate_(compositor_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) {
+      ui_controller_update_time_(sliding_time_size),
+      weak_ptr_factory_(this) {
   compositor_delegate_->SetUiInterface(ui_.get());
 }
 
@@ -62,6 +63,10 @@
     DrawBrowserUi(render_info);
   }
 
+  TRACE_COUNTER2("gpu", "VR UI timing (us)", "scene update",
+                 ui_processing_time_.GetAverage().InMicroseconds(),
+                 "controller",
+                 ui_controller_update_time_.GetAverage().InMicroseconds());
   compositor_delegate_->SubmitFrame(frame_type);
 }
 
@@ -116,16 +121,28 @@
 void RenderLoop::OnPause() {
   DCHECK(controller_delegate_);
   controller_delegate_->OnPause();
-  scheduler_delegate_->OnSchedulerPause();
+  scheduler_delegate_->OnPause();
   ui_->OnPause();
 }
 
 void RenderLoop::OnResume() {
   DCHECK(controller_delegate_);
-  scheduler_delegate_->OnSchedulerResume();
+  scheduler_delegate_->OnResume();
   controller_delegate_->OnResume();
 }
 
+void RenderLoop::OnExitPresent() {
+  scheduler_delegate_->OnExitPresent();
+}
+
+void RenderLoop::OnTriggerEvent(bool pressed) {
+  scheduler_delegate_->OnTriggerEvent(pressed);
+}
+
+void RenderLoop::SetWebXrMode(bool enabled) {
+  scheduler_delegate_->SetWebXrMode(enabled);
+}
+
 void RenderLoop::OnSwapContents(int new_content_id) {
   ui_->OnSwapContents(new_content_id);
 }
@@ -188,11 +205,21 @@
   ui_->CancelPlatformToast();
 }
 
+void RenderLoop::ResumeContentRendering() {
+  compositor_delegate_->ResumeContentRendering();
+}
+
 void RenderLoop::ContentBoundsChanged(int width, int height) {
   TRACE_EVENT0("gpu", __func__);
   ui_->OnContentBoundsChanged(width, height);
 }
 
+void RenderLoop::BufferBoundsChanged(const gfx::Size& content_buffer_size,
+                                     const gfx::Size& overlay_buffer_size) {
+  compositor_delegate_->BufferBoundsChanged(content_buffer_size,
+                                            overlay_buffer_size);
+}
+
 base::WeakPtr<BrowserUiInterface> RenderLoop::GetBrowserUiWeakPtr() {
   return ui_->GetBrowserUiWeakPtr();
 }
@@ -227,7 +254,7 @@
   if (ui_->SceneHasDirtyTextures()) {
     if (!compositor_delegate_->RunInSkiaContext(base::BindOnce(
             &UiInterface::UpdateSceneTextures, base::Unretained(ui_.get())))) {
-      ForceExitVr();
+      browser_->ForceExitVr();
       return;
     }
     ui_updated = true;
@@ -237,23 +264,30 @@
   base::TimeDelta scene_time = base::TimeTicks::Now() - timing_start;
   // Don't double-count the controller time that was part of the scene time.
   ui_processing_time_.AddSample(scene_time - controller_time);
-  TRACE_EVENT_END0("gpu", "SceneUpdate");
 }
 
-device::mojom::XRInputSourceStatePtr RenderLoop::ProcessControllerInputForWebXr(
-    const RenderInfo& render_info,
-    base::TimeTicks current_time) {
+void RenderLoop::ProcessControllerInputForWebXr(const gfx::Transform& head_pose,
+                                                base::TimeTicks current_time) {
   TRACE_EVENT0("gpu", __func__);
   DCHECK(controller_delegate_);
   DCHECK(ui_);
   base::TimeTicks timing_start = base::TimeTicks::Now();
 
-  controller_delegate_->UpdateController(render_info, current_time, true);
+  controller_delegate_->UpdateController(head_pose, current_time, true);
   auto input_event_list = controller_delegate_->GetGestures(current_time);
   ui_->HandleMenuButtonEvents(&input_event_list);
 
   ui_controller_update_time_.AddSample(base::TimeTicks::Now() - timing_start);
-  return controller_delegate_->GetInputSourceState();
+
+  scheduler_delegate_->AddInputSourceState(
+      controller_delegate_->GetInputSourceState());
+}
+
+void RenderLoop::ConnectPresentingService(
+    device::mojom::VRDisplayInfoPtr display_info,
+    device::mojom::XRRuntimeSessionOptionsPtr options) {
+  compositor_delegate_->ConnectPresentingService(std::move(display_info),
+                                                 std::move(options));
 }
 
 base::TimeDelta RenderLoop::ProcessControllerInput(
@@ -264,11 +298,12 @@
   DCHECK(ui_);
   base::TimeTicks timing_start = base::TimeTicks::Now();
 
-  controller_delegate_->UpdateController(render_info, current_time, false);
+  controller_delegate_->UpdateController(render_info.head_pose, current_time,
+                                         false);
   auto input_event_list = controller_delegate_->GetGestures(current_time);
   ReticleModel reticle_model;
   ControllerModel controller_model =
-      controller_delegate_->GetModel(render_info);
+      controller_delegate_->GetModel(render_info.head_pose);
   ui_->HandleInput(current_time, render_info, controller_model, &reticle_model,
                    &input_event_list);
   ui_->OnControllerUpdated(controller_model, reticle_model);
@@ -278,10 +313,6 @@
   return controller_time;
 }
 
-void RenderLoop::ForceExitVr() {
-  browser_->ForceExitVr();
-}
-
 void RenderLoop::PerformControllerActionForTesting(
     ControllerTestInput controller_input) {
   DCHECK(controller_delegate_);
@@ -336,6 +367,10 @@
   }
 }
 
+base::WeakPtr<RenderLoop> RenderLoop::GetWeakPtr() {
+  return weak_ptr_factory_.GetWeakPtr();
+}
+
 void RenderLoop::ReportUiActivityResultForTesting(
     VrUiTestActivityResult result) {
   ui_test_state_ = nullptr;
diff --git a/chrome/browser/vr/render_loop.h b/chrome/browser/vr/render_loop.h
index 3fc6e46..95f4acb 100644
--- a/chrome/browser/vr/render_loop.h
+++ b/chrome/browser/vr/render_loop.h
@@ -8,11 +8,11 @@
 #include <memory>
 
 #include "base/macros.h"
+#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/sliding_average.h"
 #include "chrome/browser/vr/vr_export.h"
-#include "device/vr/public/mojom/vr_service.mojom.h"
 
 namespace base {
 class TimeDelta;
@@ -42,7 +42,7 @@
 class VR_EXPORT RenderLoop {
  public:
   RenderLoop(std::unique_ptr<UiInterface> ui,
-             CompositorDelegate* compositor_delegate,
+             std::unique_ptr<CompositorDelegate> compositor_delegate,
              SchedulerDelegate* scheduler_delegate,
              std::unique_ptr<ControllerDelegate> controller_delegate,
              RenderLoopBrowserInterface* browser,
@@ -55,6 +55,9 @@
   void OnPause();
   void OnResume();
 
+  void OnExitPresent();
+  void OnTriggerEvent(bool pressed);
+  void SetWebXrMode(bool enabled);
   void OnSwapContents(int new_content_id);
   void EnableAlertDialog(PlatformInputHandler* input_handler,
                          float width,
@@ -65,27 +68,23 @@
   void SetDialogFloating(bool floating);
   void ShowToast(const base::string16& text);
   void CancelToast();
+  void ResumeContentRendering();
   void ContentBoundsChanged(int width, int height);
+  void BufferBoundsChanged(const gfx::Size& content_buffer_size,
+                           const gfx::Size& overlay_buffer_size);
 
+  base::WeakPtr<RenderLoop> GetWeakPtr();
   base::WeakPtr<BrowserUiInterface> GetBrowserUiWeakPtr();
 
   void PerformControllerActionForTesting(ControllerTestInput controller_input);
   void SetUiExpectingActivityForTesting(
       UiTestActivityExpectation ui_expectation);
   void AcceptDoffPromptForTesting();
-
- protected:
-  device::mojom::XRInputSourceStatePtr ProcessControllerInputForWebXr(
-      const RenderInfo& render_info,
-      base::TimeTicks current_time);
-  void ForceExitVr();
-
-  const SlidingTimeDeltaAverage& ui_controller_update_time() const {
-    return ui_controller_update_time_;
-  }
-  const SlidingTimeDeltaAverage& ui_processing_time() const {
-    return ui_processing_time_;
-  }
+  void ProcessControllerInputForWebXr(const gfx::Transform& head_pose,
+                                      base::TimeTicks current_time);
+  void ConnectPresentingService(
+      device::mojom::VRDisplayInfoPtr display_info,
+      device::mojom::XRRuntimeSessionOptionsPtr options);
 
  private:
   // Position, hide and/or show UI elements, process input and update textures.
@@ -105,7 +104,7 @@
   void ReportUiActivityResultForTesting(VrUiTestActivityResult result);
 
   std::unique_ptr<UiInterface> ui_;
-  CompositorDelegate* compositor_delegate_;
+  std::unique_ptr<CompositorDelegate> compositor_delegate_;
   SchedulerDelegate* scheduler_delegate_;
   std::unique_ptr<ControllerDelegate> controller_delegate_;
   std::unique_ptr<ControllerDelegate> controller_delegate_for_testing_;
@@ -119,6 +118,8 @@
   SlidingTimeDeltaAverage ui_processing_time_;
   SlidingTimeDeltaAverage ui_controller_update_time_;
 
+  base::WeakPtrFactory<RenderLoop> weak_ptr_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(RenderLoop);
 };
 
diff --git a/chrome/browser/vr/scheduler_delegate.h b/chrome/browser/vr/scheduler_delegate.h
index e73404f..969af4e 100644
--- a/chrome/browser/vr/scheduler_delegate.h
+++ b/chrome/browser/vr/scheduler_delegate.h
@@ -8,21 +8,32 @@
 #include "base/callback.h"
 #include "base/time/time.h"
 #include "chrome/browser/vr/vr_export.h"
+#include "device/vr/public/mojom/vr_service.mojom.h"
+
+namespace gfx {
+class Transform;
+}
 
 namespace vr {
 
 class VR_EXPORT SchedulerDelegate {
  public:
   using DrawCallback = base::RepeatingCallback<void(base::TimeTicks)>;
+  using WebXrInputCallback =
+      base::RepeatingCallback<void(const gfx::Transform&, base::TimeTicks)>;
   virtual ~SchedulerDelegate() {}
 
-  // TODO(acondor): Drop "Scheduler" from these names once RenderLoop owns
-  // VrShellGl.
-  virtual void OnSchedulerPause() = 0;
-  virtual void OnSchedulerResume() = 0;
+  virtual void OnPause() = 0;
+  virtual void OnResume() = 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 AddInputSourceState(
+      device::mojom::XRInputSourceStatePtr state) = 0;
 };
 
 }  // namespace vr
diff --git a/chrome/browser/vr/testapp/gl_renderer.cc b/chrome/browser/vr/testapp/gl_renderer.cc
index 6d2a9f7..687e21b 100644
--- a/chrome/browser/vr/testapp/gl_renderer.cc
+++ b/chrome/browser/vr/testapp/gl_renderer.cc
@@ -66,6 +66,9 @@
 bool GlRenderer::IsContentQuadReady() {
   return true;
 }
+void GlRenderer::ResumeContentRendering() {}
+void GlRenderer::BufferBoundsChanged(const gfx::Size& content_buffer_size,
+                                     const gfx::Size& overlay_buffer_size) {}
 void GlRenderer::GetContentQuadDrawParams(Transform* uv_transform,
                                           float* border_x,
                                           float* border_y) {}
@@ -75,6 +78,9 @@
 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 a9736f6..f8a7001 100644
--- a/chrome/browser/vr/testapp/gl_renderer.h
+++ b/chrome/browser/vr/testapp/gl_renderer.h
@@ -40,6 +40,9 @@
   void OnFinishedDrawingBuffer() override;
   void GetWebXrDrawParams(int* texture_id, Transform* uv_transform) override;
   bool IsContentQuadReady() override;
+  void ResumeContentRendering() override;
+  void BufferBoundsChanged(const gfx::Size& content_buffer_size,
+                           const gfx::Size& overlay_buffer_size) override;
   void GetContentQuadDrawParams(Transform* uv_transform,
                                 float* border_x,
                                 float* border_y) override;
@@ -47,6 +50,9 @@
   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/common/available_offline_content.mojom b/chrome/common/available_offline_content.mojom
index 86a878dc..4424d75 100644
--- a/chrome/common/available_offline_content.mojom
+++ b/chrome/common/available_offline_content.mojom
@@ -27,4 +27,8 @@
 interface AvailableOfflineContentProvider {
   // Returns some available pieces of content from downloads.
   List() => (array<AvailableOfflineContent> out);
+  // Opens one of the items returned by List().
+  LaunchItem(string item_id, string name_space);
+  // Opens the downloads page to view all offline content.
+  LaunchDownloadsPage();
 };
diff --git a/chrome/common/page_load_metrics/page_load_metrics.mojom b/chrome/common/page_load_metrics/page_load_metrics.mojom
index 64e53ef..a077e57 100644
--- a/chrome/common/page_load_metrics/page_load_metrics.mojom
+++ b/chrome/common/page_load_metrics/page_load_metrics.mojom
@@ -155,19 +155,6 @@
   array<int32> animated_css_properties;
 };
 
-// Data used for the page load.
-// TODO(johnidel): Remove/deprecate this struct once per resource updates are
-// being sent to the browser
-struct PageLoadDataUse {
-  // Network bytes received for the page load.
-  int64 received_data_length = 0;
-
-  // The number of bytes saved by the data reduction proxy. Will be zero when
-  // data reduction proxy is not used. Can be negative if the proxy inflated the
-  // resource.
-  int64 data_reduction_proxy_bytes_saved = 0;
-};
-
 struct ResourceDataUpdate {
   // The id for the resource request.
   int32 request_id = 0;
@@ -182,6 +169,10 @@
 
   // Whether this resource load has completed.
   bool is_complete;
+
+  // Compression ratio estimated from the response headers if data saver was
+  // used.
+  double data_reduction_proxy_compression_ratio_estimate;
 };
 
 // Sent from renderer to browser process when the PageLoadTiming for the
@@ -190,6 +181,5 @@
   UpdateTiming(PageLoadTiming page_load_timing,
                PageLoadMetadata page_load_metadata,
                PageLoadFeatures new_features,
-               PageLoadDataUse data_use,
                array<ResourceDataUpdate> resources);
 };
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 1c03afd7..fa11d63 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -1548,11 +1548,6 @@
 // A dictionary with generic DevTools settings.
 const char kDevToolsPreferences[] = "devtools.preferences";
 
-#if defined(OS_ANDROID)
-// A boolean specifying whether remote dev tools debugging is enabled.
-const char kDevToolsRemoteEnabled[] = "devtools.remote_enabled";
-#endif
-
 // Local hash of authentication password, used for off-line authentication
 // when on-line authentication is not available.
 const char kGoogleServicesPasswordHash[] = "google.services.password_hash";
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 9336e07..06bfa1b 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -541,9 +541,6 @@
 extern const char kDevToolsPreferences[];
 extern const char kDevToolsDiscoverTCPTargetsEnabled[];
 extern const char kDevToolsTCPDiscoveryConfig[];
-#if defined(OS_ANDROID)
-extern const char kDevToolsRemoteEnabled[];
-#endif
 
 extern const char kGoogleServicesPasswordHash[];
 
diff --git a/chrome/renderer/net/available_offline_content_helper.cc b/chrome/renderer/net/available_offline_content_helper.cc
index 3bda9fe..a8c467b 100644
--- a/chrome/renderer/net/available_offline_content_helper.cc
+++ b/chrome/renderer/net/available_offline_content_helper.cc
@@ -76,3 +76,15 @@
       content::mojom::kBrowserServiceName, &provider_);
   return !!provider_;
 }
+void AvailableOfflineContentHelper::LaunchItem(const std::string& id,
+                                               const std::string& name_space) {
+  if (!BindProvider())
+    return;
+  provider_->LaunchItem(id, name_space);
+}
+
+void AvailableOfflineContentHelper::LaunchDownloadsPage() {
+  if (!BindProvider())
+    return;
+  provider_->LaunchDownloadsPage();
+}
diff --git a/chrome/renderer/net/available_offline_content_helper.h b/chrome/renderer/net/available_offline_content_helper.h
index 8624fa44..550ed02 100644
--- a/chrome/renderer/net/available_offline_content_helper.h
+++ b/chrome/renderer/net/available_offline_content_helper.h
@@ -29,6 +29,10 @@
       base::OnceCallback<void(const std::string& offline_content_json)>
           callback);
 
+  // These methods just forward to the AvailableOfflineContentProvider.
+  void LaunchItem(const std::string& id, const std::string& name_space);
+  void LaunchDownloadsPage();
+
   // Abort previous requests and free the mojo connection.
   void Reset();
 
diff --git a/chrome/renderer/net/net_error_helper.cc b/chrome/renderer/net/net_error_helper.cc
index 5566801..827c059 100644
--- a/chrome/renderer/net/net_error_helper.cc
+++ b/chrome/renderer/net/net_error_helper.cc
@@ -159,6 +159,15 @@
   core_->TrackClick(tracking_id);
 }
 
+void NetErrorHelper::LaunchOfflineItem(const std::string& id,
+                                       const std::string& name_space) {
+  core_->LaunchOfflineItem(id, name_space);
+}
+
+void NetErrorHelper::LaunchDownloadsPage() {
+  core_->LaunchDownloadsPage();
+}
+
 void NetErrorHelper::SendCommand(
     security_interstitials::SecurityInterstitialCommand command) {
   security_interstitials::mojom::InterstitialCommandsAssociatedPtr interface;
diff --git a/chrome/renderer/net/net_error_helper.h b/chrome/renderer/net/net_error_helper.h
index 7d28552a..0f2b500d 100644
--- a/chrome/renderer/net/net_error_helper.h
+++ b/chrome/renderer/net/net_error_helper.h
@@ -65,6 +65,9 @@
   // NetErrorPageController::Delegate implementation
   void ButtonPressed(NetErrorHelperCore::Button button) override;
   void TrackClick(int tracking_id) override;
+  void LaunchOfflineItem(const std::string& id,
+                         const std::string& name_space) override;
+  void LaunchDownloadsPage() override;
 
   // SSLCertificateErrorPageController::Delegate implementation
   void SendCommand(
diff --git a/chrome/renderer/net/net_error_helper_core.cc b/chrome/renderer/net/net_error_helper_core.cc
index 122faa25..8cc4392 100644
--- a/chrome/renderer/net/net_error_helper_core.cc
+++ b/chrome/renderer/net/net_error_helper_core.cc
@@ -1062,3 +1062,16 @@
       committed_error_page_info_->navigation_correction_params->url,
       request_body);
 }
+
+void NetErrorHelperCore::LaunchOfflineItem(const std::string& id,
+                                           const std::string& name_space) {
+#if defined(OS_ANDROID)
+  available_content_helper_.LaunchItem(id, name_space);
+#endif
+}
+
+void NetErrorHelperCore::LaunchDownloadsPage() {
+#if defined(OS_ANDROID)
+  available_content_helper_.LaunchDownloadsPage();
+#endif
+}
diff --git a/chrome/renderer/net/net_error_helper_core.h b/chrome/renderer/net/net_error_helper_core.h
index 920d2c7..156ddab 100644
--- a/chrome/renderer/net/net_error_helper_core.h
+++ b/chrome/renderer/net/net_error_helper_core.h
@@ -215,6 +215,12 @@
   // the same tracking ID are ignored.
   void TrackClick(int tracking_id);
 
+  // Opens a suggested offline item.
+  void LaunchOfflineItem(const std::string& id, const std::string& name_space);
+
+  // Shows all available offline content.
+  void LaunchDownloadsPage();
+
  private:
   struct ErrorPageInfo;
 
diff --git a/chrome/renderer/net/net_error_helper_core_unittest.cc b/chrome/renderer/net/net_error_helper_core_unittest.cc
index 62e0c88c..d799a27e1 100644
--- a/chrome/renderer/net/net_error_helper_core_unittest.cc
+++ b/chrome/renderer/net/net_error_helper_core_unittest.cc
@@ -36,6 +36,7 @@
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "net/base/net_errors.h"
 #include "services/service_manager/public/cpp/connector.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
@@ -2613,6 +2614,10 @@
     }
   }
 
+  MOCK_METHOD2(LaunchItem,
+               void(const std::string& item_ID, const std::string& name_space));
+  MOCK_METHOD0(LaunchDownloadsPage, void());
+
   void AddBinding(mojo::ScopedMessagePipeHandle handle) {
     bindings_.AddBinding(this,
                          chrome::mojom::AvailableOfflineContentProviderRequest(
diff --git a/chrome/renderer/net/net_error_page_controller.cc b/chrome/renderer/net/net_error_page_controller.cc
index 3131094e..764d252 100644
--- a/chrome/renderer/net/net_error_page_controller.cc
+++ b/chrome/renderer/net/net_error_page_controller.cc
@@ -86,6 +86,20 @@
   return true;
 }
 
+void NetErrorPageController::LaunchOfflineItem(gin::Arguments* args) {
+  if (!delegate_)
+    return;
+  std::string id;
+  std::string name_space;
+  if (args->GetNext(&id) && args->GetNext(&name_space))
+    delegate_->LaunchOfflineItem(id, name_space);
+}
+
+void NetErrorPageController::LaunchDownloadsPage() {
+  if (delegate_)
+    delegate_->LaunchDownloadsPage();
+}
+
 NetErrorPageController::NetErrorPageController(base::WeakPtr<Delegate> delegate)
     : delegate_(delegate) {
 }
@@ -109,5 +123,9 @@
       .SetMethod("trackClick", &NetErrorPageController::TrackClick)
       .SetMethod("trackEasterEgg", &NetErrorPageController::TrackEasterEgg)
       .SetMethod("trackCachedCopyButtonClick",
-                 &NetErrorPageController::TrackCachedCopyButtonClick);
+                 &NetErrorPageController::TrackCachedCopyButtonClick)
+      .SetMethod("launchOfflineItem",
+                 &NetErrorPageController::LaunchOfflineItem)
+      .SetMethod("launchDownloadsPage",
+                 &NetErrorPageController::LaunchDownloadsPage);
 }
diff --git a/chrome/renderer/net/net_error_page_controller.h b/chrome/renderer/net/net_error_page_controller.h
index f734aad..6a0b9d3 100644
--- a/chrome/renderer/net/net_error_page_controller.h
+++ b/chrome/renderer/net/net_error_page_controller.h
@@ -32,6 +32,13 @@
     // Called when a link with the given tracking ID is pressed.
     virtual void TrackClick(int tracking_id) = 0;
 
+    // Called to open suggested offline content when it is pressed.
+    virtual void LaunchOfflineItem(const std::string& id,
+                                   const std::string& name_space) = 0;
+
+    // Called to show all available offline content.
+    virtual void LaunchDownloadsPage() = 0;
+
    protected:
     Delegate();
     virtual ~Delegate();
@@ -78,6 +85,9 @@
   // Used internally by other button click methods.
   bool ButtonClick(NetErrorHelperCore::Button button);
 
+  void LaunchOfflineItem(gin::Arguments* args);
+  void LaunchDownloadsPage();
+
   // gin::WrappableBase
   gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
       v8::Isolate* isolate) override;
diff --git a/chrome/renderer/page_load_metrics/fake_page_timing_sender.cc b/chrome/renderer/page_load_metrics/fake_page_timing_sender.cc
index 80c3472..e0e0987 100644
--- a/chrome/renderer/page_load_metrics/fake_page_timing_sender.cc
+++ b/chrome/renderer/page_load_metrics/fake_page_timing_sender.cc
@@ -18,10 +18,8 @@
     const mojom::PageLoadTimingPtr& timing,
     const mojom::PageLoadMetadataPtr& metadata,
     mojom::PageLoadFeaturesPtr new_features,
-    mojom::PageLoadDataUsePtr new_data_use,
     std::vector<mojom::ResourceDataUpdatePtr> resources) {
-  validator_->UpdateTiming(timing, metadata, new_features, new_data_use,
-                           resources);
+  validator_->UpdateTiming(timing, metadata, new_features, resources);
 }
 
 FakePageTimingSender::PageTimingValidator::PageTimingValidator() {}
@@ -97,7 +95,6 @@
     const mojom::PageLoadTimingPtr& timing,
     const mojom::PageLoadMetadataPtr& metadata,
     const mojom::PageLoadFeaturesPtr& new_features,
-    const mojom::PageLoadDataUsePtr& new_data_use,
     const std::vector<mojom::ResourceDataUpdatePtr>& resources) {
   actual_timings_.push_back(timing.Clone());
   for (const auto feature : new_features->features) {
diff --git a/chrome/renderer/page_load_metrics/fake_page_timing_sender.h b/chrome/renderer/page_load_metrics/fake_page_timing_sender.h
index 1d873a74..b41fcabf 100644
--- a/chrome/renderer/page_load_metrics/fake_page_timing_sender.h
+++ b/chrome/renderer/page_load_metrics/fake_page_timing_sender.h
@@ -72,7 +72,6 @@
         const mojom::PageLoadTimingPtr& timing,
         const mojom::PageLoadMetadataPtr& metadata,
         const mojom::PageLoadFeaturesPtr& new_features,
-        const mojom::PageLoadDataUsePtr& new_data_use,
         const std::vector<mojom::ResourceDataUpdatePtr>& resources);
 
    private:
@@ -90,7 +89,6 @@
   void SendTiming(const mojom::PageLoadTimingPtr& timing,
                   const mojom::PageLoadMetadataPtr& metadata,
                   mojom::PageLoadFeaturesPtr new_features,
-                  mojom::PageLoadDataUsePtr new_data_use,
                   std::vector<mojom::ResourceDataUpdatePtr> resources) override;
 
  private:
diff --git a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
index 98b5faf..1dd1209 100644
--- a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
+++ b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
@@ -42,12 +42,11 @@
       const mojom::PageLoadTimingPtr& timing,
       const mojom::PageLoadMetadataPtr& metadata,
       mojom::PageLoadFeaturesPtr new_features,
-      mojom::PageLoadDataUsePtr new_data_use,
       std::vector<mojom::ResourceDataUpdatePtr> resources) override {
     DCHECK(page_load_metrics_);
-    page_load_metrics_->UpdateTiming(
-        timing->Clone(), metadata->Clone(), std::move(new_features),
-        std::move(new_data_use), std::move(resources));
+    page_load_metrics_->UpdateTiming(timing->Clone(), metadata->Clone(),
+                                     std::move(new_features),
+                                     std::move(resources));
   }
 
  private:
@@ -111,8 +110,7 @@
     const network::URLLoaderCompletionStatus& status) {
   if (provisional_frame_resource_data_use_ &&
       provisional_frame_resource_data_use_->resource_id() == request_id) {
-    provisional_frame_resource_data_use_->DidCompleteResponse(
-        status, provisional_delta_data_use_.get());
+    provisional_frame_resource_data_use_->DidCompleteResponse(status);
   } else if (page_timing_metrics_sender_) {
     page_timing_metrics_sender_->DidCompleteResponse(request_id, status);
   }
@@ -133,7 +131,7 @@
   if (provisional_frame_resource_data_use_ &&
       provisional_frame_resource_data_use_->resource_id() == request_id) {
     provisional_frame_resource_data_use_->DidReceiveTransferSizeUpdate(
-        received_data_length, provisional_delta_data_use_.get());
+        received_data_length);
   } else if (page_timing_metrics_sender_) {
     page_timing_metrics_sender_->DidReceiveTransferSizeUpdate(
         request_id, received_data_length);
@@ -149,14 +147,12 @@
   // Create a new data use tracker for the new provisional load.
   provisional_frame_resource_data_use_ =
       std::make_unique<PageResourceDataUse>();
-  provisional_delta_data_use_ = mojom::PageLoadDataUse::New();
 }
 
 void MetricsRenderFrameObserver::DidFailProvisionalLoad(
     const blink::WebURLError& error) {
   // Clear the data use tracker for the provisional navigation that started.
   provisional_frame_resource_data_use_.reset();
-  provisional_delta_data_use_.reset();
 }
 
 void MetricsRenderFrameObserver::DidCommitProvisionalLoad(
@@ -178,8 +174,7 @@
 
   page_timing_metrics_sender_ = std::make_unique<PageTimingMetricsSender>(
       CreatePageTimingSender(), CreateTimer(), GetTiming(),
-      std::move(provisional_frame_resource_data_use_),
-      std::move(provisional_delta_data_use_));
+      std::move(provisional_frame_resource_data_use_));
 }
 
 void MetricsRenderFrameObserver::SendMetrics() {
diff --git a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.h b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.h
index 8959f55..39f9a3c 100644
--- a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.h
+++ b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.h
@@ -73,7 +73,6 @@
   // information from ongoing resource requests on the previous page (or right
   // before this page loads in a new renderer).
   std::unique_ptr<PageResourceDataUse> provisional_frame_resource_data_use_;
-  mojom::PageLoadDataUsePtr provisional_delta_data_use_;
 
   // Will be null when we're not actively sending metrics.
   std::unique_ptr<PageTimingMetricsSender> page_timing_metrics_sender_;
diff --git a/chrome/renderer/page_load_metrics/page_resource_data_use.cc b/chrome/renderer/page_load_metrics/page_resource_data_use.cc
index 3d1903c2..b892094 100644
--- a/chrome/renderer/page_load_metrics/page_resource_data_use.cc
+++ b/chrome/renderer/page_load_metrics/page_resource_data_use.cc
@@ -32,26 +32,17 @@
 }
 
 void PageResourceDataUse::DidReceiveTransferSizeUpdate(
-    int received_data_length,
-    mojom::PageLoadDataUse* delta_data_use) {
-  delta_data_use->received_data_length += received_data_length;
-  delta_data_use->data_reduction_proxy_bytes_saved +=
-      received_data_length *
-      (data_reduction_proxy_compression_ratio_estimate_ - 1.0);
+    int received_data_length) {
   total_received_bytes_ += received_data_length;
 }
 
 bool PageResourceDataUse::DidCompleteResponse(
-    const network::URLLoaderCompletionStatus& status,
-    mojom::PageLoadDataUse* delta_data_use) {
+    const network::URLLoaderCompletionStatus& status) {
   // Report the difference in received bytes.
   is_complete_ = true;
   int64_t delta_bytes = status.encoded_data_length - total_received_bytes_;
   if (delta_bytes > 0) {
     total_received_bytes_ += delta_bytes;
-    delta_data_use->received_data_length += delta_bytes;
-    delta_data_use->data_reduction_proxy_bytes_saved +=
-        delta_bytes * (data_reduction_proxy_compression_ratio_estimate_ - 1.0);
     return true;
   }
   return false;
@@ -79,6 +70,8 @@
   resource_data_update->received_data_length = total_received_bytes_;
   resource_data_update->delta_bytes = CalculateNewlyReceivedBytes();
   resource_data_update->is_complete = is_complete_;
+  resource_data_update->data_reduction_proxy_compression_ratio_estimate =
+      data_reduction_proxy_compression_ratio_estimate_;
   return resource_data_update;
 }
 }  // namespace page_load_metrics
diff --git a/chrome/renderer/page_load_metrics/page_resource_data_use.h b/chrome/renderer/page_load_metrics/page_resource_data_use.h
index 7391762..c1b18837 100644
--- a/chrome/renderer/page_load_metrics/page_resource_data_use.h
+++ b/chrome/renderer/page_load_metrics/page_resource_data_use.h
@@ -25,14 +25,11 @@
   void DidStartResponse(int resource_id,
                         const network::ResourceResponseHead& response_head);
 
-  // Updates any additional bytes of data use to |delta_data_use|.
-  void DidReceiveTransferSizeUpdate(int received_data_length,
-                                    mojom::PageLoadDataUse* delta_data_use);
+  // Updates received bytes.
+  void DidReceiveTransferSizeUpdate(int received_data_length);
 
-  // Updates additional bytes to |delta_data_use| and returns whether it was
-  // updated.
-  bool DidCompleteResponse(const network::URLLoaderCompletionStatus& status,
-                           mojom::PageLoadDataUse* delta_data_use);
+  // Updates received bytes from encoded length, returns whether it was updated.
+  bool DidCompleteResponse(const network::URLLoaderCompletionStatus& status);
 
   // Flags the resource as canceled.
   void DidCancelResponse();
diff --git a/chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc b/chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc
index 974ad11..e864155 100644
--- a/chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc
+++ b/chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc
@@ -29,14 +29,12 @@
     std::unique_ptr<PageTimingSender> sender,
     std::unique_ptr<base::OneShotTimer> timer,
     mojom::PageLoadTimingPtr initial_timing,
-    std::unique_ptr<PageResourceDataUse> initial_request,
-    mojom::PageLoadDataUsePtr initial_data_use)
+    std::unique_ptr<PageResourceDataUse> initial_request)
     : sender_(std::move(sender)),
       timer_(std::move(timer)),
       last_timing_(std::move(initial_timing)),
       metadata_(mojom::PageLoadMetadata::New()),
       new_features_(mojom::PageLoadFeatures::New()),
-      new_data_use_(std::move(initial_data_use)),
       buffer_timer_delay_ms_(kBufferTimerDelayMillis) {
   page_resource_data_use_.emplace(
       std::piecewise_construct,
@@ -115,8 +113,7 @@
     return;
   }
 
-  resource_it->second.DidReceiveTransferSizeUpdate(received_data_length,
-                                                   new_data_use_.get());
+  resource_it->second.DidReceiveTransferSizeUpdate(received_data_length);
   modified_resources_.insert(&resource_it->second);
   EnsureSendTimer();
 }
@@ -136,7 +133,7 @@
     resource_it = new_resource_it.first;
   }
 
-  if (resource_it->second.DidCompleteResponse(status, new_data_use_.get())) {
+  if (resource_it->second.DidCompleteResponse(status)) {
     EnsureSendTimer();
   }
   modified_resources_.insert(&resource_it->second);
@@ -189,9 +186,8 @@
     }
   }
   sender_->SendTiming(last_timing_, metadata_, std::move(new_features_),
-                      std::move(new_data_use_), std::move(resources));
+                      std::move(resources));
   new_features_ = mojom::PageLoadFeatures::New();
-  new_data_use_ = mojom::PageLoadDataUse::New();
   modified_resources_.clear();
 }
 
diff --git a/chrome/renderer/page_load_metrics/page_timing_metrics_sender.h b/chrome/renderer/page_load_metrics/page_timing_metrics_sender.h
index 4f0b611..6a1d9c14 100644
--- a/chrome/renderer/page_load_metrics/page_timing_metrics_sender.h
+++ b/chrome/renderer/page_load_metrics/page_timing_metrics_sender.h
@@ -38,8 +38,7 @@
   PageTimingMetricsSender(std::unique_ptr<PageTimingSender> sender,
                           std::unique_ptr<base::OneShotTimer> timer,
                           mojom::PageLoadTimingPtr initial_timing,
-                          std::unique_ptr<PageResourceDataUse> initial_request,
-                          mojom::PageLoadDataUsePtr initial_data_use);
+                          std::unique_ptr<PageResourceDataUse> initial_request);
   ~PageTimingMetricsSender();
 
   void DidObserveLoadingBehavior(blink::WebLoadingBehaviorFlag behavior);
@@ -72,8 +71,6 @@
   // A list of newly observed features during page load, to be sent to the
   // browser.
   mojom::PageLoadFeaturesPtr new_features_;
-  // Additional data use observed during the page load.
-  mojom::PageLoadDataUsePtr new_data_use_;
 
   std::bitset<static_cast<size_t>(blink::mojom::WebFeature::kNumberOfFeatures)>
       features_sent_;
diff --git a/chrome/renderer/page_load_metrics/page_timing_metrics_sender_unittest.cc b/chrome/renderer/page_load_metrics/page_timing_metrics_sender_unittest.cc
index 4e9f5dd..c829932d 100644
--- a/chrome/renderer/page_load_metrics/page_timing_metrics_sender_unittest.cc
+++ b/chrome/renderer/page_load_metrics/page_timing_metrics_sender_unittest.cc
@@ -22,8 +22,7 @@
       : PageTimingMetricsSender(std::move(page_timing_sender),
                                 std::make_unique<base::MockOneShotTimer>(),
                                 std::move(initial_timing),
-                                std::make_unique<PageResourceDataUse>(),
-                                mojom::PageLoadDataUse::New()) {}
+                                std::make_unique<PageResourceDataUse>()) {}
 
   base::MockOneShotTimer* mock_timer() const {
     return static_cast<base::MockOneShotTimer*>(timer());
diff --git a/chrome/renderer/page_load_metrics/page_timing_sender.h b/chrome/renderer/page_load_metrics/page_timing_sender.h
index 3ab07ea9..33b422a 100644
--- a/chrome/renderer/page_load_metrics/page_timing_sender.h
+++ b/chrome/renderer/page_load_metrics/page_timing_sender.h
@@ -18,7 +18,6 @@
       const mojom::PageLoadTimingPtr& timing,
       const mojom::PageLoadMetadataPtr& metadata,
       mojom::PageLoadFeaturesPtr new_features,
-      mojom::PageLoadDataUsePtr new_data_use,
       std::vector<mojom::ResourceDataUpdatePtr> resources) = 0;
 };
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 3c86f62b..e0e6e75e 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -795,6 +795,7 @@
       "../browser/storage/durable_storage_browsertest.cc",
       "../browser/subresource_filter/ad_delay_browsertest.cc",
       "../browser/subresource_filter/ad_tagging_browsertest.cc",
+      "../browser/subresource_filter/ruleset_browsertest.cc",
       "../browser/subresource_filter/subresource_filter_browser_test_harness.cc",
       "../browser/subresource_filter/subresource_filter_browser_test_harness.h",
       "../browser/subresource_filter/subresource_filter_browsertest.cc",
diff --git a/chrome/test/chromedriver/log_replay/client_replay_test.py b/chrome/test/chromedriver/log_replay/client_replay_test.py
index 777bee3..d27a463 100755
--- a/chrome/test/chromedriver/log_replay/client_replay_test.py
+++ b/chrome/test/chromedriver/log_replay/client_replay_test.py
@@ -33,15 +33,6 @@
 sys.path.remove(_TEST_DIR)
 # pylint: enable=g-import-not-at-top, g-bad-import-order
 
-_VERSION_SPECIFIC_NEGATIVE_FILTER = {}
-
-_VERSION_SPECIFIC_NEGATIVE_FILTER["67"] = [
-    # The wording of an error changed between Chrome 67 and 68 that makes
-    # testCloseWindow fail because we compare the newer error in the log
-    # file to the old error given by Chrome 67 and find a difference.
-    "*testCloseWindow"
-]
-
 
 def SubstituteVariableEntries(s):
   """Identifies and removes items that can legitimately vary between runs."""
@@ -206,14 +197,6 @@
   def testChromeBinary(self):
     self.runTest("test_data/testChromeBinary.log")
 
-
-def GetNegativeFilter(chrome_version):
-  if chrome_version in _VERSION_SPECIFIC_NEGATIVE_FILTER:
-    negative_filter = _VERSION_SPECIFIC_NEGATIVE_FILTER[chrome_version]
-    return "*-" + ":__main__.".join([""] + negative_filter)
-  return "*"
-
-
 def main():
   usage = "usage: %prog <chromedriver binary> [options]"
   parser = optparse.OptionParser(usage=usage)
@@ -223,17 +206,11 @@
   parser.add_option(
       "", "--chrome", help="Path to the desired Chrome binary.")
   parser.add_option(
-      "", "--chrome-version", default="HEAD",
-      help="Version of Chrome. Default is 'HEAD'.")
-  parser.add_option(
-      "", "--filter", type="string", default="",
-      help="Filter for specifying what tests to run, \"*\" will run all,"
-      "including tests excluded by default. E.g., *testRunMethod")
+      "", "--filter", type="string", default="*",
+      help="Filter for specifying what tests to run, \"*\" will run all. E.g., "
+      "*testRunMethod")
 
-  # Need global to access these from the test runner.
-  # pylint: disable=global-variable-undefined
   global _OPTIONS, _CHROMEDRIVER
-  # pylint: enable=global-variable-undefined
   _OPTIONS, args = parser.parse_args()
   _CHROMEDRIVER = util.GetAbsolutePathOfUserPath(args[0])
   if not os.path.exists(_CHROMEDRIVER):
@@ -245,13 +222,9 @@
 
   all_tests_suite = unittest.defaultTestLoader.loadTestsFromModule(
       sys.modules[__name__])
-
-  test_filter = (GetNegativeFilter(_OPTIONS.chrome_version)
-                 if _OPTIONS.filter == "" else _OPTIONS.filter)
-
-  tests = unittest_util.FilterTestSuite(all_tests_suite, test_filter)
+  tests = unittest_util.FilterTestSuite(all_tests_suite, _OPTIONS.filter)
   result = unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run(tests)
   sys.exit(len(result.failures) + len(result.errors))
 
 if __name__ == "__main__":
-  main()
+  main()
\ No newline at end of file
diff --git a/chrome/test/chromedriver/test/run_all_tests.py b/chrome/test/chromedriver/test/run_all_tests.py
index 5abd2b7..f2f467b 100755
--- a/chrome/test/chromedriver/test/run_all_tests.py
+++ b/chrome/test/chromedriver/test/run_all_tests.py
@@ -14,7 +14,6 @@
 import traceback
 
 _THIS_DIR = os.path.abspath(os.path.dirname(__file__))
-_PARENT_DIR = os.path.join(_THIS_DIR, os.pardir)
 sys.path.insert(0, os.path.join(_THIS_DIR, os.pardir))
 
 import archive
@@ -58,32 +57,6 @@
   return cmd
 
 
-def RunReplayTests(chromedriver, chrome=None,
-                   chrome_version=None, chrome_version_name=None):
-  version_info = ''
-  if chrome_version_name:
-    version_info = '(%s)' % chrome_version_name
-  util.MarkBuildStepStart('replay_tests%s' % version_info)
-
-  _, log_path = tempfile.mkstemp(prefix='chromedriver_log_')
-  print 'chromedriver server log: %s' % log_path
-  cmd = [
-    sys.executable,
-    os.path.join(_PARENT_DIR, 'log_replay', 'client_replay_test.py'),
-    chromedriver,
-    '--output-log-path=%s' % log_path
-  ]
-  if chrome:
-    cmd.append('--chrome=%s' % chrome)
-  if chrome_version:
-    cmd.append('--chrome-version=%s' % chrome_version)
-  code = util.RunCommand(cmd)
-
-  if code:
-    util.MarkBuildStepError()
-  return code
-
-
 def RunPythonTests(chromedriver, ref_chromedriver,
                    chrome=None, chrome_version=None,
                    chrome_version_name=None, android_package=None):
@@ -258,11 +231,7 @@
                            chrome_version=version,
                            chrome_version_name='v%s' % version_name,
                            verbose=True)
-      code3 = RunReplayTests(chromedriver,
-                             chrome=chrome_path,
-                             chrome_version=version,
-                             chrome_version_name='v%s' % version_name)
-      code = code or code1 or code2 or code3
+      code = code or code1 or code2
       _KillChromes()
       shutil.rmtree(temp_dir)
     cpp_tests = os.path.join(build_dir, cpp_tests_name)
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py
index a5a2e14..c14ed96 100755
--- a/chrome/test/chromedriver/test/run_py_tests.py
+++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -101,6 +101,11 @@
     'HeadlessInvalidCertificateTest.*',
 ]
 
+_VERSION_SPECIFIC_FILTER['68'] = []
+
+_VERSION_SPECIFIC_FILTER['67'] = []
+
+
 _OS_SPECIFIC_FILTER = {}
 _OS_SPECIFIC_FILTER['win'] = [
     # https://bugs.chromium.org/p/chromedriver/issues/detail?id=299
@@ -2889,9 +2894,9 @@
       '', '--chrome-version', default='HEAD',
       help='Version of chrome. Default is \'HEAD\'.')
   parser.add_option(
-      "", "--filter", type="string", default="",
-      help="Filter for specifying what tests to run, \"*\" will run all,"
-      "including tests excluded by default. E.g., *testRunMethod")
+      '', '--filter', type='string', default='*',
+      help=('Filter for specifying what tests to run, "*" will run all. E.g., '
+            '*testStartStop'))
   parser.add_option(
       '', '--android-package',
       help=('Android package key. Possible values: ' +
@@ -2949,7 +2954,7 @@
   if _ANDROID_PACKAGE_KEY:
     devil_chromium.Initialize()
 
-  if options.filter == '':
+  if options.filter == '*':
     if _ANDROID_PACKAGE_KEY:
       negative_filter = _ANDROID_NEGATIVE_FILTER[_ANDROID_PACKAGE_KEY]
     else:
diff --git a/chrome/test/data/extensions/platform_apps/touchpad_pinch/background.js b/chrome/test/data/extensions/platform_apps/touchpad_pinch/background.js
deleted file mode 100644
index 3c9f502..0000000
--- a/chrome/test/data/extensions/platform_apps/touchpad_pinch/background.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-chrome.app.runtime.onLaunched.addListener(function() {
-  chrome.app.window.create('window.html');
-});
diff --git a/chrome/test/data/extensions/platform_apps/touchpad_pinch/manifest.json b/chrome/test/data/extensions/platform_apps/touchpad_pinch/manifest.json
deleted file mode 100644
index c47a5d4..0000000
--- a/chrome/test/data/extensions/platform_apps/touchpad_pinch/manifest.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "Touchpad pinch synthetic wheel event",
-  "version": "1",
-  "manifest_version": 2,
-  "app": {
-    "background": {
-      "scripts": ["background.js"]
-    }
-  }
-}
diff --git a/chrome/test/data/extensions/platform_apps/touchpad_pinch/window.html b/chrome/test/data/extensions/platform_apps/touchpad_pinch/window.html
deleted file mode 100644
index 8047bf9..0000000
--- a/chrome/test/data/extensions/platform_apps/touchpad_pinch/window.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
- * Copyright (c) 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.
--->
-<html>
-<head>
-  <style>
-    html,body {
-     height: 100%;
-    }
-  </style>
-</head>
-<body>
-  <p>Hello.</p>
-  <script src="window.js"></script>
-</body>
-</html>
diff --git a/chrome/test/data/extensions/platform_apps/touchpad_pinch/window.js b/chrome/test/data/extensions/platform_apps/touchpad_pinch/window.js
deleted file mode 100644
index f260647..0000000
--- a/chrome/test/data/extensions/platform_apps/touchpad_pinch/window.js
+++ /dev/null
@@ -1,10 +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.
-
-window.onload = () => {
-  document.body.addEventListener('wheel', (e) => {
-    chrome.test.sendMessage('Seen wheel event');
-  });
-  chrome.test.sendMessage('Launched');
-};
diff --git a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/embedder.html b/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/embedder.html
deleted file mode 100644
index 72a7e7af..0000000
--- a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/embedder.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
- * Copyright (c) 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.
--->
-<html>
-<body>
-<script src="embedder.js"></script>
-</body>
-</html>
diff --git a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/embedder.js b/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/embedder.js
deleted file mode 100644
index 7fc9d1a..0000000
--- a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/embedder.js
+++ /dev/null
@@ -1,20 +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.
-
-window.onload = () => {
-  chrome.test.getConfig(function(config) {
-    var guestURL = 'http://localhost:' + config.testServer.port +
-        '/extensions/platform_apps/web_view/touchpad_pinch/guest.html';
-    var webview = document.createElement('webview');
-    webview.src = guestURL;
-    webview.addEventListener('loadstop', () => {
-      webview.contentWindow.postMessage({}, '*');
-    });
-    document.body.appendChild(webview);
-  });
-};
-
-window.addEventListener('message', (e) => {
-  chrome.test.sendMessage(e.data);
-});
diff --git a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/guest.html b/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/guest.html
deleted file mode 100644
index d2ae6764..0000000
--- a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/guest.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
- * Copyright (c) 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.
--->
-<html>
-<head>
-  <style>
-    html,body {
-     height: 100%;
-    }
-  </style>
-</head>
-<body>
-  <p>Hello.</p>
-  <script src="guest.js"></script>
-</body>
-</html>
diff --git a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/guest.js b/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/guest.js
deleted file mode 100644
index bca3c5a4..0000000
--- a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/guest.js
+++ /dev/null
@@ -1,16 +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.
-
-var parentWindow = null;
-
-window.onload = () => {
-  document.body.addEventListener('wheel', (e) => {
-    parentWindow.postMessage('Seen wheel event', '*');
-  });
-};
-
-window.addEventListener('message', (e) => {
-  parentWindow = e.source;
-  parentWindow.postMessage('WebViewTest.LAUNCHED', '*');
-});
diff --git a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/manifest.json b/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/manifest.json
deleted file mode 100644
index b58b16f..0000000
--- a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/manifest.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "name": "<webview> Touchpad pinch synthetic wheel event",
-  "version": "1",
-  "manifest_version": 2,
-  "permissions": [
-    "webview"
-  ],
-  "app": {
-    "background": {
-      "scripts": ["test.js"]
-    }
-  }
-}
diff --git a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/test.js b/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/test.js
deleted file mode 100644
index 1bb2b22..0000000
--- a/chrome/test/data/extensions/platform_apps/web_view/touchpad_pinch/test.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-chrome.app.runtime.onLaunched.addListener(function() {
-  chrome.app.window.create('embedder.html');
-});
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js
index fe3bd4b..c9c06cad 100644
--- a/chrome/test/data/webui/settings/cr_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -1851,6 +1851,54 @@
 });
 
 /**
+ * Test fixture for the multidevice settings subpage feature item.
+ * @constructor
+ * @extends {CrSettingsBrowserTest}
+ */
+function CrSettingsMultideviceFeatureItemTest() {}
+
+CrSettingsMultideviceFeatureItemTest.prototype = {
+  __proto__: CrSettingsBrowserTest.prototype,
+
+  /** @override */
+  browsePreload:
+      'chrome://settings/multidevice_page/multidevice_feature_item.html',
+
+  /** @override */
+  extraLibraries: CrSettingsBrowserTest.prototype.extraLibraries.concat([
+    'multidevice_feature_item_tests.js',
+  ]),
+};
+
+TEST_F('CrSettingsMultideviceFeatureItemTest', 'All', function() {
+  mocha.run();
+});
+
+/**
+ * Test fixture for the multidevice settings subpage feature toggle.
+ * @constructor
+ * @extends {CrSettingsBrowserTest}
+ */
+function CrSettingsMultideviceFeatureToggleTest() {}
+
+CrSettingsMultideviceFeatureToggleTest.prototype = {
+  __proto__: CrSettingsBrowserTest.prototype,
+
+  /** @override */
+  browsePreload:
+      'chrome://settings/multidevice_page/multidevice_feature_toggle.html',
+
+  /** @override */
+  extraLibraries: CrSettingsBrowserTest.prototype.extraLibraries.concat([
+    'multidevice_feature_toggle_tests.js',
+  ]),
+};
+
+TEST_F('CrSettingsMultideviceFeatureToggleTest', 'All', function() {
+  mocha.run();
+});
+
+/**
  * Test fixture for the multidevice settings page container.
  * @constructor
  * @extends {CrSettingsBrowserTest}
diff --git a/chrome/test/data/webui/settings/multidevice_feature_item_tests.js b/chrome/test/data/webui/settings/multidevice_feature_item_tests.js
new file mode 100644
index 0000000..128628c
--- /dev/null
+++ b/chrome/test/data/webui/settings/multidevice_feature_item_tests.js
@@ -0,0 +1,121 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+suite('Multidevice', function() {
+  /** @type {?SettingsMultideviceFeatureItemElement} */
+  let featureItem = null;
+  /** @type {?SettingsMultideviceFeatureToggleElement} */
+  let featureToggle = null;
+  /** @type {?CrToggleElement} */
+  let crToggle = null;
+  /** @type {?settings.MultiDeviceFeatureState} */
+  let featureState = null;
+
+  /** @type {!settings.Route} */
+  let initialRoute;
+
+  // Fake MultiDeviceFeature enum value
+  const FAKE_MULTIDEVICE_FEATURE = -1;
+  const FAKE_SUMMARY_HTML = 'Gives you candy <a href="link">Learn more.</a>';
+
+  /** Resets both the suite and the (fake) feature to on state. */
+  function resetFeatureData() {
+    featureState = settings.MultiDeviceFeatureState.ENABLED_BY_USER;
+    featureItem.pageContentData = {
+      betterTogetherState: settings.MultiDeviceFeatureState.ENABLED_BY_USER,
+    };
+    Polymer.dom.flush();
+    assertFalse(crToggle.disabled);
+    assertTrue(crToggle.checked);
+  }
+
+  /**
+   * Override the cr-toggle's state. Because cr-toggle handles clicks
+   * differently depending on its state (e.g., turns off PointerEvents when it's
+   * disabled), we use this to check that the toggle can't enter a state where
+   * clicking on it causes the page to nagivate away.
+   * @param {boolean} checked
+   * @param {boolean} disabled
+   */
+  function setCrToggle(checked, disabled) {
+    crToggle.checked = checked;
+    crToggle.disabled = disabled;
+  }
+
+  /**
+   * Clicks an element, asserts whether the click navigated the page away to a
+   * new route, then navigates back to initialRoute.
+   * @param {HTMLElement} element. Target of click.
+   * @param {boolean} shouldRouteAway. Whether the page is expected to navigate
+   * to a new route.
+   */
+  function checkWhetherClickRoutesAway(element, shouldRouteAway) {
+    element.click();
+    Polymer.dom.flush();
+    assertEquals(shouldRouteAway, initialRoute !== settings.getCurrentRoute());
+    settings.navigateTo(initialRoute);
+    assertEquals(initialRoute, settings.getCurrentRoute());
+  }
+
+  setup(function() {
+    PolymerTest.clearBody();
+
+    featureItem = document.createElement('settings-multidevice-feature-item');
+    featureItem.getFeatureSummaryHtml = () => FAKE_SUMMARY_HTML;
+    featureItem.feature = FAKE_MULTIDEVICE_FEATURE;
+    featureItem.pageContentData = {};
+    document.body.appendChild(featureItem);
+    Polymer.dom.flush();
+
+    featureToggle = featureItem.$$('settings-multidevice-feature-toggle');
+    featureToggle.getFeatureState = () => featureState;
+
+    crToggle = featureToggle.$.toggle;
+
+    initialRoute = settings.routes.MULTIDEVICE_FEATURES;
+    settings.routes.FREE_CANDY =
+        settings.routes.BASIC.createSection('/freeCandy');
+    featureItem.subpageRoute = settings.routes.FREE_CANDY;
+
+    resetFeatureData();
+    settings.navigateTo(initialRoute);
+    Polymer.dom.flush();
+  });
+
+  teardown(function() {
+    featureItem.remove();
+  });
+
+  test('generic click navigates to subpage', function() {
+    checkWhetherClickRoutesAway(featureItem.$$('#item-text-container'), true);
+    checkWhetherClickRoutesAway(featureItem.$$('iron-icon'), true);
+    checkWhetherClickRoutesAway(featureItem.$$('#featureSecondary'), true);
+  });
+
+  test('link click does not navigate to subpage', function() {
+    const link = featureItem.$$('#featureSecondary > a');
+    assertTrue(!!link);
+    checkWhetherClickRoutesAway(link, false);
+  });
+
+  test('toggle click does not navigate to subpage in any state', function() {
+    checkWhetherClickRoutesAway(featureToggle, false);
+
+    // Checked and enabled
+    setCrToggle(true, true);
+    checkWhetherClickRoutesAway(crToggle, false);
+
+    // Checked and disabled
+    setCrToggle(true, false);
+    checkWhetherClickRoutesAway(crToggle, false);
+
+    // Unchecked and enabled
+    setCrToggle(false, true);
+    checkWhetherClickRoutesAway(crToggle, false);
+
+    // Unchecked and disabled
+    setCrToggle(false, false);
+    checkWhetherClickRoutesAway(crToggle, false);
+  });
+});
diff --git a/chrome/test/data/webui/settings/multidevice_feature_toggle_tests.js b/chrome/test/data/webui/settings/multidevice_feature_toggle_tests.js
new file mode 100644
index 0000000..1db39d8
--- /dev/null
+++ b/chrome/test/data/webui/settings/multidevice_feature_toggle_tests.js
@@ -0,0 +1,132 @@
+// 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.
+
+/**
+ * @fileoverview
+ * Suite of tests for settings-multidevice-feature-toggle element. For
+ * simplicity, we provide the toggle with a real feature (i.e. messages) as a
+ * stand-in for a generic feature.
+ */
+suite('Multidevice', () => {
+  /** @type {?SettingsMultideviceFeatureToggleElement} */
+  let featureToggle = null;
+  /** @type {?CrToggleElement} */
+  let crToggle = null;
+
+  /**
+   * Sets the state of the feature shown in the toggle (i.e. Messages). Note
+   * that in order to trigger featureToggle's bindings to update, we set its
+   * pageContentData to a new object as the actual UI does.
+   * @param {?settings.MultiDeviceFeatureState} newMessagesState. New value for
+   * featureToggle.pageContentData.messagesState.
+   */
+  function setMessagesState(newMessagesState) {
+    featureToggle.pageContentData = Object.assign(
+        {}, featureToggle.pageContentData, {messagesState: newMessagesState});
+    Polymer.dom.flush();
+  }
+
+  /**
+   * Sets the state of the feature suite. Note that in order to trigger
+   * featureToggle's bindings to update, we set its pageContentData to a new
+   * object as the actual UI does.
+   * @param {?settings.MultiDeviceFeatureState} newSuiteState. New value for
+   * featureToggle.pageContentData.betterTogetherState.
+   */
+  function setSuiteState(newSuiteState) {
+    featureToggle.pageContentData = Object.assign(
+        {}, featureToggle.pageContentData,
+        {betterTogetherState: newSuiteState});
+    Polymer.dom.flush();
+  }
+
+  setup(() => {
+    PolymerTest.clearBody();
+
+    featureToggle =
+        document.createElement('settings-multidevice-feature-toggle');
+    featureToggle.feature = settings.MultiDeviceFeature.MESSAGES;
+    // Initially toggle will be unchecked but not disabled. Note that the word
+    // "disabled" is ambiguous for feature toggles because it can refer to the
+    // feature or the cr-toggle property/attribute. DISABLED_BY_USER refers to
+    // the former so it unchecks but does not functionally disable the toggle.
+    featureToggle.pageContentData = {
+      betterTogetherState: settings.MultiDeviceFeatureState.ENABLED_BY_USER,
+      messagesState: settings.MultiDeviceFeatureState.DISABLED_BY_USER,
+    };
+    document.body.appendChild(featureToggle);
+    Polymer.dom.flush();
+
+    crToggle = featureToggle.$.toggle;
+
+    assertFalse(featureToggle.checked_);
+    assertFalse(crToggle.checked);
+    assertFalse(crToggle.disabled);
+  });
+
+  test('checked property can be set by feature state', () => {
+    setMessagesState(settings.MultiDeviceFeatureState.ENABLED_BY_USER);
+    assertTrue(featureToggle.checked_);
+    assertTrue(crToggle.checked);
+
+    setMessagesState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
+    assertFalse(featureToggle.checked_);
+    assertFalse(crToggle.checked);
+  });
+
+  test('disabled property can be set by feature state', () => {
+    setMessagesState(settings.MultiDeviceFeatureState.DISABLED_BY_POLICY);
+    assertTrue(crToggle.disabled);
+
+    setMessagesState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
+    assertFalse(crToggle.disabled);
+  });
+
+  test('disabled and checked properties update simultaneously', () => {
+    setMessagesState(settings.MultiDeviceFeatureState.ENABLED_BY_USER);
+    assertTrue(featureToggle.checked_);
+    assertTrue(crToggle.checked);
+    assertFalse(crToggle.disabled);
+
+    setMessagesState(settings.MultiDeviceFeatureState.DISABLED_BY_POLICY);
+    assertFalse(featureToggle.checked_);
+    assertFalse(crToggle.checked);
+    assertTrue(crToggle.disabled);
+
+    setMessagesState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
+    assertFalse(featureToggle.checked_);
+    assertFalse(crToggle.checked);
+    assertFalse(crToggle.disabled);
+  });
+
+  test('disabled property can be set by suite pref', () => {
+    setSuiteState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
+    Polymer.dom.flush();
+    assertTrue(crToggle.disabled);
+
+    setSuiteState(settings.MultiDeviceFeatureState.ENABLED_BY_USER);
+    Polymer.dom.flush();
+    assertFalse(crToggle.disabled);
+  });
+
+  test('checked property is unaffected by suite pref', () => {
+    setMessagesState(settings.MultiDeviceFeatureState.ENABLED_BY_USER);
+    assertTrue(featureToggle.checked_);
+    assertTrue(crToggle.checked);
+    assertFalse(crToggle.disabled);
+
+    setSuiteState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
+    Polymer.dom.flush();
+    assertTrue(featureToggle.checked_);
+    assertTrue(crToggle.checked);
+    assertTrue(crToggle.disabled);
+  });
+
+  test('clicking toggle does not change checked property', () => {
+    const preClickCrToggleChecked = crToggle.checked;
+    crToggle.click();
+    Polymer.dom.flush();
+    assertEquals(crToggle.checked, preClickCrToggleChecked);
+  });
+});
diff --git a/chromecast/app/android/crash_handler.cc b/chromecast/app/android/crash_handler.cc
index ad96202..60bbd11 100644
--- a/chromecast/app/android/crash_handler.cc
+++ b/chromecast/app/android/crash_handler.cc
@@ -14,6 +14,7 @@
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "chromecast/app/android/cast_crash_reporter_client_android.h"
+#include "chromecast/base/chromecast_config_android.h"
 #include "chromecast/base/version.h"
 #include "components/crash/content/app/breakpad_linux.h"
 #include "components/crash/content/app/crash_reporter_client.h"
@@ -77,25 +78,18 @@
 
 void CrashHandler::Initialize() {
   if (process_type_.empty()) {
-    InitializeUploader();
     breakpad::InitCrashReporter(process_type_);
     return;
   }
-
   if (process_type_ != service_manager::switches::kZygoteProcess) {
     breakpad::InitNonBrowserCrashReporterForAndroid(process_type_);
   }
 }
 
-void CrashHandler::InitializeUploader() {
-  CrashHandler::UploadDumps(crash_dump_path_, "", "", true);
-}
-
 // static
 void CrashHandler::UploadDumps(const base::FilePath& crash_dump_path,
                                const std::string& uuid,
-                               const std::string& application_feedback,
-                               bool periodic_upload) {
+                               const std::string& application_feedback) {
   JNIEnv* env = base::android::AttachCurrentThread();
   base::android::ScopedJavaLocalRef<jstring> crash_dump_path_java =
       base::android::ConvertUTF8ToJavaString(env, crash_dump_path.value());
@@ -103,9 +97,18 @@
       base::android::ConvertUTF8ToJavaString(env, uuid);
   base::android::ScopedJavaLocalRef<jstring> application_feedback_java =
       base::android::ConvertUTF8ToJavaString(env, application_feedback);
-  Java_CastCrashHandler_initializeUploader(
-      env, crash_dump_path_java, uuid_java, application_feedback_java,
-      UploadCrashToStaging(), periodic_upload);
+  bool can_send_usage_stats =
+      android::ChromecastConfigAndroid::GetInstance()->CanSendUsageStats();
+
+  if (can_send_usage_stats) {
+    Java_CastCrashHandler_uploadOnce(env, crash_dump_path_java, uuid_java,
+                                     application_feedback_java,
+                                     UploadCrashToStaging());
+  } else {
+    Java_CastCrashHandler_removeCrashDumps(env, crash_dump_path_java, uuid_java,
+                                           application_feedback_java,
+                                           UploadCrashToStaging());
+  }
 }
 
 }  // namespace chromecast
diff --git a/chromecast/app/android/crash_handler.h b/chromecast/app/android/crash_handler.h
index 73006627..8a3c5b0 100644
--- a/chromecast/app/android/crash_handler.h
+++ b/chromecast/app/android/crash_handler.h
@@ -28,8 +28,7 @@
   static bool GetCrashDumpLocation(base::FilePath* crash_dir);
   static void UploadDumps(const base::FilePath& crash_dump_path,
                           const std::string& uuid,
-                          const std::string& application_feedback,
-                          bool periodic_upload);
+                          const std::string& application_feedback);
 
  private:
   CrashHandler(const std::string& process_type,
@@ -38,9 +37,6 @@
 
   void Initialize();
 
-  // Starts a thread to periodically check for uploads
-  void InitializeUploader();
-
   // Path to the current process's log file.
   base::FilePath log_file_path_;
 
diff --git a/chromecast/base/BUILD.gn b/chromecast/base/BUILD.gn
index 04d7696..f1fcc55 100644
--- a/chromecast/base/BUILD.gn
+++ b/chromecast/base/BUILD.gn
@@ -55,8 +55,6 @@
     "cast_paths.h",
     "cast_resource.cc",
     "cast_resource.h",
-    "chromecast_config_android.cc",
-    "chromecast_config_android.h",
     "device_capabilities.h",
     "device_capabilities_impl.cc",
     "device_capabilities_impl.h",
@@ -104,6 +102,18 @@
   } else {
     deps += [ "//chromecast/internal/base:cast_internal_features" ]
   }
+
+  if (is_android) {
+    sources += [ "chromecast_config_android.h" ]
+    if (chromecast_branding == "public") {
+      sources += [ "chromecast_config_android_dummy.cc" ]
+    } else {
+      sources +=
+          [ "//chromecast/internal/base/chromecast_config_android_internal.cc" ]
+      deps +=
+          [ "//chromecast/internal/base:chromecast_config_android_jni_headers" ]
+    }
+  }
 }
 
 # chromecast related switch values
@@ -289,7 +299,6 @@
 if (is_android) {
   generate_jni("jni_headers") {
     sources = [
-      "java/src/org/chromium/chromecast/base/ChromecastConfigAndroid.java",
       "java/src/org/chromium/chromecast/base/DumpstateWriter.java",
       "java/src/org/chromium/chromecast/base/SystemTimeChangeNotifierAndroid.java",
     ]
@@ -320,7 +329,6 @@
       # TODO(sanfin): Move these files to another target.
       "$java_src_dir/org/chromium/chromecast/base/CastSettingsManager.java",
       "$java_src_dir/org/chromium/chromecast/base/CastSwitches.java",
-      "$java_src_dir/org/chromium/chromecast/base/ChromecastConfigAndroid.java",
       "$java_src_dir/org/chromium/chromecast/base/DumpstateWriter.java",
       "$java_src_dir/org/chromium/chromecast/base/SystemTimeChangeNotifierAndroid.java",
     ]
diff --git a/chromecast/base/chromecast_config_android.cc b/chromecast/base/chromecast_config_android.cc
deleted file mode 100644
index 96b2b8b..0000000
--- a/chromecast/base/chromecast_config_android.cc
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chromecast/base/chromecast_config_android.h"
-
-#include <utility>
-
-#include "base/android/jni_android.h"
-#include "jni/ChromecastConfigAndroid_jni.h"
-
-using base::android::JavaParamRef;
-
-namespace chromecast {
-namespace android {
-
-// static
-ChromecastConfigAndroid* ChromecastConfigAndroid::GetInstance() {
-  static base::NoDestructor<ChromecastConfigAndroid> instance;
-  return instance.get();
-}
-
-ChromecastConfigAndroid::ChromecastConfigAndroid() {
-}
-
-ChromecastConfigAndroid::~ChromecastConfigAndroid() {
-}
-
-bool ChromecastConfigAndroid::CanSendUsageStats() {
-  // TODO(sanfin): make opt-in.stats pref the source of truth for this data,
-  // instead of Android prefs, then delete ChromecastConfigAndroid.
-  JNIEnv* env = base::android::AttachCurrentThread();
-  return Java_ChromecastConfigAndroid_canSendUsageStats(env);
-}
-
-void ChromecastConfigAndroid::SetSendUsageStats(bool enabled) {
-  JNIEnv* env = base::android::AttachCurrentThread();
-  Java_ChromecastConfigAndroid_setSendUsageStats(env, enabled);
-}
-
-// Registers a handler to be notified when SendUsageStats is changed.
-void ChromecastConfigAndroid::SetSendUsageStatsChangedCallback(
-    base::RepeatingCallback<void(bool)> callback) {
-  send_usage_stats_changed_callback_ = std::move(callback);
-}
-
-void ChromecastConfigAndroid::RunSendUsageStatsChangedCallback(bool enabled) {
-  send_usage_stats_changed_callback_.Run(enabled);
-}
-
-// Called from Java.
-void JNI_ChromecastConfigAndroid_SetSendUsageStatsEnabled(
-    JNIEnv* env,
-    const JavaParamRef<jclass>& caller,
-    jboolean enabled) {
-  ChromecastConfigAndroid::GetInstance()->RunSendUsageStatsChangedCallback(
-      enabled);
-}
-
-}  // namespace android
-}  // namespace chromecast
diff --git a/chromecast/base/chromecast_config_android.h b/chromecast/base/chromecast_config_android.h
index d200906..3b38e88 100644
--- a/chromecast/base/chromecast_config_android.h
+++ b/chromecast/base/chromecast_config_android.h
@@ -5,8 +5,6 @@
 #ifndef CHROMECAST_BASE_CHROMECAST_CONFIG_ANDROID_H_
 #define CHROMECAST_BASE_CHROMECAST_CONFIG_ANDROID_H_
 
-#include <jni.h>
-
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/no_destructor.h"
@@ -20,24 +18,20 @@
 
   // Returns whether or not the user has allowed sending usage stats and
   // crash reports.
-  bool CanSendUsageStats();
-
-  void SetSendUsageStats(bool enabled);
+  virtual bool CanSendUsageStats() = 0;
 
   // Registers a handler to be notified when SendUsageStats is changed.
-  void SetSendUsageStatsChangedCallback(
-      base::RepeatingCallback<void(bool)> callback);
+  virtual void SetSendUsageStatsChangedCallback(
+      base::RepeatingCallback<void(bool)> callback) = 0;
 
-  void RunSendUsageStatsChangedCallback(bool enabled);
+  virtual void RunSendUsageStatsChangedCallback(bool enabled) = 0;
+
+ protected:
+  ChromecastConfigAndroid() {}
+
+  virtual ~ChromecastConfigAndroid() {}
 
  private:
-  friend class base::NoDestructor<ChromecastConfigAndroid>;
-
-  ChromecastConfigAndroid();
-  ~ChromecastConfigAndroid();
-
-  base::RepeatingCallback<void(bool)> send_usage_stats_changed_callback_;
-
   DISALLOW_COPY_AND_ASSIGN(ChromecastConfigAndroid);
 };
 
diff --git a/chromecast/base/chromecast_config_android_dummy.cc b/chromecast/base/chromecast_config_android_dummy.cc
new file mode 100644
index 0000000..cc7e820
--- /dev/null
+++ b/chromecast/base/chromecast_config_android_dummy.cc
@@ -0,0 +1,37 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromecast/base/chromecast_config_android.h"
+
+namespace chromecast {
+namespace android {
+
+// Dummy implementation of android::ChromecastConfigAndroid.
+class ChromecastConfigAndroidDummy : public ChromecastConfigAndroid {
+ public:
+  ChromecastConfigAndroidDummy() {}
+
+  ~ChromecastConfigAndroidDummy() override {}
+
+  bool CanSendUsageStats() override { return false; }
+
+  void SetSendUsageStatsChangedCallback(
+      base::RepeatingCallback<void(bool)> callback) override {}
+
+  void RunSendUsageStatsChangedCallback(bool enabled) override {}
+
+ private:
+  friend class base::NoDestructor<ChromecastConfigAndroidDummy>;
+
+  DISALLOW_COPY_AND_ASSIGN(ChromecastConfigAndroidDummy);
+};
+
+// static
+ChromecastConfigAndroid* ChromecastConfigAndroid::GetInstance() {
+  static base::NoDestructor<ChromecastConfigAndroidDummy> instance;
+  return instance.get();
+}
+
+}  // namespace android
+}  // namespace chromecast
diff --git a/chromecast/base/java/src/org/chromium/chromecast/base/CastSettingsManager.java b/chromecast/base/java/src/org/chromium/chromecast/base/CastSettingsManager.java
index 2de2356d..28d1e23d 100644
--- a/chromecast/base/java/src/org/chromium/chromecast/base/CastSettingsManager.java
+++ b/chromecast/base/java/src/org/chromium/chromecast/base/CastSettingsManager.java
@@ -7,7 +7,6 @@
 import android.annotation.SuppressLint;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.database.ContentObserver;
 import android.os.Build;
 import android.os.Handler;
@@ -23,12 +22,6 @@
 
     private static final String PREFS_FILE_NAME = "CastSettings";
 
-    /** Key for the "send usage stats" boolean setting. */
-    private static final String SEND_USAGE_STATS_SETTING = "developer_support";
-
-    /** The default value for the "send usage stats" setting. */
-    private static final boolean SEND_USAGE_STATS_SETTING_DEFAULT = true;
-
     /** The default device name, which is the model name. */
     private static final String DEFAULT_DEVICE_NAME = Build.MODEL;
 
@@ -38,8 +31,6 @@
     private static final String DEVICE_PROVISIONED_SETTING_KEY = Settings.Global.DEVICE_PROVISIONED;
 
     private final ContentResolver mContentResolver;
-    private final SharedPreferences mSettings;
-    private SharedPreferences.OnSharedPreferenceChangeListener mSharedPreferenceListener;
     private ContentObserver mDeviceNameObserver;
     private ContentObserver mIsDeviceProvisionedObserver;
 
@@ -49,7 +40,6 @@
      */
     public static class OnSettingChangedListener {
         public void onCastEnabledChanged(boolean enabled) {}
-        public void onSendUsageStatsChanged(boolean enabled) {}
         public void onDeviceNameChanged(String deviceName) {}
     }
 
@@ -62,34 +52,15 @@
     public static CastSettingsManager createCastSettingsManager(
             Context context, OnSettingChangedListener listener) {
         ContentResolver contentResolver = context.getContentResolver();
-        SharedPreferences settings = context.getSharedPreferences(PREFS_FILE_NAME, 0);
-        return new CastSettingsManager(contentResolver, listener, settings);
+        return new CastSettingsManager(contentResolver, listener);
     }
 
     @SuppressLint("NewApi")
     private CastSettingsManager(
-            ContentResolver contentResolver,
-            OnSettingChangedListener listener,
-            SharedPreferences settings) {
+            ContentResolver contentResolver, OnSettingChangedListener listener) {
         mContentResolver = contentResolver;
-        mSettings = settings;
         mListener = listener;
 
-        mSharedPreferenceListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
-            @Override
-            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
-                if (mListener == null) {
-                    return;
-                }
-
-                if (key.equals(SEND_USAGE_STATS_SETTING)) {
-                    mListener.onSendUsageStatsChanged(prefs.getBoolean(key,
-                                    SEND_USAGE_STATS_SETTING_DEFAULT));
-                }
-            }
-        };
-        mSettings.registerOnSharedPreferenceChangeListener(mSharedPreferenceListener);
-
         mDeviceNameObserver = new ContentObserver(new Handler()) {
             @Override
             public void onChange(boolean selfChange) {
@@ -116,8 +87,6 @@
     }
 
     public void dispose() {
-        mSettings.unregisterOnSharedPreferenceChangeListener(mSharedPreferenceListener);
-        mSharedPreferenceListener = null;
         mContentResolver.unregisterContentObserver(mDeviceNameObserver);
         mDeviceNameObserver = null;
 
@@ -135,14 +104,6 @@
                 mContentResolver, DEVICE_PROVISIONED_SETTING_KEY, 0) == 1;
     }
 
-    public boolean isSendUsageStatsEnabled() {
-        return mSettings.getBoolean(SEND_USAGE_STATS_SETTING, SEND_USAGE_STATS_SETTING_DEFAULT);
-    }
-
-    public void setSendUsageStatsEnabled(boolean enabled) {
-        mSettings.edit().putBoolean(SEND_USAGE_STATS_SETTING, enabled).apply();
-    }
-
     @SuppressLint("NewApi")
     public String getDeviceName() {
         // TODO(crbug.com/635567): Fix lint properly.
diff --git a/chromecast/base/java/src/org/chromium/chromecast/base/ChromecastConfigAndroid.java b/chromecast/base/java/src/org/chromium/chromecast/base/ChromecastConfigAndroid.java
deleted file mode 100644
index 9882816..0000000
--- a/chromecast/base/java/src/org/chromium/chromecast/base/ChromecastConfigAndroid.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chromecast.base;
-
-import android.content.Context;
-
-import org.chromium.base.annotations.CalledByNative;
-import org.chromium.base.annotations.JNINamespace;
-
-/**
- * JNI wrapper class for calls from ChromecastConfigAndroid.
- */
-@JNINamespace("chromecast::android")
-public final class ChromecastConfigAndroid {
-
-    private static CastSettingsManager sSettingsManager;
-
-    public static void initializeForBrowser(Context context) {
-        sSettingsManager = CastSettingsManager.createCastSettingsManager(
-                context, new CastSettingsManager.OnSettingChangedListener() {
-                    @Override
-                    public void onSendUsageStatsChanged(boolean enabled) {
-                        nativeSetSendUsageStatsEnabled(enabled);
-                    }
-                });
-    }
-
-    @CalledByNative
-    public static boolean canSendUsageStats() {
-        return sSettingsManager.isSendUsageStatsEnabled();
-    }
-
-    @CalledByNative
-    public static void setSendUsageStats(boolean enabled) {
-        sSettingsManager.setSendUsageStatsEnabled(enabled);
-    }
-
-    private static native void nativeSetSendUsageStatsEnabled(boolean enabled);
-}
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastBrowserHelper.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastBrowserHelper.java
index a4cc410..f43a3ed 100644
--- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastBrowserHelper.java
+++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastBrowserHelper.java
@@ -12,7 +12,6 @@
 import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.base.library_loader.LibraryProcessType;
 import org.chromium.base.library_loader.ProcessInitException;
-import org.chromium.chromecast.base.ChromecastConfigAndroid;
 import org.chromium.content_public.browser.BrowserStartupController;
 import org.chromium.content_public.browser.DeviceUtils;
 import org.chromium.net.NetworkChangeNotifier;
@@ -38,8 +37,6 @@
 
         Log.d(TAG, "Performing one-time browser initialization");
 
-        ChromecastConfigAndroid.initializeForBrowser(context);
-
         // Initializing the command line must occur before loading the library.
         CastCommandLineHelper.initCommandLineWithSavedArgs(() -> {
             CommandLineInitUtil.initCommandLine(COMMAND_LINE_FILE);
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastCrashHandler.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastCrashHandler.java
index 51a7101..7dc4268 100644
--- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastCrashHandler.java
+++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastCrashHandler.java
@@ -4,10 +4,8 @@
 
 package org.chromium.chromecast.shell;
 
-import org.chromium.base.Log;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
-import org.chromium.chromecast.base.ChromecastConfigAndroid;
 
 /**
  * JNI wrapper class for accessing CastCrashHandler.
@@ -17,19 +15,18 @@
     private static final String TAG = "cr_CastCrashHandler";
 
     @CalledByNative
-    public static void initializeUploader(String crashDumpPath, String uuid,
-            String applicationFeedback, boolean uploadCrashToStaging, boolean periodicUpload) {
+    public static void uploadOnce(String crashDumpPath, String uuid, String applicationFeedback,
+            boolean uploadCrashToStaging) {
         CastCrashUploader uploader = CastCrashUploaderFactory.createCastCrashUploader(
                 crashDumpPath, uuid, applicationFeedback, uploadCrashToStaging);
-        if (ChromecastConfigAndroid.canSendUsageStats()) {
-            if (periodicUpload) {
-                uploader.startPeriodicUpload();
-            } else {
-                uploader.uploadOnce();
-            }
-        } else {
-            Log.d(TAG, "Removing crash dumps instead of uploading");
-            uploader.removeCrashDumps();
-        }
+        uploader.uploadOnce();
+    }
+
+    @CalledByNative
+    public static void removeCrashDumps(String crashDumpPath, String uuid,
+            String applicationFeedback, boolean uploadCrashToStaging) {
+        CastCrashUploader uploader = CastCrashUploaderFactory.createCastCrashUploader(
+                crashDumpPath, uuid, applicationFeedback, uploadCrashToStaging);
+        uploader.removeCrashDumps();
     }
 }
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastCrashUploader.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastCrashUploader.java
index 01c1a894..14307bb2 100644
--- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastCrashUploader.java
+++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastCrashUploader.java
@@ -62,21 +62,13 @@
                 : "https://clients2.google.com/cr/report";
     }
 
-    /** Sets up a periodic uploader, that checks for new dumps to upload every 20 minutes */
-    @SuppressWarnings("FutureReturnValueIgnored")
-    public void startPeriodicUpload() {
-        mExecutorService.scheduleWithFixedDelay(mQueueAllCrashDumpUploadsRunnable,
-                0, // Do first run immediately
-                20, // Run once every 20 minutes
-                TimeUnit.MINUTES);
-    }
-
     @SuppressWarnings("FutureReturnValueIgnored")
     public void uploadOnce() {
         mExecutorService.schedule(mQueueAllCrashDumpUploadsRunnable, 0, TimeUnit.MINUTES);
     }
 
     public void removeCrashDumps() {
+        Log.i(TAG, "Remove crash dumps");
         File crashDumpDirectory = new File(mCrashDumpPath);
         for (File potentialDump : crashDumpDirectory.listFiles()) {
             if (potentialDump.getName().matches(DUMP_FILE_REGEX)) {
@@ -94,6 +86,7 @@
      */
     private void checkForCrashDumps() {
         if (mCrashDumpPath == null) return;
+
         Log.i(TAG, "Checking for crash dumps");
         File crashDumpDirectory = new File(mCrashDumpPath);
 
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc
index c368817..24373083 100644
--- a/chromecast/browser/cast_browser_main_parts.cc
+++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -486,6 +486,10 @@
       base::Unretained(cast_browser_process_->browser_client())));
 #endif  // !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
 
+#if defined(OS_ANDROID)
+  StartPeriodicCrashReportUpload();
+#endif  // defined(OS_ANDROID)
+
   cast_browser_process_->SetNetLog(net_log_.get());
   url_request_context_factory_->InitializeOnUIThread(net_log_.get());
 
@@ -598,6 +602,22 @@
   cast_browser_process_->cast_service()->Start();
 }
 
+#if defined(OS_ANDROID)
+void CastBrowserMainParts::StartPeriodicCrashReportUpload() {
+  OnStartPeriodicCrashReportUpload();
+  crash_reporter_timer_.reset(new base::RepeatingTimer());
+  crash_reporter_timer_->Start(
+      FROM_HERE, base::TimeDelta::FromMinutes(20), this,
+      &CastBrowserMainParts::OnStartPeriodicCrashReportUpload);
+}
+
+void CastBrowserMainParts::OnStartPeriodicCrashReportUpload() {
+  base::FilePath crash_dir;
+  CrashHandler::GetCrashDumpLocation(&crash_dir);
+  CrashHandler::UploadDumps(crash_dir, "", "");
+}
+#endif  // defined(OS_ANDROID)
+
 bool CastBrowserMainParts::MainMessageLoopRun(int* result_code) {
 #if defined(OS_ANDROID)
   // Android does not use native main MessageLoop.
diff --git a/chromecast/browser/cast_browser_main_parts.h b/chromecast/browser/cast_browser_main_parts.h
index 5f4f82e..c6036497 100644
--- a/chromecast/browser/cast_browser_main_parts.h
+++ b/chromecast/browser/cast_browser_main_parts.h
@@ -10,12 +10,17 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/metrics/field_trial.h"
+#include "build/build_config.h"
 #include "build/buildflag.h"
 #include "chromecast/chromecast_buildflags.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_main_parts.h"
 #include "content/public/common/main_function_params.h"
 
+#if defined(OS_ANDROID)
+#include "base/timer/timer.h"
+#endif
+
 class PrefService;
 
 namespace base {
@@ -100,6 +105,12 @@
   std::unique_ptr<CastWindowManager> window_manager_;
 #endif  //  defined(USE_AURA)
 
+#if defined(OS_ANDROID)
+  void StartPeriodicCrashReportUpload();
+  void OnStartPeriodicCrashReportUpload();
+  std::unique_ptr<base::RepeatingTimer> crash_reporter_timer_;
+#endif
+
 #if BUILDFLAG(IS_CAST_USING_CMA_BACKEND)
   // CMA thread used by AudioManager, MojoRenderer, and MediaPipelineBackend.
   std::unique_ptr<base::Thread> media_thread_;
diff --git a/chromecast/chromecast.gni b/chromecast/chromecast.gni
index d10b348..dec3ae1 100644
--- a/chromecast/chromecast.gni
+++ b/chromecast/chromecast.gni
@@ -11,10 +11,6 @@
 # directory. Arguments which are used in other Chrome components should
 # be instead declared in //build/config/chromecast_build.gni.
 declare_args() {
-  # chromecast_branding is used to include or exclude Google-branded components.
-  # Set it to "public" for a Chromium build.
-  chromecast_branding = "public"
-
   # The incremental build number. The Cast automated builders will set this
   # value to indicate the buildset. Note: The default value should be greater
   # than any value the builder may assign to prevent attempted automatic updates
diff --git a/components/BUILD.gn b/components/BUILD.gn
index 31806d7..1b2d6387 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -521,10 +521,12 @@
     if (is_android) {
       enable_multidex = true
       sources += [
+        "autofill_assistant/browser/assistant_web_controller_browsertest.cc",
         "test/android/browsertests_apk/components_browser_tests_jni_onload.cc",
       ]
       sources -= [ "autofill/content/browser/risk/fingerprint_browsertest.cc" ]
       deps += [
+        "//components/autofill_assistant/browser",
         "//content/public/test/android:layouttest_java_support",
         "//content/test:layouttest_support",
         "//testing/android/native_test:native_test_support",
diff --git a/components/autofill/core/browser/form_data_importer.cc b/components/autofill/core/browser/form_data_importer.cc
index 543e5c7c..8123e84 100644
--- a/components/autofill/core/browser/form_data_importer.cc
+++ b/components/autofill/core/browser/form_data_importer.cc
@@ -138,7 +138,8 @@
   if (local_card_migration_manager_ &&
       local_card_migration_manager_->ShouldOfferLocalCardMigration(
           imported_credit_card_record_type_)) {
-    local_card_migration_manager_->AttemptToOfferLocalCardMigration();
+    local_card_migration_manager_->AttemptToOfferLocalCardMigration(
+        /*is_from_settings_page=*/false);
     return;
   }
 
diff --git a/components/autofill/core/browser/local_card_migration_manager.cc b/components/autofill/core/browser/local_card_migration_manager.cc
index 00b1c555..202f93e8 100644
--- a/components/autofill/core/browser/local_card_migration_manager.cc
+++ b/components/autofill/core/browser/local_card_migration_manager.cc
@@ -68,7 +68,8 @@
           !migratable_credit_cards_.empty());
 }
 
-void LocalCardMigrationManager::AttemptToOfferLocalCardMigration() {
+void LocalCardMigrationManager::AttemptToOfferLocalCardMigration(
+    bool is_from_settings_page) {
   // Abort the migration if |payments_client_| is nullptr.
   if (!payments_client_)
     return;
@@ -88,21 +89,26 @@
       /*pan_first_six=*/std::string(), upload_request_.active_experiments,
       app_locale_,
       base::BindOnce(&LocalCardMigrationManager::OnDidGetUploadDetails,
-                     weak_ptr_factory_.GetWeakPtr()),
+                     weak_ptr_factory_.GetWeakPtr(), is_from_settings_page),
       payments::kMigrateCardBillableServiceNumber);
 }
 
-// TODO(crbug.com/852904): Pops up a larger, modal dialog showing the local
-// cards to be uploaded. Pass the reference of vector<MigratableCreditCard> and
-// the callback function is OnConfirmLocalCardsMigration().
+// Callback function when user agrees to migration on the intermediate dialog.
+// Call ShowMainMigrationDialog() to pop up a larger, modal dialog showing the
+// local cards to be uploaded.
 void LocalCardMigrationManager::OnUserAcceptedIntermediateMigrationDialog() {
-  user_accepted_main_migration_dialog_ = false;
-  // Pops up a larger, modal dialog showing the local cards to be uploaded.
-  client_->ConfirmMigrateLocalCardToCloud(
-      migratable_credit_cards_,
-      base::BindOnce(
-          &LocalCardMigrationManager::OnUserAcceptedMainMigrationDialog,
-          weak_ptr_factory_.GetWeakPtr()));
+  ShowMainMigrationDialog();
+}
+
+// Send the migration request once risk data is available.
+void LocalCardMigrationManager::OnUserAcceptedMainMigrationDialog() {
+  user_accepted_main_migration_dialog_ = true;
+  // Populating risk data and offering migration two-round pop-ups occur
+  // asynchronously. If |migration_risk_data_| has already been loaded, send the
+  // migrate local cards request. Otherwise, continue to wait and let
+  // OnDidGetUploadRiskData handle it.
+  if (!migration_risk_data_.empty())
+    SendMigrateLocalCardsRequest();
 }
 
 bool LocalCardMigrationManager::IsCreditCardMigrationEnabled() {
@@ -122,24 +128,61 @@
 }
 
 void LocalCardMigrationManager::OnDidGetUploadDetails(
+    bool is_from_settings_page,
     AutofillClient::PaymentsRpcResult result,
     const base::string16& context_token,
     std::unique_ptr<base::DictionaryValue> legal_message) {
   if (result == AutofillClient::SUCCESS) {
     upload_request_.context_token = context_token;
     legal_message_ = std::move(legal_message);
+    migration_risk_data_.clear();
     // If we successfully received the legal docs, trigger the offer-to-migrate
-    // dialog.
-    client_->ShowLocalCardMigrationDialog(base::BindOnce(
-        &LocalCardMigrationManager::OnUserAcceptedIntermediateMigrationDialog,
+    // dialog. If triggered from settings page, we pop-up the main prompt
+    // directly. If not, we pop up the intermediate bubble.
+    if (is_from_settings_page) {
+      // Pops up a larger, modal dialog showing the local cards to be uploaded.
+      ShowMainMigrationDialog();
+    } else {
+      client_->ShowLocalCardMigrationDialog(base::BindOnce(
+          &LocalCardMigrationManager::OnUserAcceptedIntermediateMigrationDialog,
+          weak_ptr_factory_.GetWeakPtr()));
+    }
+    // TODO(crbug.com/876895): Clean up the LoadRiskData Bind/BindRepeating
+    // usages
+    client_->LoadRiskData(base::BindRepeating(
+        &LocalCardMigrationManager::OnDidGetMigrationRiskData,
         weak_ptr_factory_.GetWeakPtr()));
-    // TODO(crbug.com/852904): Call the client LoadRiskData()
   }
 }
 
-// TODO(crbug.com/852904): Send the upload request once risk data is available.
-void LocalCardMigrationManager::OnUserAcceptedMainMigrationDialog() {
-  user_accepted_main_migration_dialog_ = true;
+void LocalCardMigrationManager::OnDidGetMigrationRiskData(
+    const std::string& risk_data) {
+  migration_risk_data_ = risk_data;
+  // Populating risk data and offering migration two-round pop-ups occur
+  // asynchronously. If the main migration dialog has already been accepted,
+  // send the migrate local cards request. Otherwise, continue to wait for the
+  // user to accept the two round dialog.
+  if (user_accepted_main_migration_dialog_)
+    SendMigrateLocalCardsRequest();
+}
+
+// TODO(crbug.com/852904): Send the migration request. Will call payments_client
+// to create a new PaymentsRequest. Also create a new callback function
+// OnDidMigrateLocalCards.
+void LocalCardMigrationManager::SendMigrateLocalCardsRequest() {}
+
+// Pops up a larger, modal dialog showing the local cards to be uploaded. Pass
+// the reference of vector<MigratableCreditCard> and the callback function is
+// OnUserAcceptedMainMigrationDialog(). Can be called when user agrees to
+// migration on the intermediate dialog or directly from settings page.
+void LocalCardMigrationManager::ShowMainMigrationDialog() {
+  user_accepted_main_migration_dialog_ = false;
+  // Pops up a larger, modal dialog showing the local cards to be uploaded.
+  client_->ConfirmMigrateLocalCardToCloud(
+      migratable_credit_cards_,
+      base::BindOnce(
+          &LocalCardMigrationManager::OnUserAcceptedMainMigrationDialog,
+          weak_ptr_factory_.GetWeakPtr()));
 }
 
 int LocalCardMigrationManager::GetDetectedValues() const {
diff --git a/components/autofill/core/browser/local_card_migration_manager.h b/components/autofill/core/browser/local_card_migration_manager.h
index a5bd73e..bd631722 100644
--- a/components/autofill/core/browser/local_card_migration_manager.h
+++ b/components/autofill/core/browser/local_card_migration_manager.h
@@ -59,13 +59,22 @@
   // migration are satisfied. Initializes the local card list for upload.
   bool ShouldOfferLocalCardMigration(int imported_credit_card_record_type);
 
-  // Called from FormDataImporter when all migration requirements are met.
-  // Fetches legal documents and triggers the OnDidGetUploadDetails callback.
-  void AttemptToOfferLocalCardMigration();
+  // Called from FormDataImporter or settings page when all migration
+  // requirements are met. Fetches legal documents and triggers the
+  // OnDidGetUploadDetails callback. |is_from_settings_page| to denote the user
+  // triggers the migration from settings page. It will trigger the main prompt
+  // directly if the get upload details call returns success.
+  void AttemptToOfferLocalCardMigration(bool is_from_settings_page);
 
   // Callback function when user agrees to migration on the intermediate dialog.
   // Pops up a larger, modal dialog showing the local cards to be uploaded.
-  void OnUserAcceptedIntermediateMigrationDialog();
+  // Exposed for testing.
+  virtual void OnUserAcceptedIntermediateMigrationDialog();
+
+  // Callback function when user confirms migration on the main migration
+  // dialog. Sets |user_accepted_main_migration_dialog_| and sends the migration
+  // request once risk data is available. Exposed for testing.
+  virtual void OnUserAcceptedMainMigrationDialog();
 
   // Check that the user is signed in, syncing, and the proper experiment
   // flags are enabled. Override in the test class.
@@ -75,18 +84,20 @@
   // name if it exists on all cards, and existence of Payments customer).
   int GetDetectedValues() const;
 
+  // Fetch all migratable credit cards and store in |migratable_credit_cards_|.
+  void GetMigratableCreditCards();
+
  protected:
   // Callback after successfully getting the legal documents. On success,
   // displays the offer-to-migrate dialog, which the user can accept or not.
-  // Exposed for testing.
+  // When |is_from_settings_page| is true, it will trigger the main prompt
+  // directly. If not, trigger the intermediate prompt. Exposed for testing.
   virtual void OnDidGetUploadDetails(
+      bool is_from_settings_page,
       AutofillClient::PaymentsRpcResult result,
       const base::string16& context_token,
       std::unique_ptr<base::DictionaryValue> legal_message);
 
-  // Fetch all migratable credit cards and store in |migratable_credit_cards_|.
-  void GetMigratableCreditCards();
-
   AutofillClient* const client_;
 
   // Handles Payments service requests.
@@ -94,10 +105,16 @@
   payments::PaymentsClient* payments_client_;
 
  private:
-  // Callback function when user confirms migration on the main migration
-  // dialog. Sets |user_accepted_main_migration_dialog_| and sends the upload
-  // request.
-  void OnUserAcceptedMainMigrationDialog();
+  // Pops up a larger, modal dialog showing the local cards to be uploaded.
+  void ShowMainMigrationDialog();
+
+  // Callback function when migration risk data is ready. Saves risk data in
+  // |migration_risk_data_| and calls SendMigrateLocalCardsRequest if the user
+  // has accepted the main migration dialog.
+  void OnDidGetMigrationRiskData(const std::string& risk_data);
+
+  // Finalizes the migration request and calls PaymentsClient.
+  void SendMigrateLocalCardsRequest();
 
   std::unique_ptr<base::DictionaryValue> legal_message_;
 
@@ -119,6 +136,8 @@
   // on the main dialog.
   bool user_accepted_main_migration_dialog_ = false;
 
+  std::string migration_risk_data_;
+
   base::WeakPtrFactory<LocalCardMigrationManager> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(LocalCardMigrationManager);
diff --git a/components/autofill/core/browser/local_card_migration_manager_unittest.cc b/components/autofill/core/browser/local_card_migration_manager_unittest.cc
index cd5bc05..4c72079b 100644
--- a/components/autofill/core/browser/local_card_migration_manager_unittest.cc
+++ b/components/autofill/core/browser/local_card_migration_manager_unittest.cc
@@ -595,4 +595,62 @@
       CreditCardSaveManager::DetectedValue::HAS_GOOGLE_PAYMENTS_ACCOUNT);
 }
 
+// Verify that when triggering from settings page, intermediate prompt will not
+// be triggered.
+TEST_F(LocalCardMigrationManagerTest,
+       MigrateCreditCard_TriggerFromSettingsPage) {
+  EnableAutofillCreditCardLocalCardMigrationExperiment();
+  personal_data_.ClearCreditCards();
+  personal_data_.ClearProfiles();
+  credit_card_save_manager_->SetCreditCardUploadEnabled(true);
+  // Set the billing_customer_number Priority Preference to designate
+  // existence of a Payments account.
+  autofill_client_.GetPrefs()->SetDouble(prefs::kAutofillBillingCustomerNumber,
+                                         12345);
+  // Add a local credit card. One migratable credit card will still trigger
+  // migration on settings page.
+  AddLocalCrediCard(personal_data_, "Flo Master", "4111111111111111", "11",
+                    test::NextYear().c_str(), "1");
+
+  // Do the same operation as we bridge back from the settings page.
+  local_card_migration_manager_->GetMigratableCreditCards();
+  local_card_migration_manager_->AttemptToOfferLocalCardMigration(true);
+
+  EXPECT_FALSE(local_card_migration_manager_->IntermediatePromptWasShown());
+  EXPECT_TRUE(local_card_migration_manager_->MainPromptWasShown());
+}
+
+// Verify that when triggering from submitted form, intermediate prompt and main
+// prompt are both triggered.
+TEST_F(LocalCardMigrationManagerTest,
+       MigrateCreditCard_TriggerFromSubmittedForm) {
+  EnableAutofillCreditCardLocalCardMigrationExperiment();
+  personal_data_.ClearCreditCards();
+  personal_data_.ClearProfiles();
+  credit_card_save_manager_->SetCreditCardUploadEnabled(true);
+  // Set the billing_customer_number Priority Preference to designate
+  // existence of a Payments account.
+  autofill_client_.GetPrefs()->SetDouble(prefs::kAutofillBillingCustomerNumber,
+                                         12345);
+  // Add a local credit card whose |TypeAndLastFourDigits| matches what we will
+  // enter below.
+  AddLocalCrediCard(personal_data_, "Flo Master", "4111111111111111", "11",
+                    test::NextYear().c_str(), "1");
+  // Add another local credit card, so it will trigger migration.
+  AddLocalCrediCard(personal_data_, "Flo Master", "5555555555554444", "11",
+                    test::NextYear().c_str(), "1");
+
+  // Set up our credit card form data.
+  FormData credit_card_form;
+  test::CreateTestCreditCardFormData(&credit_card_form, true, false);
+  FormsSeen(std::vector<FormData>(1, credit_card_form));
+
+  // Edit the data, and submit.
+  EditCreditCardFrom(credit_card_form, "Flo Master", "4111111111111111", "11",
+                     test::NextYear().c_str(), "123");
+  FormSubmitted(credit_card_form);
+  EXPECT_TRUE(local_card_migration_manager_->IntermediatePromptWasShown());
+  EXPECT_TRUE(local_card_migration_manager_->MainPromptWasShown());
+}
+
 }  // namespace autofill
diff --git a/components/autofill/core/browser/test_local_card_migration_manager.cc b/components/autofill/core/browser/test_local_card_migration_manager.cc
index 2f6b11d..f6eb4284 100644
--- a/components/autofill/core/browser/test_local_card_migration_manager.cc
+++ b/components/autofill/core/browser/test_local_card_migration_manager.cc
@@ -38,14 +38,34 @@
   return local_card_migration_was_triggered_;
 }
 
+bool TestLocalCardMigrationManager::IntermediatePromptWasShown() {
+  return intermediate_prompt_was_shown_;
+}
+
+bool TestLocalCardMigrationManager::MainPromptWasShown() {
+  return main_prompt_was_shown_;
+}
+
+void TestLocalCardMigrationManager::
+    OnUserAcceptedIntermediateMigrationDialog() {
+  intermediate_prompt_was_shown_ = true;
+  LocalCardMigrationManager::OnUserAcceptedIntermediateMigrationDialog();
+}
+
+void TestLocalCardMigrationManager::OnUserAcceptedMainMigrationDialog() {
+  main_prompt_was_shown_ = true;
+  LocalCardMigrationManager::OnUserAcceptedMainMigrationDialog();
+}
+
 void TestLocalCardMigrationManager::OnDidGetUploadDetails(
+    bool is_from_settings_page,
     AutofillClient::PaymentsRpcResult result,
     const base::string16& context_token,
     std::unique_ptr<base::DictionaryValue> legal_message) {
   if (result == AutofillClient::SUCCESS) {
     local_card_migration_was_triggered_ = true;
-    LocalCardMigrationManager::OnDidGetUploadDetails(result, context_token,
-                                                     std::move(legal_message));
+    LocalCardMigrationManager::OnDidGetUploadDetails(
+        is_from_settings_page, result, context_token, std::move(legal_message));
   }
 }
 
diff --git a/components/autofill/core/browser/test_local_card_migration_manager.h b/components/autofill/core/browser/test_local_card_migration_manager.h
index 6cb5cc6..944019e 100644
--- a/components/autofill/core/browser/test_local_card_migration_manager.h
+++ b/components/autofill/core/browser/test_local_card_migration_manager.h
@@ -32,17 +32,36 @@
   // user is signed in/syncing.
   bool IsCreditCardMigrationEnabled() override;
 
-  // Returns whether the first round migration pop-up window was triggered.
+  // Returns whether the local card migration was triggered.
   bool LocalCardMigrationWasTriggered();
 
+  // Returns whether the first round intermediate pop-up window was shown.
+  bool IntermediatePromptWasShown();
+
+  // Returns whether the main prompt window was shown.
+  bool MainPromptWasShown();
+
+  // Override the base function. When called, represents the intermediate prompt
+  // is shown. Set the |intermediate_prompt_was_shown_|.
+  void OnUserAcceptedIntermediateMigrationDialog() override;
+
+  // Override the base function. When called, represent the main prompt is
+  // shown. Set the |main_prompt_was_shown_|.
+  void OnUserAcceptedMainMigrationDialog() override;
+
  private:
   void OnDidGetUploadDetails(
+      bool is_from_settings_page,
       AutofillClient::PaymentsRpcResult result,
       const base::string16& context_token,
       std::unique_ptr<base::DictionaryValue> legal_message) override;
 
   bool local_card_migration_was_triggered_ = false;
 
+  bool intermediate_prompt_was_shown_ = false;
+
+  bool main_prompt_was_shown_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(TestLocalCardMigrationManager);
 };
 
diff --git a/components/autofill_assistant/browser/BUILD.gn b/components/autofill_assistant/browser/BUILD.gn
index e2280796..06f8ef4 100644
--- a/components/autofill_assistant/browser/BUILD.gn
+++ b/components/autofill_assistant/browser/BUILD.gn
@@ -7,7 +7,7 @@
 
 proto_library("proto") {
   sources = [
-    "assistant.proto",
+    "service.proto",
   ]
 }
 
@@ -48,6 +48,7 @@
   deps = [
     ":proto",
     "//base",
+    "//components/autofill_assistant/browser/devtools",
     "//components/version_info",
     "//content/public/browser",
     "//google_apis",
diff --git a/components/autofill_assistant/browser/DEPS b/components/autofill_assistant/browser/DEPS
index 66a201ce..5b9f67fe 100644
--- a/components/autofill_assistant/browser/DEPS
+++ b/components/autofill_assistant/browser/DEPS
@@ -1,6 +1,8 @@
 include_rules = [
   "+components/version_info/version_info.h",
   "+content/public/browser",
+  "+content/public/test",
+  "+content/shell/browser/shell.h",
   "+google_apis",
   "+net",
   "+services/network/public/cpp",
diff --git a/components/autofill_assistant/browser/actions/assistant_action.cc b/components/autofill_assistant/browser/actions/assistant_action.cc
index 6ceb7634..d79eba9 100644
--- a/components/autofill_assistant/browser/actions/assistant_action.cc
+++ b/components/autofill_assistant/browser/actions/assistant_action.cc
@@ -6,7 +6,6 @@
 
 namespace autofill_assistant {
 
-AssistantAction::AssistantAction(const AssistantActionProto& proto)
-    : proto_(proto) {}
+AssistantAction::AssistantAction(const ActionProto& proto) : proto_(proto) {}
 
 }  // namespace autofill_assistant.
diff --git a/components/autofill_assistant/browser/actions/assistant_action.h b/components/autofill_assistant/browser/actions/assistant_action.h
index cff7420..bb540e7 100644
--- a/components/autofill_assistant/browser/actions/assistant_action.h
+++ b/components/autofill_assistant/browser/actions/assistant_action.h
@@ -6,7 +6,7 @@
 #define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_ACTION_H_
 
 #include "base/callback_forward.h"
-#include "components/autofill_assistant/browser/assistant.pb.h"
+#include "components/autofill_assistant/browser/service.pb.h"
 
 namespace autofill_assistant {
 
@@ -23,12 +23,12 @@
   virtual void ProcessAction(AssistantActionDelegate* delegate,
                              ProcessActionCallback callback) = 0;
 
-  const AssistantActionProto& proto() const { return proto_; }
+  const ActionProto& proto() const { return proto_; }
 
  protected:
-  explicit AssistantAction(const AssistantActionProto& proto);
+  explicit AssistantAction(const ActionProto& proto);
 
-  const AssistantActionProto proto_;
+  const ActionProto proto_;
 };
 
 }  // namespace autofill_assistant.
diff --git a/components/autofill_assistant/browser/actions/assistant_click_action.cc b/components/autofill_assistant/browser/actions/assistant_click_action.cc
index 4b2dc72e..a8c2225 100644
--- a/components/autofill_assistant/browser/actions/assistant_click_action.cc
+++ b/components/autofill_assistant/browser/actions/assistant_click_action.cc
@@ -11,7 +11,7 @@
 
 namespace autofill_assistant {
 
-AssistantClickAction::AssistantClickAction(const AssistantActionProto& proto)
+AssistantClickAction::AssistantClickAction(const ActionProto& proto)
     : AssistantAction(proto) {
   DCHECK(proto_.has_click());
 }
diff --git a/components/autofill_assistant/browser/actions/assistant_click_action.h b/components/autofill_assistant/browser/actions/assistant_click_action.h
index c817e0d..9f786dc80 100644
--- a/components/autofill_assistant/browser/actions/assistant_click_action.h
+++ b/components/autofill_assistant/browser/actions/assistant_click_action.h
@@ -16,7 +16,7 @@
 // An action to perform a mouse left button click on a given element on Web.
 class AssistantClickAction : public AssistantAction {
  public:
-  explicit AssistantClickAction(const AssistantActionProto& proto);
+  explicit AssistantClickAction(const ActionProto& proto);
   ~AssistantClickAction() override;
 
   // Overrides AssistantAction:
diff --git a/components/autofill_assistant/browser/actions/assistant_tell_action.cc b/components/autofill_assistant/browser/actions/assistant_tell_action.cc
index 943e8b6d..baf4ce9 100644
--- a/components/autofill_assistant/browser/actions/assistant_tell_action.cc
+++ b/components/autofill_assistant/browser/actions/assistant_tell_action.cc
@@ -11,7 +11,7 @@
 
 namespace autofill_assistant {
 
-AssistantTellAction::AssistantTellAction(const AssistantActionProto& proto)
+AssistantTellAction::AssistantTellAction(const ActionProto& proto)
     : AssistantAction(proto) {
   DCHECK(proto_.has_tell());
 }
diff --git a/components/autofill_assistant/browser/actions/assistant_tell_action.h b/components/autofill_assistant/browser/actions/assistant_tell_action.h
index e4855121..410396c3 100644
--- a/components/autofill_assistant/browser/actions/assistant_tell_action.h
+++ b/components/autofill_assistant/browser/actions/assistant_tell_action.h
@@ -14,7 +14,7 @@
 // An action to display a message.
 class AssistantTellAction : public AssistantAction {
  public:
-  explicit AssistantTellAction(const AssistantActionProto& proto);
+  explicit AssistantTellAction(const ActionProto& proto);
   ~AssistantTellAction() override;
 
   // Overrides AssistantAction:
diff --git a/components/autofill_assistant/browser/actions/assistant_use_address_action.cc b/components/autofill_assistant/browser/actions/assistant_use_address_action.cc
index d8a305a..1b288d85 100644
--- a/components/autofill_assistant/browser/actions/assistant_use_address_action.cc
+++ b/components/autofill_assistant/browser/actions/assistant_use_address_action.cc
@@ -12,8 +12,7 @@
 
 namespace autofill_assistant {
 
-AssistantUseAddressAction::AssistantUseAddressAction(
-    const AssistantActionProto& proto)
+AssistantUseAddressAction::AssistantUseAddressAction(const ActionProto& proto)
     : AssistantAction(proto), weak_ptr_factory_(this) {}
 
 AssistantUseAddressAction::~AssistantUseAddressAction() {}
diff --git a/components/autofill_assistant/browser/actions/assistant_use_address_action.h b/components/autofill_assistant/browser/actions/assistant_use_address_action.h
index 24a132a..aceb252 100644
--- a/components/autofill_assistant/browser/actions/assistant_use_address_action.h
+++ b/components/autofill_assistant/browser/actions/assistant_use_address_action.h
@@ -15,7 +15,7 @@
 // An action to ask user to choose a local address to fill the form.
 class AssistantUseAddressAction : public AssistantAction {
  public:
-  explicit AssistantUseAddressAction(const AssistantActionProto& proto);
+  explicit AssistantUseAddressAction(const ActionProto& proto);
 
   ~AssistantUseAddressAction() override;
 
diff --git a/components/autofill_assistant/browser/actions/assistant_use_card_action.cc b/components/autofill_assistant/browser/actions/assistant_use_card_action.cc
index f394ae4..65c7ff7c 100644
--- a/components/autofill_assistant/browser/actions/assistant_use_card_action.cc
+++ b/components/autofill_assistant/browser/actions/assistant_use_card_action.cc
@@ -12,8 +12,7 @@
 
 namespace autofill_assistant {
 
-AssistantUseCardAction::AssistantUseCardAction(
-    const AssistantActionProto& proto)
+AssistantUseCardAction::AssistantUseCardAction(const ActionProto& proto)
     : AssistantAction(proto), weak_ptr_factory_(this) {}
 
 AssistantUseCardAction::~AssistantUseCardAction() {}
diff --git a/components/autofill_assistant/browser/actions/assistant_use_card_action.h b/components/autofill_assistant/browser/actions/assistant_use_card_action.h
index 967f9524..8a090f5 100644
--- a/components/autofill_assistant/browser/actions/assistant_use_card_action.h
+++ b/components/autofill_assistant/browser/actions/assistant_use_card_action.h
@@ -16,7 +16,7 @@
 // An action to ask user to choose a local card to fill the form.
 class AssistantUseCardAction : public AssistantAction {
  public:
-  explicit AssistantUseCardAction(const AssistantActionProto& proto);
+  explicit AssistantUseCardAction(const ActionProto& proto);
   ~AssistantUseCardAction() override;
 
   // Overrides AssistantAction:
diff --git a/components/autofill_assistant/browser/actions/assistant_wait_for_dom_action.cc b/components/autofill_assistant/browser/actions/assistant_wait_for_dom_action.cc
index 4916f0d..0f3402a 100644
--- a/components/autofill_assistant/browser/actions/assistant_wait_for_dom_action.cc
+++ b/components/autofill_assistant/browser/actions/assistant_wait_for_dom_action.cc
@@ -21,8 +21,7 @@
 
 namespace autofill_assistant {
 
-AssistantWaitForDomAction::AssistantWaitForDomAction(
-    const AssistantActionProto& proto)
+AssistantWaitForDomAction::AssistantWaitForDomAction(const ActionProto& proto)
     : AssistantAction(proto), weak_ptr_factory_(this) {}
 
 AssistantWaitForDomAction::~AssistantWaitForDomAction() {}
diff --git a/components/autofill_assistant/browser/actions/assistant_wait_for_dom_action.h b/components/autofill_assistant/browser/actions/assistant_wait_for_dom_action.h
index 5cfe49f..9f00fdf 100644
--- a/components/autofill_assistant/browser/actions/assistant_wait_for_dom_action.h
+++ b/components/autofill_assistant/browser/actions/assistant_wait_for_dom_action.h
@@ -11,13 +11,13 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "components/autofill_assistant/browser/actions/assistant_action.h"
-#include "components/autofill_assistant/browser/assistant.pb.h"
+#include "components/autofill_assistant/browser/service.pb.h"
 
 namespace autofill_assistant {
 // An action to ask Chrome to wait for a DOM element to process next action.
 class AssistantWaitForDomAction : public AssistantAction {
  public:
-  explicit AssistantWaitForDomAction(const AssistantActionProto& proto);
+  explicit AssistantWaitForDomAction(const ActionProto& proto);
   ~AssistantWaitForDomAction() override;
 
   // Overrides AssistantAction:
diff --git a/components/autofill_assistant/browser/assistant_controller.cc b/components/autofill_assistant/browser/assistant_controller.cc
index aaa5ed6..2c5c2af 100644
--- a/components/autofill_assistant/browser/assistant_controller.cc
+++ b/components/autofill_assistant/browser/assistant_controller.cc
@@ -33,7 +33,8 @@
     std::unique_ptr<AssistantUiController> ui_controller)
     : content::WebContentsObserver(web_contents),
       assistant_ui_controller_(std::move(ui_controller)),
-      assistant_web_controller_(std::make_unique<AssistantWebController>()),
+      assistant_web_controller_(
+          AssistantWebController::CreateForWebContents(web_contents)),
       assistant_service_(std::make_unique<AssistantService>(
           web_contents->GetBrowserContext())) {
   assistant_ui_controller_->SetUiDelegate(this);
diff --git a/components/autofill_assistant/browser/assistant_protocol_utils.cc b/components/autofill_assistant/browser/assistant_protocol_utils.cc
index 78dcfd7..40524096 100644
--- a/components/autofill_assistant/browser/assistant_protocol_utils.cc
+++ b/components/autofill_assistant/browser/assistant_protocol_utils.cc
@@ -12,7 +12,7 @@
 #include "components/autofill_assistant/browser/actions/assistant_use_address_action.h"
 #include "components/autofill_assistant/browser/actions/assistant_use_card_action.h"
 #include "components/autofill_assistant/browser/actions/assistant_wait_for_dom_action.h"
-#include "components/autofill_assistant/browser/assistant.pb.h"
+#include "components/autofill_assistant/browser/service.pb.h"
 #include "components/version_info/version_info.h"
 #include "url/gurl.h"
 
@@ -98,7 +98,7 @@
 // static
 std::string AssistantProtocolUtils::CreateNextScriptActionsRequest(
     const std::string& previous_server_payload,
-    const std::vector<ProcessedAssistantActionProto>& processed_actions) {
+    const std::vector<ProcessedActionProto>& processed_actions) {
   ScriptActionRequestProto request_proto;
   request_proto.set_server_payload(previous_server_payload);
   NextScriptActionsRequestProto* next_request =
@@ -131,32 +131,32 @@
 
   for (const auto& action : response_proto.actions()) {
     switch (action.action_info_case()) {
-      case AssistantActionProto::ActionInfoCase::kClick: {
+      case ActionProto::ActionInfoCase::kClick: {
         assistant_actions->emplace_back(
             std::make_unique<AssistantClickAction>(action));
         break;
       }
-      case AssistantActionProto::ActionInfoCase::kTell: {
+      case ActionProto::ActionInfoCase::kTell: {
         assistant_actions->emplace_back(
             std::make_unique<AssistantTellAction>(action));
         break;
       }
-      case AssistantActionProto::ActionInfoCase::kUseAddress: {
+      case ActionProto::ActionInfoCase::kUseAddress: {
         assistant_actions->emplace_back(
             std::make_unique<AssistantUseAddressAction>(action));
         break;
       }
-      case AssistantActionProto::ActionInfoCase::kUseCard: {
+      case ActionProto::ActionInfoCase::kUseCard: {
         assistant_actions->emplace_back(
             std::make_unique<AssistantUseCardAction>(action));
         break;
       }
-      case AssistantActionProto::ActionInfoCase::kWaitForDom: {
+      case ActionProto::ActionInfoCase::kWaitForDom: {
         assistant_actions->emplace_back(
             std::make_unique<AssistantUseCardAction>(action));
         break;
       }
-      case AssistantActionProto::ActionInfoCase::ACTION_INFO_NOT_SET: {
+      case ActionProto::ActionInfoCase::ACTION_INFO_NOT_SET: {
         LOG(ERROR) << "Unknown or unspported assistant action.";
         break;
       }
diff --git a/components/autofill_assistant/browser/assistant_protocol_utils.h b/components/autofill_assistant/browser/assistant_protocol_utils.h
index 616ca18f..e1aa39d 100644
--- a/components/autofill_assistant/browser/assistant_protocol_utils.h
+++ b/components/autofill_assistant/browser/assistant_protocol_utils.h
@@ -12,8 +12,8 @@
 #include <vector>
 
 #include "components/autofill_assistant/browser/actions/assistant_action.h"
-#include "components/autofill_assistant/browser/assistant.pb.h"
 #include "components/autofill_assistant/browser/assistant_script.h"
+#include "components/autofill_assistant/browser/service.pb.h"
 
 class GURL;
 
@@ -43,7 +43,7 @@
   // Create request to get next sequence of actions for a script.
   static std::string CreateNextScriptActionsRequest(
       const std::string& previous_server_payload,
-      const std::vector<ProcessedAssistantActionProto>& processed_actions);
+      const std::vector<ProcessedActionProto>& processed_actions);
 
   // Parse assistant actions from the given |response|, which should not be an
   // empty string.
diff --git a/components/autofill_assistant/browser/assistant_script_executor.cc b/components/autofill_assistant/browser/assistant_script_executor.cc
index 872ad55..9bcbeaf 100644
--- a/components/autofill_assistant/browser/assistant_script_executor.cc
+++ b/components/autofill_assistant/browser/assistant_script_executor.cc
@@ -130,11 +130,10 @@
     std::unique_ptr<AssistantAction> action,
     bool success) {
   processed_actions_.emplace_back();
-  ProcessedAssistantActionProto* proto = &processed_actions_.back();
+  ProcessedActionProto* proto = &processed_actions_.back();
   proto->mutable_action()->MergeFrom(action->proto());
-  proto->set_status(success
-                        ? ProcessedAssistantActionStatus::ACTION_APPLIED
-                        : ProcessedAssistantActionStatus::OTHER_ACTION_STATUS);
+  proto->set_status(success ? ProcessedActionStatus::ACTION_APPLIED
+                            : ProcessedActionStatus::OTHER_ACTION_STATUS);
   if (!success) {
     // Report error immediately, interrupting action processing.
     GetNextAssistantActions();
diff --git a/components/autofill_assistant/browser/assistant_script_executor.h b/components/autofill_assistant/browser/assistant_script_executor.h
index 8001a64..5396250 100644
--- a/components/autofill_assistant/browser/assistant_script_executor.h
+++ b/components/autofill_assistant/browser/assistant_script_executor.h
@@ -14,9 +14,9 @@
 #include "base/memory/weak_ptr.h"
 #include "components/autofill_assistant/browser/actions/assistant_action.h"
 #include "components/autofill_assistant/browser/actions/assistant_action_delegate.h"
-#include "components/autofill_assistant/browser/assistant.pb.h"
 #include "components/autofill_assistant/browser/assistant_script.h"
 #include "components/autofill_assistant/browser/assistant_script_executor_delegate.h"
+#include "components/autofill_assistant/browser/service.pb.h"
 
 namespace autofill_assistant {
 // Class to execute an assistant script.
@@ -59,7 +59,7 @@
   RunScriptCallback callback_;
 
   std::deque<std::unique_ptr<AssistantAction>> actions_;
-  std::vector<ProcessedAssistantActionProto> processed_actions_;
+  std::vector<ProcessedActionProto> processed_actions_;
   std::string last_server_payload_;
 
   base::WeakPtrFactory<AssistantScriptExecutor> weak_ptr_factory_;
diff --git a/components/autofill_assistant/browser/assistant_script_executor_unittest.cc b/components/autofill_assistant/browser/assistant_script_executor_unittest.cc
index 47e8eba..7555119 100644
--- a/components/autofill_assistant/browser/assistant_script_executor_unittest.cc
+++ b/components/autofill_assistant/browser/assistant_script_executor_unittest.cc
@@ -86,7 +86,7 @@
   EXPECT_CALL(mock_assistant_service_, OnGetAssistantActions(_, _))
       .WillOnce(RunOnceCallback<1>(true, Serialize(actions_response)));
 
-  std::vector<ProcessedAssistantActionProto> processed_actions_capture;
+  std::vector<ProcessedActionProto> processed_actions_capture;
   EXPECT_CALL(mock_assistant_service_, OnGetNextAssistantActions(_, _, _))
       .WillOnce(DoAll(SaveArg<1>(&processed_actions_capture),
                       RunOnceCallback<2>(true, "")));
@@ -109,8 +109,8 @@
   ActionsResponseProto next_actions_response;
   next_actions_response.set_server_payload("payload2");
   next_actions_response.add_actions()->mutable_tell()->set_message("3");
-  std::vector<ProcessedAssistantActionProto> processed_actions1_capture;
-  std::vector<ProcessedAssistantActionProto> processed_actions2_capture;
+  std::vector<ProcessedActionProto> processed_actions1_capture;
+  std::vector<ProcessedActionProto> processed_actions2_capture;
   EXPECT_CALL(mock_assistant_service_, OnGetNextAssistantActions(_, _, _))
       .WillOnce(
           DoAll(SaveArg<1>(&processed_actions1_capture),
@@ -143,8 +143,8 @@
   next_actions_response.set_server_payload("payload2");
   next_actions_response.add_actions()->mutable_tell()->set_message(
       "will run after error");
-  std::vector<ProcessedAssistantActionProto> processed_actions1_capture;
-  std::vector<ProcessedAssistantActionProto> processed_actions2_capture;
+  std::vector<ProcessedActionProto> processed_actions1_capture;
+  std::vector<ProcessedActionProto> processed_actions2_capture;
   EXPECT_CALL(mock_assistant_service_, OnGetNextAssistantActions(_, _, _))
       .WillOnce(
           DoAll(SaveArg<1>(&processed_actions1_capture),
diff --git a/components/autofill_assistant/browser/assistant_service.cc b/components/autofill_assistant/browser/assistant_service.cc
index 65962d6..14711ef 100644
--- a/components/autofill_assistant/browser/assistant_service.cc
+++ b/components/autofill_assistant/browser/assistant_service.cc
@@ -30,10 +30,9 @@
           sender: "Autofill Assistant"
           description:
             "Chromium posts requests to autofill assistant server to get
-            assistant scripts for a URL."
+            scripts for a URL."
           trigger:
-            "A user opens a URL that could be assisted by autofill
-            assistant server."
+            "Matching URL."
           data: "None."
           destination: GOOGLE_OWNED_SERVICE
         }
@@ -96,7 +95,7 @@
 
 void AssistantService::GetNextAssistantActions(
     const std::string& previous_server_payload,
-    const std::vector<ProcessedAssistantActionProto>& processed_actions,
+    const std::vector<ProcessedActionProto>& processed_actions,
     ResponseCallback callback) {
   DCHECK(!previous_server_payload.empty());
 
@@ -114,20 +113,20 @@
 AssistantService::AssistantLoader::AssistantLoader() {}
 AssistantService::AssistantLoader::~AssistantLoader() {}
 
-std::unique_ptr<network::SimpleURLLoader>
+std::unique_ptr<::network::SimpleURLLoader>
 AssistantService::CreateAndStartLoader(const GURL& server_url,
                                        const std::string& request,
                                        AssistantLoader* loader) {
-  auto resource_request = std::make_unique<network::ResourceRequest>();
+  auto resource_request = std::make_unique<::network::ResourceRequest>();
   resource_request->url = server_url;
   resource_request->method = "POST";
   resource_request->fetch_redirect_mode =
-      network::mojom::FetchRedirectMode::kError;
+      ::network::mojom::FetchRedirectMode::kError;
   resource_request->load_flags =
       net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
-  std::unique_ptr<network::SimpleURLLoader> simple_loader =
-      network::SimpleURLLoader::Create(std::move(resource_request),
-                                       traffic_annotation);
+  std::unique_ptr<::network::SimpleURLLoader> simple_loader =
+      ::network::SimpleURLLoader::Create(std::move(resource_request),
+                                         traffic_annotation);
   simple_loader->AttachStringForUpload(request, "application/x-protobuffer");
   simple_loader->DownloadToStringOfUnboundedSizeUntilCrashAndDie(
       content::BrowserContext::GetDefaultStoragePartition(context_)
diff --git a/components/autofill_assistant/browser/assistant_service.h b/components/autofill_assistant/browser/assistant_service.h
index 8059a026..c73e357e 100644
--- a/components/autofill_assistant/browser/assistant_service.h
+++ b/components/autofill_assistant/browser/assistant_service.h
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "components/autofill_assistant/browser/assistant.pb.h"
+#include "components/autofill_assistant/browser/service.pb.h"
 #include "services/network/public/cpp/simple_url_loader.h"
 #include "url/gurl.h"
 
@@ -41,7 +41,7 @@
   // previous reponse.
   virtual void GetNextAssistantActions(
       const std::string& previous_server_payload,
-      const std::vector<ProcessedAssistantActionProto>& processed_actions,
+      const std::vector<ProcessedActionProto>& processed_actions,
       ResponseCallback callback);
 
  private:
@@ -51,9 +51,9 @@
     ~AssistantLoader();
 
     ResponseCallback callback;
-    std::unique_ptr<network::SimpleURLLoader> loader;
+    std::unique_ptr<::network::SimpleURLLoader> loader;
   };
-  std::unique_ptr<network::SimpleURLLoader> CreateAndStartLoader(
+  std::unique_ptr<::network::SimpleURLLoader> CreateAndStartLoader(
       const GURL& server_url,
       const std::string& request,
       AssistantLoader* loader);
diff --git a/components/autofill_assistant/browser/assistant_web_controller.cc b/components/autofill_assistant/browser/assistant_web_controller.cc
index f4f9d0ca..0fdf753 100644
--- a/components/autofill_assistant/browser/assistant_web_controller.cc
+++ b/components/autofill_assistant/browser/assistant_web_controller.cc
@@ -5,10 +5,23 @@
 #include "components/autofill_assistant/browser/assistant_web_controller.h"
 
 #include "base/callback.h"
+#include "base/logging.h"
+#include "content/public/browser/web_contents.h"
 
 namespace autofill_assistant {
 
-AssistantWebController::AssistantWebController() {}
+// static
+std::unique_ptr<AssistantWebController>
+AssistantWebController::CreateForWebContents(
+    content::WebContents* web_contents) {
+  return std::make_unique<AssistantWebController>(
+      std::make_unique<AssistantDevtoolsClient>(
+          content::DevToolsAgentHost::GetOrCreateFor(web_contents)));
+}
+
+AssistantWebController::AssistantWebController(
+    std::unique_ptr<AssistantDevtoolsClient> devtools_client)
+    : devtools_client_(std::move(devtools_client)), weak_ptr_factory_(this) {}
 
 AssistantWebController::~AssistantWebController() {}
 
@@ -22,8 +35,121 @@
 void AssistantWebController::ElementExists(
     const std::vector<std::string>& selectors,
     base::OnceCallback<void(bool)> callback) {
-  // TODO(crbug.com/806868): Implement check existence operation.
-  std::move(callback).Run(true);
+  DCHECK(!selectors.empty());
+  devtools_client_->GetDOM()->Enable();
+  devtools_client_->GetDOM()->GetDocument(base::BindOnce(
+      &AssistantWebController::OnGetDocumentForElementExists,
+      weak_ptr_factory_.GetWeakPtr(), selectors, std::move(callback)));
+}
+
+void AssistantWebController::OnGetDocumentForElementExists(
+    const std::vector<std::string>& selectors,
+    base::OnceCallback<void(bool)> callback,
+    std::unique_ptr<dom::GetDocumentResult> result) {
+  RecursiveElementExists(result->GetRoot()->GetNodeId(), 0, selectors,
+                         std::move(callback));
+}
+
+void AssistantWebController::RecursiveElementExists(
+    int node_id,
+    size_t index,
+    const std::vector<std::string>& selectors,
+    base::OnceCallback<void(bool)> callback) {
+  devtools_client_->GetDOM()->QuerySelectorAll(
+      node_id, selectors[index],
+      base::BindOnce(
+          &AssistantWebController::OnQuerySelectorAllForElementExists,
+          weak_ptr_factory_.GetWeakPtr(), index, selectors,
+          std::move(callback)));
+}
+
+void AssistantWebController::OnQuerySelectorAllForElementExists(
+    size_t index,
+    const std::vector<std::string>& selectors,
+    base::OnceCallback<void(bool)> callback,
+    std::unique_ptr<dom::QuerySelectorAllResult> result) {
+  if (!result || !result->GetNodeIds() || result->GetNodeIds()->empty()) {
+    OnResult(false, std::move(callback));
+    return;
+  }
+
+  if (result->GetNodeIds()->size() != 1) {
+    DLOG(WARNING) << "Have " << result->GetNodeIds()->size()
+                  << " elements exist.";
+    OnResult(false, std::move(callback));
+    return;
+  }
+
+  if (selectors.size() == index + 1) {
+    OnResult(true, std::move(callback));
+    return;
+  }
+
+  devtools_client_->GetDOM()->DescribeNode(
+      dom::DescribeNodeParams::Builder()
+          .SetNodeId(result->GetNodeIds()->front())
+          .Build(),
+      base::BindOnce(&AssistantWebController::OnDescribeNodeForElementExists,
+                     weak_ptr_factory_.GetWeakPtr(),
+                     result->GetNodeIds()->front(), index, selectors,
+                     std::move(callback)));
+}
+
+void AssistantWebController::OnDescribeNodeForElementExists(
+    int node_id,
+    size_t index,
+    const std::vector<std::string>& selectors,
+    base::OnceCallback<void(bool)> callback,
+    std::unique_ptr<dom::DescribeNodeResult> result) {
+  if (!result || !result->GetNode()) {
+    DLOG(ERROR) << "Failed to describe the node.";
+    OnResult(false, std::move(callback));
+    return;
+  }
+
+  auto* node = result->GetNode();
+  std::vector<int> backend_ids;
+  if (node->HasContentDocument()) {
+    backend_ids.emplace_back(node->GetContentDocument()->GetBackendNodeId());
+  }
+
+  if (node->HasShadowRoots()) {
+    // TODO(crbug.com/806868): Support multiple shadow roots.
+    backend_ids.emplace_back(
+        node->GetShadowRoots()->front()->GetBackendNodeId());
+  }
+
+  if (!backend_ids.empty()) {
+    devtools_client_->GetDOM()
+        ->GetExperimental()
+        ->PushNodesByBackendIdsToFrontend(
+            dom::PushNodesByBackendIdsToFrontendParams::Builder()
+                .SetBackendNodeIds(backend_ids)
+                .Build(),
+            base::BindOnce(&AssistantWebController::
+                               OnPushNodesByBackendIdsForElementExists,
+                           weak_ptr_factory_.GetWeakPtr(), index, selectors,
+                           std::move(callback)));
+    return;
+  }
+
+  RecursiveElementExists(node_id, ++index, selectors, std::move(callback));
+}
+
+void AssistantWebController::OnPushNodesByBackendIdsForElementExists(
+    size_t index,
+    const std::vector<std::string>& selectors,
+    base::OnceCallback<void(bool)> callback,
+    std::unique_ptr<dom::PushNodesByBackendIdsToFrontendResult> result) {
+  DCHECK(result->GetNodeIds()->size() == 1);
+  RecursiveElementExists(result->GetNodeIds()->front(), ++index, selectors,
+                         std::move(callback));
+}
+
+void AssistantWebController::OnResult(bool result,
+                                      base::OnceCallback<void(bool)> callback) {
+  devtools_client_->GetDOM()->Disable();
+  std::move(callback).Run(result);
 }
 
 void AssistantWebController::FillAddressForm(
diff --git a/components/autofill_assistant/browser/assistant_web_controller.h b/components/autofill_assistant/browser/assistant_web_controller.h
index e29457dd..b6eecd6 100644
--- a/components/autofill_assistant/browser/assistant_web_controller.h
+++ b/components/autofill_assistant/browser/assistant_web_controller.h
@@ -5,17 +5,30 @@
 #ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ASSISTANT_WEB_CONTROLLER_H_
 #define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ASSISTANT_WEB_CONTROLLER_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/callback_forward.h"
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "components/autofill_assistant/browser/devtools/assistant_devtools_client.h"
+#include "components/autofill_assistant/browser/devtools/devtools/domains/types_dom.h"
+
+namespace content {
+class WebContents;
+}
 
 namespace autofill_assistant {
 // Controller to interact with the web pages.
 class AssistantWebController {
  public:
-  AssistantWebController();
+  // Create assistant web controller for a given |web_contents|.
+  static std::unique_ptr<AssistantWebController> CreateForWebContents(
+      content::WebContents* web_contents);
+
+  explicit AssistantWebController(
+      std::unique_ptr<AssistantDevtoolsClient> devtools_client);
   virtual ~AssistantWebController();
 
   // Perform a moust left button click on the element given by |selectors| and
@@ -42,6 +55,35 @@
                             base::OnceCallback<void(bool)> callback);
 
  private:
+  void OnGetDocumentForElementExists(
+      const std::vector<std::string>& selectors,
+      base::OnceCallback<void(bool)> callback,
+      std::unique_ptr<dom::GetDocumentResult> result);
+  void RecursiveElementExists(int node_id,
+                              size_t index,
+                              const std::vector<std::string>& selectors,
+                              base::OnceCallback<void(bool)> callback);
+  void OnQuerySelectorAllForElementExists(
+      size_t index,
+      const std::vector<std::string>& selectors,
+      base::OnceCallback<void(bool)> callback,
+      std::unique_ptr<dom::QuerySelectorAllResult> result);
+  void OnDescribeNodeForElementExists(
+      int node_id,
+      size_t index,
+      const std::vector<std::string>& selectors,
+      base::OnceCallback<void(bool)> callback,
+      std::unique_ptr<dom::DescribeNodeResult> result);
+  void OnPushNodesByBackendIdsForElementExists(
+      size_t index,
+      const std::vector<std::string>& selectors,
+      base::OnceCallback<void(bool)> callback,
+      std::unique_ptr<dom::PushNodesByBackendIdsToFrontendResult> result);
+  void OnResult(bool result, base::OnceCallback<void(bool)> callback);
+
+  std::unique_ptr<AssistantDevtoolsClient> devtools_client_;
+
+  base::WeakPtrFactory<AssistantWebController> weak_ptr_factory_;
   DISALLOW_COPY_AND_ASSIGN(AssistantWebController);
 };
 
diff --git a/components/autofill_assistant/browser/assistant_web_controller_browsertest.cc b/components/autofill_assistant/browser/assistant_web_controller_browsertest.cc
new file mode 100644
index 0000000..30e957c
--- /dev/null
+++ b/components/autofill_assistant/browser/assistant_web_controller_browsertest.cc
@@ -0,0 +1,91 @@
+// 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/bind.h"
+#include "components/autofill_assistant/browser/assistant_web_controller.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/shell/browser/shell.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+
+namespace {
+
+class AssistantWebControllerBrowserTest : public content::ContentBrowserTest {
+ public:
+  AssistantWebControllerBrowserTest() {}
+  ~AssistantWebControllerBrowserTest() override {}
+
+  void SetUpOnMainThread() override {
+    ContentBrowserTest::SetUpOnMainThread();
+    http_server_ = std::make_unique<net::EmbeddedTestServer>(
+        net::EmbeddedTestServer::TYPE_HTTP);
+    http_server_->ServeFilesFromSourceDirectory(
+        "components/test/data/autofill_assistant");
+    ASSERT_TRUE(http_server_->Start());
+    ASSERT_TRUE(NavigateToURL(
+        shell(),
+        http_server_->GetURL("/autofill_assistant_target_website.html")));
+    assistant_web_controller_ =
+        autofill_assistant::AssistantWebController::CreateForWebContents(
+            shell()->web_contents());
+  }
+
+  void IsElementExists(const std::vector<std::string>& selectors,
+                       bool expected_result) {
+    base::RunLoop run_loop;
+    assistant_web_controller_->ElementExists(
+        selectors,
+        base::BindOnce(
+            &AssistantWebControllerBrowserTest::CheckElementExistCallback,
+            base::Unretained(this), run_loop.QuitClosure(), expected_result));
+    run_loop.Run();
+  }
+
+  void CheckElementExistCallback(const base::Closure& done_callback,
+                                 bool expected_result,
+                                 bool result) {
+    ASSERT_EQ(expected_result, result);
+    done_callback.Run();
+  }
+
+ private:
+  std::unique_ptr<net::EmbeddedTestServer> http_server_;
+  std::unique_ptr<autofill_assistant::AssistantWebController>
+      assistant_web_controller_;
+
+  DISALLOW_COPY_AND_ASSIGN(AssistantWebControllerBrowserTest);
+};
+
+IN_PROC_BROWSER_TEST_F(AssistantWebControllerBrowserTest, IsElementExists) {
+  std::vector<std::string> selectors;
+  selectors.emplace_back("#button");
+  IsElementExists(selectors, true);
+  selectors.emplace_back("#whatever");
+  IsElementExists(selectors, false);
+
+  // IFrame.
+  selectors.clear();
+  selectors.emplace_back("#iframe");
+  selectors.emplace_back("#text");
+  IsElementExists(selectors, true);
+  selectors.emplace_back("#whatever");
+  IsElementExists(selectors, false);
+
+  selectors.clear();
+  selectors.emplace_back("#iframe");
+  selectors.emplace_back("[name=name]");
+  IsElementExists(selectors, true);
+
+  // Shadow DOM.
+  selectors.clear();
+  selectors.emplace_back("#iframe");
+  selectors.emplace_back("#shadowsection");
+  selectors.emplace_back("#button");
+  IsElementExists(selectors, true);
+  selectors.emplace_back("#whatever");
+  IsElementExists(selectors, false);
+}
+
+}  // namespace
diff --git a/components/autofill_assistant/browser/devtools/BUILD.gn b/components/autofill_assistant/browser/devtools/BUILD.gn
new file mode 100644
index 0000000..d12e34f
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/BUILD.gn
@@ -0,0 +1,98 @@
+# 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.
+
+devtools_domains = [
+  "accessibility",
+  "animation",
+  "application_cache",
+  "browser",
+  "cache_storage",
+  "console",
+  "css",
+  "database",
+  "debugger",
+  "device_orientation",
+  "dom",
+  "dom_debugger",
+  "dom_snapshot",
+  "dom_storage",
+  "emulation",
+  "headless_experimental",
+  "heap_profiler",
+  "indexeddb",
+  "input",
+  "inspector",
+  "io",
+  "layer_tree",
+  "log",
+  "memory",
+  "network",
+  "page",
+  "performance",
+  "profiler",
+  "runtime",
+  "security",
+  "service_worker",
+  "target",
+  "tracing",
+]
+
+generated_devtools_api = []
+foreach(domain, devtools_domains) {
+  generated_devtools_api += [
+    "$target_gen_dir/devtools/domains/" + domain + ".cc",
+    "$target_gen_dir/devtools/domains/" + domain + ".h",
+    "$target_gen_dir/devtools/domains/types_" + domain + ".h",
+    "$target_gen_dir/devtools/domains/types_" + domain + ".cc",
+    "$target_gen_dir/devtools/internal/type_conversions_" + domain + ".h",
+    "$target_gen_dir/devtools/internal/" + "types_forward_declarations_" +
+        domain + ".h",
+  ]
+}
+
+action("gen_devtools_client_api") {
+  script = "devtools_api/client_api_generator.py"
+  deps = [
+    "//third_party/blink/renderer/core/inspector:protocol_version",
+  ]
+  inputs = [
+    "$root_gen_dir/third_party/blink/renderer/core/inspector/protocol.json",
+  ]
+
+  outputs = generated_devtools_api
+
+  sources = [
+    "devtools_api/domain_cc.template",
+    "devtools_api/domain_h.template",
+    "devtools_api/domain_type_conversions_h.template",
+    "devtools_api/domain_types_cc.template",
+    "devtools_api/domain_types_forward_declarations_h.template",
+    "devtools_api/domain_types_h.template",
+  ]
+
+  args = [
+    "--protocol",
+    rebase_path(inputs[0], root_build_dir),
+    "--output_dir",
+    rebase_path(target_gen_dir, root_build_dir),
+  ]
+}
+
+source_set("devtools") {
+  sources = [
+    "assistant_devtools_client.cc",
+    "assistant_devtools_client.h",
+    "error_reporter.cc",
+    "error_reporter.h",
+    "message_dispatcher.h",
+  ]
+
+  sources += generated_devtools_api
+
+  deps = [
+    ":gen_devtools_client_api",
+    "//base",
+    "//content/public/browser",
+  ]
+}
diff --git a/components/autofill_assistant/browser/devtools/README b/components/autofill_assistant/browser/devtools/README
new file mode 100644
index 0000000..01ccd8a
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/README
@@ -0,0 +1,16 @@
+Files in this directory are mostly copied and modified from //src/headless,
+https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless
+
+Files in ./devtools_api/ are from //src/headless/lib/browser/devtools_api/
+
+assistant_devtools_client.cc/h are from //src/headless/lib/browser/headless_devtools_client_impl.cc
+
+error_reporter.cc/h are from //src/headless/public/util/error_reporter.cc/h
+
+message_dispatcher.h is from //src/headless/public/internal/message_dispatcher.h
+
+value_conversions.h is from //src/headless/public/internal/value_conversions.h
+
+These files are used to generate Devtools protocols C++ bindings.
+
+Put them in a shared place when there are other components depend on them.
diff --git a/components/autofill_assistant/browser/devtools/assistant_devtools_client.cc b/components/autofill_assistant/browser/devtools/assistant_devtools_client.cc
new file mode 100644
index 0000000..2e90ef6
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/assistant_devtools_client.cc
@@ -0,0 +1,241 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/lib/browser/headless_devtools_client_impl.cc
+// Modifications include namespace, path, simplifying and removing unnecessary
+// codes.
+
+#include "components/autofill_assistant/browser/devtools/assistant_devtools_client.h"
+
+#include "base/bind.h"
+#include "base/callback_forward.h"
+#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
+#include "content/public/browser/browser_thread.h"
+
+namespace autofill_assistant {
+
+AssistantDevtoolsClient::AssistantDevtoolsClient(
+    scoped_refptr<content::DevToolsAgentHost> agent_host)
+    : agent_host_(agent_host),
+      dom_domain_(this),
+      page_domain_(this),
+      renderer_crashed_(false),
+      next_message_id_(0),
+      weak_ptr_factory_(this) {
+  browser_main_thread_ = content::BrowserThread::GetTaskRunnerForThread(
+      content::BrowserThread::UI);
+  agent_host_->AttachClient(this);
+}
+
+AssistantDevtoolsClient::~AssistantDevtoolsClient() {}
+
+dom::Domain* AssistantDevtoolsClient::GetDOM() {
+  return &dom_domain_;
+}
+
+page::Domain* AssistantDevtoolsClient::GetPage() {
+  return &page_domain_;
+}
+
+void AssistantDevtoolsClient::SendMessage(
+    const char* method,
+    std::unique_ptr<base::Value> params,
+    base::OnceCallback<void(const base::Value&)> callback) {
+  SendMessageWithParams(method, std::move(params), std::move(callback));
+}
+
+void AssistantDevtoolsClient::SendMessage(const char* method,
+                                          std::unique_ptr<base::Value> params,
+                                          base::OnceClosure callback) {
+  SendMessageWithParams(method, std::move(params), std::move(callback));
+}
+
+template <typename CallbackType>
+void AssistantDevtoolsClient::SendMessageWithParams(
+    const char* method,
+    std::unique_ptr<base::Value> params,
+    CallbackType callback) {
+  base::DictionaryValue message;
+  message.SetString("method", method);
+  message.Set("params", std::move(params));
+
+  if (renderer_crashed_)
+    return;
+  int id = next_message_id_;
+  next_message_id_ += 2;  // We only send even numbered messages.
+  message.SetInteger("id", id);
+  pending_messages_[id] = Callback(std::move(callback));
+
+  std::string json_message;
+  base::JSONWriter::Write(message, &json_message);
+
+  bool success = agent_host_->DispatchProtocolMessage(this, json_message);
+  DCHECK(success);
+}
+
+void AssistantDevtoolsClient::RegisterEventHandler(
+    const char* method,
+    base::RepeatingCallback<void(const base::Value&)> callback) {
+  DCHECK(event_handlers_.find(method) == event_handlers_.end());
+  event_handlers_[method] = std::move(callback);
+}
+
+void AssistantDevtoolsClient::DispatchProtocolMessage(
+    content::DevToolsAgentHost* agent_host,
+    const std::string& json_message) {
+  DCHECK_EQ(agent_host, agent_host_.get());
+
+  std::unique_ptr<base::Value> message =
+      base::JSONReader::Read(json_message, base::JSON_PARSE_RFC);
+  DCHECK(message && message->is_dict());
+
+  const base::DictionaryValue* message_dict;
+  bool success = message->GetAsDictionary(&message_dict);
+  DCHECK(success);
+
+  success = message_dict->HasKey("id")
+                ? DispatchMessageReply(std::move(message), *message_dict)
+                : DispatchEvent(std::move(message), *message_dict);
+  if (!success)
+    DLOG(ERROR) << "Unhandled protocol message: " << json_message;
+}
+
+bool AssistantDevtoolsClient::DispatchMessageReply(
+    std::unique_ptr<base::Value> owning_message,
+    const base::DictionaryValue& message_dict) {
+  const base::Value* id_value = message_dict.FindKey("id");
+  if (!id_value) {
+    NOTREACHED() << "ID must be specified.";
+    return false;
+  }
+  auto it = pending_messages_.find(id_value->GetInt());
+  if (it == pending_messages_.end()) {
+    NOTREACHED() << "Unexpected reply";
+    return false;
+  }
+  Callback callback = std::move(it->second);
+  pending_messages_.erase(it);
+  if (!callback.callback_with_result.is_null()) {
+    const base::DictionaryValue* result_dict;
+    if (message_dict.GetDictionary("result", &result_dict)) {
+      if (browser_main_thread_) {
+        browser_main_thread_->PostTask(
+            FROM_HERE,
+            base::BindOnce(
+                &AssistantDevtoolsClient::DispatchMessageReplyWithResultTask,
+                weak_ptr_factory_.GetWeakPtr(), std::move(owning_message),
+                std::move(callback.callback_with_result), result_dict));
+      } else {
+        std::move(callback.callback_with_result).Run(*result_dict);
+      }
+    } else if (message_dict.GetDictionary("error", &result_dict)) {
+      auto null_value = std::make_unique<base::Value>();
+      DLOG(ERROR) << "Error in method call result: " << *result_dict;
+      if (browser_main_thread_) {
+        browser_main_thread_->PostTask(
+            FROM_HERE,
+            base::BindOnce(
+                &AssistantDevtoolsClient::DispatchMessageReplyWithResultTask,
+                weak_ptr_factory_.GetWeakPtr(), std::move(null_value),
+                std::move(callback.callback_with_result), null_value.get()));
+      } else {
+        std::move(callback.callback_with_result).Run(*null_value);
+      }
+    } else {
+      NOTREACHED() << "Reply has neither result nor error";
+      return false;
+    }
+  } else if (!callback.callback.is_null()) {
+    if (browser_main_thread_) {
+      browser_main_thread_->PostTask(
+          FROM_HERE,
+          base::BindOnce(
+              [](base::WeakPtr<AssistantDevtoolsClient> self,
+                 base::OnceClosure callback) {
+                if (self)
+                  std::move(callback).Run();
+              },
+              weak_ptr_factory_.GetWeakPtr(), std::move(callback.callback)));
+    } else {
+      std::move(callback.callback).Run();
+    }
+  }
+  return true;
+}
+
+void AssistantDevtoolsClient::DispatchMessageReplyWithResultTask(
+    std::unique_ptr<base::Value> owning_message,
+    base::OnceCallback<void(const base::Value&)> callback,
+    const base::Value* result_dict) {
+  std::move(callback).Run(*result_dict);
+}
+
+bool AssistantDevtoolsClient::DispatchEvent(
+    std::unique_ptr<base::Value> owning_message,
+    const base::DictionaryValue& message_dict) {
+  const base::Value* method_value = message_dict.FindKey("method");
+  if (!method_value)
+    return false;
+  const std::string& method = method_value->GetString();
+  if (method == "Inspector.targetCrashed")
+    renderer_crashed_ = true;
+  EventHandlerMap::const_iterator it = event_handlers_.find(method);
+  if (it == event_handlers_.end()) {
+    if (method != "Inspector.targetCrashed")
+      LOG(ERROR) << "Unknown event: " << method;
+    return false;
+  }
+  if (!it->second.is_null()) {
+    const base::DictionaryValue* result_dict;
+    if (!message_dict.GetDictionary("params", &result_dict)) {
+      NOTREACHED() << "Badly formed event parameters";
+      return false;
+    }
+    if (browser_main_thread_) {
+      // DevTools assumes event handling is async so we must post a task here or
+      // we risk breaking things.
+      browser_main_thread_->PostTask(
+          FROM_HERE,
+          base::BindOnce(&AssistantDevtoolsClient::DispatchEventTask,
+                         weak_ptr_factory_.GetWeakPtr(),
+                         std::move(owning_message), &it->second, result_dict));
+    } else {
+      DispatchEventTask(std::move(owning_message), &it->second, result_dict);
+    }
+  }
+  return true;
+}
+
+void AssistantDevtoolsClient::DispatchEventTask(
+    std::unique_ptr<base::Value> owning_message,
+    const EventHandler* event_handler,
+    const base::DictionaryValue* result_dict) {
+  event_handler->Run(*result_dict);
+}
+
+void AssistantDevtoolsClient::AgentHostClosed(
+    content::DevToolsAgentHost* agent_host) {
+  // Agent host is not expected to be closed when this object is alive.
+  renderer_crashed_ = true;
+}
+
+AssistantDevtoolsClient::Callback::Callback() = default;
+
+AssistantDevtoolsClient::Callback::Callback(Callback&& other) = default;
+
+AssistantDevtoolsClient::Callback::Callback(base::OnceClosure callback)
+    : callback(std::move(callback)) {}
+
+AssistantDevtoolsClient::Callback::Callback(
+    base::OnceCallback<void(const base::Value&)> callback)
+    : callback_with_result(std::move(callback)) {}
+
+AssistantDevtoolsClient::Callback::~Callback() = default;
+
+AssistantDevtoolsClient::Callback& AssistantDevtoolsClient::Callback::operator=(
+    Callback&& other) = default;
+
+}  // namespace autofill_assistant.
diff --git a/components/autofill_assistant/browser/devtools/assistant_devtools_client.h b/components/autofill_assistant/browser/devtools/assistant_devtools_client.h
new file mode 100644
index 0000000..179e85e
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/assistant_devtools_client.h
@@ -0,0 +1,107 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/public/internal/headless_devtools_client_impl.h
+// Modifications include namespace, path, simplifying and removing unnecessary
+// codes.
+
+#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_ASSISTANT_DEVTOOLS_CLIENT_H_
+#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_ASSISTANT_DEVTOOLS_CLIENT_H_
+
+#include <memory>
+#include <string>
+#include <unordered_map>
+
+#include "base/callback_forward.h"
+#include "base/macros.h"
+#include "base/memory/scoped_refptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/sequenced_task_runner.h"
+#include "components/autofill_assistant/browser/devtools//devtools/domains/dom.h"
+#include "components/autofill_assistant/browser/devtools//devtools/domains/page.h"
+#include "components/autofill_assistant/browser/devtools/message_dispatcher.h"
+#include "content/public/browser/devtools_agent_host.h"
+#include "content/public/browser/devtools_agent_host_client.h"
+
+namespace autofill_assistant {
+
+class AssistantDevtoolsClient : public MessageDispatcher,
+                                public content::DevToolsAgentHostClient {
+ public:
+  explicit AssistantDevtoolsClient(
+      scoped_refptr<content::DevToolsAgentHost> agent_host);
+  ~AssistantDevtoolsClient() override;
+
+  dom::Domain* GetDOM();
+  page::Domain* GetPage();
+
+  // MessageDispatcher implementation:
+  void SendMessage(
+      const char* method,
+      std::unique_ptr<base::Value> params,
+      base::OnceCallback<void(const base::Value&)> callback) override;
+  void SendMessage(const char* method,
+                   std::unique_ptr<base::Value> params,
+                   base::OnceClosure callback) override;
+  void RegisterEventHandler(
+      const char* method,
+      base::RepeatingCallback<void(const base::Value&)> callback) override;
+
+  // content::DevToolsAgentHostClient overrides:
+  void DispatchProtocolMessage(content::DevToolsAgentHost* agent_host,
+                               const std::string& message) override;
+  void AgentHostClosed(content::DevToolsAgentHost* agent_host) override;
+
+ private:
+  // Contains a callback with or without a result parameter depending on the
+  // message type.
+  struct Callback {
+    Callback();
+    Callback(Callback&& other);
+    explicit Callback(base::OnceClosure callback);
+    explicit Callback(base::OnceCallback<void(const base::Value&)> callback);
+    ~Callback();
+
+    Callback& operator=(Callback&& other);
+
+    base::OnceClosure callback;
+    base::OnceCallback<void(const base::Value&)> callback_with_result;
+  };
+
+  template <typename CallbackType>
+  void SendMessageWithParams(const char* method,
+                             std::unique_ptr<base::Value> params,
+                             CallbackType callback);
+  bool DispatchMessageReply(std::unique_ptr<base::Value> owning_message,
+                            const base::DictionaryValue& message_dict);
+  void DispatchMessageReplyWithResultTask(
+      std::unique_ptr<base::Value> owning_message,
+      base::OnceCallback<void(const base::Value&)> callback,
+      const base::Value* result_dict);
+  bool DispatchEvent(std::unique_ptr<base::Value> owning_message,
+                     const base::DictionaryValue& message_dict);
+
+  using EventHandler = base::RepeatingCallback<void(const base::Value&)>;
+  using EventHandlerMap = std::unordered_map<std::string, EventHandler>;
+  void DispatchEventTask(std::unique_ptr<base::Value> owning_message,
+                         const EventHandler* event_handler,
+                         const base::DictionaryValue* result_dict);
+
+  scoped_refptr<content::DevToolsAgentHost> agent_host_;
+  scoped_refptr<base::SequencedTaskRunner> browser_main_thread_;
+
+  dom::ExperimentalDomain dom_domain_;
+  page::ExperimentalDomain page_domain_;
+  std::unordered_map<int, Callback> pending_messages_;
+  EventHandlerMap event_handlers_;
+  bool renderer_crashed_;
+  int next_message_id_;
+
+  base::WeakPtrFactory<AssistantDevtoolsClient> weak_ptr_factory_;
+  DISALLOW_COPY_AND_ASSIGN(AssistantDevtoolsClient);
+};
+
+}  // namespace autofill_assistant.
+#endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_ASSISTANT_DEVTOOLS_CLIENT_H_
\ No newline at end of file
diff --git a/components/autofill_assistant/browser/devtools/devtools_api/client_api_generator.py b/components/autofill_assistant/browser/devtools/devtools_api/client_api_generator.py
new file mode 100644
index 0000000..fccd6ed
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/devtools_api/client_api_generator.py
@@ -0,0 +1,563 @@
+# 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.
+
+# Copied and modified from
+# https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/lib/browser/devtools_api/client_api_generator.py
+# Modifications include namespace, path and remove of js binings.
+
+import argparse
+import collections
+import functools
+import os.path
+import re
+import sys
+
+try:
+  import json
+except ImportError:
+  import simplejson as json
+
+# Path handling for libraries and templates
+# Paths have to be normalized because Jinja uses the exact template path to
+# determine the hash used in the cache filename, and we need a pre-caching step
+# to be concurrency-safe. Use absolute path because __file__ is absolute if
+# module is imported, and relative if executed directly.
+# If paths differ between pre-caching and individual file compilation, the cache
+# is regenerated, which causes a race condition and breaks concurrent build,
+# since some compile processes will try to read the partially written cache.
+module_path, module_filename = os.path.split(os.path.realpath(__file__))
+third_party_dir = os.path.normpath(
+    os.path.join(module_path, os.pardir, os.pardir, os.pardir, os.pardir,
+                 os.pardir, 'third_party'))
+templates_dir = module_path
+
+# jinja2 is in chromium's third_party directory.
+# Insert at 1 so at front to override system libraries, and
+# after path[0] == invoking script dir
+sys.path.insert(1, third_party_dir)
+import jinja2
+
+
+def ParseArguments(args):
+  """Parses command line arguments and returns a (json_api, output_dir) tuple.
+  """
+  cmdline_parser = argparse.ArgumentParser()
+  cmdline_parser.add_argument('--protocol', required=True)
+  cmdline_parser.add_argument('--output_dir', required=True)
+
+  args = cmdline_parser.parse_args(args)
+  with open(args.protocol, 'r') as f:
+    return json.load(f), args.output_dir
+
+
+def ToTitleCase(name):
+  return name[:1].upper() + name[1:]
+
+
+def DashToCamelCase(word):
+  return ''.join(ToTitleCase(x) for x in word.split('-'))
+
+
+def CamelCaseToHackerStyle(name):
+  # Do two passes to insert '_' chars to deal with overlapping matches (e.g.,
+  # 'LoLoLoL').
+  name = re.sub(r'([^_])([A-Z][a-z]+?)', r'\1_\2', name)
+  name = re.sub(r'([^_])([A-Z][a-z]+?)', r'\1_\2', name)
+  return name.lower()
+
+
+def Shorten(js_name, domain_name):
+  short_name = domain_name + '.'
+  long_name = 'chromium.DevTools.' + short_name
+  return js_name.replace(long_name, short_name)
+
+
+def ShortForm(domain, js_name):
+  if not 'js_dependencies' in domain:
+    return js_name
+
+  for dependency in domain['js_dependencies']:
+    js_name = Shorten(js_name, dependency)
+  js_name = Shorten(js_name, domain['domain'])
+  return js_name
+
+
+def SanitizeLiteral(literal):
+  return {
+      # Rename null enumeration values to avoid a clash with the NULL macro.
+      'null': 'none',
+      # Rename literals that clash with Win32 defined macros.
+      'error': 'err',
+      'mouseMoved': 'mouse_ptr_moved',
+      'Strict': 'exact',
+      'getCurrentTime': 'getCurrentAnimationTime',
+      # Rename mathematical constants to avoid colliding with C macros.
+      'Infinity': 'InfinityValue',
+      '-Infinity': 'NegativeInfinityValue',
+      'NaN': 'NaNValue',
+      # Turn negative zero into a safe identifier.
+      '-0': 'NegativeZeroValue',
+  }.get(literal, literal)
+
+
+def InitializeJinjaEnv(cache_dir):
+  jinja_env = jinja2.Environment(
+      loader=jinja2.FileSystemLoader(templates_dir),
+      # Bytecode cache is not concurrency-safe unless pre-cached:
+      # if pre-cached this is read-only, but writing creates a race condition.
+      bytecode_cache=jinja2.FileSystemBytecodeCache(cache_dir),
+      keep_trailing_newline=True,  # Newline-terminate generated files.
+      lstrip_blocks=True,  # So we can indent control flow tags.
+      trim_blocks=True)
+  jinja_env.filters.update({
+      'to_title_case': ToTitleCase,
+      'dash_to_camelcase': DashToCamelCase,
+      'camelcase_to_hacker_style': CamelCaseToHackerStyle,
+      'sanitize_literal': SanitizeLiteral,
+  })
+  jinja_env.add_extension('jinja2.ext.loopcontrols')
+  return jinja_env
+
+
+def PatchFullQualifiedRefs(json_api):
+  def PatchFullQualifiedRefsInDomain(json, domain_name):
+    if isinstance(json, list):
+      for item in json:
+        PatchFullQualifiedRefsInDomain(item, domain_name)
+
+    if not isinstance(json, dict):
+      return
+    for key in json:
+      if key != '$ref':
+        PatchFullQualifiedRefsInDomain(json[key], domain_name)
+        continue
+      if not '.' in json['$ref']:
+        json['$ref'] = domain_name + '.' + json['$ref']
+
+  for domain in json_api['domains']:
+    PatchFullQualifiedRefsInDomain(domain, domain['domain'])
+
+
+def CreateUserTypeDefinition(domain, type):
+  namespace = CamelCaseToHackerStyle(domain['domain'])
+  return {
+      'js_type': '!chromium.DevTools.%s.%s' % (domain['domain'], type['id']),
+      'return_type': 'std::unique_ptr<::autofill_assistant::%s::%s>' % (
+          namespace, type['id']),
+      'pass_type': 'std::unique_ptr<::autofill_assistant::%s::%s>' % (
+          namespace, type['id']),
+      'to_raw_type': '*%s',
+      'to_raw_return_type': '%s.get()',
+      'to_pass_type': 'std::move(%s)',
+      'type': 'std::unique_ptr<::autofill_assistant::%s::%s>' % (
+          namespace, type['id']),
+      'raw_type': '::autofill_assistant::%s::%s' % (
+          namespace, type['id']),
+      'raw_pass_type': '::autofill_assistant::%s::%s*' % (
+          namespace, type['id']),
+      'raw_return_type': 'const ::autofill_assistant::%s::%s*' % (
+          namespace, type['id']),
+  }
+
+
+def CreateEnumTypeDefinition(domain_name, type):
+  namespace = CamelCaseToHackerStyle(domain_name)
+  return {
+      'js_type': '!chromium.DevTools.%s.%s' % (domain_name, type['id']),
+      'return_type': '::autofill_assistant::%s::%s' % (namespace, type['id']),
+      'pass_type': '::autofill_assistant::%s::%s' % (namespace, type['id']),
+      'to_raw_type': '%s',
+      'to_raw_return_type': '%s',
+      'to_pass_type': '%s',
+      'type': '::autofill_assistant::%s::%s' % (namespace, type['id']),
+      'raw_type': '::autofill_assistant::%s::%s' % (namespace, type['id']),
+      'raw_pass_type': '::autofill_assistant::%s::%s' % (namespace, type['id']),
+      'raw_return_type': '::autofill_assistant::%s::%s' % (
+          namespace, type['id']),
+  }
+
+
+def CreateObjectTypeDefinition():
+  return {
+      'js_type': 'Object',
+      'return_type': 'std::unique_ptr<base::DictionaryValue>',
+      'pass_type': 'std::unique_ptr<base::DictionaryValue>',
+      'to_raw_type': '*%s',
+      'to_raw_return_type': '%s.get()',
+      'to_pass_type': 'std::move(%s)',
+      'type': 'std::unique_ptr<base::DictionaryValue>',
+      'raw_type': 'base::DictionaryValue',
+      'raw_pass_type': 'base::DictionaryValue*',
+      'raw_return_type': 'const base::DictionaryValue*',
+  }
+
+
+def WrapObjectTypeDefinition(type):
+  id = type.get('id', 'base::Value')
+  return {
+      'js_type': '!Object',
+      'return_type': 'std::unique_ptr<%s>' % id,
+      'pass_type': 'std::unique_ptr<%s>' % id,
+      'to_raw_type': '*%s',
+      'to_raw_return_type': '%s.get()',
+      'to_pass_type': 'std::move(%s)',
+      'type': 'std::unique_ptr<%s>' % id,
+      'raw_type': id,
+      'raw_pass_type': '%s*' % id,
+      'raw_return_type': 'const %s*' % id,
+  }
+
+
+def CreateAnyTypeDefinition():
+  return {
+      'js_type': '*',
+      'return_type': 'std::unique_ptr<base::Value>',
+      'pass_type': 'std::unique_ptr<base::Value>',
+      'to_raw_type': '*%s',
+      'to_raw_return_type': '%s.get()',
+      'to_pass_type': 'std::move(%s)',
+      'type': 'std::unique_ptr<base::Value>',
+      'raw_type': 'base::Value',
+      'raw_pass_type': 'base::Value*',
+      'raw_return_type': 'const base::Value*',
+  }
+
+
+def CreateStringTypeDefinition():
+  return {
+      'js_type': 'string',
+      'return_type': 'std::string',
+      'pass_type': 'const std::string&',
+      'to_pass_type': '%s',
+      'to_raw_type': '%s',
+      'to_raw_return_type': '%s',
+      'type': 'std::string',
+      'raw_type': 'std::string',
+      'raw_pass_type': 'const std::string&',
+      'raw_return_type': 'std::string',
+  }
+
+
+def CreatePrimitiveTypeDefinition(type):
+  typedefs = {
+      'number': 'double',
+      'integer': 'int',
+      'boolean': 'bool',
+  }
+  js_typedefs = {
+      'number': 'number',
+      'integer': 'number',
+      'boolean': 'boolean',
+  }
+  return {
+      'js_type': js_typedefs[type],
+      'return_type': typedefs[type],
+      'pass_type': typedefs[type],
+      'to_pass_type': '%s',
+      'to_raw_type': '%s',
+      'to_raw_return_type': '%s',
+      'type': typedefs[type],
+      'raw_type': typedefs[type],
+      'raw_pass_type': typedefs[type],
+      'raw_return_type': typedefs[type],
+  }
+
+
+type_definitions = {}
+type_definitions['number'] = CreatePrimitiveTypeDefinition('number')
+type_definitions['integer'] = CreatePrimitiveTypeDefinition('integer')
+type_definitions['boolean'] = CreatePrimitiveTypeDefinition('boolean')
+type_definitions['string'] = CreateStringTypeDefinition()
+type_definitions['object'] = CreateObjectTypeDefinition()
+type_definitions['any'] = CreateAnyTypeDefinition()
+
+
+def WrapArrayDefinition(type):
+  return {
+      'js_type': '!Array.<%s>' % type['js_type'],
+      'return_type': 'std::vector<%s>' % type['type'],
+      'pass_type': 'std::vector<%s>' % type['type'],
+      'to_raw_type': '%s',
+      'to_raw_return_type': '&%s',
+      'to_pass_type': 'std::move(%s)',
+      'type': 'std::vector<%s>' % type['type'],
+      'raw_type': 'std::vector<%s>' % type['type'],
+      'raw_pass_type': 'std::vector<%s>*' % type['type'],
+      'raw_return_type': 'const std::vector<%s>*' % type['type'],
+  }
+
+
+def CreateTypeDefinitions(json_api):
+  for domain in json_api['domains']:
+    if not ('types' in domain):
+      continue
+    for type in domain['types']:
+      if type['type'] == 'object':
+        if 'properties' in type:
+          type_definitions[domain['domain'] + '.' + type['id']] = (
+              CreateUserTypeDefinition(domain, type))
+        else:
+          type_definitions[domain['domain'] + '.' + type['id']] = (
+              CreateObjectTypeDefinition())
+      elif type['type'] == 'array':
+        type_definitions[domain['domain'] + '.' + type['id']] = (
+            ResolveType(type))
+      elif 'enum' in type:
+        type_definitions[domain['domain'] + '.' + type['id']] = (
+            CreateEnumTypeDefinition(domain['domain'], type))
+        type['$ref'] = domain['domain'] + '.' + type['id']
+      elif type['type'] == 'any':
+        type_definitions[domain['domain'] + '.' + type['id']] = (
+            CreateAnyTypeDefinition())
+      elif type['type'] == 'string':
+        type_definitions[domain['domain'] + '.' + type['id']] = (
+            CreateStringTypeDefinition())
+      else:
+        type_definitions[domain['domain'] + '.' + type['id']] = (
+            CreatePrimitiveTypeDefinition(type['type']))
+
+
+def TypeDefinition(name):
+  return type_definitions[name]
+
+
+def ResolveType(property):
+  if '$ref' in property:
+    return type_definitions[property['$ref']]
+  elif property['type'] == 'object':
+    return WrapObjectTypeDefinition(property)
+  elif property['type'] == 'array':
+    return WrapArrayDefinition(ResolveType(property['items']))
+  return type_definitions[property['type']]
+
+
+def JoinArrays(dict, keys):
+  result = []
+  for key in keys:
+    if key in dict:
+      result += dict[key]
+  return result
+
+
+def SynthesizeEnumType(domain, owner, type):
+  type['id'] = ToTitleCase(owner) + ToTitleCase(type['name'])
+  type_definitions[domain['domain'] + '.' + type['id']] = (
+      CreateEnumTypeDefinition(domain['domain'], type))
+  type['$ref'] = domain['domain'] + '.' + type['id']
+  domain['types'].append(type)
+
+
+def SynthesizeCommandTypes(json_api):
+  """Generate types for command parameters, return values and enum
+     properties.
+  """
+  for domain in json_api['domains']:
+    if not 'types' in domain:
+      domain['types'] = []
+    for type in domain['types']:
+      if type['type'] == 'object':
+        for property in type.get('properties', []):
+          if 'enum' in property and not '$ref' in property:
+            SynthesizeEnumType(domain, type['id'], property)
+
+    for command in domain.get('commands', []):
+      parameters_required = False
+      if 'parameters' in command:
+        for parameter in command['parameters']:
+          if not 'optional' in parameter:
+            parameters_required = True
+          if 'enum' in parameter and not '$ref' in parameter:
+            SynthesizeEnumType(domain, command['name'], parameter)
+        parameters_type = {
+            'id': ToTitleCase(SanitizeLiteral(command['name'])) + 'Params',
+            'type': 'object',
+            'description': 'Parameters for the %s command.' % ToTitleCase(
+                SanitizeLiteral(command['name'])),
+            'properties': command['parameters']
+        }
+        domain['types'].append(parameters_type)
+      if 'returns' in command:
+        for parameter in command['returns']:
+          if 'enum' in parameter and not '$ref' in parameter:
+            SynthesizeEnumType(domain, command['name'], parameter)
+        result_type = {
+            'id': ToTitleCase(SanitizeLiteral(command['name'])) + 'Result',
+            'type': 'object',
+            'description': 'Result for the %s command.' % ToTitleCase(
+                SanitizeLiteral(command['name'])),
+            'properties': command['returns']
+        }
+        domain['types'].append(result_type)
+      command['parameters_required'] = parameters_required
+
+
+def SynthesizeEventTypes(json_api):
+  """Generate types for events and their properties.
+
+  Note that parameter objects are also created for events without parameters to
+  make it easier to introduce parameters later.
+  """
+  for domain in json_api['domains']:
+    if not 'types' in domain:
+      domain['types'] = []
+    for event in domain.get('events', []):
+      for parameter in event.get('parameters', []):
+        if 'enum' in parameter and not '$ref' in parameter:
+          SynthesizeEnumType(domain, event['name'], parameter)
+      event_type = {
+          'id': ToTitleCase(event['name']) + 'Params',
+          'type': 'object',
+          'description': 'Parameters for the %s event.' % ToTitleCase(
+              event['name']),
+          'properties': event.get('parameters', [])
+      }
+      domain['types'].append(event_type)
+
+
+def InitializeDomainDependencies(json_api):
+  """For each domain create list of domains given domain depends on,
+  including itself."""
+
+  direct_deps = collections.defaultdict(set)
+  types_required = collections.defaultdict(set)
+
+  def GetDomainDepsFromRefs(domain_name, json):
+    if isinstance(json, list):
+      for value in json:
+        GetDomainDepsFromRefs(domain_name, value)
+      return
+
+    if not isinstance(json, dict):
+      return
+    for value in json.itervalues():
+      GetDomainDepsFromRefs(domain_name, value)
+
+    if '$ref' in json:
+      if '.' in json['$ref']:
+        dep = json['$ref'].split('.')[0]
+        direct_deps[domain_name].add(dep)
+        types_required[domain_name].add(json['$ref'])
+
+  for domain in json_api['domains']:
+    direct_deps[domain['domain']] = set(domain.get('dependencies', []))
+    types_required[domain['domain']] = set(domain.get('types_required', []))
+    GetDomainDepsFromRefs(domain['domain'], domain)
+
+  def TraverseDependencies(domain, deps):
+    if domain in deps:
+      return
+    deps.add(domain)
+
+    for dep in direct_deps[domain]:
+      TraverseDependencies(dep, deps)
+
+  for domain in json_api['domains']:
+    domain_deps = set()
+    TraverseDependencies(domain['domain'], domain_deps)
+    if 'dependencies' in domain:
+      domain['js_dependencies'] = domain['dependencies']
+    else:
+      domain['js_dependencies'] = []
+
+    domain['js_forward_declarations'] = []
+    for type in types_required[domain['domain']]:
+      if not type.split('.')[0] in domain['js_dependencies']:
+        domain['js_forward_declarations'].append(type)
+    domain['dependencies'] = sorted(domain_deps)
+
+
+def PatchExperimentalCommandsAndEvents(json_api):
+  """Mark all commands and events in experimental domains as experimental
+  and make sure experimental commands have at least empty parameters
+  and return values.
+  """
+  for domain in json_api['domains']:
+    if domain.get('experimental', False):
+      for command in domain.get('commands', []):
+        command['experimental'] = True
+      for event in domain.get('events', []):
+        event['experimental'] = True
+
+
+def EnsureDirectoryExists(path):
+  if not os.path.exists(path):
+    os.makedirs(path)
+
+
+def EnsureCommandsHaveParametersAndReturnTypes(json_api):
+  """Make sure all commands have at least empty parameters and return values.
+  This guarantees API compatibility if a previously experimental command is made
+  stable.
+  """
+  for domain in json_api['domains']:
+    for command in domain.get('commands', []):
+      if not 'parameters' in command:
+        command['parameters'] = []
+      if not 'returns' in command:
+        command['returns'] = []
+    for event in domain.get('events', []):
+      if not 'parameters' in event:
+        event['parameters'] = []
+
+
+def GeneratePerDomain(jinja_env, output_dirname, json_api, class_name,
+                    file_types, domain_name_to_file_name_func):
+  EnsureDirectoryExists(output_dirname)
+  for file_type in file_types:
+    template = jinja_env.get_template('/%s_%s.template' % (
+        class_name, file_type))
+    for domain in json_api['domains']:
+      template_context = {
+          'domain': domain,
+          'resolve_type': ResolveType,
+          'short_form': functools.partial(ShortForm, domain),
+      }
+      domain_name = CamelCaseToHackerStyle(domain['domain'])
+      output_file = '%s/%s.%s' % (output_dirname,
+                                  domain_name_to_file_name_func(domain_name),
+                                  file_type)
+      with open(output_file, 'w') as f:
+        f.write(template.render(template_context))
+
+
+def GenerateDomains(jinja_env, output_dirname, json_api):
+  GeneratePerDomain(
+      jinja_env, os.path.join(output_dirname, 'devtools', 'domains'), json_api,
+      'domain', ['cc', 'h'],
+      lambda domain_name: domain_name)
+
+def GenerateTypes(jinja_env, output_dirname, json_api):
+  # Generate forward declarations for types.
+  GeneratePerDomain(
+      jinja_env, os.path.join(output_dirname, 'devtools', 'internal'),
+      json_api, 'domain_types_forward_declarations', ['h'],
+      lambda domain_name: 'types_forward_declarations_%s' % (domain_name, ))
+  # Generate types on per-domain basis.
+  GeneratePerDomain(
+      jinja_env, os.path.join(output_dirname, 'devtools', 'domains'),
+      json_api, 'domain_types', ['h', 'cc'],
+      lambda domain_name: 'types_%s' % (domain_name, ))
+
+
+def GenerateTypeConversions(jinja_env, output_dirname, json_api):
+  # Generate type conversions on per-domain basis.
+  GeneratePerDomain(
+      jinja_env, os.path.join(output_dirname, 'devtools', 'internal'),
+      json_api, 'domain_type_conversions', ['h'],
+      lambda domain_name: 'type_conversions_%s' % (domain_name, ))
+
+
+if __name__ == '__main__':
+  json_api, output_dirname = ParseArguments(sys.argv[1:])
+  jinja_env = InitializeJinjaEnv(output_dirname)
+  InitializeDomainDependencies(json_api)
+  PatchExperimentalCommandsAndEvents(json_api)
+  EnsureCommandsHaveParametersAndReturnTypes(json_api)
+  SynthesizeCommandTypes(json_api)
+  SynthesizeEventTypes(json_api)
+  PatchFullQualifiedRefs(json_api)
+  CreateTypeDefinitions(json_api)
+  GenerateDomains(jinja_env, output_dirname, json_api)
+  GenerateTypes(jinja_env, output_dirname, json_api)
+  GenerateTypeConversions(jinja_env, output_dirname, json_api)
diff --git a/components/autofill_assistant/browser/devtools/devtools_api/domain_cc.template b/components/autofill_assistant/browser/devtools/devtools_api/domain_cc.template
new file mode 100644
index 0000000..6fcaa7c
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/devtools_api/domain_cc.template
@@ -0,0 +1,155 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/lib/browser/devtools_api/domain_cc.template
+// Modifications include namespace and path.
+
+#include "components/autofill_assistant/browser/devtools/devtools/domains/{{domain.domain | camelcase_to_hacker_style}}.h"
+
+#include "base/bind.h"
+#include "components/autofill_assistant/browser/devtools/error_reporter.h"
+
+namespace autofill_assistant {
+
+namespace {{domain.domain | camelcase_to_hacker_style}} {
+
+ExperimentalDomain* Domain::GetExperimental() {
+  return static_cast<ExperimentalDomain*>(this);
+}
+
+  {% if "events" in domain %}
+void Domain::AddObserver(Observer* observer) {
+  RegisterEventHandlersIfNeeded();
+  observers_.AddObserver(observer);
+}
+
+void Domain::RemoveObserver(Observer* observer) {
+  observers_.RemoveObserver(observer);
+}
+
+void Domain::RegisterEventHandlersIfNeeded() {
+  if (event_handlers_registered_)
+    return;
+  event_handlers_registered_ = true;
+    {# Register all events in this domain. #}
+    {% for event in domain.events %}
+  dispatcher_->RegisterEventHandler(
+      "{{domain.domain}}.{{event.name}}",
+      base::BindRepeating(&Domain::Dispatch{{event.name | to_title_case}}Event,
+                          base::Unretained(this)));
+    {% endfor %}
+}
+  {% endif %}
+
+  {% for command in domain.commands %}
+    {% set class_name = 'ExperimentalDomain' if command.experimental else 'Domain' %}
+    {% set method_name = command.name | sanitize_literal | to_title_case %}
+void {{class_name}}::{{method_name}}(std::unique_ptr<{{method_name}}Params> params, base::OnceCallback<void(std::unique_ptr<{{method_name}}Result>)> callback) {
+  dispatcher_->SendMessage("{{domain.domain}}.{{command.name}}", params->Serialize(), base::BindOnce(&Domain::Handle{{method_name}}Response, std::move(callback)));
+}
+    {# Generate convenience methods that take the required parameters directly. #}
+    {% if not "parameters" in command %}{% continue %}{% endif %}
+    {# Don't generate these for experimental commands. #}
+    {% if command.experimental %}{% continue %}{% endif %}
+
+void {{class_name}}::{{method_name}}({##}
+    {% for parameter in command.parameters -%}
+        {% if parameter.get("optional", False) -%}
+          {% break %}
+        {% endif %}
+        {% if not loop.first %}, {% endif %}
+{{resolve_type(parameter).pass_type}} {{parameter.name | camelcase_to_hacker_style -}}
+    {% endfor %}
+    {% if command.get("parameters", []) and not command.parameters[0].get("optional", False) %}, {% endif %}{# -#}
+    {% if command.get("returns", []) -%}
+      base::OnceCallback<void(std::unique_ptr<{{method_name}}Result>)> callback{##}
+    {% else -%}
+      base::OnceClosure callback{##}
+    {% endif %}) {
+    {# Build the parameters object. #}
+  std::unique_ptr<{{method_name}}Params> params = {{method_name}}Params::Builder()
+    {% for parameter in command.parameters -%}
+        {% if parameter.get("optional", False) -%}
+          {% break %}
+        {% endif %}
+      .Set{{parameter.name | to_title_case}}(std::move({{parameter.name | camelcase_to_hacker_style}}))
+    {% endfor %}
+      .Build();
+    {# Send the message. #}
+    {% if command.get("returns", []) -%}
+  dispatcher_->SendMessage("{{domain.domain}}.{{command.name}}", params->Serialize(), base::BindOnce(&Domain::Handle{{method_name}}Response, std::move(callback)));
+    {% else %}
+  dispatcher_->SendMessage("{{domain.domain}}.{{command.name}}", params->Serialize(), std::move(callback));
+    {% endif %}
+}
+    {# If the command has no return value, generate a convenience method that #}
+    {# accepts a base::OnceClosure together with the parameters object. #}
+    {% if not command.get("returns", []) %}
+void {{class_name}}::{{method_name}}(std::unique_ptr<{{method_name}}Params> params, base::OnceClosure callback) {
+  dispatcher_->SendMessage("{{domain.domain}}.{{command.name}}", params->Serialize(), std::move(callback));
+}
+    {% endif %}
+  {% endfor %}
+
+{# Generate response handlers for commands that need them. #}
+{% for command in domain.commands %}
+  {% if not "returns" in command %}{% continue %}{% endif %}
+  {% set method_name = command.name | sanitize_literal | to_title_case %}
+
+// static
+void Domain::Handle{{method_name}}Response(base::OnceCallback<void(std::unique_ptr<{{method_name}}Result>)> callback, const base::Value& response) {
+  if (callback.is_null())
+    return;
+  // This is an error response.
+  if (response.is_none()) {
+    std::move(callback).Run(nullptr);
+    return;
+  }
+  ErrorReporter errors;
+  std::unique_ptr<{{method_name}}Result> result = {{method_name}}Result::Parse(response, &errors);
+  DCHECK(!errors.HasErrors()) << errors.ToString();
+  std::move(callback).Run(std::move(result));
+}
+{% endfor %}
+{% if "events" in domain %}
+  {% for event in domain.events %}
+
+{# Generate dispatchers which call registered observers for an event. #}
+void Domain::Dispatch{{event.name | to_title_case}}Event(const base::Value& params) {
+  ErrorReporter errors;
+  std::unique_ptr<{{event.name | to_title_case}}Params> parsed_params({{event.name | to_title_case}}Params::Parse(params, &errors));
+  DCHECK(!errors.HasErrors()) << errors.ToString();
+  for (ExperimentalObserver& observer : observers_) {
+    observer.On{{event.name | to_title_case}}(*parsed_params);
+  }
+}
+  {% endfor %}
+{% endif %}
+
+Domain::Domain(MessageDispatcher* dispatcher)
+    : dispatcher_(dispatcher) {
+}
+
+Domain::~Domain() {}
+
+ExperimentalDomain::ExperimentalDomain(MessageDispatcher* dispatcher)
+    : Domain(dispatcher) {}
+
+ExperimentalDomain::~ExperimentalDomain() {}
+
+  {% if "events" in domain %}
+void ExperimentalDomain::AddObserver(ExperimentalObserver* observer) {
+  RegisterEventHandlersIfNeeded();
+  observers_.AddObserver(observer);
+}
+
+void ExperimentalDomain::RemoveObserver(ExperimentalObserver* observer) {
+  observers_.RemoveObserver(observer);
+}
+  {% endif %}
+
+}  // namespace {{domain.domain | camelcase_to_hacker_style}}
+
+} // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/devtools/devtools_api/domain_h.template b/components/autofill_assistant/browser/devtools/devtools_api/domain_h.template
new file mode 100644
index 0000000..ab5397e
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/devtools_api/domain_h.template
@@ -0,0 +1,163 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/lib/browser/devtools_api/domain_h.template
+// Modifications include namespace and path.
+
+#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_DOMAINS_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
+#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_DOMAINS_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
+
+#include "base/callback.h"
+#include "base/observer_list.h"
+#include "base/values.h"
+{% for domain_name in domain.dependencies %}
+#include "components/autofill_assistant/browser/devtools/devtools/domains/types_{{domain_name | camelcase_to_hacker_style}}.h"
+{% endfor %}
+#include "components/autofill_assistant/browser/devtools/message_dispatcher.h"
+
+{# Macro for defining a member function for a given command. #}
+{% macro command_decl(command) %}
+  {% set method_name = command.name | sanitize_literal | to_title_case %}
+  {% if command.description %}
+  // {{ command.description.replace('\n', '\n  // ') }}
+  {% endif %}
+  void {{method_name}}(std::unique_ptr<{{method_name}}Params> params, base::OnceCallback<void(std::unique_ptr<{{method_name}}Result>)> callback = base::OnceCallback<void(std::unique_ptr<{{method_name}}Result>)>());
+  {# Generate convenience methods that take the required parameters directly. #}
+  {# Don't generate these for experimental commands. #}
+  {% if "parameters" in command and not command.experimental %}
+  void {{method_name}}({##}
+    {% for parameter in command.parameters -%}
+      {% if parameter.get("optional", False) -%}
+        {% break %}
+      {% endif %}
+      {% if not loop.first %}, {% endif %}
+{{resolve_type(parameter).pass_type}} {{parameter.name | camelcase_to_hacker_style -}}
+    {% endfor %}
+    {% if command.get("parameters", []) and not command.parameters[0].get("optional", False) %}, {% endif %}{# -#}
+    {% if command.get("returns", []) -%}
+      base::OnceCallback<void(std::unique_ptr<{{method_name}}Result>)> callback = base::OnceCallback<void(std::unique_ptr<{{method_name}}Result>)>(){##}
+    {% else -%}
+      base::OnceClosure callback = base::OnceClosure(){##}
+    {% endif %});
+    {# If the command has no return value, generate a convenience method that #}
+    {# accepts a base::Closure together with the parameters object. #}
+    {% if not command.get("returns", []) %}
+  void {{method_name}}(std::unique_ptr<{{method_name}}Params> params, base::OnceClosure callback);
+    {% endif %}
+  {% endif %}
+{% endmacro %}
+
+namespace autofill_assistant {
+namespace {{domain.domain | camelcase_to_hacker_style}} {
+class ExperimentalDomain;
+class ExperimentalObserver;
+{% if "events" in domain %}
+
+class ExperimentalObserver {
+ public:
+  virtual ~ExperimentalObserver() {}
+  {% for event in domain.events %}
+    {% if event.description %}
+  // {{event.description.replace('\n', '\n  // ')}}
+    {% endif %}
+  virtual void On{{event.name | to_title_case}}(const {{event.name | to_title_case}}Params& params) {}
+  {% endfor %}
+};
+
+class Observer : public ExperimentalObserver {
+ public:
+  virtual ~Observer() {}
+  {% for event in domain.events %}
+    {% if event.description %}
+  // {% if event.experimental %}Experimental: {% endif %}{{event.description.replace('\n', '\n  // ')}}
+    {% endif %}
+  virtual void On{{event.name | to_title_case}}(const {{event.name | to_title_case}}Params& params) {% if event.experimental %}final {% endif %}{}
+  {% endfor %}
+};
+{% endif %}
+
+{% if domain.description %}
+// {{domain.description.replace('\n', '\n// ')}}
+{% endif %}
+class Domain {
+ public:
+  {% if "events" in domain %}
+  // Add or remove an observer. |observer| must be removed before being
+  // destroyed.
+  void AddObserver(Observer* observer);
+  void RemoveObserver(Observer* observer);
+  {% endif %}
+
+  // Return the experimental interface for this domain. Note that experimental
+  // commands may be changed or removed at any time.
+  ExperimentalDomain* GetExperimental();
+
+  {# Generate methods for each command. #}
+  {% for command in domain.commands %}
+    {# Skip experimental commands. #}
+    {% if command.experimental %}{% continue %}{% endif %}
+{{ command_decl(command) }}
+  {% endfor %}
+ protected:
+  Domain(MessageDispatcher* dispatcher);
+  ~Domain();
+
+  {# Generate response handlers for commands that need them. #}
+  {% for command in domain.commands %}
+    {% if not "returns" in command %}{% continue %}{% endif %}
+    {% set method_name = command.name | sanitize_literal | to_title_case %}
+  static void Handle{{method_name}}Response(base::OnceCallback<void(std::unique_ptr<{{method_name}}Result>)> callback, const base::Value& response);
+  {% endfor %}
+
+  {# Generate event dispatchers. #}
+  {% for event in domain.events %}
+  void Dispatch{{event.name | to_title_case}}Event(const base::Value& params);
+  {% endfor %}
+
+  MessageDispatcher* dispatcher_;  // Not owned.
+  {% if "events" in domain %}
+  base::ObserverList<ExperimentalObserver>::Unchecked observers_;
+  {% endif %}
+
+  {% if "events" in domain %}
+ protected:
+  void RegisterEventHandlersIfNeeded();
+
+  {% endif %}
+ private:
+  {% if "events" in domain %}
+  bool event_handlers_registered_ = false;
+
+  {% endif %}
+  DISALLOW_COPY_AND_ASSIGN(Domain);
+};
+
+class ExperimentalDomain : public Domain {
+ public:
+  ExperimentalDomain(MessageDispatcher* dispatcher);
+  ~ExperimentalDomain();
+
+  {% if "events" in domain %}
+  // Add or remove an observer. |observer| must be removed before being
+  // destroyed.
+  void AddObserver(ExperimentalObserver* observer);
+  void RemoveObserver(ExperimentalObserver* observer);
+  {% endif %}
+
+  {# Generate methods for each experimental command. #}
+  {% for command in domain.commands %}
+    {# Skip non-experimental commands. #}
+    {% if not command.experimental %}{% continue %}{% endif %}
+{{ command_decl(command) }}
+  {% endfor %}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ExperimentalDomain);
+};
+
+}  // namespace {{domain.domain | camelcase_to_hacker_style}}
+}  // namespace autofill_assistant
+
+#endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_DOMAINS_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
diff --git a/components/autofill_assistant/browser/devtools/devtools_api/domain_type_conversions_h.template b/components/autofill_assistant/browser/devtools/devtools_api/domain_type_conversions_h.template
new file mode 100644
index 0000000..0de8468
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/devtools_api/domain_type_conversions_h.template
@@ -0,0 +1,71 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/lib/browser/devtools_api/domain_type_conversions_h.template
+// Modifications include namespace and path.
+
+#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_INTERNAL_TYPE_CONVERSIONS_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
+#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_INTERNAL_TYPE_CONVERSIONS_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
+
+#include "components/autofill_assistant/browser/devtools/devtools/domains/types_{{domain.domain | camelcase_to_hacker_style}}.h"
+#include "components/autofill_assistant/browser/devtools/value_conversions.h"
+
+namespace autofill_assistant {
+namespace internal {
+
+{% for type in domain.types %}
+  {% set namespace = domain.domain | camelcase_to_hacker_style %}
+  {% if "enum" in type %}
+template <>
+struct FromValue<{{namespace}}::{{type.id}}> {
+  static {{namespace}}::{{type.id}} Parse(const base::Value& value, ErrorReporter* errors) {
+    {% set default = namespace + '::' + type.id + '::' + type.enum[0] | sanitize_literal | dash_to_camelcase | camelcase_to_hacker_style | upper %}
+    if (!value.is_string()) {
+      errors->AddError("string enum value expected");
+      {# Return an arbitrary enum member -- the caller will just ignore it. #}
+      return {{default}};
+    }
+    {% for literal in type.enum %}
+    if (value.GetString() == "{{literal}}")
+      return {{namespace}}::{{type.id}}::{{literal | sanitize_literal | dash_to_camelcase | camelcase_to_hacker_style | upper }};
+    {% endfor %}
+    errors->AddError("invalid enum value");
+    return {{default}};
+  }
+};
+
+template <typename T>
+std::unique_ptr<base::Value> ToValueImpl(const {{namespace}}::{{type.id}}& value, T*) {
+  switch (value) {
+    {% for literal in type.enum %}
+    case {{namespace}}::{{type.id}}::{{literal | sanitize_literal | dash_to_camelcase | camelcase_to_hacker_style | upper }}:
+      return std::make_unique<base::Value>("{{literal}}");
+    {% endfor %}
+  };
+  NOTREACHED();
+  return nullptr;
+}
+    {% continue %}
+  {% endif %}
+
+  {% if not (type.type == "object") or not ("properties" in type) %}{% continue %}{% endif %}
+template <>
+struct FromValue<{{namespace}}::{{type.id}}> {
+  static std::unique_ptr<{{namespace}}::{{type.id}}> Parse(const base::Value& value, ErrorReporter* errors) {
+    return {{namespace}}::{{type.id}}::Parse(value, errors);
+  }
+};
+
+template <typename T>
+std::unique_ptr<base::Value> ToValueImpl(const {{namespace}}::{{type.id}}& value, T*) {
+  return value.Serialize();
+}
+
+{% endfor %}
+
+}  // namespace internal
+}  // namespace autofill_assistant
+
+#endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_INTERNAL_TYPE_CONVERSIONS_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
diff --git a/components/autofill_assistant/browser/devtools/devtools_api/domain_types_cc.template b/components/autofill_assistant/browser/devtools/devtools_api/domain_types_cc.template
new file mode 100644
index 0000000..593d4a2
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/devtools_api/domain_types_cc.template
@@ -0,0 +1,94 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/lib/browser/devtools_api/domain_types_cc.template
+// Modifications include namespace and path.
+
+{% for domain_name in domain.dependencies %}
+#include "components/autofill_assistant/browser/devtools/devtools/domains/types_{{domain_name | camelcase_to_hacker_style}}.h"
+{% endfor %}
+
+#include "base/memory/ptr_util.h"
+{% for dep in domain.dependencies %}
+#include "components/autofill_assistant/browser/devtools/devtools/internal/type_conversions_{{dep | camelcase_to_hacker_style}}.h"
+{% endfor %}
+
+namespace autofill_assistant {
+
+namespace internal {
+
+template <typename T>
+std::unique_ptr<base::Value> ToValue(const T& value) {
+  return ToValueImpl(value, static_cast<T*>(nullptr));
+}
+
+}  // namespace internal
+
+namespace {{domain.domain | camelcase_to_hacker_style}} {
+{% for type in domain.types %}
+  {% if not (type.type == "object") or not ("properties" in type) %}{% continue %}{% endif %}
+
+std::unique_ptr<{{type.id}}> {{type.id}}::Parse(const base::Value& value, ErrorReporter* errors) {
+  errors->Push();
+  errors->SetName("{{type.id}}");
+  if (!value.is_dict()) {
+    errors->AddError("object expected");
+    errors->Pop();
+    return nullptr;
+  }
+
+  std::unique_ptr<{{type.id}}> result(new {{type.id}}());
+  errors->Push();
+  errors->SetName("{{type.id}}");
+  {% for property in type.properties %}
+    {% set value_name = property.name | camelcase_to_hacker_style + "_value" %}
+  const base::Value* {{value_name}} = value.FindKey("{{property.name}}");
+  if ({{value_name}}) {
+    errors->SetName("{{property.name}}");
+    {% if property.optional %}
+    result->{{property.name | camelcase_to_hacker_style}}_ = internal::FromValue<{{resolve_type(property).raw_type}}>::Parse(*{{value_name}}, errors);
+    {% else %}
+    result->{{property.name | camelcase_to_hacker_style}}_ = internal::FromValue<{{resolve_type(property).raw_type}}>::Parse(*{{value_name}}, errors);
+    {% endif %}
+    {% if property.optional %}
+  }
+    {% else %}
+  } else {
+    errors->AddError("required property missing: {{property.name}}");
+  }
+    {% endif %}
+  {% endfor %}
+  errors->Pop();
+  errors->Pop();
+  if (errors->HasErrors())
+    return nullptr;
+  return result;
+}
+
+std::unique_ptr<base::Value> {{type.id}}::Serialize() const {
+  std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue());
+  {% for property in type.properties %}
+    {% set type = resolve_type(property) %}
+    {% if property.optional %}
+  if ({{property.name | camelcase_to_hacker_style}}_)
+    result->Set("{{property.name}}", internal::ToValue({{type.to_raw_type % ("%s_.value()" % property.name | camelcase_to_hacker_style)}}));
+    {% else %}
+  result->Set("{{property.name}}", internal::ToValue({{type.to_raw_type % ("%s_" % property.name | camelcase_to_hacker_style)}}));
+    {% endif %}
+  {% endfor %}
+  return std::move(result);
+}
+
+std::unique_ptr<{{type.id}}> {{type.id}}::Clone() const {
+  ErrorReporter errors;
+  std::unique_ptr<{{type.id}}> result = Parse(*Serialize(), &errors);
+  DCHECK(!errors.HasErrors());
+  return result;
+}
+
+{% endfor %}
+
+}  // namespace {{domain.domain | camelcase_to_hacker_style}}
+}  // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/devtools/devtools_api/domain_types_forward_declarations_h.template b/components/autofill_assistant/browser/devtools/devtools_api/domain_types_forward_declarations_h.template
new file mode 100644
index 0000000..bed69fc
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/devtools_api/domain_types_forward_declarations_h.template
@@ -0,0 +1,41 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/lib/browser/devtools_api/domain_types_forward_declarations_h.template
+// Modifications include namespace and path.
+
+#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_INTERNAL_TYPES_FORWARD_DECLARATIONS_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
+#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_INTERNAL_TYPES_FORWARD_DECLARATIONS_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
+
+#include "base/values.h"
+
+namespace autofill_assistant {
+
+namespace {{domain.domain | camelcase_to_hacker_style}} {
+{% for type in domain.types %}
+  {% if type.type == "object" %}
+    {% if "properties" in type %}
+class {{type.id}};
+    {% else %}
+using {{type.id}} = base::Value;
+    {% endif %}
+  {% endif %}
+{% endfor %}
+
+{% for type in domain.types %}
+  {% if "enum" in type %}
+enum class {{type.id}} {
+    {% for literal in type.enum %}
+  {{ literal | sanitize_literal | dash_to_camelcase | camelcase_to_hacker_style | upper }}{{',' if not loop.last}}
+    {% endfor %}
+};
+
+  {% endif %}
+{% endfor %}
+}  // namespace {{domain.domain | camelcase_to_hacker_style}}
+
+}  // namespace autofill_assistant
+
+#endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_INTERNAL_TYPES_FORWARD_DECLARATIONS_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
diff --git a/components/autofill_assistant/browser/devtools/devtools_api/domain_types_h.template b/components/autofill_assistant/browser/devtools/devtools_api/domain_types_h.template
new file mode 100644
index 0000000..eb5312a
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/devtools_api/domain_types_h.template
@@ -0,0 +1,120 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/lib/browser/devtools_api/domain_types_h.template
+// Modifications include namespace and path.
+
+#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_DOMAINS_TYPES_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
+#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_DOMAINS_TYPES_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
+
+#include "base/optional.h"
+#include "base/values.h"
+{% for domain_name in domain.dependencies %}
+#include "components/autofill_assistant/browser/devtools/devtools/internal/types_forward_declarations_{{domain_name | camelcase_to_hacker_style}}.h"
+{% endfor %}
+
+namespace autofill_assistant {
+
+class ErrorReporter;
+
+namespace {{domain.domain | camelcase_to_hacker_style}} {
+{% for type in domain.types %}
+  {% if not (type.type == "object") or not ("properties" in type) %}{% continue %}{% endif %}
+
+  {% if type.description %}
+// {{type.description.replace('\n', '\n// ')}}
+  {% endif %}
+class {{type.id}} {
+ public:
+  static {{resolve_type(type).pass_type}} Parse(const base::Value& value, ErrorReporter* errors);
+  ~{{type.id}}() { }
+  {% for property in type.properties %}
+
+  {% if property.description %}
+  // {{property.description.replace('\n', '\n  // ')}}
+  {% endif %}
+    {% if property.optional %}
+  bool Has{{property.name | to_title_case}}() const { return !!{{property.name | camelcase_to_hacker_style}}_; }
+  {{resolve_type(property).raw_return_type}} Get{{property.name | to_title_case}}() const { DCHECK(Has{{property.name | to_title_case}}()); return {{resolve_type(property).to_raw_return_type % ("%s_.value()" % property.name | camelcase_to_hacker_style)}}; }
+  void Set{{property.name | to_title_case}}({{resolve_type(property).pass_type}} value) { {{property.name | camelcase_to_hacker_style}}_ = {{resolve_type(property).to_pass_type % 'value'}}; }
+    {% else %}
+  {{resolve_type(property).raw_return_type}} Get{{property.name | to_title_case}}() const { return {{resolve_type(property).to_raw_return_type % ("%s_" % property.name | camelcase_to_hacker_style)}}; }
+  void Set{{property.name | to_title_case}}({{resolve_type(property).pass_type}} value) { {{property.name | camelcase_to_hacker_style}}_ = {{resolve_type(property).to_pass_type % 'value'}}; }
+    {% endif %}
+  {% endfor %}
+
+  std::unique_ptr<base::Value> Serialize() const;
+  {{resolve_type(type).pass_type}} Clone() const;
+
+  template<int STATE>
+  class {{type.id}}Builder {
+  public:
+    enum {
+      kNoFieldsSet = 0,
+  {% for property in type.properties|rejectattr("optional") %}
+    k{{property.name | to_title_case}}Set = 1 << {{loop.index}},
+  {% endfor %}
+      kAllRequiredFieldsSet = (
+  {%- for property in type.properties %}
+    {% if not(property.optional) %}k{{property.name | to_title_case}}Set | {%endif %}
+  {% endfor %}0)
+    };
+
+  {% for property in type.properties %}
+    {% if property.optional %}
+    {{type.id}}Builder<STATE>& Set{{property.name | to_title_case}}({{resolve_type(property).pass_type}} value) {
+      result_->Set{{property.name | to_title_case}}({{resolve_type(property).to_pass_type % 'value'}});
+      return *this;
+    }
+    {% else %}
+    {{type.id}}Builder<STATE | k{{property.name | to_title_case}}Set>& Set{{property.name | to_title_case}}({{resolve_type(property).pass_type}} value) {
+      static_assert(!(STATE & k{{property.name | to_title_case}}Set), "property {{property.name}} should not have already been set");
+      result_->Set{{property.name | to_title_case}}({{resolve_type(property).to_pass_type % 'value'}});
+      return CastState<k{{property.name | to_title_case}}Set>();
+    }
+    {% endif %}
+
+  {% endfor %}
+    {{resolve_type(type).pass_type}} Build() {
+      static_assert(STATE == kAllRequiredFieldsSet, "all required fields should have been set");
+      return std::move(result_);
+    }
+
+   private:
+    friend class {{type.id}};
+    {{type.id}}Builder() : result_(new {{type.id}}()) { }
+
+    template<int STEP> {{type.id}}Builder<STATE | STEP>& CastState() {
+      return *reinterpret_cast<{{type.id}}Builder<STATE | STEP>*>(this);
+    }
+
+    {{resolve_type(type).type}} result_;
+  };
+
+  static {{type.id}}Builder<0> Builder() {
+    return {{type.id}}Builder<0>();
+  }
+
+ private:
+  {{type.id}}() { }
+
+  {% for property in type.properties %}
+    {% if property.optional %}
+  base::Optional<{{resolve_type(property).type}}> {{property.name | camelcase_to_hacker_style}}_;
+    {% else %}
+  {{resolve_type(property).type}} {{property.name | camelcase_to_hacker_style}}_;
+    {% endif %}
+  {% endfor %}
+
+  DISALLOW_COPY_AND_ASSIGN({{type.id}});
+};
+
+{% endfor %}
+
+}  // namespace {{domain.domain | camelcase_to_hacker_style}}
+
+}  // namespace autofill_assistant
+
+#endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_DEVTOOLS_DOMAINS_TYPES_{{domain.domain | camelcase_to_hacker_style | upper}}_H_
diff --git a/components/autofill_assistant/browser/devtools/error_reporter.cc b/components/autofill_assistant/browser/devtools/error_reporter.cc
new file mode 100644
index 0000000..296f9a4
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/error_reporter.cc
@@ -0,0 +1,62 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/public/util/error_reporter.cc
+// Modifications include namespace.
+
+#include "components/autofill_assistant/browser/devtools/error_reporter.h"
+
+#include <sstream>
+
+#include "base/logging.h"
+#include "base/strings/string_util.h"
+
+namespace autofill_assistant {
+
+ErrorReporter::ErrorReporter() = default;
+
+ErrorReporter::~ErrorReporter() = default;
+
+#if DCHECK_IS_ON()
+void ErrorReporter::Push() {
+  path_.push_back(nullptr);
+}
+
+void ErrorReporter::Pop() {
+  path_.pop_back();
+}
+
+void ErrorReporter::SetName(const char* name) {
+  DCHECK(!path_.empty());
+  path_.back() = name;
+}
+
+void ErrorReporter::AddError(base::StringPiece description) {
+  std::stringstream error;
+  for (size_t i = 0; i < path_.size(); i++) {
+    if (!path_[i]) {
+      DCHECK_EQ(i + 1, path_.size());
+      break;
+    }
+    if (i)
+      error << '.';
+    error << path_[i];
+  }
+  if (error.tellp())
+    error << ": ";
+  error << description;
+  errors_.push_back(error.str());
+}
+
+bool ErrorReporter::HasErrors() const {
+  return !errors_.empty();
+}
+
+std::string ErrorReporter::ToString() const {
+  return base::JoinString(errors_, ", ");
+}
+#endif  // DCHECK_IS_ON()
+
+}  // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/devtools/error_reporter.h b/components/autofill_assistant/browser/devtools/error_reporter.h
new file mode 100644
index 0000000..fd81f9c
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/error_reporter.h
@@ -0,0 +1,65 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/public/util/error_reporter.h
+// Modifications include namespace and path.
+
+#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_ERROR_REPORTER_H_
+#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_ERROR_REPORTER_H_
+
+#include <string>
+#include <vector>
+
+#include "base/strings/string_piece.h"
+
+namespace autofill_assistant {
+
+// Tracks errors which are encountered while parsing client API types. Note that
+// errors are only reported in debug builds (i.e., when DCHECK is enabled).
+class ErrorReporter {
+ public:
+  ErrorReporter();
+  ~ErrorReporter();
+
+#if DCHECK_IS_ON()
+  // Enter a new nested parsing context. It will initially have a null name.
+  void Push();
+
+  // Leave the current parsing context, returning to the previous one.
+  void Pop();
+
+  // Set the name of the current parsing context. |name| must be a string with
+  // application lifetime.
+  void SetName(const char* name);
+
+  // Report an error in the current parsing context.
+  void AddError(base::StringPiece description);
+
+  // Returns true if any errors have been reported so far.
+  bool HasErrors() const;
+
+  // Returns a list of reported errors.
+  const std::vector<std::string>& errors() const { return errors_; }
+
+  // Returns a string containing all the errors concatenated together.
+  std::string ToString() const;
+#else   // DCHECK_IS_ON()
+  void Push() {}
+  void Pop() {}
+  void SetName(const char* name) {}
+  void AddError(base::StringPiece description) {}
+  bool HasErrors() const { return false; }
+  std::vector<std::string> errors() const { return {}; }
+  std::string ToString() const { return ""; }
+#endif  // DCHECK_IS_ON()
+
+ private:
+  std::vector<const char*> path_;
+  std::vector<std::string> errors_;
+};
+
+}  // namespace autofill_assistant
+
+#endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_ERROR_REPORTER_H_
diff --git a/components/autofill_assistant/browser/devtools/message_dispatcher.h b/components/autofill_assistant/browser/devtools/message_dispatcher.h
new file mode 100644
index 0000000..c78c954
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/message_dispatcher.h
@@ -0,0 +1,43 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/public/internal/message_dispatcher.h
+// Modifications include namespace and path.
+
+#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_MESSAGE_DISPATCHER_H_
+#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_MESSAGE_DISPATCHER_H_
+
+#include <memory>
+
+#include "base/callback_forward.h"
+
+namespace base {
+class Value;
+}
+
+namespace autofill_assistant {
+
+// An internal interface for sending DevTools messages from the domain agents.
+class MessageDispatcher {
+ public:
+  virtual void SendMessage(
+      const char* method,
+      std::unique_ptr<base::Value> params,
+      base::OnceCallback<void(const base::Value&)> callback) = 0;
+  virtual void SendMessage(const char* method,
+                           std::unique_ptr<base::Value> params,
+                           base::OnceClosure callback) = 0;
+
+  virtual void RegisterEventHandler(
+      const char* method,
+      base::RepeatingCallback<void(const base::Value&)> callback) = 0;
+
+ protected:
+  virtual ~MessageDispatcher() {}
+};
+
+}  // namespace autofill_assistant
+
+#endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_MESSAGE_DISPATCHER_H_
diff --git a/components/autofill_assistant/browser/devtools/value_conversions.h b/components/autofill_assistant/browser/devtools/value_conversions.h
new file mode 100644
index 0000000..18d08347f
--- /dev/null
+++ b/components/autofill_assistant/browser/devtools/value_conversions.h
@@ -0,0 +1,169 @@
+// 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.
+
+// Copied and modified from
+// https://chromium.googlesource.com/chromium/src/+/a3f9d4fac81fc86065d867ab08fa4912ddf662c7/headless/public/internal/value_conversions.h
+// Modifications include namespace and path.
+
+#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_VALUE_CONVERSIONS_H_
+#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_VALUE_CONVERSIONS_H_
+
+#include <memory>
+
+#include "components/autofill_assistant/browser/devtools/error_reporter.h"
+
+namespace autofill_assistant {
+namespace internal {
+
+// Generic conversion from a type to a base::Value. Implemented in
+// types_DOMAIN.cc after all type-specific ToValueImpls have been defined.
+template <typename T>
+std::unique_ptr<base::Value> ToValue(const T& value);
+
+// Generic conversion from a base::Value to a type. Note that this generic
+// variant is never defined. Instead, we declare a specific template
+// specialization for all the used types.
+template <typename T>
+struct FromValue {
+  static std::unique_ptr<T> Parse(const base::Value& value,
+                                  ErrorReporter* errors);
+};
+
+// ToValueImpl is a helper used by the ToValue template for dispatching into
+// type-specific serializers. It uses a dummy |T*| argument as a way to
+// partially specialize vector types.
+template <typename T>
+std::unique_ptr<base::Value> ToValueImpl(int value, T*) {
+  return std::make_unique<base::Value>(value);
+}
+
+template <typename T>
+std::unique_ptr<base::Value> ToValueImpl(double value, T*) {
+  return std::make_unique<base::Value>(value);
+}
+
+template <typename T>
+std::unique_ptr<base::Value> ToValueImpl(bool value, T*) {
+  return std::make_unique<base::Value>(value);
+}
+
+template <typename T>
+std::unique_ptr<base::Value> ToValueImpl(const std::string& value, T*) {
+  return std::make_unique<base::Value>(value);
+}
+
+template <typename T>
+std::unique_ptr<base::Value> ToValueImpl(const base::Value& value, T*) {
+  return value.CreateDeepCopy();
+}
+
+template <typename T>
+std::unique_ptr<base::Value> ToValueImpl(const std::vector<T>& vector,
+                                         const std::vector<T>*) {
+  std::unique_ptr<base::ListValue> result(new base::ListValue());
+  for (const auto& it : vector)
+    result->Append(ToValue(it));
+  return std::move(result);
+}
+
+template <typename T>
+std::unique_ptr<base::Value> ToValueImpl(const std::unique_ptr<T>& value,
+                                         std::unique_ptr<T>*) {
+  return ToValue(*value);
+}
+
+// FromValue specializations for basic types.
+template <>
+struct FromValue<bool> {
+  static bool Parse(const base::Value& value, ErrorReporter* errors) {
+    if (!value.is_bool()) {
+      errors->AddError("boolean value expected");
+      return false;
+    }
+    return value.GetBool();
+  }
+};
+
+template <>
+struct FromValue<int> {
+  static int Parse(const base::Value& value, ErrorReporter* errors) {
+    if (!value.is_int()) {
+      errors->AddError("integer value expected");
+      return 0;
+    }
+    return value.GetInt();
+  }
+};
+
+template <>
+struct FromValue<double> {
+  static double Parse(const base::Value& value, ErrorReporter* errors) {
+    if (!value.is_double() && !value.is_int()) {
+      errors->AddError("double value expected");
+      return 0;
+    }
+    return value.GetDouble();
+  }
+};
+
+template <>
+struct FromValue<std::string> {
+  static std::string Parse(const base::Value& value, ErrorReporter* errors) {
+    if (!value.is_string()) {
+      errors->AddError("string value expected");
+      return "";
+    }
+    return value.GetString();
+  }
+};
+
+template <>
+struct FromValue<base::DictionaryValue> {
+  static std::unique_ptr<base::DictionaryValue> Parse(const base::Value& value,
+                                                      ErrorReporter* errors) {
+    const base::DictionaryValue* result;
+    if (!value.GetAsDictionary(&result)) {
+      errors->AddError("dictionary value expected");
+      return nullptr;
+    }
+    return result->CreateDeepCopy();
+  }
+};
+
+template <>
+struct FromValue<base::Value> {
+  static std::unique_ptr<base::Value> Parse(const base::Value& value,
+                                            ErrorReporter* errors) {
+    return value.CreateDeepCopy();
+  }
+};
+
+template <typename T>
+struct FromValue<std::unique_ptr<T>> {
+  static std::unique_ptr<T> Parse(const base::Value& value,
+                                  ErrorReporter* errors) {
+    return FromValue<T>::Parse(value, errors);
+  }
+};
+
+template <typename T>
+struct FromValue<std::vector<T>> {
+  static std::vector<T> Parse(const base::Value& value, ErrorReporter* errors) {
+    std::vector<T> result;
+    if (!value.is_list()) {
+      errors->AddError("list value expected");
+      return result;
+    }
+    errors->Push();
+    for (const auto& item : value.GetList())
+      result.push_back(FromValue<T>::Parse(item, errors));
+    errors->Pop();
+    return result;
+  }
+};
+
+}  // namespace internal
+}  // namespace autofill_assistant
+
+#endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_DEVTOOLS_VALUE_CONVERSIONS_H_
diff --git a/components/autofill_assistant/browser/mock_assistant_service.h b/components/autofill_assistant/browser/mock_assistant_service.h
index 47c0d42c..456fb931 100644
--- a/components/autofill_assistant/browser/mock_assistant_service.h
+++ b/components/autofill_assistant/browser/mock_assistant_service.h
@@ -36,16 +36,15 @@
 
   void GetNextAssistantActions(
       const std::string& previous_server_payload,
-      const std::vector<ProcessedAssistantActionProto>& processed_actions,
+      const std::vector<ProcessedActionProto>& processed_actions,
       ResponseCallback callback) override {
     OnGetNextAssistantActions(previous_server_payload, processed_actions,
                               callback);
   }
-  MOCK_METHOD3(
-      OnGetNextAssistantActions,
-      void(const std::string& previous_server_payload,
-           const std::vector<ProcessedAssistantActionProto>& processed_actions,
-           ResponseCallback& callback));
+  MOCK_METHOD3(OnGetNextAssistantActions,
+               void(const std::string& previous_server_payload,
+                    const std::vector<ProcessedActionProto>& processed_actions,
+                    ResponseCallback& callback));
 };
 
 }  // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/mock_assistant_web_controller.cc b/components/autofill_assistant/browser/mock_assistant_web_controller.cc
index a3d7022..810902b 100644
--- a/components/autofill_assistant/browser/mock_assistant_web_controller.cc
+++ b/components/autofill_assistant/browser/mock_assistant_web_controller.cc
@@ -6,7 +6,8 @@
 
 namespace autofill_assistant {
 
-MockAssistantWebController::MockAssistantWebController() {}
+MockAssistantWebController::MockAssistantWebController()
+    : AssistantWebController(nullptr) {}
 MockAssistantWebController::~MockAssistantWebController() {}
 
 }  // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/assistant.proto b/components/autofill_assistant/browser/service.proto
similarity index 78%
rename from components/autofill_assistant/browser/assistant.proto
rename to components/autofill_assistant/browser/service.proto
index fcd9ffd..69469a33 100644
--- a/components/autofill_assistant/browser/assistant.proto
+++ b/components/autofill_assistant/browser/service.proto
@@ -8,8 +8,7 @@
 
 package autofill_assistant;
 
-// Context contains client environment details. It's used to filter the
-// scripts that can be surfaced to the user.
+// Context contains client environment details.
 message ClientContextProto {
   required string chrome_version = 1;
 }
@@ -31,12 +30,11 @@
   required string path = 1;
 
   message PresentationProto {
-    // Name to use when suggesting this script to users.
+    // Script name.
     optional string name = 1;
 
     // Precondition contains a set of conditions that must hold for a script to
-    // be executed. No precondition means that a script can run in any
-    // case.
+    // be executed. No precondition means that a script can run in any case.
     optional ScriptPreconditionProto precondition = 2;
   }
   optional PresentationProto presentation = 2;
@@ -78,10 +76,10 @@
 
 // Next request to get a script's actions.
 message NextScriptActionsRequestProto {
-  // The result of processing each AssistantActionProto from the previous
-  // response. This field must be in the same order as the actions in the
-  // original response. It may have less actions in case of failure.
-  repeated ProcessedAssistantActionProto processed_actions = 1;
+  // The result of processing each ActionProto from the previous response. This
+  // field must be in the same order as the actions in the original response.
+  // It may have less actions in case of failure.
+  repeated ProcessedActionProto processed_actions = 1;
 }
 
 // Response of a script's actions.
@@ -92,11 +90,11 @@
 
   // Actions to be performed in order.
   // Should stop processing as soon as an action fails.
-  repeated AssistantActionProto actions = 2;
+  repeated ActionProto actions = 2;
 }
 
-// An assistant action could be performed.
-message AssistantActionProto {
+// An action could be performed.
+message ActionProto {
   // Opaque data that should not be interpreted by the client. The client must
   // pass this back unchanged in the next request
   optional bytes server_payload = 4;
@@ -110,14 +108,14 @@
   }
 }
 
-message ProcessedAssistantActionProto {
+message ProcessedActionProto {
   // The action that was processed.
-  optional AssistantActionProto action = 1;
+  optional ActionProto action = 1;
 
-  optional ProcessedAssistantActionStatus status = 2;
+  optional ProcessedActionStatus status = 2;
 }
 
-enum ProcessedAssistantActionStatus {
+enum ProcessedActionStatus {
   UNKNOWN_ACTION_STATUS = 0;
   ELEMENT_RESOLUTION_FAILED = 1;
   ACTION_APPLIED = 2;
@@ -139,14 +137,12 @@
   required ElementReferenceProto element_to_click = 1;
 }
 
-// Contain a localized text message from the server to show to the user.
+// Contain a localized text message from the server.
 message TellProto {
   required string message = 1;
 }
 
-// TODO(crbug.com/806868): Handle it better when there is no local address.
-// Ask user to fill a form with a local address if there is, otherwise fail this
-// action.
+// Fill a form with an address if there is, otherwise fail this action.
 message UseAddressProto {
   // Optional message to show usage of the address, like billing or shipping
   // address.
@@ -156,9 +152,7 @@
   required ElementReferenceProto form_field_element = 2;
 }
 
-// TODO(crbug.com/806868): Handle it better when there is no local credit card.
-// Ask user to fill a form with a local credit card if there is, otherwise fail
-// this action.
+// Fill a form with a credit card if there is, otherwise fail this action.
 message UseCreditCardProto {
   // A reference to the card number field in the form that should be filled.
   required ElementReferenceProto form_field_element = 1;
diff --git a/components/cast_channel/BUILD.gn b/components/cast_channel/BUILD.gn
index 02a353d3..d1ba03d 100644
--- a/components/cast_channel/BUILD.gn
+++ b/components/cast_channel/BUILD.gn
@@ -26,6 +26,8 @@
     "keep_alive_delegate.h",
     "logger.cc",
     "logger.h",
+    "mojo_data_pump.cc",
+    "mojo_data_pump.h",
   ]
   deps = [
     "//base",
@@ -40,6 +42,9 @@
     "//crypto",
     "//net",
   ]
+  public_deps = [
+    "//services/network/public/mojom",
+  ]
 }
 
 static_library("test_support") {
diff --git a/components/cast_channel/DEPS b/components/cast_channel/DEPS
index cbcb414..0bc8308d 100644
--- a/components/cast_channel/DEPS
+++ b/components/cast_channel/DEPS
@@ -4,7 +4,9 @@
   "+content/public/browser",
   "+content/public/test",
   "+crypto",
+  "+mojo/public/cpp",
   "+net",
+  "+services/network",
 ]
 
 specific_include_rules = {
diff --git a/components/cast_channel/cast_message_handler.cc b/components/cast_channel/cast_message_handler.cc
index 5f4815db..150ebc1 100644
--- a/components/cast_channel/cast_message_handler.cc
+++ b/components/cast_channel/cast_message_handler.cc
@@ -10,7 +10,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/time/default_tick_clock.h"
 #include "components/cast_channel/cast_socket_service.h"
-#include "net/traffic_annotation/network_traffic_annotation.h"
 
 namespace cast_channel {
 
@@ -18,38 +17,6 @@
 
 constexpr base::TimeDelta kRequestTimeout = base::TimeDelta::FromSeconds(5);
 
-constexpr net::NetworkTrafficAnnotationTag kMessageTrafficAnnotation =
-    net::DefineNetworkTrafficAnnotation("cast_message_handler", R"(
-        semantics {
-          sender: "Cast Message Handler"
-          description:
-            "A Cast protocol or application-level message sent to a Cast "
-            "device."
-          trigger:
-            "Triggered by user gesture from using Cast functionality, or "
-            "a webpage using the Presentation API, or "
-            "Cast device discovery internal logic."
-          data:
-            "A serialized Cast protocol or application-level protobuf message. "
-            "A non-exhaustive list of Cast protocol messages:\n"
-            "- Virtual connection requests,\n"
-            "- App availability / media status / receiver status requests,\n"
-            "- Launch / stop Cast session requests,\n"
-            "- Media commands, such as play/pause.\n"
-            "Application-level messages may contain data specific to the Cast "
-            "application."
-          destination: OTHER
-          destination_other:
-            "Data will be sent to a Cast device in local network."
-        }
-        policy {
-          cookies_allowed: NO
-          setting:
-            "This request cannot be disabled, but it would not be sent if user "
-            "does not connect a Cast device to the local network."
-          policy_exception_justification: "Not implemented."
-        })");
-
 }  // namespace
 
 GetAppAvailabilityRequest::GetAppAvailabilityRequest(
@@ -286,10 +253,8 @@
   // can be sent.
   DoEnsureConnection(socket, message.source_id(), message.destination_id());
   socket->transport()->SendMessage(
-      message,
-      base::Bind(&CastMessageHandler::OnMessageSent,
-                 weak_ptr_factory_.GetWeakPtr()),
-      kMessageTrafficAnnotation);
+      message, base::Bind(&CastMessageHandler::OnMessageSent,
+                          weak_ptr_factory_.GetWeakPtr()));
 }
 
 void CastMessageHandler::DoEnsureConnection(CastSocket* socket,
@@ -309,10 +274,8 @@
           : VirtualConnectionType::kInvisible,
       user_agent_, browser_version_);
   socket->transport()->SendMessage(
-      virtual_connection_request,
-      base::Bind(&CastMessageHandler::OnMessageSent,
-                 weak_ptr_factory_.GetWeakPtr()),
-      kMessageTrafficAnnotation);
+      virtual_connection_request, base::Bind(&CastMessageHandler::OnMessageSent,
+                                             weak_ptr_factory_.GetWeakPtr()));
 
   // We assume the virtual connection request will succeed; otherwise this
   // will eventually self-correct.
diff --git a/components/cast_channel/cast_message_handler_unittest.cc b/components/cast_channel/cast_message_handler_unittest.cc
index 0dac8dd..744bb9c 100644
--- a/components/cast_channel/cast_message_handler_unittest.cc
+++ b/components/cast_channel/cast_message_handler_unittest.cc
@@ -91,7 +91,7 @@
   CastMessage virtual_connection_request;
   CastMessage app_availability_request1;
   CastMessage app_availability_request2;
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _))
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _))
       .WillOnce(SaveArg<0>(&virtual_connection_request))
       .WillOnce(SaveArg<0>(&app_availability_request1))
       .WillOnce(SaveArg<0>(&app_availability_request2));
@@ -116,7 +116,7 @@
 TEST_F(CastMessageHandlerTest, RecreateVirtualConnectionAfterError) {
   CastMessage virtual_connection_request;
   CastMessage app_availability_request;
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _))
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _))
       .WillOnce(SaveArg<0>(&virtual_connection_request))
       .WillOnce(SaveArg<0>(&app_availability_request));
 
@@ -133,7 +133,7 @@
       *this, OnAppAvailability("AAAAAAAA", GetAppAvailabilityResult::kUnknown));
   OnError(ChannelError::TRANSPORT_ERROR);
 
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _))
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _))
       .WillOnce(SaveArg<0>(&virtual_connection_request))
       .WillOnce(SaveArg<0>(&app_availability_request));
 
@@ -155,7 +155,7 @@
 TEST_F(CastMessageHandlerTest, RequestAppAvailability) {
   CastMessage virtual_connection_request;
   CastMessage app_availability_request;
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _))
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _))
       .WillOnce(SaveArg<0>(&virtual_connection_request))
       .WillOnce(SaveArg<0>(&app_availability_request));
 
@@ -195,7 +195,7 @@
 }
 
 TEST_F(CastMessageHandlerTest, RequestAppAvailabilityTimesOut) {
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _)).Times(2);
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _)).Times(2);
   handler_.RequestAppAvailability(
       &cast_socket_, "ABCDEFAB",
       base::BindOnce(&CastMessageHandlerTest::OnAppAvailability,
@@ -206,13 +206,13 @@
 }
 
 TEST_F(CastMessageHandlerTest, AppAvailabilitySentOnlyOnceWhilePending) {
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _)).Times(2);
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _)).Times(2);
   handler_.RequestAppAvailability(
       &cast_socket_, "ABCDEFAB",
       base::BindOnce(&CastMessageHandlerTest::OnAppAvailability,
                      base::Unretained(this)));
 
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _)).Times(0);
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _)).Times(0);
   handler_.RequestAppAvailability(
       &cast_socket_, "ABCDEFAB",
       base::BindOnce(&CastMessageHandlerTest::OnAppAvailability,
@@ -221,7 +221,7 @@
 
 TEST_F(CastMessageHandlerTest, EnsureConnection) {
   CastMessage virtual_connection_request;
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _))
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _))
       .WillOnce(SaveArg<0>(&virtual_connection_request));
 
   handler_.EnsureConnection(cast_socket_.id(), kSourceId, kDestinationId);
@@ -229,13 +229,13 @@
             GetMessageType(virtual_connection_request));
 
   // No-op because connection is already created the first time.
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _)).Times(0);
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _)).Times(0);
   handler_.EnsureConnection(cast_socket_.id(), kSourceId, kDestinationId);
 }
 
 TEST_F(CastMessageHandlerTest, CloseConnectionFromReceiver) {
   CastMessage virtual_connection_request;
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _));
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _));
   handler_.EnsureConnection(cast_socket_.id(), kSourceId, kDestinationId);
 
   CastMessage response;
@@ -250,14 +250,14 @@
   OnMessage(response);
 
   // Re-open virtual connection should cause message to be sent.
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _));
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _));
   handler_.EnsureConnection(cast_socket_.id(), kSourceId, kDestinationId);
 }
 
 TEST_F(CastMessageHandlerTest, LaunchSession) {
   CastMessage virtual_connection_request;
   CastMessage launch_session_request;
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _))
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _))
       .WillOnce(SaveArg<0>(&virtual_connection_request))
       .WillOnce(SaveArg<0>(&launch_session_request));
 
@@ -300,7 +300,7 @@
 TEST_F(CastMessageHandlerTest, LaunchSessionTimedOut) {
   CastMessage virtual_connection_request;
   CastMessage launch_session_request;
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _))
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _))
       .WillOnce(SaveArg<0>(&virtual_connection_request))
       .WillOnce(SaveArg<0>(&launch_session_request));
 
@@ -320,7 +320,7 @@
 TEST_F(CastMessageHandlerTest, SendAppMessage) {
   CastMessage virtual_connection_request;
   CastMessage app_message;
-  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _, _))
+  EXPECT_CALL(*cast_socket_.mock_transport(), SendMessage(_, _))
       .WillOnce(SaveArg<0>(&virtual_connection_request))
       .WillOnce(SaveArg<0>(&app_message));
 
diff --git a/components/cast_channel/cast_socket.cc b/components/cast_channel/cast_socket.cc
index a0417f8f..d0dcf79 100644
--- a/components/cast_channel/cast_socket.cc
+++ b/components/cast_channel/cast_socket.cc
@@ -29,25 +29,12 @@
 #include "components/cast_channel/cast_transport.h"
 #include "components/cast_channel/keep_alive_delegate.h"
 #include "components/cast_channel/logger.h"
+#include "components/cast_channel/mojo_data_pump.h"
 #include "components/cast_channel/proto/cast_channel.pb.h"
+#include "content/public/browser/browser_thread.h"
 #include "net/base/address_list.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/net_errors.h"
-#include "net/cert/cert_verifier.h"
-#include "net/cert/cert_verify_result.h"
-#include "net/cert/ct_policy_enforcer.h"
-#include "net/cert/multi_log_ct_verifier.h"
-#include "net/cert/x509_certificate.h"
-#include "net/http/transport_security_state.h"
-#include "net/log/net_log.h"
-#include "net/log/net_log_source_type.h"
-#include "net/socket/client_socket_factory.h"
-#include "net/socket/client_socket_handle.h"
-#include "net/socket/ssl_client_socket.h"
-#include "net/socket/stream_socket.h"
-#include "net/socket/tcp_client_socket.h"
-#include "net/socket/transport_client_socket.h"
-#include "net/ssl/ssl_config_service.h"
 #include "net/ssl/ssl_info.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
 
@@ -69,36 +56,51 @@
          state == ConnectionState::TIMEOUT;
 }
 
-// Cert verifier which blindly accepts all certificates, regardless of validity.
-class FakeCertVerifier : public net::CertVerifier {
- public:
-  FakeCertVerifier() {}
-  ~FakeCertVerifier() override {}
+void OnConnected(
+    network::mojom::NetworkContext::CreateTCPConnectedSocketCallback callback,
+    int result,
+    const base::Optional<net::IPEndPoint>& local_addr,
+    const base::Optional<net::IPEndPoint>& peer_addr,
+    mojo::ScopedDataPipeConsumerHandle receive_stream,
+    mojo::ScopedDataPipeProducerHandle send_stream) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  content::BrowserThread::PostTask(
+      content::BrowserThread::IO, FROM_HERE,
+      base::BindOnce(std::move(callback), result, local_addr, peer_addr,
+                     std::move(receive_stream), std::move(send_stream)));
+}
 
-  int Verify(const RequestParams& params,
-             net::CertVerifyResult* verify_result,
-             net::CompletionOnceCallback,
-             std::unique_ptr<Request>*,
-             const net::NetLogWithSource&) override {
-    verify_result->Reset();
-    verify_result->verified_cert = params.certificate();
-    return net::OK;
-  }
-  void SetConfig(const Config& config) override {}
-};
+void ConnectOnUIThread(
+    CastSocketImpl::NetworkContextGetter network_context_getter,
+    const net::AddressList& remote_address_list,
+    network::mojom::TCPConnectedSocketRequest request,
+    network::mojom::NetworkContext::CreateTCPConnectedSocketCallback callback) {
+  network_context_getter.Run()->CreateTCPConnectedSocket(
+      base::nullopt /* local_addr */, remote_address_list,
+      net::MutableNetworkTrafficAnnotationTag(
+          CastSocketImpl::GetNetworkTrafficAnnotationTag()),
+      std::move(request), nullptr /* observer */,
+      base::BindOnce(OnConnected, std::move(callback)));
+}
 
 }  // namespace
 
-CastSocketImpl::CastSocketImpl(const CastSocketOpenParams& open_params,
+CastSocketImpl::CastSocketImpl(NetworkContextGetter network_context_getter,
+                               const CastSocketOpenParams& open_params,
                                const scoped_refptr<Logger>& logger)
-    : CastSocketImpl(open_params, logger, AuthContext::Create()) {}
+    : CastSocketImpl(network_context_getter,
+                     open_params,
+                     logger,
+                     AuthContext::Create()) {}
 
-CastSocketImpl::CastSocketImpl(const CastSocketOpenParams& open_params,
+CastSocketImpl::CastSocketImpl(NetworkContextGetter network_context_getter,
+                               const CastSocketOpenParams& open_params,
                                const scoped_refptr<Logger>& logger,
                                const AuthContext& auth_context)
     : channel_id_(0),
       open_params_(open_params),
       logger_(logger),
+      network_context_getter_(network_context_getter),
       auth_context_(auth_context),
       connect_timeout_timer_(new base::OneShotTimer),
       is_canceled_(false),
@@ -106,12 +108,9 @@
       connect_state_(ConnectionState::START_CONNECT),
       error_state_(ChannelError::NONE),
       ready_state_(ReadyState::NONE),
-      auth_delegate_(nullptr) {
+      auth_delegate_(nullptr),
+      weak_factory_(this) {
   DCHECK(open_params.ip_endpoint.address().IsValid());
-  if (open_params_.net_log) {
-    net_log_source_.type = net::NetLogSourceType::SOCKET;
-    net_log_source_.id = open_params_.net_log->NextID();
-  }
 }
 
 CastSocketImpl::~CastSocketImpl() {
@@ -153,48 +152,6 @@
   return audio_only_;
 }
 
-std::unique_ptr<net::TransportClientSocket> CastSocketImpl::CreateTcpSocket() {
-  net::AddressList addresses(open_params_.ip_endpoint);
-  return std::unique_ptr<net::TCPClientSocket>(new net::TCPClientSocket(
-      addresses, nullptr, open_params_.net_log, net_log_source_));
-  // Options cannot be set on the TCPClientSocket yet, because the
-  // underlying platform socket will not be created until Bind()
-  // or Connect() is called.
-}
-
-std::unique_ptr<net::SSLClientSocket> CastSocketImpl::CreateSslSocket(
-    std::unique_ptr<net::StreamSocket> socket) {
-  net::SSLConfig ssl_config;
-  cert_verifier_ = base::WrapUnique(new FakeCertVerifier);
-  transport_security_state_.reset(new net::TransportSecurityState);
-  cert_transparency_verifier_.reset(new net::MultiLogCTVerifier());
-  ct_policy_enforcer_.reset(new net::DefaultCTPolicyEnforcer());
-
-  // Note that |context| fields remain owned by CastSocketImpl.
-  net::SSLClientSocketContext context;
-  context.cert_verifier = cert_verifier_.get();
-  context.transport_security_state = transport_security_state_.get();
-  context.cert_transparency_verifier = cert_transparency_verifier_.get();
-  context.ct_policy_enforcer = ct_policy_enforcer_.get();
-
-  std::unique_ptr<net::ClientSocketHandle> connection(
-      new net::ClientSocketHandle);
-  connection->SetSocket(std::move(socket));
-  net::HostPortPair host_and_port =
-      net::HostPortPair::FromIPEndPoint(open_params_.ip_endpoint);
-
-  return net::ClientSocketFactory::GetDefaultFactory()->CreateSSLClientSocket(
-      std::move(connection), host_and_port, ssl_config, context);
-}
-
-scoped_refptr<net::X509Certificate> CastSocketImpl::ExtractPeerCert() {
-  net::SSLInfo ssl_info;
-  if (!socket_->GetSSLInfo(&ssl_info) || !ssl_info.cert)
-    return nullptr;
-
-  return ssl_info.cert;
-}
-
 bool CastSocketImpl::VerifyChannelPolicy(const AuthResult& result) {
   audio_only_ = (result.channel_policies & AuthResult::POLICY_AUDIO_ONLY) != 0;
   if (audio_only_ && (open_params_.device_capabilities &
@@ -225,6 +182,11 @@
   transport_ = std::move(transport);
 }
 
+void CastSocketImpl::SetPeerCertForTesting(
+    scoped_refptr<net::X509Certificate> peer_cert) {
+  peer_cert_ = peer_cert;
+}
+
 void CastSocketImpl::Connect(OnOpenCallback callback) {
   switch (ready_state_) {
     case ReadyState::NONE:
@@ -287,6 +249,40 @@
   observers_.RemoveObserver(observer);
 }
 
+net::NetworkTrafficAnnotationTag
+CastSocketImpl::GetNetworkTrafficAnnotationTag() {
+  return net::DefineNetworkTrafficAnnotation("cast_socket", R"(
+        semantics {
+          sender: "Cast Socket"
+          description:
+            "Requests to a Cast device."
+          trigger:
+            "A new Cast device has been discovered via mDNS in the local "
+            "network or after it's connected."
+          data:
+            "A serialized Cast protocol or application-level protobuf message. "
+            "A non-exhaustive list of Cast protocol messages:\n"
+            "- nonce challenge,\n"
+            "- ping/pong data,\n"
+            "- Virtual connection requests,\n"
+            "- App availability / media status / receiver status requests,\n"
+            "- Launch / stop Cast session requests,\n"
+            "- Media commands, such as play/pause.\n"
+            "Application-level messages may contain data specific to the Cast "
+            "application."
+          destination: OTHER
+          destination_other:
+            "Data will be sent to a Cast device in local network."
+        }
+        policy {
+          cookies_allowed: NO
+          setting:
+            "This request cannot be disabled, but it would not be sent if user "
+            "does not connect a Cast device to the local network."
+          policy_exception_justification: "Not implemented."
+        })");
+}
+
 void CastSocketImpl::OnConnectTimeout() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   // Stop all pending connection setup tasks and report back to the client.
@@ -377,13 +373,16 @@
   DCHECK(connect_loop_callback_.IsCancelled());
   VLOG_WITH_CONNECTION(1) << "DoTcpConnect";
   SetConnectState(ConnectionState::TCP_CONNECT_COMPLETE);
-  tcp_socket_ = CreateTcpSocket();
 
-  int rv = tcp_socket_->Connect(
-      base::BindOnce(&CastSocketImpl::DoConnectLoop, base::Unretained(this)));
-  logger_->LogSocketEventWithRv(channel_id_, ChannelEvent::TCP_SOCKET_CONNECT,
-                                rv);
-  return rv;
+  content::BrowserThread::PostTask(
+      content::BrowserThread::UI, FROM_HERE,
+      base::BindOnce(ConnectOnUIThread, network_context_getter_,
+                     net::AddressList(open_params_.ip_endpoint),
+                     mojo::MakeRequest(&tcp_socket_),
+                     base::BindOnce(&CastSocketImpl::OnConnect,
+                                    weak_factory_.GetWeakPtr())));
+
+  return net::ERR_IO_PENDING;
 }
 
 int CastSocketImpl::DoTcpConnectComplete(int connect_result) {
@@ -406,13 +405,22 @@
   DCHECK(connect_loop_callback_.IsCancelled());
   VLOG_WITH_CONNECTION(1) << "DoSslConnect";
   SetConnectState(ConnectionState::SSL_CONNECT_COMPLETE);
-  socket_ = CreateSslSocket(std::move(tcp_socket_));
 
-  int rv = socket_->Connect(
-      base::BindOnce(&CastSocketImpl::DoConnectLoop, base::Unretained(this)));
-  logger_->LogSocketEventWithRv(channel_id_, ChannelEvent::SSL_SOCKET_CONNECT,
-                                rv);
-  return rv;
+  net::HostPortPair host_port_pair =
+      net::HostPortPair::FromIPEndPoint(open_params_.ip_endpoint);
+  network::mojom::TLSClientSocketOptionsPtr options =
+      network::mojom::TLSClientSocketOptions::New();
+  // Cast code does its own authentication after SSL handshake since the devices
+  // don't have a known hostname.
+  options->skip_cert_verification = true;
+  tcp_socket_->UpgradeToTLS(
+      host_port_pair, std::move(options),
+      net::MutableNetworkTrafficAnnotationTag(GetNetworkTrafficAnnotationTag()),
+      mojo::MakeRequest(&socket_), nullptr /* observer */,
+      base::BindOnce(&CastSocketImpl::OnUpgradeToTLS,
+                     weak_factory_.GetWeakPtr()));
+
+  return net::ERR_IO_PENDING;
 }
 
 int CastSocketImpl::DoSslConnectComplete(int result) {
@@ -420,8 +428,6 @@
       channel_id_, ChannelEvent::SSL_SOCKET_CONNECT_COMPLETE, result);
   VLOG_WITH_CONNECTION(1) << "DoSslConnectComplete: " << result;
   if (result == net::OK) {
-    peer_cert_ = ExtractPeerCert();
-
     if (!peer_cert_) {
       LOG_WITH_CONNECTION(WARNING) << "Could not extract peer cert.";
       SetConnectState(ConnectionState::FINISHED);
@@ -433,8 +439,9 @@
     if (!transport_) {
       // Create a channel transport if one wasn't already set (e.g. by test
       // code).
-      transport_.reset(new CastTransportImpl(
-          this->socket_.get(), channel_id_, open_params_.ip_endpoint, logger_));
+      transport_.reset(new CastTransportImpl(mojo_data_pump_.get(), channel_id_,
+                                             open_params_.ip_endpoint,
+                                             logger_));
     }
     auth_delegate_ = new AuthTransportDelegate(this);
     transport_->SetReadDelegate(base::WrapUnique(auth_delegate_));
@@ -460,32 +467,7 @@
 
   ResetConnectLoopCallback();
 
-  net::NetworkTrafficAnnotationTag traffic_annotation =
-      net::DefineNetworkTrafficAnnotation("cast_socket", R"(
-        semantics {
-          sender: "Cast Socket"
-          description:
-            "An auth challenge request sent to a Cast device as a part of "
-            "establishing a connection to it."
-          trigger:
-            "A new Cast device has been discovered via mDNS in the local "
-            "network."
-          data:
-            "A serialized protobuf message containing the nonce challenge. No "
-            "user data."
-          destination: OTHER
-          destination_other:
-            "Data will be sent to a Cast device in local network."
-        }
-        policy {
-          cookies_allowed: NO
-          setting:
-            "This request cannot be disabled, but it would not be sent if user "
-            "does not connect a Cast device to the local network."
-          policy_exception_justification: "Not implemented."
-        })");
-  transport_->SendMessage(challenge_message, connect_loop_callback_.callback(),
-                          traffic_annotation);
+  transport_->SendMessage(challenge_message, connect_loop_callback_.callback());
 
   // Always return IO_PENDING since the result is always asynchronous.
   return net::ERR_IO_PENDING;
@@ -563,6 +545,29 @@
   return net::OK;
 }
 
+void CastSocketImpl::OnConnect(
+    int result,
+    const base::Optional<net::IPEndPoint>& local_addr,
+    const base::Optional<net::IPEndPoint>& peer_addr,
+    mojo::ScopedDataPipeConsumerHandle receive_stream,
+    mojo::ScopedDataPipeProducerHandle send_stream) {
+  DoConnectLoop(result);
+}
+
+void CastSocketImpl::OnUpgradeToTLS(
+    int result,
+    mojo::ScopedDataPipeConsumerHandle receive_stream,
+    mojo::ScopedDataPipeProducerHandle send_stream,
+    const base::Optional<net::SSLInfo>& ssl_info) {
+  if (result == net::OK) {
+    mojo_data_pump_ = std::make_unique<MojoDataPump>(std::move(receive_stream),
+                                                     std::move(send_stream));
+  }
+  if (ssl_info.has_value() && ssl_info->cert)
+    peer_cert_ = ssl_info->cert;
+  DoConnectLoop(result);
+}
+
 void CastSocketImpl::DoConnectCallback() {
   VLOG(1) << "DoConnectCallback (error_state = "
           << ChannelErrorToString(error_state_) << ")";
@@ -611,7 +616,6 @@
   transport_.reset();
   tcp_socket_.reset();
   socket_.reset();
-  transport_security_state_.reset();
   if (GetTimer()) {
     GetTimer()->Stop();
   }
@@ -670,21 +674,17 @@
 void CastSocketImpl::CastSocketMessageDelegate::Start() {}
 
 CastSocketOpenParams::CastSocketOpenParams(const net::IPEndPoint& ip_endpoint,
-                                           net::NetLog* net_log,
                                            base::TimeDelta connect_timeout)
     : ip_endpoint(ip_endpoint),
-      net_log(net_log),
       connect_timeout(connect_timeout),
       device_capabilities(cast_channel::CastDeviceCapability::NONE) {}
 
 CastSocketOpenParams::CastSocketOpenParams(const net::IPEndPoint& ip_endpoint,
-                                           net::NetLog* net_log,
                                            base::TimeDelta connect_timeout,
                                            base::TimeDelta liveness_timeout,
                                            base::TimeDelta ping_interval,
                                            uint64_t device_capabilities)
     : ip_endpoint(ip_endpoint),
-      net_log(net_log),
       connect_timeout(connect_timeout),
       liveness_timeout(liveness_timeout),
       ping_interval(ping_interval),
diff --git a/components/cast_channel/cast_socket.h b/components/cast_channel/cast_socket.h
index e66435e..08338ed 100644
--- a/components/cast_channel/cast_socket.h
+++ b/components/cast_channel/cast_socket.h
@@ -14,6 +14,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/threading/thread_checker.h"
 #include "base/timer/timer.h"
@@ -25,22 +26,16 @@
 #include "net/base/io_buffer.h"
 #include "net/base/ip_endpoint.h"
 #include "net/log/net_log_source.h"
+#include "services/network/public/mojom/network_context.mojom.h"
 
 namespace net {
-class CertVerifier;
-class CTPolicyEnforcer;
-class CTVerifier;
-class NetLog;
-class SSLClientSocket;
-class StreamSocket;
-class TransportClientSocket;
-class TransportSecurityState;
 class X509Certificate;
 }
 
 namespace cast_channel {
 class CastMessage;
 class Logger;
+class MojoDataPump;
 struct LastError;
 
 // Cast device capabilities.
@@ -143,9 +138,6 @@
   // IP endpoint of the Cast device.
   net::IPEndPoint ip_endpoint;
 
-  // Log of socket events.
-  net::NetLog* net_log;
-
   // Connection timeout interval. If this value is not set, Cast socket will not
   // report CONNECT_TIMEOUT error and may hang when connecting to a Cast device.
   base::TimeDelta connect_timeout;
@@ -168,10 +160,8 @@
   uint64_t device_capabilities;
 
   CastSocketOpenParams(const net::IPEndPoint& ip_endpoint,
-                       net::NetLog* net_log,
                        base::TimeDelta connect_timeout);
   CastSocketOpenParams(const net::IPEndPoint& ip_endpoint,
-                       net::NetLog* net_log,
                        base::TimeDelta connect_timeout,
                        base::TimeDelta liveness_timeout,
                        base::TimeDelta ping_interval,
@@ -186,10 +176,14 @@
 // code.
 class CastSocketImpl : public CastSocket {
  public:
-  CastSocketImpl(const CastSocketOpenParams& open_params,
+  using NetworkContextGetter =
+      base::RepeatingCallback<network::mojom::NetworkContext*()>;
+  CastSocketImpl(NetworkContextGetter network_context_getter,
+                 const CastSocketOpenParams& open_params,
                  const scoped_refptr<Logger>& logger);
 
-  CastSocketImpl(const CastSocketOpenParams& open_params,
+  CastSocketImpl(NetworkContextGetter network_context_getter,
+                 const CastSocketOpenParams& open_params,
                  const scoped_refptr<Logger>& logger,
                  const AuthContext& auth_context);
 
@@ -210,6 +204,8 @@
   void AddObserver(Observer* observer) override;
   void RemoveObserver(Observer* observer) override;
 
+  static net::NetworkTrafficAnnotationTag GetNetworkTrafficAnnotationTag();
+
  protected:
   // CastTransport::Delegate methods for receiving handshake messages.
   class AuthTransportDelegate : public CastTransport::Delegate {
@@ -254,6 +250,8 @@
   // by the caller (e.g. a mock).
   void SetTransportForTesting(std::unique_ptr<CastTransport> transport);
 
+  void SetPeerCertForTesting(scoped_refptr<net::X509Certificate> peer_cert);
+
   // Verifies whether the socket complies with cast channel policy.
   // Audio only channel policy mandates that a device declaring a video out
   // capability must not have a certificate with audio only policy.
@@ -272,17 +270,6 @@
   // READY_STATE_CLOSED.
   void CloseInternal();
 
-  // Creates an instance of TransportClientSocket.
-  virtual std::unique_ptr<net::TransportClientSocket> CreateTcpSocket();
-  // Creates an instance of SSLClientSocket with the given underlying |socket|.
-  virtual std::unique_ptr<net::SSLClientSocket> CreateSslSocket(
-      std::unique_ptr<net::StreamSocket> socket);
-  // Extracts peer certificate from SSLClientSocket instance when the socket
-  // is in cert error state.
-  // Returns null if the certificate could not be extracted.
-  // TODO(kmarshall): Use MockSSLClientSocket for tests instead of overriding
-  // this function.
-  virtual scoped_refptr<net::X509Certificate> ExtractPeerCert();
   // Verifies whether the challenge reply received from the peer is valid:
   // 1. Signature in the reply is valid.
   // 2. Certificate is rooted to a trusted CA.
@@ -315,6 +302,17 @@
   int DoAuthChallengeSend();
   int DoAuthChallengeSendComplete(int result);
   int DoAuthChallengeReplyComplete(int result);
+
+  // Callback from network::mojom::NetworkContext::CreateTCPConnectedSocket.
+  void OnConnect(int result,
+                 const base::Optional<net::IPEndPoint>& local_addr,
+                 const base::Optional<net::IPEndPoint>& peer_addr,
+                 mojo::ScopedDataPipeConsumerHandle receive_stream,
+                 mojo::ScopedDataPipeProducerHandle send_stream);
+  void OnUpgradeToTLS(int result,
+                      mojo::ScopedDataPipeConsumerHandle receive_stream,
+                      mojo::ScopedDataPipeProducerHandle send_stream,
+                      const base::Optional<net::SSLInfo>& ssl_info);
   /////////////////////////////////////////////////////////////////////////////
 
   // Resets the cancellable callback used for async invocations of
@@ -338,28 +336,22 @@
   // The id of the channel.
   int channel_id_;
 
-  // The NetLog source for this service.
-  net::NetLogSource net_log_source_;
-
   // Cast socket related settings.
   CastSocketOpenParams open_params_;
 
   // Shared logging object, used to log CastSocket events for diagnostics.
   scoped_refptr<Logger> logger_;
 
-  // CertVerifier is owned by us but should be deleted AFTER SSLClientSocket
-  // since in some cases the destructor of SSLClientSocket may call a method
-  // to cancel a cert verification request.
-  std::unique_ptr<net::CertVerifier> cert_verifier_;
-  std::unique_ptr<net::TransportSecurityState> transport_security_state_;
-  std::unique_ptr<net::CTVerifier> cert_transparency_verifier_;
-  std::unique_ptr<net::CTPolicyEnforcer> ct_policy_enforcer_;
+  NetworkContextGetter network_context_getter_;
 
   // Owned ptr to the underlying TCP socket.
-  std::unique_ptr<net::TransportClientSocket> tcp_socket_;
+  network::mojom::TCPConnectedSocketPtr tcp_socket_;
 
   // Owned ptr to the underlying SSL socket.
-  std::unique_ptr<net::SSLClientSocket> socket_;
+  network::mojom::TLSClientSocketPtr socket_;
+
+  // Helper class to write to the SSL socket.
+  std::unique_ptr<MojoDataPump> mojo_data_pump_;
 
   // Certificate of the peer. This field may be empty if the peer
   // certificate is not yet fetched.
@@ -423,6 +415,8 @@
   // List of socket observers.
   base::ObserverList<Observer>::Unchecked observers_;
 
+  base::WeakPtrFactory<CastSocketImpl> weak_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(CastSocketImpl);
 };
 }  // namespace cast_channel
diff --git a/components/cast_channel/cast_socket_service.cc b/components/cast_channel/cast_socket_service.cc
index 0cc05316..42cf975 100644
--- a/components/cast_channel/cast_socket_service.cc
+++ b/components/cast_channel/cast_socket_service.cc
@@ -81,7 +81,8 @@
   return it == sockets_.end() ? nullptr : it->second.get();
 }
 
-void CastSocketService::OpenSocket(const CastSocketOpenParams& open_params,
+void CastSocketService::OpenSocket(NetworkContextGetter network_context_getter,
+                                   const CastSocketOpenParams& open_params,
                                    CastSocket::OnOpenCallback open_cb) {
   DCHECK(task_runner_->BelongsToCurrentThread());
 
@@ -92,7 +93,7 @@
     if (socket_for_test_) {
       socket = AddSocket(std::move(socket_for_test_));
     } else {
-      socket = new CastSocketImpl(open_params, logger_);
+      socket = new CastSocketImpl(network_context_getter, open_params, logger_);
       AddSocket(base::WrapUnique(socket));
     }
   }
diff --git a/components/cast_channel/cast_socket_service.h b/components/cast_channel/cast_socket_service.h
index 59811bf8..3400cd9 100644
--- a/components/cast_channel/cast_socket_service.h
+++ b/components/cast_channel/cast_socket_service.h
@@ -13,6 +13,7 @@
 #include "base/sequence_checker.h"
 #include "base/single_thread_task_runner.h"
 #include "components/cast_channel/cast_socket.h"
+#include "services/network/public/mojom/network_context.mojom.h"
 
 namespace cast_channel {
 
@@ -38,6 +39,9 @@
 
   CastSocket* GetSocket(const net::IPEndPoint& ip_endpoint) const;
 
+  using NetworkContextGetter =
+      base::RepeatingCallback<network::mojom::NetworkContext*()>;
+
   // Opens cast socket with |open_params| and invokes |open_cb| when opening
   // operation finishes. If cast socket with |ip_endpoint| already exists,
   // invoke |open_cb| directly with the existing socket.
@@ -45,7 +49,9 @@
   // a valid private IP address as determined by |IsValidCastIPAddress()|.
   // |open_params|: Parameters necessary to open a Cast channel.
   // |open_cb|: OnOpenCallback invoked when cast socket is opened.
-  virtual void OpenSocket(const CastSocketOpenParams& open_params,
+  // |network_context_getter| is called on UI thread only.
+  virtual void OpenSocket(NetworkContextGetter network_context_getter,
+                          const CastSocketOpenParams& open_params,
                           CastSocket::OnOpenCallback open_cb);
 
   // Adds |observer| to socket service. When socket service opens cast socket,
diff --git a/components/cast_channel/cast_socket_service_unittest.cc b/components/cast_channel/cast_socket_service_unittest.cc
index 0c2898c..7e06468 100644
--- a/components/cast_channel/cast_socket_service_unittest.cc
+++ b/components/cast_channel/cast_socket_service_unittest.cc
@@ -91,9 +91,10 @@
   EXPECT_CALL(*mock_socket, AddObserver(_));
 
   cast_socket_service_->AddObserver(&mock_observer_);
-  CastSocketOpenParams open_param(ip_endpoint, nullptr /* net_log */,
+  CastSocketOpenParams open_param(ip_endpoint,
                                   base::TimeDelta::FromSeconds(20));
-  cast_socket_service_->OpenSocket(open_param, mock_on_open_callback_.Get());
+  cast_socket_service_->OpenSocket(CastSocketService::NetworkContextGetter(),
+                                   open_param, mock_on_open_callback_.Get());
 }
 
 }  // namespace cast_channel
diff --git a/components/cast_channel/cast_socket_unittest.cc b/components/cast_channel/cast_socket_unittest.cc
index 7a474532..eb50900 100644
--- a/components/cast_channel/cast_socket_unittest.cc
+++ b/components/cast_channel/cast_socket_unittest.cc
@@ -20,6 +20,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/sys_byteorder.h"
+#include "base/test/bind_test_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/mock_timer.h"
 #include "build/build_config.h"
@@ -35,8 +36,6 @@
 #include "net/base/address_list.h"
 #include "net/base/net_errors.h"
 #include "net/cert/pem_tokenizer.h"
-#include "net/log/net_log_source.h"
-#include "net/log/test_net_log.h"
 #include "net/socket/client_socket_handle.h"
 #include "net/socket/socket_test_util.h"
 #include "net/socket/ssl_client_socket.h"
@@ -48,6 +47,8 @@
 #include "net/test/cert_test_util.h"
 #include "net/test/test_data_directory.h"
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
+#include "net/url_request/url_request_test_util.h"
+#include "services/network/network_context.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -111,6 +112,7 @@
   MockTCPSocket(bool do_nothing, net::SocketDataProvider* socket_provider)
       : net::MockTCPClientSocket(net::AddressList(), nullptr, socket_provider) {
     do_nothing_ = do_nothing;
+    set_enable_read_if_ready(true);
   }
 
   int Connect(net::CompletionOnceCallback callback) override {
@@ -141,15 +143,24 @@
 
 class TestCastSocketBase : public CastSocketImpl {
  public:
-  TestCastSocketBase(const CastSocketOpenParams& open_params, Logger* logger)
-      : CastSocketImpl(open_params, logger, AuthContext::Create()),
-        ip_(open_params.ip_endpoint),
-        extract_cert_result_(true),
+  TestCastSocketBase(network::mojom::NetworkContext* network_context,
+                     const CastSocketOpenParams& open_params,
+                     Logger* logger)
+      : CastSocketImpl(base::BindRepeating(
+                           [](network::mojom::NetworkContext* network_context) {
+                             return network_context;
+                           },
+                           network_context),
+                       open_params,
+                       logger,
+                       AuthContext::Create()),
         verify_challenge_result_(true),
         verify_challenge_disallow_(false),
-        mock_timer_(new base::MockOneShotTimer()) {}
-
-  void SetExtractCertResult(bool value) { extract_cert_result_ = value; }
+        mock_timer_(new base::MockOneShotTimer()) {
+    SetPeerCertForTesting(
+        net::ImportCertFromFile(GetTestCertsDirectory(), "self_signed.pem"));
+  }
+  ~TestCastSocketBase() override {}
 
   void SetVerifyChallengeResult(bool value) {
     verify_challenge_result_ = value;
@@ -165,15 +176,6 @@
   void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; }
 
  protected:
-  ~TestCastSocketBase() override {}
-
-  scoped_refptr<net::X509Certificate> ExtractPeerCert() override {
-    return extract_cert_result_
-               ? net::ImportCertFromFile(GetTestCertsDirectory(),
-                                         "self_signed.pem")
-               : nullptr;
-  }
-
   bool VerifyChallengeReply() override {
     EXPECT_FALSE(verify_challenge_disallow_);
     return verify_challenge_result_;
@@ -181,9 +183,6 @@
 
   base::OneShotTimer* GetTimer() override { return mock_timer_.get(); }
 
-  net::IPEndPoint ip_;
-  // Simulated result of peer cert extraction.
-  bool extract_cert_result_;
   // Simulated result of verifying challenge reply.
   bool verify_challenge_result_;
   bool verify_challenge_disallow_;
@@ -196,16 +195,19 @@
 class MockTestCastSocket : public TestCastSocketBase {
  public:
   static std::unique_ptr<MockTestCastSocket> CreateSecure(
+      network::mojom::NetworkContext* network_context,
       const CastSocketOpenParams& open_params,
       Logger* logger) {
     return std::unique_ptr<MockTestCastSocket>(
-        new MockTestCastSocket(open_params, logger));
+        new MockTestCastSocket(network_context, open_params, logger));
   }
 
   using TestCastSocketBase::TestCastSocketBase;
 
-  MockTestCastSocket(const CastSocketOpenParams& open_params, Logger* logger)
-      : TestCastSocketBase(open_params, logger) {}
+  MockTestCastSocket(network::mojom::NetworkContext* network_context,
+                     const CastSocketOpenParams& open_params,
+                     Logger* logger)
+      : TestCastSocketBase(network_context, open_params, logger) {}
 
   ~MockTestCastSocket() override {}
 
@@ -214,6 +216,28 @@
     SetTransportForTesting(base::WrapUnique(mock_transport_));
   }
 
+  bool TestVerifyChannelPolicyAudioOnly() {
+    AuthResult authResult;
+    authResult.channel_policies |= AuthResult::POLICY_AUDIO_ONLY;
+    return VerifyChannelPolicy(authResult);
+  }
+
+  MockCastTransport* GetMockTransport() {
+    CHECK(mock_transport_);
+    return mock_transport_;
+  }
+
+ private:
+  MockCastTransport* mock_transport_ = nullptr;
+
+  DISALLOW_COPY_AND_ASSIGN(MockTestCastSocket);
+};
+
+class TestSocketFactory : public net::ClientSocketFactory {
+ public:
+  explicit TestSocketFactory(net::IPEndPoint ip) : ip_(ip) {}
+  ~TestSocketFactory() override = default;
+
   // Socket connection helpers.
   void SetupTcpConnect(net::IoMode mode, int result) {
     tcp_connect_data_.reset(new net::MockConnect(mode, result, ip_));
@@ -241,21 +265,40 @@
   // Helpers for modifying other connection-related behaviors.
   void SetupTcpConnectUnresponsive() { tcp_unresponsive_ = true; }
 
-  bool TestVerifyChannelPolicyAudioOnly() {
-    AuthResult authResult;
-    authResult.channel_policies |= AuthResult::POLICY_AUDIO_ONLY;
-    return VerifyChannelPolicy(authResult);
+  void SetTcpSocket(
+      std::unique_ptr<net::TransportClientSocket> tcp_client_socket) {
+    tcp_client_socket_ = std::move(tcp_client_socket);
   }
 
-  MockCastTransport* GetMockTransport() {
-    CHECK(mock_transport_);
-    return mock_transport_;
+  void SetTLSSocketCreatedClosure(base::OnceClosure closure) {
+    tls_socket_created_ = std::move(closure);
   }
 
+  void Pause() {
+    if (socket_data_provider_)
+      socket_data_provider_->Pause();
+    else
+      socket_data_provider_paused_ = true;
+  }
+
+  void Resume() { socket_data_provider_->Resume(); }
+
  private:
-  // Creates a TCP socket. Note that at most one socket created with this method
-  // may be live at a time.
-  std::unique_ptr<net::TransportClientSocket> CreateTcpSocket() override {
+  std::unique_ptr<net::DatagramClientSocket> CreateDatagramClientSocket(
+      net::DatagramSocket::BindType,
+      net::NetLog*,
+      const net::NetLogSource&) override {
+    NOTIMPLEMENTED();
+    return nullptr;
+  }
+  std::unique_ptr<net::TransportClientSocket> CreateTransportClientSocket(
+      const net::AddressList&,
+      std::unique_ptr<net::SocketPerformanceWatcher>,
+      net::NetLog*,
+      const net::NetLogSource&) override {
+    if (tcp_client_socket_)
+      return std::move(tcp_client_socket_);
+
     if (tcp_unresponsive_) {
       socket_data_provider_ = std::make_unique<net::StaticSocketDataProvider>();
       return std::unique_ptr<net::TransportClientSocket>(
@@ -264,77 +307,90 @@
       socket_data_provider_ =
           std::make_unique<net::StaticSocketDataProvider>(reads_, writes_);
       socket_data_provider_->set_connect_data(*tcp_connect_data_);
+      if (socket_data_provider_paused_)
+        socket_data_provider_->Pause();
       return std::unique_ptr<net::TransportClientSocket>(
           new MockTCPSocket(false, socket_data_provider_.get()));
     }
   }
-
-  // Creates an SSL socket. Note that at most one socket created with this
-  // method may be live at a time.
-  std::unique_ptr<net::SSLClientSocket> CreateSslSocket(
-      std::unique_ptr<net::StreamSocket> tcp_socket) override {
+  std::unique_ptr<net::SSLClientSocket> CreateSSLClientSocket(
+      std::unique_ptr<net::ClientSocketHandle> client_handle,
+      const net::HostPortPair& host_and_port,
+      const net::SSLConfig& ssl_config,
+      const net::SSLClientSocketContext& context) override {
+    if (!ssl_connect_data_) {
+      // Test isn't overriding SSL socket creation.
+      return net::ClientSocketFactory::GetDefaultFactory()
+          ->CreateSSLClientSocket(std::move(client_handle), host_and_port,
+                                  ssl_config, context);
+    }
     ssl_socket_data_provider_ = std::make_unique<net::SSLSocketDataProvider>(
         ssl_connect_data_->mode, ssl_connect_data_->result);
-    auto client_handle = std::make_unique<net::ClientSocketHandle>();
-    client_handle->SetSocket(std::move(tcp_socket));
+    //  auto client_handle = std::make_unique<net::ClientSocketHandle>();
+
+    if (tls_socket_created_)
+      std::move(tls_socket_created_).Run();
+
+    // client_handle->SetSocket(std::move(tcp_socket));
     return std::make_unique<net::MockSSLClientSocket>(
         std::move(client_handle), net::HostPortPair(), net::SSLConfig(),
         ssl_socket_data_provider_.get());
   }
+  std::unique_ptr<net::ProxyClientSocket> CreateProxyClientSocket(
+      std::unique_ptr<net::ClientSocketHandle> transport_socket,
+      const std::string& user_agent,
+      const net::HostPortPair& endpoint,
+      net::HttpAuthController* http_auth_controller,
+      bool tunnel,
+      bool using_spdy,
+      net::NextProto negotiated_protocol,
+      bool is_https_proxy,
+      const net::NetworkTrafficAnnotationTag& traffic_annotation) override {
+    NOTIMPLEMENTED();
+    return nullptr;
+  }
+  void ClearSSLSessionCache() override { NOTIMPLEMENTED(); }
 
+  net::IPEndPoint ip_;
   // Simulated connect data
   std::unique_ptr<net::MockConnect> tcp_connect_data_;
   std::unique_ptr<net::MockConnect> ssl_connect_data_;
   // Simulated read / write data
   std::vector<net::MockWrite> writes_;
   std::vector<net::MockRead> reads_;
-  std::unique_ptr<net::SocketDataProvider> socket_data_provider_;
+  std::unique_ptr<net::StaticSocketDataProvider> socket_data_provider_;
   std::unique_ptr<net::SSLSocketDataProvider> ssl_socket_data_provider_;
+  bool socket_data_provider_paused_ = false;
   // If true, makes TCP connection process stall. For timeout testing.
   bool tcp_unresponsive_ = false;
-  MockCastTransport* mock_transport_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(MockTestCastSocket);
-};
-
-class SslTestCastSocket : public TestCastSocketBase {
- public:
-  static std::unique_ptr<SslTestCastSocket> CreateSecure(
-      const CastSocketOpenParams& open_params,
-      Logger* logger) {
-    return std::unique_ptr<SslTestCastSocket>(
-        new SslTestCastSocket(open_params, logger));
-  }
-
-  using TestCastSocketBase::TestCastSocketBase;
-
-  void SetTcpSocket(
-      std::unique_ptr<net::TransportClientSocket> tcp_client_socket) {
-    tcp_client_socket_ = std::move(tcp_client_socket);
-  }
-
- private:
-  std::unique_ptr<net::TransportClientSocket> CreateTcpSocket() override {
-    return std::move(tcp_client_socket_);
-  }
-
   std::unique_ptr<net::TransportClientSocket> tcp_client_socket_;
+  base::OnceClosure tls_socket_created_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestSocketFactory);
 };
 
 class CastSocketTestBase : public testing::Test {
  protected:
   CastSocketTestBase()
       : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
+        url_request_context_(true),
         logger_(new Logger()),
         observer_(new MockCastSocketObserver()),
-        capturing_net_log_(new net::TestNetLog()),
         socket_open_params_(
             CreateIPEndPointForTest(),
-            capturing_net_log_.get(),
-            base::TimeDelta::FromMilliseconds(kDistantTimeoutMillis)) {}
+            base::TimeDelta::FromMilliseconds(kDistantTimeoutMillis)),
+        client_socket_factory_(socket_open_params_.ip_endpoint) {}
   ~CastSocketTestBase() override {}
 
-  void SetUp() override { EXPECT_CALL(*observer_, OnMessage(_, _)).Times(0); }
+  void SetUp() override {
+    EXPECT_CALL(*observer_, OnMessage(_, _)).Times(0);
+
+    url_request_context_.set_client_socket_factory(&client_socket_factory_);
+    url_request_context_.Init();
+    network_context_ = std::make_unique<network::NetworkContext>(
+        nullptr, mojo::MakeRequest(&network_context_ptr_),
+        &url_request_context_);
+  }
 
   // Runs all pending tasks in the message loop.
   void RunPendingTasks() {
@@ -342,12 +398,17 @@
     run_loop.RunUntilIdle();
   }
 
+  TestSocketFactory* client_socket_factory() { return &client_socket_factory_; }
+
   content::TestBrowserThreadBundle thread_bundle_;
+  net::TestURLRequestContext url_request_context_;
+  std::unique_ptr<network::NetworkContext> network_context_;
+  network::mojom::NetworkContextPtr network_context_ptr_;
   Logger* logger_;
   CompleteHandler handler_;
   std::unique_ptr<MockCastSocketObserver> observer_;
-  std::unique_ptr<net::TestNetLog> capturing_net_log_;
   CastSocketOpenParams socket_open_params_;
+  TestSocketFactory client_socket_factory_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(CastSocketTestBase);
@@ -366,14 +427,15 @@
   }
 
   void CreateCastSocketSecure() {
-    socket_ = MockTestCastSocket::CreateSecure(socket_open_params_, logger_);
+    socket_ = MockTestCastSocket::CreateSecure(network_context_.get(),
+                                               socket_open_params_, logger_);
   }
 
   void HandleAuthHandshake() {
     socket_->SetupMockTransport();
     CastMessage challenge_proto = CreateAuthChallenge();
     EXPECT_CALL(*socket_->GetMockTransport(),
-                SendMessage(EqualsProto(challenge_proto), _, _))
+                SendMessage(EqualsProto(challenge_proto), _))
         .WillOnce(PostCompletionCallbackTask<1>(net::OK));
     EXPECT_CALL(*socket_->GetMockTransport(), Start());
     EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
@@ -405,7 +467,8 @@
   }
 
   void CreateSockets() {
-    socket_ = SslTestCastSocket::CreateSecure(socket_open_params_, logger_);
+    socket_ = std::make_unique<TestCastSocketBase>(
+        network_context_.get(), socket_open_params_, logger_);
 
     server_cert_ =
         net::ImportCertFromFile(GetTestCertsDirectory(), "self_signed.pem");
@@ -444,7 +507,7 @@
         server_context_->CreateSSLServerSocket(std::move(accepted_socket));
     ASSERT_TRUE(server_socket_);
 
-    socket_->SetTcpSocket(std::move(tcp_client_socket_));
+    client_socket_factory()->SetTcpSocket(std::move(tcp_client_socket_));
   }
 
   void ConnectSockets() {
@@ -524,7 +587,7 @@
   std::unique_ptr<net::TransportClientSocket> tcp_client_socket_;
   std::unique_ptr<net::TCPServerSocket> tcp_server_socket_;
 
-  std::unique_ptr<SslTestCastSocket> socket_;
+  std::unique_ptr<TestCastSocketBase> socket_;
 
   // |server_socket_| is used for the *RealSSL tests in order to test the
   // CastSocket over a real SSL socket.  The other members below are used to
@@ -550,8 +613,8 @@
 // - Credentials are verified successfuly
 TEST_F(MockCastSocketTest, TestConnectFullSecureFlowAsync) {
   CreateCastSocketSecure();
-  socket_->SetupTcpConnect(net::ASYNC, net::OK);
-  socket_->SetupSslConnect(net::ASYNC, net::OK);
+  client_socket_factory()->SetupTcpConnect(net::ASYNC, net::OK);
+  client_socket_factory()->SetupSslConnect(net::ASYNC, net::OK);
 
   HandleAuthHandshake();
 
@@ -567,10 +630,10 @@
 // - Challenge response is received (sync)
 // - Credentials are verified successfuly
 TEST_F(MockCastSocketTest, TestConnectFullSecureFlowSync) {
-  CreateCastSocketSecure();
-  socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
-  socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
 
+  CreateCastSocketSecure();
   HandleAuthHandshake();
 
   EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
@@ -583,12 +646,12 @@
   CreateCastSocketSecure();
   socket_->SetupMockTransport();
 
-  socket_->SetupTcpConnect(net::ASYNC, net::OK);
-  socket_->SetupSslConnect(net::ASYNC, net::OK);
+  client_socket_factory()->SetupTcpConnect(net::ASYNC, net::OK);
+  client_socket_factory()->SetupSslConnect(net::ASYNC, net::OK);
 
   CastMessage challenge_proto = CreateAuthChallenge();
   EXPECT_CALL(*socket_->GetMockTransport(),
-              SendMessage(EqualsProto(challenge_proto), _, _))
+              SendMessage(EqualsProto(challenge_proto), _))
       .WillOnce(PostCompletionCallbackTask<1>(net::OK));
   EXPECT_CALL(*socket_->GetMockTransport(), Start());
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
@@ -614,7 +677,7 @@
 TEST_F(MockCastSocketTest, TestConnectTcpConnectErrorAsync) {
   CreateCastSocketSecure();
 
-  socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED);
+  client_socket_factory()->SetupTcpConnect(net::ASYNC, net::ERR_FAILED);
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
@@ -629,7 +692,7 @@
 TEST_F(MockCastSocketTest, TestConnectTcpConnectErrorSync) {
   CreateCastSocketSecure();
 
-  socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_FAILED);
+  client_socket_factory()->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_FAILED);
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
@@ -643,7 +706,7 @@
 // Test connection error - timeout
 TEST_F(MockCastSocketTest, TestConnectTcpTimeoutError) {
   CreateCastSocketSecure();
-  socket_->SetupTcpConnectUnresponsive();
+  client_socket_factory()->SetupTcpConnectUnresponsive();
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   EXPECT_CALL(*observer_, OnError(_, ChannelError::CONNECT_TIMEOUT));
   socket_->AddObserver(observer_.get());
@@ -663,7 +726,8 @@
 // Test connection error - TCP socket returns timeout
 TEST_F(MockCastSocketTest, TestConnectTcpSocketTimeoutError) {
   CreateCastSocketSecure();
-  socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT);
+  client_socket_factory()->SetupTcpConnect(net::SYNCHRONOUS,
+                                           net::ERR_CONNECTION_TIMED_OUT);
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   EXPECT_CALL(*observer_, OnError(_, ChannelError::CONNECT_TIMEOUT));
   socket_->AddObserver(observer_.get());
@@ -681,8 +745,8 @@
 TEST_F(MockCastSocketTest, TestConnectSslConnectErrorAsync) {
   CreateCastSocketSecure();
 
-  socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
-  socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED);
+  client_socket_factory()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED);
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
@@ -697,8 +761,8 @@
 TEST_F(MockCastSocketTest, TestConnectSslConnectErrorSync) {
   CreateCastSocketSecure();
 
-  socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
-  socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED);
+  client_socket_factory()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED);
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
@@ -713,10 +777,11 @@
 
 // Test connection error - SSL connect times out (sync)
 TEST_F(MockCastSocketTest, TestConnectSslConnectTimeoutSync) {
-  CreateCastSocketSecure();
+  client_socket_factory()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupSslConnect(net::SYNCHRONOUS,
+                                           net::ERR_CONNECTION_TIMED_OUT);
 
-  socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
-  socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT);
+  CreateCastSocketSecure();
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
@@ -733,8 +798,9 @@
 TEST_F(MockCastSocketTest, TestConnectSslConnectTimeoutAsync) {
   CreateCastSocketSecure();
 
-  socket_->SetupTcpConnect(net::ASYNC, net::OK);
-  socket_->SetupSslConnect(net::ASYNC, net::ERR_CONNECTION_TIMED_OUT);
+  client_socket_factory()->SetupTcpConnect(net::ASYNC, net::OK);
+  client_socket_factory()->SetupSslConnect(net::ASYNC,
+                                           net::ERR_CONNECTION_TIMED_OUT);
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
@@ -750,10 +816,10 @@
   CreateCastSocketSecure();
   socket_->SetupMockTransport();
 
-  socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
-  socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
   EXPECT_CALL(*socket_->GetMockTransport(),
-              SendMessage(EqualsProto(CreateAuthChallenge()), _, _))
+              SendMessage(EqualsProto(CreateAuthChallenge()), _))
       .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET));
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
@@ -770,13 +836,14 @@
 TEST_F(MockCastSocketTest, TestConnectDestroyedAfterChallengeSent) {
   CreateCastSocketSecure();
   socket_->SetupMockTransport();
-  socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
-  socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
   EXPECT_CALL(*socket_->GetMockTransport(),
-              SendMessage(EqualsProto(CreateAuthChallenge()), _, _))
+              SendMessage(EqualsProto(CreateAuthChallenge()), _))
       .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET));
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
                                   base::Unretained(&handler_)));
+  RunPendingTasks();
   socket_.reset();
   RunPendingTasks();
 }
@@ -786,12 +853,12 @@
   CreateCastSocketSecure();
   socket_->SetupMockTransport();
 
-  socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
-  socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
   EXPECT_CALL(*socket_->GetMockTransport(),
-              SendMessage(EqualsProto(CreateAuthChallenge()), _, _))
+              SendMessage(EqualsProto(CreateAuthChallenge()), _))
       .WillOnce(PostCompletionCallbackTask<1>(net::OK));
-  socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED);
+  client_socket_factory()->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED);
   EXPECT_CALL(*observer_, OnError(_, ChannelError::CAST_SOCKET_ERROR));
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   EXPECT_CALL(*socket_->GetMockTransport(), Start());
@@ -810,14 +877,14 @@
 TEST_F(MockCastSocketTest, TestConnectChallengeVerificationFails) {
   CreateCastSocketSecure();
   socket_->SetupMockTransport();
-  socket_->SetupTcpConnect(net::ASYNC, net::OK);
-  socket_->SetupSslConnect(net::ASYNC, net::OK);
+  client_socket_factory()->SetupTcpConnect(net::ASYNC, net::OK);
+  client_socket_factory()->SetupSslConnect(net::ASYNC, net::OK);
   socket_->SetVerifyChallengeResult(false);
 
   EXPECT_CALL(*observer_, OnError(_, ChannelError::AUTHENTICATION_ERROR));
   CastMessage challenge_proto = CreateAuthChallenge();
   EXPECT_CALL(*socket_->GetMockTransport(),
-              SendMessage(EqualsProto(challenge_proto), _, _))
+              SendMessage(EqualsProto(challenge_proto), _))
       .WillOnce(PostCompletionCallbackTask<1>(net::OK));
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   EXPECT_CALL(*socket_->GetMockTransport(), Start());
@@ -836,26 +903,30 @@
 // testing the two components in integration.
 TEST_F(MockCastSocketTest, TestConnectEndToEndWithRealTransportAsync) {
   CreateCastSocketSecure();
-  socket_->SetupTcpConnect(net::ASYNC, net::OK);
-  socket_->SetupSslConnect(net::ASYNC, net::OK);
+  client_socket_factory()->SetupTcpConnect(net::ASYNC, net::OK);
+  client_socket_factory()->SetupSslConnect(net::ASYNC, net::OK);
 
   // Set low-level auth challenge expectations.
   CastMessage challenge = CreateAuthChallenge();
   std::string challenge_str;
   EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
-  socket_->AddWriteResultForData(net::ASYNC, challenge_str);
+  client_socket_factory()->AddWriteResultForData(net::ASYNC, challenge_str);
 
   // Set low-level auth reply expectations.
   CastMessage reply = CreateAuthReply();
   std::string reply_str;
   EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
-  socket_->AddReadResultForData(net::ASYNC, reply_str);
-  socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING);
+  client_socket_factory()->AddReadResultForData(net::ASYNC, reply_str);
+  client_socket_factory()->AddReadResult(net::ASYNC, net::ERR_IO_PENDING);
+  // Make sure the data is ready by the TLS socket and not the TCP socket.
+  client_socket_factory()->Pause();
+  client_socket_factory()->SetTLSSocketCreatedClosure(
+      base::BindLambdaForTesting([&] { client_socket_factory()->Resume(); }));
 
   CastMessage test_message = CreateTestMessage();
   std::string test_message_str;
   EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str));
-  socket_->AddWriteResultForData(net::ASYNC, test_message_str);
+  client_socket_factory()->AddWriteResultForData(net::ASYNC, test_message_str);
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
@@ -867,10 +938,8 @@
   // Send the test message through a real transport object.
   EXPECT_CALL(handler_, OnWriteComplete(net::OK));
   socket_->transport()->SendMessage(
-      test_message,
-      base::Bind(&CompleteHandler::OnWriteComplete,
-                 base::Unretained(&handler_)),
-      TRAFFIC_ANNOTATION_FOR_TESTS);
+      test_message, base::Bind(&CompleteHandler::OnWriteComplete,
+                               base::Unretained(&handler_)));
   RunPendingTasks();
 
   EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
@@ -880,26 +949,32 @@
 // Same as TestConnectEndToEndWithRealTransportAsync, except synchronous.
 TEST_F(MockCastSocketTest, TestConnectEndToEndWithRealTransportSync) {
   CreateCastSocketSecure();
-  socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
-  socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
+  client_socket_factory()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
 
   // Set low-level auth challenge expectations.
   CastMessage challenge = CreateAuthChallenge();
   std::string challenge_str;
   EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
-  socket_->AddWriteResultForData(net::SYNCHRONOUS, challenge_str);
+  client_socket_factory()->AddWriteResultForData(net::SYNCHRONOUS,
+                                                 challenge_str);
 
   // Set low-level auth reply expectations.
   CastMessage reply = CreateAuthReply();
   std::string reply_str;
   EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
-  socket_->AddReadResultForData(net::SYNCHRONOUS, reply_str);
-  socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING);
+  client_socket_factory()->AddReadResultForData(net::SYNCHRONOUS, reply_str);
+  client_socket_factory()->AddReadResult(net::ASYNC, net::ERR_IO_PENDING);
+  // Make sure the data is ready by the TLS socket and not the TCP socket.
+  client_socket_factory()->Pause();
+  client_socket_factory()->SetTLSSocketCreatedClosure(
+      base::BindLambdaForTesting([&] { client_socket_factory()->Resume(); }));
 
   CastMessage test_message = CreateTestMessage();
   std::string test_message_str;
   EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str));
-  socket_->AddWriteResultForData(net::SYNCHRONOUS, test_message_str);
+  client_socket_factory()->AddWriteResultForData(net::SYNCHRONOUS,
+                                                 test_message_str);
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
@@ -911,10 +986,8 @@
   // Send the test message through a real transport object.
   EXPECT_CALL(handler_, OnWriteComplete(net::OK));
   socket_->transport()->SendMessage(
-      test_message,
-      base::Bind(&CompleteHandler::OnWriteComplete,
-                 base::Unretained(&handler_)),
-      TRAFFIC_ANNOTATION_FOR_TESTS);
+      test_message, base::Bind(&CompleteHandler::OnWriteComplete,
+                               base::Unretained(&handler_)));
   RunPendingTasks();
 
   EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
@@ -940,7 +1013,7 @@
 
 TEST_F(MockCastSocketTest, TestOpenChannelConnectingSocket) {
   CreateCastSocketSecure();
-  socket_->SetupTcpConnectUnresponsive();
+  client_socket_factory()->SetupTcpConnectUnresponsive();
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
                                   base::Unretained(&handler_)));
   RunPendingTasks();
@@ -954,9 +1027,8 @@
 
 TEST_F(MockCastSocketTest, TestOpenChannelConnectedSocket) {
   CreateCastSocketSecure();
-  socket_->SetupTcpConnect(net::ASYNC, net::OK);
-  socket_->SetupSslConnect(net::ASYNC, net::OK);
-
+  client_socket_factory()->SetupTcpConnect(net::ASYNC, net::OK);
+  client_socket_factory()->SetupSslConnect(net::ASYNC, net::OK);
   HandleAuthHandshake();
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
@@ -966,7 +1038,7 @@
 
 TEST_F(MockCastSocketTest, TestOpenChannelClosedSocket) {
   CreateCastSocketSecure();
-  socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED);
+  client_socket_factory()->SetupTcpConnect(net::ASYNC, net::ERR_FAILED);
 
   EXPECT_CALL(handler_, OnConnectComplete(socket_.get()));
   socket_->Connect(base::BindOnce(&CompleteHandler::OnConnectComplete,
@@ -1074,10 +1146,8 @@
 
   EXPECT_CALL(handler_, OnWriteComplete(net::OK));
   socket_->transport()->SendMessage(
-      test_message,
-      base::Bind(&CompleteHandler::OnWriteComplete,
-                 base::Unretained(&handler_)),
-      TRAFFIC_ANNOTATION_FOR_TESTS);
+      test_message, base::Bind(&CompleteHandler::OnWriteComplete,
+                               base::Unretained(&handler_)));
   RunPendingTasks();
 
   read = ReadExactLength(test_message_buffer.get(), test_message_length,
diff --git a/components/cast_channel/cast_test_util.h b/components/cast_channel/cast_test_util.h
index 3b1eec7c..2016dc6 100644
--- a/components/cast_channel/cast_test_util.h
+++ b/components/cast_channel/cast_test_util.h
@@ -29,11 +29,9 @@
   void SetReadDelegate(
       std::unique_ptr<CastTransport::Delegate> delegate) override;
 
-  MOCK_METHOD3(
-      SendMessage,
-      void(const CastMessage& message,
-           const net::CompletionCallback& callback,
-           const net::NetworkTrafficAnnotationTag& traffic_annotation));
+  MOCK_METHOD2(SendMessage,
+               void(const CastMessage& message,
+                    const net::CompletionCallback& callback));
 
   MOCK_METHOD0(Start, void(void));
 
@@ -75,17 +73,17 @@
       const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
   ~MockCastSocketService() override;
 
-  void OpenSocket(const CastSocketOpenParams& open_params,
+  void OpenSocket(NetworkContextGetter network_context_getter,
+                  const CastSocketOpenParams& open_params,
                   CastSocket::OnOpenCallback open_cb) override {
     // Unit test should not call |open_cb| more than once. Just use
     // base::AdaptCallbackForRepeating to pass |open_cb| to a mock method.
-    OpenSocketInternal(open_params.ip_endpoint, open_params.net_log,
+    OpenSocketInternal(open_params.ip_endpoint,
                        base::AdaptCallbackForRepeating(std::move(open_cb)));
   }
 
-  MOCK_METHOD3(OpenSocketInternal,
+  MOCK_METHOD2(OpenSocketInternal,
                void(const net::IPEndPoint& ip_endpoint,
-                    net::NetLog* net_log,
                     const base::Callback<void(CastSocket*)>& open_cb));
   MOCK_CONST_METHOD1(GetSocket, CastSocket*(int channel_id));
 };
diff --git a/components/cast_channel/cast_transport.cc b/components/cast_channel/cast_transport.cc
index bfd2030..cf9ff8fd 100644
--- a/components/cast_channel/cast_transport.cc
+++ b/components/cast_channel/cast_transport.cc
@@ -22,19 +22,18 @@
 #include "components/cast_channel/logger.h"
 #include "components/cast_channel/proto/cast_channel.pb.h"
 #include "net/base/net_errors.h"
-#include "net/socket/socket.h"
 
 #define VLOG_WITH_CONNECTION(level) \
   VLOG(level) << "[" << ip_endpoint_.ToString() << ", auth=SSL_VERIFIED] "
 
 namespace cast_channel {
 
-CastTransportImpl::CastTransportImpl(net::Socket* socket,
+CastTransportImpl::CastTransportImpl(Channel* channel,
                                      int channel_id,
                                      const net::IPEndPoint& ip_endpoint,
                                      scoped_refptr<Logger> logger)
     : started_(false),
-      socket_(socket),
+      channel_(channel),
       write_state_(WriteState::IDLE),
       read_state_(ReadState::READ),
       error_state_(ChannelError::NONE),
@@ -83,10 +82,8 @@
   }
 }
 
-void CastTransportImpl::SendMessage(
-    const CastMessage& message,
-    const net::CompletionCallback& callback,
-    const net::NetworkTrafficAnnotationTag& traffic_annotation) {
+void CastTransportImpl::SendMessage(const CastMessage& message,
+                                    const net::CompletionCallback& callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(IsCastMessageValid(message));
   std::string serialized_message;
@@ -95,8 +92,8 @@
         FROM_HERE, base::BindOnce(callback, net::ERR_FAILED));
     return;
   }
-  WriteRequest write_request(message.namespace_(), serialized_message, callback,
-                             traffic_annotation);
+  WriteRequest write_request(message.namespace_(), serialized_message,
+                             callback);
 
   write_queue_.push(write_request);
   if (write_state_ == WriteState::IDLE) {
@@ -108,11 +105,8 @@
 CastTransportImpl::WriteRequest::WriteRequest(
     const std::string& namespace_,
     const std::string& payload,
-    const net::CompletionCallback& callback,
-    const net::NetworkTrafficAnnotationTag& traffic_annotation)
-    : message_namespace(namespace_),
-      callback(callback),
-      traffic_annotation_(traffic_annotation) {
+    const net::CompletionCallback& callback)
+    : message_namespace(namespace_), callback(callback) {
   VLOG(2) << "WriteRequest size: " << payload.size();
   io_buffer = new net::DrainableIOBuffer(new net::StringIOBuffer(payload),
                                          payload.size());
@@ -202,11 +196,10 @@
 
   SetWriteState(WriteState::WRITE_COMPLETE);
 
-  int rv = socket_->Write(
-      request.io_buffer.get(), request.io_buffer->BytesRemaining(),
-      base::BindOnce(&CastTransportImpl::OnWriteResult, base::Unretained(this)),
-      request.traffic_annotation_);
-  return rv;
+  channel_->Write(request.io_buffer.get(), request.io_buffer->BytesRemaining(),
+                  base::BindOnce(&CastTransportImpl::OnWriteResult,
+                                 base::Unretained(this)));
+  return net::ERR_IO_PENDING;
 }
 
 int CastTransportImpl::DoWriteComplete(int result) {
@@ -325,9 +318,10 @@
   DCHECK_GT(num_bytes_to_read, 0u);
 
   // Read up to num_bytes_to_read into |current_read_buffer_|.
-  return socket_->Read(
+  channel_->Read(
       read_buffer_.get(), base::checked_cast<uint32_t>(num_bytes_to_read),
       base::BindOnce(&CastTransportImpl::OnReadResult, base::Unretained(this)));
+  return net::ERR_IO_PENDING;
 }
 
 int CastTransportImpl::DoReadComplete(int result) {
diff --git a/components/cast_channel/cast_transport.h b/components/cast_channel/cast_transport.h
index 7eab1d9..14158ce 100644
--- a/components/cast_channel/cast_transport.h
+++ b/components/cast_channel/cast_transport.h
@@ -15,13 +15,14 @@
 #include "components/cast_channel/cast_channel_enum.h"
 #include "components/cast_channel/logger.h"
 #include "net/base/completion_callback.h"
+#include "net/base/completion_once_callback.h"
 #include "net/base/ip_endpoint.h"
-#include "net/traffic_annotation/network_traffic_annotation.h"
 
 namespace net {
 class DrainableIOBuffer;
 class DrainableIOBuffer;
 class GrowableIOBuffer;
+class IOBuffer;
 class Socket;
 }  // namespace net
 
@@ -54,10 +55,8 @@
   // |message|: The message to send.
   // |callback|: Callback to be invoked when the write operation has finished.
   // Virtual for testing.
-  virtual void SendMessage(
-      const CastMessage& message,
-      const net::CompletionCallback& callback,
-      const net::NetworkTrafficAnnotationTag& traffic_annotation) = 0;
+  virtual void SendMessage(const CastMessage& message,
+                           const net::CompletionCallback& callback) = 0;
 
   // Initializes the reading state machine and starts reading from the
   // underlying socket.
@@ -76,13 +75,25 @@
  public:
   using ChannelError = ::cast_channel::ChannelError;
 
+  // Interface to read/write data from a socket to ease unit-testing.
+  class Channel {
+   public:
+    virtual ~Channel() {}
+    virtual void Read(net::IOBuffer* buffer,
+                      int bytes,
+                      net::CompletionOnceCallback callback) = 0;
+    virtual void Write(net::IOBuffer* buffer,
+                       int bytes,
+                       net::CompletionOnceCallback callback) = 0;
+  };
+
   // Adds a CastMessage read/write layer to a socket.
   // Message read events are propagated to the owner via |read_delegate|.
   // |vlog_prefix| sets the prefix used for all VLOGged output.
-  // |socket| and |logger| must all out-live the
+  // |channel| and |logger| must all out-live the
   // CastTransportImpl instance.
   // |read_delegate| is owned by this CastTransportImpl object.
-  CastTransportImpl(net::Socket* socket,
+  CastTransportImpl(Channel* channel,
                     int channel_id,
                     const net::IPEndPoint& ip_endpoint_,
                     scoped_refptr<Logger> logger);
@@ -90,10 +101,8 @@
   ~CastTransportImpl() override;
 
   // CastTransport interface.
-  void SendMessage(
-      const CastMessage& message,
-      const net::CompletionCallback& callback,
-      const net::NetworkTrafficAnnotationTag& traffic_annotation) override;
+  void SendMessage(const CastMessage& message,
+                   const net::CompletionCallback& callback) override;
   void Start() override;
   void SetReadDelegate(std::unique_ptr<Delegate> delegate) override;
 
@@ -101,11 +110,9 @@
   // Holds a message to be written to the socket. |callback| is invoked when the
   // message is fully written or an error occurrs.
   struct WriteRequest {
-    explicit WriteRequest(
-        const std::string& namespace_,
-        const std::string& payload,
-        const net::CompletionCallback& callback,
-        const net::NetworkTrafficAnnotationTag& traffic_annotation);
+    explicit WriteRequest(const std::string& namespace_,
+                          const std::string& payload,
+                          const net::CompletionCallback& callback);
     WriteRequest(const WriteRequest& other);
     ~WriteRequest();
 
@@ -116,8 +123,6 @@
     net::CompletionCallback callback;
     // Buffer with outgoing data.
     scoped_refptr<net::DrainableIOBuffer> io_buffer;
-    // Traffic Annotation.
-    net::NetworkTrafficAnnotationTag traffic_annotation_;
   };
 
   static bool IsTerminalReadState(ReadState read_state);
@@ -169,8 +174,8 @@
   // Last message received on the socket.
   std::unique_ptr<CastMessage> current_message_;
 
-  // Socket used for I/O operations.
-  net::Socket* const socket_;
+  // Channel used for I/O operations.
+  Channel* const channel_;
 
   // Methods for communicating message receipt and error status to client code.
   std::unique_ptr<Delegate> delegate_;
diff --git a/components/cast_channel/cast_transport_unittest.cc b/components/cast_channel/cast_transport_unittest.cc
index e3abe135..022dc253 100644
--- a/components/cast_channel/cast_transport_unittest.cc
+++ b/components/cast_channel/cast_transport_unittest.cc
@@ -24,6 +24,7 @@
 #include "net/log/test_net_log.h"
 #include "net/socket/socket.h"
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
+#include "services/network/network_context.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -120,43 +121,29 @@
 
 }  // namespace
 
-class MockSocket : public net::Socket {
+class MockSocket : public cast_channel::CastTransportImpl::Channel {
  public:
-  int Read(net::IOBuffer* buffer,
-           int bytes,
-           net::CompletionOnceCallback callback) override {
-    return Read(buffer, bytes,
-                base::AdaptCallbackForRepeating(std::move(callback)));
+  void Read(net::IOBuffer* buffer,
+            int bytes,
+            net::CompletionOnceCallback callback) override {
+    Read(buffer, bytes, base::AdaptCallbackForRepeating(std::move(callback)));
   }
 
-  int Write(net::IOBuffer* buffer,
-            int bytes,
-            net::CompletionOnceCallback callback,
-            const net::NetworkTrafficAnnotationTag& tag) override {
-    return Write(buffer, bytes,
-                 base::AdaptCallbackForRepeating(std::move(callback)), tag);
+  void Write(net::IOBuffer* buffer,
+             int bytes,
+             net::CompletionOnceCallback callback) override {
+    Write(buffer, bytes, base::AdaptCallbackForRepeating(std::move(callback)));
   }
 
   MOCK_METHOD3(Read,
-               int(net::IOBuffer* buf,
-                   int buf_len,
-                   const net::CompletionCallback& callback));
+               void(net::IOBuffer* buf,
+                    int buf_len,
+                    const net::CompletionCallback& callback));
 
-  MOCK_METHOD4(Write,
-               int(net::IOBuffer* buf,
-                   int buf_len,
-                   const net::CompletionCallback& callback,
-                   const net::NetworkTrafficAnnotationTag&));
-
-  int SetReceiveBufferSize(int32_t size) override {
-    NOTREACHED();
-    return 0;
-  }
-
-  int SetSendBufferSize(int32_t size) override {
-    NOTREACHED();
-    return 0;
-  }
+  MOCK_METHOD3(Write,
+               void(net::IOBuffer* buf,
+                    int buf_len,
+                    const net::CompletionCallback& callback));
 };
 
 class CastTransportTest : public testing::Test {
@@ -194,15 +181,13 @@
   std::string serialized_message;
   EXPECT_TRUE(MessageFramer::Serialize(message, &serialized_message));
 
-  EXPECT_CALL(mock_socket_, Write(NotNull(), serialized_message.size(), _, _))
+  EXPECT_CALL(mock_socket_, Write(NotNull(), serialized_message.size(), _))
       .WillOnce(DoAll(ReadBufferToString<0, 1>(&output),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)));
+                      EnqueueCallback<2>(&socket_cbs)));
   EXPECT_CALL(write_handler, Complete(net::OK));
   transport_->SendMessage(
       message,
-      base::Bind(&CompleteHandler::Complete, base::Unretained(&write_handler)),
-      TRAFFIC_ANNOTATION_FOR_TESTS);
+      base::Bind(&CompleteHandler::Complete, base::Unretained(&write_handler)));
   RunPendingTasks();
   socket_cbs.Pop(serialized_message.size());
   RunPendingTasks();
@@ -220,24 +205,20 @@
   EXPECT_TRUE(MessageFramer::Serialize(message, &serialized_message));
 
   // Only one byte is written.
-  EXPECT_CALL(
-      mock_socket_,
-      Write(NotNull(), static_cast<int>(serialized_message.size()), _, _))
+  EXPECT_CALL(mock_socket_,
+              Write(NotNull(), static_cast<int>(serialized_message.size()), _))
       .WillOnce(DoAll(ReadBufferToString<0, 1>(&output),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)));
+                      EnqueueCallback<2>(&socket_cbs)));
   // Remainder of bytes are written.
   EXPECT_CALL(
       mock_socket_,
-      Write(NotNull(), static_cast<int>(serialized_message.size() - 1), _, _))
+      Write(NotNull(), static_cast<int>(serialized_message.size() - 1), _))
       .WillOnce(DoAll(ReadBufferToString<0, 1>(&output),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)));
+                      EnqueueCallback<2>(&socket_cbs)));
 
   transport_->SendMessage(
       message,
-      base::Bind(&CompleteHandler::Complete, base::Unretained(&write_handler)),
-      TRAFFIC_ANNOTATION_FOR_TESTS);
+      base::Bind(&CompleteHandler::Complete, base::Unretained(&write_handler)));
   RunPendingTasks();
   EXPECT_EQ(serialized_message, output);
   socket_cbs.Pop(1);
@@ -254,15 +235,13 @@
   CompletionQueue socket_cbs;
   CompleteHandler write_handler;
   CastMessage message = CreateCastMessage();
-  EXPECT_CALL(mock_socket_, Write(NotNull(), _, _, _))
-      .WillOnce(
-          DoAll(EnqueueCallback<2>(&socket_cbs), Return(net::ERR_IO_PENDING)));
+  EXPECT_CALL(mock_socket_, Write(NotNull(), _, _))
+      .WillOnce(EnqueueCallback<2>(&socket_cbs));
   EXPECT_CALL(write_handler, Complete(net::ERR_FAILED));
   EXPECT_CALL(*delegate_, OnError(ChannelError::CAST_SOCKET_ERROR));
   transport_->SendMessage(
       message,
-      base::Bind(&CompleteHandler::Complete, base::Unretained(&write_handler)),
-      TRAFFIC_ANNOTATION_FOR_TESTS);
+      base::Bind(&CompleteHandler::Complete, base::Unretained(&write_handler)));
   RunPendingTasks();
   socket_cbs.Pop(net::ERR_CONNECTION_RESET);
   RunPendingTasks();
@@ -273,71 +252,6 @@
 }
 
 // ----------------------------------------------------------------------------
-// Synchronous write tests
-TEST_F(CastTransportTest, TestFullWriteSync) {
-  CompleteHandler write_handler;
-  std::string output;
-  CastMessage message = CreateCastMessage();
-  std::string serialized_message;
-  EXPECT_TRUE(MessageFramer::Serialize(message, &serialized_message));
-  EXPECT_CALL(mock_socket_, Write(NotNull(), serialized_message.size(), _, _))
-      .WillOnce(DoAll(ReadBufferToString<0, 1>(&output),
-                      Return(serialized_message.size())));
-  EXPECT_CALL(write_handler, Complete(net::OK));
-  transport_->SendMessage(
-      message,
-      base::Bind(&CompleteHandler::Complete, base::Unretained(&write_handler)),
-      TRAFFIC_ANNOTATION_FOR_TESTS);
-  RunPendingTasks();
-  EXPECT_EQ(serialized_message, output);
-}
-
-TEST_F(CastTransportTest, TestPartialWritesSync) {
-  InSequence seq;
-  CompleteHandler write_handler;
-  std::string output;
-
-  CastMessage message = CreateCastMessage();
-  std::string serialized_message;
-  EXPECT_TRUE(MessageFramer::Serialize(message, &serialized_message));
-
-  // Only one byte is written.
-  EXPECT_CALL(mock_socket_, Write(NotNull(), serialized_message.size(), _, _))
-      .WillOnce(DoAll(ReadBufferToString<0, 1>(&output), Return(1)));
-  // Remainder of bytes are written.
-  EXPECT_CALL(mock_socket_,
-              Write(NotNull(), serialized_message.size() - 1, _, _))
-      .WillOnce(DoAll(ReadBufferToString<0, 1>(&output),
-                      Return(serialized_message.size() - 1)));
-
-  EXPECT_CALL(write_handler, Complete(net::OK));
-  transport_->SendMessage(
-      message,
-      base::Bind(&CompleteHandler::Complete, base::Unretained(&write_handler)),
-      TRAFFIC_ANNOTATION_FOR_TESTS);
-  RunPendingTasks();
-  EXPECT_EQ(serialized_message.substr(1, serialized_message.size() - 1),
-            output);
-}
-
-TEST_F(CastTransportTest, TestWriteFailureSync) {
-  CompleteHandler write_handler;
-  CastMessage message = CreateCastMessage();
-  EXPECT_CALL(mock_socket_, Write(NotNull(), _, _, _))
-      .WillOnce(Return(net::ERR_CONNECTION_RESET));
-  EXPECT_CALL(write_handler, Complete(net::ERR_FAILED));
-  transport_->SendMessage(
-      message,
-      base::Bind(&CompleteHandler::Complete, base::Unretained(&write_handler)),
-      TRAFFIC_ANNOTATION_FOR_TESTS);
-  RunPendingTasks();
-  EXPECT_EQ(ChannelEvent::SOCKET_WRITE,
-            logger_->GetLastError(kChannelId).channel_event);
-  EXPECT_EQ(net::ERR_CONNECTION_RESET,
-            logger_->GetLastError(kChannelId).net_return_value);
-}
-
-// ----------------------------------------------------------------------------
 // Asynchronous read tests
 TEST_F(CastTransportTest, TestFullReadAsync) {
   InSequence s;
@@ -352,8 +266,7 @@
   EXPECT_CALL(mock_socket_,
               Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
       .WillOnce(DoAll(FillBufferFromString<0>(serialized_message),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)));
+                      EnqueueCallback<2>(&socket_cbs)));
 
   // Read bytes [4, n].
   EXPECT_CALL(mock_socket_,
@@ -365,14 +278,12 @@
                           MessageFramer::MessageHeader::header_size(),
                           serialized_message.size() -
                               MessageFramer::MessageHeader::header_size())),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)))
+                      EnqueueCallback<2>(&socket_cbs)))
       .RetiresOnSaturation();
 
   EXPECT_CALL(*delegate_, OnMessage(EqualsProto(message)));
   EXPECT_CALL(mock_socket_,
-              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
-      .WillOnce(Return(net::ERR_IO_PENDING));
+              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _));
   transport_->Start();
   RunPendingTasks();
   socket_cbs.Pop(MessageFramer::MessageHeader::header_size());
@@ -395,8 +306,7 @@
   EXPECT_CALL(mock_socket_,
               Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
       .WillOnce(DoAll(FillBufferFromString<0>(serialized_message),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)))
+                      EnqueueCallback<2>(&socket_cbs)))
       .RetiresOnSaturation();
   // Read bytes [4, n-1].
   EXPECT_CALL(mock_socket_,
@@ -408,15 +318,13 @@
                           MessageFramer::MessageHeader::header_size(),
                           serialized_message.size() -
                               MessageFramer::MessageHeader::header_size() - 1)),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)))
+                      EnqueueCallback<2>(&socket_cbs)))
       .RetiresOnSaturation();
   // Read final byte.
   EXPECT_CALL(mock_socket_, Read(NotNull(), 1, _))
       .WillOnce(DoAll(FillBufferFromString<0>(serialized_message.substr(
                           serialized_message.size() - 1, 1)),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)))
+                      EnqueueCallback<2>(&socket_cbs)))
       .RetiresOnSaturation();
   EXPECT_CALL(*delegate_, OnMessage(EqualsProto(message)));
   transport_->Start();
@@ -424,8 +332,7 @@
   socket_cbs.Pop(serialized_message.size() -
                  MessageFramer::MessageHeader::header_size() - 1);
   EXPECT_CALL(mock_socket_,
-              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
-      .WillOnce(Return(net::ERR_IO_PENDING));
+              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _));
   socket_cbs.Pop(1);
 }
 
@@ -442,8 +349,7 @@
   EXPECT_CALL(mock_socket_,
               Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
       .WillOnce(DoAll(FillBufferFromString<0>(serialized_message),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)))
+                      EnqueueCallback<2>(&socket_cbs)))
       .RetiresOnSaturation();
 
   EXPECT_CALL(*delegate_, OnError(ChannelError::CAST_SOCKET_ERROR));
@@ -469,8 +375,7 @@
   EXPECT_CALL(mock_socket_,
               Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
       .WillOnce(DoAll(FillBufferFromString<0>(serialized_message),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)))
+                      EnqueueCallback<2>(&socket_cbs)))
       .RetiresOnSaturation();
   // Read bytes [4, n-1].
   EXPECT_CALL(mock_socket_,
@@ -482,8 +387,7 @@
                           MessageFramer::MessageHeader::header_size(),
                           serialized_message.size() -
                               MessageFramer::MessageHeader::header_size() - 1)),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)))
+                      EnqueueCallback<2>(&socket_cbs)))
       .RetiresOnSaturation();
   EXPECT_CALL(*delegate_, OnError(ChannelError::CAST_SOCKET_ERROR));
   transport_->Start();
@@ -515,8 +419,7 @@
   EXPECT_CALL(mock_socket_,
               Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
       .WillOnce(DoAll(FillBufferFromString<0>(serialized_message),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)))
+                      EnqueueCallback<2>(&socket_cbs)))
       .RetiresOnSaturation();
   // Read bytes [4, n].
   EXPECT_CALL(mock_socket_,
@@ -528,8 +431,7 @@
                           MessageFramer::MessageHeader::header_size(),
                           serialized_message.size() -
                               MessageFramer::MessageHeader::header_size() - 1)),
-                      EnqueueCallback<2>(&socket_cbs),
-                      Return(net::ERR_IO_PENDING)))
+                      EnqueueCallback<2>(&socket_cbs)))
       .RetiresOnSaturation();
 
   EXPECT_CALL(*delegate_, OnError(ChannelError::INVALID_MESSAGE));
@@ -539,169 +441,4 @@
                  MessageFramer::MessageHeader::header_size());
 }
 
-// ----------------------------------------------------------------------------
-// Synchronous read tests
-TEST_F(CastTransportTest, TestFullReadSync) {
-  InSequence s;
-  CastMessage message = CreateCastMessage();
-  std::string serialized_message;
-  EXPECT_TRUE(MessageFramer::Serialize(message, &serialized_message));
-
-  EXPECT_CALL(*delegate_, Start());
-
-  // Read bytes [0, 3].
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
-      .WillOnce(DoAll(FillBufferFromString<0>(serialized_message),
-                      Return(MessageFramer::MessageHeader::header_size())))
-      .RetiresOnSaturation();
-  // Read bytes [4, n].
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(),
-                   serialized_message.size() -
-                       MessageFramer::MessageHeader::header_size(),
-                   _))
-      .WillOnce(DoAll(FillBufferFromString<0>(serialized_message.substr(
-                          MessageFramer::MessageHeader::header_size(),
-                          serialized_message.size() -
-                              MessageFramer::MessageHeader::header_size())),
-                      Return(serialized_message.size() -
-                             MessageFramer::MessageHeader::header_size())))
-      .RetiresOnSaturation();
-  EXPECT_CALL(*delegate_, OnMessage(EqualsProto(message)));
-  // Async result in order to discontinue the read loop.
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
-      .WillOnce(Return(net::ERR_IO_PENDING));
-  transport_->Start();
-}
-
-TEST_F(CastTransportTest, TestPartialReadSync) {
-  InSequence s;
-
-  CastMessage message = CreateCastMessage();
-  std::string serialized_message;
-  EXPECT_TRUE(MessageFramer::Serialize(message, &serialized_message));
-
-  EXPECT_CALL(*delegate_, Start());
-
-  // Read bytes [0, 3].
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
-      .WillOnce(DoAll(FillBufferFromString<0>(serialized_message),
-                      Return(MessageFramer::MessageHeader::header_size())))
-      .RetiresOnSaturation();
-  // Read bytes [4, n-1].
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(),
-                   serialized_message.size() -
-                       MessageFramer::MessageHeader::header_size(),
-                   _))
-      .WillOnce(DoAll(FillBufferFromString<0>(serialized_message.substr(
-                          MessageFramer::MessageHeader::header_size(),
-                          serialized_message.size() -
-                              MessageFramer::MessageHeader::header_size() - 1)),
-                      Return(serialized_message.size() -
-                             MessageFramer::MessageHeader::header_size() - 1)))
-      .RetiresOnSaturation();
-  // Read final byte.
-  EXPECT_CALL(mock_socket_, Read(NotNull(), 1, _))
-      .WillOnce(DoAll(FillBufferFromString<0>(serialized_message.substr(
-                          serialized_message.size() - 1, 1)),
-                      Return(1)))
-      .RetiresOnSaturation();
-  EXPECT_CALL(*delegate_, OnMessage(EqualsProto(message)));
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
-      .WillOnce(Return(net::ERR_IO_PENDING));
-  transport_->Start();
-}
-
-TEST_F(CastTransportTest, TestReadErrorInHeaderSync) {
-  InSequence s;
-  CastMessage message = CreateCastMessage();
-  std::string serialized_message;
-  EXPECT_TRUE(MessageFramer::Serialize(message, &serialized_message));
-
-  EXPECT_CALL(*delegate_, Start());
-
-  // Read bytes [0, 3].
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
-      .WillOnce(DoAll(FillBufferFromString<0>(serialized_message),
-                      Return(net::ERR_CONNECTION_RESET)))
-      .RetiresOnSaturation();
-  EXPECT_CALL(*delegate_, OnError(ChannelError::CAST_SOCKET_ERROR));
-  transport_->Start();
-}
-
-TEST_F(CastTransportTest, TestReadErrorInBodySync) {
-  CastMessage message = CreateCastMessage();
-  std::string serialized_message;
-  EXPECT_TRUE(MessageFramer::Serialize(message, &serialized_message));
-
-  EXPECT_CALL(*delegate_, Start());
-
-  // Read bytes [0, 3].
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
-      .WillOnce(DoAll(FillBufferFromString<0>(serialized_message),
-                      Return(MessageFramer::MessageHeader::header_size())))
-      .RetiresOnSaturation();
-  // Read bytes [4, n-1].
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(),
-                   serialized_message.size() -
-                       MessageFramer::MessageHeader::header_size(),
-                   _))
-      .WillOnce(DoAll(FillBufferFromString<0>(serialized_message.substr(
-                          MessageFramer::MessageHeader::header_size(),
-                          serialized_message.size() -
-                              MessageFramer::MessageHeader::header_size() - 1)),
-                      Return(net::ERR_CONNECTION_RESET)))
-      .RetiresOnSaturation();
-  EXPECT_CALL(*delegate_, OnError(ChannelError::CAST_SOCKET_ERROR));
-  transport_->Start();
-  EXPECT_EQ(ChannelEvent::SOCKET_READ,
-            logger_->GetLastError(kChannelId).channel_event);
-  EXPECT_EQ(net::ERR_CONNECTION_RESET,
-            logger_->GetLastError(kChannelId).net_return_value);
-}
-
-TEST_F(CastTransportTest, TestReadCorruptedMessageSync) {
-  InSequence s;
-  CastMessage message = CreateCastMessage();
-  std::string serialized_message;
-  EXPECT_TRUE(MessageFramer::Serialize(message, &serialized_message));
-
-  // Corrupt the serialized message body(set it to X's).
-  for (size_t i = MessageFramer::MessageHeader::header_size();
-       i < serialized_message.size(); ++i) {
-    serialized_message[i] = 'x';
-  }
-
-  EXPECT_CALL(*delegate_, Start());
-
-  // Read bytes [0, 3].
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(), MessageFramer::MessageHeader::header_size(), _))
-      .WillOnce(DoAll(FillBufferFromString<0>(serialized_message),
-                      Return(MessageFramer::MessageHeader::header_size())))
-      .RetiresOnSaturation();
-  // Read bytes [4, n].
-  EXPECT_CALL(mock_socket_,
-              Read(NotNull(),
-                   serialized_message.size() -
-                       MessageFramer::MessageHeader::header_size(),
-                   _))
-      .WillOnce(DoAll(FillBufferFromString<0>(serialized_message.substr(
-                          MessageFramer::MessageHeader::header_size(),
-                          serialized_message.size() -
-                              MessageFramer::MessageHeader::header_size() - 1)),
-                      Return(serialized_message.size() -
-                             MessageFramer::MessageHeader::header_size())))
-      .RetiresOnSaturation();
-  EXPECT_CALL(*delegate_, OnError(ChannelError::INVALID_MESSAGE));
-  transport_->Start();
-}
 }  // namespace cast_channel
diff --git a/components/cast_channel/keep_alive_delegate.cc b/components/cast_channel/keep_alive_delegate.cc
index 623b4ad..95faad76 100644
--- a/components/cast_channel/keep_alive_delegate.cc
+++ b/components/cast_channel/keep_alive_delegate.cc
@@ -87,33 +87,9 @@
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DVLOG(2) << "Sending " << CastMessageTypeToString(message_type);
 
-  net::NetworkTrafficAnnotationTag traffic_annotation =
-      net::DefineNetworkTrafficAnnotation("cast_keep_alive_delegate", R"(
-        semantics {
-          sender: "Cast Socket Keep Alive Delegate"
-          description:
-            "A ping/pong message sent periodically to a Cast device to keep "
-            "the connection alive."
-          trigger:
-            "Periodically while a connection to a Cast device is established."
-          data:
-            "A protobuf message representing a ping/pong message. No user data."
-          destination: OTHER
-          destination_other:
-            "Data will be sent to a Cast device in local network."
-        }
-        policy {
-          cookies_allowed: NO
-          setting:
-            "This request cannot be disabled, but it would not be sent if user "
-            "does not connect to a Cast device."
-          policy_exception_justification: "Not implemented."
-        })");
   socket_->transport()->SendMessage(
-      message,
-      base::Bind(&KeepAliveDelegate::SendKeepAliveMessageComplete,
-                 base::Unretained(this), message_type),
-      traffic_annotation);
+      message, base::Bind(&KeepAliveDelegate::SendKeepAliveMessageComplete,
+                          base::Unretained(this), message_type));
 }
 
 void KeepAliveDelegate::SendKeepAliveMessageComplete(
diff --git a/components/cast_channel/keep_alive_delegate_unittest.cc b/components/cast_channel/keep_alive_delegate_unittest.cc
index d6f1ca5..7fead85 100644
--- a/components/cast_channel/keep_alive_delegate_unittest.cc
+++ b/components/cast_channel/keep_alive_delegate_unittest.cc
@@ -116,7 +116,7 @@
 
 TEST_F(KeepAliveDelegateTest, TestPing) {
   EXPECT_CALL(*socket_.mock_transport(),
-              SendMessage(EqualsProto(CreateKeepAlivePingMessage()), _, _))
+              SendMessage(EqualsProto(CreateKeepAlivePingMessage()), _))
       .WillOnce(PostCompletionCallbackTask<1>(net::OK));
   EXPECT_CALL(*inner_delegate_, Start());
   EXPECT_CALL(*ping_timer_, ResetTriggered()).Times(2);
@@ -134,7 +134,7 @@
 
 TEST_F(KeepAliveDelegateTest, TestPingFailed) {
   EXPECT_CALL(*socket_.mock_transport(),
-              SendMessage(EqualsProto(CreateKeepAlivePingMessage()), _, _))
+              SendMessage(EqualsProto(CreateKeepAlivePingMessage()), _))
       .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET));
   EXPECT_CALL(*inner_delegate_, Start());
   EXPECT_CALL(*inner_delegate_, OnError(ChannelError::CAST_SOCKET_ERROR));
@@ -154,7 +154,7 @@
 
 TEST_F(KeepAliveDelegateTest, TestPingAndLivenessTimeout) {
   EXPECT_CALL(*socket_.mock_transport(),
-              SendMessage(EqualsProto(CreateKeepAlivePingMessage()), _, _))
+              SendMessage(EqualsProto(CreateKeepAlivePingMessage()), _))
       .WillOnce(PostCompletionCallbackTask<1>(net::OK));
   EXPECT_CALL(*inner_delegate_, OnError(ChannelError::PING_TIMEOUT));
   EXPECT_CALL(*inner_delegate_, Start());
@@ -245,7 +245,7 @@
   keep_alive_->Start();
 
   EXPECT_CALL(*socket_.mock_transport(),
-              SendMessage(EqualsProto(CreateKeepAlivePingMessage()), _, _))
+              SendMessage(EqualsProto(CreateKeepAlivePingMessage()), _))
       .WillOnce(PostCompletionCallbackTask<1>(net::OK));
   // Forward 1s, at time 1, fire ping timer.
   mock_time_task_runner->FastForwardBy(
diff --git a/components/cast_channel/mojo_data_pump.cc b/components/cast_channel/mojo_data_pump.cc
new file mode 100644
index 0000000..6b705af
--- /dev/null
+++ b/components/cast_channel/mojo_data_pump.cc
@@ -0,0 +1,114 @@
+// 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/cast_channel/mojo_data_pump.h"
+
+#include <utility>
+
+#include "base/memory/ptr_util.h"
+#include "net/base/completion_callback.h"
+#include "net/base/io_buffer.h"
+#include "net/base/net_errors.h"
+
+namespace cast_channel {
+
+MojoDataPump::MojoDataPump(mojo::ScopedDataPipeConsumerHandle receive_stream,
+                           mojo::ScopedDataPipeProducerHandle send_stream)
+    : receive_stream_(std::move(receive_stream)),
+      receive_stream_watcher_(FROM_HERE,
+                              mojo::SimpleWatcher::ArmingPolicy::MANUAL),
+      send_stream_(std::move(send_stream)),
+      send_stream_watcher_(FROM_HERE,
+                           mojo::SimpleWatcher::ArmingPolicy::MANUAL) {
+  DCHECK(receive_stream_.is_valid());
+  DCHECK(send_stream_.is_valid());
+  receive_stream_watcher_.Watch(
+      receive_stream_.get(),
+      MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
+      MOJO_TRIGGER_CONDITION_SIGNALS_SATISFIED,
+      base::BindRepeating(&MojoDataPump::ReceiveMore, base::Unretained(this)));
+  send_stream_watcher_.Watch(
+      send_stream_.get(),
+      MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
+      MOJO_TRIGGER_CONDITION_SIGNALS_SATISFIED,
+      base::BindRepeating(&MojoDataPump::SendMore, base::Unretained(this)));
+}
+
+MojoDataPump::~MojoDataPump() {}
+
+void MojoDataPump::Read(net::IOBuffer* io_buffer,
+                        int count,
+                        net::CompletionOnceCallback callback) {
+  DCHECK(callback);
+  DCHECK(!read_callback_);
+
+  if (count <= 0) {
+    std::move(callback).Run(net::ERR_INVALID_ARGUMENT);
+    return;
+  }
+
+  pending_read_buffer_ = io_buffer;
+  read_size_ = count;
+  read_callback_ = std::move(callback);
+  receive_stream_watcher_.ArmOrNotify();
+}
+
+void MojoDataPump::Write(net::IOBuffer* io_buffer,
+                         int io_buffer_size,
+                         net::CompletionOnceCallback callback) {
+  DCHECK(callback);
+  DCHECK(!write_callback_);
+
+  write_callback_ = std::move(callback);
+  pending_write_buffer_ = io_buffer;
+  pending_write_buffer_size_ = io_buffer_size;
+  send_stream_watcher_.ArmOrNotify();
+}
+
+void MojoDataPump::ReceiveMore(MojoResult result,
+                               const mojo::HandleSignalsState& state) {
+  DCHECK(read_callback_);
+  DCHECK_NE(0u, read_size_);
+
+  uint32_t num_bytes = read_size_;
+
+  if (result == MOJO_RESULT_OK) {
+    result = receive_stream_->ReadData(pending_read_buffer_->data(), &num_bytes,
+                                       MOJO_READ_DATA_FLAG_NONE);
+  }
+  if (result == MOJO_RESULT_SHOULD_WAIT) {
+    receive_stream_watcher_.ArmOrNotify();
+    return;
+  }
+  read_size_ = 0;
+  if (result != MOJO_RESULT_OK) {
+    std::move(read_callback_).Run(net::ERR_FAILED);
+    return;
+  }
+  std::move(read_callback_).Run(num_bytes);
+}
+
+void MojoDataPump::SendMore(MojoResult result,
+                            const mojo::HandleSignalsState& state) {
+  DCHECK(write_callback_);
+
+  uint32_t num_bytes = pending_write_buffer_size_;
+  if (result == MOJO_RESULT_OK) {
+    result = send_stream_->WriteData(pending_write_buffer_->data(), &num_bytes,
+                                     MOJO_WRITE_DATA_FLAG_NONE);
+  }
+  if (result == MOJO_RESULT_SHOULD_WAIT) {
+    send_stream_watcher_.ArmOrNotify();
+    return;
+  }
+  pending_write_buffer_ = nullptr;
+  pending_write_buffer_size_ = 0;
+  if (result != MOJO_RESULT_OK) {
+    std::move(write_callback_).Run(net::ERR_FAILED);
+    return;
+  }
+  std::move(write_callback_).Run(num_bytes);
+}
+
+}  // namespace cast_channel
diff --git a/components/cast_channel/mojo_data_pump.h b/components/cast_channel/mojo_data_pump.h
new file mode 100644
index 0000000..97df8f1
--- /dev/null
+++ b/components/cast_channel/mojo_data_pump.h
@@ -0,0 +1,67 @@
+// 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_CAST_CHANNEL_MOJO_DATA_PUMP_H_
+#define COMPONENTS_CAST_CHANNEL_MOJO_DATA_PUMP_H_
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "components/cast_channel/cast_transport.h"
+#include "mojo/public/cpp/system/data_pipe.h"
+#include "mojo/public/cpp/system/simple_watcher.h"
+#include "net/base/completion_once_callback.h"
+
+namespace net {
+class IOBuffer;
+};  // namespace net
+
+namespace cast_channel {
+
+// Helper class to read from a mojo consumer handle and write to mojo producer
+// handle.
+class MojoDataPump : public CastTransportImpl::Channel {
+ public:
+  MojoDataPump(mojo::ScopedDataPipeConsumerHandle receive_stream,
+               mojo::ScopedDataPipeProducerHandle send_stream);
+
+  ~MojoDataPump() override;
+
+  // CastTransportImpl::Channel implementation:
+  void Read(net::IOBuffer* io_buffer,
+            int count,
+            net::CompletionOnceCallback callback) override;
+  void Write(net::IOBuffer* io_buffer,
+             int io_buffer_size,
+             net::CompletionOnceCallback callback) override;
+
+  // Returns whether a read is pending.
+  bool HasPendingRead() const { return !read_callback_.is_null(); }
+
+  // Returns whether a write is pending.
+  bool HasPendingWrite() const { return !write_callback_.is_null(); }
+
+ private:
+  void OnReadComplete(int result);
+  void StartWatching();
+  void ReceiveMore(MojoResult result, const mojo::HandleSignalsState& state);
+  void SendMore(MojoResult result, const mojo::HandleSignalsState& state);
+
+  mojo::ScopedDataPipeConsumerHandle receive_stream_;
+  mojo::SimpleWatcher receive_stream_watcher_;
+  mojo::ScopedDataPipeProducerHandle send_stream_;
+  mojo::SimpleWatcher send_stream_watcher_;
+
+  net::CompletionOnceCallback read_callback_;
+  net::CompletionOnceCallback write_callback_;
+  scoped_refptr<net::IOBuffer> pending_read_buffer_;
+  scoped_refptr<net::IOBuffer> pending_write_buffer_;
+  int pending_write_buffer_size_ = 0;
+  uint32_t read_size_ = 0;
+
+  DISALLOW_COPY_AND_ASSIGN(MojoDataPump);
+};
+
+}  // namespace cast_channel
+
+#endif  // COMPONENTS_CAST_CHANNEL_MOJO_DATA_PUMP_H_
diff --git a/components/cronet/cronet_url_request_context.cc b/components/cronet/cronet_url_request_context.cc
index e4ae03c..b68bdb5 100644
--- a/components/cronet/cronet_url_request_context.cc
+++ b/components/cronet/cronet_url_request_context.cc
@@ -36,6 +36,7 @@
 #include "components/cronet/histogram_manager.h"
 #include "components/cronet/host_cache_persistence_manager.h"
 #include "components/cronet/url_request_context_config.h"
+#include "net/base/ip_address.h"
 #include "net/base/load_flags.h"
 #include "net/base/logging_network_change_observer.h"
 #include "net/base/net_errors.h"
@@ -47,6 +48,7 @@
 #include "net/http/http_auth_handler_factory.h"
 #include "net/log/file_net_log_observer.h"
 #include "net/log/net_log_util.h"
+#include "net/net_buildflags.h"
 #include "net/nqe/network_quality_estimator_params.h"
 #include "net/proxy_resolution/proxy_resolution_service.h"
 #include "net/ssl/channel_id_service.h"
@@ -56,6 +58,11 @@
 #include "net/url_request/url_request_context_getter.h"
 #include "net/url_request/url_request_interceptor.h"
 
+#if BUILDFLAG(ENABLE_REPORTING)
+#include "net/network_error_logging/network_error_logging_service.h"
+#include "net/reporting/reporting_service.h"
+#endif  // BUILDFLAG(ENABLE_REPORTING)
+
 namespace {
 
 // This class wraps a NetLog that also contains network change events.
@@ -414,6 +421,22 @@
             base::Unretained(this)));
   }
 
+#if BUILDFLAG(ENABLE_REPORTING)
+  if (context_->reporting_service()) {
+    for (const auto& preloaded_header : config->preloaded_report_to_headers) {
+      context_->reporting_service()->ProcessHeader(
+          preloaded_header.origin.GetURL(), preloaded_header.value);
+    }
+  }
+
+  if (context_->network_error_logging_service()) {
+    for (const auto& preloaded_header : config->preloaded_nel_headers) {
+      context_->network_error_logging_service()->OnHeader(
+          preloaded_header.origin, net::IPAddress(), preloaded_header.value);
+    }
+  }
+#endif  // BUILDFLAG(ENABLE_REPORTING)
+
   while (!tasks_waiting_for_context_.empty()) {
     std::move(tasks_waiting_for_context_.front()).Run();
     tasks_waiting_for_context_.pop();
diff --git a/components/cronet/url_request_context_config.cc b/components/cronet/url_request_context_config.cc
index 41d94c99..6297aa4 100644
--- a/components/cronet/url_request_context_config.cc
+++ b/components/cronet/url_request_context_config.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/sequenced_task_runner.h"
 #include "base/strings/string_number_conversions.h"
@@ -124,6 +125,15 @@
 const char kNetworkErrorLoggingFieldTrialName[] = "NetworkErrorLogging";
 // Name of boolean to enable Reporting API.
 const char kNetworkErrorLoggingEnable[] = "enable";
+// Name of list of preloaded "Report-To" headers.
+const char kNetworkErrorLoggingPreloadedReportToHeaders[] =
+    "preloaded_report_to_headers";
+// Name of list of preloaded "NEL" headers.
+const char kNetworkErrorLoggingPreloadedNELHeaders[] = "preloaded_nel_headers";
+// Name of key (for above two lists) for header origin.
+const char kNetworkErrorLoggingOrigin[] = "origin";
+// Name of key (for above two lists) for header value.
+const char kNetworkErrorLoggingValue[] = "value";
 
 // Disable IPv6 when on WiFi. This is a workaround for a known issue on certain
 // Android phones, and should not be necessary when not on one of those devices.
@@ -140,6 +150,49 @@
 const bool kDefaultQuicGoAwaySessionsOnIpChange = false;
 #endif
 
+// Serializes a base::Value into a string that can be used as the value of
+// JFV-encoded HTTP header [1].  If |value| is a list, we remove the outermost
+// [] delimiters from the result.
+//
+// [1] https://tools.ietf.org/html/draft-reschke-http-jfv
+std::string SerializeJFVHeader(const base::Value& value) {
+  std::string result;
+  if (!base::JSONWriter::Write(value, &result))
+    return std::string();
+  if (value.is_list()) {
+    DCHECK(result.size() >= 2);
+    return result.substr(1, result.size() - 2);
+  }
+  return result;
+}
+
+std::vector<URLRequestContextConfig::PreloadedNelAndReportingHeader>
+ParseNetworkErrorLoggingHeaders(
+    const base::Value::ListStorage& preloaded_headers_config) {
+  std::vector<URLRequestContextConfig::PreloadedNelAndReportingHeader> result;
+  for (const auto& preloaded_header_config : preloaded_headers_config) {
+    if (!preloaded_header_config.is_dict())
+      continue;
+
+    auto* origin_config = preloaded_header_config.FindKeyOfType(
+        kNetworkErrorLoggingOrigin, base::Value::Type::STRING);
+    if (!origin_config)
+      continue;
+    GURL origin_url(origin_config->GetString());
+    if (!origin_url.is_valid())
+      continue;
+    auto origin = url::Origin::Create(origin_url);
+
+    auto* value = preloaded_header_config.FindKey(kNetworkErrorLoggingValue);
+    if (!value)
+      continue;
+
+    result.push_back(URLRequestContextConfig::PreloadedNelAndReportingHeader(
+        origin, SerializeJFVHeader(*value)));
+  }
+  return result;
+}
+
 }  // namespace
 
 URLRequestContextConfig::QuicHint::QuicHint(const std::string& host,
@@ -158,6 +211,13 @@
 
 URLRequestContextConfig::Pkp::~Pkp() {}
 
+URLRequestContextConfig::PreloadedNelAndReportingHeader::
+    PreloadedNelAndReportingHeader(const url::Origin& origin, std::string value)
+    : origin(origin), value(std::move(value)) {}
+
+URLRequestContextConfig::PreloadedNelAndReportingHeader::
+    ~PreloadedNelAndReportingHeader() = default;
+
 URLRequestContextConfig::URLRequestContextConfig(
     bool enable_quic,
     const std::string& quic_user_agent_id,
@@ -464,6 +524,21 @@
         continue;
       }
       nel_args->GetBoolean(kNetworkErrorLoggingEnable, &nel_enable);
+
+      const auto* preloaded_report_to_headers_config =
+          nel_args->FindKeyOfType(kNetworkErrorLoggingPreloadedReportToHeaders,
+                                  base::Value::Type::LIST);
+      if (preloaded_report_to_headers_config) {
+        preloaded_report_to_headers = ParseNetworkErrorLoggingHeaders(
+            preloaded_report_to_headers_config->GetList());
+      }
+
+      const auto* preloaded_nel_headers_config = nel_args->FindKeyOfType(
+          kNetworkErrorLoggingPreloadedNELHeaders, base::Value::Type::LIST);
+      if (preloaded_nel_headers_config) {
+        preloaded_nel_headers = ParseNetworkErrorLoggingHeaders(
+            preloaded_nel_headers_config->GetList());
+      }
     } else if (it.key() == kDisableIPv6OnWifi) {
       if (!it.value().GetAsBoolean(&disable_ipv6_on_wifi)) {
         LOG(ERROR) << "\"" << it.key() << "\" config params \"" << it.value()
diff --git a/components/cronet/url_request_context_config.h b/components/cronet/url_request_context_config.h
index a09a36b..a0bd370 100644
--- a/components/cronet/url_request_context_config.h
+++ b/components/cronet/url_request_context_config.h
@@ -79,6 +79,21 @@
     DISALLOW_COPY_AND_ASSIGN(Pkp);
   };
 
+  // Simulated headers, used to preconfigure the Reporting API and Network Error
+  // Logging before receiving those actual configuration headers from the
+  // origins.
+  struct PreloadedNelAndReportingHeader {
+    PreloadedNelAndReportingHeader(const url::Origin& origin,
+                                   std::string value);
+    ~PreloadedNelAndReportingHeader();
+
+    // Origin that is "sending" this header.
+    const url::Origin origin;
+
+    // Value of the header that is "sent".
+    const std::string value;
+  };
+
   URLRequestContextConfig(
       // Enable QUIC.
       bool enable_quic,
@@ -169,6 +184,12 @@
   base::Optional<net::EffectiveConnectionType>
       nqe_forced_effective_connection_type;
 
+  // Preloaded Report-To headers, to preconfigure the Reporting API.
+  std::vector<PreloadedNelAndReportingHeader> preloaded_report_to_headers;
+
+  // Preloaded NEL headers, to preconfigure Network Error Logging.
+  std::vector<PreloadedNelAndReportingHeader> preloaded_nel_headers;
+
  private:
   // Parses experimental options and makes appropriate changes to settings in
   // the URLRequestContextConfig and URLRequestContextBuilder.
diff --git a/components/cronet/url_request_context_config_unittest.cc b/components/cronet/url_request_context_config_unittest.cc
index 96752a90..8d80155 100644
--- a/components/cronet/url_request_context_config_unittest.cc
+++ b/components/cronet/url_request_context_config_unittest.cc
@@ -7,7 +7,9 @@
 #include <memory>
 
 #include "base/json/json_writer.h"
+#include "base/strings/string_piece.h"
 #include "base/test/scoped_task_environment.h"
+#include "base/test/values_test_util.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "net/cert/cert_verifier.h"
@@ -21,8 +23,37 @@
 #include "net/url_request/url_request_context_builder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+#if BUILDFLAG(ENABLE_REPORTING)
+#include "net/network_error_logging/network_error_logging_service.h"
+#include "net/reporting/reporting_service.h"
+#endif  // BUILDFLAG(ENABLE_REPORTING)
+
 namespace cronet {
 
+namespace {
+
+base::Value ParseJson(base::StringPiece json) {
+  return std::move(*base::test::ParseJson(json));
+}
+
+std::string WrapJsonHeader(base::StringPiece value) {
+  std::string result;
+  result.reserve(value.size() + 2);
+  result.push_back('[');
+  value.AppendToString(&result);
+  result.push_back(']');
+  return result;
+}
+
+// Returns whether two JSON-encoded headers contain the same content, ignoring
+// irrelevant encoding issues like whitespace and map element ordering.
+bool JsonHeaderEquals(base::StringPiece expected, base::StringPiece actual) {
+  return ParseJson(WrapJsonHeader(expected)) ==
+         ParseJson(WrapJsonHeader(actual));
+}
+
+}  // namespace
+
 TEST(URLRequestContextConfigTest, TestExperimentalOptionParsing) {
   base::test::ScopedTaskEnvironment scoped_task_environment_(
       base::test::ScopedTaskEnvironment::MainThreadType::IO);
@@ -39,6 +70,66 @@
   options.SetPath({"QUIC", "connection_options"}, base::Value("TIME,TBBR,REJ"));
   options.SetPath({"AsyncDNS", "enable"}, base::Value(true));
   options.SetPath({"NetworkErrorLogging", "enable"}, base::Value(true));
+  options.SetPath({"NetworkErrorLogging", "preloaded_report_to_headers"},
+                  ParseJson(R"json(
+                  [
+                    {
+                      "origin": "https://test-origin/",
+                      "value": {
+                        "group": "test-group",
+                        "max_age": 86400,
+                        "endpoints": [
+                          {"url": "https://test-endpoint/"},
+                        ],
+                      },
+                    },
+                    {
+                      "origin": "https://test-origin-2/",
+                      "value": [
+                        {
+                          "group": "test-group-2",
+                          "max_age": 86400,
+                          "endpoints": [
+                            {"url": "https://test-endpoint-2/"},
+                          ],
+                        },
+                        {
+                          "group": "test-group-3",
+                          "max_age": 86400,
+                          "endpoints": [
+                            {"url": "https://test-endpoint-3/"},
+                          ],
+                        },
+                      ],
+                    },
+                    {
+                      "origin": "https://value-is-missing/",
+                    },
+                    {
+                      "value": "origin is missing",
+                    },
+                    {
+                      "origin": 123,
+                      "value": "origin is not a string",
+                    },
+                    {
+                      "origin": "this is not a URL",
+                      "value": "origin not a URL",
+                    },
+                  ]
+                  )json"));
+  options.SetPath({"NetworkErrorLogging", "preloaded_nel_headers"},
+                  ParseJson(R"json(
+                  [
+                    {
+                      "origin": "https://test-origin/",
+                      "value": {
+                        "report_to": "test-group",
+                        "max_age": 86400,
+                      },
+                    },
+                  ]
+                  )json"));
   options.SetPath({"UnknownOption", "foo"}, base::Value(true));
   options.SetPath({"HostResolverRules", "host_resolver_rules"},
                   base::Value("MAP * 127.0.0.1"));
@@ -126,6 +217,54 @@
   EXPECT_TRUE(context->network_error_logging_service());
 #endif  // BUILDFLAG(ENABLE_REPORTING)
 
+  ASSERT_EQ(2u, config.preloaded_report_to_headers.size());
+  EXPECT_EQ(url::Origin::CreateFromNormalizedTuple("https", "test-origin", 443),
+            config.preloaded_report_to_headers[0].origin);
+  EXPECT_TRUE(JsonHeaderEquals(  //
+      R"json(
+      {
+        "group": "test-group",
+        "max_age": 86400,
+        "endpoints": [
+          {"url": "https://test-endpoint/"},
+        ],
+      }
+      )json",
+      config.preloaded_report_to_headers[0].value));
+  EXPECT_EQ(
+      url::Origin::CreateFromNormalizedTuple("https", "test-origin-2", 443),
+      config.preloaded_report_to_headers[1].origin);
+  EXPECT_TRUE(JsonHeaderEquals(  //
+      R"json(
+      {
+        "group": "test-group-2",
+        "max_age": 86400,
+        "endpoints": [
+          {"url": "https://test-endpoint-2/"},
+        ],
+      },
+      {
+        "group": "test-group-3",
+        "max_age": 86400,
+        "endpoints": [
+          {"url": "https://test-endpoint-3/"},
+        ],
+      }
+      )json",
+      config.preloaded_report_to_headers[1].value));
+
+  ASSERT_EQ(1u, config.preloaded_nel_headers.size());
+  EXPECT_EQ(url::Origin::CreateFromNormalizedTuple("https", "test-origin", 443),
+            config.preloaded_nel_headers[0].origin);
+  EXPECT_TRUE(JsonHeaderEquals(  //
+      R"json(
+      {
+        "report_to": "test-group",
+        "max_age": 86400,
+      }
+      )json",
+      config.preloaded_nel_headers[0].value));
+
   // Check IPv6 is disabled when on wifi.
   EXPECT_TRUE(context->host_resolver()->GetNoIPv6OnWifi());
 
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol.cc
index 460aceb4..7298f1a 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol.cc
@@ -8,6 +8,7 @@
 
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/time/time.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_stats.h"
@@ -17,6 +18,7 @@
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_server.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_type_info.h"
+#include "components/data_reduction_proxy/proto/client_config.pb.h"
 #include "net/base/load_flags.h"
 #include "net/base/proxy_server.h"
 #include "net/http/http_response_headers.h"
@@ -69,6 +71,13 @@
       request.net_log());
 }
 
+void ReportResponseProxyServerStatusHistogram(
+    DataReductionProxyBypassProtocol::ResponseProxyServerStatus status) {
+  UMA_HISTOGRAM_ENUMERATION(
+      "DataReductionProxy.ResponseProxyServerStatus", status,
+      DataReductionProxyBypassProtocol::RESPONSE_PROXY_SERVER_STATUS_MAX);
+}
+
 }  // namespace
 
 DataReductionProxyBypassProtocol::DataReductionProxyBypassProtocol(
@@ -92,19 +101,56 @@
   const net::HttpResponseHeaders* response_headers =
       request->response_info().headers.get();
   bool retry;
+
+  std::vector<DataReductionProxyServer> placeholder_proxy_servers;
+  base::Optional<DataReductionProxyTypeInfo> proxy_type_info =
+      config_->FindConfiguredDataReductionProxy(request->proxy_server());
+
   if (!response_headers) {
     retry = HandleInvalidResponseHeadersCase(
-        *request, data_reduction_proxy_info, &bypass_type);
+        *request, proxy_type_info, data_reduction_proxy_info, &bypass_type);
   } else {
+    if (!proxy_type_info) {
+      if (!request->proxy_server().is_valid() ||
+          request->proxy_server().is_direct() ||
+          request->proxy_server().host_port_pair().IsEmpty()) {
+        ReportResponseProxyServerStatusHistogram(
+            RESPONSE_PROXY_SERVER_STATUS_EMPTY);
+        return false;
+      }
+
+      if (!HasDataReductionProxyViaHeader(*response_headers, nullptr)) {
+        ReportResponseProxyServerStatusHistogram(
+            RESPONSE_PROXY_SERVER_STATUS_NON_DRP_NO_VIA);
+        return false;
+      }
+
+      ReportResponseProxyServerStatusHistogram(
+          RESPONSE_PROXY_SERVER_STATUS_NON_DRP_WITH_VIA);
+
+      // If the |proxy_server| doesn't match any of the currently configured
+      // Data Reduction Proxies, but it still has the Data Reduction Proxy via
+      // header, then apply the bypass logic regardless.
+      // TODO(sclittle): Remove this workaround once http://crbug.com/876776 is
+      // fixed.
+      placeholder_proxy_servers.push_back(DataReductionProxyServer(
+          request->proxy_server(), ProxyServer_ProxyType_CORE));
+      proxy_type_info.emplace(DataReductionProxyTypeInfo(
+          placeholder_proxy_servers, 0U /* proxy_index */));
+    } else {
+      ReportResponseProxyServerStatusHistogram(
+          RESPONSE_PROXY_SERVER_STATUS_DRP);
+    }
+
+    DCHECK(proxy_type_info);
     retry = HandleValidResponseHeadersCase(
-        *request, proxy_bypass_type, data_reduction_proxy_info, &bypass_type);
+        *request, *proxy_type_info, proxy_bypass_type,
+        data_reduction_proxy_info, &bypass_type);
   }
   if (!retry)
     return false;
 
   if (data_reduction_proxy_info->mark_proxies_as_bad) {
-    base::Optional<DataReductionProxyTypeInfo> proxy_type_info =
-        config_->FindConfiguredDataReductionProxy(request->proxy_server());
     DCHECK(proxy_type_info);
     MarkProxiesAsBad(*request, *data_reduction_proxy_info, *proxy_type_info);
   } else {
@@ -118,6 +164,8 @@
 
 bool DataReductionProxyBypassProtocol::HandleInvalidResponseHeadersCase(
     const net::URLRequest& request,
+    const base::Optional<DataReductionProxyTypeInfo>&
+        data_reduction_proxy_type_info,
     DataReductionProxyInfo* data_reduction_proxy_info,
     DataReductionProxyBypassType* bypass_type) const {
   DCHECK(thread_checker_.CalledOnValidThread());
@@ -130,7 +178,7 @@
     return false;
   }
 
-  if (!config_->FindConfiguredDataReductionProxy(request.proxy_server()))
+  if (!data_reduction_proxy_type_info)
     return false;
 
   DCHECK(request.url().SchemeIs(url::kHttpScheme));
@@ -173,6 +221,7 @@
 
 bool DataReductionProxyBypassProtocol::HandleValidResponseHeadersCase(
     const net::URLRequest& request,
+    const DataReductionProxyTypeInfo& data_reduction_proxy_type_info,
     DataReductionProxyBypassType* proxy_bypass_type,
     DataReductionProxyInfo* data_reduction_proxy_info,
     DataReductionProxyBypassType* bypass_type) const {
@@ -185,15 +234,10 @@
 
   DCHECK(response_headers);
 
-  base::Optional<DataReductionProxyTypeInfo> data_reduction_proxy_type_info =
-      config_->FindConfiguredDataReductionProxy(request.proxy_server());
-  if (!data_reduction_proxy_type_info)
-    return false;
-
   // At this point, the response is expected to have the data reduction proxy
   // via header, so detect and report cases where the via header is missing.
   DataReductionProxyBypassStats::DetectAndRecordMissingViaHeaderResponseCode(
-      data_reduction_proxy_type_info->proxy_index == 0U, *response_headers);
+      data_reduction_proxy_type_info.proxy_index == 0U, *response_headers);
 
   // GetDataReductionProxyBypassType will only log a net_log event if a bypass
   // command was sent via the data reduction proxy headers.
@@ -207,12 +251,12 @@
 
   DCHECK(request.context());
   DCHECK(request.context()->proxy_resolution_service());
-  DCHECK_GT(data_reduction_proxy_type_info->proxy_servers.size(),
-            data_reduction_proxy_type_info->proxy_index);
+  DCHECK_GT(data_reduction_proxy_type_info.proxy_servers.size(),
+            data_reduction_proxy_type_info.proxy_index);
 
   const net::ProxyServer& proxy_server =
       data_reduction_proxy_type_info
-          ->proxy_servers[data_reduction_proxy_type_info->proxy_index]
+          .proxy_servers[data_reduction_proxy_type_info.proxy_index]
           .proxy_server();
 
   // Only record UMA if the proxy isn't already on the retry list.
@@ -220,7 +264,7 @@
           request.context()->proxy_resolution_service()->proxy_retry_info(),
           proxy_server, nullptr)) {
     DataReductionProxyBypassStats::RecordDataReductionProxyBypassInfo(
-        data_reduction_proxy_type_info->proxy_index == 0U,
+        data_reduction_proxy_type_info.proxy_index == 0U,
         data_reduction_proxy_info->bypass_all, proxy_server, *bypass_type);
   }
   return true;
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol.h
index af3bd0b..9491cb8 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_DATA_REDUCTION_PROXY_BYPASS_PROTOCOL_H_
 
 #include "base/macros.h"
+#include "base/optional.h"
 #include "base/threading/thread_checker.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h"
 
@@ -16,12 +17,25 @@
 namespace data_reduction_proxy {
 
 class DataReductionProxyConfig;
+struct DataReductionProxyTypeInfo;
 
 // Class responsible for determining when a response should or should not cause
 // the data reduction proxy to be bypassed, and to what degree. Owned by the
 // DataReductionProxyInterceptor.
 class DataReductionProxyBypassProtocol {
  public:
+  // Enum values that can be reported for the
+  // DataReductionProxy.ResponseProxyServerStatus histogram. These values must
+  // be kept in sync with their counterparts in histograms.xml. Visible here for
+  // testing purposes.
+  enum ResponseProxyServerStatus {
+    RESPONSE_PROXY_SERVER_STATUS_EMPTY = 0,
+    RESPONSE_PROXY_SERVER_STATUS_DRP,
+    RESPONSE_PROXY_SERVER_STATUS_NON_DRP_NO_VIA,
+    RESPONSE_PROXY_SERVER_STATUS_NON_DRP_WITH_VIA,
+    RESPONSE_PROXY_SERVER_STATUS_MAX
+  };
+
   // Constructs a DataReductionProxyBypassProtocol object. |config| must be
   // non-NULL and outlive |this|.
   DataReductionProxyBypassProtocol(DataReductionProxyConfig* config);
@@ -46,6 +60,8 @@
   // response headers.
   bool HandleInvalidResponseHeadersCase(
       const net::URLRequest& request,
+      const base::Optional<DataReductionProxyTypeInfo>&
+          data_reduction_proxy_type_info,
       DataReductionProxyInfo* data_reduction_proxy_info,
       DataReductionProxyBypassType* bypass_type) const;
 
@@ -55,6 +71,7 @@
   // non-null response headers.
   bool HandleValidResponseHeadersCase(
       const net::URLRequest& request,
+      const DataReductionProxyTypeInfo& data_reduction_proxy_type_info,
       DataReductionProxyBypassType* proxy_bypass_type,
       DataReductionProxyInfo* data_reduction_proxy_info,
       DataReductionProxyBypassType* bypass_type) const;
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
index 0df9ac6..0d61bf3 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
@@ -9,6 +9,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/containers/span.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
@@ -1092,4 +1093,177 @@
   TestBadProxies(0, -1, "", "");
 }
 
+class DataReductionProxyBypassProtocolEndToEndTest : public testing::Test {
+ public:
+  DataReductionProxyBypassProtocolEndToEndTest() {}
+
+  void ResetDependencies() {
+    drp_test_context_.reset();
+    mock_socket_factory_.reset();
+    storage_.reset();
+
+    context_.reset(new net::TestURLRequestContext(true));
+    storage_.reset(new net::URLRequestContextStorage(context_.get()));
+    mock_socket_factory_.reset(new net::MockClientSocketFactory());
+    context_->set_client_socket_factory(mock_socket_factory_.get());
+    drp_test_context_ =
+        DataReductionProxyTestContext::Builder()
+            .WithMockClientSocketFactory(mock_socket_factory_.get())
+            .WithURLRequestContext(context_.get())
+            .Build();
+  }
+
+  void AttachToContextAndInit() {
+    drp_test_context_->AttachToURLRequestContext(storage_.get());
+    context_->set_proxy_delegate(
+        drp_test_context_->io_data()->proxy_delegate());
+    context_->Init();
+  }
+
+  net::TestURLRequestContext* context() { return context_.get(); }
+  net::URLRequestContextStorage* storage() { return storage_.get(); }
+  net::MockClientSocketFactory* mock_socket_factory() {
+    return mock_socket_factory_.get();
+  }
+  DataReductionProxyTestContext* drp_test_context() {
+    return drp_test_context_.get();
+  }
+
+ private:
+  base::MessageLoopForIO loop_;
+  std::unique_ptr<net::TestURLRequestContext> context_;
+  std::unique_ptr<net::URLRequestContextStorage> storage_;
+  std::unique_ptr<net::MockClientSocketFactory> mock_socket_factory_;
+  std::unique_ptr<DataReductionProxyTestContext> drp_test_context_;
+
+  DISALLOW_COPY_AND_ASSIGN(DataReductionProxyBypassProtocolEndToEndTest);
+};
+
+TEST_F(DataReductionProxyBypassProtocolEndToEndTest,
+       BypassLogicAlwaysAppliesWhenViaHeaderPresent) {
+  const struct {
+    const char* first_response;
+    bool expected_retry;
+    bool expected_bad_proxy;
+    DataReductionProxyBypassType expected_bypass_type;
+  } test_cases[] = {
+      {"HTTP/1.1 200 OK\r\n"
+       "Server: proxy\r\n"
+       "Chrome-Proxy: block=0\r\n"
+       "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n",
+       true, true, BYPASS_EVENT_TYPE_MEDIUM},
+      {"HTTP/1.1 200 OK\r\n"
+       "Server: proxy\r\n"
+       "Chrome-Proxy: bypass=0\r\n"
+       "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n",
+       true, true, BYPASS_EVENT_TYPE_MEDIUM},
+      {"HTTP/1.1 502 Bad Gateway\r\n"
+       "Server: proxy\r\n"
+       "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n",
+       true, true, BYPASS_EVENT_TYPE_STATUS_502_HTTP_BAD_GATEWAY},
+      {"HTTP/1.1 200 OK\r\n"
+       "Server: proxy\r\n"
+       "Chrome-Proxy: block=0\r\n\r\n",
+       false, false, BYPASS_EVENT_TYPE_MAX},
+      {"HTTP/1.1 502 Bad Gateway\r\n"
+       "Server: proxy\r\n\r\n",
+       false, false, BYPASS_EVENT_TYPE_MAX},
+  };
+
+  for (const auto& test : test_cases) {
+    const std::string kPrimary = "https://unrecognized-drp.net:443";
+
+    ResetDependencies();
+    storage()->set_proxy_resolution_service(ProxyResolutionService::CreateFixed(
+        kPrimary + ",direct://", TRAFFIC_ANNOTATION_FOR_TESTS));
+    AttachToContextAndInit();
+
+    // The proxy is an HTTPS proxy, so set up the fake SSL socket data.
+    net::SSLSocketDataProvider ssl_socket(net::ASYNC, net::OK);
+    mock_socket_factory()->AddSSLSocketDataProvider(&ssl_socket);
+
+    MockRead first_reads[] = {MockRead(test.first_response), MockRead(""),
+                              MockRead(net::SYNCHRONOUS, net::OK)};
+    net::StaticSocketDataProvider first_socket(first_reads,
+                                               base::span<MockWrite>());
+    mock_socket_factory()->AddSocketDataProvider(&first_socket);
+
+    MockRead retry_reads[] = {MockRead("HTTP/1.1 200 OK\n\r\n\r"), MockRead(""),
+                              MockRead(net::SYNCHRONOUS, net::OK)};
+    net::StaticSocketDataProvider retry_socket(retry_reads,
+                                               base::span<MockWrite>());
+    if (test.expected_retry)
+      mock_socket_factory()->AddSocketDataProvider(&retry_socket);
+
+    net::TestDelegate delegate;
+    std::unique_ptr<net::URLRequest> url_request(
+        context()->CreateRequest(GURL("http://www.google.com"), net::IDLE,
+                                 &delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
+    url_request->Start();
+    drp_test_context()->RunUntilIdle();
+
+    EXPECT_EQ(test.expected_bypass_type,
+              drp_test_context()->io_data()->bypass_stats()->GetBypassType());
+    // Check the bad proxy list.
+    EXPECT_EQ(test.expected_bad_proxy,
+              base::ContainsKey(
+                  context()->proxy_resolution_service()->proxy_retry_info(),
+                  kPrimary));
+  }
+}
+
+TEST_F(DataReductionProxyBypassProtocolEndToEndTest,
+       ResponseProxyServerStateHistogram) {
+  const struct {
+    const char* proxy_rules;
+    bool enable_data_reduction_proxy;
+    const char* response_headers;
+    // |RESPONSE_PROXY_SERVER_STATUS_MAX| indicates no expected value.
+    DataReductionProxyBypassProtocol::ResponseProxyServerStatus expected_status;
+  } test_cases[] = {
+      {"direct://", false, "HTTP/1.1 200 OK\r\n\r\n",
+       DataReductionProxyBypassProtocol::RESPONSE_PROXY_SERVER_STATUS_EMPTY},
+      {"direct://", true,
+       "HTTP/1.1 200 OK\r\nVia: 1.1 Chrome-Compression-Proxy\r\n\r\n",
+       DataReductionProxyBypassProtocol::RESPONSE_PROXY_SERVER_STATUS_DRP},
+      {"unrecognized-drp.net", false, "HTTP/1.1 200 OK\r\n\r\n",
+       DataReductionProxyBypassProtocol::
+           RESPONSE_PROXY_SERVER_STATUS_NON_DRP_NO_VIA},
+      {"unrecognized-drp.net", false,
+       "HTTP/1.1 200 OK\r\nVia: 1.1 Chrome-Compression-Proxy\r\n\r\n",
+       DataReductionProxyBypassProtocol::
+           RESPONSE_PROXY_SERVER_STATUS_NON_DRP_WITH_VIA},
+  };
+
+  for (const auto& test : test_cases) {
+    ResetDependencies();
+    storage()->set_proxy_resolution_service(
+        net::ProxyResolutionService::CreateFixed(test.proxy_rules,
+                                                 TRAFFIC_ANNOTATION_FOR_TESTS));
+    AttachToContextAndInit();
+    if (test.enable_data_reduction_proxy) {
+      drp_test_context()->DisableWarmupURLFetch();
+      drp_test_context()->EnableDataReductionProxyWithSecureProxyCheckSuccess();
+    }
+    drp_test_context()->config()->test_params()->UseNonSecureProxiesForHttp();
+
+    MockRead reads[] = {MockRead(test.response_headers), MockRead(""),
+                        MockRead(net::SYNCHRONOUS, net::OK)};
+    net::StaticSocketDataProvider socket(reads, base::span<MockWrite>());
+    mock_socket_factory()->AddSocketDataProvider(&socket);
+
+    base::HistogramTester histogram_tester;
+    net::TestDelegate delegate;
+    std::unique_ptr<net::URLRequest> request(
+        context()->CreateRequest(GURL("http://google.com"), net::IDLE,
+                                 &delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
+    request->Start();
+    drp_test_context()->RunUntilIdle();
+
+    histogram_tester.ExpectUniqueSample(
+        "DataReductionProxy.ResponseProxyServerStatus", test.expected_status,
+        1);
+  }
+}
+
 }  // namespace data_reduction_proxy
diff --git a/components/guest_view/browser/guest_view_base.cc b/components/guest_view/browser/guest_view_base.cc
index 7951f7d6..18cd29c 100644
--- a/components/guest_view/browser/guest_view_base.cc
+++ b/components/guest_view/browser/guest_view_base.cc
@@ -683,11 +683,7 @@
 
 bool GuestViewBase::PreHandleGestureEvent(WebContents* source,
                                           const blink::WebGestureEvent& event) {
-  // Pinch events which cause a scale change should not be routed to a guest.
-  // We still allow synthetic wheel events for touchpad pinch to go to the page.
-  DCHECK(!blink::WebInputEvent::IsPinchGestureEventType(event.GetType()) ||
-         event.NeedsWheelEvent());
-  return false;
+  return blink::WebInputEvent::IsPinchGestureEventType(event.GetType());
 }
 
 void GuestViewBase::UpdatePreferredSize(WebContents* target_web_contents,
diff --git a/components/neterror/resources/neterror.css b/components/neterror/resources/neterror.css
index d33970709..2fe2a8a 100644
--- a/components/neterror/resources/neterror.css
+++ b/components/neterror/resources/neterror.css
@@ -254,6 +254,59 @@
   }
 }
 
+.offline-suggestion-image {
+  height: 35vw;
+  line-height: 0;
+  width: 35vw;
+  flex-basis: 35vw;
+  flex-grow: 0;
+  flex-shrink: 0;
+}
+
+.offline-suggestion-image > img {
+  border-bottom-left-radius: 15px;
+  border-top-left-radius: 15px;
+  height: 35vw;
+  line-height: 0;
+  width: 35vw;
+}
+
+.offline-suggestion-title {
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 3;
+  display: -webkit-box;
+  margin: 5%;
+  max-height: 65px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.offline-suggestion-freshness, .offline-suggestion-attribution {
+  color: #646464;
+  display: inline-block;
+  font-size: small;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.offline-suggestion-attribution {
+  margin-left: 5%;
+  max-width: 35%;
+  overflow: hidden;
+  white-space: nowrap;
+}
+
+div.offline-suggestion {
+  background-color: #F1F3F4;
+  border-radius: 15px;
+  display: flex;
+  margin-bottom: 5%;
+  margin-left: 0;
+  margin-right: 0;
+  margin-top: 5%;
+}
+
 /* Don't allow overflow when in a subframe. */
 html[subframe] body {
   overflow: hidden;
@@ -433,7 +486,7 @@
   overflow: hidden;
   position: absolute;
   top: 0;
-  z-index: 2;
+  z-index: 10;
 }
 
 .offline .controller {
@@ -443,7 +496,7 @@
   position: absolute;
   top: 0;
   width: 100vw;
-  z-index: 1;
+  z-index: 9;
 }
 
 #offline-resources {
diff --git a/components/neterror/resources/neterror.html b/components/neterror/resources/neterror.html
index 51e8f856..e2cc04c 100644
--- a/components/neterror/resources/neterror.html
+++ b/components/neterror/resources/neterror.html
@@ -35,8 +35,8 @@
           <!--TODO(https://crbug.com/852872) Finalize this UI.
             Don't remove PLACEHOLDER until the UI is complete and localized.-->
           <p style="text-align: center;">Explore while offline [PLACEHOLDER]</p>
-          <ul id="offline-content-list">
-          </ul>
+          <div id="offline-content-list">
+          </div>
         </div>
         <div id="scroll-spacer" style="height: 30vw" hidden></div>
       </div>
diff --git a/components/neterror/resources/neterror.js b/components/neterror/resources/neterror.js
index 0d1234c..f176e2a5 100644
--- a/components/neterror/resources/neterror.js
+++ b/components/neterror/resources/neterror.js
@@ -154,25 +154,48 @@
 primaryControlOnLeft = false;
 // </if>
 
+function getSuggestedContentDiv(item) {
+  var visual = '';
+    if (item.thumbnail_data_uri) {
+      // html_inline.py will try to replace src attributes with data URIs using
+      // a simple regex. The following is obfuscated slightly to avoid that.
+      var src = 'src';
+      visual = `<img ${src}="${item.thumbnail_data_uri}">`;
+    }
+  return `
+<div class="offline-suggestion"
+  onclick="launchOfflineItem('${item.ID}', '${item.name_space}')">
+  <div class="offline-suggestion-image">${visual}</div>
+  <div>
+    <div class="offline-suggestion-title">${item.title}</div>
+    <span class="offline-suggestion-attribution">${item.attribution}</span>
+    <span class="offline-suggestion-freshness">${item.date_modified}</span>
+  </div>
+</div>`;
+}
+
+function launchOfflineItem(itemID, name_space) {
+  errorPageController.launchOfflineItem(itemID, name_space);
+}
+
+function launchDownloadsPage() {
+  errorPageController.launchDownloadsPage();
+}
+
 // Populates suggested offline content. Note: this UI is in development.
 // See https://crbug.com/852872.
 function offlineContentAvailable(content) {
   var div = document.getElementById('offline-suggestions');
-  var suggestionText = [];
-  for (var c of content) {
-    var visual = '';
-    if (c.thumbnail_data_uri) {
-      // html_inline.py will try to replace src attributes with data URIs using
-      // a simple regex. The following is obfuscated slightly to avoid that.
-      var src = 'src';
-      visual = `<img ${src}="${c.thumbnail_data_uri}"` +
-        ' class="suggested-thumbnail"></img>';
-    }
-    suggestionText.push(
-      `<li>${visual} ${c.title} ${c.date_modified} ${c.attribution}</li>`);
-  }
+  var suggestionsHTML = [];
+  for (var c of content)
+    suggestionsHTML.push(getSuggestedContentDiv(c));
+
+  suggestionsHTML.push(`
+<div>
+  <a onclick="launchDownloadsPage()">See All Offline Content [PLACEHOLDER]</a>
+</div>`);
   var htmlList = document.getElementById('offline-content-list');
-  htmlList.innerHTML = suggestionText.join('\n');
+  htmlList.innerHTML = suggestionsHTML.join('\n');
   div.hidden = false;
   document.getElementById('scroll-spacer').hidden = false;
   document.getElementById('suggestions-list').hidden = true;
diff --git a/components/nux/BUILD.gn b/components/nux/BUILD.gn
index 87cb308..19c4d58 100644
--- a/components/nux/BUILD.gn
+++ b/components/nux/BUILD.gn
@@ -5,6 +5,34 @@
 import("//build/config/chrome_build.gni")
 
 if (is_win && is_chrome_branded) {
+  static_library("email_feature") {
+    sources = [
+      "email/constants.cc",
+      "email/constants.h",
+      "email/email_handler.cc",
+      "email/email_handler.h",
+    ]
+
+    public_deps = [
+      "//base",
+      "//net",
+      "//url",
+    ]
+
+    deps = [
+      "//components/bookmarks/browser",
+      "//components/bookmarks/common",
+      "//components/favicon/core",
+      "//components/pref_registry",
+      "//components/prefs",
+      "//components/resources",
+      "//components/strings",
+      "//components/variations",
+      "//content/public/browser",
+      "//ui/base",
+    ]
+  }
+
   static_library("google_apps_feature") {
     sources = [
       "google_apps/constants.cc",
diff --git a/components/nux/email/constants.cc b/components/nux/email/constants.cc
new file mode 100644
index 0000000..1c965f32
--- /dev/null
+++ b/components/nux/email/constants.cc
@@ -0,0 +1,16 @@
+// 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/nux/email/constants.h"
+
+#include "base/feature_list.h"
+
+namespace nux {
+
+extern const base::Feature kNuxEmailFeature{"NuxEmail",
+                                            base::FEATURE_DISABLED_BY_DEFAULT};
+
+extern const char kNuxEmailUrl[] = "chrome://welcome/email";
+
+}  // namespace nux
\ No newline at end of file
diff --git a/components/nux/email/constants.h b/components/nux/email/constants.h
new file mode 100644
index 0000000..e796037
--- /dev/null
+++ b/components/nux/email/constants.h
@@ -0,0 +1,19 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_NUX_EMAIL_CONSTANTS_H_
+#define COMPONENTS_NUX_EMAIL_CONSTANTS_H_
+
+namespace base {
+struct Feature;
+}  // namespace base
+
+namespace nux {
+
+extern const base::Feature kNuxEmailFeature;
+extern const char kNuxEmailUrl[];
+
+}  // namespace nux
+
+#endif  // COMPONENTS_NUX_EMAIL_CONSTANTS_H_
diff --git a/components/nux/email/email_handler.cc b/components/nux/email/email_handler.cc
new file mode 100644
index 0000000..caf482c
--- /dev/null
+++ b/components/nux/email/email_handler.cc
@@ -0,0 +1,149 @@
+// 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/nux/email/email_handler.h"
+
+#include "base/bind.h"
+#include "base/metrics/field_trial_params.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/stl_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "components/bookmarks/browser/bookmark_model.h"
+#include "components/bookmarks/common/bookmark_pref_names.h"
+#include "components/favicon/core/favicon_service.h"
+#include "components/grit/components_resources.h"
+#include "components/grit/components_scaled_resources.h"
+#include "components/nux/email/constants.h"
+#include "components/nux/show_promo_delegate.h"
+#include "components/prefs/pref_service.h"
+#include "components/strings/grit/components_strings.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_ui.h"
+#include "content/public/browser/web_ui_data_source.h"
+#include "ui/base/resource/resource_bundle.h"
+
+namespace nux {
+
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
+enum class EmailProviders {
+  kGmail = 0,
+  kYahoo = 1,
+  kOutlook = 2,
+  kAol = 3,
+  kiCloud = 4,
+  kCount,
+};
+
+const char* kEmailInteractionHistogram =
+    "FirstRun.NewUserExperience.EmailInteraction";
+
+// Strings in costants not translated because this is an experiment.
+// Translate before wide release.
+
+constexpr const char* kEmailNames[] = {
+    "Gmail", "Yahoo", "Outlook", "AOL", "iCloud",
+};
+
+// TODO(hcarmona): get correct URLs
+constexpr const char* kEmailUrls[] = {
+    "https://gmail.com",       "https://youtube.com",
+    "https://maps.google.com", "https://translate.google.com",
+    "https://news.google.com",
+};
+
+constexpr const int kEmailIconSize = 48;  // Pixels.
+constexpr const int kEmailIcons[] = {
+    // TODO(hcarmona): populate list of icons
+};
+
+static_assert(base::size(kEmailNames) == base::size(kEmailUrls),
+              "names and urls must match");
+static_assert(base::size(kEmailNames) == (size_t)EmailProviders::kCount,
+              "names and histograms must match");
+/*static_assert(base::size(kEmailNames) == base::size(kEmailIcons),
+              "names and icons must match");*/
+
+EmailHandler::EmailHandler(PrefService* prefs,
+                           favicon::FaviconService* favicon_service,
+                           bookmarks::BookmarkModel* bookmark_model)
+    : prefs_(prefs),
+      favicon_service_(favicon_service),
+      bookmark_model_(bookmark_model) {}
+
+EmailHandler::~EmailHandler() {}
+
+void EmailHandler::RegisterMessages() {
+  web_ui()->RegisterMessageCallback(
+      "rejectEmails", base::BindRepeating(&EmailHandler::HandleRejectEmails,
+                                          base::Unretained(this)));
+
+  web_ui()->RegisterMessageCallback(
+      "addEmails", base::BindRepeating(&EmailHandler::HandleAddEmails,
+                                       base::Unretained(this)));
+}
+
+void EmailHandler::HandleRejectEmails(const base::ListValue* args) {
+  /* TODO(hcarmona): Add histograms and uncomment this code.
+  UMA_HISTOGRAM_ENUMERATION(kEmailInteractionHistogram,
+                            EmailInteraction::kNoThanks,
+                            EmailInteraction::kCount);
+  */
+}
+
+void EmailHandler::HandleAddEmails(const base::ListValue* args) {
+  // Add bookmarks for all selected emails.
+  int bookmarkIndex = 0;
+  for (size_t i = 0; i < (size_t)EmailProviders::kCount; ++i) {
+    bool selected = false;
+    CHECK(args->GetBoolean(i, &selected));
+    if (selected) {
+      /* TODO(hcarmona): Add histograms and uncomment this code.
+      UMA_HISTOGRAM_ENUMERATION("FirstRun.NewUserExperience.EmailSelection",
+                                (EmailProviders)i,
+                                EmailProviders::kCount);
+      */
+      GURL app_url = GURL(kEmailUrls[i]);
+      bookmark_model_->AddURL(bookmark_model_->bookmark_bar_node(),
+                              bookmarkIndex++,
+                              base::ASCIIToUTF16(kEmailNames[i]), app_url);
+
+      // Preload the favicon cache with Chrome-bundled images. Otherwise, the
+      // pre-populated bookmarks don't have favicons and look bad. Favicons are
+      // updated automatically when a user visits a site.
+      favicon_service_->MergeFavicon(
+          app_url, app_url, favicon_base::IconType::kFavicon,
+          ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes(
+              kEmailIcons[i]),
+          gfx::Size(kEmailIconSize, kEmailIconSize));
+    }
+  }
+
+  // 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,
+                            EmailInteraction::kCount);
+  */
+}
+
+void EmailHandler::AddSources(content::WebUIDataSource* html_source) {
+  // Localized strings.
+
+  // Add required resources.
+  html_source->AddResourcePath("email", IDR_NUX_EMAIL_HTML);
+
+  // Add icons
+}
+
+}  // namespace nux
\ No newline at end of file
diff --git a/components/nux/email/email_handler.h b/components/nux/email/email_handler.h
new file mode 100644
index 0000000..16ff9c9
--- /dev/null
+++ b/components/nux/email/email_handler.h
@@ -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.
+
+#ifndef COMPONENTS_NUX_EMAIL_EMAIL_HANDLER_H_
+#define COMPONENTS_NUX_EMAIL_EMAIL_HANDLER_H_
+
+#include "base/macros.h"
+#include "base/values.h"
+#include "content/public/browser/web_ui_message_handler.h"
+
+class PrefService;
+
+namespace bookmarks {
+class BookmarkModel;
+}  // namespace bookmarks
+
+namespace content {
+class WebUIDataSource;
+}  // namespace content
+
+namespace favicon {
+class FaviconService;
+}  // namespace favicon
+
+namespace nux {
+
+extern const char* kEmailInteractionHistogram;
+
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
+enum class EmailInteraction {
+  kPromptShown = 0,
+  kNoThanks = 1,
+  kGetStarted = 2,
+  kCount,
+};
+
+class EmailHandler : public content::WebUIMessageHandler {
+ public:
+  EmailHandler(PrefService* prefs,
+               favicon::FaviconService* favicon_service,
+               bookmarks::BookmarkModel* bookmark_model);
+  ~EmailHandler() override;
+
+  // WebUIMessageHandler:
+  void RegisterMessages() override;
+
+  // Callbacks for JS APIs.
+  void HandleRejectEmails(const base::ListValue* args);
+  void HandleAddEmails(const base::ListValue* args);
+
+  // Adds webui sources.
+  static void AddSources(content::WebUIDataSource* html_source);
+
+ private:
+  // Weak reference.
+  PrefService* prefs_;
+
+  // Weak reference.
+  favicon::FaviconService* favicon_service_;
+
+  // Weak reference.
+  bookmarks::BookmarkModel* bookmark_model_;
+
+  DISALLOW_COPY_AND_ASSIGN(EmailHandler);
+};
+
+}  // namespace nux
+
+#endif  // COMPONENTS_NUX_GOOGLE_APPS_GOOGLE_APPS_HANDLER_H_
diff --git a/components/nux/email/resources/BUILD.gn b/components/nux/email/resources/BUILD.gn
new file mode 100644
index 0000000..957d207
--- /dev/null
+++ b/components/nux/email/resources/BUILD.gn
@@ -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.
+
+import("//third_party/closure_compiler/compile_js.gni")
+
+js_type_check("closure_compile") {
+  deps = [
+    ":nux_email",
+  ]
+}
+
+js_library("nux_email") {
+  deps = []
+}
diff --git a/components/nux/email/resources/nux_email.html b/components/nux/email/resources/nux_email.html
new file mode 100644
index 0000000..245d803b
--- /dev/null
+++ b/components/nux/email/resources/nux_email.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<html dir="$i18n{textdirection}" lang="$i18n{language}">
+<meta charset="utf-8">
+<title></title>
+
+<div>Hello World</div>
+
+</html>
\ No newline at end of file
diff --git a/components/offline_items_collection/core/launch_location.h b/components/offline_items_collection/core/launch_location.h
index d204d61..dcfca7f9 100644
--- a/components/offline_items_collection/core/launch_location.h
+++ b/components/offline_items_collection/core/launch_location.h
@@ -21,6 +21,8 @@
   PROGRESS_BAR,
   // Due to clicking a suggested item in NTP.
   SUGGESTION,
+  // Due to clicking a suggestion on the net error page.
+  NET_ERROR_SUGGESTION,
 };
 
 }  // namespace offline_items_collection
diff --git a/components/offline_pages/core/request_header/offline_page_header.cc b/components/offline_pages/core/request_header/offline_page_header.cc
index 31cba409..0f97887 100644
--- a/components/offline_pages/core/request_header/offline_page_header.cc
+++ b/components/offline_pages/core/request_header/offline_page_header.cc
@@ -18,6 +18,7 @@
 const char kOfflinePageHeaderReasonValueFromNotification[] = "notification";
 const char kOfflinePageHeadeReasonValueFromProgressBar[] = "progress_bar";
 const char kOfflinePageHeadeReasonValueFromSuggestion[] = "suggestion";
+const char kOfflinePageHeaderNetErrorSuggestion[] = "net_error_suggestion";
 const char kOfflinePageHeaderReasonFileUrlIntent[] = "file_url_intent";
 const char kOfflinePageHeaderReasonContentUrlIntent[] = "content_url_intent";
 const char kOfflinePageHeaderPersistKey[] = "persist";
@@ -70,6 +71,8 @@
         *reason = OfflinePageHeader::Reason::PROGRESS_BAR;
       else if (lower_value == kOfflinePageHeadeReasonValueFromSuggestion)
         *reason = OfflinePageHeader::Reason::SUGGESTION;
+      else if (lower_value == kOfflinePageHeaderNetErrorSuggestion)
+        *reason = OfflinePageHeader::Reason::NET_ERROR_SUGGESTION;
       else
         return false;
     } else if (key == kOfflinePageHeaderIDKey) {
@@ -108,10 +111,13 @@
       return kOfflinePageHeadeReasonValueFromProgressBar;
     case OfflinePageHeader::Reason::SUGGESTION:
       return kOfflinePageHeadeReasonValueFromSuggestion;
-    default:
-      NOTREACHED();
-      return "";
+    case OfflinePageHeader::Reason::NET_ERROR_SUGGESTION:
+      return kOfflinePageHeaderNetErrorSuggestion;
+    case OfflinePageHeader::Reason::NONE:
+      break;
   }
+  NOTREACHED();
+  return "";
 }
 
 }  // namespace
diff --git a/components/offline_pages/core/request_header/offline_page_header.h b/components/offline_pages/core/request_header/offline_page_header.h
index 13deea6..1fa57cd 100644
--- a/components/offline_pages/core/request_header/offline_page_header.h
+++ b/components/offline_pages/core/request_header/offline_page_header.h
@@ -52,6 +52,9 @@
 // The offline page should be loaded because the user clicks an offlined
 // suggested item.
 extern const char kOfflinePageHeadeReasonValueFromSuggestion[];
+// The offline page should be loaded because the user clicks on a offline
+// content suggestion on the net error page.
+extern const char kOfflinePageHeaderNetErrorSuggestion[];
 
 // The name used in name-value pair of kOfflinePageHeader to denote the offline
 // ID of the offline page to load.
@@ -75,6 +78,7 @@
     CONTENT_URL_INTENT,
     PROGRESS_BAR,
     SUGGESTION,
+    NET_ERROR_SUGGESTION,
   };
 
   OfflinePageHeader();
diff --git a/components/offline_pages/core/request_header/offline_page_header_unittest.cc b/components/offline_pages/core/request_header/offline_page_header_unittest.cc
index faf28fb..20a591d 100644
--- a/components/offline_pages/core/request_header/offline_page_header_unittest.cc
+++ b/components/offline_pages/core/request_header/offline_page_header_unittest.cc
@@ -121,6 +121,14 @@
   EXPECT_EQ("", id);
   EXPECT_TRUE(intent_url.is_empty());
 
+  EXPECT_TRUE(ParseFromHeaderValue("reason=net_error_suggestion",
+                                   &need_to_persist, &reason, &id,
+                                   &intent_url));
+  EXPECT_FALSE(need_to_persist);
+  EXPECT_EQ(OfflinePageHeader::Reason::NET_ERROR_SUGGESTION, reason);
+  EXPECT_EQ("", id);
+  EXPECT_TRUE(intent_url.is_empty());
+
   // Parse id field.
   EXPECT_TRUE(ParseFromHeaderValue("id=a1b2", &need_to_persist, &reason, &id,
                                    &intent_url));
diff --git a/components/password_manager/core/browser/password_syncable_service.cc b/components/password_manager/core/browser/password_syncable_service.cc
index d0dadb3..379e17a 100644
--- a/components/password_manager/core/browser/password_syncable_service.cc
+++ b/components/password_manager/core/browser/password_syncable_service.cc
@@ -140,11 +140,23 @@
   base::AutoReset<bool> processing_changes(&is_processing_sync_changes_, true);
   syncer::SyncMergeResult merge_result(type);
 
-  // On MacOS it may happen that some passwords cannot be decrypted due to
-  // modification of encryption key in Keychain (https://crbug.com/730625).
-  // Delete those logins from the store, they should be automatically updated
-  // with Sync data.
-  if (base::FeatureList::IsEnabled(features::kDeleteUndecryptableLogins)) {
+  // We add all the db entries as |new_local_entries| initially. During model
+  // association entries that match a sync entry will be removed and this list
+  // will only contain entries that are not in sync.
+  std::vector<std::unique_ptr<autofill::PasswordForm>> password_entries;
+  PasswordEntryMap new_local_entries;
+  if (!ReadFromPasswordStore(&password_entries, &new_local_entries)) {
+    if (!base::FeatureList::IsEnabled(features::kDeleteUndecryptableLogins)) {
+      merge_result.set_error(sync_error_factory->CreateAndUploadError(
+          FROM_HERE, "Failed to get passwords from store."));
+      metrics_util::LogPasswordSyncState(metrics_util::NOT_SYNCING_FAILED_READ);
+      return merge_result;
+    }
+
+    // On MacOS it may happen that some passwords cannot be decrypted due to
+    // modification of encryption key in Keychain (https://crbug.com/730625).
+    // Delete those logins from the store, they should be automatically updated
+    // with Sync data.
     DatabaseCleanupResult cleanup_result =
         password_store_->DeleteUndecryptableLogins();
 
@@ -163,18 +175,17 @@
           metrics_util::NOT_SYNCING_FAILED_CLEANUP);
       return merge_result;
     }
-  }
 
-  // We add all the db entries as |new_local_entries| initially. During model
-  // association entries that match a sync entry will be removed and this list
-  // will only contain entries that are not in sync.
-  std::vector<std::unique_ptr<autofill::PasswordForm>> password_entries;
-  PasswordEntryMap new_local_entries;
-  if (!ReadFromPasswordStore(&password_entries, &new_local_entries)) {
-    merge_result.set_error(sync_error_factory->CreateAndUploadError(
-        FROM_HERE, "Failed to get passwords from store."));
-    metrics_util::LogPasswordSyncState(metrics_util::NOT_SYNCING_FAILED_READ);
-    return merge_result;
+    // Try to read all entries again. If deletion of passwords which couldn't
+    // be deleted didn't help, return an error.
+    password_entries.clear();
+    new_local_entries.clear();
+    if (!ReadFromPasswordStore(&password_entries, &new_local_entries)) {
+      merge_result.set_error(sync_error_factory->CreateAndUploadError(
+          FROM_HERE, "Failed to get passwords from store."));
+      metrics_util::LogPasswordSyncState(metrics_util::NOT_SYNCING_FAILED_READ);
+      return merge_result;
+    }
   }
 
   if (password_entries.size() != new_local_entries.size()) {
diff --git a/components/password_manager/core/browser/password_syncable_service_unittest.cc b/components/password_manager/core/browser/password_syncable_service_unittest.cc
index 3fab7933..2789a73 100644
--- a/components/password_manager/core/browser/password_syncable_service_unittest.cc
+++ b/components/password_manager/core/browser/password_syncable_service_unittest.cc
@@ -236,8 +236,6 @@
   autofill::PasswordForm new_from_sync =
       PasswordFromSpecifics(GetPasswordSpecifics(list.back()));
 
-  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
-      .WillOnce(Return(DatabaseCleanupResult::kSuccess));
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
       .WillOnce(AppendForm(form));
   EXPECT_CALL(*password_store(), FillBlacklistLogins(_)).WillOnce(Return(true));
@@ -257,8 +255,6 @@
   autofill::PasswordForm new_from_sync =
       PasswordFromSpecifics(GetPasswordSpecifics(list.back()));
 
-  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
-      .WillOnce(Return(DatabaseCleanupResult::kSuccess));
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
       .WillOnce(Return(true));
   EXPECT_CALL(*password_store(), FillBlacklistLogins(_)).WillOnce(Return(true));
@@ -281,8 +277,6 @@
   form.federation_origin = url::Origin::Create(GURL(kFederationUrl));
   form.username_value = base::ASCIIToUTF16(kUsername);
   form.password_value = base::ASCIIToUTF16(kPassword);
-  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
-      .WillOnce(Return(DatabaseCleanupResult::kSuccess));
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
       .WillOnce(AppendForm(form));
   EXPECT_CALL(*password_store(), FillBlacklistLogins(_)).WillOnce(Return(true));
@@ -303,8 +297,6 @@
   form.type = kArbitraryType;
   form.username_value = base::ASCIIToUTF16(kUsername);
   form.password_value = base::ASCIIToUTF16(kPassword);
-  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
-      .WillOnce(Return(DatabaseCleanupResult::kSuccess));
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
       .WillOnce(AppendForm(form));
   EXPECT_CALL(*password_store(), FillBlacklistLogins(_)).WillOnce(Return(true));
@@ -329,8 +321,6 @@
 
   autofill::PasswordForm form2(form1);
   form2.preferred = false;
-  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
-      .WillOnce(Return(DatabaseCleanupResult::kSuccess));
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
       .WillOnce(AppendForm(form1));
   EXPECT_CALL(*password_store(), FillBlacklistLogins(_)).WillOnce(Return(true));
@@ -348,8 +338,6 @@
   // MergeDataAndStartSyncing().
   MockSyncChangeProcessor& weak_processor = *processor_;
   EXPECT_CALL(weak_processor, ProcessSyncChanges(_, IsEmpty()));
-  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
-      .WillOnce(Return(DatabaseCleanupResult::kSuccess));
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
       .WillOnce(Return(true));
   EXPECT_CALL(*password_store(), FillBlacklistLogins(_))
@@ -458,8 +446,6 @@
   form2.action = GURL("http://bar.com");
   form2.username_value = base::ASCIIToUTF16(kUsername);
   form2.password_value = base::ASCIIToUTF16(kPassword);
-  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
-      .WillOnce(Return(DatabaseCleanupResult::kSuccess));
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
       .WillOnce(AppendForm(form1));
   EXPECT_CALL(*password_store(), FillBlacklistLogins(_)).WillOnce(Return(true));
@@ -467,6 +453,10 @@
               FillAutofillableLogins(_)).WillOnce(AppendForm(form2));
   EXPECT_CALL(*other_service_wrapper.password_store(), FillBlacklistLogins(_))
       .WillOnce(Return(true));
+  // This method reads all passwords from the database. Make sure that the
+  // database is not read twice if there was no problem getting all the
+  // passwords during the first read.
+  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins()).Times(0);
 
   EXPECT_CALL(*password_store(), AddLoginImpl(PasswordIs(form2)));
   EXPECT_CALL(*other_service_wrapper.password_store(),
@@ -511,7 +501,8 @@
   EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
       .WillOnce(Return(DatabaseCleanupResult::kSuccess));
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
-      .WillOnce(Return(false));
+      .Times(2)
+      .WillRepeatedly(Return(false));
   EXPECT_CALL(*error_factory, CreateAndUploadError(_, _))
       .WillOnce(Return(error));
   // ActOnPasswordStoreChanges() below shouldn't generate any changes for Sync.
@@ -534,17 +525,21 @@
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndDisableFeature(
       features::kDeleteUndecryptableLogins);
+  auto error_factory = std::make_unique<syncer::SyncErrorFactoryMock>();
+  syncer::SyncError error(FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
+                          "Failed to get passwords from store.",
+                          syncer::PASSWORDS);
+  EXPECT_CALL(*error_factory, CreateAndUploadError(_, _))
+      .WillOnce(Return(error));
 
-  EXPECT_CALL(*processor_, ProcessSyncChanges(_, IsEmpty()));
-  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins()).Times(0);
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
-      .WillOnce(Return(true));
-  EXPECT_CALL(*password_store(), FillBlacklistLogins(_))
-      .WillOnce(Return(true));
+      .WillOnce(Return(false));
+  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins()).Times(0);
 
   syncer::SyncMergeResult result = service()->MergeDataAndStartSyncing(
-      syncer::PASSWORDS, SyncDataList(), std::move(processor_), nullptr);
-  EXPECT_FALSE(result.error().IsSet());
+      syncer::PASSWORDS, SyncDataList(), std::move(processor_),
+      std::move(error_factory));
+  EXPECT_TRUE(result.error().IsSet());
 }
 
 // Enable feature for deleting undecryptable logins.
@@ -554,10 +549,12 @@
       features::kDeleteUndecryptableLogins);
 
   EXPECT_CALL(*processor_, ProcessSyncChanges(_, IsEmpty()));
+  EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
+      .Times(2)
+      .WillOnce(Return(false))
+      .WillOnce(Return(true));
   EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
       .WillOnce(Return(DatabaseCleanupResult::kSuccess));
-  EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
-      .WillOnce(Return(true));
   EXPECT_CALL(*password_store(), FillBlacklistLogins(_))
       .WillOnce(Return(true));
 
@@ -579,6 +576,8 @@
   EXPECT_CALL(*error_factory, CreateAndUploadError(_, _))
       .WillOnce(Return(error));
 
+  EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
+      .WillOnce(Return(false));
   EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
       .WillOnce(Return(DatabaseCleanupResult::kEncryptionUnavailable));
 
@@ -599,8 +598,6 @@
       new syncer::SyncErrorFactoryMock);
   syncer::SyncError error(FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
                           "There is a problem", syncer::PASSWORDS);
-  EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
-      .WillOnce(Return(DatabaseCleanupResult::kSuccess));
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
       .WillOnce(AppendForm(form));
   EXPECT_CALL(*password_store(), FillBlacklistLogins(_)).WillOnce(Return(true));
diff --git a/components/payments/content/payment_request.cc b/components/payments/content/payment_request.cc
index 54fcb97..3a4e838 100644
--- a/components/payments/content/payment_request.cc
+++ b/components/payments/content/payment_request.cc
@@ -186,6 +186,18 @@
 }
 
 void PaymentRequest::Retry(mojom::PaymentValidationErrorsPtr errors) {
+  if (!client_.is_bound() || !binding_.is_bound()) {
+    DLOG(ERROR) << "Attempted Retry(), but binding(s) missing.";
+    OnConnectionTerminated();
+    return;
+  }
+
+  if (!display_handle_) {
+    DLOG(ERROR) << "Attempted Retry(), but display_handle_ is nullptr.";
+    OnConnectionTerminated();
+    return;
+  }
+
   std::string error;
   if (!PaymentsValidators::IsValidPaymentValidationErrorsFormat(errors,
                                                                 &error)) {
@@ -195,9 +207,9 @@
     return;
   }
 
-  // TODO(zino): Should implement this method (including updating UI part).
-  // Please see https://crbug.com/861704
-  NOTIMPLEMENTED();
+  spec()->UpdateShippingAddressErrors(std::move(errors->shipping_address));
+  spec()->UpdatePayerErrors(std::move(errors->payer));
+  display_handle_->Retry();
 }
 
 void PaymentRequest::AreRequestedMethodsSupportedCallback(
diff --git a/components/payments/content/payment_request_dialog.h b/components/payments/content/payment_request_dialog.h
index 3d23fcb..0f3c186 100644
--- a/components/payments/content/payment_request_dialog.h
+++ b/components/payments/content/payment_request_dialog.h
@@ -22,6 +22,8 @@
 
   virtual void ShowDialog() = 0;
 
+  virtual void RetryDialog() = 0;
+
   virtual void CloseDialog() = 0;
 
   virtual void ShowErrorMessage() = 0;
diff --git a/components/payments/content/payment_request_display_manager.cc b/components/payments/content/payment_request_display_manager.cc
index a4807b3..9e67406 100644
--- a/components/payments/content/payment_request_display_manager.cc
+++ b/components/payments/content/payment_request_display_manager.cc
@@ -29,6 +29,11 @@
   delegate_->ShowDialog(request);
 }
 
+void PaymentRequestDisplayManager::DisplayHandle::Retry() {
+  DCHECK(delegate_);
+  delegate_->RetryDialog();
+}
+
 void PaymentRequestDisplayManager::DisplayHandle::DisplayPaymentHandlerWindow(
     const GURL& url,
     PaymentHandlerOpenWindowCallback callback) {
diff --git a/components/payments/content/payment_request_display_manager.h b/components/payments/content/payment_request_display_manager.h
index 23e35d9..e856264 100644
--- a/components/payments/content/payment_request_display_manager.h
+++ b/components/payments/content/payment_request_display_manager.h
@@ -35,6 +35,7 @@
                   ContentPaymentRequestDelegate* delegate);
     ~DisplayHandle();
     void Show(PaymentRequest* request);
+    void Retry();
     // Attempt to display |url| inside the Payment Request dialog and run
     // |callback| after navigation is completed, passing true/false to indicate
     // success/failure.
diff --git a/components/payments/content/payment_request_spec.cc b/components/payments/content/payment_request_spec.cc
index 0319e3f7..560f90eb 100644
--- a/components/payments/content/payment_request_spec.cc
+++ b/components/payments/content/payment_request_spec.cc
@@ -101,9 +101,105 @@
   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::UpdatePayerErrors(mojom::PayerErrorFieldsPtr errors) {
+  payer_errors_ = std::move(errors);
+  current_update_reason_ = UpdateReason::RETRY;
+  NotifyOnSpecUpdated();
+  current_update_reason_ = UpdateReason::NONE;
+}
+
+base::string16 PaymentRequestSpec::GetShippingAddressError(
+    autofill::ServerFieldType type) {
+  if (!shipping_address_errors_)
+    return base::string16();
+
+  if (type == autofill::ADDRESS_HOME_STREET_ADDRESS)
+    return base::UTF8ToUTF16(shipping_address_errors_->address_line);
+
+  if (type == autofill::ADDRESS_HOME_CITY)
+    return base::UTF8ToUTF16(shipping_address_errors_->city);
+
+  if (type == autofill::ADDRESS_HOME_COUNTRY)
+    return base::UTF8ToUTF16(shipping_address_errors_->country);
+
+  if (type == autofill::ADDRESS_HOME_DEPENDENT_LOCALITY)
+    return base::UTF8ToUTF16(shipping_address_errors_->dependent_locality);
+
+  if (type == autofill::COMPANY_NAME)
+    return base::UTF8ToUTF16(shipping_address_errors_->organization);
+
+  if (type == autofill::PHONE_HOME_WHOLE_NUMBER)
+    return base::UTF8ToUTF16(shipping_address_errors_->phone);
+
+  if (type == autofill::ADDRESS_HOME_ZIP)
+    return base::UTF8ToUTF16(shipping_address_errors_->postal_code);
+
+  if (type == autofill::NAME_FULL)
+    return base::UTF8ToUTF16(shipping_address_errors_->recipient);
+
+  if (type == autofill::ADDRESS_HOME_STATE)
+    return base::UTF8ToUTF16(shipping_address_errors_->region);
+
+  if (type == autofill::ADDRESS_HOME_SORTING_CODE)
+    return base::UTF8ToUTF16(shipping_address_errors_->sorting_code);
+
+  return base::string16();
+}
+
+base::string16 PaymentRequestSpec::GetPayerError(
+    autofill::ServerFieldType type) {
+  if (!payer_errors_)
+    return base::string16();
+
+  if (type == autofill::EMAIL_ADDRESS)
+    return base::UTF8ToUTF16(payer_errors_->email);
+
+  if (type == autofill::NAME_FULL)
+    return base::UTF8ToUTF16(payer_errors_->name);
+
+  if (type == autofill::PHONE_HOME_WHOLE_NUMBER)
+    return base::UTF8ToUTF16(payer_errors_->phone);
+
+  return base::string16();
+}
+
+bool PaymentRequestSpec::has_shipping_address_error() const {
+  return shipping_address_errors_ &&
+         !(shipping_address_errors_->address_line.empty() &&
+           shipping_address_errors_->city.empty() &&
+           shipping_address_errors_->country.empty() &&
+           shipping_address_errors_->dependent_locality.empty() &&
+           shipping_address_errors_->organization.empty() &&
+           shipping_address_errors_->phone.empty() &&
+           shipping_address_errors_->postal_code.empty() &&
+           shipping_address_errors_->recipient.empty() &&
+           shipping_address_errors_->region.empty() &&
+           shipping_address_errors_->region_code.empty() &&
+           shipping_address_errors_->sorting_code.empty());
+}
+
+bool PaymentRequestSpec::has_payer_error() const {
+  return payer_errors_ &&
+         !(payer_errors_->email.empty() && payer_errors_->name.empty() &&
+           payer_errors_->phone.empty());
+}
+
 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();
+
   NotifyOnSpecUpdated();
   current_update_reason_ = UpdateReason::NONE;
 }
diff --git a/components/payments/content/payment_request_spec.h b/components/payments/content/payment_request_spec.h
index 753aeaa..9ff72e8 100644
--- a/components/payments/content/payment_request_spec.h
+++ b/components/payments/content/payment_request_spec.h
@@ -14,6 +14,7 @@
 #include "base/observer_list.h"
 #include "base/strings/string16.h"
 #include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/field_types.h"
 #include "components/payments/core/currency_formatter.h"
 #include "components/payments/core/payment_options_provider.h"
 #include "third_party/blink/public/platform/modules/payments/payment_request.mojom.h"
@@ -40,6 +41,7 @@
     NONE,
     SHIPPING_OPTION,
     SHIPPING_ADDRESS,
+    RETRY,
   };
 
   // Any class call add itself as Observer via AddObserver() and receive
@@ -69,6 +71,25 @@
   // 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);
+
+  // Gets the display string for the shipping address error for the given
+  // |type|.
+  base::string16 GetShippingAddressError(autofill::ServerFieldType type);
+
+  // Gets the display string for the payer error for the given |type|.
+  base::string16 GetPayerError(autofill::ServerFieldType type);
+
+  // Returns whether there is a shipping address error message set by merchant.
+  bool has_shipping_address_error() const;
+
+  // Returns whether there is a payer error message set by merchant.
+  bool has_payer_error() const;
+
   // Recomputes spec based on details.
   void RecomputeSpecForDetails();
 
@@ -219,6 +240,9 @@
   // notified.
   base::ObserverList<Observer>::Unchecked observers_;
 
+  mojom::AddressErrorsPtr shipping_address_errors_;
+  mojom::PayerErrorFieldsPtr payer_errors_;
+
   DISALLOW_COPY_AND_ASSIGN(PaymentRequestSpec);
 };
 
diff --git a/components/payments/content/payment_request_spec_unittest.cc b/components/payments/content/payment_request_spec_unittest.cc
index 2ea47d4..a14057666 100644
--- a/components/payments/content/payment_request_spec_unittest.cc
+++ b/components/payments/content/payment_request_spec_unittest.cc
@@ -452,4 +452,46 @@
   EXPECT_TRUE(spec()->IsMixedCurrency());
 }
 
+TEST_F(PaymentRequestSpecTest, ShippingAddressErrors) {
+  RecreateSpecWithOptionsAndDetails(mojom::PaymentOptions::New(),
+                                    mojom::PaymentDetails::New());
+
+  EXPECT_FALSE(spec()->has_shipping_address_error());
+
+  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));
+
+  EXPECT_EQ(base::UTF8ToUTF16("Invalid city"),
+            spec()->GetShippingAddressError(autofill::ADDRESS_HOME_CITY));
+  EXPECT_EQ(
+      base::UTF8ToUTF16("Invalid address line"),
+      spec()->GetShippingAddressError(autofill::ADDRESS_HOME_STREET_ADDRESS));
+
+  EXPECT_TRUE(spec()->has_shipping_address_error());
+}
+
+TEST_F(PaymentRequestSpecTest, PayerErrors) {
+  RecreateSpecWithOptionsAndDetails(mojom::PaymentOptions::New(),
+                                    mojom::PaymentDetails::New());
+
+  EXPECT_FALSE(spec()->has_payer_error());
+
+  mojom::PayerErrorFieldsPtr payer_errors = mojom::PayerErrorFields::New();
+  payer_errors->email = "Invalid email";
+  payer_errors->name = "Invalid name";
+  payer_errors->phone = "Invalid phone";
+  spec()->UpdatePayerErrors(std::move(payer_errors));
+
+  EXPECT_EQ(base::UTF8ToUTF16("Invalid email"),
+            spec()->GetPayerError(autofill::EMAIL_ADDRESS));
+  EXPECT_EQ(base::UTF8ToUTF16("Invalid name"),
+            spec()->GetPayerError(autofill::NAME_FULL));
+  EXPECT_EQ(base::UTF8ToUTF16("Invalid phone"),
+            spec()->GetPayerError(autofill::PHONE_HOME_WHOLE_NUMBER));
+
+  EXPECT_TRUE(spec()->has_payer_error());
+}
+
 }  // namespace payments
diff --git a/components/payments/content/payment_request_state.cc b/components/payments/content/payment_request_state.cc
index 766789d..3db5194 100644
--- a/components/payments/content/payment_request_state.cc
+++ b/components/payments/content/payment_request_state.cc
@@ -51,6 +51,8 @@
       selected_shipping_profile_(nullptr),
       selected_shipping_option_error_profile_(nullptr),
       selected_contact_profile_(nullptr),
+      invalid_shipping_profile_(nullptr),
+      invalid_contact_profile_(nullptr),
       selected_instrument_(nullptr),
       number_of_pending_sw_payment_instruments_(0),
       payment_request_delegate_(payment_request_delegate),
@@ -161,12 +163,30 @@
 }
 
 void PaymentRequestState::OnSpecUpdated() {
+  autofill::AutofillProfile* selected_shipping_profile =
+      selected_shipping_profile_;
+  autofill::AutofillProfile* selected_contact_profile =
+      selected_contact_profile_;
+
+  if (spec_->current_update_reason() ==
+      PaymentRequestSpec::UpdateReason::RETRY) {
+    if (spec_->has_shipping_address_error() && selected_shipping_profile) {
+      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;
+    }
+  }
+
   if (spec_->selected_shipping_option_error().empty()) {
     selected_shipping_option_error_profile_ = nullptr;
   } else {
-    selected_shipping_option_error_profile_ = selected_shipping_profile_;
+    selected_shipping_option_error_profile_ = selected_shipping_profile;
     selected_shipping_profile_ = nullptr;
   }
+
   is_waiting_for_merchant_validation_ = false;
   UpdateIsReadyToPayAndNotifyObservers();
 }
@@ -330,6 +350,10 @@
       PaymentRequestSpec::UpdateReason::SHIPPING_ADDRESS);
   selected_shipping_profile_ = profile;
 
+  // Changing the shipping address clears shipping address validation errors
+  // from retry().
+  invalid_shipping_profile_ = nullptr;
+
   // The user should not be able to click on pay until the callback from the
   // merchant.
   is_waiting_for_merchant_validation_ = true;
@@ -344,6 +368,11 @@
 void PaymentRequestState::SetSelectedContactProfile(
     autofill::AutofillProfile* profile) {
   selected_contact_profile_ = profile;
+
+  // Changing the contact information clears contact information validation
+  // errors from retry().
+  invalid_contact_profile_ = nullptr;
+
   UpdateIsReadyToPayAndNotifyObservers();
 }
 
diff --git a/components/payments/content/payment_request_state.h b/components/payments/content/payment_request_state.h
index 8f9ee91..41776c7 100644
--- a/components/payments/content/payment_request_state.h
+++ b/components/payments/content/payment_request_state.h
@@ -130,6 +130,12 @@
   autofill::AutofillProfile* selected_contact_profile() const {
     return selected_contact_profile_;
   }
+  autofill::AutofillProfile* invalid_shipping_profile() const {
+    return invalid_shipping_profile_;
+  }
+  autofill::AutofillProfile* invalid_contact_profile() const {
+    return invalid_contact_profile_;
+  }
   // Returns the currently selected instrument for this PaymentRequest flow.
   // It's not guaranteed to be complete. Returns nullptr if there is no selected
   // instrument.
@@ -282,6 +288,8 @@
   autofill::AutofillProfile* selected_shipping_profile_;
   autofill::AutofillProfile* selected_shipping_option_error_profile_;
   autofill::AutofillProfile* selected_contact_profile_;
+  autofill::AutofillProfile* invalid_shipping_profile_;
+  autofill::AutofillProfile* invalid_contact_profile_;
   PaymentInstrument* selected_instrument_;
 
   // Number of pending service worker payment instruments waiting for
diff --git a/components/payments/content/payment_request_state_unittest.cc b/components/payments/content/payment_request_state_unittest.cc
index 6e618f2..9b46801 100644
--- a/components/payments/content/payment_request_state_unittest.cc
+++ b/components/payments/content/payment_request_state_unittest.cc
@@ -402,4 +402,71 @@
   EXPECT_EQ("+81363849000", selected_shipping_address()->phone);
 }
 
+TEST_F(PaymentRequestStateTest, UpdateShippingAddressErrors) {
+  mojom::PaymentOptionsPtr options = mojom::PaymentOptions::New();
+  options->request_shipping = true;
+  RecreateStateWithOptions(std::move(options));
+
+  // Because there are shipping options, no address is selected by default.
+  // Therefore we are not ready to pay.
+  EXPECT_FALSE(state()->is_ready_to_pay());
+
+  state()->SetSelectedShippingProfile(test_address());
+  EXPECT_EQ(0, num_on_selected_information_changed_called());
+
+  // Simulate that the merchant has validated the shipping address change.
+  spec()->UpdateWith(CreateDefaultDetails());
+  EXPECT_EQ(1, num_on_selected_information_changed_called());
+
+  // Not ready to pay since there's no selected shipping option.
+  EXPECT_FALSE(state()->is_ready_to_pay());
+
+  // Simulate that the website validates the shipping option.
+  state()->SetSelectedShippingOption("option:1");
+  auto details = CreateDefaultDetails();
+  details->shipping_options[0]->selected = true;
+  spec()->UpdateWith(std::move(details));
+  EXPECT_EQ(2, num_on_selected_information_changed_called());
+  EXPECT_TRUE(state()->is_ready_to_pay());
+
+  EXPECT_TRUE(state()->selected_shipping_profile());
+  EXPECT_FALSE(state()->invalid_shipping_profile());
+
+  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));
+  EXPECT_EQ(3, num_on_selected_information_changed_called());
+  EXPECT_FALSE(state()->is_ready_to_pay());
+
+  EXPECT_FALSE(state()->selected_shipping_profile());
+  EXPECT_TRUE(state()->invalid_shipping_profile());
+}
+
+TEST_F(PaymentRequestStateTest, UpdatePayerErrors) {
+  mojom::PaymentOptionsPtr options = mojom::PaymentOptions::New();
+  options->request_payer_name = true;
+  options->request_payer_phone = true;
+  options->request_payer_email = true;
+  RecreateStateWithOptions(std::move(options));
+
+  state()->SetSelectedContactProfile(test_address());
+  EXPECT_EQ(1, num_on_selected_information_changed_called());
+  EXPECT_TRUE(state()->is_ready_to_pay());
+
+  EXPECT_TRUE(state()->selected_contact_profile());
+  EXPECT_FALSE(state()->invalid_contact_profile());
+
+  mojom::PayerErrorFieldsPtr payer_errors = mojom::PayerErrorFields::New();
+  payer_errors->email = "Invalid email";
+  payer_errors->name = "Invalid name";
+  payer_errors->phone = "Invalid phone";
+  spec()->UpdatePayerErrors(std::move(payer_errors));
+  EXPECT_EQ(2, num_on_selected_information_changed_called());
+  EXPECT_FALSE(state()->is_ready_to_pay());
+
+  EXPECT_FALSE(state()->selected_contact_profile());
+  EXPECT_TRUE(state()->invalid_contact_profile());
+}
+
 }  // namespace payments
diff --git a/components/payments/content/service_worker_payment_instrument_unittest.cc b/components/payments/content/service_worker_payment_instrument_unittest.cc
index 07cfdb0..25545e7 100644
--- a/components/payments/content/service_worker_payment_instrument_unittest.cc
+++ b/components/payments/content/service_worker_payment_instrument_unittest.cc
@@ -24,6 +24,7 @@
   MockPaymentRequestDelegate() {}
   ~MockPaymentRequestDelegate() override {}
   MOCK_METHOD1(ShowDialog, void(PaymentRequest* request));
+  MOCK_METHOD0(RetryDialog, void());
   MOCK_METHOD0(CloseDialog, void());
   MOCK_METHOD0(ShowErrorMessage, void());
   MOCK_METHOD0(ShowProcessingSpinner, void());
diff --git a/components/payments/content/test_content_payment_request_delegate.cc b/components/payments/content/test_content_payment_request_delegate.cc
index d622225..2b76cd4 100644
--- a/components/payments/content/test_content_payment_request_delegate.cc
+++ b/components/payments/content/test_content_payment_request_delegate.cc
@@ -28,6 +28,10 @@
   core_delegate_.ShowDialog(request);
 }
 
+void TestContentPaymentRequestDelegate::RetryDialog() {
+  core_delegate_.RetryDialog();
+}
+
 void TestContentPaymentRequestDelegate::CloseDialog() {
   core_delegate_.CloseDialog();
 }
diff --git a/components/payments/content/test_content_payment_request_delegate.h b/components/payments/content/test_content_payment_request_delegate.h
index ac430a3..dae7dbc9 100644
--- a/components/payments/content/test_content_payment_request_delegate.h
+++ b/components/payments/content/test_content_payment_request_delegate.h
@@ -26,6 +26,7 @@
   GetPaymentManifestWebDataService() const override;
   PaymentRequestDisplayManager* GetDisplayManager() override;
   void ShowDialog(PaymentRequest* request) override;
+  void RetryDialog() override;
   void CloseDialog() override;
   void ShowErrorMessage() override;
   void ShowProcessingSpinner() override;
diff --git a/components/payments/core/payment_request_delegate.h b/components/payments/core/payment_request_delegate.h
index 13c5d9c..a66832fe3 100644
--- a/components/payments/core/payment_request_delegate.h
+++ b/components/payments/core/payment_request_delegate.h
@@ -18,6 +18,8 @@
   // Shows the Payment Request dialog for the given |request|.
   virtual void ShowDialog(PaymentRequest* request) = 0;
 
+  virtual void RetryDialog() = 0;
+
   // Closes the same dialog that was opened by this delegate. Must be safe to
   // call when the dialog is not showing.
   virtual void CloseDialog() = 0;
diff --git a/components/payments/core/test_payment_request_delegate.h b/components/payments/core/test_payment_request_delegate.h
index 5373fb1..a7d3ed3a 100644
--- a/components/payments/core/test_payment_request_delegate.h
+++ b/components/payments/core/test_payment_request_delegate.h
@@ -29,6 +29,7 @@
 
   // PaymentRequestDelegate
   void ShowDialog(PaymentRequest* request) override {}
+  void RetryDialog() override {}
   void CloseDialog() override {}
   void ShowErrorMessage() override {}
   void ShowProcessingSpinner() override {}
diff --git a/components/pdf/renderer/pdf_accessibility_tree_browsertest.cc b/components/pdf/renderer/pdf_accessibility_tree_browsertest.cc
index f160c16..3c4e7ab 100644
--- a/components/pdf/renderer/pdf_accessibility_tree_browsertest.cc
+++ b/components/pdf/renderer/pdf_accessibility_tree_browsertest.cc
@@ -151,9 +151,7 @@
 
   // Disable accessibility while the PDF is loading, make sure this
   // doesn't crash.
-  blink::WebView* web_view = render_frame->GetRenderView()->GetWebView();
-  blink::WebSettings* settings = web_view->GetSettings();
-  settings->SetAccessibilityEnabled(false);
+  render_frame->SetAccessibilityModeForTest(ui::AXMode());
 
   pdf_accessibility_tree.SetAccessibilityPageInfo(page_info_, text_runs_,
                                                   chars_);
diff --git a/components/policy/resources/policy_templates_am.xtb b/components/policy/resources/policy_templates_am.xtb
index 5e0b776..af40845 100644
--- a/components/policy/resources/policy_templates_am.xtb
+++ b/components/policy/resources/policy_templates_am.xtb
@@ -354,11 +354,6 @@
 
           ይህ መመሪያ እንዳልተዋቀረ ከተተወ አራቱም መርሐግብሮች ስራ ላይ ይውላሉ።</translation>
 <translation id="2067011586099792101">ከይዘት ጥቅሎች ውጪ ያሉ የጣቢያዎች መዳረሻን ያግዱ</translation>
-<translation id="2070270043919235595">በመጠባበቀቅ ላይ ያለ ዝማኔን ለመተግበር <ph name="PRODUCT_NAME" /> ዳግም መጀመር እንዳለበት ለተጠቃሚዎች ያሳውቁ።
-
-      ይህ የመመሪያ ቅንብር የአሳሽ ዳግም መጀመር የሚመከር ወይም የሚያስፈልግ መሆኑን ለተጠቃሚው የሚያሳውቅ ማሳወቂያን ያነቃል። ካልተዋቀረ <ph name="PRODUCT_NAME" /> በምናሌው ላይ በሚደረጉ አነስተኛ ለውጦች አማካኝነት ዳግም መጀመር የሚያስፈልግ መሆኑን ለተጤቃሚው ያመለክታል። ወደ «የሚመከር» ከተዋቀረ ዳግም መጀመር የሚመከር መሆኑን የሚያሳይ ተደጋጋሚ ማስጠንቀቂያ ለተጠቃሚው እንዲታይ ይደረጋል። ተጠቃሚው ዳግም ማስጀመሩን ለበኋላ ለማቆየት ይህን ማስጠንቀቂያ ማሰናበት ይችላል። ወደ «የሚያስፈልግ» ከተዋቀረ የማሳወቂያ ጊዜው ካለፈ በኋላ አሳሹ በግዴታ ዳግም የሚጀመር መሆኑን ለተጠቃሚው የሚያመለክት ተደጋጋሚ ማስጠንቀቂያ ይታያል። ይህ ጊዜ በነባሪነት ሰባት ቀኖች ነው፣ እና በ<ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> መመሪያ ቅንብሩ በኩል ሊዋቀር ይችላል።
-
-      ዳግም መጀመሩ ተከትሎ የተጠቃሚው ክፍለ-ጊዜ ወደነበረበት ይመለሳል።</translation>
 <translation id="2073552873076775140">በመለያ ወደ <ph name="PRODUCT_NAME" /> እንዲገባ ይፍቀዱ</translation>
 <translation id="2077129598763517140">ሲገኝ የሃርድዌር ማጣደፍን ተጠቀም</translation>
 <translation id="2077273864382355561">በባትሪ ኃይል ላይ ሲሆን የማያ ገጽ መጥፋት መዘግየት</translation>
@@ -908,7 +903,6 @@
           ይህ መመሪያ አማራጭ ነው። ካልተዋቀረ ምንም አዲስ ትር አይቀርብም።
 
           ይህ መመሪያ የሚከበረው የ«DefaultSearchProviderEnabled» መመሪያ ከነቃ ብቻ ነው።</translation>
-<translation id="3465852069254497664">የአሳሽ ዳግም መጀመር የሚመከር ወይም የሚያስፈልግ መሆኑን ለተጠቃሚ ያሳውቁ</translation>
 <translation id="346731943813722404">የኃይል አስተዳደር መዘግየቶች እና የክፍለ-ጊዜው ርዝመት ማሄድ የሚጀምሩት በአንድ ክፍለ-ጊዜ ውስጥ የመጀመሪያው የተጠቃሚ እንቅስቃሴ ከታየ በኋላ ብቻ ይሁን ወይም አይሁን ይግለጹ።
 
           ይህ መመሪያ ወደ እውነት ከተዋቀረ በአንድ ክፍለ-ጊዜ ውስጥ የመጀመሪያው ተጠቃሚ እንቅስቃሴ ከታየ ጀምሮ የኃይል አስተዳደር መዘግየቶች እና የክፍለ-ጊዜው ርዝመት ገደብ ከመጀመሪያው የተጠቃሚ እንቅስቃሴ ማሄድ አይጀምሩም።
@@ -2157,17 +2151,6 @@
 
       ማያ ገጹ ሊደበዝዝ ሲል ዘመናዊ ማደብዘዣ ሞዴሉ ማያ ገጹን ማደብዘዝ ይተላለፍ እንደሆነ ይገመግማል። ዘመናዊ ማደብዘዣ ሞዴሉ ማያ ገጹን ማደብዘዝ ለሌላ ጊዜ ካስተላለፈ ማያ ገጹ እስኪደበዝዝ ድረስ ጊዜውን ያረዝማል። በዚህ ጊዜ ማያ ገጽ መጥፋት፣ የማያ ገጽ መቆለፊያ እና ስራ-ፈት መዘግየቶች መጀመሪያ እንደተዋቀረው ከማያ ገጽ መደብዘዝ መዘግየቱ ጋር ተመሳሳይ ርቀት ላይ እንዲሆኑ ይስተካከላሉ።
       ይህ መመሪያ ወደ እውነት ከተዋቀረ ወይም እንዳልተዋቀረ ከተተወ ዘመናዊ ማደብዘዛ ሞዴሉ ይነቃና ማያ ገጹ እስኪደበዝዝ ድረስ ጊዜውን እንዲያረዝም ይፈቀድለታል። ይህ መመሪያ ወደ ሐሰት ከተዋቀረ የዘመናዊ ማደብዘዣ ሞዴሉ በማያ ገጽ ማደብዘዝ ላይ ተጽዕኖ አያሳርፍም።</translation>
-<translation id="6982028490425791294">
-      መመሪያው ወደ እውነት ከተዋቀረ <ph name="PRODUCT_NAME" /> የWebRTC ክስተት ምዝግብ ማስታወሻዎችን ከGoogle አገልግሎቶች (ለምሳሌ፦ Google Meet) እንዲሰበስብና እነዚህን ምዝግብ ማስታወሻዎች ወደ Google እንዲሰቅል ይፈቀድለታል።
-
-      መመሪያው ወደ ሐሰት ከተዋቀረ ወይም እንዳልተዋቀረ ከተተወ <ph name="PRODUCT_NAME" /> እንዲህ ያሉ ምዝግብ ማስታወሻዎችን መሰብሰብም ሆነ መስቀል አይችልም።
-
-      እነዚህ ምዝግብ ማስታወሻዎች እንደ የተላኩ እና የተቀበሏቸው የRTP ጥቅሎች ጊዜ እና መጠን፣ በአውታረ መረቡ ላይ ያለ የጭንቅንቅ ግብረመልስ እና የኦዲዮና ቪዲዮ ክፈፎች ጊዜ እና ጥራት ዲበ ውሂብ ያለ መረጃን ይይዛሉ። ይህ መረጃ እንደ የመተላለፊያ ይዘት አገማመት ችግሮች ወዘተ ያሉ በChrome ውስጥ ባሉ የኦዲዮ ወይም የቪዲዮ ጥሪዎች ላይ ችግሮችን ማረም ላይ አጋዥ ነው። ምዝግብ ማስታወሻዎቹ ከጥሪው የመጡ የኦዲዮ ወይም ቪዲዮ ይዘቶች አይይዙም።
-
-      ይህ የውሂብ ስብስብ እንደ Google Hangouts ወይም Google Meet ባሉ የGoogle የድር አገልግሎቶች ብቻ ናቸው ሊቀሰቀስ የሚችለው።
-
-      እነዚህ የምዝግብ ማስታወሻዎች በክፍለ-ጊዜ መታወቂያ አማካኝነት በGoogle አገልግሎቱ ራሱ ከተሰበሰቡ ሌሎች ምዝግብ ማስታወሻዎች ጋር ሊዛመዱ ይችላሉ፤ ይህ ማረምን ለማቅለል የታሰበ ነው።
-      </translation>
 <translation id="6994082778848658360">የሰሌዳ ላይ ደህንነቱ የተጠበቀ የአባል ሃርድዌር ከዚህ ባህሪ ጋር ተኳሃኝ ከሆነ እንዴት ለሁለተኛ ደረጃ ማረጋገጥ ሥራ ላይ ሊውል እንደሚችል ይገልጻል። የማሽን ማብሪያ አዝራሩ ተጠቃሚው በአካል ያለ ከሆነ ለማወቅ ሥራ ላይ ይውላል። 
 
       «ተሰናክሏል» ከተመረጠ ምንም ሁለተኛ ደረጃ አይቀርብም።
@@ -2993,11 +2976,6 @@
 <translation id="9035964157729712237">ከተከለከሉት ዝርዝር ነፃ የሚደረጉ የቅጥያ መታወቂያዎች</translation>
 <translation id="9042911395677044526">የአውታረ መረብ ውቅር መግፋት በእያንዳንዱ ተጠቃሚ በ<ph name="PRODUCT_OS_NAME" /> መሣሪያ ላይ እንዲተገበር ያስችላል። የአውታረ መረቡ ውቅር በ<ph name="ONC_SPEC_URL" /> ላይ እንደተብራራው በክፍት አውታረ መረብ ውቅር ቅርጸት የተገለጸ የJSON ቅርጸት ህብረቁምፊ ነው</translation>
 <translation id="9084985621503260744">የቪዲዮ እንቅስቃሴ የኃይል አስተዳደሩ ላይ ተጽዕኖ ይኖርበት ወይም አይኖርበት ይገልጻል</translation>
-<translation id="9085839450090699752">ተጠቃሚዎች <ph name="PRODUCT_NAME" /> እንደገና መጀመር እንዳለበት ወይም <ph name="PRODUCT_OS_NAME" /> መሣሪያ በመጠባበቅ ላይ ያለ ዝማኔ ተፈጻሚ እንዲሆን እንደገና መጀመር ይኖርበት እንደሆነ እንዲያውቁት እንዲደረጉ ክፍለ ጊዜን በሚሊሰከንዶች እንዲያቀናብሩ ያስችልዎታል።
-
-      በዚህ ክፍለ ጊዜ ወቅት፣ ተጠቃሚው ዝማኔ የማድረግን አስፈላጊነት በተደጋጋሚ እንዲያውቁት ይደረጋሉ። ለ<ph name="PRODUCT_OS_NAME" /> መሣሪያዎች፣ የደረጃ ማሻሻያ መኖሩ ተፈልጎ ሲገኝ በሥርዓት ትሪው ውስጥ የዳግም ማስጀመሪያ ማሳወቂያ ብቅ ይላል። ይህ ማሳወቂያ ከማሳወቂያው ክፍለ ጊዜ ግማሹ አንድ ጊዜ ካለፈ በኋላ እና እንደገና ደግሞ ሙሉው የማሳወቂያ ክፍለ ጊዜ ሲያልፍ ቀለሙን ይለውጣል። ለ<ph name="PRODUCT_NAME" /> አሳሾች፣ የማሳወቂያው ክፍለ ጊዜ አንድ ሦስተኛ ያክሉ እንዳለፈ ዳግም ማስጀመር እንደሚያስፈልግ ለመጠቆም የመተግበሪያው ምናሌ ይለውጣል። ይህ ማሳወቂያ ከማሳወቂያው ክፍለ ጊዜ ሁለት ሦስተኛው አንድ ጊዜ ካለፈ በኋላ እንዲሁም እንደገና ሙሉው የክፍለ ጊዜ አንድ ጊዜ ካለፈ በኋላ ቀለም ይለውጣል። ለአሳሾች በ<ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> መመሪያ የነቁ ተጨማሪ ማሳወቂያዎች ይህንኑ ተመሳሳይ የጊዜ መርሐ ግብር ይከተላሉ።
-
-      ካልተቀናበሩ ነባሪው ክፍለ ጊዜ 345600000 ሚሊሰከንዶች (አራት ቀናት) ለ<ph name="PRODUCT_OS_NAME" /> መሣሪያዎች እና 604800000 ሚሊሰከንዶች (አንድ ሳምንት) ለአሳሾች ጥቅም ላይ ይውላሉ።</translation>
 <translation id="9088433379343318874">ክትትል የሚደረግበት የተጠቃሚ ይዘት አቅራቢን አንቃ</translation>
 <translation id="9088444059179765143">የራስ-ሰር ሰዓት ሰቅ ማወቂያ ስልቱን ያዋቅሩ</translation>
 <translation id="9096086085182305205">የተፈቀደላቸው የማረጋገጫ አገልጋይ ዝርዝር</translation>
diff --git a/components/policy/resources/policy_templates_ar.xtb b/components/policy/resources/policy_templates_ar.xtb
index 1fca3b8d..76e7472 100644
--- a/components/policy/resources/policy_templates_ar.xtb
+++ b/components/policy/resources/policy_templates_ar.xtb
@@ -191,6 +191,12 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">تفعيل حظر إدخال برامج الجهات الخارجية</translation>
 <translation id="1504431521196476721">التأكيد عن بُعد</translation>
+<translation id="1507957856411744193">‏في حال ضبط هذه السياسة على القيمة "صحيح"، سيتصل <ph name="PRODUCT_NAME" /> بأجهزة البث في جميع عناوين IP، وليس عناوين RFC1918/RFC4193 الخاصة فقط.
+          في حال ضبط هذه السياسة على القيمة "خطأ"، لن يتصل <ph name="PRODUCT_NAME" /> بأجهزة البث إلا في عناوين RFC1918/RFC4193 الخاصة.
+
+          في حال عدم ضبط هذه السياسة، لن يتصل <ph name="PRODUCT_NAME" /> بأجهزة البث  إلا في عناوين RFC1918/RFC4193 الخاصة، ما لم تُفعَّل ميزة CastAllowAllIPs.
+
+          في حال ضبط السياسة "EnableMediaRouter" على القيمة "خطأ"، لن يصبح لقيمة هذه السياسة أي تأثير.</translation>
 <translation id="1509692106376861764">تمّ إيقاف هذه السياسة اعتبارًا من الإصدار 29 من <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1514888685242892912">تفعيل <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">السماح للمواقع بتتبع الموقع الفعلي للمستخدم</translation>
@@ -365,11 +371,6 @@
 
           إذا تم ترك هذه السياسة بدون تعيين، فسيتم استخدام الأنظمة الأربعة جميعها.</translation>
 <translation id="2067011586099792101">يمكنك حظر الدخول إلى المواقع خارج حزمات المحتوى</translation>
-<translation id="2070270043919235595">إبلاغ المستخدمين أنه يجب إعادة تشغيل <ph name="PRODUCT_NAME" /> لتطبيق التحديث المعلق.
-
-      يعمل تعيين هذه السياسة على تفعيل الإشعارات لإخبار المستخدم بأن إعادة تشغيل المتصفح موصى بها أو مطلوبة. وفي حال عدم تعيين هذه السياسة، يشير <ph name="PRODUCT_NAME" /> إلى المستخدم بأنه يلزم إعادة التشغيل عبر إجراء تغييرات دقيقة بالقائمة. وفي حال التعيين على "موصى به"، سيتم عرض رسالة تحذير مكررة على المستخدم تخبره بأن إعادة التشغيل موصى بها. ويمكن للمستخدم رفض هذا التحذير لتأجيل عملية إعادة التشغيل. وفي حال التعيين على "مطلوب"، سيتم عرض رسالة تحذير مكررة على المستخدم تشير إلى أنه سيتم فرض إعادة تشغيل المتصفح فور انتهاء مدة الإشعار. وتكون هذه المدة سبعة أيام بشكلٍ تلقائي ويمكن تهيئتها عبر تعيين السياسة <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      تتم استعادة جلسة المستخدم بعد إعادة التشغيل.</translation>
 <translation id="2073552873076775140">السماح بتسجيل الدخول إلى <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">استخدام تسريع الأجهزة عند توفره</translation>
 <translation id="2077273864382355561">مهلة إيقاف تشغيل الشاشة عند استخدام طاقة البطارية</translation>
@@ -892,7 +893,6 @@
           هذه السياسة اختيارية. وفي حالة عدم تعيينها، لن تتوفر صفحة علامة تبويب جديدة.
 
           يتم الاعتداد بهذه السياسة فقط في حالة تفعيل السياسة "DefaultSearchProviderEnabled".</translation>
-<translation id="3465852069254497664">إبلاغ أحد المستخدمين بأن إعادة تشغيل المتصفح موصى بها أو مطلوبة</translation>
 <translation id="346731943813722404">‏لتحديد ما إذا كان يجب بدء تشغيل تأخيرات إدارة الطاقة والحد الأقصى لطول الجلسة فقط بعد ملاحظة النشاط الأول للمستخدم في الجلسة. وفي حالة تعيين هذه السياسة على "True"، فلن يبدأ تشغيل تأخيرات إدارة الطاقة والحد الأقصى لطول الجلسة لحين ملاحظة النشاط الأول للمستخدم في الجلسة. وفي حالة تعيين هذه السياسة على "False" أو تركها بدون تعيين، فستبدأ تأخيرات إدارة الطاقة والحد الأقصى لطول الجلسة على الفور بمجرد بدء الجلسة.</translation>
 <translation id="3478024346823118645">مسح بيانات المستخدم عند الخروج</translation>
 <translation id="348495353354674884">تفعيل لوحة المفاتيح الافتراضية</translation>
@@ -1920,6 +1920,7 @@
 
       تعمل السياسة <ph name="SYNC_DISABLED_POLICY_NAME" /> على إيقاف جميع عمليات المزامنة للبيانات، وتجاوز RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">‏تصفية مواقع الويب ذات المستوى الأعلى (باستثناء أطُر iframe المدمجة) لمحتوى البالغين</translation>
+<translation id="6734521799274931721">‏تتحكّم في مدى توفُّر خوادم مشاركة الملفات على الشبكة لنظام التشغيل Chrome</translation>
 <translation id="6735701345096330595">فرض تفعيل التدقيق الإملائي للغات</translation>
 <translation id="673699536430961464">‏يسمح هذا الإعداد للمستخدمين بالتبديل بين حسابات Google ضمن منطقة محتوى نافذة المتصفح بعد تسجيل الدخول إلى جهاز <ph name="PRODUCT_OS_NAME" />.
 
@@ -2062,16 +2063,6 @@
 
 ......عندما تكون الشاشة على وشك التعتيم، يقيم نموذج تعتيم الشاشة الذكي ما إذا كان يجب تأجيل تعتيم الشاشة أم لا. وفي حال تأجيل نموذج تعتيم الشاشة الذكي لتعتيم الشاشة، سيؤدي ذلك إلى مدّ الفترة الزمنية بفعالية حتى يتم تعتيم الشاشة. وفي هذه الحالة، سيتم ضبط مهلات تعتيم الشاشة وإيقاف تشغيلها وقفلها للحفاظ على الفروق الزمنية نفسها بين هذه المهلات ومهلة تأخير التعتيم وفقًا للتهيئة الأصلية.
 ......في حال إعداد هذه السياسة على "True" أو عدم إعدادها، سيتم تفعيل نموذج تعتيم الشاشة الذكي والسماح بمدّ الفترة الزمنية حتى يتم تعتيم الشاشة. وفي حال ضبط السياسة على "False"، لن يؤثر نموذج تعتيم الشاشة الذكي على تعتيم الشاشة.</translation>
-<translation id="6982028490425791294">‏
-      في حال ضبط هذه السياسة على "true"، سيتم السماح للمنتج <ph name="PRODUCT_NAME" /> بتجميع سجلّات أحداث WebRTC من خدمات Google (مثل Google Meet) وتحميل هذه السجلّات إلى Google.
-      في حال ضبط هذه السياسة على "false" أو عدم ضبطها، لا يجوز للمنتج <ph name="PRODUCT_NAME" /> تجميع هذه السجلّات أو تحميلها.
-
-      تحتوي هذه السجلّات على معلومات، مثل وقت حزم RTP المُرسلة والمُستلمة وحجمها والتعليقات حول التكدس على الشبكة والبيانات الوصفية حول وقت إطارات الفيديو والصوت وجودتها. وهذه المعلومات مفيدة عند تصحيح الأخطاء المتعلقة بالمكالمات الصوتية أو مكالمات الفيديو في Chrome، مثل مشاكل تقدير معدّل نقل البيانات، وغير ذلك. ولا تتضمن هذه السجلّات محتوى الفيديو أو الصوت من المكالمة.
-
-      لا يمكن تشغيل مجموعة البيانات هذه إلا من خلال خدمات الويب في Google، مثل Google Hangouts أو Google Meet.
-
-      قد ترتبط هذه السجلّات بسجلّات أخرى تم تجميعها عن طريق خدمة Google نفسها من خلال رقم تعريف الجلسة. والهدف من ذلك تسهيل عملية تصحيح الأخطاء.
-      </translation>
 <translation id="6994082778848658360">‏تحدِّد كيفية استخدام أجهزة العنصر الآمن المُدمجة لتوفير عامل المصادقة الثاني إذا كان متوافقًا مع هذه الميزة. يتم استخدام زر تشغيل الجهاز للكشف عن الوجود الفعلي للمستخدم.
 
       إذا تم تحديد "غير مفعّل"، فلن يتم توفير عامل ثانٍ.
@@ -2879,11 +2870,6 @@
 <translation id="9035964157729712237">معرفات الإضافات المراد استثنائها من قائمة الحظر</translation>
 <translation id="9042911395677044526">‏للسماح لتهيئة الشبكة المدفوعة أن يتم تطبيقها على كل مستخدم لجهاز <ph name="PRODUCT_OS_NAME" />. إن تهيئة الشبكة هي عبارة عن سلسلة بتنسيق JSON كما هو محدد في تنسيق تهيئة الشبكة المفتوحة الموضح في <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">تحديد ما إذا كان نشاط الفيديو يؤثر في إدارة الطاقة</translation>
-<translation id="9085839450090699752">تسمح لك هذه السياسة بتحديد الفترة الزمنية بالمللي ثانية، التي يتم بعدها إبلاغ المستخدمين بضرورة إعادة تشغيل <ph name="PRODUCT_NAME" /> أو إعادة تشغيل جهاز <ph name="PRODUCT_OS_NAME" /> لتطبيق تحديث مُعلّق.
-
-      خلال تلك الفترة الزمنية، سيتم إبلاغ المستخدم مرارًا بضرورة التحديث. بالنسبة إلى أجهزة <ph name="PRODUCT_OS_NAME" />، يظهر إشعار إعادة التشغيل في لوحة النظام عند رصد تحديث ويتغير لون هذا الإشعار بعد مرور نصف مدته وكذلك بعد مرور مدته بالكامل. أما بالنسبة إلى متصفِّحات <ph name="PRODUCT_NAME" />، فتتغير قائمة التطبيق لتشير إلى ضرورة إعادة التشغيل بعد مرور ثلث مدة الإشعار. ويتغير لون هذا الإشعار بعد مرور ثلثي مدته وكذلك بعد مرور مدته بالكامل. كما تتبّع الإشعارات الإضافية التي تفعِّلها سياسة <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> للمتصفحّات الجدول الزمني نفسه.
-
-      في حال عدم ضبط السياسة، يتم استخدام الفترة التلقائية التي تبلغ 345600000 مللي ثانية (أربعة أيام) لأجهزة <ph name="PRODUCT_OS_NAME" /> و604800000 مللي ثانية (أسبوع واحد) للمتصفِّحات.</translation>
 <translation id="9088433379343318874">تفعيل موفر المحتوى للمستخدمين تحت الإشراف</translation>
 <translation id="9088444059179765143">تهيئة طريقة اكتشاف المنطقة الزمنية تلقائيًا</translation>
 <translation id="9096086085182305205">قائمة السماح لخادم المصادقة</translation>
diff --git a/components/policy/resources/policy_templates_bg.xtb b/components/policy/resources/policy_templates_bg.xtb
index 4674c3c..1b7349b 100644
--- a/components/policy/resources/policy_templates_bg.xtb
+++ b/components/policy/resources/policy_templates_bg.xtb
@@ -343,11 +343,6 @@
 
 Ако това правило не е зададено, ще се използват и четирите схеми.</translation>
 <translation id="2067011586099792101">Блокиране на достъпа до сайтове извън пакети със съдържание</translation>
-<translation id="2070270043919235595">Известяване на потребителите, че трябва да стартират отново <ph name="PRODUCT_NAME" />, за да се приложи изчакваща актуализация.
-
-С настройката на това правило се активират известията, които уведомяват потребителя, че повторното стартиране на браузъра е препоръчително или задължително. Ако тя не бъде зададена, необходимостта от рестартиране се указва чрез малки промени в менюто на <ph name="PRODUCT_NAME" />. При задаване на „Recommended“ периодично ще се извежда предупреждение, че повторното стартиране е препоръчително. Потребителят може да отхвърли предупреждението, за да отложи рестартирането. При „Required“ периодичното предупреждение ще указва, че браузърът ще бъде рестартиран принудително след края на периода на известяване. Продължителността на този период е седем дни по подразбиране и може да бъде конфигурирана чрез правилото <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-Потребителската сесия се възстановява след повторното стартиране.</translation>
 <translation id="2073552873076775140">Разрешаване на влизането в <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Да се използва хардуерно ускорение, когато е налице</translation>
 <translation id="2077273864382355561">Забавяне преди изключване на екрана при работа на батерия</translation>
@@ -883,7 +878,6 @@
           Това правило не е задължително. Ако не е зададено, няма да се осигурява нов раздел.
 
           Правилото се зачита само ако е активирано правилото „DefaultSearchProviderEnabled“.</translation>
-<translation id="3465852069254497664">Известяване на потребителя, че е препоръчително или задължително да стартира отново браузъра</translation>
 <translation id="346731943813722404">Посочва дали забавянията при управление на захранването и ограничаването на продължителността на сесията да започват да се изпълняват само след начало на потребителската активност в нея.
 
 Ако правилото е „true“, гореописаните функции не влизат в сила преди отчитането на такава активност в сесията.
@@ -2088,17 +2082,6 @@
 
 Когато предстои затъмняване на екрана, този модел оценява дали това да бъде отложено. В случай на отлагане времето до затъмняването на екрана се увеличава. Тогава забавянията преди изключване на екрана, преди заключване на екрана и това при неактивност се коригират, за да останат толкова отдалечени от забавянето на затъмняването на екрана, колкото са били конфигурирани първоначално.
 Ако за правилото е зададено True или то не е зададено, моделът на интелигентно затъмняване ще бъде активиран и ще му бъде позволено да увеличава времето до затъмняване на екрана. Ако за правилото е зададено False, моделът няма да влияе върху затъмняването на екрана.</translation>
-<translation id="6982028490425791294">
-      Ако това правило е true, на <ph name="PRODUCT_NAME" /> се разрешава да събира регистри на събитията за WebRTC от услугите на Google (напр. Google Meet) и да ги качва в Google.
-
-      Ако правилото е false или не е зададено, <ph name="PRODUCT_NAME" /> не може да събира и качва такива регистри.
-
-      Тези регистри съдържат информация като часа и размера на изпратените и получените RTP пакети, обратна връзка за претоварване в мрежата, както и метаданни за времената и качеството на аудио- и видеокадрите. Тази информация е от полза при отстраняването на проблеми с гласовите или видеообажданията в Chrome, като например при оценката на пропускателната способност и т.н. Регистрите не включват аудио- или видеосъдържание от обажданията.
-
-      Това събиране на данни може да бъде задействано само от уеб услугите на Google, като Google Hangouts или Google Meet.
-
-      Посредством идентификационен номер на сесията тези регистри може да бъдат свързани с други регистрационни файлове, събирани от самата услуга на Google. Това се прави с цел улесняване на отстраняването на грешки.
-      </translation>
 <translation id="6994082778848658360">Посочва как вграденият защитен хардуерен елемент може да се използва за осигуряване на второ ниво на удостоверяване на самоличността, ако е съвместим с тази функция. Бутонът за захранване на машината служи за установяване на физическото присъствие на потребителя.
 
 Ако настройката е деактивирана, няма да се използва второ ниво на удостоверяване.
@@ -2896,11 +2879,6 @@
 <translation id="9035964157729712237">Идентификационни номера на разширения за освобождаване от черния списък</translation>
 <translation id="9042911395677044526">Разрешава разпространението на конфигурацията на мрежата до всеки потребител на устройство с <ph name="PRODUCT_OS_NAME" />. Тази конфигурация е JSON низ, форматиран съгласно формата за отворена мрежа, както е описано на адрес <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Посочване дали видеоактивността засяга управлението на захранването</translation>
-<translation id="9085839450090699752">Дава възможност да зададете периода от време (в милисекунди), през който потребителите да бъдат известявани, че трябва да рестартират <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" /> ще се използва стандартният период от 345600000 милисекунди (четири дни), а за браузъра – 604800000 милисекунди (една седмица).</translation>
 <translation id="9088433379343318874">Активиране на доставчика на съдържание за контролирани потребители</translation>
 <translation id="9088444059179765143">Конфигуриране на метода за автоматично откриване на часовата зона</translation>
 <translation id="9096086085182305205">Бял списък на сървъра за удостоверяване</translation>
diff --git a/components/policy/resources/policy_templates_bn.xtb b/components/policy/resources/policy_templates_bn.xtb
index 8bf3721..d56f17a 100644
--- a/components/policy/resources/policy_templates_bn.xtb
+++ b/components/policy/resources/policy_templates_bn.xtb
@@ -389,11 +389,6 @@
 
           যদি এই নীতিটি সেট না করে ছেড়ে দেওয়া থাকে তবে চারটি স্কিমের সবকয়টি ব্যবহার করা হবে৷</translation>
 <translation id="2067011586099792101">সামগ্রী প্যাকগুলির বাইরের সাইটগুলিতে অ্যাক্সেস অবরুদ্ধ করুন</translation>
-<translation id="2070270043919235595">বাকি থাকা আপডেট প্রয়োগ করার জন্য অবশ্যই <ph name="PRODUCT_NAME" /> রিলঞ্চ করতে হবে তা ব্যবহারকারীদের জানান।
-
-      ব্রাউজার রিলঞ্চ করা প্রয়োজন অথবা করলে ভাল হয়, তা ব্যবহারকারীকে জানানোর জন্য বিজ্ঞপ্তি পাঠানো হবে কিনা তা এই নীতির সেটিংস অনুযায়ী নির্ধারণ করা হয়। সেট করা না হলে মেনুতে সূক্ষ্ম পরিবর্তনের মাধ্যমে <ph name="PRODUCT_NAME" /> ব্যবহারকারীকে বোঝানোর চেষ্টা করে যে রিলঞ্চ করা প্রয়োজন।  'প্রস্তাবিত' সেটিংস বেছে নিলে ব্যবহারকারীকে বারবার সতর্কবার্তা দেখিয়ে বলা হয় যে রিলঞ্চ করার পরামর্শ দেওয়া হচ্ছে। রিলঞ্চ পিছিয়ে দিতে চাইলে ব্যবহারকারী সতর্কবার্তাগুলি খারিজ করে দিতে পারেন। 'প্রয়োজন' সেটিংস বেছে নিলে বারবার সতর্কবার্তা দেখিয়ে বোঝানো হবে যে বিজ্ঞপ্তির সময়সীমা পেরিয়ে গেলে ব্রাউজার নিজে থেকে রিলঞ্চ করা হবে। এই সময়সীমা স্বভাবত ৭ দিন হিসেবে ধরা হয় এবং <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> নীতির সেটিং থেকে এটি কনফিগার করা যায়।
-
-      রিলঞ্চের পরে ব্যবহারকারীর সেশন যেখানে বন্ধ করা হয়েছিল সেখান থেকেই আবার চালু করা হয়।</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" />-এ সাইন-ইন করার অনুমতি দিন</translation>
 <translation id="2077129598763517140">যখনই উপলব্ধ তখন হার্ডওয়্যার অ্যাক্সিলারেশন ব্যবহার করুন</translation>
 <translation id="2077273864382355561">AC পাওয়ার চলাকালীন স্ক্রিন বন্ধে বিলম্ব</translation>
@@ -1013,7 +1008,6 @@
           এই নীতিটি ঐচ্ছিক৷ যদি সেট না করা থাকে, তবে কোনো নতুন ট্যাব পৃষ্ঠা উপলব্ধ করা হবে না৷
 
           এই নীতিটি তখনই ব্যবহৃত হয় যখন 'DefaultSearchProviderEnabled' নীতিটি সক্ষম করা থাকে৷</translation>
-<translation id="3465852069254497664">ব্রাউজারটি রিলঞ্চ করা প্রয়োজন অথবা রিলঞ্চ করলে ভাল সে বিষয়টি ব্যবহারকারীকে জানান</translation>
 <translation id="346731943813722404">পাওয়ার ম্যানেজমেন্ট বিলম্ব করবে কিনা এবং সেশনের সময়ের সীমা শুধুমাত্র একটি সেশনে প্রথম ব্যবহারকারীর অ্যাক্টিভিটি পরিলক্ষিত হওয়ার পরেই চলতে শুরু করবে কিনা তা নির্দিষ্ট করে৷
 
           যদি এই নীতি সত্য হিসাবে সেট করা থাকে, পাওয়ার ম্যানেজমেন্ট বিলম্ব করবে এবং একটি সেশনে প্রথম ব্যবহারকারীর অ্যাক্টিভিটি পরিলক্ষিত না হওয়া পর্যন্ত সেশনের সময় সীমা শুরু হবে না৷
@@ -2493,17 +2487,6 @@
 <translation id="6943577887654905793">Mac/Linux অভিরুচি নাম:</translation>
 <translation id="69525503251220566">ডিফল্ট সার্চ সরবরাহকারীর জন্য প্যারামিটার ছবি অনুসারে সার্চ বৈশিষ্ট্য প্রদান করছে</translation>
 <translation id="6956272732789158625">কোনো সাইটকে কী তৈরি করা ব্যবহার করতে মঞ্জুরি দিবেন না</translation>
-<translation id="6982028490425791294">
-      নীতিটি 'ট্রু'-তে সেট করা থাকলে <ph name="PRODUCT_NAME" /> Google পরিষেবা (যেমন Google Meet) থেকে WebRTC ইভেন্ট লগ সংগ্রহ, এবং সেই লগ Google-এ আপলোড করতে পারবে।
-
-      নীতিটি 'ফলস'-এ সেট করা থাকলে বা সেট না করা থাকলে, <ph name="PRODUCT_NAME" /> কোনও রকম লগ সংগ্রহ বা আপলোড করতে নাও পারে।
-
-      এই লগ, সময় এবং RTP প্যাকেট পাঠানো ও গ্রহণ করার সাইজের মতো তথ্য, নেটওয়ার্কের কনজেশন সম্পর্কিত মতামত, অডিও এবং ভিডিও ফ্রেমের সময় এবং কোয়ালিটি সম্পর্কিত মেটাডেটা ইত্যাদির মতো তথ্য রাখে। Chrome-এ অডিও এবং ভিডিও কলের সমস্যা ডিবাগিং করার সময় এই তথ্যটি কাজে লাগে, যেমন ব্যান্ডউইথ মূল্যায়নের সমস্যা ইত্যাদি। এই লগে অডিও এবং ভিডিও কলের কন্টেন্ট রাখা হয় না।
-
-      এই ডেটা সংগ্রহ শুধুমাত্র Google Hangouts অথবা Google Meet ইত্যাদির মতো Google-এর ওয়েব পরিষেবা দিয়ে ট্রিগার করা যাবে।
-
-      এই লগ Google পরিষেবার মাধ্যমে সংগৃহীত অন্যান্য লগের সাথে সেশন আইডির দ্বারা কোনও উপায়ে যুক্ত থাকতে পারে; এর লক্ষ্য হল ডিবাগিং সহজ করে তোলা।
-      </translation>
 <translation id="6994082778848658360">দ্বিতীয় পদক্ষেপ প্রমাণীকরণ যদি এই বৈশিষ্ট্যটির সাথে সঙ্গতিপূর্ণ হয়, তাহলে তার জন্য অন-বোর্ড নিরাপদ উপাদান হার্ডওয়্যার কিভাবে ব্যবহার করা হবে, এই নীতি তা নির্দিষ্ট করে। ব্যবহারকারীর শারীরিক উপস্থিতি শনাক্ত করতে মেশিন পাওয়ার বোতাম ব্যবহার করা হয়।
 
       'অক্ষম' বিকল্পটি বেছে নিলে কোনও দ্বিতীয় পদক্ষেপের ব্যবস্থা করা হয় না।
@@ -3448,11 +3431,6 @@
 
           এছাড়া RemoteAccessHostClientDomainList দেখুন।</translation>
 <translation id="9084985621503260744">ভিডিও অ্যাক্টিভিটি পাওয়ার পরিচালনাকে প্রভাবিত করবে কিনা তা নির্দিষ্ট করুন</translation>
-<translation id="9085839450090699752">আপনাকে মিলিসেকেন্ডে, সময় সেট করার অনুমতি দেয়, যার উপর ব্যবহারকারীদের জানানো হয় যে <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" /> ডিভাইসগুলির জন্য এবং ৬০৪৮০০০০০ মিলিসেকেন্ড (এক সপ্তাহ) ব্রাউজারের জন্য ব্যবহৃত হয়।</translation>
 <translation id="9088433379343318874">তত্ত্বাবধানে থাকা ব্যবহারকারী সামগ্রী প্রদানকারী সক্ষম করুন</translation>
 <translation id="9088444059179765143">স্বয়ংক্রিয় সময়াঞ্চল শনাক্তকরণ পদ্ধতি কনফিগার করুন</translation>
 <translation id="9096086085182305205">প্রমাণীকরণ সার্ভার শ্বেত তালিকা</translation>
diff --git a/components/policy/resources/policy_templates_ca.xtb b/components/policy/resources/policy_templates_ca.xtb
index c2e0694..17addb5 100644
--- a/components/policy/resources/policy_templates_ca.xtb
+++ b/components/policy/resources/policy_templates_ca.xtb
@@ -311,7 +311,7 @@
 
       Si s'activa aquesta opció de configuració o no s'hi estableix cap valor, l'usuari podrà controlar el funcionament d'Emplenament automàtic per a les adreces a la IU.</translation>
 <translation id="1960840544413786116">Si es permeten certificats emesos per ancoratges de confiança locals que no tinguin l'extensió subjectAlternativeName</translation>
-<translation id="1962273523772270623">Permet la col·lecció de registres d'esdeveniments WebRTC dels serveis de Google</translation>
+<translation id="1962273523772270623">Permet que es recopilin registres d'esdeveniments WebRTC dels serveis de Google</translation>
 <translation id="1964634611280150550">Mode d'incògnit desactivat</translation>
 <translation id="1964802606569741174">Aquesta política no té cap efecte a l'aplicació YouTube per a Android. Per forçar l'ús del mode de seguretat de YouTube, s'ha de denegar la instal·lació d'aquesta aplicació.</translation>
 <translation id="1969212217917526199">Substitueix les polítiques de compilacions de depuració de l'amfitrió d'accés remot.
@@ -342,11 +342,6 @@
 
           Si no s'estableix aquesta política, s'utilitzaran els quatre esquemes.</translation>
 <translation id="2067011586099792101">Bloqueja l'accés a llocs situats fora de paquets de contingut.</translation>
-<translation id="2070270043919235595">Notifica als usuaris que cal reiniciar <ph name="PRODUCT_NAME" /> per aplicar una actualització pendent.
-
-      Aquesta política activa les notificacions per avisar l'usuari que es recomana o es requereix reiniciar el navegador. Si no s'estableix, <ph name="PRODUCT_NAME" /> fa canvis subtils al seu menú per indicar a l'usuari que cal reiniciar el navegador. Si s'estableix en "Recommended", s'avisa periòdicament l'usuari que es recomana reiniciar el navegador. L'usuari pot ignorar aquest advertiment per posposar el reinici. Si s'estableix en "Required", s'avisa periòdicament l'usuari que el navegador es reiniciarà a la força en finalitzar el període de notificació. La durada predeterminada d'aquest període és de 7 dies i es pot configurar amb la política <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      La sessió de l'usuari es restaura en reiniciar el navegador.</translation>
 <translation id="2073552873076775140">Permet iniciar la sessió a <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Utilitza l'acceleració per maquinari quan estigui disponible</translation>
 <translation id="2077273864382355561">Retard de la desactivació de pantalla quan s'utilitza bateria</translation>
@@ -882,7 +877,6 @@
           Aquesta política és opcional. Si no es configura, no es proporcionarà cap pestanya nova.
 
           La política només s'aplica si la política "DefaultSearchProviderEnabled" està activada.</translation>
-<translation id="3465852069254497664">Notifica a un usuari que es recomana o que cal reiniciar el navegador</translation>
 <translation id="346731943813722404">Permet especificar si els retards de la gestió de l'energia i el límit de la durada de la sessió només s'han d'executar quan l'usuari realitzi la primera acció en una sessió.
 
           Si la política s'estableix com a True, els retards de la gestió de l'energia i el límit de la durada de la sessió no s'executen fins que l'usuari no realitza la primera acció en una sessió.
@@ -1151,15 +1145,15 @@
 
           Si aquesta política es deixa sense establir, s'utilitzarà el valor general predeterminat de la política "DefaultKeygenSetting" (si està configurada) per a tots els llocs web, o bé s'utilitzarà la configuració personal de l'usuari.</translation>
 <translation id="4239720644496144453">La memòria cau no s'utilitza a les aplicacions per a Android. Si diversos usuaris instal·len la mateixa aplicació per a Android, es baixarà de nou en cada cas.</translation>
-<translation id="4243336580717651045">Activa la recollida de dades anònimes amb URL a <ph name="PRODUCT_NAME" /> impedeix que els usuaris puguin canviar aquesta opció.
+<translation id="4243336580717651045">Activa la recollida de dades anonimitzades mitjançant URL amb clau a <ph name="PRODUCT_NAME" /> impedeix que els usuaris puguin canviar aquesta opció.
 
-      La recollida de dades anònimes amb URL envia a Google els URL de pàgines que l'usuari visita per millorar les cerques i la navegació.
+      La recollida de dades anonimitzades mitjançant URL amb clau envia a Google els URL de pàgines que l'usuari visita per millorar les cerques i la navegació.
 
-      Si actives aquesta política, la recollida de dades anònimes amb URL estarà sempre activa.
+      Si actives aquesta política, la recollida de dades anonimitzades mitjançant URL amb clau estarà sempre activa.
 
-      Si desactives aquesta política, la recollida de dades anònimes amb URL no estarà mai activa.
+      Si desactives aquesta política, la recollida de dades anonimitzades mitjançant URL amb clau no estarà mai activa.
 
-      Si aquesta política es deixa sense definir, la recollida de dades anònimes amb URL s'activarà però l'usuari podrà canviar aquesta opció.</translation>
+      Si aquesta política es deixa sense definir, la recollida de dades anonimitzades mitjançant URL amb clau s'activarà però l'usuari podrà canviar aquesta opció.</translation>
 <translation id="4250680216510889253">No</translation>
 <translation id="4261820385751181068">Configuració regional de la pantalla d'inici de sessió del dispositiu</translation>
 <translation id="427220754384423013">Especifica les impressores que un usuari pot fer servir.
@@ -1783,7 +1777,7 @@
           Per bloquejar la pantalla en mode inactiu, us recomanem que activeu el bloqueig de pantalla en mode de suspensió i que configureu <ph name="PRODUCT_OS_NAME" /> perquè se suspengui després del temps d'inactivitat. Aquesta política només s'ha d'utilitzar quan el bloqueig de pantalla s'hagi de produir molt abans que la suspensió o quan no vulgueu emprar la suspensió en mode inactiu.
 
           El valor de la política s'ha d'especificar en mil·lisegons. Els valors es fixen perquè siguin inferiors al temps d'inactivitat.</translation>
-<translation id="6097601282776163274">Activa la recollida de dades anònimes amb URL</translation>
+<translation id="6097601282776163274">Activa la recollida de dades anonimitzades mitjançant URL amb clau</translation>
 <translation id="6111936128861357925">Permet el joc sorpresa del dinosaure</translation>
 <translation id="6114416803310251055">obsolet</translation>
 <translation id="6133088669883929098">Permet que tots els llocs utilitzin la generació de claus</translation>
@@ -1909,9 +1903,9 @@
       Si no s'estableix aquesta política o la llista és buida, es podrà accedir a tots els esquemes a <ph name="PRODUCT_NAME" />.</translation>
 <translation id="6652197835259177259">Configuració dels usuaris gestionats localment</translation>
 <translation id="6658245400435704251">Especifica el nombre de segons fins a què un dispositiu pot retardar aleatòriament la baixada d'una actualització des del moment en què l'actualització es transmet per primera vegada des del servidor. El dispositiu pot esperar una part d'aquest temps en termes de rellotge i la part restant en termes de nombre de comprovacions d'actualitzacions. En qualsevol cas, la dispersió tendeix cap amunt a una quantitat constant de temps, de manera que un dispositiu mai no es quedi encallat mentre espera que es baixi una actualització.</translation>
-<translation id="6665599130599311250">Si aquesta política s'estableix en "false" o es deixa sense establir, la sessió de convidat gestionada funcionarà com es descriu a la pàgina https://support.google.com/chrome/a/answer/3017014, és a dir, com una sessió pública estàndard.
+<translation id="6665599130599311250">Si aquesta política s'estableix en "false" o no s'estableix, la sessió de convidat gestionada funcionarà com es descriu a la pàgina https://support.google.com/chrome/a/answer/3017014, és a dir, com una sessió pública estàndard.
 
-      Si aquesta política s'estableix en "true" o es deixa sense establir, la sessió de convidat gestionada funcionarà com una sessió gestionada i se suprimiran moltes de les restriccions de les sessions públiques normals.
+      Si aquesta política s'estableix en "true", la sessió de convidat gestionada funcionarà com una sessió gestionada i se suprimiran moltes de les restriccions de les sessions públiques normals.
 
       Si aquesta política s'estableix, l'usuari no la podrà canviar ni substituir.</translation>
 <translation id="6665670272107384733">Defineix amb quina freqüència l'usuari ha d'introduir la contrasenya per utilitzar el desbloqueig ràpid</translation>
@@ -2070,17 +2064,6 @@
       Quan la pantalla està a punt d'atenuar-se, el model d'atenuació intel·ligent avalua si cal ajornar l'atenuació de la pantalla. Si l'ajorna, amplia el temps que passa fins que s'atenua la pantalla. En aquest cas, els retards per desactivar la pantalla, bloquejar-la i considerar-la inactiva s'ajusten per mantenir les mateixes distàncies amb el retard per atenuar la pantalla que es van configurar en un principi.
 
       Si aquesta política es defineix en "true" o es deixa sense definir, s'activarà el model d'atenuació intel·ligent i es permetrà que ampliï els temps fins que s'atenua la pantalla. Si aquesta política es defineix en "false", el model d'atenuació intel·ligent no tindrà cap efecte sobre l'atenuació de la pantalla.</translation>
-<translation id="6982028490425791294">
-      Si aquesta política s'estableix en "true", <ph name="PRODUCT_NAME" /> pot col·leccionar registres d'esdeveniments WebRTC dels serveis de Google (p. ex. Google Meet) i pujar-los a Google.
-
-      Si aquesta política s'estableix en "false" o es deixa sense establir, és possible que <ph name="PRODUCT_NAME" /> no col·leccioni ni pengi aquests registres.
-
-      Aquests registres contenen informació com ara l'hora i la mida dels paquets RTP rebuts i enviats, comentaris sobre la congestió de la xarxa, i metadades sobre l'hora i la qualitat dels marcs d'àudio i de vídeo. Aquesta informació resulta útil per depurar problemes de les trucades d'àudio o videotrucades de Chrome, com ara els problemes d'estimació de l'amplada de banda. Aquests registres no inclouen contingut d'àudio ni vídeo de les trucades.
-
-      Aquesta col·lecció de dades només la poden activar els serveis web de Google, com ara Google Hangouts i Google Meet.
-
-      Aquests registres es poden associar, mitjançant un ID de sessió, a altres registres col·leccionats pel servei de Google per tal de facilitar la depuració.
-      </translation>
 <translation id="6994082778848658360">Especifica de quina manera es pot utilitzar el maquinari de l'element de seguretat integrat per proporcionar una autenticació de dos factors si és compatible amb aquesta funció. El botó d'engegada de l'ordinador s'utilitza per detectar la presència física de l'usuari.
 
       Si se selecciona Desactivat, no es proporciona un segon factor.
@@ -2868,11 +2851,6 @@
 <translation id="9035964157729712237">ID de les extensions que s'han d'excloure de la llista negra</translation>
 <translation id="9042911395677044526">Permet aplicar la configuració de la xarxa per usuari a un dispositiu <ph name="PRODUCT_OS_NAME" />. La configuració de la xarxa és una cadena en format JSON, segons la definició del format de la configuració de xarxa oberta que apareix a <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Especifica si l'activitat de vídeo afecta la gestió d'alimentació</translation>
-<translation id="9085839450090699752">Et permet establir el període de temps, en mil·lisegons, durant el qual es notifica als usuaris que cal reiniciar <ph name="PRODUCT_NAME" /> o un dispositiu <ph name="PRODUCT_OS_NAME" /> per aplicar una actualització pendent.
-
-      Durant aquest període de temps, s'informa l'usuari repetidament de la necessitat d'actualitzar el navegador. En dispositius amb <ph name="PRODUCT_OS_NAME" />, es mostra una notificació de reinici a la safata del sistema quan es detecta una actualització. Aquesta notificació canvia de color quan ha transcorregut la meitat del període de notificació i, de nou, quan ha transcorregut el període de notificació complet. En navegadors <ph name="PRODUCT_NAME" />, el menú d'aplicacions canvia un cop transcorregut un terç del període de notificació per indicar que cal dur a terme un reinici. Aquesta notificació canvia de color quan han transcorregut dos terços del període de notificació i, de nou, quan ha transcorregut el període de notificació complet. Les notificacions addicionals que activa la política <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> per a navegadors segueixen aquest mateix patró.
-
-      Si no s'estableix, s'utilitza el període predeterminat de 345600000 mil·lisegons (quatre dies) per a dispositius <ph name="PRODUCT_OS_NAME" /> i de 604800000 mil·lisegons (una setmana) per a navegadors.</translation>
 <translation id="9088433379343318874">Activa el proveïdor de contingut de l'usuari supervisat</translation>
 <translation id="9088444059179765143">Configura el mètode de detecció automàtica de la zona horària</translation>
 <translation id="9096086085182305205">Llista blanca del servidor d'autenticació</translation>
diff --git a/components/policy/resources/policy_templates_cs.xtb b/components/policy/resources/policy_templates_cs.xtb
index 455debf3..2d1e4ae30 100644
--- a/components/policy/resources/policy_templates_cs.xtb
+++ b/components/policy/resources/policy_templates_cs.xtb
@@ -340,11 +340,6 @@
 
           Pokud tuto zásadu nenastavíte, budou se používat všechna čtyři schémata.</translation>
 <translation id="2067011586099792101">Blokování přístupu k webům mimo obsahové balíčky</translation>
-<translation id="2070270043919235595">Oznamovat uživatelům, že je nutné prohlížeč <ph name="PRODUCT_NAME" /> restartovat, aby bylo možné použít aktualizaci čekající na vyřízení.
-
-      Tato zásada povoluje oznámení o tom, že je vyžadován nebo doporučen restart prohlížeče. Pokud není nastavena, <ph name="PRODUCT_NAME" /> uživatele o potřebě restartu informuje prostřednictvím drobných změn v nabídce. Pokud je nastavena na hodnotu Doporučeno, bude se uživateli opakovaně zobrazovat upozornění, že je doporučen restart. Uživatel upozornění může odmítnout a tím restart odložit. Pokud je nastavena na hodnotu Povinné, bude se uživateli opakovaně zobrazovat upozornění, že po uplynutí lhůty pro oznámení bude vynucen restart prohlížeče. Lhůta je ve výchozím nastavení sedm dní a lze ji nakonfigurovat pomocí zásady <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Relace uživatele se po restartu obnoví.</translation>
 <translation id="2073552873076775140">Povolit přihlášení do prohlížeče <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">V případě dostupnosti použít hardwarovou akceleraci</translation>
 <translation id="2077273864382355561">Prodleva vypnutí obrazovky při napájení z baterie</translation>
@@ -884,7 +879,6 @@
           Tato zásada je nepovinná. Pokud ji nenastavíte, žádná stránka nové karty se nezobrazí.
 
           Tato zásada je respektována pouze v případě, že je aktivována zásada DefaultSearchProviderEnabled.</translation>
-<translation id="3465852069254497664">Oznamovat uživateli, že je doporučen nebo vyžadován restart prohlížeče</translation>
 <translation id="346731943813722404">Určuje, zda mají prodlevy systému správy napájení a limit délky relací začít běžet až poté, co je v relaci zaznamenána první aktivita uživatele.
 
           Pokud je tato zásada nastavena na hodnotu True, prodlevy systému správy napájení a limit délky relace začnou běžet až poté, co je v relaci zaznamenána první aktivita uživatele.
@@ -2119,17 +2113,6 @@
 
       Když se má obrazovka ztmavit, chytrý model ztmavování posoudí, zda by se ztmavení obrazovky nemělo odložit. Pokud chytrý model ztmavování ztmavení obrazovky odloží, prodlouží se tím doba do ztmavení obrazovky. Prodlevy vypnutí obrazovky, uzamčení obrazovky a nečinnosti se v tomto případě upraví tak, aby mezi nimi a prodlevou ztmavení zůstala původně nakonfigurovaná doba.
       Pokud je tato zásada nastavená na hodnotu True nebo není nastavená, bude chytrý model ztmavování zapnut a bude mít povoleno prodloužit dobu do ztmavení obrazovky. Pokud je tato zásada nastavená na hodnotu False, chytrý model ztmavování na ztmavení obrazovky nebude mít vliv.</translation>
-<translation id="6982028490425791294">
-      Je-li tato zásada nastavena na hodnotu true, má <ph name="PRODUCT_NAME" /> povoleno shromažďovat protokoly událostí WebRTC ze služeb Google (např. Google Meet) a nahrávat je do Googlu.
-
-      Pokud je tato zásada nastavená na hodnotu false nebo je ponechána nenastavená, prohlížeč <ph name="PRODUCT_NAME" /> takové protokoly shromažďovat ani nahrávat nesmí.
-
-      Tyto protokoly obsahují informace, jako je čas, velikost odeslaných a přijatých paketů RTP, zpětná vazba ohledně zahlcení sítě a metadata ohledně času a kvality snímků zvuku a videa. Tyto informace jsou užitečné k ladění problémů se zvukovými hovory a videohovory v Chromu, jako jsou problémy s odhadem rychlosti připojení apod. Protokoly neobsahují zvukový ani obrazový obsah z hovoru.
-
-      Toto shromažďování dat mohou spustit pouze webové služby Googlu, například Google Hangouts nebo Google Meet.
-
-      Kvůli snazšímu ladění tyto protokoly mohou být prostřednictvím ID relace přidruženy k jiným protokolům shromažďovaným samotnou službou Google.
-      </translation>
 <translation id="6994082778848658360">Udává, jak lze integrovaný bezpečnostní hardwarový prvek používat k dvoufaktorovému ověření, pokud je s touto funkcí kompatibilní. Ke zjištění fyzické přítomnosti uživatele se používá vypínač počítače.
 
       Pokud je vybrána možnost Deaktivováno, druhý faktor není k dispozici.
@@ -2935,11 +2918,6 @@
 <translation id="9035964157729712237">ID rozšíření, která mají být vyňata ze seznamu zakázaných</translation>
 <translation id="9042911395677044526">Umožňuje přenést nastavení sítě, která se uplatní pro jednotlivé uživatele v zařízení se systémem <ph name="PRODUCT_OS_NAME" />. Konfigurace sítě je řetězec ve formátu JSON, který se řídí definicí formátu Open Network Configuration popsanou na stránce <ph name="ONC_SPEC_URL" />.</translation>
 <translation id="9084985621503260744">Určuje, zda aktivita videa ovlivňuje správu napájení</translation>
-<translation id="9085839450090699752">Umožňuje nastavit dobu v milisekundách, po kterou se uživatelům bude zobrazovat oznámení, že je třeba prohlížeč <ph name="PRODUCT_NAME" /> nebo systém <ph name="PRODUCT_OS_NAME" /> restartovat, aby bylo možné nainstalovat nevyřízenou aktualizaci.
-
-      Během této doby bude uživatel opakovaně informován, že je potřeba nainstalovat aktualizaci. Na zařízeních se systémem <ph name="PRODUCT_OS_NAME" /> se oznámení o restartu zobrazuje na hlavním panelu systému, když je zjištěn upgrade. Barva oznámení se změní po uplynutí poloviny lhůty pro oznámení a poté znovu po uplynutí celé lhůty pro oznámení. V prohlížečích <ph name="PRODUCT_NAME" /> se po uplynutí jedné třetiny lhůty pro oznámení změní nabídka aplikace na znamení, že je prohlížeč potřeba aktualizovat. Barva tohoto oznámení se změní po uplynutí dvou třetin lhůty a poté znovu po uplynutí celé lhůty. Další oznámení aktivovaná pomocí zásady <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> pro prohlížeče se řídí stejným časovým plánem.
-
-      Pokud tuto zásadu nenastavíte, použije se pro systém <ph name="PRODUCT_OS_NAME" /> výchozí doba 345 600 000 milisekund (čtyři dny) a pro prohlížeče 604 800 000 milisekund (jeden týden).</translation>
 <translation id="9088433379343318874">Povolit poskytovatele obsahu pro dozorovaného uživatele</translation>
 <translation id="9088444059179765143">Konfigurace metody automatického zjišťování časového pásma</translation>
 <translation id="9096086085182305205">Seznam povolených serverů pro ověřování</translation>
diff --git a/components/policy/resources/policy_templates_da.xtb b/components/policy/resources/policy_templates_da.xtb
index 89ec277..7c7699d 100644
--- a/components/policy/resources/policy_templates_da.xtb
+++ b/components/policy/resources/policy_templates_da.xtb
@@ -177,6 +177,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Bloker for tilføjelse af software fra tredjeparter</translation>
 <translation id="1504431521196476721">Fjernattestering</translation>
+<translation id="1507957856411744193">Hvis politikken er angivet som Sand, opretter <ph name="PRODUCT_NAME" /> forbindelse til Cast-enheder på alle IP-adresser og ikke kun på private adresser af typen RFC1918/RFC4193.
+
+          Hvis politikken er angivet som Falsk, opretter <ph name="PRODUCT_NAME" /> kun forbindelse til Cast-enheder på private adresser af typen RFC1918/RFC4193.
+
+          Hvis politikken ikke er konfigureret, opretter <ph name="PRODUCT_NAME" /> kun forbindelse til Cast-enheder på private adresser af typen RFC1918/RFC4193, medmindre funktionen CastAllowAllIPs er aktiveret.
+
+          Hvis politikken "EnableMediaRouter" er angivet som Falsk, har værdien for denne politik ingen virkning.</translation>
 <translation id="1509692106376861764">Denne politik er trukket tilbage fra og med <ph name="PRODUCT_NAME" /> version 29.</translation>
 <translation id="1514888685242892912">Aktivér <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Tillad, at websites registrerer brugernes fysiske placering</translation>
@@ -350,11 +357,6 @@
 
           Hvis denne politik ikke er angivet, anvendes alle fire skemaer.</translation>
 <translation id="2067011586099792101">Bloker adgangen til websites uden for indholdspakker</translation>
-<translation id="2070270043919235595">Underretter brugeren om, at <ph name="PRODUCT_NAME" /> skal genstartes for at anvende en afventende opdatering.
-
-      Denne politikindstilling aktiverer underretninger, som anbefaler eller kræver, at brugeren genstarter browseren. Hvis politikken ikke angives, indikerer <ph name="PRODUCT_NAME" /> over for brugeren via diskrete ændringer af menuen, at en genstart er nødvendig. Hvis politikken indstilles til "Anbefalet", får brugeren vist en fast advarsel med en anbefaling om, at browseren genstartes. Brugeren kan afvise advarslen for at udskyde genstarten. Hvis politikken er indstillet til "Påkrævet", får brugeren vist en fast advarsel, som indikerer, at der gennemtvinges en genstart af browseren, når underretningsperioden er udløbet. Denne periode er som standard syv dage, og den kan konfigureres via politikindstillingen <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Brugerens session genoprettes efter genstarten.</translation>
 <translation id="2073552873076775140">Tillad login på <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Brug hardwareacceleration, når det er muligt</translation>
 <translation id="2077273864382355561">Skærmslukforsinkelse, når batteriet bruges</translation>
@@ -892,7 +894,6 @@
           Denne politik er valgfri. Hvis den ikke er angivet, leveres siden Ny fane ikke.
 
           Denne politik respekteres kun, hvis politikken 'DefaultSearchProviderEnabled' er aktiveret.</translation>
-<translation id="3465852069254497664">Underret en bruger om, at genstart af browseren anbefales eller påkræves</translation>
 <translation id="346731943813722404">Angiver, om strømstyringsforsinkelser og begrænsning af sessionslængden kun skal begynde at køre, efter den første brugeraktivitet er blevet registreret i en session.
 
           Hvis denne politik er indstillet til Sand, begynder strømstyringsforsinkelser og begrænsing af sessionslængden først at køre, efter den første brugeraktivitet er blevet registreret i en session.
@@ -1949,6 +1950,7 @@
 
       Politikken <ph name="SYNC_DISABLED_POLICY_NAME" /> deaktiverer al datasynkronisering og tilsidesætter RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Filtrér voksenindhold fra på websites på øverste niveau (men ikke integrerede iframes)</translation>
+<translation id="6734521799274931721">Styrer tilgængelighed af fildeling via netværk for Chrome OS</translation>
 <translation id="6735701345096330595">Gennemtving aktivering af stavekontrol af sprog</translation>
 <translation id="673699536430961464">Med denne indstilling har brugerne tilladelse til at skifte mellem Google-konti i browservinduets indholdsområde, når de er logget ind på deres <ph name="PRODUCT_OS_NAME" />-enhed.
 
@@ -2091,17 +2093,6 @@
 
 Når skærmen er ved at blive nedtonet, vurderer den smarte nedtoningsmodel, om nedtoningen af skærmen skal udskydes. Hvis den smarte nedtoningsmodel udskyder nedtoningen af skærmen, forlænges den tid, der går, inden skærmen nedtones. I dette tilfælde justeres skærmlåsen og inaktivitetsforsinkelsen, så de bevarer den samme afstand til skærmnedtoningsforsinkelsen som oprindeligt konfigureret.
 Hvis denne politik er angivet som sand eller ikke angives, aktiveres den smarte nedtoningsmodel, som får tilladelse til at forlænge den tid, der går, inden skærmen nedtones. Hvis denne politik er angivet som falsk, har den smarte nedtoningsmodel ikke indflydelse på skærmnedtoning.</translation>
-<translation id="6982028490425791294">
-      Hvis politikken er angivet som sand, har <ph name="PRODUCT_NAME" /> tilladelse til at indsamle WebRTC-hændelseslogfiler fra Google-tjenester (f.eks. Google Meet) og uploade de pågældende logfiler til Google.
-
-      Hvis politikken er angivet som falsk eller ikke er angivet, må <ph name="PRODUCT_NAME" /> ikke indsamle eller uploade sådanne logfiler.
-
-      Disse logfiler indeholder visse oplysninger, bl.a. tidspunkt for og størrelsen på sendte og modtagne RTP-pakker, feedback om belastning af netværket samt metadata om varigheden og kvaliteten af lyd- og videorammer. Disse oplysninger er nyttige i forbindelse med fejretning af problemer med lyd- og videoopkald i Chrome, f.eks. problemer med vurdering af båndbredde. Logfilerne omfatter ikke lyd- eller videoindhold fra opkald.
-
-      Denne dataindsamling kan kun aktiveres af Google-webtjenester såsom Google Hangouts eller Google Meet.
-
-      Disse logfiler kan ved hjælp af et sessions-id knyttes til andre logfiler, der er indsamlet af selve Google-tjenesten. Dette kan gøre fejlretningen nemmere.
-      </translation>
 <translation id="6994082778848658360">Angiver, hvordan det sikre element, der er indbygget i hardwaren, kan bruges til at levere godkendelse med sekundær faktor, hvis det er kompatibelt med denne funktion. Maskinens afbryderknap bruges til at fastslå brugerens fysiske tilstedeværelse.
 
       Hvis "Deaktiveret" er valgt, leveres der ingen sekundær faktor.
@@ -2887,11 +2878,6 @@
 <translation id="9035964157729712237">Udvidelses-id'er, der skal udelades fra sortlisten</translation>
 <translation id="9042911395677044526">Tillader, at netværkskonfigurationen gøres gældende pr. bruger til en <ph name="PRODUCT_OS_NAME" />-enhed. Netværkskonfigurationen er en JSON-formateret streng, sådan som den er defineret af formatet Open Network Configuration som beskrevet på <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Angiv, om videoaktiviteten påvirker strømstyringen</translation>
-<translation id="9085839450090699752">Giver dig mulighed for at angive et tidsrum i millisekunder, hvor brugerne underrettes om, at <ph name="PRODUCT_NAME" /> skal startes igen, eller at en <ph name="PRODUCT_OS_NAME" />-enhed skal genstartes for at anvende en afventende opdatering.
-
-      I dette tidsrum informeres brugeren gentagne gange om nødvendigheden af en opdatering. Når der registreres en opgradering til <ph name="PRODUCT_OS_NAME" />-enheder, vises en underretning om genstart i systembakken. Underretningen skifter farve, når halvdelen af underretningsperioden er gået, og igen når underretningsperioden er udløbet. For <ph name="PRODUCT_NAME" />-browsere ændres appmenuen for at vise, at genstart er nødvendig, når en tredjedel af underretningsperioden er gået. Underretningen skifter farve, når to tredjedele af underretningsperioden er gået, og igen når hele underretningsperioden er udløbet. De yderligere underretninger, der aktiveres af politikken <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> for browsere, følger samme tidsplan.
-
-      Hvis den ikke er angivet, anvendes standardtidsrummet på 345600000 millisekunder (fire dage) for <ph name="PRODUCT_OS_NAME" />-enheder og 604800000 millisekunder (en uge) for browsere.</translation>
 <translation id="9088433379343318874">Aktivér indholdsudbyderen for den administrerede bruger</translation>
 <translation id="9088444059179765143">Konfigurer metoden for automatisk registrering af tidszone.</translation>
 <translation id="9096086085182305205">Hvidliste til godkendelse af server</translation>
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 525a484..33890d4 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -181,6 +181,13 @@
 <translation id="1484146587843605071"><ph name="PRODUCT_NAME" /> umgeht für die Liste der hier angegebenen Hosts alle Proxys. Diese Richtlinie tritt nur dann in Kraft, wenn Sie bei "Auswählen, wie Proxyserver-Einstellungen angegeben werden" manuelle Proxy-Einstellungen angegeben haben. Sie sollten diese Richtlinie nicht konfigurieren, wenn Sie sich für eine andere Methode zur Festlegung der Proxy-Richtlinien entschieden haben. Ausführliche Beispiele erhalten Sie unter <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Blockieren von Codeeinschleusungen durch Drittanbieter-Software aktivieren</translation>
 <translation id="1504431521196476721">Remote-Bestätigung</translation>
+<translation id="1507957856411744193">Wenn diese Richtlinie auf "true" gesetzt ist, stellt <ph name="PRODUCT_NAME" /> eine Verbindung zu Übertragungsgeräten unter allen IP-Adressen her, nicht nur zu jenen unter privaten RFC1918- oder RFC4193-Adressen.
+
+Wenn diese Richtlinie auf "false" gesetzt ist, stellt <ph name="PRODUCT_NAME" /> nur eine Verbindung zu Übertragungsgeräten unter privaten RFC1918- und RFC4193-Adressen her.
+
+Wenn diese Richtlinie nicht festgelegt und die Funktion "CastAllowAllIPs" deaktiviert ist, stellt <ph name="PRODUCT_NAME" /> nur eine Verbindung zu Übertragungsgeräten unter privaten RFC1918- und RFC4193-Adressen her.
+
+Wenn die Richtlinie "EnableMediaRouter" auf "false" gesetzt ist, hat der Wert dieser Richtlinie keine Wirkung.</translation>
 <translation id="1509692106376861764">Diese Richtlinie wird ab <ph name="PRODUCT_NAME" />-Version 29 nicht mehr verwendet.</translation>
 <translation id="1514888685242892912"><ph name="PRODUCT_NAME" /> aktivieren</translation>
 <translation id="1522425503138261032">Ermittlung des physischen Standorts des Nutzers durch Websites zulassen</translation>
@@ -355,11 +362,6 @@
 
           Wenn diese Richtlinie nicht konfiguriert ist, kommen alle vier Schemas zum Einsatz.</translation>
 <translation id="2067011586099792101">Zugriff auf Websites außerhalb von Inhaltspaketen blockieren</translation>
-<translation id="2070270043919235595">Nutzer benachrichtigen, dass <ph name="PRODUCT_NAME" /> neu gestartet werden muss, um ein ausstehendes Update durchzuführen.
-
-      Mit dieser Richtlinieneinstellung kann der Nutzer durch Benachrichtigungen informiert werden, dass ein Neustart des Browsers empfohlen wird oder erforderlich ist. Wenn die Richtlinie nicht festgelegt ist, wird dem Nutzer in <ph name="PRODUCT_NAME" /> durch kleinere Menüänderungen angezeigt, dass ein Neustart erforderlich ist. Wenn die Richtlinie auf "Recommended" (Empfohlen) festgelegt ist, wird dem Nutzer eine wiederkehrende Warnung angezeigt, dass ein Neustart empfohlen wird. Der Nutzer kann diese Warnung schließen, um den Neustart zu verschieben. Wenn die Richtlinie auf "Required" (Erforderlich) festgelegt ist, wird dem Nutzer eine wiederkehrende Warnung angezeigt, dass nach Ablauf des Benachrichtigungszeitraums ein Neustart des Browsers erzwungen wird. Dieser Zeitraum beträgt standardmäßig sieben Tage und kann über die <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />-Richtlinieneinstellung konfiguriert werden.
-
-      Nach dem Neustart wird die Sitzung des Nutzers wiederhergestellt.</translation>
 <translation id="2073552873076775140">Anmeldung in <ph name="PRODUCT_NAME" /> erlauben</translation>
 <translation id="2077129598763517140">Hardwarebeschleunigung verwenden, falls verfügbar</translation>
 <translation id="2077273864382355561">Verzögerung für die Bildschirmabschaltung im Akkubetrieb</translation>
@@ -894,7 +896,6 @@
           Diese Richtlinie ist optional. Ist sie nicht festgelegt, wird keine "Neuer Tab"-Seite bereitgestellt.
 
           Die Richtlinie wird nur berücksichtigt, wenn die Richtlinie "DefaultSearchProviderEnabled" aktiviert ist.</translation>
-<translation id="3465852069254497664">Nutzer benachrichtigen, dass ein Neustart des Browsers empfohlen wird oder erforderlich ist</translation>
 <translation id="346731943813722404">Damit legen Sie fest, ob die erste Aktivität des Nutzers in einer Sitzung als Ausgangspunkt für Verzögerungen beim Energiesparmodus und Begrenzungen der Sitzungslänge verwendet werden soll.
           Wenn diese Richtlinie auf "true" gesetzt ist, wie die erste Aktivität des Nutzers in einer Sitzung als Ausgangspunkt für Verzögerungen beim Energiesparmodus und Begrenzungen der Sitzungslänge verwendet.
 
@@ -1947,6 +1948,7 @@
 
       Durch die Richtlinie <ph name="SYNC_DISABLED_POLICY_NAME" /> wird die gesamte Datensynchronisierung deaktiviert und somit RoamingProfileSupportEnabled überschrieben.</translation>
 <translation id="6731757988219967594">Websites auf oberster Ebene (aber nicht eingebettete iFrames) mit Inhalten nur für Erwachsene filtern</translation>
+<translation id="6734521799274931721">Steuert die Verfügbarkeit von Netzwerkfreigaben unter Chrome OS</translation>
 <translation id="6735701345096330595">Aktivierung von Sprachen für die Rechtschreibprüfung erzwingen</translation>
 <translation id="673699536430961464">Mit dieser Einstellung können Nutzer nach der Anmeldung auf ihrem <ph name="PRODUCT_OS_NAME" />-Gerät im Inhaltsbereich des Browserfensters zwischen Google-Konten wechseln.
 
@@ -2097,17 +2099,6 @@
 
       Kurz vor dem Dimmen des Bildschirms prüft das intelligente Dimmmodell, ob der Vorgang verzögert werden sollte. Wenn das Dimmen des Bildschirms durch das Modell verzögert wird, wird damit der Zeitraum verlängert. In diesem Fall werden die Verzögerungen für das Ausschalten des Bildschirms, die Bildschirmsperre und die Inaktivität entsprechend angepasst, um die ursprünglich konfigurierten Abstände beizubehalten.
       Ist die Richtlinie auf "true" festgelegt oder nicht konfiguriert, wird das intelligente Dimmmodell aktiviert und der Zeitraum bis zum Dimmen des Bildschirms kann durch das Modell verlängert werden. Wenn die Richtlinie auf "false" festgelegt ist, wird das Dimmen des Bildschirms durch das intelligente Dimmmodell nicht beeinflusst.</translation>
-<translation id="6982028490425791294">
-      Wenn diese Richtlinie auf "true" gesetzt ist, darf <ph name="PRODUCT_NAME" /> WebRTC-Ereignisprotokolle aus Google-Diensten (z. B. Google Meet) speichern und die Protokolle bei Google hochladen.
-
-      Ist die Richtlinie auf "false" gesetzt oder nicht festgelegt, darf <ph name="PRODUCT_NAME" /> solche Protokolle nicht speichern oder hochladen.
-
-      Diese Protokolle enthalten z. B. Informationen dazu, wann RTP-Pakete gesendet und empfangen wurden und welche Größe sie haben, außerdem Feedback zur Auslastung des Netzwerks und Metadaten zur Länge und Qualität von Audio- und Videoframes. Diese Informationen können helfen, Probleme bei Audio- und Videoanrufen in Chrome zu lösen – etwa wenn die Bandbreite nicht geschätzt werden kann. Die Protokolle enthalten keine Audio- oder Videoinhalte aus dem Anruf.
-
-      Das Erfassen dieser Daten kann nur von den Google-Webdiensten ausgelöst werden, etwa von Google Hangouts oder Google Meet.
-
-      Diese Protokolle können anhand einer Sitzungs-ID mit anderen Protokollen verknüpft sein, die vom Google-Dienst selbst erstellt wurden. Dies dient dazu, Fehler leichter zu beheben.
-      </translation>
 <translation id="6994082778848658360">Hiermit wird angegeben, wie die integrierte Secure Element-Hardware zur Zwei-Faktor-Authentifizierung verwendet werden kann, wenn sie mit dieser Funktion kompatibel ist. Mithilfe der Ein-/Aus-Taste des Geräts wird die Anwesenheit des Nutzers ermittelt.
 
       Wenn "Deaktiviert" ausgewählt ist, steht kein zweiter Authentifizierungsfaktor zur Verfügung.
@@ -2903,11 +2894,6 @@
 <translation id="9035964157729712237">Aus der schwarzen Liste auszuschließende Erweiterungs-IDs</translation>
 <translation id="9042911395677044526">Ermöglicht das Übernehmen einer per Push übertragenen Netzwerkkonfiguration pro Nutzer für ein <ph name="PRODUCT_OS_NAME" />-Gerät. Die Netzwerkkonfiguration ist ein JSON-formatierter String, der den Open Network Configuration-Vorgaben unter <ph name="ONC_SPEC_URL" /> entspricht.</translation>
 <translation id="9084985621503260744">Angaben zum Einfluss von Videoaktivitäten auf den Energiesparmodus</translation>
-<translation id="9085839450090699752">Mit dieser Richtlinie können Sie den Zeitraum in Millisekunden festlegen, in dem Nutzer darüber benachrichtigt werden, dass <ph name="PRODUCT_NAME" /> oder ein <ph name="PRODUCT_OS_NAME" />-Gerät zum Durchführen eines ausstehenden Updates neu gestartet werden muss.
-
-      In diesem Zeitraum wird der Nutzer wiederholt darüber informiert, dass ein Update erforderlich ist. Auf <ph name="PRODUCT_OS_NAME" />-Geräten erscheint in der Taskleiste eine Neustartbenachrichtigung, wenn ein Upgrade gefunden wird. Die Farbe dieser Benachrichtigung ändert sich, sobald die Hälfte des Benachrichtigungszeitraums vorüber ist. Sie ändert sich noch einmal, wenn der gesamte Benachrichtigungszeitraum verstrichen ist. In <ph name="PRODUCT_NAME" />-Browsern ändert sich das App-Menü, sobald ein Drittel des Benachrichtigungszeitraums vorüber ist, um anzuzeigen, dass ein Neustart nötig ist. Die Farbe dieser Benachrichtigung ändert sich, sobald zwei Drittel des Benachrichtigungszeitraums vergangen sind. Sie ändert sich noch einmal, wenn der gesamte Benachrichtigungszeitraum verstrichen ist. Für die zusätzlichen Benachrichtigungen, die über die Richtlinie "<ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" />" für Browser aktiviert werden, gilt derselbe Zeitplan.
-
-      Wenn nichts festgelegt ist, wird für <ph name="PRODUCT_OS_NAME" />-Geräte der Standardzeitraum von 345.600.000 Millisekunden (vier Tagen) und für Browser ein Zeitraum von 604.800.000 Millisekunden (einer Woche) verwendet.</translation>
 <translation id="9088433379343318874">Contentanbieter für betreute Nutzer aktivieren</translation>
 <translation id="9088444059179765143">Methode für die automatische Erkennung der Zeitzone konfigurieren</translation>
 <translation id="9096086085182305205">Weiße Liste für Authentifizierungsserver</translation>
diff --git a/components/policy/resources/policy_templates_el.xtb b/components/policy/resources/policy_templates_el.xtb
index 2ddac28..9f6d91f 100644
--- a/components/policy/resources/policy_templates_el.xtb
+++ b/components/policy/resources/policy_templates_el.xtb
@@ -367,11 +367,6 @@
 
           Αν αυτή η πολιτική δεν καθοριστεί, θα χρησιμοποιηθούν και τα τέσσερα πρωτόκολλα.</translation>
 <translation id="2067011586099792101">Να αποκλείεται η πρόσβαση σε ιστότοπους εκτός των πακέτων περιεχομένου</translation>
-<translation id="2070270043919235595">Ειδοποιήστε τους χρήστες ότι θα πρέπει να γίνει επανεκκίνηση του <ph name="PRODUCT_NAME" />, προκειμένου να εφαρμοστεί μια ενημέρωση που είναι σε εκκρεμότητα.
-
-      Αυτή η ρύθμιση πολιτικής επιτρέπει στις ειδοποιήσεις να ενημερώνουν τον χρήστη ότι συνιστάται ή απαιτείται επανεκκίνηση του προγράμματος περιήγησης. Εάν δεν έχει ρυθμιστεί, το <ph name="PRODUCT_NAME" /> υποδεικνύει στον χρήστη ότι απαιτείται επανεκκίνηση μέσω ανεπαίσθητων αλλαγών στο μενού του. Εάν έχει οριστεί ως "Συνιστάται", θα εμφανίζεται μια επαναλαμβανόμενη προειδοποίηση στον χρήστη, η οποία θα τον ενημερώνει ότι συνιστάται επανεκκίνηση. Ο χρήστης μπορεί να παραβλέψει αυτήν την προειδοποίηση, ούτως ώστε να καθυστερήσει την επανεκκίνηση. Εάν έχει οριστεί ως "Απαιτείται", θα εμφανίζεται μια επαναλαμβανόμενη προειδοποίηση στον χρήστη, η οποία θα υποδεικνύει ότι θα πραγματοποιηθεί αναγκαστική επανεκκίνηση του προγράμματος περιήγησης μόλις παρέλθει η περίοδος της ειδοποίησης. Αυτή η περίοδος έχει διάρκεια επτά ημερών από προεπιλογή και μπορεί να διαμορφωθεί μέσω της ρύθμισης της πολιτικής <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Η περίοδος λειτουργίας του χρήστη αποκαθίσταται μετά την επανεκκίνηση.</translation>
 <translation id="2073552873076775140">Επιτρέπει τη σύνδεση στο <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Χρήση της επιτάχυνσης υλικού όταν είναι διαθέσιμη</translation>
 <translation id="2077273864382355561">Καθυστέρηση απενεργοποίησης οθόνης κατά τη λειτουργία με μπαταρία</translation>
@@ -930,7 +925,6 @@
           Αυτή η πολιτική είναι προαιρετική. Αν δεν οριστεί, δεν θα δοθεί σελίδα "Νέα καρτέλα".
 
           Αυτή η πολιτική ισχύει μόνο όταν είναι ενεργή η πολιτική "DefaultSearchProviderEnabled".</translation>
-<translation id="3465852069254497664">Ειδοποίηση προς κάποιον χρήστη ότι συνιστάται ή απαιτείται επανεκκίνηση ενός προγράμματος περιήγησης</translation>
 <translation id="346731943813722404">Καθορίστε εάν οι καθυστερήσεις διαχείρισης ενέργειας και το όριο διάρκειας της περιόδου σύνδεσης, θα πρέπει να ξεκινούν αφού σημειωθεί η πρώτη δραστηριότητα χρήστη σε μια περίοδο σύνδεσης.
 
           Εάν αυτή η πολιτική οριστεί αληθής, η εκτέλεση των καθυστερήσεων διαχείρισης ενέργειας και του ορίου διάρκειας της περιόδου σύνδεσης δεν ξεκινά προτού σημειωθεί η πρώτη δραστηριότητα χρήστη σε μια περίοδο σύνδεσης.
@@ -2179,17 +2173,6 @@
 
       Όταν πρόκειται να μειωθεί η φωτεινότητα της οθόνης, το μοντέλο έξυπνης μείωσης φωτεινότητας αξιολογεί εάν θα πρέπει να απενεργοποιηθεί η μείωση φωτεινότητας της οθόνης. Εάν το μοντέλο έξυπνης μείωσης φωτεινότητας απενεργοποιήσει τη μείωση φωτεινότητας της οθόνης, επεκτείνει αποτελεσματικά τον χρόνο μέχρι τη μείωση φωτεινότητας της οθόνης. Σε αυτήν την περίπτωση, η απενεργοποίηση οθόνης, το κλείδωμα οθόνης και οι καθυστερήσεις αδράνειας προσαρμόζονται προκειμένου να διατηρηθούν οι ίδιες αποστάσεις από την καθυστέρηση μείωσης φωτεινότητας οθόνης σε σχέση με την αρχική διαμόρφωση.
       Εάν αυτή η πολιτική οριστεί ως Αληθής ή δεν οριστεί, το μοντέλο έξυπνης μείωσης φωτεινότητας θα ενεργοποιηθεί και θα επιτρέπεται να επεκτείνει τον χρόνο μέχρι τη μείωση φωτεινότητας οθόνης. Εάν αυτή η πολιτική οριστεί ως Ψευδής, το μοντέλο έξυπνης μείωσης φωτεινότητας δεν θα επηρεάσει τη μείωση φωτεινότητας οθόνης.</translation>
-<translation id="6982028490425791294">
-      Εάν η πολιτική οριστεί ως "αληθής", επιτρέπεται στο <ph name="PRODUCT_NAME" /> η συλλογή αρχείων καταγραφής συμβάντων WebRTC από υπηρεσίες Google (π.χ. το Google Meet) και η μεταφόρτωση αυτών των αρχείων καταγραφής στο Google.
-
-      Εάν η πολιτική οριστεί ως "ψευδής" ή δεν οριστεί, το <ph name="PRODUCT_NAME" /> δεν θα μπορεί να συλλέγει ή να ανεβάζει αρχεία καταγραφής αυτού του τύπου.
-
-      Αυτά τα αρχεία καταγραφής περιέχουν πληροφορίες όπως την ώρα και το μέγεθος των πακέτων RTP που έχουν σταλεί και ληφθεί, σχόλια σχετικά με τη συμφόρηση του δικτύου και μεταδεδομένα σχετικά με την ώρα και την ποιότητα των πλαισίων βίντεο και ήχου. Αυτές οι πληροφορίες είναι χρήσιμες κατά τον εντοπισμό και τη διόρθωση προβλημάτων ηχητικών κλήσεων και βιντεοκλήσεων στο Chrome, όπως προβλημάτων σχετικά με εκτιμήσεις εύρους ζώνης, κ.λπ. Τα αρχεία καταγραφής δεν περιέχουν περιεχόμενα βίντεο ή ήχου από την κλήση.
-
-      Αυτή η συλλογή δεδομένων μπορεί να ενεργοποιηθεί μόνο από τις υπηρεσίες ιστού της Google, όπως το Google Hangouts ή το Google Meet.
-
-      Αυτά τα αρχεία καταγραφής μπορεί να συσχετίζονται μέσω αναγνωριστικού περιόδου σύνδεσης με άλλα αρχεία καταγραφής που συλλέγονται από την ίδια την υπηρεσία Google. Αυτό έχει ως στόχο τη διευκόλυνση του εντοπισμού και της διόρθωσης σφαλμάτων.
-      </translation>
 <translation id="6994082778848658360">Καθορίζει τον τρόπο με τον οποίο ο ενσωματωμένος εξοπλισμός ασφαλούς στοιχείου μπορεί να χρησιμοποιηθεί για την παροχή ελέγχου ταυτότητας δευτερεύοντα παράγοντα εάν είναι συμβατός με αυτήν τη λειτουργία. Το κουμπί λειτουργίας της συσκευής χρησιμοποιείται για τον εντοπισμό της φυσικής παρουσίας του χρήστη.
 
       Εάν οριστεί η επιλογή "Απενεργοποιημένο", δεν παρέχεται κανένας δευτερεύων παράγοντας.
@@ -3034,11 +3017,6 @@
 <translation id="9035964157729712237">Αναγνωριστικά επέκτασης για εξαίρεση από τη λίστα αποκλεισμένων</translation>
 <translation id="9042911395677044526">Επιτρέπει την προώθηση της διαμόρφωσης δικτύου για την εφαρμογή ανά χρήστη σε μια συσκευή <ph name="PRODUCT_OS_NAME" />. Η διαμόρφωση δικτύου είναι μια συμβολοσειρά με μορφοποίηση JSON, όπως καθορίζεται από την Ανοιχτή μορφή διαμόρφωσης δικτύου που περιγράφεται στο <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Καθορίζει εάν η δραστηριότητα βίντεο επηρεάζει τη διαχείριση ηλεκτρικής ενέργειας</translation>
-<translation id="9085839450090699752">Σας επιτρέπει να ορίσετε τη χρονική περίοδο, σε χιλιοστά του δευτερολέπτου, κατά τη διάρκεια της οποίας οι χρήστες ειδοποιούνται ότι το <ph name="PRODUCT_NAME" /> πρέπει να επανεκκινηθεί ή ότι η συσκευή <ph name="PRODUCT_OS_NAME" /> πρέπει να επανεκκινηθεί προκειμένου να εφαρμοστεί μια ενημέρωση που είναι σε εκκρεμότητα.
-
-      Κατά τη διάρκεια αυτής της χρονικής περιόδου, ο χρήστης θα ενημερώνεται επανειλημμένως ότι απαιτείται ενημέρωση. Για συσκευές <ph name="PRODUCT_OS_NAME" />, εμφανίζεται μια ειδοποίηση επανεκκίνησης στην περιοχή ειδοποιήσεων, μόλις εντοπιστεί κάποια αναβάθμιση. Αυτή η ειδοποίηση αλλάζει χρώμα μόλις παρέλθει το πρώτο μισό της περιόδου ειδοποίησης και έπειτα αλλάζει χρώμα ξανά μόλις παρέλθει ολόκληρη η περίοδος ειδοποίησης. Για προγράμματα περιήγησης <ph name="PRODUCT_NAME" />, το μενού εφαρμογών αλλάζει για να υποδείξει ότι απαιτείται επανεκκίνηση μόλις παρέλθει το ένα τρίτο της περιόδου ειδοποίησης. Αυτή η ειδοποίηση αλλάζει χρώμα μόλις παρέλθουν τα δύο τρίτα της περιόδου ειδοποίησης και έπειτα αλλάζει χρώμα ξανά μόλις παρέλθει η πλήρης περίοδος ειδοποίησης. Οι επιπλέον ειδοποιήσεις που ενεργοποιούνται από την πολιτική <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> για προγράμματα περιήγησης ακολουθούν το ίδιο χρονοδιάγραμμα.
-
-      Εάν δεν οριστεί, η προεπιλεγμένη περίοδος των 345.600.000 χιλιοστών του δευτερολέπτου (τέσσερις ημέρες) χρησιμοποιείται για συσκευές <ph name="PRODUCT_OS_NAME" /> και η περίοδος των 604.800.000 χιλιοστών του δευτερολέπτου (μία εβδομάδα) χρησιμοποιείται για προγράμματα περιήγησης.</translation>
 <translation id="9088433379343318874">Ενεργοποίηση του εποπτευόμενου παρόχου περιεχομένου χρήστη</translation>
 <translation id="9088444059179765143">Διαμόρφωση της μεθόδου αυτόματου εντοπισμού ζώνης ώρας</translation>
 <translation id="9096086085182305205">Λίστα επιτρεπόμενων διακομιστή ελέγχου ταυτότητας</translation>
diff --git a/components/policy/resources/policy_templates_en-GB.xtb b/components/policy/resources/policy_templates_en-GB.xtb
index 8e5eb5b..f1a7edf 100644
--- a/components/policy/resources/policy_templates_en-GB.xtb
+++ b/components/policy/resources/policy_templates_en-GB.xtb
@@ -191,6 +191,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Enable third-party software injection blocking</translation>
 <translation id="1504431521196476721">Remote Attestation</translation>
+<translation id="1507957856411744193">If this policy is set to true, <ph name="PRODUCT_NAME" /> will connect to Cast devices on all IP addresses, not just RFC1918/RFC4193 private addresses.
+
+          If this policy is set to false, <ph name="PRODUCT_NAME" /> will connect to Cast devices on RFC1918/RFC4193 private addresses only.
+
+          If this policy is not set, <ph name="PRODUCT_NAME" /> will connect to Cast devices on RFC1918/RFC4193 private addresses only, unless the CastAllowAllIPs feature is enabled.
+
+          If the policy 'EnableMediaRouter' is set to false, then this policy's value would have no effect.</translation>
 <translation id="1509692106376861764">This policy has been retired as of <ph name="PRODUCT_NAME" /> version 29.</translation>
 <translation id="1514888685242892912">Enable <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Allow sites to track the users' physical location</translation>
@@ -370,11 +377,6 @@
 
           If this policy is left unset, all four schemes will be used.</translation>
 <translation id="2067011586099792101">Block access to sites outside of content packs</translation>
-<translation id="2070270043919235595">Notify users that <ph name="PRODUCT_NAME" /> must be relaunched to apply a pending update.
-
-      This policy setting enables notifications to inform the user that a browser relaunch is recommended or required. If not set, <ph name="PRODUCT_NAME" /> indicates to the user that a relaunch is needed via subtle changes to its menu. If set to 'Recommended', a recurring warning will be shown to the user that a relaunch is recommended. The user can dismiss this warning to defer the relaunch. If set to 'Required', a recurring warning will be shown to the user indicating that a browser relaunch will be forced once the notification period passes. This period is seven days by default, and may be configured via the <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> policy setting.
-
-      The user's session is restored following the relaunch.</translation>
 <translation id="2073552873076775140">Allow sign-in to <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Use hardware acceleration when available</translation>
 <translation id="2077273864382355561">Screen off delay when running on battery power</translation>
@@ -934,7 +936,6 @@
           This policy is optional. If not set, no new tab page will be provided.
 
           This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
-<translation id="3465852069254497664">Notify a user that a browser relaunch is recommended or required</translation>
 <translation id="346731943813722404">Specifies whether power management delays and the session length limit should only start running after the first user activity has been observed in a session.
 
           If this policy is set to True, power management delays and the session length limit do not start running until after the first user activity has been observed in a session.
@@ -2037,6 +2038,7 @@
 
       The <ph name="SYNC_DISABLED_POLICY_NAME" /> policy disables all data synchronisation, overriding RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Filter top-level sites (but not embedded iframes) for adult content</translation>
+<translation id="6734521799274931721">Controls Network File Shares for ChromeOS availability</translation>
 <translation id="6735701345096330595">Force enable spellcheck languages</translation>
 <translation id="673699536430961464">This setting allows users to switch between Google Accounts within the content area of their browser window after they sign in to their <ph name="PRODUCT_OS_NAME" /> device.
 
@@ -2188,17 +2190,6 @@
 
       When the screen is about to be dimmed, the smart dim model evaluates if dimming the screen should be deferred. If the smart dim model defers dimming the screen, it effectively extends the time until the screen is dimmed. In this case, the screen off, screen lock and idle delays get adjusted to maintain the same distances from the screen dim delay as originally configured.
       If this policy is set to True or left not set, the smart dim model will be enabled and allowed to extend the time until the screen is dimmed. If this policy is set to False, the smart dim model will not influence screen dimming.</translation>
-<translation id="6982028490425791294">
-      If the policy is set to true, <ph name="PRODUCT_NAME" /> is allowed to collect WebRTC event logs from Google services (e.g. Google Meet), and upload those logs to Google.
-
-      If the policy is set to false, or is unset, <ph name="PRODUCT_NAME" /> may not collect nor upload such logs.
-
-      These logs contain information, such as the time and size of sent and received RTP packets, feedback about congestion on the network and metadata about time and quality of audio and video frames. This information is helpful when debugging issues with audio or video calls in Chrome, such as bandwidth estimation issues, etc. The logs do not contain audio or video contents from the call.
-
-      This data collection can only be triggered by Google's web services, such as Google Hangouts or Google Meet.
-
-      These logs may be associated, by means of a session ID, with other logs collected by the Google service itself; this is intended to make debugging easier.
-      </translation>
 <translation id="6994082778848658360">Specifies how the on-board secure element hardware can be used to provide a second-factor authentication if it is compatible with this feature. The machine power button is used to detect the user physical presence.
 
       If 'Disabled' is selected, no second factor is provided.
@@ -3039,11 +3030,6 @@
 <translation id="9035964157729712237">Extension IDs to exempt from the blacklist</translation>
 <translation id="9042911395677044526">Allows pushing network configuration to be applied per-user to a <ph name="PRODUCT_OS_NAME" /> device. The network configuration is a JSON-formatted string as defined by the Open Network Configuration format described at <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Specify whether video activity affects power management</translation>
-<translation id="9085839450090699752">Allows you to set the time period, in milliseconds, over which users are notified that <ph name="PRODUCT_NAME" /> must be relaunched or that a <ph name="PRODUCT_OS_NAME" /> device must be restarted to apply a pending update.
-
-      Over this time period, the user will be informed repeatedly of the need for an update. For <ph name="PRODUCT_OS_NAME" /> devices, a restart notification appears in the system tray when an upgrade is detected. This notification changes colour once half of the notification period passes, and again once the full notification period has passed. For <ph name="PRODUCT_NAME" /> browsers, the app menu changes to indicate that a relaunch is needed once one third of the notification period passes. This notification changes colour once two thirds of the notification period passes, and again once the full notification period has passed. The additional notifications enabled by the <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> policy for browsers follow this same schedule.
-
-      If not set, the default period of 345600000 milliseconds (four days) is used for <ph name="PRODUCT_OS_NAME" /> devices and 604800000 milliseconds (one week) for browsers.</translation>
 <translation id="9088433379343318874">Enable the supervised user content provider</translation>
 <translation id="9088444059179765143">Configure the automatic timezone detection method</translation>
 <translation id="9096086085182305205">Authentication server whitelist</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index ac582b6..147e9426 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -361,11 +361,6 @@
 
           Si esta política no se configura, se usarán los cuatro esquemas.</translation>
 <translation id="2067011586099792101">Bloquea el acceso a sitios fuera de los paquetes de contenido.</translation>
-<translation id="2070270043919235595">Notifica a los usuarios que deben reiniciar <ph name="PRODUCT_NAME" /> para aplicar una actualización pendiente.
-
-      Esta configuración de la política habilita notificaciones para informarle al usuario que se recomienda o es obligatorio realizar un reinicio. Si no se establece, <ph name="PRODUCT_NAME" /> implementará cambios sutiles en el menú para indicarle al usuario que se necesita llevar a cabo el reinicio. Si se establece como "Recomendado", el usuario verá una advertencia recurrente con una recomendación para hacerlo. El usuario puede omitir esta advertencia para posponer el reinicio. Si se establece como "Obligatorio", se le mostrará una advertencia recurrente al usuario para indicarle que el navegador se reiniciará de manera forzada una vez que finalice un período específico. De forma predeterminada, este período es de siete días y se puede configurar a través de la configuración de política de <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Después del reinicio, se restablecerá la sesión del usuario.</translation>
 <translation id="2073552873076775140">Permitir el acceso a <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Usar aceleración de hardware cuando esté disponible</translation>
 <translation id="2077273864382355561">Demora de pantalla apagada con batería</translation>
@@ -895,7 +890,6 @@
           Esta política es opcional. Si no se establece, no se mostrará una página Nueva pestaña.
 
           Esta política solo se respeta si está habilita la política "DefaultSearchProviderEnabled".</translation>
-<translation id="3465852069254497664">Notificar a un usuario que se recomienda o es obligatorio reiniciar el navegador</translation>
 <translation id="346731943813722404">Especifica si las demoras por administración de energía y el límite de duración de la sesión deben ejecutarse solo después de que se observe actividad inicial en la sesión de un usuario.
 
           Si esta política se establece en "True", las demoras por administración de energía y el límite de duración de la sesión no se ejecutan hasta que se observe actividad inicial en la sesión de un usuario.
@@ -1572,7 +1566,7 @@
 <translation id="551639594034811656">Esta política define una lista de porcentajes que determinará la fracción de dispositivos <ph name="PRODUCT_OS_NAME" /> en la UO que se actualizará por día a partir del momento en que se descubre la actualización (posterior a la publicación, conforme a lo que tarde el dispositivo en buscar actualizaciones).
       Cada par (día, porcentaje) contiene el porcentaje de la flota que se debe actualizar en una cantidad dada de días a partir del descubrimiento de la actualización. Por ejemplo, si tenemos los pares [(4, 40), (10, 70), (15, 100)], el 40% de la flota debe haberse actualizado 4 días después de descubrir la actualización. El 70% debe actualizarse después de 10 días, y así sucesivamente.
 
-      Si se define valor para esta política, las actualizaciones ignorarán la política <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> y, en su lugar, seguirán esta.
+      Si se define un valor para esta política, las actualizaciones ignorarán la política <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> y, en su lugar, seguirán esta.
 
       Si esta lista está vacía, no se definirán etapas y se aplicarán las actualizaciones conforme a otras políticas de dispositivo.
 
@@ -2095,17 +2089,6 @@
 
       Cuando la pantalla está a punto de atenuarse, el modelo evalúa si debe posponerse la atenuación de la pantalla. Si es así, se el tiempo de atenuación. En este caso, se ajustan el apagado y el bloqueo de la pantalla, y el tiempo de inactividad para mantener las mismas distancias con respecto al tiempo de atenuación de la configuración original.
       Si se establece esta política como verdadera o no se establece, se habilitará el modelo de atenuación inteligente y se permitirá que extienda el tiempo de atenuación. Si se establece como falsa, el modelo no modificará la atenuación.</translation>
-<translation id="6982028490425791294">
-      Si la política se establece como verdadera, <ph name="PRODUCT_NAME" /> puede recopilar registros de acontecimientos de WebRTC provenientes de los servicios de Google (p. ej., Google Meet) y cargarlos a Google.
-
-      Si se establece como falsa, o no se establece, <ph name="PRODUCT_NAME" /> no puede recopilar estos registros ni cargarlos.
-
-      Estos registros contienen información, como el momento en que se enviaron o recibieron paquetes RTP, el tamaño de estos paquetes, comentarios sobre la congestión de la red y metadatos sobre el tiempo y la calidad de los cuadros de video y audio. Esta información es útil para depurar problemas con llamadas de audio o videollamadas en Chrome, como los problemas relacionados con la estimación del ancho de banda, etc. Los registros no incluyen contenido de audio o video de la llamada.
-
-      Esta recopilación de datos solo se puede activar mediante servicios web de Google, como Google Hangouts o Google Meet.
-
-      Es posible que estos registros se asocien (mediante un ID de sesión) con otros registros que recopila el mismo servicio de Google a fin de facilitar la depuración.
-      </translation>
 <translation id="6994082778848658360">Especifica la forma en que los elementos de hardware de seguridad integrados se usan para la autenticación de dos factores, si son compatibles con esta función. El botón de encendido de la máquina se usa para detectar la presencia física del usuario.
 
 Si se selecciona "Inhabilitada", no se proporciona un segundo factor.
@@ -2923,11 +2906,6 @@
 <translation id="9035964157729712237">Identificaciones de extensión para excluir de la lista negra</translation>
 <translation id="9042911395677044526">Permite aplicar la configuración de red al dispositivo <ph name="PRODUCT_OS_NAME" /> por usuario. La configuración de red es una cadena escrita en formato JSON, como la define el formato Open Network Configuration que se describe en <ph name="ONC_SPEC_URL" />.</translation>
 <translation id="9084985621503260744">Especificar si la actividad de video afecta a la administración de energía</translation>
-<translation id="9085839450090699752">Te permite establecer el período, en milisegundos, durante el cual se notifica a los usuarios que <ph name="PRODUCT_NAME" /> se debe volver a iniciar o que un dispositivo con <ph name="PRODUCT_OS_NAME" /> se debe reiniciar para que se aplique una actualización pendiente.
-
-      Durante este período, se informará reiteradamente al usuario sobre la necesidad de una actualización. Para los dispositivos con <ph name="PRODUCT_OS_NAME" />, aparece una notificación de reinicio en la bandeja del sistema cuando se detecta una actualización. Esta notificación cambia de color una vez que transcurre la mitad del período y vuelve a cambiar cuando se completa el período. Para <ph name="PRODUCT_NAME" />, el menú de apps cambia y comienza a indicar que se necesita un reinicio una vez que transcurre un tercio del período. Esta notificación cambia de color cuando pasan dos tercios del período y vuelve a cambiar cuando se completa el período. Las notificaciones adicionales que habilita la política <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> para los navegadores siguen este mismo esquema.
-
-      Si no se establece, se usan los períodos predeterminados de 345,600,000 milisegundos (4 días) para los dispositivos con <ph name="PRODUCT_OS_NAME" /> y 604,800,000 milisegundos (1 semana) para los navegadores.</translation>
 <translation id="9088433379343318874">Habilitar el proveedor de contenido de un usuario supervisado</translation>
 <translation id="9088444059179765143">Configurar el método de detección automática de la zona horaria</translation>
 <translation id="9096086085182305205">Lista blanca del servidor de autenticación</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 1deb3b4..db1d1bb6 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -39,10 +39,8 @@
       seguridad de orígenes inseguros.
 
       La intención es permitir que las organizaciones definan orígenes
-
       incluidos en listas blancas para aplicaciones antiguas que no pueden
       implementar TLS, o bien configuren un servidor provisional para desarrollar
-
       web internas y conseguir que los desarrolladores puedan probar las
       funciones que necesiten en contextos seguros sin tener que implementar
       TLS en el servidor provisional. Esta política también evita que el origen
@@ -190,6 +188,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Habilitar el bloqueo de inserción de software de terceros</translation>
 <translation id="1504431521196476721">Confirmación remota</translation>
+<translation id="1507957856411744193">Si se le asigna el valor "True" a esta política, <ph name="PRODUCT_NAME" /> se conectará a dispositivos de transmisión de todas las direcciones IP, no solo a los de las direcciones privadas de RFC1918 y RFC4193.
+
+          Si se le asigna el valor "False", <ph name="PRODUCT_NAME" /> solo se conectará a los dispositivos de transmisión de las direcciones privadas de RFC1918 y RFC4193.
+
+          Si no se le asigna ningún valor, <ph name="PRODUCT_NAME" /> solo se conectará a los dispositivos de transmisión de las direcciones privadas de RFC1918 y RFC4913, a menos que la función CastAllowAllIPs esté habilitada.
+
+          Si se le asigna el valor "False" a la política "EnableMediaRouter", el valor de esta política no tendrá ningún efecto.</translation>
 <translation id="1509692106376861764">Esta política no está disponible desde la versión 29 de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1514888685242892912">Habilitar <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Permitir que los sitios puedan hacer un seguimiento de la ubicación física de los usuarios</translation>
@@ -368,11 +373,6 @@
 
           Si no se establece esta política, se utilizarán los cuatro esquemas.</translation>
 <translation id="2067011586099792101">Bloquear acceso a sitios no incluidos en paquetes de contenido</translation>
-<translation id="2070270043919235595">Notifica a los usuarios que <ph name="PRODUCT_NAME" /> debe reiniciarse para aplicar una actualización pendiente.
-
-      Este ajuste de la política habilita las notificaciones para informar al usuario de que es necesario o recomendable reiniciar el navegador. Si no se configura, <ph name="PRODUCT_NAME" /> indica al usuario que es necesario reiniciarlo mediante pequeños cambios en el menú. Si se le asigna el valor "Recomendada", se muestra una advertencia al usuario de forma periódica indicando que se recomienda reiniciar el navegador. El usuario puede ignorar esta advertencia y aplazar esta acción. Si se le asigna el valor "Obligatoria", se muestra una advertencia al usuario de forma periódica indicando que se reiniciará el navegador cuando haya transcurrido el periodo de notificación. De forma predeterminada, este periodo dura siete días, pero se puede configurar en los ajustes de la política <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      La sesión del usuario se restaurará cuando el navegador se reinicie.</translation>
 <translation id="2073552873076775140">Permitir inicio de sesión en <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Utilizar aceleración por hardware cuando esté disponible</translation>
 <translation id="2077273864382355561">Retraso de desconexión de pantalla cuando el dispositivo funciona con la batería</translation>
@@ -934,7 +934,6 @@
           Esta política es opcional. Si no se establece, no se mostrará una página Nueva pestaña.
 
           Esta política solo se respeta si está habilita la política DefaultSearchProviderEnabled.</translation>
-<translation id="3465852069254497664">Informar al usuario de que es necesario o recomendable reiniciar el navegador</translation>
 <translation id="346731943813722404">Especifica si los retrasos de administración de energía y el límite de duración de sesión se deben ejecutar después de que se haya detectado actividad por parte del usuario en una sesión.
 
           Si esta política se establece en true, los retrasos de administración de energía y el límite de duración de sesión no se ejecutarán hasta que se haya detectado actividad por parte del usuario en una sesión.
@@ -2043,6 +2042,7 @@
 
       La política <ph name="SYNC_DISABLED_POLICY_NAME" /> inhabilita todas las sincronizaciones de datos y anula RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Filtrar contenido para adultos de sitios web de nivel superior (y no de los iframes insertados)</translation>
+<translation id="6734521799274931721">Controlar si el uso compartido de archivos del sistema estará disponible en Chrome OS</translation>
 <translation id="6735701345096330595">Forzar que se habilite el corrector ortográfico de idiomas</translation>
 <translation id="673699536430961464">Esta opción permite que los usuarios cambien de una cuenta de Google a otra en el área de contenido de la ventana de su navegador después de haber iniciado sesión en su dispositivo <ph name="PRODUCT_OS_NAME" />.
 
@@ -2193,17 +2193,6 @@
 
       Cuando la pantalla esté a punto de atenuarse, el modelo de atenuación inteligente evaluará si esta acción debe aplazarse. Si esto ocurre, este modelo alargará el tiempo que debe pasar hasta que la pantalla se atenúe. En este caso, los retrasos por inactividad, para apagar la pantalla o para bloquearla se ajustan para que mantengan las mismas distancias con la atenuación de pantalla que se configuraron al principio.
       Si a esta política se le asigna el valor "True" o no se le asigna ningún valor, el modelo de atenuación inteligente se habilitará y podrá alargar el tiempo que debe pasar hasta que la pantalla se atenúe. Si se le asigna el valor "False", este modelo no afectará a la atenuación de la pantalla.</translation>
-<translation id="6982028490425791294">
-      Si se le asigna el valor "True" a esta política", <ph name="PRODUCT_NAME" /> puede recopilar registros de eventos WebRTC de los servicios de Google (p. ej., Google Meet) y subirlos a Google.
-
-      Si se le asigna el valor "False" a esta política o no se le asigna ningún valor, <ph name="PRODUCT_NAME" /> no podrá recopilar ni subir estos registros.
-
-      Estos registros contienen información como la hora y el tamaño de los paquetes RTP recibidos, comentarios sobre la congestión de la red y metadatos sobre la hora y la calidad de los marcos de vídeo y audio. Esta información resulta útil para depurar problemas de las llamadas de audio o videollamadas de Chrome, como problemas de estimación del ancho de banda. Los registros no incluyen contenido de audio ni vídeo de las llamadas.
-
-      Esta recogida de datos solo la pueden activar los servicios web de Google, como Hangouts o Google Meet.
-
-      Estos registros se pueden asociar, mediante un ID de sesión, a otros registros recopilados por el servicio de Google para facilitar la depuración.
-      </translation>
 <translation id="6994082778848658360">Especifica cómo se puede utilizar el hardware del elemento seguro integrado para proporcionar una autenticación de dos factores si es compatible con esta función. El botón de encendido del ordenador se utiliza para detectar la presencia física del usuario.
 
       Si se inhabilita esta opción, no se proporciona ninguna autenticación de dos factores.
@@ -3047,11 +3036,6 @@
 <translation id="9035964157729712237">ID de extensiones que no deben estar incluidas en la lista negra</translation>
 <translation id="9042911395677044526">Permite aplicar la configuración de red al dispositivo <ph name="PRODUCT_OS_NAME" /> de cada usuario. La configuración de red es una cadena escrita en formato JSON, tal como se define en la siguiente página sobre el formato Open Network Configuration: <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Especificar si la actividad de vídeo afecta a la administración de energía</translation>
-<translation id="9085839450090699752">Permite establecer el periodo de tiempo (en milisegundos) durante el que los usuarios recibirán una notificación informándoles de que deben reiniciar <ph name="PRODUCT_NAME" /> o un dispositivo <ph name="PRODUCT_OS_NAME" /> para que se aplique una actualización pendiente.
-
-      Durante este periodo de tiempo, se informará repetidamente al usuario de la necesidad de aplicar una actualización. En el caso de dispositivos <ph name="PRODUCT_OS_NAME" />, se mostrará una notificación de reinicio en la bandeja del sistema cuando se detecte una actualización. Esta notificación cambiará de color cuando haya transcurrido la mitad del periodo de notificación y, de nuevo, cuando este haya finalizado. En el caso de los navegadores <ph name="PRODUCT_NAME" />, el menú de aplicaciones cambiará para indicar que es necesario reiniciar cuando haya transcurrido un tercio del periodo de notificación. Esta notificación cambiará de color cuando hayan transcurrido dos tercios del periodo de notificación y, de nuevo, cuando este haya finalizado. Las notificaciones adicionales habilitadas por la política <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> en navegadores siguen esta misma programación.
-
-      Si no se asigna ningún valor, se usará el periodo predeterminado de 345.600.000 milisegundos (cuatro días) para los dispositivos <ph name="PRODUCT_OS_NAME" /> y de 604.800.000 milisegundos (una semana) para los navegadores.</translation>
 <translation id="9088433379343318874">Habilitar el proveedor de contenido de usuarios supervisados</translation>
 <translation id="9088444059179765143">Configura el método de detección automática de la zona horaria</translation>
 <translation id="9096086085182305205">Lista de admisión de servidores de autenticación</translation>
diff --git a/components/policy/resources/policy_templates_et.xtb b/components/policy/resources/policy_templates_et.xtb
index 656d4c8..88a6087 100644
--- a/components/policy/resources/policy_templates_et.xtb
+++ b/components/policy/resources/policy_templates_et.xtb
@@ -372,11 +372,6 @@
 
           Kui jätate selle reegli määramata, siis kasutatakse kõiki nelja skeemi.</translation>
 <translation id="2067011586099792101">Sisupakettidest väljaspool olevatele saitidele juurdepääsu blokeerimine</translation>
-<translation id="2070270043919235595">Teavitage kasutajaid sellest, et <ph name="PRODUCT_NAME" /> tuleb ooteloleva värskenduse rakendamiseks uuesti käivitada.
-
-      See reegli seade lubab märguanded, mis teavitavad kasutajat sellest, brauseri taaskäivitamine on soovitatav või nõutav. Kui reegel on määramata, <ph name="PRODUCT_NAME" /> näidatakse taaskäivitamise vajadust menüü väikeste muudatuste abil. Kui reegel on seatud väärtusele „Soovitatav”, kuvatakse kasutajale korduv hoiatus, mis annab teada, et taaskäivitamine on soovitatav. Kasutaja saab hoiatusest loobuda, et taaskäivitamine edasi lükata. Kui valitud on väärtus „Nõutav”, kuvatakse kasutajale korduv hoiatus, mis annab teada, et brauser taaskäivitatakse sunniviisiliselt pärast märguandeperioodi möödumist. Perioodi vaikekestus on seitse päeva ja seda saab reegli <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> seadetes konfigureerida.
-
-      Kasutaja seanss taastatakse pärast taaskäivitamist.</translation>
 <translation id="2073552873076775140">Teenusesse <ph name="PRODUCT_NAME" /> sisselogimise lubamine</translation>
 <translation id="2077129598763517140">Kasuta võimaluse korral riistvarakiirendust</translation>
 <translation id="2077273864382355561">Ekraani väljalülitamise viiteaeg akutoite kasutamisel</translation>
@@ -930,7 +925,6 @@
           See reegel on valikuline. Kui seda pole määratud, siis ei looda ühtegi uut vahelehte.
 
           Reeglit arvestatakse ainult juhul, kui on lubatud reegel „DefaultSearchProviderEnabled”.</translation>
-<translation id="3465852069254497664">Kasutaja teavitamine sellest, et brauseri taaskäivitamine on soovitatav või nõutav</translation>
 <translation id="346731943813722404">Määrab, kas toitehalduse viivituste ja seansi pikkuse limiidi aktiveerimine peaks toimuma pärast seda, kui seansi ajal on toimunud esmane kasutajatoiming.
 
           Kui reegel on määratud olekule Tõene, siis ei toimu toitehalduse viivituste ja seansi pikkuse limiidi aktiveerimine enne, kui seansi ajal on toimunud esimene kasutajatoiming.
@@ -2180,17 +2174,6 @@
 
       Kui ekraani hämardamine algab, uurib nutikas hämardamismudel, kas ekraani hämardamine tuleks edasi lükata. Kui nutikas hämardamismudel lükkab ekraani hämardamise edasi, pikendatakse sisuliselt aega, mille möödudes ekraan hämardatakse. Sel juhul reguleeritakse ka ekraani väljalülitamise, lukustamise ja tegevusetuse viiteaegu, et järgida algselt seadistatud hämardamisviivitust.
       Kui reegel on määramata või seatud väärtusele Tõene, lubatakse nutikas hämardamismudel ja ekraani hämardamiseni kuluva aja pikendamine. Kui reegel on seatud väärtusele Väär, ei mõjuta nutikas hämardamismudel ekraani hämardamist.</translation>
-<translation id="6982028490425791294">
-      Kui reegli väärtuseks määratakse Tõene, võib <ph name="PRODUCT_NAME" /> koguda Google'i teenustest (nt Google Meet) WebRTC sündmuselogisid ja need Google'i serveritesse üles laadida.
-
-      Kui reegli väärtuseks määratakse Väär või jäetakse see määramata, ei tohi <ph name="PRODUCT_NAME" /> logisid koguda ega üles laadida.
-
-      Need logid sisaldavad näiteks saadetud ja vastuvõetud RTP-pakettide kellaaja ja suuruse teavet, tagasisidet võrgu ummistuste kohta ja metaandmeid heli- ja videokaadrite aja ja kvaliteedi kohta. See teave on kasulik Chrome'i hääl- või videokõnedega seotud probleemide, nt ribalaiuse prognoosimise probleemide jms silumisel. Logid ei sisalda kõne hääl- ega videosisu.
-
-      Andmete kogumise saavad käivitada ainult Google'i veebiteenused, nt Google Hangouts või Google Meet.
-
-      Logid võidakse seansi ID alusel seostada muude logidega, mida Google'i teenus kogub. Selle eesmärk on hõlbustada silumist.
-      </translation>
 <translation id="6994082778848658360">Määrab, kuidas kasutada sisseehitatud turvalist elementi kahe teguriga autentimise funktsiooni pakkumiseks, kui element ühildub selle funktsiooniga. Kasutaja füüsilise kohaloleku tuvastamiseks kasutatakse seadme toitenuppu.
 
       Kui valite väärtuse „Keelatud”, ei pakuta kahe teguriga autentimist.
@@ -3033,11 +3016,6 @@
 <translation id="9035964157729712237">Mustast nimekirjast välistatud laienduste ID-d</translation>
 <translation id="9042911395677044526">Võimaldab võrguseadistuse kasutajapõhiselt teenuse <ph name="PRODUCT_OS_NAME" /> seadmes jõustada. Võrguseadistus on JSON-i vormingus string, mille määratleb Open Network Configuration vorming, mida kirjeldatakse aadressil <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Määrake, kas videotoimingud mõjutavad toitehaldust</translation>
-<translation id="9085839450090699752">Võimaldab määrata ajavahemiku millisekundites, mille jooksul kasutajaid teavitatakse sellest, et <ph name="PRODUCT_NAME" /> või <ph name="PRODUCT_OS_NAME" />-seade tuleb ootel oleva värskenduse rakendamiseks taaskäivitada.
-
-      Selle vahemiku jooksul teavitatakse kasutajat värskendusest korduvalt. <ph name="PRODUCT_OS_NAME" />-i seadmete puhul kuvatakse värskenduse tuvastamisel taaskäivituse märguanne süsteemisalves. Märguanne muudab üks kord värvi siis, kui pool ajavahemikust on möödunud, ja teist korda ajavahemiku lõpus. <ph name="PRODUCT_NAME" />'i brauseri puhul rakenduse menüü muutub, kui kolmandik ajavahemikust on möödunud, ja näitab, et rakendus on vaja taaskäivitada. Märguanne muudab esimest korda värvi siis, kui möödunud on kaks kolmandikku ajavahemikust, ja teist korda ajavahemiku lõpus. Brauserites reegliga <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> lubatud lisamärguanded järgivad sama ajakava.
-
-      Kui reegel on määramata, kasutatakse <ph name="PRODUCT_OS_NAME" />-i seadmete puhul vaikeperioodi 345 600 000 millisekundit (neli päeva) ja brauserite puhul 604 800 000 (üks nädal).</translation>
 <translation id="9088433379343318874">Jälgitava kasutaja sisupakkuja lubamine</translation>
 <translation id="9088444059179765143">Ajavööndi automaatse tuvastamise viisi seadistamine</translation>
 <translation id="9096086085182305205">Autentimisserveri lubatud nimekiri</translation>
diff --git a/components/policy/resources/policy_templates_fa.xtb b/components/policy/resources/policy_templates_fa.xtb
index 907bd16..089d57f 100644
--- a/components/policy/resources/policy_templates_fa.xtb
+++ b/components/policy/resources/policy_templates_fa.xtb
@@ -360,11 +360,6 @@
 
           اگر این خط مشی تنظیم نشده باقی بماند، تمام چهار روش استفاده می‌شوند.</translation>
 <translation id="2067011586099792101">مسدود کردن دسترسی به سایت‌های خارج از بسته‌های محتوا</translation>
-<translation id="2070270043919235595">به کاربران اطلاع داده می‌شود که باید <ph name="PRODUCT_NAME" /> را راه‌اندازی مجدد کنند تا به‌روزرسانی درانتظاری اعمال شود.
-
-      این تنظیم خط‌مشی، اعلان‌ها را فعال می‌کند تا به کاربر اطلاع داده شود که راه‌اندازی مجدد مرورگر توصیه شده یا لازم است. اگر تنظیم نشده باشد، <ph name="PRODUCT_NAME" /> به کاربر نشان می‌دهد که راه‌اندازی مجدد ازطریق انجام تغییرات ظریف در منوی آن لازم است. اگر روی «توصیه می‌شود» تنظیم شده باشد، هشدار تکرارشونده‌ای به کاربر نشان داده می‌شود مبنی بر اینکه راه‌اندازی مجدد توصیه می‌شود. اگر روی «لازم است» تنظیم شده باشد، هشداری تکرارشونده به کاربر نمایش داده می‌شود که نشان می‌دهد به‌محض گذشت مدت زمان اعلان، راه‌اندازی مجدد مرورگر به اجبار اعمال می‌شود. این مدت زمان به‌طور پیش‌فرض هفت روز است و ممکن است ازطریق تنظیم خط‌مشی <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> پیکربندی شود.
-
-      بعد از راه‌اندازی مجدد، جلسه کاربر بازنشانی می‌شود.</translation>
 <translation id="2073552873076775140">مجاز کردن ورود به سیستم <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">در صورت امکان از شتاب سخت‌افزاری استفاده شود</translation>
 <translation id="2077273864382355561">تأخیر خاموشی صفحه هنگام کار با باتری</translation>
@@ -897,7 +892,6 @@
           این خط‌مشی اختیاری است، اگر تنظیم شود، هیچ صفحه برگه جدیدی ارائه نخواهد شد.
 
           این خط‌مشی تنها در صورت فعال بودن خط‌مشی «DefaultSearchProviderEnabled» اعمال می‌شود.</translation>
-<translation id="3465852069254497664">اطلاع‌رسانی به کاربر درباره اینکه راه‌اندازی مجدد مرورگر توصیه شده یا لازم است</translation>
 <translation id="346731943813722404">‏مشخص می‌کند که آیا تأخیرات مدیریت نیرو و محدودیت طول جلسه باید تنها پس از مشاهده فعالیت اولیه کاربر در جلسه انجام شود.
 
           اگر این خط‌مشی روی True تنظیم شده باشد، تأخیرات مدیریت نیرو و محدودیت طول جلسه تا زمانی که اولین فعالیت در جلسه مشاهده نشود اجرا نمی‌شود.
@@ -2092,17 +2086,6 @@
 
 وقتی صفحه‌نمایش در آستانه کم‌نور شدن است، مدل کم‌نور شدن هوشمند ارزیابی می‌کند کم شدن نور صفحه‌نمایش باید به تعویق بیفتد یا نه. اگر مدل کم‌نور شدن هوشمند کم شدن نور صفحه‌نمایش را به تعویق بیندازد، ‌مدت‌زمان کم نور شدن صفحه‌نمایش را به‌طور موثری افزایش می‌دهد. دراین‌صورت، تأخیرهای خاموش شدن صفحه، قفل شدن صفحه و بدون فعالیت شدن دستگاه طوری تنظیم می‌شود تا فاصله زمانی‌شان از کم شدن نور صفحه تفاوتی با پیکربندی اولیه نداشته باشد.
       اگر این خط‌مشی روی «درست» تنظیم شود یا تنظیم نشود، مدل کم‌نور شدن هوشمند فعال می‌شود و به آن اجازه داده می‌شود زمان کم نور شدن صفحه را افزایش دهد. اگر این خط‌مشی روی «نادرست» تنظیم شود، مدل کم‌نور شدن هوشمند روی کم شدن نور صفحه تأثیری نمی‌گذارد.</translation>
-<translation id="6982028490425791294">‏
-      اگر این خط‌مشی روی درست تنظیم شود، <ph name="PRODUCT_NAME" /> اجازه می‌یابد گزارش‌های وقایع WebRTC را از سرویس‌های Google (مثل Google Meet) جمع‌آوری کند و آن‌ها را در Google بارگذاری کند.
-
-      اگر این خط‌مشی روی نادرست تنظیم شود یا تنظیم‌نشده رها شود، ممکن است <ph name="PRODUCT_NAME" /> این گزارش‌ها را نه جمع‌آوری کند و نه بارگذاری کند.
-
-      این گزارش‌ها حاوی اطلاعاتی مثل زمان ارسال و دریافت بسته‌های RTP و اندازه آن‌ها، بازخورد درباره شلوغی شبکه، و فراداده مربوط به زمان و کیفیت قاب‌های صوتی و تصویری است. این اطلاعات برای اشکال‌زدایی از تماس‌های صوتی و ویدیویی در Chrome، ازجمله مشکلات مربوط به ارزیابی پهنای باند و غیره، مفید‌اند. محتواهای صوتی و تصویریِ تماس‌ها در این گزارش‌ها نمی‌آیند. 
-
-      فقط سرویس‌های وب Google، مثل Google Hangouts یا Google Meet، می‌تواند این جمع‌آوری داده‌ها را راه‌اندازی کند.
-
-      ممکن است این گزارش‌ها، ازطریق شناسه جلسه، با سایر گزارش‌هایی که خود سرویس Google جمع‌آوری کرده است، مرتبط شود. هدف از این کار تسهیل اشکال‌زدایی است.
-      </translation>
 <translation id="6994082778848658360">‏مشخص می‌کند سخت‌افزار داخلی عنصر امن چگونه می‌تواند برای ارائه تأیید هویت با دو فاکتور (در صورت سازگار بودن با این قابلیت) استفاده شود. دکمه روشن/خاموش دستگاه برای تشخیص حضور فیزیکی کاربر استفاده می‌شود.
 
       اگر «غیرفعال» انتخاب شود، هیچ فاکتور دومی ارائه نمی‌شود.
@@ -2911,11 +2894,6 @@
 <translation id="9035964157729712237">شناسه افزونه هایی که از فهرست سیاه مستثنا شده‌اند</translation>
 <translation id="9042911395677044526">‏اجازه می‌دهد پیکربندی شبکه ارسال داده برای هر کاربر در یک دستگاه <ph name="PRODUCT_OS_NAME" /> اعمال شود. پیکربندی شبکه یک رشته با قالب JSON است، به صورتی که توسط قالب پیکربندی شبکه باز در <ph name="ONC_SPEC_URL" /> توضیح داده شده است.</translation>
 <translation id="9084985621503260744">مشخص کنید آیا فعالیت ویدئو بر مدیریت برق اثر بگذارد</translation>
-<translation id="9085839450090699752">اجازه می‌دهد دوره زمانی‌ای را (به میلی‌ثانیه) تنظیم کنید که طی آن به کاربران اعلان می‌شود <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" /> و ۶۰۴۸۰۰۰۰۰ میلی‌ثانیه (یک هفته) برای مرورگرها استفاده می‌شود.</translation>
 <translation id="9088433379343318874">فعال کردن ارائه‌دهنده محتوای کاربر تحت نظارت</translation>
 <translation id="9088444059179765143">پیکربندی روش تشخیص خودکار منطقه زمانی</translation>
 <translation id="9096086085182305205">فهرست سفید سرور راستی‌آزمایی</translation>
diff --git a/components/policy/resources/policy_templates_fi.xtb b/components/policy/resources/policy_templates_fi.xtb
index c1ad1cb..541c6b48 100644
--- a/components/policy/resources/policy_templates_fi.xtb
+++ b/components/policy/resources/policy_templates_fi.xtb
@@ -361,11 +361,6 @@
           Mahdollisia arvoja ovat basic, digest, ntlm ja negotiate. Erota arvot toisistaan pilkuilla.
           Jos tätä käytäntöä ei ole määritetty, kaikkia neljää todennustapaa tuetaan.</translation>
 <translation id="2067011586099792101">Estä pääsy sisältöpakkauksiin kuulumattomiin sivustoihin</translation>
-<translation id="2070270043919235595">Ilmoita käyttäjille, että <ph name="PRODUCT_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. Jos tilana on Suositeltu, käyttäjä saa toistuvan varoituksen suositellusta uudelleenkäynnistyksestä. Käyttäjä voi hylätä varoituksen ja lykätä uudelleenkäynnistystä. Jos tilana on Vaadittu, käyttäjä saa toistuvan varoituksen ilmoitusaikaa seuraavasta selaimen pakotetusta uudelleenkäynnistyksestä. Tämä aika on oletuksena seitsemän päivää, ja sitä voi muuttaa <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />-käytäntoasetuksista.
-
-      Käyttäjän käyttökerta palautetaan uudelleenkäynnistyksen jälkeen.</translation>
 <translation id="2073552873076775140">Salli kirjautuminen tuotteeseen <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Käytä laitteistokiihdytystä, jos mahdollista</translation>
 <translation id="2077273864382355561">Ruudun sammutuksen viive käytettäessä laitetta akkuvirralla</translation>
@@ -903,7 +898,6 @@
           Tämä käytäntö on valinnainen. Jos sitä ei ole asetettu, uutta välilehteä ei tarjota.
 
           Tämä käytäntö toteutetaan, jos käytäntö DefaultSearchProviderEnabled on käytössä.</translation>
-<translation id="3465852069254497664">Ilmoita käyttäjälle, että selaimen uudelleenkäynnistystä suositellaan tai vaaditaan</translation>
 <translation id="346731943813722404">Määritä, alkavatko virranhallinnan viiveet ja istuntojen pituusrajoitukset vasta käyttäjän ensimmäisen toiminnon jälkeen.
 
           Jos tämän käytännön arvoksi on määritetty tosi, virranhallinnan viiveet ja istuntojen pituusrajoitukset eivät ala ennen kuin käyttäjän ensimmäinen istunnon aikainen toiminto on havaittu.
@@ -2101,17 +2095,6 @@
 
       Kun näyttöä ollaan himmentämässä, älykäs himmennysmalli arvioi, pitäisikö näytön himmennystä viivästyttää. Jos älykäs himmennysmalli viivästyttää näytön himmennystä, se pidentää sen myötä näytön himmennysaikaa. Tässä tapauksessa näytön sammuttamisen, näytön lukituksen ja käyttämättömyysajan viivästykset säädetään niin, että niissä pysyy samat etäisyydet näytön himmennysviiveeseen kuin alkuperäisissä asetuksissa.
       Jos käytännön arvoksi on merkitty tosi tai sitä ei ole määritetty, älykäs himmennysmalli otetaan käyttöö ja sen annetaan pidentää näytön himmennysaikaa. Jos käytännön arvoksi on merkitty epätosi, älykäs himmennysmalli ei vaikuta näytön himmennykseen.</translation>
-<translation id="6982028490425791294">
-      Jos tämän käytännön arvo on tosi, <ph name="PRODUCT_NAME" /> saa kerätä WebRTC-tapahtumalokeja Googlen palveluista (esim. Google Meet) ja lähettää niitä Googlelle.
-
-      Jos tämän käytännön arvo on epätosi tai sitä ei ole määritetty, <ph name="PRODUCT_NAME" /> ei saa kerätä tai lähettää kyseisiä lokeja.
-
-      Lokit sisältävät tietoa esimerkiksi lähetettyjen ja vastaanotettujen RTP-pakettien koko- ja ajankohtatietoja, palautetta verkon ruuhkautumisesta ja ääni- ja videokehysten käyttöaikaan ja laatuun liittyviä sisällönkuvaustietoja. Nämä tiedot auttavat korjaamaan Chromen ääni- ja videopuheluihin liittyviä ongelmia, kuten kaistanleveyden arviointivirheitä. Lokeihin ei tallenneta puhelujen ääni- tai videosisältöä.
-
-      Tämän datan keräyksen voi käynnistää vain Googlen verkkopalvelu, kuten Google Hangouts tai Google Meet.
-
-      Nämä lokit voidaan yhdistää käyttökertatunnuksen avulla muihin lokeihin, jotka kyseessä oleva Googlen palvelu on kerännyt. Tämän tarkoituksena on helpottaa virheenkorjausta.
-      </translation>
 <translation id="6994082778848658360">Määrittää laitteen Secure Element ‑komponentin tarjoaman monitasoisen todennuksen käytön, jos se on yhteensopiva tämän ominaisuuden kanssa. Käyttäjän läsnäolo havaitaan laitteen virtapainikkeen avulla.
 
       Jos valittuna on Ei käytössä, toista todennustasoa ei käytetä.
@@ -2916,11 +2899,6 @@
 <translation id="9035964157729712237">Kieltoluettelosta poistettavat laajennuksien tunnukset</translation>
 <translation id="9042911395677044526">Antaa määrittää tuotetta <ph name="PRODUCT_OS_NAME" /> käyttävien laitteiden verkkoasetukset käyttäjäkohtaisesti. Verkkoasetukset määritetään JSON-muotoiltuna merkkijonona Open Network Configuration -muodossa, josta on lisätietoja osoitteessa <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Määritä, vaikuttaako videotoiminta virranhallintaan</translation>
-<translation id="9085839450090699752">Voit määrittää ajanjakson (millisekunteina), jonka aikana käyttäjälle ilmoitetaan, että <ph name="PRODUCT_NAME" /> tai <ph name="PRODUCT_OS_NAME" /> ‑laite on käynnistettävä uudelleen päivityksen vuoksi.
-
-      Tänä aikana käyttäjä saa toistuvia muistutuksia päivityksen tarpeellisuudesta. <ph name="PRODUCT_OS_NAME" /> ‑laitteilla uudelleenkäynnistysilmoitus näkyy ilmaisinalueella, kun päivitys havaitaan. Ilmoituksen väri muuttuu, kun puolet ilmoitusajasta on kulunut, ja uudelleen, kun koko ilmoitusaika on kulunut. Selaimen (<ph name="PRODUCT_NAME" />) sovellusvalikon muutos kertoo uudelleenkäynnistyksen tarpeesta, kun kolmannes ilmoitusajasta on kulunut. Ilmoituksen väri muuttuu, kun ilmoitusajasta on kulunut kaksi kolmannesta, ja uudelleen, kun koko ilmoitusaika on kulunut. <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" />-selainkäytännön sallimat lisäilmoitukset noudattavat samaa aikataulua.
-
-      Jos käytäntöä ei ole määritetty, <ph name="PRODUCT_OS_NAME" /> ‑laitteiden oletusajanjakso on 345 600 000 millisekuntia (neljä päivää) ja selainten 604 800 000 millisekuntia (yksi viikko).</translation>
 <translation id="9088433379343318874">Ota käyttöön valvotun käyttäjän sisällön tarjoaja</translation>
 <translation id="9088444059179765143">Määritä aikavyöhykkeen automaattinen tunnistamistapa.</translation>
 <translation id="9096086085182305205">Sallittujen todennuspalvelimien luettelo</translation>
diff --git a/components/policy/resources/policy_templates_fil.xtb b/components/policy/resources/policy_templates_fil.xtb
index 7840629c..16f36ae 100644
--- a/components/policy/resources/policy_templates_fil.xtb
+++ b/components/policy/resources/policy_templates_fil.xtb
@@ -191,6 +191,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">I-enable ang pag-block sa pagpasok ng third party software</translation>
 <translation id="1504431521196476721">Malayuang Pagpapatunay</translation>
+<translation id="1507957856411744193">Kung nakatakda ang patakarang ito sa true, kokonekta ang <ph name="PRODUCT_NAME" /> sa mga Cast device sa lahat ng IP address, hindi lang sa mga pribadong address ng RFC1918/RFC4193.
+
+          Kung nakatakda ang patakarang ito sa false, kokonekta ang <ph name="PRODUCT_NAME" /> sa mga Cast device sa mga pribadong address ng RFC1918/RFC4193 lang.
+
+          Kung hindi nakatakda ang patakarang ito, kokonekta ang <ph name="PRODUCT_NAME" /> sa mga Cast device sa mga pribadong address ng RFC1918/RFC4193 lang, maliban kung naka-enable ang feature na CastAllowAllIPs.
+
+          Kung nakatakda ang patakarang "EnableMediaRouter" sa false, hindi magkakaroon ng bisa ang value ng patakarang ito.</translation>
 <translation id="1509692106376861764">Hindi na ginagamit ang patakarang ito simula sa <ph name="PRODUCT_NAME" /> bersyon 29.</translation>
 <translation id="1514888685242892912">I-enable ang <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Payagan ang mga site na subaybayan ang aktwal na lokasyon ng mga user</translation>
@@ -368,11 +375,6 @@
 
           Kung hindi itatakda ang patakarang ito, gagamitin ang lahat ng apat na scheme.</translation>
 <translation id="2067011586099792101">I-block ang access sa mga site na nasa labas ng mga pack ng nilalaman</translation>
-<translation id="2070270043919235595">Nag-aabiso sa mga user na dapat muling ilunsad ang <ph name="PRODUCT_NAME" /> upang malapat ang nakabinbing pag-update.
-
-      Ine-enable ng setting ng patakarang ito ang mga notification upang ipaalam sa user na inirerekomenda o kinakailangan ang muling paglulunsad ng browser. Kung hindi nakatakda, ipapaalam ng <ph name="PRODUCT_NAME" /> sa user na kinakailangan ang muling paglulunsad sa pamamagitan ng maliliit na pagbabago sa menu nito. Kung nakatakda sa 'Inirerekomenda,' magpapakita ng umuulit na babala sa user na inirerekomenda ang muling paglulunsad. Maaaring i-dismiss ng user ang babalang ito upang ipagpaliban ang muling paglulunsad. Kung nakatakda sa 'Kinakailangan,' magpapakita ng umuulit na babala sa user na nagsasaad na sapilitang magsasagawa ng muling paglulunsad ng browser kapag lumampas na sa panahon ng notification. Bilang default, may pitong araw ang panahong ito at maaari itong i-configure sa pamamagitan ng setting ng patakarang <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Ire-restore ang session ng user pagkatapos ng muling paglulunsad.</translation>
 <translation id="2073552873076775140">Payagan ang pag-sign in sa <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Gamitin ang pagpapabilis ng hardware kapag available</translation>
 <translation id="2077273864382355561">Delay ng pag-off ng screen kapag tumatakbo gamit ang power ng baterya</translation>
@@ -929,7 +931,6 @@
           Opsyonal ang patakarang ito. Kung hindi nakatakda, walang ibibigay na pahina ng bagong tab.
 
           Gagamitin lang ang patakarang ito kung naka-enable ang patakarang 'DefaultSearchProviderEnabled.'</translation>
-<translation id="3465852069254497664">Abisuhan ang user na inirerekomenda o kinakailangang muling ilunsad ang browser</translation>
 <translation id="346731943813722404">Tinutukoy kung dapat lang magsimulang tumakbo ang mga pagkaantala sa pamamahala sa power at ang limitasyon sa haba ng session pagkatapos makita ang unang aktibidad ng user sa isang session.
 
           Kung nakatakda ang patakarang ito sa True, hindi magsisimulang tumakbo ang mga pagkaantala sa pamamahala sa power management at ang limitasyon sa haba ng session hanggang makita ang unang aktibidad ng user sa isang session.
@@ -2026,6 +2027,7 @@
 
       Dini-disable ng patakarang <ph name="SYNC_DISABLED_POLICY_NAME" /> ang lahat ng pag-synchronize ng data, na nag-o-override sa RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Mag-filter ng mga nangungunang site (ngunit hindi mga naka-embed na iframe) para sa pang-adult na content</translation>
+<translation id="6734521799274931721">Kumokontrol sa Mga File Share sa Network para sa availability ng ChromeOS</translation>
 <translation id="6735701345096330595">Puwersahang ine-enable ang mga wika ng spellcheck</translation>
 <translation id="673699536430961464">Nagbibigay-daan ang setting na ito sa mga user na lumipat ng Google account sa lugar ng content ng window ng kanilang browser pagkatapos nilang mag-sign in sa kanilang <ph name="PRODUCT_OS_NAME" /> device.
 
@@ -2177,17 +2179,6 @@
 
       Kapag malapit nang ma-dim ang screen, sinusuri ng smart dim model kung dapat bang ipagpaliban ang pag-dim ng screen. Kung ipapagpaliban ng smart dim model ang pag-dim ng screen, papatagalin din nito ang oras bago ma-dim ang screen. Sa ganitong sitwasyon, maisasaayos ang pag-off ng screen, lock ng screen, at ang mga pagkaantala ng idle para mapanatili ang parehong mga pagitan mula sa pagkaantala ng pag-dim ng screen gaya ng orihinal na na-configure.
       Kung itatakda ang patakarang ito sa True o hahayaang hindi nakatakda, mae-enable ang smart dim model at papayagang patagalin ang oras bago ma-dim ang screen. Kung itatakda ang patakarang ito sa False, hindi maaapektuhan ng smart dim model ang pag-dim ng screen.</translation>
-<translation id="6982028490425791294">
-      Kung nakatakda ang patakaran sa true, pinapayagan ang <ph name="PRODUCT_NAME" /> na kolektahin ang mga log ng event sa WebRTC mula sa mga serbisyo ng Google (hal. Google Meet), at i-upload ang mga log na iyon sa Google.
-
-      Kung nakatakda ang patakaran sa false, o hindi ito nakatakda, hindi maaaring kolektahin o i-upload ng <ph name="PRODUCT_NAME" /> ang mga nasabing log.
-
-      Makikita sa mga log na ito ang impormasyon gaya ng oras at laki ng mga naipadala at natanggap na RTP packet, feedback tungkol sa pagdami ng gumagamit sa network, at metadata tungkol sa oras at kalidad ng mga audio at video frame. Makakatulong ang impormasyong ito kapag nagde-debug ng mga isyu sa mga audio o video call sa Chrome, gaya ng mga isyu sa pagtantya ng bandwidth, atbp. Ang mga log ay hindi naglalaman ng audio o video content mula sa tawag.
-
-      Mati-trigger lang ang ganitong pagkolekta ng data sa pamamagitan ng mga serbisyo sa web ng Google, gaya ng Google Hangouts o Google Meet.
-
-      Maiuugnay ang mga log na ito, sa pamamagitan ng session ID, sa iba pang log na nakolekta mismo ng serbisyo ng Google; layunin nitong mas padaliin ang pag-debug.
-      </translation>
 <translation id="6994082778848658360">Tinutukoy kung paano magagamit ang kasamang hardware ng secure na elemento upang magbigay ng pangalawang factor ng pag-authenticate kung tugma ito sa feature na ito. Ginagamit ang power button ng machine upang tukuyin ang aktwal na presensya ng user.
 
       Kung pinili ang 'Naka-disable,' walang pangalawang factor na ibibigay.
@@ -3027,11 +3018,6 @@
 <translation id="9035964157729712237">Ang mga ID ng Extension upang maibukod mula sa blacklist</translation>
 <translation id="9042911395677044526">Nagbibigay-daan na malapat sa bawat user ang configuration ng pushing network sa isang <ph name="PRODUCT_OS_NAME" /> na device. Ang configuration ng network ay isang naka-format sa JSON  na string tulad ng tinutukoy ng format ng Configuration ng Open Network na inilalarawan sa <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Tukuyin kung nakakaapekto ang aktibidad ng video sa pamamahala ng power</translation>
-<translation id="9085839450090699752">Binibigyang-daan kang itakda ang yugto ng panahon, sa millisecond, kung kailan aabisuhan ang mga user na dapat muling ilunsad ang <ph name="PRODUCT_NAME" /> o na dapat i-restart ang isang <ph name="PRODUCT_OS_NAME" /> device para malapat ang isang nakabinbing update.
-
-      Sa yugto ng panahong ito, paulit-ulit na ipapaalam sa user ang pangangailangang mag-update. Para sa mga <ph name="PRODUCT_OS_NAME" /> device, lalabas sa system tray ang isang notification sa pag-restart kapag may na-detect na pag-upgrade. Magbabago ng kulay ang notification na ito kapag lumipas ang kalahati ng yugto ng panahon ng notification, at muli kapag lumipas ang buong yugto ng panahon ng notification. Para sa mga <ph name="PRODUCT_NAME" /> browser, magbabago ang menu ng app para isaad na kinakailangan ng muling paglulunsad kapag lumipas ang one third ng yugto ng panahon ng notification. Magbabago ng kulay ang notification na ito kapag lumipas ang two thirds ng yugto ng panahon ng notification, at muli kapag lumipas ang buong yugto ng panahon ng notification. Ang mga karagdagang notification na na-enable ng patakarang <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> para sa mga browser ay sumusunod sa iskedyul na ito mismo.
-
-      Kung hindi itatakda, ang default na yugto ng panahong 345600000 millisecond (apat na araw) ang gagamitin para sa mga <ph name="PRODUCT_OS_NAME" /> device at 604800000 millisecond (isang linggo) ang gagamitin para sa mga browser.</translation>
 <translation id="9088433379343318874">I-enable ang content provider ng pinangangasiwaang user</translation>
 <translation id="9088444059179765143">I-configure ang awtomatikong paraan ng pag-detect ng timezone</translation>
 <translation id="9096086085182305205">Whitelist ng server sa pagpapatotoo</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index 327e271..d3babcfd 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -192,6 +192,13 @@
 <ph name="PROXY_HELP_URL" /></translation>
 <translation id="1502843533062797703">Activer le blocage de l'injection de logiciels tiers</translation>
 <translation id="1504431521196476721">Attestation à distance</translation>
+<translation id="1507957856411744193">Si cette règle est définie sur "True", <ph name="PRODUCT_NAME" /> se connecte aux appareils Cast sur toutes les adresses IP, et pas seulement sur les adresses privées décrites dans la RFC 1918 ou la RFC 4193.
+
+          Si cette règle est définie sur "False", <ph name="PRODUCT_NAME" /> ne se connecte aux appareils Cast que sur les adresses privées décrites dans la RFC 1918 ou la RFC 4193.
+
+          Si cette règle n'est pas définie, <ph name="PRODUCT_NAME" /> ne se connecte aux appareils Cast que sur les adresses privées décrites dans la RFC 1918 ou la RFC 4193, sauf si la fonctionnalité "CastAllowAllIPs" est activée.
+
+          Si la règle "EnableMediaRouter" est définie sur "False", la valeur de la règle "MediaRouterCastAllowAIIIPs" n'a aucune incidence.</translation>
 <translation id="1509692106376861764">Cette règle a été supprimée à partir de la version 29 de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1514888685242892912">Activer <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Autoriser les sites à suivre la position géographique des utilisateurs</translation>
@@ -372,11 +379,6 @@
 
           Si cette règle n'est pas définie, les quatre modèles seront utilisés.</translation>
 <translation id="2067011586099792101">Bloquer l'accès aux sites en dehors des packs de contenu</translation>
-<translation id="2070270043919235595">Avertir les utilisateurs que <ph name="PRODUCT_NAME" /> doit être redémarré pour qu'une mise à jour en cours puisse être appliquée.
-
-      Cette règle active l'envoi de notifications pour avertir l'utilisateur qu'un redémarrage du navigateur est recommandé ou requis. Si cette règle n'est pas configurée, <ph name="PRODUCT_NAME" /> indique à l'utilisateur, par le biais de modifications discrètes du menu, qu'un redémarrage est nécessaire. Si elle est définie sur "Recommandé", un avertissement récurrent s'affiche, indiquant qu'un redémarrage est recommandé. L'utilisateur peut ignorer cet avertissement et redémarrer le navigateur plus tard. Si elle est définie sur "Requis", un avertissement récurrent s'affiche, indiquant que le redémarrage du navigateur sera forcé à l'issue de la période de notification. Par défaut, ce délai est de sept jours, et peut être configuré à l'aide du paramètre <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      La session de l'utilisateur est restaurée après le redémarrage.</translation>
 <translation id="2073552873076775140">Autoriser la connexion à <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Utiliser l'accélération matérielle (le cas échéant)</translation>
 <translation id="2077273864382355561">Délai d'arrêt de l'écran (batterie)</translation>
@@ -942,7 +944,6 @@
           Cette règle est facultative. Si elle n'est pas définie, aucune page Nouvel onglet ne s'affiche.
 
           Cette règle n'est appliquée que si la règle "DefaultSearchProviderEnabled" est activée.</translation>
-<translation id="3465852069254497664">Avertir un utilisateur qu'un redémarrage du navigateur est recommandé ou requis</translation>
 <translation id="346731943813722404">Indiquer si les délais liés à la gestion de l'alimentation et la limite relative à la durée de la session ne doivent être activés que lorsque l'utilisateur a effectué une première activité au cours d'une session.
 
           Si la règle est définie sur "True", les délais liés à la gestion de l'alimentation et la limite relative à la durée de la session ne sont activés que lorsque l'utilisateur a effectué une première activité au cours d'une session.
@@ -2050,6 +2051,7 @@
 
       La règle <ph name="SYNC_DISABLED_POLICY_NAME" /> entraîne la désactivation de la synchronisation des données, remplaçant ainsi RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Filtrer les sites de premier niveau (mais pas les iFrame intégrés) présentant des contenus réservés aux adultes</translation>
+<translation id="6734521799274931721">Vérifie la disponibilité de la fonctionnalité Partages de fichiers en réseau pour Chrome OS</translation>
 <translation id="6735701345096330595">Forcer l'activation des langues de la vérification orthographique</translation>
 <translation id="673699536430961464">Ce paramètre permet aux utilisateurs de basculer d'un compte Google à l'autre dans la zone de contenu de la fenêtre de leur navigateur une fois qu'ils sont connectés sur leur appareil <ph name="PRODUCT_OS_NAME" />.
 
@@ -2202,17 +2204,6 @@
 
       Lorsque la luminosité de l'écran est sur le point de baisser, le modèle de réduction intelligente de la luminosité évalue s'il convient ou non de différer le moment où l'écran s'assombrit. Si oui, la période de réduction de la luminosité est effectivement allongée, décalant d'autant le moment où l'écran s'éteint, se verrouille et se met en veille, ceci afin de maintenir l'intervalle initialement configuré.
       Si cette règle est définie sur "True" ou n'est pas configurée, le modèle de réduction intelligente de la luminosité est activé et autorisé à allonger la période de réduction de la luminosité de l'écran. Si cette règle est définie sur "False", le modèle n'a pas d'incidence sur la manière dont l'écran baisse en luminosité.</translation>
-<translation id="6982028490425791294">
-      Si la règle est définie sur "True", <ph name="PRODUCT_NAME" /> est autorisé à collecter les journaux d'événements WebRTC à partir des services Google (Google Meet, par exemple) et à les transférer vers Google.
-
-      Si la règle est définie sur "False" ou n'est pas définie, <ph name="PRODUCT_NAME" /> ne peut pas collecter ces journaux ni les transférer.
-
-      Ces journaux contiennent des informations telles que l'horodatage et la taille des paquets RTP envoyés et reçus, des commentaires sur la congestion du réseau, et des métadonnées relatives à l'horodatage et à la qualité des trames vidéo et audio. Ces informations sont utiles lors du débogage de problèmes d'appels audio ou vidéo dans Chrome, comme des problèmes d'estimation de la bande passante, etc. Les journaux n'incluent aucun contenu audio ou vidéo des appels.
-
-      Cette collecte de données ne peut être déclenchée que par des services Web de Google, tels que Google Hangouts ou Google Meet.
-
-      Ces journaux peuvent être associés à d'autres journaux collectés par le service Google proprement dit à l'aide d'un ID de session dans le but de faciliter le débogage.
-      </translation>
 <translation id="6994082778848658360">Indique comment le matériel sécurisé intégré peut être utilisé pour l'authentification à deux facteurs, s'il est compatible avec cette fonctionnalité. Le bouton Marche/Arrêt de l'appareil est utilisé pour détecter la présence de l'utilisateur.
 
       Si vous sélectionnez "Désactivé" ou si vous ne définissez pas cette règle, aucun deuxième facteur n'est fourni.
@@ -3056,11 +3047,6 @@
 <translation id="9035964157729712237">Identifiants d'extension à exclure de la liste noire</translation>
 <translation id="9042911395677044526">Permet de transférer l'application de la configuration réseau par utilisateur vers un appareil utilisant <ph name="PRODUCT_OS_NAME" />. La configuration réseau correspond à une chaîne formatée par JSON conformément au format de configuration de réseau ouvert, décrit sous <ph name="ONC_SPEC_URL" />.</translation>
 <translation id="9084985621503260744">Indiquer si l'activité vidéo a une incidence sur la gestion de l'alimentation</translation>
-<translation id="9085839450090699752">Permet de fixer la période, en millisecondes, pendant laquelle les utilisateurs sont avertis que <ph name="PRODUCT_NAME" /> doit être relancé ou qu'un appareil <ph name="PRODUCT_OS_NAME" /> doit être redémarré pour appliquer une mise à jour en attente.
-
-      Au cours de cette période, l'utilisateur est régulièrement informé de la nécessité d'appliquer la mise à jour. Pour les appareils <ph name="PRODUCT_OS_NAME" />, une notification de redémarrage s'affiche dans la barre d'état système lorsqu'une mise à niveau est détectée. Cette notification change de couleur une première fois lorsque la moitié de la période de notification s'est écoulée et une deuxième fois à l'issue de cette période. Pour les navigateurs <ph name="PRODUCT_NAME" />, lorsqu'un tiers de la période de notification s'est écoulé, le menu d'application change pour indiquer qu'il est nécessaire de redémarrer le navigateur. La notification change de couleur une première fois lorsque les deux tiers de la période de notification se sont écoulés et une deuxième fois à l'issue de cette période. Les notifications supplémentaires activées par la règle <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> pour les navigateurs suivent ce même programme.
-
-      Si ce paramètre n'est pas défini, la période par défaut est fixée à 345 600 000 millisecondes (quatre jours) pour les appareils <ph name="PRODUCT_OS_NAME" /> et à 604 800 000 millisecondes (une semaine) pour les navigateurs.</translation>
 <translation id="9088433379343318874">Activer le fournisseur de contenu de l'utilisateur supervisé</translation>
 <translation id="9088444059179765143">Configurer la méthode de détection automatique du fuseau horaire</translation>
 <translation id="9096086085182305205">Liste blanche des serveurs d'authentification</translation>
diff --git a/components/policy/resources/policy_templates_gu.xtb b/components/policy/resources/policy_templates_gu.xtb
index e64db8d..ba5aa64 100644
--- a/components/policy/resources/policy_templates_gu.xtb
+++ b/components/policy/resources/policy_templates_gu.xtb
@@ -391,11 +391,6 @@
 
           જો નીતિ સેટ કર્યા વિના છોડેલી છે, તો બધી ચાર યોજનાઓનો ઉપયોગ કરવામાં આવશે.</translation>
 <translation id="2067011586099792101">સામગ્રી પૅક્સની બહારની સાઇટ્સની ઍક્સેસ અવરોધિત કરો</translation>
-<translation id="2070270043919235595">વપરાશકર્તાઓને સૂચિત કરો કે <ph name="PRODUCT_NAME" /> એ બાકી અપડેટને લાગુ કરવા માટે રીલૉન્ચ કરવું આવશ્યક છે.
-
-      આ નીતિની સેટિંગ વપરાશકર્તાને જાણ કરવા માટે નોટિફિકેશનને ચાલુ કરે છે કે બ્રાઉઝર રીલૉન્ચ કરવાનો સુઝાવ આપેલ છે અથવા આવશ્યક છે. જો તે સેટ કરવામાં આવ્યું ન હોય, તો <ph name="PRODUCT_NAME" /> વપરાશકર્તાને ઝીણવટભર્યા ફેરફારોથી દર્શાવવામાં આવે છે કે તેના મેનૂને રીલૉન્ચ કરવું જરૂરી છે. જો 'સુઝાવ આપેલ' પર સેટ કરવામાં આવ્યું હોય, તો રીલૉન્ચ કરવાનો સુઝાવ આપેલ છે તેવી ચેતવણી વપરાશકર્તાને વારંવાર બતાવવામાં આવશે. રીલૉન્ચ મુલતવી રાખવા માટે વપરાશકર્તા આ ચેતવણીને છોડી શકે છે. જો 'આવશ્યક' તરીકે સેટ કરવામાં આવ્યું હોય, તો વપરાશકર્તાને એવું દર્શાવતી ચેતવણી વારંવાર બતાવવામાં આવશે કે જ્યાં સુધી નોટિફિકેશનનો સમયગાળો પસાર ન થઈ જાય, ત્યાં સુધી બ્રાઉઝરને ફરજિયાત પણે રીલૉન્ચ કરવામાં આવશે. ડિફૉલ્ટ તરીકે આ સમયગાળો સાત દિવસનો હોય છે અને તેને કદાચ <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />ની નીતિ સેટિંગ મારફતે ગોઠવવામાં આવી શકે છે.
-
-      રીલૉન્ચ કર્યા પછી વપરાશકર્તાનું સત્ર પાછું મેળવવામાં આવે છે.</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" />માં સાઇન ઇન કરવાની મંજૂરી આપો</translation>
 <translation id="2077129598763517140">હાર્ડવેર ઍક્સિલરેશન ઉપલબ્ધ હોવા પર ઉપયોગ કરો</translation>
 <translation id="2077273864382355561">જ્યારે બેટરી પાવર પર ચાલી રહ્યું હોય ત્યારે સ્ક્રીન બંધ વિલંબ</translation>
@@ -1006,7 +1001,6 @@
           આ નીતિ વૈકલ્પિક છે. જો સેટ કરી નથી, તો કોઈ નવું ટેબ પૃષ્ઠ પ્રદાન કરવામાં આવશે નહીં.
 
           જો 'DefaultSearchProviderEnabled' નીતિ સક્ષમ હોય તો જ આ નીતિનું સન્માન કરવામાં આવે છે.</translation>
-<translation id="3465852069254497664">એક વપરાશકર્તાને સૂચિત કરો કે બ્રાઉઝર રીલૉન્ચ કરવાનો સુઝાવ આપેલ અથવા આવશ્યક છે</translation>
 <translation id="346731943813722404">પાવર મેનેજમેન્ટ વિલંબ અને સત્ર લંબાઇ મર્યાદા એક સત્રમાં પ્રથમ વપરાશકર્તા પ્રવૃત્તિ ધ્યાનમાં આવે પછી જ પ્રારંભ થવી જોઇએ કે કેમ તે સ્પષ્ટ કરે છે.
 
           જો આ નીતિ સાચા પર સેટ થયેલી હોય, તો પાવર મેનેજમેન્ટમાં વિલંબ થાય છે અને સત્ર મર્યાદા એક સત્રમાં પ્રથમ વપરાશકર્તા પ્રવૃત્તિ ધ્યાનમાં ન આવે ત્યાં સુધી પ્રારંભ થતી નથી.
@@ -2409,17 +2403,6 @@
 <translation id="6943577887654905793">Mac/Linux પસંદગી નામ:</translation>
 <translation id="69525503251220566">ડિફોલ્ટ શોધ પ્રદાતા માટે છબી દ્વારા શોધ સુવિધા પ્રદાન કરતું પેરામીટર</translation>
 <translation id="6956272732789158625">કોઈપણ સાઇટને કી જનરેશનનો ઉપયોગ કરવાની મંજૂરી આપશો નહીં</translation>
-<translation id="6982028490425791294">
-      જો નીતિને true પર સેટ કરી હોય, તો <ph name="PRODUCT_NAME" /> Google સેવાઓ (દા.ત. Google Meet)માંથી WebRTC ઇવેન્ટ લૉગને એકત્ર કરવાની મંજૂરી આપે છે.
-
-      જો નીતિને false પર સેટ કરી હોય અથવા સેટ કર્યા વિના છોડી હોય, તો <ph name="PRODUCT_NAME" /> કદાચ આવા લૉગને એકત્ર કે અપલોડ કરી શકશે નહીં.
-
-      આ લૉગમાં મોકલાવેલ અને પ્રાપ્ત કરેલ RTP પૅકેટના સમય અને કદ, નેટવર્ક પરના ધસારાનો પ્રતિસાદ અને સમય વિશેના મેટાડેટા તેમજ ઑડિઓ અને વીડિઓ ફ્રેમની ક્વૉલિટી વગેરે જેવી માહિતી હોય છે. જ્યારે Chromeમાં ઑડિઓ અને વીડિઓ કૉલમાં ડિબગિંગની સમસ્યા આવે ત્યારે આ માહિતી સહાયક બને છે, જેમ કે બૅન્ડવિડ્થના અનુમાનની સમસ્યાઓ વગેરે. આ લૉગમાં કૉલના ઑડિઓ અથવા વીડિઓ કન્ટેન્ટ શામેલ હોતા નથી.
-
-      આ ડેટા સંગ્રહ માત્ર Googleની વેબ સેવા દ્વારા ટ્રિગર કરવામાં આવેલ હોઈ શકે છે, જેમ કે Google Hangouts અથવા Google Meet.
-
-      આ લૉગ સત્ર ID, પોતાની જ Google સેવા દ્વારા સંગ્રહ કરવામાં અાવેલા અન્ય લૉગ સાથે સંકળાયેલ હોઈ શકે છે; આનો હેતુ ડિબગિંગને સરળ બનાવવાનો છે.
-      </translation>
 <translation id="6994082778848658360">જો તે આ સુવિધા સાથે સુસંગત હોય, તો દ્વિતીય-ફેક્ટર પ્રમાણીકરણ પૂરું પાડવા માટે ઑન-બોર્ડ સુરક્ષિત તત્વ હાર્ડવેરનો કઈ રીતે ઉપયોગ કરી શકાય તે ઉલ્લેખિત કરે છે. વપરાશકર્તા ભૌતિક હાજરી શોધવા માટે મશીન પાવર બટનનો ઉપયોગ થાય છે.
 
       જો 'અક્ષમ કરેલ' પસંદ કરેલ હોય, તો કોઈ દ્વિતીય ફેક્ટર પૂરું પાડવામાં આવતું નથી.
@@ -3348,11 +3331,6 @@
 
           RemoteAccessHostClientDomainList પણ જુઓ.</translation>
 <translation id="9084985621503260744">વિડિઓ પ્રવૃત્તિ પાવર વ્યવસ્થાપનને પ્રભાવિત કરે છે કે કેમ તે નિર્દિષ્ટ કરો</translation>
-<translation id="9085839450090699752">તમને મિલીસેકન્ડનો સમયગાળો સેટ કરવાની મંજૂરી આપે છે, જેમાં વપરાશકર્તાઓને <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" />ના ઉપકરણો માટે 345600000 મિલીસેકન્ડનો (ચાર દિવસ)નો અને બ્રાઉઝર માટે 604800000 મિલીસેકન્ડનો (એક અઠવાડિયા)નો ડિફૉલ્ટ સમયગાળાનો ઉપયોગ કરવામાં આવે છે.</translation>
 <translation id="9088433379343318874">નિરીક્ષિત વપરાશકર્તા સામગ્રી પ્રદાતાને સક્ષમ કરો</translation>
 <translation id="9088444059179765143">સ્વચલિત સમયઝોન શોધ પદ્ધતિ ગોઠવવી</translation>
 <translation id="9096086085182305205">પ્રમાણીકરણ  સર્વર વ્હાઇટલિસ્ટ</translation>
diff --git a/components/policy/resources/policy_templates_hi.xtb b/components/policy/resources/policy_templates_hi.xtb
index 2f900d53..359382a 100644
--- a/components/policy/resources/policy_templates_hi.xtb
+++ b/components/policy/resources/policy_templates_hi.xtb
@@ -370,11 +370,6 @@
 
           यदि इस पॉलिसी को सेट नहीं किया जाता है, तो चारों योजनाओं का उपयोग किया जाएगा.</translation>
 <translation id="2067011586099792101">सामग्री पैक से बाहर की साइटों की एक्‍सेस अवरुद्ध करें</translation>
-<translation id="2070270043919235595">यह नीति उपयोगकर्ताओं को सूचित करती है कि जिस अपडेट की मंज़ूरी बाकी है, उसे लागू करने के लिए <ph name="PRODUCT_NAME" /> को फिर से लॉन्च करना होगा.
-
-      यह नीति सेटिंग, उपयोगकर्ता को यह बताने के लिए सूचनाएं चालू करती है कि ब्राउज़र को फिर से लॉन्च करने का सुझाव दिया गया है या ऐसा करना ज़रूरी है. अगर यह सेट नहीं होती है तो, <ph name="PRODUCT_NAME" /> उपयोगकर्ता को यह बताता है कि उसके मेन्यू में खास बदलावों के ज़रिए फिर से लॉन्च करना ज़रूरी है. अगर यह नीति 'सुझाया गया' पर सेट होती है तो, उपयोगकर्ता को बार-बार यह चेतावनी दिखाती है कि फिर से लॉन्च करने का सुझाव दिया गया है. उपयोगकर्ता फिर से लॉन्च करने को टालने के लिए इस चेतावनी को खारिज कर सकता है. अगर यह नीति 'ज़रूरी' पर सेट होती है तो, उपयोगकर्ता को बार-बार यह चेतावनी दिखाएगी कि सूचना की समय सीमा खत्म होने पर ब्राउज़र को बिना पूछे फिर से लॉन्च कर दिया जाएगा. डिफ़ॉल्ट रूप से यह समय सीमा सात दिनों की होती है और <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> नीति सेटिंग के ज़रिए कॉन्फ़िगर की जा सकती है.
-
-      फिर से लॉन्च करने के बाद उपयोगकर्ता का सत्र बहाल कर दिया जाता है.</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> में साइन इन करने देती है</translation>
 <translation id="2077129598763517140">उपलब्ध होने पर हार्डवेयर त्वरण का उपयोग करें</translation>
 <translation id="2077273864382355561">बैटरी पावर पर चलते समय स्क्रीन बंद विलंब</translation>
@@ -933,7 +928,6 @@
           यह नीति वैकल्पिक है. अगर इसे जोड़ा नहीं गया है तो, कोई भी नया टैब पेज दिखाई नहीं होगा.
 
          'DefaultSearchProviderEnabled' नीति चालू होने पर ही इस नीति का पालन किया जाएगा.</translation>
-<translation id="3465852069254497664">उपयोगकर्ता को सूचित करती है कि ब्राउज़र को फिर से लॉन्च करने का सुझाव दिया गया है या ऐसा करना ज़रूरी है</translation>
 <translation id="346731943813722404">यह तय करती है कि क्या पावर प्रबंधन में देरी और सत्र की समय सीमा, सिर्फ़ किसी सत्र में पहले उपयोगकर्ता की गतिविधि का पता लगाने के बाद ही शुरू हो या नहीं.
 
           अगर यह नीति सही पर सेट की जाती है तो, पावर प्रबंधन में देरी और सत्र की समय सीमा तब तक शुरू नहीं होती जब तक कि किसी सत्र में पहले उपयोगकर्ता की गतिविधि का पता नहीं चल जाता.
@@ -2197,16 +2191,6 @@
 
       जब स्क्रीन की रोशनी कम होने ही वाली होती है, तब 'स्मार्ट डिम मॉडल' यह मूल्यांकन करता है कि क्या स्क्रीन की रोशनी कम करने को टाला जाना चाहिए. अगर 'स्मार्ट डिम मॉडल' स्क्रीन की रोशनी कम करने को टाल देता है, तो वह स्क्रीन की रोशनी कम होने तक समय में बढ़ोतरी कर देता है. इस मामले में, स्क्रीन बंद होने, स्क्रीन लॉक होने और स्क्रीन का इस्तेमाल न होने के विलंब एडजस्ट हो जाते हैं जिससे स्क्रीन की रोशनी कम होने के विलंब का वही अंतर बनाए रखा जा सके जैसा मूल रूप से कॉन्फ़िगर किया गया है.
       अगर यह नीति सही पर सेट की जाती है या सेट किए बिना छोड़ दी जाती है, तो 'स्मार्ट डिम मॉडल' चालू कर दिया जाएगा और उसे स्क्रीन की रोशनी कम होने तक समय में बढ़ोतरी करने की मंज़ूरी होगी. अगर यह नीति गलत पर सेट की जाती है, तो 'स्मार्ट डिम मॉडल' का स्क्रीन की रोशनी कम होने पर कोई असर नहीं पड़ेगा.</translation>
-<translation id="6982028490425791294">
-      अगर नीति सही पर सेट की जाती है, तो <ph name="PRODUCT_NAME" /> को 'Google सेवाओं' (उदाहरण Google Meet) से 'WebRTC इवेंट लॉग' इकट्ठे करने और उन लॉग को Google पर अपलोड करने की अनुमति होती है.
-      अगर नीति गलत पर सेट की जाती है या सेट नहीं की जाती है, तो <ph name="PRODUCT_NAME" /> ऐसे लॉग इकट्ठे नहीं कर पाएगा और न ही उन्हें अपलोड कर पाएगा.
-
-      इन लॉग में भेजे गए और मिलने वाले RTP पैकेट के समय और आकार, नेटवर्क पर व्यस्तता के बारे में सुझाव जैसी जानकारी और ऑडियो और वीडियो फ़्रेम के समय और क्वालिटी के बारे में मेटाडेटा मौजूद होता है. यह जानकारी Chrome में ऑडियो या वीडियो कॉल से जुड़ी समस्याओं, जैसे कि बैंडविड्थ के अनुमान संबंधी समस्याएं वगैरह को डीबग करते समय फ़ायदेमंद होती है. लॉग में कॉल की ऑडियो या वीडियो सामग्री शामिल नहीं होती है.
-
-      डेटा इकट्ठा करने के यह काम सिर्फ़ Google की Google Hangouts या Google Meet जैसी वेब सेवाएं ट्रिगर कर सकती हैं.
-
-      इन लॉग को सत्र आईडी के ज़रिए ऐसे दूसरे लॉग से जोड़ा जा सकता है, जिसे Google सेवा की ओर से ही इकट्ठा किया है; ऐसा ज़्यादा आसानी से डीबग करने के लिए किया जाता है.
-      </translation>
 <translation id="6994082778848658360">यह नीति बताती है कि अगर मौजूदा सुरक्षा तत्व हार्डवेयर, दो तरीके से पहचान की पुष्टि की सुविधा के साथ काम कर सकता है तो, किस तरह उसका इस्तेमाल कर इस सुविधा का फ़ायदा उठाया जा सकता है. उपयोगकर्ता की मौजूदगी का पता लगाने के लिए मशीन के पावर बटन का उपयोग किया जाता है. 
 
       अगर 'बंद' को चुना जाता है तो, कोई दूसरा तरीका उपलब्ध नहीं कराया जाता.
@@ -3030,11 +3014,6 @@
 <translation id="9035964157729712237">प्रतिबंधित सूची से मुक्त किए जाने वाले विस्तार ID</translation>
 <translation id="9042911395677044526">यह नीति, हर उपयोगकर्ता पर <ph name="PRODUCT_OS_NAME" /> डिवाइस लागू करने के लिए नेटवर्क कॉन्‍फ़िगरेशन पुश करने देती है. नेटवर्क कॉन्‍फ़िगरेशन, जेएसओएन के फ़ॉर्मैट की स्‍ट्रिंग है जिसे 'ओपन नेटवर्क कॉन्‍फ़िगरेशन' ने तय किया है जो <ph name="ONC_SPEC_URL" /> पर बताया गया है.</translation>
 <translation id="9084985621503260744">निर्दिष्ट करें कि वीडियो गतिविधि पावर प्रबंधन को प्रभावित करती है या नहीं</translation>
-<translation id="9085839450090699752">यह नीति आपको वह समयावधि मिलीसेकंड में सेट करने देती है, जिसके दौरान उपयोगकर्ताओं को सूचना दी जाती है कि <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" /> डिवाइसों के लिए 345600000 मिलीसेकंड (चार दिनों) की डिफ़ॉल्ट अवधि और ब्राउज़रों के लिए 604800000 मिलीसेकंड (एक हफ़्ते) की अवधि का इस्तेमाल किया जाता है.</translation>
 <translation id="9088433379343318874">निगरानी में रखा गया उपयोगकर्ता सामग्री प्रदाता को सक्षम करें</translation>
 <translation id="9088444059179765143">स्वचालित समयक्षेत्र की पहचान विधि को कॉन्फ़िगर करें</translation>
 <translation id="9096086085182305205">प्रमाणीकरण सर्वर श्वेतसूची</translation>
diff --git a/components/policy/resources/policy_templates_hr.xtb b/components/policy/resources/policy_templates_hr.xtb
index e88242e..5b69ebd 100644
--- a/components/policy/resources/policy_templates_hr.xtb
+++ b/components/policy/resources/policy_templates_hr.xtb
@@ -179,6 +179,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Omogući blokiranje umetanja softvera treće strane</translation>
 <translation id="1504431521196476721">Daljinsko atestiranje</translation>
+<translation id="1507957856411744193">Ako se to pravilo postavi na True, usluga <ph name="PRODUCT_NAME" /> povezat će se s uređajima za emitiranje na svim IP adresama, a ne samo privatnim adresama RFC1918/RFC4193.
+
+          Ako se to pravilo postavi na False, usluga <ph name="PRODUCT_NAME" /> povezat će se s uređajima za emitiranje samo na privatnim adresama RFC1918/RFC4193.
+
+          Ako se to pravilo ne postavi, usluga <ph name="PRODUCT_NAME" /> povezat će se s uređajima za emitiranje samo na privatnim adresama RFC1918/RFC4193, osim ako se omogući značajka CastAllowAllIPs.
+
+          Ako se pravilo "EnableMediaRouter" postavi na False, vrijednost ovog pravila nema utjecaja.</translation>
 <translation id="1509692106376861764">To se pravilo ne upotrebljava od verzije 29 sustava <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1514888685242892912">Omogući uslugu <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Dopusti web-lokacijama praćenje fizičke lokacije korisnika</translation>
@@ -352,11 +359,6 @@
 
           Ako se to pravilo ne postavi, upotrebljavat će se sve četiri sheme.</translation>
 <translation id="2067011586099792101">Blokiraj pristup web-lokacijama izvan paketa sadržaja</translation>
-<translation id="2070270043919235595">Obavještava korisnike da se <ph name="PRODUCT_NAME" /> mora ponovo pokrenuti radi primjene ažuriranja na čekanju.
-
-      Ova postavka pravila omogućuje obavijesti koje informiraju korisnika o preporučenom ili obaveznom ponovnom pokretanju preglednika. Ako nije postavljeno, <ph name="PRODUCT_NAME" /> korisniku naznačuje potrebu za ponovnim pokretanjem putem sitnih promjena na izborniku. Ako se postavi na "Preporučeno", korisniku će se prikazivati ponavljajuće upozorenje da je preporučeno ponovno pokretanje. Korisnik može odbaciti upozorenje i tako odgoditi ponovno pokretanje. Ako se postavi na "Obavezno", korisniku će se prikazati ponavljajuće upozorenje da će se preglednik prisilno ponovo pokrenuti nakon isteka naznačenog vremena u obavijesti. To razdoblje prema zadanim postavkama iznosi sedam dana, a može se konfigurirati putem postavke pravila <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Korisnička će se sesija vratiti nakon ponovnog pokretanja.</translation>
 <translation id="2073552873076775140">Dopusti prijavu u preglednik <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Upotrijebi hardversko ubrzanje kada je dostupno</translation>
 <translation id="2077273864382355561">Odgoda isključivanja zaslona za vrijeme baterijskog napajanja</translation>
@@ -891,7 +893,6 @@
           To pravilo nije obavezno. Ako nije postavljeno, neće se pružati web-stranica nove kartice.
 
           To se pravilo poštuje samo ako je omogućeno pravilo "DefaultSearchProviderEnabled".</translation>
-<translation id="3465852069254497664">Obavijesti korisnika o obaveznom ili preporučenom ponovnom pokretanju preglednika</translation>
 <translation id="346731943813722404">Pravilo određuje trebaju li odgode upravljanja potrošnjom energije i ograničenje duljine sesije početi teći tek nakon što se uoči prva aktivnost korisnika u sesiji.
 
           Ako se to pravilo postavi na istinito, odgode upravljanja potrošnjom energije i ograničenje duljine sesije neće početi teći dok se ne uoči prva aktivnost korisnika u sesiji.
@@ -1949,6 +1950,7 @@
 
       Pravilo <ph name="SYNC_DISABLED_POLICY_NAME" /> onemogućuje svu sinkronizaciju podataka nadjačavajući RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Filtriraj vršne web-lokacije (ali ne ugrađene iframeove) na temelju sadržaja za odrasle</translation>
+<translation id="6734521799274931721">Određuje dostupnost mrežnog dijeljenja datoteka za OS Chrome</translation>
 <translation id="6735701345096330595">Nametni omogućivanje provjere pravopisa za jezike</translation>
 <translation id="673699536430961464">Ova postavka korisnicima omogućuje promjenu Google računa unutar područja sadržaja u prozoru preglednika nakon što se prijave na svojem <ph name="PRODUCT_OS_NAME" /> uređaju.
 
@@ -2090,17 +2092,6 @@
 
       Prije nego što se zaslon zatamni, model pametnog zatamnjenja procjenjuje treba li odgoditi zatamnjenje zaslona. Ako model pametnog zatamnjenja odgodi zatamnjenje zaslona, on učinkovito produljuje vrijeme dok zaslon ne bude zatamnjen. U tom se slučaju isključivanje zaslona, zaključavanje zaslona i odgode  mirovanja prilagođavaju kako bi zadržale jednaku udaljenost od odgode zatamnjenja zaslona kako je izvorno konfigurirano.
       Ako je ovo pravilo postavljeno na True ili nije postavljeno, bit će omogućen model pametnog zatamnjenja te će biti dopušteno produljiti vrijeme dok zaslon ne bude zatamnjen. Ako je ovo pravilo postavljeno na False, model pametnog zatamnjenja neće utjecati na zatamnjenje zaslona.</translation>
-<translation id="6982028490425791294">
-      Ako se pravilo postavi na True, <ph name="PRODUCT_NAME" /> ima dopuštenje prikupljati zapisnike događaja WebRTC s Googleovih usluga (npr. Google Meet) i prenijeti te zapisnike na Google.
-
-      Ako se pravilo postavi na False ili se ne postavi, <ph name="PRODUCT_NAME" /> ne smije prikupljati niti prenositi takve zapisnike.
-
-      Ti zapisnici sadrže podatke kao što su vrijeme i veličina poslanih i primljenih RTP paketa, povratne informacije o zagušenju na mreži i medapodatke o vremenu i kvaliteti zvučnih i videozapisa. Ti podaci pomažu pri otklanjanju pogrešaka kod audio i videopoziva na Chromeu, kao što su poteškoće s procjenom propusnosti itd. Zapisnici ne sadrže audio ili videosadržaje poziva.
-
-      Ta kolekcija podataka može se pokrenuti samo pomoću Googleovih web-usluga, kao što su Hangouts ili Google Meet.
-
-      Ti zapisnici mogu se putem ID-ja sesija povezati s drugim zapisnicima koje je prikupila sama Googleova usluga; to je namijenjeno lakšem otklanjanju pogrešaka.
-      </translation>
 <translation id="6994082778848658360">Određuje način na koji se hardver s ugrađenim sigurnosnim elementom može upotrebljavati za pružanje dvostruke autentifikacije ako je kompatibilan s ovom značajkom. Tipka za uključivanje/isključivanje uređaja upotrebljava se za otkrivanje korisnikove fizičke prisutnosti.
 
       Ako se odabere "Onemogućeno", dvostruka se autentifikacija ne upotrebljava.
@@ -2895,11 +2886,6 @@
 <translation id="9035964157729712237">ID-jevi proširenja za izuzimanje s crne liste</translation>
 <translation id="9042911395677044526">Omogućuje nametanje mrežne konfiguracije za primjenu po korisniku na uređaju <ph name="PRODUCT_OS_NAME" />. Mrežna je konfiguracija niz u formatu JSON, kao što je definirano formatom "Open Network Configuration" koji je opisan na adresi <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Odredi utječe li aktivnost videozapisa na upravljanje napajanjem</translation>
-<translation id="9085839450090699752">Omogućuje vam da postavite razdoblje, u milisekundama, tijekom kojeg korisnici primaju obavijesti da se <ph name="PRODUCT_NAME" /> mora ponovo pokrenuti ili da se <ph name="PRODUCT_OS_NAME" /> uređaj mora ponovo pokrenuti da bi se primijenilo ažuriranje na čekanju.
-
-      U tom će razdoblju korisnik primiti više obavijesti da je potrebno ažuriranje. Za <ph name="PRODUCT_OS_NAME" /> uređaje obavijest o ponovnom pokretanju prikazuje se na traci sustava kada se otkrije nadogradnja. Boja te obavijesti mijenja se kada istekne polovica razdoblja obavijesti i još jednom kada istekne cijelo razdoblje. Za preglednike <ph name="PRODUCT_NAME" /> izbornik aplikacije mijenja se kada istekne trećina razdoblja obavijesti kako bi se naznačilo da je potrebno ponovno pokretanje. Boja te obavijesti mijenja se kada isteknu dvije trećine razdoblja i još jednom kada istekne cijelo razdoblje. Dodatne obavijesti omogućene pravilom <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> za preglednike imaju isti raspored.
-
-      Ako se ne postavi, za <ph name="PRODUCT_OS_NAME" /> uređaje upotrebljava se zadano razdoblje od 345.600.000 milisekundi (četiri dana), a za preglednike zadano razdoblje od 604.800.000 milisekundi (jedan tjedan).</translation>
 <translation id="9088433379343318874">Omogući davatelja sadržaja nadziranog korisnika</translation>
 <translation id="9088444059179765143">Konfiguriraj način automatskog otkrivanja vremenske zone</translation>
 <translation id="9096086085182305205">Bijela lista poslužitelja za autentifikaciju</translation>
diff --git a/components/policy/resources/policy_templates_hu.xtb b/components/policy/resources/policy_templates_hu.xtb
index e58a4e0..1d68258 100644
--- a/components/policy/resources/policy_templates_hu.xtb
+++ b/components/policy/resources/policy_templates_hu.xtb
@@ -362,11 +362,6 @@
 
           Ha a házirend konfigurálatlanul marad, a böngésző mind a négy sémát használhatja.</translation>
 <translation id="2067011586099792101">A tartalomcsomagokon kívüli webhelyekhez való hozzáférés letiltása</translation>
-<translation id="2070270043919235595">Értesíti a felhasználót arról, hogy újra kell indítani a <ph name="PRODUCT_NAME" /> böngészőt a függőben lévő frissítés élesítéséhez.
-
-      Ezen házirend-beállítás használatával a felhasználó értesítéseken keresztül tudomást szerezhet arról, hogy ajánlott, illetve szükséges a böngésző újraindítása. Ha nincs beállítva, a <ph name="PRODUCT_NAME" /> a menüben található apró módosításokkal jelzi a felhasználónak, hogy szükség van az újraindításra. Ha a házirend beállítása „Ajánlott”, ismétlődő figyelmeztetés jelenik meg a felhasználó számára az ajánlott újraindítással kapcsolatban. A felhasználónak lehetősége van a figyelmeztetés elvetésére és az újraindítás elhalasztására. Ha a házirend beállítása „Szükséges”, ismétlődő figyelmeztetés jelenik meg a felhasználó számára, amely szerint a rendszer kényszeríti a böngésző újraindítását az értesítési időszak lejárta után. Ez az időszak alapértelmezés szerint hét nap, és a <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> házirend-beállításnál módosítható.
-
-      Az újraindítás után a rendszer visszaállítja a felhasználói munkamenetet.</translation>
 <translation id="2073552873076775140">Bejelentkezés engedélyezése a <ph name="PRODUCT_NAME" /> böngészőbe</translation>
 <translation id="2077129598763517140">Hardveres gyorsítás alkalmazása lehetőség szerint</translation>
 <translation id="2077273864382355561">Képernyő kikapcsolásának késleltetése akkumulátorról való működés során</translation>
@@ -902,7 +897,6 @@
           Ezt a szabályt nem kötelező beállítani. Ha nincs megadva, nem lesz új lap oldal megjelenítve.
 
           A rendszer csak akkor veszi figyelembe ezt a szabályt, ha a „DefaultSearchProviderEnabled” szabály engedélyezve van.</translation>
-<translation id="3465852069254497664">A felhasználó értesítése arról, hogy ajánlott, illetve szükséges a böngésző újraindítása</translation>
 <translation id="346731943813722404">Meghatározza, hogy az energiagazdálkodási késleltetések és a munkamenet hosszúsági korlátja egy munkamenet során csak az első felhasználói tevékenység észlelése után kezdődjön-e.
 
           Ha az irányelv beállítása Igaz, akkor az energiagazdálkodási késleltetések és a munkamenet hosszúsági korlátja nem indul el egy munkamenet során az első felhasználói tevékenység észleléséig.
@@ -2101,17 +2095,6 @@
 
       Amikor a képernyő elsötétítésére kerül sor, az intelligens elsötétítési modell megállapítja, hogy el kell-e halasztani az elsötétítést. Ha a halasztás mellett dönt, meghosszabbítja az elsötétítésig hátralévő időt. Ebben az esetben a képernyő kikapcsolását és lezárását, illetve az üresjárati késleltetést úgy korrigálja, hogy megtartsa a képernyő elsötétítésénél eredetileg beállított időtávolságot.
       Ha a házirend értéke Igaz, vagy ha nincs beállítva, akkor az intelligens elsötétítési modell aktiválódik, és lehetővé teszi a képernyő elsötétítéséig hátralévő idő növelését. Ha a házirend értéke Hamis, akkor az intelligens elsötétítési modell nem befolyásolja a képernyő elsötétítését.</translation>
-<translation id="6982028490425791294">
-      Ha a házirend értéke igaz, a(z) <ph name="PRODUCT_NAME" /> engedélyt kap a WebRTC-eseménynaplók begyűjtésére a Google-szolgáltatásokból (pl. a Google Meet felületéről), valamint azok feltöltésére a Google rendszerébe.
-
-      Ha a házirend értéke hamis vagy nincs beállítva, a(z) <ph name="PRODUCT_NAME" /> nem gyűjtheti vagy töltheti fel a naplókat.
-
-      A naplókban olyan különböző információk kerülnek rögzítésre, mint a küldött és fogadott RTP-csomagok ideje vagy mérete, a hálózat túlterheltségéről szóló visszajelzés vagy az audió- és videókeretek idejéről és minőségéről szóló metaadatok. Az említett információk rendkívül hasznosak a Chrome-ban folytatott audió-vagy videóhívásokkal kapcsolatos hibakeresés során, például sávszélesség-becslési problémák stb. esetén.
-
-      Az adatgyűjtést csak a Google internetes szolgáltatásai kezdeményezhetik, mind például a Google Hangouts vagy a Google Meet.
-
-      A naplókat a Google összekapcsolhatja a munkamenet azonosítója alapján a saját maga által gyűjtött naplókkal, ezáltal egyszerűsítve hibakeresés folyamatát.
-      </translation>
 <translation id="6994082778848658360">Meghatározza, hogyan használható az integrált biztonságos hardverelem a kétlépcsős azonosítás biztosítására, amennyiben kompatibilis ezzel a funkcióval. A készülék bekapcsológombja használható a felhasználó fizikai jelenlétének észlelésére.
 
       A „Letiltva” érték kiválasztása esetén nincs használatban kétlépcsős azonosítás.
@@ -2917,11 +2900,6 @@
 <translation id="9035964157729712237">A feketelista alól kivételt képező bővítményazonosítók.</translation>
 <translation id="9042911395677044526">Lehetővé teszi a hálózati konfiguráció push módszerrel történő alkalmazását <ph name="PRODUCT_OS_NAME" /> eszközre. A hálózati konfiguráció a JSON formátumú karakterlánc által meghatározott Open Network Configuration formában leírt karakterlánc, amely a következő helyen van meghatározva: <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Megadja, hogy a videotevékenység hatással van-e az energiagazdálkodásra</translation>
-<translation id="9085839450090699752">Lehetővé teszi azon időtartam megadását (ezredmásodpercben), amelynek során a felhasználó látja az értesítést, hogy a <ph name="PRODUCT_NAME" /> böngészőt vagy a <ph name="PRODUCT_OS_NAME" />-eszközt újra kell indítani egy függőben lévő frissítés alkalmazásához.
-
-      Ezen időtartam során a felhasználó ismétlődő értesítést kap a frissítés szükségességéről. <ph name="PRODUCT_OS_NAME" />-eszközök esetében az újraindítási értesítés a tálcán jelenik meg, amikor a rendszer frissítést talál. Az értesítés színe megváltozik az értesítési időtartam felének eltelte után, majd újra megváltozik a teljes értesítési időtartam letelte után. A <ph name="PRODUCT_NAME" /> böngésző esetében az értesítési időtartam harmadának letelte után megváltozik az alkalmazásmenü, jelezve, hogy újraindításra van szükség. Az értesítés színe megváltozik az értesítési időtartam kétharmadának eltelte után, majd újra megváltozik a teljes értesítési időtartam letelte után. Az <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> házirend által engedélyezett további értesítések ugyanezt a módszert követik a böngésző esetében.
-
-      Ha a házirend nincs beállítva, akkor a <ph name="PRODUCT_OS_NAME" />-eszközök esetében az alapértelmezett érték 345 600 000 ezredmásodperc (négy nap), a böngésző esetében pedig 604 800 000 ezredmásodperc (egy hét).</translation>
 <translation id="9088433379343318874">Felügyelt felhasználó tartalomszolgáltatójának engedélyezése</translation>
 <translation id="9088444059179765143">Az automatikus időzóna-érzékelés módszerének konfigurálása</translation>
 <translation id="9096086085182305205">Azonosítási szerverek engedélyezési listája</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index 1d65d8c..aed4ba54 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -177,6 +177,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Aktifkan pemblokiran injeksi software pihak ketiga</translation>
 <translation id="1504431521196476721">Pengesahan Jarak Jauh</translation>
+<translation id="1507957856411744193">Jika kebijakan ini disetel ke true, <ph name="PRODUCT_NAME" /> akan terhubung ke perangkat Transmisi di semua alamat IP, bukan hanya alamat pribadi RFC1918/RFC4913.
+
+          Jika kebijakan ini disetel ke false, <ph name="PRODUCT_NAME" /> hanya akan terhubung ke perangkat Transmisi di alamat pribadi RFC1918/RFC4913.
+
+          Jika kebijakan ini tidak disetel, <ph name="PRODUCT_NAME" /> hanya akan terhubung ke perangkat Transmisi di alamat pribadi RFC1918/RFC4913, kecuali fitur CastAllowAllIPs diaktifkan.
+
+          Jika kebijakan "EnableMediaRouter" disetel ke false, nilai kebijakan ini tidak akan berpengaruh.</translation>
 <translation id="1509692106376861764">Kebijakan ini tidak lagi digunakan mulai <ph name="PRODUCT_NAME" /> versi 29.</translation>
 <translation id="1514888685242892912">Aktifkan <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Izinkan situs melacak lokasi fisik pengguna</translation>
@@ -350,11 +357,6 @@
 
           Jika kebijakan ini dibiarkan tidak disetel, keempat skema akan digunakan seluruhnya.</translation>
 <translation id="2067011586099792101">Memblokir akses ke situs di luar paket konten</translation>
-<translation id="2070270043919235595">Beri tahu pengguna bahwa <ph name="PRODUCT_NAME" /> harus diluncurkan ulang untuk menerapkan update yang tertunda.
-
-      Setelan kebijakan ini mengaktifkan notifikasi untuk memberi tahu pengguna bahwa peluncuran ulang browser direkomendasikan atau diperlukan. Jika tidak disetel, <ph name="PRODUCT_NAME" /> memberi tahu pengguna bahwa peluncuran ulang diperlukan melalui sedikit perubahan pada menunya. Jika disetel ke 'Recommended', akan muncul peringatan berulang yang menunjukkan bahwa peluncuran ulang direkomendasikan. Pengguna dapat menutup peringatan ini untuk menunda peluncuran ulang. Jika disetel ke 'Required', akan muncul peringatan berulang yang menunjukkan bahwa peluncuran ulang browser akan dilakukan secara paksa setelah periode notifikasi terlampaui. Periode ini akan disetel secara default menjadi 7 hari, dan dapat dikonfigurasi melalui setelan kebijakan <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Sesi pengguna akan dilanjutkan kembali setelah peluncuran ulang.</translation>
 <translation id="2073552873076775140">Izinkan login ke <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Gunakan akselerasi hardware jika tersedia</translation>
 <translation id="2077273864382355561">Penundaan mematikan layar saat menggunakan daya baterai</translation>
@@ -886,7 +888,6 @@
           Kebijakan ini bersifat opsional. Jika tidak disetel, halaman tab baru tidak akan diberikan.
 
           Kebijakan ini dipatuhi hanya jika kebijakan 'DefaultSearchProviderEnabled' diaktifkan.</translation>
-<translation id="3465852069254497664">Beri tahu pengguna bahwa peluncuran ulang browser direkomendasikan atau diperlukan</translation>
 <translation id="346731943813722404">Menentukan apakah penundaan pengelolaan daya dan batas lama sesi hanya mulai berjalan setelah aktivitas pengguna pertama teramati dalam sebuah sesi.
 
           Jika kebijakan disetel ke True, penundaan pengelolaan daya dan batas lama sesi tidak mulai berjalan sampai aktivitas pengguna pertama teramati dalam sebuah sesi.
@@ -1939,6 +1940,7 @@
 
       Kebijakan <ph name="SYNC_DISABLED_POLICY_NAME" /> menonaktifkan semua sinkronisasi data, menggantikan RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Filter konten khusus dewasa dari situs level teratas (namun bukan iframe yang tersemat)</translation>
+<translation id="6734521799274931721">Mengontrol fitur Berbagi File Jaringan untuk ketersediaan ChromeOS</translation>
 <translation id="6735701345096330595">Mengaktifkan paksa pemeriksaan ejaan bahasa</translation>
 <translation id="673699536430961464">Setelan ini memungkinkan pengguna beralih ke akun Google lain di dalam area konten jendela browser setelah mereka login ke perangkat <ph name="PRODUCT_OS_NAME" />.
 
@@ -2088,17 +2090,6 @@
 
       Saat layar akan diredupkan, model redup smart akan mengevaluasi apakah peredupan layar sebaiknya ditunda. Jika model redup smart menunda peredupan layar, maka hal itu secara efektif akan memperpanjang waktu hingga layar diredupkan. Dalam hal ini, penundaan layar nonaktif, layar terkunci, dan layar menganggur disesuaikan untuk mempertahankan agar interval penundaan peredupan layar tetap sama dengan yang semula dikonfigurasi.
       Jika kebijakan ini ditetapkan ke True atau tidak ditetapkan, model redup smart akan diaktifkan dan diizinkan untuk memperpanjang waktu hingga layar diredupkan. Jika kebijakan ini ditetapkan ke False, model redup smart tidak akan memengaruhi peredupan layar.</translation>
-<translation id="6982028490425791294">
-      Jika kebijakan disetel ke true, <ph name="PRODUCT_NAME" /> diizinkan untuk mengumpulkan log aktivitas WebRTC dari layanan Google (mis., Google Meet), dan mengupload log tersebut ke Google.
-
-      Jika kebijakan disetel ke false, atau tidak disetel, <ph name="PRODUCT_NAME" /> mungkin tidak mengumpulkan atau mengupload log tersebut.
-
-      Log ini berisi informasi seperti waktu dan ukuran paket RTP yang dikirim dan diterima, masukan tentang kemacetan di jaringan, dan metadata tentang waktu dan kualitas frame audio dan video. Informasi ini bermanfaat saat melakukan debug masalah pada panggilan audio atau video di Chrome, misalnya masalah perkiraan bandwidth, dan lainnya. Log tidak berisi konten audio atau video dari panggilan telepon.
-
-      Pengumpulan data ini hanya dapat dipicu oleh layanan web Google, seperti Google Hangouts atau Google Meet.
-
-      Log ini dapat dikaitkan, melalui ID sesi, dengan log lain yang dikumpulkan oleh layanan Google itu sendiri. Ini dimaksudkan agar debug lebih mudah.
-      </translation>
 <translation id="6994082778848658360">Menentukan bagaimana hardware elemen pengaman on-board digunakan untuk memberikan autentikasi faktor kedua jika kompatibel dengan fitur ini. Tombol power mesin digunakan untuk mendeteksi keberadaan pengguna.
 
       Jika 'Dinonaktifkan' dipilih, tidak ada faktor kedua yang diberikan.
@@ -2883,11 +2874,6 @@
 <translation id="9035964157729712237">ID Ekstensi yang dikeluarkan dari daftar hitam</translation>
 <translation id="9042911395677044526">Memungkinkan konfigurasi jaringan dorongan untuk diterapkan per pengguna ke perangkat <ph name="PRODUCT_OS_NAME" />. Konfigurasi jaringan adalah string berformat JSON seperti yang didefinisikan oleh format Konfigurasi Jaringan Terbuka yang diuraikan di <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Tentukan apakah aktivitas video memengaruhi pengelolaan daya</translation>
-<translation id="9085839450090699752">Memungkinkan Anda menetapkan periode waktu, dalam milidetik, yang selama periode tersebut pengguna akan menerima notifikasi bahwa <ph name="PRODUCT_NAME" /> harus dijalankan ulang atau perangkat <ph name="PRODUCT_OS_NAME" /> harus dimulai ulang untuk menerapkan update yang tertunda.
-
-      Selama periode waktu ini, pengguna akan terus-menerus diberi tahu tentang perlunya melakukan update. Untuk perangkat <ph name="PRODUCT_OS_NAME" />, notifikasi untuk memulai ulang perangkat akan ditampilkan di baki sistem ketika ada upgrade yang terdeteksi. Warna notifikasi akan berubah setelah separuh periode notifikasi berlalu, dan berubah lagi setelah seluruh periode notifikasi berlalu. Untuk browser <ph name="PRODUCT_NAME" />, warna menu aplikasi akan berubah setelah 1/3 periode notifikasi berlalu untuk menunjukkan bahwa browser perlu dijalankan ulang. Warna notifikasi akan berubah lagi setelah 2/3 periode notifikasi berlalu, dan berubah sekali lagi setelah seluruh periode notifikasi berlalu. Notifikasi tambahan yang diaktifkan oleh kebijakan <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> untuk browser mengikuti jadwal yang sama seperti ini.
-
-      Jika tidak ditetapkan, periode default 345.600.000 milidetik (4 hari) akan digunakan untuk perangkat <ph name="PRODUCT_OS_NAME" /> dan 604.800.000 milidetik (1 minggu) untuk browser.</translation>
 <translation id="9088433379343318874">Izinkan penyedia konten pengguna yang dilindungi</translation>
 <translation id="9088444059179765143">Mengonfigurasi metode deteksi zona waktu otomatis</translation>
 <translation id="9096086085182305205">Daftar putih server autentikasi</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 49c602b..a6f20e9b 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -174,6 +174,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Attiva blocco inserimento da software di terze parti</translation>
 <translation id="1504431521196476721">Attestazione da remoto</translation>
+<translation id="1507957856411744193">Se questa norma è impostata su True, <ph name="PRODUCT_NAME" /> si connetterà ai dispositivi di trasmissione su tutti gli indirizzi IP, non soltanto su indirizzi privati RFC1918/RFC4913.
+
+          Se questa norma è impostata su False, <ph name="PRODUCT_NAME" /> si connetterà ai dispositivi di trasmissione soltanto su indirizzi privati RFC1918/RFC4913.
+
+          Se questa norma non è impostata, <ph name="PRODUCT_NAME" /> si connetterà ai dispositivi di trasmissione soltanto su indirizzi privati RFC1918/RFC4913, a meno che non sia attiva la funzione CastAllowAllIPs.
+
+          Se la norma "EnableMediaRouter" è impostata su False, allora il valore di questa norma non produrrà alcun effetto.</translation>
 <translation id="1509692106376861764">Questa norma non è più supportata a partire dalla versione 29 di <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1514888685242892912">Attiva <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Consenti ai siti di monitorare la posizione fisica degli utenti</translation>
@@ -339,11 +346,6 @@
 
           Se questa norma non viene impostata, vengono utilizzati tutti e quattro gli schemi.</translation>
 <translation id="2067011586099792101">Blocca l'accesso ai siti non presenti nei pacchetti di contenuti</translation>
-<translation id="2070270043919235595">Notifica agli utenti che <ph name="PRODUCT_NAME" /> deve essere riavviato per applicare l'aggiornamento in attesa.
-
-      Questa impostazione della norma consente di informare l'utente tramite notifiche che è obbligatorio o consigliato eseguire un riavvio del browser. Se non è impostata, <ph name="PRODUCT_NAME" /> indica all'utente che è necessario un riavvio tramite piccole modifiche al menu. Se impostata su "Recommended", all'utente verrà mostrato un avviso ricorrente con un riavvio consigliato. L'utente può ignorare questo avviso e rimandare il riavvio. Se impostata su "Required", verrà visualizzato un avviso ricorrente all'utente che indica che il riavvio del browser sarà forzato una volta trascorso il periodo di notifica. Per impostazione predefinita, il periodo di notifica è di sette giorni e può essere configurato tramite l'impostazione della norma <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      La sessione dell'utente viene ripristinata dopo il riavvio.</translation>
 <translation id="2073552873076775140">Consenti di eseguire l'accesso a <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Usa accelerazione hardware quando disponibile</translation>
 <translation id="2077273864382355561">Ritardo disattivazione schermo in caso di utilizzo della batteria</translation>
@@ -870,7 +872,6 @@
 Questa norma è facoltativa. Se non viene impostata non verrà fornita una pagina Nuova scheda.
 
 Questa norma viene rispettata soltanto se viene attivata la norma "DefaultSearchProviderEnabled".</translation>
-<translation id="3465852069254497664">Notifica a un utente che è consigliato o necessario eseguire un riavvio del browser</translation>
 <translation id="346731943813722404">Consente di specificare se i ritardi di gestione dell'alimentazione e il limite di durata delle sessioni devono iniziare soltanto dopo il rilevamento dell'attività del primo utente in una sessione.
 
 Se questa norma viene impostata su True, i ritardi di gestione dell'alimentazione e il limite di durata delle sessioni non iniziano fino al termine del rilevamento dell'attività del primo utente in una sessione.
@@ -1905,6 +1906,7 @@
 
       La norma <ph name="SYNC_DISABLED_POLICY_NAME" /> consente di disattivare la sincronizzazione di tutti i dati e sostituisce la norma RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Filtra i siti di contenuti per adulti di primo livello (ma non gli iframe incorporati)</translation>
+<translation id="6734521799274931721">Consente di controllare la disponibilità della funzione Condivisioni file di rete per Chrome OS</translation>
 <translation id="6735701345096330595">Forza attivazione lingue per controllo ortografico</translation>
 <translation id="673699536430961464">Questa impostazione consente agli utenti di passare da un account Google a un altro all'interno dell'area dei contenuti della finestra del browser dopo avere eseguito l'accesso al dispositivo <ph name="PRODUCT_OS_NAME" />.
 
@@ -2047,17 +2049,6 @@
 
 Quando lo schermo sta per essere oscurato, il modello di oscuramento smart valuta se posticipare l'azione. In tal caso, il tempo prima che lo schermo venga oscurato viene effettivamente prolungato e il ritardo di inattività, la disattivazione dello schermo e il blocco dello schermo vengono regolati in modo da rispettare gli intervalli di tempo rispetto al ritardo oscuramento schermo configurati in precedenza.
 Se questa norma è impostata su vero o non è impostata, il modello di oscuramento smart verrà attivato e la quantità di tempo prima che lo schermo venga oscurato verrà estesa. Se questa norma è impostata su falso, il modello di oscuramento smart non inciderà sull'oscuramento dello schermo.</translation>
-<translation id="6982028490425791294">
-      Se questa norma viene impostata su true, <ph name="PRODUCT_NAME" /> è autorizzato a raccogliere log eventi WebRTC dai servizi Google (ad esempio Google Meet) e a caricarli su Google.
-
-      Se la norma viene impostata su false o non viene impostata, <ph name="PRODUCT_NAME" /> non può raccogliere e caricare tali log.
-
-      Questi log contengono informazioni quali data/ora e dimensioni dei pacchetti RTP inviati e ricevuti, feedback sulla congestione della rete, nonché metadati su tempo e qualità dei frame audio e video. Queste informazioni sono utili per il debug di problemi con le chiamate audio o le videochiamate in Chrome, ad esempio i problemi relativi alla stima della larghezza di banda. I log non contengono l'audio o i video delle chiamate.
-
-      La raccolta dei dati può essere attivata soltanto dai servizi web di Google, ad esempio Google Hangouts o Google Meet.
-
-      I log potrebbero essere associati tramite un ID sessione ad altri log raccolti dal servizio Google stesso al fine di facilitare il debug.
-      </translation>
 <translation id="6994082778848658360">Consente di specificare in che modo è possibile usare l'hardware degli elementi di sicurezza su scheda per fornire l'autenticazione a due fattori, se compatibile con questa funzione. Il tasto di accensione del computer viene usato per rilevare la presenza fisica dell'utente.
 
        Se selezioni l'opzione "Disabilitata", non viene fornita l'autenticazione a due fattori.
@@ -2833,11 +2824,6 @@
 <translation id="9035964157729712237">ID delle estensioni da escludere dalla blacklist</translation>
 <translation id="9042911395677044526">Consente di forzare l'applicazione della configurazione di rete per utente su un dispositivo <ph name="PRODUCT_OS_NAME" />. La configurazione di rete è una stringa in formato JSON definita secondo il formato Open Network Configuration descritto all'indirizzo <ph name="ONC_SPEC_URL" />.</translation>
 <translation id="9084985621503260744">Specifica se l'attività video incide sulla gestione dell'alimentazione</translation>
-<translation id="9085839450090699752">Consente di stabilire per quanto tempo, in millisecondi, gli utenti riceveranno notifiche relative alla necessità di riavviare <ph name="PRODUCT_NAME" /> o un dispositivo <ph name="PRODUCT_OS_NAME" /> per applicare un aggiornamento in sospeso.
-
-      Durante questo periodo di tempo l'utente verrà informato più volte della necessità di un aggiornamento. Per quanto riguarda i dispositivi <ph name="PRODUCT_OS_NAME" />, nella barra delle applicazioni viene mostrata una notifica relativa al riavvio quando viene rilevato un upgrade. Questa notifica cambia colore una volta trascorso metà del periodo di notifica e lo cambia di nuovo al termine dell'intero periodo di notifica. Per quanto riguarda i browser <ph name="PRODUCT_NAME" />, il menu delle app cambia per indicare che è necessario il riavvio una volta trascorso un terzo del periodo di notifica. Questa notifica cambia colore una volta trascorsi due terzi del periodo di notifica e lo cambia di nuovo al termine dell'intero periodo di notifica. Le notifiche aggiuntive attivate in base alla norma <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> relativa ai browser seguono questa stessa pianificazione.
-
-      Se la norma non viene impostata, viene usato il periodo predefinito di 345600000 millisecondi (quattro giorni) per i dispositivi <ph name="PRODUCT_OS_NAME" /> e di 604800000 millisecondi (una settimana) per i browser.</translation>
 <translation id="9088433379343318874">Abilita il provider di contenuti dell'utente supervisionato</translation>
 <translation id="9088444059179765143">Configura il metodo di rilevamento automatico del fuso orario</translation>
 <translation id="9096086085182305205">Whitelist server di autenticazione</translation>
diff --git a/components/policy/resources/policy_templates_iw.xtb b/components/policy/resources/policy_templates_iw.xtb
index 1bb5d221..3b9d838 100644
--- a/components/policy/resources/policy_templates_iw.xtb
+++ b/components/policy/resources/policy_templates_iw.xtb
@@ -352,11 +352,6 @@
 
  אם מדיניות זו לא תוגדר, המערכת תשתמש בכל ארבע הסכמות.</translation>
 <translation id="2067011586099792101">חסום את הגישה לאתרים שמחוץ לחבילות תוכן</translation>
-<translation id="2070270043919235595">הצגת הודעה למשתמשים על כך שצריך להפעיל מחדש את <ph name="PRODUCT_NAME" /> כדי להחיל עדכון שנמצא בהמתנה.
-
-      המדיניות הזו מאפשרת להציג למשתמש הודעות על כך שמומלץ לבצע הפעלה מחדש של הדפדפן, או שהיא נדרשת. אם המדיניות לא מוגדרת, <ph name="PRODUCT_NAME" /> מציין למשתמש שיש צורך בהפעלה מחדש בעזרת שינויים קלים במראה התפריט. אם היא מוגדרת כ'מומלצת', תוצג למשתמש אזהרה חוזרת על כך שמומלץ להפעיל מחדש את הדפדפן. המשתמש יכול לסגור את האזהרה כדי לדחות את ההפעלה מחדש. אם המדיניות מוגדרת כ'נדרשת', תוצג למשתמש אזהרה חוזרת על כך שתבוצע הפעלה מחדש כפויה של הדפדפן בסיום תקופת ההודעה. התקופה נקבעת כברירת מחדל לשבעה ימים, ואפשר לשנות אותה דרך הגדרת המדיניות <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      בסיום ההפעלה מחדש המשתמש יוחזר למצב שבו היה.</translation>
 <translation id="2073552873076775140">אישור הכניסה ל-<ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">השתמש בהאצת חומרה כשניתן</translation>
 <translation id="2077273864382355561">השהיה של כיבוי מסך בזמן שימוש בסוללה</translation>
@@ -890,7 +885,6 @@
           מדיניות זו היא אופציונלית. אם היא אינה מוגדרת, לא יסופק דף כרטיסייה חדשה.
 
           מדיניות זו מכובדת רק אם המדיניות 'DefaultSearchProviderEnabled' מופעלת.</translation>
-<translation id="3465852069254497664">הצגת הודעה למשתמש על כך שמומלצת או נדרשת הפעלה מחדש של הדפדפן</translation>
 <translation id="346731943813722404">‏מציינת האם הגבלת אורך ההפעלה והשהיית ניהול צריכת החשמל צריכות להתחיל לרוץ רק אחרי זיהוי הפעילות הראשונה של משתמש בהפעלה.
 
 אם המדיניות הזו מוגדרת כ-true, הגבלת אורך ההפעלה והשהיית ניהול צריכת החשמל לא מתחילות לרוץ עד לאחר זיהוי הפעילות הראשונה של המשתמש בהפעלה.
@@ -2085,17 +2079,6 @@
       כשעומד להתרחש עמעום של המסך, מודל העמעום החכם בודק אם יש לדחות את העמעום. אם מודל העמעום החכם ידחה את העמעום, הוא מאריך את הזמן עד לביצוע העמעום. במקרה זה מעודכנות ההגדרות של עיכוב עד לכיבוי המסך, נעילת המסך וחוסר פעילות כדי לשמור על אותם פרקי זמן מעיכוב עמעום המסך כפי שהוגדרו במקור.
 
       אם המדיניות מוגדרת כ-True או אינה מוגדרת, מודל העמעום החכם יופעל ויורשה להאריך את הזמן עד לעמעום המסך. אם המדיניות מוגדרת כ-False, מודל העמעום החכם לא ישפיע על עמעום המסך.</translation>
-<translation id="6982028490425791294">‏
-      אם המדיניות הזו מוגדרת כ-true, ‏<ph name="PRODUCT_NAME" /> רשאי לאסוף יומנים של אירועי WebRTC משירותי Google (למשל Google Meet) ולהעלות את היומנים האלה אל Google.
-
-      אם המדיניות מוגדרת כ-false או אינה מוגדרת, <ph name="PRODUCT_NAME" /> אינו רשאי לאסוף או להעלות יומנים כאלה.
-
-      היומנים האלה מכילים מידע כמו השעה שבה נשלחו והתקבלו חבילות RTP והגודל שלהן, משוב לגבי עומס ברשת ומטא-נתונים לגבי משך הזמן והאיכות של מסגרות וידאו ואודיו. המידע הזה עוזר לנפות באגים בשיחות אודיו או וידאו ב-Chrome – למשל בעיות בהערכת רוחב הפס. היומנים לא מכילים את תוכן האודיו או הווידאו מהשיחה.
-
-      את איסוף הנתונים יכולים להפעיל רק שירותי האינטרנט של Google, כמו Google Hangouts או Google Meet.
-
-      ייתכן שהמערכת תשייך באמצעות מזהה סשן בין היומנים האלה לבין יומנים אחרים שנאספו על-ידי שירות Google עצמו. מטרת השיוך היא להקל על ניפוי הבאגים.
-      </translation>
 <translation id="6994082778848658360">‏מציינת איך אפשר להשתמש ברכיב החומרה המובנה לאבטחה כדי לספק אימות לפי גורם שני, אם  הרכיב תואם לתכונה הזו. לחצן ההפעלה של המחשב משמש לזיהוי הנוכחות הפיזית של המשתמש.
 
       אם תבחר באפשרות 'מושבת', לא יסופק גורם שני.
@@ -2900,11 +2883,6 @@
 <translation id="9035964157729712237">מזהי תוספים שפטורים מהוספה לרשימה השחורה</translation>
 <translation id="9042911395677044526">‏מאפשרת לדחוף את תצורת הרשת כדי שתיושם עבור משתמש למכשיר <ph name="PRODUCT_OS_NAME" />. תצורת הרשת היא מחרוזת בפורמט JSON כפי שהוגדרה על ידי פורמט תצורת הרשת הפתוחה, באופן המתואר ב-<ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">ציין האם פעילות וידאו משפיעה על ניהול צריכת החשמל</translation>
-<translation id="9085839450090699752">מאפשרת לך לקבוע את תקופת הזמן באלפיות שנייה להצגת הודעה למשתמש על כך שצריך להפעיל מחדש את <ph name="PRODUCT_NAME" /> או מכשיר <ph name="PRODUCT_OS_NAME" /> כדי להחיל עדכון בהמתנה.
-
-      בתקופת הזמן הזו תוצג למשתמש באופן חוזר ההודעה לגבי הצורך בעדכון. במכשירי <ph name="PRODUCT_OS_NAME" />, הודעה על הצורך בהפעלה מחדש מופיעה במגש המערכת כשיש שדרוג זמין. צבע ההודעה משתנה בתום חצי מתקופת ההודעה, ושוב אחרי שחולפת תקופת הזמן המלאה של ההודעה. בדפדפני <ph name="PRODUCT_NAME" />, בתום שליש מתקופת ההודעה תפריט האפליקציות משתנה כדי לציין שיש צורך בהפעלה מחדש. צבע ההודעה הזו משתנה אחרי שחולפים שני שליש מתקופת ההודעה, ושוב אחרי שחולפת תקופת הזמן המלאה של ההודעה. ההודעות הנוספות שמופעלות במדיניות <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> לדפדפנים פועלות לפי אותו לוח זמנים.
-
-      אם היא לא מוגדרת, ייעשה שימוש בתקופת ברירת המחדל: 345600000 אלפיות שנייה (ארבעה ימים) בשביל מכשירי <ph name="PRODUCT_OS_NAME" /> ו-604800000 אלפיות שנייה (שבוע) בשביל דפדפנים.</translation>
 <translation id="9088433379343318874">הפעלת ספק התוכן של המשתמש בפיקוח</translation>
 <translation id="9088444059179765143">קבע את תצורת השיטה לזיהוי אוטומטי של אזור זמן</translation>
 <translation id="9096086085182305205">רשימת היתרים של שרת אימות</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 91262c39..801f9fc 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -190,6 +190,13 @@
          <ph name="PROXY_HELP_URL" /></translation>
 <translation id="1502843533062797703">第三者ソフトウェアからのコードの挿入をブロックする</translation>
 <translation id="1504431521196476721">リモート認証</translation>
+<translation id="1507957856411744193">このポリシーが true に設定されている場合、<ph name="PRODUCT_NAME" /> は、RFC1918 と RFC4913 のプライベート アドレスだけでなくすべての IP アドレスのキャスト デバイスに接続します。
+
+          このポリシーが false に設定されている場合、<ph name="PRODUCT_NAME" /> は、RFC1918 と RFC4913 のプライベート アドレスのキャスト デバイスにのみ接続します。
+
+          このポリシーが未設定の場合、<ph name="PRODUCT_NAME" /> は、RFC1918 と RFC4913 のプライベート アドレスのキャスト デバイスにのみ接続します(CastAllowAllIPs 機能が有効になっている場合を除く)。
+
+          EnableMediaRouter ポリシーが false に設定されている場合、このポリシーの値は適用されません。</translation>
 <translation id="1509692106376861764">このポリシーは <ph name="PRODUCT_NAME" /> バージョン 29 で廃止されました。</translation>
 <translation id="1514888685242892912"><ph name="PRODUCT_NAME" /> を有効にする</translation>
 <translation id="1522425503138261032">サイトに対してユーザーの物理的な現在地の追跡を許可する</translation>
@@ -363,11 +370,6 @@
 
           このポリシーが未設定の場合、4 つのスキームのすべてが使用されます。</translation>
 <translation id="2067011586099792101">コンテンツ パック外部のサイトへのアクセスをブロックする</translation>
-<translation id="2070270043919235595">保留中のアップデートを適用するには <ph name="PRODUCT_NAME" /> の再起動が必要であることをユーザーに通知します。
-
-      このポリシー設定は、ブラウザの再起動を推奨するか必要とすることをユーザーに示す通知を有効にするものです。このポリシーを設定しない場合、再起動が必要であることをユーザーに知らせるために <ph name="PRODUCT_NAME" /> のメニュー表示がわずかに変更されます。このポリシーを「推奨」に設定した場合は、再起動を推奨する警告がユーザーに繰り返し表示されます。ユーザーはこの警告を閉じて再起動を遅らせることができます。このポリシーを「必須」に設定した場合は、通知期間を過ぎるとブラウザが自動的に再起動されることを示す警告がユーザーに繰り返し表示されます。この期間はデフォルトでは 7 日間で、<ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> ポリシー設定で変更できます。
-
-      再起動後はユーザー セッションが復元されます。</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> へのログインを許可する</translation>
 <translation id="2077129598763517140">ハードウェア アクセラレーションが使用可能な場合は使用する</translation>
 <translation id="2077273864382355561">画面がオフになるまでの時間(バッテリー電源での実行時)</translation>
@@ -899,7 +901,6 @@
           このポリシーは省略できます。設定しないと新しいタブ ページは提供されません。
 
           このポリシーは、DefaultSearchProviderEnabled ポリシーが有効の場合にのみ適用されます。</translation>
-<translation id="3465852069254497664">ブラウザの再起動が推奨されるか必要であることをユーザーに通知する</translation>
 <translation id="346731943813722404">電源管理の遅延とセッションの時間制限の開始は、セッションでユーザーが何らかの操作をしてからにするかどうかを指定します。
 
           このポリシーが true に設定された場合、電源管理の遅延とセッションの時間制限の開始は、セッションでユーザーが何らかの操作をするまで行われません。
@@ -1951,6 +1952,7 @@
 
       <ph name="SYNC_DISABLED_POLICY_NAME" /> ポリシーが設定されている場合は、すべてのデータ同期が無効になります。この設定は、RoamingProfileSupportEnabled ポリシーの設定よりも優先されます。</translation>
 <translation id="6731757988219967594">アダルト コンテンツに基づいて最上位サイト(埋め込み iframe 以外)を除外する</translation>
+<translation id="6734521799274931721">Chrome OS でネットワーク ファイル共有を使用できるかどうかの設定</translation>
 <translation id="6735701345096330595">言語のスペルチェックを強制的に有効にする</translation>
 <translation id="673699536430961464">ユーザーが <ph name="PRODUCT_OS_NAME" /> デバイスにログインした後に、ブラウザ ウィンドウのコンテンツ領域内で Google アカウントを切り替えることができるかどうかを制御します。
 
@@ -2100,17 +2102,6 @@
 
       スマート消灯モデルでは、画面が暗くなる時間が近づいたときに時間を延長するかどうかが判定され、延長する場合は最適な時間に調整されます。この場合、画面オフ、画面ロック、アイドル判定までの時間も、最初の指定と同じ間隔で調整されます。
       このポリシーが True に設定されているか未設定の場合は、スマート消灯モデルが有効になり、画面が暗くなるまでの時間が必要に応じて延長されるようになります。このポリシーが False に設定されている場合は、画面が暗くなるまでの時間がスマート消灯モデルによって変更されることはありません。</translation>
-<translation id="6982028490425791294">
-      このポリシーが true に設定されている場合は、<ph name="PRODUCT_NAME" /> に対して、Google サービス(Google Meet など)からの WebRTC イベントログの収集と、Google へのそれらのログのアップロードが許可されます。
-
-      このポリシーが false に設定されているか未設定の場合、<ph name="PRODUCT_NAME" /> によるログの収集とアップロードは行われません。
-
-      これらのログには、送受信された RTP パケットの時間とサイズ、ネットワークの輻輳に関するフィードバック、音声および動画フレームの時間と品質に関するメタデータなどの情報が含まれます。これらの情報は、Chrome での音声や動画の呼び出しに関する問題(帯域幅の推定に関する問題など)をデバッグする際に役立ちます。なお、ログには、呼び出された音声や動画のコンテンツは含まれません。
-
-      このデータ収集は、Google のウェブサービス(Google ハングアウト、Google Meet など)からのみ行われます。
-
-      これらのログは、Google サービス自体により収集される別のログと、セッション ID を介して関連付けられることがあります。この関連付けは、デバッグを容易にする目的で行われます。
-      </translation>
 <translation id="6994082778848658360">搭載されているセキュア エレメント ハードウェアが 2 段階認証プロセスに対応している場合に、このプロセスを適用するためにハードウェアをどのように使用できるかを指定します。ユーザーの所在地を検出するには本体の電源ボタンを使用します。
 
       [無効にする] を選択した場合、2 段階認証プロセスは適用されません。
@@ -2915,11 +2906,6 @@
 <translation id="9035964157729712237">ブラックリストから除外する拡張機能 ID</translation>
 <translation id="9042911395677044526"><ph name="PRODUCT_OS_NAME" /> 端末のユーザーごとにプッシュ型ネットワーク設定を適用できます。ネットワーク設定は、Open Network Configuration 形式(<ph name="ONC_SPEC_URL" /> を参照)で定義された JSON 形式の文字列です。</translation>
 <translation id="9084985621503260744">動画操作を電源管理に関連付けるかどうかを指定する</translation>
-<translation id="9085839450090699752">保留中のアップデートを適用するため <ph name="PRODUCT_NAME" /> または <ph name="PRODUCT_OS_NAME" /> 搭載端末の再起動が必要であることをユーザーに通知する期間をミリ秒単位で設定します。
-
-      指定した期間中は、アップデートが必要であることがユーザーに繰り返し通知されます。<ph name="PRODUCT_OS_NAME" /> 搭載端末の場合、アップグレードが検出されると再起動の通知がシステムトレイに表示されます。この通知の色は、通知期間の半分が経過した時点で 1 回、通知期間が最後まで経過した時点でもう 1 回変化します。<ph name="PRODUCT_NAME" /> ブラウザの場合、通知期間の 3 分の 1 が経過した時点で、再起動が必要であることがアプリメニューに表示されます。この通知の色は、通知期間の 3 分の 2 が経過した時点で 1 回、通知期間が最後まで経過した時点でもう 1 回変化します。<ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> ポリシーによってブラウザで追加の通知を有効にしている場合は、同じパターンで通知が表示されます。
-
-      このポリシーが設定されていない場合、デフォルトの期間として <ph name="PRODUCT_OS_NAME" /> 搭載端末では 345600000 ミリ秒 (4 日間)、ブラウザでは 604800000 ミリ秒(1 週間)が使用されます。</translation>
 <translation id="9088433379343318874">監視対象ユーザーのコンテンツ プロバイダを有効にする</translation>
 <translation id="9088444059179765143">タイムゾーン自動検出の方法を設定する</translation>
 <translation id="9096086085182305205">認証サーバーのホワイトリスト</translation>
diff --git a/components/policy/resources/policy_templates_kn.xtb b/components/policy/resources/policy_templates_kn.xtb
index 8a86a9f..4bd9f100 100644
--- a/components/policy/resources/policy_templates_kn.xtb
+++ b/components/policy/resources/policy_templates_kn.xtb
@@ -34,6 +34,18 @@
           ಈ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ ಅಥವಾ ಕಾನ್ಫಿಗರ್ ಮಾಡದಿದ್ದಲ್ಲಿ, ರಿಮೋಟ್ ಸಹಾಯಕ ಹೋಸ್ಟ್ ಬಳಕೆದಾರರ ಸಂದರ್ಭದಲ್ಲಿ ರನ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ರಿಮೋಟ್ ಬಳಕೆದಾರರು ಡೆಸ್ಕ್‌ಟಾಪ್‌ನಲ್ಲಿನ ಉತ್ಕೃಷ್ಟಗೊಳಿಸಿದ ವಿಂಡೋಗಳ ಜೊತೆಗೆ ಸಂವಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="1096105751829466145">ಡಿಫಾಲ್ಟ್ ಹುಡುಕಾಟ ನೀಡುಗರು</translation>
 <translation id="1099282607296956954">ಪ್ರತಿ ಸೈಟ್‌ಗಾಗಿ ಸೈಟ್ ಪ್ರತ್ಯೇಕತೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
+<translation id="1100570158310952027">
+      ಅಸುರಕ್ಷಿತವಾದ ಮೂಲಗಳ ಮೇಲಿನ ಸುರಕ್ಷತಾ ನಿರ್ಬಂಧಗಳು ಅನ್ವಯವಾಗದ ಮೂಲಗಳು (URLs) ಅಥವಾ ಹೋಸ್ಟ್ ಹೆಸರಿನ ವಿನ್ಯಾಸಗಳ (ಉದಾಹರಣೆಗೆ, "*.example.com") ಪಟ್ಟಿಯನ್ನು ಈ ಕಾರ್ಯನೀತಿಯು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.
+
+      TLS ಅನ್ನು ನಿಯೋಜಿಸಲಾಗದ ಪರಂಪರಾನುಗತ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗಾಗಿ ಅನುಮತಿ ಪಟ್ಟಿಯಲ್ಲಿರುವ ಮೂಲಗಳನ್ನು ಹೊಂದಿಸಲು ಸಂಸ್ಥೆಗಳಿಗೆ ಅವಕಾಶ ನೀಡುವುದು ಅಥವಾ ಸ್ಟೇಜಿಂಗ್ ಸರ್ವರ್‌ನಲ್ಲಿ TLS ಅನ್ನು ನಿಯೋಜಿಸುವ ಅಗತ್ಯವಿಲ್ಲದೆಯೇ, ಸುರಕ್ಷಿತ ಸನ್ನಿವೇಶಗಳ ಅಗತ್ಯವಿರುವ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಸಂಸ್ಥೆಯ ಡೆವಲಪರ್‌ಗಳು ಪರೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ ಆಂತರಿಕ ವೆಬ್ ಅಭಿವೃದ್ಧಿಗಾಗಿ ಸ್ಟೇಜಿಂಗ್ ಸರ್ವರ್ ಅನ್ನು ಹೊಂದಿಸಲು ಅವಕಾಶ ನೀಡುವುದು ಇದರ ಉದ್ದೇಶವಾಗಿದೆ. ಆಮ್ನಿಬಾಕ್ಸ್‌ನಲ್ಲಿ ಮೂಲವನ್ನು "ಸುರಕ್ಷಿತವಲ್ಲ" ಎಂದು ಲೇಬಲ್ ಮಾಡುವುದನ್ನು ಕೂಡಾ ಈ ಕಾರ್ಯನೀತಿಯು ತಡೆಗಟ್ಟುತ್ತದೆ.
+     
+      ಈ ಕಾರ್ಯನೀತಿಯಲ್ಲಿ URL ಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸುವುದರ ಪರಿಣಾಮ ಮತ್ತು ಕಮಾಂಡ್-ಲೈನ್ ಫ್ಲ್ಯಾಗ್ '--unsafely-treat-insecure-origin-as-secure' ಅನ್ನು ಅಲ್ಪವಿರಾಮಗಳ ಮೂಲಕ ಪ್ರತ್ಯೇಕಿಸಿರುವ ಇದೇ URL ಗಳ ಪಟ್ಟಿಗೆ ಹೊಂದಿಸುವುದರ ಪರಿಣಾಮವು ಸಮಾನವಾಗಿರುತ್ತದೆ. ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸಿದರೆ, ಅದು ಕಮಾಂಡ್-ಲೈನ್ ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಓವರ್‌ರೈಡ್ ಮಾಡುತ್ತದೆ.
+
+      UnsafelyTreatInsecureOriginAsSecure ಇದ್ದರೆ, ಈ ಕಾರ್ಯನೀತಿಯು ಅದನ್ನು ಅತಿಕ್ರಮಿಸುತ್ತದೆ.
+
+      ಸುರಕ್ಷಿತ ಸನ್ನಿವೇಶಗಳ ಕುರಿತು ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ
+      https://www.w3.org/TR/secure-contexts/ ನೋಡಿ.
+      </translation>
 <translation id="1117535567637097036">Android ಉದ್ದೇಶಗಳನ್ನು ನಿರ್ವಹಿಸುವಾಗ ಈ ನೀತಿಯ ಮೂಲಕ ಹೊಂದಿಸಲಾದ ಪ್ರೊಟೊಕಾಲ್‌ ಹ್ಯಾಂಡಲರ್‌ಗಳನ್ನು ಬಳಸಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="1118093128235245168">ಸಂಪರ್ಕಗೊಂಡಿರುವ USB ಸಾಧನಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಬೇಕೆ ಎಂದು ಬಳಕೆದಾರರನ್ನು ಕೇಳಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಿ</translation>
 <translation id="1128903365609589950">ಡಿಸ್ಕ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಿದ ಫೈಲ್‌ಗಳನ್ನು ಬಳಸುವುದಕ್ಕಾಗಿ <ph name="PRODUCT_NAME" /> ಬಳಸುವ ಡೈರೆಕ್ಟರಿಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತದೆ.
@@ -78,6 +90,7 @@
       ನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಇದ್ದರೆ ಅಥವಾ ತಪ್ಪು ಎಂಬುದಕ್ಕೆ ಹೊಂದಿಸಿದರೆ, ಆಗ TLS ನಲ್ಲಿ RC4 ಸೈಫರ್ ಸ್ಯೂಟ್ಸ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ. ಇಲ್ಲದಿದ್ದರೆ, ಅವಧಿ ಮೀರಿದ ಸರ್ವರ್ ಜೊತೆಗೆ ಹೊಂದಾಣಿಕೆಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲು ಅದನ್ನು ಸರಿ ಎಂಬುದಕ್ಕೆ ಹೊಂದಿಸಲಾಗಬಹುದು. ಇದು ತಾತ್ಕಾಲಿಕ ಕ್ರಮವಾಗಿರುತ್ತದೆ ಮತ್ತು ಸರ್ವರ್ ಅನ್ನು ಮರುಕಾನ್ಫಿಗರ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.</translation>
 <translation id="1297182715641689552">.pac ಪ್ರಾಕ್ಸಿ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಬಳಸಿ</translation>
 <translation id="1304973015437969093">ವಿಸ್ತರಣೆ IDಗಳು ಮತ್ತು ಅಪ್‌ಡೇಟ್‌‌ URLಗಳನ್ನು ನಿಶ್ಯಬ್ದವಾಗಿ ಸ್ಥಾಪಿಸಬೇಕು</translation>
+<translation id="1307454923744766368">ಅಸುರಕ್ಷಿತ ಮೂಲಗಳ ಮೇಲಿನ ನಿರ್ಬಂಧಗಳು, ಈ ಮೂಲಗಳಿಗೆ ಅಥವಾ ಹೋಸ್ಟ್‌ ಹೆಸರಿನ ವಿನ್ಯಾಸಗಳಿಗೆ ಅನ್ವಯವಾಗಬಾರದು</translation>
 <translation id="1313457536529613143">ಪರದೆಯು ಮಸುಕಾಗಿರುವ ಸಂದರ್ಭದಲ್ಲಿ ಬಳಕೆದಾರರ ಚಟುವಟಿಕೆಯನ್ನು ಗಮನಿಸುತ್ತಿರುವಾಗ ಅಥವಾ ಪರದೆಯನ್ನು ಆಫ್ ಮಾಡಿದ ತಕ್ಷಣ ಕೆಲವೇ ಸಮಯ ನಂತರ ಯಾವ ಪರದೆ ಮಸುಕು ವಿಳಂಬವನ್ನು ಅಳತೆ ಮಾಡಲಾಗಿದೆ ಎಂಬುದರ ಮೂಲಕ ಪ್ರತಿಶತವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.
 
           ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸಿದರೆ, ಪರದೆಯು ಮಸುಕಾಗಿರುವ ಸಂದರ್ಭದಲ್ಲಿ ಬಳಕೆದಾರರ ಚಟುವಟಿಕೆಯನ್ನು ಗಮನಿಸುತ್ತಿರುವಾಗ ಅಥವಾ ಪರದೆಯನ್ನು ಆಫ್ ಮಾಡಿದ ತರುವಾಯ ಕೆಲವೇ ಸಮಯ ನಂತರ ಯಾವ ಪರದೆ ಮಸುಕು ವಿಳಂಬವನ್ನು ಅಳತೆ ಮಾಡಲಾಗಿದೆ ಎಂಬುದರ ಮೂಲಕ ಇದು ಪ್ರತಿಶತವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಮಸುಕು ವಿಳಂಬವನ್ನು ಅಳತೆ ಮಾಡುವಾಗ, ಮೂಲತಃ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿರುವಂತೆ ಪರದೆ ಮಸುಕಿನಿಂದ ಅದೇ ಅಂತರಗಳನ್ನು ಕಾಯ್ದುಕೊಳ್ಳವುದಕ್ಕಾಗಿ ಸರಿಹೊಂದಿಕೊಳ್ಳಲು ಪರದೆ ಆಫ್, ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಮತ್ತು ಐಡಲ್ ವಿಳಂಬಗೊಳ್ಳುತ್ತವೆ.
@@ -94,6 +107,11 @@
     Google ವೆಬ್ ಹುಡುಕಾಟದಲ್ಲಿರುವ ಪ್ರಶ್ನೆಗಳನ್ನು ಸುರಕ್ಷಿತಹುಡುಕಾಟವನ್ನು ಸಕ್ರಿಯ ಸ್ಥಿತಿಗೆ ಹೊಂದಿಸುವ ಮೂಲಕ ಪೂರೈಸುವಂತೆ ಒತ್ತಾಯಿಸುತ್ತದೆ ಮತ್ತು ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸದಂತೆ ಬಳಕೆದಾರರನ್ನು ತಡೆಗಟ್ಟುತ್ತದೆ. YouTube ನಲ್ಲಿರುವ ಮಧ್ಯಮ ನಿರ್ಬಂಧಿತ ಮೋಡ್ ಅನ್ನು ಸಹ ಒತ್ತಾಯಿಸುತ್ತದೆ.    ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನೀವು ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ, 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">ಈ ನೀತಿಯನ್ನು ತಪ್ಪಾಗಿ ಹೊಂದಿಸಿದ ಸಂದರ್ಭದಲ್ಲಿ, ಬಳಕೆದಾರರು ಲಾಗ್‌ಇನ್‌ ಆಗಿರುವಾಗ ಸಾಧನದಲ್ಲಿ ಆಡಿಯೋ ಔಟ್‌ಪುಟ್‌ ಲಭ್ಯವಿರುವುದಿಲ್ಲ.
 
@@ -202,6 +220,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 ನ ಸುರಕ್ಷತೆ ಮೂಲದ ವಿರುದ್ಧವಾಗಿ
       ಹೊಂದಾಣಿಕೆ ಮಾಡಲಾಗುತ್ತದೆ. ಹೊಂದಾಣಿಕೆ ಕಂಡುಬಂದರೆ, SAML ಲಾಗ್‌ಇನ್ ಪುಟಗಳಲ್ಲಿ
@@ -365,11 +384,6 @@
 
            ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಬಿಟ್ಟಲ್ಲಿ, ಎಲ್ಲ ನಾಲ್ಕು ಸ್ಕೀಮ್‌ಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="2067011586099792101">ವಿಷಯದ ಪ್ಯಾಕ್‌ಗಳಿಂದ ಹೊರಗಿನ ಸೈಟ್‌ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
-<translation id="2070270043919235595">ಬಾಕಿ ಇರುವ ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಅನ್ವಯಿಸಲು <ph name="PRODUCT_NAME" /> ಅನ್ನು ಪುನರಾರಂಭಿಸಬೇಕು ಎಂದು ಬಳಕೆದಾರರಿಗೆ ತಿಳಿಸಿ.
-
-      ಬ್ರೌಸರ್ ಅನ್ನು ಪುನರಾರಂಭಿಸುವುದು ಅಗತ್ಯವಿದೆ ಅಥವಾ ಅದನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ ಎಂದು ಬಳಕೆದಾರರಿಗೆ ತಿಳಿಸಲು ಈ ಕಾರ್ಯನೀತಿ ಸೆಟ್ಟಿಂಗ್ ಅಧಿಸೂಚನೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ. ಇದನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, ಮೆನುವಿಗೆ ಸೂಕ್ಷ್ಮ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡುವ ಮೂಲಕ <ph name="PRODUCT_NAME" />, ಪುನರಾರಂಭಿಸುವ ಅಗತ್ಯವಿದೆಯೆಂದು ಬಳಕೆದಾರರಿಗೆ ಸೂಚನೆ ನೀಡುತ್ತದೆ. 'ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ' ಎಂದು ಹೊಂದಿಸಿದರೆ, ಪುನರಾರಂಭಿಸುವುದನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ ಎಂದು ಬಳಕೆದಾದರಿಗೆ ಸೂಚಿಸುವ, ಮರುಕಳಿಸುವ ಎಚ್ಚರಿಕೆಯನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ. ಪುನರಾರಂಭಿಸುವುದನ್ನು ಮುಂದೂಡಲು, ಬಳಕೆದಾರರು ಈ ಎಚ್ಚರಿಕೆಯನ್ನು ನಿರ್ಲಕ್ಷಿಸಬಹುದು. 'ಅಗತ್ಯವಿದೆ' ಎಂದು ಹೊಂದಿಸಿದರೆ, ಅಧಿಸೂಚನೆಯು ಮರೆಯಾದ ಬಳಿಕ, ಬ್ರೌಸರ್ ಅನ್ನು ಬಲವಂತವಾಗಿ ಪುನರಾರಂಭಿಸಲಾಗುವುದು ಎಂದು ಬಳಕೆದಾರರಿಗೆ ಸೂಚಿಸುವ, ಮರುಕಳಿಸುವ ಎಚ್ಚರಿಕೆಯನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ. ಈ ಕಾಲಾವಧಿಯು ಡಿಫಾಲ್ಟ್ ಆಗಿ ಏಳು ದಿನಗಳಾಗಿರುತ್ತದೆ ಮತ್ತು <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> ಕಾರ್ಯನೀತಿ ಸೆಟ್ಟಿಂಗ್ ಮೂಲಕ ಇದನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದು.
-
-      ಪುನರಾರಂಭಿಸಿದ ಬಳಿಕ, ಬಳಕೆದಾರರ ಸೆಶನ್ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗುವುದು.</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಅನುಮತಿಸಿ</translation>
 <translation id="2077129598763517140">ಲಭ್ಯವಿರುವಾಗ ಹಾರ್ಡ್‌ವೇರ್ ಆಕ್ಸಲರೇಶನ್ ಬಳಸು</translation>
 <translation id="2077273864382355561">ಬ್ಯಾಟರಿ ಪವರ್‌ನಲ್ಲಿ ರನ್‌ ಆಗುತ್ತಿರುವಾಗ ಪರದೆ ಆಫ್ ವಿಳಂಬವಾಗುತ್ತದೆ</translation>
@@ -929,7 +943,6 @@
           ಈ ನೀತಿಯು ಐಚ್ಛಿಕವಾಗಿದೆ. ಹೊಂದಿಸದೇ ಇದ್ದರೆ, ಯಾವುದೇ ಹೊಸ ಟ್ಯಾಬ್ ಪುಟವನ್ನು ಒದಗಿಸಲಾಗುವುದಿಲ್ಲ.
 
           'DefaultSearchProviderEnabled' ನೀತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ ಮಾತ್ರ ಈ ನೀತಿಯನ್ನು ಗೌರವಿಸಲಾಗುತ್ತದೆ.</translation>
-<translation id="3465852069254497664">ಬ್ರೌಸರ್ ಪುನರಾರಂಭಿಸುವುದು ಅಗತ್ಯವಿದೆ ಅಥವಾ ಅದನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ ಎಂಬುದನ್ನು ಬಳಕೆದಾರರ ಗಮನಕ್ಕೆ ತನ್ನಿ</translation>
 <translation id="346731943813722404">ಸೆಷನ್‌ನಲ್ಲಿನ ಮೊದಲ ಬಳಕೆದಾರರ ಚಟುವಟಿಕೆಯನ್ನು ಗಮನಿಸಿದ ನಂತರ ಮಾತ್ರವೇ ವಿದ್ಯುತ್ ನಿರ್ವಹಣೆ ವಿಳಂಬಗಳು ಮತ್ತು ಸೆಷನ್ ಅಳತೆ ಮಿತಿಯು ಚಾಲನೆಯು ಪ್ರಾರಂಭಗೊಳ್ಳಬೇಕೆ ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ.
 
           ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದರೆ, ಸೆಷನ್‌ನಲ್ಲಿನ ಮೊದಲ ಬಳಕೆದಾರರ ಚಟುವಟಿಕೆಯನ್ನು ಗಮನಿಸಿದ ನಂತರ ಮಾತ್ರವೇ ವಿದ್ಯುತ್ ನಿರ್ವಹಣೆ ವಿಳಂಬಗಳು ಮತ್ತು ಸೆಷನ್ ಅಳತೆ ಮಿತಿಯು ಚಾಲನೆಯನ್ನು ಪ್ರಾರಂಭಿಸುವುದಿಲ್ಲ.
@@ -1418,6 +1431,7 @@
 ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, ಏಕಕಾಲದಲ್ಲಿ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಲು ಮತ್ತು ಹೊಸ ವಿಂಡೋ/ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೆರೆಯಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸುತ್ತದೆ.
 ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, ಏಕಕಾಲದಲ್ಲಿ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಲು ಮತ್ತು ಹೊಸ ವಿಂಡೋ/ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೆರೆಯಲು ಸೈಟ್‌ಗಳಿಗೆ ನಿರಾಕರಿಸುತ್ತದೆ.</translation>
 <translation id="4680961954980851756">AutoFill ಸಕ್ರಿಯಗೊಳಿಸು</translation>
+<translation id="4703402283970867140">ಸ್ಕ್ರೀನ್ ಕಳೆಗುಂದಿಸುವವರೆಗಿನ ಅವಧಿಯನ್ನು ವಿಸ್ತರಿಸಲು ಸ್ಮಾರ್ಟ್ ಡಿಮ್ ಮಾದರಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="4722122254122249791">ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಮೂಲಗಳಿಗೆ ಸೈಟ್ ಸ್ಥಳವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="4722399051042571387">ತಪ್ಪಾಗಿದ್ದರೆ, ದುರ್ಬಲವಾದ ಮತ್ತು ಊಹಿಸಲು ಸುಲಭವಾದ ಪಿನ್‌ಗಳನ್ನು ಬಳಕೆದಾರರು ಹೊಂದಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.
 
@@ -2232,17 +2246,10 @@
 <translation id="6943577887654905793">Mac/Linux ಆದ್ಯತೆಯ ಹೆಸರು:</translation>
 <translation id="69525503251220566">ಡಿಫಾಲ್ಟ್‌ ಹುಟುಕಾಟ ಪೂರೈಕೆದಾರರಿಗಾಗಿ ಚಿತ್ರದ ಮೂಲಕ ಹುಟುಕಾಟದ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಪೂರೈಸುವ ಮಾನದಂಡ</translation>
 <translation id="6956272732789158625">ಕೀ ರಚನೆ ಬಳಸಲು ಯಾವುದೇ ಸೈಟ್ ಅನುಮತಿಸಬೇಡಿ</translation>
-<translation id="6982028490425791294">
-      ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದ್ದರೆ, Google ಸೇವೆಗಳಿಂದ (ಉದಾ., Google Meet) WebRTC ಈವೆಂಟ್ ಲಾಗ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಮತ್ತು ಆ ಲಾಗ್‌ಗಳನ್ನು Google ಗೆ ಅಪ್‌ಲೋಡ್ ಮಾಡಲು <ph name="PRODUCT_NAME" /> ಗೆ ಅನುಮತಿಸಲಾಗಿದೆ.
+<translation id="6965859329738616662">ಸ್ಕ್ರೀನ್ ಕಳೆಗುಂದಿಸುವವರೆಗಿನ ಅವಧಿಯನ್ನು ವಿಸ್ತರಿಸಲು ಸ್ಮಾರ್ಟ್ ಡಿಮ್ ಮಾದರಿಗೆ ಅನುಮತಿ ಇದೆಯೇ ಎನ್ನುವುದನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.
 
-      ಈ ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದ್ದರೆ ಅಥವಾ ಹೊಂದಿಸದೇ ಇದ್ದಲ್ಲಿ, <ph name="PRODUCT_NAME" /> ಇಂತಹ ಲಾಗ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸದಿರಬಹುದು ಅಥವಾ ಅಪ್‌ಲೋಡ್ ಮಾಡದಿರಬಹುದು.
-
-      ಕಳುಹಿಸಿದ ಮತ್ತು ಸ್ವೀಕರಿಸಿದ RTP ಪ್ಯಾಕೆಟ್‌ಗಳ ಸಮಯ ಮತ್ತು ಗಾತ್ರ, ನೆಟ್‌ವರ್ಕ್ ದಟ್ಟಣೆ ಕುರಿತು ಪ್ರತಿಕ್ರಿಯೆ ಹಾಗೂ ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊ ಫ್ರೇಮ್‌ಗಳ ಸಮಯ ಮತ್ತು ಗುಣಮಟ್ಟ ಕುರಿತ ಮೆಟಾಡೇಟಾದಂತ ಮಾಹಿತಿಯನ್ನು ಈ ಲಾಗ್‍ಗಳು ಒಳಗೊಂಡಿರುತ್ತವೆ. ಬ್ಯಾಂಡ್‌ವಿಡ್ತ್‌ ಅಂದಾಜು ಸಮಸ್ಯೆಗಳಂತಹ Chrome ನಲ್ಲಿನ ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊ ಕರೆಗಳ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸುವಾಗ ಈ ಮಾಹಿತಿಯು ಉಪಯುಕ್ತವಾಗಿದೆ. ಲಾಗ್‌ಗಳು ಕರೆಯ ಆಡಿಯೋ ಅಥವಾ ವೀಡಿಯೊ ವಿಷಯಗಳನ್ನು ಒಳಗೊಂಡಿರುವುದಿಲ್ಲ.
-
-      ಈ ಡೇಟಾ ಸಂಗ್ರಹಣೆಯನ್ನು, Google Hangouts ಅಥವಾ Google Meet ನಂತಹ Google ನ ವೆಬ್ ಸೇವೆಗಳಿಂದ ಮಾತ್ರ ಸಕ್ರಿಯಗೊಳಿಸಬಹುದು.
-
-      Google ಸೇವೆಯಿಂದಲೇ ಸಂಗ್ರಹಿಸಿದ ಇತರ ಲಾಗ್‌ಗಳೊಂದಿಗೆ ಅಂದರೆ ಸೆಷನ್ ಐಡಿ ಮೂಲಕ ಈ ಲಾಗ್‌ಗಳನ್ನು ಲಿಂಕ್ ಮಾಡಬಹುದು; ಡೀಬಗ್ ಮಾಡುವುದನ್ನು ಸುಲಭಗೊಳಿಸಲು ಇದನ್ನು ಮಾಡಲಾಗುತ್ತದೆ.
-      </translation>
+      ಸ್ಕ್ರೀನ್ ಕಳೆಗುಂದಿಸುವ ಸಮಯಕ್ಕೆ ನಿಕಟವಾಗಿರುವಾಗ, ಸ್ಕ್ರೀನ್ ಕಳೆಗುಂದಿಸುವುದನ್ನು ತಡೆಹಿಡಿಯಬೇಕೇ ಎನ್ನುವುದನ್ನು ಸ್ಮಾರ್ಟ್ ಡಿಮ್ ಮಾದರಿಯು ಮೌಲ್ಯಮಾಪನ ಮಾಡುತ್ತದೆ. ಸ್ಕ್ರೀನ್ ಕಳೆಗುಂದಿಸುವುದನ್ನು ಸ್ಮಾರ್ಟ್ ಡಿಮ್ ಮಾದರಿಯು ತಡೆಹಿಡಿದರೆ, ಸ್ಕ್ರೀನ್ ಕಳೆಗುಂದಿಸುವವರೆಗಿನ ಅವಧಿಯನ್ನು ಅದು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ವಿಸ್ತರಿಸುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಪರದೆ ಆಫ್, ಪರದೆ ಲಾಕ್ ಮತ್ತು ನಿಷ್ಕ್ರಿಯತೆಯ ವಿಳಂಬಗಳನ್ನು ಹೊಂದಿಸಲಾಗುವುದು ಮತ್ತು ಸ್ಕ್ರೀನ್ ಕಳೆಗುಂದಿಸುವಿಕೆ ವಿಳಂಬದಿಂದ ಮೊದಲು ಕಾನ್ಫಿಗರ್ ಮಾಡಿದಷ್ಟೇ ಅಂತರ ಕಾಯ್ದುಕೊಳ್ಳುವಂತೆ ಅವುಗಳನ್ನು ಹೊಂದಿಸಲಾಗುವುದು.
+      ಈ ಕಾರ್ಯನೀತಿಯನ್ನು True ಎಂಬುದಾಗಿ ಹೊಂದಿಸಿದರೆ ಅಥವಾ ಹೊಂದಿಸದೇ ಇದ್ದರೆ, ಸ್ಮಾರ್ಟ್ ಡಿಮ್ ಮಾದರಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುವುದು ಮತ್ತು ಸ್ಕ್ರೀನ್ ಕಳೆಗುಂದಿಸುವವರೆಗಿನ ಸಮಯವನ್ನು ವಿಸ್ತರಿಸಲು ಅನುಮತಿಸಲಾಗುವುದು. ಈ ಕಾರ್ಯನೀತಿಯನ್ನು False ಎಂಬುದಾಗಿ ಹೊಂದಿಸಿದರೆ, ಸ್ಮಾರ್ಟ್ ಡಿಮ್ ಮಾದರಿಯು, ಪರದೆಯನ್ನು ಕಳೆಗುಂದಿಸುವುದರ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ.</translation>
 <translation id="6994082778848658360">ಈ ವೈಶಿಷ್ಟ್ಯದ ಜೊತೆ ಹೊಂದಾಣಿಕೆಯಾಗುವುದಾದರೆ, ಎರಡನೆಯ ಅಂಶದ ದೃಢೀಕರಣವನ್ನು ಒದಗಿಸಲು ಅಂತರ್ಗತ ಸುರಕ್ಷಿತ ಅಂಶವುಳ್ಳ ಹಾರ್ಡ್‌ವೇರ್‍ ಅನ್ನು ಹೇಗೆ ಬಳಸಬಹುದು ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಬಳಕೆದಾರರ ದೈಹಿಕ ಉಪಸ್ಥಿತಿಯನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಯಂತ್ರದ ಪವರ್ ಬಟನ್ ಅನ್ನು ಉಪಯೋಗಿಸಲಾಗುತ್ತದೆ.
 
       'ನಿಷ್ಕಿಯಗೊಳಿಸಿ' ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ಎರಡನೆಯ ಅಂಶವನ್ನು ಒದಗಿಸಲಾಗುವುದಿಲ್ಲ.
@@ -2698,6 +2705,13 @@
 
       ನೀವು ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಸೇರಿಸಬಹುದಾಗಿದೆ, ತೆಗೆದುಹಾಕಬಹುದಾಗಿದೆ ಅಥವಾ ಅವುಗಳನ್ನು ಮಾರ್ಪಾಡು ಮಾಡಬಹುದಾಗಿದೆ. ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳ ಇನ್ನೂ ಲಭ್ಯವಿರುತ್ತದೆ.</translation>
 <translation id="802147957407376460">ಪರದೆಯನ್ನು 0 ಡಿಗ್ರಿಗಳಲ್ಲಿ ತಿರುಗಿಸಿ</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>
@@ -3041,6 +3055,20 @@
 <translation id="891435090623616439">JSON ಸ್ಟ್ರಿಂಗ್ ಎಂಬುದಾಗಿ ಎನ್‌ಕೋಡ್ ಮಾಡಲಾಗಿದೆ, ವಿವರಗಳಿಗೆ <ph name="COMPLEX_POLICIES_URL" /> ನೋಡಿ</translation>
 <translation id="8934944553121392674"><ph name="DEVICE_PRINTERS_POLICY" /> ಯಿಂದ ಯಾವ ಪ್ರಿಂಟರ್‌ಗಳು ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿವೆ ಎನ್ನುವುದನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. ದೊಡ್ಡ ಪ್ರಮಾಣದಲ್ಲಿ ಪ್ರಿಂಟರ್‌ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಯಾವ ಪ್ರವೇಶ ಕಾರ್ಯನೀತಿಯನ್ನು ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿಗದಿಪಡಿಸುತ್ತದೆ. <ph name="PRINTERS_ALLOW_ALL" /> ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ಎಲ್ಲ ಪ್ರಿಂಟರ್‌ಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ. <ph name="PRINTERS_BLACKLIST" /> ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ನಿರ್ದಿಷ್ಟ ಪ್ರಿಂಟರ್‌ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ನಿರ್ಬಂಧಿಸಲು <ph name="DEVICE_PRINTERS_BLACKLIST" /> ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. <ph name="PRINTERS_WHITELIST" /> ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ಆಯ್ಕೆ ಮಾಡಬಹುದಾದ ಪ್ರಿಂಟರ್‌ಗಳನ್ನು ಮಾತ್ರ <ph name="DEVICE_PRINTERS_WHITELIST" /> ನಿಗದಿಪಡಿಸುತ್ತದೆ. ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, <ph name="PRINTERS_ALLOW_ALL" /> ಎಂದು ಭಾವಿಸಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.
       </translation>
+<translation id="8938932171964587769">M69 ನಲ್ಲಿ ತಡೆಹಿಡಿಯಲಾಗಿದೆ. ಇದರ ಬದಲಿಗೆ,
+      OverrideSecurityRestrictionsOnInsecureOrigin ಬಳಸಿ.
+
+      ಅಸುರಕ್ಷಿತವಾದ ಮೂಲಗಳ ಮೇಲಿನ ಸುರಕ್ಷತಾ ನಿರ್ಬಂಧಗಳು ಅನ್ವಯವಾಗದ ಮೂಲಗಳು (URLs) ಅಥವಾ ಹೋಸ್ಟ್ ಹೆಸರಿನ ವಿನ್ಯಾಸಗಳ (ಉದಾಹರಣೆಗೆ, "*.example.com") ಪಟ್ಟಿಯನ್ನು ಈ ಕಾರ್ಯನೀತಿಯು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.
+TLS ಅನ್ನು ನಿಯೋಜಿಸಲಾಗದ ಪರಂಪರಾನುಗತ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗಾಗಿ ಅನುಮತಿ ಪಟ್ಟಿಯಲ್ಲಿರುವ ಮೂಲಗಳನ್ನು ಹೊಂದಿಸಲು ಸಂಸ್ಥೆಗಳಿಗೆ ಅವಕಾಶ ನೀಡುವುದು ಅಥವಾ ಸ್ಟೇಜಿಂಗ್ ಸರ್ವರ್‌ನಲ್ಲಿ TLS ಅನ್ನು ನಿಯೋಜಿಸುವ ಅಗತ್ಯವಿಲ್ಲದೆಯೇ, ಸುರಕ್ಷಿತ ಸನ್ನಿವೇಶಗಳ ಅಗತ್ಯವಿರುವ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಸಂಸ್ಥೆಯ ಡೆವಲಪರ್‌ಗಳು ಪರೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ ಆಂತರಿಕ ವೆಬ್ ಅಭಿವೃದ್ಧಿಗಾಗಿ ಸ್ಟೇಜಿಂಗ್ ಸರ್ವರ್ ಅನ್ನು ಹೊಂದಿಸಲು ಅವಕಾಶ ನೀಡುವುದು ಇದರ ಉದ್ದೇಶವಾಗಿದೆ. ಆಮ್ನಿಬಾಕ್ಸ್‌ನಲ್ಲಿ ಮೂಲವನ್ನು "ಸುರಕ್ಷಿತವಲ್ಲ" ಎಂದು ಲೇಬಲ್ ಮಾಡುವುದನ್ನು ಕೂಡಾ ಈ ಕಾರ್ಯನೀತಿಯು ತಡೆಗಟ್ಟುತ್ತದೆ.
+     
+      ಈ ಕಾರ್ಯನೀತಿಯಲ್ಲಿ URL ಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸುವುದರ ಪರಿಣಾಮ ಮತ್ತು ಕಮಾಂಡ್-ಲೈನ್ ಫ್ಲ್ಯಾಗ್ '--unsafely-treat-insecure-origin-as-secure' ಅನ್ನು ಅಲ್ಪವಿರಾಮಗಳ ಮೂಲಕ ಪ್ರತ್ಯೇಕಿಸಿರುವ ಇದೇ URL ಗಳ ಪಟ್ಟಿಗೆ ಹೊಂದಿಸುವುದರ ಪರಿಣಾಮವು ಸಮಾನವಾಗಿರುತ್ತದೆ. ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸಿದರೆ, ಅದು ಕಮಾಂಡ್-ಲೈನ್ ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಓವರ್‌ರೈಡ್ ಮಾಡುತ್ತದೆ.
+
+      ಈ ಕಾರ್ಯನೀತಿಯನ್ನು M69 ನಲ್ಲಿ ತಡೆಹಿಡಿದು, ಅದರ ಬದಲಿಗೆ 
+      OverrideSecurityRestrictionsOnInsecureOrigin ಅನ್ನು ಪರಿಚಯಿಸಲಾಯಿತು. ಎರಡೂ ಕಾರ್ಯನೀತಿಗಳಿದ್ದರೆ, OverrideSecurityRestrictionsOnInsecureOrigin ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಅತಿಕ್ರಮಿಸುತ್ತದೆ.
+
+      ಸುರಕ್ಷಿತ ಸನ್ನಿವೇಶಗಳ ಕುರಿತು ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ
+      https://www.w3.org/TR/secure-contexts/ ನೋಡಿ
+      </translation>
 <translation id="8942616385591203339">ಮೊದಲ ಸೈನ್-ಇನ್ ಸಮಯದಲ್ಲಿ ಸಿಂಕ್ ಸಮ್ಮತಿಯನ್ನು ಬಳಕೆದಾರರಿಗೆ ತೋರಿಸಿದರೆ ಈ ಕಾರ್ಯನೀತಿಯು ನಿಯಂತ್ರಿಸುತ್ತದೆ. ಬಳಕೆದಾರರಿಗೆ ಸಿಂಕ್ ಸಮ್ಮತಿ ಎಂದಿಗೂ ಅಗತ್ಯವಿಲ್ಲದಿದ್ದರೆ, ಇದನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಬೇಕು.
       ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದಲ್ಲಿ, ಸಿಂಕ್ ಸಮ್ಮತಿಯನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗುವುದಿಲ್ಲ.
       ನಿಜ ಎಂದು ಹೊಂದಿಸಿದಲ್ಲಿ ಅಥವಾ ಹೊಂದಿಸದೆ ಇದ್ದಲ್ಲಿ, ಸಿಂಕ್ ಸಮ್ಮತಿಯನ್ನು ಪ್ರದರ್ಶಿಸಬಹುದು.</translation>
@@ -3118,11 +3146,6 @@
 
           RemoteAccessHostDomain ಸಹ ನೋಡಿ.</translation>
 <translation id="9084985621503260744">ಪವರ್ ನಿರ್ವಹಣೆಯ ಮೇಲೆ ವೀಡಿಯೊ ಚಟುವಟಿಕೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆಯೇ ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿ</translation>
-<translation id="9085839450090699752">ಕಾಲಾವಧಿಯನ್ನು ಮಿಲಿಸೆಕೆಂಡುಗಳಲ್ಲಿ ಹೊಂದಿಸಲು ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಬಾಕಿಯಿರುವ ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಅನ್ವಯಿಸಲು <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" /> ಸಾಧನಗಳಿಗಾಗಿ 345600000 ಮಿಲಿಸೆಕೆಂಡುಗಳನ್ನು (ನಾಲ್ಕು ದಿನಗಳು) ಬಳಸಲಾಗುತ್ತದೆ ಮತ್ತು ಬ್ರೌಸರ್‌ಗಳಿಗಾಗಿ 604800000 ಮಿಲಿಸೆಕೆಂಡುಗಳನ್ನು (ಒಂದು ವಾರ) ಬಳಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="9088433379343318874">ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರ ವಿಷಯ ಒದಗಿಸುವವರನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="9088444059179765143">ಸ್ವಯಂಚಾಲಿತ ಸಮಯ ವಲಯ ಪತ್ತೆಹಚ್ಚುವಿಕೆ ವಿಧಾನವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡು</translation>
 <translation id="9096086085182305205">ಪ್ರಮಾಣೀಕರಣ  ಸರ್ವರ್ ಶ್ವೇತಪಟ್ಟಿ</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 4232a0b..c9f0454 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -115,7 +115,7 @@
 <translation id="1327466551276625742">오프라인일 때 네트워크 설정 프롬프트를 사용하도록 설정</translation>
 <translation id="1330145147221172764">터치 키보드 사용</translation>
 <translation id="13356285923490863">정책 이름</translation>
-<translation id="1352174694615491349">이 정책을 사용하면 클라이언트 인증서가 사용될 때 HTTP/2 연결 병합이 허용됩니다. 연결을 병합하려면 잠재적인 새로운 연결의 호스트 이름과 및 기존 연결의 호스트 이름이 이 정책에서 설명된 패턴 중 하나 이상과 일치해야 합니다. 이 정책은 URLBlacklist 필터 형식을 사용하는 호스트의 목록입니다. 예를 들어, 'example.com'은 'example.com' 및 모든 하위 도메인(예: 'sub.example.com')과 일치하며 'example.net'은 'example.net'과 정확하게 일치합니다.
+<translation id="1352174694615491349">이 정책을 사용하면 클라이언트 인증서가 사용될 때 HTTP/2 연결 병합이 허용됩니다. 연결을 병합하려면 잠재적인 새로운 연결의 호스트 이름과 기존 연결의 호스트 이름이 이 정책에서 설명된 패턴 중 하나 이상과 일치해야 합니다. 이 정책은 URLBlacklist 필터 형식을 사용하는 호스트의 목록입니다. 예를 들어, 'example.com'은 'example.com' 및 모든 하위 도메인(예: 'sub.example.com')과 일치하며 'example.net'은 'example.net'과 정확하게 일치합니다.
 
       클라이언트 인증서를 사용하는 연결을 통해 다른 호스트로 병합 요청이 전송되면 보안 및 개인정보 보호 문제를 일으킬 수 있습니다. 사용자가 명확하게 승인하지 않아도 앰비언트 권한이 모든 요청에 전달되기 때문입니다. 이 정책은 일시적으로 사용되며, 향후 버전에서 삭제될 예정입니다. https://crbug.com/855690을 참조하세요.
 
@@ -370,11 +370,6 @@
 
           이 정책을 설정하지 않은 경우 4개의 스키마를 모두 사용합니다.</translation>
 <translation id="2067011586099792101">콘텐츠 팩 외부 사이트에 대한 액세스를 차단합니다.</translation>
-<translation id="2070270043919235595">대기 중인 업데이트를 적용하려면 <ph name="PRODUCT_NAME" />을(를) 재실행해야 한다고 사용자에게 알립니다.
-
-      이 정책을 설정하면 사용자에게 브라우저 재실행이 필요하거나 권장된다는 알림이 전송됩니다. 정책을 설정하지 않으면 <ph name="PRODUCT_NAME" />의 메뉴가 미세하게 변경되어 재실행이 필요하다는 정보가 사용자에게 전달됩니다. 정책을 '권장'으로 설정하면 재실행하는 것이 좋다는 경고 메시지가 사용자에게 반복적으로 표시됩니다. 사용자는 이 경고를 무시하고 나중에 재실행할 수 있습니다. '필수'로 설정하면 알림 기간이 지난 후 브라우저가 강제로 재실행된다는 경고 메시지가 사용자에게 반복적으로 표시됩니다. 이 기간은 기본적으로 7일로 설정되어 있으며, <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> 정책 설정을 통해 변경할 수 있습니다.
-
-      재실행 후에는 사용자의 세션이 복원됩니다.</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> 로그인 허용</translation>
 <translation id="2077129598763517140">가능한 경우 하드웨어 가속 사용</translation>
 <translation id="2077273864382355561">배터리 전원으로 실행할 때 화면 꺼짐 지연</translation>
@@ -932,7 +927,6 @@
           이 정책은 선택사항입니다. 설정하지 않으면 새 탭 페이지가 제공되지 않습니다.
 
           이 정책은 'DefaultSearchProviderEnabled' 정책을 사용하도록 설정한 경우에만 적용됩니다.</translation>
-<translation id="3465852069254497664">사용자에게 브라우저 재실행이 필요하거나 권장된다고 알림</translation>
 <translation id="346731943813722404">세션에서 첫 번째 사용자 활동이 감지된 후에만 전원 관리 지연 및 세션 길이 제한을 실행할지 여부를 지정합니다.
 
           이 정책이 true로 설정되면 세션 내에서 첫 번째 사용자 활동이 감지되기 전까지 전원 관리 지연 및 세션 길이 제한이 실행되지 않습니다.
@@ -2179,17 +2173,6 @@
 
       화면이 어두워지기 직전에 스마트 밝기 낮추기 모델이 화면 밝기 낮추기를 지연할지 판단합니다. 스마트 밝기 낮추기 모델이 화면 밝기 낮추기를 지연하면 화면이 어두워질 때까지의 시간이 실질적으로 연장됩니다. 이 경우 화면 밝기 낮추기 지연 시간까지의 거리를 원래 설정과 동일하게 유지하기 위해 화면 꺼짐, 화면 잠금, 유휴상태 지연이 조정됩니다.
       이 정책이 True로 설정되거나 설정되지 않으면 스마트 밝기 낮추기 모델이 사용되며 화면이 어두워질 때까지의 시간을 연장하도록 허용됩니다. 이 정책이 False로 설정되면 스마트 밝기 낮추기 모델이 화면 밝기 낮추기에 영향을 주지 않습니다.</translation>
-<translation id="6982028490425791294">
-      이 정책이 true로 설정되어 있으면 <ph name="PRODUCT_NAME" />에서 Google 서비스(예: Google Meet)에서 WebRTC 이벤트 로그를 수집하고 이러한 로그를 Google로 업로드할 수 있도록 허용합니다.
-
-      이 정책이 false로 설정되어 있거나 설정되어 있지 않으면 <ph name="PRODUCT_NAME" />에서 이러한 로그를 수집하거나 업로드할 수 없습니다.
-
-      이러한 로그에는 주고받는 RTP 패킷의 시간 및 크기, 네트워크 혼잡에 관한 의견, 오디오/동영상 프레임의 시간 및 품질에 관한 메타데이터 등과 같은 정보가 포함됩니다. 이 정보는 대역폭 예상 문제 등과 같은 Chrome에서 음성/화상 통화 시 문제를 디버깅할 때 유용합니다. 로그에는 통화의 음성 또는 동영상 콘텐츠가 포함되어 있지 않습니다.
-
-      이 데이터 수집은 Google 행아웃, Google Meet와 같은 Google 웹 서비스에 의해서만 실행됩니다.
-
-      이러한 로그는 세션 ID를 통해 Google 서비스 자체에서 수집한 다른 로그와 연결될 수 있습니다. 이는 디버깅을 더 쉽게 하기 위해서입니다.
-      </translation>
 <translation id="6994082778848658360">내장된 보안 요소 하드웨어가 2단계 인증과 호환될 경우, 2단계 인증을 제공하는 데 어떻게 사용할지 지정합니다. 기기 전원 버튼은 사용자가 실제로 있는지 감지하는 데 사용됩니다.
 
       '사용 안함'을 선택하면 2차 요소가 제공되지 않습니다.
@@ -3030,11 +3013,6 @@
 <translation id="9035964157729712237">차단목록에서 제외할 확장 프로그램 ID</translation>
 <translation id="9042911395677044526"><ph name="PRODUCT_OS_NAME" /> 기기에 사용자별로 적용되는 네트워크 구성을 사용하도록 허용합니다. 네트워크 구성은 <ph name="ONC_SPEC_URL" />에서 설명한 개방형 네트워크 구성에서 정의한 대로 JSON 형식의 문자열입니다. </translation>
 <translation id="9084985621503260744">동영상 활동이 전원 관리에 영향을 미치는지 여부 지정</translation>
-<translation id="9085839450090699752">대기 중인 업데이트를 적용하려면 <ph name="PRODUCT_NAME" />을(를) 재실행해야 하거나 <ph name="PRODUCT_OS_NAME" /> 기기를 다시 시작해야 한다는 알림을 사용자에게 표시할 기간을 밀리초로 설정할 수 있습니다.
-
-      이 기간 동안 업데이트를 해야 한다는 알림이 사용자에게 반복적으로 표시됩니다. <ph name="PRODUCT_OS_NAME" /> 기기의 경우 업그레이드가 감지되면 재시작 알림이 작업 표시줄에 표시됩니다. 알림 기간이 절반 정도 지나면 알림의 색상이 바뀌며, 알림 기간이 모두 지나면 색상이 다시 한번 더 바뀝니다. <ph name="PRODUCT_NAME" /> 브라우저의 경우 알림 기간 중 3분의 1이 지나면 앱 메뉴가 변경되면서 재실행이 필요하다는 알림이 표시됩니다. 알림 기간 중 3분의 2가 지나면 알림 색상이 또 바뀌며 알림 기간이 모두 지나면 알림 색상이 다시 한번 더 바뀝니다. <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> 정책을 통해 사용 설정되는 추가 알림도 이와 동일한 일정을 따릅니다.
-
-      설정되지 않는 경우 <ph name="PRODUCT_OS_NAME" /> 기기의 경우 345600000밀리초(4일), 브라우저의 경우 604800000밀리초(1주일)가 기본값으로 사용됩니다.</translation>
 <translation id="9088433379343318874">관리 대상 사용자 콘텐츠 제공업체 사용</translation>
 <translation id="9088444059179765143">자동 시간대 감지 방법 설정</translation>
 <translation id="9096086085182305205">인증 서버 허용목록</translation>
diff --git a/components/policy/resources/policy_templates_lt.xtb b/components/policy/resources/policy_templates_lt.xtb
index 6a8e6c7..3aa444e 100644
--- a/components/policy/resources/policy_templates_lt.xtb
+++ b/components/policy/resources/policy_templates_lt.xtb
@@ -370,11 +370,6 @@
 
           Nenustačius šios politikos, bus naudojamos visos keturios schemos.</translation>
 <translation id="2067011586099792101">Blokuoti prieigą prie svetainių, nesančių turinio paketuose</translation>
-<translation id="2070270043919235595">Pranešama naudotojams, kad būtina iš naujo paleisti „<ph name="PRODUCT_NAME" />“, norint pritaikyti laukiantį naujinį.
-
-      Taikant šį politikos nustatymą įgalinami pranešimai, kuriais naudotojas informuojamas, kad rekomenduojama arba būtina iš naujo paleisti naršyklę. Nenustačius, „<ph name="PRODUCT_NAME" />“ subtiliais meniu pakeitimais nurodo naudotojui, kad reikia paleisti iš naujo. Nustačius kaip „Rekomenduojama“, naudotojui rodomas pasikartojantis įspėjimas, kad rekomenduojama paleisti iš naujo. Naudotojas gali atsisakyti šio pranešimo, kad atidėtų paleidimą iš naujo. Nustačius kaip „Būtina“, naudotojui rodomas pasikartojantis įspėjimas, nurodantis, kad naršyklė bus priverstinai paleista iš naujo pasibaigus pranešimo laikotarpiui. Pagal numatytuosius nustatymus šis laikotarpis yra septynios dienos. Jį galima konfigūruoti politikos „<ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />“ nustatymuose.
-
-      Paleidus iš naujo, naudotojo sesija atkuriama.</translation>
 <translation id="2073552873076775140">Leisti prisijungti prie „<ph name="PRODUCT_NAME" />“</translation>
 <translation id="2077129598763517140">Kai galima, naudoti aparatinės įrangos paspartinimą</translation>
 <translation id="2077273864382355561">Ekrano išjungimo delsa, kai naudojama akumuliatoriaus energija</translation>
@@ -932,7 +927,6 @@
           Ši politika pasirenkama. Jei ji nenustatyta, nebus pateikiamas jos naujo skirtuko puslapis.
 
           Į šią politiką atsižvelgiama, tik jei įgalinta politika „DefaultSearchProviderEnabled“.</translation>
-<translation id="3465852069254497664">Pranešimas naudotojui apie rekomenduojamą ar būtiną naršyklės paleidimą iš naujo</translation>
 <translation id="346731943813722404">Nurodo, ar energijos valdymo delsa ir seanso ilgio apribojimas turėtų būti suaktyvinti tik naudotojui pradėjus seanso veiklą.
 
           Jei ši politika nustatyta į „True“, energijos valdymo delsa ir seanso ilgio apribojimas nesuaktyvinami, kol naudotojas nepradeda seanso veiklos.
@@ -2187,17 +2181,6 @@
 
       Kai ekranas turėtų būti pritemdomas, išmanusis pritemdymo modelis įvertina, ar ekrano pritemdymo nereikia atidėti. Jei išmanusis pritemdymo modelis atideda ekrano pritemdymą, jis veiksmingai pratęsia laiką iki ekrano pritemdymo. Tokiu atveju ekrano išjungimo, ekrano užrakto ir neveikos būsenos delsos koreguojamos siekiant išlaikyti vienodą laiką nuo pirminės sukonfigūruotos pritemdymo delsos.
       Jei ši politika nustatyta kaip „True“ arba paliekama nenustatyta, išmanusis pritemdymo modelis bus įgalintas ir jam bus leista pratęsti laiką iki ekrano pritemdymo. Jei ši politika nustatyta kaip „False“, išmanusis pritemdymo modelis neturės įtakos ekrano pritemdymui.</translation>
-<translation id="6982028490425791294">
-      Jei ši politika nustatyta kaip „True“, „<ph name="PRODUCT_NAME" />“ leidžiama rinkti „WebRTC“ įvykių žurnalus iš „Google“ paslaugų (pvz., „Google Meet“) ir įkelti šiuos žurnalus į „Google“.
-
-      Jei ši politika nustatyta kaip „False“ arba nenustatyta, „<ph name="PRODUCT_NAME" />“ nerinks ir neįkels tokių žurnalų.
-
-      Šiuose žurnaluose yra tokios informacijos kaip išsiųstų ir gautų RTP paketų laikas ir dydis, atsiliepimai apie tinklo perpildymą ir metaduomenys apie garso ir vaizdo įrašų kadrų laiką ir kokybę. Ši informacija naudinga derinant problemas dėl garso ir vaizdo skambučių „Chrome“, pavyzdžiui, siuntimo spartos vertinimo problemas ir kt. Žurnaluose nėra skambučių garso ir vaizdo turinio.
-
-      Šį duomenų rinkimą gali suaktyvinti tik „Google“ žiniatinklio paslaugos, pvz., „Google Hangouts“ ar „Google Meet“.
-
-      Šie žurnalai naudojantis seanso ID gali būti susieti su kitais žurnalais, kuriuos surinko pačios „Google“ paslaugos; tai skirta lengvesniam derinimui.
-      </translation>
 <translation id="6994082778848658360">Nurodoma, kaip vidinė saugi elemento aparatinė įranga gali būti naudojama teikiant tapatybės nustatymą dviem veiksniais, jei ji suderinama su šia funkcija. Įrenginio maitinimo mygtukas naudojamas naudotojo buvimo vietai aptikti.
 
       Jei pasirinkta „Išjungta“, neteikiamas joks antras veiksnys.
@@ -3037,11 +3020,6 @@
 <translation id="9035964157729712237">Į juodąjį sąrašą neįtrauktinų plėtinių ID</translation>
 <translation id="9042911395677044526">Leidžiama pateikti tinklo konfigūraciją, kad būtų taikoma „<ph name="PRODUCT_OS_NAME" />“ įrenginiui pagal naudotoją. Tinklo konfigūracija yra JSON formatuota eilutė, apibrėžta pagal „Atvirosios tinklo konfigūracijos“ formatą, nurodytą šiuo adresu: <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Nurodykite, ar vaizdo įrašo veikla paveikia energijos valdymą</translation>
-<translation id="9085839450090699752">Leidžiama nustatyti laikotarpį (milisekundėmis), per kurį naudotojams pranešama, kad „<ph name="PRODUCT_NAME" />“ arba „<ph name="PRODUCT_OS_NAME" />“ įrenginį reikia paleisti iš naujo, norint pritaikyti laukiantį naujinį.
-
-      Per šį laikotarpį naudotojui bus pakartotinai pranešama apie reikalingą atnaujinimą. „<ph name="PRODUCT_OS_NAME" />“ įrenginiuose paleidimo iš naujo pranešimas rodomas sistemos juostelėje, kai aptinkamas naujovinimas. Praėjus pusei pranešimo laikotarpio ir dar kartą praėjus visam pranešimo laikotarpiui pakeičiama pranešimo spalva. Praėjus trečdaliui pranešimo laikotarpio „<ph name="PRODUCT_NAME" />“ naršyklėse pakeičiamas programų meniu nurodant, kad reikia paleisti iš naujo. Šio pranešimo spalva pakeičiama praėjus dviem trečdaliams pranešimo laikotarpiui ir dar kartą praėjus visam pranešimo laikotarpiui. Tas pats tvarkaraštis taikomas papildomiems pranešimams naršyklėse, įgalintiems taikant „<ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" />“ politiką.
-
-      Jei nenustatyta, „<ph name="PRODUCT_OS_NAME" />“ įrenginiams naudojamas numatytasis 345 600 000 milisekundžių (keturių dienų) laikotarpis, o naršyklėms – 604 800 000 milisekundžių (vienos savaitės) laikotarpis.</translation>
 <translation id="9088433379343318874">Įgalinti prižiūrimo naudotojo turinio teikėją</translation>
 <translation id="9088444059179765143">Automatinio laiko juostos aptikimo metodo konfigūravimas</translation>
 <translation id="9096086085182305205">Tapatumo nustatymo serverio baltasis sąrašas</translation>
diff --git a/components/policy/resources/policy_templates_lv.xtb b/components/policy/resources/policy_templates_lv.xtb
index 95cd9cf..877f710 100644
--- a/components/policy/resources/policy_templates_lv.xtb
+++ b/components/policy/resources/policy_templates_lv.xtb
@@ -357,11 +357,6 @@
 
           Ja šī politika nav iestatīta, tiek lietotas visas četras shēmas.</translation>
 <translation id="2067011586099792101">Bloķē piekļuvi vietnēm, kas nav iekļautas satura pakotnēs.</translation>
-<translation id="2070270043919235595">Paziņošana lietotājiem, ka pārlūks <ph name="PRODUCT_NAME" /> ir atkārtoti jāpalaiž, lai veiktu nepabeigtu atjaunināšanu.
-
-      Izmantojot šo politikas iestatījumu, tiek iespējoti paziņojumi lietotājiem par ieteicamu vai obligātu pārlūka atkārtotu palaišanu. Ja šī politika nav iestatīta, pārlūkā <ph name="PRODUCT_NAME" /> ar nelielām izmaiņām izvēlnē lietotājam tiek norādīts, ka ir jāveic atkārtota palaišana. Ja politikai ir iestatīta vērtība “Recommended”, lietotājam periodiski tiek rādīts brīdinājums par to, ka ieteicams veikt atkārtotu palaišanu. Lietotājs var noraidīt šo brīdinājumu, lai atliktu atkārtoto palaišanu. Ja šai politikai ir iestatīta vērtība “Required”, lietotājam periodiski tiek rādīts brīdinājums par to, ka pārlūks tiks atkārtoti palaists piespiedu kārtā, tiklīdz beigsies paziņojuma periods. Pēc noklusējuma šis periods ir septiņas dienas, un to var konfigurēt politikas <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> iestatījumos.
-
-      Pēc atkārtotas palaišanas tiek atjaunota lietotāja sesija.</translation>
 <translation id="2073552873076775140">Atļauja pierakstīties pārlūkā <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Izmantot aparatūras paātrināšanas režīmu, kad tas ir pieejams</translation>
 <translation id="2077273864382355561">Aizkave līdz ekrāna izslēgšanai, ja ierīce darbojas ar akumulatora jaudu</translation>
@@ -920,7 +915,6 @@
           Šī politika nav obligāta. Ja to neiestatīsiet, jaunas cilnes lapa netiks rādīta.
 
           Šī politika tiek ievērota tad, ja ir iespējota politika DefaultSearchProviderEnabled.</translation>
-<translation id="3465852069254497664">Paziņot lietotājam, ka ir ieteicama vai nepieciešama pārlūka atkārtota palaišana</translation>
 <translation id="346731943813722404">Norāda, vai jaudas pārvaldības aizkaves un sesijas ilguma ierobežojuma uzskaite tiek sākta tikai pēc tam, kad sesijā ir konstatēta lietotāja darbība.
 
           Ja politikas iestatījums ir “True” (patiess), jaudas pārvaldības aizkaves un sesijas ilguma ierobežojuma uzskaite tiek sākta tikai pēc tam, kad sesijā ir konstatēta pirmā lietotāja darbība.
@@ -2170,19 +2164,6 @@
 
       Pirms ekrāna aptumšošanas viedās aptumšošanas modelis izvērtē, vai ekrāna aptumšošana ir jāaizkavē. Ja viedās aptumšošanas modelis aizkavē ekrāna aptumšošanu, faktiski tiek paildzināts laiks līdz ekrāna aptumšošanai. Šādā gadījumā ekrāna izslēgšanas, ekrāna bloķēšanas un dīkstāves aizkaves tiek pielāgotas, lai nodrošinātu tādu pašu laiku kopš ekrāna aptumšošanas aizkaves, kā sākotnēji konfigurēts.
       Ja politikai ir iestatīta vērtība “True” vai tā nav iestatīta, viedās aptumšošanas modelis tiek iespējots un var paildzināt laiku līdz ekrāna aptumšošanai. Ja politikai ir iestatīta vērtība “False”, viedās aptumšošanas modelis neietekmē ekrāna aptumšošanu.</translation>
-<translation id="6982028490425791294">
-      Ja šai politikai ir iestatīta vērtība “True”, <ph name="PRODUCT_NAME" /> ir atļauts apkopot WebRTC notikumu žurnālus no Google pakalpojumiem (piem., Google Meet) un augšupielādēt šos žurnālus Google.
-
-      Ja šai politikai ir iestatīta vērtība “False” vai vērtība nav iestatīta, <ph name="PRODUCT_NAME" /> nedrīkst apkopot vai augšupielādēt tādus žurnālus.
-
-
-      Šie žurnāli satur informāciju, piemēram, nosūtīto un saņemto RTP paku laiks un izmērs, dati par pārslodzi tīklā un metadati par audio un video laiku un kvalitāti. Šī informācija ir noderīga, risinot audio vai video zvanu problēmas pārlūkā Chrome, piemēram, joslas platuma novērtējuma problēmas utt. Žurnāli nesatur zvana audio vai video saturu.
-
-
-      Šo datu apkopošanu var aktivizēt tikai Google tīmekļa pakalpojumi, piemēram, Google Hangouts vai Google Meet.
-
-      Šos žurnālus, izmantojot sesijas ID, var saistīt ar citiem žurnāliem, kurus apkopo pats Google pakalpojums; tas ir paredzēts, lai atvieglotu atkļūdošanu.
-      </translation>
 <translation id="6994082778848658360">Norāda, kā var izmantot pievienoto drošības elementa aparatūru divfaktoru autentificēšanai, ja tā ir saderīga ar šo funkciju.
 Lietotāja fiziskās klātbūtnes noteikšanai tiek izmantota ierīces barošanas poga.
 
@@ -3008,11 +2989,6 @@
 <translation id="9042911395677044526">Ļauj pārsūtīšanas tīkla konfigurāciju izmantot konkrētam lietotājam <ph name="PRODUCT_OS_NAME" /> ierīcē. Tīkla konfigurācija ir JSON formatēta virkne, kā 
 definēts Atvērta tīkla konfigurācijas formātā, kas aprakstīts šeit: <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Video darbības ietekmes uz jaudas pārvaldību norādīšana</translation>
-<translation id="9085839450090699752">Atļauj iestatīt laika periodus (milisekundēs), kuru laikā lietotāji tiek informēti par nepieciešamību atkārtoti palaist pārlūku <ph name="PRODUCT_NAME" /> vai restartēt <ph name="PRODUCT_OS_NAME" /> ierīci, lai varētu instalēt pieejamo atjauninājumu.
-
-      Iestatītajā laika periodā lietotājs atkārtoti saņems paziņojumus par atjaunināšanu. <ph name="PRODUCT_OS_NAME" /> ierīcēs paziņojums par restartēšanu tiek rādīts sistēmas teknē, kad ir atrasts jauninājums. Paziņojuma krāsa mainās, kad ir pagājusi puse no paziņojuma laika perioda, un pēc tam mainās atkārtoti, kad ir pagājis viss paziņojuma periods. Pārlūkā <ph name="PRODUCT_NAME" /> lietotņu izvēlnes krāsa mainās, kad ir pagājusi trešdaļa no paziņojuma perioda, tādējādi norādot, ka nepieciešama atkārtota palaišana. Šī paziņojuma krāsa mainās vēl vienu reizi, kad ir pagājušas divas trešdaļas paziņojuma perioda, un trešo reizi — paziņojuma perioda beigās. Tādā pašā veidā tiek rādīti arī pārlūka politikas <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> iespējotie papildu paziņojumi.
-
-      Ja šī politika nav iestatīta, <ph name="PRODUCT_OS_NAME" /> ierīcēs tiek izmantots noklusējuma periods 345 600 000 milisekundes (četras dienas), bet pārlūkos — 604 800 000 milisekundes (viena nedēļa).</translation>
 <translation id="9088433379343318874">Iespējot uzraudzītā lietotāja satura nodrošinātāju</translation>
 <translation id="9088444059179765143">Automātiskās laika joslas noteikšanas metodes konfigurēšana</translation>
 <translation id="9096086085182305205">Autentifikācijas serveru baltais saraksts</translation>
diff --git a/components/policy/resources/policy_templates_ml.xtb b/components/policy/resources/policy_templates_ml.xtb
index 3f54bab..ad327ef 100644
--- a/components/policy/resources/policy_templates_ml.xtb
+++ b/components/policy/resources/policy_templates_ml.xtb
@@ -406,13 +406,6 @@
 
           ഈ നയം സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിൽ, നാലു സ്‌കീമുകളും ഉപയോഗിക്കുന്നതാണ്.</translation>
 <translation id="2067011586099792101">ഉള്ളടക്ക പാക്കുകളുടെ പുറത്തുള്ള സൈറ്റുകളിലേക്ക് ആക്‌സസ്സ് തടയുക</translation>
-<translation id="2070270043919235595">തീർച്ചപ്പെടുത്താത്ത അപ്‌ഡേറ്റ് പ്രയോഗിക്കാൻ <ph name="PRODUCT_NAME" /> വീണ്ടും സമാരംഭിക്കേണ്ടതുണ്ട് എന്ന് ഉപയോക്താക്കളെ അറിയിക്കുക.
-
- ഈ നയ ക്രമീകരണം, ബ്രൗസർ വീണ്ടും സമാരംഭിക്കൽ ശുപാർശ ചെയ്യുന്നുണ്ടെന്നോ അത് ആവശ്യമാണെന്നോ ഉപയോക്താവിനെ അറിയിക്കാനുള്ള അറിയിപ്പുകൾ പ്രവർത്തനക്ഷമമാക്കുന്നു. 
-
-സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, ഇതിന്റെ മെനുവിലെ സൂക്ഷ്‌മമായ മാറ്റങ്ങളിലൂടെ വീണ്ടും സമാരംഭിക്കൽ ആവശ്യമാണെന്ന് <ph name="PRODUCT_NAME" /> ഉപയോക്താവിനോട് സൂചിപ്പിക്കുന്നു. 'ശുപാർശ ചെയ്‌തു' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, വീണ്ടും സമാരംഭിക്കൽ ശുപാർശ ചെയ്‌തിരിക്കുന്നതായി ആവർത്തിച്ചുള്ള മുന്നറിയിപ്പ് ഉപയോക്താവിനെ കാണിക്കും. വീണ്ടും സമാരംഭിക്കൽ നീട്ടിവെക്കാനായി ഉപയോക്താവിന് ഈ മുന്നറിയിപ്പ് നിരാകരിക്കാനാവും. 'ആവശ്യമാണ്' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, അറിയിപ്പ് കാലാവധി കഴിഞ്ഞാലുടൻ, ബ്രൗസർ നിർബന്ധിത  സമാരംഭിക്കലിന് വിധേയമാകുമെന്ന് സൂചിപ്പിക്കുന്ന ആവർത്തിച്ചുള്ള മുന്നറിയിപ്പ് ഉപയോക്താവിനെ കാണിക്കും. ഡിഫോൾട്ടായി ഏഴ് ദിവസമാണ് ഇതിന്റെ കാലാവധി, മാത്രമല്ല <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> നയ ക്രമീകരണം വഴി ഇത് കോണ്‍ഫിഗര്‍ ചെയ്‌തേക്കാം.
-
-  വീണ്ടും സമാരംഭിക്കലിനെ തുടർന്ന് ഉപയോക്താവിന്റെ സെഷൻ പുനഃസ്ഥാപിക്കപ്പെടും.</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> ഉൽപ്പന്നത്തിലേക്ക് സൈൻ ഇൻ ചെയ്യാൻ അനുവദിക്കുക</translation>
 <translation id="2077129598763517140">ലഭ്യമാകുമ്പോൾ ഹാർഡ്‌വെയർ ത്വരിതപ്പെടുത്തൽ ഉപയോഗിക്കുക</translation>
 <translation id="2077273864382355561">ബാറ്ററി പവറിൽ പ്രവർത്തിക്കുമ്പോൾ സ്‌ക്രീൻ ഓഫ് ആകുന്നതിന്റെ കാലതാമസം</translation>
@@ -1016,7 +1009,6 @@
           ഈ നയം ഓപ്‌ഷണലാണ്. സജ്ജമാക്കിയിട്ടില്ലെങ്കിൽ, പുതിയ ടാബ് പേജൊന്നും ലഭിക്കില്ല.
 
           'DefaultSearchProviderEnabled' നയം പ്രവർത്തനക്ഷമമെങ്കിൽ മാത്രമേ ഈ നയം ബാധകമാകൂ.</translation>
-<translation id="3465852069254497664">ബ്രൗസർ വീണ്ടും സമാരംഭിക്കൽ ശുപാർശ ചെയ്യുന്നു എന്നോ ആവശ്യമാണ് എന്നോ ഉപയോക്താവിനെ അറിയിക്കുക</translation>
 <translation id="346731943813722404">പവർ മാനേജുമെന്റ് കാലതാമസങ്ങളും സെഷൻ ദൈർഘ്യ പരിധിയും പ്രവർത്തിച്ചുതുടങ്ങേണ്ടത് ഒരു സെഷനിലെ ആദ്യ ഉപയോക്തൃ പ്രവർത്തനം നീരിക്ഷിച്ചതിനുശേഷം മാത്രമാണോയെന്നത് വ്യക്തമാക്കുന്നു.
 
           ഈ നയം True എന്ന് സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ, പവർ മാനേജുമെന്റ് കാലതാമസങ്ങളും സെഷൻ ദൈർഘ്യ പരിധിയും ഒരു സെഷനിലെ ആദ്യ ഉപയോക്തൃ പ്രവർത്തനം നീരിക്ഷിക്കപ്പെടുന്നതുവരെ പ്രവർത്തിച്ചുതുടങ്ങില്ല.
@@ -2423,17 +2415,6 @@
 സ്ക്രീൻ മങ്ങിക്കാനാവുമ്പോൾ, സ്‌മാർട്ട് ഡിം മോഡൽ, സ്ക്രീനിന്റെ മങ്ങിക്കൽ നീട്ടിവെക്കണോ എന്ന് വിലയിരുത്തുന്നു. സ്‌മാർട്ട് ഡിം മോഡൽ സ്ക്രീൻ മങ്ങുന്നത് നീട്ടിവെക്കുന്നു എങ്കിൽ, സ്ക്രീൻ മങ്ങുന്നത് വരെയുള്ള സമയം ഇത് ഫലപ്രദമായി ദീർഘിപ്പിക്കും. ഈ സാഹചര്യത്തിൽ, സ്ക്രീൻ ഓഫ്, സ്ക്രീൻ ലോക്ക്, നിഷ്ക്രിയമായിരിക്കുമ്പോഴുള്ള കാലതാമസം എന്നിവ, യഥാർത്ഥത്തിൽ കോൺഫിഗർ ചെയ്‌ത അതേ സ്ക്രീൻ മങ്ങൽ കാലതാമസത്തിൽ നിന്നുള്ള പരിധികൾ നിലനിർത്താനായി ക്രമീകരിക്കപ്പെടുന്നു.
 
 ഈ നയം 'ശരി' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിലോ സജ്ജീകരിക്കാതിരുന്നാലോ, സ്‌മാർട്ട് ഡിം മോഡൽ പ്രവർത്തനക്ഷമമാക്കുകയും സ്ക്രീൻ മങ്ങുന്നതുവരെ സമയം ദീർഘിപ്പിക്കാൻ അനുവദിക്കുകയും ചെയ്യും. ഈ നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, സ്ക്രീൻ മങ്ങിക്കുന്നതിനെ, സ്‌മാർട്ട് ഡിം മോഡൽ ബാധിക്കില്ല.</translation>
-<translation id="6982028490425791294">
-      നയം 'ട്രൂ' ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, Google സേവനങ്ങളിൽ (ഉദാഹരണത്തിന് Google Meet) നിന്ന് WebRTC ഇവന്റ് ലോഗുകളെ ശേഖരിക്കുന്നതിനും ആ ലോഗുകൾ Google-ലേക്ക് അപ്‌ലോഡ് ചെയ്യുന്നതിനും <ph name="PRODUCT_NAME" /> അനുവദിക്കപ്പെടും.
-
-      ഈ നയം 'ഫാൾസ്' ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിലോ സജ്ജീകരിക്കാതെ വിട്ടിരിക്കുന്നുവെങ്കിലോ, അത്തരം ലോഗുകളെ <ph name="PRODUCT_NAME" /> ശേഖരിച്ചേക്കില്ല അല്ലെങ്കിൽ അപ്‌ലോഡ് ചെയ്തേക്കില്ല.
-
-      അയയ്ക്കുകയും സ്വീകരിക്കുകയും ചെയ്യുന്ന RTP പാക്കറ്റുകളുടെ സമയത്തെയും വലുപ്പത്തെയും കുറിച്ചുള്ള വിവരങ്ങൾ, നെറ്റ്‌വർക്കിലെ തിക്കും തിരക്കിനെയും കുറിച്ചുള്ള ഫീഡ്‌ബാക്ക്, ഓഡിയോ - വീഡിയോ ഫ്രെയിമുകളുടെ സമയത്തെയും ഗുണനിലവാരത്തെയും കുറിച്ചുള്ള മെറ്റാഡാറ്റ എന്നിവയൊക്കെ ഈ ലോഗുകളിൽ അടങ്ങിയിരിക്കുന്നു. ബാൻഡ്‌വിഡ്‌ത്ത് കണക്കാക്കൽ പ്രശ്നങ്ങൾ പോലെ, Chrome-ലെ ഓഡിയോ - വീഡിയോ കോളുകളുമായി ബന്ധപ്പെട്ട പ്രശ്നങ്ങൾ ഡീബഗ് ചെയ്യുന്ന സമയത്ത് ഈ വിവരങ്ങൾ സഹായകരമാകും. ഈ ലോഗുകളിൽ, ഓഡിയോ അല്ലെങ്കിൽ വീഡിയോ കോളിൽ നിന്നുള്ള ഉള്ളടക്കം അടങ്ങിയിരിക്കില്ല.
-
-      Google Hangouts അല്ലെങ്കിൽ Google Meet പോലെയുള്ള Google വെബ് സേവനങ്ങൾക്ക് മാത്രമാണ് ഈ ഡാറ്റാ ശേഖരണത്തിന് തുടക്കമിടാനാവുക.
-
-      ഈ ലോഗുകളെ, Google സേവനം സ്വയം ശേഖരിക്കുന്ന മറ്റ് ലോഗുകളുമായി, ഒരു സെഷൻ ഐഡി മുഖേന ബന്ധപ്പെടുത്തിയേക്കാം. ഇത് ഡീബഗ്ഗിംഗിനെ കൂടുതൽ എളുപ്പമുള്ളതാക്കാൻ ഉദ്ദേശിച്ചിട്ടുള്ളതാണ്.
-      </translation>
 <translation id="6994082778848658360">ഈ ഫീച്ചറിന് അനുയോജ്യമാണെങ്കിൽ, രണ്ടാം ഫാക്‌ടർ വിശ്വാസ്യത ഉറപ്പിക്കൽ നൽകുന്നതിന്, ഓൺ-ബോർഡ് സുരക്ഷിത എലമെന്റ് ഹാർഡ്‌വെയർ എങ്ങനെ ഉപയോഗിക്കാൻ കഴിയുമെന്ന് വ്യക്തമാക്കുന്നു. ഉപയോക്‌താവിന്റെ ഭൗതിക സാന്നിധ്യം തിരിച്ചറിയുന്നതിന് മെഷീൻ പവർ ബട്ടൺ ഉപയോഗിക്കുന്നു.
 
       'പ്രവർത്തനരഹിതമാക്കി' തിരഞ്ഞെടുത്തിട്ടുണ്ടെങ്കിൽ രണ്ടാം ഫാക്‌ടർ നൽകുകയില്ല.
@@ -3378,11 +3359,6 @@
 
           RemoteAccessHostClientDomainList എന്നതും കാണുക.</translation>
 <translation id="9084985621503260744">പവർ മാനേജ്‌മെന്റിനെ വീഡിയോ പ്രവർത്തനം ബാധിക്കുന്നുണ്ടോ എന്ന് വ്യക്തമാക്കുക</translation>
-<translation id="9085839450090699752">തീരുമാനമെടുക്കാത്തൊരു അപ്‌ഡേറ്റ് പ്രയോഗിക്കാൻ, <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" /> ഉപകരണങ്ങൾക്ക് 345600000 മില്ലിസെക്കൻഡിന്റെയും (നാല് ദിവസങ്ങൾ) ബ്രൗസറുകൾക്ക് 604800000 മില്ലിസെക്കൻഡിന്റെയും (ഒരു ആഴ്ച) ഡിഫോൾട്ട് കാലയളവ് ഉപയോഗിക്കപ്പെടുന്നു.</translation>
 <translation id="9088433379343318874">സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കൾക്കുള്ള ഉള്ളടക്ക ദാതാവിനെ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="9088444059179765143">സ്വയം സമയമേഖല കണ്ടെത്തുന്ന രീതി കോൺഫിഗർ ചെയ്യുക</translation>
 <translation id="9096086085182305205">പ്രാമാണീകരണ സെര്‍വറിന്‍റെ അനുമതിലിസ്റ്റ്</translation>
diff --git a/components/policy/resources/policy_templates_mr.xtb b/components/policy/resources/policy_templates_mr.xtb
index 1c5bc0e7..268e57b 100644
--- a/components/policy/resources/policy_templates_mr.xtb
+++ b/components/policy/resources/policy_templates_mr.xtb
@@ -390,11 +390,6 @@
 
           हे धोरण सेट न केलेले ठेवल्यास, सर्व चार योजना वापरल्या जातील.</translation>
 <translation id="2067011586099792101">सामग्री पॅक बाहेरील साइटवर प्रवेश अवरोधित करा</translation>
-<translation id="2070270043919235595">प्रलंबित अपडेट लागू करण्यासाठी <ph name="PRODUCT_NAME" /> रीलाँच करणे आवश्यक असल्याचे वापरकर्त्यांना सूचित करा.
-
-      हे धोरण सेटिंग ब्राउझर रीलाँच करण्याची शिफारस केली आहे किंवा आवश्यक आहे हे वापरकर्त्यास सूचित कण्यासाठी सूचना सुरू करते. सेट केले नसल्यास, मेनूमध्ये थोडे बदल करून रीलाँच करणे आवश्यक असल्याचे <ph name="PRODUCT_NAME" /> वापरकर्त्याला सूचित करते. 'शिफारस केली' वर सेट केले असल्यास, रीलाँचची शिफारस केली आहे ही आवर्ती चेतावणी वापरकर्त्याला दाखवली जाईल. रीलाँच स्थगित करण्यासाठी वापरकर्ता ही चेतावणी डिसमिस करू शकतो. 'आवश्यक' वर सेट केले असल्यास, सूचना कालावधी संपल्यावर ब्राउझरला रीलॉंच होण्यास भाग पाडले जाईल असे सूचित करणारी आवर्ती चेतावणी वापरकर्त्याला दाखवली जाईल. हा कालावधी बाय डिफॉल्ट सात दिवसांचा आहे आणि <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> धोरण सेटिंगमधून कॉन्फिगर केला जाऊ शकतो.
-
-      रीलॉंचनंतर वापरकर्त्याचे सत्र रीस्टोअर केले जाते.</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> मध्ये साइन इन करण्याची अनुमती द्या</translation>
 <translation id="2077129598763517140">उपलब्ध असेल तेव्हा हार्डवेअर ऍक्सीलरेशन वापरा</translation>
 <translation id="2077273864382355561">बॅटरी उर्जेवर चालताना स्क्रीन बंद विलंब</translation>
@@ -998,7 +993,6 @@
           हे धोरण पर्यायी आहे. सेट केले नसल्यास, कोणतेही नवीन टॅब पृष्ठ प्रदान केले जाणार नाही.
 
           'DefaultSearchProviderEnabled' धोरण सक्षम केले असल्यासच या धोरणास महत्त्व दिले जाते.</translation>
-<translation id="3465852069254497664">ब्राउझर रीलाँच करण्याची शिफारस केली आहे किंवा आवश्यक आहे याबद्दल वापरकर्त्याला सूचित करा</translation>
 <translation id="346731943813722404">सामर्थ्य व्यवस्थापन विलंब आणि सत्र लांबी मर्यादेने सत्रामध्ये प्रथम वापरकर्ता क्रियाकलापाचे निरीक्षण केले गेल्यानंतर फक्त चालणे प्रारंभ करावे किंवा नाही हे निर्दिष्ट करते.
 
           हे धोरण सत्य वर सेट केल्यास, सत्रामध्ये प्रथम वापरकर्ता क्रियाकलापाचे निरीक्षण केले गेल्यानंतर सामर्थ्य व्यवस्थापन विलंब आणि सत्र मर्यादा लांबी चालणे प्रारंभ करत नाही.
@@ -2395,22 +2389,6 @@
 <translation id="6965859329738616662">स्मार्ट डीम मॉडेलला स्क्रीन मंद होईपर्यंत वेळ वाढवण्याची अनुमती आहे की नाही हे निर्देशित करते. 
       जेव्हा स्क्रीन मंद होत असते तेव्हा स्क्रीन मंद करण्यासाठी विलंब लावणे आवश्यक आहे का याचे स्मार्ट डीम मॉडेल गुणांकन करते. जर स्मार्ट डीम मॉडेलने स्क्रीन मंद करण्यासाठी विलंब लावला तर स्क्रीन मंद होईपर्यंत वेळ प्रभावीपणे वाढवली जाते. या प्रकरणात, स्क्रीन ऑफ, स्क्रीन लॉक आणि निष्क्रिय होण्यास लागणारा विलंब हा मूळत: कॉन्फिगर केल्याप्रमाणे स्क्रीन मंद होण्याच्या विलंबापासूनचे समान अंतर कायम ठेवण्यासाठी अॅडजस्ट केला जातो.
       जर हे धोरण सत्य वर सेट असेल किंवा सेट केलेले नसेल तर स्मार्ट डीम मॉडेल सुरू होईल आणि स्क्रीन मंद होईपर्यंत वेळ वाढवण्यासाठी परवानगी देईल. हे धोरण असत्यवर सेट केलेले असेल तर स्मार्ट डीम मॉडेल स्क्रीन मंद होण्यावर प्रभाव होणार नाही.</translation>
-<translation id="6982028490425791294">
-      हे धोरण सत्यवर सेट केल्यास, Google सेवांवरून (उदा. Google Meet) कार्यक्रम नोंदी संग्रहित करण्याची आणि त्या नोंदी Google वर अपलोड करण्याची <ph name="PRODUCT_NAME" /> ला अनुमती आहे.
-
-
-      हे धोरण असत्यवर सेट केल्यास किंवा सेट केलेले नसल्यास, <ph name="PRODUCT_NAME" /> कदाचित अशा  नोंदी संग्रहित करणार नाही तसेच अपलोडदेखील करणार नाही.
-
-
-
-      या नोंदींमध्ये आरटीपी पॅकेट पाठवल्याची  आणि मिळवल्याची वेळ आणि त्यांचा आकार, नेटवर्कमधील अडथळ्यांबद्दलचा फीडबॅक आणि ऑडिओ आणि व्हिडिओ फ्रेमच्या वेळेचा आणि गुणवत्तेबद्दलचा मेटाडेटा अशा माहितीचा समावेश आहे. बँडविड्थ अंदाजाच्या समस्या इत्यादी यासारख्या  Chrome मधील ऑडिओ किंवा व्हिडिओ कॉलच्या समस्या डीबग करताना या माहितीचा उपयोग होतो. नोंदीमध्ये कॉलमधील ऑडिओ किंवा  व्हिडिओ आशयाचा समावेश नाही. 
-
-
-      Google Hangouts किंवा Google Meet .यासारख्या Google  सेवांनी हा डेटा संग्रह ट्रिगर केला जाऊ शकतो.
-
-
-      या नोंदी स्वतः Google सेवेने गोळा केलेल्या इतर नोंदींशी सत्र अायडीमार्फत संबंधित असू शकतात, याचा हेतू डीबगिंग सोपे करणे हा आहे.
-      </translation>
 <translation id="6994082778848658360">ऑन-बोर्ड सुरक्षित घटक हार्डवेअर या वैशिष्ट्यासोबत सुसंगत असल्यास, दुसरा फॅक्टर प्रमाणीकरण करण्यासाठी कसे वापरता येईल त्याबद्दल सांगते. मशीन पॉवर बटण हे वापरकर्त्याच्या प्रत्यक्ष उपस्थिती शोधण्यात वापरले जाते.
 
       'बंद करा' निवडल्यास, कोणताही दुसरा फॅक्टर देण्यात येत नाही.
@@ -3330,11 +3308,6 @@
 
           RemoteAccessHostClientDomainList देखील पहा.</translation>
 <translation id="9084985621503260744">व्हिडिओ गतिविधी उर्जा व्यवस्थापनावर प्रभाव करत असल्याबाबत निर्दिष्ट करा</translation>
-<translation id="9085839450090699752">तुम्हाला मिलिसेकंदांमध्ये कालावधी सेट करू देते, ज्यामध्ये वापरकर्त्यांना सूचित केले जाते की प्रलंबित अपडेट लागू करण्यासाठी <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" /> डिव्हाइससाठी ३४५६००००० मिलिसेकंदांचा (चार दिवस) आणि ब्राउझरसाठी ६०४८००००० मिलिसेकंदांचा (एक आठवडा) डीफॉल्ट कालावधी वापरला जातो.</translation>
 <translation id="9088433379343318874">पर्यवेक्षी वापरकर्ता सामग्री प्रदाता सक्षम करा</translation>
 <translation id="9088444059179765143">स्वयंचलित टाइमझोन ओळख पद्धत कॉन्फिगर करा</translation>
 <translation id="9096086085182305205">प्रमाणीकरण सर्व्हर श्वेतसूची</translation>
diff --git a/components/policy/resources/policy_templates_ms.xtb b/components/policy/resources/policy_templates_ms.xtb
index e04d56d7..0499de9 100644
--- a/components/policy/resources/policy_templates_ms.xtb
+++ b/components/policy/resources/policy_templates_ms.xtb
@@ -193,6 +193,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Dayakan penyekatan suntikan perisian pihak ketiga</translation>
 <translation id="1504431521196476721">Pembuktian Jauh</translation>
+<translation id="1507957856411744193">Jika dasar ini ditetapkan kepada benar, <ph name="PRODUCT_NAME" /> akan menyambung ke peranti Cast pada semua alamat IP, bukan alamat peribadi RFC1918/RFC4193 semata-mata.
+
+          Jika dasar ini ditetapkan kepada palsu, <ph name="PRODUCT_NAME" /> akan menyambung ke peranti Cast pada alamat peribadi RFC1918/RFC4193 sahaja.
+
+          Jika dasar ini tidak ditetapkan, <ph name="PRODUCT_NAME" /> akan menyambung ke peranti Cast pada alamat peribadi RFC1918/RFC4193 sahaja, melainkan ciri CastAllowAllIPs didayakan.
+
+          Jika dasar "EnableMediaRouter" ditetapkan kepada palsu, maka nilai dasar ini tidak memberikan sebarang kesan.</translation>
 <translation id="1509692106376861764">Dasar ini telah dihentikan pada <ph name="PRODUCT_NAME" /> versi 29.</translation>
 <translation id="1514888685242892912">Dayakan <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Membenarkan tapak untuk mengesan lokasi fizikal pengguna</translation>
@@ -372,11 +379,6 @@
 
           Jika dasar ini dibiarkan tanpa ditetapkan, kesemua empat skim akan digunakan.</translation>
 <translation id="2067011586099792101">Sekat akses ke tapak web di luar pek kandungan</translation>
-<translation id="2070270043919235595">Maklumi pengguna bahawa <ph name="PRODUCT_NAME" /> mesti dilancarkan semula untuk menggunakan kemas kini yang belum selesai.
-
-      Tetapan dasar ini mendayakan pemberitahuan untuk memaklumi pengguna bahawa pelancaran semula penyemak imbas adalah disyorkan atau diperlukan. Jika tidak ditetapkan, <ph name="PRODUCT_NAME" /> menunjukkan kepada pengguna bahawa pelancaran semula diperlukan melalui sedikit perubahan kepada menunya. Jika ditetapkan kepada 'Disyorkan', amaran berulang akan ditunjukkan kepada pengguna bahawa pelancaran semula disyorkan. Pengguna boleh menolak amaran ini untuk menunda pelancaran semula. Jika ditetapkan kepada 'Diperlukan', amaran berulang akan ditunjukkan kepada pengguna yang menunjukkan bahawa pelancaran semula penyemak imbas akan dipaksa selepas tempoh pemberitahuan tamat. Tempoh ini ialah 7 hari secara lalai dan boleh dikonfigurasikan melalui tetapan dasar <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Sesi pengguna dipulihkan selepas pelancaran semula.</translation>
 <translation id="2073552873076775140">Benarkan log masuk ke <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Gunakan pecutan perkakasan apabila tersedia</translation>
 <translation id="2077273864382355561">Kelewatan pemadaman skrin apabila dijalankan dengan kuasa bateri</translation>
@@ -934,7 +936,6 @@
           Dasar ini merupakan pilihan. Jika tidak ditetapkan, tiada halaman tab baharu akan disediakan.
 
           Dasar ini hanya dikuatkuasakan jika dasar 'DefaultSearchProviderEnabled' didayakan.</translation>
-<translation id="3465852069254497664">Maklumi pengguna bahawa pelancaran semula penyemak imbas disyorkan atau diperlukan</translation>
 <translation id="346731943813722404">Menentukan sama ada lengah pengurusan kuasa dan had tempoh sesi hanya harus mula dijalankan selepas aktiviti pengguna awal dalam sesi.
 
           Jika dasar ini ditetapkan kepada Benar, lengah pengurusan kuasa dan had tempoh sesi tidak mula dijalankan sehingga selepas aktiviti pengguna pertama telah diperhatikan dalam sesi.
@@ -2035,6 +2036,7 @@
 
       Dasar <ph name="SYNC_DISABLED_POLICY_NAME" /> melumpuhkan semua penyegerakan data, mengatasi RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Tapis tapak peringkat atas (tetapi bukan iframe yang dibenamkan) untuk kandungan dewasa</translation>
+<translation id="6734521799274931721">Mengawal Perkongsian Fail Rangkaian untuk ketersediaan OS Chrome</translation>
 <translation id="6735701345096330595">Paksa dayakan semakan ejaan bahasa</translation>
 <translation id="673699536430961464">Tetapan ini membenarkan pengguna beralih antara akaun Google dalam kawasan kandungan tetingkap penyemak imbas selepas mereka mengelog masuk ke peranti <ph name="PRODUCT_OS_NAME" /> mereka.
 
@@ -2185,17 +2187,6 @@
 
       Apabila skrin hendak dimalapkan, model pemalapan pintar akan menilai sama ada pemalapan skrin harus ditunda. Jika model pemalapan pintar menunda pemalapan skrin, model itu melanjutkan masa sehingga skrin dimalapkan. Dalam kes ini, skrin dimatikan, kunci skrin dan kelengahan melahu dilaraskan untuk mengekalkan jarak yang sama dari kelengahan pemalapan skrin seperti yang dikonfigurasi pada asalnya.
       Jika dasar ini ditetapkan kepada Benar atau dibiarkan tidak ditetapkan, model pemalapan pintar akan didayakan dan dibenarkan melanjutkan masa sehingga skrin dimalapkan. Jika dasar ini ditetapkan kepada Palsu, model pemalapan pintar tidak akan mempengaruhi pemalapan skrin.</translation>
-<translation id="6982028490425791294">
-      Jika dasar ditetapkan kepada benar, <ph name="PRODUCT_NAME" /> dibenarkan mengumpulkan log peristiwa WebRTC daripada perkhidmatan Google (mis. Google Meet) dan memuat naik log tersebut ke Google.
-
-      Jika dasar ini ditetapkan kepada palsu atau tidak ditetapkan, <ph name="PRODUCT_NAME" /> tidak boleh mengumpul mahupun memuat naik log tersebut.
-
-      Log ini mengandungi maklumat seperti masa dan saiz paket RTP yang dihantar dan diterima, maklum balas tentang kesesakan pada rangkaian serta metadata tentang masa dan kualiti bingkai audio dan video. Maklumat ini berguna apabila menyahpepijat isu berkaitan panggilan audio atau video dalam Chrome, seperti isu anggaran lebar jalur, dll. Log tidak mengandungi kandungan audio atau video daripada panggilan.
-
-      Pengumpulan data ini hanya boleh dicetuskan oleh perkhidmatan web Google, seperti Google Hangouts atau Google Meet.
-
-      Log ini mungkin dikaitkan, melalui ID sesi, dengan log lain yang dikumpulkan oleh perkhidmatan Google itu sendiri; ini bertujuan untuk memudahkan penyahpepijatan.
-      </translation>
 <translation id="6994082778848658360">Menyatakan cara perkakasan unsur selamat atas papan boleh digunakan untuk menyediakan pengesahan faktor kedua jika serasi dengan ciri ini. Butang kuasa mesin digunakan untuk mengesan kehadiran fizikal pengguna.
 
       Jika 'Dilumpuhkan' dipilih, faktor kedua tidak disediakan.
@@ -3041,11 +3032,6 @@
 <translation id="9035964157729712237">ID sambungan untuk dikecualikan daripada senarai hitam</translation>
 <translation id="9042911395677044526">Membenarkan penolakan konfigurasi rangkaian digunakan untuk setiap pengguna pada peranti <ph name="PRODUCT_OS_NAME" />. Konfigurasi rangkaian ialah rentetan berformat JSON seperti yang ditakrifkan oleh format Konfigurasi Rangkaian Terbuka yang dihuraikan di <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Menyatakan sama ada aktiviti video menjejaskan pengurusan kuasa</translation>
-<translation id="9085839450090699752">Membenarkan anda menetapkan tempoh waktu dalam milisaat berkenaan pengguna yang akan dimaklumkan tentang <ph name="PRODUCT_NAME" /> yang mesti dilancarkan semula atau tentang peranti <ph name="PRODUCT_OS_NAME" /> yang mesti dimulakan semula untuk menggunakan kemas kini yang belum selesai.
-
-      Sepanjang tempoh waktu ini, pengguna akan dimaklumkan berulang kali tentang perlunya kemas kini. Untuk peranti <ph name="PRODUCT_OS_NAME" />, pemberitahuan mula semula akan dipaparkan dalam dulang sistem apabila naik taraf dikesan. Pemberitahuan ini akan berubah warna apabila separuh daripada tempoh pemberitahuan telah berlalu dan berubah warna sekali lagi apabila keseluruhan tempoh pemberitahuan telah berlalu. Untuk penyemak imbas <ph name="PRODUCT_NAME" />, menu apl akan berubah untuk menunjukkan pelancaran semula diperlukan apabila satu pertiga tempoh pemberitahuan telah berlalu. Pemberitahuan ini berubah warna apabila dua pertiga tempoh pemberitahuan telah berlalu dan berubah warna sekali lagi apabila keseluruhan tempoh pemberitahuan telah berlalu. Pemberitahuan tambahan yang didayakan oleh dasar <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> untuk penyemak imbas akan mengikut jadual yang sama ini.
-
-      Jika tidak ditetapkan, tempoh lalai 345600000 milisaat (empat hari) akan digunakan untuk peranti <ph name="PRODUCT_OS_NAME" /> dan 604800000 milisaat (satu minggu) untuk penyemak imbas.</translation>
 <translation id="9088433379343318874">Dayakan penyedia kandungan pengguna di bawah seliaan</translation>
 <translation id="9088444059179765143">Konfigurasi kaedah pengesanan zon waktu automatik</translation>
 <translation id="9096086085182305205">Senarai putih pelayan pengesahan</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index fd22a4b..4f814348 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -188,6 +188,13 @@
           <ph name="PROXY_HELP_URL" /></translation>
 <translation id="1502843533062797703">Blokkering van injectie van software van derden inschakelen</translation>
 <translation id="1504431521196476721">Externe bevestiging</translation>
+<translation id="1507957856411744193">Als dit beleid is ingesteld op true (waar), maakt <ph name="PRODUCT_NAME" /> verbinding met Cast-apparaten op alle IP-adressen en niet alleen op RFC1918/RFC4193-privéadressen.
+
+          Als dit beleid is ingesteld op false (onwaar), maakt <ph name="PRODUCT_NAME" /> alleen verbinding met Cast-apparaten op RFC1918/RFC4193-privéadressen.
+
+          Als dit beleid niet is ingesteld, maakt <ph name="PRODUCT_NAME" /> alleen verbinding met Cast-apparaten op RFC1918/RFC4193-privéadressen, tenzij de functie CastAllowAllIPs is ingeschakeld.
+
+          Als het beleid EnableMediaRouter is ingesteld op false (onwaar), heeft de waarde van dit beleid geen effect.</translation>
 <translation id="1509692106376861764">Dit beleid wordt niet meer gebruikt sinds <ph name="PRODUCT_NAME" /> versie 29.</translation>
 <translation id="1514888685242892912"><ph name="PRODUCT_NAME" /> inschakelen</translation>
 <translation id="1522425503138261032">Sites toestaan de fysieke locatie van gebruikers bij te houden</translation>
@@ -364,11 +371,6 @@
 
           Als dit beleid niet is ingesteld, worden alle vier de schema's gebruikt.</translation>
 <translation id="2067011586099792101">Toegang blokkeren naar sites die zich niet in inhoudspakketten bevinden</translation>
-<translation id="2070270043919235595">Laat gebruikers weten dat <ph name="PRODUCT_NAME" /> opnieuw moet worden gestart om een update toe te passen.
-
-      Met deze beleidsinstelling worden meldingen ingeschakeld waarmee de gebruiker wordt gevraagd of aangeraden om de browser opnieuw op te starten. Als dit niet is ingesteld, ziet de gebruiker een melding in <ph name="PRODUCT_NAME" /> dat de browser opnieuw moet worden opgestart via kleine wijzigingen in het menu. Als dit is ingesteld op 'Recommended', wordt er een herhaalde waarschuwing weergeven om de gebruiker te laten weten dat het raadzaam is de browser opnieuw op te starten. De gebruiker kan deze waarschuwing negeren om de actie uit te stellen. Als dit is ingesteld op 'Required', wordt er een herhaalde waarschuwing weergegeven om de gebruiker te laten weten dat de browser automatisch opnieuw wordt opgestart zodra de meldingsperiode is verstreken. Deze periode is standaard zeven dagen en kan worden ingesteld via de beleidsinstelling voor <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      De sessie van de gebruiker wordt hersteld zodra de browser opnieuw is opgestart.</translation>
 <translation id="2073552873076775140">Inloggen bij <ph name="PRODUCT_NAME" /> toestaan</translation>
 <translation id="2077129598763517140">Hardwareversnelling gebruiken indien beschikbaar</translation>
 <translation id="2077273864382355561">Vertraging van scherm uitschakelen wanneer op de batterij wordt gewerkt</translation>
@@ -921,7 +923,6 @@
           Dit beleid is optioneel. Als het niet wordt ingesteld, wordt er geen nieuwe tabbladpagina weergegeven.
 
           Dit beleid wordt alleen gerespecteerd als het beleid 'DefaultSearchProviderEnabled' is ingeschakeld.</translation>
-<translation id="3465852069254497664">Laat een gebruiker weten dat het aanbevolen of vereist is om de browser opnieuw op te starten</translation>
 <translation id="346731943813722404">Hiermee wordt aangegeven of vertragingen in energiebeheer en de limiet voor sessielengte pas moeten worden gestart nadat de eerste gebruikersactiviteit in een sessie is gedetecteerd.
 
           Als dit beleid is ingesteld op 'True', worden vertragingen in energiebeheer en de limiet voor sessielengte pas gestart nadat de eerste gebruikersactiviteit in een sessie is gedetecteerd.
@@ -2022,6 +2023,7 @@
 
       Met het beleid <ph name="SYNC_DISABLED_POLICY_NAME" /> wordt alle gegevenssynchronisatie uitgeschakeld (RoamingProfileSupportEnabled wordt overschreven).</translation>
 <translation id="6731757988219967594">Sites op hoofdniveau (maar geen ingesloten iframes) filteren op content voor volwassenen</translation>
+<translation id="6734521799274931721">Beheert Network File Shares voor Chrome OS-beschikbaarheid</translation>
 <translation id="6735701345096330595">Inschakelen van spellingcontrole voor talen afdwingen</translation>
 <translation id="673699536430961464">Deze instelling biedt gebruikers de mogelijkheid om in het contentgedeelte van hun browservenster tussen Google-accounts te schakelen nadat ze zijn ingelogd op hun <ph name="PRODUCT_OS_NAME" />-apparaat.
 
@@ -2163,17 +2165,6 @@
 
       Wanneer het scherm bijna wordt gedimd, evalueert het slimme dimmodel of het dimmen moet worden uitgesteld, waardoor het langer duurt tot het scherm wordt gedimd. In dit geval worden de vertragingen aangepast voordat het scherm wordt uitgeschakeld, wordt vergrendeld of inactief wordt, zodat de tijden vanaf het moment dat het scherm wordt gedimd, zo blijven zoals oorspronkelijk is ingesteld.
       Als dit beleid wordt ingesteld op 'waar' of niet wordt ingesteld, wordt het slimme dimmodel ingeschakeld, zodat het langer duurt voordat het scherm wordt gedimd. Als dit beleid wordt ingesteld op 'onwaar', heeft het slimme dimmodel geen invloed op het dimmen van het scherm.</translation>
-<translation id="6982028490425791294">
-      Als het beleid is ingesteld op 'true' (waar), mag <ph name="PRODUCT_NAME" /> WebRTC-gebeurtenislogboeken van Google-services (zoals Google Meet) verzamelen en die logboeken uploaden naar Google.
-
-      Als het beleid is ingesteld op 'false' (onwaar) of niet is ingesteld, mag <ph name="PRODUCT_NAME" /> dergelijke logboeken niet verzamelen of uploaden.
-
-      Deze logboeken bevatten informatie zoals de tijd en grootte van verzonden en ontvangen RTP-pakketten, feedback over overbelasting van het netwerk en metadata met betrekking tot de tijd en kwaliteit van audio- en videoframes. Deze informatie is nuttig voor het opsporen van fouten met audio- of videogesprekken in Chrome, zoals problemen met bandbreedteschattingen, enzovoort. De logboeken bevatten geen audio- of videocontent uit het gesprek.
-
-      Deze gegevensverzameling kan alleen worden geactiveerd door webservices van Google, zoals Google Hangouts of Google Meet.
-
-      Deze logboeken kunnen door middel van een sessie-ID worden gekoppeld aan andere logboeken die worden verzameld door de Google-service zelf. Dit wordt gedaan om fouten gemakkelijker te kunnen opsporen.
-      </translation>
 <translation id="6994082778848658360">Geeft aan hoe de ingebouwde Secure Element-hardware kan worden gebruikt voor authenticatie met meerdere factoren, indien de hardware geschikt is voor deze functie. De aan/uit-knop van de machine wordt gebruikt om de fysieke aanwezigheid van de gebruiker te detecteren.
 
       Als Uitgeschakeld is geselecteerd, wordt er geen tweede factor verstrekt.
@@ -3009,11 +3000,6 @@
 <translation id="9035964157729712237">Extensie-ID's die zijn vrijgesteld van de zwarte lijst</translation>
 <translation id="9042911395677044526">Hiermee kun je een gebruikerspecifieke netwerkconfiguratie toepassen op een <ph name="PRODUCT_OS_NAME" />-apparaat. De netwerkconfiguratie is een tekenreeks met JSON-indeling, zoals gedefinieerd door de indeling voor open netwerkconfiguratie, beschreven op <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Specificeer of videoactiviteit invloed heeft op stroombeheer</translation>
-<translation id="9085839450090699752">Hiermee kun je een periode in milliseconden instellen waarin gebruikers een melding krijgen dat <ph name="PRODUCT_NAME" /> opnieuw moet worden gestart of dat een <ph name="PRODUCT_OS_NAME" />-apparaat opnieuw moet worden opgestart om een beschikbare update toe te passen.
-
-      Gedurende deze periode wordt de gebruiker herhaaldelijk geïnformeerd over het belang van de update. Op <ph name="PRODUCT_OS_NAME" />-apparaten wordt een melding dat opnieuw moet worden opgestart, weergegeven in het systeemvak zodra er een upgrade wordt gedetecteerd. Deze melding verandert van kleur wanneer de helft van de meldingsperiode is verstreken en nogmaals wanneer de volledige meldingsperiode is verstreken. In <ph name="PRODUCT_NAME" />-browsers wordt nadat een derde van de meldingstijd is verstreken, in het app-menu aangegeven dat opnieuw moet worden opgestart. Deze melding verandert van kleur wanneer twee derde van de meldingsperiode is verstreken en nogmaals wanneer de volledige meldingsperiode is verstreken. De extra meldingen die worden geactiveerd door het beleid <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> voor browsers, volgen dezelfde planning.
-
-      Als deze waarde niet is ingesteld, wordt een standaardperiode van 345.600.000 milliseconden (vier dagen) gebruikt voor <ph name="PRODUCT_OS_NAME" />-apparaten en 604.800.000 milliseconden (één week) voor browsers.</translation>
 <translation id="9088433379343318874">Contentprovider voor de gebruiker met beperkte rechten inschakelen</translation>
 <translation id="9088444059179765143">De methode voor automatische tijdzonedetectie configureren</translation>
 <translation id="9096086085182305205">Witte lijst voor verificatieserver</translation>
diff --git a/components/policy/resources/policy_templates_no.xtb b/components/policy/resources/policy_templates_no.xtb
index 1f2a0a1..651b9eef 100644
--- a/components/policy/resources/policy_templates_no.xtb
+++ b/components/policy/resources/policy_templates_no.xtb
@@ -357,11 +357,6 @@
 
           Hvis denne regelen ikke angis, brukes alle de fire skjemaene.</translation>
 <translation id="2067011586099792101">Blokkér tilgang til nettsteder som ikke inngår i innholdspakker</translation>
-<translation id="2070270043919235595">Varsle brukere om at <ph name="PRODUCT_NAME" /> må startes på nytt på grunn av en oppdatering som ikke er installert ennå.
-
-      Denne regelen aktiverer varsler for å informere brukeren om at nettleseren må eller bør 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. 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 7 dager og kan konfigureres via regelen <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Brukerens økt gjenopprettes etter omstarten.</translation>
 <translation id="2073552873076775140">Tillat pålogging i <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Bruk maskinvareakselerasjon når det er tilgjengelig</translation>
 <translation id="2077273864382355561">Forsinkelse for avslått skjerm når enheten kjører på batteristrøm</translation>
@@ -905,7 +900,6 @@
           Denne innstillingen er valgfri. Hvis den ikke angis, leveres ingen nye fane-side.
 
           Denne innstillingen etterfølges bare dersom «DefaultSearchProviderEnabled» er aktivert.</translation>
-<translation id="3465852069254497664">Varsle en bruker om at nettleseren bør eller må startes på nytt</translation>
 <translation id="346731943813722404">Angi hvorvidt tidtaking av strømstyringsforsinkelser og grense for øktens varighet bare skal begynne å løpe etter brukerens første aktivitet i en økt.
 
           Hvis innstillingen er satt til True, begynner ikke tidtakingen av strømstyringsforsinkelser og øktens varighet å løpe før etter at brukerens første aktivitet i en økt er registrert.
@@ -2152,17 +2146,6 @@
 
       Like før skjermen nedtones, evaluerer den smarte modellen for nedtoning om nedtoning av skjermen bør utsettes. Hvis den smarte modellen for nedtoning utsetter nedtoning av skjermen, forlenges tiden det tar før skjermen nedtones. I dette tilfellet blir utsettelsen av avslått skjerm, låseskjerm og inaktivitet justert til å samsvare med tidsrommet fra nedtoningsutsettelsen slik det ble konfigurert opprinnelig.
       Hvis denne regelen er angitt som «True» (sann), eller hvis den ikke er angitt, slås den smarte modellen for nedtoning på, og den kan forlenge tiden det tar før skjermen nedtones. Hvis denne regelen er angitt som «False» (usann), påvirkes ikke nedtoning av skjermen av den smarte modellen for nedtoning.</translation>
-<translation id="6982028490425791294">
-      Hvis regelen er satt til sann (true), tillater <ph name="PRODUCT_NAME" /> innhenting av WebRTC-aktivitetslogger fra Google-tjenester (f.eks. Google Meet) og opplasting av disse loggene til Google.
-
-      Hvis denne regelen er satt til usann eller ikke er angitt, kan ikke <ph name="PRODUCT_NAME" /> innhente eller laste opp slike logger.
-
-      Disse loggene inneholder blant annet tidspunkt for og størrelse på sendte og mottatte RTP-pakker, tilbakemelding om overbelastning av nettverket samt metadata om tid og kvalitet for lydrammer og videobilder. Denne informasjonen er nyttig ved feilsøking av problemer med lyd- og videosamtaler i Chrome, for eksempel problemer med estimering av båndbredde. Loggene inneholder ikke lyd- eller videoinnhold fra samtaler.
-
-      Disse datainnsamlingene kan kun bli utløst av Googles nettjenester, slik som Google Hangouts eller Google Meet.
-
-      Disse loggene kan knyttes sammen, via en økt-ID, med andre logger som er samlet inn av Google-tjenesten, for å gjøre feilsøking enklere.
-      </translation>
 <translation id="6994082778848658360">Spesifiserer hvordan det integrerte sikre maskinvareelementet kan brukes til å tilby tofaktor-autentisering hvis det er kompatibelt med denne funksjonen. Av/på-knappen på maskinen brukes til å finne ut om brukeren er fysisk til stede.
 
       Hvis «Disabled» (deaktivert) er valgt, tilbys ingen tofaktor-autentisering.
@@ -2979,11 +2962,6 @@
 <translation id="9035964157729712237">Utvidelses-ID-er som skal unntas sperrelisten</translation>
 <translation id="9042911395677044526">Tillater skyving av nettverkskonfigurasjon for enkeltbrukere på en <ph name="PRODUCT_OS_NAME" />-enhet. Nettverkskonfigurasjon er en JSON-formatert streng, som definert av Open Network Configuration-formatet beskrevet på <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Angi om videoaktivitet skal påvirke strømbehandling</translation>
-<translation id="9085839450090699752">Lar deg angi en tidsperiode i millisekunder når brukere blir varslet om at <ph name="PRODUCT_NAME" /> må startes på nytt, eller at en <ph name="PRODUCT_OS_NAME" />-enhet må startes på nytt på grunn av en oppdatering som ikke er installert ennå.
-
-      I denne tidsperioden blir brukeren gjentatte ganger informert om at oppdateringen må installeres. På <ph name="PRODUCT_OS_NAME" />-enheter vises varselet om omstart i systemfeltet når en oppgradering oppdages. Dette varselet skifter farge når halvparten av varselperioden har passert og igjen når hele varselperioden har passert. I <ph name="PRODUCT_NAME" />-nettlesere endres appmenyen for å vise at en omstart er påkrevd når en tredjedel av varselperioden har passert. Dette varselet skifter farge når to tredjedeler av varselperioden har passert og igjen når hele varselperioden har passert. Ekstra varsler aktivert av <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" />-regelen for nettlesere følger den samme tidsplanen.
-
-      Hvis regelen ikke er angitt, brukes standardperioden på 345600000 millisekunder (fire dager) på <ph name="PRODUCT_OS_NAME" />-enheter og 604800000 millisekunder (én uke) i nettlesere.</translation>
 <translation id="9088433379343318874">Slå på innholdsleverandøren for administrerte brukere</translation>
 <translation id="9088444059179765143">Konfigurer metoden for automatisk påvisning av tidssoner</translation>
 <translation id="9096086085182305205">Godkjenningsliste for autentiseringstjener</translation>
diff --git a/components/policy/resources/policy_templates_pl.xtb b/components/policy/resources/policy_templates_pl.xtb
index 7c6f06bc..ac84b0a 100644
--- a/components/policy/resources/policy_templates_pl.xtb
+++ b/components/policy/resources/policy_templates_pl.xtb
@@ -361,11 +361,6 @@
 
           Jeśli ta zasada nie zostanie skonfigurowana, będą używane wszystkie cztery schematy.</translation>
 <translation id="2067011586099792101">Blokuj dostęp do witryn spoza pakietów treści</translation>
-<translation id="2070270043919235595">Powiadamiaj użytkowników o konieczności ponownego uruchomienia <ph name="PRODUCT_NAME" /> w celu zastosowania oczekującej aktualizacji.
-
-      Ta zasada włącza powiadomienia informujące użytkownika o tym, że zalecane lub wymagane jest ponowne uruchomienie przeglądarki. Jeśli nie jest włączona, <ph name="PRODUCT_NAME" /> informuje użytkownika o potrzebie ponownego uruchomienia za pomocą subtelnych zmian w menu. Wybranie opcji „Zalecane” powoduje cykliczne wyświetlanie ostrzeżenia o tym, że ponowne uruchomienie jest zalecane. Użytkownik może zamknąć to ostrzeżenie, by odłożyć ponowne uruchomienie na później. Wybranie opcji „Wymagane” powoduje wyświetlanie ostrzeżenia, że ponowne uruchomienie przeglądarki zostanie wymuszone po upływie czasu powiadamiania. Domyślnie ten czas to siedem dni, a można go ustawić za pomocą zasady <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Sesja użytkownika zostanie przywrócona po ponownym uruchomieniu.</translation>
 <translation id="2073552873076775140">Zezwalaj na logowanie się w: <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Użyj akceleracji sprzętowej, gdy jest dostępna</translation>
 <translation id="2077273864382355561">Opóźnienie wyłączenia ekranu przy zasilaniu z baterii</translation>
@@ -899,7 +894,6 @@
           Ta zasada jest opcjonalna. Jeśli jej nie skonfigurujesz, na stronie nowej karty nie będzie otwierana żadna strona.
 
           Ta zasada jest stosowana tylko wtedy, gdy jest włączona zasada „DefaultSearchProviderEnabled”.</translation>
-<translation id="3465852069254497664">Powiadamiaj użytkownika o tym, że zalecane lub wymagane jest ponowne uruchomienie</translation>
 <translation id="346731943813722404">Określa, czy odliczanie opóźnień związanych z zarządzaniem energią oraz czasu związanego z limitem długości sesji powinno być rozpoczynane dopiero po zarejestrowaniu pierwszej aktywności użytkownika w sesji.
 
           W przypadku włączenia tej zasady odliczanie opóźnień związanych z zarządzaniem energią oraz czasu związanego z limitem długości sesji nie będzie rozpoczynane do momentu zarejestrowania pierwszej aktywności użytkownika w sesji.
@@ -2084,17 +2078,6 @@
 
       W momencie, gdy ekran powinien zostać przyciemniony, model inteligentnego przyciemniania ocenia, czy należy opóźnić to działanie. Jeśli model inteligentnego przyciemniania opóźni przyciemnienie, to wydłuży czas, po którym ono nastąpi, a także skoryguje czas wyłączenia ekranu, zablokowania ekranu i bezczynności, by te działania nastąpiły w takim samym odstępie czasu od przyciemnienia, jak w oryginalnej konfiguracji.
       Jeśli ta zasada ma wartość Prawda lub jest nieskonfigurowana, model inteligentnego przyciemniania będzie włączony i będzie mógł opóźniać przyciemnienie ekranu. Jeśli zasada ma wartość Fałsz, model inteligentnego przyciemniania nie będzie zmieniać czasu przyciemnienia.</translation>
-<translation id="6982028490425791294">
-      Jeśli ta zasada ma wartość Fałsz, <ph name="PRODUCT_NAME" /> może zbierać dzienniki zdarzeń WebRTC z naszych usług (np. Google Meet) i przesyłać te dane do Google.
-
-      Jeśli ta zasada ma wartość Fałsz lub nie jest ustawiona, <ph name="PRODUCT_NAME" /> nie może zbierać ani przesyłać takich dzienników.
-
-      Dzienniki zawierają takie informacje jak daty i godziny wysłania i odebrania pakietów RTP, dane dotyczące obciążenia sieci oraz metadane związane z jakością ramek audio i wideo. Te informacje są przydatne podczas debugowania problemów z połączeniami audio lub wideo w Chrome, takich jak kłopoty z szacowaniem przepustowości. Dzienniki nie zawierają treści połączeń audio ani wideo.
-
-      Zbieranie danych mogą inicjować tylko usługi internetowe Google, takie jak Google Hangouts czy Google Meet.
-
-      Aby ułatwić debugowanie, możemy za pomocą identyfikatora sesji łączyć te dzienniki z innymi dziennikami zbieranymi przez usługi Google.
-      </translation>
 <translation id="6994082778848658360">Określa, jak można użyć zainstalowanego sprzętowego elementu zabezpieczeń w celu stosowania uwierzytelniania dwuskładnikowego, jeśli jest on zgodny z tą funkcją. Przycisk zasilania komputera wykrywa fizyczną obecność użytkownika.
 
       Jeśli wybierzesz „Wyłączone”, uwierzytelnianie dwuskładnikowe nie będzie dostępne.
@@ -2909,11 +2892,6 @@
 <translation id="9035964157729712237">Identyfikatory rozszerzeń nieobjętych czarną listą</translation>
 <translation id="9042911395677044526">Pozwala na przesyłanie konfiguracji sieciowej w trybie push do urządzeń z <ph name="PRODUCT_OS_NAME" /> dla poszczególnych użytkowników. Konfiguracja sieci to łańcuch w formacie JSON zgodny z formatem Open Network Configuration opisanym na <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Określ, czy aktywność związana z filmami wpływa na zarządzanie energią</translation>
-<translation id="9085839450090699752">Umożliwia ustawienie czasu (w milisekundach), przez który użytkownicy będą powiadamiani o konieczności ponownego uruchomienia <ph name="PRODUCT_NAME" /> lub urządzenia z systemem <ph name="PRODUCT_OS_NAME" /> w celu zainstalowania oczekującej aktualizacji.
-
-      Przez ten czas użytkownik będzie cyklicznie informowany o konieczności aktualizacji. Na urządzeniach z systemem <ph name="PRODUCT_OS_NAME" /> powiadomienie o konieczności ponownego uruchomienia będzie wyświetlane w obszarze powiadomień. Powiadomienie zmieni kolor pierwszy raz po upływie połowy okresu powiadamiania i drugi raz po jego zakończeniu. W przeglądarkach <ph name="PRODUCT_NAME" /> po upływie jednej trzeciej okresu powiadamiania zmienia się menu aplikacji, sygnalizując konieczność ponownego uruchomienia. Powiadomienie zmienia kolor po upływie dwóch trzecich okresu powiadamiania i ponownie po jego zakończeniu. Dodatkowe powiadomienia, które w przeglądarkach włącza zasada <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" />, są wyświetlane według tego samego harmonogramu.
-
-      Jeśli zasada jest nieskonfigurowana, na urządzeniach z systemem <ph name="PRODUCT_OS_NAME" /> stosowany jest okres domyślny 345600000 milisekund (cztery dni), a w przeglądarkach – 604800000 milisekund (tydzień).</translation>
 <translation id="9088433379343318874">Włącz dostawcę treści dla nadzorowanego użytkownika</translation>
 <translation id="9088444059179765143">Konfigurowanie metody automatycznego wykrywania strefy czasowej</translation>
 <translation id="9096086085182305205">Biała lista serwera uwierzytelniania</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index c35fba5f7..97c505a6 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -185,6 +185,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Ativar bloqueio de injeção de software de terceiros</translation>
 <translation id="1504431521196476721">Declaração remota</translation>
+<translation id="1507957856411744193">Se esta política estiver definida como verdadeira, o <ph name="PRODUCT_NAME" /> fará a conexão com os dispositivos de transmissão em todos os endereços IP, não apenas nos endereços privados RFC1918/RFC4193.
+
+          Se esta política estiver definida como falsa, o <ph name="PRODUCT_NAME" /> fará a conexão com os dispositivos de transmissão somente em endereços privados RFC1918/RFC4193.
+
+          Se esta política não estiver definida, o <ph name="PRODUCT_NAME" /> fará a conexão com os dispositivos de transmissão somente em endereços privados RFC1918/RFC4193, a menos que o recurso CastAllowAllIPs esteja ativado.
+
+          Se a política EnableMediaRouter estiver definida como falsa, o valor desta política não terá nenhum efeito.</translation>
 <translation id="1509692106376861764">Esta política teve o uso suspenso a partir da versão 29 do <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1514888685242892912">Ativar <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Permitir que os sites rastreiem a localização física dos usuários</translation>
@@ -358,11 +365,6 @@
 
           Se esta política não for definida, os quatro esquemas serão utilizados.</translation>
 <translation id="2067011586099792101">Bloquear acesso a sites fora de pacotes de conteúdo</translation>
-<translation id="2070270043919235595">Informe aos usuários que o <ph name="PRODUCT_NAME" /> precisa ser reiniciado para aplicar uma atualização pendente.
-
-      A definição desta política ativa notificações para informar ao usuário que a reinicialização do navegador é recomendada ou necessária. Se a política não for definida, o <ph name="PRODUCT_NAME" /> indicará ao usuário que a reinicialização precisa ser feita por meio de alterações sutis no menu. Se definida como "Recomendado", um aviso recorrente será exibido ao usuário indicando que a reinicialização é recomendada. O usuário pode dispensar esse aviso para adiar a reinicialização. Se definida como "Obrigatório", um aviso recorrente será exibido ao usuário indicando que a reinicialização do navegador será forçada assim que o período de notificação passar. Esse período tem, por padrão, sete dias e pode ser definido na configuração da política <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      A sessão do usuário é restaurada após a reinicialização.</translation>
 <translation id="2073552873076775140">Permitir login no <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Usar aceleração de hardware quando disponível</translation>
 <translation id="2077273864382355561">Intervalo de desligamento da tela no funcionamento com energia da bateria</translation>
@@ -896,7 +898,6 @@
           Esta política é opcional. Se não for definida, nenhuma página "Nova guia" será exibida.
 
           Esta política somente é respeitada se a política "DefaultSearchProviderEnabled" estiver ativada.</translation>
-<translation id="3465852069254497664">Informar ao usuário que a reinicialização do navegador é recomendada ou necessária</translation>
 <translation id="346731943813722404">Especifica se os intervalos de gerenciamento de energia e o limite de duração da sessão só devem começar a ser contados após a atividade do usuário ser detectada em uma sessão.
 
           Se esta política for definida como verdadeira, os intervalos de gerenciamento de energia e o limite de duração da sessão só começarão a ser contados depois que a primeira atividade do usuário for detectada em uma sessão.
@@ -1943,6 +1944,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="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" />.
 
@@ -2091,17 +2093,6 @@
 
       Quando a tela está prestes a escurecer, o modelo de escurecimento inteligente avalia se o escurecimento deve ser adiado. Se o modelo de escurecimento inteligente adiar o escurecimento da tela, ela permanecerá ativa por mais tempo. Neste caso, os intervalos de desativação de tela, bloqueio de tela e modo ocioso são ajustados para manter as mesmas distâncias do intervalo de escurecimento de tela originalmente configuradas.
       Se esta política for definida como Verdadeira ou não for definida, o modelo de escurecimento inteligente será ativado e permitirá o aumento do tempo que a tela fica ativa. Se esta política for definida como Falsa, o modelo de escurecimento inteligente não influenciará o escurecimento da tela.</translation>
-<translation id="6982028490425791294">
-      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, do Google Meet) e enviá-los 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 enviar esses logs.
-
-      Esses logs contêm informações como tempo e tamanho dos pacotes RTP enviados e recebidos, feedback sobre congestionamento na rede e metadados sobre o tempo e a qualidade de frames de vídeo e áudio. Essas informações são úteis na depuração de problemas com chamadas de áudio ou videochamadas no Chrome, como problemas de estimativa de largura de banda etc. Os logs não apresentam conteúdo de áudio ou vídeo da chamada.
-
-      Essa coleta de dados só pode ser acionada pelos serviços da Web do Google, como o Google Hangouts ou o Google Meet.
-
-      Esses logs podem ser associados, por meio de um código de sessão, a outros logs coletados pelo próprio serviço do Google para facilitar a depuração.
-      </translation>
 <translation id="6994082778848658360">Especifica como o hardware de elemento seguro integrado pode ser usado para fornecer uma autenticação de segundo fator, se ele for compatível com esse recurso. O botão liga/desliga da máquina é usado para detectar a presença física do usuário.
 
       Se a opção Desativado for selecionada, nenhum segundo fator será fornecido.
@@ -2903,11 +2894,6 @@
 <translation id="9035964157729712237">IDs de extensão que serão isentos da lista negra</translation>
 <translation id="9042911395677044526">Permite aplicar a configuração de rede por usuário de dispositivo <ph name="PRODUCT_OS_NAME" />. A configuração de rede é uma string formatada em JSON, conforme definido pelo formato Open Network Configuration descrito em <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Especifica se a atividade de vídeo afeta o gerenciamento de energia</translation>
-<translation id="9085839450090699752">Permite definir, em milissegundos, o período que transcorrerá até que os usuários sejam notificados de que o <ph name="PRODUCT_NAME" /> precisa ser reinicializado ou que um dispositivo <ph name="PRODUCT_OS_NAME" /> precisa ser reinicializado para que uma atualização pendente seja aplicada.
-
-      Após esse período, o usuário será sempre informado sobre a necessidade de uma atualização. Para dispositivos <ph name="PRODUCT_OS_NAME" />, uma notificação de reinicialização aparecerá na bandeja do sistema quando um upgrade for detectado. A cor da notificação muda quando metade do período de notificação passar e, depois, mais uma vez, quando o período total da notificação tiver transcorrido. Para navegadores <ph name="PRODUCT_NAME" />, o menu do app muda para indicar que é necessária mais uma reinicialização quando um terço do período de notificação tiver transcorrido e, depois, mais uma vez, quando o período total da notificação tiver transcorrido. As notificações adicionais ativadas pela política <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> para navegadores seguem essa mesma programação.
-
-      Se esta política não for definida, será usado o período padrão de 345.600.000 milissegundos (quatro dias) para dispositivos <ph name="PRODUCT_OS_NAME" /> e 604.800.000 milissegundos (uma semana) para navegadores.</translation>
 <translation id="9088433379343318874">Ativar o provedor de conteúdo de usuário supervisionado</translation>
 <translation id="9088444059179765143">Configurar o método de detecção automática de fuso horário</translation>
 <translation id="9096086085182305205">Lista branca do servidor de autenticação</translation>
diff --git a/components/policy/resources/policy_templates_pt-PT.xtb b/components/policy/resources/policy_templates_pt-PT.xtb
index cbc33ae..8c40622e 100644
--- a/components/policy/resources/policy_templates_pt-PT.xtb
+++ b/components/policy/resources/policy_templates_pt-PT.xtb
@@ -194,6 +194,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Ativar o bloqueio de injeção de software de terceiros</translation>
 <translation id="1504431521196476721">Comprovação Remota</translation>
+<translation id="1507957856411744193">Se esta política estiver definida como verdadeira, o <ph name="PRODUCT_NAME" /> irá ligar-se a dispositivos de transmissão em todos os endereços IP e não apenas nos endereços privados RFC1918/RFC4193.
+
+          Se esta política estiver definida como falsa, o <ph name="PRODUCT_NAME" /> irá ligar-se a dispositivos de transmissão apenas nos endereços privados RFC1918/RFC4193.
+
+          Se esta política não estiver definida, o <ph name="PRODUCT_NAME" /> irá ligar-se a dispositivos de transmissão apenas nos endereços privados RFC1918/RFC4193, a menos que a funcionalidade CastAllowAllIPs esteja ativada.
+
+          Se a política "EnableMediaRouter" estiver definida como falsa, o valor desta política não tem efeito.</translation>
 <translation id="1509692106376861764">Esta política foi removida a partir da versão 29 do <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1514888685242892912">Ativar o <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Permitir que os sites registem a localização física dos utilizadores</translation>
@@ -367,11 +374,6 @@
 
           Se deixar esta política por definir, são utilizados os quatro esquemas.</translation>
 <translation id="2067011586099792101">Bloquear o acesso a sites fora de pacotes de conteúdo</translation>
-<translation id="2070270043919235595">Notifica os utilizadores acerca da necessidade de reiniciar o <ph name="PRODUCT_NAME" /> para aplicar uma atualização pendente.
-
-      Esta definição de política ativa as notificações para informar o utilizador de que é recomendado ou necessário reiniciar o navegador. Se não estiver definida, o <ph name="PRODUCT_NAME" /> indica ao utilizador que é necessário reiniciá-lo através de alterações subtis ao respetivo menu. Se estiver definida como "Recomendado", é apresentado um aviso recorrente ao utilizador a recomendar o reinício. O utilizador pode ignorar este aviso para adiar o reinício. Se estiver definida como "Obrigatório", é apresentado um aviso recorrente ao utilizador a indicar que o reinício do navegador será forçado assim que o período da notificação passar. Por predefinição, este período é de sete dias e pode ser configurado através da definição da política <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      A sessão do utilizador é restaurada após o reinício.</translation>
 <translation id="2073552873076775140">Permitir iniciar sessão no <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Utilizar aceleração de hardware sempre que estiver disponível</translation>
 <translation id="2077273864382355561">Atraso para desligar o ecrã quando o dispositivo está a utilizar a energia da bateria</translation>
@@ -915,7 +917,6 @@
           Esta política é opcional. Se não for definida, não será fornecida nenhuma página novo separador.
 
           Esta política é respeitada apenas se for ativada a política "DefaultSearchProviderEnabled".</translation>
-<translation id="3465852069254497664">Notificar um utilizador de que é recomendado ou necessário reiniciar o navegador</translation>
 <translation id="346731943813722404">Especifica se os atrasos de gestão de energia e o limite de duração da sessão devem apenas começar após ter sido observada a primeira atividade do utilizador numa sessão.
 
           Se esta política estiver definida como Verdadeira, os atrasos de gestão de energia e o limite de duração da sessão só começarão após ter sido observada a primeira atividade do utilizador numa sessão.
@@ -1967,6 +1968,7 @@
 
       A política <ph name="SYNC_DISABLED_POLICY_NAME" /> desativa a sincronização de todos os dados e substitui a política RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Filtrar sites de nível superior (mas não iFrames incorporados) com conteúdo para adultos</translation>
+<translation id="6734521799274931721">Controla a disponibilidade das Partilhas de ficheiros na rede para o Chrome OS</translation>
 <translation id="6735701345096330595">Forçar a ativação de idiomas com verificação ortográfica</translation>
 <translation id="673699536430961464">Esta definição permite que os utilizadores alternem entre Contas Google na área de conteúdo da respetiva janela do navegador após iniciarem sessão no dispositivo <ph name="PRODUCT_OS_NAME" />.
 
@@ -2116,17 +2118,6 @@
 
       Quando o ecrã está prestes a ser escurecido, o modelo de escurecimento inteligente determina se essa ação deve ser adiada. Se o modelo de escurecimento inteligente adiar o escurecimento do ecrã, prolonga efetivamente o tempo até essa ação. Neste caso, os atrasos de desativação, de bloqueio do ecrã e de inatividade são ajustados para manter as mesmas distâncias relativamente ao atraso de escurecimento do ecrã, conforme configurado originalmente.
       Se esta política não for definida ou estiver definida como verdadeira, o modelo de escurecimento inteligente será ativado para poder prolongar o tempo até ao escurecimento do ecrã. Se estiver definida como falsa, o modelo de escurecimento inteligente não irá influenciar o escurecimento do ecrã.</translation>
-<translation id="6982028490425791294">
-      Se definir esta política como verdadeira, o <ph name="PRODUCT_NAME" /> obtém permissão para recolher registos de eventos WebRTC dos serviços Google (por exemplo, o Google Meet) e carregar os mesmos para a Google.
-
-       Se definir esta política como falsa, ou não a definir, o <ph name="PRODUCT_NAME" /> não pode recolher nem carregar os referidos registos.
-
-      Estes registos contêm informações, como o tempo e o tamanho dos pacotes RTP enviados e recebidos, comentários acerca do congestionamento na rede e metadados acerca do tempo e da qualidade dos frames de áudio e vídeo. Estas informações são úteis durante a depuração de problemas com chamadas de áudio ou de vídeo no Chrome, como problemas de estimativa da largura de banda, etc. Os registos não possuem quaisquer conteúdos de áudio ou de vídeo resultantes da chamada.
-
-      Esta recolha de dados só pode ser acionada pelos serviços Web da Google, como o Google Hangouts ou o Google Meet.
-
-      Estes registos podem ser associados, através de um ID de sessão, a outros registos recolhidos pelo próprio serviço Google. Este processo pretende tornar a depuração mais fácil.
-      </translation>
 <translation id="6994082778848658360">Especifica de que forma o hardware de elemento seguro integrado pode ser utilizado para fornecer uma autenticação de fator duplo, se for compatível com esta funcionalidade. O botão ligar/desligar do computador é utilizado para detetar a presença física do utilizador.
 
       Se estiver selecionado "Desativado", o fator duplo não é fornecido.
@@ -2938,11 +2929,6 @@
 <translation id="9035964157729712237">IDs de extensões a excluir da lista negra</translation>
 <translation id="9042911395677044526">Permite que a configuração de rede seja aplicada por utilizador para um aparelho <ph name="PRODUCT_OS_NAME" />. A configuração de rede é uma cadeia de formato JSON, conforme definido pelo formato de Configuração de Rede Aberta descrito em <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Especificar se a atividade do vídeo afeta a gestão da energia</translation>
-<translation id="9085839450090699752">Permite-lhe definir o período de tempo, em milissegundos, durante o qual os utilizadores são notificados de que é necessário reiniciar o <ph name="PRODUCT_NAME" /> ou de que é necessário reiniciar um dispositivo do <ph name="PRODUCT_OS_NAME" /> para aplicar uma atualização pendente.
-
-      Durante este período de tempo, o utilizador é repetidamente informado da necessidade de aplicar uma atualização. Para os dispositivos do <ph name="PRODUCT_OS_NAME" />, é apresentada uma notificação de reinício no tabuleiro do sistema quando é detetada uma atualização. Esta notificação muda de cor assim que for atingida metade do período de notificação e, novamente, assim que for concluído todo o período de notificação. Para os navegadores do <ph name="PRODUCT_NAME" />, o menu de aplicações muda para indicar que é necessário um reinício assim que for atingido um terço do período de notificação. Esta notificação muda de cor novamente assim que forem atingidos dois terços do período de notificação e, por fim, após a conclusão de todo o período de notificação. As notificações adicionais ativadas pela política <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> para navegadores seguem o mesmo esquema.
-
-      Se não for definido, é utilizado o período predefinido de 345 600 000 milissegundos (quatro dias) para os dispositivos do <ph name="PRODUCT_OS_NAME" /> e de 604 800 000 milissegundos (uma semana) para navegadores.</translation>
 <translation id="9088433379343318874">Ativar o fornecedor de conteúdos do utilizador supervisionado</translation>
 <translation id="9088444059179765143">Configurar o método de deteção automática do fuso horário</translation>
 <translation id="9096086085182305205">Lista de permissões do servidor de autenticação</translation>
diff --git a/components/policy/resources/policy_templates_ro.xtb b/components/policy/resources/policy_templates_ro.xtb
index 435e2ba..0128527 100644
--- a/components/policy/resources/policy_templates_ro.xtb
+++ b/components/policy/resources/policy_templates_ro.xtb
@@ -351,11 +351,6 @@
 
           Dacă politica nu este configurată, vor fi utilizate toate cele patru scheme.</translation>
 <translation id="2067011586099792101">Se blochează accesul la site-urile din afara pachetelor de conținut</translation>
-<translation id="2070270043919235595">Notifică utilizatorul că <ph name="PRODUCT_NAME" /> trebuie relansat pentru aplicarea unei actualizări în așteptare.
-
-      Setarea acestei politici activează notificările care informează utilizatorul că este recomandată sau necesară relansarea browserului. Dacă politica nu este setată, <ph name="PRODUCT_NAME" /> îi arată utilizatorului că este necesară o relansare prin schimbări subtile aduse meniului. Dacă politica este setată la „Recomandat”, utilizatorului i se va afișa o avertizare recurentă prin care se indică faptul că relansarea este recomandată. Utilizatorul poate să respingă avertizarea pentru a amâna relansarea. Dacă politica este setată la „Obligatoriu”, utilizatorului i se va afișa o avertizare recurentă prin care se indică faptul că relansarea browserului va fi obligatorie după încheierea perioadei de notificare. În mod prestabilit, această perioadă este de șapte zile și poate fi configurată prin setarea politicii <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Sesiunea utilizatorului este restabilită după relansare.</translation>
 <translation id="2073552873076775140">Permite conectarea la <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Utilizează accelerarea hardware când este disponibilă</translation>
 <translation id="2077273864382355561">Interval până la oprirea ecranului la funcționarea pe baterie</translation>
@@ -895,7 +890,6 @@
           Politica este opțională. Dacă nu este configurată, nu va fi furnizată o pagină Filă nouă.
 
           Politica este urmată numai dacă este activată politica „DefaultSearchProviderEnabled”.</translation>
-<translation id="3465852069254497664">Notifică utilizatorul că relansarea browserului este recomandată sau necesară</translation>
 <translation id="346731943813722404">Indică dacă întârzierile din managementul alimentării cu energie și limita de durată a sesiunii trebuie să înceapă să ruleze numai după ce a fost detectată prima activitate a utilizatorului într-o sesiune.
 
           Dacă politica este activată, întârzierile din managementul alimentării cu energie și limita de durată a sesiunii nu încep să ruleze decât după ce a fost detectată prima activitate a utilizatorului într-o sesiune.
@@ -2105,17 +2099,6 @@
 
 Atunci când ecranul este pe cale să se întunece, modelul inteligent de reducere a luminozității evaluează dacă reducerea luminozității trebuie amânată. Dacă modelul inteligent de reducere a luminozității amână acest eveniment, el extinde practic timpul până când ecranul se întunecă. În acest caz, duratele până la închiderea ecranului, blocarea acestuia și dezactivare se ajustează pentru a păstra același distanțe față de configurația inițială de întunecare a ecranului.
 Dacă politica este setată la True sau nu este setată, modelul inteligent de reducere a luminozității va fi activat și va putea extinde timpul până la întunecarea ecranului. Dacă politica este setată la False, modelul inteligent de reducere a luminozității nu va influența întunecarea ecranului.</translation>
-<translation id="6982028490425791294">
-      Dacă politica este activată, <ph name="PRODUCT_NAME" /> poate să colecteze jurnale de evenimente WebRTC din serviciile Google (de exemplu, Google Meet) și să le încarce pe Google.
-
-      Dacă politica este dezactivată sau nu este configurată, <ph name="PRODUCT_NAME" /> nu poate colecta sau încărca astfel de jurnale.
-
-      Jurnalele conțin informații precum ora și dimensiunea pachetelor RTP trimise și primite, feedback privind congestionarea rețelei și metadate despre ora și calitatea cadrelor audio și video. Aceste informații sunt utile pentru remedierea problemelor privind apelurile audio sau video în Chrome, cum ar fi problemele de estimare a lățimii de bandă etc. Jurnalele nu conțin înregistrări audio sau video din apel.
-
-      Această colectare a datelor poate fi declanșată numai de serviciile web Google, precum Google Hangouts sau Google Meet.
-
-      Jurnalele pot fi asociate, prin intermediul unui ID de sesiune, cu alte jurnale colectate chiar de serviciile Google. Astfel, se poate simplifica remedierea erorilor.
-      </translation>
 <translation id="6994082778848658360">Specifică modul în care poate fi folosit hardware-ul elementului de securitate încorporat pentru a oferi o autentificare cu doi factori, dacă se acceptă de această funcție. Butonul de pornire al dispozitivului este folosit ca să detecteze prezența fizică a utilizatorului.
 
       Dacă selectezi „Dezactivat”, al doilea factor nu mai este oferit.
@@ -2905,11 +2888,6 @@
 <translation id="9035964157729712237">ID-urile extensiilor excluse din lista neagră</translation>
 <translation id="9042911395677044526">Această politică permite trimiterea configurației rețelei pentru a fi aplicată pentru fiecare utilizator pe un dispozitiv cu <ph name="PRODUCT_OS_NAME" />. Configurația rețelei este un șir în formatul JSON, conform definirii acestuia de către formatul Open Network Configuration descris la <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Specificați dacă activitatea video afectează gestionarea consumului de energie</translation>
-<translation id="9085839450090699752">Îți permite să setezi perioada, în milisecunde, în care utilizatorii sunt informați că <ph name="PRODUCT_NAME" /> trebuie relansat sau că un dispozitiv <ph name="PRODUCT_OS_NAME" /> trebuie repornit pentru a aplica o actualizare în așteptare.
-
-      În această perioadă, utilizatorul va fi informat în mod repetat despre necesitatea unei actualizări. Pentru dispozitivele <ph name="PRODUCT_OS_NAME" />, notificarea privind repornirea apare în bara de sistem atunci când se detectează un upgrade. Această notificare își schimbă culoarea după expirarea primei jumătăți a perioadei de notificare și încă o dată, după încheierea întregii perioade de notificare. Pentru browserele <ph name="PRODUCT_NAME" />, meniul aplicației se modifică, indicând faptul că este necesară o relansare după expirarea unei treimi din perioada de notificare. Această notificare își schimbă culoarea după expirarea a două treimi din perioada de notificare și încă o dată, după încheierea întregii perioade de notificare. Notificările suplimentare activate de politica <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> pentru browsere urmează aceeași regulă.
-
-      Dacă nu este configurată, se aplică o perioadă prestabilită de 345.600.000 de milisecunde (4 zile) pentru dispozitivele <ph name="PRODUCT_OS_NAME" /> și o perioadă prestabilită de 604.800.000 de milisecunde (o săptămână) pentru browsere.</translation>
 <translation id="9088433379343318874">Activează furnizorul de conținut pentru utilizatori monitorizați</translation>
 <translation id="9088444059179765143">Configurează metoda de detectare automată a fusului orar</translation>
 <translation id="9096086085182305205">Lista albă de autentificare a serverelor</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 7a45954..4da968c 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -178,6 +178,13 @@
           <ph name="PROXY_HELP_URL" /></translation>
 <translation id="1502843533062797703">Запретить ПО независимых производителей передавать код</translation>
 <translation id="1504431521196476721">Удаленная проверка</translation>
+<translation id="1507957856411744193">Если для правила задано значение True, <ph name="PRODUCT_NAME" /> будет подключаться к устройствам Google Cast на всех IP-адресах, а не только на закрытых адресах RFC1918/RFC4193.
+
+          Если для правила задано значение False, <ph name="PRODUCT_NAME" /> будет подключаться только к устройствам Google Cast на закрытых адресах RFC1918/RFC4193.
+
+          Если правило не настроено, <ph name="PRODUCT_NAME" /> будет подключаться к устройствам Google Cast только на закрытых адресах RFC1918/RFC4193 при условии, что функция CastAllowAllIPs отключена.
+
+          Если для правила EnableMediaRouter задано значение False, то правило MediaRouterCastAllowAllIPs работать не будет.</translation>
 <translation id="1509692106376861764">Это правило не поддерживается в <ph name="PRODUCT_NAME" /> версии 29 и будет исключено из более поздних версий.</translation>
 <translation id="1514888685242892912">Включить <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Разрешить сайтам отслеживать местоположение пользователей</translation>
@@ -345,11 +352,6 @@
 
           Если правило не настроено, используются все четыре схемы.</translation>
 <translation id="2067011586099792101">Блокировать доступ для сайтов, не включенных в пакеты контента</translation>
-<translation id="2070270043919235595">Уведомлять пользователя о том, что для установки обновления необходимо перезапустить <ph name="PRODUCT_NAME" />.
-
-      Это правило разрешает уведомлять пользователя о том, что перезапуск браузера рекомендован или необходим. Если значение не задано, пользователь сможет узнать о необходимости перезапуска по небольшим изменениям в меню <ph name="PRODUCT_NAME" />. Если установить, что перезапуск рекомендуется, пользователь будет получать уведомление, но действие можно будет откладывать. Если установить, что перезапуск необходим, пользователь будет получать предупреждение о том, что браузер перезапустится автоматически, когда истечет срок показа уведомлений. По умолчанию он равен семи дням и может быть изменен через настройки правила <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      После перезапуска сеанс пользователя восстанавливается.</translation>
 <translation id="2073552873076775140">Разрешить вход в <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Использовать аппаратное ускорение (при наличии)</translation>
 <translation id="2077273864382355561">Задержка отключения экрана при работе от батареи</translation>
@@ -881,7 +883,6 @@
           Это правило может использоваться по усмотрению пользователей. Если его значение не задано, страница быстрого доступа не будет указана.
 
           Это правило применяется только совместно с правилом "DefaultSearchProviderEnabled".</translation>
-<translation id="3465852069254497664">Уведомлять пользователя о том, что рекомендуется или требуется перезапустить браузер</translation>
 <translation id="346731943813722404">Определяет, следует ли начинать отсчет времени для параметров электропитания и регистрировать начало сеанса лишь после того, как система зафиксирует первое действие пользователя.
 
           Если выбрано значение TRUE, время бездействия для таких настроек электропитания, как отключение дисплея и перевод устройства в спящий режим, и лимит продолжительности сеанса начнут отсчитываться после первого действия в системе.
@@ -1934,6 +1935,7 @@
 
       Правило <ph name="SYNC_DISABLED_POLICY_NAME" /> отключает синхронизацию всех данных, изменяя правило RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Фильтровать сайты верхнего уровня (кроме встроенных окон iframe), содержащие контент для взрослых</translation>
+<translation id="6734521799274931721">Управление функцией совместного доступа к файлам в сети для Chrome OS</translation>
 <translation id="6735701345096330595">Принудительная проверка правописания для определенных языков</translation>
 <translation id="673699536430961464">Позволяет переключаться между несколькими аккаунтами Google в браузере после входа в аккаунт на устройстве <ph name="PRODUCT_OS_NAME" />.
 
@@ -2076,17 +2078,6 @@
 
       Умное затемнение оценивает, нужно ли отложить затемнение экрана. Если такая необходимость есть, время до затемнения, блокировки и выключения экрана продлевается.
       Если это правило активно (True) или не задано, интеллектуальная модель затемнения будет включена и будет продлевать время до затемнения экрана. Если правило отключено (False), время до затемнения экрана меняться не будет.</translation>
-<translation id="6982028490425791294">
-      Если задано значение True, <ph name="PRODUCT_NAME" /> сможет собирать журналы событий WebRTC из сервисов Google (например, Google Meet), и загружать их в Google.
-
-      Если задано значение False или правило не настроено, <ph name="PRODUCT_NAME" /> не сможет собирать и загружать такие журналы.
-
-      В журналах содержится такая информация, как размер отправленных и полученных пакетов RTP, время их отправки, данные о перегрузке сети, а также метаданные о продолжительности и качестве аудио и видео. Такая информация полезна для отладки звонков и видеовстреч в Chrome (например, для оценки пропускной способности канала). В журналах нет самого аудио- или видеоконтента.
-
-      Сбор данных могут запустить только такие веб-сервисы Google, как Hangouts и Meet.
-
-      Для упрощения отладки эти журналы могут быть связаны с журналами самих сервисов Google с помощью идентификатора сеанса.
-      </translation>
 <translation id="6994082778848658360">Определяет, как  можно использовать встроенный аппаратный защитный элемент для двухэтапной аутентификации, если этот элемент ее поддерживает. Аппаратная кнопка питания используется для подтверждения физического присутствия пользователя.
 
       Если выбран вариант "Отключена", двухфакторная аутентификация не применяется.
@@ -2883,11 +2874,6 @@
 <translation id="9035964157729712237">Идентификаторы расширений, исключаемых из черного списка</translation>
 <translation id="9042911395677044526">Позволяет принудительно переносить конфигурацию сети конкретного пользователя на любые устройства <ph name="PRODUCT_OS_NAME" />. Конфигурация сети описывается строкой в формате JSON, который определен форматом Open Network Configuration, с которым можно ознакомиться, перейдя по адресу <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Определяет, влияет ли воспроизведение видео на режим энергопотребления</translation>
-<translation id="9085839450090699752">Позволяет задать период времени в миллисекундах, в течение которого пользователю будут показываться уведомления о том, что для установки обновления необходимо перезапустить <ph name="PRODUCT_NAME" /> или перезагрузить устройство <ph name="PRODUCT_OS_NAME" />.
-
-      На протяжении этого периода пользователь будет получать многократные напоминания о необходимости установить обновление. На устройствах <ph name="PRODUCT_OS_NAME" /> они появляются в области уведомлений, если обнаружено обновление. Цвет уведомления меняется, когда проходит половина заданного периода, а также в конце периода. В браузерах <ph name="PRODUCT_NAME" /> по истечении трети заданного периода в меню появляется напоминание о том, что необходимо перезапустить приложение. Цвет уведомления меняется, когда проходит две трети заданного периода, а также в конце периода. Дополнительные уведомления, которые регулируются правилом <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> для браузеров, появляются по такой же схеме.
-
-      Если правило не задано, используется период по умолчанию: 345 600 000 миллисекунд (четыре дня) для устройств <ph name="PRODUCT_OS_NAME" /> и 604 800 000 миллисекунд (одна неделя) для браузеров.</translation>
 <translation id="9088433379343318874">Открыть доступ к поставщику контента для контролируемых профилей</translation>
 <translation id="9088444059179765143">Определять часовой пояс автоматически</translation>
 <translation id="9096086085182305205">Белый список аутентификации сервера</translation>
diff --git a/components/policy/resources/policy_templates_sk.xtb b/components/policy/resources/policy_templates_sk.xtb
index 398f3e5..7c87e00 100644
--- a/components/policy/resources/policy_templates_sk.xtb
+++ b/components/policy/resources/policy_templates_sk.xtb
@@ -345,11 +345,6 @@
 
           Ak toto pravidlo ponecháte nenastavené, použijú sa všetky štyri schémy.</translation>
 <translation id="2067011586099792101">Blokovať prístup ku stránkam mimo balíkov obsahu</translation>
-<translation id="2070270043919235595">Umožňuje používateľov upozorniť, že <ph name="PRODUCT_NAME" /> musia znova spustiť, aby sa použila čakajúca aktualizácia.
-
-      Toto nastavenie pravidla aktivuje upozornenia, ktoré informujú používateľa o tom, že sa odporúča alebo vyžaduje opätovné spustenie prehliadača. Ak nie je nastavené, <ph name="PRODUCT_NAME" /> upozorní používateľa prostredníctvom nenápadných zmien v ponuke, že sa vyžaduje opätovné spustenie. Ak je nastavené na možnosť Recommended (Odporúčané), používateľovi sa bude zobrazovať opakované upozornenie na to, že sa odporúča opätovné spustenie. Používateľ môže toto upozornenie zrušiť a opätovné spustenie tak odmietnuť. Ak je nastavené na možnosť Required (Vyžadované), používateľovi sa zobrazí opakované upozornenie, že po vypršaní obdobia upozornenia sa vynúti opätovné spustenie prehliadača. Toto obdobie je predvolene nastavené na sedem dní a dá sa nakonfigurovať prostredníctvom nastavenia pravidla <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Relácia používateľa sa po opätovnom spustení obnoví.</translation>
 <translation id="2073552873076775140">Povoliť prihlásenie do prehliadača <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Používať hardvérovú akceleráciu (keď je dostupná)</translation>
 <translation id="2077273864382355561">Oneskorenie vypnutia obrazovky pri napájaní z batérie</translation>
@@ -901,7 +896,6 @@
           Toto pravidlo je nepovinné. Ak sa nenastaví, neotvorí sa na novej karta žiadna stránka.
 
           Toto pravidlo sa rešpektuje iba v prípade, ak je zapnuté pravidlo DefaultSearchProviderEnabled.</translation>
-<translation id="3465852069254497664">Upozorňovať používateľa, že sa odporúča alebo vyžaduje opätovné spustenie prehliadača</translation>
 <translation id="346731943813722404">Toto pravidlo určuje, či oneskorenia správy napájania a limit dĺžky relácie sa majú spustiť iba po zaznamenaní prvej aktivity používateľa v relácii.
 
           Ak je toto pravidlo nastavené na hodnotu True, oneskorenia správy napájania a limit dĺžky relácie sa nespustia po zaznamenaní prvej aktivity používateľa v relácii.
@@ -2150,17 +2144,6 @@
 
       Tesne predtým, ako sa obrazovka stlmí, inteligentný model stlmenia zhodnotí, či by malo byť stlmenie obrazovky odložené. Ak ho odloží, účinne predĺži čas do stlmenia obrazovky. V tomto prípade sa oneskorenie vypnutia obrazovky, aktivácie zámky obrazovky a nečinnosti upraví tak, aby sa zachovali rovnaké odstupy od oneskorenia stlmenia obrazovky, ktoré boli pôvodne nakonfigurované.
       Ak toto pravidlo nastavíte na hodnotu true alebo ho nenastavíte, inteligentný model stlmenia bude aktívny a bude môcť predĺžiť čas do stlmenia obrazovky. Ak toto pravidlo nastavíte na hodnotu false, tento model nebude mať vplyv na stlmenie obrazovky.</translation>
-<translation id="6982028490425791294">
-      Ak toto pravidlo nastavíte na hodnotu true, prehliadaču <ph name="PRODUCT_NAME" /> povolíte zhromažďovať denníky udalostí WebRTC zo služieb Googlu (napr. Google Meet) a nahrávať ich do Googlu.
-
-      Ak ho nastavíte na hodnotu false alebo ho ponecháte nenastavené, <ph name="PRODUCT_NAME" /> nebude môcť tieto denníky zhromažďovať ani nahrávať.
-
-      Tieto denníky obsahujú informácie, ako napríklad čas a veľkosť odoslaných a prijatých balíkov RTP, spätnú väzbu týkajúcu sa preťaženia siete a metadáta o čase a kvalite zvuku a snímok videa. Tieto informácie sú užitočné pri ladení problémov so zvukovými alebo videohovormi v Chrome, ako napríklad problémoch s odhadom rýchlosti pripojenia atď. Do denníkov sa neukladá zvukový ani videoobsah hovoru.
-
-      Zhromažďovanie týchto dát sa dá spustiť iba pomocou webových služieb Googlu, ako je napríklad Google Hangouts alebo Google Meet.
-
-      Tieto denníky môžu byť prostredníctvom identifikátora relácie priradené k iným denníkom zhromaždeným príslušnou službou Google. Ide o zamýšľané správanie, ktoré má uľahčiť ladenie.
-      </translation>
 <translation id="6994082778848658360">Umožňuje určiť, ako môže byť hardvér zabezpečeného prvku na základnej doske počítača použitý na poskytovanie druhého faktora overenia totožnosti, ak je kompatibilný s touto funkciou. Vypínač zariadenia sa používa na rozpoznanie fyzickej prítomnosti používateľa.
 
       Ak vyberiete možnosť Zakázané, druhý faktor nebude poskytovaný.
@@ -2984,11 +2967,6 @@
 <translation id="9035964157729712237">ID rozšírení, ktoré majú byť zo zoznamu zakázaných rozšírení vyňaté</translation>
 <translation id="9042911395677044526">Umožňuje preniesť konfiguráciu siete, ktorá sa použije pre jednotlivých používateľov v zariadení so systémom <ph name="PRODUCT_OS_NAME" />. Konfigurácia siete je reťazec vo formáte JSON, ktorý sa riadi definíciou formátu Open Network Configuration uvedenou na adrese <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Určuje, či prehrávanie videa ovplyvňuje správu napájania</translation>
-<translation id="9085839450090699752">Umožňuje nastaviť časové obdobie v milisekundách, po uplynutí ktorého budú používatelia upozornení, že <ph name="PRODUCT_NAME" /> sa musí znova spustiť alebo že zariadenie <ph name="PRODUCT_OS_NAME" /> musí byť reštartované, aby sa použila čakajúca aktualizácia.
-
-      V priebehu tohto časového obdobia bude používateľ opakovane informovaný o potrebe aktualizácie. V zariadeniach <ph name="PRODUCT_OS_NAME" /> sa po zistení inovácie objaví na paneli úloh systému upozornenie na reštartovanie. Farba tohto upozornenia sa zmení po uplynutí polovice obdobia a opäť po uplynutí celého obdobia. V prípade prehliadačov <ph name="PRODUCT_NAME" /> sa po uplynutí jednej tretiny časového obdobia upozornenia zmení ponuka aplikácie, ktorá označuje potrebu opätovného spustenia. Farba upozornenia sa zmení po uplynutí dvoch tretín obdobia a znova po uplynutí celého obdobia. Ďalšie upozornenia povolené pravidlom <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> pre prehliadače dodržiavajú rovnaký harmonogram.
-
-      Ak pravidlo nenastavíte, použije sa predvolené obdobie 345 600 000 milisekúnd (štyri dni) pre zariadenia <ph name="PRODUCT_OS_NAME" /> a 604 800 000 milisekúnd (jeden týždeň) pre prehliadače.</translation>
 <translation id="9088433379343318874">Povoliť poskytovateľa obsahu pre kontrolovaného používateľa</translation>
 <translation id="9088444059179765143">Konfigurovať spôsob automatického zisťovania časového pásma</translation>
 <translation id="9096086085182305205">Zoznam povolených overovacích serverov</translation>
diff --git a/components/policy/resources/policy_templates_sl.xtb b/components/policy/resources/policy_templates_sl.xtb
index 4e9b590e..62ec7c1 100644
--- a/components/policy/resources/policy_templates_sl.xtb
+++ b/components/policy/resources/policy_templates_sl.xtb
@@ -370,11 +370,6 @@
 
           Če ta pravilnik ni nastavljen, bodo uporabljeni vsi štirje načini.</translation>
 <translation id="2067011586099792101">Blokira dostop do spletnih mest zunaj paketov vsebine</translation>
-<translation id="2070270043919235595">Obvesti uporabnike, da je treba zaradi uveljavitve posodobitve na čakanju zagnati brskalnik <ph name="PRODUCT_NAME" />.
-
-      Ta nastavitev pravilnika omogoči obvestila, ki uporabnika obvestijo, da je priporočen ali obvezen vnovičen zagon brskalnika. Če pravilnik ni nastavljen, brskalnik <ph name="PRODUCT_NAME" /> uporabnika glede potrebnega vnovičnega zagona obvesti prek manjših sprememb menija. Če je pravilnik nastavljen na »Recommended«, je uporabniku prikazano ponavljajoče se opozorilo, da je priporočen vnovičen zagon. Uporabnik lahko opozorilo opusti in tako odloži vnovičen zagon. Če je pravilnik nastavljen na »Required«, je uporabniku prikazano ponavljajoče se opozorilo, da bo po izteku obdobja za obveščanje vsiljen vnovičen zagon brskalnika. To obdobje privzeto traja sedem dni in ga je mogoče konfigurirati v nastavitvi pravilnika <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Uporabniška seja je po vnovičnem zagonu obnovljena.</translation>
 <translation id="2073552873076775140">Dovoli prijavo v izdelek <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Uporabi strojno pospeševanje, če je na voljo</translation>
 <translation id="2077273864382355561">Časovni zamik izklopa zaslona ob napajanju iz akumulatorja</translation>
@@ -934,7 +929,6 @@
           Ta pravilnik je izbiren. Če ni nastavljen, ne bo novega zavihka s povezavami.
 
           Ta pravilnik se upošteva samo, če je omogočen pravilnik »DefaultSearchProviderEnabled«.</translation>
-<translation id="3465852069254497664">Obveščanje uporabnika, da je priporočen ali obvezen vnovičen zagon brskalnika</translation>
 <translation id="346731943813722404">Določa, ali naj se zakasnitve upravljanja porabe in omejitev dolžine seje začnejo izvajati šele po prvi zaznani dejavnosti uporabnika v seji.
 
           Če je pravilnik nastavljen na »True«, se zakasnitve upravljanja porabe in omejitev dolžine seje ne začnejo izvajati, dokler v seji ni zaznana prva dejavnost uporabnika.
@@ -2194,17 +2188,6 @@
 
       Preden se zaslon zatemni, pametni model zatemnitve oceni, ali je treba zatemnitev zaslona odložiti. Če pametni model zatemnitve odloži zatemnitev zaslona, dejansko podaljša čas do zatemnitve zaslona. V tem primeru se časovna zamika izklopa zaslona in zaklepanja zaslona ter časovni zamik ob nedejavnosti prilagodijo, da ohranijo enako časovno razdaljo od prvotno konfigurirane zakasnitve zatemnitve zaslona.
       Če je pravilnik omogočen ali ni nastavljen, je pametni model zatemnitve omogočen in sme podaljšati čas do zatemnitve zaslona. Če je pravilnik onemogočen, pametni model zatemnitve na zatemnitev zaslona ne vpliva.</translation>
-<translation id="6982028490425791294">
-      Če je pravilnik omogočen, <ph name="PRODUCT_NAME" /> sme zbirati dnevnike dogodkov tehnologije WebRTC iz Googlovih storitev (npr. iz Googla Meet) in te dnevnike nalagati v Google.
-
-      Če je pravilnik onemogočen ali ni nastavljen, <ph name="PRODUCT_NAME" /> tovrstnih dnevnikov ne sme ne zbirati ne nalagati.
-
-      Ti dnevniki vsebujejo podatke, kot so čas in velikost poslanih ter prejetih paketov RTP, povratne informacije o preobremenjenosti omrežja ter metapodatki o času in kakovosti zvočnih ter slikovnih okvirov. Ti podatki so v pomoč pri odpravljanju napak z zvočnimi klici ali videoklici v Chromu, na primer pri težavah z ocenjevanjem pasovne širine ipd. Dnevniki ne vsebujejo zvočne in slikovne vsebine klica.
-
-      To zbiranje podatkov lahko sprožijo samo Googlove spletne storitve, na primer Google Hangouts ali Google Meet.
-
-      Ti dnevniki so lahko prek ID-ja seje povezani z drugimi dnevniki, ki jih zbira sama Googlova storitev, in sicer zaradi lažjega odpravljanja napak.
-      </translation>
 <translation id="6994082778848658360">Določa, kako lahko vgrajena strojna oprema za varnostni element zagotovi dvojno preverjanje pristnosti, če je združljiva s to funkcijo. Gumb za vklop na računalniku zazna fizično prisotnost uporabnika.
 
       Če je izbrana možnost »Onemogočeno«, dvojno preverjanje ni zagotovljeno.
@@ -3045,11 +3028,6 @@
 <translation id="9035964157729712237">ID-ji razširitev, ki naj bodo izvzete s seznama prepovedanih</translation>
 <translation id="9042911395677044526">Omogoča pošiljanje omrežne konfiguracije, ki se uporablja glede na uporabnika, v napravo s sistemom <ph name="PRODUCT_OS_NAME" />. Omrežna konfiguracija je niz v obliki zapisa JSON, kot je določeno z obliko konfiguracije odprtega omrežja, opisane na <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Navedite, ali videodejavnost vpliva na upravljanje napajanja</translation>
-<translation id="9085839450090699752">Omogoči nastavitev časovnega obdobja v milisekundah, v katerem so uporabniki obveščeni, da mora biti <ph name="PRODUCT_NAME" /> znova zagnan ali da mora biti naprava <ph name="PRODUCT_OS_NAME" /> znova zagnana za uveljavitev čakajoče posodobitve.
-
-      V tem časovnem obdobju je uporabnik večkrat obveščen glede potrebe po posodobitvi. Ko je zaznana nadgradnja, se za naprave <ph name="PRODUCT_OS_NAME" /> v sistemski vrstici pojavi obvestilo o vnovičnem zagonu. Barva obvestila se spremeni, ko mine polovica obdobja za obveščanje, in znova, ko mine celotno obdobje za obveščanje. Za brskalnike <ph name="PRODUCT_NAME" /> se meni aplikacije spremeni, da ponazori, da je potreben vnovični zagon, ko mine ena tretjina obdobja za obveščanje. Barva tega obvestila se spremeni, ko mineta dve tretjini obdobja za obveščanje, in znova, ko mine celotno obdobje za obveščanje. Za dodatna obvestila, ki jih je omogočil pravilnik <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> za brskalnike, prav tako velja ta razpored.
-
-      Če pravilnik ni nastavljen, se za naprave <ph name="PRODUCT_OS_NAME" /> kot privzeto časovno obdobje uporabi 345.600.000 millisekund (štirje dnevi), za brskalnike pa 604.800.000 milisekund (en teden).</translation>
 <translation id="9088433379343318874">Omogočanje ponudnika vsebine za zaščitene uporabnike</translation>
 <translation id="9088444059179765143">Konfiguriranje načina samodejnega zaznavanja časovnega pasu</translation>
 <translation id="9096086085182305205">Seznam dovoljenih strežnikov za preverjanje pristnosti</translation>
diff --git a/components/policy/resources/policy_templates_sr.xtb b/components/policy/resources/policy_templates_sr.xtb
index e20e469..0bb12dbe 100644
--- a/components/policy/resources/policy_templates_sr.xtb
+++ b/components/policy/resources/policy_templates_sr.xtb
@@ -369,11 +369,6 @@
 
           Ако не подесите ове смернице, користиће се све четири шеме.</translation>
 <translation id="2067011586099792101">Блокирај приступ сајтовима изван пакета садржаја</translation>
-<translation id="2070270043919235595">Обавести кориснике да <ph name="PRODUCT_NAME" /> мора да се поново покрене да би се применило ажурирање на чекању.
-
-      Ово подешавање смерница омогућава обавештавање корисника да се препоручује или је потребно поновно покретање прегледача. Ако се не подеси, <ph name="PRODUCT_NAME" /> указује кориснику незнатним променама менија да је поновно покретање потребно. Ако се изабере подешавање „Препоручено“, кориснику ће се приказивати упозорење да се поновно покретање препоручује. Корисник може да одбаци ово упозорење да би одложио поновно покретање. Ако се изабере подешавање „Обавезно“, кориснику ће се приказивати упозорење да ће се прегледач принудно поново покренути када истекне период за обавештење. Подразумевано трајање тог периода је седам дана и може да се конфигурише преко подешавања смерница <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Корисникова сесија се обнавља после поновног покретања.</translation>
 <translation id="2073552873076775140">Дозвољавају пријављивање у <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Користи хардверско убрзање када је доступно</translation>
 <translation id="2077273864382355561">Време до искључивања екрана када се користи батерија</translation>
@@ -931,7 +926,6 @@
           Ове смернице су опционалне. Ако не буду подешене, неће бити приказана никаква страница Нова картица.
 
           Ове смернице се поштују само ако су омогућене смернице „DefaultSearchProviderEnabled“.</translation>
-<translation id="3465852069254497664">Обавести корисника да се препоручује или захтева поновно покретање прегледача</translation>
 <translation id="346731943813722404">Наводи да ли кашњења у управљању напајањем и ограничење дужине сесије треба да се покрећу само након прве активности корисника у сесији.
 
           Ако се ове смернице поставе на вредност True, кашњења у управљању напајањем и ограничење дужине сесије се покрећу тек након прве активности корисника у сесији.
@@ -2174,17 +2168,6 @@
 
       Непосредно пре затамњења екрана модел паметног затамњивања процењује да ли затамњење екрана треба одложити. Ако модел паметног затамњивања одложи затамњење екрана, продужава се време до затамњења. У том случају, одлагање искључивања екрана, закључавања екрана и неактивности екрана прилагођава се да би период одлагања затамњења екрана остао исти као што је првобитно било конфигурисано.
       Ако се ове смернице подесе на „Тачно“ или се не подесе, модел паметног затамњивања је омогућен и може да продужи време до затамњења екрана. Ако се ове смернице подесе на „Нетачно“, модел паметног затамњивања не утиче на затамњење екрана.</translation>
-<translation id="6982028490425791294">
-      Ако подесите ове смернице на Тачно, <ph name="PRODUCT_NAME" /> може да прикупља WebRTC евиденције догађаја из Google услуга (нпр. Google Meet) и отпрема их на Google.
-
-      Ако подесите ове смернице на Нетачно или их не подесите, <ph name="PRODUCT_NAME" /> не може да прикупља нити отпрема те евиденције.
-
-      Те евиденције садрже информације, попут времена слања и примања RTP пакета и њихове величине, повратних информација о закрчењима на мрежи и метаподатака о времену и квалитету аудио и видео оквира. Те информације су корисне при отклањању грешака са аудио и видео позивима у Chrome-у, попут проблема са проценама пропусног опсега и слично. Евиденције не укључују аудио или видео садржај позива.
-
-      Ову колекцију података можете да покренете само помоћу Google веб-услуга, као што је Google Hangouts или Google Meet.
-
-      Те евиденције могу да буду повезане, посредством ИД-а сесије, са другим евиденцијама прикупљеним помоћу саме услуге Google. На тај начин отклањање грешака постаје лакше.
-      </translation>
 <translation id="6994082778848658360">Прецизира како уграђени хардвер безбедносног елемента може да се користи да пружи двоструку потврду идентитета ако је компатибилан са овом функцијом. Дугме за напајање уређаја се користи за утврђивање физичког присуства корисника.
 
       Ако изаберете „Онемогућено“, не пружа се други фактор.
@@ -3036,11 +3019,6 @@
 <translation id="9035964157729712237">ИД-ови додатака које треба изузети са црне листе</translation>
 <translation id="9042911395677044526">Омогућава да се конфигурација мреже примени по кориснику уређаја <ph name="PRODUCT_OS_NAME" />. Конфигурација мреже је стринг са JSON форматирањем као што је дефинисано форматом Open Network Configuration описаним на адреси <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Одредите да ли видео активности утичу на управљање струјом</translation>
-<translation id="9085839450090699752">Омогућавају вам да подесите временски период, у милисекундама, током ког корисници добијају обавештење да морају поново да покрену <ph name="PRODUCT_NAME" /> или да рестартују <ph name="PRODUCT_OS_NAME" /> уређај да би применили ажурирање на чекању.
-
-      Током овог временског периода корисник редовно добија обавештења о потребном ажурирању. На <ph name="PRODUCT_OS_NAME" /> уређајима обавештење о рестартовању се појављује на системској палети када се открије надоградња. Ово обавештење мења боју када прође половина периода за приказ обавештења и још једном када прође читав тај период. У <ph name="PRODUCT_NAME" /> прегледачима се по истеку једне трећине периода за приказ обавештења мења мени апликације да би се указало на то да је потребно поновно покретање. Ово обавештење мења боју када прођу две трећине периода за приказ обавештења и још једном када прође читав тај период. Додатна обавештења која омогуће смернице <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> за прегледаче прате исти распоред.
-
-      Ако не подесите ове смернице, користи се подразумевани период од 345.600.000 милисекунди (четири дана) за <ph name="PRODUCT_OS_NAME" /> уређаје и 604.800.000 милисекунди (недељу дана) за прегледаче.</translation>
 <translation id="9088433379343318874">Омогући добављача садржаја за корисника под надзором</translation>
 <translation id="9088444059179765143">Конфигуриши метод аутоматског откривања временске зоне</translation>
 <translation id="9096086085182305205">Бела листа сервера за потврду аутентичности</translation>
diff --git a/components/policy/resources/policy_templates_sv.xtb b/components/policy/resources/policy_templates_sv.xtb
index bd67838..b80ef00 100644
--- a/components/policy/resources/policy_templates_sv.xtb
+++ b/components/policy/resources/policy_templates_sv.xtb
@@ -191,6 +191,13 @@
           <ph name="PROXY_HELP_URL" /></translation>
 <translation id="1502843533062797703">Aktivera blockering av kodinjektion från tredjepartsprogram</translation>
 <translation id="1504431521196476721">Fjärrattestering</translation>
+<translation id="1507957856411744193">Om den här principen är inställd på sant ansluter <ph name="PRODUCT_NAME" /> till Cast-enheter på alla IP-adresser, inte bara privata RFC1918/RFC4193-adresser.
+
+          Om den här principen är inställd på falskt ansluter <ph name="PRODUCT_NAME" /> bara till Cast-enheter på privata RFC1918/RFC4193-adresser.
+
+          Om den här principen inte är inställd ansluter <ph name="PRODUCT_NAME" /> bara till Cast-enheter på privata RFC1918/RFC4193-adresser, om inte funktionen CastAllowAllIPs är aktiverad.
+
+          Om principen EnableMediaRouter är inställd på falskt har den här principens värde ingen effekt.</translation>
 <translation id="1509692106376861764">Den här principen gäller inte från version 29 av <ph name="PRODUCT_NAME" /> och senare.</translation>
 <translation id="1514888685242892912">Aktivera <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Tillåt alla webbplatser att spåra användarnas fysiska plats</translation>
@@ -370,11 +377,6 @@
 
           Om principen inte anges används alla fyra.</translation>
 <translation id="2067011586099792101">Blockera åtkomst till webbplatser utanför innehållspaket</translation>
-<translation id="2070270043919235595">Meddela användarna att <ph name="PRODUCT_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 bör eller måste startas om. Om principen lämnas utan inställning framgår det av en diskret ändring i menyn i <ph name="PRODUCT_NAME" /> att omstart krävs. 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 som standard och kan konfigureras via principen <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Användarens session återställs efter omstarten.</translation>
 <translation id="2073552873076775140">Tillåt inloggning i <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Använd maskinvaruacceleration när det är tillgängligt</translation>
 <translation id="2077273864382355561">Skärmavstängningstid när enheten drivs av batteriet</translation>
@@ -933,7 +935,6 @@
           Policyn är valfri. Om den inte anges tillhandahålls ingen ny fliksida.
 
           Policyn följs endast om policyn DefaultSearchProviderEnabled är aktiverad.</translation>
-<translation id="3465852069254497664">Meddela användaren att webbläsaren bör eller måste startas om</translation>
 <translation id="346731943813722404">Anger om fördröjningar i energisparfunktionen och begränsningar i sessionslängden endast ska användas efter att den första användaraktiviteten har observerats i en session.
 
           Om Sant har angetts för den här policyn börjar inte fördröjningar i energisparfunktionen och begränsningar i sessionslängden förrän den första användaraktiviteten har observerats i sessionen.
@@ -2040,6 +2041,7 @@
 
       Principen <ph name="SYNC_DISABLED_POLICY_NAME" /> inaktiverar all synkronisering av data och åsidosätter RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Filtrera bort webbplatser på toppnivå (men inte inbäddade iframe) med barnförbjudet innehåll</translation>
+<translation id="6734521799274931721">Styr om Network File Share är tillgängligt i Chrome OS</translation>
 <translation id="6735701345096330595">Aktivera alltid språk för stavningskontroll</translation>
 <translation id="673699536430961464">Den här inställningen gör så att användarna kan byta Google-konto i webbläsarens innehållsområde när de har loggat in på <ph name="PRODUCT_OS_NAME" />-enheten.
 
@@ -2191,17 +2193,6 @@
 
       När skärmen ska tonas ned utvärderar den smarta modellen för nedtoning om skärmens nedtoning ska skjutas upp. Om den smarta modellen för nedtoning skjuter upp nedtoningen, utökas tiden tills skärmen tonas ned. Då justeras även fördröjningarna för skärmavstängning, skärmlåsning och viloläge så att tiden från skärmens nedtoning blir samma som ursprungligen ställdes in.
       Om den här principen är inställd på Sant eller inte ställs in aktiveras den smarta modellen för nedtoning och kan utöka tiden tills skärmen tonas ned. Om principen ställs in på Falskt påverkar inte den smarta modellen för nedtoning skärmens ljusstyrka.</translation>
-<translation id="6982028490425791294">
-      Om principen är inställd på sant får <ph name="PRODUCT_NAME" /> samla in WebRTC-händelseloggar från Googles tjänster (t.ex. Google Meet) och ladda upp dem till Google.
-
-      Om principen är inställd på falskt eller lämnas utan inställning får <ph name="PRODUCT_NAME" /> inte samla in eller ladda upp sådana loggar.
-
-      Loggarna innehåller information som när RTP-paket skickades och togs emot och hur stora de var, feedback om överbelastning i nätverket och metadata om ljud och bildramars längd och kvalitet. Informationen är praktisk vid felsökning av problem med ljud- eller videosamtal i Chrome, t.ex. vid uppskattning av bandbredd med mera. Loggarna innehåller inte ljud eller video från själva samtalet.
-
-      Datainsamlingen kan bara aktiveras av Googles webbtjänster som Google Hangouts eller Google Meet.
-
-      Loggarna kan gå att koppla via ett sessions-id till andra loggar som samlats in av Google-tjänsten. Detta är avsiktligt för att underlätta felsökningen.
-      </translation>
 <translation id="6994082778848658360">Anger hur den integrerade maskinvaran för säkra element kan användas för tvåfaktorsautentisering om den är kompatibel med den här funktionen. Strömbrytaren på datorn används för att identifiera användarens fysiska närvaro.
 
       Om Inaktiverad har valts tillhandahålls ingen tvåfaktorsautentisering.
@@ -3039,11 +3030,6 @@
 <translation id="9035964157729712237">Tilläggs-ID:n att undanta från svartlistan</translation>
 <translation id="9042911395677044526">Tillåter att en pushad nätverkskonfiguration används per användare på en <ph name="PRODUCT_OS_NAME" />-enhet. Nätverkskonfigurationen är en JSON-formaterad sträng som definieras av formatet för öppen nätverkskonfiguration som beskrivs på <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Ange om videoaktivitet påverkar energihanteringen</translation>
-<translation id="9085839450090699752">Gör det möjlighet att ange en tidsperiod i millisekunder under vilken användare meddelas att <ph name="PRODUCT_NAME" /> eller <ph name="PRODUCT_OS_NAME" />-enheten måste startas om för att en vilande uppdatering ska börja gälla.
-
-      Under den tiden visas upprepade uppmaningar om uppdatering. På <ph name="PRODUCT_OS_NAME" />-enheter visas en avisering om omstart i systemfältet när en uppgradering upptäcks. Aviseringen ändrar färg när halva aviseringsperioden har passerat och sedan en gång till när hela aviseringsperioden har passerat. I webbläsaren <ph name="PRODUCT_NAME" /> ändras appmenyn för att markera att en omstart behövs när en tredjedel av aviseringsperioden har passerat. Denna avisering ändrar färg när två tredjedelar av aviseringsperioden har passerat och sedan igen när hela aviseringsperioden har passerat. De ytterligare aviseringar som aktiveras via principen <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> för webbläsare följer samma schema.
-
-      Om inget värde anges används standardperioden 345600000 millisekunder (fyra dagar) för <ph name="PRODUCT_OS_NAME" />-enheter och 604800000 millisekunder (en vecka) för webbläsare.</translation>
 <translation id="9088433379343318874">Aktiverar den kontrollerade användarens innehållsleverantör</translation>
 <translation id="9088444059179765143">Konfigurera metod för automatisk tidszonsangivelse</translation>
 <translation id="9096086085182305205">Vitlista för autentiseringsserver</translation>
diff --git a/components/policy/resources/policy_templates_sw.xtb b/components/policy/resources/policy_templates_sw.xtb
index 5bcc0f1..8bd8b49 100644
--- a/components/policy/resources/policy_templates_sw.xtb
+++ b/components/policy/resources/policy_templates_sw.xtb
@@ -345,11 +345,6 @@
 
           Ikiwa sera hii itaachwa bila kuwekwa, mipango yote minne itatumika.</translation>
 <translation id="2067011586099792101">Zuia ufikiaji wa tovuti zilizo nje ya vifurushi vya maudhui</translation>
-<translation id="2070270043919235595">Arifu watumiaji kwamba ni lazima <ph name="PRODUCT_NAME" /> ifunguliwe upya ndipo sasisho linalosubiri liwekwe.
-
-      Mipangilio hii ya sera huwasha arifa ili kumwarifu mtumiaji kwamba anatakiwa afungue kivinjari upya au tunapendekeza afanye hivyo. Kama haijawekwa, <ph name="PRODUCT_NAME" /> humwonyesha mtumiaji kwamba anatakiwa aifungue upya kwa kufanya mabadiliko madogo kwenye menyu yake. Kama sera imewekwa kuwa 'Inapendekezwa', mtumiaji ataonyeshwa onyo linalojirudiarudia litakaloashiria kwamba anatakiwa afungue kivinjari upya. Mtumiaji anaweza kuondoa onyo hili ili afungue kivinjari upya baadaye. Kama sera imewekwa kuwa 'Inahitajika', mtumiaji ataonyeshwa onyo linalojirudiarudia litakaloashiria kwamba kivinjari kitafunguliwa upya kwa lazima pindi kipindi cha arifa kitakapokamiika. Kulingana na mipangilio chaguomsingi, kipindi hiki huwa siku saba na huenda mipangilio yake ikawekwa kupitia sera ya <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Kurasa alizokuwa amefungua mtumiaji hurejeshwa baada ya kuvinjari kufunguliwa upya.</translation>
 <translation id="2073552873076775140">Ruhusu kuingia katika akaunti ya <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Tumia uongezaji kasi wa maunzi wakati unapatikana</translation>
 <translation id="2077273864382355561">Kuzimika kwa skrini kunachelewa wakati wa kuendesha kwa nishati ya betri</translation>
@@ -900,7 +895,6 @@
 Sera hii ni ya hiari. Kama haitawekwa, hakuna ukurasa mpya wa kichupo utatolewa.
 
 Sera hii inatumika tu kama sera ya 'DefaultSearchProviderEnabled' imewashwa.</translation>
-<translation id="3465852069254497664">Mwarifu mtumiaji kwamba inapendekezwa au inatakiwa afungue kivinjari upya</translation>
 <translation id="346731943813722404">Hubainisha iwapo ucheleweshaji wa usimamizi wa nishati na kikomo cha urefu wa kipindi lazima tu uanze kutekeleza baada ya kuonekana kwa shughuli ya kwanza ya mtumiaji katika kipindi.
      
         Iwapo sera hii imewekwa kuwa Ndivyo, ucheleweshaji wa usimamizi wa nishati na kikomo cha urefu wa kipindi havianzi kutekeleza mpaka shughuli ya kwanza ya mtumiaji ionekane katika kipindi.
@@ -2146,17 +2140,6 @@
       Wakati mwangaza wa skrini uko karibu kuwa hafifu, muundo mahiri wa kufifiliza hutathmini ikiwa inafaa kuongeza muda wa kufifiliza mwangaza wa skrini. Ikiwa kipengele mahiri cha kufifiliza mwangaza kinaacha kufifiliza mwangaza wa skrini, kitaongeza muda hadi wakati skrini itafifilizwa. Katika hali hii, kipengele cha kuzima skrini, cha kufunga skrini na cha kuchelewesha kuweka skrini tuli, kitarekebishwa ili kudumisha kipindi sawa kuanzia ucheleweshaji wa kufifilizwa kwa mwangaza wa skrini jinsi ilivyopangwa hapo awali.
 
       Ikiwa sera hii imewekwa kuwa Ndivyo au haijawekwa, kipengele cha muundo mahiri wa kufifiliza mwangaza kitawashwa na kuruhusiwa kupitisha muda hadi wakati mwangaza wa skrini itafifilizwa. Ikiwa sera hii inawekwa kuwa Sivyo, kipengele cha muundo mahiri wa kufifiliza skrini hakitaathiri ufifilizaji wa skrini.</translation>
-<translation id="6982028490425791294">
-      Ukiweka sera hii kuwa 'ndivyo', <ph name="PRODUCT_NAME" /> itaruhusiwa kukusanya kumbukumbu za matukio ya WebRTC kutoka huduma za Google (k.m., Google Meet) na kupakia kumbukumbu hizo kwenye Google.
-
-      Ukiweka sera hii kuwa 'sivyo', au usipoiweka, huenda <ph name="PRODUCT_NAME" /> isikusanye wala kupakia kumbukumbu kama hizo.
-
-      Kumbukumbu hizi zinajumuisha maelezo kama vile wakati na ukubwa wa vifurushi vya RTP vilivyotumwa na kupokelewa, maoni kuhusu msongamano kwenye mtandao na metadata kuhusu wakati na ubora wa fremu za sauti na video. Maelezo haya husaidia wakati wa kutatua matatizo ya simu za sauti na za video katika Chrome, kama vile matatizo ya kukadiria kipimo data n.k. Kumbukumbu hizi hazijumuishi maudhui ya simu ya sauti wala ya video.
-
-      Ukusanyaji wa data hii unaweza kuanzishwa tu na huduma za wavuti za Google, kama vile Google Hangouts au Google Meet.
-
-      Kumbukumbu hizi zinaweza kuhusishwa na kumbukumbu zingine ambazo hukusanywa na huduma ya Google yenyewe kupitia Kitambulisho cha kipindi; hali hii inanuia kurahisisha hatua ya utatuzi.
-      </translation>
 <translation id="6994082778848658360">Hubainisha jinsi maunzi salama unayotumia yanaweza kutoa uthibitishaji wa hatua mbili ikiwa yanaweza kukitumia kipengele hiki. Kitufe cha kuwasha/kuzima mashine kinatumika kutambua kuwepo kwa mtumiaji mwenyewe.
 
       Ukichagua 'Imezimwa', hamna uthibitishaji wa hatua mbili utakaotolewa.
@@ -2964,11 +2947,6 @@
 <translation id="9035964157729712237">Vitambulisho vya viendelezi vya kuondolewa kenye orodha isiyokubalika</translation>
 <translation id="9042911395677044526">Inaruhusu kusukuma kwa usanidi wa mtandao kutekelezwa kwa kila mtumiaji katika kifaa cha <ph name="PRODUCT_OS_NAME" />. Usanidi wa mtandao ni mtungo ulioumbizwa wa JSON kama ilivyofasiliwa kwa umbizo la Fungua Usanidi wa Mtandao ilivyofafanuliwa katika <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Bainisha iwapo shughuli za video zinaathiri udhibiti wa nishati</translation>
-<translation id="9085839450090699752">Hukuruhusu kuweka kipindi cha muda, katika milisekunde, ambacho watumiaji wanaarifiwa kwamba <ph name="PRODUCT_NAME" /> lazima ifunguliwe upya au kwamba kifaa cha <ph name="PRODUCT_OS_NAME" /> lazima kizimwe kisha kiwashwe ili kutumia sasisho linalosubiri.
-
-     Katika kipindi hiki cha muda, mtumiaji ataarifiwa mara kwa mara kuhusu haja ya kusasisha. Kwa vifaa vya <ph name="PRODUCT_OS_NAME" />, arifa ya kuzima kisha kuwasha inaonekana katika trei ya mfumo wakati sasisho linatambuliwa. Arifa hii hubadilisha rangi baada ya nusu ya kipindi cha arifa kuisha na mara nyingine tena kipindi kamili cha arifa kinapoisha. Kwa vivinjari vya <ph name="PRODUCT_NAME" />, menyu ya programu hubadilika na kuonyesha kwamba inahitaji kufunguliwa tena baada ya thuluthi moja ya kipindi cha arifa kupita. Arifa hii hubadilisha rangi baada ya thuluthi mbili za muda wa arifa kuisha na hubadilisha tena baada ya kipindi kamili cha arifa kuisha. Arifa za ziada zinazowashwa na sera ya <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> kwa vivinjari hufuata ratiba sawa.
-
-      Ikiwa haijawekwa, kipindi chaguomsingi cha milisekunde 345600000 (siku nne) kinatumiwa kwa vifaa vya <ph name="PRODUCT_OS_NAME" /> na milisekunde 604800000 (wiki moia) kwa vivinjari.</translation>
 <translation id="9088433379343318874">Washa mtoa huduma za maudhui ya mtumiaji anayesimamiwa</translation>
 <translation id="9088444059179765143">Weka mbinu ya ugunduzi wa saa za eneo kiotomatiki</translation>
 <translation id="9096086085182305205">Orodha ya kuidhinisha ya seva ya uthibitishaji</translation>
diff --git a/components/policy/resources/policy_templates_ta.xtb b/components/policy/resources/policy_templates_ta.xtb
index 6c721e8..b9a051b 100644
--- a/components/policy/resources/policy_templates_ta.xtb
+++ b/components/policy/resources/policy_templates_ta.xtb
@@ -343,11 +343,6 @@
 
           இந்தக் கொள்கை அமைக்கப்படாமல் இருந்தால், நான்கு திட்டங்களுமே பயன்படுத்தப்படும்.</translation>
 <translation id="2067011586099792101">உள்ளடக்கத் தொகுப்புகளுக்கு வெளியே உள்ள தளங்களுக்கான அணுகலைத் தடு</translation>
-<translation id="2070270043919235595">நிலுவையிலுள்ள புதுப்பிப்பைப் பயன்படுத்துவதற்கு, <ph name="PRODUCT_NAME" /> மீண்டும் தொடங்கப்பட வேண்டும் என்பதைப் பயனர்களுக்கு அறிவிக்கும்.
-
-      இந்தக் கொள்கை அமைப்பானது உலாவியை மீண்டும் தொடங்குவது பரிந்துரைக்கப்படுவதா அல்லது தேவையானதா என்பதைப் பயனருக்குத் தெரிவிப்பதற்கு அறிவிப்புகளை இயக்குகிறது. இதை அமைக்கவில்லை எனில், அதன் மெனுவில் நுட்பமான மாற்றங்கள் செய்வதன் வழியாக மீண்டும் தொடங்க வேண்டும் என்பதைப் பயனருக்கு <ph name="PRODUCT_NAME" /> அறிவிக்கும். "பரிந்துரைக்கப்படுவது" என அமைத்தால், மீண்டும் தொடங்குவது பரிந்துரைக்கப்படுகிறது என்பதைக் குறிக்கும், தொடர்ச்சியாகத் தெரியும் எச்சரிக்கை பயனருக்குக் காட்டப்படும். மீண்டும் தொடங்குவதை ஒத்திவைக்க, இந்த எச்சரிக்கையைப் பயனர் நிராகரிக்கலாம். "தேவையானது" என அமைத்தால், அறிவிப்புக் காலம் கடந்த பிறகு, உலாவி மறுதொடக்கமானது கட்டாயமாகச் செய்யப்படும் என்பதைக் குறிக்கும், தொடர்ச்சியாகத் தெரியும் எச்சரிக்கை பயனருக்குக் காட்டப்படும். இந்த அறிவிப்புக் காலம் என்பது ஏழு நாட்கள் ஆகும். <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> கொள்கை அமைப்பு மூலம் அதை உள்ளமைக்கலாம்.
-
-      மீண்டும் தொடங்கிய பிறகு, பயனரின் அமர்வு மீட்டமைக்கப்படும்.</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> இன் உள்நுழைவதை அனுமதிக்கும்</translation>
 <translation id="2077129598763517140">கிடைக்கும்போது வன்பொருளின் முடுக்கத்தைப் பயன்படுத்தவும்</translation>
 <translation id="2077273864382355561">பேட்டரி சக்தியில் இயங்கும்போது திரை முடக்கம் தாமதமாகும்</translation>
@@ -878,7 +873,6 @@
           இந்தக் கொள்கை விருப்பமானது. அமைக்கப்படவில்லை எனில், புதிய தாவல் பக்கம் வழங்கப்படாது.
 
           'DefaultSearchProviderEnabled' கொள்கை இயக்கப்பட்டிருந்தால் மட்டுமே இந்தக் கொள்கை மதிப்பிற்குரியதாக இருக்கும்.</translation>
-<translation id="3465852069254497664">உலாவியை மீண்டும் தொடங்குவது பரிந்துரைக்கப்படுகிறது அல்லது தேவையானது என்பதைப் பயனருக்கு அறிவிப்பு செய்</translation>
 <translation id="346731943813722404">ஆற்றல் மேலாண்மை தாமதங்கள் மற்றும் அமர்வு நீளத்தின் வரம்பானது அமர்வில் பயனரின் முதல் செயல்பாட்டைக் கண்காணித்தப் பிறகு மட்டுமே இயங்குதலைத் தொடங்க வேண்டுமா என்பதைக் குறிப்பிடுகிறது.
 
           இந்தக் கொள்கையானது சரி என அமைக்கப்பட்டால், அமர்வில் பயனரின் முதல் செயல்பாடுக் கண்காணிக்கப்படும் வரையில் ஆற்றல் மேலாண்மை தாமதங்கள் மற்றும் அமர்வு நீளத்தின் வரம்பு தொடங்கப்படாது.
@@ -2105,17 +2099,6 @@
 
       திரை மங்கலாகப்போகும் சமயத்தில், திரை மங்குவதை ஒத்திவைக்க வேண்டுமா என் ஸ்மார்ட் மங்கல் மாதிரி மதிப்பீடு செய்யும். ஸ்மார் மங்கல் மாதிரியானது திரை மங்குவதை ஒத்திவைத்தால், திரை மங்கலாகுவது வரையான நேரத்தை அது பயனுள்ள முறையில் நீட்டிக்கும். இச்சந்தர்ப்பத்தில், திரை அணைவு, திரைப் பூட்டு, ஐடில் தாமங்கள் ஆகியவை, உண்மையில் உள்ளமைத்தவாறு திரை மங்கல் தாமதத்திலிருந்து அதேயளவு நேரங்களைப் பேணுமாறு சரிசெய்யப்படும்.
       இந்தக் கொள்கையைச் சரி என அமைத்தால் அல்லது அதை அமைக்காமல் விட்டால், ஸ்மார்ட் மங்கல் மாதிரி இயக்கப்பட்டு, திரை மங்கலாகுவது வரையான நேரத்தை நீட்டிக்க அனுமதிக்கப்படும். இந்தக் கொள்கையைத் தவறு என அமைத்தால், ஸ்மார் மங்கல் மாதிரியானது திரையை மங்கலாக்குவதில் சம்பந்தப்படாது.</translation>
-<translation id="6982028490425791294">
-      இந்தக் கொள்கையை ‘சரி’ என அமைத்தால், Google சேவைகளிலிருந்து (எ.கா Google Meet) WebRTC நிகழ்வுப் பதிவுகளைச் சேகரித்து, அவற்றை Googleளுக்குப் பதிவேற்ற <ph name="PRODUCT_NAME" />க்கு அனுமதியளிக்கப்படும்.
-
-      இந்தக் கொள்கையை ‘தவறு’ என அமைத்தாலோ அமைக்காமலேயே விட்டாலோ, அத்தகைய பதிவுகளைச் சேகரிக்கவோ பதிவேற்றவோ <ph name="PRODUCT_NAME" />க்கு அனுமதி இருக்காது.
-
-      இந்தப் பதிவுகளில் RTP பாக்கெட்டுகள் அனுப்பப்பட்ட மற்றும் பெறப்பட்ட நேரம், அவற்றின் அளவு, நெட்வொர்க்கிலுள்ள நெரிசலைப் பற்றிய கருத்து, ஆடியோ மற்றும் வீடியோ ஃப்ரேம்களின் நேரத்தையும் தரத்தையும் பற்றிய மீத்தரவு போன்ற தகவல்கள் இருக்கும். இந்தத் தகவல்கள், இணைய வேக மதிப்பீட்டுச் சிக்கல்களைப் போல Chromeமில் ஏற்படும் ஆடியோ அல்லது வீடியோ அழைப்புகள் குறித்த சிக்கல்களைப் பிழைதிருத்தும்போது உதவிகரமாக இருக்கும். இந்தப் பதிவுகளில் அழைப்பின் ஆடியோ அல்லது வீடியோ உள்ளடக்கங்கள் இருக்காது.
-
-      இந்தத் தரவுச் சேகரிப்பை Google Hangouts அல்லது Google Meet போன்ற Google இணையச் சேவைகள் மட்டுமே செயல்படுத்த முடியும்.
-
-      அமர்வு ஐடி மூலமாக, Google சேவையால் சேகரிக்கப்பட்ட பிற பதிவுகளுடன் இந்தப் பதிவுகள் தொடர்புபடுத்தப்படலாம்; இது பிழைதிருத்தத்தை எளிதாக்குவதற்காகச் செய்யப்படுகிறது.
-      </translation>
 <translation id="6994082778848658360">ஆன்-போர்டு பாதுகாப்பு உறுப்பு வன்பொருள் இரண்டாம் படி அங்கீகார அம்சத்துடன் இணங்கினால், அதை வழங்க அந்த வன்பொருளை எப்படிப் பயன்படுத்த வேண்டும் என்பதைக் குறிப்பிடும். பயனர் உள்ளாரா இல்லையா என்பதைக் கண்டறிய, சாதனத்தின் பவர் பொத்தான் பயன்படுத்தப்படும்.
 
       'முடக்கப்பட்டது' என்பதைத் தேர்ந்தெடுத்திருந்தால், இரண்டாவது படி வழங்கப்படாது.
@@ -2938,11 +2921,6 @@
 <translation id="9035964157729712237">தடுப்புப் பட்டியலில் இருந்து, விலக்குவதற்கான நீட்டிப்பு IDகள்</translation>
 <translation id="9042911395677044526"><ph name="PRODUCT_OS_NAME" /> சாதனத்தில் பயன்படுத்துவதற்கு ஒரு பயனருக்கு புஷிங் நெட்வொர்க் உள்ளமைவை அனுமதிக்கிறது. நெட்வொர்க் உள்ளமைவு என்பது <ph name="ONC_SPEC_URL" /> இல் விளக்கப்பட்டுள்ளபடி திறந்த நெட்வொர்க் உள்ளமைவு வடிவத்தால் வரையறுக்கப்பட்ட JSON-வடிவமைப்பு தொடர் ஆகும்.</translation>
 <translation id="9084985621503260744">வீடியோ செயல்பாடு, சக்தி மேலாண்மையைப் பாதிக்குமா என்பதைக் குறிப்பிடவும்</translation>
-<translation id="9085839450090699752">நிலுவையிலுள்ள புதுப்பிப்பைப் பயன்படுத்துவதற்கு, <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" /> சாதனங்களுக்கு இயல்பான கால அளவான 345600000 மில்லிவினாடிகள் (நான்கு நாட்கள்) பயன்படுத்தப்படும், மேலும் உலாவிகளுக்கு இயல்பான கால அளவான 604800000 மில்லிவினாடிகள் (ஒரு வாரம்) பயன்படுத்தப்படும்.</translation>
 <translation id="9088433379343318874">கண்காணிக்கப்படும் பயனருக்கான உள்ளடக்க வழங்குநரை இயக்கு</translation>
 <translation id="9088444059179765143">தானாக நேரமண்டலத்தைக் கண்டறிதல் முறையை உள்ளமை</translation>
 <translation id="9096086085182305205">அங்கீகார சேவையக அனுமதி பட்டியல்</translation>
diff --git a/components/policy/resources/policy_templates_te.xtb b/components/policy/resources/policy_templates_te.xtb
index c3de764..6e1f983 100644
--- a/components/policy/resources/policy_templates_te.xtb
+++ b/components/policy/resources/policy_templates_te.xtb
@@ -385,11 +385,6 @@
 
           ఈ విధానాన్ని సెట్ చేయకుండా వదిలేస్తే, మొత్తం నాలుగు స్కీమ్‌లు ఉపయోగించబడతాయి.</translation>
 <translation id="2067011586099792101">కంటెంట్ ప్యాక్‌లకు వెలుపల ఉన్న సైట్‌లకు ప్రాప్యతను బ్లాక్ చేయండి</translation>
-<translation id="2070270043919235595">పెండింగ్‌లో ఉన్న అప్‌డేట్‌ను వర్తింపచేయడానికి <ph name="PRODUCT_NAME" /> పునఃప్రారంభించబడాలని వినియోగదారులకు తెలియజేయండి.
-
-      ఈ విధాన సెట్టింగ్ బ్రౌజర్ పునఃప్రారంభం సిఫార్సు చేయబడినదని కానీ అవసరమైనదని కానీ వినియోగదారుకు తెలియజేయడానికి నోటిఫికేషన్‌లను ప్రారంభిస్తుంది. సెట్ చేయకపోతే, <ph name="PRODUCT_NAME" /> దాని మెనూకు సూక్ష్మ మార్పుల ద్వారా పునఃప్రారంభం అవసరమవుతుందని వినియోగదారుకు సూచిస్తుంది. సిఫార్సు చేయబడినది' అని సెట్ చేసినట్లయితే, ఒక పునరావృత హెచ్చరిక వినియోగదారుకు పునఃప్రారంభం గురించి సిఫార్సు చేయబడుతుంది. పునఃప్రారంభాన్ని వాయిదా వేయడానికి వినియోగదారు ఈ హెచ్చరికను విస్మరించవచ్చు. అవసరం' అని సెట్ చేసినట్లయితే, నోటిఫికేషన్ వ్యవధి గడిచినప్పుడు బ్రౌజర్ పునఃప్రారంభం కావచ్చని సూచించే వినియోగదారుకు పునరావృత హెచ్చరిక చూపబడుతుంది. ఈ సమయం డిఫాల్ట్‌గా ఏడు రోజులు, మరియు <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> విధాన సెట్టింగ్ ద్వారా కాన్ఫిగర్ చేయబడవచ్చు.
-
-      పునఃప్రారంభం తరువాత వినియోగదారు యొక్క సెషన్ పునరుద్ధరించబడుతుంది.</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" />కి సైన్ ఇన్ చేయడానికి అనుమతించండి</translation>
 <translation id="2077129598763517140">హార్డ్‌వేర్ త్వరితం అందుబాటులో ఉన్నప్పుడు ఉపయోగించు</translation>
 <translation id="2077273864382355561">బ్యాటరీ శక్తితో అమలవుతున్నప్పుడు స్క్రీన్ ఆపివేత ఆలస్యం</translation>
@@ -999,7 +994,6 @@
           ఈ విధానం ఐచ్ఛికం. సెట్ చేయకపోతే, కొత్త ట్యాబ్ పేజీ అందించబడదు.
 
           'DefaultSearchProviderEnabled' విధానం ప్రారంభించబడితే మాత్రమే ఈ విధానం గౌరవించబడుతుంది.</translation>
-<translation id="3465852069254497664">బ్రౌజర్ పునఃప్రారంభం సిఫార్సు చేయబడినదని కానీ అవసరమైనదని కానీ ఒక వినియోగదారుకు తెలియజేయండి</translation>
 <translation id="346731943813722404">సెషన్‌లో ప్రథమ వినియోగదారు కార్యాచరణను గుర్తించిన తర్వాత మాత్రమే శక్తి నిర్వహణ ఆలస్యాలు మరియు సెషన్ వ్యవధి పరిమితి ప్రారంభమవ్వాలంటే పేర్కొంటుంది.
 
           ఈ విధానం ఒప్పుకి సెట్ చేసి ఉంటే, సెషన్‌లో ప్రథమ వినియోగదారు కార్యాచరణ గుర్తించబడే వరకు శక్తి నిర్వహణ ఆలస్యాలు మరియు సెషన్ వ్యవధి పరిమితి అమలు ప్రారంభించబడదు.
@@ -2264,9 +2258,9 @@
       ఈ విధానాన్ని సెట్ చేయకుండా వదిలేస్తే లేదా జాబితా ఖాళీగా ఉంటే అన్ని స్కీమ్‌లు <ph name="PRODUCT_NAME" />లో ప్రాప్యత చేయబడతాయి.</translation>
 <translation id="6652197835259177259">స్థానికంగా నిర్వహించబడే వినియోగదారుల సెట్టింగ్‌లు</translation>
 <translation id="6658245400435704251">పరికరం సర్వర్‌కు నవీకరణ మొదటిసారి విడుదల చేయబడిన సమయం నుండి నవీకరణ యొక్క దీని డౌన్‌లోడ్‌ను గరిష్టంగా ఎన్ని సెకన్ల వరకు నియమరహితంగా ఆలస్యం చేయాలో ఆ సెకన్ల సంఖ్యను నిర్దేశిస్తుంది. పరికరం గోడ గడియార సమయం దృష్ట్యా ఈ సమయంలో ఒక భాగం మరియు నవీకరణ తనిఖీల సంఖ్య దృష్ట్యా మిగిలిన భాగం వేచి ఉండవచ్చు. ఏ సందర్భంలో అయినా, స్కాటర్ నిర్దిష్ట సమయ మొత్తానికి అప్పర్ బౌండ్ చేయబడుతుంది అందువల్ల పరికరం ఎప్పటికీ నవీకరణను డౌన్‌లోడ్ చేయడానికి వేచి ఉండి ఎన్నడూ స్తంభించదు.</translation>
-<translation id="6665599130599311250">ఈ విధానాన్ని తప్పుకు సెట్ చేస్తే లేదా అసలు సెట్ చేయకుండా వదిలేస్తే, నిర్వహించబడిన అతిథి సెషన్ https://support.google.com/chrome/a/answer/3017014 - ప్రామాణిక "పబ్లిక్ సెషన్"లో డాక్యుమెంట్ చేయబడుతుంది.
+<translation id="6665599130599311250">ఈ విధానాన్ని తప్పుకు సెట్ చేస్తే లేదా అసలు సెట్ చేయకుండా వదిలేస్తే, నిర్వహించబడిన అతిథి సెషన్ https://support.google.com/chrome/a/answer/3017014 - ప్రామాణిక "పబ్లిక్ సెషన్"లో డాక్యుమెంట్ చేసిన విధంగా ప్రవర్తిస్తుంది.
 
-      ఈ విధానాన్ని ఒప్పుకి సెట్ చేస్తే, నిర్వహించబడే అతిథి సెషన్ "నిర్వహిత సెషన్" ప్రవర్తనను కొనసాగిస్తుంది, ఇది సాధారణ "పబ్లిక్ సెషన్‌ల" కోసం ఉన్న పలు పరిమితులను ప్రస్తావిస్తుంది.
+      ఈ విధానాన్ని ఒప్పుకి సెట్ చేస్తే, నిర్వహించబడే అతిథి సెషన్ "నిర్వహిత సెషన్" ప్రవర్తనను కొనసాగిస్తుంది, ఇది సాధారణ "పబ్లిక్ సెషన్‌ల" కోసం ఉన్న పలు పరిమితులను అధిగమిస్తుంది.
 
       ఈ విధానాన్ని సెట్ చేస్తే, వినియోగదారు దీన్ని మార్చలేరు లేదా భర్తీ చేయలేరు.</translation>
 <translation id="6665670272107384733">త్వరిత అన్‌లాక్‌ను ఉపయోగించడానికి వినియోగదారు పాస్‌వర్డ్‌ను ఎంత తరచుగా నమోదు చేయాలో సెట్ చేయండి</translation>
@@ -2425,17 +2419,6 @@
 <translation id="6943577887654905793">Mac/Linux ప్రాధాన్య పేరు:</translation>
 <translation id="69525503251220566">డిఫాల్ట్ శోధన ప్రదాత కోసం చిత్రం ద్వారా శోధన లక్షణాన్ని అందిస్తున్న పరామితి</translation>
 <translation id="6956272732789158625">కీ ఉత్పాదనను ఉపయోగించడానికి ఏ సైట్‌ను అనుమతించవద్దు</translation>
-<translation id="6982028490425791294">
-      విధానాన్ని ఒప్పుకు సెట్ చేస్తే, Google సేవల నుండి WebRTC ఈవెంట్ లాగ్‌లను (ఉదా. Google Meet) సేకరించేందుకు <ph name="PRODUCT_NAME" /> అనుమతించబడుతుంది మరియు ఆ లాగ్‌లను Googleకు అప్‌లోడ్ చేయండి.
-
-      విధానాన్ని తప్పుకి సెట్ చేస్తే లేదా సెట్ చేయకున్నా, అలాంటి లాగ్‌లను <ph name="PRODUCT_NAME" /> సేకరించదు లేదా అప్‌లోడ్ చేయకపోవచ్చు.
-
-      ఈ లాగ్‌ల పంపిన మరియు అందుకున్న RTP ప్యాకెట్‌ల సమయం మరియు పరిమాణం, నెట్‌వర్క్‌లో రద్దీ గురించి అభిప్రాయం మరియు ఆడియో మరియు వీడియో ఫ్రేమ్‌ల యొక్క సమయం మరియు నాణ్యత గురించి మెటాడేటా వంటి సమాచారాన్ని కలిగి ఉంటాయి. ఈ సమాచారం బ్యాండ్‌విడ్త్ అంచనా సమస్యల వంటి, Chromeలో ఆడియో లేదా వీడియో కాల్‌లతో సమస్యలను డీబగ్ చేస్తున్నప్పుడు సహాయపడుతుంది. లాగ్‌లో కాల్ నుండి ఆడియో లేదా వీడియో కంటెంట్‌లను కలిగి ఉండదు.
-
-      ఈ డేటా సేకరణ కేవలం Google Hangouts లేదా Google Meet వంటి Google యొక్క వెబ్ సేవలు సక్రియం చేయబడుతుంది.
-
-      ఈ లాగ్‌లను సెషన్ ID ద్వారా, Google సేవ ద్వారా సేకరించిన ఇతర లాగ్‌లతో అనుబంధించవచ్చు; డీబగ్గింగ్ సులభం చేయడానికి ఇది ఉద్దేశించబడింది.
-      </translation>
 <translation id="6994082778848658360">రెండవ కారక ప్రమాణీకరణ ఈ ఫీచర్‌కు అనుకూలంగా ఉంటే దానిని అందించడానికి ఆన్-బోర్డ్ భద్రతా మూలకం హార్డ్‌వేర్‌ను ఎలా ఉపయోగించవచ్చో పేర్కొంటుంది. వినియోగదారు భౌగోళిక స్థానాన్ని గుర్తించడానికి యంత్ర శక్తి బటన్ ఉపయోగించబడుతుంది.
 
       'నిలిపివేయబడింది' ఎంచుకున్నట్లయితే, రెండవ కారకం అందించబడదు.
@@ -3359,11 +3342,6 @@
 
 RemoteAccessHostClientDomainListని కూడా చూడండి.</translation>
 <translation id="9084985621503260744">శక్తి నిర్వహణను వీడియో కార్యాచరణ ప్రభావితం చేయాలో లేదో పేర్కొనడం</translation>
-<translation id="9085839450090699752">వ్యవధి, మిల్లీసెకన్లలో సెట్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, దాని ప్రకారం ఆ వ్యవధిలో పెండింగ్ అప్‌డేట్‌ను వర్తింపజేయడానికి <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" /> పరికరాల కోసం 345600000 మిల్లీసెకన్లు (నాలుగు రోజులకు) మరియు బ్రౌజర్‌ల కోసం 604800000 మిల్లీసెకన్లు (ఒక వారానికి) డిఫాల్ట్‌గా ఉంచబడతాయి.</translation>
 <translation id="9088433379343318874">పర్యవేక్షించబడే వినియోగదారు కంటెంట్ ప్రదాతను ప్రారంభించండి</translation>
 <translation id="9088444059179765143">స్వయంచాలక సమయ మండలి గుర్తింపు పద్ధతిని కాన్ఫిగర్ చేయండి</translation>
 <translation id="9096086085182305205">అధికార సర్వర్ ఆమోదజాబితా</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 6c2832e..fb384ca 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -35,7 +35,7 @@
 <translation id="1099282607296956954">เปิดใช้การแยกเว็บไซต์สำหรับทุกเว็บไซต์</translation>
 <translation id="1100570158310952027">
       นโยบายนี้ระบุรายการของต้นทาง (URL) หรือรูปแบบชื่อโฮสต์
-      (เช่น "*.example.com") ที่จะไม่ใช้ข้อจำกัดด้านความปลอดภัย
+      (เช่น *.example.com) ที่จะไม่ใช้ข้อจำกัดด้านความปลอดภัย
       กับต้นทางที่ไม่ปลอดภัย
 
       นโยบายนี้มีไว้ให้องค์กรกำหนดต้นทางที่อนุญาตพิเศษสำหรับแอปพลิเคชันเดิม
@@ -46,7 +46,7 @@
       "ไม่ปลอดภัย" ในแถบอเนกประสงค์
 
       การกำหนดรายการ URL ในนโยบายนี้มีผลเหมือนกับการตั้งค่า
-      สถานะบรรทัดคำสั่ง "--unsafely-treat-insecure-origin-as-secure"
+      สถานะบรรทัดคำสั่ง --unsafely-treat-insecure-origin-as-secure
       เป็นรายการ URL เดียวกันที่คั่นด้วยจุลภาค หากตั้งค่านโยบายนี้
       นโยบายจะลบล้างสถานะบรรทัดคำสั่ง
 
@@ -115,7 +115,7 @@
 <translation id="1327466551276625742">เปิดใช้พรอมต์การกำหนดค่าเครือข่ายเมื่อออฟไลน์</translation>
 <translation id="1330145147221172764">เปิดใช้แป้นพิมพ์บนหน้าจอ</translation>
 <translation id="13356285923490863">ชื่อนโยบาย</translation>
-<translation id="1352174694615491349">นโยบายนี้อนุญาตให้มีการรวมการเชื่อมต่อ HTTP/2 เมื่อใช้ใบรับรองไคลเอ็นต์อยู่ โดยทั้งชื่อโฮสต์ของการเชื่อมต่อใหม่ที่เป็นไปได้และชื่อโฮสต์ของการเชื่อมต่อเดิมต้องตรงกับรูปแบบอย่างใดอย่างหนึ่งที่อธิบายไว้ในนโยบายนี้ จึงจะรวมการเชื่อมต่อได้ นโยบายนี้คือรายการโฮสต์ที่ใช้รูปแบบตัวกรอง URLBlacklist ดังต่อไปนี้ "example.com" ตรงกับ "example.com" และโดเมนย่อยทั้งหมด (เช่น "sub.example.com") ขณะที่ ".example.net" ตรงกับ "example.net" ทุกประการ
+<translation id="1352174694615491349">นโยบายนี้อนุญาตให้มีการรวมการเชื่อมต่อ HTTP/2 เมื่อใช้ใบรับรองไคลเอ็นต์อยู่ โดยทั้งชื่อโฮสต์ของการเชื่อมต่อใหม่ที่เป็นไปได้และชื่อโฮสต์ของการเชื่อมต่อเดิมต้องตรงกับรูปแบบอย่างใดอย่างหนึ่งที่อธิบายไว้ในนโยบายนี้ จึงจะรวมการเชื่อมต่อได้ นโยบายนี้คือรายการโฮสต์ที่ใช้รูปแบบตัวกรอง URLBlacklist ดังต่อไปนี้ example.com ตรงกับ example.com และโดเมนย่อยทั้งหมด (เช่น sub.example.com) ขณะที่ .example.net ตรงกับ example.net ทุกประการ
 
       คำขอรวมกับโฮสต์อื่นผ่านการเชื่อมต่อที่ใช้ใบรับรองไคลเอ็นต์อาจสร้างปัญหาด้านความปลอดภัยและความเป็นส่วนตัว เนื่องจากผู้ออกใบรับรองแวดล้อมจะได้รับคำขอทั้งหมด แม้ว่าผู้ใช้จะไม่ได้ให้สิทธิ์อย่างชัดแจ้ง นโยบายนี้เป็นแบบชั่วคราวและระบบจะนำออกในรุ่นต่อไป โปรดดู https://crbug.com/855690
 
@@ -188,6 +188,13 @@
           <ph name="PROXY_HELP_URL" /></translation>
 <translation id="1502843533062797703">เปิดใช้การบล็อกการแทรกซอฟต์แวร์ของบุคคลที่สาม</translation>
 <translation id="1504431521196476721">การยืนยันระยะไกล</translation>
+<translation id="1507957856411744193">หากตั้งค่านโยบายเป็น "จริง" <ph name="PRODUCT_NAME" /> จะเชื่อมต่อกับอุปกรณ์แคสต์ในที่อยู่ IP ทั้งหมด ไม่ใช่แค่ที่อยู่ส่วนตัว RFC1918/RFC4193
+
+          หากตั้งค่านโยบายนี้เป็น "เท็จ" <ph name="PRODUCT_NAME" /> จะเชื่อมต่อกับอุปกรณ์แคสต์ในที่อยู่ส่วนตัว RFC1918/RFC4193 เท่านั้น
+
+          หากไม่ได้ตั้งค่านโยบายนี้ <ph name="PRODUCT_NAME" /> จะเชื่อมต่อกับอุปกรณ์แคสต์ในที่อยู่ส่วนตัว RFC1918/RFC4193 เท่านั้น ยกเว้นว่าจะเปิดใช้ฟีเจอร์ CastAllowAllIPs
+
+          หากตั้งค่านโยบาย "EnableMediaRouter" เป็น "เท็จ" ค่าของนโยบายนี้จะไม่มีผลบังคับใช้</translation>
 <translation id="1509692106376861764">นโยบายนี้ได้ถูกยกเลิกตั้งแต่ <ph name="PRODUCT_NAME" /> เวอร์ชัน 29</translation>
 <translation id="1514888685242892912">เปิดใช้ <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">อนุญาตให้ไซต์ติดตามตำแหน่งทางกายภาพของผู้ใช้</translation>
@@ -357,11 +364,6 @@
 
           หากไม่ได้ตั้งค่านโยบายนี้ไว้ จะมีการใช้ทั้ง 4 รูปแบบ</translation>
 <translation id="2067011586099792101">บล็อกการเข้าถึงเว็บไซต์ที่อยู่นอกชุดเนื้อหา</translation>
-<translation id="2070270043919235595">แจ้งให้ผู้ใช้ทราบว่าต้องเปิด <ph name="PRODUCT_NAME" /> ขึ้นมาใหม่เพื่อนำอัปเดตที่รอดำเนินการไปใช้
-
-      การตั้งค่านโยบายนี้จะเปิดใช้การแจ้งเตือนที่จะบอกว่าผู้ใช้ "ควร" หรือ "จำเป็นต้อง" เปิดเบราว์เซอร์ขึ้นมาใหม่ หากไม่มีการตั้งค่านโยบายนี้ <ph name="PRODUCT_NAME" /> จะแจ้งผู้ใช้ว่าจำเป็นต้องมีการเปิดเบราว์เซอร์ใหม่ผ่านการเปลี่ยนแปลงเพียงเล็กน้อยในเมนูเบราว์เซอร์ หากตั้งค่าเป็น "แนะนำ" ระบบจะแสดงคำเตือนที่เกิดซ้ำแก่ผู้ใช้ว่าขอแนะนำให้เปิดเบราว์เซอร์ใหม่ โดยผู้ใช้จะปิดคำเตือนนี้ได้เพื่อเลื่อนการเปิดใหม่ หากตั้งค่าเป็น "จำเป็น" ระบบจะแสดงคำเตือนที่เกิดซ้ำแก่ผู้ใช้ว่าจะมีการบังคับเปิดเบราว์เซอร์ใหม่หลังจากสิ้นสุดระยะการแจ้งเตือน โดยค่าเริ่มต้นแล้ว ระยะเวลาดังกล่าวคือ 7 วันแต่จะกำหนดค่าผ่านการตั้งค่านโยบาย <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> ได้
-
-      เซสชันของผู้ใช้จะได้รับการคืนค่าหลังการเปิดเบราว์เซอร์ขึ้นมาใหม่</translation>
 <translation id="2073552873076775140">อนุญาตให้ลงชื่อเข้าใช้ <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">ใช้การเร่งฮาร์ดแวร์เมื่อสามารถใช้ได้</translation>
 <translation id="2077273864382355561">ระยะหน่วงเวลาการปิดหน้าจอเมื่อทำงานโดยใช้พลังงานแบตเตอรี่</translation>
@@ -895,7 +897,6 @@
           นโยบายนี้เป็นตัวเลือกที่ไม่บังคับ หากไม่ได้ตั้งค่า จะไม่มีหน้าแท็บใหม่ให้บริการ
 
           นโยบายนี้จะมีผลใช้เฉพาะเมื่อนโยบาย "DefaultSearchProviderEnabled" ถูกเปิดใช้</translation>
-<translation id="3465852069254497664">แจ้งผู้ใช้ว่า "จำเป็นต้อง" หรือ "ควร" เปิดเบราว์เซอร์ขึ้นมาใหม่</translation>
 <translation id="346731943813722404">ระบุว่าจะหน่วงเวลาการจัดการพลังงานไหม และการจำกัดความยาวเซสชันควรเริ่มทำงานหลังจากสังเกตพบกิจกรรมแรกของผู้ใช้ในเซสชันเท่านั้นไหม
 
           หากนโยบายนี้ได้รับการตั้งค่าเป็นจริง การจัดการพลังงานจะหน่วงเวลาและการจำกัดความยาวเซสชันจะไม่เริ่มทำงานหลังจากสังเกตพบกิจกรรมแรกของผู้ใช้ในเซสชัน
@@ -1941,6 +1942,7 @@
 
       นโยบาย <ph name="SYNC_DISABLED_POLICY_NAME" /> จะปิดใช้การซิงค์ข้อมูลทั้งหมดซึ่งลบล้าง RoamingProfileSupportEnabled</translation>
 <translation id="6731757988219967594">กรองเว็บไซต์ระดับบนสุด (แต่ไม่กรอง iframe ที่ฝังไว้) ที่มีเนื้อหาสำหรับผู้ใหญ่</translation>
+<translation id="6734521799274931721">ควบคุมพื้นที่แชร์ไฟล์ของเครือข่ายเพื่อความพร้อมใช้งานของ ChromeOS</translation>
 <translation id="6735701345096330595">บังคับให้เปิดใช้การตรวจการสะกดของภาษาต่างๆ</translation>
 <translation id="673699536430961464">การตั้งค่านี้ทำให้ผู้ใช้สลับการใช้งานระหว่างบัญชี Google ได้ภายในพื้นที่เนื้อหาของหน้าต่างเบราว์เซอร์หลังจากที่ลงชื่อเข้าใช้อุปกรณ์ <ph name="PRODUCT_OS_NAME" />
 
@@ -2089,17 +2091,6 @@
 
       เมื่อหน้าจอกำลังจะหรี่แสง รูปแบบการหรี่แสงอัจฉริยะจะประเมินว่าควรเลื่อนการหรี่แสงหน้าจอออกไปก่อนหรือไม่ หากรูปแบบการหรี่แสงอัจฉริยะเลื่อนการหรี่แสง จะมีการขยายเวลาอย่างมีประสิทธิภาพจนกว่าแสงหน้าจอจะหรี่ลง ในกรณีนี้ ระบบจะปรับการปิดหน้าจอ การล็อกหน้าจอ และการหน่วงเวลาของการไม่ใช้งาน เพื่อรักษาระยะจากการหน่วงเวลาการหรี่แสงหน้าจอให้อยู่ในระดับเดียวกันกับค่ากำหนดเดิม
       หากตั้งค่านโยบายนี้เป็น "จริง" หรือไม่ได้ตั้งค่า ระบบจะเปิดใช้รูปแบบการหรี่แสงอัจฉริยะและอนุญาตให้ขยายเวลาจนกว่าแสงหน้าจอจะหรี่ลง หากตั้งค่านโยบายนี้เป็น "เท็จ" รูปแบบการหรี่แสงอัจฉริยะจะไม่มีผลต่อการหรี่แสงหน้าจอ</translation>
-<translation id="6982028490425791294">
-      หากตั้งค่านโยบายเป็น "จริง" <ph name="PRODUCT_NAME" /> จะได้รับอนุญาตให้รวบรวมบันทึกเหตุการณ์ WebRTC จากบริการของ Google (เช่น Google Meet) และอัปโหลดบันทึกไปยัง Google
-
-      หากตั้งค่านโยบายเป็น "เท็จ" หรือไม่ได้ตั้งค่า <ph name="PRODUCT_NAME" /> จะรวบรวมหรืออัปโหลดบันทึกเช่นนี้ไม่ได้
-
-      บันทึกเหล่านี้มีข้อมูลอย่างเช่น เวลาและขนาดของแพ็กเก็ต RTP ที่ส่งและได้รับ ผลป้อนกลับเกี่ยวกับความคับคั่งในเครือข่าย ตลอดจนข้อมูลเมตาเกี่ยวกับระยะเวลาและคุณภาพของเสียงและเฟรมของวิดีโอ ข้อมูลนี้จะเป็นประโยชน์เมื่อแก้ไขข้อบกพร่องเกี่ยวกับการโทรด้วยเสียงหรือการโทรแบบวิดีโอคอลใน Chrome เช่น ปัญหาการประมาณแบนด์วิดท์ เป็นต้น บันทึกไม่มีเนื้อหาเสียงหรือวิดีโอจากการโทร
-
-      มีเฉพาะบริการผ่านเว็บของ Google อย่างเช่น Google Hangouts หรือ Google Meet ที่จะเรียกใช้การรวบรวมข้อมูลนี้ได้
-
-      อาจมีการเชื่อมโยงบันทึกเหล่านี้ (โดยใช้รหัสเซสชัน) กับบันทึกอื่นๆ ที่บริการของ Google รวบรวมไว้เอง โดยมีจุดประสงค์เพื่อให้แก้ไขข้อบกพร่องได้ง่ายขึ้น
-      </translation>
 <translation id="6994082778848658360">ระบุวิธีที่สามารถใช้ฮาร์ดแวร์องค์ประกอบความปลอดภัยในเครื่องเพื่อทำการตรวจสอบสิทธิ์จากปัจจัยที่สอง หากขั้นตอนดังกล่าวใช้ได้กับฟีเจอร์นี้ จะมีการใช้ปุ่มเปิด/ปิดของเครื่องในการตรวจหาตัวตนจริงของผู้ใช้
 
       หากเลือก "ปิดใช้" จะไม่มีการแจ้งปัจจัยที่ 2
@@ -2851,7 +2842,7 @@
       OverrideSecurityRestrictionsOnInsecureOrigin แทน
 
       นโยบายนี้จะระบุรายการของต้นทาง (URL) หรือรูปแบบชื่อโฮสต์
-      (เช่น "*.example.com") ที่จะไม่ใช้ข้อจำกัดด้านความปลอดภัย
+      (เช่น *.example.com) ที่จะไม่ใช้ข้อจำกัดด้านความปลอดภัย
       กับต้นทางที่ไม่ปลอดภัย
 
       นโยบายนี้มีไว้ให้องค์กรกำหนดต้นทางที่อนุญาตพิเศษสำหรับแอปพลิเคชันเดิม
@@ -2862,7 +2853,7 @@
       "ไม่ปลอดภัย" ในแถบอเนกประสงค์
 
       การกำหนดรายการ URL ในนโยบายนี้มีผลเหมือนกับการตั้งค่า
-      สถานะบรรทัดคำสั่ง "--unsafely-treat-insecure-origin-as-secure"
+      สถานะบรรทัดคำสั่ง --unsafely-treat-insecure-origin-as-secure
       เป็นรายการ URL เดียวกันที่คั่นด้วยจุลภาค หากตั้งค่านโยบายนี้
       นโยบายจะลบล้างสถานะบรรทัดคำสั่งดังกล่าว
 
@@ -2909,11 +2900,6 @@
 <translation id="9035964157729712237">รหัสส่วนขยายที่ได้รับการยกเว้นจากรายการที่ไม่อนุญาต</translation>
 <translation id="9042911395677044526">อนุญาตให้ใช้การกำหนดค่าเครือข่ายแบบพุชสำหรับผู้ใช้แต่ละคนของอุปกรณ์ <ph name="PRODUCT_OS_NAME" /> การกำหนดค่าอุปกรณ์จะเป็นสตริงรูปแบบ JSON ตามที่กำหนดโดยรูปแบบการกำหนดค่าเครือข่ายแบบเปิดซึ่งอธิบายไว้ที่ <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">ระบุว่ากิจกรรมวิดีโอมีผลต่อการจัดการพลังงานหรือไม่</translation>
-<translation id="9085839450090699752">อนุญาตให้คุณตั้งค่าระยะเวลา (หน่วยเป็นมิลลิวินาที) ที่จะแสดงการแจ้งเตือนให้ผู้ใช้ทราบว่าต้องเปิด <ph name="PRODUCT_NAME" /> ขึ้นมาใหม่หรือต้องรีสตาร์ทอุปกรณ์ <ph name="PRODUCT_OS_NAME" /> เพื่อนำอัปเดตที่รอดำเนินการไปใช้
-
-      ระหว่างช่วงเวลานี้ ผู้ใช้จะได้รับการแจ้งเตือนอยู่เรื่อยๆ ว่าต้องอัปเดต สำหรับอุปกรณ์ <ph name="PRODUCT_OS_NAME" /> การแจ้งเตือนให้รีสตาร์ทจะปรากฏในถาดระบบเมื่อพบการอัปเกรด การแจ้งเตือนจะเปลี่ยนสีเมื่อระยะเวลาแจ้งเตือนผ่านไปครึ่งหนึ่ง และจะเปลี่ยนสีอีกครั้งเมื่อการแจ้งเตือนครบกำหนด สำหรับเบราว์เซอร์ <ph name="PRODUCT_NAME" /> เมนูแอปจะเปลี่ยนไปเพื่อบ่งชี้ว่าคุณต้องเปิดเบราว์เซอร์ขึ้นมาใหม่เมื่อระยะเวลาแจ้งเตือนผ่านไป 1 ใน 3 จากนั้น การแจ้งเตือนจะเปลี่ยนสีเมื่อระยะเวลาแจ้งเตือนผ่านไป 2 ใน 3 ของระยะเวลาทั้งหมด และเปลี่ยนสีอีกครั้งเมื่อการแจ้งเตือนครบกำหนด การแจ้งเตือนอื่นๆ ที่เปิดใช้โดยนโยบาย <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> สำหรับเบราว์เซอร์จะเป็นไปตามกำหนดเวลานี้
-
-      หากไม่ได้ตั้งค่า ระบบจะใช้ระยะเวลาเริ่มต้นที่ 345,600,000 มิลลิวินาที (4 วัน) สำหรับอุปกรณ์ <ph name="PRODUCT_OS_NAME" /> และ 604,800,000 มิลลิวินาที (1 สัปดาห์) สำหรับเบราว์เซอร์</translation>
 <translation id="9088433379343318874">เปิดใช้ผู้ให้บริการเนื้อหาสำหรับผู้ใช้ภายใต้การดูแล</translation>
 <translation id="9088444059179765143">กำหนดค่าวิธีการตรวจหาเขตเวลาอัตโนมัติ</translation>
 <translation id="9096086085182305205">รายการที่อนุญาตสำหรับเซิร์ฟเวอร์การตรวจสอบสิทธิ์</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index 163fb7b7..0cf03de 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -175,6 +175,13 @@
           <ph name="PROXY_HELP_URL" /></translation>
 <translation id="1502843533062797703">Üçüncü taraf yazılımı yerleştirme engellemesini etkinleştirin</translation>
 <translation id="1504431521196476721">Uzaktan Doğrulama</translation>
+<translation id="1507957856411744193">Bu politika doğru değerine ayarlanırsa, <ph name="PRODUCT_NAME" /> sadece RFC1918/RFC4913 özel adreslerine sahip olanlara değil, tüm IP adreslerindeki Yayın cihazlarına bağlanır.
+
+          Bu politika yanlış (false) değerine ayarlanırsa, <ph name="PRODUCT_NAME" /> yalnızca RFC1918/RFC4913 özel adreslerindeki Yayın cihazlarına bağlanır.
+
+          Bu politika ayarlanmazsa, <ph name="PRODUCT_NAME" /> CastAllowAllIPs özelliği etkinleştirilmediği sürece yalnızca RFC1918/RFC4913 özel adreslerindeki Yayın cihazlarına bağlanır.
+
+          "EnableMediaRouter" politikası yanlış (false) değerine ayarlanırsa bu politikanın değerinin herhangi bir etkisi olmaz.</translation>
 <translation id="1509692106376861764">Bu politika, <ph name="PRODUCT_NAME" /> Sürüm 29 itibariyle kullanımdan kaldırılmıştır.</translation>
 <translation id="1514888685242892912"><ph name="PRODUCT_NAME" /> ürününü etkinleştirin</translation>
 <translation id="1522425503138261032">Sitelerin, kullanıcıların fiziksel konumlarını izlemesine izin ver</translation>
@@ -355,11 +362,6 @@
 
           Bu politika ayarlanmadan bırakılırsa dört şema da kullanılır.</translation>
 <translation id="2067011586099792101">İçerik paketlerinin dışındaki sitelere erişimi engelle</translation>
-<translation id="2070270043919235595">Kullanıcılara, bekleyen bir güncellemeyi uygulamak için <ph name="PRODUCT_NAME" /> uygulamasının yeniden başlatılması gerektiğini bildirin.
-
-      Bu politika ayarı, kullanıcıya tarayıcının yeniden başlatılmasının önerildiği veya gerektiği bilgisini verecek bildirimleri etkinleştirir. Bir değer ayarlanmazsa <ph name="PRODUCT_NAME" />, menüsündeki küçük değişiklikler aracılığıyla kullanıcıya uygulamanın yeniden başlatılması gerektiğini belirtir. "Önerilen" seçeneği ayarlanırsa, kullanıcıya uygulamayı yeniden başlatmasının önerildiği yinelenen bir uyarı ile bildirilir. Kullanıcı, yeniden başlatmayı ertelemek için bu uyarıyı kapatabilir. "Zorunlu" değeri ayarlanırsa kullanıcıya, bildirim dönemi geçtikten sonra tarayıcının yeniden başlatılmasının zorlanacağını belirten yinelenen bir uyarı gösterilir. Bu dönem varsayılan olarak yedi gündür ve <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> politika ayarı aracılığıyla yapılandırılabilir.
-
-      Yeniden başlatmanın ardından kullanıcı oturumu yeniden açılır.</translation>
 <translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> oturumunun açılmasına izin ver</translation>
 <translation id="2077129598763517140">Kullanılabilir olduğunda donanım hızlandırmayı kullan</translation>
 <translation id="2077273864382355561">Pil gücüyle çalışırken ekran kapatma gecikmesi</translation>
@@ -912,7 +914,6 @@
           Bu politika isteğe bağlıdır. Ayarlanmazsa hiçbir yeni sekme sayfası sağlanmaz.
 
           Bu politika sadece "DefaultSearchProviderEnabled" politikası etkinleştirilmişse geçerli olur.</translation>
-<translation id="3465852069254497664">Kullanıcıya tarayıcının yeniden başlatılmasının önerildiğini veya gerektiğini bildirme</translation>
 <translation id="346731943813722404">Bir oturumda güç yönetimi gecikmelerinin ve oturum süresi sınırının sadece kullanıcı ilk etkinliğinin gözlenmesinden sonra çalışmaya başlayıp başlamayacağını belirler.
 
           Bu politika Doğru seçeneğine ayarlanırsa bir oturumda güç yönetimi gecikmeleri ve oturum süresi sınırı kullanıcının ilk etkinliğinin gözlenmesine kadar çalışmaya başlamaz.
@@ -2005,6 +2006,7 @@
 
       <ph name="SYNC_DISABLED_POLICY_NAME" /> politikası, RoamingProfileSupportEnabled'ı geçersiz kılarak tüm veri senkronizasyonunu devre dışı bırakır.</translation>
 <translation id="6731757988219967594">Üst düzey siteleri (ancak yerleştirilmiş iframe'leri değil) yetişkinlere yönelik içerik için filtrele</translation>
+<translation id="6734521799274931721">ChromeOS için Ağ Üzerinde Dosya Paylaşımı'nın kullanılabilirliğini kontrol eder</translation>
 <translation id="6735701345096330595">Yazım denetimi dillerini etkinleştirmeye zorla</translation>
 <translation id="673699536430961464">Bu ayar, kullanıcıların <ph name="PRODUCT_OS_NAME" /> cihazlarında oturum açtıktan sonra tarayıcı pencerelerinin içerik alanındaki Google Hesapları arasında geçiş yapmalarına olanak tanır.
 
@@ -2157,17 +2159,6 @@
 
       Ekran karartılmak üzereyken akıllı karartma modeli, ekranı karartmanın geciktirilmesinin gerekip gerekmediğini değerlendirir. Akıllı karartma modeli ekranın karartılmasını geciktirirse, ekranın karartılması için gereken süre etkili şekilde uzar. Bu durumda, ekran kapatma, ekran kilidi ve işlem yapılmadan geçen süre gecikmeleri, ekran karartma gecikmesinin başlangıçta yapılandırıldığı değerle aynı süreyi koruyacak şekilde ayarlanır. 
       Bu politika True (Doğru) değerine ayarlanır veya ayarlanmadan bırakılırsa akıllı karartma modeli etkinleşir ve ekranı karartma süresini uzatmasına izin verilir. Bu politika False (Yanlış) değerine ayarlanırsa akıllı karartma modeli, ekran karartmayı etkilemez.</translation>
-<translation id="6982028490425791294">
-      Bu politika doğru (true) değerine ayarlanırsa, <ph name="PRODUCT_NAME" /> ürünün Google hizmetlerinden (ör. Google Meet) WebRTC etkinlik günlüklerini toplamasına ve bu günlükleri Google'a yüklemesine izin verilir.
-
-      Bu politika yanlış (false) değerine ayarlanır veya ayarlanmadan bırakılırsa, <ph name="PRODUCT_NAME" /> ürünü bu tür günlükleri toplayamaz veya yükleyemez.
-
-      Bu günlükler gönderilen ve alınan RTP paketlerinin boyutu ve işlem zamanı, ağdaki tıkanıklıkla ilgili geri bildirim, ses ve video karelerinin süresi ve kalitesi gibi bilgileri içerir. Bu bilgiler, Chrome'da sesli ve görüntülü aramalarla ilgili sorunlar (ör. bant genişliği tahminiyle ilgili sorunlar vb) için hata ayıklaması yaparken kullanışlıdır. Günlükler aramadaki ses ve video içeriklerini barındırmaz.
-
-      Bu veri toplama işlemi yalnızca Google Hangouts veya Google Meet gibi Google'ın web hizmetleri tarafından tetiklenebilir.
-
-      Bu günlükler bir oturum kimliği kullanılarak, Google hizmetinin kendisi tarafından toplanan diğer günlüklerle ilişkilendirilebilir. Bu, hata ayıklamayı kolaylaştırmak amacıyla kasıtlı olarak yapılır.
-      </translation>
 <translation id="6994082778848658360">Yerleşik güvenli öğe donanımının bu özellikle uyumlu olması halinde iki etmenli kimlik doğrulama sunmak için nasıl kullanılabileceğini belirtir. Kullanıcının fiziksel varlığını algılamak için makinenin güç düğmesi kullanılır.
 
       "Devre dışı" seçilirse ikinci etmen sunulmaz.
@@ -2991,11 +2982,6 @@
 <translation id="9035964157729712237">Kara listeden muaf tutulacak uzantı kimlikleri</translation>
 <translation id="9042911395677044526">Kullanıcılara ayrı ayrı uygulanacak ağ yapılandırmasını bir <ph name="PRODUCT_OS_NAME" /> cihazına iletmeye olanak verir. Ağ yapılandırması, Açık Ağ Yapılandırma biçimi tarafından <ph name="ONC_SPEC_URL" /> adresinde tanımlandığı gibi, JSON biçimli bir dizedir.</translation>
 <translation id="9084985621503260744">Video etkinliğinin güç yönetimini etkileyip etkilemeyeceğini belirtme</translation>
-<translation id="9085839450090699752">Beklemedeki bir güncellemenin uygulanması için <ph name="PRODUCT_NAME" /> ürününün veya bir <ph name="PRODUCT_OS_NAME" /> cihazının yeniden başlatılması gerektiği konusunda kullanıcıların bilgilendirileceği dönemi milisaniye cinsinden ayarlamanıza olanak tanır.
-
-      Bu dönem boyunca, kullanıcı güncelleme gereksinimi konusunda tekrarlanan bir şekilde bilgilendirilir. <ph name="PRODUCT_OS_NAME" /> cihazlarda, yeni sürüme geçme olanağı tespit edildiğinde sistem tepsisinde bir yeniden başlatma bildirimi görüntülenir. Bu bildirimin rengi, bildirim döneminin yarısı geçtikten ve tam bildirim dönemi sona erdikten sonra değişir. <ph name="PRODUCT_NAME" /> tarayıcılarda, yeniden başlatmanın gerektiğini belirtmek için bildirim döneminin üçte biri geçtikten sonra uygulama menüsü değişir. Bu bildirimin rengi, bildirim döneminin üçte ikisi ve tam bildirim dönemi geçtikten sonra tekrar değişir. Tarayıcılar için <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> politikasıyla etkinleştirilen ek bildirimler bu programa uyar.
-
-      Bu değer ayarlanmazsa, <ph name="PRODUCT_OS_NAME" /> cihazlarda varsayılan dönem için 345600000 milisaniye (dört gün) ve tarayıcılar için 604800000 milisaniye (bir hafta) değerleri kullanılır.</translation>
 <translation id="9088433379343318874">Denetlenen kullanıcı içerik sağlayıcısını etkinleştirme</translation>
 <translation id="9088444059179765143">Otomatik saat dilimi algılama yöntemini yapılandır</translation>
 <translation id="9096086085182305205">Kimlik doğrulama sunucusu beyaz listesi</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 64f4387..0f4f44dbd 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -191,6 +191,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Блокувати вставляння ПЗ незалежних розробників</translation>
 <translation id="1504431521196476721">Віддалене засвідчення</translation>
+<translation id="1507957856411744193">Якщо для цього правила вибрано true, <ph name="PRODUCT_NAME" /> під’єднується до пристроїв для трансляції з усіма IP-адресами, а не лише з приватними RFC1918/RFC4193.
+
+          Якщо для цього правила вибрано false, <ph name="PRODUCT_NAME" /> під’єднується лише до пристроїв для трансляції з приватними адресами RFC1918/RFC4193.
+
+          Якщо це правило не налаштовано, <ph name="PRODUCT_NAME" /> під’єднується лише до пристроїв для трансляції з приватними адресами RFC1918/RFC4193 за умови, що функцію CastAllowAllIPs вимкнено.
+
+          Якщо для правила EnableMediaRouter вибрано false, тоді значення в цьому правилі не діє.</translation>
 <translation id="1509692106376861764">Це правило не підтримується від 29-ї версії <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1514888685242892912">Увімкнути <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Дозволяти сайтам відстежувати фізичне місцезнаходження користувача</translation>
@@ -365,11 +372,6 @@
 
           Якщо це правило не налаштовано, використовуються всі чотири схеми.</translation>
 <translation id="2067011586099792101">Блокувати доступ до сайтів, які не входять в пакети вмісту</translation>
-<translation id="2070270043919235595">Повідомляти користувача, що <ph name="PRODUCT_NAME" /> потрібно перезапустити, щоб застосувати оновлення, яке очікує на розгляд.
-
-      Це правило дає змогу надсилати користувачеві сповіщення з рекомендацією про бажаний чи обов’язковий перезапуск веб-переглядача. Якщо правило не налаштовано, <ph name="PRODUCT_NAME" /> повідомляє користувачеві про потребу в перезапуску за допомогою незначних змін у своєму меню. Якщо для правила вибрано значення "Рекомендовано", користувач регулярно бачитиме застереження. Його можна закрити, щоб відкласти перезапуск. Якщо для правила вибрано значення "Обов’язково", користувач регулярно бачитиме застереження про примусовий перезапуск веб-переглядача після закінчення вказаного в сповіщенні часу. За умовчанням цей термін установлено на сім днів, але його можна змінити за допомогою правила "<ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />".
-
-      Після перезапуску сеанс користувача відновлюється.</translation>
 <translation id="2073552873076775140">Дозволити вхід у <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Використовувати апаратне прискорення, якщо доступно</translation>
 <translation id="2077273864382355561">Затримка вимкнення екрана, коли використовується заряд акумулятора</translation>
@@ -906,7 +908,6 @@
           Це правило необов’язкове. Якщо воно не налаштоване, сторінка нової вкладки не надаватиметься.
 
           Це правило застосовується, лише якщо ввімкнено правило "DefaultSearchProviderEnabled".</translation>
-<translation id="3465852069254497664">Сповіщати користувача про рекомендований чи обов’язковий перезапуск веб-переглядача</translation>
 <translation id="346731943813722404">Визначає, чи затримки керування живленням і обмеження тривалості сеансу запускаються лише тоді, коли помічено першу дію користувача в сеансі.
 
           Якщо для цього правила встановлено значення "True", затримки керування живленням і обмеження тривалості сеансу не запускаються, доки не помічено першу дію користувача в сеансі.
@@ -1956,6 +1957,7 @@
 
       Правило <ph name="SYNC_DISABLED_POLICY_NAME" /> вимикає синхронізацію всіх даних, замінюючи правило RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Фільтрувати сайти вищого рівня (але не вбудовані iframe) із вмістом для дорослих</translation>
+<translation id="6734521799274931721">Визначає, чи може ОС Chrome обмінюватися файлами в мережі</translation>
 <translation id="6735701345096330595">Примусово вмикати мови перевірки правопису</translation>
 <translation id="673699536430961464">Це налаштування дає змогу користувачам змінювати облікові записи Google у вікні веб-переглядача, якщо вони ввійшли на пристрої з <ph name="PRODUCT_OS_NAME" />.
 
@@ -2097,17 +2099,6 @@
 
       Коли екран має згаснути, модель розумного затемнення оцінює, чи потрібно відкласти цю дію. Якщо модель розумного затемнення відкладає вимкнення екрана, час його активності збільшується. У такому випадку затримки вимкнення, блокування й неактивності екрана налаштовуються відповідно, щоб проміжки часу від затримки затемнення екрана відповідали попереднім налаштуванням.
       Якщо це правило має значення true або його не налаштовано, модель розумного затемнення буде ввімкнено, і вона зможе збільшувати час активності екрана. Якщо це правило має значення false, модель розумного затемнення не зможе впливати на час затемнення екрана.</translation>
-<translation id="6982028490425791294">
-      Якщо для цього правила вибрано значення true, <ph name="PRODUCT_NAME" /> може збирати журнали подій WebRTC із сервісів Google (як-от Google Meet) і завантажувати їх у Google.
-
-      Якщо для цього правила вибрано значення false або його не налаштовано, <ph name="PRODUCT_NAME" /> не може збирати й завантажувати такі журнали.
-
-      Ці журнали містять таку інформацію, як час і розміри надісланих та отриманих пакетів RTP, відгуки про перевантаження мережі й метадані про час і якість фреймів аудіо та відео. Ці дані допомагають усувати проблеми з аудіо- й відеовикликами в Chrome, як-от неправильна оцінка пропускної спроможності тощо. Аудіо- й відеовміст викликів не включається в журнали.
-
-      Збір цих даних можуть ініціювати лише веб-сервіси Google, як-от Google Hangouts або Google Meet.
-
-      Ці журнали можуть пов’язуватися (за допомогою ідентифікатора сеансу) з іншими журналами, які збирає сервіс Google. Це робиться, щоб спростити налагодження.
-      </translation>
 <translation id="6994082778848658360">Визначає, як наявне апаратне забезпечення елемента безпеки можна використовувати для двофакторної автентифікації, якщо воно сумісне з цією функцією. Фізична присутність користувача визначається за допомогою кнопки живлення комп’ютера.
 
       Якщо вибрано опцію "Вимкнено", другий фактор не використовується.
@@ -2915,11 +2906,6 @@
 <translation id="9035964157729712237">Ідентифікатори розширень для виключення з "чорного списку"</translation>
 <translation id="9042911395677044526">Дозволяє надсилати конфігурацію мережі для застосування кожним окремим користувачем на пристрої з <ph name="PRODUCT_OS_NAME" />. Конфігурація мережі – це рядок у форматі JSON, визначений форматом Open Network Configuration, який описано на сторінці <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Визначати, чи дії з відео впливають на керування живленням</translation>
-<translation id="9085839450090699752">Дає змогу встановити період часу (у мілісекундах), упродовж якого користувачеві повідомлятимуть, що потрібно перезапустити <ph name="PRODUCT_NAME" /> чи пристрій <ph name="PRODUCT_OS_NAME" />, щоб застосувати оновлення.
-
-      Упродовж цього часу користувач отримуватиме сповіщення. На пристроях <ph name="PRODUCT_OS_NAME" /> сповіщення про перезапуск з’являється на панелі завдань, коли виявлено оновлення. Воно змінює колір після того, як проходить половина вказаного часу, а також коли цей період закінчується. У веб-переглядачах <ph name="PRODUCT_NAME" />, коли проходить третина вказаного періоду, змінюється меню додатка, вказуючи на те, що потрібно здійснити перезапуск. Це сповіщення змінює колір, коли проходить дві третіх періоду, а потім, коли час закінчується. Додаткові сповіщення, увімкнені для веб-переглядачів правилом <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" />, з’являються за таким самим графіком.
-
-      Якщо час не вказано, використовується період за умовчанням – 345 600 000 мілісекунд (чотири дні) для пристроїв <ph name="PRODUCT_OS_NAME" /> і 604 800 000 мілісекунд (один тиждень) для веб-переглядачів.</translation>
 <translation id="9088433379343318874">Увімкнути постачальника вмісту для контрольованих користувачів</translation>
 <translation id="9088444059179765143">Налаштувати метод автоматичного визначення часового поясу</translation>
 <translation id="9096086085182305205">Список дозволених серверів для автентифікації</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 2c48e12..b2d39aa 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -191,6 +191,13 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="1502843533062797703">Cho phép chặn phần mềm bên thứ ba thêm mã thực thi</translation>
 <translation id="1504431521196476721">Chứng thực từ xa</translation>
+<translation id="1507957856411744193">Nếu bạn đặt chính sách này thành true, thì <ph name="PRODUCT_NAME" /> sẽ kết nối với Thiết bị truyền trên tất cả các địa chỉ IP, chứ không chỉ các địa chỉ riêng RFC1918/RFC4913.
+
+          Nếu bạn đặt chính sách này thành false, thì <ph name="PRODUCT_NAME" /> sẽ chỉ kết nối với Thiết bị truyền trên các địa chỉ riêng RFC1918/RFC4913.
+
+          Nếu bạn chưa đặt chính sách này, thì <ph name="PRODUCT_NAME" /> sẽ chỉ kết nối với Thiết bị truyền trên các địa chỉ riêng RFC1918/RFC4913, trừ khi bạn bật tính năng CastAllowAllIPs.
+
+          Nếu bạn đặt chính sách "EnableMediaRouter" thành false, thì khi đó giá trị của chính sách này sẽ không có hiệu lực.</translation>
 <translation id="1509692106376861764">Chính sách này đã chấm dứt kể từ phiên bản <ph name="PRODUCT_NAME" /> 29.</translation>
 <translation id="1514888685242892912">Bật <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">Cho phép các trang web theo dõi vị trí thực của người dùng</translation>
@@ -364,11 +371,6 @@
 
           Nếu không thiết lập chính sách này, tất cả bốn cơ chế sẽ được sử dụng.</translation>
 <translation id="2067011586099792101">Chặn truy cập vào các trang web nằm ngoài gói nội dung</translation>
-<translation id="2070270043919235595">Thông báo cho người dùng biết rằng phải chạy lại <ph name="PRODUCT_NAME" /> để áp dụng bản cập nhật đang chờ xử lý.
-
-      Cài đặt chính sách này bật thông báo để báo cho người dùng rằng họ cần hoặc bắt buộc phải chạy lại trình duyệt. Nếu người dùng không đặt chính sách này, <ph name="PRODUCT_NAME" /> sẽ cho người dùng biết rằng họ cần chạy lại qua các thay đổi nhỏ đối với menu của sản phẩm. Nếu người dùng đặt chính sách thành 'Đề xuất', một cảnh báo lặp lại sẽ hiển thị cho người dùng biết rằng họ cần chạy lại. Người dùng có thể bỏ qua cảnh báo này để hoãn việc chạy lại. Nếu người dùng đặt chính sách thành 'Bắt buộc', một cảnh báo lặp lại sẽ hiển thị cho người dùng biết rằng bắt buộc phải chạy lại trình duyệt sau khi khoảng thời gian thông báo đã hết. Khoảng thời gian này là 7 ngày theo mặc định và có thể định cấu hình qua cài đặt chính sách <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />.
-
-      Phiên của người dùng được lưu trữ sau lần chạy lại đó.</translation>
 <translation id="2073552873076775140">Cho phép đăng nhập vào <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">Sử dụng chế độ tăng tốc phần cứng khi khả dụng</translation>
 <translation id="2077273864382355561">Độ trễ tắt màn hình khi chạy trên nguồn pin</translation>
@@ -932,7 +934,6 @@
           Chính sách này là tùy chọn. Nếu không được đặt, sẽ không có trang tab mới nào được cung cấp.
 
           Chính sách này chỉ được tuân thủ nếu chính sách 'DefaultSearchProviderEnabled' được bật.</translation>
-<translation id="3465852069254497664">Thông báo cho người dùng biết rằng cần hoặc bắt buộc chạy lại trình duyệt</translation>
 <translation id="346731943813722404">Chỉ định liệu độ trễ quản lý nguồn và giới hạn thời lượng phiên có chỉ bắt đầu chạy sau khi hoạt động đầu tiên của người dùng được quan sát thấy trong phiên hay không.
 
           Nếu chính sách này được đặt thành Đúng, độ trễ quản lý nguồn và giới hạn thời lượng phiên sẽ không bắt đầu chạy cho đến sau khi hoạt động đầu tiên của người dùng được quan sát thấy trong phiên.
@@ -2030,6 +2031,7 @@
 
       Chính sách <ph name="SYNC_DISABLED_POLICY_NAME" /> sẽ tắt tất cả đồng bộ hóa dữ liệu, ghi đè RoamingProfileSupportEnabled.</translation>
 <translation id="6731757988219967594">Lọc các trang web cấp cao nhất (không phải iframe được nhúng) có nội dung người lớn</translation>
+<translation id="6734521799274931721">Kiểm soát tính sẵn có của ứng dụng Chia sẻ tệp trong mạng cho Chrome OS</translation>
 <translation id="6735701345096330595">Buộc bật tính năng kiểm tra chính tả ngôn ngữ</translation>
 <translation id="673699536430961464">Cài đặt này cho phép người dùng chuyển đổi giữa các tài khoản Google trong vùng nội dung của cửa sổ trình duyệt sau khi họ đăng nhập vào thiết bị <ph name="PRODUCT_OS_NAME" /> của mình.
 
@@ -2181,17 +2183,6 @@
 
       Khi màn hình sắp mờ đi, mô hình làm mờ thông minh sẽ đánh giá xem có nên làm chậm quá trình làm mờ màn hình hay không. Nếu mô hình làm mờ thông minh làm chậm quá trình mờ màn hình, thì có nghĩa mô hình này đã kéo dài được thời gian cho đến khi màn hình mờ đi. Trong trường hợp này, độ trễ tắt màn hình, độ trễ khóa màn hình và độ trễ khi không hoạt động sẽ được điều chỉnh để duy trì cùng khoảng cách với độ trễ mờ màn hình như được định cấu hình ban đầu.
       Nếu bạn đặt chính sách này là True hoặc không đặt, thì mô hình làm mờ thông minh sẽ bật và được phép kéo dài thời gian cho đến khi màn hình mờ đi. Nếu bạn đặt chính sách này là False, thì mô hình làm mờ thông minh sẽ không ảnh hưởng tới quá trình làm mờ màn hình.</translation>
-<translation id="6982028490425791294">
-      Nếu bạn đặt chính sách này là true, thì <ph name="PRODUCT_NAME" /> được phép thu thập nhật ký sự kiện WebRTC từ các dịch vụ của Google (ví dụ: Google Meet), và tải các nhật ký đó lên Google.
-
-      Nếu bạn đặt chính sách này thành false hoặc không đặt, thì <ph name="PRODUCT_NAME" /> không được phép thu thập hay tải các nhật ký đó lên.
-
-      Những nhật ký này chứa các loại thông tin, chẳng hạn như thời gian và kích thước các gói RTP gửi đi và nhận được, phản hồi về tình trạng nghẽn mạng, cũng như siêu dữ liệu về thời gian và chất lượng của âm thanh cũng như khung video. Thông tin này hữu ích khi gỡ lỗi các vấn đề về cuộc gọi thoại hoặc cuộc gọi video trong Chrome, chẳng hạn như vấn đề về ước tính băng thông, v.v. Các nhật ký này không chứa nội dung video hoặc nội dung thoại của các cuộc gọi.
-
-      Chỉ các dịch vụ web của Google, chẳng hạn như Google Hangouts hoặc Google Meet, mới có thể kích hoạt việc thu thập dữ liệu này.
-
-      Thông qua ID phiên, những nhật ký này có thể liên kết với các nhật ký khác do dịch vụ của Google tự thu thập. Điều này nhằm giúp quá trình gỡ lỗi dễ dàng hơn.
-      </translation>
 <translation id="6994082778848658360">Chỉ định cách bạn có thể sử dụng phần cứng tích hợp phần tử bảo mật để cung cấp xác thực hai yếu tố nếu tương thích với tính năng này. Nút nguồn của máy dùng để phát hiện sự hiện diện của người dùng.
 
       Nếu bạn chọn 'Đã tắt' thì sẽ không nhận được hai yếu tố.
@@ -3021,11 +3012,6 @@
 <translation id="9035964157729712237">Các ID tiện ích được miễn khỏi danh sách đen</translation>
 <translation id="9042911395677044526">Cho phép áp dụng cấu hình mạng cho mỗi người dùng thiết bị <ph name="PRODUCT_OS_NAME" />. Cấu hình mạng là chuỗi có định dạng JSON như được định nghĩa theo định dạng Cấu hình mạng mở được mô tả tại <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Chỉ định xem hoạt động video có ảnh hưởng đến việc quản lý nguồn không</translation>
-<translation id="9085839450090699752">Cho phép bạn đặt khoảng thời gian, tính bằng mili giây mà qua đó người dùng được thông báo rằng phải chạy lại <ph name="PRODUCT_NAME" /> hoặc khởi động lại thiết bị chạy <ph name="PRODUCT_OS_NAME" /> để áp dụng bản cập nhật đang chờ xử lý.
-
-      Quá khoảng thời gian này, người dùng sẽ được nhắc lại nhiều lần về việc cần phải cập nhật. Đối với các thiết bị chạy <ph name="PRODUCT_OS_NAME" />, thông báo khởi động lại sẽ xuất hiện trong khay hệ thống khi phát hiện có bản nâng cấp. Thông báo này sẽ đổi màu khi hết một nửa thời gian thông báo và đổi màu một lần nữa khi hết toàn bộ thời gian thông báo. Đối với các trình duyệt <ph name="PRODUCT_NAME" />, menu ứng dụng sẽ thay đổi để cho thấy cần chạy lại sau khi đã qua một phần ba thời gian thông báo. Thông báo này sẽ đổi màu sau khi đã qua hai phần ba thời gian thông báo và đổi màu một lần nữa khi hết toàn bộ thời gian thông báo. Những thông báo bổ sung được chính sách <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> bật cho các trình duyệt sẽ tuân theo lịch biểu tương tự này.
-
-      Nếu không được đặt, chúng tôi sẽ sử dụng khoảng thời gian mặc định là 345.600.000 mili giây (bốn ngày) cho các thiết bị chạy <ph name="PRODUCT_OS_NAME" /> và 604.800.000 mili giây (một tuần) cho các trình duyệt.</translation>
 <translation id="9088433379343318874">Cho phép nhà cung cấp nội dung của người dùng được giám sát</translation>
 <translation id="9088444059179765143">Định cấu hình phương thức phát hiện múi giờ tự động</translation>
 <translation id="9096086085182305205">Danh sách trắng máy chủ xác thực</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 1d4b99e..0215e3f 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -33,6 +33,17 @@
           如果停用或未配置此设置,远程协助主机则会在用户的环境中运行,而远程用户将无法在桌面上操控提权后的窗口。</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 intent。</translation>
 <translation id="1118093128235245168">允许网站请求用户授权其访问所连接的 USB 设备</translation>
 <translation id="1128903365609589950">配置 <ph name="PRODUCT_NAME" /> 在磁盘中存储缓存文件时所使用的目录。
@@ -79,6 +90,7 @@
       如果此政策未设置或设为 false,系统将不会在 TLS 中启用 RC4 加密套件。您也可以将此政策设为 true,以便与过时的服务器保持兼容。但这只是一种权宜之计,对服务器进行重新配置才是正确之道。</translation>
 <translation id="1297182715641689552">使用 .pac 代理脚本</translation>
 <translation id="1304973015437969093">要静默安装的扩展程序/应用的 ID 和更新网址</translation>
+<translation id="1307454923744766368">不应将对不安全来源施加的安全性限制应用到哪些来源或主机名模式</translation>
 <translation id="1313457536529613143">指定系统在屏幕变暗或屏幕关闭不久后察觉到用户活动时,对屏幕变暗延迟时间的调整幅度(百分比)。
 
           如果设置此政策,则会指定系统在屏幕变暗或屏幕关闭后不久察觉到用户活动时,对屏幕变暗延迟时间的调整幅度(百分比)。屏幕变暗延迟时间调整后,系统会调整屏幕关闭、锁定和待机的延迟时间,使其与屏幕变暗延迟时间之间的差值与原有配置下的差值相同。
@@ -90,6 +102,11 @@
 <translation id="1327466551276625742">离线时,弹出网络配置提示</translation>
 <translation id="1330145147221172764">启用屏幕键盘</translation>
 <translation id="13356285923490863">政策名称</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="1359553908012294236">如果此政策设为 true 或未配置,<ph name="PRODUCT_NAME" /> 将允许使用访客身份登录。访客身份是指 <ph name="PRODUCT_NAME" /> 个人资料,使用此类个人资料登录后,所有窗口均处于隐身模式。
 
@@ -170,6 +187,7 @@
 <translation id="1583248206450240930">默认情况下使用“<ph name="PRODUCT_FRAME_NAME" />”</translation>
 <translation id="1599424828227887013">在 Android 设备上为指定的来源启用网站隔离功能</translation>
 <translation id="1608755754295374538">无需提示用户即可使用音频捕获设备的网址</translation>
+<translation id="1615221548356595305">允许为这些主机聚合 HTTP/2 连接(即使是在使用客户端证书时)</translation>
 <translation id="1617235075406854669">允许删除浏览器历史记录和下载记录</translation>
 <translation id="163200210584085447">系统会将此列表中的网址格式与请求网址的安全来源进行比对。如果找到了匹配项,系统将允许相应网址通过 SAML 登录页面访问视频捕获设备。如果未找到匹配项,系统将自动拒绝授予访问权限。不允许使用通配符模式。</translation>
 <translation id="1634989431648355062">允许这些网站运行 <ph name="FLASH_PLUGIN_NAME" /> 插件</translation>
@@ -316,11 +334,6 @@
 
           如果此政策未设置,系统将使用所有这四种方案。</translation>
 <translation id="2067011586099792101">禁止访问非内容包内的网站</translation>
-<translation id="2070270043919235595">通知用户必须重新启动 <ph name="PRODUCT_NAME" /> 以应用尚未应用的更新。
-
-      此政策设置旨在启用建议或要求用户重新启动浏览器的通知功能。如果此政策未设置,<ph name="PRODUCT_NAME" /> 会通过菜单的细微变化来提示用户需要重新启动。如果此政策设为“推荐”,系统将会显示建议用户重新启动浏览器的周期性警告。用户可以关闭该警告来推迟重新启动。如果此政策设为“必需”,系统将会显示周期性警告,以便让用户知道系统将于通知期结束后强制重新启动浏览器。该通知期会默认设为 7 天,不过可以通过 <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> 政策设置进行配置。
-
-      浏览器重新启动后,将会恢复用户会话。</translation>
 <translation id="2073552873076775140">允许登录 <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">使用硬件加速模式(如果可用)</translation>
 <translation id="2077273864382355561">使用电源供电时的屏幕关闭延迟时间</translation>
@@ -837,7 +850,6 @@
           该政策为可选政策。如果未设置,将不会提供任何新标签页。
 
           该政策只有在启用了“DefaultSearchProviderEnabled”政策的情况下才有效。</translation>
-<translation id="3465852069254497664">通知用户系统建议或要求重新启动浏览器</translation>
 <translation id="346731943813722404">指定是否仅在会话内察觉到首个用户活动后才开始计算电源管理延迟和会话长度限制。
 
           如果该政策设置为 True,电源管理延迟和会话长度限制将在会话内察觉到首个用户活动后才开始计算。
@@ -1103,15 +1115,15 @@
 
           如果此政策未设置,系统将根据“DefaultKeygenSetting”政策(如果此政策已设置)或用户的个人配置为所有网站使用全局默认值。</translation>
 <translation id="4239720644496144453">缓存不适用于 Android 应用。如果多个用户都想安装同一款 Android 应用,系统便会分别为每个用户重新下载相应的 Android 应用。</translation>
-<translation id="4243336580717651045">对 <ph name="PRODUCT_NAME" /> 启用包含网址的匿名化数据收集功能,并阻止用户更改此设置。
+<translation id="4243336580717651045">对 <ph name="PRODUCT_NAME" /> 启用以网址为键的匿名化数据收集功能,并阻止用户更改此设置。
 
-      包含网址的匿名化数据收集功能会将用户访问的网页网址发送给 Google,用于改善搜索和浏览体验。
+      以网址为键的匿名化数据收集功能会将用户访问的网页网址发送给 Google,用于改善搜索和浏览体验。
 
-      如果启用此政策,系统会始终启用包含网址的匿名化数据收集功能。
+      如果启用此政策,系统会始终启用以网址为键的匿名化数据收集功能。
 
-      如果停用此政策,则系统始终不会启用包含网址的匿名化数据收集功能。
+      如果停用此政策,则系统始终不会启用以网址为键的匿名化数据收集功能。
 
-      如果未设置此政策,系统将启用包含网址的匿名化数据收集功能,但用户将能够更改此设置。</translation>
+      如果未设置此政策,系统将启用以网址为键的匿名化数据收集功能,但用户将能够更改此设置。</translation>
 <translation id="4250680216510889253">否</translation>
 <translation id="4261820385751181068">设备登录屏幕语言区域</translation>
 <translation id="427220754384423013">指定用户可以使用的打印机。
@@ -1264,6 +1276,7 @@
       如果您启用了此政策,网站将可以在导航的同时打开新窗口/标签页。
       如果您停用了或未设置此政策,网站将无法在导航的同时打开新窗口/标签页。</translation>
 <translation id="4680961954980851756">启用自动填充</translation>
+<translation id="4703402283970867140">启用智能调暗模式,以最大限度地推迟屏幕变暗时间</translation>
 <translation id="4722122254122249791">为指定的来源启用网站隔离功能</translation>
 <translation id="4722399051042571387">如果设为 false,用户将无法设置安全系数低且易于猜中的 PIN 码。
 
@@ -1733,7 +1746,7 @@
           要在设备闲置时锁定屏幕,建议您采用以下方式:启用在系统处于暂停状态时锁定屏幕,并指示<ph name="PRODUCT_OS_NAME" />在闲置延迟时间过后进入暂停状态。只有在以下情况下才应使用此政策:系统进入暂停状态之前的很长一段时间内便应锁定屏幕,或者完全不需要启用在设备闲置时暂停系统。
 
           此政策的值应以毫秒为单位,且必须小于闲置延迟时间。</translation>
-<translation id="6097601282776163274">启用包含网址的匿名化数据收集功能</translation>
+<translation id="6097601282776163274">启用以网址为键的匿名化数据收集功能</translation>
 <translation id="6111936128861357925">允许用户玩恐龙复活节彩蛋游戏</translation>
 <translation id="6114416803310251055">已弃用</translation>
 <translation id="6133088669883929098">允许所有网站使用密钥生成功能</translation>
@@ -2013,17 +2026,10 @@
 <translation id="6943577887654905793">Mac/Linux 偏好设置名称:</translation>
 <translation id="69525503251220566">用来为默认搜索服务提供商提供图片搜索功能的参数</translation>
 <translation id="6956272732789158625">不允许任何网站使用密钥生成功能</translation>
-<translation id="6982028490425791294">
-      如果此政策设为 true,<ph name="PRODUCT_NAME" /> 便可以从 Google 服务(例如 Google Meet)收集 WebRTC 事件日志,然后将这些日志上传到 Google。
+<translation id="6965859329738616662">指定是否允许使用智能调暗模式来最大限度地推迟屏幕变暗时间。
 
-      如果此政策设为 false 或未设置,<ph name="PRODUCT_NAME" /> 就可能不会收集或上传这类日志。
-
-      这些日志包含如下信息:RTP 数据包的收发时间和大小、关于网络拥堵状况的反馈,以及与音频和视频帧的时间和质量相关的元数据。在调试 Chrome 中的音频和视频通话问题(例如带宽估算问题)时,这项信息十分有用。这些日志不包含通话中的音频或视频内容。
-
-      这项数据收集操作只能由 Google 的网络服务(例如 Google 环聊或 Google Meet)触发。
-
-      系统可能会依照自助服务终端 ID 将这些日志与 Google 服务自身收集的其他日志建立关联,目的是简化调试操作。
-      </translation>
+      当屏幕即将变暗时,智能调暗模式会评估是否应推迟屏幕变暗时间。如果智能调暗模式推迟了屏幕变暗时间,则会有效延长屏幕的正常工作时长,直到屏幕变暗为止。在这种情况下,系统亦会调整屏幕关闭、屏幕锁定和屏幕闲置的延迟时间,以使它们和屏幕变暗延迟时间之间的差值与原有配置下的差值相同。
+      如果此政策设为 True 或未设置,则系统将启用智能调暗模式,并允许其最大限度地推迟屏幕变暗时间。如果此政策设为 False,则智能调暗模式将不会影响屏幕变暗时间。</translation>
 <translation id="6994082778848658360">指定如何使用板载安全元件硬件提供双重身份验证(如果该硬件与此功能兼容的话)。使用机器电源按钮检测用户是否真实存在。
 
       如果选择“停用”,系统将不会提供任何双重身份验证。
@@ -2432,6 +2438,13 @@
 <translation id="7980227303582973781">无特殊限制</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="802147957407376460">将屏幕旋转 0 度</translation>
+<translation id="8033913082323846868">我们在 M70 中弃用了此政策,请改用 AutofillAddressEnabled 和 AutofillCreditCardEnabled。
+
+      可用于启用 <ph name="PRODUCT_NAME" /> 的“自动填充”功能,并允许用户使用先前存储的信息(例如地址或信用卡信息)自动填写网络表单。
+
+      如果您停用了此设置,用户就无法使用“自动填充”功能。
+
+      如果您启用了此设置或未设置相应值,那么“自动填充”功能仍由用户控制。这样,用户就能配置要自动填充的个人资料,并能自行决定是否要启用/停用“自动填充”功能。</translation>
 <translation id="8044493735196713914">报告设备引导模式</translation>
 <translation id="8050080920415773384">本机打印</translation>
 <translation id="8059164285174960932">远程访问客户端获取身份验证令牌的网址</translation>
@@ -2745,6 +2758,18 @@
 
       如果此政策未设置,则系统将会默认使用 <ph name="PRINTERS_ALLOW_ALL" />。
       </translation>
+<translation id="8938932171964587769">已在 M69 中弃用。请改用 OverrideSecurityRestrictionsOnInsecureOrigin。
+
+      此政策可指定不会将对不安全来源施加的安全性限制应用到哪些来源(网址)或主机名模式(例如“*.example.com”)。
+
+      此政策意在允许相关组织为无法部署传输层安全协议 (TLS) 的旧版应用设置白名单来源,或允许其设置用于开发内部网络的临时服务器以便他们的开发者无需在临时服务器上部署 TLS 就能测试需要安全上下文的功能。此政策还可防止来源被在多功能框中标记为“不安全”。
+
+      在此政策中设置一系列网址与将“--unsafely-treat-insecure-origin-as-secure”命令行标记设为同一系列的网址(以英文逗号分隔)具有同样的效果。如果此政策已设置,则会替换上述命令行标记。
+
+      我们在 M69 中弃用了此政策(改用 OverrideSecurityRestrictionsOnInsecureOrigin)。如果这两项政策都存在,则 OverrideSecurityRestrictionsOnInsecureOrigin 会覆盖此政策。
+
+      有关安全上下文的详情,请访问 https://www.w3.org/TR/secure-contexts/
+      </translation>
 <translation id="8942616385591203339">此政策控制是否可在用户首次登录时向其显示同步同意声明。如果用户从不需要查看同步同意声明,则应将此政策设为 false。
       如果此政策设为 false,系统将不会显示同步同意声明。
       如果此政策设为 true 或未设置,则可以显示同步同意声明。</translation>
@@ -2778,11 +2803,6 @@
 <translation id="9035964157729712237">要从黑名单中排除的扩展程序 ID</translation>
 <translation id="9042911395677044526">允许将要按用户应用的网络配置推送到 <ph name="PRODUCT_OS_NAME" />设备。网络配置是 JSON 格式的字符串,具体定义如 <ph name="ONC_SPEC_URL" /> 中的开放网络配置格式所述。</translation>
 <translation id="9084985621503260744">指定视频活动是否影响电源管理</translation>
-<translation id="9085839450090699752">让您能够设置一个时间段(以毫秒为单位),使系统在此时间段内通知用户必须重新启动 <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" />设备使用 345600000 毫秒(4 天)的默认通知时间段,对浏览器使用 604800000 毫秒(1 周)的默认通知时间段。</translation>
 <translation id="9088433379343318874">启用受监管用户内容提供方</translation>
 <translation id="9088444059179765143">配置自动检测时区方法</translation>
 <translation id="9096086085182305205">身份验证服务器白名单</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index d4f2fb9e..a34655d 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -176,6 +176,13 @@
           <ph name="PROXY_HELP_URL" /></translation>
 <translation id="1502843533062797703">啟用禁止第三方軟體置入可執行程式碼的政策</translation>
 <translation id="1504431521196476721">遠端證明</translation>
+<translation id="1507957856411744193">如果將這項政策設為 True,<ph name="PRODUCT_NAME" /> 會連線至所有 IP 位址上的 Cast 裝置,而不是只有 RFC1918/RFC4193 私人位址上的 Cast 裝置。
+
+          如果將這項政策設為 False,<ph name="PRODUCT_NAME" /> 將只會連線至 RFC1918/RFC4193 私人位址上的 Cast 裝置。
+
+          如果未設定這項政策,除非啟用 CastAllowAllIPs 功能,否則<ph name="PRODUCT_NAME" /> 只會連線至 RFC1918/RFC4193 私人位址上的 Cast 裝置。
+
+          如果將「EnableMediaRouter」政策設為 False,則這項政策的值不會有任何效果。</translation>
 <translation id="1509692106376861764">我們已於 <ph name="PRODUCT_NAME" /> 版本 29 中移除這項政策。</translation>
 <translation id="1514888685242892912">啟用 <ph name="PRODUCT_NAME" /></translation>
 <translation id="1522425503138261032">允許網站追蹤使用者的實際位置</translation>
@@ -349,11 +356,6 @@
 
           如果未設定這項政策,系統將全部採用以上 4 種機制。</translation>
 <translation id="2067011586099792101">禁止存取內容套件以外的網站</translation>
-<translation id="2070270043919235595">通知使用者 <ph name="PRODUCT_NAME" /> 必須重新啟動才能套用待安裝的更新。
-
-      這項政策設定可啟用通知,藉此建議或要求使用者重新啟動瀏覽器。如果不予設定,<ph name="PRODUCT_NAME" /> 會以細微的選單變更讓使用者知道瀏覽器需要重新啟動。如果設為「Recommended」(建議),瀏覽器會定期顯示警告,建議使用者重新啟動。如果不想立即重新啟動,使用者可以關閉這項警告。如果設為「Required」(必要),瀏覽器會定期顯示警告,告知使用者瀏覽器將於通知期過後強制重新啟動。通知期預設為七天,可透過 <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> 政策設定加以設定。
-
-      使用者的工作階段會在瀏覽器重新啟動後恢復。</translation>
 <translation id="2073552873076775140">允許登入 <ph name="PRODUCT_NAME" /></translation>
 <translation id="2077129598763517140">在可用時使用硬體加速</translation>
 <translation id="2077273864382355561">在電池供電環境下執行時的螢幕關閉延遲時間</translation>
@@ -891,7 +893,6 @@
           這項政策是選擇性的,如果未設定,系統將不會提供新分頁。
 
           只有在啟用「DefaultSearchProviderEnabled」時,系統才會遵循這項政策。</translation>
-<translation id="3465852069254497664">透過通知建議或要求使用者重新啟動瀏覽器</translation>
 <translation id="346731943813722404">指定是否延遲管理電源,以及是否在發現工作階段中產生第一個使用者活動後,才開始執行工作階段長度限制。
 
           如果這項政策設為 True,系統會延遲管理電源,並且在發現工作階段中產生第一個使用者活動後,才會開始執行工作階段長度限制。
@@ -1941,6 +1942,7 @@
 
       <ph name="SYNC_DISABLED_POLICY_NAME" /> 政策會停用所有資料同步處理功能,並覆寫 RoamingProfileSupportEnabled。</translation>
 <translation id="6731757988219967594">針對成人內容篩選頂層網站 (但不篩選嵌入的 iframe)</translation>
+<translation id="6734521799274931721">控管是否允許在 Chrome 作業系統使用網路檔案共用功能</translation>
 <translation id="6735701345096330595">強制執行拼字檢查的語言</translation>
 <translation id="673699536430961464">如果啟用這項設定,使用者在登入 <ph name="PRODUCT_OS_NAME" />裝置後,將可在瀏覽器視窗的內容區域中切換 Google 帳戶。
 
@@ -2089,17 +2091,6 @@
 在螢幕即將變暗時,智慧型調光模式會評估是否要延遲螢幕變暗的時間。如果智慧型調光模式決定延遲螢幕變暗的時間,使用時間就會確實延長至螢幕變暗為止。在這種情況下,關閉螢幕、鎖定螢幕和閒置狀態的延遲時間也會隨之調整,以維持原本所設定的相同時間比例。
 
 如果你將這項政策設為 True 或不予設定,系統會啟用智慧型調光模式並允許延長使用時間,直到螢幕變暗為止。如果將這項政策設為 False,智慧型調光模式便無法管理螢幕的調光設定。</translation>
-<translation id="6982028490425791294">
-      如果將這項政策設為 True,<ph name="PRODUCT_NAME" /> 就能從 Google 服務 (例如 Google Meet) 收集 WebRTC 事件記錄,並將這些記錄上傳至 Google。
-
-      如果將這項政策設為 False 或未設定,<ph name="PRODUCT_NAME" /> 就可能不會收集或上傳這類記錄。
-
-      這些記錄包含下列資訊:收發 RTP 封包的時間和大小、網路壅塞情形回報、關於語音及視訊畫格的時間和品質等中繼資料。這項資訊有助於偵錯 Chrome 中的語音或視訊通話問題,例如頻寬預估的問題等。這些記錄不包含通話的語音和視訊內容。
-
-      此資料收集只能由 Google 的網路服務觸發,例如 Google Hangouts 或 Google Meet。
-
-      系統可能會依照工作階段 ID 將這些記錄和 Google 服務本身收集的其他記錄建立關聯,目的是簡化偵錯作業。
-      </translation>
 <translation id="6994082778848658360">如果你安裝的安全元素硬體和雙重驗證功能相容,就可以使用這項政策來指定如何使用該硬體提供雙重驗證功能。裝置的電源鍵會用來偵測使用者是否真實存在。
 
       如果選取 [已停用],系統就不會提供雙重驗證功能。
@@ -2882,11 +2873,6 @@
 <translation id="9035964157729712237">要從黑名單上移除的擴充功能 ID</translation>
 <translation id="9042911395677044526">允許將網路設定按照使用者套用至安裝了 <ph name="PRODUCT_OS_NAME" /> 的裝置。本網路設定是由開放網路設定格式 (網址為:<ph name="ONC_SPEC_URL" />) 所定義的 JSON 格式字串。</translation>
 <translation id="9084985621503260744">指定會影響電源管理的視訊活動</translation>
-<translation id="9085839450090699752">讓你設定時間範圍 (毫秒),系統會在這段時間內通知使用者,<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" />裝置的預設通知時間為 345600000 毫秒 (四天),瀏覽器的預設通知時間則為 604800000 毫秒 (一週)。</translation>
 <translation id="9088433379343318874">啟用受監管的使用者內容提供者</translation>
 <translation id="9088444059179765143">設定自動偵測時區方式</translation>
 <translation id="9096086085182305205">驗證伺服器許可清單</translation>
diff --git a/components/previews/core/previews_experiments.cc b/components/previews/core/previews_experiments.cc
index ee4b2ef..06fd343 100644
--- a/components/previews/core/previews_experiments.cc
+++ b/components/previews/core/previews_experiments.cc
@@ -135,6 +135,15 @@
       60 * 5));
 }
 
+std::vector<std::string> LitePagePreviewsBlacklistedPathSuffixes() {
+  const std::string csv = base::GetFieldTrialParamValueByFeature(
+      features::kLitePageServerPreviews, "blacklisted_path_suffixes");
+  if (csv == "")
+    return {};
+  return base::SplitString(csv, ",", base::TRIM_WHITESPACE,
+                           base::SPLIT_WANT_NONEMPTY);
+}
+
 int PreviewServerLoadshedMaxSeconds() {
   return base::GetFieldTrialParamByFeatureAsInt(
       features::kLitePageServerPreviews, "loadshed_max_seconds",
diff --git a/components/previews/core/previews_experiments.h b/components/previews/core/previews_experiments.h
index cc694b55..33359a0 100644
--- a/components/previews/core/previews_experiments.h
+++ b/components/previews/core/previews_experiments.h
@@ -95,6 +95,10 @@
 // The duration of a single bypass for Lite Page Server Previews.
 base::TimeDelta LitePagePreviewsSingleBypassDuration();
 
+// A list of all path suffixes to blacklist from Lite Page Server Previews.
+// Primarily used to prohibit URLs that look like media requests.
+std::vector<std::string> LitePagePreviewsBlacklistedPathSuffixes();
+
 // The maximum number of seconds to loadshed the Previews server for.
 int PreviewServerLoadshedMaxSeconds();
 
diff --git a/components/resources/components_resources.grd b/components/resources/components_resources.grd
index acbb344c..d3789ba 100644
--- a/components/resources/components_resources.grd
+++ b/components/resources/components_resources.grd
@@ -17,6 +17,7 @@
       <part file="neterror_resources.grdp" />
       <part file="ntp_tiles_resources.grdp" />
       <if expr="is_win">
+        <part file="nux_email.grdp" />
         <part file="nux_google_apps.grdp" />
       </if>
       <part file="offline_pages_resources.grdp" />
diff --git a/components/resources/nux_email.grdp b/components/resources/nux_email.grdp
new file mode 100644
index 0000000..cacd63dd
--- /dev/null
+++ b/components/resources/nux_email.grdp
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+  <include name="IDR_NUX_EMAIL_HTML" file="../nux/email/resources/nux_email.html" type="BINDATA" />
+</grit-part>
diff --git a/components/services/font/BUILD.gn b/components/services/font/BUILD.gn
index a6ce90a..72419c9 100644
--- a/components/services/font/BUILD.gn
+++ b/components/services/font/BUILD.gn
@@ -15,6 +15,8 @@
   sources = [
     "font_service_app.cc",
     "font_service_app.h",
+    "fontconfig_matching.cc",
+    "fontconfig_matching.h",
   ]
 
   deps = [
@@ -24,6 +26,7 @@
     "//mojo/public/cpp/system",
     "//ppapi/buildflags:buildflags",
     "//services/service_manager/public/cpp",
+    "//third_party/fontconfig",
     "//ui/gfx",
   ]
 
@@ -51,7 +54,6 @@
       "//base:base",
       "//ppapi/buildflags:buildflags",
       "//ppapi/c",
-      "//third_party/fontconfig",
     ]
   }
 }
diff --git a/components/services/font/font_loader_test.cc b/components/services/font/font_loader_test.cc
index 4425736..512043aa 100644
--- a/components/services/font/font_loader_test.cc
+++ b/components/services/font/font_loader_test.cc
@@ -232,4 +232,102 @@
 #endif
 }
 
+TEST_F(FontLoaderTest, LocalMatching) {
+  // The following fonts are ensured to be available by the test harnesses
+  // global FontConfig setup which makes the fonts in third_party/test_fonts
+  // available. (See SetUpFontConfig() in TestSuite::Initialize().
+  std::string postscript_names_test_fonts[] = {"Ahem",
+                                               "Arimo-Bold",
+                                               "Arimo-BoldItalic",
+                                               "Arimo-Italic",
+                                               "Arimo-Regular",
+                                               "Cousine-Bold",
+                                               "Cousine-BoldItalic",
+                                               "Cousine-Italic",
+                                               "Cousine-Regular",
+                                               "DejaVuSans",
+                                               "DejaVuSans-Bold",
+                                               "GardinerModBug",
+                                               "GardinerModCat",
+                                               "Garuda",
+                                               "Gelasio-Bold",
+                                               "Gelasio-BoldItalic",
+                                               "Gelasio-Italic",
+                                               "Gelasio-Regular",
+                                               "Lohit-Devanagari",
+                                               "Lohit-Gurmukhi",
+                                               "Lohit-Tamil",
+                                               "NotoSansKhmer-Regular",
+                                               "Tinos-Bold",
+                                               "Tinos-BoldItalic",
+                                               "Tinos-Italic",
+                                               "Tinos-Regular",
+                                               "muktinarrow"};
+  std::string full_font_names_test_fonts[] = {"Ahem",
+                                              "Arimo Bold Italic",
+                                              "Arimo Bold",
+                                              "Arimo Italic",
+                                              "Arimo Regular",
+                                              "Cousine Bold Italic",
+                                              "Cousine Bold",
+                                              "Cousine Italic",
+                                              "Cousine Regular",
+                                              "DejaVu Sans Bold",
+                                              "DejaVu Sans",
+                                              "GardinerMod",
+                                              "Garuda",
+                                              "Gelasio Bold Italic",
+                                              "Gelasio Bold",
+                                              "Gelasio Italic",
+                                              "Gelasio Regular",
+                                              "Lohit Devanagari",
+                                              "Lohit Gurmukhi",
+                                              "Lohit Tamil",
+                                              "Mukti",
+                                              "Mukti Narrow",
+                                              "Noto Sans Khmer Regular",
+                                              "Tinos Bold Italic",
+                                              "Tinos Bold",
+                                              "Tinos Italic",
+                                              "Tinos Regular"};
+
+  auto match_unique_names = [this](auto& font_list) {
+    for (auto unique_font_name : font_list) {
+      mojom::FontIdentityPtr font_identity;
+      EXPECT_TRUE(font_loader()->MatchFontByPostscriptNameOrFullFontName(
+          unique_font_name, &font_identity));
+      EXPECT_FALSE(font_identity.is_null());
+      EXPECT_TRUE(
+          IsInTestFontDirectory(font_identity->str_representation.c_str()));
+    }
+  };
+  match_unique_names(full_font_names_test_fonts);
+  match_unique_names(postscript_names_test_fonts);
+}
+
+TEST_F(FontLoaderTest, LocalMatchingExpectNoMatchForFamilyNames) {
+  std::string family_names_expect_no_match[] = {"Arimo", "Cousine",   "Gelasio",
+                                                "Lohit", "Noto Sans", "Tinos"};
+  for (auto& family_name : family_names_expect_no_match) {
+    mojom::FontIdentityPtr font_identity;
+    EXPECT_FALSE(font_loader()->MatchFontByPostscriptNameOrFullFontName(
+        family_name, &font_identity));
+    EXPECT_TRUE(font_identity.is_null());
+  }
+}
+
+TEST_F(FontLoaderTest, RejectNonUtf8) {
+  const char* invalid_utf8_font_names[] = {
+      // Trailing U+FDD0 U+FDD1 U+FDD2 U+FDD3
+      "FontNameWithNonCharacters\xEF\xB7\x90\x20\xEF\xB7\x91\x20\xEF\xB7"
+      "\x92\x20\xEF\xB7\x93",
+      "InvalidBytes\xfe\xff"};
+  for (std::string invalid_font_name : invalid_utf8_font_names) {
+    mojom::FontIdentityPtr font_identity;
+    EXPECT_FALSE(font_loader()->MatchFontByPostscriptNameOrFullFontName(
+        invalid_font_name, &font_identity));
+    EXPECT_TRUE(font_identity.is_null());
+  }
+}
+
 }  // namespace font_service
diff --git a/components/services/font/font_service_app.cc b/components/services/font/font_service_app.cc
index aae40ebc..86ad6077 100644
--- a/components/services/font/font_service_app.cc
+++ b/components/services/font/font_service_app.cc
@@ -10,6 +10,7 @@
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "build/build_config.h"
+#include "components/services/font/fontconfig_matching.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "ppapi/buildflags/buildflags.h"
 #include "services/service_manager/public/cpp/service_context.h"
@@ -203,6 +204,21 @@
   std::move(callback).Run(std::move(font_render_style));
 }
 
+void FontServiceApp::MatchFontByPostscriptNameOrFullFontName(
+    const std::string& family,
+    MatchFontByPostscriptNameOrFullFontNameCallback callback) {
+  base::Optional<FontConfigLocalMatching::FontConfigMatchResult> match_result =
+      FontConfigLocalMatching::FindFontByPostscriptNameOrFullFontName(family);
+  if (match_result) {
+    mojom::FontIdentityPtr font_identity = mojom::FontIdentityPtr(
+        mojom::FontIdentity::New(0, match_result->ttc_index,
+                                 match_result->file_path.AsUTF8Unsafe()));
+    std::move(callback).Run(std::move(font_identity));
+    return;
+  }
+  std::move(callback).Run(nullptr);
+}
+
 void FontServiceApp::MatchFontWithFallback(
     const std::string& family,
     bool is_bold,
diff --git a/components/services/font/font_service_app.h b/components/services/font/font_service_app.h
index 9256a46..6456a37f 100644
--- a/components/services/font/font_service_app.h
+++ b/components/services/font/font_service_app.h
@@ -50,6 +50,9 @@
       bool bold,
       float device_scale_factor,
       FontRenderStyleForStrikeCallback callback) override;
+  void MatchFontByPostscriptNameOrFullFontName(
+      const std::string& family,
+      MatchFontByPostscriptNameOrFullFontNameCallback callback) override;
   void MatchFontWithFallback(const std::string& family,
                              bool is_bold,
                              bool is_italic,
diff --git a/components/services/font/fontconfig_matching.cc b/components/services/font/fontconfig_matching.cc
new file mode 100644
index 0000000..0f8bc78c
--- /dev/null
+++ b/components/services/font/fontconfig_matching.cc
@@ -0,0 +1,106 @@
+// 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/services/font/fontconfig_matching.h"
+
+#include <fontconfig/fontconfig.h>
+#include "base/files/file.h"
+#include "base/posix/eintr_wrapper.h"
+#include "base/strings/string_util.h"
+
+#include <memory>
+
+namespace font_service {
+
+base::Optional<FontConfigLocalMatching::FontConfigMatchResult>
+FontConfigLocalMatching::FindFontByPostscriptNameOrFullFontName(
+    const std::string& font_name) {
+  // TODO(crbug.com/876652): This FontConfig-backed implementation will
+  // match PostScript and full font name in any language, and we're okay
+  // with that for now since it is what FireFox does.
+  base::Optional<FontConfigLocalMatching::FontConfigMatchResult>
+      postscript_result =
+          FindFontBySpecifiedName(FC_POSTSCRIPT_NAME, font_name);
+  if (postscript_result)
+    return postscript_result;
+
+  return FindFontBySpecifiedName(FC_FULLNAME, font_name);
+}
+
+base::Optional<FontConfigLocalMatching::FontConfigMatchResult>
+FontConfigLocalMatching::FindFontBySpecifiedName(
+    const char* fontconfig_parameter_name,
+    const std::string& font_name) {
+  DCHECK(std::string(fontconfig_parameter_name) == std::string(FC_FULLNAME) ||
+         std::string(fontconfig_parameter_name) ==
+             std::string(FC_POSTSCRIPT_NAME));
+
+  if (!base::IsStringUTF8(font_name))
+    return base::nullopt;
+
+  std::unique_ptr<FcPattern, void (*)(FcPattern*)> pattern(FcPatternCreate(),
+                                                           FcPatternDestroy);
+  const FcChar8* fc_font_name =
+      reinterpret_cast<const FcChar8*>(font_name.c_str());
+
+  // TODO(crbug.com/876652): We do not restrict the language that we match
+  // FC_POSTSCRIPT_NAME or FC_FULLNAME against. Pending spec clarification, see
+  // bug.
+  FcPatternAddString(pattern.get(), fontconfig_parameter_name, fc_font_name);
+
+  FcPatternAddBool(pattern.get(), FC_SCALABLE, true);
+
+  std::unique_ptr<FcObjectSet, void (*)(FcObjectSet*)> object_set(
+      FcObjectSetCreate(), FcObjectSetDestroy);
+  FcObjectSetAdd(object_set.get(), "file");
+  FcObjectSetAdd(object_set.get(), "index");
+
+  std::unique_ptr<FcFontSet, void (*)(FcFontSet*)> font_set(
+      FcFontList(nullptr, pattern.get(), object_set.get()), FcFontSetDestroy);
+
+  if (!font_set || !font_set->nfont)
+    return base::nullopt;
+
+  FcPattern* current = font_set->fonts[0];
+
+  FcChar8* c_filename;
+  if (FcPatternGetString(current, FC_FILE, 0, &c_filename) != FcResultMatch)
+    return base::nullopt;
+
+  // We only want to return sfnt (TrueType) based fonts. We don't have a
+  // very good way of detecting this so we'll filter based on the
+  // filename.
+  bool is_sfnt = false;
+  static const char kSFNTExtensions[][5] = {".ttf", ".otc", ".TTF", ".ttc", ""};
+  for (size_t j = 0;; j++) {
+    if (kSFNTExtensions[j][0] == 0) {
+      // None of the extensions matched.
+      break;
+    }
+    if (base::EndsWith(std::string(reinterpret_cast<char*>(c_filename)),
+                       kSFNTExtensions[j], base::CompareCase::SENSITIVE)) {
+      is_sfnt = true;
+      break;
+    }
+  }
+
+  if (!is_sfnt)
+    return base::nullopt;
+
+  base::FilePath font_file_path(reinterpret_cast<const char*>(c_filename));
+  base::File verify_file_exists(font_file_path,
+                                base::File::FLAG_OPEN | base::File::FLAG_READ);
+  if (!verify_file_exists.IsValid())
+    return base::nullopt;
+
+  int ttc_index = 0;
+  FcPatternGetInteger(current, FC_INDEX, 0, &ttc_index);
+  if (ttc_index < 0)
+    return base::nullopt;
+  FontConfigMatchResult match_result;
+  match_result.file_path = font_file_path;
+  match_result.ttc_index = ttc_index;
+  return match_result;
+}
+}  // namespace font_service
diff --git a/components/services/font/fontconfig_matching.h b/components/services/font/fontconfig_matching.h
new file mode 100644
index 0000000..19069c2b
--- /dev/null
+++ b/components/services/font/fontconfig_matching.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.
+
+#ifndef COMPONENTS_SERVICES_FONT_FONTCONFIG_MATCHING_H_
+#define COMPONENTS_SERVICES_FONT_FONTCONFIG_MATCHING_H_
+
+#include "base/files/file_path.h"
+#include "base/optional.h"
+
+namespace font_service {
+// Searches FontConfig for a system font uniquely identified by full font name
+// or postscript name. The matching algorithm tries to match both. Used for
+// matching @font-face { src: local() } references in Blink.
+class FontConfigLocalMatching {
+ public:
+  struct FontConfigMatchResult {
+    base::FilePath file_path;
+    unsigned ttc_index;
+  };
+
+  static base::Optional<FontConfigMatchResult>
+  FindFontByPostscriptNameOrFullFontName(const std::string& font_name);
+
+ private:
+  static base::Optional<FontConfigMatchResult> FindFontBySpecifiedName(
+      const char* fontconfig_parameter_name,
+      const std::string& font_name);
+};
+
+}  // namespace font_service
+
+#endif
diff --git a/components/services/font/public/cpp/font_loader.cc b/components/services/font/public/cpp/font_loader.cc
index 4974393..7fca697 100644
--- a/components/services/font/public/cpp/font_loader.cc
+++ b/components/services/font/public/cpp/font_loader.cc
@@ -92,6 +92,13 @@
                                            out_font_render_style);
 }
 
+bool FontLoader::MatchFontByPostscriptNameOrFullFontName(
+    std::string postscript_name_or_full_font_name,
+    mojom::FontIdentityPtr* out_identity) {
+  return thread_->MatchFontByPostscriptNameOrFullFontName(
+      std::move(postscript_name_or_full_font_name), out_identity);
+}
+
 void FontLoader::MatchFontWithFallback(std::string family,
                                        bool is_bold,
                                        bool is_italic,
diff --git a/components/services/font/public/cpp/font_loader.h b/components/services/font/public/cpp/font_loader.h
index 4eebdea..34695af 100644
--- a/components/services/font/public/cpp/font_loader.h
+++ b/components/services/font/public/cpp/font_loader.h
@@ -68,6 +68,13 @@
       bool is_bold,
       float device_scale_factor,
       mojom::FontRenderStylePtr* out_font_render_style);
+
+  // Out parameters are only guaranteed to be initialized when method returns
+  // true.
+  bool MatchFontByPostscriptNameOrFullFontName(
+      std::string postscript_name_or_full_font_name,
+      mojom::FontIdentityPtr* out_identity);
+
   // Out parameter out_font_file_handle should always be an opened file handle
   // to a matched or default font file. out_font_file_handle is a default
   // initialized base::File on error.
diff --git a/components/services/font/public/cpp/font_service_thread.cc b/components/services/font/public/cpp/font_service_thread.cc
index b4f3aa4..d18ed96 100644
--- a/components/services/font/public/cpp/font_service_thread.cc
+++ b/components/services/font/public/cpp/font_service_thread.cc
@@ -88,6 +88,22 @@
   return out_valid;
 }
 
+bool FontServiceThread::MatchFontByPostscriptNameOrFullFontName(
+    std::string postscript_name_or_full_font_name,
+    mojom::FontIdentityPtr* out_identity) {
+  DCHECK_NE(GetThreadId(), base::PlatformThread::CurrentId());
+  bool out_valid = false;
+  base::WaitableEvent done_event;
+  task_runner()->PostTask(
+      FROM_HERE,
+      base::BindOnce(
+          &FontServiceThread::MatchFontByPostscriptNameOrFullFontNameImpl, this,
+          &done_event, &out_valid, std::move(postscript_name_or_full_font_name),
+          out_identity));
+  done_event.Wait();
+  return out_valid;
+}
+
 void FontServiceThread::MatchFontWithFallback(
     std::string family,
     bool is_bold,
@@ -133,7 +149,6 @@
 }
 
 FontServiceThread::~FontServiceThread() {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   Stop();
 }
 
@@ -308,6 +323,42 @@
   done_event->Signal();
 }
 
+void FontServiceThread::MatchFontByPostscriptNameOrFullFontNameImpl(
+    base::WaitableEvent* done_event,
+    bool* out_valid,
+    std::string postscript_name_or_full_font_name,
+    mojom::FontIdentityPtr* out_font_identity) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  if (font_service_.encountered_error()) {
+    *out_valid = false;
+    done_event->Signal();
+    return;
+  }
+
+  pending_waitable_events_.insert(done_event);
+  font_service_->MatchFontByPostscriptNameOrFullFontName(
+      std::move(postscript_name_or_full_font_name),
+      base::BindOnce(
+          &FontServiceThread::OnMatchFontByPostscriptNameOrFullFontNameComplete,
+          this, done_event, out_valid, out_font_identity));
+}
+
+void FontServiceThread::OnMatchFontByPostscriptNameOrFullFontNameComplete(
+    base::WaitableEvent* done_event,
+    bool* out_valid,
+    mojom::FontIdentityPtr* out_font_identity,
+    mojom::FontIdentityPtr font_identity) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  pending_waitable_events_.erase(done_event);
+
+  *out_valid = !font_identity.is_null();
+  if (font_identity) {
+    *out_font_identity = std::move(font_identity);
+  }
+  done_event->Signal();
+}
+
 void FontServiceThread::MatchFontWithFallbackImpl(
     base::WaitableEvent* done_event,
     std::string family,
diff --git a/components/services/font/public/cpp/font_service_thread.h b/components/services/font/public/cpp/font_service_thread.h
index 865c587..186a904 100644
--- a/components/services/font/public/cpp/font_service_thread.h
+++ b/components/services/font/public/cpp/font_service_thread.h
@@ -60,6 +60,9 @@
       bool is_bold,
       float device_scale_factor,
       font_service::mojom::FontRenderStylePtr* out_font_render_style);
+  bool MatchFontByPostscriptNameOrFullFontName(
+      std::string postscript_name_or_full_font_name,
+      mojom::FontIdentityPtr* out_identity);
   void MatchFontWithFallback(std::string family,
                              bool is_bold,
                              bool is_italic,
@@ -140,6 +143,17 @@
       mojom::FontRenderStylePtr* out_font_render_style,
       mojom::FontRenderStylePtr font_render_style);
 
+  void MatchFontByPostscriptNameOrFullFontNameImpl(
+      base::WaitableEvent* done_event,
+      bool* out_valid,
+      std::string postscript_name_or_full_font_name,
+      mojom::FontIdentityPtr* out_font_identity);
+  void OnMatchFontByPostscriptNameOrFullFontNameComplete(
+      base::WaitableEvent* done_event,
+      bool* out_valid,
+      mojom::FontIdentityPtr* out_font_identity,
+      mojom::FontIdentityPtr font_identity);
+
   void MatchFontWithFallbackImpl(base::WaitableEvent* done_event,
                                  std::string family,
                                  bool is_bold,
diff --git a/components/services/font/public/interfaces/font_service.mojom b/components/services/font/public/interfaces/font_service.mojom
index 346499f..bfbc96b3 100644
--- a/components/services/font/public/interfaces/font_service.mojom
+++ b/components/services/font/public/interfaces/font_service.mojom
@@ -83,6 +83,13 @@
     float device_scale_factor) =>
     (FontRenderStyle? font_render_style);
 
+  // Matches a font uniquely by postscript name or full font name.
+  // Used in Blink for @font-face { src: local(arg) } matching.
+  // Provide full_postscript_name_or_full_font_name encoded as UTF-8.
+  MatchFontByPostscriptNameOrFullFontName(
+      string postscript_name_or_full_font_name) =>
+    (FontIdentity? identity);
+
   // PPAPI Specific font call to match a font family and charset.
   MatchFontWithFallback(string family, bool is_bold, bool is_italic,
       uint32 charset, uint32 fallback_family_type) =>
diff --git a/components/services/pdf_compositor/pdf_compositor_impl.cc b/components/services/pdf_compositor/pdf_compositor_impl.cc
index 2e32764..d0a0d26 100644
--- a/components/services/pdf_compositor/pdf_compositor_impl.cc
+++ b/components/services/pdf_compositor/pdf_compositor_impl.cc
@@ -237,12 +237,7 @@
   return mojom::PdfCompositor::Status::SUCCESS;
 }
 
-sk_sp<SkPicture> PdfCompositorImpl::CompositeSubframe(uint64_t frame_guid) {
-  // The content of this frame should be available.
-  auto iter = frame_info_map_.find(frame_guid);
-  DCHECK(iter != frame_info_map_.end());
-
-  std::unique_ptr<FrameInfo>& frame_info = iter->second;
+void PdfCompositorImpl::CompositeSubframe(FrameInfo* frame_info) {
   frame_info->composited = true;
 
   // Composite subframes first.
@@ -250,11 +245,10 @@
       GetDeserializationContext(frame_info->subframe_content_map);
 
   // Composite the entire frame.
-  SkMemoryStream stream(iter->second->serialized_content->memory(),
-                        iter->second->serialized_content->mapped_size());
+  SkMemoryStream stream(frame_info->serialized_content->memory(),
+                        frame_info->serialized_content->mapped_size());
   SkDeserialProcs procs = DeserializationProcs(&subframes);
-  iter->second->content = SkPicture::MakeFromStream(&stream, &procs);
-  return iter->second->content;
+  frame_info->content = SkPicture::MakeFromStream(&stream, &procs);
 }
 
 PdfCompositorImpl::DeserializationContext
@@ -268,9 +262,10 @@
     if (iter == frame_info_map_.end())
       continue;
 
-    subframes[content_id] = iter->second->composited
-                                ? iter->second->content
-                                : CompositeSubframe(iter->first);
+    FrameInfo* frame_info = iter->second.get();
+    if (!frame_info->composited)
+      CompositeSubframe(frame_info);
+    subframes[content_id] = frame_info->content;
   }
   return subframes;
 }
diff --git a/components/services/pdf_compositor/pdf_compositor_impl.h b/components/services/pdf_compositor/pdf_compositor_impl.h
index cc6218b..12c8d317 100644
--- a/components/services/pdf_compositor/pdf_compositor_impl.h
+++ b/components/services/pdf_compositor/pdf_compositor_impl.h
@@ -166,7 +166,7 @@
       base::ReadOnlySharedMemoryRegion* region);
 
   // Composite the content of a subframe.
-  sk_sp<SkPicture> CompositeSubframe(uint64_t frame_guid);
+  void CompositeSubframe(FrameInfo* frame_info);
 
   DeserializationContext GetDeserializationContext(
       const ContentToFrameMap& subframe_content_map);
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index 8fa076a..6f220257 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />ኩኪዎችዎን ማጽዳት ይሞክሩ<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">የተመረጠው ክፍለ-ጊዜ የለም።</translation>
 <translation id="1323433172918577554">ተጨማሪ አሳይ</translation>
-<translation id="132390688737681464">አድራሻዎችን አስቀምጥ እና ሙላ</translation>
 <translation id="1333989956347591814">የእርስዎ እንቅስቃሴ ለሚከተሉት <ph name="BEGIN_EMPHASIS" />አሁንም የሚታይ ሊሆን ይችላል<ph name="END_EMPHASIS" />፦
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />እርስዎ የሚጎበኟቸው ድር ጣቢያዎች
@@ -112,7 +111,6 @@
 <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="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" />ን አስመስሎ ለመቅረብ ሲሞክር ነው ወይም አንድ የWi-Fi መግቢያ ገጽ ግንኙነቱን ሲያቋረጥ ሊከሰት ይችላል። Google Chrome ማንኛውም የውሂብ ልውውጥ ከመካሄዱ በፊት ግንኙነቱን ስላቋረጠው የእርስዎ መረጃ ደህንነት  አሁንም የተጠበቀ ነው።</translation>
 <translation id="168841957122794586">የአገልጋይ እውቅና ማረጋገጫው ደካማ የሆነ ባለስውር መረጃ ቁልፍ ነው ያለው።</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">ይህ ዋጋ ለዚህ መመሪያ ተቋርጧል።</translation>
 <translation id="2262243747453050782">የኤች ቲ ቲ ፒ ስህተት</translation>
 <translation id="2270484714375784793">ስልክ ቁጥር</translation>
-<translation id="2283340219607151381">አድራሻዎችን አስቀምጥ እና ሙላ</translation>
 <translation id="2292556288342944218">የእርስዎ የበየነመረብ መዳረሻ ታግዷል</translation>
 <translation id="2316887270356262533">እስከ 1 ሜባ ቦታ ድረስ ያስለቅቃል። አንዳንድ ጣቢያዎች በሚቀጥለው ጉብኝትዎ ላይ ይበልጥ በዝግታ ሊጫኑ ይችላሉ።</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> የተጠቃሚ ስም እና የይለፍ ቃል ያስፈልገዋል።</translation>
@@ -862,7 +859,6 @@
 <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>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 7173725..4509f37 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />جرّب محو ملفات تعريف الارتباط<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">الجلسة المختارة غير موجودة.</translation>
 <translation id="1323433172918577554">إظهار مزيد من الأقسام</translation>
-<translation id="132390688737681464">حفظ العناوين وملؤها</translation>
 <translation id="1333989956347591814">قد يظل <ph name="BEGIN_EMPHASIS" />نشاطك مرئيًا<ph name="END_EMPHASIS" /> للجهات التالية:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />مواقع الويب التي تزورها
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">بروتوكول غير معتمد</translation>
 <translation id="1655462015569774233">{1,plural, =1{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه أمس. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}zero{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه منذ # يوم. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}two{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه منذ يومين (#). ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}few{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه منذ # أيام. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}many{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه منذ # يومًا. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}other{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه منذ # يوم. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}}</translation>
 <translation id="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" />، أو إذا قاطعت شاشة تسجيل دخول Wi-Fi الاتصال. ولكن لا تزال معلوماتك آمنة نظرًا لأن Google Chrome أوقَف الاتصال قبل تبادل أي بيانات.</translation>
 <translation id="168841957122794586">تحتوي شهادة الخادم على مفتاح تشفير ضعيف.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">تم تجاهل القيمة لهذه السياسة.</translation>
 <translation id="2262243747453050782">‏خطأ HTTP</translation>
 <translation id="2270484714375784793">رقم الهاتف</translation>
-<translation id="2283340219607151381">حفظ العناوين وملؤها</translation>
 <translation id="2292556288342944218">تم حظر دخولك إلى الإنترنت</translation>
 <translation id="2316887270356262533">يوفِّر أقل من 1 ميغابايت. وقد يتم تحميل بعض المواقع بشكل أبطأ عند زيارتها في المرة القادمة.</translation>
 <translation id="2317259163369394535">يتطلَّب <ph name="DOMAIN" /> اسم مستخدم وكلمة مرور.</translation>
@@ -863,7 +860,6 @@
 <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" /> أخرى}two{<ph name="PAYMENT_METHOD_PREVIEW" /> وطريقتا دفع <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> أخريان}few{<ph name="PAYMENT_METHOD_PREVIEW" /> و<ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> طرق دفع أخرى}many{<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" /> آخر}two{<ph name="SHIPPING_OPTION_PREVIEW" /> وخياران (<ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />) آخران}few{<ph name="SHIPPING_OPTION_PREVIEW" /> و<ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> خيارات أخرى}many{<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>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index 7e5561d..5ecdf56 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Опитайте да изчистите „бисквитките“ си<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Избраната сесия не съществува.</translation>
 <translation id="1323433172918577554">Показване на още</translation>
-<translation id="132390688737681464">Запазване и попълване на адреси</translation>
 <translation id="1333989956347591814">Активността ви <ph name="BEGIN_EMPHASIS" />може да остане видима<ph name="END_EMPHASIS" /> за:
 <ph name="BEGIN_LIST" />
 <ph name="LIST_ITEM" />уебсайтовете, които посещавате;
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Неподдържан протокол</translation>
 <translation id="1655462015569774233">{1,plural, =1{Сървърът не можа да докаже, че е <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" /> или връзката е прекъсната от екран за вход в Wi-Fi. Информацията ви продължава да е защитена, тъй като Chrome спря връзката, преди да бъдат обменени данни.</translation>
 <translation id="168841957122794586">Сертификатът на сървъра съдържа слаб криптографски ключ.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Стойността е оттеглена за това правило.</translation>
 <translation id="2262243747453050782">HTTP грешка</translation>
 <translation id="2270484714375784793">Телефонен номер</translation>
-<translation id="2283340219607151381">Запазване и попълване на адреси</translation>
 <translation id="2292556288342944218">Достъпът ви до интернет е блокиран</translation>
 <translation id="2316887270356262533">Ще освободите по-малко от 1 МБ. Някои сайтове може да се заредят по-бавно при следващото ви посещение.</translation>
 <translation id="2317259163369394535">Изискват се потребителско име и парола за <ph name="DOMAIN" />.</translation>
@@ -863,7 +860,6 @@
 <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" />}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" />}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>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 815e6c3..aa17078 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />আপনার কুকিজ সাফ করে দেখুন<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">বেছে নেওয়া সেশনটির অস্তিত্ব নেই।</translation>
 <translation id="1323433172918577554">আরও দেখুন</translation>
-<translation id="132390688737681464">অ্যাড্রেসগুলি পূরণ করে সেভ করুন</translation>
 <translation id="1333989956347591814">এগুলিতে আপনার অ্যাক্টিভিটি <ph name="BEGIN_EMPHASIS" />এখনও দেখা যেতে পারে<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />যে ওয়েবসাইট আপনি দেখেছেন
@@ -111,7 +110,6 @@
 <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="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>
@@ -197,7 +195,6 @@
 <translation id="225207911366869382">এই মান এই নীতির জন্য অসমর্থিত হয়েছে৷</translation>
 <translation id="2262243747453050782">HTTP ত্রুটি</translation>
 <translation id="2270484714375784793">ফোন নম্বর</translation>
-<translation id="2283340219607151381">অ্যাড্রেস পূরণ করে সেভ করুন</translation>
 <translation id="2292556288342944218">আপনার ইন্টারনেট অ্যাক্সেস অবরুদ্ধ করা হয়েছে</translation>
 <translation id="2316887270356262533">১ MB এর চেয়ে কম জায়গা খালি করে। পরের বার যখন দেখবেন তখন কিছু সাইট লোড হতে দেরি হতে পারে।</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> এর জন্য একটি ইউজারনেম এবং পাসওয়ার্ড প্রয়োজন।</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index f1d728a8..04d5c4fc 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Esborreu les galetes<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">La sessió seleccionada no existeix.</translation>
 <translation id="1323433172918577554">Mostra'n més</translation>
-<translation id="132390688737681464">Desa i emplena les adreces</translation>
 <translation id="1333989956347591814">És possible que la teva activitat <ph name="BEGIN_EMPHASIS" />continuï sent visible<ph name="END_EMPHASIS" /> en:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Els llocs web que visitis
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protocol no admès</translation>
 <translation id="1655462015569774233">{1,plural, =1{Aquest servidor no ha pogut demostrar que sigui <ph name="DOMAIN" /> perquè el seu certificat de seguretat va caducar ahir. Això pot ser a causa d'una configuració incorrecta o d'un atacant que intercepta la vostra connexió. Actualment, el rellotge del vostre ordinador està configurat amb la data <ph name="CURRENT_DATE" />. És correcta? Si no ho és, corregiu el rellotge del sistema i, a continuació, actualitzeu aquesta pàgina.}other{Aquest servidor no ha pogut demostrar que sigui <ph name="DOMAIN" /> perquè el seu certificat va caducar fa # dies. Això pot ser a causa d'una configuració incorrecta o d'un atacant que intercepta la vostra connexió. Actualment, el rellotge del vostre ordinador està configurat amb la data <ph name="CURRENT_DATE" />. És correcta? Si no ho és, corregiu el rellotge del sistema i, a continuació, actualitzeu aquesta pàgina.}}</translation>
 <translation id="1656489000284462475">Recollida</translation>
-<translation id="1662550410081243962">Desa i emplena les formes de pagament</translation>
 <translation id="1663943134801823270">Les targetes i les adreces s'obtenen de Chrome. Pots gestionar-les des de <ph name="BEGIN_LINK" />Configuració<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> utilitza normalment l'encriptació per protegir la vostra informació. En aquesta ocasió, quan Google Chrome ha provat de connectar-se a <ph name="SITE" />, el lloc web ha enviat credencials poc comunes i incorrectes. Pot ser que un atacant estigui provant de fer-se passar per <ph name="SITE" /> o que una pantalla d'inici de sessió a la xarxa Wi-Fi hagi interromput la connexió. En qualsevol cas, la vostra informació continua estant segura, perquè Google Chrome ha aturat la connexió abans no s'intercanviés cap dada.</translation>
 <translation id="168841957122794586">El certificat de servidor conté una clau criptogràfica dèbil.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">El valor d'aquesta política és obsolet.</translation>
 <translation id="2262243747453050782">Error d'HTTP</translation>
 <translation id="2270484714375784793">Número de telèfon</translation>
-<translation id="2283340219607151381">Desa i emplena les adreces</translation>
 <translation id="2292556288342944218">El vostre accés a Internet està bloquejat</translation>
 <translation id="2316887270356262533">Allibera menys d'1 MB. És possible que alguns llocs web es carreguin més a poc a poc la propera vegada que els visitis.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> requereix un nom d'usuari i una contrasenya.</translation>
@@ -691,7 +688,7 @@
 <translation id="5689199277474810259">Exporta a JSON</translation>
 <translation id="5689516760719285838">Ubicació</translation>
 <translation id="570530837424789914">Gestiona...</translation>
-<translation id="5705882733397021510">Torna</translation>
+<translation id="5705882733397021510">Enrere</translation>
 <translation id="57094364128775171">Suggereix una contrasenya segura…</translation>
 <translation id="5710435578057952990">La identitat d'aquest lloc web no ha estat verificada.</translation>
 <translation id="5719499550583120431">S'accepten targetes de prepagament.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> i <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> més}other{<ph name="PAYMENT_METHOD_PREVIEW" /> i <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> més}}</translation>
 <translation id="717330890047184534">Identificador de Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> i <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> més}other{<ph name="SHIPPING_OPTION_PREVIEW" /> i <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> més}}</translation>
-<translation id="7179323680825933600">Desa i emplena les formes de pagament</translation>
 <translation id="7180611975245234373">Actualitza</translation>
 <translation id="7182878459783632708">Cap política definida</translation>
 <translation id="7186367841673660872">Aquesta pàgina s'ha traduït de:<ph name="ORIGINAL_LANGUAGE" />a:<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index f812448..18f956e 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Zkuste vymazat soubory cookie<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Vybraná relace neexistuje.</translation>
 <translation id="1323433172918577554">Zobrazit více</translation>
-<translation id="132390688737681464">Ukládat a vyplňovat adresy</translation>
 <translation id="1333989956347591814">Vaše aktivita <ph name="BEGIN_EMPHASIS" />může být nadále viditelná<ph name="END_EMPHASIS" /> pro následující subjekty:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />navštívené weby,
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Nepodporovaný protokol</translation>
 <translation id="1655462015569774233">{1,plural, =1{Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Platnost jeho bezpečnostního certifikátu včera vypršela. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník. Hodiny ve vašem počítači jsou aktuálně nastaveny na <ph name="CURRENT_DATE" />. Je to správně? Pokud ne, měli byste nastavit správné hodiny systému a poté tuto stránku načíst znovu.}few{Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Platnost jeho bezpečnostního certifikátu vypršela před # dny. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník. Hodiny ve vašem počítači jsou aktuálně nastaveny na <ph name="CURRENT_DATE" />. Je to správně? Pokud ne, měli byste čas v počítači opravit a poté tuto stránku načíst znovu.}many{Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Platnost jeho bezpečnostního certifikátu vypršela před # dnem. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník. Hodiny ve vašem počítači jsou aktuálně nastaveny na <ph name="CURRENT_DATE" />. Je to správně? Pokud ne, měli byste nastavit správné hodiny systému a poté tuto stránku načíst znovu.}other{Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Platnost jeho bezpečnostního certifikátu vypršela před # dny. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník. Hodiny ve vašem počítači jsou aktuálně nastaveny na <ph name="CURRENT_DATE" />. Je to správně? Pokud ne, měli byste nastavit správné hodiny systému a poté tuto stránku načíst znovu.}}</translation>
 <translation id="1656489000284462475">Vyzvednutí</translation>
-<translation id="1662550410081243962">Ukládat a vyplňovat platební metody</translation>
 <translation id="1663943134801823270">Karty a adresy pocházejí z Chromu. Můžete je spravovat v <ph name="BEGIN_LINK" />Nastavení<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Web <ph name="SITE" /> vaše informace běžně chrání šifrováním. Když se prohlížeč Chrome k webu <ph name="SITE" /> pokusil připojit tentokrát, web vrátil neobvyklé a nesprávné identifikační údaje. K tomuto problému může dojít, pokud se za web <ph name="SITE" /> pokouší vydávat nějaký útočník nebo pokud bylo připojení přerušeno přihlašovací obrazovkou sítě Wi-Fi. Vaše informace jsou i nadále v bezpečí, protože prohlížeč Google Chrome připojení přerušil dříve, než došlo k odeslání jakýchkoliv dat.</translation>
 <translation id="168841957122794586">Certifikát serveru obsahuje slabý kryptografický klíč.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Tato hodnota již pro tuto zásadu není podporována.</translation>
 <translation id="2262243747453050782">Chyba protokolu HTTP</translation>
 <translation id="2270484714375784793">Telefonní číslo</translation>
-<translation id="2283340219607151381">Ukládat a vyplňovat adresy</translation>
 <translation id="2292556288342944218">Vaše připojení k internetu je blokováno</translation>
 <translation id="2316887270356262533">Uvolní více než 1 MB. Je možné, že se některé weby při příští návštěvě budou načítat pomaleji.</translation>
 <translation id="2317259163369394535">Doména <ph name="DOMAIN" /> vyžaduje zadání uživatelského jména a hesla.</translation>
@@ -858,7 +855,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> další}few{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> další}many{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> další}other{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> dalších}}</translation>
 <translation id="717330890047184534">ID Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> další}few{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> další}many{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> další}other{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> dalších}}</translation>
-<translation id="7179323680825933600">Ukládat a vyplňovat platební metody</translation>
 <translation id="7180611975245234373">Obnovit</translation>
 <translation id="7182878459783632708">Nebyly nastaveny žádné zásady</translation>
 <translation id="7186367841673660872">Tato stránka byla přeložena z jazyka<ph name="ORIGINAL_LANGUAGE" />do jazyka<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 1290171..d71b7b23 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Prøv at rydde dine cookies<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Den valgte session findes ikke.</translation>
 <translation id="1323433172918577554">Se flere</translation>
-<translation id="132390688737681464">Gem og udfyld adresser</translation>
 <translation id="1333989956347591814">Din aktivitet <ph name="BEGIN_EMPHASIS" />er muligvis stadig synlig<ph name="END_EMPHASIS" /> for:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Websites, du besøger
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Ikke-understøttet protokol</translation>
 <translation id="1655462015569774233">{1,plural, =1{Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da dens sikkerhedscertifikat udløb i går. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse. Computerens ur er angivet til <ph name="CURRENT_DATE" />. Er det korrekt? Hvis ikke, skal du rette systemets ur og derefter opdatere denne side.}one{Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da dens sikkerhedscertifikat udløb for # dag siden. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse. Computerens ur er angivet til <ph name="CURRENT_DATE" />. Er det korrekt? Hvis ikke, skal du rette systemets ur og derefter opdatere denne side.}other{Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da dens sikkerhedscertifikat udløb for # dage siden. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse. Computerens ur er angivet til <ph name="CURRENT_DATE" />. Er det korrekt? Hvis ikke, skal du rette systemets ur og derefter opdatere denne side.}}</translation>
 <translation id="1656489000284462475">Afhentning</translation>
-<translation id="1662550410081243962">Gem og udfyld betalingsmetoder</translation>
 <translation id="1663943134801823270">Kort og adresser er fra Chrome. Du kan administrere dem i <ph name="BEGIN_LINK" />Indstillinger<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> bruger normalt kryptering til at beskytte dine oplysninger. Da Google Chrome forsøgte at oprette forbindelse til <ph name="SITE" /> denne gang, returnerede websitet usædvanlige og forkerte legitimationsoplysninger. Dette kan skyldes, at en hacker forsøger at udgive sig for at være <ph name="SITE" />, eller at en Wi-Fi-loginskærm har forstyrret forbindelsen. Dine oplysninger er stadig sikre, idet Google Chrome afbrød forbindelsen, inden der blev udvekslet data.</translation>
 <translation id="168841957122794586">Servercertifikatet indeholder en svag kryptografisk nøgle.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Denne værdi er forældet for denne politik.</translation>
 <translation id="2262243747453050782">HTTP-fejl</translation>
 <translation id="2270484714375784793">Telefonnummer</translation>
-<translation id="2283340219607151381">Gem og udfyld adresser</translation>
 <translation id="2292556288342944218">Din internetadgang er blokeret</translation>
 <translation id="2316887270356262533">Frigiver over 1 MB. Nogle websites indlæses muligvis langsommere under dit næste besøg.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> kræver et brugernavn og en adgangskode.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> anden}one{<ph name="PAYMENT_METHOD_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> anden}other{<ph name="PAYMENT_METHOD_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> andre}}</translation>
 <translation id="717330890047184534">Gaia-id:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> anden}one{<ph name="SHIPPING_OPTION_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> anden}other{<ph name="SHIPPING_OPTION_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> andre}}</translation>
-<translation id="7179323680825933600">Gem og udfyld betalingsmetoder</translation>
 <translation id="7180611975245234373">Opdater</translation>
 <translation id="7182878459783632708">Ingen politikker er indstillet</translation>
 <translation id="7186367841673660872">Denne side er oversat fra<ph name="ORIGINAL_LANGUAGE" />til<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index b29a738..e7c1417 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Löschen Sie Ihre Cookies<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Die ausgewählte Sitzung existiert nicht.</translation>
 <translation id="1323433172918577554">Mehr anzeigen</translation>
-<translation id="132390688737681464">Adressen speichern und ausfüllen</translation>
 <translation id="1333989956347591814">Ihre Aktivitäten <ph name="BEGIN_EMPHASIS" />sind eventuell weiterhin sichtbar<ph name="END_EMPHASIS" /> für:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Von Ihnen besuchte Websites
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Nicht unterstütztes Protokoll</translation>
 <translation id="1655462015569774233">{1,plural, =1{Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat ist gestern abgelaufen. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt. Die Uhr Ihres Computers ist derzeit auf <ph name="CURRENT_DATE" /> eingestellt. Ist das korrekt? Falls nicht, stellen Sie die Uhr Ihres Systems richtig ein und aktualisieren Sie anschließend diese Seite.}other{Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat ist vor # Tagen abgelaufen. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt. Die Uhr Ihres Computers ist derzeit auf <ph name="CURRENT_DATE" /> eingestellt. Ist das korrekt? Falls nicht, stellen Sie die Uhr Ihres Systems richtig ein und aktualisieren Sie anschließend diese Seite.}}</translation>
 <translation id="1656489000284462475">Abholung</translation>
-<translation id="1662550410081243962">Zahlungsmethode speichern und ausfüllen</translation>
 <translation id="1663943134801823270">Die Karten und Adressen stammen aus Chrome. Sie werden in den <ph name="BEGIN_LINK" />Einstellungen<ph name="END_LINK" /> verwaltet.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> schützt Ihre Daten in der Regel durch Verschlüsselung. Als Google Chrome dieses Mal versuchte, eine Verbindung zu <ph name="SITE" /> herzustellen, gab die Website ungewöhnliche und falsche Anmeldedaten zurück. Entweder versucht ein Angreifer, sich als <ph name="SITE" /> auszugeben, oder die Verbindung wurde durch eine WLAN-Anmeldeseite unterbrochen. Da Google Chrome die Verbindung vor dem Austausch von Daten unterbrochen hat, sind Ihre Informationen weiterhin sicher.</translation>
 <translation id="168841957122794586">Das Serverzertifikat weist einen schwachen kryptografischen Schlüssel auf.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Dieser Wert für die Richtlinie ist veraltet.</translation>
 <translation id="2262243747453050782">HTTP-Fehler</translation>
 <translation id="2270484714375784793">Telefonnummer</translation>
-<translation id="2283340219607151381">Adressen speichern und ausfüllen</translation>
 <translation id="2292556288342944218">Ihre Internetverbindung ist gesperrt</translation>
 <translation id="2316887270356262533">Es werden weniger als 1 MB Speicherplatz freigegeben. Manche Websites werden beim nächsten Öffnen eventuell langsamer geladen.</translation>
 <translation id="2317259163369394535">Für <ph name="DOMAIN" /> sind ein Nutzername und ein Passwort erforderlich.</translation>
@@ -862,7 +859,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> und <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> weitere}other{<ph name="PAYMENT_METHOD_PREVIEW" /> und <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> weitere}}</translation>
 <translation id="717330890047184534">GAIA-ID:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> und <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> weitere}other{<ph name="SHIPPING_OPTION_PREVIEW" /> und <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> weitere}}</translation>
-<translation id="7179323680825933600">Zahlungsmethoden speichern und ausfüllen</translation>
 <translation id="7180611975245234373">Aktualisieren</translation>
 <translation id="7182878459783632708">Keine Richtlinien festgelegt</translation>
 <translation id="7186367841673660872">Diese Seite wurde von<ph name="ORIGINAL_LANGUAGE" />in<ph name="LANGUAGE_LANGUAGE" />übersetzt.</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 32021a3d2..8e0e030d 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Δοκιμάστε να διαγράψετε τα cookie σας<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Η επιλεγμένη περίοδος λειτουργίας δεν υπάρχει.</translation>
 <translation id="1323433172918577554">Εμφάνιση περισσότερων</translation>
-<translation id="132390688737681464">Αποθήκευση και συμπλήρωση διευθύνσεων</translation>
 <translation id="1333989956347591814">Η δραστηριότητά σας <ph name="BEGIN_EMPHASIS" />μπορεί να εξακολουθήσει να είναι ορατή<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Στους ιστοτόπους που επισκέπτεστε
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Μη υποστηριζόμενο πρωτόκολλο</translation>
 <translation id="1655462015569774233">{1,plural, =1{Αυτός ο διακομιστής δεν μπόρεσε να αποδείξει ότι είναι το <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" /> ή όταν κάποια οθόνη σύνδεσης Wi-Fi έχει διακόψει τη σύνδεσή σας. Τα στοιχεία σας εξακολουθούν να είναι ασφαλή επειδή το Google Chrome διέκοψε τη σύνδεση πριν από την ανταλλαγή δεδομένων.</translation>
 <translation id="168841957122794586">Το πιστοποιητικό διακομιστή περιέχει ένα αδύναμο κρυπτογραφικό κλειδί.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Αυτή η πολιτική έχει καταργηθεί για τη συγκεκριμένη πολιτική.</translation>
 <translation id="2262243747453050782">Σφάλμα HTTP</translation>
 <translation id="2270484714375784793">Αριθμός τηλεφώνου</translation>
-<translation id="2283340219607151381">Αποθήκευση και συμπλήρωση διευθύνσεων</translation>
 <translation id="2292556288342944218">Η πρόσβασή σας στο διαδίκτυο είναι αποκλεισμένη</translation>
 <translation id="2316887270356262533">Απελευθερώνει λιγότερο από 1 MB. Ορισμένοι ιστότοποι μπορεί να φορτωθούν πιο αργά κατά την επόμενη επίσκεψή σας.</translation>
 <translation id="2317259163369394535">Ο τομέας <ph name="DOMAIN" /> απαιτεί ένα όνομα χρήστη και έναν κωδικό πρόσβασης.</translation>
@@ -564,7 +561,7 @@
 <translation id="4854362297993841467">Αυτός ο τρόπος παράδοσης δεν είναι διαθέσιμος. Δοκιμάστε έναν άλλο τρόπο.</translation>
 <translation id="4858792381671956233">Ρώτησες τους γονείς σου εάν σου επιτρέπουν να επισκεφτείς αυτόν τον ιστότοπο</translation>
 <translation id="4876305945144899064">Δεν υπάρχει όνομα χρήστη</translation>
-<translation id="4879491255372875719">Αυτόματος (προεπιλογή)</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>
@@ -864,7 +861,6 @@
 <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" /> ακόμη}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" /> ακόμη}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>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index c11bec1..b92faa94b 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Try clearing your cookies<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">The selected session does not exist.</translation>
 <translation id="1323433172918577554">Show More</translation>
-<translation id="132390688737681464">Save and Fill Addresses</translation>
 <translation id="1333989956347591814">Your activity <ph name="BEGIN_EMPHASIS" />might still be visible<ph name="END_EMPHASIS" /> to:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Websites that you visit
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Unsupported protocol</translation>
 <translation id="1655462015569774233">{1,plural, =1{This server could not prove that it is <ph name="DOMAIN" />; its security certificate expired yesterday. This may be caused by a misconfiguration or an attacker intercepting your connection. Your computer's clock is currently set to <ph name="CURRENT_DATE" />. Does that look right? If not, you should correct your system's clock and then refresh this page.}other{This server could not prove that it is <ph name="DOMAIN" />; its security certificate expired # days ago. This may be caused by a misconfiguration or an attacker intercepting your connection. Your computer's clock is currently set to <ph name="CURRENT_DATE" />. Does that look right? If not, you should correct your system's clock and then refresh this page.}}</translation>
 <translation id="1656489000284462475">Pick up</translation>
-<translation id="1662550410081243962">Save and fill payment methods</translation>
 <translation id="1663943134801823270">Cards and addresses are from Chrome. You can manage them in <ph name="BEGIN_LINK" />Settings<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> normally uses encryption to protect your information. When Google Chrome tried to connect to <ph name="SITE" /> this time, the website sent back unusual and incorrect credentials. This may happen when an attacker is trying to pretend to be <ph name="SITE" />, or a Wi-Fi sign-in screen has interrupted the connection. Your information is still secure because Google Chrome stopped the connection before any data was exchanged.</translation>
 <translation id="168841957122794586">The server certificate contains a weak cryptographic key.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">This value is deprecated for this policy.</translation>
 <translation id="2262243747453050782">HTTP error</translation>
 <translation id="2270484714375784793">Phone number</translation>
-<translation id="2283340219607151381">Save and fill addresses</translation>
 <translation id="2292556288342944218">Your Internet access is blocked</translation>
 <translation id="2316887270356262533">Frees up less than 1 MB. Some sites may load more slowly on your next visit.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> requires a username and password.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> and <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> more}other{<ph name="PAYMENT_METHOD_PREVIEW" /> and <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> more}}</translation>
 <translation id="717330890047184534">Gaia ID:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> and <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> more}other{<ph name="SHIPPING_OPTION_PREVIEW" /> and <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> more}}</translation>
-<translation id="7179323680825933600">Save and fill payment methods</translation>
 <translation id="7180611975245234373">Refresh</translation>
 <translation id="7182878459783632708">No policies set</translation>
 <translation id="7186367841673660872">This page has been translated from<ph name="ORIGINAL_LANGUAGE" />to<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index dc7cd2a6..05d8893 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Intenta borrar tus cookies<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">La sesión seleccionada no existe.</translation>
 <translation id="1323433172918577554">Mostrar más</translation>
-<translation id="132390688737681464">Guardar y completar direcciones</translation>
 <translation id="1333989956347591814">Es posible que tu actividad <ph name="BEGIN_EMPHASIS" />todavía sea visible<ph name="END_EMPHASIS" /> para:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Los sitios web que visitas
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protocolo no compatible</translation>
 <translation id="1655462015569774233">{1,plural, =1{El servidor no logró comprobar si el dominio es <ph name="DOMAIN" />; el certificado de seguridad venció ayer. Es posible que esto se deba a una configuración incorrecta o a que un atacante haya interceptado la conexión. Actualmente, el reloj de la computadora está configurado en la siguiente fecha: <ph name="CURRENT_DATE" />. ¿Es correcto? De no ser así, corrige el reloj del sistema y, a continuación, actualiza la página.}other{El servidor no logró comprobar si el dominio es <ph name="DOMAIN" />; el certificado de seguridad venció hace # días. Es posible que esto se deba a una configuración incorrecta o a que un atacante haya interceptado la conexión. Actualmente, el reloj de la computadora está configurado en la siguiente fecha: <ph name="CURRENT_DATE" />. ¿Es correcto? De no ser así, corrige el reloj del sistema y, a continuación, actualiza la página.}}</translation>
 <translation id="1656489000284462475">Retiro</translation>
-<translation id="1662550410081243962">Guardar y completar formas de pago</translation>
 <translation id="1663943134801823270">Las tarjetas y direcciones provienen de Chrome. Puedes administrarlas en <ph name="BEGIN_LINK" />Configuración<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> suele utilizar la encriptación para proteger la información. Cuando Google Chrome intentó conectarse a <ph name="SITE" />, el sitio web devolvió credenciales incorrectas y poco comunes. Es posible que un atacante quiera suplantar a <ph name="SITE" /> o que una pantalla de acceso Wi-Fi haya interrumpido la conexión. Tu información permanece segura porque Google Chrome detuvo la conexión para evitar el intercambio de datos.</translation>
 <translation id="168841957122794586">El certificado del servidor contiene una clave criptográfica no segura.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Este valor ya no se utiliza para esta política.</translation>
 <translation id="2262243747453050782">Error de HTTP</translation>
 <translation id="2270484714375784793">Número de teléfono</translation>
-<translation id="2283340219607151381">Guardar y completar direcciones</translation>
 <translation id="2292556288342944218">Se bloqueó tu acceso a Internet</translation>
 <translation id="2316887270356262533">Esta acción libera menos de 1 MB. Es posible que algunos sitios se carguen más lento en tu próxima visita.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> requiere un nombre de usuario y una contraseña.</translation>
@@ -864,7 +861,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> más}other{<ph name="PAYMENT_METHOD_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> más}}</translation>
 <translation id="717330890047184534">ID de GAIA:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}other{<ph name="SHIPPING_OPTION_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}}</translation>
-<translation id="7179323680825933600">Guardar y completar formas de pago</translation>
 <translation id="7180611975245234373">Actualizar</translation>
 <translation id="7182878459783632708">No hay políticas establecidas.</translation>
 <translation id="7186367841673660872">Esta página se tradujo de<ph name="ORIGINAL_LANGUAGE" />a<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 3b5f309..6fea947 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Borrar las cookies<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">La sesión seleccionada no existe.</translation>
 <translation id="1323433172918577554">Mostrar más</translation>
-<translation id="132390688737681464">Guardar y autocompletar direcciones</translation>
 <translation id="1333989956347591814">Es posible que tu actividad <ph name="BEGIN_EMPHASIS" />todavía sea visible<ph name="END_EMPHASIS" /> para:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Los sitios web que visites
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protocolo no admitido</translation>
 <translation id="1655462015569774233">{1,plural, =1{Este servidor no ha podido demostrar que es <ph name="DOMAIN" />; su certificado de seguridad caducó ayer. Este problema puede deberse a una configuración incorrecta o a que un atacante ha interceptado la conexión. El reloj de tu ordenador está establecido actualmente en las <ph name="CURRENT_DATE" />. ¿Es correcto? Si no lo es, corrige el reloj del sistema y, a continuación, actualiza esta página.}other{Este servidor no ha podido demostrar que es <ph name="DOMAIN" />; su certificado de seguridad caducó hace # días. Este problema puede deberse a una configuración incorrecta o a que un atacante ha interceptado la conexión. El reloj de tu ordenador está establecido actualmente en las <ph name="CURRENT_DATE" />. ¿Es correcto? Si no lo es, corrige el reloj del sistema y, a continuación, actualiza esta página.}}</translation>
 <translation id="1656489000284462475">Recogida</translation>
-<translation id="1662550410081243962">Guardar y autocompletar métodos de pago</translation>
 <translation id="1663943134801823270">Las tarjetas y las direcciones proceden de Chrome. Puedes gestionarlas en <ph name="BEGIN_LINK" />Configuración<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> utiliza normalmente el cifrado para proteger tu información. Cuando Google Chrome intentó establecer conexión con <ph name="SITE" />, el sitio web devolvió unas credenciales inusuales e incorrectas. Esto puede ocurrir si un atacante intenta suplantar la identidad de <ph name="SITE" /> o si una pantalla de inicio de sesión Wi-Fi interrumpe la conexión. Tu información sigue estando protegida, ya que Google Chrome detuvo la conexión antes de que se intercambiaran datos.</translation>
 <translation id="168841957122794586">El certificado del servidor contiene una clave criptográfica no segura.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Este valor ya no se utiliza para esta política.</translation>
 <translation id="2262243747453050782">Error de HTTP</translation>
 <translation id="2270484714375784793">Número de teléfono</translation>
-<translation id="2283340219607151381">Guardar y autocompletar direcciones</translation>
 <translation id="2292556288342944218">Tu acceso a Internet está bloqueado</translation>
 <translation id="2316887270356262533">Libera menos de 1 MB. Algunos sitios web pueden tardar más en cargarse la próxima vez que accedas a ellos.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> necesita un nombre de usuario y una contraseña.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> más}other{<ph name="PAYMENT_METHOD_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> más}}</translation>
 <translation id="717330890047184534">ID de GAIA:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}other{<ph name="SHIPPING_OPTION_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}}</translation>
-<translation id="7179323680825933600">Guardar y autocompletar métodos de pago</translation>
 <translation id="7180611975245234373">Actualizar</translation>
 <translation id="7182878459783632708">No hay políticas establecidas.</translation>
 <translation id="7186367841673660872">Esta página se ha traducido del<ph name="ORIGINAL_LANGUAGE" />al<ph name="LANGUAGE_LANGUAGE" />.</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 6c6e2af..4922305 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Kustutage küpsisefailid<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Valitud seanssi ei ole olemas.</translation>
 <translation id="1323433172918577554">Kuva rohkem</translation>
-<translation id="132390688737681464">Salvesta ja sisesta aadressid</translation>
 <translation id="1333989956347591814">Teie tegevused <ph name="BEGIN_EMPHASIS" />võivad siiski olla nähtavad<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />teie külastatud veebisaitidele;
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Toetuseta protokoll</translation>
 <translation id="1655462015569774233">{1,plural, =1{Server ei suutnud tõestada, et tegemist on domeeniga <ph name="DOMAIN" />, selle turvasertifikaat aegus eile. Selle põhjuseks võib olla vale seadistus või teie ühendust segav ründaja. Teie arvuti kell on praegu seatud kuupäevale <ph name="CURRENT_DATE" />. Kas see on õige? Kui ei ole, seadke süsteemi kell õigeks ja värskendage lehte.}other{Server ei suutnud tõestada, et tegemist on domeeniga <ph name="DOMAIN" />, selle turvasertifikaat aegus # päeva tagasi. Selle põhjuseks võib olla vale seadistus või teie ühendust segav ründaja. Teie arvuti kell on praegu seatud kuupäevale <ph name="CURRENT_DATE" />. Kas see on õige? Kui ei ole, seadke süsteemi kell õigeks ja värskendage lehte.}}</translation>
 <translation id="1656489000284462475">Kättesaamine</translation>
-<translation id="1662550410081243962">Salvesta ja sisesta makseviisid</translation>
 <translation id="1663943134801823270">Kaardid ja aadressid pärinevad Chrome'ist. Neid saate hallata menüüs <ph name="BEGIN_LINK" />Seaded<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Sait <ph name="SITE" /> kasutab teie teabe kaitsmiseks tavaliselt krüpteerimist. Kui Google Chrome püüdis seekord saidiga <ph name="SITE" /> ühendust luua, tagastas veebisait ebatavalised ja valed mandaadid. See võib juhtuda siis, kui ründaja proovib teeselda, et on sait <ph name="SITE" />, või WiFi sisselogimisekraan on ühenduse katkestanud. Teie teave on endiselt kaitstud, sest Google Chrome peatas ühenduse enne andmevahetust.</translation>
 <translation id="168841957122794586">Serveri sertifikaat sisaldab nõrka krüptograafilist võtit.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Väärtus on eeskirjade jaoks aegunud.</translation>
 <translation id="2262243747453050782">HTTP viga</translation>
 <translation id="2270484714375784793">Telefoninumber</translation>
-<translation id="2283340219607151381">Salvesta ja sisesta aadressid</translation>
 <translation id="2292556288342944218">Teie juurdepääs Internetile on blokeeritud</translation>
 <translation id="2316887270356262533">Vabastab alla 1 MB. Mõne saidi laadimine võib järgmisel külastusel rohkem aega võtta.</translation>
 <translation id="2317259163369394535">Domeen <ph name="DOMAIN" /> nõuab kasutajanime ja parooli.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> ja veel <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> ja veel <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">Gaia ID:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> ja veel <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> ja veel <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Salvesta ja sisesta makseviisid</translation>
 <translation id="7180611975245234373">Värskenda</translation>
 <translation id="7182878459783632708">Reegleid pole määratud</translation>
 <translation id="7186367841673660872">See leht on tõlgitud keelest<ph name="ORIGINAL_LANGUAGE" />keelde<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 95edc069..95f5726 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />کوکی‌ها را پاک کنید<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">جلسه انتخاب‌شده موجود نیست.</translation>
 <translation id="1323433172918577554">نمایش موارد بیشتر</translation>
-<translation id="132390688737681464">ذخیره و تکمیل نشانی</translation>
 <translation id="1333989956347591814">فعالیت شما <ph name="BEGIN_EMPHASIS" />ممکن است در موارد زیر قابل‌رؤیت باشد<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />در وب‌سایت‌هایی که بازدید می‌کنید
@@ -112,7 +111,6 @@
 <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="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" /> معمولاً برای محافظت از اطلاعات شما از رمزگذاری استفاده می‌کند. اما این بار که Chrome تلاش کرد به <ph name="SITE" /> متصل شود، وب‌سایت اعتبارنامه‌ای نامعمول و نادرست را برگرداند. ممکن است مهاجمی در تلاش باشد خود را به‌جای <ph name="SITE" /> معرفی کند یا یک صفحه ورود به سیستم Wi-Fi در ارتباط اختلال ایجاد کرده باشد. اطلاعات شما همچنان ایمن است، زیرا Google Chrome قبل از هرگونه تبادل داده، اتصال را متوقف کرد.</translation>
 <translation id="168841957122794586">گواهی‌نامه سرور دارای یک کلید رمزنگاری ضعیف است.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">این مقدار برای این خط‌مشی منسوخ شده است؟</translation>
 <translation id="2262243747453050782">‏خطای HTTP</translation>
 <translation id="2270484714375784793">شماره تلفن</translation>
-<translation id="2283340219607151381">ذخیره و تکمیل نشانی</translation>
 <translation id="2292556288342944218">دسترسی شما به اینترنت مسدود است</translation>
 <translation id="2316887270356262533">کمتر از ۱ مگابایت از فضا را آزاد می‌کند. ممکن است برخی از سایت‌ها در بازدیدهای بعدی کندتر بارگیری شوند.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> به نام کاربری و گذرواژه نیاز دارد.</translation>
@@ -863,7 +860,6 @@
 <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>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index 2c7ac982..697bbbc 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Tyhjennä evästeet.<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Valittua käyttökertaa ei ole olemassa.</translation>
 <translation id="1323433172918577554">Näytä lisää</translation>
-<translation id="132390688737681464">Tallenna ja täytä osoitteet</translation>
 <translation id="1333989956347591814">Toimintasi <ph name="BEGIN_EMPHASIS" />saattaa silti näkyä<ph name="END_EMPHASIS" />
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />käymillesi verkkosivustoille
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protokollaa ei tueta</translation>
 <translation id="1655462015569774233">{1,plural, =1{Palvelin ei voinut todistaa olevansa <ph name="DOMAIN" />; sen suojausvarmenne vanhentui eilen. Tämä voi johtua määritysvirheestä tai verkkoyhteytesi siepanneesta hyökkääjästä. Tietokoneesi kellonaika on tällä hetkellä <ph name="CURRENT_DATE" />. Onko se oikein? Jos ei, korjaa järjestelmän kellonaika ja päivitä sivu.}other{Palvelin ei voinut todistaa olevansa <ph name="DOMAIN" />; sen suojausvarmenne vanhentui # päivää sitten. Tämä voi johtua määritysvirheestä tai verkkoyhteytesi siepanneesta hyökkääjästä. Tietokoneesi kellonaika on tällä hetkellä <ph name="CURRENT_DATE" />. Onko se oikein? Jos ei, korjaa järjestelmän kellonaika ja päivitä sivu.}}</translation>
 <translation id="1656489000284462475">Noutoaika</translation>
-<translation id="1662550410081243962">Tallenna ja täytä maksutavat</translation>
 <translation id="1663943134801823270">Kortit ja osoitteet ovat peräisin Chromesta. Voit hallinnoida niitä <ph name="BEGIN_LINK" />asetuksissa<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> suojaa tietosi normaalisti salauksen avulla. Kun Chrome yritti tällä kertaa yhdistää sivustoon <ph name="SITE" />, sivusto palautti epätavalliset ja virheelliset kirjautumistiedot. Hyökkääjä saattaa yrittää esiintyä sivustona <ph name="SITE" />, tai Wi-Fi-kirjautumisruutu on keskeyttänyt yhteyden. Tietosi ovat edelleen turvassa, sillä Google Chrome katkaisi yhteyden, ennen kuin mitään tietoja vaihdettiin.</translation>
 <translation id="168841957122794586">Palvelinvarmenne sisältää heikon salausavaimen.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Tämän käytännön arvo on vanhentunut.</translation>
 <translation id="2262243747453050782">HTTP-virhe</translation>
 <translation id="2270484714375784793">Puhelinnumero</translation>
-<translation id="2283340219607151381">Tallenna ja täytä osoitteet</translation>
 <translation id="2292556288342944218">Internetyhteytesi on estetty</translation>
 <translation id="2316887270356262533">Vapauttaa alle 1 Mt. Jotkin sivustot saattavat latautua hitaammin seuraavalla käynnillä.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> pyytää käyttäjänimeä ja salasanaa.</translation>
@@ -864,7 +861,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> ja <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> toinen}other{<ph name="PAYMENT_METHOD_PREVIEW" /> ja <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> muuta}}</translation>
 <translation id="717330890047184534">Gaia-tunnus:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> ja <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> toinen}other{<ph name="SHIPPING_OPTION_PREVIEW" /> ja <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> muuta}}</translation>
-<translation id="7179323680825933600">Tallenna ja täytä maksutavat</translation>
 <translation id="7180611975245234373">Päivitä</translation>
 <translation id="7182878459783632708">Käytäntöjä ei ole asetettu</translation>
 <translation id="7186367841673660872">Tämä sivu on käännetty kielestä<ph name="ORIGINAL_LANGUAGE" />kielelle<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index cf78e57..c968267 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Subukang i-clear ang iyong cookies<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Hindi umiiral ang piniling session.</translation>
 <translation id="1323433172918577554">Magpakita Nang Higit Pa</translation>
-<translation id="132390688737681464">I-save at Punan ang Mga Address</translation>
 <translation id="1333989956347591814">Ang iyong aktibidad <ph name="BEGIN_EMPHASIS" />ay maaari pa ring makita<ph name="END_EMPHASIS" /> ng:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Mga binibisita mong website
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Hindi sinusuportahang protocol</translation>
 <translation id="1655462015569774233">{1,plural, =1{Hindi mapatunayan ng server na ito na ito ang <ph name="DOMAIN" />; nag-expire na ang certificate ng seguridad nito kahapon. Maaaring resulta ito ng maling configuration o kaya ng isang attacker na humahadlang sa iyong koneksyon. Sa kasalukuyan, nakatakda ang orasan ng iyong computer sa <ph name="CURRENT_DATE" />. Mukha bang tama iyon? Kung hindi, dapat mong ayusin ang orasan ng iyong system at pagkatapos ay i-refresh ang page na ito.}one{Hindi mapatunayan ng server na ito na ito ang <ph name="DOMAIN" />; nag-expire na ang certificate ng seguridad nito # araw na ang nakalipas. Maaaring resulta ito ng maling configuration o kaya ng isang attacker na humahadlang sa iyong koneksyon. Sa kasalukuyan, nakatakda ang orasan ng iyong computer sa <ph name="CURRENT_DATE" />. Mukha bang tama iyon? Kung hindi, dapat mong ayusin ang orasan ng iyong system at pagkatapos ay i-refresh ang page na ito.}other{Hindi mapatunayan ng server na ito na ito ang <ph name="DOMAIN" />; nag-expire na ang certificate ng seguridad nito # na araw na ang nakalipas. Maaaring resulta ito ng maling configuration o kaya ng isang attacker na humahadlang sa iyong koneksyon. Sa kasalukuyan, nakatakda ang orasan ng iyong computer sa <ph name="CURRENT_DATE" />. Mukha bang tama iyon? Kung hindi, dapat mong ayusin ang orasan ng iyong system at pagkatapos ay i-refresh ang page na ito.}}</translation>
 <translation id="1656489000284462475">I-pick up</translation>
-<translation id="1662550410081243962">I-save at punan ang mga paraan ng pagbabayad</translation>
 <translation id="1663943134801823270">Ang mga card at address ay mula sa Chrome. Maaari mong pamahalaan ang mga ito sa <ph name="BEGIN_LINK" />Mga Setting<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Karaniwang gumagamit ang <ph name="SITE" /> ng pag-encrypt upang protektahan ang iyong impormasyon. Noong sinubukang kumonekta ng Chrome sa <ph name="SITE" /> sa pagkakataong ito, nagbalik ang website ng mga hindi pangkaraniwan at maling kredensyal. Maaari itong mangyari kapag sinusubukan ng isang attacker na magpanggap bilang <ph name="SITE" />, o naputol ang koneksyon dahil sa isang screen ng pag-sign in sa Wi-Fi. Secure pa rin ang iyong impormasyon dahil inihinto ng Google Chrome ang koneksyon bago magkaroon ng palitan ng anumang data.</translation>
 <translation id="168841957122794586">Naglalaman ang server certificate ng isang mahinang cryptographic key.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Hindi na gimagamit ang halagang ito para sa patakarang ito.</translation>
 <translation id="2262243747453050782">Error sa HTTP</translation>
 <translation id="2270484714375784793">Numero ng telepono</translation>
-<translation id="2283340219607151381">I-save at punan ang mga address</translation>
 <translation id="2292556288342944218">Naka-block ang iyong access sa Internet</translation>
 <translation id="2316887270356262533">Magbabakante ng wala pang 1 MB. Maaaring mag-load nang mas mabagal ang ilang site sa iyong susunod na pagbisita.</translation>
 <translation id="2317259163369394535">Kailangan ng <ph name="DOMAIN" /> ng username at password.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> at <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> pa}one{<ph name="PAYMENT_METHOD_PREVIEW" /> at <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> pa}other{<ph name="PAYMENT_METHOD_PREVIEW" /> at <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> pa}}</translation>
 <translation id="717330890047184534">Gaia ID:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> at <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> pa}one{<ph name="SHIPPING_OPTION_PREVIEW" /> at <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> pa}other{<ph name="SHIPPING_OPTION_PREVIEW" /> at <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> pa}}</translation>
-<translation id="7179323680825933600">I-save at Punan ang Mga Paraan ng Pagbabayad</translation>
 <translation id="7180611975245234373">I-refresh</translation>
 <translation id="7182878459783632708">Walang nakatakdang mga patakaran</translation>
 <translation id="7186367841673660872">Naisalin ang pahinang ito mula sa<ph name="ORIGINAL_LANGUAGE" />sa<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 7a42e12..1b6eefc 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Essayez de supprimer les cookies.<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">La session sélectionnée n'existe pas.</translation>
 <translation id="1323433172918577554">Afficher plus</translation>
-<translation id="132390688737681464">Enregistrer et renseigner les adresses</translation>
 <translation id="1333989956347591814">Votre activité <ph name="BEGIN_EMPHASIS" />peut rester visible<ph name="END_EMPHASIS" /> par :
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Les sites Web que vous consultez
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protocole incompatible</translation>
 <translation id="1655462015569774233">{1,plural, =1{Impossible de vérifier que ce serveur est bien <ph name="DOMAIN" />, car son certificat de sécurité a expiré hier. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique. L'horloge de votre ordinateur indique actuellement : <ph name="CURRENT_DATE" />. Cela vous semble-t-il correct ? Si ce n'est pas le cas, vous devez corriger l'horloge de votre système, puis actualiser la page.}one{Impossible de vérifier que ce serveur est bien <ph name="DOMAIN" />, car son certificat de sécurité a expiré il y a # jour. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique. L'horloge de votre ordinateur indique actuellement : <ph name="CURRENT_DATE" />. Cela vous semble-t-il correct ? Si ce n'est pas le cas, vous devez corriger l'horloge de votre système, puis actualiser la page.}other{Impossible de vérifier que ce serveur est bien <ph name="DOMAIN" />, car son certificat de sécurité a expiré il y a # jours. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique. L'horloge de votre ordinateur indique actuellement : <ph name="CURRENT_DATE" />. Cela vous semble-t-il correct ? Si ce n'est pas le cas, vous devez corriger l'horloge de votre système, puis actualiser la page.}}</translation>
 <translation id="1656489000284462475">Enlèvement</translation>
-<translation id="1662550410081243962">Enregistrer et renseigner les modes de paiement</translation>
 <translation id="1663943134801823270">Les cartes et les adresses proviennent de Chrome. Vous pouvez les gérer dans les <ph name="BEGIN_LINK" />Paramètres<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Un chiffrement est normalement utilisé sur le site <ph name="SITE" /> pour protéger vos informations. Lors de la dernière tentative de connexion de Google Chrome au site <ph name="SITE" />, des identifiants inhabituels et incorrects ont été retournés. Il est possible qu'un individu malveillant tente de se faire passer pour <ph name="SITE" /> ou qu'un écran de connexion Wi-Fi ait interrompu la connexion. Vos informations restent sécurisées, car nous avons arrêté la connexion avant l'échange des données.</translation>
 <translation id="168841957122794586">Le certificat du serveur contient une clé de chiffrement faible.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Cette valeur n'est plus utilisée dans le cadre de cette règle.</translation>
 <translation id="2262243747453050782">Erreur HTTP.</translation>
 <translation id="2270484714375784793">N° de téléphone</translation>
-<translation id="2283340219607151381">Enregistrer et renseigner les adresses</translation>
 <translation id="2292556288342944218">Votre accès à Internet est bloqué</translation>
 <translation id="2316887270356262533">Libère moins de 1 Mo. Le chargement de certains sites risque d'être plus lent lors de votre prochaine visite.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> nécessite un nom d'utilisateur et un mot de passe.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> autre}one{<ph name="PAYMENT_METHOD_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> autre}other{<ph name="PAYMENT_METHOD_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> autres}}</translation>
 <translation id="717330890047184534">Identifiant GAIA :</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autre}one{<ph name="SHIPPING_OPTION_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autre}other{<ph name="SHIPPING_OPTION_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autres}}</translation>
-<translation id="7179323680825933600">Enregistrer et renseigner les modes de paiement</translation>
 <translation id="7180611975245234373">Actualiser</translation>
 <translation id="7182878459783632708">Aucune règle n'est définie</translation>
 <translation id="7186367841673660872">Cette page en<ph name="ORIGINAL_LANGUAGE" />a été traduite en<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 6f9cd4c3..df111f8 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />તમારી કૂકીઝને સાફ કરવાનો પ્રયાસ કરો<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">પસંદ કરેલ સત્ર અસ્તિત્વમાં નથી.</translation>
 <translation id="1323433172918577554">વધુ બતાવો</translation>
-<translation id="132390688737681464">સરનામાં સાચવો અને ભરો</translation>
 <translation id="1333989956347591814">તમારી પ્રવૃત્તિ <ph name="BEGIN_EMPHASIS" />હજીપણ દૃશ્યક્ષમ હોઈ શકે છે<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />વેબસાઇટો જેની તમે મુલાકાત લેતા હો
@@ -111,7 +110,6 @@
 <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="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" /> હોવાનો ડોળ કરવાનો પ્રયાસ કરી રહ્યો હોય અથવા કોઈ Wi-Fi સાઇન-ઇન સ્ક્રીને કનેક્શનમાં વિક્ષેપ પાડ્યો હોય. તમારી માહિતી હજી પણ સુરક્ષિત છે કારણ કે Google Chrome એ કોઈપણ ડેટા વિનિમય થાય તે પહેલાં જ કનેક્શન રોકી દીધું.</translation>
 <translation id="168841957122794586">સર્વર પ્રમાણપત્ર એક નબળી ક્રિપ્ટોગ્રાફિક કી ધરાવે છે.</translation>
@@ -196,7 +194,6 @@
 <translation id="225207911366869382">આ નીતિ માટે આ મૂલ્યને નાપસંદ કરેલું છે.</translation>
 <translation id="2262243747453050782">HTTP ભૂલ</translation>
 <translation id="2270484714375784793">ફોન નંબર</translation>
-<translation id="2283340219607151381">સરનામાં સાચવો અને ભરો</translation>
 <translation id="2292556288342944218">તમારી ઇન્ટરનેટ ઍક્સેસ અવરોધિત છે</translation>
 <translation id="2316887270356262533">1 MB કરતાં ઓછું ખાલી કરે છે. તમારી આગલી મુલાકાત સમયે કેટલીક સાઇટો વધુ ધીમે લોડ થઈ શકે છે.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> માટે વપરાશકર્તાનામ અને પાસવર્ડ આવશ્યક છે.</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index d4af989..ea3f6fb 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />अपनी कुकी साफ़ करके देखें<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">चुना गया सत्र मौजूद नहीं है.</translation>
 <translation id="1323433172918577554">और दिखाएं</translation>
-<translation id="132390688737681464">पतों की जानकारी सेव करें और भरें</translation>
 <translation id="1333989956347591814">आपकी गतिविधि <ph name="BEGIN_EMPHASIS" />अभी भी इन्हें दिखाई दे सकती है<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />जिन वेबसाइट पर आप जाते हैं
@@ -112,7 +111,6 @@
 <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="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>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">यह मान इस नीति के लिए हटा दिया गया है.</translation>
 <translation id="2262243747453050782">HTTP गड़बड़ी</translation>
 <translation id="2270484714375784793">फ़ोन नंबर</translation>
-<translation id="2283340219607151381">पतों की जानकारी सेव करें और भरें</translation>
 <translation id="2292556288342944218">आपका इंटरनेट कनेक्शन अवरुद्ध है</translation>
 <translation id="2316887270356262533">1 MB से भी कम जगह खाली करता है. जब आप अगली बार विज़िट करेंगे तो, कुछ साइटें और धीमे लोड हो सकती हैं.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> के लिए उपयोगकर्ता नाम और पासवर्ड आवश्यक है.</translation>
@@ -863,7 +860,6 @@
 <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>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index b33f74c..57d63c4 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Izbrišite kolačiće<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Odabrana sesija ne postoji.</translation>
 <translation id="1323433172918577554">Više</translation>
-<translation id="132390688737681464">Spremi i popuni adrese</translation>
 <translation id="1333989956347591814">Vaše aktivnosti <ph name="BEGIN_EMPHASIS" />i dalje mogu biti vidljive<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />web-lokacijama koje posjećujete
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protokol nije podržan</translation>
 <translation id="1655462015569774233">{1,plural, =1{Poslužitelj nije mogao dokazati da je to <ph name="DOMAIN" /> jer je sigurnosni certifikat istekao jučer. Razlog može biti pogrešna konfiguracija ili napad na vašu vezu. Sat vašeg računala trenutačno je postavljen na <ph name="CURRENT_DATE" />. Je li to u redu? Ako nije, ispravite vrijeme na satu sustava, a zatim osvježite ovu stranicu.}one{Poslužitelj nije mogao dokazati da je to <ph name="DOMAIN" /> jer je sigurnosni certifikat istekao prije # dan. Razlog može biti pogrešna konfiguracija ili napad na vašu vezu. Sat vašeg računala trenutačno je postavljen na <ph name="CURRENT_DATE" />. Je li to u redu? Ako nije, ispravite vrijeme na satu sustava, a zatim osvježite ovu stranicu.}few{Poslužitelj nije mogao dokazati da je to <ph name="DOMAIN" /> jer je sigurnosni certifikat istekao prije # dana. Razlog može biti pogrešna konfiguracija ili napad na vašu vezu. Sat vašeg računala trenutačno je postavljen na <ph name="CURRENT_DATE" />. Je li to u redu? Ako nije, ispravite vrijeme na satu sustava, a zatim osvježite ovu stranicu.}other{Poslužitelj nije mogao dokazati da je to <ph name="DOMAIN" /> jer je sigurnosni certifikat istekao prije # dana. Razlog može biti pogrešna konfiguracija ili napad na vašu vezu. Sat vašeg računala trenutačno je postavljen na <ph name="CURRENT_DATE" />. Je li to u redu? Ako nije, ispravite vrijeme na satu sustava, a zatim osvježite ovu stranicu.}}</translation>
 <translation id="1656489000284462475">Preuzimanje</translation>
-<translation id="1662550410081243962">Spremi i popuni načine plaćanja</translation>
 <translation id="1663943134801823270">Kartice i adrese dolaze iz Chromea. Njima možete upravljati u <ph name="BEGIN_LINK" />Postavkama<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> obično upotrebljava enkripciju radi zaštite vaših podataka. Prilikom ovog pokušaja povezivanja Google Chromea s web-lokacijom <ph name="SITE" /> ta je web-lokacija vratila neuobičajene i netočne vjerodajnice. To može značiti da se neki napadač pokušava predstaviti kao <ph name="SITE" /> ili je zaslon za prijavu na Wi-Fi prekinuo vezu. Vaši su podaci još uvijek sigurni jer je Google Chrome zaustavio povezivanje prije razmjene podataka.</translation>
 <translation id="168841957122794586">Certifikat poslužitelja sadrži slab kriptografski ključ!</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Ta je vrijednost obustavljena za to pravilo.</translation>
 <translation id="2262243747453050782">HTTP pogreška</translation>
 <translation id="2270484714375784793">Telefonski broj</translation>
-<translation id="2283340219607151381">Spremi i popuni adrese</translation>
 <translation id="2292556288342944218">Internetski je pristup blokiran</translation>
 <translation id="2316887270356262533">Oslobodit će se manje od 1 MB. Neke bi se web-lokacije pri sljedećem otvaranju mogle sporije učitavati.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> zahtijeva korisničko ime i zaporku.</translation>
@@ -862,7 +859,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">ID za GAIA-u:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Spremi i popuni načine plaćanja</translation>
 <translation id="7180611975245234373">Osvježi</translation>
 <translation id="7182878459783632708">Nije postavljeno nijedno pravilo</translation>
 <translation id="7186367841673660872">Ova je stranica prevedena s jezika<ph name="ORIGINAL_LANGUAGE" />na<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index 4f9e098..d22876a0 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Próbálkozzon a cookie-k törlésével<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">A kiválasztott munkamenet nem létezik.</translation>
 <translation id="1323433172918577554">Több</translation>
-<translation id="132390688737681464">Címek mentése és betöltése</translation>
 <translation id="1333989956347591814">Tevékenysége <ph name="BEGIN_EMPHASIS" />továbbra is látható maradhat<ph name="END_EMPHASIS" /> a következők számára:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />A megtekintett webhelyek
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Nem támogatott protokoll</translation>
 <translation id="1655462015569774233">{1,plural, =1{A szerver nem tudta bizonyítani, hogy valóban a(z) <ph name="DOMAIN" /> domainbe tartozik; biztonsági tanúsítványa tegnap lejárt. Ennek oka lehet konfigurációs hiba, de az is lehet, hogy egy támadó eltérítette az Ön kapcsolódását. Számítógépének órája jelenleg a következőre van állítva: <ph name="CURRENT_DATE" />. Ez megfelelőnek tűnik? Ha nem, állítsa be megfelelően a rendszer óráját, majd frissítse az oldalt.}other{A szerver nem tudta bizonyítani, hogy valóban a(z) <ph name="DOMAIN" /> domainbe tartozik; biztonsági tanúsítványa # nappal ezelőtt lejárt. Ennek oka lehet konfigurációs hiba, de az is lehet, hogy egy támadó eltérítette az Ön kapcsolódását. Számítógépének órája jelenleg a következőre van állítva: <ph name="CURRENT_DATE" />. Ez megfelelőnek tűnik? Ha nem, állítsa be megfelelően a rendszer óráját, majd frissítse az oldalt.}}</translation>
 <translation id="1656489000284462475">Átvétel</translation>
-<translation id="1662550410081243962">Fizetési módok mentése és betöltése</translation>
 <translation id="1663943134801823270">A kártyák és a címek a Chrome-ból származnak. A <ph name="BEGIN_LINK" />Beállításokban<ph name="END_LINK" /> kezelheti őket.</translation>
 <translation id="1676269943528358898">A(z) <ph name="SITE" /> webhely rendes esetben titkosítást alkalmaz az Ön adatainak védelme érdekében. Amikor a Google Chrome most csatlakozni próbált, a(z) <ph name="SITE" /> webhely szokatlan és helytelen hitelesítési adatokat küldött vissza. Ez olyankor fordulhat elő, amikor egy támadó megpróbálja magát kiadni a(z) <ph name="SITE" /> webhelynek, vagy valamilyen Wi-Fi-bejelentkezési képernyő megszakította a kapcsolatot. Adatai továbbra is biztonságban vannak, mivel a Google Chrome még azt megelőzően megszakította a kapcsolatot, hogy bármiféle adatcserére sor kerülhetett volna.</translation>
 <translation id="168841957122794586">A szervertanúsítvány gyenge titkosítási kulcsot tartalmaz.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Ez az érték elavult ennél a házirendnél.</translation>
 <translation id="2262243747453050782">HTTP hiba</translation>
 <translation id="2270484714375784793">Telefonszám</translation>
-<translation id="2283340219607151381">Címek mentése és betöltése</translation>
 <translation id="2292556288342944218">Az internethez való hozzáférést a rendszer letiltotta</translation>
 <translation id="2316887270356262533">1 MB-nál kevesebb hely szabadul fel. Előfordulhat, hogy egyes webhelyek lassabban töltődnek be, amikor legközelebb felkeresi őket.</translation>
 <translation id="2317259163369394535">A(z) <ph name="DOMAIN" /> felhasználónevet és jelszót kér.</translation>
@@ -861,7 +858,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> és további <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> és további <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">Gaia-azonosító:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> és további <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> és további <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Fizetési módok mentése és betöltése</translation>
 <translation id="7180611975245234373">Frissítés</translation>
 <translation id="7182878459783632708">Nincsenek beállított házirendek</translation>
 <translation id="7186367841673660872">Ezt az oldalt<ph name="ORIGINAL_LANGUAGE" />nyelvről fordítottuk<ph name="LANGUAGE_LANGUAGE" />nyelvre.</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index 9834d06..02b1875 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Coba hapus cookie Anda<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Sesi yang dipilih tidak ada.</translation>
 <translation id="1323433172918577554">Tampilkan Lebih Banyak</translation>
-<translation id="132390688737681464">Simpan dan Isi Alamat</translation>
 <translation id="1333989956347591814">Aktivitas Anda <ph name="BEGIN_EMPHASIS" />mungkin tetap dapat dilihat<ph name="END_EMPHASIS" /> oleh:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Situs yang Anda buka
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protokol yang tidak didukung</translation>
 <translation id="1655462015569774233">{1,plural, =1{Server ini tidak dapat membuktikan bahwa ini adalah <ph name="DOMAIN" />; masa berlaku sertifikat keamanannya telah berakhir kemarin. Hal ini mungkin disebabkan oleh kesalahan konfigurasi, atau ada penyerang yang memintas sambungan internet Anda. Jam komputer Anda saat ini diatur ke <ph name="CURRENT_DATE" />. Apakah terlihat sesuai? Jika tidak, Anda harus membenarkan jam sistem dan menyegarkan halaman ini.}other{Server ini tidak dapat membuktikan bahwa ini adalah <ph name="DOMAIN" />; masa berlaku sertifikat keamanannya telah berakhir # hari yang lalu. Hal ini mungkin disebabkan oleh kesalahan konfigurasi, atau ada penyerang yang memintas sambungan internet Anda. Jam komputer Anda saat ini diatur ke <ph name="CURRENT_DATE" />. Apakah terlihat sesuai? Jika tidak, Anda harus membenarkan jam sistem dan menyegarkan halaman ini.}}</translation>
 <translation id="1656489000284462475">Pengambilan</translation>
-<translation id="1662550410081243962">Simpan dan isi metode pembayaran</translation>
 <translation id="1663943134801823270">Kartu dan alamat berasal dari Chrome. Anda dapat mengelolanya di <ph name="BEGIN_LINK" />Setelan<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> biasanya menggunakan enkripsi untuk melindungi informasi Anda. Saat Google Chrome mencoba menyambung ke <ph name="SITE" /> kali ini, situs web mengembalikan kredensial yang salah dan tidak biasa. Hal ini dapat terjadi jika ada penyerang yang berpura-pura menjadi <ph name="SITE" />, atau layar masuk Wi-Fi mengganggu sambungan. Informasi Anda masih aman karena Google Chrome menghentikan sambungan sebelum terjadi pertukaran data apa pun.</translation>
 <translation id="168841957122794586">Sertifikat server berisi kunci kriptografis yang lemah.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Nilai ini sudah usang untuk kebijakan ini.</translation>
 <translation id="2262243747453050782">Kesalahan HTTP</translation>
 <translation id="2270484714375784793">Nomor telepon</translation>
-<translation id="2283340219607151381">Simpan dan isi alamat</translation>
 <translation id="2292556288342944218">Akses Internet Anda diblokir</translation>
 <translation id="2316887270356262533">Sediakan ruang kurang dari 1 MB. Beberapa situs mungkin dimuat lebih lambat dibuka lagi.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> memerlukan nama pengguna dan sandi.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> lainnya}other{<ph name="PAYMENT_METHOD_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> lainnya}}</translation>
 <translation id="717330890047184534">ID GAIA:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> lainnya}other{<ph name="SHIPPING_OPTION_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> lainnya}}</translation>
-<translation id="7179323680825933600">Simpan dan Isi Metode Pembayaran</translation>
 <translation id="7180611975245234373">Segarkan</translation>
 <translation id="7182878459783632708">Tidak ada kebijakan yang disetel</translation>
 <translation id="7186367841673660872">Halaman ini telah diterjemahkan dari<ph name="ORIGINAL_LANGUAGE" />ke<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 839e1d1..df2b73e4 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Prova a cancellare i cookie<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">La sessione selezionata non esiste.</translation>
 <translation id="1323433172918577554">Espandi</translation>
-<translation id="132390688737681464">Salva e compila gli indirizzi</translation>
 <translation id="1333989956347591814">La tua attività <ph name="BEGIN_EMPHASIS" />potrebbe comunque essere visibile<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Ai siti web visitati
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protocollo non supportato</translation>
 <translation id="1655462015569774233">{1,plural, =1{Questo server non è riuscito a verificare che si tratti di <ph name="DOMAIN" />; il relativo certificato di sicurezza è scaduto ieri. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che intercetta la connessione. L'orologio del computer è attualmente impostato su <ph name="CURRENT_DATE" />. È corretto? Se è sbagliato, dovresti regolare l'orologio e aggiornare la pagina.}other{Questo server non è riuscito a verificare che si tratti di <ph name="DOMAIN" />; il relativo certificato di sicurezza è scaduto # giorni fa. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che intercetta la connessione. L'orologio del computer è attualmente impostato su <ph name="CURRENT_DATE" />. È corretto? Se è sbagliato, dovresti regolare l'orologio e aggiornare la pagina.}}</translation>
 <translation id="1656489000284462475">Ritiro</translation>
-<translation id="1662550410081243962">Salva e compila i metodi di pagamento</translation>
 <translation id="1663943134801823270">Carte di credito e indirizzi provengono da Chrome. Puoi gestirli in <ph name="BEGIN_LINK" />Impostazioni<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> in genere utilizza la crittografia per proteggere le tue informazioni. Questa volta, quando Google Chrome ha provato a connettersi a <ph name="SITE" />, il sito web ha restituito credenziali insolite e sbagliate. È possibile che un malintenzionato stia cercando di spacciarsi per il sito <ph name="SITE" /> oppure che una schermata di accesso alla rete Wi-Fi abbia interrotto la connessione. Le tue informazioni sono ancora al sicuro perché Google Chrome ha interrotto la connessione prima che avvenissero scambi di dati.</translation>
 <translation id="168841957122794586">Il certificato del server contiene una chiave crittografica debole.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Il valore specificato per la norma è obsoleto.</translation>
 <translation id="2262243747453050782">Errore HTTP</translation>
 <translation id="2270484714375784793">Numero di telefono</translation>
-<translation id="2283340219607151381">Salva e compila gli indirizzi</translation>
 <translation id="2292556288342944218">L'accesso a Internet è bloccato</translation>
 <translation id="2316887270356262533">Consente di liberare meno di 1 MB. Alcuni siti potrebbero caricarsi più lentamente alla prossima visita.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> richiede un nome utente e una password.</translation>
@@ -859,7 +856,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> e <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> altro}other{<ph name="PAYMENT_METHOD_PREVIEW" /> e altri <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">ID GAIA:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> e <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> altra}other{<ph name="SHIPPING_OPTION_PREVIEW" /> e altre <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Salva e compila i metodi di pagamento</translation>
 <translation id="7180611975245234373">Aggiorna</translation>
 <translation id="7182878459783632708">Nessuna norma impostata</translation>
 <translation id="7186367841673660872">Questa pagina è stata tradotta da<ph name="ORIGINAL_LANGUAGE" />a<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 553acb32..6d6617e 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797">‏<ph name="BEGIN_LINK" />נסה לנקות את קובצי ה-Cookie<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">הסשן שנבחר לא קיים.</translation>
 <translation id="1323433172918577554">הצגת פריטים נוספים</translation>
-<translation id="132390688737681464">שמירה ומילוי של כתובות</translation>
 <translation id="1333989956347591814">הפעילות שלך <ph name="BEGIN_EMPHASIS" />עדיין עשויה להיות מוצגת<ph name="END_EMPHASIS" /> בפני:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />אתרים שאליהם נכנסת
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">פרוטוקול לא נתמך</translation>
 <translation id="1655462015569774233">{1,plural, =1{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />; התוקף של אישור האבטחה שלו פג אתמול. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. התאריך המוגדר כעת בשעון המחשב שלך הוא <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}two{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />; התוקף של אישור האבטחה שלו פג לפני יומיים. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. התאריך המוגדר כעת בשעון המחשב שלך הוא <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}many{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />; התוקף של אישור האבטחה שלו פג לפני # ימים. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. התאריך המוגדר כעת בשעון המחשב שלך הוא <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}other{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />; התוקף של אישור האבטחה שלו פג לפני # ימים. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. התאריך המוגדר כעת בשעון המחשב שלך הוא <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}}</translation>
 <translation id="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" />, או שמסך כניסה ל-Wi-Fi הפריע לחיבור. המידע שלך עדיין מאובטח מכיוון ש-Google Chrome הפסיק את החיבור לפני חילופי הנתונים.</translation>
 <translation id="168841957122794586">אישור השרת מכיל מפתח הצפנה חלש.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">ערך זה הוצא משימוש עבור מדיניות זו.</translation>
 <translation id="2262243747453050782">‏שגיאת HTTP</translation>
 <translation id="2270484714375784793">מספר טלפון</translation>
-<translation id="2283340219607151381">שמירה ומילוי של כתובות</translation>
 <translation id="2292556288342944218">הגישה לאינטרנט חסומה</translation>
 <translation id="2316887270356262533">‏פינוי של פחות מ-‎1 MB‎ מהשטח. ייתכן שחלק מהאתרים ייטענו לאט יותר בביקור הבא שלך.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> דורש שם משתמש וסיסמה.</translation>
@@ -868,7 +865,6 @@
 <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" />}two{<ph name="PAYMENT_METHOD_PREVIEW" /> ועוד <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}many{<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" />}two{<ph name="SHIPPING_OPTION_PREVIEW" /> ועוד <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}many{<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>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 4b81e66..fe110f9 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Cookie を消去してみてください<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">選択されたセッションが存在しません。</translation>
 <translation id="1323433172918577554">もっと見る</translation>
-<translation id="132390688737681464">住所の保存と入力</translation>
 <translation id="1333989956347591814">ただし、次の相手に<ph name="BEGIN_EMPHASIS" />あなたのアクティビティが知られる<ph name="END_EMPHASIS" />可能性はあります。
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />訪問先のウェブサイト
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">サポートされていないプロトコルです</translation>
 <translation id="1655462015569774233">{1,plural, =1{このサーバーが <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" /> になりすまそうとしているか、Wi-Fi ログイン画面で接続が中断された可能性があります。データのやり取りが行われる前に Google Chrome によって接続が停止されたため、情報は引き続き保護されています。</translation>
 <translation id="168841957122794586">サーバー証明書に脆弱な暗号鍵が含まれています。</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">この値は、このポリシーではサポートが終了しています。</translation>
 <translation id="2262243747453050782">HTTP エラーです</translation>
 <translation id="2270484714375784793">電話番号</translation>
-<translation id="2283340219607151381">住所の保存と入力</translation>
 <translation id="2292556288342944218">インターネット アクセスがブロックされています</translation>
 <translation id="2316887270356262533">最大で 1 MB を解放します。サイトによっては、次回アクセスする際に読み込みに時間がかかる可能性があります。</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> にはユーザー名とパスワードが必要です。</translation>
@@ -863,7 +860,6 @@
 <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" /> 件)}other{<ph name="PAYMENT_METHOD_PREVIEW" />(他 <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> 件)}}</translation>
 <translation id="717330890047184534">GAIA ID:</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" /> 件)}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>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index c0dcc51..a6ef31a 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />ನಿಮ್ಮ ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸಿ<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">ಆಯ್ಕೆ ಮಾಡಿದ ಸೆಷನ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ.</translation>
 <translation id="1323433172918577554">ಇನ್ನಷ್ಟು ತೋರಿಸಿ</translation>
-<translation id="132390688737681464">ವಿಳಾಸಗಳನ್ನು ಉಳಿಸಿ ಮತ್ತು ಭರ್ತಿ ಮಾಡಿ</translation>
 <translation id="1333989956347591814">ನಿಮ್ಮ ಚಟುವಟಿಕೆಗಳು <ph name="BEGIN_EMPHASIS" />ಇನ್ನೂ ಇವರಿಗೆ ಕಾಣಿಸಿಕೊಳ್ಳಬಹುದು<ph name="END_EMPHASIS" /> :
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />ನೀವು ಭೇಟಿ ನೀಡಿದ ವೆಬ್‌ಸೈಟ್‌ಗಳು
@@ -98,6 +97,7 @@
 <translation id="1559572115229829303">&lt;p&gt;ನಿಮ್ಮ ಸಾಧನದ ದಿನಾಂಕ ಮತ್ತು ಸಮಯ (<ph name="DATE_AND_TIME" />) ತಪ್ಪಾಗಿರುವ ಕಾರಣ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ಗೆ ಖಾಸಗಿ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.&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>
@@ -110,7 +110,6 @@
 <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="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>
@@ -137,6 +136,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">.pac ಸ್ಕ್ರಿಪ್ಟ್ URL ಅಲ್ಲದೆ, ನಿಗಧಿತ ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್‌ಗಳನ್ನು ಬಳಸಲು ಪ್ರಾಕ್ಸಿಯನ್ನು ಹೊಂದಿಸಲಾಗಿದೆ.</translation>
@@ -195,7 +195,6 @@
 <translation id="225207911366869382">ಈ ನೀತಿಗಾಗಿ ಈ ಮೌಲ್ಯವನ್ನು ಅಸಮ್ಮತಿಸಲಾಗಿದೆ.</translation>
 <translation id="2262243747453050782">HTTP ದೋಷ</translation>
 <translation id="2270484714375784793">ಫೋನ್ ಸಂಖ್ಯೆ</translation>
-<translation id="2283340219607151381">ವಿಳಾಸಗಳನ್ನು ಉಳಿಸಿ ಮತ್ತು ಭರ್ತಿ ಮಾಡಿ</translation>
 <translation id="2292556288342944218">ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="2316887270356262533">1 MB ಕ್ಕಿಂತ ಕಡಿಮೆ ಇರುವುದನ್ನು ತೆಗೆದುಹಾಕಿ. ನಿಮ್ಮ ನಂತರದ ಭೇಟಿಯ ಸಮಯದಲ್ಲಿ ಕೆಲವು ಸೈಟ್‌ಗಳು ನಿಧಾನವಾಗಿ ಲೋಡ್ ಆಗಬಹುದು.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> ಗೆ ಬಳಕೆದಾರಹೆಸರು ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್ ಅಗತ್ಯವಿದೆ.</translation>
@@ -207,6 +206,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>
@@ -348,11 +348,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>
@@ -448,6 +450,7 @@
 <translation id="4110652170750985508">ನಿಮ್ಮ ಪಾವತಿಯನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="4116663294526079822">ಈ ಸೈಟ್‌ನಲ್ಲಿ ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ</translation>
 <translation id="4117700440116928470">ನೀತಿಯ ವ್ಯಾಪ್ತಿಯು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ.</translation>
+<translation id="4119109454650683048">ಕೆಳಗಿನ ಮಾಹಿತಿಯನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಅಗತ್ಯವಿದ್ದರೆ, ದೋಷಗಳನ್ನು ಸರಿಪಡಿಸಿ</translation>
 <translation id="4129401438321186435">{COUNT,plural, =1{1 ಇತರೆ}one{# ಇತರೆ}other{# ಇತರೆ}}</translation>
 <translation id="4130226655945681476">ನೆಟ್‌ವರ್ಕ್ ಕೇಬಲ್‌ಗಳು, ಮೊಡೆಮ್ ಮತ್ತು ರೂಟರ್ ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="413544239732274901">ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation>
@@ -553,6 +556,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>
@@ -617,6 +621,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>
@@ -629,6 +634,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>
@@ -704,6 +710,7 @@
 <translation id="5893752035575986141">ಕ್ರೆಡಿಟ್‌ ಕಾರ್ಡ್‌ಗಳನ್ನು ಸಮ್ಮತಿಸಲಾಗಿದೆ.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ಸಿಂಕ್‌ ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ಬಳಕೆಯಲ್ಲಿದೆ}one{# ಬಳಕೆಯಲ್ಲಿದೆ}other{# ಬಳಕೆಯಲ್ಲಿದೆ}}</translation>
+<translation id="5922853866070715753">ಬಹುತೇಕ ಮುಗಿದಿದೆ</translation>
 <translation id="5939518447894949180">ಮರುಹೊಂದಿಸು</translation>
 <translation id="5967592137238574583">ಸಂಪರ್ಕ ಮಾಹಿತಿಯನ್ನು ಎಡಿಟ್ ಮಾಡಿ</translation>
 <translation id="5967867314010545767">ಇತಿಹಾಸದಿಂದ ತೆಗೆದುಹಾಕಿ</translation>
@@ -724,6 +731,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">ನಿಮ್ಮ Google ಖಾತೆಯು <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> ನಲ್ಲಿ ಇತರ ವಿಧಗಳ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸವನ್ನು ಹೊಂದಿರಬಹುದು</translation>
 <translation id="6144381551823904650">{COUNT,plural, =0{ಯಾವುದೂ ಇಲ್ಲ}=1{1 ಪಾಸ್‌ವರ್ಡ್ (ಸಿಂಕ್ ಮಾಡಲಾಗಿದೆ)}one{# ಪಾಸ್‌ವರ್ಡ್‌ಗಳು (ಸಿಂಕ್ ಮಾಡಲಾಗಿದೆ)}other{# ಪಾಸ್‌ವರ್ಡ್‌ಗಳು (ಸಿಂಕ್ ಮಾಡಲಾಗಿದೆ)}}</translation>
@@ -825,6 +833,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>
@@ -856,6 +865,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="DATE_AND_TIME" />) ತಪ್ಪಾಗಿರುವುದರಿಂದ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ಗೆ ಖಾಸಗಿ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="7260504762447901703">ಪ್ರವೇಶವನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ</translation>
 <translation id="7271803869921933038">ಸ್ವೀಕೃತ ಪ್ರೀಪೇಯ್ಡ್ ಕಾರ್ಡ್‌ಗಳು</translation>
@@ -1032,6 +1044,9 @@
 <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>
@@ -1064,13 +1079,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>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 8e5560c..3e149b3 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />쿠키 삭제해 보기<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">선택한 세션이 존재하지 않습니다.</translation>
 <translation id="1323433172918577554">더보기</translation>
-<translation id="132390688737681464">주소 저장 및 자동 입력</translation>
 <translation id="1333989956347591814">다음의 관계자는 내 활동 내역을 <ph name="BEGIN_EMPHASIS" />확인할 수도 있습니다<ph name="END_EMPHASIS" />.
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />방문한 웹사이트
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">지원되지 않는 프로토콜</translation>
 <translation id="1655462015569774233">{1,plural, =1{서버의 보안 인증서가 어제 만료되어 <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" />에서는 사용자 정보를 보호하기 위해 일반적으로 암호화를 사용합니다. 이번에 Chrome에서 <ph name="SITE" />에 연결을 시도했을 때 웹사이트에서 비정상적이고 잘못된 사용자 인증 정보를 반환했습니다. 이는 공격자가 <ph name="SITE" />인 것처럼 가장하려고 하거나 Wi-Fi 로그인 화면이 연결을 방해했기 때문일 수 있습니다. 데이터 교환이 발생하기 전에 Chrome에서 연결을 중단했기 때문에 사용자 정보는 안전합니다.</translation>
 <translation id="168841957122794586">서버 인증서에 안전성이 낮은 암호화 키가 포함되어 있습니다.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">이 값은 이 정책에 사용되지 않습니다.</translation>
 <translation id="2262243747453050782">HTTP 오류</translation>
 <translation id="2270484714375784793">전화번호</translation>
-<translation id="2283340219607151381">주소 저장 및 자동 입력</translation>
 <translation id="2292556288342944218">인터넷 액세스가 차단됨</translation>
 <translation id="2316887270356262533">1MB 미만의 저장용량을 확보합니다. 일부 사이트는 다음 방문 시 로드 속도가 느려질 수 있습니다.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" />에 사용자 이름과 비밀번호를 입력해야 합니다.</translation>
@@ -863,7 +860,6 @@
 <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" />개}other{<ph name="PAYMENT_METHOD_PREVIEW" /> 외 <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />개}}</translation>
 <translation id="717330890047184534">GAIA ID:</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" />개}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>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index b8baf79c..4911900 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Pabandykite išvalyti slapukus<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Pasirinktos sesijos nėra.</translation>
 <translation id="1323433172918577554">Rodyti daugiau</translation>
-<translation id="132390688737681464">Išsaugoti ir užpildyti adresus</translation>
 <translation id="1333989956347591814">Veiklą <ph name="BEGIN_EMPHASIS" />vis tiek gali peržiūrėti<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />lankomos svetainės;
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Nepalaikomas protokolas</translation>
 <translation id="1655462015569774233">{1,plural, =1{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi vakar. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuoliko. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar tai tinkama? Jei netinkama, turėtumėte koreguoti sistemos laikrodį ir atnaujinti šį puslapį.}one{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dieną. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuoliko. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar tai tinkama? Jei netinkama, turėtumėte koreguoti sistemos laikrodį ir atnaujinti šį puslapį.}few{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dienas. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuoliko. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar tai tinkama? Jei netinkama, turėtumėte koreguoti sistemos laikrodį ir atnaujinti šį puslapį.}many{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dienos. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuoliko. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar tai tinkama? Jei netinkama, turėtumėte koreguoti sistemos laikrodį ir atnaujinti šį puslapį.}other{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dienų. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuoliko. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar tai tinkama? Jei netinkama, turėtumėte koreguoti sistemos laikrodį ir atnaujinti šį puslapį.}}</translation>
 <translation id="1656489000284462475">Paėmimas</translation>
-<translation id="1662550410081243962">Išsaugoti ir užpildyti mokėjimo metodų informaciją</translation>
 <translation id="1663943134801823270">Kortelės ir adresai naudojami iš „Chrome“. Juos galite tvarkyti nuėję į <ph name="BEGIN_LINK" />Nustatymus<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Svetainėje <ph name="SITE" /> įprastai naudojama šifruotė informacijai apsaugoti. Šį kartą „Google Chrome“ bandant prisijungti prie <ph name="SITE" />, ji pateikė neįprastus ir netinkamus prisijungimo duomenis. Gali būti, kad užpuolėjas bando apsimesti svetaine <ph name="SITE" /> arba „Wi-Fi“ prisijungimo ekrane nutrūko ryšys. Jūsų informacija vis tiek liko apsaugota, nes „Google Chrome“ sustabdė prisijungimą prieš apsikeitimą bet kokiais duomenimis.</translation>
 <translation id="168841957122794586">Serverio sertifikate yra nesudėtingas kriptografinis raktas.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Pagal šią politiką ši vertė nepatvirtinta.</translation>
 <translation id="2262243747453050782">HTTP klaida</translation>
 <translation id="2270484714375784793">Telefono numeris</translation>
-<translation id="2283340219607151381">Išsaugoti ir užpildyti adresus</translation>
 <translation id="2292556288342944218">Interneto prieiga užblokuota</translation>
 <translation id="2316887270356262533">Atlaisvina mažiau nei 1 MB. Per kitą jūsų apsilankymą kai kurios svetainės gali būti įkeliamos lėčiau.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> būtina įvesti naudotojo vardą ir slaptažodį.</translation>
@@ -864,7 +861,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> ir dar <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" /> ir dar <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" /> ir dar <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}many{<ph name="PAYMENT_METHOD_PREVIEW" /> ir dar <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> ir dar <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">„Gaia“ ID:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> ir dar <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" /> ir dar <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" /> ir dar <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}many{<ph name="SHIPPING_OPTION_PREVIEW" /> ir dar <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> ir dar <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Išsaugoti ir užpildyti mokėjimo metodų informaciją</translation>
 <translation id="7180611975245234373">Atnaujinti</translation>
 <translation id="7182878459783632708">Nenustatyta jokia politika</translation>
 <translation id="7186367841673660872">Šis puslapis išverstas iš<ph name="ORIGINAL_LANGUAGE" />į<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 2bf6947..61f34ad 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Dzēsiet sīkfailus<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Atlasītā sesija nepastāv.</translation>
 <translation id="1323433172918577554">Rādīt vairāk</translation>
-<translation id="132390688737681464">Saglabāt un aizpildīt adreses</translation>
 <translation id="1333989956347591814">Iespējams, jūsu darbības <ph name="BEGIN_EMPHASIS" />joprojām būs redzamas<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />jūsu apmeklētajām vietnēm;
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Neatbalstīts protokols</translation>
 <translation id="1655462015569774233">{1,plural, =1{Šis serveris nevarēja pierādīt, ka ir <ph name="DOMAIN" />; tā drošības sertifikāta derīguma termiņš beidzās vakar. Šī problēma var rasties nepareizas konfigurācijas dēļ vai tādēļ, ka kāds uzbrucējs ir pārtvēris jūsu savienojumu. Jūsu datora pulkstenī pašlaik ir iestatīts šāds datums: <ph name="CURRENT_DATE" />. Vai tas ir pareizs? Ja datums nav pareizs, mainiet sistēmas pulksteni un pēc tam atsvaidziniet šo lapu.}zero{Šis serveris nevarēja pierādīt, ka ir <ph name="DOMAIN" />; tā drošības sertifikāta derīguma termiņš beidzās pirms # dienām. Šī problēma var rasties nepareizas konfigurācijas dēļ vai tādēļ, ka kāds uzbrucējs ir pārtvēris jūsu savienojumu. Jūsu datora pulkstenī pašlaik ir iestatīts šāds datums: <ph name="CURRENT_DATE" />. Vai tas ir pareizs? Ja datums nav pareizs, mainiet sistēmas pulksteni un pēc tam atsvaidziniet šo lapu.}one{Šis serveris nevarēja pierādīt, ka ir <ph name="DOMAIN" />; tā drošības sertifikāta derīguma termiņš beidzās pirms # dienas. Šī problēma var rasties nepareizas konfigurācijas dēļ vai tādēļ, ka kāds uzbrucējs ir pārtvēris jūsu savienojumu. Jūsu datora pulkstenī pašlaik ir iestatīts šāds datums: <ph name="CURRENT_DATE" />. Vai tas ir pareizs? Ja datums nav pareizs, mainiet sistēmas pulksteni un pēc tam atsvaidziniet šo lapu.}other{Šis serveris nevarēja pierādīt, ka ir <ph name="DOMAIN" />; tā drošības sertifikāta derīguma termiņš beidzās pirms # dienām. Šī problēma var rasties nepareizas konfigurācijas dēļ vai tādēļ, ka kāds uzbrucējs ir pārtvēris jūsu savienojumu. Jūsu datora pulkstenī pašlaik ir iestatīts šāds datums: <ph name="CURRENT_DATE" />. Vai tas ir pareizs? Ja datums nav pareizs, mainiet sistēmas pulksteni un pēc tam atsvaidziniet šo lapu.}}</translation>
 <translation id="1656489000284462475">Informācija par saņemšanu</translation>
-<translation id="1662550410081243962">Saglabāt un aizpildīt maksājuma veidus</translation>
 <translation id="1663943134801823270">Kartes un adreses tiek iegūtas no Chrome. Varat pārvaldīt tās <ph name="BEGIN_LINK" />iestatījumos<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Vietnē <ph name="SITE" /> informācijas aizsargāšanai parasti tiek izmantota šifrēšana. Kad pārlūkā Google Chrome tika mēģināts izveidot savienojumu ar vietni <ph name="SITE" />, šoreiz tā nosūtīja neparastus un nepareizus akreditācijas datus. Iespējams, tas notika, jo uzbrucējs mēģināja uzdoties par vietni <ph name="SITE" />, vai arī Wi-Fi pierakstīšanās ekrāns pārtrauc savienojumu. Jūsu informācija joprojām ir drošībā, jo pārlūks Google Chrome pārtrauca savienojumu, pirms tika veikta jebkādu datu apmaiņa.</translation>
 <translation id="168841957122794586">Servera sertifikāts ietver vāju kriptogrāfisko atslēgu.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Šī vērtība vairs netiek atbalstīta šai politikai.</translation>
 <translation id="2262243747453050782">HTTP kļūda</translation>
 <translation id="2270484714375784793">Tālruņa numurs</translation>
-<translation id="2283340219607151381">Saglabāt un aizpildīt adreses</translation>
 <translation id="2292556288342944218">Piekļuve internetam ir bloķēta</translation>
 <translation id="2316887270356262533">Tiks atbrīvots mazāk nekā 1 MB. Dažas vietnes nākamajā apmeklējumā var ielādēt lēnāk.</translation>
 <translation id="2317259163369394535">Vietnē <ph name="DOMAIN" /> ir jāievada lietotājvārds un parole.</translation>
@@ -862,7 +859,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> un vēl <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}zero{<ph name="PAYMENT_METHOD_PREVIEW" /> un vēl <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" /> un vēl <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> un vēl <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">GAIA ID:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> un vēl <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}zero{<ph name="SHIPPING_OPTION_PREVIEW" /> un vēl <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" /> un vēl <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> un vēl <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Saglabāt un aizpildīt maksājumu veidus</translation>
 <translation id="7180611975245234373">Atsvaidzināt</translation>
 <translation id="7182878459783632708">Nav iestatīta neviena politika</translation>
 <translation id="7186367841673660872">Šī lapa ir tulkota no<ph name="ORIGINAL_LANGUAGE" />valodas<ph name="LANGUAGE_LANGUAGE" />valodā</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index 8e3579e8..494f3a7c 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />നിങ്ങളുടെ കുക്കികൾ മായ്‌ക്കുന്നത് പരീക്ഷിക്കുക<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">തിരഞ്ഞെടുത്ത സെഷൻ നിലവിലില്ല.</translation>
 <translation id="1323433172918577554">കൂടുതൽ കാണിക്കുക</translation>
-<translation id="132390688737681464">വിലാസങ്ങൾ സംരക്ഷിച്ച് സ്വമേധയാ പൂരിപ്പിക്കുക</translation>
 <translation id="1333989956347591814">നിങ്ങളുടെ ആക്‌റ്റിവിറ്റി ഇനിപ്പറയുന്നവയ്‌ക്ക് <ph name="BEGIN_EMPHASIS" />തുടർന്നും ദൃശ്യമായേക്കും<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />നിങ്ങൾ സന്ദർശിക്കുന്ന വെബ്‌സൈറ്റുകൾക്ക്
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">പ്രോട്ടോക്കോൾ പിന്തുണയ്‌ക്കുന്നില്ല</translation>
 <translation id="1655462015569774233">{1,plural, =1{ഈ സെർവറിന് ഇത് <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" />, എൻക്രിപ്‌ഷൻ ഉപയോഗിക്കുന്നു. ഇപ്പോൾ <ph name="SITE" /> സൈറ്റിലേക്ക് കണക്‌റ്റുചെയ്യാൻ Google Chrome ശ്രമിച്ചപ്പോൾ, അസാധാരണമായതും തെറ്റായതുമായ ക്രെഡൻഷ്യലുകൾ വെബ്‌സൈറ്റ് തിരികെ അയച്ചു. ഒരു ആക്രമണകാരി, <ph name="SITE" /> എന്നതായി ഭാവിക്കാൻ ശ്രമിക്കുമ്പോഴോ Wi-Fi സൈൻ ഇൻ സ്‌ക്രീൻ, കണക്ഷനെ തടസ്സപ്പെടുത്തുമ്പോഴോ ആണ് ഇങ്ങനെ സംഭവിക്കാനിടയുള്ളത്. ഏതെങ്കിലും ഡാറ്റ കൈമാറുന്നതിനുമുമ്പ് Google Chrome കണക്ഷൻ അവസാനിപ്പിച്ചതിനാൽ, നിങ്ങളുടെ വിവരങ്ങൾ തുടർന്നും സുരക്ഷിതമായിരിക്കും.</translation>
 <translation id="168841957122794586">സെർവർ സർട്ടിഫിക്കറ്റിൽ ഒരു ദുർബലമായ ഗൂഢഭാഷ കീ ഉൾപ്പെടുന്നു.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">ഈ നയത്തിനായി ഈ മൂല്യത്തെ ഒഴിവാക്കി.</translation>
 <translation id="2262243747453050782">HTTP പിശക്</translation>
 <translation id="2270484714375784793">ഫോൺ നമ്പർ</translation>
-<translation id="2283340219607151381">വിലാസങ്ങൾ സംരക്ഷിച്ച് സ്വമേധയാ പൂരിപ്പിക്കുക</translation>
 <translation id="2292556288342944218">നിങ്ങളുടെ ഇന്റർനെറ്റ് ആക്‌സസ്സ് ബ്ലോക്കുചെയ്‌തു</translation>
 <translation id="2316887270356262533">1 MB-യിൽ കുറഞ്ഞ ഡാറ്റ ലാഭിക്കുന്നു. അടുത്തതവണ നിങ്ങൾ സന്ദർശിക്കുമ്പോൾ ചില സൈറ്റുകൾ ഇതിനേക്കാൾ പതുക്കെ ലോഡാകാം.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> ഡൊമെയ്‌ന് ഒരു ഉപയോക്തൃനാമവും പാസ്‌വേഡും വേണം.</translation>
@@ -862,7 +859,6 @@
 <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" /> എണ്ണവും}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" /> എണ്ണവും}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>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index 6f74053..16ebb70 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />आपल्या कुकीज साफ करून पहा<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">निवडलेले सेशन अस्तित्वात नाही.</translation>
 <translation id="1323433172918577554">अधिक दाखवा</translation>
-<translation id="132390688737681464">पत्ते भरा आणि सेव्ह करा</translation>
 <translation id="1333989956347591814">आपले पुढील क्रियाकलाप <ph name="BEGIN_EMPHASIS" />अद्याप दिसतील<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />आपण पाहत असलेल्या वेबसाइट
@@ -112,7 +111,6 @@
 <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="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>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">हे मूल्य या धोरणासाठी नापसंत करण्‍यात आले आहे.</translation>
 <translation id="2262243747453050782">HTTP एरर</translation>
 <translation id="2270484714375784793">फोन नंबर</translation>
-<translation id="2283340219607151381">पत्ते भरा आणि सेव्ह करा</translation>
 <translation id="2292556288342944218">आपला इंटरनेट प्रवेश अवरोधित केला आहे</translation>
 <translation id="2316887270356262533">1 MB पेक्षा कमी जागा मोकळी करते. काही साइट तुमच्या पुढील भेटीच्या वेळी आणखी धीम्या गतीने लोड होऊ शकतात.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> साठी वापरकर्तानाव आणि पासवर्ड आवश्यक आहेत.</translation>
@@ -864,7 +861,6 @@
 <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>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index a978476..32cbe06 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Cuba kosongkan kuki anda<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Sesi yang dipilih tidak wujud.</translation>
 <translation id="1323433172918577554">Tunjukkan Lagi</translation>
-<translation id="132390688737681464">Simpan dan Lengkapkan Alamat</translation>
 <translation id="1333989956347591814">Aktiviti anda <ph name="BEGIN_EMPHASIS" />mungkin masih boleh dilihat<ph name="END_EMPHASIS" /> oleh:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Tapak web yang anda lawati
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protokol tidak disokong</translation>
 <translation id="1655462015569774233">{1,plural, =1{Pelayan ini tidak dapat membuktikan bahawa <ph name="DOMAIN" />; sijil keselamatannya tamat tempoh semalam. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang yang memintas sambungan anda. Jam komputer anda ditetapkan kepada <ph name="CURRENT_DATE" /> pada masa ini. Adakah itu betul? Jika tidak, anda perlu membetulkan jam sistem anda dan kemudian muat semula halaman ini.}other{Pelayan ini tidak dapat membuktikan bahawa <ph name="DOMAIN" />; sijil keselamatannya tamat tempoh # hari yang lalu. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang yang memintas sambungan anda. Jam komputer anda ditetapkan kepada <ph name="CURRENT_DATE" /> pada masa ini. Adakah itu betul? Jika tidak, anda perlu membetulkan jam sistem anda dan kemudian muat semula halaman ini.}}</translation>
 <translation id="1656489000284462475">Pengambilan</translation>
-<translation id="1662550410081243962">Simpan dan lengkapkan kaedah pembayaran</translation>
 <translation id="1663943134801823270">Kad dan alamat adalah daripada Chrome. Anda boleh mengurus kad dan alamat ini dalam <ph name="BEGIN_LINK" />Tetapan<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> biasanya menggunakan penyulitan untuk melindungi maklumat anda. Apabila Google Chrome cuba menyambung ke <ph name="SITE" /> pada kali ini, tapak web tersebut mengembalikan bukti kelayakan yang luar biasa dan salah. Hal ini boleh berlaku apabila penyerang sedang cuba menyamar sebagai <ph name="SITE" /> atau skrin log masuk Wi-Fi telah memutuskan sambungan. Maklumat anda masih selamat kerana Google Chrome menghentikan sambungan sebelum sebarang pertukaran data berlaku.</translation>
 <translation id="168841957122794586">Sijil pelayan mengandungi kunci kriptografi yang lemah.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Nilai ini tidak lagi digunakan untuk dasar ini.</translation>
 <translation id="2262243747453050782">Ralat HTTP</translation>
 <translation id="2270484714375784793">Nombor telefon</translation>
-<translation id="2283340219607151381">Simpan dan lengkapkan alamat</translation>
 <translation id="2292556288342944218">Akses Internet anda disekat</translation>
 <translation id="2316887270356262533">Mengosongkan kurang daripada 1 MB. Sesetengah tapak mungkin dimuatkan dengan lebih perlahan pada lawatan anda yang seterusnya.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> memerlukan nama pengguna dan kata laluan.</translation>
@@ -864,7 +861,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> lagi}other{<ph name="PAYMENT_METHOD_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> lagi}}</translation>
 <translation id="717330890047184534">ID Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> lagi}other{<ph name="SHIPPING_OPTION_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> lagi}}</translation>
-<translation id="7179323680825933600">Simpan dan Lengkapkan Kaedah Pembayaran</translation>
 <translation id="7180611975245234373">Muat semula</translation>
 <translation id="7182878459783632708">Tiada dasar ditetapkan</translation>
 <translation id="7186367841673660872">Halaman ini telah diterjemahkan dari<ph name="ORIGINAL_LANGUAGE" />ke<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index fdbd4ec..df571cb6 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Probeer je cookies te wissen<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">De geselecteerde sessie bestaat niet.</translation>
 <translation id="1323433172918577554">Meer weergeven</translation>
-<translation id="132390688737681464">Adressen opslaan en invullen</translation>
 <translation id="1333989956347591814">Je activiteit is mogelijk <ph name="BEGIN_EMPHASIS" />nog wel zichtbaar<ph name="END_EMPHASIS" /> voor:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Websites die je bezoekt
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Niet-ondersteund protocol</translation>
 <translation id="1655462015569774233">{1,plural, =1{Deze server kan niet bewijzen dat dit <ph name="DOMAIN" /> is. Het bijbehorende beveiligingscertificaat is gisteren verlopen. Dit kan worden veroorzaakt door een verkeerde configuratie of een aanvaller die je verbinding onderschept. De klok van je computer is momenteel ingesteld op <ph name="CURRENT_DATE" />. Is dat correct? Zo niet, dan moet je de klok van je systeem aanpassen en vervolgens deze pagina vernieuwen.}other{Deze server kan niet bewijzen dat dit <ph name="DOMAIN" /> is. Het bijbehorende beveiligingscertificaat is # dagen geleden verlopen. Dit kan worden veroorzaakt door een verkeerde configuratie of een aanvaller die je verbinding onderschept. De klok van je computer is momenteel ingesteld op <ph name="CURRENT_DATE" />. Is dat correct? Zo niet, dan moet je de klok van je systeem aanpassen en vervolgens deze pagina vernieuwen.}}</translation>
 <translation id="1656489000284462475">Ophaaltijd</translation>
-<translation id="1662550410081243962">Betaalmethoden toevoegen en invullen</translation>
 <translation id="1663943134801823270">Kaarten en adressen zijn afkomstig uit Chrome. Je kunt ze beheren in <ph name="BEGIN_LINK" />Instellingen<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> gebruikt gewoonlijk versleuteling om je gegevens te beschermen. Toen Google Chrome deze keer probeerde verbinding te maken met <ph name="SITE" />, retourneerde de website ongewone en onjuiste inloggegevens. Dit kan gebeuren als een aanvaller probeert zich als <ph name="SITE" /> voor te doen of als een wifi-inlogscherm de verbinding heeft verbroken. Je gegevens zijn nog steeds beveiligd omdat Google Chrome de verbinding heeft beëindigd voordat er gegevens konden worden uitgewisseld.</translation>
 <translation id="168841957122794586">Het servercertificaat bevat een zwakke cryptografische sleutel.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Deze waarde is verouderd voor dit beleid.</translation>
 <translation id="2262243747453050782">HTTP-fout</translation>
 <translation id="2270484714375784793">Telefoonnummer</translation>
-<translation id="2283340219607151381">Adressen opslaan en invullen</translation>
 <translation id="2292556288342944218">Je toegang tot internet wordt geblokkeerd</translation>
 <translation id="2316887270356262533">Hiermee wordt minder dan 1 MB vrijgemaakt. Sommige sites kunnen langzamer worden geladen wanneer je ze weer bezoekt.</translation>
 <translation id="2317259163369394535">Voor <ph name="DOMAIN" /> zijn een gebruikersnaam en een wachtwoord vereist.</translation>
@@ -858,7 +855,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> en nog <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> en nog <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">Gaia-ID:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> en nog <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> en nog <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Betaalmethoden toevoegen en invullen</translation>
 <translation id="7180611975245234373">Vernieuwen</translation>
 <translation id="7182878459783632708">Geen beleid ingesteld</translation>
 <translation id="7186367841673660872">Deze pagina is vertaald van het<ph name="ORIGINAL_LANGUAGE" />in het<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index a645da0e..734a947 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Prøv å slette informasjonskapslene dine<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Den valgte økten finnes ikke.</translation>
 <translation id="1323433172918577554">Vis mer</translation>
-<translation id="132390688737681464">Lagre og fyll inn adresser</translation>
 <translation id="1333989956347591814">Aktiviteten din <ph name="BEGIN_EMPHASIS" />kan fortsatt være synlig<ph name="END_EMPHASIS" /> for
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />nettsteder du besøker
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protokollen støttes ikke</translation>
 <translation id="1655462015569774233">{1,plural, =1{Denne tjeneren kunne ikke bevise at den er <ph name="DOMAIN" />, ettersom sikkerhetssertifikatet utløp i går. Dette kan skyldes en feilkonfigurasjon eller at en angriper avskjærer tilkoblingen mellom deg og nettstedet. Klokken på datamaskinen din er stilt til <ph name="CURRENT_DATE" />. Er det riktig? Hvis ikke bør du stille klokken på systemet og laste inn denne siden på nytt.}other{Denne tjeneren kunne ikke bevise at den er <ph name="DOMAIN" />, ettersom sikkerhetssertifikatet utløp for # dager siden. Dette kan skyldes en feilkonfigurasjon eller at en angriper avskjærer tilkoblingen mellom deg og nettstedet. Klokken på datamaskinen din er stilt til <ph name="CURRENT_DATE" />. Er det riktig? Hvis ikke bør du stille klokken på systemet og laste inn denne siden på nytt.}}</translation>
 <translation id="1656489000284462475">Henting</translation>
-<translation id="1662550410081243962">Lagre og fyll ut betalingsmåter</translation>
 <translation id="1663943134801823270">Kortene og adressene er fra Chrome. Du kan administrere dem i <ph name="BEGIN_LINK" />Innstillinger<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> bruker vanligvis kryptering for å beskytte informasjonen din. Da Chrome prøvde å koble til <ph name="SITE" /> denne gangen, sendte nettstedet tilbake uvanlig og feil legitimasjon. Dette kan skje hvis en angriper prøver å utgi seg for å være <ph name="SITE" />, eller hvis en Wi-Fi-påloggingsskjerm har avbrutt tilkoblingen. Informasjonen din er likevel sikker fordi Chrome stoppet tilkoblingen før det ble utvekslet noen data.</translation>
 <translation id="168841957122794586">Tjenersertifikatet inneholder en svak kryptografisk nøkkel.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Denne verdien er foreldet for denne innstillingen.</translation>
 <translation id="2262243747453050782">HTTP-feil</translation>
 <translation id="2270484714375784793">Telefonnummer</translation>
-<translation id="2283340219607151381">Lagre og fyll inn adresser</translation>
 <translation id="2292556288342944218">Internett-tilgangen din er blokkert</translation>
 <translation id="2316887270356262533">Frigjør mindre enn 1 MB. Det kan hende enkelte nettsteder lastes inn tregere neste gang du besøker dem.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> krever brukernavn og passord.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> til}other{<ph name="PAYMENT_METHOD_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> til}}</translation>
 <translation id="717330890047184534">Gaia-ID:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> til}other{<ph name="SHIPPING_OPTION_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> til}}</translation>
-<translation id="7179323680825933600">Lagre, og fyll ut betalingsmåter</translation>
 <translation id="7180611975245234373">Last inn på nytt</translation>
 <translation id="7182878459783632708">Ingen retningslinjer er angitt</translation>
 <translation id="7186367841673660872">Denne siden har blitt oversatt fra<ph name="ORIGINAL_LANGUAGE" />til<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index 8e76bad4..f245fab 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Usuń pliki cookie<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Wybrana sesja nie istnieje.</translation>
 <translation id="1323433172918577554">Pokaż więcej</translation>
-<translation id="132390688737681464">Zapisuj i automatycznie uzupełniaj adresy</translation>
 <translation id="1333989956347591814">Twoja aktywność <ph name="BEGIN_EMPHASIS" />może być nadal widoczna<ph name="END_EMPHASIS" /> dla:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />stron internetowych, które odwiedzasz;
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Nieobsługiwany protokół</translation>
 <translation id="1655462015569774233">{1,plural, =1{Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa wygasł wczoraj. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia. Zegar komputera jest obecnie ustawiony na <ph name="CURRENT_DATE" />. Czy to prawidłowa data? Jeśli nie, musisz skorygować zegar systemu, a następnie odświeżyć tę stronę.}few{Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa wygasł # dni temu. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia. Zegar komputera jest obecnie ustawiony na <ph name="CURRENT_DATE" />. Czy to prawidłowa data? Jeśli nie, musisz skorygować zegar systemu, a następnie odświeżyć tę stronę.}many{Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa wygasł # dni temu. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia. Zegar komputera jest obecnie ustawiony na <ph name="CURRENT_DATE" />. Czy to prawidłowa data? Jeśli nie, musisz skorygować zegar systemu, a następnie odświeżyć tę stronę.}other{Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa wygasł # dnia temu. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia. Zegar komputera jest obecnie ustawiony na <ph name="CURRENT_DATE" />. Czy to prawidłowa data? Jeśli nie, musisz skorygować zegar systemu, a następnie odświeżyć tę stronę.}}</translation>
 <translation id="1656489000284462475">Odbiór</translation>
-<translation id="1662550410081243962">Zapisuj i automatycznie uzupełniaj informacje o formach płatności</translation>
 <translation id="1663943134801823270">Karty i adresy pochodzą z Chrome. Możesz nimi zarządzać w <ph name="BEGIN_LINK" />Ustawieniach<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> zazwyczaj używa szyfrowania do ochrony Twoich informacji. Gdy tym razem Google Chrome próbował połączyć się ze stroną <ph name="SITE" />, odesłała ona nietypowe i nieprawidłowe dane logowania. Może się tak zdarzyć, gdy pod stronę <ph name="SITE" /> podszywa się atakująca osoba albo gdy ekran logowania do sieci Wi-Fi przerwie połączenie. Twoje informacje są nadal bezpieczne, bo połączenie w Google Chrome zakończyło się przed wymianą jakichkolwiek danych.</translation>
 <translation id="168841957122794586">Certyfikat serwera ma słaby klucz kryptograficzny.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Ta wartość tej zasady została wycofana.</translation>
 <translation id="2262243747453050782">Błąd HTTP</translation>
 <translation id="2270484714375784793">Numer telefonu</translation>
-<translation id="2283340219607151381">Zapisuj i automatycznie uzupełniaj adresy</translation>
 <translation id="2292556288342944218">Masz zablokowany dostęp do internetu</translation>
 <translation id="2316887270356262533">Zwolni się mniej niż 1 MB. Podczas następnej wizyty niektóre strony mogą ładować się wolniej.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> wymaga nazwy użytkownika i hasła.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}many{<ph name="PAYMENT_METHOD_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">Identyfikator GAIA:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}many{<ph name="SHIPPING_OPTION_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Zapisuj i automatycznie uzupełniaj informacje o formach płatności</translation>
 <translation id="7180611975245234373">Odśwież</translation>
 <translation id="7182878459783632708">Brak ustawionych zasad</translation>
 <translation id="7186367841673660872">Ta strona została przetłumaczona z języka<ph name="ORIGINAL_LANGUAGE" />na język<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index ae555e37..800c3dd 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Tente limpar os cookies<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">A sessão selecionada não existe.</translation>
 <translation id="1323433172918577554">Mostrar mais</translation>
-<translation id="132390688737681464">Salvar e preencher endereços</translation>
 <translation id="1333989956347591814">É possível que sua atividade <ph name="BEGIN_EMPHASIS" />ainda esteja visível<ph name="END_EMPHASIS" /> para:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />os websites que você visita
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protocolo não compatível</translation>
 <translation id="1655462015569774233">{1,plural, =1{Este servidor não conseguiu provar que é <ph name="DOMAIN" />; o certificado de segurança dele expirou ontem. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor. O relógio do seu computador está definido para <ph name="CURRENT_DATE" />. Essa data está correta? Se não estiver, corrija o relógio do sistema e depois atualize esta página.}one{Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança dele expirou há # dias. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor. O relógio do seu computador está definido para <ph name="CURRENT_DATE" />. Essa data está correta? Se não estiver, corrija o relógio do sistema e depois atualize esta página.}other{Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança dele expirou há # dias. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor. O relógio do seu computador está definido para <ph name="CURRENT_DATE" />. Essa data está correta? Se não estiver, corrija o relógio do sistema e depois atualize esta página.}}</translation>
 <translation id="1656489000284462475">Retirada</translation>
-<translation id="1662550410081243962">Salvar e preencher as formas de pagamento</translation>
 <translation id="1663943134801823270">Os cartões e os endereços vieram do Chrome. É possível gerenciar essas opções em <ph name="BEGIN_LINK" />Configurações<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">O site <ph name="SITE" /> geralmente usa criptografia para proteger suas informações. Quando o Google Chrome tentou se conectar a <ph name="SITE" /> dessa vez, o website retornou credenciais incomuns e incorretas. Isso pode acontecer quando um invasor está fingindo ser <ph name="SITE" /> ou quando uma tela de login por Wi-Fi interrompeu a conexão. Suas informações ainda estão protegidas, porque o Google Chrome interrompeu a conexão antes que os dados fossem trocados.</translation>
 <translation id="168841957122794586">O certificado do servidor contém uma chave de criptografia fraca.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Este valor está obsoleto para esta política.</translation>
 <translation id="2262243747453050782">Erro HTTP</translation>
 <translation id="2270484714375784793">Número do telefone</translation>
-<translation id="2283340219607151381">Salvar e preencher endereços</translation>
 <translation id="2292556288342944218">O seu acesso à Internet está bloqueado</translation>
 <translation id="2316887270356262533">Libera menos de 1 MB. O carregamento de alguns sites pode ficar mais lento no seu próximo acesso.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> exige um nome de usuário e uma senha.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">Código Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Salvar e preencher as formas de pagamento</translation>
 <translation id="7180611975245234373">Atualizar</translation>
 <translation id="7182878459783632708">Não há políticas definidas</translation>
 <translation id="7186367841673660872">Esta página foi traduzida de<ph name="ORIGINAL_LANGUAGE" />para<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index 1f2ca0fb5..c999d82 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Experimente limpar os cookies<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">A sessão selecionada não existe.</translation>
 <translation id="1323433172918577554">Mostrar mais</translation>
-<translation id="132390688737681464">Guardar e preencher endereços</translation>
 <translation id="1333989956347591814">A sua atividade <ph name="BEGIN_EMPHASIS" />poderá continuar visível<ph name="END_EMPHASIS" /> para:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Os Sites que visita
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protocolo não suportado</translation>
 <translation id="1655462015569774233">{1,plural, =1{Este servidor não conseguiu provar que é <ph name="DOMAIN" />; o seu certificado de segurança expirou ontem. Isto pode ser o resultado de uma configuração incorreta ou de um invasor a intercetar a sua ligação. O relógio do seu computador está atualmente configurado para <ph name="CURRENT_DATE" />. Será que isso está correto? Em caso negativo, deve corrigir o relógio do seu sistema e depois atualizar esta página.}other{Este servidor não conseguiu provar que é <ph name="DOMAIN" />; o seu certificado de segurança expirou há # dias. Isto pode ser o resultado de uma configuração incorreta ou de um invasor a intercetar a sua ligação. O relógio do seu computador está atualmente configurado para <ph name="CURRENT_DATE" />. Será que isso está correto? Em caso negativo, deve corrigir o relógio do seu sistema e depois atualizar esta página.}}</translation>
 <translation id="1656489000284462475">Recolha</translation>
-<translation id="1662550410081243962">Guardar e preencher métodos de pagamento</translation>
 <translation id="1663943134801823270">Os cartões e os endereços são provenientes do Chrome. Pode geri-los nas <ph name="BEGIN_LINK" />Definições<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Normalmente, o site <ph name="SITE" /> utiliza a encriptação para proteger as suas informações. Quando o Google Chrome tentou estabelecer ligação a <ph name="SITE" /> desta vez, o Website devolveu credenciais invulgares e incorretas. Isto pode acontecer quando um utilizador mal intencionado tenta simular ser <ph name="SITE" /> ou quando um ecrã de início de sessão Wi-Fi interrompe a ligação. As suas informações continuam seguras porque o Google Chrome interrompeu a ligação antes de qualquer troca de dados.</translation>
 <translation id="168841957122794586">O certificado do servidor contém uma chave criptográfica fraca.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Este valor está desatualizado para esta política.</translation>
 <translation id="2262243747453050782">Erro HTTP</translation>
 <translation id="2270484714375784793">Número de telefone</translation>
-<translation id="2283340219607151381">Guardar e preencher endereços</translation>
 <translation id="2292556288342944218">O acesso à Internet está bloqueado</translation>
 <translation id="2316887270356262533">Liberta menos de 1 MB. É possível que alguns sites sejam carregados mais lentamente na sua próxima visita.</translation>
 <translation id="2317259163369394535">O domínio <ph name="DOMAIN" /> requer um nome de utilizador e uma palavra-passe.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">ID Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Guardar e preencher métodos de pagamento</translation>
 <translation id="7180611975245234373">Atualizar</translation>
 <translation id="7182878459783632708">Não estão definidas políticas</translation>
 <translation id="7186367841673660872">Esta página foi traduzida de<ph name="ORIGINAL_LANGUAGE" />para<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 7bf6346..af5af944 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Șterge cookie-urile<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Sesiunea selectată nu există.</translation>
 <translation id="1323433172918577554">Afișează mai multe</translation>
-<translation id="132390688737681464">Salvează și completează adresele</translation>
 <translation id="1333989956347591814">Este posibil ca activitatea ta <ph name="BEGIN_EMPHASIS" />să fie în continuare vizibilă<ph name="END_EMPHASIS" /> pentru:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />site-urile pe care le accesezi;
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Protocol neacceptat</translation>
 <translation id="1655462015569774233">{1,plural, =1{Acest server nu a putut dovedi că este <ph name="DOMAIN" />. Certificatul său de securitate a expirat ieri. Cauza poate fi o eroare de configurare sau interceptarea conexiunii de către un atacator. În prezent, ora computerului este setată la <ph name="CURRENT_DATE" />. Este corect? Dacă nu este, corectează ora sistemului și actualizează pagina.}few{Acest server nu a putut dovedi că este <ph name="DOMAIN" />. Certificatul său de securitate a expirat acum # zile. Cauza poate fi o eroare de configurare sau interceptarea conexiunii de către un atacator. În prezent, ora computerului este setată la <ph name="CURRENT_DATE" />. Este corect? Dacă nu este, corectează ora sistemului și actualizează pagina.}other{Acest server nu a putut dovedi că este <ph name="DOMAIN" />. Certificatul său de securitate a expirat acum # de zile. Cauza poate fi o eroare de configurare sau interceptarea conexiunii de către un atacator. În prezent, ora computerului este setată la <ph name="CURRENT_DATE" />. Este corect? Dacă nu este, corectează ora sistemului și actualizează pagina.}}</translation>
 <translation id="1656489000284462475">Preluare</translation>
-<translation id="1662550410081243962">Salvează și completează metodele de plată</translation>
 <translation id="1663943134801823270">Cardurile și adresele sunt din Chrome. Le poți gestiona în <ph name="BEGIN_LINK" />Setări<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Site-ul <ph name="SITE" /> folosește în mod obișnuit criptarea pentru a-ți proteja informațiile. Când Google Chrome a încercat să se conecteze la <ph name="SITE" /> de această dată, site-ul a returnat date de conectare neobișnuite și incorecte. Acest lucru s-a întâmplat fie pentru că un atacator încearcă să falsifice site-ul <ph name="SITE" />, fie pentru că un ecran de conectare Wi-Fi a întrerupt conexiunea. Securitatea informațiilor tale nu a fost afectată, deoarece Google Chrome a oprit conexiunea înainte ca datele să fie transferate.</translation>
 <translation id="168841957122794586">Certificatul de server conține o cheie criptografică slabă.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Valoarea este învechită pentru această politică.</translation>
 <translation id="2262243747453050782">Eroare HTTP</translation>
 <translation id="2270484714375784793">Număr telefon</translation>
-<translation id="2283340219607151381">Salvează și completează adresele</translation>
 <translation id="2292556288342944218">Accesul la internet este blocat</translation>
 <translation id="2316887270356262533">Eliberează mai puțin de 1 MB. Este posibil ca unele site-uri să se încarce mai lent la următoarea accesare.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> necesită un nume de utilizator și o parolă.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> și încă <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" /> și încă <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> și încă <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">Cod Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> și încă <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" /> și încă <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> și încă <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Salvează și completează metodele de plată</translation>
 <translation id="7180611975245234373">Actualizați</translation>
 <translation id="7182878459783632708">Nu au fost setate politici</translation>
 <translation id="7186367841673660872">Această pagină a fost tradusă din <ph name="ORIGINAL_LANGUAGE" /> în <ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 6b8a54c6..9d95f76 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Удалите файлы cookie<ph name="END_LINK" />.</translation>
 <translation id="1314614906530272393">Выбранный сеанс не существует.</translation>
 <translation id="1323433172918577554">Развернуть</translation>
-<translation id="132390688737681464">Сохранять и автоматически подставлять адреса</translation>
 <translation id="1333989956347591814">Ваши действия <ph name="BEGIN_EMPHASIS" />будут видны<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />сайтам, которые вы посещаете;
@@ -112,7 +111,6 @@
 <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" />. Если оно неправильное, измените его и обновите страницу.}few{Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Срок действия его сертификата безопасности истек # дня назад. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные. Обратите внимание, что на компьютере установлено время <ph name="CURRENT_DATE" />. Если оно неправильное, измените его и обновите страницу.}many{Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Срок действия его сертификата безопасности истек # дней назад. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные. Обратите внимание, что на компьютере установлено время <ph name="CURRENT_DATE" />. Если оно неправильное, измените его и обновите страницу.}other{Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Срок действия его сертификата безопасности истек # дня назад. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные. Обратите внимание, что на компьютере установлено время <ph name="CURRENT_DATE" />. Если оно неправильное, измените его и обновите страницу.}}</translation>
 <translation id="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" /> для защиты ваших данных обычно используется шифрование. Однако учетные данные, которые мы получили от сайта <ph name="SITE" /> сейчас, отличаются от тех, которые он отправляет обычно. Вероятно, вредоносный сайт пытается выдать себя за <ph name="SITE" />, либо страница подключения к сети Wi-Fi прервала соединение. Ваша информация по-прежнему в безопасности, так как браузер Google Chrome разорвал соединение до того, как произошел обмен данными.</translation>
 <translation id="168841957122794586">Сертификат сервера содержит ненадежный криптографический ключ.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Это значение для данного правила больше не используется.</translation>
 <translation id="2262243747453050782">Ошибка HTTP</translation>
 <translation id="2270484714375784793">Номер телефона</translation>
-<translation id="2283340219607151381">Сохранять и автоматически подставлять адреса</translation>
 <translation id="2292556288342944218">Доступ в Интернет закрыт</translation>
 <translation id="2316887270356262533">Освободится менее 1 МБ пространства. После этого некоторые веб-страницы могут загружаться дольше обычного.</translation>
 <translation id="2317259163369394535">Для доступа к домену <ph name="DOMAIN" /> необходимо указать имя пользователя и пароль.</translation>
@@ -862,7 +859,6 @@
 <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" /> способ оплаты}few{<ph name="PAYMENT_METHOD_PREVIEW" /> и ещё <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> способа оплаты}many{<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" /> вариант доставки}few{<ph name="SHIPPING_OPTION_PREVIEW" /> и ещё <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> варианта доставки}many{<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" />&gt;<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index 62333fc..195fe48 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Skúste vymazať súbory cookie<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Vybraná relácia neexistuje.</translation>
 <translation id="1323433172918577554">Zobraziť viac</translation>
-<translation id="132390688737681464">Ukladať a dopĺňať adresy</translation>
 <translation id="1333989956347591814">Vašu aktivitu <ph name="BEGIN_EMPHASIS" />stále môžu vidieť<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />navštívené weby
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Nepodporovaný protokol</translation>
 <translation id="1655462015569774233">{1,plural, =1{Tomuto serveru sa nepodarilo dokázať, že ide o doménu <ph name="DOMAIN" />; platnosť jej bezpečnostného certifikátu vypršala včera. Môže to byť následok nesprávnej konfigurácie alebo napadnutia vášho pripojenia útočníkom. Hodiny vášho počítača sú momentálne nastavené na <ph name="CURRENT_DATE" />. Je tento čas správny? Ak nie, opravte čas na hodinách systému a potom obnovte túto stránku.}few{Tomuto serveru sa nepodarilo dokázať, že ide o doménu <ph name="DOMAIN" />; platnosť jej bezpečnostného certifikátu vypršala pred # dňami. Môže to byť následok nesprávnej konfigurácie alebo napadnutia vášho pripojenia útočníkom. Hodiny vášho počítača sú momentálne nastavené na <ph name="CURRENT_DATE" />. Je tento čas správny? Ak nie, opravte čas na hodinách systému a potom obnovte túto stránku.}many{Tomuto serveru sa nepodarilo dokázať, že ide o doménu <ph name="DOMAIN" />; platnosť jej bezpečnostného certifikátu vypršala pred # dňom. Môže to byť následok nesprávnej konfigurácie alebo napadnutia vášho pripojenia útočníkom. Hodiny vášho počítača sú momentálne nastavené na <ph name="CURRENT_DATE" />. Je tento čas správny? Ak nie, opravte čas na hodinách systému a potom obnovte túto stránku.}other{Tomuto serveru sa nepodarilo dokázať, že ide o doménu <ph name="DOMAIN" />; platnosť jej bezpečnostného certifikátu vypršala pred # dňami. Môže to byť následok nesprávnej konfigurácie alebo napadnutia vášho pripojenia útočníkom. Hodiny vášho počítača sú momentálne nastavené na <ph name="CURRENT_DATE" />. Je tento čas správny? Ak nie, opravte čas na hodinách systému a potom obnovte túto stránku.}}</translation>
 <translation id="1656489000284462475">Vyzdvihnutie</translation>
-<translation id="1662550410081243962">Ukladať a dopĺňať spôsoby platby</translation>
 <translation id="1663943134801823270">Karty a adresy pochádzajú z Chromu. Môžete ich spravovať v <ph name="BEGIN_LINK" />Nastaveniach<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Web <ph name="SITE" /> zvyčajne chráni vaše informácie pomocou šifrovania. Keď sa Chrome tentokrát pokúsil pripojiť k webu <ph name="SITE" />, odoslal späť nezvyčajné a nesprávne poverenia. Môže sa to stať vtedy, keď sa za web <ph name="SITE" /> snaží vydávať útočník alebo keď pripojenie preruší prihlasovacia obrazovka siete Wi‑Fi. Vaše informácie sú stále zabezpečené, pretože Chrome zastavil pripojenie ešte pred výmenou dát.</translation>
 <translation id="168841957122794586">Certifikát servera obsahuje slabý kryptografický kľúč.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Táto hodnota už pre toto pravidlo nie je podporovaná.</translation>
 <translation id="2262243747453050782">Chyba protokolu HTTP</translation>
 <translation id="2270484714375784793">Telefónne číslo</translation>
-<translation id="2283340219607151381">Ukladať a dopĺňať adresy</translation>
 <translation id="2292556288342944218">Váš prístup k internetu je blokovaný</translation>
 <translation id="2316887270356262533">Uvoľní menej ako 1 MB. Niektoré weby sa môžu pri ďalšej návšteve načítať pomalšie.</translation>
 <translation id="2317259163369394535">Doména <ph name="DOMAIN" /> vyžaduje používateľské meno a heslo.</translation>
@@ -858,7 +855,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> ďalší}few{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> ďalšie}many{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> ďalšieho}other{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> ďalších}}</translation>
 <translation id="717330890047184534">ID služby Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ďalšia}few{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ďalšie}many{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ďalšej}other{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ďalších}}</translation>
-<translation id="7179323680825933600">Ukladať a dopĺňať spôsoby platby</translation>
 <translation id="7180611975245234373">Obnoviť</translation>
 <translation id="7182878459783632708">Nie sú nastavené žiadne pravidlá</translation>
 <translation id="7186367841673660872">Táto stránka bola preložená z jazyka<ph name="ORIGINAL_LANGUAGE" />do jazyka<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index 50815c6..22cf818 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Poskusite izbrisati piškotke<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Izbrana seja ne obstaja.</translation>
 <translation id="1323433172918577554">Pokaži več</translation>
-<translation id="132390688737681464">Shranjevanje in izpolnjevanje naslovov</translation>
 <translation id="1333989956347591814">Vaša dejavnost <ph name="BEGIN_EMPHASIS" />je morda še vedno vidna<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />spletnim mestom, ki jih obiščete,
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Nepodprt protokol</translation>
 <translation id="1655462015569774233">{1,plural, =1{Strežniku ni uspelo dokazati, da je domena <ph name="DOMAIN" />; njegovo varnostno potrdilo je poteklo včeraj. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave. Ura vašega računalnika je trenutno nastavljena na <ph name="CURRENT_DATE" />. Je to videti v redu? Če ni, pravilno nastavite sistemsko uro in nato osvežite stran.}one{Strežniku ni uspelo dokazati, da je domena <ph name="DOMAIN" />; njegovo varnostno potrdilo je poteklo pred # dnevom. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave. Ura vašega računalnika je trenutno nastavljena na <ph name="CURRENT_DATE" />. Je to videti v redu? Če ni, pravilno nastavite sistemsko uro in nato osvežite stran.}two{Strežniku ni uspelo dokazati, da je domena <ph name="DOMAIN" />; njegovo varnostno potrdilo je poteklo pred # dnevoma. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave. Ura vašega računalnika je trenutno nastavljena na <ph name="CURRENT_DATE" />. Je to videti v redu? Če ni, pravilno nastavite sistemsko uro in nato osvežite stran.}few{Strežniku ni uspelo dokazati, da je domena <ph name="DOMAIN" />; njegovo varnostno potrdilo je poteklo pred # dnevi. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave. Ura vašega računalnika je trenutno nastavljena na <ph name="CURRENT_DATE" />. Je to videti v redu? Če ni, pravilno nastavite sistemsko uro in nato osvežite stran.}other{Strežniku ni uspelo dokazati, da je domena <ph name="DOMAIN" />; njegovo varnostno potrdilo je poteklo pred # dnevi. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave. Ura vašega računalnika je trenutno nastavljena na <ph name="CURRENT_DATE" />. Je to videti v redu? Če ni, pravilno nastavite sistemsko uro in nato osvežite stran.}}</translation>
 <translation id="1656489000284462475">Prevzem</translation>
-<translation id="1662550410081243962">Shranjevanje in izpolnjevanje plačilnih sredstev</translation>
 <translation id="1663943134801823270">Kartice in naslovi so iz Chroma. Upravljate jih lahko v <ph name="BEGIN_LINK" />nastavitvah<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Spletno mesto <ph name="SITE" /> za zaščito vaših podatkov običajno uporablja šifriranje. Ko se je Google Chrome tokrat poskusil povezati s spletnim mestom <ph name="SITE" />, je to vrnilo nenavadne in nepravilne poverilnice. Do tega lahko pride, če se napadalec lažno predstavlja za spletno mesto <ph name="SITE" /> ali če je povezavo prekinil zaslon za prijavo v omrežje Wi-Fi. Vaši podatki so še vedno varni, saj je Google Chrome pred izmenjavo podatkov prekinil povezavo.</translation>
 <translation id="168841957122794586">Potrdilo strežnika vsebuje šibek šifrirni ključ.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Vrednost za ta pravilnik je zastarela.</translation>
 <translation id="2262243747453050782">Napaka HTTP</translation>
 <translation id="2270484714375784793">Telefonska številka</translation>
-<translation id="2283340219607151381">Shranjevanje in izpolnjevanje naslovov</translation>
 <translation id="2292556288342944218">Internetni dostop je blokiran</translation>
 <translation id="2316887270356262533">Sprosti manj kot 1 MB. Nekatera spletna mesta se bodo ob naslednjem obisku morda počasneje naložila.</translation>
 <translation id="2317259163369394535">Domena <ph name="DOMAIN" /> zahteva uporabniško ime in geslo.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> in še <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" /> in še <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}two{<ph name="PAYMENT_METHOD_PREVIEW" /> in še <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" /> in še <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> in še <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">ID za Gaio:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> in še <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" /> in še <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}two{<ph name="SHIPPING_OPTION_PREVIEW" /> in še <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" /> in še <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> in še <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Shranjevanje in izpolnjevanje plačilnih sredstev</translation>
 <translation id="7180611975245234373">Osveži</translation>
 <translation id="7182878459783632708">Ni nastavljenih pravilnikov</translation>
 <translation id="7186367841673660872">Ta stran je bila prevedena iz jezika<ph name="ORIGINAL_LANGUAGE" />v jezik<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index ad9d6d0..34a136a 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Покушајте да обришете колачиће<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Изабрана сесија не постоји.</translation>
 <translation id="1323433172918577554">Прикажи више</translation>
-<translation id="132390688737681464">Чувај и уноси адресе</translation>
 <translation id="1333989956347591814">Активности ће <ph name="BEGIN_EMPHASIS" />можда ипак бити видљиве<ph name="END_EMPHASIS" /> за:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />веб-сајтове које посећујете
@@ -112,7 +111,6 @@
 <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" />. Да ли је то тачно? Ако није, требало би да исправите сат система и да затим освежите ову страницу.}few{Овај сервер не може да докаже да је <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" /> или је екран за Wi-Fi пријављивање прекинуо везу. Информације су и даље безбедне зато што је Google Chrome прекинуо везу пре него што су размењени било какви подаци.</translation>
 <translation id="168841957122794586">Сертификат сервера садржи слаб криптографски кључ.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Ова вредност је застарела за ове смернице.</translation>
 <translation id="2262243747453050782">HTTP грешка</translation>
 <translation id="2270484714375784793">Број телефона</translation>
-<translation id="2283340219607151381">Чувај и уноси адресе</translation>
 <translation id="2292556288342944218">Приступ интернету је блокиран</translation>
 <translation id="2316887270356262533">Ослобађа мање од 1 MB. Неки сајтови ће се можда спорије учитавати кад их следећи пут посетите.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> захтева корисничко име и лозинку.</translation>
@@ -862,7 +859,6 @@
 <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" />}few{<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" />}few{<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>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index c4d2686..f38389fd 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Testa att rensa cookies<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Den valda sessionen finns inte.</translation>
 <translation id="1323433172918577554">Visa fler</translation>
-<translation id="132390688737681464">Spara och fyll i adresser</translation>
 <translation id="1333989956347591814">Din aktivitet <ph name="BEGIN_EMPHASIS" />kanske fortfarande är synlig<ph name="END_EMPHASIS" /> för:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />webbplatser som du besöker
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Det finns inget stöd för protokollet</translation>
 <translation id="1655462015569774233">{1,plural, =1{Det gick inte att bevisa att serverns identitet är <ph name="DOMAIN" /> eftersom dess säkerhetscertifikat gick ut i går. Det kan bero på att servern är felkonfigurerad eller att anslutningen har blivit kapad. Dagens datum är <ph name="CURRENT_DATE" /> enligt datorklockan. Går den rätt? I annat fall bör du ställa om datorklockan och sedan uppdatera sidan.}other{Det gick inte att bevisa att serverns identitet är <ph name="DOMAIN" /> eftersom dess säkerhetscertifikat gick ut för # dagar sedan. Det kan bero på att servern är felkonfigurerad eller att anslutningen har blivit kapad. Dagens datum är <ph name="CURRENT_DATE" /> enligt datorklockan. Går den rätt? I annat fall bör du ställa om datorklockan och sedan uppdatera sidan.}}</translation>
 <translation id="1656489000284462475">Upphämtning</translation>
-<translation id="1662550410081243962">Spara och fyll i betalningsmetoder</translation>
 <translation id="1663943134801823270">Kort och adresser har hämtats från Chrome. Du hanterar dessa under <ph name="BEGIN_LINK" />Inställningar<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">På <ph name="SITE" /> används vanligtvis kryptering (SSL) för att skydda din information. När Chrome försökte ansluta till <ph name="SITE" /> den här gången skickade webbplatsen tillbaka ovanliga och felaktiga uppgifter. Sådant kan hända när en angripare utger sig för att vara <ph name="SITE" /> eller när anslutningen har avbrutits av en Wi-Fi-inloggningsskärm. Din information är fortfarande säker eftersom Chrome avbröt anslutningen innan någon data utbyttes.</translation>
 <translation id="168841957122794586">Servercertifikatet innehåller en svag kryptografisk nyckel.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Värdet är inte längre giltigt för policyn.</translation>
 <translation id="2262243747453050782">HTTP-fel</translation>
 <translation id="2270484714375784793">Telefonnummer</translation>
-<translation id="2283340219607151381">Spara och fyll i adresser</translation>
 <translation id="2292556288342944218">Internetanslutningen har blockerats</translation>
 <translation id="2316887270356262533">Frigör mindre än 1 MB. Vissa webbplatser kan läsas in långsammare nästa gång du besöker dem.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> kräver användarnamn och lösenord.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> och <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> till}other{<ph name="PAYMENT_METHOD_PREVIEW" /> och <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> till}}</translation>
 <translation id="717330890047184534">Gaia-id:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> och <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> till}other{<ph name="SHIPPING_OPTION_PREVIEW" /> och <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> till}}</translation>
-<translation id="7179323680825933600">Spara och fyll i betalningsmetoder</translation>
 <translation id="7180611975245234373">Uppdatera</translation>
 <translation id="7182878459783632708">Inga policyer har ställts in</translation>
 <translation id="7186367841673660872">Sidan har översatts från<ph name="ORIGINAL_LANGUAGE" />till<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index cad8fae..4e7ee75 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Jaribu kufuta vidakuzi kwenye kivinjari chako<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Kipindi ulichochagua hakipo.</translation>
 <translation id="1323433172918577554">Onyesha Zaidi</translation>
-<translation id="132390688737681464">Hifadhi na Ujaze Anwani</translation>
 <translation id="1333989956347591814">Huenda bado shughuli zako <ph name="BEGIN_EMPHASIS" />Zitaonwa<ph name="END_EMPHASIS" /> na:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Tovuti utakazotembelea
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Itifaki haitumiki</translation>
 <translation id="1655462015569774233">{1,plural, =1{Seva hii haikuweza kuthibitisha kuwa ni <ph name="DOMAIN" />; cheti chake cha usalama kilikwisha muda jana. Hii inaweza kusababishwa na usanidi usiofaa au mvamizi kuingilia muunganisho wako. Saa ya kompyuta kwa sasa imewekwa kuwa <ph name="CURRENT_DATE" />. Je, hiyo ni sahihi? Ikiwa si sahihi, rekebisha saa ya mfumo wako kisha uonyeshe upya ukurasa huu.}other{Seva hii haikuweza kuthibitisha kuwa ni <ph name="DOMAIN" />; cheti chake cha usalama kilikwisha muda siku # zilizopita. Hii inaweza kusababishwa na usanidi usiofaa au mvamizi kuingilia muunganisho wako. Saa ya kompyuta kwa sasa imewekwa kuwa <ph name="CURRENT_DATE" />. Je, hiyo ni sahihi? Ikiwa si sahihi, rekebisha saa ya mfumo wako kisha uonyeshe upya ukurasa huu.}}</translation>
 <translation id="1656489000284462475">Muda wa kuabiri gari</translation>
-<translation id="1662550410081243962">Hifadhi na ujaze njia za kulipa</translation>
 <translation id="1663943134801823270">Kadi na anwani zinatoka Chrome. Unaweza kuzidhibiti kwenye <ph name="BEGIN_LINK" />Mipangilio<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898">Kwa kawaida <ph name="SITE" /> hutumia usimbaji fiche ili kulinda maelezo yako. Google Chrome ilipojaribu kuunganisha kwenye <ph name="SITE" /> wakati huu, tovuti ilituma kitambulisho kisicho cha kawaida na kisicho sahihi. Hili linaweza kutokea mvamizi anapojaribu kujifanya kuwa <ph name="SITE" />, au uchanganuzi wa kuingia katika Wi-Fi umeingilia muunganisho. Maelezo yako yangali salama kwa sababu Google Chrome ilisimamisha muunganisho kabla data yoyote itumwe.</translation>
 <translation id="168841957122794586">Cheti cha seva kina kitufe dhaifu cha kifichua msimbo.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Thamani hii inapingwa kwa sera hii.</translation>
 <translation id="2262243747453050782">Hitilfau ya HTTP</translation>
 <translation id="2270484714375784793">Nambari ya simu</translation>
-<translation id="2283340219607151381">Hifadhi na ujaze anwani</translation>
 <translation id="2292556288342944218">Ufikiaji wako wa intaneti umezuiwa</translation>
 <translation id="2316887270356262533">Huongeza nafasi isiyozidi MB 1. Baadhi ya tovuti huenda zikapakia polepole zaidi utakapozivinjari tena.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> inahitaji jina la mtumiaji na nenosiri.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> na nyingine <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> na nyingine <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="717330890047184534">Kitambulisho cha Gaia</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> na nyingine <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> na nyingine <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
-<translation id="7179323680825933600">Hifadhi na Ujaze Njia za Kulipa</translation>
 <translation id="7180611975245234373">Onyesha upya</translation>
 <translation id="7182878459783632708">Hakuna sera zilizowekwa</translation>
 <translation id="7186367841673660872">Ukurasa huu umetafsiriwa kutoka<ph name="ORIGINAL_LANGUAGE" />hadi<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index 7f968efa..f2ef67e 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />குக்கீகளை அழிக்கவும்<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">தேர்ந்தெடுத்த அமர்வு இல்லை.</translation>
 <translation id="1323433172918577554">மேலும் காட்டு</translation>
-<translation id="132390688737681464">முகவரிகளைச் சேமித்துத் தானாக நிரப்பு</translation>
 <translation id="1333989956347591814">இருப்பினும், பின்வரும் தரப்பினர் உங்கள் செயல்பாட்டைப் <ph name="BEGIN_EMPHASIS" />பார்க்க முடியும்<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />நீங்கள் பார்வையிடும் இணையதளங்கள்
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">ஆதரிக்கப்படாத நெறிமுறை</translation>
 <translation id="1655462015569774233">{1,plural, =1{இந்தச் சேவையகம் தான் <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" /> உங்கள் தகவலைப் பாதுகாப்பதற்காக முறைமையாக்கத்தைப் பயன்படுத்துகிறது. இந்த முறை <ph name="SITE" /> உடன் இணைவதற்கு Google Chrome முயற்சித்தபோது வழக்கத்திற்கு மாறான மற்றும் தவறான நற்சான்றிதழ்களை இணையதளம் வழங்கியது. தாக்குபவர் தன்னை <ph name="SITE" /> ஆகக் காட்ட முயற்சிக்கும் போது அல்லது இணைப்பை வைஃபை உள்நுழைவுத் திரை குறுக்கிடும் போது இது ஏற்படலாம். இருப்பினும், தரவு எதுவும் பரிமாற்றப்படுவதற்கு முன் Google Chrome இணைப்பை நிறுத்தியதால் உங்கள் தகவல் பாதுகாப்பாகவே இருக்கிறது.</translation>
 <translation id="168841957122794586">சேவையக சான்றிதழில் வலுவற்ற குறியீட்டாக்க விசை இருக்கிறது.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">இந்த கொள்கைக்கான மதிப்பு தடுக்கப்பட்டது.</translation>
 <translation id="2262243747453050782">HTTP பிழை</translation>
 <translation id="2270484714375784793">தொலைபேசி எண்</translation>
-<translation id="2283340219607151381">முகவரிகளைச் சேமித்துத் தானாக நிரப்பு</translation>
 <translation id="2292556288342944218">உங்கள் இணைய அணுகல் தடுக்கப்பட்டது</translation>
 <translation id="2316887270356262533">1 மெ.பை. அளவிற்கும் குறைவான இடத்தைக் காலியாக்கும். நீங்கள் அடுத்த முறை பார்வையிடும் போது, சில தளங்கள் மிகவும் மெதுவாக ஏற்றப்படலாம்.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" />க்குப் பயனர்பெயரும் கடவுச்சொல்லும் தேவை.</translation>
@@ -859,7 +856,6 @@
 <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" />}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" />}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>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index db902b2c..a1d68271 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />మీ కుక్కీలను తీసివేయడానికి ప్రయత్నించండి<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">ఎంచుకోబడిన సెషన్ ఉనికిలో లేదు.</translation>
 <translation id="1323433172918577554">మరింత చూపు</translation>
-<translation id="132390688737681464">చిరునామాలను సేవ్ చేసి, పూరించండి</translation>
 <translation id="1333989956347591814">మీ కార్యాచరణ వీరికి <ph name="BEGIN_EMPHASIS" />ఇప్పటికీ కనిపించవచ్చు<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />మీరు సందర్శించే వెబ్‌సైట్‌లు
@@ -111,7 +110,6 @@
 <translation id="1645368109819982629">ప్రోటోకాల్‌కు మద్దతు లేదు</translation>
 <translation id="1655462015569774233">{1,plural, =1{ఈ సర్వర్ ఇది <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" />గా వ్యవహరించి మోసగించడానికి ప్రయత్నిస్తున్నప్పుడు లేదా Wi-Fi సైన్-ఇన్ స్క్రీన్ కనెక్షన్‌కు అంతరాయం కలిగించినప్పుడు ఇలా జరగవచ్చు. Google Chrome డేటా వినిమయం సంభవించక ముందే కనెక్షన్‌ను ఆపివేసినందున మీ సమాచారం ఇప్పటికీ సురక్షితంగానే ఉంది.</translation>
 <translation id="168841957122794586">సర్వర్ ప్రమాణపత్రం బలహీన క్రిప్టోగ్రాఫిక్ కీని కలిగి ఉంది.</translation>
@@ -196,7 +194,6 @@
 <translation id="225207911366869382">ఈ విధానం కోసం ఈ విలువ తగ్గించబడింది.</translation>
 <translation id="2262243747453050782">HTTP లోపం</translation>
 <translation id="2270484714375784793">ఫోన్ నంబర్</translation>
-<translation id="2283340219607151381">చిరునామాలను సేవ్ చేసి, పూరించండి</translation>
 <translation id="2292556288342944218">మీ ఇంటర్నెట్ ప్రాప్యత బ్లాక్ చేయబడింది</translation>
 <translation id="2316887270356262533">1 MB కంటే తక్కువ స్థలాన్ని ఖాళీ చేస్తుంది. మీ తదుపరి సందర్శనలో కొన్ని సైట్‌లు మరింత నెమ్మదిగా లోడ్ కావచ్చు.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" />కి వినియోగదారు పేరు మరియు పాస్‌వర్డ్ అవసరం.</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index faf83a3..511441f6 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />ลองล้างคุกกี้<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">ไม่มีเซสชันที่เลือก</translation>
 <translation id="1323433172918577554">แสดงเพิ่มเติม</translation>
-<translation id="132390688737681464">บันทึกและกรอกที่อยู่</translation>
 <translation id="1333989956347591814">ผู้อื่น<ph name="BEGIN_EMPHASIS" />อาจยังมองเห็น<ph name="END_EMPHASIS" />กิจกรรมของคุณ:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />เว็บไซต์ที่คุณเข้าชม
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">ไม่รองรับโปรโตคอล</translation>
 <translation id="1655462015569774233">{1,plural, =1{เซิร์ฟเวอร์นี้พิสูจน์ไม่ได้ว่าเป็น <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" /> หรือหน้าจอการลงชื่อเข้าใช้ Wi-Fi รบกวนการเชื่อมต่อ ข้อมูลของคุณยังปลอดภัยอยู่เนื่องจาก Google Chrome หยุดการเชื่อมต่อก่อนมีการแลกเปลี่ยนข้อมูล</translation>
 <translation id="168841957122794586">ใบรับรองของเซิร์ฟเวอร์มีคีย์การเข้ารหัสที่ไม่รัดกุม</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">เลิกใช้งานค่านี้กับนโยบายนี้</translation>
 <translation id="2262243747453050782">ข้อผิดพลาดของ HTTP</translation>
 <translation id="2270484714375784793">หมายเลขโทรศัพท์</translation>
-<translation id="2283340219607151381">บันทึกและกรอกที่อยู่</translation>
 <translation id="2292556288342944218">การเข้าถึงอินเทอร์เน็ตของคุณถูกบล็อก</translation>
 <translation id="2316887270356262533">หากเพิ่มพื้นที่ว่างไม่ถึง 1 MB ไซต์บางแห่งอาจโหลดช้าลงเมื่อคุณเข้าชมครั้งถัดไป</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> ต้องใช้ชื่อผู้ใช้และรหัสผ่าน</translation>
@@ -863,7 +860,6 @@
 <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" /> รายการ}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" /> วิธี}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>
@@ -1099,7 +1095,7 @@
 <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 แล้ว คุณใช้บัตรใบนี้จากอุปกรณ์ทุกเครื่องที่ลงชื่อเข้าใช้อยู่ได้แล้วในขณะนี้}other{เพิ่มบัตรเหล่านี้ลงในบัญชี Google แล้ว คุณใช้บัตรเหล่านี้จากอุปกรณ์ทุกเครื่องที่ลงชื่อเข้าใช้อยู่ได้แล้วในขณะนี้}}</translation>
+<translation id="8790803786526555470">{NUM_CARDS,plural, =1{เพิ่มบัตรใบนี้ลงในบัญชี Google แล้ว คุณสามารถใช้บัตรใบนี้ในอุปกรณ์ที่ลงชื่อเข้าใช้อยู่ได้ทุกเครื่อง}other{เพิ่มบัตรเหล่านี้ลงในบัญชี Google แล้ว คุณสามารถใช้บัตรเหล่านี้ในอุปกรณ์ที่ลงชื่อเข้าใช้อยู่ได้ทุกเครื่อง}}</translation>
 <translation id="8792621596287649091">คุณอาจเข้าถึงบัญชี <ph name="ORG_NAME" /> ไม่ได้หรือถูกโจรกรรมข้อมูลประจำตัว Chromium ขอแนะนำให้เปลี่ยนรหัสผ่านตอนนี้เลย</translation>
 <translation id="8800988563907321413">คำแนะนำในบริเวณใกล้เคียงจะปรากฏที่นี่</translation>
 <translation id="8820817407110198400">บุ๊กมาร์ก</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 071e2cb8..d79534b 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Çerezlerinizi temizlemeyi deneyin<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Seçilen oturum mevcut değil.</translation>
 <translation id="1323433172918577554">Daha Fazla Göster</translation>
-<translation id="132390688737681464">Adresleri Kaydet ve Doldur</translation>
 <translation id="1333989956347591814">Etkinliğiniz şunlar tarafından <ph name="BEGIN_EMPHASIS" />yine de görülebilir<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Ziyaret ettiğiniz web siteleri
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Desteklenmeyen protokol</translation>
 <translation id="1655462015569774233">{1,plural, =1{Bu sunucu, <ph name="DOMAIN" /> olduğunu kanıtlayamadı. Güvenlik sertifikasının süresi dün sona erdi. Bu durum, bir yanlış yapılandırmadan veya bağlantınıza müdahale eden bir saldırgandan kaynaklanıyor olabilir. Bilgisayarınızın saati geçerli olarak <ph name="CURRENT_DATE" /> tarihine ayarlı. Bu ayar doğru görünüyor mu? Değilse, sisteminizin saatini düzeltmeli ve sonra bu sayfayı yenilemelisiniz.}other{Bu sunucu, <ph name="DOMAIN" /> olduğunu kanıtlayamadı. Güvenlik sertifikası # gün önce sona erdi. Bu durum, bir yanlış yapılandırmadan veya bağlantınıza müdahale eden bir saldırgandan kaynaklanıyor olabilir. Bilgisayarınızın saati geçerli olarak <ph name="CURRENT_DATE" /> tarihine ayarlı. Bu ayar doğru görünüyor mu? Değilse, sisteminizin saatini düzeltmeli ve sonra bu sayfayı yenilemelisiniz.}}</translation>
 <translation id="1656489000284462475">Alma</translation>
-<translation id="1662550410081243962">Ödeme yöntemlerini kaydet ve doldur</translation>
 <translation id="1663943134801823270">Kartlar ve adresler Chrome'dan alınmaktadır. Bu bilgileri <ph name="BEGIN_LINK" />Ayarlar<ph name="END_LINK" />'dan yönetebilirsiniz.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> normalde bilgilerinizi korumak için şifreleme kullanmaktadır. Google Chrome bu sefer <ph name="SITE" /> sitesine bağlanmayı denediğinde, web sitesi sıra dışı ve yanlış kimlik bilgileri döndürdü. Bir saldırgan <ph name="SITE" /> gibi davranmaya çalışıyor olabilir ya da bir Kablosuz oturum açma ekranı bağlantıyı kesmiştir. Google Chrome herhangi bir veri alışverişinden önce bağlantıyı durdurduğu için bilgileriniz hâlâ güvendedir.</translation>
 <translation id="168841957122794586">Sunucu sertifikasında zayıf bir şifreleme anahtarı var.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Bu değer bu politika için kullanımdan kaldırıldı.</translation>
 <translation id="2262243747453050782">HTTP hatası</translation>
 <translation id="2270484714375784793">Telefon numarası</translation>
-<translation id="2283340219607151381">Adresleri kaydet ve doldur</translation>
 <translation id="2292556288342944218">İnternet erişiminiz engellendi</translation>
 <translation id="2316887270356262533">1 MB'tan az yer açar. Bir sonraki ziyaretinizde bazı siteler daha yavaş yüklenebilir.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> için kullanıcı adı ve şifre gerekiyor.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> ve <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> yöntem daha}other{<ph name="PAYMENT_METHOD_PREVIEW" /> ve <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> yöntem daha}}</translation>
 <translation id="717330890047184534">Gaia Kimliği:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> ve <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> seçenek daha}other{<ph name="SHIPPING_OPTION_PREVIEW" /> ve <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> seçenek daha}}</translation>
-<translation id="7179323680825933600">Ödeme Yöntemlerini Kaydet ve Doldur</translation>
 <translation id="7180611975245234373">Yenile</translation>
 <translation id="7182878459783632708">Hiçbir politika ayarlanmamış</translation>
 <translation id="7186367841673660872">Bu sayfa,<ph name="ORIGINAL_LANGUAGE" />dilinden<ph name="LANGUAGE_LANGUAGE" />diline çevrilmiştir</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 4385599b9..a1d5f243 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Спробуйте видалити файли cookie<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Вибраний сеанс не існує.</translation>
 <translation id="1323433172918577554">Показати більше</translation>
-<translation id="132390688737681464">Зберігати й заповнювати адреси</translation>
 <translation id="1333989956347591814">Дані про вашу активність <ph name="BEGIN_EMPHASIS" />усе ще можуть бачити<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />адміністратори веб-сайтів, які ви відвідуєте
@@ -112,7 +111,6 @@
 <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" />. Якщо дата неправильна, налаштуйте системний годинник і оновіть цю сторінку.}few{Не вдалося підтвердити, що це сервер <ph name="DOMAIN" />. Його сертифікат перестав діяти # дні тому. Можливо, сервер налаштовано неправильно або хтось намагається перехопити ваші дані. На годиннику вашого комп’ютера зараз <ph name="CURRENT_DATE" />. Якщо дата неправильна, налаштуйте системний годинник і оновіть цю сторінку.}many{Не вдалося підтвердити, що це сервер <ph name="DOMAIN" />. Його сертифікат перестав діяти # днів тому. Можливо, сервер налаштовано неправильно або хтось намагається перехопити ваші дані. На годиннику вашого комп’ютера зараз <ph name="CURRENT_DATE" />. Якщо дата неправильна, налаштуйте системний годинник і оновіть цю сторінку.}other{Не вдалося підтвердити, що це сервер <ph name="DOMAIN" />. Його сертифікат перестав діяти # дня тому. Можливо, сервер налаштовано неправильно або хтось намагається перехопити ваші дані. На годиннику вашого комп’ютера зараз <ph name="CURRENT_DATE" />. Якщо дата неправильна, налаштуйте системний годинник і оновіть цю сторінку.}}</translation>
 <translation id="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" /> зазвичай використовує шифрування для захисту вашої інформації. Під час цієї спроби Chrome під’єднатися до сторінки <ph name="SITE" /> з неї отримано незвичні й неправильні облікові дані. Це може статися, коли зловмисник намагається видавати себе за веб-сайт <ph name="SITE" /> або з’єднання перервано екраном входу Wi-Fi. Ваша інформація залишається захищеною, оскільки Chrome припинив з’єднання до того, як почався обмін будь-якими даними.</translation>
 <translation id="168841957122794586">Сертифікат сервера містить слабкий криптографічний ключ.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Дію цього значення припинено для цього правила</translation>
 <translation id="2262243747453050782">Помилка HTTP</translation>
 <translation id="2270484714375784793">Номер телефону</translation>
-<translation id="2283340219607151381">Зберігати й заповнювати адреси</translation>
 <translation id="2292556288342944218">Ваш доступ до Інтернету заблоковано</translation>
 <translation id="2316887270356262533">Звільняє менше 1 Мб. Деякі сайти можуть завантажуватися повільніше під час наступного відвідування.</translation>
 <translation id="2317259163369394535">Для сайту <ph name="DOMAIN" /> потрібно ввести ім’я користувача та пароль.</translation>
@@ -863,7 +860,6 @@
 <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" />}few{<ph name="PAYMENT_METHOD_PREVIEW" /> і ще <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}many{<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" />}few{<ph name="SHIPPING_OPTION_PREVIEW" /> і ще <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}many{<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>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index 2248271d..e724911 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Thử xóa các cookie của bạn<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">Phiên đã chọn không tồn tại.</translation>
 <translation id="1323433172918577554">Xem thêm</translation>
-<translation id="132390688737681464">Lưu và điền địa chỉ</translation>
 <translation id="1333989956347591814">Hoạt động của bạn <ph name="BEGIN_EMPHASIS" />có thể vẫn hiển thị<ph name="END_EMPHASIS" /> với:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />Trang web bạn truy cập
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">Giao thức không được hỗ trợ</translation>
 <translation id="1655462015569774233">{1,plural, =1{Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này đã hết hạn hôm qua. Điều này có thể do cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn. Đồng hồ máy tính của bạn hiện được đặt là <ph name="CURRENT_DATE" />. Ngày này có đúng không? Nếu không đúng, bạn phải sửa lại đồng hồ của hệ thống rồi làm mới trang này.}other{Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này đã hết hạn cách đây # ngày. Điều này có thể do cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn. Đồng hồ máy tính của bạn hiện được đặt là <ph name="CURRENT_DATE" />. Ngày này có đúng không? Nếu không đúng, bạn phải sửa lại đồng hồ của hệ thống rồi làm mới trang này.}}</translation>
 <translation id="1656489000284462475">Nhận hàng</translation>
-<translation id="1662550410081243962">Lưu và điền phương thức thanh toán</translation>
 <translation id="1663943134801823270">Thẻ và địa chỉ từ Chrome. Bạn có thể quản lý thẻ và địa chỉ trong <ph name="BEGIN_LINK" />Cài đặt<ph name="END_LINK" />.</translation>
 <translation id="1676269943528358898"><ph name="SITE" /> thường sử dụng mã hóa để bảo vệ thông tin của bạn. Khi Google Chrome tìm cách kết nối với <ph name="SITE" /> tại thời điểm này, trang web đã gửi lại thông tin đăng nhập không chính xác và bất thường. Điều này có thể xảy ra khi kẻ tấn công đang cố gắng giả mạo là <ph name="SITE" /> hoặc màn hình đăng nhập Wi-Fi đã làm gián đoạn kết nối. Thông tin của bạn vẫn an toàn do Google Chrome đã ngừng kết nối trước khi bất kỳ dữ liệu nào được trao đổi.</translation>
 <translation id="168841957122794586">Chứng chỉ máy chủ chứa khóa mật mã yếu.</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">Giá trị này không được dùng cho chính sách này nữa.</translation>
 <translation id="2262243747453050782">Lỗi HTTP</translation>
 <translation id="2270484714375784793">Số điện thoại</translation>
-<translation id="2283340219607151381">Lưu và điền địa chỉ</translation>
 <translation id="2292556288342944218">Quyền truy cập Internet của bạn bị chặn</translation>
 <translation id="2316887270356262533">Bộ nhớ đệm còn chưa đầy 1 MB. Một số trang web có thể tải chậm hơn vào lần tới bạn truy cập.</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> yêu cầu tên người dùng và mật khẩu.</translation>
@@ -863,7 +860,6 @@
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> và <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> phương thức thanh toán khác}other{<ph name="PAYMENT_METHOD_PREVIEW" /> và <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> phương thức thanh toán khác}}</translation>
 <translation id="717330890047184534">ID Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> và <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> tùy chọn giao hàng khác}other{<ph name="SHIPPING_OPTION_PREVIEW" /> và <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> tùy chọn giao hàng khác}}</translation>
-<translation id="7179323680825933600">Lưu và điền phương thức thanh toán</translation>
 <translation id="7180611975245234373">Làm mới</translation>
 <translation id="7182878459783632708">Không có chính sách nào được đặt</translation>
 <translation id="7186367841673660872">Trang này đã được dịch từ<ph name="ORIGINAL_LANGUAGE" />sang<ph name="LANGUAGE_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index dc331f45..7baa4a9 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />尝试清除 Cookie<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">所选会话不存在。</translation>
 <translation id="1323433172918577554">展开</translation>
-<translation id="132390688737681464">保存并填写地址</translation>
 <translation id="1333989956347591814">以下各方<ph name="BEGIN_EMPHASIS" />可能仍会看到<ph name="END_EMPHASIS" />您的活动:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />您访问的网站
@@ -99,6 +98,7 @@
 <translation id="1559572115229829303">&lt;p&gt;您设备的日期和时间(<ph name="DATE_AND_TIME" />)不正确,因此无法与 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 建立私密连接。&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>
@@ -111,7 +111,6 @@
 <translation id="1645368109819982629">协议不受支持</translation>
 <translation id="1655462015569774233">{1,plural, =1{此服务器无法证明它是 <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" />,或 Wi-Fi 登录屏幕中断了此次连接。请放心,您的信息仍然是安全的,因为 Google Chrome 尚未进行任何数据交换便停止了连接。</translation>
 <translation id="168841957122794586">服务器证书包含弱加密密钥。</translation>
@@ -138,6 +137,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">代理已设置为使用固定的代理服务器,而不是 .pac 脚本网址。</translation>
@@ -196,7 +196,6 @@
 <translation id="225207911366869382">适用于该政策的此值已弃用。</translation>
 <translation id="2262243747453050782">HTTP 错误</translation>
 <translation id="2270484714375784793">电话号码</translation>
-<translation id="2283340219607151381">保存并填写地址</translation>
 <translation id="2292556288342944218">您被禁止访问互联网</translation>
 <translation id="2316887270356262533">释放了不到 1 MB。当您下次访问时,某些网站的加载速度可能会更慢。</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> 要求提供用户名和密码。</translation>
@@ -208,6 +207,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>
@@ -349,11 +349,13 @@
           <ph name="LIST_ITEM" />Cookie 和网站数据
           <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>
@@ -449,6 +451,7 @@
 <translation id="4110652170750985508">查看您的付款</translation>
 <translation id="4116663294526079822">在此网站上始终允许</translation>
 <translation id="4117700440116928470">政策范围不受支持。</translation>
+<translation id="4119109454650683048">请检查下面的信息,并修正所有错误(如有必要)</translation>
 <translation id="4129401438321186435">{COUNT,plural, =1{1 项其他内容}other{# 项其他内容}}</translation>
 <translation id="4130226655945681476">检查网线、调制解调器和路由器</translation>
 <translation id="413544239732274901">了解详情</translation>
@@ -554,6 +557,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>
@@ -619,6 +623,7 @@
     <ph name="END_LIST" /></translation>
 <translation id="5285570108065881030">显示所有已保存的密码</translation>
 <translation id="5287240709317226393">显示 Cookie</translation>
+<translation id="5288108484102287882">政策值验证引发了警告</translation>
 <translation id="5299298092464848405">解析策略时出错</translation>
 <translation id="5308380583665731573">连接</translation>
 <translation id="5308689395849655368">已停用崩溃报告。</translation>
@@ -631,6 +636,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>
@@ -706,6 +712,7 @@
 <translation id="5893752035575986141">接受信用卡。</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" />(已同步)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{正在使用 1 个}other{正在使用 # 个}}</translation>
+<translation id="5922853866070715753">即将完成</translation>
 <translation id="5939518447894949180">重置</translation>
 <translation id="5967592137238574583">修改联系信息</translation>
 <translation id="5967867314010545767">从历史记录中移除</translation>
@@ -726,6 +733,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 帐号中,以实现更快捷的跨设备结帐。}other{这些卡将会保存到您的 Google 帐号中,以实现更快捷的跨设备结帐。}}</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 个密码(已同步)}other{# 个密码(已同步)}}</translation>
@@ -827,6 +835,7 @@
 <translation id="6965978654500191972">设备</translation>
 <translation id="6970216967273061347">区</translation>
 <translation id="6973656660372572881">固定代理服务器和 .pac 脚本网址均已指定。</translation>
+<translation id="6979440798594660689">静音(默认)</translation>
 <translation id="6984479912851154518">即将退出无痕模式,以便通过外部应用付款。要继续吗?</translation>
 <translation id="6989763994942163495">显示高级设置...</translation>
 <translation id="7012363358306927923">中国银联</translation>
@@ -858,6 +867,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="DATE_AND_TIME" />)不正确,因此无法与 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 建立私密连接。</translation>
 <translation id="7260504762447901703">撤消访问权限</translation>
 <translation id="7271803869921933038">接受的预付卡</translation>
@@ -1035,6 +1047,9 @@
 <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>
@@ -1067,13 +1082,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;R)</translation>
+<translation id="8790803786526555470">{NUM_CARDS,plural, =1{此卡已添加到您的 Google 帐号中。现在,您便可在您已登录的任何设备上使用此卡了。}other{这些卡已添加到您的 Google 帐号中。现在,您便可在您已登录的任何设备上使用这些卡了。}}</translation>
 <translation id="8792621596287649091">您可能会无法再访问自己的 <ph name="ORG_NAME" /> 帐号,或者身份信息遭到盗用。Chromium 建议您立即更改密码。</translation>
 <translation id="8800988563907321413">此处将显示系统建议您浏览的附近网页</translation>
 <translation id="8820817407110198400">书签</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 3578cf8..7b47d89 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -63,7 +63,6 @@
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />試試看清除 Cookie<ph name="END_LINK" /></translation>
 <translation id="1314614906530272393">你所選的工作階段不存在。</translation>
 <translation id="1323433172918577554">顯示完整清單</translation>
-<translation id="132390688737681464">儲存及填入地址</translation>
 <translation id="1333989956347591814">以下各方<ph name="BEGIN_EMPHASIS" />可能仍會看到<ph name="END_EMPHASIS" />你的活動:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />你造訪的網站
@@ -112,7 +111,6 @@
 <translation id="1645368109819982629">不支援的通訊協定</translation>
 <translation id="1655462015569774233">{1,plural, =1{這個伺服器無法證明所在網域是 <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" />,或是受到 Wi-Fi 登入畫面影響而造成連線中斷。不過請放心,Google Chrome 已及時停止連線,並未傳輸任何資料,因此您的資訊仍然安全無虞。</translation>
 <translation id="168841957122794586">伺服器憑證含有防護力薄弱的加密編譯金鑰。</translation>
@@ -198,7 +196,6 @@
 <translation id="225207911366869382">這個政策值已遭汰換。</translation>
 <translation id="2262243747453050782">HTTP 錯誤</translation>
 <translation id="2270484714375784793">電話號碼</translation>
-<translation id="2283340219607151381">儲存及填入地址</translation>
 <translation id="2292556288342944218">您的網際網路存取權遭到封鎖</translation>
 <translation id="2316887270356262533">釋出不到 1 MB。下次造訪部分網站時,載入速度可能會變慢。</translation>
 <translation id="2317259163369394535"><ph name="DOMAIN" /> 要求提供使用者名稱和密碼。</translation>
@@ -863,7 +860,6 @@
 <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" /> 種付款方式}other{<ph name="PAYMENT_METHOD_PREVIEW" /> 和另外 <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> 種付款方式}}</translation>
 <translation id="717330890047184534">GAIA ID:</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" /> 種選項}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>
diff --git a/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle_unittest.cc b/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle_unittest.cc
index 46063d9..0f88cd59 100644
--- a/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle_unittest.cc
+++ b/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle_unittest.cc
@@ -160,6 +160,7 @@
     dealer_handle_ = std::make_unique<VerifiedRulesetDealer::Handle>(
         std::move(ruleset_task_runner));
     dealer_handle_->TryOpenAndSetRulesetFile(test_ruleset_pair_.indexed.path,
+                                             /*expected_checksum=*/0,
                                              base::DoNothing());
     ruleset_handle_ =
         std::make_unique<VerifiedRuleset::Handle>(dealer_handle_.get());
diff --git a/components/subresource_filter/content/browser/async_document_subresource_filter_unittest.cc b/components/subresource_filter/content/browser/async_document_subresource_filter_unittest.cc
index 2ef52ac..15817931 100644
--- a/components/subresource_filter/content/browser/async_document_subresource_filter_unittest.cc
+++ b/components/subresource_filter/content/browser/async_document_subresource_filter_unittest.cc
@@ -136,7 +136,8 @@
 }  // namespace
 
 TEST_F(AsyncDocumentSubresourceFilterTest, ActivationStateIsReported) {
-  dealer_handle()->TryOpenAndSetRulesetFile(ruleset().path, base::DoNothing());
+  dealer_handle()->TryOpenAndSetRulesetFile(
+      ruleset().path, /*expected_checksum=*/0, base::DoNothing());
   auto ruleset_handle = CreateRulesetHandle();
 
   AsyncDocumentSubresourceFilter::InitializationParams params(
@@ -152,7 +153,8 @@
 }
 
 TEST_F(AsyncDocumentSubresourceFilterTest, DeleteFilter_NoActivationCallback) {
-  dealer_handle()->TryOpenAndSetRulesetFile(ruleset().path, base::DoNothing());
+  dealer_handle()->TryOpenAndSetRulesetFile(
+      ruleset().path, /*expected_checksum=*/0, base::DoNothing());
   auto ruleset_handle = CreateRulesetHandle();
 
   AsyncDocumentSubresourceFilter::InitializationParams params(
@@ -169,7 +171,8 @@
 }
 
 TEST_F(AsyncDocumentSubresourceFilterTest, ActivationStateIsComputedCorrectly) {
-  dealer_handle()->TryOpenAndSetRulesetFile(ruleset().path, base::DoNothing());
+  dealer_handle()->TryOpenAndSetRulesetFile(
+      ruleset().path, /*expected_checksum=*/0, base::DoNothing());
   auto ruleset_handle = CreateRulesetHandle();
 
   AsyncDocumentSubresourceFilter::InitializationParams params(
@@ -190,7 +193,8 @@
 
 TEST_F(AsyncDocumentSubresourceFilterTest, DisabledForCorruptRuleset) {
   testing::TestRuleset::CorruptByFilling(ruleset(), 0, 100, 0xFF);
-  dealer_handle()->TryOpenAndSetRulesetFile(ruleset().path, base::DoNothing());
+  dealer_handle()->TryOpenAndSetRulesetFile(
+      ruleset().path, /*expected_checksum=*/0, base::DoNothing());
 
   auto ruleset_handle = CreateRulesetHandle();
 
@@ -207,7 +211,8 @@
 }
 
 TEST_F(AsyncDocumentSubresourceFilterTest, GetLoadPolicyForSubdocument) {
-  dealer_handle()->TryOpenAndSetRulesetFile(ruleset().path, base::DoNothing());
+  dealer_handle()->TryOpenAndSetRulesetFile(
+      ruleset().path, /*expected_checksum=*/0, base::DoNothing());
   auto ruleset_handle = CreateRulesetHandle();
 
   AsyncDocumentSubresourceFilter::InitializationParams params(
@@ -230,7 +235,8 @@
 }
 
 TEST_F(AsyncDocumentSubresourceFilterTest, FirstDisallowedLoadIsReported) {
-  dealer_handle()->TryOpenAndSetRulesetFile(ruleset().path, base::DoNothing());
+  dealer_handle()->TryOpenAndSetRulesetFile(
+      ruleset().path, /*expected_checksum=*/0, base::DoNothing());
   auto ruleset_handle = CreateRulesetHandle();
 
   TestCallbackReceiver first_disallowed_load_receiver;
@@ -264,7 +270,8 @@
 
 TEST_F(AsyncDocumentSubresourceFilterTest, UpdateActivationState) {
   // Properly initilize the ruleset and handle to use for computations.
-  dealer_handle()->TryOpenAndSetRulesetFile(ruleset().path, base::DoNothing());
+  dealer_handle()->TryOpenAndSetRulesetFile(
+      ruleset().path, /*expected_checksum=*/0, base::DoNothing());
   auto ruleset_handle = CreateRulesetHandle();
 
   // Initialize |filter| with a starting ActivationLevel of DRYRUN. This value
diff --git a/components/subresource_filter/content/browser/content_ruleset_service.cc b/components/subresource_filter/content/browser/content_ruleset_service.cc
index 03d3ead..1d872bf 100644
--- a/components/subresource_filter/content/browser/content_ruleset_service.cc
+++ b/components/subresource_filter/content/browser/content_ruleset_service.cc
@@ -12,7 +12,6 @@
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
 #include "components/subresource_filter/content/common/subresource_filter_messages.h"
-#include "components/subresource_filter/core/browser/ruleset_service.h"
 #include "components/subresource_filter/core/common/common_features.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
@@ -79,8 +78,10 @@
 
 void ContentRulesetService::TryOpenAndSetRulesetFile(
     const base::FilePath& file_path,
+    int expected_checksum,
     base::OnceCallback<void(base::File)> callback) {
-  ruleset_dealer_->TryOpenAndSetRulesetFile(file_path, std::move(callback));
+  ruleset_dealer_->TryOpenAndSetRulesetFile(file_path, expected_checksum,
+                                            std::move(callback));
 }
 
 void ContentRulesetService::PublishNewRulesetVersion(base::File ruleset_data) {
@@ -105,9 +106,10 @@
     ruleset_published_callback_.Run();
 }
 
-void ContentRulesetService::set_ruleset_service(
+void ContentRulesetService::SetAndInitializeRulesetService(
     std::unique_ptr<RulesetService> ruleset_service) {
   ruleset_service_ = std::move(ruleset_service);
+  ruleset_service_->Initialize();
 }
 
 void ContentRulesetService::IndexAndStoreAndPublishRulesetIfNeeded(
diff --git a/components/subresource_filter/content/browser/content_ruleset_service.h b/components/subresource_filter/content/browser/content_ruleset_service.h
index 51dbb602..5269e970 100644
--- a/components/subresource_filter/content/browser/content_ruleset_service.h
+++ b/components/subresource_filter/content/browser/content_ruleset_service.h
@@ -12,6 +12,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "components/subresource_filter/content/browser/verified_ruleset_dealer.h"
+#include "components/subresource_filter/core/browser/ruleset_service.h"
 #include "components/subresource_filter/core/browser/ruleset_service_delegate.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
@@ -67,16 +68,24 @@
   void PostAfterStartupTask(base::Closure task) override;
   void TryOpenAndSetRulesetFile(
       const base::FilePath& file_path,
+      int expected_checksum,
       base::OnceCallback<void(base::File)> callback) override;
 
   void PublishNewRulesetVersion(base::File ruleset_data) override;
 
-  void set_ruleset_service(std::unique_ptr<RulesetService> ruleset_service);
+  // Sets the ruleset_service_ member and calls its Initialize function.
+  void SetAndInitializeRulesetService(
+      std::unique_ptr<RulesetService> ruleset_service);
 
   // Forwards calls to the underlying ruleset_service_.
   void IndexAndStoreAndPublishRulesetIfNeeded(
       const UnindexedRulesetInfo& unindex_ruleset_info);
 
+  // The most recently indexed version associated with the ruleset_service_.
+  IndexedRulesetVersion GetMostRecentlyIndexedVersion() {
+    return ruleset_service_->GetMostRecentlyIndexedVersion();
+  }
+
   VerifiedRulesetDealer::Handle* ruleset_dealer() {
     return ruleset_dealer_.get();
   }
diff --git a/components/subresource_filter/content/browser/content_ruleset_service_unittest.cc b/components/subresource_filter/content/browser/content_ruleset_service_unittest.cc
index e6fd599..2df6a83 100644
--- a/components/subresource_filter/content/browser/content_ruleset_service_unittest.cc
+++ b/components/subresource_filter/content/browser/content_ruleset_service_unittest.cc
@@ -244,7 +244,7 @@
   // and post ruleset setup on |blocking_task_runner|. (Yes, exactly
   // |blocking_task_runner| via |ContentRulesetService| as its delegate).
   ASSERT_EQ(0u, blocking_task_runner->NumPendingTasks());
-  service->set_ruleset_service(std::make_unique<RulesetService>(
+  service->SetAndInitializeRulesetService(std::make_unique<RulesetService>(
       &prefs, background_task_runner, service.get(), base_dir));
 
   // The key test assertion is that ruleset data is published via exactly one
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc
index 214d84d..3567728 100644
--- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc
+++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc
@@ -140,6 +140,7 @@
     dealer_handle_ = std::make_unique<VerifiedRulesetDealer::Handle>(
         base::MessageLoopCurrent::Get()->task_runner());
     dealer_handle_->TryOpenAndSetRulesetFile(test_ruleset_pair_.indexed.path,
+                                             /*expected_checksum=*/0,
                                              base::DoNothing());
 
     throttle_manager_ =
diff --git a/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle_unittest.cc b/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle_unittest.cc
index 7aca8386..a9a9d89a 100644
--- a/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle_unittest.cc
+++ b/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle_unittest.cc
@@ -96,6 +96,7 @@
     dealer_handle_ = std::make_unique<VerifiedRulesetDealer::Handle>(
         base::MessageLoopCurrent::Get()->task_runner());
     dealer_handle_->TryOpenAndSetRulesetFile(test_ruleset_pair_.indexed.path,
+                                             /*expected_checksum=*/0,
                                              base::DoNothing());
     ruleset_handle_ =
         std::make_unique<VerifiedRuleset::Handle>(dealer_handle_.get());
diff --git a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc
index 18b9003..1bd07d5 100644
--- a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc
+++ b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc
@@ -171,6 +171,7 @@
     ruleset_dealer_ = std::make_unique<VerifiedRulesetDealer::Handle>(
         base::MessageLoopCurrent::Get()->task_runner());
     ruleset_dealer_->TryOpenAndSetRulesetFile(test_ruleset_pair_.indexed.path,
+                                              /*expected_checksum=*/0,
                                               base::DoNothing());
 
     auto* contents = RenderViewHostTestHarness::web_contents();
diff --git a/components/subresource_filter/content/browser/verified_ruleset_dealer.cc b/components/subresource_filter/content/browser/verified_ruleset_dealer.cc
index d896989..7dc6d8a 100644
--- a/components/subresource_filter/content/browser/verified_ruleset_dealer.cc
+++ b/components/subresource_filter/content/browser/verified_ruleset_dealer.cc
@@ -25,6 +25,7 @@
 VerifiedRulesetDealer::~VerifiedRulesetDealer() = default;
 
 base::File VerifiedRulesetDealer::OpenAndSetRulesetFile(
+    int expected_checksum,
     const base::FilePath& file_path) {
   DCHECK(CalledOnValidSequence());
   // On Windows, open the file with FLAG_SHARE_DELETE to allow deletion while
@@ -34,14 +35,17 @@
   TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("loading"),
                "VerifiedRulesetDealer::OpenAndSetRulesetFile", "file_valid",
                file.IsValid());
-  if (file.IsValid())
+  if (file.IsValid()) {
     SetRulesetFile(file.Duplicate());
+    expected_checksum_ = expected_checksum;
+  }
   return file;
 }
 
 void VerifiedRulesetDealer::SetRulesetFile(base::File ruleset_file) {
   RulesetDealer::SetRulesetFile(std::move(ruleset_file));
   status_ = RulesetVerificationStatus::kNotVerified;
+  expected_checksum_ = 0;
 }
 
 scoped_refptr<const MemoryMappedRuleset> VerifiedRulesetDealer::GetRuleset() {
@@ -53,7 +57,8 @@
     case RulesetVerificationStatus::kNotVerified: {
       auto ruleset = RulesetDealer::GetRuleset();
       if (ruleset) {
-        if (IndexedRulesetMatcher::Verify(ruleset->data(), ruleset->length())) {
+        if (IndexedRulesetMatcher::Verify(ruleset->data(), ruleset->length(),
+                                          expected_checksum_)) {
           status_ = RulesetVerificationStatus::kIntact;
         } else {
           status_ = RulesetVerificationStatus::kCorrupt;
@@ -103,6 +108,7 @@
 
 void VerifiedRulesetDealer::Handle::TryOpenAndSetRulesetFile(
     const base::FilePath& path,
+    int expected_checksum,
     base::OnceCallback<void(base::File)> callback) {
   DCHECK(sequence_checker_.CalledOnValidSequence());
   // |base::Unretained| is safe here because the |OpenAndSetRulesetFile| task
@@ -111,7 +117,7 @@
   base::PostTaskAndReplyWithResult(
       task_runner_, FROM_HERE,
       base::BindOnce(&VerifiedRulesetDealer::OpenAndSetRulesetFile,
-                     base::Unretained(dealer_.get()), path),
+                     base::Unretained(dealer_.get()), expected_checksum, path),
       std::move(callback));
 }
 
diff --git a/components/subresource_filter/content/browser/verified_ruleset_dealer.h b/components/subresource_filter/content/browser/verified_ruleset_dealer.h
index bff9370..ea9c6c2 100644
--- a/components/subresource_filter/content/browser/verified_ruleset_dealer.h
+++ b/components/subresource_filter/content/browser/verified_ruleset_dealer.h
@@ -59,13 +59,16 @@
   // |base::File| in the case of file opened and set. Returns invalid
   // |base::File| in the case of file open error. In the case of error
   // ruleset dealer continues to use the previous file (if any).
-  base::File OpenAndSetRulesetFile(const base::FilePath& file_path);
+  base::File OpenAndSetRulesetFile(int expected_checksum,
+                                   const base::FilePath& file_path);
 
   // For tests only.
   RulesetVerificationStatus status() const { return status_; }
 
  private:
   RulesetVerificationStatus status_ = RulesetVerificationStatus::kNotVerified;
+  // Associated with the current |ruleset_file_|;
+  int expected_checksum_ = 0;
 
   DISALLOW_COPY_AND_ASSIGN(VerifiedRulesetDealer);
 };
@@ -94,6 +97,7 @@
   // error an invalid |base::File| is passed to |callback| and dealer continues
   // to use previous ruleset file (if any).
   void TryOpenAndSetRulesetFile(const base::FilePath& path,
+                                int expected_checksum,
                                 base::OnceCallback<void(base::File)> callback);
 
  private:
diff --git a/components/subresource_filter/content/browser/verified_ruleset_dealer_unittest.cc b/components/subresource_filter/content/browser/verified_ruleset_dealer_unittest.cc
index 6916280..332bd13 100644
--- a/components/subresource_filter/content/browser/verified_ruleset_dealer_unittest.cc
+++ b/components/subresource_filter/content/browser/verified_ruleset_dealer_unittest.cc
@@ -300,10 +300,73 @@
                                        RulesetVerificationStatus::kIntact, 1);
 }
 
+// Check that without the checksum parameter to OpenAndSetRulesetFile,
+// the corrupted file is seen as valid.
+TEST_F(SubresourceFilterVerifiedRulesetDealerTest,
+       OpenAndSetRulesetFileValidNoChecksum) {
+  // See also SubresourceFilterBrowserTest.InvalidRuleset_Checksum, corrupting
+  // in this manner doesn't invalidate the Flatbuffer Verifier check.
+  testing::TestRuleset::CorruptByFilling(rulesets().indexed_1(), 28250, 28251,
+                                         32);
+  base::File file = ruleset_dealer()->OpenAndSetRulesetFile(
+      /*expected_checksum=*/0, rulesets().indexed_1().path);
+
+  // Check the required file is opened.
+  ASSERT_TRUE(file.IsValid());
+
+  // Check |OpenAndSetRulesetFile| forwards call to |SetRulesetFile| on success.
+  EXPECT_TRUE(ruleset_dealer()->IsRulesetFileAvailable());
+  EXPECT_FALSE(has_cached_ruleset());
+  EXPECT_EQ(RulesetVerificationStatus::kNotVerified,
+            ruleset_dealer()->status());
+  histogram_tester().ExpectTotalCount(kVerificationHistogram, 0);
+
+  // Check that after getting the ruleset the expected values are present.
+  scoped_refptr<const MemoryMappedRuleset> ref_to_ruleset =
+      ruleset_dealer()->GetRuleset();
+  EXPECT_TRUE(ref_to_ruleset);
+  EXPECT_EQ(RulesetVerificationStatus::kIntact, ruleset_dealer()->status());
+  histogram_tester().ExpectUniqueSample(kVerificationHistogram,
+                                        RulesetVerificationStatus::kIntact, 1);
+}
+
+// Check that when adding the checksum parameter to OpenAndSetRulesetFile,
+// the corrupted file is detected as invalid.
+TEST_F(SubresourceFilterVerifiedRulesetDealerTest,
+       OpenAndSetRulesetFileInvalidChecksum) {
+  int expected_checksum =
+      base::PersistentHash(&(rulesets().indexed_1().contents[0]),
+                           rulesets().indexed_1().contents.size());
+  // See also SubresourceFilterBrowserTest.InvalidRuleset_Checksum, corrupting
+  // in this manner doesn't invalidate the Flatbuffer Verifier check.
+  testing::TestRuleset::CorruptByFilling(rulesets().indexed_1(), 28250, 28251,
+                                         32);
+  base::File file = ruleset_dealer()->OpenAndSetRulesetFile(
+      expected_checksum, rulesets().indexed_1().path);
+
+  // Check the required file is opened.
+  ASSERT_TRUE(file.IsValid());
+
+  // Check |OpenAndSetRulesetFile| forwards call to |SetRulesetFile| on success.
+  EXPECT_TRUE(ruleset_dealer()->IsRulesetFileAvailable());
+  EXPECT_FALSE(has_cached_ruleset());
+  EXPECT_EQ(RulesetVerificationStatus::kNotVerified,
+            ruleset_dealer()->status());
+  histogram_tester().ExpectTotalCount(kVerificationHistogram, 0);
+
+  // Check that after getting the ruleset the expected values are present.
+  scoped_refptr<const MemoryMappedRuleset> ref_to_ruleset =
+      ruleset_dealer()->GetRuleset();
+  EXPECT_FALSE(ref_to_ruleset);
+  EXPECT_EQ(RulesetVerificationStatus::kCorrupt, ruleset_dealer()->status());
+  histogram_tester().ExpectUniqueSample(kVerificationHistogram,
+                                        RulesetVerificationStatus::kCorrupt, 1);
+}
+
 TEST_F(SubresourceFilterVerifiedRulesetDealerTest,
        OpenAndSetRulesetFileReturnsCorrectFileOnSuccess) {
-  base::File file =
-      ruleset_dealer()->OpenAndSetRulesetFile(rulesets().indexed_1().path);
+  base::File file = ruleset_dealer()->OpenAndSetRulesetFile(
+      /*expected_checksum=*/0, rulesets().indexed_1().path);
 
   // Check the required file is opened.
   ASSERT_TRUE(file.IsValid());
@@ -320,6 +383,7 @@
 TEST_F(SubresourceFilterVerifiedRulesetDealerTest,
        OpenAndSetRulesetFileReturnsNullFileOnFailure) {
   base::File file = ruleset_dealer()->OpenAndSetRulesetFile(
+      /*expected_checksum=*/0,
       base::FilePath::FromUTF8Unsafe("non_existent_file"));
 
   EXPECT_FALSE(file.IsValid());
@@ -419,6 +483,7 @@
       new VerifiedRulesetDealer::Handle(task_runner()));
   dealer_handle->GetDealerAsync(before_set_ruleset.GetCallback());
   dealer_handle->TryOpenAndSetRulesetFile(rulesets().indexed_1().path,
+                                          /*expected_checksum=*/0,
                                           base::DoNothing());
   dealer_handle->GetDealerAsync(after_set_ruleset.GetCallback());
   dealer_handle->GetDealerAsync(after_warm_up.GetCallback());
@@ -439,13 +504,13 @@
   std::unique_ptr<VerifiedRulesetDealer::Handle> dealer_handle(
       new VerifiedRulesetDealer::Handle(task_runner()));
 
-  dealer_handle->TryOpenAndSetRulesetFile(rulesets().indexed_1().path,
-                                          base::DoNothing());
+  dealer_handle->TryOpenAndSetRulesetFile(
+      rulesets().indexed_1().path, /*expected_checksum=*/0, base::DoNothing());
   dealer_handle->GetDealerAsync(after_set_ruleset_1.GetCallback());
   dealer_handle->GetDealerAsync(read_ruleset_1.GetCallback());
 
-  dealer_handle->TryOpenAndSetRulesetFile(rulesets().indexed_2().path,
-                                          base::DoNothing());
+  dealer_handle->TryOpenAndSetRulesetFile(
+      rulesets().indexed_2().path, /*expected_checksum=*/0, base::DoNothing());
   dealer_handle->GetDealerAsync(after_set_ruleset_2.GetCallback());
   dealer_handle->GetDealerAsync(read_ruleset_2.GetCallback());
 
@@ -468,13 +533,14 @@
   auto dealer_handle =
       std::make_unique<VerifiedRulesetDealer::Handle>(task_runner());
 
-  dealer_handle->TryOpenAndSetRulesetFile(rulesets().indexed_1().path,
-                                          base::DoNothing());
+  dealer_handle->TryOpenAndSetRulesetFile(
+      rulesets().indexed_1().path, /*expected_checksum=*/0, base::DoNothing());
   dealer_handle->GetDealerAsync(after_set_ruleset_1.GetCallback());
   dealer_handle->GetDealerAsync(read_ruleset_1.GetCallback());
 
   dealer_handle->TryOpenAndSetRulesetFile(
       base::FilePath::FromUTF8Unsafe("non_existent_file"),
+      /*expected_checksum=*/0,
       base::BindOnce([](base::File file) { EXPECT_FALSE(file.IsValid()); }));
   dealer_handle->GetDealerAsync(after_set_ruleset_2.GetCallback());
   dealer_handle->GetDealerAsync(read_ruleset_2.GetCallback());
@@ -575,7 +641,7 @@
   TestVerifiedRulesetDealerClient deleted_handle;
 
   dealer_handle()->TryOpenAndSetRulesetFile(
-      rulesets().indexed_1().path,
+      rulesets().indexed_1().path, /*expected_checksum=*/0,
       base::BindOnce([](base::File file) { EXPECT_TRUE(file.IsValid()); }));
 
   auto ruleset_handle = CreateRulesetHandle();
@@ -600,7 +666,7 @@
   TestVerifiedRulesetDealerClient deleted_both_handles;
 
   dealer_handle()->TryOpenAndSetRulesetFile(
-      rulesets().indexed_1().path,
+      rulesets().indexed_1().path, /*expected_checksum=*/0,
       base::BindOnce([](base::File file) { EXPECT_TRUE(file.IsValid()); }));
 
   auto ruleset_handle_1 = CreateRulesetHandle();
@@ -643,15 +709,15 @@
   TestVerifiedRulesetDealerClient deleted_all_handles;
 
   dealer_handle()->TryOpenAndSetRulesetFile(
-      rulesets().indexed_1().path,
+      rulesets().indexed_1().path, /*expected_checksum=*/0,
       base::BindOnce([](base::File file) { EXPECT_TRUE(file.IsValid()); }));
 
   auto ruleset_handle_1 = CreateRulesetHandle();
   dealer_handle()->GetDealerAsync(created_handle_1.GetCallback());
   ruleset_handle_1->GetRulesetAsync(read_from_handle_1.GetCallback());
 
-  dealer_handle()->TryOpenAndSetRulesetFile(rulesets().indexed_2().path,
-                                            base::DoNothing());
+  dealer_handle()->TryOpenAndSetRulesetFile(
+      rulesets().indexed_2().path, /*expected_checksum=*/0, base::DoNothing());
   auto ruleset_handle_2 = CreateRulesetHandle();
   dealer_handle()->GetDealerAsync(created_handle_2_after_update.GetCallback());
   ruleset_handle_2->GetRulesetAsync(read_from_handle_2.GetCallback());
@@ -692,7 +758,7 @@
 
   testing::TestRuleset::CorruptByTruncating(rulesets().indexed_1(), 4096);
   dealer_handle()->TryOpenAndSetRulesetFile(
-      rulesets().indexed_1().path,
+      rulesets().indexed_1().path, /*expected_checksum=*/0,
       base::BindOnce([](base::File file) { EXPECT_TRUE(file.IsValid()); }));
 
   auto ruleset_handle = CreateRulesetHandle();
diff --git a/components/subresource_filter/core/browser/ruleset_service.cc b/components/subresource_filter/core/browser/ruleset_service.cc
index b40a5214..32a527d 100644
--- a/components/subresource_filter/core/browser/ruleset_service.cc
+++ b/components/subresource_filter/core/browser/ruleset_service.cc
@@ -45,6 +45,8 @@
     "subresource_filter.ruleset_version.content";
 const char kSubresourceFilterRulesetFormatVersion[] =
     "subresource_filter.ruleset_version.format";
+const char kSubresourceFilterRulesetChecksum[] =
+    "subresource_filter.ruleset_version.checksum";
 
 void RecordIndexAndWriteRulesetResult(
     RulesetService::IndexAndWriteRulesetResult result) {
@@ -109,6 +111,7 @@
   registry->RegisterStringPref(kSubresourceFilterRulesetContentVersion,
                                std::string());
   registry->RegisterIntegerPref(kSubresourceFilterRulesetFormatVersion, 0);
+  registry->RegisterIntegerPref(kSubresourceFilterRulesetChecksum, 0);
 }
 
 // static
@@ -121,6 +124,7 @@
       local_state->GetInteger(kSubresourceFilterRulesetFormatVersion);
   content_version =
       local_state->GetString(kSubresourceFilterRulesetContentVersion);
+  checksum = local_state->GetInteger(kSubresourceFilterRulesetChecksum);
 }
 
 bool IndexedRulesetVersion::IsValid() const {
@@ -136,6 +140,7 @@
                           format_version);
   local_state->SetString(kSubresourceFilterRulesetContentVersion,
                          content_version);
+  local_state->SetInteger(kSubresourceFilterRulesetChecksum, checksum);
 }
 
 std::unique_ptr<base::trace_event::TracedValue>
@@ -234,7 +239,9 @@
   DCHECK(delegate_);
   DCHECK_NE(local_state_->GetInitializationStatus(),
             PrefService::INITIALIZATION_STATUS_WAITING);
+}
 
+void RulesetService::Initialize() {
   IndexedRulesetVersion most_recently_indexed_version;
   most_recently_indexed_version.ReadFromPrefs(local_state_);
   TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("loading"),
@@ -258,9 +265,10 @@
   if (unindexed_ruleset_info.content_version.empty())
     return;
 
-  // Trying to store a ruleset with the same version for a second time would not
-  // only be futile, but would fail on Windows due to "File System Tunneling" as
-  // long as the previously stored copy of the rules is still in use.
+  // Trying to store a ruleset with the same version for a second time would
+  // not only be futile, but would fail on Windows due to "File System
+  // Tunneling" as long as the previously stored copy of the rules is still
+  // in use.
   IndexedRulesetVersion most_recently_indexed_version;
   most_recently_indexed_version.ReadFromPrefs(local_state_);
   if (most_recently_indexed_version.IsCurrentFormatVersion() &&
@@ -281,6 +289,12 @@
       base::Bind(&RulesetService::OpenAndPublishRuleset, AsWeakPtr()));
 }
 
+IndexedRulesetVersion RulesetService::GetMostRecentlyIndexedVersion() const {
+  IndexedRulesetVersion version;
+  version.ReadFromPrefs(local_state_);
+  return version;
+}
+
 // static
 IndexedRulesetVersion RulesetService::IndexAndWriteRuleset(
     const base::FilePath& indexed_ruleset_base_dir,
@@ -335,7 +349,7 @@
   }
 
   // --- End of guarded section.
-
+  indexed_version.checksum = indexer.GetChecksum();
   if (!sentinel_file.Remove()) {
     RecordIndexAndWriteRulesetResult(
         IndexAndWriteRulesetResult::FAILED_DELETING_SENTINEL_FILE);
@@ -488,7 +502,8 @@
               indexed_ruleset_base_dir_, version));
 
   delegate_->TryOpenAndSetRulesetFile(
-      file_path, base::BindOnce(&RulesetService::OnRulesetSet, AsWeakPtr()));
+      file_path, version.checksum,
+      base::BindOnce(&RulesetService::OnRulesetSet, AsWeakPtr()));
 }
 
 void RulesetService::OnRulesetSet(base::File file) {
diff --git a/components/subresource_filter/core/browser/ruleset_service.h b/components/subresource_filter/core/browser/ruleset_service.h
index ff7270e..2e3ed01 100644
--- a/components/subresource_filter/core/browser/ruleset_service.h
+++ b/components/subresource_filter/core/browser/ruleset_service.h
@@ -68,6 +68,7 @@
 // structures is expected to evolve over time, so the indexed ruleset is
 // identified by a pair of versions: the content version of the rules that have
 // been indexed; and the binary format version of the indexed data structures.
+// It also contains a checksum of the data, to ensure it hasn't been corrupted.
 struct IndexedRulesetVersion {
   IndexedRulesetVersion();
   IndexedRulesetVersion(const std::string& content_version, int format_version);
@@ -87,6 +88,7 @@
 
   std::string content_version;
   int format_version = 0;
+  int checksum = 0;
 };
 
 // Contains all utility functions that govern how files pertaining to indexed
@@ -173,9 +175,8 @@
     MAX,
   };
 
-  // Creates a new instance that will immediately publish the most recently
-  // indexed version of the ruleset if one is available according to prefs.
-  // See class comments for details of arguments.
+  // Creates a new instance of a ruleset.  This is then assigned to a
+  // Delegate that calls Initialize for this ruleset service.
   RulesetService(
       PrefService* local_state,
       scoped_refptr<base::SequencedTaskRunner> background_task_runner,
@@ -196,6 +197,13 @@
   virtual void IndexAndStoreAndPublishRulesetIfNeeded(
       const UnindexedRulesetInfo& unindexed_ruleset_info);
 
+  // Get the ruleset version associated with the current local_state_.
+  IndexedRulesetVersion GetMostRecentlyIndexedVersion() const;
+
+  // Publishes the most recently indexed version of the ruleset if one is
+  // available according to prefs.
+  void Initialize();
+
   void set_is_after_startup_for_testing() { is_after_startup_ = true; }
 
  private:
diff --git a/components/subresource_filter/core/browser/ruleset_service_delegate.h b/components/subresource_filter/core/browser/ruleset_service_delegate.h
index 9b46edd..a879bbf2 100644
--- a/components/subresource_filter/core/browser/ruleset_service_delegate.h
+++ b/components/subresource_filter/core/browser/ruleset_service_delegate.h
@@ -27,6 +27,7 @@
   // ruleset file will be used (if any).
   virtual void TryOpenAndSetRulesetFile(
       const base::FilePath& file_path,
+      int expected_checksum,
       base::OnceCallback<void(base::File)> callback) = 0;
 
   // Redistributes the new version of the |ruleset| to all existing consumers,
diff --git a/components/subresource_filter/core/browser/ruleset_service_unittest.cc b/components/subresource_filter/core/browser/ruleset_service_unittest.cc
index 3991ecd..d15d266 100644
--- a/components/subresource_filter/core/browser/ruleset_service_unittest.cc
+++ b/components/subresource_filter/core/browser/ruleset_service_unittest.cc
@@ -109,6 +109,7 @@
 
   void TryOpenAndSetRulesetFile(
       const base::FilePath& path,
+      int expected_checksum,
       base::OnceCallback<void(base::File)> callback) override {
     // Emulate |VerifiedRulesetDealer::Handle| behaviour:
     //   1. Open file on task runner.
@@ -201,6 +202,7 @@
     service_ = std::make_unique<RulesetService>(
         &pref_service_, background_task_runner_, mock_delegate_.get(),
         base_dir());
+    service_->Initialize();
   }
 
   void ClearRulesetService() {
diff --git a/components/subresource_filter/core/common/indexed_ruleset.cc b/components/subresource_filter/core/common/indexed_ruleset.cc
index c1493cd2..259e1de 100644
--- a/components/subresource_filter/core/common/indexed_ruleset.cc
+++ b/components/subresource_filter/core/common/indexed_ruleset.cc
@@ -17,6 +17,15 @@
 namespace proto = url_pattern_index::proto;
 using FindRuleStrategy =
     url_pattern_index::UrlPatternIndexMatcher::FindRuleStrategy;
+
+// A helper function to get the checksum on a data buffer.
+int LocalGetChecksum(const uint8_t* data, size_t size) {
+  uint32_t hash = base::PersistentHash(data, size);
+
+  // Strip off the sign bit since this needs to be persisted in preferences
+  // which don't support unsigned ints.
+  return static_cast<int>(hash & 0x7fffffff);
+}
 }  // namespace
 
 // RulesetIndexer --------------------------------------------------------------
@@ -62,16 +71,28 @@
   builder_.Finish(url_rules_index_offset);
 }
 
+int RulesetIndexer::GetChecksum() const {
+  return LocalGetChecksum(data(), size());
+}
+
 // IndexedRulesetMatcher -------------------------------------------------------
 
 // static
-bool IndexedRulesetMatcher::Verify(const uint8_t* buffer, size_t size) {
+bool IndexedRulesetMatcher::Verify(const uint8_t* buffer,
+                                   size_t size,
+                                   int expected_checksum) {
   TRACE_EVENT_BEGIN1(TRACE_DISABLED_BY_DEFAULT("loading"),
                      "IndexedRulesetMatcher::Verify", "size", size);
   SCOPED_UMA_HISTOGRAM_TIMER(
       "SubresourceFilter.IndexRuleset.Verify2.WallDuration");
+  // TODO(ericrobinson): Log metrics for how often a zero checksum is
+  // encountered.  Remove the verifier once we've updated the ruleset at least
+  // once.  The verifier detects a subset of the errors detected by the
+  // checksum, and is unneeded once expected_checksum is consistently nonzero.
   flatbuffers::Verifier verifier(buffer, size);
-  bool valid = flat::VerifyIndexedRulesetBuffer(verifier);
+  bool valid = (!expected_checksum ||
+                expected_checksum == LocalGetChecksum(buffer, size)) &&
+               flat::VerifyIndexedRulesetBuffer(verifier);
   TRACE_EVENT_END1(TRACE_DISABLED_BY_DEFAULT("loading"),
                    "IndexedRulesetMatcher::Verify", "valid", valid);
   return valid;
diff --git a/components/subresource_filter/core/common/indexed_ruleset.h b/components/subresource_filter/core/common/indexed_ruleset.h
index 6a88af37..8b8f525 100644
--- a/components/subresource_filter/core/common/indexed_ruleset.h
+++ b/components/subresource_filter/core/common/indexed_ruleset.h
@@ -55,6 +55,9 @@
   // Finalizes construction of the data structures.
   void Finish();
 
+  // Returns the checksum for the data buffer.
+  int GetChecksum() const;
+
   // Returns a pointer to the buffer containing the serialized flat data
   // structures. Should only be called after Finish().
   const uint8_t* data() const { return builder_.GetBufferPointer(); }
@@ -77,7 +80,7 @@
  public:
   // Returns whether the |buffer| of the given |size| contains a valid
   // flat::IndexedRuleset FlatBuffer.
-  static bool Verify(const uint8_t* buffer, size_t size);
+  static bool Verify(const uint8_t* buffer, size_t size, int expected_checksum);
 
   // Creates an instance that matches URLs against the flat::IndexedRuleset
   // provided as the root object of serialized data in the |buffer| of the given
diff --git a/components/subresource_filter/core/common/indexed_ruleset_fuzzer.cc b/components/subresource_filter/core/common/indexed_ruleset_fuzzer.cc
index 3200de8..7d7d640 100644
--- a/components/subresource_filter/core/common/indexed_ruleset_fuzzer.cc
+++ b/components/subresource_filter/core/common/indexed_ruleset_fuzzer.cc
@@ -57,8 +57,8 @@
   if (reader.num_bytes_read() != static_cast<int64_t>(remaining_bytes.size()))
     return 0;
 
-  CHECK(subresource_filter::IndexedRulesetMatcher::Verify(indexer.data(),
-                                                          indexer.size()));
+  CHECK(subresource_filter::IndexedRulesetMatcher::Verify(
+      indexer.data(), indexer.size(), indexer.GetChecksum()));
 
   // Lastly, read into the indexed ruleset by matching the URL from the
   // beginning of the fuzzed data.
diff --git a/components/subresource_filter/core/common/test_ruleset_creator.h b/components/subresource_filter/core/common/test_ruleset_creator.h
index 7d1d5ca..8cc493e 100644
--- a/components/subresource_filter/core/common/test_ruleset_creator.h
+++ b/components/subresource_filter/core/common/test_ruleset_creator.h
@@ -39,6 +39,8 @@
                                size_t to,
                                uint8_t fill_with);
 
+  // TODO(ericrobinson): Add a checksum field here that is handled like it
+  // is for checksums in the real rulesets.
   std::vector<uint8_t> contents;
   base::FilePath path;
 };
diff --git a/components/test/data/autofill_assistant/autofill_assistant_target_website.html b/components/test/data/autofill_assistant/autofill_assistant_target_website.html
new file mode 100644
index 0000000..4cb4b1ea
--- /dev/null
+++ b/components/test/data/autofill_assistant/autofill_assistant_target_website.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+
+<!--
+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.
+-->
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>Autofill Assistant Test</title>
+
+<div>
+  <button id="button" type="button">Test Button</button><br>
+</div>
+
+<iframe id="iframe" width="100%" height="500" src=
+"autofill_assistant_target_website_iframe.html"></iframe>
+</body>
+</html>
\ No newline at end of file
diff --git a/components/test/data/autofill_assistant/autofill_assistant_target_website_iframe.html b/components/test/data/autofill_assistant/autofill_assistant_target_website_iframe.html
new file mode 100644
index 0000000..57b8a371
--- /dev/null
+++ b/components/test/data/autofill_assistant/autofill_assistant_target_website_iframe.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+
+<!--
+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.
+-->
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>Autofill Assistant Test</title>
+
+<script>
+var CreateShadowDom = function() {
+  var shadowSection = document.getElementById("shadowsection");
+  var shadowRoot = shadowSection.attachShadow({mode: 'open'});
+  shadowRoot.innerHTML =
+  '<button id="button" type="button">Test Button</button>';
+}
+</script>
+</head>
+
+<body onload="CreateShadowDom()">
+<div>
+  <form name="address" id="address_section">
+    <div id='billing'>
+      <h2>Billing Address</h2>
+      Name: <input type="text" name="name"><br>
+      Address: <input type="text" name="address"><br>
+      City: <input type="text" name="city"><br>
+      State: <select name="state">
+        <option value="CA">CA</option>
+        <option value="MA">MA</option>
+        <option value="NY">NY</option>
+        <option value="MD">MD</option>
+        <option value="OR">OR</option>
+        <option value="OH">OH</option>
+        <option value="IL">IL</option>
+        <option value="DC">DC</option>
+      </select> <br>
+      Zip: <input name="zip"> <br>
+      Country: <input name="country"> <br>
+      Email: <input name="email"> <br>
+    </div>
+  </form>
+</div>
+
+<div>
+  <input id="text" type="text"><br>
+  <button id="button" type="button">Test Button</button><br>
+</div>
+
+<hr>
+<div id="shadowsection"></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/components/test/data/payments/payment_request_retry_with_payer_errors.html b/components/test/data/payments/payment_request_retry_with_payer_errors.html
new file mode 100644
index 0000000..3b6f5d11
--- /dev/null
+++ b/components/test/data/payments/payment_request_retry_with_payer_errors.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<!--
+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.
+-->
+<html>
+<head>
+<title>Retry with payer errors test</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+<link rel="stylesheet" type="text/css" href="style.css">
+</head>
+<body>
+<div><button onclick="buy()" id="buy">Retry with payer errors test</button></div>
+<pre id="result"></pre>
+<script src="util.js"></script>
+<script src="retry_helper.js"></script>
+<script src="retry_with_payer_errors.js"></script>
+</body>
+</html>
diff --git a/components/test/data/payments/payment_request_retry_with_shipping_address_errors.html b/components/test/data/payments/payment_request_retry_with_shipping_address_errors.html
new file mode 100644
index 0000000..3c832fd
--- /dev/null
+++ b/components/test/data/payments/payment_request_retry_with_shipping_address_errors.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<!--
+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.
+-->
+<html>
+<head>
+<title>Retry with shipping address errors test</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+<link rel="stylesheet" type="text/css" href="style.css">
+</head>
+<body>
+<div><button onclick="buy()" id="buy">Retry with shipping address errors test</button></div>
+<pre id="result"></pre>
+<script src="util.js"></script>
+<script src="retry_helper.js"></script>
+<script src="retry_with_shipping_address_errors.js"></script>
+</body>
+</html>
diff --git a/components/test/data/payments/retry_helper.js b/components/test/data/payments/retry_helper.js
new file mode 100644
index 0000000..b0fe0af6
--- /dev/null
+++ b/components/test/data/payments/retry_helper.js
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+/**
+ * Pops up a payment sheet, allowing options to be
+ * passed in if particular values are needed.
+ *
+ * @param {PaymentOptions?} options Payment options
+ * @return {Promise<PaymentResponse>} Payment response
+ */
+function getPaymentResponse(options) {  // eslint-disable-line no-unused-vars
+  var methodData = [{supportedMethods: 'basic-card'}];
+  var details = {
+    total: {
+      label: 'Total',
+      amount: {
+        currency: 'USD',
+        value: '5.00',
+      },
+    },
+    shippingOptions: [{
+      id: 'freeShippingOption',
+      label: 'Free global shipping',
+      selected: true,
+      amount: {
+        currency: 'USD',
+        value: '0',
+      },
+    }],
+  };
+
+  var request = new PaymentRequest(methodData, details, options);
+  request.onshippingaddresschange = function(e) {
+    e.updateWith(details);
+  };
+  request.onshippingoptionchange = function(e) {
+    e.updateWith(details);
+  };
+  return request.show();
+}
diff --git a/components/test/data/payments/retry_with_payer_errors.js b/components/test/data/payments/retry_with_payer_errors.js
new file mode 100644
index 0000000..ba8d4c0
--- /dev/null
+++ b/components/test/data/payments/retry_with_payer_errors.js
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+
+var gPaymentResponse = null;
+
+/**
+ * Launches the PaymentRequest UI
+ */
+function buy() {  // eslint-disable-line no-unused-vars
+  var options = {
+    requestPayerEmail: true,
+    requestPayerName: true,
+    requestPayerPhone: true,
+  };
+  getPaymentResponse(options)
+      .then(function(response) {
+        gPaymentResponse = response;
+      });
+}
+
+/**
+ * Retry PaymentRequest UI with indicating validation error messages.
+ *
+ * @param {PaymentValidationErrors} validationErrors Represent validation errors
+ */
+function retry(validationErrors) {  // eslint-disable-line no-unused-vars
+  if (gPaymentResponse == null) {
+    return;
+  }
+
+  gPaymentResponse.retry(validationErrors);
+}
diff --git a/components/test/data/payments/retry_with_shipping_address_errors.js b/components/test/data/payments/retry_with_shipping_address_errors.js
new file mode 100644
index 0000000..e937b23
--- /dev/null
+++ b/components/test/data/payments/retry_with_shipping_address_errors.js
@@ -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.
+ */
+
+var gPaymentResponse = null;
+
+/**
+ * Launches the PaymentRequest UI
+ */
+function buy() {  // eslint-disable-line no-unused-vars
+  var options = {
+    requestShipping: true,
+  };
+  getPaymentResponse(options)
+      .then(function(response) {
+        gPaymentResponse = response;
+      });
+}
+
+/**
+ * Retry PaymentRequest UI with indicating validation error messages.
+ *
+ * @param {PaymentValidationErrors} validationErrors Represent validation errors
+ */
+function retry(validationErrors) {  // eslint-disable-line no-unused-vars
+  if (gPaymentResponse == null) {
+    return;
+  }
+
+  gPaymentResponse.retry(validationErrors);
+}
diff --git a/components/translate/core/browser/resources/translate.js b/components/translate/core/browser/resources/translate.js
index 5b5ce6b4..1c9e60d 100644
--- a/components/translate/core/browser/resources/translate.js
+++ b/components/translate/core/browser/resources/translate.js
@@ -114,6 +114,16 @@
    */
   var resultCallback;
 
+  /**
+   * Listens to security policy violations to set |errorCode|.
+   */
+  document.addEventListener('securitypolicyviolation', function(event) {
+    if (securityOrigin.startsWith(event.blockedURI)) {
+      errorCode = ERROR['BAD_ORIGIN'];
+      invokeReadyCallback();
+    }
+  });
+
   function checkLibReady() {
     if (lib.isAvailable()) {
       readyTime = performance.now();
diff --git a/components/translate/ios/browser/ios_translate_driver.h b/components/translate/ios/browser/ios_translate_driver.h
index 4ef97966..8c6f255 100644
--- a/components/translate/ios/browser/ios_translate_driver.h
+++ b/components/translate/ios/browser/ios_translate_driver.h
@@ -12,6 +12,7 @@
 #include "base/memory/weak_ptr.h"
 #include "components/language/ios/browser/ios_language_detection_tab_helper.h"
 #include "components/translate/core/browser/translate_driver.h"
+#include "components/translate/core/common/translate_errors.h"
 #include "components/translate/ios/browser/language_detection_controller.h"
 #include "components/translate/ios/browser/translate_controller.h"
 #include "ios/web/public/web_state/web_state_observer.h"
@@ -86,10 +87,10 @@
   void OnLanguageDetermined(const LanguageDetectionDetails& details);
 
   // TranslateController::Observer methods.
-  void OnTranslateScriptReady(bool success,
+  void OnTranslateScriptReady(TranslateErrors::Type error_type,
                               double load_time,
                               double ready_time) override;
-  void OnTranslateComplete(bool success,
+  void OnTranslateComplete(TranslateErrors::Type error_type,
                            const std::string& original_language,
                            double translation_time) override;
 
diff --git a/components/translate/ios/browser/ios_translate_driver.mm b/components/translate/ios/browser/ios_translate_driver.mm
index 87409a6..8d945b7 100644
--- a/components/translate/ios/browser/ios_translate_driver.mm
+++ b/components/translate/ios/browser/ios_translate_driver.mm
@@ -13,7 +13,6 @@
 #include "components/translate/core/browser/translate_manager.h"
 #include "components/translate/core/common/language_detection_details.h"
 #include "components/translate/core/common/translate_constants.h"
-#include "components/translate/core/common/translate_errors.h"
 #include "components/translate/core/common/translate_metrics.h"
 #import "components/translate/ios/browser/js_language_detection_manager.h"
 #import "components/translate/ios/browser/js_translate_manager.h"
@@ -227,15 +226,16 @@
 
 // TranslateController::Observer implementation.
 
-void IOSTranslateDriver::OnTranslateScriptReady(bool success,
-                                                double load_time,
-                                                double ready_time) {
+void IOSTranslateDriver::OnTranslateScriptReady(
+    TranslateErrors::Type error_type,
+    double load_time,
+    double ready_time) {
   if (!IsPageValid(pending_page_seq_no_))
     return;
 
-  if (!success) {
+  if (error_type != TranslateErrors::NONE) {
     translate_manager_->PageTranslated(source_language_, target_language_,
-                                       TranslateErrors::INITIALIZATION_ERROR);
+                                       error_type);
     return;
   }
 
@@ -249,16 +249,15 @@
 }
 
 void IOSTranslateDriver::OnTranslateComplete(
-    bool success,
+    TranslateErrors::Type error_type,
     const std::string& original_language,
     double translation_time) {
   if (!IsPageValid(pending_page_seq_no_))
     return;
 
-  if (!success) {
-    // TODO(toyoshim): Check |errorCode| of translate.js and notify it here.
+  if (error_type != TranslateErrors::NONE) {
     translate_manager_->PageTranslated(source_language_, target_language_,
-                                       TranslateErrors::TRANSLATION_ERROR);
+                                       error_type);
   }
 
   TranslationDidSucceed(source_language_, target_language_,
diff --git a/components/translate/ios/browser/resources/translate_ios.js b/components/translate/ios/browser/resources/translate_ios.js
index 3f43a0a..c2e95a3c 100644
--- a/components/translate/ios/browser/resources/translate_ios.js
+++ b/components/translate/ios/browser/resources/translate_ios.js
@@ -16,7 +16,7 @@
 cr.googleTranslate.readyCallback = function() {
   __gCrWeb.message.invokeOnHost({
       'command': 'translate.ready',
-      'timeout': cr.googleTranslate.error,
+      'errorCode': cr.googleTranslate.errorCode,
       'loadTime': cr.googleTranslate.loadTime,
       'readyTime': cr.googleTranslate.readyTime});
 }
@@ -27,7 +27,7 @@
 cr.googleTranslate.resultCallback = function() {
   __gCrWeb.message.invokeOnHost({
       'command': 'translate.status',
-      'success': !cr.googleTranslate.error,
+      'errorCode': cr.googleTranslate.errorCode,
       'originalPageLanguage': cr.googleTranslate.sourceLang,
       'translationTime': cr.googleTranslate.translationTime});
 }
diff --git a/components/translate/ios/browser/translate_controller.h b/components/translate/ios/browser/translate_controller.h
index 1b91fef..34333de 100644
--- a/components/translate/ios/browser/translate_controller.h
+++ b/components/translate/ios/browser/translate_controller.h
@@ -11,6 +11,7 @@
 #include "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
+#include "components/translate/core/common/translate_errors.h"
 #include "ios/web/public/web_state/web_state_observer.h"
 
 @class JsTranslateManager;
@@ -34,13 +35,14 @@
   class Observer {
    public:
     // Called when the translate script is ready.
-    // In case of timeout, |success| is false.
-    virtual void OnTranslateScriptReady(bool success,
+    // |error_type| Indicates error code.
+    virtual void OnTranslateScriptReady(TranslateErrors::Type error_type,
                                         double load_time,
                                         double ready_time) = 0;
 
     // Called when the translation is complete.
-    virtual void OnTranslateComplete(bool success,
+    // |error_type| Indicates error code.
+    virtual void OnTranslateComplete(TranslateErrors::Type error_type,
                                      const std::string& original_language,
                                      double translation_time) = 0;
   };
diff --git a/components/translate/ios/browser/translate_controller.mm b/components/translate/ios/browser/translate_controller.mm
index b125f48..bdfe588e 100644
--- a/components/translate/ios/browser/translate_controller.mm
+++ b/components/translate/ios/browser/translate_controller.mm
@@ -94,17 +94,21 @@
 
 bool TranslateController::OnTranslateReady(
     const base::DictionaryValue& command) {
-  if (!command.HasKey("timeout")) {
+  double error_code = 0.;
+  double load_time = 0.;
+  double ready_time = 0.;
+
+  if (!command.HasKey("errorCode") ||
+      !command.GetDouble("errorCode", &error_code) ||
+      error_code < TranslateErrors::NONE ||
+      error_code >= TranslateErrors::TRANSLATE_ERROR_MAX) {
     NOTREACHED();
     return false;
   }
 
-  bool timeout = false;
-  double load_time = 0.;
-  double ready_time = 0.;
-
-  command.GetBoolean("timeout", &timeout);
-  if (!timeout) {
+  TranslateErrors::Type error_type =
+      static_cast<TranslateErrors::Type>(error_code);
+  if (error_type == TranslateErrors::NONE) {
     if (!command.HasKey("loadTime") || !command.HasKey("readyTime")) {
       NOTREACHED();
       return false;
@@ -113,23 +117,27 @@
     command.GetDouble("readyTime", &ready_time);
   }
   if (observer_)
-    observer_->OnTranslateScriptReady(!timeout, load_time, ready_time);
+    observer_->OnTranslateScriptReady(error_type, load_time, ready_time);
   return true;
 }
 
 bool TranslateController::OnTranslateComplete(
     const base::DictionaryValue& command) {
-  if (!command.HasKey("success")) {
+  double error_code = 0.;
+  std::string original_language;
+  double translation_time = 0.;
+
+  if (!command.HasKey("errorCode") ||
+      !command.GetDouble("errorCode", &error_code) ||
+      error_code < TranslateErrors::NONE ||
+      error_code >= TranslateErrors::TRANSLATE_ERROR_MAX) {
     NOTREACHED();
     return false;
   }
 
-  bool success = false;
-  std::string original_language;
-  double translation_time = 0.;
-
-  command.GetBoolean("success", &success);
-  if (success) {
+  TranslateErrors::Type error_type =
+      static_cast<TranslateErrors::Type>(error_code);
+  if (error_type == TranslateErrors::NONE) {
     if (!command.HasKey("originalPageLanguage") ||
         !command.HasKey("translationTime")) {
       NOTREACHED();
@@ -140,7 +148,7 @@
   }
 
   if (observer_)
-    observer_->OnTranslateComplete(success, original_language,
+    observer_->OnTranslateComplete(error_type, original_language,
                                    translation_time);
   return true;
 }
diff --git a/components/translate/ios/browser/translate_controller_unittest.mm b/components/translate/ios/browser/translate_controller_unittest.mm
index 54234bf..3ac13231 100644
--- a/components/translate/ios/browser/translate_controller_unittest.mm
+++ b/components/translate/ios/browser/translate_controller_unittest.mm
@@ -24,7 +24,7 @@
  protected:
   TranslateControllerTest()
       : test_web_state_(new web::TestWebState),
-        success_(false),
+        error_type_(TranslateErrors::Type::NONE),
         ready_time_(0),
         load_time_(0),
         translation_time_(0),
@@ -38,20 +38,20 @@
   }
 
   // TranslateController::Observer methods.
-  void OnTranslateScriptReady(bool success,
+  void OnTranslateScriptReady(TranslateErrors::Type error_type,
                               double load_time,
                               double ready_time) override {
     on_script_ready_called_ = true;
-    success_ = success;
+    error_type_ = error_type;
     load_time_ = load_time;
     ready_time_ = ready_time;
   }
 
-  void OnTranslateComplete(bool success,
+  void OnTranslateComplete(TranslateErrors::Type error_type,
                            const std::string& original_language,
                            double translation_time) override {
     on_translate_complete_called_ = true;
-    success_ = success;
+    error_type_ = error_type;
     original_language_ = original_language;
     translation_time_ = translation_time;
   }
@@ -59,7 +59,7 @@
   std::unique_ptr<web::TestWebState> test_web_state_;
   id mock_js_translate_manager_;
   std::unique_ptr<TranslateController> translate_controller_;
-  bool success_;
+  TranslateErrors::Type error_type_;
   double ready_time_;
   double load_time_;
   std::string original_language_;
@@ -80,7 +80,7 @@
 TEST_F(TranslateControllerTest, OnIFrameJavascriptCommandReceived) {
   base::DictionaryValue command;
   command.SetString("command", "translate.ready");
-  command.SetBoolean("timeout", true);
+  command.SetDouble("errorCode", TranslateErrors::TRANSLATION_TIMEOUT);
   command.SetDouble("loadTime", .0);
   command.SetDouble("readyTime", .0);
   EXPECT_FALSE(translate_controller_->OnJavascriptCommandReceived(
@@ -93,7 +93,7 @@
 TEST_F(TranslateControllerTest, OnTranslateScriptReadyTimeoutCalled) {
   base::DictionaryValue command;
   command.SetString("command", "translate.ready");
-  command.SetBoolean("timeout", true);
+  command.SetDouble("errorCode", TranslateErrors::TRANSLATION_TIMEOUT);
   command.SetDouble("loadTime", .0);
   command.SetDouble("readyTime", .0);
   EXPECT_TRUE(translate_controller_->OnJavascriptCommandReceived(
@@ -101,11 +101,11 @@
       /*is_main_frame=*/true));
   EXPECT_TRUE(on_script_ready_called_);
   EXPECT_FALSE(on_translate_complete_called_);
-  EXPECT_FALSE(success_);
+  EXPECT_FALSE(error_type_ == TranslateErrors::NONE);
 }
 
 // Tests that OnTranslateScriptReady() is called with the right parameters when
-// a |translate.ready| message is recieved from the JS side.
+// a |translate.ready| message is received from the JS side.
 TEST_F(TranslateControllerTest, OnTranslateScriptReadyCalled) {
   // Arbitrary values.
   double some_load_time = 23.1;
@@ -113,7 +113,7 @@
 
   base::DictionaryValue command;
   command.SetString("command", "translate.ready");
-  command.SetBoolean("timeout", false);
+  command.SetDouble("errorCode", TranslateErrors::NONE);
   command.SetDouble("loadTime", some_load_time);
   command.SetDouble("readyTime", some_ready_time);
   EXPECT_TRUE(translate_controller_->OnJavascriptCommandReceived(
@@ -121,13 +121,13 @@
       /*is_main_frame=*/true));
   EXPECT_TRUE(on_script_ready_called_);
   EXPECT_FALSE(on_translate_complete_called_);
-  EXPECT_TRUE(success_);
+  EXPECT_TRUE(error_type_ == TranslateErrors::NONE);
   EXPECT_EQ(some_load_time, load_time_);
   EXPECT_EQ(some_ready_time, ready_time_);
 }
 
 // Tests that OnTranslateComplete() is called with the right parameters when a
-// |translate.status| message is recieved from the JS side.
+// |translate.status| message is received from the JS side.
 TEST_F(TranslateControllerTest, TranslationSuccess) {
   // Arbitrary values.
   std::string some_original_language("en");
@@ -135,7 +135,7 @@
 
   base::DictionaryValue command;
   command.SetString("command", "translate.status");
-  command.SetBoolean("success", true);
+  command.SetDouble("errorCode", TranslateErrors::NONE);
   command.SetString("originalPageLanguage", some_original_language);
   command.SetDouble("translationTime", some_translation_time);
   EXPECT_TRUE(translate_controller_->OnJavascriptCommandReceived(
@@ -143,23 +143,23 @@
       /*is_main_frame=*/true));
   EXPECT_FALSE(on_script_ready_called_);
   EXPECT_TRUE(on_translate_complete_called_);
-  EXPECT_TRUE(success_);
+  EXPECT_TRUE(error_type_ == TranslateErrors::NONE);
   EXPECT_EQ(some_original_language, original_language_);
   EXPECT_EQ(some_translation_time, translation_time_);
 }
 
 // Tests that OnTranslateComplete() is called with the right parameters when a
-// |translate.status| message is recieved from the JS side.
+// |translate.status| message is received from the JS side.
 TEST_F(TranslateControllerTest, TranslationFailure) {
   base::DictionaryValue command;
   command.SetString("command", "translate.status");
-  command.SetBoolean("success", false);
+  command.SetDouble("errorCode", TranslateErrors::INITIALIZATION_ERROR);
   EXPECT_TRUE(translate_controller_->OnJavascriptCommandReceived(
       command, GURL("http://google.com"), /*interacting*/ false,
       /*is_main_frame=*/true));
   EXPECT_FALSE(on_script_ready_called_);
   EXPECT_TRUE(on_translate_complete_called_);
-  EXPECT_FALSE(success_);
+  EXPECT_FALSE(error_type_ == TranslateErrors::NONE);
 }
 
 }  // namespace translate
diff --git a/components/variations/service/variations_service.cc b/components/variations/service/variations_service.cc
index 369b12ac..96705263 100644
--- a/components/variations/service/variations_service.cc
+++ b/components/variations/service/variations_service.cc
@@ -419,12 +419,15 @@
     PrefService* local_state,
     metrics::MetricsStateManager* state_manager,
     const char* disable_network_switch,
-    const UIStringOverrider& ui_string_overrider) {
+    const UIStringOverrider& ui_string_overrider,
+    web_resource::ResourceRequestAllowedNotifier::NetworkConnectionTrackerGetter
+        network_connection_tracker_getter) {
   std::unique_ptr<VariationsService> result;
   result.reset(new VariationsService(
       std::move(client),
       std::make_unique<web_resource::ResourceRequestAllowedNotifier>(
-          local_state, disable_network_switch),
+          local_state, disable_network_switch,
+          std::move(network_connection_tracker_getter)),
       local_state, state_manager, ui_string_overrider));
   return result;
 }
@@ -478,8 +481,7 @@
   // ResourceRequestAllowedNotifier does not install an observer if there is no
   // NetworkChangeNotifier, which results in never being notified of changes to
   // network status.
-  DCHECK(net::NetworkChangeNotifier::HasNetworkChangeNotifier());
-  resource_request_allowed_notifier_->Init(this);
+  resource_request_allowed_notifier_->Init(this, false /* leaky */);
 }
 
 bool VariationsService::DoFetchFromURL(const GURL& url, bool is_http_retry) {
diff --git a/components/variations/service/variations_service.h b/components/variations/service/variations_service.h
index cb9ada3..f754c45 100644
--- a/components/variations/service/variations_service.h
+++ b/components/variations/service/variations_service.h
@@ -147,7 +147,9 @@
       PrefService* local_state,
       metrics::MetricsStateManager* state_manager,
       const char* disable_network_switch,
-      const UIStringOverrider& ui_string_overrider);
+      const UIStringOverrider& ui_string_overrider,
+      web_resource::ResourceRequestAllowedNotifier::
+          NetworkConnectionTrackerGetter network_connection_tracker_getter);
 
   // Enables fetching the seed for testing, even for unofficial builds. This
   // should be used along with overriding |DoActualFetch| or using
diff --git a/components/variations/service/variations_service_unittest.cc b/components/variations/service/variations_service_unittest.cc
index 2c10125..5826d50 100644
--- a/components/variations/service/variations_service_unittest.cc
+++ b/components/variations/service/variations_service_unittest.cc
@@ -42,6 +42,7 @@
 #include "net/url_request/test_url_fetcher_factory.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
+#include "services/network/test/test_network_connection_tracker.h"
 #include "services/network/test/test_url_loader_factory.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -279,7 +280,9 @@
 class VariationsServiceTest : public ::testing::Test {
  protected:
   VariationsServiceTest()
-      : enabled_state_provider_(
+      : network_tracker_(true,
+                         network::mojom::ConnectionType::CONNECTION_UNKNOWN),
+        enabled_state_provider_(
             new metrics::TestEnabledStateProvider(false, false)) {
     VariationsService::RegisterPrefs(prefs_.registry());
     metrics::CleanExitBeacon::RegisterPrefs(prefs_.registry());
@@ -299,6 +302,7 @@
 
  protected:
   TestingPrefServiceSimple prefs_;
+  network::TestNetworkConnectionTracker network_tracker_;
 
  private:
   base::test::ScopedTaskEnvironment scoped_task_environment_;
@@ -318,7 +322,8 @@
   TestVariationsServiceClient* raw_client = client.get();
   VariationsService service(
       std::move(client),
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), UIStringOverrider());
   GURL url = service.GetVariationsServerURL(&prefs_, std::string(),
                                             TestVariationsService::USE_HTTPS);
@@ -359,7 +364,8 @@
   TestVariationsServiceClient* raw_client = client.get();
   VariationsService service(
       std::move(client),
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), UIStringOverrider());
   raw_client->set_channel(version_info::Channel::UNKNOWN);
   GURL url = service.GetVariationsServerURL(&prefs_, std::string(),
@@ -390,7 +396,8 @@
   // Pass ownership to TestVariationsService, but keep a weak pointer to
   // manipulate it for this test.
   std::unique_ptr<web_resource::TestRequestAllowedNotifier> test_notifier =
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_);
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_);
   web_resource::TestRequestAllowedNotifier* raw_notifier = test_notifier.get();
   TestVariationsService test_service(std::move(test_notifier), &prefs_,
                                      GetMetricsStateManager(), true);
@@ -409,7 +416,8 @@
   // Pass ownership to TestVariationsService, but keep a weak pointer to
   // manipulate it for this test.
   std::unique_ptr<web_resource::TestRequestAllowedNotifier> test_notifier =
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_);
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_);
   web_resource::TestRequestAllowedNotifier* raw_notifier = test_notifier.get();
   TestVariationsService test_service(std::move(test_notifier), &prefs_,
                                      GetMetricsStateManager(), true);
@@ -423,7 +431,8 @@
   VariationsService::EnableFetchForTesting();
 
   TestVariationsService service(
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), true);
 
   EXPECT_FALSE(service.seed_stored());
@@ -446,7 +455,8 @@
   VariationsService::EnableFetchForTesting();
 
   TestVariationsService service(
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), true);
   service.set_intercepts_fetch(false);
   for (size_t i = 0; i < arraysize(non_ok_status_codes); ++i) {
@@ -466,7 +476,8 @@
   VariationsService::EnableFetchForTesting();
 
   TestVariationsService service(
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), true);
   service.set_intercepts_fetch(false);
   net::HttpRequestHeaders intercepted_headers;
@@ -503,7 +514,8 @@
   VariationsService::EnableFetchForTesting();
   for (size_t i = 0; i < arraysize(cases); ++i) {
     TestVariationsService service(
-        std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+        std::make_unique<web_resource::TestRequestAllowedNotifier>(
+            &prefs_, &network_tracker_),
         &prefs_, GetMetricsStateManager(), true);
     service.set_intercepts_fetch(false);
 
@@ -531,7 +543,8 @@
   VariationsService::EnableFetchForTesting();
 
   TestVariationsService service(
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), true);
   EXPECT_FALSE(service.seed_stored());
   service.set_intercepts_fetch(false);
@@ -555,7 +568,8 @@
 TEST_F(VariationsServiceTest, Observer) {
   VariationsService service(
       std::make_unique<TestVariationsServiceClient>(),
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), UIStringOverrider());
 
   struct {
@@ -653,7 +667,8 @@
   for (const auto& test : test_cases) {
     VariationsService service(
         std::make_unique<TestVariationsServiceClient>(),
-        std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+        std::make_unique<web_resource::TestRequestAllowedNotifier>(
+            &prefs_, &network_tracker_),
         &prefs_, GetMetricsStateManager(), UIStringOverrider());
 
     if (!test.pref_value_before) {
@@ -724,7 +739,8 @@
 
   for (const auto& test : test_cases) {
     TestVariationsService service(
-        std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+        std::make_unique<web_resource::TestRequestAllowedNotifier>(
+            &prefs_, &network_tracker_),
         &prefs_, GetMetricsStateManager(), true);
 
     if (test.pref_value_before.empty()) {
@@ -766,7 +782,8 @@
 
   // Create a variations service and start the fetch.
   TestVariationsService service(
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), true);
   service.set_intercepts_fetch(false);
   service.DoActualFetch();
@@ -784,7 +801,8 @@
 
   // Create a variations service and perform a successful fetch.
   TestVariationsService service(
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), true);
   service.set_intercepts_fetch(false);
 
@@ -830,7 +848,8 @@
 
   // Create a variations service and perform a successful fetch.
   TestVariationsService service(
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), true);
   service.set_intercepts_fetch(false);
 
@@ -850,7 +869,8 @@
 
 TEST_F(VariationsServiceTest, FieldTrialCreatorInitializedCorrectly) {
   TestVariationsService service(
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), true);
 
   // Call will crash in service's VariationsFieldTrialCreator if not initialized
@@ -862,7 +882,8 @@
   std::string serialized_seed = SerializeSeed(CreateTestSeed());
   VariationsService::EnableFetchForTesting();
   TestVariationsService service(
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), false);
   service.set_intercepts_fetch(false);
   service.test_url_loader_factory()->AddResponse(
@@ -874,7 +895,8 @@
 TEST_F(VariationsServiceTest, InsecurelyFetchedNotSetWhenHTTPS) {
   std::string serialized_seed = SerializeSeed(CreateTestSeed());
   TestVariationsService service(
-      std::make_unique<web_resource::TestRequestAllowedNotifier>(&prefs_),
+      std::make_unique<web_resource::TestRequestAllowedNotifier>(
+          &prefs_, &network_tracker_),
       &prefs_, GetMetricsStateManager(), true);
   VariationsService::EnableFetchForTesting();
   service.set_intercepts_fetch(false);
diff --git a/components/viz/common/quads/compositor_frame_metadata.h b/components/viz/common/quads/compositor_frame_metadata.h
index f733b70..75a965b 100644
--- a/components/viz/common/quads/compositor_frame_metadata.h
+++ b/components/viz/common/quads/compositor_frame_metadata.h
@@ -54,13 +54,8 @@
   gfx::Vector2dF root_scroll_offset;
   float page_scale_factor = 0.f;
 
-  // These limits can be used together with the scroll/scale fields above to
-  // determine if scrolling/scaling in a particular direction is possible.
   gfx::SizeF scrollable_viewport_size;
-  gfx::SizeF root_layer_size;
-  float min_page_scale_factor = 0.f;
-  float max_page_scale_factor = 0.f;
-  bool root_overflow_y_hidden = false;
+
   bool may_contain_video = false;
 
   // WebView makes quality decisions for rastering resourceless software frames
@@ -143,7 +138,15 @@
   // will be provided to CompositorFrameSinkClient.
   bool request_presentation_feedback = false;
 
+  // These limits can be used together with the scroll/scale fields above to
+  // determine if scrolling/scaling in a particular direction is possible.
+  float min_page_scale_factor = 0.f;
+
 #if defined(OS_ANDROID)
+  float max_page_scale_factor = 0.f;
+  gfx::SizeF root_layer_size;
+  bool root_overflow_y_hidden = false;
+
   // Provides selection region updates relative to the current viewport. If the
   // selection is empty or otherwise unused, the bound types will indicate such.
   Selection<gfx::SelectionBound> selection;
diff --git a/components/viz/service/display_embedder/viz_process_context_provider.cc b/components/viz/service/display_embedder/viz_process_context_provider.cc
index f6a65e28..c3aa280 100644
--- a/components/viz/service/display_embedder/viz_process_context_provider.cc
+++ b/components/viz/service/display_embedder/viz_process_context_provider.cc
@@ -12,7 +12,9 @@
 #include "base/macros.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/single_thread_task_runner.h"
+#include "base/sys_info.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "build/build_config.h"
 #include "components/viz/common/gpu/context_lost_observer.h"
 #include "components/viz/common/gpu/context_lost_reason.h"
 #include "components/viz/common/resources/platform_color.h"
@@ -58,6 +60,25 @@
   attributes.bind_generates_resource = false;
   attributes.fail_if_major_perf_caveat = false;
   attributes.lose_context_when_out_of_memory = true;
+
+#if defined(OS_ANDROID)
+  // TODO(cblume): We should add wide gamut code here, setting
+  // attributes.color_space.
+
+  if (requires_alpha_channel) {
+    attributes.alpha_size = 8;
+  } else if (base::SysInfo::AmountOfPhysicalMemoryMB() <= 512) {
+    // See compositor_impl_android.cc for more information about this.
+    // It is inside GetCompositorContextAttributes().
+    attributes.alpha_size = 0;
+    attributes.red_size = 5;
+    attributes.green_size = 6;
+    attributes.blue_size = 5;
+  }
+
+  attributes.enable_swap_timestamps_if_supported = true;
+#endif  // defined(OS_ANDROID)
+
   return attributes;
 }
 
diff --git a/components/web_resource/BUILD.gn b/components/web_resource/BUILD.gn
index 74863cc..6771f91 100644
--- a/components/web_resource/BUILD.gn
+++ b/components/web_resource/BUILD.gn
@@ -36,6 +36,7 @@
   deps = [
     ":web_resource",
     "//base",
+    "//services/network/public/cpp",
   ]
 }
 
diff --git a/components/web_resource/resource_request_allowed_notifier.cc b/components/web_resource/resource_request_allowed_notifier.cc
index 34d7bc7..d7c0714 100644
--- a/components/web_resource/resource_request_allowed_notifier.cc
+++ b/components/web_resource/resource_request_allowed_notifier.cc
@@ -10,25 +10,39 @@
 
 ResourceRequestAllowedNotifier::ResourceRequestAllowedNotifier(
     PrefService* local_state,
-    const char* disable_network_switch)
+    const char* disable_network_switch,
+    NetworkConnectionTrackerGetter network_connection_tracker_getter)
     : disable_network_switch_(disable_network_switch),
       local_state_(local_state),
       observer_requested_permission_(false),
       waiting_for_user_to_accept_eula_(false),
-      observer_(nullptr) {
-}
+      observer_(nullptr),
+      network_connection_tracker_getter_(
+          std::move(network_connection_tracker_getter)),
+      weak_factory_(this) {}
 
 ResourceRequestAllowedNotifier::~ResourceRequestAllowedNotifier() {
   if (observer_)
-    net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
+    network_connection_tracker_->RemoveNetworkConnectionObserver(this);
 }
 
-void ResourceRequestAllowedNotifier::Init(Observer* observer) {
+void ResourceRequestAllowedNotifier::Init(Observer* observer, bool leaky) {
   DCHECK(!observer_);
   DCHECK(observer);
   observer_ = observer;
 
-  net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
+  DCHECK(network_connection_tracker_getter_);
+  network_connection_tracker_ =
+      std::move(network_connection_tracker_getter_).Run();
+
+  if (leaky)
+    network_connection_tracker_->AddLeakyNetworkConnectionObserver(this);
+  else
+    network_connection_tracker_->AddNetworkConnectionObserver(this);
+  network_connection_tracker_->GetConnectionType(
+      &connection_type_,
+      base::BindOnce(&ResourceRequestAllowedNotifier::SetConnectionType,
+                     weak_factory_.GetWeakPtr()));
 
   eula_notifier_.reset(CreateEulaNotifier());
   if (eula_notifier_) {
@@ -48,8 +62,10 @@
   // The observer requested permission. Return the current criteria state and
   // set a flag to remind this class to notify the observer once the criteria
   // is met.
-  observer_requested_permission_ = waiting_for_user_to_accept_eula_ ||
-                                   net::NetworkChangeNotifier::IsOffline();
+  observer_requested_permission_ =
+      waiting_for_user_to_accept_eula_ ||
+      connection_type_ == network::mojom::ConnectionType::CONNECTION_NONE ||
+      !connection_initialized_;
   if (!observer_requested_permission_)
     return ALLOWED;
   return waiting_for_user_to_accept_eula_ ? DISALLOWED_EULA_NOT_ACCEPTED :
@@ -69,6 +85,11 @@
   observer_requested_permission_ = requested;
 }
 
+void ResourceRequestAllowedNotifier::SetConnectionTypeForTesting(
+    network::mojom::ConnectionType type) {
+  SetConnectionType(type);
+}
+
 void ResourceRequestAllowedNotifier::MaybeNotifyObserver() {
   // Need to ensure that all criteria are met before notifying observers.
   if (observer_requested_permission_ && ResourceRequestsAllowed()) {
@@ -93,9 +114,10 @@
   MaybeNotifyObserver();
 }
 
-void ResourceRequestAllowedNotifier::OnNetworkChanged(
-    net::NetworkChangeNotifier::ConnectionType type) {
-  if (type != net::NetworkChangeNotifier::CONNECTION_NONE) {
+void ResourceRequestAllowedNotifier::OnConnectionChanged(
+    network::mojom::ConnectionType type) {
+  SetConnectionType(type);
+  if (type != network::mojom::ConnectionType::CONNECTION_NONE) {
     DVLOG(1) << "Network came online.";
     // MaybeNotifyObserver() internally guarantees that it will only notify the
     // observer if it's currently waiting for the network to come online.
@@ -103,4 +125,10 @@
   }
 }
 
+void ResourceRequestAllowedNotifier::SetConnectionType(
+    network::mojom::ConnectionType connection_type) {
+  connection_initialized_ = true;
+  connection_type_ = connection_type;
+}
+
 }  // namespace web_resource
diff --git a/components/web_resource/resource_request_allowed_notifier.h b/components/web_resource/resource_request_allowed_notifier.h
index 695f60482..f792dfa 100644
--- a/components/web_resource/resource_request_allowed_notifier.h
+++ b/components/web_resource/resource_request_allowed_notifier.h
@@ -9,7 +9,7 @@
 
 #include "base/macros.h"
 #include "components/web_resource/eula_accepted_notifier.h"
-#include "net/base/network_change_notifier.h"
+#include "services/network/public/cpp/network_connection_tracker.h"
 
 class PrefService;
 
@@ -37,7 +37,7 @@
 // global instance.
 class ResourceRequestAllowedNotifier
     : public EulaAcceptedNotifier::Observer,
-      public net::NetworkChangeNotifier::NetworkChangeObserver {
+      public network::NetworkConnectionTracker::NetworkConnectionObserver {
  public:
   // Observes resource request allowed state changes.
   class Observer {
@@ -54,20 +54,26 @@
     DISALLOWED_COMMAND_LINE_DISABLED,
   };
 
+  using NetworkConnectionTrackerGetter =
+      base::OnceCallback<network::NetworkConnectionTracker*()>;
+
   // Creates a new ResourceRequestAllowedNotifier.
   // |local_state| is the PrefService to observe.
   // |disable_network_switch| is the command line switch to disable network
   // activity. It is expected to outlive the ResourceRequestAllowedNotifier and
   // may be null.
-  ResourceRequestAllowedNotifier(PrefService* local_state,
-                                 const char* disable_network_switch);
+  ResourceRequestAllowedNotifier(
+      PrefService* local_state,
+      const char* disable_network_switch,
+      NetworkConnectionTrackerGetter network_connection_tracker_getter);
   ~ResourceRequestAllowedNotifier() override;
 
   // Sets |observer| as the service to be notified by this instance, and
   // performs initial checks on the criteria. |observer| may not be null.
   // This is to be called immediately after construction of an instance of
-  // ResourceRequestAllowedNotifier to pass it the interested service.
-  void Init(Observer* observer);
+  // ResourceRequestAllowedNotifier to pass it the interested service. Set
+  // |leaky| to true if this class will not be destructed before shutdown.
+  void Init(Observer* observer, bool leaky);
 
   // Returns whether resource requests are allowed, per the various criteria.
   // If not, this call will set some flags so it knows to notify the observer
@@ -82,6 +88,8 @@
 
   void SetWaitingForEulaForTesting(bool waiting);
   void SetObserverRequestedForTesting(bool requested);
+  void SetConnectionTypeForTesting(
+      network::mojom::ConnectionType connection_type);
 
  protected:
   // Notifies the observer if all criteria needed for resource requests are met.
@@ -96,9 +104,10 @@
   // EulaAcceptedNotifier::Observer overrides:
   void OnEulaAccepted() override;
 
-  // net::NetworkChangeNotifier::NetworkChangeObserver overrides:
-  void OnNetworkChanged(
-      net::NetworkChangeNotifier::ConnectionType type) override;
+  // network::NetworkConnectionTracker::NetworkConnectionObserver overrides:
+  void OnConnectionChanged(network::mojom::ConnectionType type) override;
+
+  void SetConnectionType(network::mojom::ConnectionType connection_type);
 
   // Name of the command line switch to disable the network activity.
   const char* disable_network_switch_;
@@ -120,6 +129,14 @@
   // Observing service interested in request permissions.
   Observer* observer_;
 
+  NetworkConnectionTrackerGetter network_connection_tracker_getter_;
+  network::NetworkConnectionTracker* network_connection_tracker_ = nullptr;
+  network::mojom::ConnectionType connection_type_ =
+      network::mojom::ConnectionType::CONNECTION_UNKNOWN;
+  bool connection_initialized_ = false;
+
+  base::WeakPtrFactory<ResourceRequestAllowedNotifier> weak_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(ResourceRequestAllowedNotifier);
 };
 
diff --git a/components/web_resource/resource_request_allowed_notifier_test_util.cc b/components/web_resource/resource_request_allowed_notifier_test_util.cc
index e297452..3c12718f 100644
--- a/components/web_resource/resource_request_allowed_notifier_test_util.cc
+++ b/components/web_resource/resource_request_allowed_notifier_test_util.cc
@@ -6,11 +6,19 @@
 
 namespace web_resource {
 
-TestRequestAllowedNotifier::TestRequestAllowedNotifier(PrefService* local_state)
-    : ResourceRequestAllowedNotifier(local_state, nullptr),
+TestRequestAllowedNotifier::TestRequestAllowedNotifier(
+    PrefService* local_state,
+    network::NetworkConnectionTracker* network_connection_tracker)
+    : ResourceRequestAllowedNotifier(
+          local_state,
+          nullptr,
+          base::BindOnce(
+              [](network::NetworkConnectionTracker* tracker) {
+                return tracker;
+              },
+              network_connection_tracker)),
       override_requests_allowed_(false),
-      requests_allowed_(true) {
-}
+      requests_allowed_(true) {}
 
 TestRequestAllowedNotifier::~TestRequestAllowedNotifier() {
 }
@@ -19,7 +27,7 @@
     Observer* observer,
     std::unique_ptr<EulaAcceptedNotifier> eula_notifier) {
   test_eula_notifier_.swap(eula_notifier);
-  Init(observer);
+  Init(observer, false /* leaky */);
 }
 
 void TestRequestAllowedNotifier::SetRequestsAllowedOverride(bool allowed) {
diff --git a/components/web_resource/resource_request_allowed_notifier_test_util.h b/components/web_resource/resource_request_allowed_notifier_test_util.h
index a9fadf1..9cd1c143 100644
--- a/components/web_resource/resource_request_allowed_notifier_test_util.h
+++ b/components/web_resource/resource_request_allowed_notifier_test_util.h
@@ -25,7 +25,9 @@
 // it to return.
 class TestRequestAllowedNotifier : public ResourceRequestAllowedNotifier {
  public:
-  explicit TestRequestAllowedNotifier(PrefService* local_state);
+  TestRequestAllowedNotifier(
+      PrefService* local_state,
+      network::NetworkConnectionTracker* network_connection_tracker);
   ~TestRequestAllowedNotifier() override;
 
   // A version of |Init()| that accepts a custom EulaAcceptedNotifier.
diff --git a/components/web_resource/resource_request_allowed_notifier_unittest.cc b/components/web_resource/resource_request_allowed_notifier_unittest.cc
index a2b1d58e..69b41ac 100644
--- a/components/web_resource/resource_request_allowed_notifier_unittest.cc
+++ b/components/web_resource/resource_request_allowed_notifier_unittest.cc
@@ -9,38 +9,11 @@
 #include "components/prefs/testing_pref_service.h"
 #include "components/web_resource/eula_accepted_notifier.h"
 #include "components/web_resource/resource_request_allowed_notifier_test_util.h"
+#include "services/network/test/test_network_connection_tracker.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace web_resource {
 
-// Override NetworkChangeNotifier to simulate connection type changes for tests.
-class TestNetworkChangeNotifier : public net::NetworkChangeNotifier {
- public:
-  TestNetworkChangeNotifier()
-      : connection_type_(net::NetworkChangeNotifier::CONNECTION_UNKNOWN) {}
-
-  // Simulates a change of the connection type to |type|. This will notify any
-  // objects that are NetworkChangeNotifiers.
-  void SimulateNetworkConnectionChange(
-      net::NetworkChangeNotifier::ConnectionType type) {
-    connection_type_ = type;
-    net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
-        connection_type_);
-    base::RunLoop().RunUntilIdle();
-  }
-
- private:
-  ConnectionType GetCurrentConnectionType() const override {
-    return connection_type_;
-  }
-
-  // The currently simulated network connection type. If this is set to
-  // CONNECTION_NONE, then NetworkChangeNotifier::IsOffline will return true.
-  net::NetworkChangeNotifier::ConnectionType connection_type_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestNetworkChangeNotifier);
-};
-
 // EulaAcceptedNotifier test class that allows mocking the EULA accepted state
 // and issuing simulated notifications.
 class TestEulaAcceptedNotifier : public EulaAcceptedNotifier {
@@ -75,7 +48,9 @@
       public ResourceRequestAllowedNotifier::Observer {
  public:
   ResourceRequestAllowedNotifierTest()
-      : resource_request_allowed_notifier_(&prefs_),
+      : network_tracker_(true,
+                         network::mojom::ConnectionType::CONNECTION_UNKNOWN),
+        resource_request_allowed_notifier_(&prefs_, &network_tracker_),
         eula_notifier_(new TestEulaAcceptedNotifier),
         was_notified_(false) {
     resource_request_allowed_notifier_.InitWithEulaAcceptNotifier(
@@ -88,9 +63,9 @@
   // ResourceRequestAllowedNotifier::Observer override:
   void OnResourceRequestsAllowed() override { was_notified_ = true; }
 
-  void SimulateNetworkConnectionChange(
-      net::NetworkChangeNotifier::ConnectionType type) {
-    network_notifier.SimulateNetworkConnectionChange(type);
+  void SimulateNetworkConnectionChange(network::mojom::ConnectionType type) {
+    network_tracker_.SetConnectionType(type);
+    base::RunLoop().RunUntilIdle();
   }
 
   // Simulate a resource request from the test service. It returns true if
@@ -117,7 +92,7 @@
   // and the network.
   void DisableEulaAndNetwork() {
     SimulateNetworkConnectionChange(
-        net::NetworkChangeNotifier::CONNECTION_NONE);
+        network::mojom::ConnectionType::CONNECTION_NONE);
     SetWaitingForEula(true);
     SetNeedsEulaAcceptance(true);
   }
@@ -132,8 +107,8 @@
   }
 
  private:
-  base::MessageLoopForUI message_loop;
-  TestNetworkChangeNotifier network_notifier;
+  base::MessageLoopForUI message_loop_;
+  network::TestNetworkConnectionTracker network_tracker_;
   TestingPrefServiceSimple prefs_;
   TestRequestAllowedNotifier resource_request_allowed_notifier_;
   TestEulaAcceptedNotifier* eula_notifier_;  // Weak, owned by RRAN.
@@ -143,71 +118,88 @@
 };
 
 TEST_F(ResourceRequestAllowedNotifierTest, DoNotNotifyIfOffline) {
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_NONE);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_NONE);
   EXPECT_FALSE(SimulateResourceRequest());
 
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_NONE);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_NONE);
   EXPECT_FALSE(was_notified());
 }
 
 TEST_F(ResourceRequestAllowedNotifierTest, DoNotNotifyIfOnlineToOnline) {
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_TRUE(SimulateResourceRequest());
 
   SimulateNetworkConnectionChange(
-      net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_FALSE(was_notified());
 }
 
 TEST_F(ResourceRequestAllowedNotifierTest, NotifyOnReconnect) {
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_NONE);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_NONE);
   EXPECT_FALSE(SimulateResourceRequest());
 
   SimulateNetworkConnectionChange(
-      net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_TRUE(was_notified());
 }
 
 TEST_F(ResourceRequestAllowedNotifierTest, NoNotifyOnWardriving) {
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_TRUE(SimulateResourceRequest());
 
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_FALSE(was_notified());
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_3G);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_3G);
   EXPECT_FALSE(was_notified());
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_4G);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_4G);
   EXPECT_FALSE(was_notified());
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_FALSE(was_notified());
 }
 
 TEST_F(ResourceRequestAllowedNotifierTest, NoNotifyOnFlakyConnection) {
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_TRUE(SimulateResourceRequest());
 
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_FALSE(was_notified());
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_NONE);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_NONE);
   EXPECT_FALSE(was_notified());
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_FALSE(was_notified());
 }
 
 TEST_F(ResourceRequestAllowedNotifierTest, NotifyOnFlakyConnection) {
   // First, the observer queries the state while the network is connected.
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_TRUE(SimulateResourceRequest());
 
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_FALSE(was_notified());
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_NONE);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_NONE);
   EXPECT_FALSE(was_notified());
 
   // Now, the observer queries the state while the network is disconnected.
   EXPECT_FALSE(SimulateResourceRequest());
 
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_TRUE(was_notified());
 }
 
@@ -215,9 +207,11 @@
   DisableEulaAndNetwork();
   EXPECT_FALSE(SimulateResourceRequest());
 
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_FALSE(was_notified());
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_NONE);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_NONE);
   EXPECT_FALSE(was_notified());
   SimulateEulaAccepted();
   EXPECT_FALSE(was_notified());
@@ -227,9 +221,10 @@
   // Ensure that if the observing service does not request access, it does not
   // get notified, even if the criteria are met. Note that this is done by not
   // calling SimulateResourceRequest here.
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_NONE);
   SimulateNetworkConnectionChange(
-      net::NetworkChangeNotifier::CONNECTION_ETHERNET);
+      network::mojom::ConnectionType::CONNECTION_NONE);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_ETHERNET);
   EXPECT_FALSE(was_notified());
 }
 
@@ -248,7 +243,8 @@
   SimulateEulaAccepted();
   EXPECT_FALSE(was_notified());
 
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_TRUE(was_notified());
 }
 
@@ -256,7 +252,8 @@
   DisableEulaAndNetwork();
   EXPECT_FALSE(SimulateResourceRequest());
 
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_FALSE(was_notified());
 
   SimulateEulaAccepted();
@@ -269,7 +266,8 @@
   // calling SimulateResourceRequest here.
   DisableEulaAndNetwork();
 
-  SimulateNetworkConnectionChange(net::NetworkChangeNotifier::CONNECTION_WIFI);
+  SimulateNetworkConnectionChange(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
   EXPECT_FALSE(was_notified());
 
   SimulateEulaAccepted();
diff --git a/components/web_resource/web_resource_service.cc b/components/web_resource/web_resource_service.cc
index 5680024..c72c341 100644
--- a/components/web_resource/web_resource_service.cc
+++ b/components/web_resource/web_resource_service.cc
@@ -44,10 +44,14 @@
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
     const char* disable_network_switch,
     const ParseJSONCallback& parse_json_callback,
-    const net::NetworkTrafficAnnotationTag& traffic_annotation)
+    const net::NetworkTrafficAnnotationTag& traffic_annotation,
+    ResourceRequestAllowedNotifier::NetworkConnectionTrackerGetter
+        network_connection_tracker_getter)
     : prefs_(prefs),
-      resource_request_allowed_notifier_(
-          new ResourceRequestAllowedNotifier(prefs, disable_network_switch)),
+      resource_request_allowed_notifier_(new ResourceRequestAllowedNotifier(
+          prefs,
+          disable_network_switch,
+          std::move(network_connection_tracker_getter))),
       fetch_scheduled_(false),
       in_fetch_(false),
       web_resource_server_(web_resource_server),
@@ -59,7 +63,7 @@
       parse_json_callback_(parse_json_callback),
       traffic_annotation_(traffic_annotation),
       weak_ptr_factory_(this) {
-  resource_request_allowed_notifier_->Init(this);
+  resource_request_allowed_notifier_->Init(this, false /* leaky */);
   DCHECK(prefs);
 }
 
@@ -114,7 +118,7 @@
 void WebResourceService::SetResourceRequestAllowedNotifier(
     std::unique_ptr<ResourceRequestAllowedNotifier> notifier) {
   resource_request_allowed_notifier_ = std::move(notifier);
-  resource_request_allowed_notifier_->Init(this);
+  resource_request_allowed_notifier_->Init(this, false /* leaky */);
 }
 
 bool WebResourceService::GetFetchScheduled() const {
diff --git a/components/web_resource/web_resource_service.h b/components/web_resource/web_resource_service.h
index 279f793..ba9d1407 100644
--- a/components/web_resource/web_resource_service.h
+++ b/components/web_resource/web_resource_service.h
@@ -55,7 +55,9 @@
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
       const char* disable_network_switch,
       const ParseJSONCallback& parse_json_callback,
-      const net::NetworkTrafficAnnotationTag& traffic_annotation);
+      const net::NetworkTrafficAnnotationTag& traffic_annotation,
+      ResourceRequestAllowedNotifier::NetworkConnectionTrackerGetter
+          network_connection_tracker_getter);
 
   ~WebResourceService() override;
 
diff --git a/components/web_resource/web_resource_service_unittest.cc b/components/web_resource/web_resource_service_unittest.cc
index b12caae5..0250013 100644
--- a/components/web_resource/web_resource_service_unittest.cc
+++ b/components/web_resource/web_resource_service_unittest.cc
@@ -15,6 +15,7 @@
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
+#include "services/network/test/test_network_connection_tracker.h"
 #include "services/network/test/test_url_loader_factory.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -29,9 +30,18 @@
 class TestResourceRequestAllowedNotifier
     : public ResourceRequestAllowedNotifier {
  public:
-  TestResourceRequestAllowedNotifier(PrefService* prefs,
-                                     const char* disable_network_switch)
-      : ResourceRequestAllowedNotifier(prefs, disable_network_switch) {}
+  TestResourceRequestAllowedNotifier(
+      PrefService* prefs,
+      const char* disable_network_switch,
+      network::NetworkConnectionTracker* network_connection_tracker)
+      : ResourceRequestAllowedNotifier(
+            prefs,
+            disable_network_switch,
+            base::BindOnce(
+                [](network::NetworkConnectionTracker* tracker) {
+                  return tracker;
+                },
+                network_connection_tracker)) {}
 
   ResourceRequestAllowedNotifier::State GetResourceRequestsAllowedState()
       override {
@@ -61,7 +71,8 @@
       int cache_update_delay_ms,
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
       const char* disable_network_switch,
-      const ParseJSONCallback& parse_json_callback)
+      const ParseJSONCallback& parse_json_callback,
+      network::NetworkConnectionTracker* network_connection_tracker)
       : WebResourceService(prefs,
                            web_resource_server,
                            application_locale,
@@ -71,14 +82,21 @@
                            url_loader_factory,
                            disable_network_switch,
                            parse_json_callback,
-                           TRAFFIC_ANNOTATION_FOR_TESTS){};
+                           TRAFFIC_ANNOTATION_FOR_TESTS,
+                           base::BindOnce(
+                               [](network::NetworkConnectionTracker* tracker) {
+                                 return tracker;
+                               },
+                               network_connection_tracker)){};
 
   void Unpack(const base::DictionaryValue& parsed_json) override {}
 };
 
 class WebResourceServiceTest : public testing::Test {
  public:
-  WebResourceServiceTest() {}
+  WebResourceServiceTest()
+      : network_tracker_(true,
+                         network::mojom::ConnectionType::CONNECTION_UNKNOWN) {}
 
   void SetUp() override {
     test_shared_loader_factory_ =
@@ -89,10 +107,12 @@
     test_web_resource_service_.reset(new TestWebResourceService(
         local_state_.get(), GURL(kTestUrl), "", kCacheUpdatePath.c_str(), 100,
         5000, test_shared_loader_factory_, nullptr,
-        base::Bind(web_resource::WebResourceServiceTest::Parse)));
+        base::BindRepeating(web_resource::WebResourceServiceTest::Parse),
+        &network_tracker_));
     error_message_ = "";
     TestResourceRequestAllowedNotifier* notifier =
-        new TestResourceRequestAllowedNotifier(local_state_.get(), nullptr);
+        new TestResourceRequestAllowedNotifier(local_state_.get(), nullptr,
+                                               &network_tracker_);
     notifier->SetState(ResourceRequestAllowedNotifier::ALLOWED);
     test_web_resource_service_->SetResourceRequestAllowedNotifier(
         std::unique_ptr<ResourceRequestAllowedNotifier>(notifier));
@@ -132,6 +152,7 @@
   network::TestURLLoaderFactory test_url_loader_factory_;
   scoped_refptr<network::SharedURLLoaderFactory> test_shared_loader_factory_;
   std::unique_ptr<TestingPrefServiceSimple> local_state_;
+  network::TestNetworkConnectionTracker network_tracker_;
   std::unique_ptr<TestWebResourceService> test_web_resource_service_;
 };
 
diff --git a/content/browser/fileapi/file_system_manager_impl.cc b/content/browser/fileapi/file_system_manager_impl.cc
index 113430f5..ba95a930 100644
--- a/content/browser/fileapi/file_system_manager_impl.cc
+++ b/content/browser/fileapi/file_system_manager_impl.cc
@@ -99,6 +99,22 @@
   FileSystemManagerImpl* const file_system_manager_impl_;
 };
 
+struct FileSystemManagerImpl::WriteSyncCallbackEntry {
+  WriteSyncCallback callback;
+  int64_t bytes;
+
+  explicit WriteSyncCallbackEntry(WriteSyncCallback cb)
+      : callback(std::move(cb)), bytes(0) {}
+};
+
+struct FileSystemManagerImpl::ReadDirectorySyncCallbackEntry {
+  ReadDirectorySyncCallback callback;
+  std::vector<filesystem::mojom::DirectoryEntryPtr> entries;
+
+  explicit ReadDirectorySyncCallbackEntry(ReadDirectorySyncCallback cb)
+      : callback(std::move(cb)) {}
+};
+
 FileSystemManagerImpl::FileSystemManagerImpl(
     int process_id,
     storage::FileSystemContext* file_system_context,
@@ -346,6 +362,30 @@
                                GetWeakPtr(), listener_id));
 }
 
+void FileSystemManagerImpl::ReadDirectorySync(
+    const GURL& path,
+    ReadDirectorySyncCallback callback) {
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  FileSystemURL url(context_->CrackURL(path));
+  base::Optional<base::File::Error> opt_error = ValidateFileSystemURL(url);
+  if (opt_error) {
+    std::move(callback).Run(std::vector<filesystem::mojom::DirectoryEntryPtr>(),
+                            opt_error.value());
+    return;
+  }
+  if (!security_policy_->CanReadFileSystemFile(process_id_, url)) {
+    std::move(callback).Run(std::vector<filesystem::mojom::DirectoryEntryPtr>(),
+                            base::File::FILE_ERROR_SECURITY);
+    return;
+  }
+
+  operation_runner()->ReadDirectory(
+      url, base::BindRepeating(
+               &FileSystemManagerImpl::DidReadDirectorySync, GetWeakPtr(),
+               base::Owned(
+                   new ReadDirectorySyncCallbackEntry(std::move(callback)))));
+}
+
 void FileSystemManagerImpl::Write(
     const GURL& file_path,
     const std::string& blob_uuid,
@@ -378,6 +418,32 @@
       std::move(op_request));
 }
 
+void FileSystemManagerImpl::WriteSync(const GURL& file_path,
+                                      const std::string& blob_uuid,
+                                      int64_t position,
+                                      WriteSyncCallback callback) {
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+  FileSystemURL url(context_->CrackURL(file_path));
+  base::Optional<base::File::Error> opt_error = ValidateFileSystemURL(url);
+  if (opt_error) {
+    std::move(callback).Run(0, opt_error.value());
+    return;
+  }
+  if (!security_policy_->CanWriteFileSystemFile(process_id_, url)) {
+    std::move(callback).Run(0, base::File::FILE_ERROR_SECURITY);
+    return;
+  }
+  std::unique_ptr<storage::BlobDataHandle> blob =
+      blob_storage_context_->context()->GetBlobDataFromUUID(blob_uuid);
+
+  operation_runner()->Write(
+      url, std::move(blob), position,
+      base::BindRepeating(
+          &FileSystemManagerImpl::DidWriteSync, GetWeakPtr(),
+          base::Owned(new WriteSyncCallbackEntry(std::move(callback)))));
+}
+
 void FileSystemManagerImpl::Truncate(
     const GURL& file_path,
     int64_t length,
@@ -404,6 +470,27 @@
       std::move(op_request));
 }
 
+void FileSystemManagerImpl::TruncateSync(const GURL& file_path,
+                                         int64_t length,
+                                         TruncateSyncCallback callback) {
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  FileSystemURL url(context_->CrackURL(file_path));
+  base::Optional<base::File::Error> opt_error = ValidateFileSystemURL(url);
+  if (opt_error) {
+    std::move(callback).Run(opt_error.value());
+    return;
+  }
+  if (!security_policy_->CanWriteFileSystemFile(process_id_, url)) {
+    std::move(callback).Run(base::File::FILE_ERROR_SECURITY);
+    return;
+  }
+
+  operation_runner()->Truncate(
+      url, length,
+      base::BindRepeating(&FileSystemManagerImpl::DidFinish, GetWeakPtr(),
+                          base::Passed(&callback)));
+}
+
 void FileSystemManagerImpl::TouchFile(const GURL& path,
                                       base::Time last_access_time,
                                       base::Time last_modified_time,
@@ -546,6 +633,22 @@
     RemoveOpListener(listener_id);
 }
 
+void FileSystemManagerImpl::DidReadDirectorySync(
+    ReadDirectorySyncCallbackEntry* callback_entry,
+    base::File::Error result,
+    std::vector<filesystem::mojom::DirectoryEntry> entries,
+    bool has_more) {
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  for (const auto& entry : entries) {
+    callback_entry->entries.emplace_back(
+        filesystem::mojom::DirectoryEntry::New(std::move(entry)));
+  }
+  if (result != base::File::FILE_OK || !has_more) {
+    std::move(callback_entry->callback)
+        .Run(std::move(callback_entry->entries), result);
+  }
+}
+
 void FileSystemManagerImpl::DidWrite(OperationListenerID listener_id,
                                      base::File::Error result,
                                      int64_t bytes,
@@ -565,6 +668,15 @@
   }
 }
 
+void FileSystemManagerImpl::DidWriteSync(WriteSyncCallbackEntry* entry,
+                                         base::File::Error result,
+                                         int64_t bytes,
+                                         bool complete) {
+  entry->bytes += bytes;
+  if (complete || result != base::File::FILE_OK)
+    std::move(entry->callback).Run(entry->bytes, result);
+}
+
 void FileSystemManagerImpl::DidOpenFileSystem(
     OpenCallback callback,
     const GURL& root,
diff --git a/content/browser/fileapi/file_system_manager_impl.h b/content/browser/fileapi/file_system_manager_impl.h
index bc08ed04..01eb4353 100644
--- a/content/browser/fileapi/file_system_manager_impl.h
+++ b/content/browser/fileapi/file_system_manager_impl.h
@@ -94,15 +94,24 @@
   void ReadDirectory(
       const GURL& path,
       blink::mojom::FileSystemOperationListenerPtr listener) override;
+  void ReadDirectorySync(const GURL& path,
+                         ReadDirectorySyncCallback callback) override;
   void Write(const GURL& file_path,
              const std::string& blob_uuid,
              int64_t position,
              blink::mojom::FileSystemCancellableOperationRequest op_request,
              blink::mojom::FileSystemOperationListenerPtr listener) override;
+  void WriteSync(const GURL& file_path,
+                 const std::string& blob_uuid,
+                 int64_t position,
+                 WriteSyncCallback callback) override;
   void Truncate(const GURL& file_path,
                 int64_t length,
                 blink::mojom::FileSystemCancellableOperationRequest op_request,
                 TruncateCallback callback) override;
+  void TruncateSync(const GURL& file_path,
+                    int64_t length,
+                    TruncateSyncCallback callback) override;
   void TouchFile(const GURL& path,
                  base::Time last_access_time,
                  base::Time last_modified_time,
@@ -117,6 +126,8 @@
   class ReceivedSnapshotListenerImpl;
   using OperationID = storage::FileSystemOperationRunner::OperationID;
   using OperationListenerID = int;
+  struct WriteSyncCallbackEntry;
+  struct ReadDirectorySyncCallbackEntry;
 
   void Cancel(
       OperationID op_id,
@@ -137,10 +148,19 @@
                         base::File::Error result,
                         std::vector<filesystem::mojom::DirectoryEntry> entries,
                         bool has_more);
+  void DidReadDirectorySync(
+      ReadDirectorySyncCallbackEntry* callback_entry,
+      base::File::Error result,
+      std::vector<filesystem::mojom::DirectoryEntry> entries,
+      bool has_more);
   void DidWrite(OperationListenerID listener_id,
                 base::File::Error result,
                 int64_t bytes,
                 bool complete);
+  void DidWriteSync(WriteSyncCallbackEntry* entry,
+                    base::File::Error result,
+                    int64_t bytes,
+                    bool complete);
   void DidOpenFileSystem(OpenCallback callback,
                          const GURL& root,
                          const std::string& filesystem_name,
@@ -196,7 +216,7 @@
   std::unordered_map<OperationListenerID,
                      blink::mojom::FileSystemOperationListenerPtr>
       op_listeners_;
-  OperationListenerID next_operation_listener_id_ = 0;
+  OperationListenerID next_operation_listener_id_ = 1;
 
   // Used to keep snapshot files alive while a DidCreateSnapshot
   // is being sent to the renderer.
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
index 1a70632..06e52b4 100644
--- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -56,8 +56,10 @@
 #include "content/public/test/content_browser_test.h"
 #include "content/public/test/content_browser_test_utils.h"
 #include "content/public/test/download_test_observer.h"
+#include "content/public/test/navigation_handle_observer.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "content/public/test/test_utils.h"
+#include "content/public/test/url_loader_interceptor.h"
 #include "content/shell/browser/shell.h"
 #include "content/shell/browser/shell_download_manager_delegate.h"
 #include "content/shell/common/shell_switches.h"
@@ -6397,6 +6399,171 @@
       EvalJs(shell(), "document.getElementsByTagName('pre')[0].innerText"));
 }
 
+// This test verifies that reloading a POST request that is uncacheable won't
+// incorrectly result in a GET request.  This is a regression test for
+// https://crbug.com/860807.
+IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, UncacheablePost) {
+  GURL main_url(embedded_test_server()->GetURL(
+      "/form_that_posts_to_echoall_nocache.html"));
+  EXPECT_TRUE(NavigateToURL(shell(), main_url));
+  WebContents* web_contents = shell()->web_contents();
+  EXPECT_EQ(0, web_contents->GetController().GetLastCommittedEntryIndex());
+
+  // Submit the form.
+  TestNavigationObserver form_post_observer(web_contents, 1);
+  EXPECT_TRUE(
+      ExecuteScript(web_contents, "document.getElementById('form').submit();"));
+  form_post_observer.Wait();
+
+  // Verify that we arrived at the expected location.
+  GURL target_url(embedded_test_server()->GetURL("/echoall/nocache"));
+  EXPECT_EQ(target_url, web_contents->GetLastCommittedURL());
+  EXPECT_EQ(1, web_contents->GetController().GetLastCommittedEntryIndex());
+
+  // Verify that this was a POST request.
+  std::string request_headers;
+  EXPECT_TRUE(ExecuteScriptAndExtractString(
+      web_contents,
+      "window.domAutomationController.send("
+      "document.getElementsByTagName('pre')[1].innerText);",
+      &request_headers));
+  EXPECT_THAT(request_headers, ::testing::HasSubstr("POST /echoall/nocache"));
+
+  // Verify that POST body was correctly passed to the server and ended up in
+  // the body of the page.
+  std::string body;
+  EXPECT_TRUE(ExecuteScriptAndExtractString(
+      web_contents,
+      "window.domAutomationController.send("
+      "document.getElementsByTagName('pre')[0].innerText);",
+      &body));
+  EXPECT_EQ("text=value\n", body);
+
+  // Extract the response nonce.
+  std::string old_response_nonce;
+  std::string response_nonce_extraction_script = R"(
+      domAutomationController.send(
+          document.getElementById('response-nonce').innerText); )";
+  EXPECT_TRUE(ExecuteScriptAndExtractString(
+      web_contents, response_nonce_extraction_script, &old_response_nonce));
+
+  // Go back.
+  {
+    TestNavigationObserver observer(web_contents);
+    web_contents->GetController().GoBack();
+    observer.Wait();
+  }
+  EXPECT_EQ(main_url, web_contents->GetLastCommittedURL());
+  EXPECT_EQ(0, web_contents->GetController().GetLastCommittedEntryIndex());
+
+  // Go forward.
+  {
+    TestNavigationObserver navigation_observer(web_contents);
+    NavigationHandleObserver handle_observer(web_contents, target_url);
+    web_contents->GetController().GoForward();
+    navigation_observer.Wait();
+
+    // Verify that the previous response response really was treated as
+    // uncacheable.
+    EXPECT_TRUE(handle_observer.is_error());
+    EXPECT_EQ(net::ERR_CACHE_MISS, handle_observer.net_error_code());
+  }
+  EXPECT_EQ(target_url, web_contents->GetLastCommittedURL());
+  EXPECT_EQ(1, web_contents->GetController().GetLastCommittedEntryIndex());
+
+  // Reload
+  {
+    TestNavigationObserver observer(web_contents);
+    web_contents->GetController().Reload(content::ReloadType::NORMAL,
+                                         false);  // check_for_repost
+    observer.Wait();
+  }
+  EXPECT_EQ(target_url, web_contents->GetLastCommittedURL());
+  EXPECT_EQ(1, web_contents->GetController().GetLastCommittedEntryIndex());
+
+  // MAIN VERIFICATION for https://crbug.com/860807: Verify that the reload was
+  // a POST request.
+  EXPECT_TRUE(ExecuteScriptAndExtractString(
+      web_contents,
+      "window.domAutomationController.send("
+      "document.getElementsByTagName('pre')[1].innerText);",
+      &request_headers));
+  EXPECT_THAT(request_headers, ::testing::HasSubstr("POST /echoall/nocache"));
+
+  // Verify that POST body was correctly passed to the server and ended up in
+  // the body of the page.  This is supplementary verification against
+  // https://crbug.com/860807.
+  EXPECT_TRUE(ExecuteScriptAndExtractString(
+      web_contents,
+      "window.domAutomationController.send("
+      "document.getElementsByTagName('pre')[0].innerText);",
+      &body));
+  EXPECT_EQ("text=value\n", body);
+
+  // Extract the new response nonce and verify that it did change (e.g. that the
+  // reload did load fresh content).
+  std::string new_response_nonce;
+  EXPECT_TRUE(ExecuteScriptAndExtractString(
+      web_contents, response_nonce_extraction_script, &new_response_nonce));
+  EXPECT_NE(new_response_nonce, old_response_nonce);
+}
+
+// This test verifies that it is possible to reload a POST request that
+// initially failed (e.g. because the network was offline or the host was
+// unreachable during the initial navigation).  This is a regression test for
+// https://crbug.com/869117.
+IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
+                       ReloadOfInitiallyFailedPost) {
+  GURL main_url(embedded_test_server()->GetURL(
+      "/form_that_posts_to_echoall_nocache.html"));
+  EXPECT_TRUE(NavigateToURL(shell(), main_url));
+  WebContents* web_contents = shell()->web_contents();
+  EXPECT_EQ(0, web_contents->GetController().GetLastCommittedEntryIndex());
+
+  // Submit the form while simulating "network down" conditions.
+  GURL target_url(embedded_test_server()->GetURL("/echoall/nocache"));
+  {
+    std::unique_ptr<URLLoaderInterceptor> interceptor =
+        URLLoaderInterceptor::SetupRequestFailForURL(
+            target_url, net::ERR_INTERNET_DISCONNECTED);
+    TestNavigationObserver form_post_observer(web_contents, 1);
+    EXPECT_TRUE(ExecuteScript(web_contents,
+                              "document.getElementById('form').submit();"));
+    form_post_observer.Wait();
+  }
+  EXPECT_EQ(target_url, web_contents->GetLastCommittedURL());
+  EXPECT_EQ(1, web_contents->GetController().GetLastCommittedEntryIndex());
+
+  // Reload
+  {
+    TestNavigationObserver observer(web_contents);
+    web_contents->GetController().Reload(content::ReloadType::NORMAL,
+                                         false);  // check_for_repost
+    observer.Wait();
+  }
+  EXPECT_EQ(target_url, web_contents->GetLastCommittedURL());
+  EXPECT_EQ(1, web_contents->GetController().GetLastCommittedEntryIndex());
+
+  // Verify that the reload was a POST request.
+  std::string request_headers;
+  EXPECT_TRUE(ExecuteScriptAndExtractString(
+      web_contents,
+      "window.domAutomationController.send("
+      "document.getElementsByTagName('pre')[1].innerText);",
+      &request_headers));
+  EXPECT_THAT(request_headers, ::testing::HasSubstr("POST /echoall/nocache"));
+
+  // Verify that POST body was correctly passed to the server and ended up in
+  // the body of the page.
+  std::string body;
+  EXPECT_TRUE(ExecuteScriptAndExtractString(
+      web_contents,
+      "window.domAutomationController.send("
+      "document.getElementsByTagName('pre')[0].innerText);",
+      &body));
+  EXPECT_EQ("text=value\n", body);
+}
+
 // Tests that inserting a named subframe into the FrameTree clears any
 // previously existing FrameNavigationEntry objects for the same name.
 // See https://crbug.com/628677.
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
index d4968606..c94c427 100644
--- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -181,17 +181,8 @@
 
   std::unique_ptr<content::URLLoaderInterceptor> SetupRequestFailForURL(
       const GURL& url) {
-    return std::make_unique<content::URLLoaderInterceptor>(base::BindRepeating(
-        [](const GURL& url,
-           content::URLLoaderInterceptor::RequestParams* params) {
-          if (params->url_request.url != url)
-            return false;
-          network::URLLoaderCompletionStatus status;
-          status.error_code = net::ERR_DNS_TIMED_OUT;
-          params->client->OnComplete(status);
-          return true;
-        },
-        url));
+    return URLLoaderInterceptor::SetupRequestFailForURL(url,
+                                                        net::ERR_DNS_TIMED_OUT);
   }
 
   // Returns a URL on foo.com with the given path.
diff --git a/content/browser/renderer_host/input/fling_controller_unittest.cc b/content/browser/renderer_host/input/fling_controller_unittest.cc
index 50163e39..40a9631 100644
--- a/content/browser/renderer_host/input/fling_controller_unittest.cc
+++ b/content/browser/renderer_host/input/fling_controller_unittest.cc
@@ -282,8 +282,7 @@
   EXPECT_EQ(WebInputEvent::kGestureScrollEnd, last_sent_gesture_.GetType());
 }
 
-// TDOO(http://crbug.com/875777): We should do use better comparison method for
-// floating point numbers.
+// TODO(https://crbug.com/836996): Timing-dependent flakes on some platforms.
 TEST_F(FlingControllerTest,
        DISABLED_EarlyTouchpadFlingCancelationOnInertialGSUAckNotConsumed) {
   base::TimeTicks progress_time = base::TimeTicks::Now();
@@ -319,8 +318,9 @@
   EXPECT_EQ(0.f, last_sent_wheel_.delta_y);
 }
 
+// TODO(https://crbug.com/836996): Timing-dependent flakes on some platforms.
 TEST_F(FlingControllerTest,
-       EarlyTouchscreenFlingCancelationOnInertialGSUAckNotConsumed) {
+       DISABLED_EarlyTouchscreenFlingCancelationOnInertialGSUAckNotConsumed) {
   base::TimeTicks progress_time = base::TimeTicks::Now();
   SimulateFlingStart(blink::kWebGestureDeviceTouchscreen,
                      gfx::Vector2dF(1000, 0));
diff --git a/content/browser/site_per_process_hit_test_browsertest.cc b/content/browser/site_per_process_hit_test_browsertest.cc
index 7e4cb96..6dfc0d46 100644
--- a/content/browser/site_per_process_hit_test_browsertest.cc
+++ b/content/browser/site_per_process_hit_test_browsertest.cc
@@ -1247,6 +1247,17 @@
         [](blink::WebInputEvent::Type expected_type,
            const gfx::Point& expected_position, content::InputEventAckSource,
            content::InputEventAckState, const blink::WebInputEvent& event) {
+#if defined(OS_WIN)
+          // Add some logging to diagnose a potential source of flake:
+          // the hypothesis is that something is causing the gesture
+          // stream to cancel before kGestureShowPress is generated, so
+          // we'll dump the event stream that we actually see in this case.
+          // https://crbug.com/833380.
+          if (expected_type == blink::WebInputEvent::kGestureShowPress) {
+            LOG(ERROR) << "Waiting for: kGestureShowPress: ack seen for "
+                       << blink::WebInputEvent::GetName(event.GetType());
+          }
+#endif
           if (event.GetType() != expected_type)
             return false;
 
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc
index 47a4124b..6222b229 100644
--- a/content/browser/webauth/authenticator_impl_unittest.cc
+++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -1864,8 +1864,8 @@
       std::move(mock_delegate), task_runner);
   AddTransport(device::FidoTransportProtocol::kBluetoothLowEnergy);
 
-  auto mock_ble_device =
-      device::MockFidoDevice::MakeCtapWithGetInfoExpectation();
+  auto mock_ble_device = device::MockFidoDevice::MakeCtap();
+  mock_ble_device->StubGetId();
   mock_ble_device->SetDeviceTransport(
       device::FidoTransportProtocol::kBluetoothLowEnergy);
   const auto device_id = mock_ble_device->GetId();
diff --git a/content/public/test/content_cert_verifier_browser_test.cc b/content/public/test/content_cert_verifier_browser_test.cc
new file mode 100644
index 0000000..be60ffe4
--- /dev/null
+++ b/content/public/test/content_cert_verifier_browser_test.cc
@@ -0,0 +1,32 @@
+// 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/public/test/content_cert_verifier_browser_test.h"
+
+#include "content/shell/browser/shell_url_request_context_getter.h"
+
+namespace content {
+
+CertVerifierBrowserTest::CertVerifierBrowserTest() = default;
+
+CertVerifierBrowserTest::~CertVerifierBrowserTest() = default;
+
+void CertVerifierBrowserTest::SetUpCommandLine(
+    base::CommandLine* command_line) {
+  mock_cert_verifier_.SetUpCommandLine(command_line);
+}
+
+void CertVerifierBrowserTest::SetUpInProcessBrowserTestFixture() {
+  ShellURLRequestContextGetter::SetCertVerifierForTesting(
+      mock_cert_verifier_.mock_cert_verifier_internal());
+
+  mock_cert_verifier_.SetUpInProcessBrowserTestFixture();
+}
+
+void CertVerifierBrowserTest::TearDownInProcessBrowserTestFixture() {
+  ShellURLRequestContextGetter::SetCertVerifierForTesting(nullptr);
+  mock_cert_verifier_.TearDownInProcessBrowserTestFixture();
+}
+
+}  // namespace content
diff --git a/content/public/test/content_cert_verifier_browser_test.h b/content/public/test/content_cert_verifier_browser_test.h
new file mode 100644
index 0000000..844a4fe8
--- /dev/null
+++ b/content/public/test/content_cert_verifier_browser_test.h
@@ -0,0 +1,39 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_TEST_CONTENT_CERT_VERIFIER_BROWSER_TEST_H_
+#define CONTENT_PUBLIC_TEST_CONTENT_CERT_VERIFIER_BROWSER_TEST_H_
+
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_mock_cert_verifier.h"
+
+namespace content {
+
+// CertVerifierBrowserTest allows tests to force certificate verification
+// results for requests made with any profile's main request context (such as
+// navigations). To do so, tests can use the MockCertVerifier exposed via
+// CertVerifierBrowserTest::mock_cert_verifier().
+class CertVerifierBrowserTest : public ContentBrowserTest {
+ public:
+  CertVerifierBrowserTest();
+  ~CertVerifierBrowserTest() override;
+
+  // InProcessBrowserTest:
+  void SetUpCommandLine(base::CommandLine* command_line) override;
+  void SetUpInProcessBrowserTestFixture() override;
+  void TearDownInProcessBrowserTestFixture() override;
+
+  ContentMockCertVerifier::CertVerifier* mock_cert_verifier() {
+    return mock_cert_verifier_.mock_cert_verifier();
+  }
+
+ private:
+  ContentMockCertVerifier mock_cert_verifier_;
+
+  DISALLOW_COPY_AND_ASSIGN(CertVerifierBrowserTest);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_PUBLIC_TEST_CONTENT_CERT_VERIFIER_BROWSER_TEST_H_
diff --git a/content/public/test/content_mock_cert_verifier.cc b/content/public/test/content_mock_cert_verifier.cc
new file mode 100644
index 0000000..6bede2b
--- /dev/null
+++ b/content/public/test/content_mock_cert_verifier.cc
@@ -0,0 +1,113 @@
+// 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/public/test/content_mock_cert_verifier.h"
+
+#include "base/command_line.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/common/service_manager_connection.h"
+#include "content/public/common/service_names.mojom.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/network_service_test_helper.h"
+#include "mojo/public/cpp/bindings/sync_call_restrictions.h"
+#include "services/network/network_context.h"
+#include "services/network/public/cpp/features.h"
+#include "services/service_manager/public/cpp/connector.h"
+
+namespace content {
+
+ContentMockCertVerifier::CertVerifier::CertVerifier(
+    net::MockCertVerifier* verifier)
+    : verifier_(verifier) {}
+
+ContentMockCertVerifier::CertVerifier::~CertVerifier() = default;
+
+void ContentMockCertVerifier::CertVerifier::set_default_result(
+    int default_result) {
+  verifier_->set_default_result(default_result);
+
+  if (!base::FeatureList::IsEnabled(network::features::kNetworkService) ||
+      IsNetworkServiceRunningInProcess()) {
+    return;
+  }
+
+  EnsureNetworkServiceTestInitialized();
+  mojo::ScopedAllowSyncCallForTesting allow_sync_call;
+  network_service_test_->MockCertVerifierSetDefaultResult(default_result);
+}
+
+void ContentMockCertVerifier::CertVerifier::AddResultForCert(
+    scoped_refptr<net::X509Certificate> cert,
+    const net::CertVerifyResult& verify_result,
+    int rv) {
+  AddResultForCertAndHost(cert, "*", verify_result, rv);
+}
+
+void ContentMockCertVerifier::CertVerifier::AddResultForCertAndHost(
+    scoped_refptr<net::X509Certificate> cert,
+    const std::string& host_pattern,
+    const net::CertVerifyResult& verify_result,
+    int rv) {
+  verifier_->AddResultForCertAndHost(cert, host_pattern, verify_result, rv);
+
+  if (!base::FeatureList::IsEnabled(network::features::kNetworkService) ||
+      IsNetworkServiceRunningInProcess()) {
+    return;
+  }
+
+  EnsureNetworkServiceTestInitialized();
+  mojo::ScopedAllowSyncCallForTesting allow_sync_call;
+  network_service_test_->MockCertVerifierAddResultForCertAndHost(
+      cert, host_pattern, verify_result, rv);
+}
+
+void ContentMockCertVerifier::CertVerifier::
+    EnsureNetworkServiceTestInitialized() {
+  if (network_service_test_)
+    return;
+
+  ServiceManagerConnection::GetForProcess()->GetConnector()->BindInterface(
+      mojom::kNetworkServiceName, &network_service_test_);
+}
+
+ContentMockCertVerifier::ContentMockCertVerifier()
+    : mock_cert_verifier_(new net::MockCertVerifier()),
+      cert_verifier_(mock_cert_verifier_.get()) {}
+
+ContentMockCertVerifier::~ContentMockCertVerifier() {}
+
+void ContentMockCertVerifier::SetUpCommandLine(
+    base::CommandLine* command_line) {
+  // Check here instead of the constructor since some tests may set the feature
+  // flag in their constructor.
+  if (!base::FeatureList::IsEnabled(network::features::kNetworkService) ||
+      IsNetworkServiceRunningInProcess()) {
+    return;
+  }
+
+  // Enable the MockCertVerifier in the network process via a switch. This is
+  // because it's too early to call the service manager at this point (it's not
+  // created yet), and by the time we can call the service manager in
+  // SetUpOnMainThread the main profile has already been created.
+  command_line->AppendSwitch(switches::kUseMockCertVerifierForTesting);
+}
+
+void ContentMockCertVerifier::SetUpInProcessBrowserTestFixture() {
+  if (IsNetworkServiceRunningInProcess()) {
+    network::NetworkContext::SetCertVerifierForTesting(
+        mock_cert_verifier_.get());
+  }
+}
+
+void ContentMockCertVerifier::TearDownInProcessBrowserTestFixture() {
+  if (IsNetworkServiceRunningInProcess())
+    network::NetworkContext::SetCertVerifierForTesting(nullptr);
+}
+
+ContentMockCertVerifier::CertVerifier*
+ContentMockCertVerifier::mock_cert_verifier() {
+  return &cert_verifier_;
+}
+
+}  // namespace content
diff --git a/content/public/test/content_mock_cert_verifier.h b/content/public/test/content_mock_cert_verifier.h
new file mode 100644
index 0000000..fd6a14a
--- /dev/null
+++ b/content/public/test/content_mock_cert_verifier.h
@@ -0,0 +1,87 @@
+// 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_PUBLIC_TEST_CONTENT_MOCK_CERT_VERIFIER_H_
+#define CONTENT_PUBLIC_TEST_CONTENT_MOCK_CERT_VERIFIER_H_
+
+#include <memory>
+
+#include "net/cert/mock_cert_verifier.h"
+#include "services/network/public/mojom/network_service_test.mojom.h"
+
+namespace base {
+class CommandLine;
+}
+
+namespace net {
+class MockCertVerifier;
+}
+
+namespace content {
+
+// ContentMockCertVerifier allows tests to force certificate verification
+// results for requests made with any BrowserContext's main request context
+// (such as navigations). To do so, tests can use the MockCertVerifier exposed
+// via ContentMockCertVerifier::mock_cert_verifier(). This class ensures the
+// mocking works correctly regardless of whether the network service is enabled
+// or disabled, or running in-process.
+class ContentMockCertVerifier {
+ public:
+  ContentMockCertVerifier();
+  virtual ~ContentMockCertVerifier();
+
+  // Be sure to call these method from the relevant BrowserTestBase methods.
+  virtual void SetUpCommandLine(base::CommandLine* command_line);
+  virtual void SetUpInProcessBrowserTestFixture();
+  virtual void TearDownInProcessBrowserTestFixture();
+
+  // Has the same methods as net::MockCertVerifier and updates the network
+  // service as well if it's in use. See the documentation of the net class
+  // for documentation on the methods.
+  // Once all requests use the NetworkContext, even when network service is not
+  // enabled, we can stop also updating net::MockCertVerifier here and always
+  // go through the NetworkServiceTest mojo interface.
+  class CertVerifier {
+   public:
+    explicit CertVerifier(net::MockCertVerifier* verifier);
+    ~CertVerifier();
+    void set_default_result(int default_result);
+    void AddResultForCert(scoped_refptr<net::X509Certificate> cert,
+                          const net::CertVerifyResult& verify_result,
+                          int rv);
+    void AddResultForCertAndHost(scoped_refptr<net::X509Certificate> cert,
+                                 const std::string& host_pattern,
+                                 const net::CertVerifyResult& verify_result,
+                                 int rv);
+
+   private:
+    void EnsureNetworkServiceTestInitialized();
+
+    net::MockCertVerifier* verifier_;
+    network::mojom::NetworkServiceTestPtr network_service_test_;
+
+    DISALLOW_COPY_AND_ASSIGN(CertVerifier);
+  };
+
+  // Returns a pointer to the MockCertVerifier used by all profiles in
+  // this test. This is what test code should use to mock certificate
+  // verification.
+  CertVerifier* mock_cert_verifier();
+
+  // An internal getter to be used by test harness that wraps this class.
+  net::MockCertVerifier* mock_cert_verifier_internal() {
+    return mock_cert_verifier_.get();
+  }
+
+ private:
+  std::unique_ptr<net::MockCertVerifier> mock_cert_verifier_;
+
+  CertVerifier cert_verifier_;
+
+  DISALLOW_COPY_AND_ASSIGN(ContentMockCertVerifier);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_PUBLIC_TEST_CONTENT_MOCK_CERT_VERIFIER_H_
diff --git a/content/public/test/url_loader_interceptor.cc b/content/public/test/url_loader_interceptor.cc
index 6b14511..f04f7f6 100644
--- a/content/public/test/url_loader_interceptor.cc
+++ b/content/public/test/url_loader_interceptor.cc
@@ -4,6 +4,9 @@
 
 #include "content/public/test/url_loader_interceptor.h"
 
+#include <string>
+#include <utility>
+
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/path_service.h"
@@ -472,4 +475,19 @@
   std::move(closure).Run();
 }
 
+// static
+std::unique_ptr<content::URLLoaderInterceptor>
+URLLoaderInterceptor::SetupRequestFailForURL(const GURL& url,
+                                             net::Error error) {
+  return std::make_unique<content::URLLoaderInterceptor>(base::BindRepeating(
+      [](const GURL& url, net::Error error,
+         content::URLLoaderInterceptor::RequestParams* params) {
+        if (params->url_request.url != url)
+          return false;
+        params->client->OnComplete(network::URLLoaderCompletionStatus(error));
+        return true;
+      },
+      url, error));
+}
+
 }  // namespace content
diff --git a/content/public/test/url_loader_interceptor.h b/content/public/test/url_loader_interceptor.h
index 68294ddb..1b8d00a 100644
--- a/content/public/test/url_loader_interceptor.h
+++ b/content/public/test/url_loader_interceptor.h
@@ -2,14 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_PUBLIC_BROWSER_URL_LOADER_INTERCEPTOR_H_
-#define CONTENT_PUBLIC_BROWSER_URL_LOADER_INTERCEPTOR_H_
+#ifndef CONTENT_PUBLIC_TEST_URL_LOADER_INTERCEPTOR_H_
+#define CONTENT_PUBLIC_TEST_URL_LOADER_INTERCEPTOR_H_
 
+#include <memory>
 #include <set>
+#include <string>
 
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
+#include "net/base/net_errors.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
 #include "services/network/public/mojom/url_loader_factory.mojom.h"
 
@@ -102,6 +105,12 @@
       const std::string* headers = nullptr,
       base::Optional<net::SSLInfo> ssl_info = base::nullopt);
 
+  // Returns an interceptor that (as long as it says alive) will intercept
+  // requests to |url| and fail them using the provided |error|.
+  static std::unique_ptr<URLLoaderInterceptor> SetupRequestFailForURL(
+      const GURL& url,
+      net::Error error);
+
  private:
   class BrowserProcessWrapper;
   class Interceptor;
@@ -169,4 +178,4 @@
 
 }  // namespace content
 
-#endif  // CONTENT_PUBLIC_BROWSER_URL_LOADER_INTERCEPTOR_H_
+#endif  // CONTENT_PUBLIC_TEST_URL_LOADER_INTERCEPTOR_H_
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc
index 05fbd8d..31ec8b961 100644
--- a/content/renderer/accessibility/render_accessibility_impl.cc
+++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -33,6 +33,7 @@
 #include "ui/accessibility/ax_node.h"
 #include "ui/accessibility/ax_role_properties.h"
 
+using blink::WebAXContext;
 using blink::WebAXObject;
 using blink::WebDocument;
 using blink::WebElement;
@@ -41,7 +42,6 @@
 using blink::WebNode;
 using blink::WebPoint;
 using blink::WebRect;
-using blink::WebScopedAXContext;
 using blink::WebSettings;
 using blink::WebView;
 
@@ -72,7 +72,7 @@
     return;
 
   WebDocument document = render_frame->GetWebFrame()->GetDocument();
-  WebScopedAXContext context(document);
+  WebAXContext context(document);
   WebAXObject root = context.Root();
   if (!root.UpdateLayoutAndCheckValidity())
     return;
@@ -112,7 +112,6 @@
   ack_token_ = g_next_ack_token++;
   WebView* web_view = render_frame_->GetRenderView()->GetWebView();
   WebSettings* settings = web_view->GetSettings();
-  settings->SetAccessibilityEnabled(true);
 
 #if defined(OS_ANDROID)
   // Password values are only passed through on Android.
@@ -128,6 +127,8 @@
 
   const WebDocument& document = GetMainDocument();
   if (!document.IsNull()) {
+    ax_context_.reset(new blink::WebAXContext(document));
+
     // It's possible that the webview has already loaded a webpage without
     // accessibility being enabled. Initialize the browser's cached
     // accessibility tree by sending it a notification.
@@ -139,6 +140,10 @@
 RenderAccessibilityImpl::~RenderAccessibilityImpl() {
 }
 
+void RenderAccessibilityImpl::DidCreateNewDocument() {
+  ax_context_.reset(new blink::WebAXContext(GetMainDocument()));
+}
+
 void RenderAccessibilityImpl::AccessibilityModeChanged() {
   ui::AXMode new_mode = render_frame_->accessibility_mode();
   if (tree_source_.accessibility_mode() == new_mode)
@@ -231,22 +236,6 @@
   }
 }
 
-void RenderAccessibilityImpl::DisableAccessibility() {
-  RenderView* render_view = render_frame_->GetRenderView();
-  if (!render_view)
-    return;
-
-  WebView* web_view = render_view->GetWebView();
-  if (!web_view)
-    return;
-
-  WebSettings* settings = web_view->GetSettings();
-  if (!settings)
-    return;
-
-  settings->SetAccessibilityEnabled(false);
-}
-
 void RenderAccessibilityImpl::HandleAXEvent(const blink::WebAXObject& obj,
                                             ax::mojom::Event event,
                                             int action_request_id) {
diff --git a/content/renderer/accessibility/render_accessibility_impl.h b/content/renderer/accessibility/render_accessibility_impl.h
index f2c5d3fb..240a0ff6 100644
--- a/content/renderer/accessibility/render_accessibility_impl.h
+++ b/content/renderer/accessibility/render_accessibility_impl.h
@@ -14,6 +14,7 @@
 #include "content/public/renderer/render_accessibility.h"
 #include "content/public/renderer/render_frame_observer.h"
 #include "content/renderer/accessibility/blink_ax_tree_source.h"
+#include "third_party/blink/public/web/web_ax_context.h"
 #include "third_party/blink/public/web/web_ax_object.h"
 #include "ui/accessibility/ax_relative_bounds.h"
 #include "ui/accessibility/ax_tree.h"
@@ -73,6 +74,7 @@
   void OnPluginRootNodeUpdated() override;
 
   // RenderFrameObserver implementation.
+  void DidCreateNewDocument() override;
   void AccessibilityModeChanged() override;
   bool OnMessageReceived(const IPC::Message& message) override;
 
@@ -91,11 +93,6 @@
 
   void AccessibilityFocusedNodeChanged(const blink::WebNode& node);
 
-  // This can be called before deleting a RenderAccessibilityImpl instance due
-  // to the accessibility mode changing, as opposed to during frame destruction
-  // (when there'd be no point).
-  void DisableAccessibility();
-
   void HandleAXEvent(const blink::WebAXObject& obj,
                      ax::mojom::Event event,
                      int action_request_id = -1);
@@ -139,6 +136,9 @@
   // The RenderFrameImpl that owns us.
   RenderFrameImpl* render_frame_;
 
+  // This keeps accessibility enabled as long as it lives.
+  std::unique_ptr<blink::WebAXContext> ax_context_;
+
   // Events from Blink are collected until they are ready to be
   // sent to the browser.
   std::vector<ui::AXEvent> pending_events_;
diff --git a/content/renderer/dom_serializer_browsertest.cc b/content/renderer/dom_serializer_browsertest.cc
index 41936c3..fd707741 100644
--- a/content/renderer/dom_serializer_browsertest.cc
+++ b/content/renderer/dom_serializer_browsertest.cc
@@ -142,7 +142,9 @@
           data, "text/html", encoding_info, base_url, WebURL(),
           false /* replace */, blink::WebFrameLoadType::kStandard,
           blink::WebHistoryItem(), false /* is_client_redirect */,
-          nullptr /* navigation_data */, blink::WebNavigationTimings());
+          nullptr /* navigation_data */,
+          nullptr /* original_request_to_replace */,
+          blink::WebNavigationTimings());
     }
     base::MessageLoopCurrent::ScopedNestableTaskAllower allow;
     waiter.Wait();
diff --git a/content/renderer/fileapi/file_system_dispatcher.cc b/content/renderer/fileapi/file_system_dispatcher.cc
index 0e6f8504..2e623b6 100644
--- a/content/renderer/fileapi/file_system_dispatcher.cc
+++ b/content/renderer/fileapi/file_system_dispatcher.cc
@@ -11,10 +11,12 @@
 #include "base/files/file_util.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
+#include "base/no_destructor.h"
 #include "base/process/process.h"
 #include "components/services/filesystem/public/interfaces/types.mojom.h"
 #include "content/child/child_thread_impl.h"
 #include "content/public/common/service_names.mojom.h"
+#include "content/public/renderer/worker_thread.h"
 #include "services/service_manager/public/cpp/connector.h"
 #include "storage/common/fileapi/file_system_info.h"
 #include "storage/common/fileapi/file_system_type_converters.h"
@@ -155,7 +157,9 @@
   FileSystemDispatcher* const dispatcher_;
 };
 
-FileSystemDispatcher::FileSystemDispatcher() {}
+FileSystemDispatcher::FileSystemDispatcher(
+    scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner)
+    : main_thread_task_runner_(std::move(main_thread_task_runner)) {}
 
 FileSystemDispatcher::~FileSystemDispatcher() {
   // Make sure we fire all the remaining callbacks.
@@ -171,13 +175,22 @@
 }
 
 blink::mojom::FileSystemManager& FileSystemDispatcher::GetFileSystemManager() {
+  auto BindInterfaceOnMainThread =
+      [](blink::mojom::FileSystemManagerRequest request) {
+        DCHECK(ChildThreadImpl::current());
+        ChildThreadImpl::current()->GetConnector()->BindInterface(
+            mojom::kBrowserServiceName, std::move(request));
+      };
   if (!file_system_manager_ptr_) {
-    ChildThreadImpl::current()->GetConnector()->BindInterface(
-        mojom::kBrowserServiceName,
-        mojo::MakeRequest(&file_system_manager_ptr_));
-    file_system_manager_ptr_.set_connection_error_handler(
-        base::BindOnce(&FileSystemDispatcher::OnConnectionErrorHandler,
-                       base::Unretained(this)));
+    if (WorkerThread::GetCurrentId()) {
+      blink::mojom::FileSystemManagerRequest request =
+          mojo::MakeRequest(&file_system_manager_ptr_);
+      main_thread_task_runner_->PostTask(
+          FROM_HERE,
+          base::BindOnce(BindInterfaceOnMainThread, std::move(request)));
+    } else {
+      BindInterfaceOnMainThread(mojo::MakeRequest(&file_system_manager_ptr_));
+    }
   }
   return *file_system_manager_ptr_;
 }
@@ -195,6 +208,22 @@
                      base::Unretained(this), request_id));
 }
 
+void FileSystemDispatcher::OpenFileSystemSync(
+    const GURL& origin_url,
+    storage::FileSystemType type,
+    const OpenFileSystemCallback& success_callback,
+    const StatusCallback& error_callback) {
+  int request_id = dispatchers_.Add(
+      CallbackDispatcher::Create(success_callback, error_callback));
+  std::string name;
+  GURL root_url;
+  base::File::Error error_code;
+  GetFileSystemManager().Open(
+      origin_url, mojo::ConvertTo<blink::mojom::FileSystemType>(type), &name,
+      &root_url, &error_code);
+  DidOpenFileSystem(request_id, std::move(name), root_url, error_code);
+}
+
 void FileSystemDispatcher::ResolveURL(
     const GURL& filesystem_url,
     const ResolveURLCallback& success_callback,
@@ -206,6 +235,22 @@
                                      base::Unretained(this), request_id));
 }
 
+void FileSystemDispatcher::ResolveURLSync(
+    const GURL& filesystem_url,
+    const ResolveURLCallback& success_callback,
+    const StatusCallback& error_callback) {
+  int request_id = dispatchers_.Add(
+      CallbackDispatcher::Create(success_callback, error_callback));
+  blink::mojom::FileSystemInfoPtr info;
+  base::FilePath file_path;
+  bool is_directory;
+  base::File::Error error_code;
+  GetFileSystemManager().ResolveURL(filesystem_url, &info, &file_path,
+                                    &is_directory, &error_code);
+  DidResolveURL(request_id, std::move(info), std::move(file_path), is_directory,
+                error_code);
+}
+
 void FileSystemDispatcher::Move(const GURL& src_path,
                                 const GURL& dest_path,
                                 const StatusCallback& callback) {
@@ -216,6 +261,15 @@
                      request_id));
 }
 
+void FileSystemDispatcher::MoveSync(const GURL& src_path,
+                                    const GURL& dest_path,
+                                    const StatusCallback& callback) {
+  int request_id = dispatchers_.Add(CallbackDispatcher::Create(callback));
+  base::File::Error error_code;
+  GetFileSystemManager().Move(src_path, dest_path, &error_code);
+  DidFinish(request_id, error_code);
+}
+
 void FileSystemDispatcher::Copy(const GURL& src_path,
                                 const GURL& dest_path,
                                 const StatusCallback& callback) {
@@ -226,6 +280,15 @@
                      request_id));
 }
 
+void FileSystemDispatcher::CopySync(const GURL& src_path,
+                                    const GURL& dest_path,
+                                    const StatusCallback& callback) {
+  int request_id = dispatchers_.Add(CallbackDispatcher::Create(callback));
+  base::File::Error error_code;
+  GetFileSystemManager().Copy(src_path, dest_path, &error_code);
+  DidFinish(request_id, error_code);
+}
+
 void FileSystemDispatcher::Remove(const GURL& path,
                                   bool recursive,
                                   const StatusCallback& callback) {
@@ -236,6 +299,15 @@
                      request_id));
 }
 
+void FileSystemDispatcher::RemoveSync(const GURL& path,
+                                      bool recursive,
+                                      const StatusCallback& callback) {
+  int request_id = dispatchers_.Add(CallbackDispatcher::Create(callback));
+  base::File::Error error_code;
+  GetFileSystemManager().Remove(path, recursive, &error_code);
+  DidFinish(request_id, error_code);
+}
+
 void FileSystemDispatcher::ReadMetadata(
     const GURL& path,
     const MetadataCallback& success_callback,
@@ -247,6 +319,18 @@
                            base::Unretained(this), request_id));
 }
 
+void FileSystemDispatcher::ReadMetadataSync(
+    const GURL& path,
+    const MetadataCallback& success_callback,
+    const StatusCallback& error_callback) {
+  int request_id = dispatchers_.Add(
+      CallbackDispatcher::Create(success_callback, error_callback));
+  base::File::Info file_info;
+  base::File::Error error_code;
+  GetFileSystemManager().ReadMetadata(path, &file_info, &error_code);
+  DidReadMetadata(request_id, std::move(file_info), error_code);
+}
+
 void FileSystemDispatcher::CreateFile(const GURL& path,
                                       bool exclusive,
                                       const StatusCallback& callback) {
@@ -257,6 +341,16 @@
                      request_id));
 }
 
+void FileSystemDispatcher::CreateFileSync(const GURL& path,
+                                          bool exclusive,
+                                          const StatusCallback& callback) {
+  int request_id = dispatchers_.Add(CallbackDispatcher::Create(callback));
+  base::File::Error error_code;
+  GetFileSystemManager().Create(path, exclusive, /*is_directory=*/false,
+                                /*is_recursive=*/false, &error_code);
+  DidFinish(request_id, error_code);
+}
+
 void FileSystemDispatcher::CreateDirectory(const GURL& path,
                                            bool exclusive,
                                            bool recursive,
@@ -268,6 +362,16 @@
                      request_id));
 }
 
+void FileSystemDispatcher::CreateDirectorySync(const GURL& path,
+                                               bool exclusive,
+                                               bool recursive,
+                                               const StatusCallback& callback) {
+  int request_id = dispatchers_.Add(CallbackDispatcher::Create(callback));
+  base::File::Error error_code;
+  GetFileSystemManager().Create(path, exclusive, true, recursive, &error_code);
+  DidFinish(request_id, error_code);
+}
+
 void FileSystemDispatcher::Exists(const GURL& path,
                                   bool is_directory,
                                   const StatusCallback& callback) {
@@ -278,6 +382,15 @@
                      request_id));
 }
 
+void FileSystemDispatcher::ExistsSync(const GURL& path,
+                                      bool is_directory,
+                                      const StatusCallback& callback) {
+  int request_id = dispatchers_.Add(CallbackDispatcher::Create(callback));
+  base::File::Error error_code;
+  GetFileSystemManager().Exists(path, is_directory, &error_code);
+  DidFinish(request_id, error_code);
+}
+
 void FileSystemDispatcher::ReadDirectory(
     const GURL& path,
     const ReadDirectoryCallback& success_callback,
@@ -293,6 +406,21 @@
   GetFileSystemManager().ReadDirectory(path, std::move(ptr));
 }
 
+void FileSystemDispatcher::ReadDirectorySync(
+    const GURL& path,
+    const ReadDirectoryCallback& success_callback,
+    const StatusCallback& error_callback) {
+  int request_id = dispatchers_.Add(
+      CallbackDispatcher::Create(success_callback, error_callback));
+  std::vector<filesystem::mojom::DirectoryEntryPtr> entries;
+  base::File::Error result;
+  GetFileSystemManager().ReadDirectorySync(path, &entries, &result);
+  if (result == base::File::FILE_OK)
+    DidReadDirectory(request_id, std::move(entries), /*has_more=*/false);
+  else
+    DidFail(request_id, result);
+}
+
 void FileSystemDispatcher::Truncate(const GURL& path,
                                     int64_t offset,
                                     int* request_id_out,
@@ -314,6 +442,14 @@
     *request_id_out = request_id;
 }
 
+void FileSystemDispatcher::TruncateSync(const GURL& path,
+                                        int64_t offset,
+                                        const StatusCallback& callback) {
+  base::File::Error error_code;
+  GetFileSystemManager().TruncateSync(path, offset, &error_code);
+  std::move(callback).Run(error_code);
+}
+
 void FileSystemDispatcher::Write(const GURL& path,
                                  const std::string& blob_id,
                                  int64_t offset,
@@ -345,6 +481,21 @@
     *request_id_out = request_id;
 }
 
+void FileSystemDispatcher::WriteSync(const GURL& path,
+                                     const std::string& blob_id,
+                                     int64_t offset,
+                                     const WriteCallback& success_callback,
+                                     const StatusCallback& error_callback) {
+  int64_t byte_count;
+  base::File::Error error_code;
+  GetFileSystemManager().WriteSync(path, blob_id, offset, &byte_count,
+                                   &error_code);
+  if (error_code == base::File::FILE_OK)
+    std::move(success_callback).Run(byte_count, /*complete=*/true);
+  else
+    std::move(error_callback).Run(error_code);
+}
+
 void FileSystemDispatcher::Cancel(int request_id_to_cancel,
                                   const StatusCallback& callback) {
   int request_id = dispatchers_.Add(CallbackDispatcher::Create(callback));
@@ -380,6 +531,23 @@
                                 base::Unretained(this), request_id));
 }
 
+void FileSystemDispatcher::CreateSnapshotFileSync(
+    const GURL& file_path,
+    const CreateSnapshotFileCallback& success_callback,
+    const StatusCallback& error_callback) {
+  int request_id = dispatchers_.Add(
+      CallbackDispatcher::Create(success_callback, error_callback));
+  base::File::Info file_info;
+  base::FilePath platform_path;
+  base::File::Error error_code;
+  blink::mojom::ReceivedSnapshotListenerPtr listener;
+  GetFileSystemManager().CreateSnapshotFile(
+      file_path, &file_info, &platform_path, &error_code, &listener);
+  DidCreateSnapshotFile(request_id, std::move(file_info),
+                        std::move(platform_path), error_code,
+                        std::move(listener));
+}
+
 void FileSystemDispatcher::DidOpenFileSystem(int request_id,
                                              const std::string& name,
                                              const GURL& root,
@@ -508,10 +676,6 @@
   DidFinish(request_id, error_code);
 }
 
-void FileSystemDispatcher::OnConnectionErrorHandler() {
-  file_system_manager_ptr_.reset();
-}
-
 void FileSystemDispatcher::FileSystemOperationListenerImpl::ResultsRetrieved(
     std::vector<filesystem::mojom::DirectoryEntryPtr> entries,
     bool has_more) {
diff --git a/content/renderer/fileapi/file_system_dispatcher.h b/content/renderer/fileapi/file_system_dispatcher.h
index c913ad15..d6f1ec5 100644
--- a/content/renderer/fileapi/file_system_dispatcher.h
+++ b/content/renderer/fileapi/file_system_dispatcher.h
@@ -37,8 +37,8 @@
 class FileSystemOperationListenerImpl;
 
 // Dispatches and sends file system related messages sent to/from a child
-// process from/to the main browser process.  There is one instance
-// per child process.
+// process from/to the main browser process. There is an instance held by
+// each WebFileSystemImpl and WebFileWriterImpl object.
 class FileSystemDispatcher {
  public:
   typedef base::Callback<void(base::File::Error error)> StatusCallback;
@@ -68,57 +68,115 @@
                               storage::QuotaLimitType quota_policy)>
       OpenFileCallback;
 
-  FileSystemDispatcher();
+  explicit FileSystemDispatcher(
+      scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner);
   ~FileSystemDispatcher();
 
   void OpenFileSystem(const GURL& origin_url,
                       storage::FileSystemType type,
                       const OpenFileSystemCallback& success_callback,
                       const StatusCallback& error_callback);
+  void OpenFileSystemSync(const GURL& origin_url,
+                          storage::FileSystemType type,
+                          const OpenFileSystemCallback& success_callback,
+                          const StatusCallback& error_callback);
+
   void ResolveURL(const GURL& filesystem_url,
                   const ResolveURLCallback& success_callback,
                   const StatusCallback& error_callback);
+  void ResolveURLSync(const GURL& filesystem_url,
+                      const ResolveURLCallback& success_callback,
+                      const StatusCallback& error_callback);
+
   void Move(const GURL& src_path,
             const GURL& dest_path,
             const StatusCallback& callback);
+  void MoveSync(const GURL& src_path,
+                const GURL& dest_path,
+                const StatusCallback& callback);
+
   void Copy(const GURL& src_path,
             const GURL& dest_path,
             const StatusCallback& callback);
+  void CopySync(const GURL& src_path,
+                const GURL& dest_path,
+                const StatusCallback& callback);
+
   void Remove(const GURL& path, bool recursive, const StatusCallback& callback);
+  void RemoveSync(const GURL& path,
+                  bool recursive,
+                  const StatusCallback& callback);
+
   void ReadMetadata(const GURL& path,
                     const MetadataCallback& success_callback,
                     const StatusCallback& error_callback);
+  void ReadMetadataSync(const GURL& path,
+                        const MetadataCallback& success_callback,
+                        const StatusCallback& error_callback);
+
   void CreateFile(const GURL& path,
                   bool exclusive,
                   const StatusCallback& callback);
+  void CreateFileSync(const GURL& path,
+                      bool exclusive,
+                      const StatusCallback& callback);
+
   void CreateDirectory(const GURL& path,
                        bool exclusive,
                        bool recursive,
                        const StatusCallback& callback);
+  void CreateDirectorySync(const GURL& path,
+                           bool exclusive,
+                           bool recursive,
+                           const StatusCallback& callback);
+
   void Exists(const GURL& path,
               bool for_directory,
               const StatusCallback& callback);
+  void ExistsSync(const GURL& path,
+                  bool for_directory,
+                  const StatusCallback& callback);
+
   void ReadDirectory(const GURL& path,
                      const ReadDirectoryCallback& success_callback,
                      const StatusCallback& error_callback);
+  void ReadDirectorySync(const GURL& path,
+                         const ReadDirectoryCallback& success_callback,
+                         const StatusCallback& error_callback);
+
   void Truncate(const GURL& path,
                 int64_t offset,
                 int* request_id_out,
                 const StatusCallback& callback);
+  void TruncateSync(const GURL& path,
+                    int64_t offset,
+                    const StatusCallback& callback);
+
   void Write(const GURL& path,
              const std::string& blob_id,
              int64_t offset,
              int* request_id_out,
              const WriteCallback& success_callback,
              const StatusCallback& error_callback);
+  void WriteSync(const GURL& path,
+                 const std::string& blob_id,
+                 int64_t offset,
+                 const WriteCallback& success_callback,
+                 const StatusCallback& error_callback);
+
   void Cancel(int request_id_to_cancel, const StatusCallback& callback);
   void TouchFile(const GURL& file_path,
                  const base::Time& last_access_time,
                  const base::Time& last_modified_time,
                  const StatusCallback& callback);
+
   void CreateSnapshotFile(const GURL& file_path,
                           const CreateSnapshotFileCallback& success_callback,
                           const StatusCallback& error_callback);
+  void CreateSnapshotFileSync(
+      const GURL& file_path,
+      const CreateSnapshotFileCallback& success_callback,
+      const StatusCallback& error_callback);
 
  private:
   class CallbackDispatcher;
@@ -160,8 +218,6 @@
     cancellable_operations_.erase(request_id);
   }
 
-  void OnConnectionErrorHandler();
-
   blink::mojom::FileSystemManager& GetFileSystemManager();
 
   blink::mojom::FileSystemManagerPtr file_system_manager_ptr_;
@@ -175,6 +231,8 @@
       std::unordered_map<int, blink::mojom::FileSystemCancellableOperationPtr>;
   OperationsMap cancellable_operations_;
 
+  scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
+
   DISALLOW_COPY_AND_ASSIGN(FileSystemDispatcher);
 };
 
diff --git a/content/renderer/fileapi/webfilesystem_impl.cc b/content/renderer/fileapi/webfilesystem_impl.cc
index 95ed24c1..432d7e3 100644
--- a/content/renderer/fileapi/webfilesystem_impl.cc
+++ b/content/renderer/fileapi/webfilesystem_impl.cc
@@ -39,88 +39,31 @@
 
 namespace content {
 
-class WebFileSystemImpl::WaitableCallbackResults
-    : public base::RefCountedThreadSafe<WaitableCallbackResults> {
- public:
-  WaitableCallbackResults()
-      : results_available_event_(
-            base::WaitableEvent::ResetPolicy::MANUAL,
-            base::WaitableEvent::InitialState::NOT_SIGNALED) {}
-
-  void AddResultsAndSignal(const base::Closure& results_closure) {
-    base::AutoLock lock(lock_);
-    results_closures_.push_back(results_closure);
-    results_available_event_.Signal();
-  }
-
-  void WaitAndRun() {
-    results_available_event_.Wait();
-    Run();
-  }
-
-  void Run() {
-    std::vector<base::Closure> closures;
-    {
-      base::AutoLock lock(lock_);
-      results_closures_.swap(closures);
-      results_available_event_.Reset();
-    }
-    for (size_t i = 0; i < closures.size(); ++i)
-      closures[i].Run();
-  }
-
- private:
-  friend class base::RefCountedThreadSafe<WaitableCallbackResults>;
-
-  ~WaitableCallbackResults() {}
-
-  base::Lock lock_;
-  base::WaitableEvent results_available_event_;
-  std::vector<base::Closure> results_closures_;
-  DISALLOW_COPY_AND_ASSIGN(WaitableCallbackResults);
-};
-
 namespace {
 
-typedef WebFileSystemImpl::WaitableCallbackResults WaitableCallbackResults;
-
 base::LazyInstance<base::ThreadLocalPointer<WebFileSystemImpl>>::Leaky
     g_webfilesystem_tls = LAZY_INSTANCE_INITIALIZER;
 
-template <typename Method, typename Params>
-void CallDispatcherOnMainThread(
-    const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
-    Method method, const Params& params,
-    WaitableCallbackResults* waitable_results) {
-  if (!main_thread_task_runner->BelongsToCurrentThread()) {
-    main_thread_task_runner->PostTask(
-        FROM_HERE,
-        base::BindOnce(&CallDispatcherOnMainThread<Method, Params>,
-                       main_thread_task_runner, method, params, nullptr));
-    if (!waitable_results)
-      return;
-    waitable_results->WaitAndRun();
-  }
-  if (!RenderThreadImpl::current() ||
-      !RenderThreadImpl::current()->file_system_dispatcher())
-    return;
-
-  DCHECK(!waitable_results);
-  DispatchToMethod(RenderThreadImpl::current()->file_system_dispatcher(),
-                   method, params);
-}
-
 enum CallbacksUnregisterMode {
   UNREGISTER_CALLBACKS,
   DO_NOT_UNREGISTER_CALLBACKS,
 };
 
+template <typename Method, typename Params>
+void CallDispatcher(const WebFileSystemCallbacks& callbacks,
+                    Method async_method,
+                    Method sync_method,
+                    FileSystemDispatcher* dispatcher,
+                    Params&& params) {
+  if (callbacks.ShouldBlockUntilCompletion())
+    DispatchToMethod(dispatcher, sync_method, params);
+  else
+    DispatchToMethod(dispatcher, async_method, params);
+}
+
 // Bridging functions that convert the arguments into Blink objects
 // (e.g. WebFileInfo, WebString, WebVector<WebFileSystemEntry>)
 // and call WebFileSystemCallbacks's methods.
-// These are called by RunCallbacks after crossing threads to ensure
-// thread safety, because the Blink objects cannot be passed across
-// threads by base::Bind().
 void DidSucceed(WebFileSystemCallbacks* callbacks) {
   callbacks->DidSucceed();
 }
@@ -167,11 +110,9 @@
   callbacks->DidFail(storage::FileErrorToWebFileError(error));
 }
 
-// Run WebFileSystemCallbacks's |method| with |params|.
-void RunCallbacks(
-    int callbacks_id,
-    const base::Callback<void(WebFileSystemCallbacks*)>& callback,
-    CallbacksUnregisterMode callbacks_unregister_mode) {
+void RunCallbacks(int callbacks_id,
+                  base::OnceCallback<void(WebFileSystemCallbacks*)> callback,
+                  CallbacksUnregisterMode callbacks_unregister_mode) {
   WebFileSystemImpl* filesystem =
       WebFileSystemImpl::ThreadSpecificInstance(nullptr);
   if (!filesystem)
@@ -179,117 +120,61 @@
   WebFileSystemCallbacks callbacks = filesystem->GetCallbacks(callbacks_id);
   if (callbacks_unregister_mode == UNREGISTER_CALLBACKS)
     filesystem->UnregisterCallbacks(callbacks_id);
-  callback.Run(&callbacks);
-}
-
-void DispatchResultsClosure(
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    int callbacks_id,
-    WaitableCallbackResults* waitable_results,
-    const base::Closure& results_closure) {
-  if (task_runner->BelongsToCurrentThread()) {
-    results_closure.Run();
-    return;
-  }
-
-  if (waitable_results) {
-    // If someone is waiting, this should result in running the closure.
-    waitable_results->AddResultsAndSignal(results_closure);
-    // In case no one is waiting, post a task to run the closure.
-    task_runner->PostTask(
-        FROM_HERE, base::BindOnce(&WaitableCallbackResults::Run,
-                                  base::WrapRefCounted(waitable_results)));
-    return;
-  }
-  task_runner->PostTask(FROM_HERE, results_closure);
-}
-
-void CallbackFileSystemCallbacks(
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    int callbacks_id,
-    WaitableCallbackResults* waitable_results,
-    const base::Callback<void(WebFileSystemCallbacks*)>& callback,
-    CallbacksUnregisterMode callbacksunregister_mode) {
-  DispatchResultsClosure(task_runner, callbacks_id, waitable_results,
-                         base::Bind(&RunCallbacks, callbacks_id, callback,
-                                    callbacksunregister_mode));
+  std::move(callback).Run(&callbacks);
 }
 
 //-----------------------------------------------------------------------------
-// Callback adapters. Callbacks must be called on the original calling thread,
-// so these callback adapters relay back the results to the calling thread
-// if necessary.
+// Callback adapters.
 
-void OpenFileSystemCallbackAdapter(
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    int callbacks_id,
-    WaitableCallbackResults* waitable_results,
-    const std::string& name,
-    const GURL& root) {
-  CallbackFileSystemCallbacks(task_runner, callbacks_id, waitable_results,
-                              base::Bind(&DidOpenFileSystem, name, root),
-                              UNREGISTER_CALLBACKS);
+void OpenFileSystemCallbackAdapter(int callbacks_id,
+                                   const std::string& name,
+                                   const GURL& root) {
+  RunCallbacks(callbacks_id, base::BindOnce(&DidOpenFileSystem, name, root),
+               UNREGISTER_CALLBACKS);
 }
 
-void ResolveURLCallbackAdapter(
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    int callbacks_id,
-    WaitableCallbackResults* waitable_results,
-    const storage::FileSystemInfo& info,
-    const base::FilePath& file_path,
-    bool is_directory) {
+void ResolveURLCallbackAdapter(int callbacks_id,
+                               const storage::FileSystemInfo& info,
+                               const base::FilePath& file_path,
+                               bool is_directory) {
   base::FilePath normalized_path(
       storage::VirtualPath::GetNormalizedFilePath(file_path));
-  CallbackFileSystemCallbacks(
-      task_runner, callbacks_id, waitable_results,
-      base::Bind(&DidResolveURL, info.name, info.root_url, info.mount_type,
-                 normalized_path, is_directory),
-      UNREGISTER_CALLBACKS);
+  RunCallbacks(callbacks_id,
+               base::BindOnce(&DidResolveURL, info.name, info.root_url,
+                              info.mount_type, normalized_path, is_directory),
+               UNREGISTER_CALLBACKS);
 }
 
-void StatusCallbackAdapter(
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    int callbacks_id,
-    WaitableCallbackResults* waitable_results,
-    base::File::Error error) {
+void StatusCallbackAdapter(int callbacks_id, base::File::Error error) {
   if (error == base::File::FILE_OK) {
-    CallbackFileSystemCallbacks(task_runner, callbacks_id, waitable_results,
-                                base::Bind(&DidSucceed), UNREGISTER_CALLBACKS);
+    RunCallbacks(callbacks_id, base::BindOnce(&DidSucceed),
+                 UNREGISTER_CALLBACKS);
   } else {
-    CallbackFileSystemCallbacks(task_runner, callbacks_id, waitable_results,
-                                base::Bind(&DidFail, error),
-                                UNREGISTER_CALLBACKS);
+    RunCallbacks(callbacks_id, base::BindOnce(&DidFail, error),
+                 UNREGISTER_CALLBACKS);
   }
 }
 
-void ReadMetadataCallbackAdapter(
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    int callbacks_id,
-    WaitableCallbackResults* waitable_results,
-    const base::File::Info& file_info) {
-  CallbackFileSystemCallbacks(task_runner, callbacks_id, waitable_results,
-                              base::Bind(&DidReadMetadata, file_info),
-                              UNREGISTER_CALLBACKS);
+void ReadMetadataCallbackAdapter(int callbacks_id,
+                                 const base::File::Info& file_info) {
+  RunCallbacks(callbacks_id, base::BindOnce(&DidReadMetadata, file_info),
+               UNREGISTER_CALLBACKS);
 }
 
 void ReadDirectoryCallbackAdapter(
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
     int callbacks_id,
-    WaitableCallbackResults* waitable_results,
     const std::vector<filesystem::mojom::DirectoryEntry>& entries,
     bool has_more) {
-  CallbackFileSystemCallbacks(
-      task_runner, callbacks_id, waitable_results,
-      base::Bind(&DidReadDirectory, entries, has_more),
-      has_more ? DO_NOT_UNREGISTER_CALLBACKS : UNREGISTER_CALLBACKS);
+  RunCallbacks(callbacks_id,
+               base::BindOnce(&DidReadDirectory, entries, has_more),
+               has_more ? DO_NOT_UNREGISTER_CALLBACKS : UNREGISTER_CALLBACKS);
 }
 
-void DidCreateFileWriter(
-    int callbacks_id,
-    const GURL& path,
-    blink::WebFileWriterClient* client,
-    const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
-    const base::File::Info& file_info) {
+void DidCreateFileWriter(int callbacks_id,
+                         const GURL& path,
+                         blink::WebFileWriterClient* client,
+                         base::SingleThreadTaskRunner* main_thread_task_runner,
+                         const base::File::Info& file_info) {
   WebFileSystemImpl* filesystem =
       WebFileSystemImpl::ThreadSpecificInstance(nullptr);
   if (!filesystem)
@@ -311,22 +196,17 @@
 }
 
 void CreateFileWriterCallbackAdapter(
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
     int callbacks_id,
-    WaitableCallbackResults* waitable_results,
-    const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
+    scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner,
     const GURL& path,
     blink::WebFileWriterClient* client,
     const base::File::Info& file_info) {
-  DispatchResultsClosure(
-      task_runner, callbacks_id, waitable_results,
-      base::Bind(&DidCreateFileWriter, callbacks_id, path, client,
-                 main_thread_task_runner, file_info));
+  DidCreateFileWriter(callbacks_id, path, client, main_thread_task_runner.get(),
+                      file_info);
 }
 
 void DidCreateSnapshotFile(
     int callbacks_id,
-    const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
     const base::File::Info& file_info,
     const base::FilePath& platform_path,
     base::Optional<blink::mojom::ReceivedSnapshotListenerPtr> opt_listener,
@@ -347,29 +227,18 @@
   // TODO(michaeln,kinuko): Use ThreadSafeSender when Blob becomes
   // non-bridge model.
   if (opt_listener) {
-    main_thread_task_runner->PostTask(
-        FROM_HERE, base::BindOnce(
-                       [](blink::mojom::ReceivedSnapshotListenerPtr listener) {
-                         listener->DidReceiveSnapshotFile();
-                       },
-                       std::move(opt_listener.value())));
+    opt_listener.value()->DidReceiveSnapshotFile();
   }
 }
 
 void CreateSnapshotFileCallbackAdapter(
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
     int callbacks_id,
-    WaitableCallbackResults* waitable_results,
-    const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
     const base::File::Info& file_info,
     const base::FilePath& platform_path,
     base::Optional<blink::mojom::ReceivedSnapshotListenerPtr> opt_listener,
     int request_id) {
-  DispatchResultsClosure(
-      task_runner, callbacks_id, waitable_results,
-      base::Bind(&DidCreateSnapshotFile, callbacks_id, main_thread_task_runner,
-                 file_info, platform_path, base::Passed(&opt_listener),
-                 request_id));
+  DidCreateSnapshotFile(callbacks_id, file_info, platform_path,
+                        std::move(opt_listener), request_id);
 }
 
 }  // namespace
@@ -378,12 +247,11 @@
 // WebFileSystemImpl
 
 WebFileSystemImpl* WebFileSystemImpl::ThreadSpecificInstance(
-    const scoped_refptr<base::SingleThreadTaskRunner>&
-        main_thread_task_runner) {
-  if (g_webfilesystem_tls.Pointer()->Get() || !main_thread_task_runner.get())
+    scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner) {
+  if (g_webfilesystem_tls.Pointer()->Get() || !main_thread_task_runner)
     return g_webfilesystem_tls.Pointer()->Get();
   WebFileSystemImpl* filesystem =
-      new WebFileSystemImpl(main_thread_task_runner);
+      new WebFileSystemImpl(std::move(main_thread_task_runner));
   if (WorkerThread::GetCurrentId())
     WorkerThread::AddObserver(filesystem);
   return filesystem;
@@ -396,9 +264,10 @@
 }
 
 WebFileSystemImpl::WebFileSystemImpl(
-    const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner)
+    scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner)
     : main_thread_task_runner_(main_thread_task_runner),
-      next_callbacks_id_(1) {
+      next_callbacks_id_(1),
+      file_system_dispatcher_(std::move(main_thread_task_runner)) {
   g_webfilesystem_tls.Pointer()->Set(this);
 }
 
@@ -415,197 +284,135 @@
                                        blink::WebFileSystemType type,
                                        WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::OpenFileSystem,
+  CallDispatcher(
+      callbacks, &FileSystemDispatcher::OpenFileSystem,
+      &FileSystemDispatcher::OpenFileSystemSync, &file_system_dispatcher_,
       std::make_tuple(
           GURL(storage_partition), static_cast<storage::FileSystemType>(type),
-          base::Bind(&OpenFileSystemCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results)),
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+          base::BindRepeating(&OpenFileSystemCallbackAdapter, callbacks_id),
+          base::BindRepeating(&StatusCallbackAdapter, callbacks_id)));
 }
 
 void WebFileSystemImpl::ResolveURL(const blink::WebURL& filesystem_url,
                                    WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::ResolveURL,
+  CallDispatcher(
+      callbacks, &FileSystemDispatcher::ResolveURL,
+      &FileSystemDispatcher::ResolveURLSync, &file_system_dispatcher_,
       std::make_tuple(
           GURL(filesystem_url),
-          base::Bind(&ResolveURLCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results)),
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+          base::BindRepeating(&ResolveURLCallbackAdapter, callbacks_id),
+          base::BindRepeating(&StatusCallbackAdapter, callbacks_id)));
 }
 
 void WebFileSystemImpl::Move(const blink::WebURL& src_path,
                              const blink::WebURL& dest_path,
                              WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::Move,
-      std::make_tuple(
-          GURL(src_path), GURL(dest_path),
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+  CallDispatcher(callbacks, &FileSystemDispatcher::Move,
+                 &FileSystemDispatcher::MoveSync, &file_system_dispatcher_,
+                 std::make_tuple(GURL(src_path), GURL(dest_path),
+                                 base::BindRepeating(&StatusCallbackAdapter,
+                                                     callbacks_id)));
 }
 
 void WebFileSystemImpl::Copy(const blink::WebURL& src_path,
                              const blink::WebURL& dest_path,
                              WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::Copy,
-      std::make_tuple(
-          GURL(src_path), GURL(dest_path),
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+  CallDispatcher(callbacks, &FileSystemDispatcher::Copy,
+                 &FileSystemDispatcher::CopySync, &file_system_dispatcher_,
+                 std::make_tuple(GURL(src_path), GURL(dest_path),
+                                 base::BindRepeating(&StatusCallbackAdapter,
+                                                     callbacks_id)));
 }
 
 void WebFileSystemImpl::Remove(const blink::WebURL& path,
                                WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::Remove,
-      std::make_tuple(
-          GURL(path), false /* recursive */,
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+  CallDispatcher(callbacks, &FileSystemDispatcher::Remove,
+                 &FileSystemDispatcher::RemoveSync, &file_system_dispatcher_,
+                 std::make_tuple(GURL(path), /*recursive=*/false,
+                                 base::BindRepeating(&StatusCallbackAdapter,
+                                                     callbacks_id)));
 }
 
 void WebFileSystemImpl::RemoveRecursively(const blink::WebURL& path,
                                           WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::Remove,
-      std::make_tuple(
-          GURL(path), true /* recursive */,
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+  CallDispatcher(callbacks, &FileSystemDispatcher::Remove,
+                 &FileSystemDispatcher::RemoveSync, &file_system_dispatcher_,
+                 std::make_tuple(GURL(path), /*recursive=*/true,
+                                 base::BindRepeating(&StatusCallbackAdapter,
+                                                     callbacks_id)));
 }
 
 void WebFileSystemImpl::ReadMetadata(const blink::WebURL& path,
                                      WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata,
+  CallDispatcher(
+      callbacks, &FileSystemDispatcher::ReadMetadata,
+      &FileSystemDispatcher::ReadMetadataSync, &file_system_dispatcher_,
       std::make_tuple(
           GURL(path),
-          base::Bind(&ReadMetadataCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results)),
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+          base::BindRepeating(&ReadMetadataCallbackAdapter, callbacks_id),
+          base::BindRepeating(&StatusCallbackAdapter, callbacks_id)));
 }
 
 void WebFileSystemImpl::CreateFile(const blink::WebURL& path,
                                    bool exclusive,
                                    WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::CreateFile,
+  CallDispatcher(
+      callbacks, &FileSystemDispatcher::CreateFile,
+      &FileSystemDispatcher::CreateFileSync, &file_system_dispatcher_,
       std::make_tuple(
           GURL(path), exclusive,
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+          base::BindRepeating(&StatusCallbackAdapter, callbacks_id)));
 }
 
 void WebFileSystemImpl::CreateDirectory(const blink::WebURL& path,
                                         bool exclusive,
                                         WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::CreateDirectory,
+  CallDispatcher(
+      callbacks, &FileSystemDispatcher::CreateDirectory,
+      &FileSystemDispatcher::CreateDirectorySync, &file_system_dispatcher_,
       std::make_tuple(
-          GURL(path), exclusive, false /* recursive */,
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+          GURL(path), exclusive, /*recursive=*/false,
+          base::BindRepeating(&StatusCallbackAdapter, callbacks_id)));
 }
 
 void WebFileSystemImpl::FileExists(const blink::WebURL& path,
                                    WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::Exists,
-      std::make_tuple(
-          GURL(path), false /* directory */,
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+  CallDispatcher(callbacks, &FileSystemDispatcher::Exists,
+                 &FileSystemDispatcher::ExistsSync, &file_system_dispatcher_,
+                 std::make_tuple(GURL(path), /*directory=*/false,
+                                 base::BindRepeating(&StatusCallbackAdapter,
+                                                     callbacks_id)));
 }
 
 void WebFileSystemImpl::DirectoryExists(const blink::WebURL& path,
                                         WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::Exists,
-      std::make_tuple(
-          GURL(path), true /* directory */,
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+  CallDispatcher(callbacks, &FileSystemDispatcher::Exists,
+                 &FileSystemDispatcher::ExistsSync, &file_system_dispatcher_,
+                 std::make_tuple(GURL(path), /*directory=*/true,
+                                 base::BindRepeating(&StatusCallbackAdapter,
+                                                     callbacks_id)));
 }
 
 int WebFileSystemImpl::ReadDirectory(const blink::WebURL& path,
                                      WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::ReadDirectory,
+  CallDispatcher(
+      callbacks, &FileSystemDispatcher::ReadDirectory,
+      &FileSystemDispatcher::ReadDirectorySync, &file_system_dispatcher_,
       std::make_tuple(
           GURL(path),
-          base::Bind(&ReadDirectoryCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results)),
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+          base::BindRepeating(&ReadDirectoryCallbackAdapter, callbacks_id),
+          base::BindRepeating(&StatusCallbackAdapter, callbacks_id)));
   return callbacks_id;
 }
 
@@ -613,50 +420,27 @@
                                          blink::WebFileWriterClient* client,
                                          WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata,
+  CallDispatcher(
+      callbacks, &FileSystemDispatcher::ReadMetadata,
+      &FileSystemDispatcher::ReadMetadataSync, &file_system_dispatcher_,
       std::make_tuple(
           GURL(path),
-          base::Bind(&CreateFileWriterCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results),
-                     main_thread_task_runner_, GURL(path), client),
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
+          base::BindRepeating(&CreateFileWriterCallbackAdapter, callbacks_id,
+                              main_thread_task_runner_, GURL(path), client),
+          base::BindRepeating(&StatusCallbackAdapter, callbacks_id)));
 }
 
 void WebFileSystemImpl::CreateSnapshotFileAndReadMetadata(
     const blink::WebURL& path,
     WebFileSystemCallbacks callbacks) {
   int callbacks_id = RegisterCallbacks(callbacks);
-  scoped_refptr<WaitableCallbackResults> waitable_results =
-      MaybeCreateWaitableResults(callbacks, callbacks_id);
-  CallDispatcherOnMainThread(
-      main_thread_task_runner_, &FileSystemDispatcher::CreateSnapshotFile,
+  CallDispatcher(
+      callbacks, &FileSystemDispatcher::CreateSnapshotFile,
+      &FileSystemDispatcher::CreateSnapshotFileSync, &file_system_dispatcher_,
       std::make_tuple(
           GURL(path),
-          base::Bind(&CreateSnapshotFileCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results),
-                     main_thread_task_runner_),
-          base::Bind(&StatusCallbackAdapter,
-                     base::ThreadTaskRunnerHandle::Get(), callbacks_id,
-                     base::RetainedRef(waitable_results))),
-      waitable_results.get());
-}
-
-bool WebFileSystemImpl::WaitForAdditionalResult(int callbacksId) {
-  WaitableCallbackResultsMap::iterator found =
-      waitable_results_.find(callbacksId);
-  if (found == waitable_results_.end())
-    return false;
-
-  found->second->WaitAndRun();
-  return true;
+          base::BindRepeating(&CreateSnapshotFileCallbackAdapter, callbacks_id),
+          base::BindRepeating(&StatusCallbackAdapter, callbacks_id)));
 }
 
 int WebFileSystemImpl::RegisterCallbacks(
@@ -679,17 +463,6 @@
   CallbacksMap::iterator found = callbacks_.find(callbacks_id);
   DCHECK(found != callbacks_.end());
   callbacks_.erase(found);
-
-  waitable_results_.erase(callbacks_id);
-}
-
-WaitableCallbackResults* WebFileSystemImpl::MaybeCreateWaitableResults(
-    const WebFileSystemCallbacks& callbacks, int callbacks_id) {
-  if (!callbacks.ShouldBlockUntilCompletion())
-    return nullptr;
-  WaitableCallbackResults* results = new WaitableCallbackResults();
-  waitable_results_[callbacks_id] = results;
-  return results;
 }
 
 }  // namespace content
diff --git a/content/renderer/fileapi/webfilesystem_impl.h b/content/renderer/fileapi/webfilesystem_impl.h
index 97f92a5d..e4e90e8 100644
--- a/content/renderer/fileapi/webfilesystem_impl.h
+++ b/content/renderer/fileapi/webfilesystem_impl.h
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
 #include "content/public/renderer/worker_thread.h"
+#include "content/renderer/fileapi/file_system_dispatcher.h"
 #include "third_party/blink/public/platform/web_file_system.h"
 
 namespace base {
@@ -28,14 +29,11 @@
 class WebFileSystemImpl : public blink::WebFileSystem,
                           public WorkerThread::Observer {
  public:
-  class WaitableCallbackResults;
-
   // Returns thread-specific instance.  If non-null |main_thread_loop|
   // is given and no thread-specific instance has been created it may
   // create a new instance.
   static WebFileSystemImpl* ThreadSpecificInstance(
-      const scoped_refptr<base::SingleThreadTaskRunner>&
-          main_thread_task_runner);
+      scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner);
 
   // Deletes thread-specific instance (if exists). For workers it deletes
   // itself in WillStopCurrentWorkerThread(), but for an instance created on the
@@ -43,8 +41,7 @@
   static void DeleteThreadSpecificInstance();
 
   explicit WebFileSystemImpl(
-      const scoped_refptr<base::SingleThreadTaskRunner>&
-          main_thread_task_runner);
+      scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner);
   ~WebFileSystemImpl() override;
 
   // WorkerThread::Observer implementation.
@@ -86,7 +83,6 @@
   void CreateSnapshotFileAndReadMetadata(
       const blink::WebURL& path,
       blink::WebFileSystemCallbacks) override;
-  bool WaitForAdditionalResult(int callbacksId) override;
 
   int RegisterCallbacks(const blink::WebFileSystemCallbacks& callbacks);
   blink::WebFileSystemCallbacks GetCallbacks(int callbacks_id);
@@ -94,17 +90,12 @@
 
  private:
   typedef std::map<int, blink::WebFileSystemCallbacks> CallbacksMap;
-  typedef std::map<int, scoped_refptr<WaitableCallbackResults> >
-      WaitableCallbackResultsMap;
-
-  WaitableCallbackResults* MaybeCreateWaitableResults(
-      const blink::WebFileSystemCallbacks& callbacks, int callbacks_id);
 
   scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
 
   CallbacksMap callbacks_;
   int next_callbacks_id_;
-  WaitableCallbackResultsMap waitable_results_;
+  FileSystemDispatcher file_system_dispatcher_;
 
   // Thread-affine per use of TLS in impl.
   THREAD_CHECKER(thread_checker_);
diff --git a/content/renderer/fileapi/webfilewriter_impl.cc b/content/renderer/fileapi/webfilewriter_impl.cc
index 61c646a..9502920 100644
--- a/content/renderer/fileapi/webfilewriter_impl.cc
+++ b/content/renderer/fileapi/webfilewriter_impl.cc
@@ -13,164 +13,55 @@
 
 namespace content {
 
-namespace {
-
-FileSystemDispatcher* GetFileSystemDispatcher() {
-  return RenderThreadImpl::current()
-             ? RenderThreadImpl::current()->file_system_dispatcher()
-             : nullptr;
-}
-
-}  // namespace
-
 typedef FileSystemDispatcher::StatusCallback StatusCallback;
 typedef FileSystemDispatcher::WriteCallback WriteCallback;
 
-// This instance may be created outside main thread but runs mainly
-// on main thread.
-class WebFileWriterImpl::WriterBridge
-    : public base::RefCountedThreadSafe<WriterBridge> {
- public:
-  WriterBridge(WebFileWriterImpl::Type type)
-      : request_id_(0),
-        running_on_worker_(WorkerThread::GetCurrentId() > 0),
-        task_runner_(running_on_worker_ ? base::ThreadTaskRunnerHandle::Get()
-                                        : nullptr),
-        written_bytes_(0) {
-    if (type == WebFileWriterImpl::TYPE_SYNC) {
-      waitable_event_.reset(new base::WaitableEvent(
-          base::WaitableEvent::ResetPolicy::AUTOMATIC,
-          base::WaitableEvent::InitialState::NOT_SIGNALED));
-    }
-  }
-
-  void Truncate(const GURL& path,
-                int64_t offset,
-                const StatusCallback& status_callback) {
-    status_callback_ = status_callback;
-    if (!GetFileSystemDispatcher())
-      return;
-    RenderThreadImpl::current()->file_system_dispatcher()->Truncate(
-        path, offset, &request_id_,
-        base::Bind(&WriterBridge::DidFinish, this));
-  }
-
-  void Write(const GURL& path,
-             const std::string& id,
-             int64_t offset,
-             const WriteCallback& write_callback,
-             const StatusCallback& error_callback) {
-    write_callback_ = write_callback;
-    status_callback_ = error_callback;
-    if (!GetFileSystemDispatcher())
-      return;
-    RenderThreadImpl::current()->file_system_dispatcher()->Write(
-        path, id, offset, &request_id_,
-        base::Bind(&WriterBridge::DidWrite, this),
-        base::Bind(&WriterBridge::DidFinish, this));
-  }
-
-  void Cancel(const StatusCallback& status_callback) {
-    status_callback_ = status_callback;
-    if (!GetFileSystemDispatcher())
-      return;
-    RenderThreadImpl::current()->file_system_dispatcher()->Cancel(
-        request_id_,
-        base::Bind(&WriterBridge::DidFinish, this));
-  }
-
-  base::WaitableEvent* waitable_event() {
-    return waitable_event_.get();
-  }
-
-  void WaitAndRun() {
-    waitable_event_->Wait();
-    DCHECK(!results_closure_.is_null());
-    results_closure_.Run();
-  }
-
- private:
-  friend class base::RefCountedThreadSafe<WriterBridge>;
-  virtual ~WriterBridge() {}
-
-  void DidWrite(int64_t bytes, bool complete) {
-    written_bytes_ += bytes;
-    if (waitable_event_ && !complete)
-      return;
-    PostTaskToWorker(base::Bind(write_callback_, written_bytes_, complete));
-  }
-
-  void DidFinish(base::File::Error status) {
-    PostTaskToWorker(base::Bind(status_callback_, status));
-  }
-
-  void PostTaskToWorker(const base::Closure& closure) {
-    written_bytes_ = 0;
-    if (!running_on_worker_) {
-      DCHECK(!waitable_event_);
-      closure.Run();
-      return;
-    }
-    DCHECK(task_runner_);
-    if (waitable_event_) {
-      results_closure_ = closure;
-      waitable_event_->Signal();
-      return;
-    }
-    task_runner_->PostTask(FROM_HERE, closure);
-  }
-
-  StatusCallback status_callback_;
-  WriteCallback write_callback_;
-  int request_id_;
-  const bool running_on_worker_;
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
-  int written_bytes_;
-  std::unique_ptr<base::WaitableEvent> waitable_event_;
-  base::Closure results_closure_;
-};
-
 WebFileWriterImpl::WebFileWriterImpl(
-     const GURL& path, blink::WebFileWriterClient* client,
-     Type type,
-     const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner)
-  : WebFileWriterBase(path, client),
-    main_thread_task_runner_(main_thread_task_runner),
-    bridge_(new WriterBridge(type)) {
-}
+    const GURL& path,
+    blink::WebFileWriterClient* client,
+    Type type,
+    scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner)
+    : WebFileWriterBase(path, client),
+      request_id_(0),
+      type_(type),
+      file_system_dispatcher_(std::make_unique<FileSystemDispatcher>(
+          std::move(main_thread_task_runner))) {}
 
-WebFileWriterImpl::~WebFileWriterImpl() {
-}
+WebFileWriterImpl::~WebFileWriterImpl() {}
 
 void WebFileWriterImpl::DoTruncate(const GURL& path, int64_t offset) {
-  RunOnMainThread(base::Bind(&WriterBridge::Truncate, bridge_,
-      path, offset,
-      base::Bind(&WebFileWriterImpl::DidFinish, AsWeakPtr())));
+  if (type_ == TYPE_SYNC) {
+    file_system_dispatcher_->TruncateSync(
+        path, offset,
+        base::Bind(&WebFileWriterImpl::DidFinish, base::Unretained(this)));
+  } else {
+    file_system_dispatcher_->Truncate(
+        path, offset, &request_id_,
+        base::Bind(&WebFileWriterImpl::DidFinish, base::Unretained(this)));
+  }
 }
 
 void WebFileWriterImpl::DoWrite(const GURL& path,
                                 const std::string& blob_id,
                                 int64_t offset) {
-  RunOnMainThread(base::Bind(&WriterBridge::Write, bridge_,
-      path, blob_id, offset,
-      base::Bind(&WebFileWriterImpl::DidWrite, AsWeakPtr()),
-      base::Bind(&WebFileWriterImpl::DidFinish, AsWeakPtr())));
+  if (type_ == TYPE_SYNC) {
+    file_system_dispatcher_->WriteSync(
+        path, blob_id, offset,
+        base::Bind(&WebFileWriterImpl::DidWrite, base::Unretained(this)),
+        base::Bind(&WebFileWriterImpl::DidFinish, base::Unretained(this)));
+  } else {
+    file_system_dispatcher_->Write(
+        path, blob_id, offset, &request_id_,
+        base::Bind(&WebFileWriterImpl::DidWrite, base::Unretained(this)),
+        base::Bind(&WebFileWriterImpl::DidFinish, base::Unretained(this)));
+  }
 }
 
 void WebFileWriterImpl::DoCancel() {
-  RunOnMainThread(base::Bind(&WriterBridge::Cancel, bridge_,
-      base::Bind(&WebFileWriterImpl::DidFinish, AsWeakPtr())));
-}
-
-void WebFileWriterImpl::RunOnMainThread(const base::Closure& closure) {
-  if (main_thread_task_runner_->RunsTasksInCurrentSequence()) {
-    DCHECK(!bridge_->waitable_event());
-    closure.Run();
-    return;
-  }
-  main_thread_task_runner_->PostTask(FROM_HERE, closure);
-  if (bridge_->waitable_event())
-    bridge_->WaitAndRun();
+  DCHECK_EQ(type_, TYPE_ASYNC);
+  file_system_dispatcher_->Cancel(
+      request_id_,
+      base::Bind(&WebFileWriterImpl::DidFinish, base::Unretained(this)));
 }
 
 }  // namespace content
diff --git a/content/renderer/fileapi/webfilewriter_impl.h b/content/renderer/fileapi/webfilewriter_impl.h
index 2737ea7..cddc24d 100644
--- a/content/renderer/fileapi/webfilewriter_impl.h
+++ b/content/renderer/fileapi/webfilewriter_impl.h
@@ -10,8 +10,6 @@
 #include <string>
 
 #include "base/callback_forward.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
 #include "content/renderer/fileapi/webfilewriter_base.h"
 
 namespace base {
@@ -20,20 +18,21 @@
 
 namespace content {
 
+class FileSystemDispatcher;
+
 // An implementation of WebFileWriter for use in chrome renderers and workers.
-class WebFileWriterImpl : public WebFileWriterBase,
-                          public base::SupportsWeakPtr<WebFileWriterImpl> {
+class WebFileWriterImpl : public WebFileWriterBase {
  public:
   enum Type {
     TYPE_SYNC,
     TYPE_ASYNC,
   };
 
-  WebFileWriterImpl(const GURL& path,
-                    blink::WebFileWriterClient* client,
-                    Type type,
-                    const scoped_refptr<base::SingleThreadTaskRunner>&
-                        main_thread_task_runner);
+  WebFileWriterImpl(
+      const GURL& path,
+      blink::WebFileWriterClient* client,
+      Type type,
+      scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner);
   ~WebFileWriterImpl() override;
 
  protected:
@@ -45,12 +44,9 @@
   void DoCancel() override;
 
  private:
-  class WriterBridge;
-
-  void RunOnMainThread(const base::Closure& closure);
-
-  scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
-  scoped_refptr<WriterBridge> bridge_;
+  int request_id_;
+  Type type_;
+  std::unique_ptr<FileSystemDispatcher> file_system_dispatcher_;
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_file_system_host.cc b/content/renderer/pepper/pepper_file_system_host.cc
index dcf0df7..53915df 100644
--- a/content/renderer/pepper/pepper_file_system_host.cc
+++ b/content/renderer/pepper/pepper_file_system_host.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "content/common/pepper_file_util.h"
+#include "content/public/common/service_names.mojom.h"
 #include "content/public/renderer/render_view.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "content/renderer/fileapi/file_system_dispatcher.h"
@@ -18,6 +19,8 @@
 #include "ppapi/proxy/ppapi_messages.h"
 #include "ppapi/shared_impl/file_system_util.h"
 #include "ppapi/shared_impl/file_type_conversion.h"
+#include "services/service_manager/public/cpp/connector.h"
+#include "storage/common/fileapi/file_system_type_converters.h"
 #include "storage/common/fileapi/file_system_util.h"
 #include "third_party/blink/public/web/web_document.h"
 #include "third_party/blink/public/web/web_local_frame.h"
@@ -66,7 +69,12 @@
 
 void PepperFileSystemHost::DidOpenFileSystem(
     const std::string& /* name_unused */,
-    const GURL& root) {
+    const GURL& root,
+    base::File::Error error) {
+  if (error != base::File::FILE_OK) {
+    DidFailOpenFileSystem(error);
+    return;
+  }
   opened_ = true;
   root_url_ = root;
   reply_context_.params.set_result(PP_OK);
@@ -99,13 +107,11 @@
   if (!document_url.is_valid())
     return PP_ERROR_FAILED;
 
-  FileSystemDispatcher* file_system_dispatcher =
-      RenderThreadImpl::current()->file_system_dispatcher();
   reply_context_ = context->MakeReplyMessageContext();
-  file_system_dispatcher->OpenFileSystem(
-      document_url.GetOrigin(), file_system_type,
-      base::Bind(&PepperFileSystemHost::DidOpenFileSystem, AsWeakPtr()),
-      base::Bind(&PepperFileSystemHost::DidFailOpenFileSystem, AsWeakPtr()));
+  GetFileSystemManager().Open(
+      document_url.GetOrigin(),
+      mojo::ConvertTo<blink::mojom::FileSystemType>(file_system_type),
+      base::BindOnce(&PepperFileSystemHost::DidOpenFileSystem, AsWeakPtr()));
   return PP_OK_COMPLETIONPENDING;
 }
 
@@ -138,4 +144,12 @@
   return PP_OK;
 }
 
+blink::mojom::FileSystemManager& PepperFileSystemHost::GetFileSystemManager() {
+  if (!file_system_manager_) {
+    ChildThreadImpl::current()->GetConnector()->BindInterface(
+        mojom::kBrowserServiceName, mojo::MakeRequest(&file_system_manager_));
+  }
+  return *file_system_manager_;
+}
+
 }  // namespace content
diff --git a/content/renderer/pepper/pepper_file_system_host.h b/content/renderer/pepper/pepper_file_system_host.h
index 88a6421..9017bc2 100644
--- a/content/renderer/pepper/pepper_file_system_host.h
+++ b/content/renderer/pepper/pepper_file_system_host.h
@@ -16,6 +16,7 @@
 #include "ppapi/c/private/ppb_isolated_file_system_private.h"
 #include "ppapi/host/host_message_context.h"
 #include "ppapi/host/resource_host.h"
+#include "third_party/blink/public/mojom/filesystem/file_system.mojom.h"
 #include "url/gurl.h"
 
 namespace content {
@@ -56,7 +57,9 @@
 
  private:
   // Callback for OpenFileSystem.
-  void DidOpenFileSystem(const std::string& name_unused, const GURL& root);
+  void DidOpenFileSystem(const std::string& name_unused,
+                         const GURL& root,
+                         base::File::Error error);
   void DidFailOpenFileSystem(base::File::Error error);
 
   int32_t OnHostMsgOpen(ppapi::host::HostMessageContext* context,
@@ -66,6 +69,8 @@
       const std::string& fsid,
       PP_IsolatedFileSystemType_Private type);
 
+  blink::mojom::FileSystemManager& GetFileSystemManager();
+
   RendererPpapiHost* renderer_ppapi_host_;
   ppapi::host::ReplyMessageContext reply_context_;
 
@@ -73,6 +78,7 @@
   bool opened_;  // whether open is successful.
   GURL root_url_;
   bool called_open_;  // whether open has been called.
+  blink::mojom::FileSystemManagerPtr file_system_manager_;
 
   DISALLOW_COPY_AND_ASSIGN(PepperFileSystemHost);
 };
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 8b0ba56..1ec7b236 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -466,6 +466,15 @@
     }
   }
 
+  if (common_params.post_data) {
+    request.SetHTTPBody(GetWebHTTPBodyForRequestBody(*common_params.post_data));
+    if (!request_params.post_content_type.empty()) {
+      request.AddHTTPHeaderField(
+          WebString::FromASCII(net::HttpRequestHeaders::kContentType),
+          WebString::FromASCII(request_params.post_content_type));
+    }
+  }
+
   if (!web_referrer.IsEmpty() ||
       common_params.referrer.policy != blink::kWebReferrerPolicyDefault) {
     request.SetHTTPReferrer(web_referrer, common_params.referrer.policy);
@@ -2361,10 +2370,6 @@
     render_accessibility_ = new RenderAccessibilityImpl(this, new_mode);
   } else if (!new_mode.has_mode(ui::AXMode::kWebContents) &&
              old_mode.has_mode(ui::AXMode::kWebContents)) {
-    // Note: this isn't called automatically by the destructor because
-    // there'd be no point in calling it in frame teardown, only if there's
-    // an accessibility mode change but the frame is persisting.
-    render_accessibility_->DisableAccessibility();
     delete render_accessibility_;
     render_accessibility_ = nullptr;
   }
@@ -2651,7 +2656,8 @@
   }
   LoadNavigationErrorPageInternal(error_html, GURL(kUnreachableWebDataURL),
                                   error.url(), replace, frame_load_type,
-                                  history_item, std::move(navigation_data));
+                                  history_item, std::move(navigation_data),
+                                  failed_request);
 }
 
 void RenderFrameImpl::LoadNavigationErrorPageForHttpStatusError(
@@ -2671,9 +2677,9 @@
   GetContentClient()->renderer()->PrepareErrorPageForHttpStatusError(
       this, failed_request, unreachable_url, http_status, &error_html, nullptr);
   std::unique_ptr<DocumentState> document_state(BuildDocumentState());
-  LoadNavigationErrorPageInternal(error_html, GURL(kUnreachableWebDataURL),
-                                  unreachable_url, replace, frame_load_type,
-                                  history_item, std::move(document_state));
+  LoadNavigationErrorPageInternal(
+      error_html, GURL(kUnreachableWebDataURL), unreachable_url, replace,
+      frame_load_type, history_item, std::move(document_state), failed_request);
 }
 
 void RenderFrameImpl::LoadNavigationErrorPageInternal(
@@ -2683,12 +2689,13 @@
     bool replace,
     blink::WebFrameLoadType frame_load_type,
     const blink::WebHistoryItem& history_item,
-    std::unique_ptr<blink::WebDocumentLoader::ExtraData> navigation_data) {
+    std::unique_ptr<blink::WebDocumentLoader::ExtraData> navigation_data,
+    const WebURLRequest& failed_request) {
   frame_->CommitDataNavigation(error_html, WebString::FromUTF8("text/html"),
                                WebString::FromUTF8("UTF-8"), error_page_url,
                                error_url, replace, frame_load_type,
                                history_item, false, std::move(navigation_data),
-                               blink::WebNavigationTimings());
+                               &failed_request, blink::WebNavigationTimings());
 }
 
 void RenderFrameImpl::DidMeaningfulLayout(
@@ -2815,7 +2822,8 @@
       error_html, WebString::FromUTF8("text/html"),
       WebString::FromUTF8("UTF-8"), GURL(kUnreachableWebDataURL), error.url(),
       true, blink::WebFrameLoadType::kStandard, blink::WebHistoryItem(), true,
-      nullptr /* navigation_data */, blink::WebNavigationTimings());
+      nullptr /* navigation_data */, nullptr /* original_failed_request */,
+      blink::WebNavigationTimings());
 }
 
 void RenderFrameImpl::ExecuteJavaScript(const base::string16& javascript) {
@@ -3209,8 +3217,6 @@
     CommitFailedNavigationCallback callback) {
   DCHECK(
       !FrameMsg_Navigate_Type::IsSameDocument(common_params.navigation_type));
-  bool is_reload =
-      FrameMsg_Navigate_Type::IsReload(common_params.navigation_type);
   RenderFrameImpl::PrepareRenderViewForNavigation(common_params.url,
                                                   request_params);
 
@@ -3286,7 +3292,10 @@
   // specifically.
   // TODO(clamy): see if initial commits in subframes should be handled
   // separately.
-  bool replace = is_reload || common_params.url == GetLoadingUrl() ||
+  bool is_reload_or_history =
+      FrameMsg_Navigate_Type::IsReload(common_params.navigation_type) ||
+      FrameMsg_Navigate_Type::IsHistory(common_params.navigation_type);
+  bool replace = is_reload_or_history || common_params.url == GetLoadingUrl() ||
                  common_params.should_replace_current_entry;
   std::unique_ptr<HistoryEntry> history_entry;
   if (request_params.page_state.IsValid())
@@ -6513,15 +6522,6 @@
                            ? network::mojom::RequestContextFrameType::kTopLevel
                            : network::mojom::RequestContextFrameType::kNested);
 
-  if (common_params.post_data) {
-    request.SetHTTPBody(GetWebHTTPBodyForRequestBody(*common_params.post_data));
-    if (!request_params.post_content_type.empty()) {
-      request.AddHTTPHeaderField(
-          WebString::FromASCII(net::HttpRequestHeaders::kContentType),
-          WebString::FromASCII(request_params.post_content_type));
-    }
-  }
-
 #if defined(OS_ANDROID)
   request.SetHasUserGesture(common_params.has_user_gesture);
 #endif
@@ -6872,6 +6872,7 @@
         params.history_url_for_data_url, replace, load_type,
         item_for_history_navigation, is_client_redirect,
         std::move(navigation_data),
+        nullptr,  // original_failed_request
         BuildNavigationTimings(params.navigation_start,
                                request_params.navigation_timing,
                                params.input_start));
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 34d787b..163cdcbf 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -1147,7 +1147,8 @@
       bool replace,
       blink::WebFrameLoadType frame_load_type,
       const blink::WebHistoryItem& history_item,
-      std::unique_ptr<blink::WebDocumentLoader::ExtraData> navigation_data);
+      std::unique_ptr<blink::WebDocumentLoader::ExtraData> navigation_data,
+      const blink::WebURLRequest& failed_request);
 
   void HandleJavascriptExecutionResult(const base::string16& javascript,
                                        int id,
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 85d62b2..5cd06054 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -773,7 +773,6 @@
       GetWebMainThreadScheduler()->IPCTaskRunner());
   dom_storage_dispatcher_.reset(new DomStorageDispatcher());
   main_thread_indexed_db_dispatcher_.reset(new IndexedDBDispatcher());
-  file_system_dispatcher_.reset(new FileSystemDispatcher());
 
   vc_manager_.reset(new VideoCaptureImplManager());
 
@@ -1015,7 +1014,6 @@
 
 void RenderThreadImpl::Shutdown() {
   ChildThreadImpl::Shutdown();
-  file_system_dispatcher_.reset();
   WebFileSystemImpl::DeleteThreadSpecificInstance();
   // In a multi-process mode, we immediately exit the renderer.
   // Historically we had a graceful shutdown sequence here but it was
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index a323dbab..8193275f 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -128,7 +128,6 @@
 class BrowserPluginManager;
 class CategorizedWorkerPool;
 class DomStorageDispatcher;
-class FileSystemDispatcher;
 class FrameSwapMessageQueue;
 class GpuVideoAcceleratorFactoriesImpl;
 class IndexedDBDispatcher;
@@ -333,10 +332,6 @@
     return dom_storage_dispatcher_.get();
   }
 
-  FileSystemDispatcher* file_system_dispatcher() const {
-    return file_system_dispatcher_.get();
-  }
-
   MidiMessageFilter* midi_message_filter() {
     return midi_message_filter_.get();
   }
@@ -606,7 +601,6 @@
   std::unique_ptr<blink::scheduler::WebThreadScheduler> main_thread_scheduler_;
   std::unique_ptr<RendererBlinkPlatformImpl> blink_platform_impl_;
   std::unique_ptr<ResourceDispatcher> resource_dispatcher_;
-  std::unique_ptr<FileSystemDispatcher> file_system_dispatcher_;
   std::unique_ptr<URLLoaderThrottleProvider> url_loader_throttle_provider_;
 
   // Used on the renderer and IPC threads.
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index 3832c6d0..48125ba59 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -582,7 +582,7 @@
 //------------------------------------------------------------------------------
 
 WebFileSystem* RendererBlinkPlatformImpl::FileSystem() {
-  return WebFileSystemImpl::ThreadSpecificInstance(default_task_runner_);
+  return WebFileSystemImpl::ThreadSpecificInstance(default_task_runner_.get());
 }
 
 WebString RendererBlinkPlatformImpl::FileSystemCreateOriginIdentifier(
diff --git a/content/shell/browser/shell_url_request_context_getter.cc b/content/shell/browser/shell_url_request_context_getter.cc
index f7440498..4e5baf2d 100644
--- a/content/shell/browser/shell_url_request_context_getter.cc
+++ b/content/shell/browser/shell_url_request_context_getter.cc
@@ -47,6 +47,41 @@
 #endif  // BUILDFLAG(ENABLE_REPORTING)
 
 namespace content {
+namespace {
+
+net::CertVerifier* g_cert_verifier_for_testing = nullptr;
+
+// A CertVerifier that forwards all requests to
+// |g_cert_verifier_for_profile_io_data_testing|. This is used to allow
+// BrowserContexts to have their own std::unique_ptr<net::CertVerifier> while
+// forwarding calls to the shared verifier.
+class WrappedCertVerifierForTesting : public net::CertVerifier {
+ public:
+  WrappedCertVerifierForTesting() = default;
+  ~WrappedCertVerifierForTesting() override = default;
+
+  // CertVerifier implementation
+  int Verify(const RequestParams& params,
+             net::CertVerifyResult* verify_result,
+             net::CompletionOnceCallback callback,
+             std::unique_ptr<Request>* out_req,
+             const net::NetLogWithSource& net_log) override {
+    verify_result->Reset();
+    if (!g_cert_verifier_for_testing)
+      return net::ERR_FAILED;
+    return g_cert_verifier_for_testing->Verify(
+        params, verify_result, std::move(callback), out_req, net_log);
+  }
+  void SetConfig(const Config& config) override {
+    if (!g_cert_verifier_for_testing)
+      return;
+    return g_cert_verifier_for_testing->SetConfig(config);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(WrappedCertVerifierForTesting);
+};
+}  // namespace
 
 ShellURLRequestContextGetter::ShellURLRequestContextGetter(
     bool ignore_certificate_errors,
@@ -87,6 +122,11 @@
   return "en-us,en";
 }
 
+void ShellURLRequestContextGetter::SetCertVerifierForTesting(
+    net::CertVerifier* cert_verifier) {
+  g_cert_verifier_for_testing = cert_verifier;
+}
+
 std::unique_ptr<net::NetworkDelegate>
 ShellURLRequestContextGetter::CreateNetworkDelegate() {
   return std::make_unique<ShellNetworkDelegate>();
@@ -94,6 +134,8 @@
 
 std::unique_ptr<net::CertVerifier>
 ShellURLRequestContextGetter::GetCertVerifier() {
+  if (g_cert_verifier_for_testing)
+    return std::make_unique<WrappedCertVerifierForTesting>();
   return net::CertVerifier::CreateDefault();
 }
 
diff --git a/content/shell/browser/shell_url_request_context_getter.h b/content/shell/browser/shell_url_request_context_getter.h
index 5ce10487..fa20e77 100644
--- a/content/shell/browser/shell_url_request_context_getter.h
+++ b/content/shell/browser/shell_url_request_context_getter.h
@@ -50,6 +50,9 @@
 
   static std::string GetAcceptLanguages();
 
+  // Sets a global CertVerifier to use when initializing all BrowserContexts.
+  static void SetCertVerifierForTesting(net::CertVerifier* cert_verifier);
+
  protected:
   ~ShellURLRequestContextGetter() override;
 
diff --git a/content/shell/test_runner/accessibility_controller.cc b/content/shell/test_runner/accessibility_controller.cc
index cf13413..41d0335a5 100644
--- a/content/shell/test_runner/accessibility_controller.cc
+++ b/content/shell/test_runner/accessibility_controller.cc
@@ -12,6 +12,7 @@
 #include "gin/object_template_builder.h"
 #include "gin/wrappable.h"
 #include "third_party/blink/public/web/blink.h"
+#include "third_party/blink/public/web/web_ax_context.h"
 #include "third_party/blink/public/web/web_document.h"
 #include "third_party/blink/public/web/web_element.h"
 #include "third_party/blink/public/web/web_frame.h"
@@ -148,7 +149,7 @@
 }
 
 void AccessibilityController::Install(blink::WebLocalFrame* frame) {
-  frame->View()->GetSettings()->SetAccessibilityEnabled(true);
+  ax_context_.reset(new blink::WebAXContext(frame->GetDocument()));
   frame->View()->GetSettings()->SetInlineTextBoxAccessibilityEnabled(true);
 
   AccessibilityControllerBindings::Install(weak_factory_.GetWeakPtr(), frame);
diff --git a/content/shell/test_runner/accessibility_controller.h b/content/shell/test_runner/accessibility_controller.h
index e798114..cb78aa1a 100644
--- a/content/shell/test_runner/accessibility_controller.h
+++ b/content/shell/test_runner/accessibility_controller.h
@@ -14,6 +14,7 @@
 #include "v8/include/v8.h"
 
 namespace blink {
+class WebAXContext;
 class WebLocalFrame;
 class WebString;
 class WebView;
@@ -62,6 +63,8 @@
   blink::WebView* web_view();
   WebViewTestProxyBase* web_view_test_proxy_base_;
 
+  std::unique_ptr<blink::WebAXContext> ax_context_;
+
   base::WeakPtrFactory<AccessibilityController> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(AccessibilityController);
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 042edcb..acda69c3 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -71,6 +71,8 @@
     "../public/test/browsing_data_remover_test_util.h",
     "../public/test/cache_test_util.cc",
     "../public/test/cache_test_util.h",
+    "../public/test/content_mock_cert_verifier.cc",
+    "../public/test/content_mock_cert_verifier.h",
     "../public/test/content_test_suite_base.cc",
     "../public/test/content_test_suite_base.h",
     "../public/test/download_test_observer.cc",
@@ -508,6 +510,8 @@
     "../public/test/content_browser_test_utils.cc",
     "../public/test/content_browser_test_utils.h",
     "../public/test/content_browser_test_utils_mac.mm",
+    "../public/test/content_cert_verifier_browser_test.cc",
+    "../public/test/content_cert_verifier_browser_test.h",
     "content_browser_test_utils_internal.cc",
     "content_browser_test_utils_internal.h",
     "content_test_launcher.cc",
diff --git a/content/test/data/form_that_posts_to_echoall_nocache.html b/content/test/data/form_that_posts_to_echoall_nocache.html
new file mode 100644
index 0000000..bbeec6e2
--- /dev/null
+++ b/content/test/data/form_that_posts_to_echoall_nocache.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+  <head></head>
+  <body>
+    <form id="form" method="POST" action="/echoall/nocache">
+      <input type="text" name="text" value="value">
+      <input type="submit">
+    </form>
+  </body>
+</html>
diff --git a/device/BUILD.gn b/device/BUILD.gn
index e16eb14..5ef18e45 100644
--- a/device/BUILD.gn
+++ b/device/BUILD.gn
@@ -290,6 +290,10 @@
       "bluetooth/test/fake_bluetooth_adapter_winrt.h",
       "bluetooth/test/fake_bluetooth_le_advertisement_data_section_winrt.cc",
       "bluetooth/test/fake_bluetooth_le_advertisement_data_section_winrt.h",
+      "bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.cc",
+      "bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.h",
+      "bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.cc",
+      "bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.h",
       "bluetooth/test/fake_bluetooth_le_advertisement_received_event_args_winrt.cc",
       "bluetooth/test/fake_bluetooth_le_advertisement_received_event_args_winrt.h",
       "bluetooth/test/fake_bluetooth_le_advertisement_watcher_winrt.cc",
diff --git a/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.cc b/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.cc
new file mode 100644
index 0000000..27cc8d7
--- /dev/null
+++ b/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.cc
@@ -0,0 +1,37 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.h"
+
+namespace device {
+
+namespace {
+
+using ABI::Windows::Devices::Bluetooth::Advertisement::
+    BluetoothLEAdvertisementPublisherStatus;
+using ABI::Windows::Devices::Bluetooth::BluetoothError;
+
+}  // namespace
+
+FakeBluetoothLEAdvertisementPublisherStatusChangedEventArgsWinrt::
+    FakeBluetoothLEAdvertisementPublisherStatusChangedEventArgsWinrt() =
+        default;
+
+FakeBluetoothLEAdvertisementPublisherStatusChangedEventArgsWinrt::
+    ~FakeBluetoothLEAdvertisementPublisherStatusChangedEventArgsWinrt() =
+        default;
+
+HRESULT
+FakeBluetoothLEAdvertisementPublisherStatusChangedEventArgsWinrt::get_Status(
+    BluetoothLEAdvertisementPublisherStatus* value) {
+  return E_NOTIMPL;
+}
+
+HRESULT
+FakeBluetoothLEAdvertisementPublisherStatusChangedEventArgsWinrt::get_Error(
+    BluetoothError* value) {
+  return E_NOTIMPL;
+}
+
+}  // namespace device
diff --git a/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.h b/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.h
new file mode 100644
index 0000000..58fb676
--- /dev/null
+++ b/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.h
@@ -0,0 +1,39 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef DEVICE_BLUETOOTH_TEST_FAKE_BLUETOOTH_LE_ADVERTISEMENT_PUBLISHER_STATUS_CHANGED_EVENT_ARGS_WINRT_H_
+#define DEVICE_BLUETOOTH_TEST_FAKE_BLUETOOTH_LE_ADVERTISEMENT_PUBLISHER_STATUS_CHANGED_EVENT_ARGS_WINRT_H_
+
+#include <windows.devices.bluetooth.advertisement.h>
+#include <wrl/implements.h>
+
+#include "base/macros.h"
+
+namespace device {
+
+class FakeBluetoothLEAdvertisementPublisherStatusChangedEventArgsWinrt
+    : public Microsoft::WRL::RuntimeClass<
+          Microsoft::WRL::RuntimeClassFlags<
+              Microsoft::WRL::WinRt | Microsoft::WRL::InhibitRoOriginateError>,
+          ABI::Windows::Devices::Bluetooth::Advertisement::
+              IBluetoothLEAdvertisementPublisherStatusChangedEventArgs> {
+ public:
+  FakeBluetoothLEAdvertisementPublisherStatusChangedEventArgsWinrt();
+  ~FakeBluetoothLEAdvertisementPublisherStatusChangedEventArgsWinrt() override;
+
+  // IBluetoothLEAdvertisementPublisherStatusChangedEventArgs:
+  IFACEMETHODIMP get_Status(
+      ABI::Windows::Devices::Bluetooth::Advertisement::
+          BluetoothLEAdvertisementPublisherStatus* value) override;
+  IFACEMETHODIMP get_Error(
+      ABI::Windows::Devices::Bluetooth::BluetoothError* value) override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(
+      FakeBluetoothLEAdvertisementPublisherStatusChangedEventArgsWinrt);
+};
+
+}  // namespace device
+
+#endif  // DEVICE_BLUETOOTH_TEST_FAKE_BLUETOOTH_LE_ADVERTISEMENT_PUBLISHER_STATUS_CHANGED_EVENT_ARGS_WINRT_H_
diff --git a/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.cc b/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.cc
new file mode 100644
index 0000000..3cbe84f
--- /dev/null
+++ b/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.cc
@@ -0,0 +1,74 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.h"
+
+namespace device {
+
+namespace {
+
+using ABI::Windows::Devices::Bluetooth::Advertisement::
+    BluetoothLEAdvertisementPublisher;
+using ABI::Windows::Devices::Bluetooth::Advertisement::
+    BluetoothLEAdvertisementPublisherStatus;
+using ABI::Windows::Devices::Bluetooth::Advertisement::
+    BluetoothLEAdvertisementPublisherStatusChangedEventArgs;
+using ABI::Windows::Devices::Bluetooth::Advertisement::
+    IBluetoothLEAdvertisement;
+using ABI::Windows::Devices::Bluetooth::Advertisement::
+    IBluetoothLEAdvertisementPublisher;
+using ABI::Windows::Foundation::ITypedEventHandler;
+
+}  // namespace
+
+FakeBluetoothLEAdvertisementPublisherWinrt::
+    FakeBluetoothLEAdvertisementPublisherWinrt() = default;
+
+FakeBluetoothLEAdvertisementPublisherWinrt::
+    ~FakeBluetoothLEAdvertisementPublisherWinrt() = default;
+
+HRESULT FakeBluetoothLEAdvertisementPublisherWinrt::get_Status(
+    BluetoothLEAdvertisementPublisherStatus* value) {
+  return E_NOTIMPL;
+}
+
+HRESULT FakeBluetoothLEAdvertisementPublisherWinrt::get_Advertisement(
+    IBluetoothLEAdvertisement** value) {
+  return E_NOTIMPL;
+}
+
+HRESULT FakeBluetoothLEAdvertisementPublisherWinrt::Start() {
+  return E_NOTIMPL;
+}
+
+HRESULT FakeBluetoothLEAdvertisementPublisherWinrt::Stop() {
+  return E_NOTIMPL;
+}
+
+HRESULT FakeBluetoothLEAdvertisementPublisherWinrt::add_StatusChanged(
+    ITypedEventHandler<
+        BluetoothLEAdvertisementPublisher*,
+        BluetoothLEAdvertisementPublisherStatusChangedEventArgs*>* handler,
+    EventRegistrationToken* token) {
+  return E_NOTIMPL;
+}
+
+HRESULT FakeBluetoothLEAdvertisementPublisherWinrt::remove_StatusChanged(
+    EventRegistrationToken token) {
+  return E_NOTIMPL;
+}
+
+FakeBluetoothLEAdvertisementPublisherFactoryWinrt::
+    FakeBluetoothLEAdvertisementPublisherFactoryWinrt() = default;
+
+FakeBluetoothLEAdvertisementPublisherFactoryWinrt::
+    ~FakeBluetoothLEAdvertisementPublisherFactoryWinrt() = default;
+
+HRESULT FakeBluetoothLEAdvertisementPublisherFactoryWinrt::Create(
+    IBluetoothLEAdvertisement* advertisement,
+    IBluetoothLEAdvertisementPublisher** value) {
+  return E_NOTIMPL;
+}
+
+}  // namespace device
diff --git a/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.h b/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.h
new file mode 100644
index 0000000..e679d8e4
--- /dev/null
+++ b/device/bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.h
@@ -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.
+
+#ifndef DEVICE_BLUETOOTH_TEST_FAKE_BLUETOOTH_LE_ADVERTISEMENT_PUBLISHER_WINRT_H_
+#define DEVICE_BLUETOOTH_TEST_FAKE_BLUETOOTH_LE_ADVERTISEMENT_PUBLISHER_WINRT_H_
+
+#include <windows.devices.bluetooth.advertisement.h>
+#include <wrl/implements.h>
+
+#include "base/macros.h"
+
+namespace device {
+
+class FakeBluetoothLEAdvertisementPublisherWinrt
+    : public Microsoft::WRL::RuntimeClass<
+          Microsoft::WRL::RuntimeClassFlags<
+              Microsoft::WRL::WinRt | Microsoft::WRL::InhibitRoOriginateError>,
+          ABI::Windows::Devices::Bluetooth::Advertisement::
+              IBluetoothLEAdvertisementPublisher> {
+ public:
+  FakeBluetoothLEAdvertisementPublisherWinrt();
+  ~FakeBluetoothLEAdvertisementPublisherWinrt() override;
+
+  // IBluetoothLEAdvertisementPublisher:
+  IFACEMETHODIMP get_Status(
+      ABI::Windows::Devices::Bluetooth::Advertisement::
+          BluetoothLEAdvertisementPublisherStatus* value) override;
+  IFACEMETHODIMP get_Advertisement(
+      ABI::Windows::Devices::Bluetooth::Advertisement::
+          IBluetoothLEAdvertisement** value) override;
+  IFACEMETHODIMP Start() override;
+  IFACEMETHODIMP Stop() override;
+  IFACEMETHODIMP add_StatusChanged(
+      ABI::Windows::Foundation::ITypedEventHandler<
+          ABI::Windows::Devices::Bluetooth::Advertisement::
+              BluetoothLEAdvertisementPublisher*,
+          ABI::Windows::Devices::Bluetooth::Advertisement::
+              BluetoothLEAdvertisementPublisherStatusChangedEventArgs*>*
+          handler,
+      EventRegistrationToken* token) override;
+  IFACEMETHODIMP remove_StatusChanged(EventRegistrationToken token) override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakeBluetoothLEAdvertisementPublisherWinrt);
+};
+
+class FakeBluetoothLEAdvertisementPublisherFactoryWinrt
+    : public Microsoft::WRL::RuntimeClass<
+          Microsoft::WRL::RuntimeClassFlags<
+              Microsoft::WRL::WinRt | Microsoft::WRL::InhibitRoOriginateError>,
+          ABI::Windows::Devices::Bluetooth::Advertisement::
+              IBluetoothLEAdvertisementPublisherFactory> {
+ public:
+  FakeBluetoothLEAdvertisementPublisherFactoryWinrt();
+  ~FakeBluetoothLEAdvertisementPublisherFactoryWinrt() override;
+
+  // IBluetoothLEAdvertisementPublisherFactory:
+  IFACEMETHODIMP Create(
+      ABI::Windows::Devices::Bluetooth::Advertisement::
+          IBluetoothLEAdvertisement* advertisement,
+      ABI::Windows::Devices::Bluetooth::Advertisement::
+          IBluetoothLEAdvertisementPublisher** value) override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakeBluetoothLEAdvertisementPublisherFactoryWinrt);
+};
+
+}  // namespace device
+
+#endif  // DEVICE_BLUETOOTH_TEST_FAKE_BLUETOOTH_LE_ADVERTISEMENT_PUBLISHER_WINRT_H_
diff --git a/device/bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.cc b/device/bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.cc
index 149309a..8fea8d3 100644
--- a/device/bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.cc
+++ b/device/bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.cc
@@ -4,8 +4,6 @@
 
 #include "device/bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.h"
 
-#include <wrl/client.h>
-
 #include <utility>
 
 #include "base/win/winrt_storage_util.h"
@@ -14,14 +12,25 @@
 
 namespace {
 
+using ABI::Windows::Devices::Bluetooth::Advertisement::
+    IBluetoothLEManufacturerData;
 using ABI::Windows::Storage::Streams::IBuffer;
 using Microsoft::WRL::ComPtr;
+using Microsoft::WRL::Make;
 
 }  // namespace
 
 FakeBluetoothLEManufacturerData::FakeBluetoothLEManufacturerData(
     uint16_t company_id,
     std::vector<uint8_t> data)
+    : company_id_(company_id) {
+  base::win::CreateIBufferFromData(data.data(),
+                                   static_cast<uint32_t>(data.size()), &data_);
+}
+
+FakeBluetoothLEManufacturerData::FakeBluetoothLEManufacturerData(
+    uint16_t company_id,
+    ComPtr<IBuffer> data)
     : company_id_(company_id), data_(std::move(data)) {}
 
 FakeBluetoothLEManufacturerData::~FakeBluetoothLEManufacturerData() = default;
@@ -36,14 +45,24 @@
 }
 
 HRESULT FakeBluetoothLEManufacturerData::get_Data(IBuffer** value) {
-  ComPtr<IBuffer> buffer;
-  HRESULT hr = base::win::CreateIBufferFromData(
-      data_.data(), static_cast<uint32_t>(data_.size()), &buffer);
-  return SUCCEEDED(hr) ? buffer.CopyTo(value) : hr;
+  return data_.CopyTo(value);
 }
 
 HRESULT FakeBluetoothLEManufacturerData::put_Data(IBuffer* value) {
   return E_NOTIMPL;
 }
 
+FakeBluetoothLEManufacturerDataFactory::
+    FakeBluetoothLEManufacturerDataFactory() = default;
+
+FakeBluetoothLEManufacturerDataFactory::
+    ~FakeBluetoothLEManufacturerDataFactory() = default;
+
+HRESULT FakeBluetoothLEManufacturerDataFactory::Create(
+    uint16_t company_id,
+    IBuffer* data,
+    IBluetoothLEManufacturerData** value) {
+  return Make<FakeBluetoothLEManufacturerData>(company_id, data).CopyTo(value);
+}
+
 }  // namespace device
diff --git a/device/bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.h b/device/bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.h
index 1140a8f..77238793 100644
--- a/device/bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.h
+++ b/device/bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.h
@@ -6,6 +6,7 @@
 #define DEVICE_BLUETOOTH_TEST_FAKE_BLUETOOTH_LE_MANUFACTURER_DATA_WINRT_H_
 
 #include <windows.devices.bluetooth.advertisement.h>
+#include <wrl/client.h>
 #include <wrl/implements.h>
 
 #include <stdint.h>
@@ -25,6 +26,9 @@
  public:
   FakeBluetoothLEManufacturerData(uint16_t company_id,
                                   std::vector<uint8_t> data);
+  FakeBluetoothLEManufacturerData(
+      uint16_t company_id,
+      Microsoft::WRL::ComPtr<ABI::Windows::Storage::Streams::IBuffer> data);
   ~FakeBluetoothLEManufacturerData() override;
 
   // IBluetoothLEManufacturerData:
@@ -37,11 +41,31 @@
 
  private:
   uint16_t company_id_;
-  std::vector<uint8_t> data_;
+  Microsoft::WRL::ComPtr<ABI::Windows::Storage::Streams::IBuffer> data_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeBluetoothLEManufacturerData);
 };
 
+class FakeBluetoothLEManufacturerDataFactory
+    : public Microsoft::WRL::RuntimeClass<
+          Microsoft::WRL::RuntimeClassFlags<
+              Microsoft::WRL::WinRt | Microsoft::WRL::InhibitRoOriginateError>,
+          ABI::Windows::Devices::Bluetooth::Advertisement::
+              IBluetoothLEManufacturerDataFactory> {
+ public:
+  FakeBluetoothLEManufacturerDataFactory();
+  ~FakeBluetoothLEManufacturerDataFactory() override;
+
+  // IBluetoothLEManufacturerDataFactory:
+  IFACEMETHODIMP Create(uint16_t company_id,
+                        ABI::Windows::Storage::Streams::IBuffer* data,
+                        ABI::Windows::Devices::Bluetooth::Advertisement::
+                            IBluetoothLEManufacturerData** value) override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakeBluetoothLEManufacturerDataFactory);
+};
+
 }  // namespace device
 
 #endif  // DEVICE_BLUETOOTH_TEST_FAKE_BLUETOOTH_LE_MANUFACTURER_DATA_WINRT_H_
diff --git a/device/fido/fake_fido_discovery_unittest.cc b/device/fido/fake_fido_discovery_unittest.cc
index d3a8c37..61a9bef 100644
--- a/device/fido/fake_fido_discovery_unittest.cc
+++ b/device/fido/fake_fido_discovery_unittest.cc
@@ -118,9 +118,6 @@
 
   auto device0 = std::make_unique<MockFidoDevice>();
   EXPECT_CALL(*device0, GetId()).WillOnce(::testing::Return("device0"));
-  device0->ExpectCtap2CommandAndRespondWith(
-      CtapRequestCommand::kAuthenticatorGetInfo,
-      test_data::kTestAuthenticatorGetInfoResponse);
   base::RunLoop device0_done;
   EXPECT_CALL(observer, DeviceAdded(&discovery, ::testing::_))
       .WillOnce(testing::InvokeWithoutArgs(
@@ -135,9 +132,6 @@
 
   auto device1 = std::make_unique<MockFidoDevice>();
   EXPECT_CALL(*device1, GetId()).WillOnce(::testing::Return("device1"));
-  device1->ExpectCtap2CommandAndRespondWith(
-      CtapRequestCommand::kAuthenticatorGetInfo,
-      test_data::kTestAuthenticatorGetInfoResponse);
   base::RunLoop device1_done;
   EXPECT_CALL(observer, DeviceAdded(&discovery, ::testing::_))
       .WillOnce(testing::InvokeWithoutArgs(
diff --git a/device/fido/fido_authenticator.h b/device/fido/fido_authenticator.h
index 5520f6b..b2a254d 100644
--- a/device/fido/fido_authenticator.h
+++ b/device/fido/fido_authenticator.h
@@ -10,6 +10,7 @@
 #include "base/callback_forward.h"
 #include "base/component_export.h"
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "device/fido/authenticator_get_assertion_response.h"
 #include "device/fido/authenticator_make_credential_response.h"
@@ -36,6 +37,10 @@
   FidoAuthenticator() = default;
   virtual ~FidoAuthenticator() = default;
 
+  // Sends GetInfo request to connected authenticator. Once response to GetInfo
+  // call is received, |callback| is invoked. Below MakeCredential() and
+  // GetAssertion() must only called after |callback| is invoked.
+  virtual void InitializeAuthenticator(base::OnceClosure callback) = 0;
   virtual void MakeCredential(
       CtapMakeCredentialRequest request,
       MakeCredentialCallback callback) = 0;
@@ -45,6 +50,7 @@
   virtual std::string GetId() const = 0;
   virtual const AuthenticatorSupportedOptions& Options() const = 0;
   virtual FidoTransportProtocol AuthenticatorTransport() const = 0;
+  virtual base::WeakPtr<FidoAuthenticator> GetWeakPtr() = 0;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(FidoAuthenticator);
diff --git a/device/fido/fido_constants.h b/device/fido/fido_constants.h
index b3eb419..2dc2a213 100644
--- a/device/fido/fido_constants.h
+++ b/device/fido/fido_constants.h
@@ -102,7 +102,6 @@
   kCtap2ErrTooManyElements = 0x17,
   kCtap2ErrExtensionNotSupported = 0x18,
   kCtap2ErrCredentialExcluded = 0x19,
-  kCtap2ErrCredentialNotValid = 0x20,
   kCtap2ErrProcesssing = 0x21,
   kCtap2ErrInvalidCredential = 0x22,
   kCtap2ErrUserActionPending = 0x23,
@@ -156,7 +155,6 @@
           CtapDeviceResponseCode::kCtap2ErrTooManyElements,
           CtapDeviceResponseCode::kCtap2ErrExtensionNotSupported,
           CtapDeviceResponseCode::kCtap2ErrCredentialExcluded,
-          CtapDeviceResponseCode::kCtap2ErrCredentialNotValid,
           CtapDeviceResponseCode::kCtap2ErrProcesssing,
           CtapDeviceResponseCode::kCtap2ErrInvalidCredential,
           CtapDeviceResponseCode::kCtap2ErrUserActionPending,
diff --git a/device/fido/fido_device.h b/device/fido/fido_device.h
index 67f1111..4f57e99 100644
--- a/device/fido/fido_device.h
+++ b/device/fido/fido_device.h
@@ -47,6 +47,7 @@
   virtual void Cancel() = 0;
   virtual std::string GetId() const = 0;
   virtual FidoTransportProtocol DeviceTransport() const = 0;
+  virtual base::WeakPtr<FidoDevice> GetWeakPtr() = 0;
 
   // Sends a speculative AuthenticatorGetInfo request to determine whether the
   // device supports the CTAP2 protocol, and initializes supported_protocol_
@@ -68,8 +69,6 @@
   State state() const { return state_; }
 
  protected:
-  virtual base::WeakPtr<FidoDevice> GetWeakPtr() = 0;
-
   void OnDeviceInfoReceived(base::OnceClosure done,
                             base::Optional<std::vector<uint8_t>> response);
   void SetDeviceInfo(AuthenticatorGetInfoResponse device_info);
diff --git a/device/fido/fido_device_authenticator.cc b/device/fido/fido_device_authenticator.cc
index 276cf55..afb1d8a 100644
--- a/device/fido/fido_device_authenticator.cc
+++ b/device/fido/fido_device_authenticator.cc
@@ -6,7 +6,9 @@
 
 #include <utility>
 
+#include "base/bind.h"
 #include "base/logging.h"
+#include "base/threading/sequenced_task_runner_handle.h"
 #include "device/fido/authenticator_supported_options.h"
 #include "device/fido/ctap_get_assertion_request.h"
 #include "device/fido/ctap_make_credential_request.h"
@@ -17,14 +19,22 @@
 namespace device {
 
 FidoDeviceAuthenticator::FidoDeviceAuthenticator(FidoDevice* device)
-    : device_(device) {
-  DCHECK(device_->SupportedProtocolIsInitialized());
-}
+    : device_(device), weak_factory_(this) {}
 FidoDeviceAuthenticator::~FidoDeviceAuthenticator() = default;
 
+void FidoDeviceAuthenticator::InitializeAuthenticator(
+    base::OnceClosure callback) {
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE,
+      base::BindOnce(&FidoDevice::DiscoverSupportedProtocolAndDeviceInfo,
+                     device()->GetWeakPtr(), std::move(callback)));
+}
+
 void FidoDeviceAuthenticator::MakeCredential(CtapMakeCredentialRequest request,
                                              MakeCredentialCallback callback) {
   DCHECK(!task_);
+  DCHECK(device_->SupportedProtocolIsInitialized())
+      << "InitializeAuthenticator() must be called first.";
   // TODO(martinkr): Change FidoTasks to take all request parameters by const
   // reference, so we can avoid copying these from the RequestHandler.
   task_ = std::make_unique<MakeCredentialTask>(device_, std::move(request),
@@ -33,6 +43,8 @@
 
 void FidoDeviceAuthenticator::GetAssertion(CtapGetAssertionRequest request,
                                            GetAssertionCallback callback) {
+  DCHECK(device_->SupportedProtocolIsInitialized())
+      << "InitializeAuthenticator() must be called first.";
   task_ = std::make_unique<GetAssertionTask>(device_, std::move(request),
                                              std::move(callback));
 }
@@ -72,4 +84,8 @@
   task_ = std::move(task);
 }
 
+base::WeakPtr<FidoAuthenticator> FidoDeviceAuthenticator::GetWeakPtr() {
+  return weak_factory_.GetWeakPtr();
+}
+
 }  // namespace device
diff --git a/device/fido/fido_device_authenticator.h b/device/fido/fido_device_authenticator.h
index bba14dc..e755f1f 100644
--- a/device/fido/fido_device_authenticator.h
+++ b/device/fido/fido_device_authenticator.h
@@ -11,6 +11,7 @@
 
 #include "base/component_export.h"
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "device/fido/fido_authenticator.h"
 
@@ -31,6 +32,7 @@
   ~FidoDeviceAuthenticator() override;
 
   // FidoAuthenticator:
+  void InitializeAuthenticator(base::OnceClosure callback) override;
   void MakeCredential(
       CtapMakeCredentialRequest request,
       MakeCredentialCallback callback) override;
@@ -40,6 +42,7 @@
   std::string GetId() const override;
   const AuthenticatorSupportedOptions& Options() const override;
   FidoTransportProtocol AuthenticatorTransport() const override;
+  base::WeakPtr<FidoAuthenticator> GetWeakPtr() override;
 
  protected:
   void OnCtapMakeCredentialResponseReceived(
@@ -55,6 +58,7 @@
  private:
   FidoDevice* const device_;
   std::unique_ptr<FidoTask> task_;
+  base::WeakPtrFactory<FidoDeviceAuthenticator> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(FidoDeviceAuthenticator);
 };
diff --git a/device/fido/fido_discovery.cc b/device/fido/fido_discovery.cc
index 4bab356..f96ac1ea 100644
--- a/device/fido/fido_discovery.cc
+++ b/device/fido/fido_discovery.cc
@@ -136,11 +136,8 @@
   if (!result.second) {
     return false;  // Duplicate device id.
   }
-  FidoDevice* device_ptr = result.first->second.get();
-  // Determine the device protocol version before notifying observers.
-  device_ptr->DiscoverSupportedProtocolAndDeviceInfo(
-      base::BindOnce(&FidoDiscovery::NotifyDeviceAdded,
-                     weak_factory_.GetWeakPtr(), device_ptr));
+
+  NotifyDeviceAdded(result.first->second.get());
   return true;
 }
 
diff --git a/device/fido/fido_discovery_unittest.cc b/device/fido/fido_discovery_unittest.cc
index 922c559..46827b8 100644
--- a/device/fido/fido_discovery_unittest.cc
+++ b/device/fido/fido_discovery_unittest.cc
@@ -102,9 +102,6 @@
   // Expect successful insertion.
   auto device0 = std::make_unique<MockFidoDevice>();
   auto* device0_raw = device0.get();
-  device0->ExpectCtap2CommandAndRespondWith(
-      CtapRequestCommand::kAuthenticatorGetInfo,
-      test_data::kTestAuthenticatorGetInfoResponse);
   base::RunLoop device0_done;
   EXPECT_CALL(observer, DeviceAdded(&discovery, device0_raw))
       .WillOnce(testing::InvokeWithoutArgs(
@@ -113,16 +110,11 @@
   EXPECT_TRUE(discovery.AddDevice(std::move(device0)));
   device0_done.Run();
   ::testing::Mock::VerifyAndClearExpectations(&observer);
-  // Device should have been initialized as a CTAP device.
-  EXPECT_EQ(ProtocolVersion::kCtap, device0_raw->supported_protocol());
-  EXPECT_TRUE(device0_raw->device_info());
 
   // Expect successful insertion.
   base::RunLoop device1_done;
   auto device1 = std::make_unique<MockFidoDevice>();
   auto* device1_raw = device1.get();
-  device1->ExpectCtap2CommandAndRespondWith(
-      CtapRequestCommand::kAuthenticatorGetInfo, base::nullopt);
   EXPECT_CALL(observer, DeviceAdded(&discovery, device1_raw))
       .WillOnce(testing::InvokeWithoutArgs(
           [&device1_done]() { device1_done.Quit(); }));
@@ -130,9 +122,6 @@
   EXPECT_TRUE(discovery.AddDevice(std::move(device1)));
   device1_done.Run();
   ::testing::Mock::VerifyAndClearExpectations(&observer);
-  // Device should have been initialized as a U2F device.
-  EXPECT_EQ(ProtocolVersion::kU2f, device1_raw->supported_protocol());
-  EXPECT_FALSE(device1_raw->device_info());
 
   // Inserting a device with an already present id should be prevented.
   auto device1_dup = std::make_unique<MockFidoDevice>();
diff --git a/device/fido/fido_request_handler.h b/device/fido/fido_request_handler.h
index af81cf7..406c775 100644
--- a/device/fido/fido_request_handler.h
+++ b/device/fido/fido_request_handler.h
@@ -94,8 +94,6 @@
       // authenticator.
       case CtapDeviceResponseCode::kCtap2ErrCredentialExcluded:
         return FidoReturnCode::kUserConsentButCredentialExcluded;
-      case CtapDeviceResponseCode::kCtap2ErrInvalidCredential:
-      case CtapDeviceResponseCode::kCtap2ErrCredentialNotValid:
       case CtapDeviceResponseCode::kCtap2ErrNoCredentials:
         return FidoReturnCode::kUserConsentButCredentialNotRecognized;
 
@@ -115,6 +113,17 @@
                          FidoReturnCode::kUserConsentDenied)
                    : base::nullopt;
 
+      // This error is returned by some authenticators (e.g. the "Yubico FIDO
+      // 2" CTAP2 USB keys) during GetAssertion **before the user interacted
+      // with the device**. The authenticator does this to avoid blinking (and
+      // possibly asking the user for their PIN) for requests it knows
+      // beforehand it cannot handle.
+      //
+      // Ignore this error to avoid canceling the request without user
+      // interaction.
+      case CtapDeviceResponseCode::kCtap2ErrInvalidCredential:
+        return base::nullopt;
+
       // For all other errors, the authenticator will be dropped, and other
       // authenticators may continue.
       default:
diff --git a/device/fido/fido_request_handler_base.cc b/device/fido/fido_request_handler_base.cc
index f8b72ec4..7886f009 100644
--- a/device/fido/fido_request_handler_base.cc
+++ b/device/fido/fido_request_handler_base.cc
@@ -119,7 +119,7 @@
   if (authenticator == active_authenticators_.end())
     return;
 
-  DispatchRequest(authenticator->second.get());
+  InitializeAuthenticatorAndDispatchRequest(authenticator->second.get());
 }
 
 void FidoRequestHandlerBase::CancelOngoingTasks(
@@ -214,11 +214,14 @@
   if (should_delay_request)
     return;
 
-  // Post |DispatchRequest| into its own task. This avoids hairpinning, even
-  // if the authenticator immediately invokes the request callback.
+  // Post |InitializeAuthenticatorAndDispatchRequest| into its own task. This
+  // avoids hairpinning, even if the authenticator immediately invokes the
+  // request callback.
   base::SequencedTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(&FidoRequestHandlerBase::DispatchRequest,
-                                GetWeakPtr(), authenticator_ptr));
+      FROM_HERE,
+      base::BindOnce(
+          &FidoRequestHandlerBase::InitializeAuthenticatorAndDispatchRequest,
+          GetWeakPtr(), authenticator_ptr));
 }
 
 void FidoRequestHandlerBase::SetPlatformAuthenticatorOrMarkUnavailable(
@@ -247,4 +250,11 @@
   observer_->OnTransportAvailabilityEnumerated(transport_availability_info_);
 }
 
+void FidoRequestHandlerBase::InitializeAuthenticatorAndDispatchRequest(
+    FidoAuthenticator* authenticator) {
+  authenticator->InitializeAuthenticator(
+      base::BindOnce(&FidoRequestHandlerBase::DispatchRequest,
+                     weak_factory_.GetWeakPtr(), authenticator));
+}
+
 }  // namespace device
diff --git a/device/fido/fido_request_handler_base.h b/device/fido/fido_request_handler_base.h
index 9871dbb7..fa1f960 100644
--- a/device/fido/fido_request_handler_base.h
+++ b/device/fido/fido_request_handler_base.h
@@ -171,6 +171,12 @@
   void AddAuthenticator(std::unique_ptr<FidoAuthenticator> authenticator);
   void NotifyObserverTransportAvailability();
 
+  // Invokes FidoAuthenticator::InitializeAuthenticator(), followed by
+  // DispatchRequest(). InitializeAuthenticator() sends a GetInfo command
+  // to FidoDeviceAuthenticator instances in order to determine their protocol
+  // versions before a request can be dispatched.
+  void InitializeAuthenticatorAndDispatchRequest(FidoAuthenticator*);
+
   AuthenticatorMap active_authenticators_;
   std::vector<std::unique_ptr<FidoDiscovery>> discoveries_;
   TransportAvailabilityObserver* observer_ = nullptr;
diff --git a/device/fido/fido_request_handler_unittest.cc b/device/fido/fido_request_handler_unittest.cc
index 427ae00..94948f9 100644
--- a/device/fido/fido_request_handler_unittest.cc
+++ b/device/fido/fido_request_handler_unittest.cc
@@ -467,6 +467,9 @@
   // the authenticator gets injected and used.
   auto device = MockFidoDevice::MakeCtap();
   EXPECT_CALL(*device, GetId()).WillRepeatedly(testing::Return("device0"));
+  device->ExpectCtap2CommandAndRespondWith(
+      CtapRequestCommand::kAuthenticatorGetInfo,
+      test_data::kTestGetInfoResponsePlatformDevice);
   // Device returns success response.
   device->ExpectRequestAndRespondWith(std::vector<uint8_t>(),
                                       CreateFakeSuccessDeviceResponse());
@@ -500,6 +503,9 @@
   auto device = MockFidoDevice::MakeCtap();
   EXPECT_CALL(*device, GetId()).WillRepeatedly(testing::Return("device0"));
   // Device returns success response.
+  device->ExpectCtap2CommandAndRespondWith(
+      CtapRequestCommand::kAuthenticatorGetInfo,
+      test_data::kTestAuthenticatorGetInfoResponse);
   device->ExpectRequestAndRespondWith(std::vector<uint8_t>(),
                                       CreateFakeSuccessDeviceResponse());
   device->SetDeviceTransport(FidoTransportProtocol::kInternal);
diff --git a/device/fido/get_assertion_handler_unittest.cc b/device/fido/get_assertion_handler_unittest.cc
index 7460e3c9..57c284c8 100644
--- a/device/fido/get_assertion_handler_unittest.cc
+++ b/device/fido/get_assertion_handler_unittest.cc
@@ -533,6 +533,9 @@
   EXPECT_CALL(*device, GetId()).WillRepeatedly(testing::Return("device0"));
   device->SetDeviceTransport(FidoTransportProtocol::kInternal);
   device->ExpectCtap2CommandAndRespondWith(
+      CtapRequestCommand::kAuthenticatorGetInfo,
+      test_data::kTestGetInfoResponsePlatformDevice);
+  device->ExpectCtap2CommandAndRespondWith(
       CtapRequestCommand::kAuthenticatorGetAssertion,
       test_data::kTestGetAssertionResponse);
   set_mock_platform_device(std::move(device));
@@ -592,15 +595,13 @@
 // cancelled.
 TEST_F(FidoGetAssertionHandlerTest,
        TestRequestWithOperationDeniedErrorPlatform) {
-  auto platform_device = MockFidoDevice::MakeCtap(
-      ReadCTAPGetInfoResponse(test_data::kTestGetInfoResponsePlatformDevice));
+  auto platform_device = MockFidoDevice::MakeCtapWithGetInfoExpectation(
+      test_data::kTestGetInfoResponsePlatformDevice);
   platform_device->SetDeviceTransport(FidoTransportProtocol::kInternal);
   platform_device->ExpectCtap2CommandAndRespondWithError(
       CtapRequestCommand::kAuthenticatorGetAssertion,
       CtapDeviceResponseCode::kCtap2ErrOperationDenied,
       base::TimeDelta::FromMicroseconds(10));
-  EXPECT_CALL(*platform_device, GetId())
-      .WillRepeatedly(testing::Return("device0"));
   set_mock_platform_device(std::move(platform_device));
 
   auto other_device = MockFidoDevice::MakeCtapWithGetInfoExpectation();
diff --git a/device/fido/get_assertion_task_unittest.cc b/device/fido/get_assertion_task_unittest.cc
index 0355efd..8f0718f4 100644
--- a/device/fido/get_assertion_task_unittest.cc
+++ b/device/fido/get_assertion_task_unittest.cc
@@ -208,7 +208,7 @@
       get_assertion_callback_receiver().callback());
 
   get_assertion_callback_receiver().WaitForCallback();
-  EXPECT_EQ(CtapDeviceResponseCode::kCtap2ErrCredentialNotValid,
+  EXPECT_EQ(CtapDeviceResponseCode::kCtap2ErrNoCredentials,
             get_assertion_callback_receiver().status());
   EXPECT_FALSE(get_assertion_callback_receiver().value());
 }
diff --git a/device/fido/mac/authenticator.h b/device/fido/mac/authenticator.h
index d03d06f..090e643 100644
--- a/device/fido/mac/authenticator.h
+++ b/device/fido/mac/authenticator.h
@@ -11,6 +11,7 @@
 #include "base/component_export.h"
 #include "base/mac/availability.h"
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "base/strings/string_piece_forward.h"
 #include "device/fido/fido_authenticator.h"
 #include "device/fido/fido_transport_protocol.h"
@@ -48,6 +49,7 @@
       const CtapGetAssertionRequest& request);
 
   // FidoAuthenticator
+  void InitializeAuthenticator(base::OnceClosure callback) override;
   void MakeCredential(CtapMakeCredentialRequest request,
                       MakeCredentialCallback callback) override;
   void GetAssertion(CtapGetAssertionRequest request,
@@ -56,6 +58,7 @@
   std::string GetId() const override;
   const AuthenticatorSupportedOptions& Options() const override;
   FidoTransportProtocol AuthenticatorTransport() const override;
+  base::WeakPtr<FidoAuthenticator> GetWeakPtr() override;
 
  private:
   TouchIdAuthenticator(std::string keychain_access_group,
@@ -73,6 +76,8 @@
 
   std::unique_ptr<Operation> operation_;
 
+  base::WeakPtrFactory<TouchIdAuthenticator> weak_factory_;
+
  private:
   DISALLOW_COPY_AND_ASSIGN(TouchIdAuthenticator);
 };
diff --git a/device/fido/mac/authenticator.mm b/device/fido/mac/authenticator.mm
index d422d58c..b5e03ce 100644
--- a/device/fido/mac/authenticator.mm
+++ b/device/fido/mac/authenticator.mm
@@ -8,12 +8,14 @@
 
 #import <LocalAuthentication/LocalAuthentication.h>
 
+#include "base/bind.h"
 #include "base/feature_list.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/optional.h"
 #include "base/stl_util.h"
 #include "base/strings/string_piece.h"
+#include "base/threading/sequenced_task_runner_handle.h"
 #include "device/base/features.h"
 #include "device/fido/authenticator_supported_options.h"
 #include "device/fido/ctap_get_assertion_request.h"
@@ -87,6 +89,11 @@
   return false;
 }
 
+void TouchIdAuthenticator::InitializeAuthenticator(base::OnceClosure callback) {
+  base::SequencedTaskRunnerHandle::Get()->PostTask(FROM_HERE,
+                                                   std::move(callback));
+}
+
 void TouchIdAuthenticator::MakeCredential(CtapMakeCredentialRequest request,
                                           MakeCredentialCallback callback) {
   if (__builtin_available(macOS 10.12.2, *)) {
@@ -150,10 +157,15 @@
   return options;
 }
 
+base::WeakPtr<FidoAuthenticator> TouchIdAuthenticator::GetWeakPtr() {
+  return weak_factory_.GetWeakPtr();
+}
+
 TouchIdAuthenticator::TouchIdAuthenticator(std::string keychain_access_group,
                                            std::string metadata_secret)
     : keychain_access_group_(std::move(keychain_access_group)),
-      metadata_secret_(std::move(metadata_secret)) {}
+      metadata_secret_(std::move(metadata_secret)),
+      weak_factory_(this) {}
 
 }  // namespace mac
 }  // namespace fido
diff --git a/device/fido/make_credential_handler_unittest.cc b/device/fido/make_credential_handler_unittest.cc
index 122d777..0ffd560f 100644
--- a/device/fido/make_credential_handler_unittest.cc
+++ b/device/fido/make_credential_handler_unittest.cc
@@ -367,6 +367,9 @@
   EXPECT_CALL(*platform_device, GetId())
       .WillRepeatedly(testing::Return("device0"));
   platform_device->ExpectCtap2CommandAndRespondWith(
+      CtapRequestCommand::kAuthenticatorGetInfo,
+      test_data::kTestGetInfoResponsePlatformDevice);
+  platform_device->ExpectCtap2CommandAndRespondWith(
       CtapRequestCommand::kAuthenticatorMakeCredential,
       test_data::kTestMakeCredentialResponse);
   set_mock_platform_device(std::move(platform_device));
@@ -417,6 +420,9 @@
   platform_device->SetDeviceTransport(FidoTransportProtocol::kInternal);
   EXPECT_CALL(*platform_device, GetId())
       .WillRepeatedly(testing::Return("device0"));
+  platform_device->ExpectCtap2CommandAndRespondWith(
+      CtapRequestCommand::kAuthenticatorGetInfo,
+      test_data::kTestAuthenticatorGetInfoResponse);
   set_mock_platform_device(std::move(platform_device));
 
   auto request_handler =
@@ -517,14 +523,12 @@
 // FidoReturnCode::kUserConsentDenied.
 TEST_F(FidoMakeCredentialHandlerTest,
        TestRequestWithOperationDeniedErrorPlatform) {
-  auto platform_device = MockFidoDevice::MakeCtap(
-      ReadCTAPGetInfoResponse(test_data::kTestGetInfoResponsePlatformDevice));
+  auto platform_device = MockFidoDevice::MakeCtapWithGetInfoExpectation(
+      test_data::kTestGetInfoResponsePlatformDevice);
   platform_device->SetDeviceTransport(FidoTransportProtocol::kInternal);
   platform_device->ExpectCtap2CommandAndRespondWithError(
       CtapRequestCommand::kAuthenticatorMakeCredential,
       CtapDeviceResponseCode::kCtap2ErrOperationDenied);
-  EXPECT_CALL(*platform_device, GetId())
-      .WillRepeatedly(testing::Return("device0"));
   set_mock_platform_device(std::move(platform_device));
 
   auto request_handler =
diff --git a/device/fido/strings/fido_strings_kn.xtb b/device/fido/strings/fido_strings_kn.xtb
index 4ecb12ba..924ca65 100644
--- a/device/fido/strings/fido_strings_kn.xtb
+++ b/device/fido/strings/fido_strings_kn.xtb
@@ -1,4 +1,5 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="kn">
+<translation id="6082592655150610743"><ph name="APP_NAME" /> ನಲ್ಲಿ ನಿಮ್ಮ ಗುರುತನ್ನು ದೃಢೀಕರಿಸಿ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/device/fido/strings/fido_strings_zh-CN.xtb b/device/fido/strings/fido_strings_zh-CN.xtb
index c7d76e8..94b18130 100644
--- a/device/fido/strings/fido_strings_zh-CN.xtb
+++ b/device/fido/strings/fido_strings_zh-CN.xtb
@@ -1,4 +1,5 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-CN">
+<translation id="6082592655150610743">在“<ph name="APP_NAME" />”上验证您的身份</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/device/fido/u2f_sign_operation.cc b/device/fido/u2f_sign_operation.cc
index 2331918c..9ed577d 100644
--- a/device/fido/u2f_sign_operation.cc
+++ b/device/fido/u2f_sign_operation.cc
@@ -84,8 +84,7 @@
     case apdu::ApduResponse::Status::SW_NO_ERROR: {
       if (is_fake_enrollment) {
         std::move(callback())
-            .Run(CtapDeviceResponseCode::kCtap2ErrCredentialNotValid,
-                 base::nullopt);
+            .Run(CtapDeviceResponseCode::kCtap2ErrNoCredentials, base::nullopt);
       } else {
         auto application_parameter =
             application_parameter_type == ApplicationParameterType::kPrimary
diff --git a/device/fido/u2f_sign_operation_unittest.cc b/device/fido/u2f_sign_operation_unittest.cc
index 905203e..3c35a0d1 100644
--- a/device/fido/u2f_sign_operation_unittest.cc
+++ b/device/fido/u2f_sign_operation_unittest.cc
@@ -222,7 +222,7 @@
   u2f_sign->Start();
   sign_callback_receiver().WaitForCallback();
 
-  EXPECT_EQ(CtapDeviceResponseCode::kCtap2ErrCredentialNotValid,
+  EXPECT_EQ(CtapDeviceResponseCode::kCtap2ErrNoCredentials,
             sign_callback_receiver().status());
   EXPECT_FALSE(sign_callback_receiver().value());
 }
@@ -253,7 +253,7 @@
   u2f_sign->Start();
   sign_callback_receiver().WaitForCallback();
 
-  EXPECT_EQ(CtapDeviceResponseCode::kCtap2ErrCredentialNotValid,
+  EXPECT_EQ(CtapDeviceResponseCode::kCtap2ErrNoCredentials,
             sign_callback_receiver().status());
   EXPECT_FALSE(sign_callback_receiver().value());
 }
diff --git a/device/vr/public/mojom/README.md b/device/vr/public/mojom/README.md
index a803ea92..ad481a1 100644
--- a/device/vr/public/mojom/README.md
+++ b/device/vr/public/mojom/README.md
@@ -18,9 +18,9 @@
 content back to a display other than chrome. The common case for this is Head
 Mounted Displays (HMD), like Vive, Oculus, or Daydream.
 
-## Enviroment Integration
-This type of session allows for enviroment integration by providing functions
-that allow the site to query the enviroment, such as HitTest. A Enviroment
+## Environment Integration
+This type of session allows for environment integration by providing functions
+that allow the site to query the environment, such as HitTest. A Environment
 Integration session may also supply data in addition to the pose, such as a
 camera frame.
 
diff --git a/device/vr/public/mojom/vr_service.mojom b/device/vr/public/mojom/vr_service.mojom
index 8dda10d..e752a07 100644
--- a/device/vr/public/mojom/vr_service.mojom
+++ b/device/vr/public/mojom/vr_service.mojom
@@ -59,7 +59,7 @@
 // XRFrameDataProvider. It must always be present. Other interfaces are set as
 // apropriate based on the session creation options. (for example, an immersive
 // session ought to have a XRPresentationConnection to submit the frames to the
-// immersive enviroment).
+// immersive environment).
 // The XRSessionClient request must be fulfilled for the session to get
 // information about the device it is connected to, such as focus and blur
 // events, changes to view or stage parameters, or exit present calls initiated
@@ -73,7 +73,7 @@
   // info to more sensible places so that this doesn't need to be sent here.
   VRDisplayInfo display_info;
   XRPresentationConnection? submit_frame_sink;
-  XREnviromentIntegrationProvider? enviroment_provider;
+  XREnvironmentIntegrationProvider? environment_provider;
 };
 
 // This structure contains the infomation and interfaces needed to create a two
@@ -314,14 +314,14 @@
   GetFrameData() => (XRFrameData? frame_data);
 };
 
-// Provides functionality for integrating enviroment information into an
+// Provides functionality for integrating environment information into an
 // XRSession. For example, some AR sessions would implement hit test to allow
 // developers to get the information about the world that its sensors supply.
-interface XREnviromentIntegrationProvider {
+interface XREnvironmentIntegrationProvider {
   // Different devices can have different native orientations - 0 is the native
   // orientation, and then increments of 90 degrees from there. Session geometry
-  // is needed by the device when integrating enviroment image data, i.e. camera
-  // feeds, into a session.
+  // is needed by the device when integrating environment image data, i.e.
+  // camera feeds, into a session.
   UpdateSessionGeometry(
       gfx.mojom.Size frame_size,
       display.mojom.Rotation display_rotation);
diff --git a/device/vr/vr_device_base.cc b/device/vr/vr_device_base.cc
index 8c7d18fc..af19fab1 100644
--- a/device/vr/vr_device_base.cc
+++ b/device/vr/vr_device_base.cc
@@ -105,7 +105,7 @@
 
 void VRDeviceBase::RequestHitTest(
     mojom::XRRayPtr ray,
-    mojom::XREnviromentIntegrationProvider::RequestHitTestCallback callback) {
+    mojom::XREnvironmentIntegrationProvider::RequestHitTestCallback callback) {
   NOTREACHED() << "Unexpected call to a device without hit-test support";
   std::move(callback).Run(base::nullopt);
 }
@@ -113,17 +113,18 @@
 void VRDeviceBase::ReturnNonImmersiveSession(
     mojom::XRRuntime::RequestSessionCallback callback) {
   mojom::XRFrameDataProviderPtr data_provider;
-  mojom::XREnviromentIntegrationProviderPtr enviroment_provider;
+  mojom::XREnvironmentIntegrationProviderPtr environment_provider;
   mojom::XRSessionControllerPtr controller;
-  magic_window_sessions_.push_back(std::make_unique<VRDisplayImpl>(
-      this, mojo::MakeRequest(&data_provider),
-      mojo::MakeRequest(&enviroment_provider), mojo::MakeRequest(&controller)));
+  magic_window_sessions_.push_back(
+      std::make_unique<VRDisplayImpl>(this, mojo::MakeRequest(&data_provider),
+                                      mojo::MakeRequest(&environment_provider),
+                                      mojo::MakeRequest(&controller)));
 
   auto session = mojom::XRSession::New();
   session->data_provider = data_provider.PassInterface();
   // TODO(http://crbug.com/876135) Not all sessions want the environment
   // provider. This should be refactored to only be passed when requested.
-  session->enviroment_provider = enviroment_provider.PassInterface();
+  session->environment_provider = environment_provider.PassInterface();
   if (display_info_) {
     session->display_info = display_info_.Clone();
   }
diff --git a/device/vr/vr_device_base.h b/device/vr/vr_device_base.h
index b6bac22..8d10ef5 100644
--- a/device/vr/vr_device_base.h
+++ b/device/vr/vr_device_base.h
@@ -35,7 +35,7 @@
 
   virtual void RequestHitTest(
       mojom::XRRayPtr ray,
-      mojom::XREnviromentIntegrationProvider::RequestHitTestCallback callback);
+      mojom::XREnvironmentIntegrationProvider::RequestHitTestCallback callback);
   device::mojom::XRDeviceId GetId() const;
 
   bool HasExclusiveSession();
diff --git a/device/vr/vr_display_impl.cc b/device/vr/vr_display_impl.cc
index d6b0ce5..ce0c958e 100644
--- a/device/vr/vr_display_impl.cc
+++ b/device/vr/vr_display_impl.cc
@@ -18,10 +18,10 @@
 VRDisplayImpl::VRDisplayImpl(
     VRDeviceBase* device,
     mojom::XRFrameDataProviderRequest magic_window_request,
-    mojom::XREnviromentIntegrationProviderRequest enviroment_request,
+    mojom::XREnvironmentIntegrationProviderRequest environment_request,
     mojom::XRSessionControllerRequest session_request)
     : magic_window_binding_(this, std::move(magic_window_request)),
-      enviroment_binding_(this, std::move(enviroment_request)),
+      environment_binding_(this, std::move(environment_request)),
       session_controller_binding_(this, std::move(session_request)),
       device_(device) {
   // Unretained is safe because the binding will close when we are destroyed,
@@ -62,7 +62,7 @@
 
 void VRDisplayImpl::RequestHitTest(
     mojom::XRRayPtr ray,
-    mojom::XREnviromentIntegrationProvider::RequestHitTestCallback callback) {
+    mojom::XREnvironmentIntegrationProvider::RequestHitTestCallback callback) {
   if (restrict_frame_data_) {
     std::move(callback).Run(base::nullopt);
     return;
diff --git a/device/vr/vr_display_impl.h b/device/vr/vr_display_impl.h
index 555fde53..219c9c8 100644
--- a/device/vr/vr_display_impl.h
+++ b/device/vr/vr_display_impl.h
@@ -26,12 +26,12 @@
 // TODO(http://crbug.com/842025): Rename this.
 class DEVICE_VR_EXPORT VRDisplayImpl
     : public mojom::XRFrameDataProvider,
-      public mojom::XREnviromentIntegrationProvider,
+      public mojom::XREnvironmentIntegrationProvider,
       public mojom::XRSessionController {
  public:
   VRDisplayImpl(VRDeviceBase* device,
                 mojom::XRFrameDataProviderRequest,
-                mojom::XREnviromentIntegrationProviderRequest,
+                mojom::XREnvironmentIntegrationProviderRequest,
                 mojom::XRSessionControllerRequest);
   ~VRDisplayImpl() override;
 
@@ -55,7 +55,7 @@
   void OnMojoConnectionError();
 
   mojo::Binding<mojom::XRFrameDataProvider> magic_window_binding_;
-  mojo::Binding<mojom::XREnviromentIntegrationProvider> enviroment_binding_;
+  mojo::Binding<mojom::XREnvironmentIntegrationProvider> environment_binding_;
   mojo::Binding<mojom::XRSessionController> session_controller_binding_;
   device::VRDeviceBase* device_;
   bool restrict_frame_data_ = true;
diff --git a/device/vr/vr_display_impl_unittest.cc b/device/vr/vr_display_impl_unittest.cc
index c568c97..fc8ad17 100644
--- a/device/vr/vr_display_impl_unittest.cc
+++ b/device/vr/vr_display_impl_unittest.cc
@@ -33,10 +33,11 @@
   std::unique_ptr<VRDisplayImpl> MakeDisplay(
       mojom::XRSessionControllerPtr* controller) {
     mojom::XRFrameDataProviderPtr data_provider;
-    mojom::XREnviromentIntegrationProviderPtr enviroment_provider;
+    mojom::XREnvironmentIntegrationProviderPtr environment_provider;
     auto display = std::make_unique<VRDisplayImpl>(
         device(), mojo::MakeRequest(&data_provider),
-        mojo::MakeRequest(&enviroment_provider), mojo::MakeRequest(controller));
+        mojo::MakeRequest(&environment_provider),
+        mojo::MakeRequest(controller));
     static_cast<mojom::XRSessionController*>(display.get())
         ->SetFrameDataRestricted(true);
     return display;
diff --git a/extensions/browser/api/cast_channel/cast_channel_api.cc b/extensions/browser/api/cast_channel/cast_channel_api.cc
index 6c7b4316..0a223d5 100644
--- a/extensions/browser/api/cast_channel/cast_channel_api.cc
+++ b/extensions/browser/api/cast_channel/cast_channel_api.cc
@@ -29,6 +29,7 @@
 #include "extensions/browser/api/cast_channel/cast_message_util.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/event_router_factory.h"
+#include "extensions/browser/extensions_browser_client.h"
 #include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
 #include "net/base/net_errors.h"
@@ -328,7 +329,7 @@
     cast_socket_service_->SetSocketForTest(std::move(test_socket));
 
   cast_channel::CastSocketOpenParams open_params(
-      *ip_endpoint_, ExtensionsBrowserClient::Get()->GetNetLog(),
+      *ip_endpoint_,
       base::TimeDelta::FromMilliseconds(connect_info.timeout.get()
                                             ? *connect_info.timeout
                                             : kDefaultConnectTimeoutMillis),
@@ -337,6 +338,9 @@
                                       : CastDeviceCapability::NONE);
 
   cast_socket_service_->OpenSocket(
+      base::BindRepeating([] {
+        return ExtensionsBrowserClient::Get()->GetSystemNetworkContext();
+      }),
       open_params, base::BindOnce(&CastChannelOpenFunction::OnOpen, this));
 }
 
@@ -412,42 +416,8 @@
     AsyncWorkCompleted();
     return;
   }
-
-  net::NetworkTrafficAnnotationTag traffic_annotation =
-      net::DefineNetworkTrafficAnnotation("cast_channel_send", R"(
-        semantics {
-          sender: "Cast Channel"
-          description:
-            "A Cast protocol or application-level message sent to a Cast "
-            "device."
-          trigger:
-            "Triggered by user gesture from using Cast functionality, or "
-            "a webpage using the Presentation API, or "
-            "Cast device discovery internal logic."
-          data:
-            "A serialized Cast protocol or application-level protobuf message. "
-            "A non-exhaustive list of Cast protocol messages:\n"
-            "- Virtual connection requests,\n"
-            "- App availability / media status / receiver status requests,\n"
-            "- Launch / stop Cast session requests,\n"
-            "- Media commands, such as play/pause.\n"
-            "Application-level messages may contain data specific to the Cast "
-            "application."
-          destination: OTHER
-          destination_other:
-            "Data will be sent to a Cast device in local network."
-        }
-        policy {
-          cookies_allowed: NO
-          setting:
-            "This request cannot be disabled, but it would not be sent if user "
-            "does not connect a Cast device to the local network."
-          policy_exception_justification: "Not implemented."
-        })");
-
   socket->transport()->SendMessage(
-      message_to_send, base::Bind(&CastChannelSendFunction::OnSend, this),
-      traffic_annotation);
+      message_to_send, base::Bind(&CastChannelSendFunction::OnSend, this));
 }
 
 void CastChannelSendFunction::OnSend(int result) {
diff --git a/extensions/browser/api/cast_channel/cast_channel_apitest.cc b/extensions/browser/api/cast_channel/cast_channel_apitest.cc
index 39f14f84..c7be92d 100644
--- a/extensions/browser/api/cast_channel/cast_channel_apitest.cc
+++ b/extensions/browser/api/cast_channel/cast_channel_apitest.cc
@@ -126,7 +126,7 @@
       EXPECT_CALL(*mock_cast_socket_, ready_state())
           .WillRepeatedly(Return(ReadyState::OPEN));
       EXPECT_CALL(*mock_cast_socket_->mock_transport(),
-                  SendMessage(A<const CastMessage&>(), _, _))
+                  SendMessage(A<const CastMessage&>(), _))
           .WillOnce(InvokeCompletionCallback<1>(net::OK));
       EXPECT_CALL(*mock_cast_socket_, ready_state())
           .WillOnce(Return(ReadyState::OPEN));
@@ -150,7 +150,7 @@
               })));
       EXPECT_CALL(*mock_cast_socket_, ready_state())
           .WillRepeatedly(Return(ReadyState::CLOSED));
-      EXPECT_CALL(*mock_cast_socket_->mock_transport(), SendMessage(_, _, _))
+      EXPECT_CALL(*mock_cast_socket_->mock_transport(), SendMessage(_, _))
           .Times(0);
       EXPECT_CALL(*mock_cast_socket_, Close(_))
           .WillOnce(InvokeCompletionCallback<0>(net::OK));
diff --git a/extensions/browser/api/socket/tcp_socket.cc b/extensions/browser/api/socket/tcp_socket.cc
index e80bd771..56f75b0 100644
--- a/extensions/browser/api/socket/tcp_socket.cc
+++ b/extensions/browser/api/socket/tcp_socket.cc
@@ -476,7 +476,8 @@
     const net::IPEndPoint& peer_addr,
     int result,
     mojo::ScopedDataPipeConsumerHandle receive_stream,
-    mojo::ScopedDataPipeProducerHandle send_stream) {
+    mojo::ScopedDataPipeProducerHandle send_stream,
+    const base::Optional<net::SSLInfo>& ssl_info) {
   std::move(callback).Run(result, std::move(tls_socket), local_addr, peer_addr,
                           std::move(receive_stream), std::move(send_stream));
 }
diff --git a/extensions/browser/api/socket/tcp_socket.h b/extensions/browser/api/socket/tcp_socket.h
index f834301..ece08e8ea 100644
--- a/extensions/browser/api/socket/tcp_socket.h
+++ b/extensions/browser/api/socket/tcp_socket.h
@@ -150,7 +150,8 @@
                               const net::IPEndPoint& peer_addr,
                               int result,
                               mojo::ScopedDataPipeConsumerHandle receive_stream,
-                              mojo::ScopedDataPipeProducerHandle send_stream);
+                              mojo::ScopedDataPipeProducerHandle send_stream,
+                              const base::Optional<net::SSLInfo>& ssl_info);
 
   content::StoragePartition* GetStoragePartitionHelper();
 
diff --git a/extensions/browser/app_window/app_web_contents_helper.cc b/extensions/browser/app_window/app_web_contents_helper.cc
index 158d1a2..21d676e9 100644
--- a/extensions/browser/app_window/app_web_contents_helper.cc
+++ b/extensions/browser/app_window/app_web_contents_helper.cc
@@ -32,18 +32,8 @@
 // static
 bool AppWebContentsHelper::ShouldSuppressGestureEvent(
     const blink::WebGestureEvent& event) {
-  // Disable "smart zoom" (double-tap with two fingers on Mac trackpad).
-  if (event.GetType() == blink::WebInputEvent::kGestureDoubleTap)
-    return true;
-
   // Disable pinch zooming in app windows.
-  if (blink::WebInputEvent::IsPinchGestureEventType(event.GetType())) {
-    // Only suppress pinch events that cause a scale change. We still
-    // allow synthetic wheel events for touchpad pinch to go to the page.
-    return !event.NeedsWheelEvent();
-  }
-
-  return false;
+  return blink::WebInputEvent::IsPinchGestureEventType(event.GetType());
 }
 
 content::WebContents* AppWebContentsHelper::OpenURLFromTab(
diff --git a/extensions/browser/extensions_browser_client.cc b/extensions/browser/extensions_browser_client.cc
index 4e6c04e0..adf2c97 100644
--- a/extensions/browser/extensions_browser_client.cc
+++ b/extensions/browser/extensions_browser_client.cc
@@ -93,4 +93,9 @@
   return false;
 }
 
+network::mojom::NetworkContext*
+ExtensionsBrowserClient::GetSystemNetworkContext() {
+  return nullptr;
+}
+
 }  // namespace extensions
diff --git a/extensions/browser/extensions_browser_client.h b/extensions/browser/extensions_browser_client.h
index 522b64667..7e0c178e 100644
--- a/extensions/browser/extensions_browser_client.h
+++ b/extensions/browser/extensions_browser_client.h
@@ -45,6 +45,12 @@
 class URLRequestJob;
 }
 
+namespace network {
+namespace mojom {
+class NetworkContext;
+}
+}  // namespace network
+
 namespace update_client {
 class UpdateClient;
 }
@@ -347,6 +353,8 @@
   // code instead.
   virtual bool IsWebUIAllowedToMakeNetworkRequests(const url::Origin& origin);
 
+  virtual network::mojom::NetworkContext* GetSystemNetworkContext();
+
  private:
   std::vector<std::unique_ptr<ExtensionsBrowserAPIProvider>> providers_;
 
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 3129a58..57439bd 100644
--- a/extensions/renderer/resources/guest_view/extension_options/extension_options.js
+++ b/extensions/renderer/resources/guest_view/extension_options/extension_options.js
@@ -6,6 +6,8 @@
     require('extensionOptionsConstants').ExtensionOptionsConstants;
 var ExtensionOptionsEvents =
     require('extensionOptionsEvents').ExtensionOptionsEvents;
+var ExtensionOptionsAttributes =
+    require('extensionOptionsAttributes').ExtensionOptionsAttributes;
 var GuestViewContainer = require('guestViewContainer').GuestViewContainer;
 
 function ExtensionOptionsImpl(extensionoptionsElement) {
@@ -21,7 +23,13 @@
 
 ExtensionOptionsImpl.prototype.onElementAttached = function() {
   this.createGuest();
-}
+};
+
+// Sets up all of the extensionoptions attributes.
+ExtensionOptionsImpl.prototype.setupAttributes = function() {
+  this.attributes[ExtensionOptionsConstants.ATTRIBUTE_EXTENSION] =
+      new ExtensionOptionsAttributes.ExtensionAttribute(this);
+};
 
 ExtensionOptionsImpl.prototype.buildContainerParams = function() {
   var params = {};
@@ -48,6 +56,3 @@
 };
 
 GuestViewContainer.registerElement(ExtensionOptionsImpl);
-
-// Exports.
-exports.$set('ExtensionOptionsImpl', ExtensionOptionsImpl);
diff --git a/extensions/renderer/resources/guest_view/extension_options/extension_options_attributes.js b/extensions/renderer/resources/guest_view/extension_options/extension_options_attributes.js
index 1460e16..89f4d4f 100644
--- a/extensions/renderer/resources/guest_view/extension_options/extension_options_attributes.js
+++ b/extensions/renderer/resources/guest_view/extension_options/extension_options_attributes.js
@@ -7,7 +7,6 @@
 var GuestViewAttributes = require('guestViewAttributes').GuestViewAttributes;
 var ExtensionOptionsConstants =
     require('extensionOptionsConstants').ExtensionOptionsConstants;
-var ExtensionOptionsImpl = require('extensionOptions').ExtensionOptionsImpl;
 
 // -----------------------------------------------------------------------------
 // ExtensionAttribute object.
@@ -35,10 +34,7 @@
   this.view.createGuest();
 };
 
-// -----------------------------------------------------------------------------
+var ExtensionOptionsAttributes = {ExtensionAttribute: ExtensionAttribute};
 
-// Sets up all of the extensionoptions attributes.
-ExtensionOptionsImpl.prototype.setupAttributes = function() {
-  this.attributes[ExtensionOptionsConstants.ATTRIBUTE_EXTENSION] =
-      new ExtensionAttribute(this);
-};
+// Exports.
+exports.$set('ExtensionOptionsAttributes', ExtensionOptionsAttributes);
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 ac4a18c..29997cf 100644
--- a/extensions/renderer/resources/guest_view/extension_view/extension_view.js
+++ b/extensions/renderer/resources/guest_view/extension_view/extension_view.js
@@ -7,6 +7,10 @@
 var GuestViewContainer = require('guestViewContainer').GuestViewContainer;
 var ExtensionViewConstants =
     require('extensionViewConstants').ExtensionViewConstants;
+var EXTENSION_VIEW_API_METHODS =
+    require('extensionViewApiMethods').EXTENSION_VIEW_API_METHODS;
+var ExtensionViewAttributes =
+    require('extensionViewAttributes').ExtensionViewAttributes;
 var ExtensionViewEvents = require('extensionViewEvents').ExtensionViewEvents;
 var ExtensionViewInternal = getInternalApi ?
     getInternalApi('extensionViewInternal') :
@@ -33,9 +37,7 @@
 ExtensionViewImpl.VIEW_TYPE = 'ExtensionView';
 
 ExtensionViewImpl.setupElement = function(proto) {
-  var apiMethods = ExtensionViewImpl.getApiMethods();
-
-  GuestViewContainer.forwardApiMethods(proto, apiMethods);
+  GuestViewContainer.forwardApiMethods(proto, EXTENSION_VIEW_API_METHODS);
 };
 
 ExtensionViewImpl.prototype.createGuest = function(callback) {
@@ -53,6 +55,14 @@
   return params;
 };
 
+// Sets up all of the extensionview attributes.
+ExtensionViewImpl.prototype.setupAttributes = function() {
+  this.attributes[ExtensionViewConstants.ATTRIBUTE_EXTENSION] =
+      new ExtensionViewAttributes.ExtensionAttribute(this);
+  this.attributes[ExtensionViewConstants.ATTRIBUTE_SRC] =
+      new ExtensionViewAttributes.SrcAttribute(this);
+};
+
 ExtensionViewImpl.prototype.onElementDetached = function() {
   this.guest.destroy();
 
@@ -136,7 +146,18 @@
   }
 };
 
-GuestViewContainer.registerElement(ExtensionViewImpl);
+ExtensionViewImpl.prototype.load = function(src) {
+  return new Promise($Function.bind(function(resolve, reject) {
+    $Array.push(this.loadQueue, {src: src, resolve: resolve, reject: reject});
+    this.loadNextSrc();
+  }, this)).then($Function.bind(function onLoadResolved() {
+    this.pendingLoad = null;
+    this.loadNextSrc();
+  }, this), $Function.bind(function onLoadRejected(reason) {
+    this.pendingLoad = null;
+    this.loadNextSrc();
+    return Promise.reject(reason);
+  }, this));
+};
 
-// Exports.
-exports.$set('ExtensionViewImpl', ExtensionViewImpl);
+GuestViewContainer.registerElement(ExtensionViewImpl);
diff --git a/extensions/renderer/resources/guest_view/extension_view/extension_view_api_methods.js b/extensions/renderer/resources/guest_view/extension_view/extension_view_api_methods.js
index 4c9b388..120520a 100644
--- a/extensions/renderer/resources/guest_view/extension_view/extension_view_api_methods.js
+++ b/extensions/renderer/resources/guest_view/extension_view/extension_view_api_methods.js
@@ -2,17 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// This module implements the public-facing API functions for the
+// This module contains the public-facing API functions for the
 // <extensionview> tag.
 
-var ExtensionViewInternal = getInternalApi ?
-    getInternalApi('extensionViewInternal') :
-    require('extensionViewInternal').ExtensionViewInternal;
-var ExtensionViewImpl = require('extensionView').ExtensionViewImpl;
-var ExtensionViewConstants =
-    require('extensionViewConstants').ExtensionViewConstants;
-
-// An array of <extensionview>'s public-facing API methods.
 var EXTENSION_VIEW_API_METHODS = [
   // Loads the given src into extensionview. Must be called every time the
   // the extensionview should load a new page. This is the only way to set
@@ -21,26 +13,5 @@
   'load'
 ];
 
-// -----------------------------------------------------------------------------
-// Custom API method implementations.
-
-ExtensionViewImpl.prototype.load = function(src) {
-  return new Promise($Function.bind(function(resolve, reject) {
-    $Array.push(this.loadQueue, {src: src, resolve: resolve, reject: reject});
-    this.loadNextSrc();
-  }, this))
-  .then($Function.bind(function onLoadResolved() {
-    this.pendingLoad = null;
-    this.loadNextSrc();
-  }, this), $Function.bind(function onLoadRejected(reason) {
-    this.pendingLoad = null;
-    this.loadNextSrc();
-    return Promise.reject(reason);
-  }, this));
-};
-
-// -----------------------------------------------------------------------------
-
-ExtensionViewImpl.getApiMethods = function() {
-  return EXTENSION_VIEW_API_METHODS;
-};
+// Exports.
+exports.$set('EXTENSION_VIEW_API_METHODS', EXTENSION_VIEW_API_METHODS);
diff --git a/extensions/renderer/resources/guest_view/extension_view/extension_view_attributes.js b/extensions/renderer/resources/guest_view/extension_view/extension_view_attributes.js
index 942f4b30..d0e5adc 100644
--- a/extensions/renderer/resources/guest_view/extension_view/extension_view_attributes.js
+++ b/extensions/renderer/resources/guest_view/extension_view/extension_view_attributes.js
@@ -7,10 +7,6 @@
 var GuestViewAttributes = require('guestViewAttributes').GuestViewAttributes;
 var ExtensionViewConstants =
     require('extensionViewConstants').ExtensionViewConstants;
-var ExtensionViewImpl = require('extensionView').ExtensionViewImpl;
-var ExtensionViewInternal = getInternalApi ?
-    getInternalApi('extensionViewInternal') :
-    require('extensionViewInternal').ExtensionViewInternal;
 
 // -----------------------------------------------------------------------------
 // ExtensionAttribute object.
@@ -45,14 +41,12 @@
   console.log('src is read only. Use .load(url) to navigate to a new ' +
       'extension page.');
   this.setValueIgnoreMutation(oldValue);
-}
-
-// -----------------------------------------------------------------------------
-
-// Sets up all of the extensionview attributes.
-ExtensionViewImpl.prototype.setupAttributes = function() {
-  this.attributes[ExtensionViewConstants.ATTRIBUTE_EXTENSION] =
-      new ExtensionAttribute(this);
-  this.attributes[ExtensionViewConstants.ATTRIBUTE_SRC] =
-      new SrcAttribute(this);
 };
+
+var ExtensionViewAttributes = {
+  ExtensionAttribute: ExtensionAttribute,
+  SrcAttribute: SrcAttribute
+};
+
+// Exports.
+exports.$set('ExtensionViewAttributes', ExtensionViewAttributes);
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 79c1d94..9357919 100644
--- a/extensions/renderer/resources/guest_view/web_view/web_view.js
+++ b/extensions/renderer/resources/guest_view/web_view/web_view.js
@@ -11,6 +11,8 @@
 var GuestViewContainer = require('guestViewContainer').GuestViewContainer;
 var GuestViewInternalNatives = requireNative('guest_view_internal');
 var WebViewConstants = require('webViewConstants').WebViewConstants;
+var WEB_VIEW_API_METHODS = require('webViewApiMethods').WEB_VIEW_API_METHODS;
+var WebViewAttributes = require('webViewAttributes').WebViewAttributes;
 var WebViewEvents = require('webViewEvents').WebViewEvents;
 var WebViewInternal = getInternalApi ?
     getInternalApi('webViewInternal') :
@@ -30,29 +32,33 @@
 
 // Add extra functionality to |this.element|.
 WebViewImpl.setupElement = function(proto) {
-  // Public-facing API methods.
-  var apiMethods = WebViewImpl.getApiMethods();
-
-  // Create default implementations for undefined API methods.
-  var createDefaultApiMethod = function(m) {
-    return function(var_args) {
-      if (!this.guest.getId()) {
-        return false;
-      }
-      var args = $Array.concat([this.guest.getId()], $Array.slice(arguments));
-      $Function.apply(WebViewInternal[m], null, args);
-      return true;
-    };
-  };
-  for (var i = 0; i != apiMethods.length; ++i) {
-    if (WebViewImpl.prototype[apiMethods[i]] == undefined) {
-      WebViewImpl.prototype[apiMethods[i]] =
-          createDefaultApiMethod(apiMethods[i]);
-    }
-  }
-
   // Forward proto.foo* method calls to WebViewImpl.foo*.
-  GuestViewContainer.forwardApiMethods(proto, apiMethods);
+  GuestViewContainer.forwardApiMethods(proto, WEB_VIEW_API_METHODS);
+};
+
+// Sets up all of the webview attributes.
+WebViewImpl.prototype.setupAttributes = function() {
+  this.attributes[WebViewConstants.ATTRIBUTE_ALLOWSCALING] =
+      new WebViewAttributes.AllowScalingAttribute(this);
+  this.attributes[WebViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY] =
+      new WebViewAttributes.AllowTransparencyAttribute(this);
+  this.attributes[WebViewConstants.ATTRIBUTE_AUTOSIZE] =
+      new WebViewAttributes.AutosizeAttribute(this);
+  this.attributes[WebViewConstants.ATTRIBUTE_NAME] =
+      new WebViewAttributes.NameAttribute(this);
+  this.attributes[WebViewConstants.ATTRIBUTE_PARTITION] =
+      new WebViewAttributes.PartitionAttribute(this);
+  this.attributes[WebViewConstants.ATTRIBUTE_SRC] =
+      new WebViewAttributes.SrcAttribute(this);
+
+  var autosizeAttributes = [
+    WebViewConstants.ATTRIBUTE_MAXHEIGHT, WebViewConstants.ATTRIBUTE_MAXWIDTH,
+    WebViewConstants.ATTRIBUTE_MINHEIGHT, WebViewConstants.ATTRIBUTE_MINWIDTH
+  ];
+  for (var attribute of autosizeAttributes) {
+    this.attributes[attribute] =
+        new WebViewAttributes.AutosizeDimensionAttribute(attribute, this);
+  }
 };
 
 // Initiates navigation once the <webview> element is attached to the DOM.
@@ -191,6 +197,14 @@
   return $Function.call(GuestViewContainer.prototype.attachWindow$, this);
 };
 
+WebViewImpl.prototype.addContentScripts = function(rules) {
+  return WebViewInternal.addContentScripts(this.viewInstanceId, rules);
+};
+
+WebViewImpl.prototype.removeContentScripts = function(names) {
+  return WebViewInternal.removeContentScripts(this.viewInstanceId, names);
+};
+
 // Shared implementation of executeScript() and insertCSS().
 WebViewImpl.prototype.executeCode = function(func, args) {
   if (!this.guest.getId()) {
@@ -207,7 +221,87 @@
                        $Array.slice(args));
   $Function.apply(func, null, args);
   return true;
-}
+};
+
+WebViewImpl.prototype.executeScript = function(var_args) {
+  return this.executeCode(
+      WebViewInternal.executeScript, $Array.slice(arguments));
+};
+
+WebViewImpl.prototype.insertCSS = function(var_args) {
+  return this.executeCode(WebViewInternal.insertCSS, $Array.slice(arguments));
+};
+
+WebViewImpl.prototype.back = function(callback) {
+  return this.go(-1, callback);
+};
+
+WebViewImpl.prototype.canGoBack = function() {
+  return this.entryCount > 1 && this.currentEntryIndex > 0;
+};
+
+WebViewImpl.prototype.canGoForward = function() {
+  return this.currentEntryIndex >= 0 &&
+      this.currentEntryIndex < (this.entryCount - 1);
+};
+
+WebViewImpl.prototype.forward = function(callback) {
+  return this.go(1, callback);
+};
+
+WebViewImpl.prototype.getProcessId = function() {
+  return this.processId;
+};
+
+WebViewImpl.prototype.getUserAgent = function() {
+  return this.userAgentOverride || navigator.userAgent;
+};
+
+WebViewImpl.prototype.isUserAgentOverridden = function() {
+  return !!this.userAgentOverride &&
+      this.userAgentOverride != navigator.userAgent;
+};
+
+WebViewImpl.prototype.setUserAgentOverride = function(userAgentOverride) {
+  this.userAgentOverride = userAgentOverride;
+  if (!this.guest.getId()) {
+    // If we are not attached yet, then we will pick up the user agent on
+    // attachment.
+    return false;
+  }
+  WebViewInternal.overrideUserAgent(this.guest.getId(), userAgentOverride);
+  return true;
+};
+
+WebViewImpl.prototype.loadDataWithBaseUrl = function(
+    dataUrl, baseUrl, virtualUrl) {
+  if (!this.guest.getId()) {
+    return;
+  }
+  WebViewInternal.loadDataWithBaseUrl(
+      this.guest.getId(), dataUrl, baseUrl, virtualUrl, function() {
+        // Report any errors.
+        if (chrome.runtime.lastError != undefined) {
+          window.console.error(
+              'Error while running webview.loadDataWithBaseUrl: ' +
+              chrome.runtime.lastError.message);
+        }
+      });
+};
+
+WebViewImpl.prototype.print = function() {
+  return this.executeScript({code: 'window.print();'});
+};
+
+WebViewImpl.prototype.setZoom = function(zoomFactor, callback) {
+  if (!this.guest.getId()) {
+    this.cachedZoomFactor = zoomFactor;
+    return false;
+  }
+  this.cachedZoomFactor = 1;
+  WebViewInternal.setZoom(this.guest.getId(), zoomFactor, callback);
+  return true;
+};
 
 // Requests the <webview> element wihtin the embedder to enter fullscreen.
 WebViewImpl.prototype.makeElementFullscreen = function() {
@@ -219,6 +313,27 @@
 // Implemented when the ChromeWebView API is available.
 WebViewImpl.prototype.maybeSetupContextMenus = function() {};
 
+(() => {
+  // For <webview> API methods which aren't explicitly defined on |WebViewImpl|,
+  // create default implementations which forward the call to |WebViewInternal|.
+  var createDefaultApiMethod = function(m) {
+    return function(var_args) {
+      if (!this.guest.getId()) {
+        return false;
+      }
+      var args = $Array.concat([this.guest.getId()], $Array.slice(arguments));
+      $Function.apply(WebViewInternal[m], null, args);
+      return true;
+    };
+  };
+
+  for (var methodName of WEB_VIEW_API_METHODS) {
+    if (WebViewImpl.prototype[methodName] == undefined) {
+      WebViewImpl.prototype[methodName] = createDefaultApiMethod(methodName);
+    }
+  }
+})();
+
 GuestViewContainer.registerElement(WebViewImpl);
 
 // Exports.
diff --git a/extensions/renderer/resources/guest_view/web_view/web_view_api_methods.js b/extensions/renderer/resources/guest_view/web_view/web_view_api_methods.js
index e8cf253..067ba3f 100644
--- a/extensions/renderer/resources/guest_view/web_view/web_view_api_methods.js
+++ b/extensions/renderer/resources/guest_view/web_view/web_view_api_methods.js
@@ -2,30 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// This module implements the public-facing API functions for the <webview> tag.
+// This module contains the public-facing API functions for the <webview> tag.
 
-var WebViewInternal = getInternalApi ?
-    getInternalApi('webViewInternal') :
-    require('webViewInternal').WebViewInternal;
-var WebViewImpl = require('webView').WebViewImpl;
-
-// An array of <webview>'s public-facing API methods. Methods without custom
-// implementations will be given default implementations that call into the
-// internal API method with the same name in |WebViewInternal|. For example, a
-// method called 'someApiMethod' would be given the following default
-// implementation:
-//
-// WebViewImpl.prototype.someApiMethod = function(var_args) {
-//   if (!this.guest.getId()) {
-//     return false;
-//   }
-//   var args = $Array.concat([this.guest.getId()], $Array.slice(arguments));
-//   $Function.apply(WebViewInternal.someApiMethod, null, args);
-//   return true;
-// };
-//
-// These default implementations come from createDefaultApiMethod() in
-// web_view.js.
 var WEB_VIEW_API_METHODS = [
   // Add content scripts for the guest page.
   'addContentScripts',
@@ -120,99 +98,5 @@
   'terminate'
 ];
 
-// -----------------------------------------------------------------------------
-// Custom API method implementations.
-
-WebViewImpl.prototype.addContentScripts = function(rules) {
-  return WebViewInternal.addContentScripts(this.viewInstanceId, rules);
-};
-
-WebViewImpl.prototype.back = function(callback) {
-  return this.go(-1, callback);
-};
-
-WebViewImpl.prototype.canGoBack = function() {
-  return this.entryCount > 1 && this.currentEntryIndex > 0;
-};
-
-WebViewImpl.prototype.canGoForward = function() {
-  return this.currentEntryIndex >= 0 &&
-      this.currentEntryIndex < (this.entryCount - 1);
-};
-
-WebViewImpl.prototype.executeScript = function(var_args) {
-  return this.executeCode(WebViewInternal.executeScript,
-                          $Array.slice(arguments));
-};
-
-WebViewImpl.prototype.forward = function(callback) {
-  return this.go(1, callback);
-};
-
-WebViewImpl.prototype.getProcessId = function() {
-  return this.processId;
-};
-
-WebViewImpl.prototype.getUserAgent = function() {
-  return this.userAgentOverride || navigator.userAgent;
-};
-
-WebViewImpl.prototype.insertCSS = function(var_args) {
-  return this.executeCode(WebViewInternal.insertCSS, $Array.slice(arguments));
-};
-
-WebViewImpl.prototype.isUserAgentOverridden = function() {
-  return !!this.userAgentOverride &&
-      this.userAgentOverride != navigator.userAgent;
-};
-
-WebViewImpl.prototype.loadDataWithBaseUrl = function(
-    dataUrl, baseUrl, virtualUrl) {
-  if (!this.guest.getId()) {
-    return;
-  }
-  WebViewInternal.loadDataWithBaseUrl(
-      this.guest.getId(), dataUrl, baseUrl, virtualUrl, function() {
-        // Report any errors.
-        if (chrome.runtime.lastError != undefined) {
-          window.console.error(
-              'Error while running webview.loadDataWithBaseUrl: ' +
-                  chrome.runtime.lastError.message);
-        }
-      });
-};
-
-WebViewImpl.prototype.print = function() {
-  return this.executeScript({code: 'window.print();'});
-};
-
-WebViewImpl.prototype.removeContentScripts = function(names) {
-  return WebViewInternal.removeContentScripts(this.viewInstanceId, names);
-};
-
-WebViewImpl.prototype.setUserAgentOverride = function(userAgentOverride) {
-  this.userAgentOverride = userAgentOverride;
-  if (!this.guest.getId()) {
-    // If we are not attached yet, then we will pick up the user agent on
-    // attachment.
-    return false;
-  }
-  WebViewInternal.overrideUserAgent(this.guest.getId(), userAgentOverride);
-  return true;
-};
-
-WebViewImpl.prototype.setZoom = function(zoomFactor, callback) {
-  if (!this.guest.getId()) {
-    this.cachedZoomFactor = zoomFactor;
-    return false;
-  }
-  this.cachedZoomFactor = 1;
-  WebViewInternal.setZoom(this.guest.getId(), zoomFactor, callback);
-  return true;
-};
-
-// -----------------------------------------------------------------------------
-
-WebViewImpl.getApiMethods = function() {
-  return WEB_VIEW_API_METHODS;
-};
+// Exports.
+exports.$set('WEB_VIEW_API_METHODS', WEB_VIEW_API_METHODS);
diff --git a/extensions/renderer/resources/guest_view/web_view/web_view_attributes.js b/extensions/renderer/resources/guest_view/web_view/web_view_attributes.js
index f9a9235..9db34c1 100644
--- a/extensions/renderer/resources/guest_view/web_view/web_view_attributes.js
+++ b/extensions/renderer/resources/guest_view/web_view/web_view_attributes.js
@@ -6,7 +6,6 @@
 
 var GuestViewAttributes = require('guestViewAttributes').GuestViewAttributes;
 var WebViewConstants = require('webViewConstants').WebViewConstants;
-var WebViewImpl = require('webView').WebViewImpl;
 var WebViewInternal = getInternalApi ?
     getInternalApi('webViewInternal') :
     require('webViewInternal').WebViewInternal;
@@ -258,29 +257,15 @@
   WebViewInternal.navigate(this.view.guest.getId(), this.getValue());
 };
 
-// -----------------------------------------------------------------------------
-
-// Sets up all of the webview attributes.
-WebViewImpl.prototype.setupAttributes = function() {
-  this.attributes[WebViewConstants.ATTRIBUTE_ALLOWSCALING] =
-      new AllowScalingAttribute(this);
-  this.attributes[WebViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY] =
-      new AllowTransparencyAttribute(this);
-  this.attributes[WebViewConstants.ATTRIBUTE_AUTOSIZE] =
-      new AutosizeAttribute(this);
-  this.attributes[WebViewConstants.ATTRIBUTE_NAME] =
-      new NameAttribute(this);
-  this.attributes[WebViewConstants.ATTRIBUTE_PARTITION] =
-      new PartitionAttribute(this);
-  this.attributes[WebViewConstants.ATTRIBUTE_SRC] =
-      new SrcAttribute(this);
-
-  var autosizeAttributes = [WebViewConstants.ATTRIBUTE_MAXHEIGHT,
-                            WebViewConstants.ATTRIBUTE_MAXWIDTH,
-                            WebViewConstants.ATTRIBUTE_MINHEIGHT,
-                            WebViewConstants.ATTRIBUTE_MINWIDTH];
-  for (var i = 0; autosizeAttributes[i]; ++i) {
-    this.attributes[autosizeAttributes[i]] =
-        new AutosizeDimensionAttribute(autosizeAttributes[i], this);
-  }
+var WebViewAttributes = {
+  AllowScalingAttribute: AllowScalingAttribute,
+  AllowTransparencyAttribute: AllowTransparencyAttribute,
+  AutosizeDimensionAttribute: AutosizeDimensionAttribute,
+  AutosizeAttribute: AutosizeAttribute,
+  NameAttribute: NameAttribute,
+  PartitionAttribute: PartitionAttribute,
+  SrcAttribute: SrcAttribute
 };
+
+// Exports.
+exports.$set('WebViewAttributes', WebViewAttributes);
diff --git a/infra/config/branch/cq.cfg b/infra/config/branch/cq.cfg
index 4d4b380..e93a992 100644
--- a/infra/config/branch/cq.cfg
+++ b/infra/config/branch/cq.cfg
@@ -39,11 +39,7 @@
       builders { name: "android_clang_dbg_recipe" }
       builders { name: "android_compile_dbg" }
       builders { name: "android_cronet" }
-      # TODO(crbug.com/876539): Reenable this.
-      builders {
-        experiment_percentage: 100
-        name: "android-kitkat-arm-rel"
-      }
+      builders { name: "android-kitkat-arm-rel" }
       builders { name: "android-marshmallow-arm64-rel" }
       builders { name: "cast_shell_android" }
       builders { name: "cast_shell_linux" }
diff --git a/infra/config/global/cr-buildbucket.cfg b/infra/config/global/cr-buildbucket.cfg
index 963be5b5..a06f7f2b 100644
--- a/infra/config/global/cr-buildbucket.cfg
+++ b/infra/config/global/cr-buildbucket.cfg
@@ -1705,6 +1705,12 @@
       mixins: "lkgr-ci"
     }
     builders {
+      name: "win-dbg"
+      dimensions: "os:Windows-10"
+      dimensions: "cores:32"
+      mixins: "chromium-ci"
+    }
+    builders {
       name: "win-rel"
       dimensions: "os:Windows-10"
       dimensions: "cores:32"
@@ -1727,6 +1733,12 @@
       mixins: "android-ci"
     }
     builders {
+      name: "android-dbg"
+      dimensions: "os:Ubuntu-14.04"
+      dimensions: "cores:32"
+      mixins: "chromium-ci"
+    }
+    builders {
       name: "android-rel"
       dimensions: "os:Ubuntu-14.04"
       dimensions: "cores:32"
@@ -1952,6 +1964,12 @@
       mixins: "android-fyi-ci"
     }
     builders {
+      name: "linux-dbg"
+      dimensions: "os:Ubuntu-14.04"
+      dimensions: "cores:32"
+      mixins: "chromium-ci"
+    }
+    builders {
       name: "linux-rel"
       dimensions: "os:Ubuntu-14.04"
       dimensions: "cores:32"
@@ -2082,6 +2100,11 @@
       mixins: "android-ci"
     }
     builders {
+      name: "mac-dbg"
+      dimensions: "os:Mac-10.13"
+      mixins: "chromium-ci"
+    }
+    builders {
       name: "mac-rel"
       dimensions: "os:Mac-10.13"
       mixins: "chromium-ci"
@@ -2170,6 +2193,12 @@
       mixins: "webkit-ci"
     }
     builders {
+      name: "win32-dbg"
+      dimensions: "os:Windows-10"
+      dimensions: "cores:32"
+      mixins: "chromium-ci"
+    }
+    builders {
       name: "win32-rel"
       dimensions: "os:Windows-10"
       dimensions: "cores:32"
diff --git a/infra/config/global/luci-milo.cfg b/infra/config/global/luci-milo.cfg
index 2ea8ae48..961da339 100644
--- a/infra/config/global/luci-milo.cfg
+++ b/infra/config/global/luci-milo.cfg
@@ -314,29 +314,54 @@
   refs: "refs/heads/master"
   manifest_name: "REVISION"
   builders {
-    name: "buildbucket/luci.chromium.ci/win32-rel"
-    category: "chromium|win"
-    short_name: "32"
-  }
-  builders {
-    name: "buildbucket/luci.chromium.ci/win-rel"
-    category: "chromium|win"
-    short_name: "64"
-  }
-  builders {
-    name: "buildbucket/luci.chromium.ci/mac-rel"
-    category: "chromium"
-    short_name: "mac"
-  }
-  builders {
-    name: "buildbucket/luci.chromium.ci/linux-rel"
-    category: "chromium"
-    short_name: "lin"
+    name: "buildbucket/luci.chromium.ci/android-dbg"
+    category: "chromium|android"
+    short_name: "dbg"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/android-rel"
-    category: "chromium"
-    short_name: "and"
+    category: "chromium|android"
+    short_name: "rel"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/linux-dbg"
+    category: "chromium|linux"
+    short_name: "dbg"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/linux-rel"
+    category: "chromium|linux"
+    short_name: "rel"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/mac-dbg"
+    category: "chromium|mac"
+    short_name: "dbg"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/mac-rel"
+    category: "chromium|mac"
+    short_name: "rel"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/win32-dbg"
+    category: "chromium|win|32"
+    short_name: "dbg"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/win32-rel"
+    category: "chromium|win|32"
+    short_name: "rel"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/win-dbg"
+    category: "chromium|win|64"
+    short_name: "dbg"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/win-rel"
+    category: "chromium|win|64"
+    short_name: "rel"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win Builder"
@@ -1450,26 +1475,48 @@
   manifest_name: "REVISION"
   include_experimental_builds: true
   builders {
+    name: "buildbucket/luci.chromium.ci/android-dbg"
+    short_name: "android|dbg"
+  }
+  builders {
     name: "buildbucket/luci.chromium.ci/android-rel"
-    short_name: "an"
+    short_name: "android|rel"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/linux-dbg"
+    short_name: "linux|dbg"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/linux-rel"
-    short_name: "lnx"
+    short_name: "linux|rel"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/mac-dbg"
+    short_name: "mac|dbg"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/mac-rel"
-    short_name: "mac"
+    short_name: "mac|rel"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/win32-dbg"
+    category: "win|32"
+    short_name: "dbg"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/win32-rel"
-    category: "win"
-    short_name: "32"
+    category: "win|32"
+    short_name: "rel"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/win-dbg"
+    category: "win|64"
+    short_name: "dbg"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/win-rel"
-    category: "win"
-    short_name: "64"
+    category: "win|64"
+    short_name: "rel"
   }
 }
 
diff --git a/infra/config/global/luci-scheduler.cfg b/infra/config/global/luci-scheduler.cfg
index ba95ac6..d9f6a199 100644
--- a/infra/config/global/luci-scheduler.cfg
+++ b/infra/config/global/luci-scheduler.cfg
@@ -2404,6 +2404,16 @@
 }
 
 job {
+  id: "android-dbg"
+  acl_sets: "default"
+  buildbucket: {
+    server: "cr-buildbucket.appspot.com"
+    bucket: "luci.chromium.ci"
+    builder: "android-dbg"
+  }
+}
+
+job {
   id: "android-rel"
   acl_sets: "default"
   buildbucket: {
@@ -2921,6 +2931,16 @@
 }
 
 job {
+  id: "linux-dbg"
+  acl_sets: "default"
+  buildbucket: {
+    server: "cr-buildbucket.appspot.com"
+    bucket: "luci.chromium.ci"
+    builder: "linux-dbg"
+  }
+}
+
+job {
   id: "linux-rel"
   acl_sets: "default"
   buildbucket: {
@@ -2977,6 +2997,16 @@
 }
 
 job {
+  id: "mac-dbg"
+  acl_sets: "default"
+  buildbucket: {
+    server: "cr-buildbucket.appspot.com"
+    bucket: "luci.chromium.ci"
+    builder: "mac-dbg"
+  }
+}
+
+job {
   id: "mac-rel"
   acl_sets: "default"
   buildbucket: {
@@ -3384,6 +3414,16 @@
 }
 
 job {
+  id: "win32-dbg"
+  acl_sets: "default"
+  buildbucket: {
+    server: "cr-buildbucket.appspot.com"
+    bucket: "luci.chromium.ci"
+    builder: "win32-dbg"
+  }
+}
+
+job {
   id: "win32-rel"
   acl_sets: "default"
   buildbucket: {
@@ -3470,6 +3510,16 @@
 }
 
 job {
+  id: "win-dbg"
+  acl_sets: "default"
+  buildbucket: {
+    server: "cr-buildbucket.appspot.com"
+    bucket: "luci.chromium.ci"
+    builder: "win-dbg"
+  }
+}
+
+job {
   id: "win-rel"
   acl_sets: "default"
   buildbucket: {
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb
index 2420920..077fa10 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb
@@ -17,7 +17,7 @@
 <translation id="2647554856022461007">Chromium pot utilitzar serveis web per millorar la navegació, però si vols els pots desactivar. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation>
 <translation id="2687023731466035790">Gaudeix de les eines intel·ligents de Google a Chromium</translation>
 <translation id="2730884209570016437">Chromium no pot utilitzar la càmera perquè l'està utilitzant una altra aplicació</translation>
-<translation id="2797210818057553964">Pots personalitzar aquesta opció en qualsevol moment des de la configuració de Chronium</translation>
+<translation id="2797210818057553964">Pots personalitzar aquesta opció en qualsevol moment des de la configuració de Chromium</translation>
 <translation id="3256316712990552818">Copiada a Chromium</translation>
 <translation id="3413120535237193088">Inicia la sessió a Chromium per accedir a les adreces d'interès des de tots els dispositius.</translation>
 <translation id="3473048256428424907">Activa l'escàner QR de Chromium</translation>
@@ -46,7 +46,7 @@
 <translation id="7337881442233988129">Chromium</translation>
 <translation id="7357211569052832586">Les dades seleccionades s'han suprimit de Chromium i dels dispositius sincronitzats. És possible que el teu compte de Google tingui altres formes de l'historial de navegació a history.google.com, com ara les cerques i l'activitat d'altres serveis de Google.</translation>
 <translation id="7400689562045506105">Utilitza Chromium a tot arreu</translation>
-<translation id="7499048969477415415">La configuració que controla la sincronització, la personalització i altres serveis de Google a Chronium ha canviat. Això pot afectar la teva configuració actual.</translation>
+<translation id="7499048969477415415">La configuració que controla la sincronització, la personalització i altres serveis de Google a Chromium ha canviat. Això pot afectar la teva configuració actual.</translation>
 <translation id="7674213385180944843">Obre Configuració &gt; Privacitat &gt; Càmera &gt; Chromium i activa la càmera.</translation>
 <translation id="7746854981345936341">Consell de Chromium. Ara alguns botons són a la part inferior de la pantalla, per exemple, Enrere, Endavant i Cerca.</translation>
 <translation id="786327964234957808">Estàs canviant el compte de sincronització de <ph name="USER_EMAIL1" /> a <ph name="USER_EMAIL2" />. <ph name="DOMAIN" /> gestiona les teves dades de Chromium. Se suprimiran les teves dades d'aquest dispositiu, però continuaran estant disponibles a <ph name="USER_EMAIL1" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
index 12d717b..003a432 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
@@ -46,7 +46,7 @@
 <translation id="7337881442233988129">Chromium</translation>
 <translation id="7357211569052832586">I dati selezionati sono stati rimossi da Chromium e dai dispositivi sincronizzati. Il tuo account Google potrebbe avere altre forme di cronologia di navigazione, ad esempio ricerche e attività, di altri servizi Google alla pagina history.google.com.</translation>
 <translation id="7400689562045506105">Utilizza Chromium ovunque</translation>
-<translation id="7499048969477415415">Le impostazioni che controllano sincronizzazione, personalizzazione e altri servizi Google in Chromium sono cambiate. Questo cambiamento potrebbe incidere sulle impostazioni attuali.</translation>
+<translation id="7499048969477415415">Le impostazioni che controllano la sincronizzazione, la personalizzazione e altri servizi Google in Chromium sono cambiate. Questo cambiamento potrebbe incidere sulle impostazioni attuali.</translation>
 <translation id="7674213385180944843">Apri impostazioni &gt; Privacy &gt; Fotocamera &gt; Chromium e attiva la fotocamera.</translation>
 <translation id="7746854981345936341">Suggerimento per Chromium. Alcuni pulsanti si trovano ora nella parte inferiore della schermata, ad esempio Indietro, Avanti e Cerca.</translation>
 <translation id="786327964234957808">Stai cambiando account di sincronizzazione, passando dall'account <ph name="USER_EMAIL1" /> all'account <ph name="USER_EMAIL2" />. I dati di Chromium esistenti sono gestiti da <ph name="DOMAIN" />. I dati verranno cancellati dal dispositivo, ma rimarranno memorizzati nell'account <ph name="USER_EMAIL1" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index 0355435..6cfbc20 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">የግል</translation>
 <translation id="5190835502935405962">የዕልባቶች አሞሌ</translation>
 <translation id="5197255632782567636">በይነመረብ</translation>
+<translation id="5215116848420601511">Google Payን የሚጠቀሙ የመክፈያ ዘዴዎች እና አድራሻዎች</translation>
 <translation id="5228579091201413441">ማመሳሰልን አንቃ</translation>
 <translation id="5244474230056479698">ከ<ph name="EMAIL" /> ጋር በማስመር ላይ</translation>
 <translation id="5300589172476337783">አሳይ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
index 39e90223..a0d2fba5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">خاص</translation>
 <translation id="5190835502935405962">شريط الإشارات</translation>
 <translation id="5197255632782567636">الإنترنت</translation>
+<translation id="5215116848420601511">‏طرق الدفع والعناوين باستخدام Google Pay</translation>
 <translation id="5228579091201413441">تفعيل المزامنة</translation>
 <translation id="5244474230056479698">المزامنة مع <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">عرض</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
index ecf89703..775b8e5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Частно</translation>
 <translation id="5190835502935405962">Лента на отметките</translation>
 <translation id="5197255632782567636">Интернет</translation>
+<translation id="5215116848420601511">Начини на плащане и адреси посредством Google Pay</translation>
 <translation id="5228579091201413441">Активиране на синхронизирането</translation>
 <translation id="5244474230056479698">Синхронизира се със: <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Показване</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
index dd61e51a..dfb7373 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -247,6 +247,7 @@
 <translation id="5186185447130319458">ব্যক্তিগত</translation>
 <translation id="5190835502935405962">বুকমার্ক দণ্ড</translation>
 <translation id="5197255632782567636">ইন্টারনেট</translation>
+<translation id="5215116848420601511">Google Pay ব্যবহার করে এমন পেমেন্টের পদ্ধতি এবং ঠিকানা</translation>
 <translation id="5228579091201413441">সিঙ্ক সক্ষম করুন</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" /> এ সিঙ্ক হচ্ছে</translation>
 <translation id="5300589172476337783">দেখান</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index bfe8e72..b1d1cad 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privat</translation>
 <translation id="5190835502935405962">Barra d'adreces d'interès</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Formes de pagament i adreces que fan servir Google Pay</translation>
 <translation id="5228579091201413441">Activa la sincronització</translation>
 <translation id="5244474230056479698">S'està sincronitzant amb <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Mostra</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index d52623b..3bfa300 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Soukromé</translation>
 <translation id="5190835502935405962">Lišta záložek</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Platební metody a adresy pomocí služby Google Pay</translation>
 <translation id="5228579091201413441">Aktivace synchronizace</translation>
 <translation id="5244474230056479698">Údaje se synchronizují do účtu <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Zobrazit</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb
index 135e59cd..070b411d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privat</translation>
 <translation id="5190835502935405962">Bogmærkelinje</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Betalingsmetoder og adresser, der bruger Google Pay</translation>
 <translation id="5228579091201413441">Aktivér synkronisering</translation>
 <translation id="5244474230056479698">Synkroniserer til <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Vis</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index 11c3ec7..a409818 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privat</translation>
 <translation id="5190835502935405962">Lesezeichenleiste</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Bei Google Pay gespeicherte Zahlungsmethoden und Adressen</translation>
 <translation id="5228579091201413441">Synchronisierung aktivieren</translation>
 <translation id="5244474230056479698">Mit <ph name="EMAIL" /> synchronisieren</translation>
 <translation id="5300589172476337783">Anzeigen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index 54776d6f..7e9560c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Ιδιωτικό</translation>
 <translation id="5190835502935405962">Γραμμή σελιδοδεικτών</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Τρόποι πληρωμής και διευθύνσεις που χρησιμοποιούν το Google Pay</translation>
 <translation id="5228579091201413441">Ενεργοποίηση συγχρονισμού</translation>
 <translation id="5244474230056479698">Συγχρονισμός με <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Εμφάνιση</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 3a572c3..d777d74 100644
--- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Private</translation>
 <translation id="5190835502935405962">Bookmarks Bar</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Payment methods and addresses using Google Pay</translation>
 <translation id="5228579091201413441">Enable sync</translation>
 <translation id="5244474230056479698">Syncing to <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Show</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 a2a1d4a..2ce545f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privado</translation>
 <translation id="5190835502935405962">Barra de favoritos</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Formas de pago y direcciones con Google Pay</translation>
 <translation id="5228579091201413441">Habilitar sincronización</translation>
 <translation id="5244474230056479698">Sincronizando con <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Mostrar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb
index 6ad3836..2a40efa 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -54,7 +54,7 @@
 <translation id="1690731385917361335">No hay elementos</translation>
 <translation id="1700629756560807968"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> seleccionados</translation>
 <translation id="1740468249224277719">Toca dos veces para instalar.</translation>
-<translation id="1746815479209538200">Para navegar por la Web, debes añadir una nueva pestaña.</translation>
+<translation id="1746815479209538200">Para navegar por la Web, añade una nueva pestaña.</translation>
 <translation id="17513872634828108">Pestañas abiertas</translation>
 <translation id="1752547299766512813">Guardar contraseñas</translation>
 <translation id="1753905327828125965">Más visitado</translation>
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privado</translation>
 <translation id="5190835502935405962">Barra de marcadores</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Métodos de pago y direcciones con Google Pay</translation>
 <translation id="5228579091201413441">Habilitar sincronización</translation>
 <translation id="5244474230056479698">Sincronizando con <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Mostrar</translation>
@@ -393,7 +394,7 @@
 <translation id="7638584964844754484">Frase de contraseña incorrecta</translation>
 <translation id="7649070708921625228">Ayuda</translation>
 <translation id="7658239707568436148">Cancelar</translation>
-<translation id="766891008101699113">Para navegar por la Web de forma privada, debes añadir una nueva pestaña.</translation>
+<translation id="766891008101699113">Para navegar por la Web de forma privada, añade una nueva pestaña.</translation>
 <translation id="7671141431838911305">INSTALAR</translation>
 <translation id="7765158879357617694">Mover</translation>
 <translation id="7769602470925380267">Aceptar y cerrar sesión</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index ca57e322..f28a243b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privaatne</translation>
 <translation id="5190835502935405962">Järjehoidjariba</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Makseviisid ja aadressid, mis kasutavad teenust Google Pay.</translation>
 <translation id="5228579091201413441">Sünkroonimise lubamine</translation>
 <translation id="5244474230056479698">Sünkroonimine aadressiga <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Kuva</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index d1b46b2a..7243bbb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -249,6 +249,7 @@
 <translation id="5186185447130319458">خصوصی</translation>
 <translation id="5190835502935405962">نوار نشانک‌ها</translation>
 <translation id="5197255632782567636">اینترنت</translation>
+<translation id="5215116848420601511">‏روش‌های پرداخت و نشانی‌های مورداستفاده در Google Pay</translation>
 <translation id="5228579091201413441">فعال کردن همگام‌سازی</translation>
 <translation id="5244474230056479698">درحال همگام‌سازی در <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">نمایش</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index 6866d19..a0c0e1eb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Yksityinen</translation>
 <translation id="5190835502935405962">Kirjanmerkkipalkki</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Maksutavat ja osoitteet Google Paysta</translation>
 <translation id="5228579091201413441">Ota synkronointi käyttöön</translation>
 <translation id="5244474230056479698">Synkronoidaan osoitteeseen <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Näytä</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
index 7c07049d..8b0901d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Pribado</translation>
 <translation id="5190835502935405962">Bar ng Mga Bookmark</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Mga paraan ng pagbabayad at address gamit ang Google Pay</translation>
 <translation id="5228579091201413441">I-enable ang pag-sync</translation>
 <translation id="5244474230056479698">Sini-sync sa <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Ipakita</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
index ea6127b0..282fa42 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privé</translation>
 <translation id="5190835502935405962">Barre de favoris</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Modes de paiement et adresses utilisés dans Google Pay</translation>
 <translation id="5228579091201413441">Activer la synchronisation</translation>
 <translation id="5244474230056479698">Synchronisation avec <ph name="EMAIL" />…</translation>
 <translation id="5300589172476337783">Afficher</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index 0634bf27..8b173488 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -247,6 +247,7 @@
 <translation id="5186185447130319458">ખાનગી</translation>
 <translation id="5190835502935405962">બુકમાર્ક્સ બાર</translation>
 <translation id="5197255632782567636">ઇન્ટરનેટ</translation>
+<translation id="5215116848420601511">Google Payનો ઉપયોગ કરતી ચુકવણી પદ્ધતિઓ અને ઍડ્રેસ</translation>
 <translation id="5228579091201413441">સમન્વયન સક્ષમ કરો</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" /> પર સમન્વયિત કરી રહ્યાં છે</translation>
 <translation id="5300589172476337783">બતાવો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index 809bef5e..ee66beb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">निजी</translation>
 <translation id="5190835502935405962">बुकमार्क बार</translation>
 <translation id="5197255632782567636">इंटरनेट</translation>
+<translation id="5215116848420601511">Google Pay का इस्तेमाल करने वाले भुगतान के तरीके और पते</translation>
 <translation id="5228579091201413441">समन्वयन सक्षम करें</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" /> से समन्वयित हो रहा है</translation>
 <translation id="5300589172476337783">दिखाएं</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index 4366a7d..9f3a349 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privatno</translation>
 <translation id="5190835502935405962">Traka oznaka</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Načini plaćanja i adrese s Google Paya</translation>
 <translation id="5228579091201413441">Omogući sinkronizaciju</translation>
 <translation id="5244474230056479698">Sinkronizacija s računom <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Prikaži</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
index 194be25..3d32133 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privát</translation>
 <translation id="5190835502935405962">Könyvjelzősáv</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">A Google Pay szolgáltatásban használt fizetési módok és címek</translation>
 <translation id="5228579091201413441">Szinkronizálás bekapcsolása</translation>
 <translation id="5244474230056479698">Szinkronizálás a következővel: <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Megjelenítés</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index 33e1b59..6472f49 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Pribadi</translation>
 <translation id="5190835502935405962">Bilah Bookmark</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Metode pembayaran dan alamat yang menggunakan Google Pay</translation>
 <translation id="5228579091201413441">Aktifkan sinkronisasi</translation>
 <translation id="5244474230056479698">Menyinkronkan dengan <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Tampilkan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb
index 065466b4..f4861ef 100644
--- a/ios/chrome/app/strings/resources/ios_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -166,7 +166,7 @@
 <translation id="3588820906588687999">Apri immagine in un'altra scheda</translation>
 <translation id="3603009562372709545">Copia URL link</translation>
 <translation id="3607167657931203000">Dati della Compilazione automatica</translation>
-<translation id="360930808415985584">Controlla la sincronizzazione, la personalizzazione e non solo</translation>
+<translation id="360930808415985584">Controlla la sincronizzazione, la personalizzazione e altro</translation>
 <translation id="3609785682760573515">Sincronizzazione in corso...</translation>
 <translation id="3628119975092896051">Il tuo elenco di lettura è disponibile offline. Per aggiungere una pagina all'elenco di lettura, tocca <ph name="SHARE_OPENING_ICON" />.</translation>
 <translation id="3638472932233958418">Precarica pagine web</translation>
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privata</translation>
 <translation id="5190835502935405962">Barra dei Preferiti</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Metodi di pagamento e indirizzi che utilizzano Google Pay</translation>
 <translation id="5228579091201413441">Abilita sincronizzazione</translation>
 <translation id="5244474230056479698">Sincronizzazione con <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Mostra</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
index 4999830d..e93afea 100644
--- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">פרטי</translation>
 <translation id="5190835502935405962">סרגל הסימניות</translation>
 <translation id="5197255632782567636">אינטרנט</translation>
+<translation id="5215116848420601511">‏אמצעי תשלום וכתובות שנשמרו ב-Google Pay</translation>
 <translation id="5228579091201413441">הפעל סנכרון</translation>
 <translation id="5244474230056479698">מסנכרן ל-<ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">הצג</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index 835549cd2..252a47d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">プライベート接続</translation>
 <translation id="5190835502935405962">ブックマーク バー</translation>
 <translation id="5197255632782567636">インターネット</translation>
+<translation id="5215116848420601511">Google Pay のお支払い方法と住所</translation>
 <translation id="5228579091201413441">同期を有効にする</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" /> に同期しています</translation>
 <translation id="5300589172476337783">表示</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
index 1654144..d2b49ed 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -54,6 +54,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>
@@ -247,6 +248,7 @@
 <translation id="5186185447130319458">ಖಾಸಗಿ</translation>
 <translation id="5190835502935405962">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳ ಬಾರ್</translation>
 <translation id="5197255632782567636">ಇಂಟರ್ನೆಟ್</translation>
+<translation id="5215116848420601511">Google Pay ಅನ್ನು ಬಳಸುವ ಪಾವತಿ ವಿಧಾನಗಳು ಮತ್ತು ವಿಳಾಸಗಳು</translation>
 <translation id="5228579091201413441">ಸಿಂಕ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" /> ಗೆ ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation>
 <translation id="5300589172476337783">ಪ್ರದರ್ಶಿಸಿ</translation>
@@ -392,6 +394,7 @@
 <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>
@@ -399,6 +402,7 @@
 <translation id="7781829728241885113">ನಿನ್ನೆ</translation>
 <translation id="780301667611848630">ಬೇಡ, ಧನ್ಯವಾದಗಳು</translation>
 <translation id="7830720446622801252">ವೈಯಕ್ತಿಕವಲ್ಲದ ಸೇವೆಗಳು</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_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
index 830c6c9..3934e3b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">비공개</translation>
 <translation id="5190835502935405962">북마크바</translation>
 <translation id="5197255632782567636">인터넷</translation>
+<translation id="5215116848420601511">Google Pay에 사용되는 결제 수단 및 주소</translation>
 <translation id="5228579091201413441">동기화 사용</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" />에 동기화</translation>
 <translation id="5300589172476337783">표시</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index c3de7db..8eb10aa 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privatu</translation>
 <translation id="5190835502935405962">Žymių juosta</translation>
 <translation id="5197255632782567636">Internetas</translation>
+<translation id="5215116848420601511">„Google Pay“ naudojami mokėjimo metodai ir adresai</translation>
 <translation id="5228579091201413441">Įgalinti sinchronizavimą</translation>
 <translation id="5244474230056479698">Sinchronizavimas su <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Rodyti</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
index 6c4293f..6ebbb9c9a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privāti</translation>
 <translation id="5190835502935405962">Grāmatzīmju josla</translation>
 <translation id="5197255632782567636">Internets</translation>
+<translation id="5215116848420601511">Adreses un maksājumu veidi, kuros tiek izmantots pakalpojums Google Pay</translation>
 <translation id="5228579091201413441">Iespējot sinhronizāciju</translation>
 <translation id="5244474230056479698">Sinhronizēšana ar <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Rādīt</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
index f1a30b3..b8b6307 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">സ്വകാര്യം</translation>
 <translation id="5190835502935405962">ബുക്ക്‌മാര്‍‌ക്കുകള്‍‌ ബാര്‍‌</translation>
 <translation id="5197255632782567636">ഇന്‍റര്‍നെറ്റ്</translation>
+<translation id="5215116848420601511">Google Pay ഉപയോഗിക്കുന്ന വിലാസങ്ങളും പേയ്മെന്റ് രീതികളും</translation>
 <translation id="5228579091201413441">സമന്വയം പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" /> ഇമെയിലിലേക്ക് സമന്വയിപ്പിക്കുന്നു</translation>
 <translation id="5300589172476337783">കാണിക്കുക</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index cf9575b1..a8e38615 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -249,6 +249,7 @@
 <translation id="5186185447130319458">खाजगी</translation>
 <translation id="5190835502935405962">बुकमार्क बार</translation>
 <translation id="5197255632782567636">इंटरनेट</translation>
+<translation id="5215116848420601511">Google Pay वापरून पेमेंट पद्धती आणि पत्ते</translation>
 <translation id="5228579091201413441">संकालन सक्षम करा</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" /> वर संकालित करीत आहे</translation>
 <translation id="5300589172476337783">दर्शवा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
index fcb58753..188aab2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Peribadi</translation>
 <translation id="5190835502935405962">Bar Penanda Halaman</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Kaedah pembayaran dan alamat yang menggunakan Google Pay</translation>
 <translation id="5228579091201413441">Dayakan penyegerakan</translation>
 <translation id="5244474230056479698">Menyegerak ke <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Paparkan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
index 1675b07..e0412a9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privé</translation>
 <translation id="5190835502935405962">Bladwijzerbalk</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Betaalmethoden en adressen die Google Pay gebruiken</translation>
 <translation id="5228579091201413441">Synchronisatie inschakelen</translation>
 <translation id="5244474230056479698">Synchroniseren met <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Weergeven</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index b5712e4f..e33fe57 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privat</translation>
 <translation id="5190835502935405962">Bokmerkerad</translation>
 <translation id="5197255632782567636">Internett</translation>
+<translation id="5215116848420601511">Betalingsmåter og adresser som bruker Google Pay</translation>
 <translation id="5228579091201413441">Slå på synkronisering</translation>
 <translation id="5244474230056479698">Synkroniserer til <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Vis</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index 1a2606e..62b8d1d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Prywatna</translation>
 <translation id="5190835502935405962">Pasek zakładek</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Formy płatności i adresy z Google Pay</translation>
 <translation id="5228579091201413441">Włącz synchronizację</translation>
 <translation id="5244474230056479698">Synchronizowanie z <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Pokaż</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
index 3c1cda5..6633f87 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -249,6 +249,7 @@
 <translation id="5186185447130319458">Particular</translation>
 <translation id="5190835502935405962">Barra de favoritos</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Formas de pagamento e endereços que usam o Google Pay</translation>
 <translation id="5228579091201413441">Ativar sincronização</translation>
 <translation id="5244474230056479698">Sincronizado com <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Mostrar</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 7ed28ef..1ab6643 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privado</translation>
 <translation id="5190835502935405962">Barra de marcadores</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Métodos de pagamento e endereços com o Google Pay</translation>
 <translation id="5228579091201413441">Ativar a sincronização</translation>
 <translation id="5244474230056479698">A sincronizar com <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Mostrar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
index 3bfe547c..e4afaba 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privat</translation>
 <translation id="5190835502935405962">Bară de marcaje</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Metodele de plată și adresele care folosesc Google Pay</translation>
 <translation id="5228579091201413441">Activează sincronizarea</translation>
 <translation id="5244474230056479698">Se sincronizează cu <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Afișează</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
index 4893095..6479b1c5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Конфиденциально</translation>
 <translation id="5190835502935405962">Панель закладок</translation>
 <translation id="5197255632782567636">Интернет</translation>
+<translation id="5215116848420601511">Способы оплаты и адреса из Google Pay</translation>
 <translation id="5228579091201413441">Включить синхронизацию</translation>
 <translation id="5244474230056479698">Синхронизация с <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Показать</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index 134abeb..05c0ee9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Súkromné</translation>
 <translation id="5190835502935405962">Panel so záložkami</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Spôsoby platby a adresy pomocou Google Pay</translation>
 <translation id="5228579091201413441">Povoliť synchronizáciu</translation>
 <translation id="5244474230056479698">Synchronizácia do účtu <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Zobraziť</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
index c82865f..c0116ff 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -246,6 +246,7 @@
 <translation id="5186185447130319458">Zasebno</translation>
 <translation id="5190835502935405962">Vrstica z zaznamki</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Plačilna sredstva in naslovi z Googlom Pay</translation>
 <translation id="5228579091201413441">Omogoči sinhronizacijo</translation>
 <translation id="5244474230056479698">Syncing to <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Pokaži</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index dfec100..1d060ca 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Приватно</translation>
 <translation id="5190835502935405962">Трака са обележивачима</translation>
 <translation id="5197255632782567636">Интернет</translation>
+<translation id="5215116848420601511">Начини плаћања и адресе из Google Pay-а</translation>
 <translation id="5228579091201413441">Омогући синхронизацију</translation>
 <translation id="5244474230056479698">Синхронизује се са <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Прикажи</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
index f34371fb..6946cb4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Privat</translation>
 <translation id="5190835502935405962">Bokmärkesfältet</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Betalningsmetoder och adresser som används med Google Pay</translation>
 <translation id="5228579091201413441">Aktivera synkronisering</translation>
 <translation id="5244474230056479698">Synkroniseras med <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Visa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
index 47f9d10..8ff58cb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Faragha</translation>
 <translation id="5190835502935405962">Sehemu ya Alamisho</translation>
 <translation id="5197255632782567636">Wavuti</translation>
+<translation id="5215116848420601511">Njia za kulipa na anwani zinazotumia Google Pay</translation>
 <translation id="5228579091201413441">Washa usawazishaji</translation>
 <translation id="5244474230056479698">Inasawazisha kwenye <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Onyesha</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
index 2a79787..4c90ec3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">தனிப்பட்டது</translation>
 <translation id="5190835502935405962">புக்மார்க்குகள் பட்டி</translation>
 <translation id="5197255632782567636">இணையம்</translation>
+<translation id="5215116848420601511">Google Payவைப் பயன்படுத்தும் கட்டண முறைகளும் முகவரிகளும்</translation>
 <translation id="5228579091201413441">ஒத்திசைவை இயக்கு</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" />க்கு ஒத்திசைக்கிறது</translation>
 <translation id="5300589172476337783">காண்பி</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb
index be744ef0..9b75245 100644
--- a/ios/chrome/app/strings/resources/ios_strings_te.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -247,6 +247,7 @@
 <translation id="5186185447130319458">ప్రైవేట్</translation>
 <translation id="5190835502935405962">బుక్‌మార్క్‌ల బార్</translation>
 <translation id="5197255632782567636">ఇంటర్నెట్</translation>
+<translation id="5215116848420601511">Google Payని ఉపయోగిస్తున్న చెల్లింపు పద్ధతులు మరియు చిరునామాలు</translation>
 <translation id="5228579091201413441">సమకాలీకరణను ప్రారంభించండి</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" />కి సమకాలీకరిస్తోంది</translation>
 <translation id="5300589172476337783">చూపించు</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index 5dfb4d3..78add55 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -246,6 +246,7 @@
 <translation id="5186185447130319458">ส่วนตัว</translation>
 <translation id="5190835502935405962">แถบบุ๊กมาร์ก</translation>
 <translation id="5197255632782567636">อินเทอร์เน็ต</translation>
+<translation id="5215116848420601511">วิธีการชำระเงินและที่อยู่จาก Google Pay</translation>
 <translation id="5228579091201413441">เปิดใช้การซิงค์</translation>
 <translation id="5244474230056479698">กำลังซิงค์กับ <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">แสดง</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index 043330c..d91f90e4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Gizli</translation>
 <translation id="5190835502935405962">Yer İşareti Çubuğu</translation>
 <translation id="5197255632782567636">İnternet</translation>
+<translation id="5215116848420601511">Google Pay'i kullanan ödeme yöntemleri ve adresler</translation>
 <translation id="5228579091201413441">Senkronizasyonu etkinleştir</translation>
 <translation id="5244474230056479698"><ph name="EMAIL" /> hesabıyla senkronize ediliyor</translation>
 <translation id="5300589172476337783">Göster</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
index e8385b556..d93d39f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Конфіденційно</translation>
 <translation id="5190835502935405962">Панель закладок</translation>
 <translation id="5197255632782567636">Інтернет</translation>
+<translation id="5215116848420601511">Способи оплати й адреси, пов’язані з Google Pay</translation>
 <translation id="5228579091201413441">Увімкнути синхронізацію</translation>
 <translation id="5244474230056479698">Синхронізація з обліковим записом <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Показати</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
index 9f75feef..7c0bcc0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">Riêng tư</translation>
 <translation id="5190835502935405962">Thanh Dấu trang</translation>
 <translation id="5197255632782567636">Internet</translation>
+<translation id="5215116848420601511">Địa chỉ và phương thức thanh toán sử dụng Google Pay</translation>
 <translation id="5228579091201413441">Bật đồng bộ hóa</translation>
 <translation id="5244474230056479698">Đang đồng bộ hóa với <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">Hiển thị</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
index c9b0098..1e76de4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -54,6 +54,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>
@@ -247,6 +248,7 @@
 <translation id="5186185447130319458">不公开</translation>
 <translation id="5190835502935405962">书签栏</translation>
 <translation id="5197255632782567636">互联网</translation>
+<translation id="5215116848420601511">Google Pay 中存储的付款方式和地址信息</translation>
 <translation id="5228579091201413441">启用同步功能</translation>
 <translation id="5244474230056479698">同步到 <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">显示</translation>
@@ -392,6 +394,7 @@
 <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>
@@ -399,6 +402,7 @@
 <translation id="7781829728241885113">昨天</translation>
 <translation id="780301667611848630">不用了,谢谢</translation>
 <translation id="7830720446622801252">非个性化服务</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_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
index b2c9800..f67013c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -248,6 +248,7 @@
 <translation id="5186185447130319458">私人</translation>
 <translation id="5190835502935405962">書籤列</translation>
 <translation id="5197255632782567636">網際網路</translation>
+<translation id="5215116848420601511">儲存在 Google Pay 的付款方式和地址資訊</translation>
 <translation id="5228579091201413441">啟用同步功能</translation>
 <translation id="5244474230056479698">同步到 <ph name="EMAIL" /></translation>
 <translation id="5300589172476337783">顯示</translation>
diff --git a/ios/chrome/browser/BUILD.gn b/ios/chrome/browser/BUILD.gn
index a906447c..549c2e02 100644
--- a/ios/chrome/browser/BUILD.gn
+++ b/ios/chrome/browser/BUILD.gn
@@ -210,6 +210,7 @@
     "//ios/web/public/app",
     "//net",
     "//rlz/buildflags",
+    "//services/network:network_service",
     "//ui/base",
   ]
 
diff --git a/ios/chrome/browser/DEPS b/ios/chrome/browser/DEPS
index 6c856b1..c732355 100644
--- a/ios/chrome/browser/DEPS
+++ b/ios/chrome/browser/DEPS
@@ -106,6 +106,7 @@
   "+rlz/buildflags",
   "+services/identity/public",
   "+services/metrics/public",
+  "+services/network/network_change_manager.h",
   "+services/network/public/mojom",
   "+services/network/public/cpp",
   "+services/service_manager/public",
diff --git a/ios/chrome/browser/application_context.h b/ios/chrome/browser/application_context.h
index bfdcf5e..37b4000 100644
--- a/ios/chrome/browser/application_context.h
+++ b/ios/chrome/browser/application_context.h
@@ -39,6 +39,7 @@
 }
 
 namespace network {
+class NetworkConnectionTracker;
 class SharedURLLoaderFactory;
 namespace mojom {
 class NetworkContext;
@@ -139,6 +140,9 @@
   virtual component_updater::ComponentUpdateService*
   GetComponentUpdateService() = 0;
 
+  // Returns the NetworkConnectionTracker instance for this ApplicationContext.
+  virtual network::NetworkConnectionTracker* GetNetworkConnectionTracker() = 0;
+
  protected:
   // Sets the global ApplicationContext instance.
   static void SetApplicationContext(ApplicationContext* context);
diff --git a/ios/chrome/browser/application_context_impl.cc b/ios/chrome/browser/application_context_impl.cc
index b7db100..359def6 100644
--- a/ios/chrome/browser/application_context_impl.cc
+++ b/ios/chrome/browser/application_context_impl.cc
@@ -55,6 +55,8 @@
 #include "net/socket/client_socket_pool_manager.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
+#include "services/network/network_change_manager.h"
+#include "services/network/public/cpp/network_connection_tracker.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
 
 namespace {
@@ -79,6 +81,13 @@
                                 app_context, std::move(request)));
 }
 
+// Passed to NetworkConnectionTracker to bind a NetworkChangeManagerRequest.
+void BindNetworkChangeManagerRequest(
+    network::NetworkChangeManager* network_change_manager,
+    network::mojom::NetworkChangeManagerRequest request) {
+  network_change_manager->AddRequest(std::move(request));
+}
+
 }  // namespace
 
 ApplicationContextImpl::ApplicationContextImpl(
@@ -345,6 +354,21 @@
   return component_updater_.get();
 }
 
+network::NetworkConnectionTracker*
+ApplicationContextImpl::GetNetworkConnectionTracker() {
+  if (!network_connection_tracker_) {
+    if (!network_change_manager_) {
+      network_change_manager_ =
+          std::make_unique<network::NetworkChangeManager>(nullptr);
+    }
+    network_connection_tracker_ =
+        std::make_unique<network::NetworkConnectionTracker>(base::BindRepeating(
+            &BindNetworkChangeManagerRequest,
+            base::Unretained(network_change_manager_.get())));
+  }
+  return network_connection_tracker_.get();
+}
+
 void ApplicationContextImpl::SetApplicationLocale(const std::string& locale) {
   DCHECK(thread_checker_.CalledOnValidThread());
   application_locale_ = locale;
diff --git a/ios/chrome/browser/application_context_impl.h b/ios/chrome/browser/application_context_impl.h
index b868ba5..76bbed4 100644
--- a/ios/chrome/browser/application_context_impl.h
+++ b/ios/chrome/browser/application_context_impl.h
@@ -21,6 +21,7 @@
 }
 
 namespace network {
+class NetworkChangeManager;
 class WeakWrapperSharedURLLoaderFactory;
 }
 
@@ -68,6 +69,7 @@
   gcm::GCMDriver* GetGCMDriver() override;
   component_updater::ComponentUpdateService* GetComponentUpdateService()
       override;
+  network::NetworkConnectionTracker* GetNetworkConnectionTracker() override;
 
  private:
   // Sets the locale used by the application.
@@ -102,6 +104,10 @@
   // Created on the UI thread, destroyed on the IO thread.
   std::unique_ptr<web::NetworkContextOwner> network_context_owner_;
 
+  std::unique_ptr<network::NetworkChangeManager> network_change_manager_;
+  std::unique_ptr<network::NetworkConnectionTracker>
+      network_connection_tracker_;
+
   bool was_last_shutdown_clean_;
 
   DISALLOW_COPY_AND_ASSIGN(ApplicationContextImpl);
diff --git a/ios/chrome/browser/google/BUILD.gn b/ios/chrome/browser/google/BUILD.gn
index b629ee4..b805688 100644
--- a/ios/chrome/browser/google/BUILD.gn
+++ b/ios/chrome/browser/google/BUILD.gn
@@ -17,6 +17,7 @@
     "//components/google/core/browser",
     "//components/keyed_service/ios",
     "//components/prefs",
+    "//ios/chrome/browser",
     "//ios/chrome/browser/browser_state",
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/distribution",
diff --git a/ios/chrome/browser/google/google_url_tracker_factory.cc b/ios/chrome/browser/google/google_url_tracker_factory.cc
index 1f3081c..f62da15 100644
--- a/ios/chrome/browser/google/google_url_tracker_factory.cc
+++ b/ios/chrome/browser/google/google_url_tracker_factory.cc
@@ -10,6 +10,7 @@
 #include "components/google/core/browser/google_url_tracker.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
 #include "components/prefs/pref_service.h"
+#include "ios/chrome/browser/application_context.h"
 #include "ios/chrome/browser/browser_state/browser_state_otr_helper.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/google/google_url_tracker_client_impl.h"
@@ -49,7 +50,8 @@
 
   return std::make_unique<GoogleURLTracker>(
       base::WrapUnique(new GoogleURLTrackerClientImpl(browser_state)),
-      GoogleURLTracker::NORMAL_MODE, context->GetNetworkConnectionTracker());
+      GoogleURLTracker::NORMAL_MODE,
+      GetApplicationContext()->GetNetworkConnectionTracker());
 }
 
 web::BrowserState* GoogleURLTrackerFactory::GetBrowserStateToUse(
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm
index ac381d9..bb9527b 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm
@@ -76,7 +76,9 @@
   return variations::VariationsService::Create(
       std::make_unique<IOSChromeVariationsServiceClient>(), local_state_,
       GetMetricsStateManager(), "dummy-disable-background-switch",
-      ::CreateUIStringOverrider());
+      ::CreateUIStringOverrider(),
+      base::BindOnce(&ApplicationContext::GetNetworkConnectionTracker,
+                     base::Unretained(GetApplicationContext())));
 }
 
 std::unique_ptr<metrics::MetricsServiceClient>
diff --git a/ios/chrome/browser/translate/translate_service_ios.cc b/ios/chrome/browser/translate/translate_service_ios.cc
index 2df8f01..9a9c93f 100644
--- a/ios/chrome/browser/translate/translate_service_ios.cc
+++ b/ios/chrome/browser/translate/translate_service_ios.cc
@@ -19,8 +19,10 @@
 TranslateServiceIOS::TranslateServiceIOS()
     : resource_request_allowed_notifier_(
           GetApplicationContext()->GetLocalState(),
-          nullptr) {
-  resource_request_allowed_notifier_.Init(this);
+          nullptr,
+          base::BindOnce(&ApplicationContext::GetNetworkConnectionTracker,
+                         base::Unretained(GetApplicationContext()))) {
+  resource_request_allowed_notifier_.Init(this, false /* leaky */);
 }
 
 TranslateServiceIOS::~TranslateServiceIOS() {
diff --git a/ios/chrome/browser/ui/download/download_manager_egtest.mm b/ios/chrome/browser/ui/download/download_manager_egtest.mm
index 93d124a..28a130a 100644
--- a/ios/chrome/browser/ui/download/download_manager_egtest.mm
+++ b/ios/chrome/browser/ui/download/download_manager_egtest.mm
@@ -8,6 +8,7 @@
 #include "ios/chrome/browser/chrome_url_constants.h"
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/chrome/test/app/tab_test_util.h"
+#include "ios/chrome/test/earl_grey/accessibility_util.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
@@ -160,4 +161,30 @@
   GREYAssert(WaitForOpenInButton(), @"Open in... button did not show up");
 }
 
+// Tests accessibility on Download Manager UI when download is not started.
+- (void)testAccessibilityOnNotStartedDownloadToolbar {
+  [ChromeEarlGrey loadURL:self.testServer->GetURL("/")];
+  [ChromeEarlGrey waitForWebViewContainingText:"Download"];
+  [ChromeEarlGrey tapWebViewElementWithID:@"download"];
+
+  [[EarlGrey selectElementWithMatcher:DownloadButton()]
+      assertWithMatcher:grey_notNil()];
+
+  chrome_test_util::VerifyAccessibilityForCurrentScreen();
+}
+
+// Tests accessibility on Download Manager UI when download is complete.
+- (void)testAccessibilityOnCompletedDownloadToolbar {
+  [ChromeEarlGrey loadURL:self.testServer->GetURL("/")];
+  [ChromeEarlGrey waitForWebViewContainingText:"Download"];
+  [ChromeEarlGrey tapWebViewElementWithID:@"download"];
+
+  [[EarlGrey selectElementWithMatcher:DownloadButton()]
+      performAction:grey_tap()];
+
+  GREYAssert(WaitForOpenInButton(), @"Open in... button did not show up");
+
+  chrome_test_util::VerifyAccessibilityForCurrentScreen();
+}
+
 @end
diff --git a/ios/chrome/browser/ui/download/radial_progress_view.mm b/ios/chrome/browser/ui/download/radial_progress_view.mm
index 31c9246c..ea631be 100644
--- a/ios/chrome/browser/ui/download/radial_progress_view.mm
+++ b/ios/chrome/browser/ui/download/radial_progress_view.mm
@@ -52,6 +52,7 @@
     self.trackLayer.lineWidth = self.lineWidth;
 
     [self.trackLayer addSublayer:self.progressLayer];
+    [self updateProgressLayer];
   }
 }
 
@@ -60,13 +61,24 @@
 - (void)setProgress:(float)progress {
   if (_progress != progress) {
     _progress = progress;
-    self.progressLayer.path =
-        [self progressPathWithEndAngle:M_PI * 2 * progress - M_PI_2].CGPath;
+    [self updateProgressLayer];
   }
 }
 
 #pragma mark - Private
 
+// Creates progressLayer if necessary and updates its path.
+- (void)updateProgressLayer {
+  if (!self.superview) {
+    // view is not ready yet. -updateProgressLayer will be called again from
+    // -willMoveToSuperview:.
+    return;
+  }
+
+  self.progressLayer.path =
+      [self progressPathWithEndAngle:M_PI * 2 * self.progress - M_PI_2].CGPath;
+}
+
 // Returns Bezier path for drawing radial progress or track. Start angle is
 // always 12 o'clock.
 - (UIBezierPath*)progressPathWithEndAngle:(CGFloat)endAngleInRadians {
diff --git a/ios/chrome/test/testing_application_context.h b/ios/chrome/test/testing_application_context.h
index ea8b4d2..e9f99ec 100644
--- a/ios/chrome/test/testing_application_context.h
+++ b/ios/chrome/test/testing_application_context.h
@@ -59,6 +59,7 @@
   gcm::GCMDriver* GetGCMDriver() override;
   component_updater::ComponentUpdateService* GetComponentUpdateService()
       override;
+  network::NetworkConnectionTracker* GetNetworkConnectionTracker() override;
 
  private:
   base::ThreadChecker thread_checker_;
diff --git a/ios/chrome/test/testing_application_context.mm b/ios/chrome/test/testing_application_context.mm
index 85c7afd..9922836 100644
--- a/ios/chrome/test/testing_application_context.mm
+++ b/ios/chrome/test/testing_application_context.mm
@@ -179,3 +179,9 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   return nullptr;
 }
+
+network::NetworkConnectionTracker*
+TestingApplicationContext::GetNetworkConnectionTracker() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  return nullptr;
+}
diff --git a/ios/third_party/material_components_ios/README.chromium b/ios/third_party/material_components_ios/README.chromium
index d06bfa4..b4359df 100644
--- a/ios/third_party/material_components_ios/README.chromium
+++ b/ios/third_party/material_components_ios/README.chromium
@@ -1,7 +1,7 @@
 Name: Material Components for iOS
 URL: https://github.com/material-components/material-components-ios
 Version: 0
-Revision: 10aa5899c7886cb165f2e8bd4e9d490ddd9b8bb4
+Revision: 5ad0381e31e16deaf2a958c8438b6d05b8e0dca2
 License: Apache 2.0
 License File: LICENSE
 Security Critical: yes
diff --git a/ios/web/DEPS b/ios/web/DEPS
index 375657e..7f2767d7 100644
--- a/ios/web/DEPS
+++ b/ios/web/DEPS
@@ -5,7 +5,6 @@
   "+ios/web",
   "+mojo/public",
   "+net",
-  "+services/network/network_change_manager.h",
   "+services/network/network_context.h",
   "+services/network/public/cpp",
   "+services/network/public/mojom",
diff --git a/ios/web/browser_state.mm b/ios/web/browser_state.mm
index df3dcaf..37c8d2e 100644
--- a/ios/web/browser_state.mm
+++ b/ios/web/browser_state.mm
@@ -23,9 +23,7 @@
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "net/url_request/url_request_context_getter_observer.h"
-#include "services/network/network_change_manager.h"
 #include "services/network/network_context.h"
-#include "services/network/public/cpp/network_connection_tracker.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
 #include "services/service_manager/public/cpp/connector.h"
 #include "services/service_manager/public/mojom/service.mojom.h"
@@ -109,13 +107,6 @@
   DISALLOW_COPY_AND_ASSIGN(BrowserStateServiceManagerConnectionHolder);
 };
 
-// Passed to NetworkConnectionTracker to bind a NetworkChangeManagerRequest.
-void BindNetworkChangeManagerRequest(
-    network::NetworkChangeManager* network_change_manager,
-    network::mojom::NetworkChangeManagerRequest request) {
-  network_change_manager->AddRequest(std::move(request));
-}
-
 }  // namespace
 
 // static
@@ -198,19 +189,6 @@
   return cookie_manager_.get();
 }
 
-network::NetworkConnectionTracker* BrowserState::GetNetworkConnectionTracker() {
-  if (!network_connection_tracker_) {
-    DCHECK(!network_change_manager_);
-    network_change_manager_ =
-        std::make_unique<network::NetworkChangeManager>(nullptr);
-    network_connection_tracker_ =
-        std::make_unique<network::NetworkConnectionTracker>(base::BindRepeating(
-            &BindNetworkChangeManagerRequest,
-            base::Unretained(network_change_manager_.get())));
-  }
-  return network_connection_tracker_.get();
-}
-
 void BrowserState::GetProxyResolvingSocketFactory(
     network::mojom::ProxyResolvingSocketFactoryRequest request) {
   CreateNetworkContextIfNecessary();
diff --git a/ios/web/public/browser_state.h b/ios/web/public/browser_state.h
index 535b5174..878d5507 100644
--- a/ios/web/public/browser_state.h
+++ b/ios/web/public/browser_state.h
@@ -23,8 +23,6 @@
 }
 
 namespace network {
-class NetworkChangeManager;
-class NetworkConnectionTracker;
 class SharedURLLoaderFactory;
 class WeakWrapperSharedURLLoaderFactory;
 }  // namespace network
@@ -70,9 +68,6 @@
   // Returns a CookieManager that is backed by GetRequestContext.
   network::mojom::CookieManager* GetCookieManager();
 
-  // Returns the NetworkConnectionTracker instance for this BrowserState.
-  network::NetworkConnectionTracker* GetNetworkConnectionTracker();
-
   // Binds a ProxyResolvingSocketFactory request to NetworkContext.
   void GetProxyResolvingSocketFactory(
       network::mojom::ProxyResolvingSocketFactoryRequest request);
@@ -134,12 +129,6 @@
       shared_url_loader_factory_;
   network::mojom::NetworkContextPtr network_context_;
 
-  // Acts as a proxy between the NetworkChangeNotifier and
-  // NetworkConnectionTracker.
-  std::unique_ptr<network::NetworkChangeManager> network_change_manager_;
-  std::unique_ptr<network::NetworkConnectionTracker>
-      network_connection_tracker_;
-
   // Owns the network::NetworkContext that backs |url_loader_factory_|. Created
   // on the UI thread, destroyed on the IO thread.
   std::unique_ptr<NetworkContextOwner> network_context_owner_;
diff --git a/ios/web/public/web_state/web_frame.h b/ios/web/public/web_state/web_frame.h
index fcba564..347bd751 100644
--- a/ios/web/public/web_state/web_frame.h
+++ b/ios/web/public/web_state/web_frame.h
@@ -10,6 +10,10 @@
 #include "base/macros.h"
 #include "url/gurl.h"
 
+namespace base {
+class Value;
+}
+
 namespace web {
 
 class WebFrame {
@@ -22,6 +26,21 @@
   // The security origin associated with this frame.
   virtual GURL GetSecurityOrigin() const = 0;
 
+  // Calls the JavaScript function |name| in the frame context. For example, to
+  // call __gCrWeb.form.trackFormMutations(delay), pass
+  // 'form.trackFormMutations' as |name| and the value for the delay parameter
+  // to |parameters|. |name| must point to a function in the __gCrWeb object.
+  // |parameters| is a vector of values that will be passed to the function.
+  // This method returns immediately without waiting for the JavaScript
+  // execution. Calling the function is best effort and it is possible the
+  // webpage DOM could change in a way which prevents the function from
+  // executing.
+  // Returns true if function call was requested, false otherwise. Function call
+  // may still fail even if this function returns true.
+  virtual bool CallJavaScriptFunction(
+      const std::string& name,
+      const std::vector<base::Value>& parameters) = 0;
+
   virtual ~WebFrame() {}
 
  protected:
diff --git a/ios/web/web_state/BUILD.gn b/ios/web/web_state/BUILD.gn
index aaccfb10..ca6aed1 100644
--- a/ios/web/web_state/BUILD.gn
+++ b/ios/web/web_state/BUILD.gn
@@ -167,6 +167,7 @@
 source_set("web_frame") {
   deps = [
     "//base",
+    "//crypto",
     "//ios/web/public",
     "//url",
   ]
diff --git a/ios/web/web_state/js/resources/frame_messaging.js b/ios/web/web_state/js/resources/frame_messaging.js
index 150fa52f..10b71f2 100644
--- a/ios/web/web_state/js/resources/frame_messaging.js
+++ b/ios/web/web_state/js/resources/frame_messaging.js
@@ -38,6 +38,14 @@
 var frameSymmetricKey_ = null;
 
 /**
+ * The ID of the last processed message. If a received message has an ID less
+ * than or equal to |lastReceivedMessageId_|, it will be ignored.
+ * @type {number}
+ * @private
+ */
+var lastReceivedMessageId_ = -1;
+
+/**
  * Returns the frameId associated with this frame. A new value will be created
  * for this frame the first time it is called. The frameId will persist as long
  * as this JavaScript context lives. For example, the frameId will be the same
@@ -59,6 +67,19 @@
 };
 
 /**
+ * Returns whether or not frame messaging is supported for this frame.
+ * @returns true if frame messaging is supported, false otherwise.
+ */
+var isFrameMessagingSupported_ = function() {
+  // - Only secure contexts support the crypto.subtle API.
+  // - Even though iOS 10 supports window.crypto.webkitSubtle instead of
+  //   window.crypto.subtle, the AES-GCM cipher suite is not supported, so
+  //   support will only be used from the official WebCrypto API.
+  //   TODO(crbug.com/872818): Remove comment once only iOS 11+ is supported.
+  return window.isSecureContext && typeof window.crypto.subtle === 'object';
+}
+
+/**
  * Exports |frameSymmetricKey_| as a base64 string. Key will be created if it
  * does not already exist.
  * @param {function(string)} callback A callback to be run with the exported
@@ -67,23 +88,24 @@
 var exportKey_ = function(callback) {
   // Early return with an empty key string if encryption is not supported in
   // this frame.
-  // - Insecure contexts do not support the crypto.subtle API.
-  // - Even though iOS 10 supports window.crypto.webkitSubtle instead of
-  //   window.crypto.subtle, the AES-GCM cipher suite is not supported, so
-  //   support will only be used from the official WebCrypto API.
-  //   TODO(crbug.com/872818): Remove comment once only iOS 11+ is supported.
-  if (!window.isSecureContext || !window.crypto.subtle) {
+  if (!isFrameMessagingSupported_()) {
     callback("");
     return;
   }
-  getFrameSymmetricKey_(function(key) {
-    window.crypto.subtle.exportKey('raw', key)
-        .then(function(/** @type {ArrayBuffer} */ k) {
-      var keyBytes = new Uint8Array(k);
-      var key64 = btoa(String.fromCharCode.apply(null, keyBytes));
-      callback(key64);
+  try {
+    getFrameSymmetricKey_(function(key) {
+      window.crypto.subtle.exportKey('raw', key)
+          .then(function(/** @type {ArrayBuffer} */ k) {
+        var keyBytes = new Uint8Array(k);
+        var key64 = btoa(String.fromCharCode.apply(null, keyBytes));
+        callback(key64);
+      });
     });
-  });
+  } catch (error) {
+    // AES-GCM will not be supported if a web developer overrode
+    // window.crypto.subtle with window.crypto.webkitSubtle on iOS 10.
+    callback("");
+  }
 };
 
 /**
@@ -110,6 +132,110 @@
 };
 
 /**
+ * Executes |functionName| on __gCrWeb with the given |parameters|.
+ * @param {!string} functionPath The function to execute on __gCrWeb. Components
+ *                  may be separated by periods. For example: messaging.function
+ * @param {!Array} parameters The parameters to pass to |functionName|.
+ * @return The return value of executing |functionName| or null if it couldn't
+ *         be executed.
+ */
+var callGCrWebFunction_ = function(functionPath, parameters) {
+  var functionReference = __gCrWeb;
+  var functionComponents = functionPath.split('.');
+  for (var component in functionComponents) {
+    functionReference = functionReference[component];
+    if (!functionReference) {
+      return null;
+    }
+  }
+  return functionReference.apply(null, parameters);
+}
+
+/**
+ * Decrypts and executes the function specified in |payload|.
+ * @param {!string} payload The encrypted message payload.
+ * @param {!string} iv The initialization vector used to encrypt the |payload|.
+ */
+var executeMessage_ = function(payload, iv) {
+  if (!frameSymmetricKey_) {
+    // Payload cannot be decrypted without a key. This message could be spam or
+    // sent by the native application by mistake.
+    return;
+  }
+
+  // Decode the base64 payload.
+  var encryptedFunctionArray =
+      new Uint8Array(Array.from(atob(payload)).map(function(a) {
+    return a.charCodeAt(0);
+  }));
+
+  // Decode the base64 initialization buffer.
+  var ivbuf = new Uint8Array(Array.from(atob(iv)).map(function(a) {
+    return a.charCodeAt(0);
+  }));
+
+  var algorithm = {'name': 'AES-GCM', iv: ivbuf};
+  getFrameSymmetricKey_(function(frameKey) {
+    window.crypto.subtle.decrypt(algorithm, frameKey, encryptedFunctionArray)
+        .then(function(decrypted) {
+      var callJSON =
+          String.fromCharCode.apply(null, new Uint8Array(decrypted));
+      var callDict = JSON.parse(callJSON);
+
+      // Verify that message id is valid.
+      if (!Number.isInteger(callDict['messageId']) ||
+          callDict['messageId'] <= lastReceivedMessageId_) {
+              return;
+      }
+      lastReceivedMessageId_ = callDict['messageId'];
+
+      if (typeof callDict['functionName'] !== 'string' ||
+          callDict['functionName'].length < 1 ||
+          !Array.isArray(callDict['parameters'])) {
+        return;
+      }
+
+      callGCrWebFunction_(callDict['functionName'], callDict['parameters']);
+    });
+  });
+};
+
+/**
+ * Routes an encrypted message to the targeted frame. Once the target frame is
+ * found, the |payload| will be decrypted and executed. This function is called
+ * by the native code.
+ * @param {!string} payload The encrypted message payload.
+ * @param {!string} iv The initialization vector used to encrypt the |payload|.
+ * @param {!string} target_frame_id The |frameId_| of the frame which should
+ *                  process the |payload|.
+ */
+__gCrWeb.frameMessaging['routeMessage'] =
+    function(payload, iv, target_frame_id) {
+  if (!isFrameMessagingSupported_()) {
+    // API is unsupported.
+    return;
+  }
+
+  if (target_frame_id === __gCrWeb.frameMessaging['getFrameId']()) {
+    executeMessage_(payload, iv);
+    return;
+  }
+
+  var framecount = window.frames.length;
+  for (var i = 0; i < framecount; i++) {
+    window.frames[i].postMessage(
+      {
+        type: 'org.chromium.encryptedMessage',
+        payload: payload,
+        iv: iv,
+        target_frame_id: target_frame_id
+      },
+      '*'
+    );
+  }
+};
+
+/**
  * Creates (or gets the existing) encryption key and sends it to the native
  * application.
  */
@@ -117,7 +243,8 @@
   exportKey_(function(frameKey) {
     __gCrWeb.common.sendWebKitMessage('FrameBecameAvailable', {
       'crwFrameId': __gCrWeb.frameMessaging['getFrameId'](),
-      'crwFrameKey': frameKey
+      'crwFrameKey': frameKey,
+      'crwFrameLastReceivedMessageId': lastReceivedMessageId_
     });
   });
 };
diff --git a/ios/web/web_state/js/resources/setup_frame.js b/ios/web/web_state/js/resources/setup_frame.js
index d98c354..124dec8 100644
--- a/ios/web/web_state/js/resources/setup_frame.js
+++ b/ios/web/web_state/js/resources/setup_frame.js
@@ -32,6 +32,17 @@
   if (payload.hasOwnProperty('type') &&
     payload.type == 'org.chromium.registerForFrameMessaging') {
     __gCrWeb.frameMessaging['getExistingFrames']();
+  } else if (payload.hasOwnProperty('type') &&
+      payload.type == 'org.chromium.encryptedMessage') {
+    if (message.hasOwnProperty('payload') &&
+        message.hasOwnProperty('iv') &&
+        message.hasOwnProperty('target_frame_id')) {
+      __gCrWeb.frameMessaging['routeMessage'](
+        message['payload'],
+        message['iv'],
+        message['target_frame_id']
+      );
+    }
   }
 });
 
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index f5fe72d2..9a2c5a76 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -10,6 +10,7 @@
 #include <stddef.h>
 
 #include <cmath>
+#include <limits>
 #include <memory>
 #include <utility>
 #include <vector>
@@ -2454,7 +2455,9 @@
   if (_isBeingDestroyed || ![message.body isKindOfClass:[NSDictionary class]] ||
       ![message.body[@"crwFrameId"] isKindOfClass:[NSString class]] ||
       ![message.body[@"crwFrameKey"] isKindOfClass:[NSString class]] ||
-      [message.body[@"crwFrameKey"] length] == 0) {
+      [message.body[@"crwFrameKey"] length] == 0 ||
+      ![message.body[@"crwFrameLastReceivedMessageId"]
+          isKindOfClass:[NSNumber class]]) {
     // WebController is being destroyed, message is invalid, or frame does not
     // have a key.
     return;
@@ -2466,6 +2469,7 @@
   std::string frameID = base::SysNSStringToUTF8(message.body[@"crwFrameId"]);
   std::string encodedFrameKeyString =
       base::SysNSStringToUTF8(message.body[@"crwFrameKey"]);
+  NSNumber* lastSentMessageID = message.body[@"crwFrameLastReceivedMessageId"];
   if (!framesManager->GetFrameWithId(frameID)) {
     GURL messageFrameOrigin =
         web::GURLOriginWithWKSecurityOrigin(message.frameInfo.securityOrigin);
@@ -2476,9 +2480,12 @@
         crypto::SymmetricKey::Import(crypto::SymmetricKey::Algorithm::AES,
                                      decodedFrameKeyString);
     if (frameKey) {
+      int initialMessageID = lastSentMessageID.intValue == INT_MAX
+                                 ? 0
+                                 : lastSentMessageID.intValue + 1;
       auto newFrame = std::make_unique<web::WebFrameImpl>(
-          frameID, std::move(frameKey), message.frameInfo.mainFrame,
-          messageFrameOrigin, self.webState);
+          frameID, std::move(frameKey), initialMessageID,
+          message.frameInfo.mainFrame, messageFrameOrigin, self.webState);
       framesManager->AddFrame(std::move(newFrame));
     }
   }
diff --git a/ios/web/web_state/ui/crw_web_view_content_view.mm b/ios/web/web_state/ui/crw_web_view_content_view.mm
index 463e3ad..d1bd2db 100644
--- a/ios/web/web_state/ui/crw_web_view_content_view.mm
+++ b/ios/web/web_state/ui/crw_web_view_content_view.mm
@@ -25,14 +25,6 @@
 
 }  // namespace
 
-@interface CRWWebViewContentView ()
-
-// Changes web view frame to match |self.bounds| and optionally accommodates for
-// |contentInset|.
-- (void)updateWebViewFrame;
-
-@end
-
 @implementation CRWWebViewContentView
 @synthesize contentOffset = _contentOffset;
 @synthesize contentInset = _contentInset;
@@ -84,25 +76,15 @@
   return [_webView becomeFirstResponder];
 }
 
-- (void)setFrame:(CGRect)frame {
-  if (CGRectEqualToRect(self.frame, frame))
-    return;
-  [super setFrame:frame];
-  [self updateWebViewFrame];
-}
-
-- (void)setBounds:(CGRect)bounds {
-  if (CGRectEqualToRect(self.bounds, bounds))
-    return;
-  [super setBounds:bounds];
-  [self updateWebViewFrame];
-}
-
 #pragma mark Layout
 
 - (void)layoutSubviews {
   [super layoutSubviews];
-  [self updateWebViewFrame];
+
+  CGRect frame = self.bounds;
+  frame = UIEdgeInsetsInsetRect(frame, _contentInset);
+  frame = CGRectOffset(frame, _contentOffset.x, _contentOffset.y);
+  self.webView.frame = frame;
 }
 
 - (BOOL)isViewAlive {
@@ -113,7 +95,7 @@
   if (CGPointEqualToPoint(_contentOffset, contentOffset))
     return;
   _contentOffset = contentOffset;
-  [self updateWebViewFrame];
+  [self setNeedsLayout];
 }
 
 - (UIEdgeInsets)contentInset {
@@ -158,7 +140,8 @@
   contentOffset.y += topPaddingChange;
   [_scrollView setContentOffset:contentOffset];
   // Update web view frame immediately to make |contentInset| animatable.
-  [self updateWebViewFrame];
+  [self setNeedsLayout];
+  [self layoutIfNeeded];
   // Setting WKWebView frame can mistakenly reset contentOffset. Change it
   // back to the initial value if necessary.
   // TODO(crbug.com/645857): Remove this workaround once WebKit bug is
@@ -168,11 +151,4 @@
   }
 }
 
-- (void)updateWebViewFrame {
-  CGRect frame = self.bounds;
-  frame = UIEdgeInsetsInsetRect(frame, _contentInset);
-  frame = CGRectOffset(frame, _contentOffset.x, _contentOffset.y);
-  self.webView.frame = frame;
-}
-
 @end
diff --git a/ios/web/web_state/web_frame_impl.h b/ios/web/web_state/web_frame_impl.h
index ac13c82d..80174ee 100644
--- a/ios/web/web_state/web_frame_impl.h
+++ b/ios/web/web_state/web_frame_impl.h
@@ -19,8 +19,12 @@
 
 class WebFrameImpl : public WebFrame {
  public:
+  // Creates a new WebFrame. |initial_message_id| will be used as the message ID
+  // of the next message sent to the frame with the |CallJavaScriptFunction|
+  // API.
   WebFrameImpl(const std::string& frame_id,
                std::unique_ptr<crypto::SymmetricKey> frame_key,
+               int initial_message_id,
                bool is_main_frame,
                GURL security_origin,
                web::WebState* web_state);
@@ -34,6 +38,10 @@
   bool IsMainFrame() const override;
   GURL GetSecurityOrigin() const override;
 
+  bool CallJavaScriptFunction(
+      const std::string& name,
+      const std::vector<base::Value>& parameters) override;
+
  private:
   // The frame identifier which uniquely identifies this frame across the
   // application's lifetime.
@@ -41,6 +49,8 @@
   // The symmetric encryption key used to encrypt messages addressed to the
   // frame. Stored in a base64 encoded string.
   std::unique_ptr<crypto::SymmetricKey> frame_key_;
+  // The message ID of the next JavaScript message to be sent.
+  int next_message_id_ = 0;
   // Whether or not the receiver represents the main frame.
   bool is_main_frame_ = false;
   // The security origin associated with this frame.
diff --git a/ios/web/web_state/web_frame_impl.mm b/ios/web/web_state/web_frame_impl.mm
index 271fbf6..7c67db5 100644
--- a/ios/web/web_state/web_frame_impl.mm
+++ b/ios/web/web_state/web_frame_impl.mm
@@ -4,6 +4,14 @@
 
 #include "ios/web/web_state/web_frame_impl.h"
 
+#include "base/base64.h"
+#include "base/json/json_writer.h"
+#include "base/strings/stringprintf.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
+#include "crypto/aead.h"
+#include "crypto/random.h"
+#import "ios/web/public/web_state/web_state.h"
 #include "url/gurl.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -14,11 +22,13 @@
 
 WebFrameImpl::WebFrameImpl(const std::string& frame_id,
                            std::unique_ptr<crypto::SymmetricKey> frame_key,
+                           int initial_message_id,
                            bool is_main_frame,
                            GURL security_origin,
                            web::WebState* web_state)
     : frame_id_(frame_id),
       frame_key_(std::move(frame_key)),
+      next_message_id_(initial_message_id),
       is_main_frame_(is_main_frame),
       security_origin_(security_origin),
       web_state_(web_state) {
@@ -43,4 +53,44 @@
   return security_origin_;
 }
 
+bool WebFrameImpl::CallJavaScriptFunction(
+    const std::string& name,
+    const std::vector<base::Value>& parameters) {
+  int message_id = next_message_id_;
+  next_message_id_++;
+
+  base::DictionaryValue message;
+  message.SetKey("messageId", base::Value(message_id));
+  message.SetKey("functionName", base::Value(name));
+  base::ListValue parameters_value(parameters);
+  message.SetKey("parameters", std::move(parameters_value));
+
+  std::string json;
+  base::JSONWriter::Write(message, &json);
+
+  crypto::Aead aead(crypto::Aead::AES_256_GCM);
+  aead.Init(&frame_key_->key());
+
+  std::string iv;
+  crypto::RandBytes(base::WriteInto(&iv, aead.NonceLength() + 1),
+                    aead.NonceLength());
+
+  std::string ciphertext;
+  if (!aead.Seal(json, iv, /*additional_data=*/nullptr, &ciphertext)) {
+    LOG(ERROR) << "Error sealing message for WebFrame.";
+    return false;
+  }
+
+  std::string encoded_iv;
+  base::Base64Encode(iv, &encoded_iv);
+  std::string encoded_message;
+  base::Base64Encode(ciphertext, &encoded_message);
+  std::string script = base::StringPrintf(
+      "__gCrWeb.frameMessaging.routeMessage('%s', '%s', '%s')",
+      encoded_message.c_str(), encoded_iv.c_str(), frame_id_.c_str());
+  GetWebState()->ExecuteJavaScript(base::UTF8ToUTF16(script));
+
+  return true;
+}
+
 }  // namespace web
diff --git a/ios/web/web_state/web_frame_impl_unittest.mm b/ios/web/web_state/web_frame_impl_unittest.mm
index 6088edf6..f65fec7 100644
--- a/ios/web/web_state/web_frame_impl_unittest.mm
+++ b/ios/web/web_state/web_frame_impl_unittest.mm
@@ -5,8 +5,16 @@
 #include "ios/web/web_state/web_frame_impl.h"
 
 #import "base/base64.h"
+#include "base/json/json_reader.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#import "base/strings/sys_string_conversions.h"
+#include "base/test/ios/wait_util.h"
+#include "base/values.h"
+#include "crypto/aead.h"
 #import "ios/web/public/test/fakes/test_web_state.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "testing/gtest_mac.h"
 #include "testing/platform_test.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -16,11 +24,10 @@
 using crypto::SymmetricKey;
 
 namespace {
-
-const char kFrameId[] = "12345678910ABCDEF12345678910ABCDEF";
+const char kFrameId[] = "1effd8f52a067c8d3a01762d3c41dfd8";
 
 // A base64 encoded sample key.
-const char kFrameKey[] = "d1uJzdvOFIUT5kEpK4o+x5JCaSlYT/a45ISU7S9EzTo=";
+const char kFrameKey[] = "R7lsXtR74c6R9A9k691gUQ8JAd0be+w//Lntgcbjwrc=";
 
 // Returns a key which can be used to create a WebFrame.
 std::unique_ptr<SymmetricKey> CreateKey() {
@@ -30,6 +37,38 @@
                                       decoded_frame_key_string);
 }
 
+struct RouteMessageParameters {
+  NSString* encoded_function_json = nil;
+  NSString* encoded_iv = nil;
+  NSString* frame_id = nil;
+};
+
+RouteMessageParameters ParametersFromFunctionCallString(
+    NSString* function_call) {
+  NSRange parameters_start = [function_call rangeOfString:@"("];
+  NSRange parameters_end = [function_call rangeOfString:@")"];
+  NSString* parameter_string = [function_call
+      substringWithRange:NSMakeRange(parameters_start.location + 1,
+                                     parameters_end.location -
+                                         parameters_start.location - 1)];
+  NSArray* parameters = [parameter_string componentsSeparatedByString:@","];
+
+  RouteMessageParameters parsed_params;
+  if (parameters.count == 3) {
+    NSMutableCharacterSet* trim_characters_set =
+        [NSMutableCharacterSet whitespaceCharacterSet];
+    [trim_characters_set addCharactersInString:@"'"];
+
+    parsed_params.encoded_function_json =
+        [parameters[0] stringByTrimmingCharactersInSet:trim_characters_set];
+    parsed_params.encoded_iv =
+        [parameters[1] stringByTrimmingCharactersInSet:trim_characters_set];
+    parsed_params.frame_id =
+        [parameters[2] stringByTrimmingCharactersInSet:trim_characters_set];
+  }
+  return parsed_params;
+}
+
 }  // namespace
 
 namespace web {
@@ -40,8 +79,9 @@
 TEST_F(WebFrameImplTest, CreateWebFrameForMainFrame) {
   TestWebState test_web_state;
   GURL security_origin;
-  WebFrameImpl web_frame(kFrameId, CreateKey(), /*is_main_frame=*/true,
-                         security_origin, &test_web_state);
+  WebFrameImpl web_frame(kFrameId, CreateKey(), /*initial_message_id=*/0,
+                         /*is_main_frame=*/true, security_origin,
+                         &test_web_state);
 
   EXPECT_EQ(&test_web_state, web_frame.GetWebState());
   EXPECT_TRUE(web_frame.IsMainFrame());
@@ -53,8 +93,9 @@
 TEST_F(WebFrameImplTest, CreateWebFrameForIFrame) {
   TestWebState test_web_state;
   GURL security_origin;
-  WebFrameImpl web_frame(kFrameId, CreateKey(), /*is_main_frame=*/false,
-                         security_origin, &test_web_state);
+  WebFrameImpl web_frame(kFrameId, CreateKey(), /*initial_message_id=*/0,
+                         /*is_main_frame=*/false, security_origin,
+                         &test_web_state);
 
   EXPECT_EQ(&test_web_state, web_frame.GetWebState());
   EXPECT_FALSE(web_frame.IsMainFrame());
@@ -62,4 +103,138 @@
   EXPECT_EQ(kFrameId, web_frame.GetFrameId());
 }
 
+// Tests that |CallJavaScriptFunction| encrypts the message and passes it to
+// __gCrWeb.frameMessaging.routeMessage in the main frame.
+TEST_F(WebFrameImplTest, CallJavaScriptFunction) {
+  TestWebState test_web_state;
+  GURL security_origin;
+  WebFrameImpl web_frame(kFrameId, CreateKey(), /*initial_message_id=*/0,
+                         /*is_main_frame=*/false, security_origin,
+                         &test_web_state);
+
+  std::vector<base::Value> function_params;
+  function_params.push_back(base::Value("plaintextParam"));
+  web_frame.CallJavaScriptFunction("functionName", function_params);
+
+  NSString* last_script =
+      base::SysUTF16ToNSString(test_web_state.GetLastExecutedJavascript());
+  EXPECT_TRUE([last_script hasPrefix:@"__gCrWeb.frameMessaging.routeMessage"]);
+  // Verify the message does not contain the plaintext function name or
+  // parameters.
+  EXPECT_FALSE([last_script containsString:@"functionName"]);
+  EXPECT_FALSE([last_script containsString:@"plaintextParam"]);
+
+  RouteMessageParameters params = ParametersFromFunctionCallString(last_script);
+
+  // Verify that the message is a properly base64 encoded string.
+  std::string decoded_message;
+  EXPECT_TRUE(base::Base64Decode(
+      base::SysNSStringToUTF8(params.encoded_function_json), &decoded_message));
+  // Verify the message does not contain the plaintext function name or
+  // parameters.
+  EXPECT_FALSE([base::SysUTF8ToNSString(decoded_message)
+      containsString:@"functionName"]);
+  EXPECT_FALSE([base::SysUTF8ToNSString(decoded_message)
+      containsString:@"plaintextParam"]);
+
+  std::string iv_string = base::SysNSStringToUTF8(params.encoded_iv);
+  std::string decoded_iv;
+  // Verify that the initialization vector is a properly base64 encoded string.
+  EXPECT_TRUE(base::Base64Decode(iv_string, &decoded_iv));
+
+  // Ensure the frame ID matches.
+  EXPECT_NSEQ(base::SysUTF8ToNSString(kFrameId), params.frame_id);
+}
+
+// Tests that the WebFrame uses different initialization vectors for two
+// sequential calls to |CallJavaScriptFunction|.
+TEST_F(WebFrameImplTest, CallJavaScriptFunctionUniqueInitializationVector) {
+  TestWebState test_web_state;
+  GURL security_origin;
+  WebFrameImpl web_frame(kFrameId, CreateKey(), /*initial_message_id=*/0,
+                         /*is_main_frame=*/false, security_origin,
+                         &test_web_state);
+
+  std::vector<base::Value> function_params;
+  function_params.push_back(base::Value("plaintextParam"));
+  web_frame.CallJavaScriptFunction("functionName", function_params);
+
+  NSString* last_script1 =
+      base::SysUTF16ToNSString(test_web_state.GetLastExecutedJavascript());
+  RouteMessageParameters params1 =
+      ParametersFromFunctionCallString(last_script1);
+
+  // Call JavaScript Function again to verify that the same initialization
+  // vector is not reused and that the ciphertext is different.
+  web_frame.CallJavaScriptFunction("functionName", function_params);
+  NSString* last_script2 =
+      base::SysUTF16ToNSString(test_web_state.GetLastExecutedJavascript());
+  RouteMessageParameters params2 =
+      ParametersFromFunctionCallString(last_script2);
+
+  EXPECT_NSNE(params1.encoded_function_json, params2.encoded_function_json);
+  EXPECT_NSNE(params1.encoded_iv, params2.encoded_iv);
+}
+
+// Tests that the WebFrame properly encodes and encrypts all parameters for
+// |CallJavaScriptFunction|.
+TEST_F(WebFrameImplTest, CallJavaScriptFunctionMessageProperlyEncoded) {
+  std::unique_ptr<SymmetricKey> key = CreateKey();
+  const std::string key_string = key->key();
+  // Use an arbitrary nonzero message id to ensure it isn't matching a zero
+  // value by chance.
+  const int initial_message_id = 11;
+
+  TestWebState test_web_state;
+  GURL security_origin;
+  WebFrameImpl web_frame(kFrameId, std::move(key), initial_message_id,
+                         /*is_main_frame=*/false, security_origin,
+                         &test_web_state);
+
+  std::vector<base::Value> function_params;
+  std::string plaintext_param("plaintextParam");
+  function_params.push_back(base::Value(plaintext_param));
+  web_frame.CallJavaScriptFunction("functionName", function_params);
+
+  NSString* last_script =
+      base::SysUTF16ToNSString(test_web_state.GetLastExecutedJavascript());
+  RouteMessageParameters params = ParametersFromFunctionCallString(last_script);
+
+  std::string decoded_ciphertext;
+  EXPECT_TRUE(
+      base::Base64Decode(base::SysNSStringToUTF8(params.encoded_function_json),
+                         &decoded_ciphertext));
+
+  std::string decoded_iv;
+  EXPECT_TRUE(base::Base64Decode(base::SysNSStringToUTF8(params.encoded_iv),
+                                 &decoded_iv));
+
+  // Decrypt message
+  crypto::Aead aead(crypto::Aead::AES_256_GCM);
+  aead.Init(&key_string);
+  std::string plaintext;
+  EXPECT_TRUE(aead.Open(decoded_ciphertext, decoded_iv,
+                        /*additional_data=*/nullptr, &plaintext));
+
+  std::unique_ptr<base::Value> parsed_result(
+      base::JSONReader::Read(plaintext, false));
+  EXPECT_TRUE(parsed_result.get());
+
+  base::DictionaryValue* result_dict;
+  ASSERT_TRUE(parsed_result->GetAsDictionary(&result_dict));
+
+  int decrypted_message_id = 0;
+  EXPECT_TRUE(result_dict->GetInteger("messageId", &decrypted_message_id));
+  EXPECT_EQ(initial_message_id, decrypted_message_id);
+
+  std::string decrypted_functionName;
+  EXPECT_TRUE(result_dict->GetString("functionName", &decrypted_functionName));
+  EXPECT_STREQ("functionName", decrypted_functionName.c_str());
+
+  base::ListValue* decrypted_parameters;
+  EXPECT_TRUE(result_dict->GetList("parameters", &decrypted_parameters));
+  EXPECT_EQ(function_params.size(), decrypted_parameters->GetList().size());
+  EXPECT_EQ(plaintext_param, decrypted_parameters->GetList()[0].GetString());
+}
+
 }  // namespace web
diff --git a/ios/web/web_state/web_frames_manager_impl_unittest.mm b/ios/web/web_state/web_frames_manager_impl_unittest.mm
index ccd0fbe..2e4f60a 100644
--- a/ios/web/web_state/web_frames_manager_impl_unittest.mm
+++ b/ios/web/web_state/web_frames_manager_impl_unittest.mm
@@ -54,8 +54,8 @@
 TEST_F(WebFramesManagerImplTest, GetMainWebFrame) {
   GURL security_origin;
   auto web_frame = std::make_unique<WebFrameImpl>(
-      "web_frame", CreateKey(), /*is_main_frame=*/true, security_origin,
-      &test_web_state_);
+      "web_frame", CreateKey(), /*initial_message_id=*/0,
+      /*is_main_frame=*/true, security_origin, &test_web_state_);
   WebFrameImpl* web_frame_ptr = web_frame.get();
 
   frames_manager_->AddFrame(std::move(web_frame));
@@ -73,8 +73,8 @@
   GURL security_origin;
   const std::string web_frame_frame_id = "web_frame";
   auto web_frame = std::make_unique<WebFrameImpl>(
-      web_frame_frame_id, CreateKey(), /*is_main_frame=*/true, security_origin,
-      &test_web_state_);
+      web_frame_frame_id, CreateKey(), /*initial_message_id=*/0,
+      /*is_main_frame=*/true, security_origin, &test_web_state_);
 
   frames_manager_->AddFrame(std::move(web_frame));
   frames_manager_->RemoveFrameWithId(web_frame_frame_id);
@@ -88,14 +88,14 @@
 TEST_F(WebFramesManagerImplTest, AddFrames) {
   GURL security_origin;
   auto main_web_frame = std::make_unique<WebFrameImpl>(
-      "main_web_frame", CreateKey(), /*is_main_frame=*/true, security_origin,
-      &test_web_state_);
+      "main_web_frame", CreateKey(), /*initial_message_id=*/0,
+      /*is_main_frame=*/true, security_origin, &test_web_state_);
   WebFrameImpl* main_web_frame_ptr = main_web_frame.get();
   frames_manager_->AddFrame(std::move(main_web_frame));
 
   auto child_web_frame = std::make_unique<WebFrameImpl>(
-      "child_web_frame", CreateKey(), /*is_main_frame=*/false, security_origin,
-      &test_web_state_);
+      "child_web_frame", CreateKey(), /*initial_message_id=*/0,
+      /*is_main_frame=*/false, security_origin, &test_web_state_);
   WebFrameImpl* child_web_frame_ptr = child_web_frame.get();
   frames_manager_->AddFrame(std::move(child_web_frame));
 
@@ -109,20 +109,20 @@
 TEST_F(WebFramesManagerImplTest, RemoveFrame) {
   GURL security_origin;
   auto main_web_frame = std::make_unique<WebFrameImpl>(
-      "main_web_frame", CreateKey(), /*is_main_frame=*/true, security_origin,
-      &test_web_state_);
+      "main_web_frame", CreateKey(), /*initial_message_id=*/0,
+      /*is_main_frame=*/true, security_origin, &test_web_state_);
   WebFrameImpl* main_web_frame_ptr = main_web_frame.get();
   frames_manager_->AddFrame(std::move(main_web_frame));
 
   const std::string child_web_frame_1_frame_id = "child_web_frame_1_frame_id";
   auto child_web_frame_1 = std::make_unique<WebFrameImpl>(
-      child_web_frame_1_frame_id, CreateKey(),
+      child_web_frame_1_frame_id, CreateKey(), /*initial_message_id=*/0,
       /*is_main_frame=*/false, security_origin, &test_web_state_);
   frames_manager_->AddFrame(std::move(child_web_frame_1));
 
   auto child_web_frame_2 = std::make_unique<WebFrameImpl>(
-      "child_web_frame_2", CreateKey(), /*is_main_frame=*/false,
-      security_origin, &test_web_state_);
+      "child_web_frame_2", CreateKey(), /*initial_message_id=*/0,
+      /*is_main_frame=*/false, security_origin, &test_web_state_);
   WebFrameImpl* child_web_frame_2_ptr = child_web_frame_2.get();
   frames_manager_->AddFrame(std::move(child_web_frame_2));
 
@@ -138,11 +138,11 @@
 TEST_F(WebFramesManagerImplTest, RemoveAllFrames) {
   GURL security_origin;
   frames_manager_->AddFrame(std::make_unique<WebFrameImpl>(
-      "main_web_frame", CreateKey(), /*is_main_frame=*/true, security_origin,
-      &test_web_state_));
+      "main_web_frame", CreateKey(), /*initial_message_id=*/0,
+      /*is_main_frame=*/true, security_origin, &test_web_state_));
   frames_manager_->AddFrame(std::make_unique<WebFrameImpl>(
-      "web_frame", CreateKey(), /*is_main_frame=*/false, security_origin,
-      &test_web_state_));
+      "web_frame", CreateKey(), /*initial_message_id=*/0,
+      /*is_main_frame=*/false, security_origin, &test_web_state_));
 
   ASSERT_EQ(2ul, frames_manager_->GetAllWebFrames().size());
   frames_manager_->RemoveAllWebFrames();
@@ -156,8 +156,8 @@
   GURL security_origin;
   const std::string main_web_frame_frame_id = "main_web_frame";
   auto main_web_frame = std::make_unique<WebFrameImpl>(
-      main_web_frame_frame_id, CreateKey(), /*is_main_frame=*/true,
-      security_origin, &test_web_state_);
+      main_web_frame_frame_id, CreateKey(), /*initial_message_id=*/0,
+      /*is_main_frame=*/true, security_origin, &test_web_state_);
   WebFrameImpl* main_web_frame_ptr = main_web_frame.get();
 
   frames_manager_->AddFrame(std::move(main_web_frame));
@@ -177,8 +177,8 @@
 
   const std::string web_frame_frame_id = "web_frame_frame_id";
   auto web_frame = std::make_unique<WebFrameImpl>(
-      web_frame_frame_id, CreateKey(), /*is_main_frame=*/false, security_origin,
-      &test_web_state_);
+      web_frame_frame_id, CreateKey(), /*initial_message_id=*/0,
+      /*is_main_frame=*/false, security_origin, &test_web_state_);
   WebFrameImpl* web_frame_ptr = web_frame.get();
   frames_manager_->AddFrame(std::move(web_frame));
 
diff --git a/ios/web_view/BUILD.gn b/ios/web_view/BUILD.gn
index 5bf710c..90f015b 100644
--- a/ios/web_view/BUILD.gn
+++ b/ios/web_view/BUILD.gn
@@ -246,6 +246,7 @@
   "//components/language/core/browser",
   "//components/language/core/common",
   "//components/net_log",
+  "//services/network:network_service",
   "//components/password_manager/core/browser",
   "//components/password_manager/core/browser/form_parsing:form_parsing",
   "//components/password_manager/core/common",
diff --git a/ios/web_view/internal/DEPS b/ios/web_view/internal/DEPS
index 560a264..57946d6 100644
--- a/ios/web_view/internal/DEPS
+++ b/ios/web_view/internal/DEPS
@@ -34,6 +34,7 @@
   "+ios/web_view",
   "+net",
   "+services/identity/public/cpp",
+  "+services/network/network_change_manager.h",
   "+services/network/public/cpp",
   "+services/network/public/mojom",
   "+third_party/ocmock",
diff --git a/ios/web_view/internal/app/application_context.cc b/ios/web_view/internal/app/application_context.cc
index 593402e32..ca0468b 100644
--- a/ios/web_view/internal/app/application_context.cc
+++ b/ios/web_view/internal/app/application_context.cc
@@ -20,10 +20,22 @@
 #include "ios/web_view/cwv_web_view_features.h"
 #include "ios/web_view/internal/app/web_view_io_thread.h"
 #include "net/socket/client_socket_pool_manager.h"
+#include "services/network/network_change_manager.h"
+#include "services/network/public/cpp/network_connection_tracker.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
 #include "ui/base/l10n/l10n_util_mac.h"
 
 namespace ios_web_view {
+namespace {
+
+// Passed to NetworkConnectionTracker to bind a NetworkChangeManagerRequest.
+void BindNetworkChangeManagerRequest(
+    network::NetworkChangeManager* network_change_manager,
+    network::mojom::NetworkChangeManagerRequest request) {
+  network_change_manager->AddRequest(std::move(request));
+}
+
+}  // namespace
 
 ApplicationContext* ApplicationContext::GetInstance() {
   return base::Singleton<ApplicationContext>::get();
@@ -137,6 +149,21 @@
   return network_context_.get();
 }
 
+network::NetworkConnectionTracker*
+ApplicationContext::GetNetworkConnectionTracker() {
+  if (!network_connection_tracker_) {
+    if (!network_change_manager_) {
+      network_change_manager_ =
+          std::make_unique<network::NetworkChangeManager>(nullptr);
+    }
+    network_connection_tracker_ =
+        std::make_unique<network::NetworkConnectionTracker>(base::BindRepeating(
+            &BindNetworkChangeManagerRequest,
+            base::Unretained(network_change_manager_.get())));
+  }
+  return network_connection_tracker_.get();
+}
+
 const std::string& ApplicationContext::GetApplicationLocale() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(!application_locale_.empty());
diff --git a/ios/web_view/internal/app/application_context.h b/ios/web_view/internal/app/application_context.h
index 5e94d37..19f242d 100644
--- a/ios/web_view/internal/app/application_context.h
+++ b/ios/web_view/internal/app/application_context.h
@@ -23,6 +23,8 @@
 }
 
 namespace network {
+class NetworkChangeManager;
+class NetworkConnectionTracker;
 class SharedURLLoaderFactory;
 class WeakWrapperSharedURLLoaderFactory;
 namespace mojom {
@@ -54,6 +56,9 @@
   scoped_refptr<network::SharedURLLoaderFactory> GetSharedURLLoaderFactory();
   network::mojom::NetworkContext* GetSystemNetworkContext();
 
+  // Returns the NetworkConnectionTracker instance for this ApplicationContext.
+  network::NetworkConnectionTracker* GetNetworkConnectionTracker();
+
   // Gets the locale used by the application.
   const std::string& GetApplicationLocale();
 
@@ -98,6 +103,10 @@
   // Created on the UI thread, destroyed on the IO thread.
   std::unique_ptr<web::NetworkContextOwner> network_context_owner_;
 
+  std::unique_ptr<network::NetworkChangeManager> network_change_manager_;
+  std::unique_ptr<network::NetworkConnectionTracker>
+      network_connection_tracker_;
+
   DISALLOW_COPY_AND_ASSIGN(ApplicationContext);
 };
 
diff --git a/ios/web_view/internal/translate/web_view_translate_service.cc b/ios/web_view/internal/translate/web_view_translate_service.cc
index f9e06a7..fbe15c8 100644
--- a/ios/web_view/internal/translate/web_view_translate_service.cc
+++ b/ios/web_view/internal/translate/web_view_translate_service.cc
@@ -15,8 +15,10 @@
     TranslateRequestsAllowedListener()
     : resource_request_allowed_notifier_(
           ios_web_view::ApplicationContext::GetInstance()->GetLocalState(),
-          /*disable_network_switch=*/nullptr) {
-  resource_request_allowed_notifier_.Init(this);
+          /*disable_network_switch=*/nullptr,
+          base::BindOnce(&ApplicationContext::GetNetworkConnectionTracker,
+                         base::Unretained(ApplicationContext::GetInstance()))) {
+  resource_request_allowed_notifier_.Init(this, /*leaky=*/false);
 }
 
 WebViewTranslateService::TranslateRequestsAllowedListener::
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index e850101..f8622d8 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -304,7 +304,9 @@
       aborted_(false),
       fixup_negative_timestamps_(false),
       fixup_chained_ogg_(false),
-      num_discarded_packet_warnings_(0) {
+      num_discarded_packet_warnings_(0),
+      last_packet_pos_(AV_NOPTS_VALUE),
+      last_packet_dts_(AV_NOPTS_VALUE) {
   DCHECK(demuxer_);
 
   bool is_encrypted = false;
@@ -363,11 +365,41 @@
   DCHECK(packet->size);
   DCHECK(packet->data);
 
+  const bool is_audio = type() == AUDIO;
+
+  // dts == pts when dts is not present.
+  int64_t packet_dts =
+      packet->dts == AV_NOPTS_VALUE ? packet->pts : packet->dts;
+
+  // Chained ogg files have non-monotonically increasing position and time stamp
+  // values, which prevents us from using them to determine if a packet should
+  // be dropped. Since chained ogg is only allowed on single track audio only
+  // opus/vorbis media, and dropping packets is only necessary for multi-track
+  // video-and-audio streams, we can just disable dropping when we detect
+  // chained ogg.
+  // For similar reasons, we only want to allow packet drops for audio streams;
+  // video frame dropping is handled by the renderer when correcting for a/v
+  // sync.
+  if (is_audio && !fixup_chained_ogg_ && last_packet_pos_ != AV_NOPTS_VALUE) {
+    if (packet->pos < last_packet_pos_) {
+      DVLOG(3) << "Dropped packet with out of order position";
+      return;
+    }
+    if (packet->pos == last_packet_pos_ && packet_dts <= last_packet_dts_) {
+      DCHECK_NE(last_packet_dts_, AV_NOPTS_VALUE);
+      DVLOG(3) << "Dropped packet with out of order display timestamp";
+      return;
+    }
+  }
+
   if (!demuxer_ || end_of_stream_) {
     NOTREACHED() << "Attempted to enqueue packet on a stopped stream";
     return;
   }
 
+  last_packet_pos_ = packet->pos;
+  last_packet_dts_ = packet_dts;
+
   if (waiting_for_keyframe_) {
     if (packet->flags & AV_PKT_FLAG_KEY)
       waiting_for_keyframe_ = false;
@@ -387,7 +419,6 @@
 
   scoped_refptr<DecoderBuffer> buffer;
 
-  const bool is_audio = type() == AUDIO;
   if (type() == DemuxerStream::TEXT) {
     int id_size = 0;
     uint8_t* id_data = av_packet_get_side_data(
@@ -638,7 +669,7 @@
   SatisfyPendingRead();
 }
 
-void FFmpegDemuxerStream::FlushBuffers() {
+void FFmpegDemuxerStream::FlushBuffers(bool preserve_packet_position) {
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK(read_cb_.is_null()) << "There should be no pending read";
 
@@ -647,6 +678,11 @@
   // This is related to chromium issue 140371 (http://crbug.com/140371).
   ResetBitstreamConverter();
 
+  if (!preserve_packet_position) {
+    last_packet_pos_ = AV_NOPTS_VALUE;
+    last_packet_dts_ = AV_NOPTS_VALUE;
+  }
+
   buffer_queue_.Clear();
   end_of_stream_ = false;
   last_packet_timestamp_ = kNoTimestamp;
@@ -1011,6 +1047,15 @@
   DCHECK(task_runner_->BelongsToCurrentThread());
   CHECK(pending_seek_cb_.is_null());
 
+  pending_seek_cb_ = cb;
+  SeekInternal(time, base::BindOnce(&FFmpegDemuxer::OnSeekFrameSuccess,
+                                    weak_factory_.GetWeakPtr()));
+}
+
+void FFmpegDemuxer::SeekInternal(base::TimeDelta time,
+                                 base::OnceClosure seek_cb) {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+
   // FFmpeg requires seeks to be adjusted according to the lowest starting time.
   // Since EnqueuePacket() rebased negative timestamps by the start time, we
   // must correct the shift here.
@@ -1033,8 +1078,8 @@
       seek_time = std::max(start_time_, seek_time - config.seek_preroll());
   }
 
-  // Choose the seeking stream based on whether it contains the seek time, if no
-  // match can be found prefer the preferred stream.
+  // Choose the seeking stream based on whether it contains the seek time, if
+  // no match can be found prefer the preferred stream.
   //
   // TODO(dalecurtis): Currently FFmpeg does not ensure that all streams in a
   // given container will demux all packets after the seek point.  Instead it
@@ -1047,14 +1092,14 @@
   const AVStream* seeking_stream = demux_stream->av_stream();
   DCHECK(seeking_stream);
 
-  pending_seek_cb_ = cb;
-  base::PostTaskAndReplyWithResult(
-      blocking_task_runner_.get(), FROM_HERE,
-      base::Bind(&av_seek_frame, glue_->format_context(), seeking_stream->index,
-                 ConvertToTimeBase(seeking_stream->time_base, seek_time),
-                 // Always seek to a timestamp <= to the desired timestamp.
-                 AVSEEK_FLAG_BACKWARD),
-      base::Bind(&FFmpegDemuxer::OnSeekFrameDone, weak_factory_.GetWeakPtr()));
+  blocking_task_runner_->PostTaskAndReply(
+      FROM_HERE,
+      base::BindOnce(base::IgnoreResult(&av_seek_frame),
+                     glue_->format_context(), seeking_stream->index,
+                     ConvertToTimeBase(seeking_stream->time_base, seek_time),
+                     // Always seek to a timestamp <= to the desired timestamp.
+                     AVSEEK_FLAG_BACKWARD),
+      std::move(seek_cb));
 }
 
 base::Time FFmpegDemuxer::GetTimelineOffset() const {
@@ -1616,7 +1661,7 @@
   return nullptr;
 }
 
-void FFmpegDemuxer::OnSeekFrameDone(int result) {
+void FFmpegDemuxer::OnSeekFrameSuccess() {
   DCHECK(task_runner_->BelongsToCurrentThread());
   CHECK(!pending_seek_cb_.is_null());
 
@@ -1626,17 +1671,10 @@
     return;
   }
 
-  if (result < 0) {
-    // Use VLOG(1) instead of NOTIMPLEMENTED() to prevent the message being
-    // captured from stdout and contaminates testing.
-    // TODO(scherkus): Implement this properly and signal error (BUG=23447).
-    VLOG(1) << "Not implemented";
-  }
-
   // Tell streams to flush buffers due to seeking.
   for (const auto& stream : streams_) {
     if (stream)
-      stream->FlushBuffers();
+      stream->FlushBuffers(false);
   }
 
   // Resume reading until capacity.
@@ -1694,12 +1732,38 @@
                             std::move(change_completed_cb));
 }
 
+void FFmpegDemuxer::OnVideoSeekedForTrackChange(
+    DemuxerStream* video_stream,
+    base::OnceClosure seek_completed_cb) {
+  static_cast<FFmpegDemuxerStream*>(video_stream)->FlushBuffers(true);
+  std::move(seek_completed_cb).Run();
+}
+
+void FFmpegDemuxer::SeekOnVideoTrackChange(
+    base::TimeDelta seek_to_time,
+    TrackChangeCB seek_completed_cb,
+    DemuxerStream::Type stream_type,
+    const std::vector<DemuxerStream*>& streams) {
+  DCHECK_EQ(streams.size(), 1u);
+  DCHECK_EQ(stream_type, DemuxerStream::VIDEO);
+  SeekInternal(seek_to_time,
+               base::BindOnce(&FFmpegDemuxer::OnVideoSeekedForTrackChange,
+                              weak_factory_.GetWeakPtr(), streams[0],
+                              base::BindOnce(std::move(seek_completed_cb),
+                                             DemuxerStream::VIDEO, streams)));
+}
+
 void FFmpegDemuxer::OnSelectedVideoTrackChanged(
     const std::vector<MediaTrack::Id>& track_ids,
     base::TimeDelta curr_time,
     TrackChangeCB change_completed_cb) {
-  FindAndEnableProperTracks(track_ids, curr_time, DemuxerStream::VIDEO,
-                            std::move(change_completed_cb));
+  // Find tracks -> Seek track -> run callback.
+  FindAndEnableProperTracks(
+      track_ids, curr_time, DemuxerStream::VIDEO,
+      track_ids.empty() ? std::move(change_completed_cb)
+                        : base::BindOnce(&FFmpegDemuxer::SeekOnVideoTrackChange,
+                                         weak_factory_.GetWeakPtr(), curr_time,
+                                         std::move(change_completed_cb)));
 }
 
 void FFmpegDemuxer::ReadFrameIfNeeded() {
diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h
index 01579ab..9d3edd4 100644
--- a/media/filters/ffmpeg_demuxer.h
+++ b/media/filters/ffmpeg_demuxer.h
@@ -83,7 +83,9 @@
   void SetEndOfStream();
 
   // Drops queued buffers and clears end of stream state.
-  void FlushBuffers();
+  // Passing |preserve_packet_position| will prevent replay of already seen
+  // packets.
+  void FlushBuffers(bool preserve_packet_position);
 
   // Empties the queues and ignores any additional calls to Read().
   void Stop();
@@ -198,6 +200,8 @@
   bool fixup_chained_ogg_;
 
   int num_discarded_packet_warnings_;
+  int64_t last_packet_pos_;
+  int64_t last_packet_dts_;
 
   DISALLOW_COPY_AND_ASSIGN(FFmpegDemuxerStream);
 };
@@ -277,7 +281,7 @@
   void LogMetadata(AVFormatContext* avctx, base::TimeDelta max_duration);
 
   // FFmpeg callbacks during seeking.
-  void OnSeekFrameDone(int result);
+  void OnSeekFrameSuccess();
 
   // FFmpeg callbacks during reading + helper method to initiate reads.
   void ReadFrameIfNeeded();
@@ -307,6 +311,14 @@
 
   void SetLiveness(DemuxerStream::Liveness liveness);
 
+  void SeekInternal(base::TimeDelta time, base::OnceClosure seek_cb);
+  void OnVideoSeekedForTrackChange(DemuxerStream* video_stream,
+                                   base::OnceClosure seek_completed_cb);
+  void SeekOnVideoTrackChange(base::TimeDelta seek_to_time,
+                              TrackChangeCB seek_completed_cb,
+                              DemuxerStream::Type stream_type,
+                              const std::vector<DemuxerStream*>& streams);
+
   DemuxerHost* host_;
 
   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
@@ -394,4 +406,4 @@
 
 }  // namespace media
 
-#endif  // MEDIA_FILTERS_FFMPEG_DEMUXER_H_
+#endif  // MEDIA_FILTERS_FFMPEG_DEMUXER_H_
\ No newline at end of file
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
index c29e0506..3c2edd5 100644
--- a/media/filters/ffmpeg_demuxer_unittest.cc
+++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -1676,8 +1676,8 @@
   // there is no buffers ready to be returned by the Read right away, thus
   // ensuring that status changes occur while an async read is pending.
 
-  audio_stream->FlushBuffers();
-  video_stream->FlushBuffers();
+  audio_stream->FlushBuffers(true);
+  video_stream->FlushBuffers(true);
   audio_stream->Read(base::Bind(&OnReadDoneExpectEos));
   video_stream->Read(base::Bind(&OnReadDoneExpectEos));
 
diff --git a/media/gpu/jpeg_decode_accelerator_unittest.cc b/media/gpu/jpeg_decode_accelerator_unittest.cc
index 74d4a259..f68ec1c 100644
--- a/media/gpu/jpeg_decode_accelerator_unittest.cc
+++ b/media/gpu/jpeg_decode_accelerator_unittest.cc
@@ -534,7 +534,8 @@
 void JpegDecodeAcceleratorTestEnvironment::ReadTestJpegImage(
     base::FilePath& input_file,
     TestImageFile* image_data) {
-  ASSERT_TRUE(base::ReadFileToString(input_file, &image_data->data_str));
+  ASSERT_TRUE(base::ReadFileToString(input_file, &image_data->data_str))
+      << input_file;
 
   ASSERT_TRUE(ParseJpegPicture(
       reinterpret_cast<const uint8_t*>(image_data->data_str.data()),
diff --git a/media/gpu/vaapi/BUILD.gn b/media/gpu/vaapi/BUILD.gn
index 66473a4..5f6bc1a 100644
--- a/media/gpu/vaapi/BUILD.gn
+++ b/media/gpu/vaapi/BUILD.gn
@@ -65,8 +65,6 @@
     "vaapi_h264_accelerator.h",
     "vaapi_jpeg_decode_accelerator.cc",
     "vaapi_jpeg_decode_accelerator.h",
-    "vaapi_jpeg_decoder.cc",
-    "vaapi_jpeg_decoder.h",
     "vaapi_jpeg_encode_accelerator.cc",
     "vaapi_jpeg_encode_accelerator.h",
     "vaapi_jpeg_encoder.cc",
diff --git a/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc
index e559e05f..693a8cf 100644
--- a/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc
@@ -10,16 +10,19 @@
 #include <memory>
 #include <utility>
 
+#include <va/va.h>
+
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
-#include "gpu/ipc/service/gpu_channel.h"
+#include "media/base/bitstream_buffer.h"
 #include "media/base/unaligned_shared_memory.h"
 #include "media/base/video_frame.h"
 #include "media/filters/jpeg_parser.h"
 #include "media/gpu/vaapi/vaapi_picture.h"
+#include "media/gpu/vaapi/vaapi_wrapper.h"
 #include "third_party/libyuv/include/libyuv.h"
 
 #define VLOGF(level) VLOG(level) << __func__ << "(): "
@@ -78,6 +81,170 @@
   return 0;
 }
 
+// VAAPI only supports a subset of JPEG profiles. This function determines
+// whether a given parsed JPEG result is supported or not.
+static bool IsVaapiSupportedJpeg(const JpegParseResult& jpeg) {
+  if (jpeg.frame_header.visible_width < 1 ||
+      jpeg.frame_header.visible_height < 1) {
+    DLOG(ERROR) << "width(" << jpeg.frame_header.visible_width
+                << ") and height(" << jpeg.frame_header.visible_height
+                << ") should be at least 1";
+    return false;
+  }
+
+  // Size 64k*64k is the maximum in the JPEG standard. VAAPI doesn't support
+  // resolutions larger than 16k*16k.
+  const int kMaxDimension = 16384;
+  if (jpeg.frame_header.coded_width > kMaxDimension ||
+      jpeg.frame_header.coded_height > kMaxDimension) {
+    DLOG(ERROR) << "VAAPI doesn't support size("
+                << jpeg.frame_header.coded_width << "*"
+                << jpeg.frame_header.coded_height << ") larger than "
+                << kMaxDimension << "*" << kMaxDimension;
+    return false;
+  }
+
+  if (jpeg.frame_header.num_components != 3) {
+    DLOG(ERROR) << "VAAPI doesn't support num_components("
+                << static_cast<int>(jpeg.frame_header.num_components)
+                << ") != 3";
+    return false;
+  }
+
+  if (jpeg.frame_header.components[0].horizontal_sampling_factor <
+          jpeg.frame_header.components[1].horizontal_sampling_factor ||
+      jpeg.frame_header.components[0].horizontal_sampling_factor <
+          jpeg.frame_header.components[2].horizontal_sampling_factor) {
+    DLOG(ERROR) << "VAAPI doesn't supports horizontal sampling factor of Y"
+                << " smaller than Cb and Cr";
+    return false;
+  }
+
+  if (jpeg.frame_header.components[0].vertical_sampling_factor <
+          jpeg.frame_header.components[1].vertical_sampling_factor ||
+      jpeg.frame_header.components[0].vertical_sampling_factor <
+          jpeg.frame_header.components[2].vertical_sampling_factor) {
+    DLOG(ERROR) << "VAAPI doesn't supports vertical sampling factor of Y"
+                << " smaller than Cb and Cr";
+    return false;
+  }
+
+  return true;
+}
+
+static void FillPictureParameters(
+    const JpegFrameHeader& frame_header,
+    VAPictureParameterBufferJPEGBaseline* pic_param) {
+  memset(pic_param, 0, sizeof(*pic_param));
+  pic_param->picture_width = frame_header.coded_width;
+  pic_param->picture_height = frame_header.coded_height;
+  pic_param->num_components = frame_header.num_components;
+
+  for (int i = 0; i < pic_param->num_components; i++) {
+    pic_param->components[i].component_id = frame_header.components[i].id;
+    pic_param->components[i].h_sampling_factor =
+        frame_header.components[i].horizontal_sampling_factor;
+    pic_param->components[i].v_sampling_factor =
+        frame_header.components[i].vertical_sampling_factor;
+    pic_param->components[i].quantiser_table_selector =
+        frame_header.components[i].quantization_table_selector;
+  }
+}
+
+static void FillIQMatrix(const JpegQuantizationTable* q_table,
+                         VAIQMatrixBufferJPEGBaseline* iq_matrix) {
+  memset(iq_matrix, 0, sizeof(*iq_matrix));
+  static_assert(kJpegMaxQuantizationTableNum ==
+                    arraysize(iq_matrix->load_quantiser_table),
+                "max number of quantization table mismatched");
+  for (size_t i = 0; i < kJpegMaxQuantizationTableNum; i++) {
+    if (!q_table[i].valid)
+      continue;
+    iq_matrix->load_quantiser_table[i] = 1;
+    static_assert(
+        arraysize(iq_matrix->quantiser_table[i]) == arraysize(q_table[i].value),
+        "number of quantization entries mismatched");
+    for (size_t j = 0; j < arraysize(q_table[i].value); j++)
+      iq_matrix->quantiser_table[i][j] = q_table[i].value[j];
+  }
+}
+
+static void FillHuffmanTable(const JpegHuffmanTable* dc_table,
+                             const JpegHuffmanTable* ac_table,
+                             VAHuffmanTableBufferJPEGBaseline* huffman_table) {
+  memset(huffman_table, 0, sizeof(*huffman_table));
+  // Use default huffman tables if not specified in header.
+  bool has_huffman_table = false;
+  for (size_t i = 0; i < kJpegMaxHuffmanTableNumBaseline; i++) {
+    if (dc_table[i].valid || ac_table[i].valid) {
+      has_huffman_table = true;
+      break;
+    }
+  }
+  if (!has_huffman_table) {
+    dc_table = kDefaultDcTable;
+    ac_table = kDefaultAcTable;
+  }
+
+  static_assert(kJpegMaxHuffmanTableNumBaseline ==
+                    arraysize(huffman_table->load_huffman_table),
+                "max number of huffman table mismatched");
+  static_assert(sizeof(huffman_table->huffman_table[0].num_dc_codes) ==
+                    sizeof(dc_table[0].code_length),
+                "size of huffman table code length mismatch");
+  static_assert(sizeof(huffman_table->huffman_table[0].dc_values[0]) ==
+                    sizeof(dc_table[0].code_value[0]),
+                "size of huffman table code value mismatch");
+  for (size_t i = 0; i < kJpegMaxHuffmanTableNumBaseline; i++) {
+    if (!dc_table[i].valid || !ac_table[i].valid)
+      continue;
+    huffman_table->load_huffman_table[i] = 1;
+
+    memcpy(huffman_table->huffman_table[i].num_dc_codes,
+           dc_table[i].code_length,
+           sizeof(huffman_table->huffman_table[i].num_dc_codes));
+    memcpy(huffman_table->huffman_table[i].dc_values, dc_table[i].code_value,
+           sizeof(huffman_table->huffman_table[i].dc_values));
+    memcpy(huffman_table->huffman_table[i].num_ac_codes,
+           ac_table[i].code_length,
+           sizeof(huffman_table->huffman_table[i].num_ac_codes));
+    memcpy(huffman_table->huffman_table[i].ac_values, ac_table[i].code_value,
+           sizeof(huffman_table->huffman_table[i].ac_values));
+  }
+}
+
+static void FillSliceParameters(
+    const JpegParseResult& parse_result,
+    VASliceParameterBufferJPEGBaseline* slice_param) {
+  memset(slice_param, 0, sizeof(*slice_param));
+  slice_param->slice_data_size = parse_result.data_size;
+  slice_param->slice_data_offset = 0;
+  slice_param->slice_data_flag = VA_SLICE_DATA_FLAG_ALL;
+  slice_param->slice_horizontal_position = 0;
+  slice_param->slice_vertical_position = 0;
+  slice_param->num_components = parse_result.scan.num_components;
+  for (int i = 0; i < slice_param->num_components; i++) {
+    slice_param->components[i].component_selector =
+        parse_result.scan.components[i].component_selector;
+    slice_param->components[i].dc_table_selector =
+        parse_result.scan.components[i].dc_selector;
+    slice_param->components[i].ac_table_selector =
+        parse_result.scan.components[i].ac_selector;
+  }
+  slice_param->restart_interval = parse_result.restart_interval;
+
+  // Cast to int to prevent overflow.
+  int max_h_factor =
+      parse_result.frame_header.components[0].horizontal_sampling_factor;
+  int max_v_factor =
+      parse_result.frame_header.components[0].vertical_sampling_factor;
+  int mcu_cols = parse_result.frame_header.coded_width / (max_h_factor * 8);
+  DCHECK_GT(mcu_cols, 0);
+  int mcu_rows = parse_result.frame_header.coded_height / (max_v_factor * 8);
+  DCHECK_GT(mcu_rows, 0);
+  slice_param->num_mcus = mcu_rows * mcu_cols;
+}
+
 }  // namespace
 
 void VaapiJpegDecodeAccelerator::NotifyError(int32_t bitstream_buffer_id,
@@ -107,7 +274,6 @@
       decoder_thread_("VaapiJpegDecoderThread"),
       va_surface_id_(VA_INVALID_SURFACE),
       va_rt_format_(0),
-      va_image_format_{},
       weak_this_factory_(this) {}
 
 VaapiJpegDecodeAccelerator::~VaapiJpegDecodeAccelerator() {
@@ -128,16 +294,16 @@
   // always use I420, as this is the expected output format.
   // TODO(crbug.com/828119): Try a list of possible supported formats rather
   // than hardcoding the format to I420 here.
-  VAImageFormat va_image_format = {};
-  va_image_format.fourcc = VA_FOURCC_I420;
-  va_image_format.byte_order = VA_LSB_FIRST;
-  va_image_format.bits_per_pixel = 12;
+  va_image_format_ = base::WrapUnique(new VAImageFormat{});
+  va_image_format_->fourcc = VA_FOURCC_I420;
+  va_image_format_->byte_order = VA_LSB_FIRST;
+  va_image_format_->bits_per_pixel = 12;
 
-  if (!VaapiWrapper::IsImageFormatSupported(va_image_format)) {
+  if (!VaapiWrapper::IsImageFormatSupported(*va_image_format_)) {
     VLOGF(1) << "I420 image format not supported";
+    va_image_format_.reset();
     return false;
   }
-  va_image_format_ = va_image_format;
 
   vaapi_wrapper_ =
       VaapiWrapper::Create(VaapiWrapper::kDecode, VAProfileJPEGBaseline,
@@ -173,8 +339,10 @@
   VAImage image = {};
   uint8_t* mem = nullptr;
   gfx::Size coded_size = video_frame->coded_size();
-  if (!vaapi_wrapper_->GetVaImage(va_surface_id, &va_image_format_, coded_size,
-                                  &image, reinterpret_cast<void**>(&mem))) {
+  DCHECK(va_image_format_);
+  if (!vaapi_wrapper_->GetVaImage(va_surface_id, va_image_format_.get(),
+                                  coded_size, &image,
+                                  reinterpret_cast<void**>(&mem))) {
     VLOGF(1) << "Cannot get VAImage";
     return false;
   }
@@ -262,8 +430,7 @@
     coded_size_ = new_coded_size;
   }
 
-  if (!VaapiJpegDecoder::Decode(vaapi_wrapper_.get(), parse_result,
-                                va_surface_id_)) {
+  if (!DoDecode(vaapi_wrapper_.get(), parse_result, va_surface_id_)) {
     VLOGF(1) << "Decode JPEG failed";
     NotifyError(bitstream_buffer_id, PLATFORM_FAILURE);
     return;
@@ -313,4 +480,55 @@
   return VaapiWrapper::IsJpegDecodeSupported();
 }
 
+// static
+bool VaapiJpegDecodeAccelerator::DoDecode(VaapiWrapper* vaapi_wrapper,
+                                          const JpegParseResult& parse_result,
+                                          VASurfaceID va_surface) {
+  DCHECK_NE(va_surface, VA_INVALID_SURFACE);
+  if (!IsVaapiSupportedJpeg(parse_result))
+    return false;
+
+  // Set picture parameters.
+  VAPictureParameterBufferJPEGBaseline pic_param;
+  FillPictureParameters(parse_result.frame_header, &pic_param);
+  if (!vaapi_wrapper->SubmitBuffer(VAPictureParameterBufferType,
+                                   sizeof(pic_param), &pic_param)) {
+    return false;
+  }
+
+  // Set quantization table.
+  VAIQMatrixBufferJPEGBaseline iq_matrix;
+  FillIQMatrix(parse_result.q_table, &iq_matrix);
+  if (!vaapi_wrapper->SubmitBuffer(VAIQMatrixBufferType, sizeof(iq_matrix),
+                                   &iq_matrix)) {
+    return false;
+  }
+
+  // Set huffman table.
+  VAHuffmanTableBufferJPEGBaseline huffman_table;
+  FillHuffmanTable(parse_result.dc_table, parse_result.ac_table,
+                   &huffman_table);
+  if (!vaapi_wrapper->SubmitBuffer(VAHuffmanTableBufferType,
+                                   sizeof(huffman_table), &huffman_table)) {
+    return false;
+  }
+
+  // Set slice parameters.
+  VASliceParameterBufferJPEGBaseline slice_param;
+  FillSliceParameters(parse_result, &slice_param);
+  if (!vaapi_wrapper->SubmitBuffer(VASliceParameterBufferType,
+                                   sizeof(slice_param), &slice_param)) {
+    return false;
+  }
+
+  // Set scan data.
+  if (!vaapi_wrapper->SubmitBuffer(VASliceDataBufferType,
+                                   parse_result.data_size,
+                                   const_cast<char*>(parse_result.data))) {
+    return false;
+  }
+
+  return vaapi_wrapper->ExecuteAndDestroyPendingBuffers(va_surface);
+}
+
 }  // namespace media
diff --git a/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.h b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.h
index e2d7bf4..0424f70 100644
--- a/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.h
+++ b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.h
@@ -10,20 +10,23 @@
 #include <memory>
 
 #include "base/macros.h"
-#include "base/memory/linked_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/single_thread_task_runner.h"
-#include "base/synchronization/lock.h"
 #include "base/threading/thread.h"
-#include "media/base/bitstream_buffer.h"
-#include "media/base/unaligned_shared_memory.h"
 #include "media/gpu/media_gpu_export.h"
-#include "media/gpu/vaapi/vaapi_jpeg_decoder.h"
-#include "media/gpu/vaapi/vaapi_wrapper.h"
 #include "media/video/jpeg_decode_accelerator.h"
 
+// These data types are defined in va/va.h using typedef, reproduced here.
+typedef struct _VAImageFormat VAImageFormat;
+typedef unsigned int VASurfaceID;
+
 namespace media {
 
+class BitstreamBuffer;
+struct JpegParseResult;
+class UnalignedSharedMemory;
+class VaapiWrapper;
+
 // Class to provide JPEG decode acceleration for Intel systems with hardware
 // support for it, and on which libva is available.
 // Decoding tasks are performed in a separate decoding thread.
@@ -67,6 +70,16 @@
                      int32_t input_buffer_id,
                      const scoped_refptr<VideoFrame>& video_frame);
 
+  // Decodes a JPEG picture. It will fill VA-API parameters and call
+  // corresponding VA-API methods according to the JPEG |parse_result|. Decoded
+  // data will be outputted to the given |va_surface|. Returns false on failure.
+  // |vaapi_wrapper| should be initialized in kDecode mode with
+  // VAProfileJPEGBaseline profile. |va_surface| should be created with size at
+  // least as large as the picture size.
+  static bool DoDecode(VaapiWrapper* vaapi_wrapper,
+                       const JpegParseResult& parse_result,
+                       VASurfaceID va_surface);
+
   // ChildThread's task runner.
   const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
 
@@ -80,7 +93,6 @@
 
   // Comes after vaapi_wrapper_ to ensure its destructor is executed before
   // |vaapi_wrapper_| is destroyed.
-  std::unique_ptr<VaapiJpegDecoder> decoder_;
   base::Thread decoder_thread_;
   // Use this to post tasks to |decoder_thread_| instead of
   // |decoder_thread_.task_runner()| because the latter will be NULL once
@@ -94,7 +106,7 @@
   // The VA RT format associated with |va_surface_id_|.
   unsigned int va_rt_format_;
   // The VA image format that will be requested from the VA API.
-  VAImageFormat va_image_format_;
+  std::unique_ptr<VAImageFormat> va_image_format_;
 
   // WeakPtr factory for use in posting tasks from |decoder_task_runner_| back
   // to |task_runner_|.  Since |decoder_thread_| is a fully owned member of
diff --git a/media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator_unittest.cc
similarity index 85%
rename from media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc
rename to media/gpu/vaapi/vaapi_jpeg_decode_accelerator_unittest.cc
index bf858919..8c3a2a9e 100644
--- a/media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc
+++ b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator_unittest.cc
@@ -21,7 +21,7 @@
 #include "media/base/test_data_util.h"
 #include "media/base/video_frame.h"
 #include "media/filters/jpeg_parser.h"
-#include "media/gpu/vaapi/vaapi_jpeg_decoder.h"
+#include "media/gpu/vaapi/vaapi_jpeg_decode_accelerator.h"
 #include "mojo/core/embedder/embedder.h"
 
 namespace media {
@@ -34,9 +34,9 @@
   LOG(FATAL) << "Oh noes! Decoder failed";
 }
 
-class VaapiJpegDecoderTest : public ::testing::Test {
+class VaapiJpegDecodeAcceleratorTest : public ::testing::Test {
  protected:
-  VaapiJpegDecoderTest() {}
+  VaapiJpegDecodeAcceleratorTest() {}
 
   void SetUp() override {
     base::Closure report_error_cb = base::Bind(&LogOnError);
@@ -60,8 +60,9 @@
   std::string jpeg_data_;
 };
 
-bool VaapiJpegDecoderTest::VerifyDecode(const JpegParseResult& parse_result,
-                                        const std::string& expected_md5sum) {
+bool VaapiJpegDecodeAcceleratorTest::VerifyDecode(
+    const JpegParseResult& parse_result,
+    const std::string& expected_md5sum) {
   gfx::Size size(parse_result.frame_header.coded_width,
                  parse_result.frame_header.coded_height);
 
@@ -69,7 +70,8 @@
   if (!wrapper_->CreateSurfaces(VA_RT_FORMAT_YUV420, size, 1, &va_surfaces))
     return false;
 
-  if (!VaapiJpegDecoder::Decode(wrapper_.get(), parse_result, va_surfaces[0])) {
+  if (!VaapiJpegDecodeAccelerator::DoDecode(wrapper_.get(), parse_result,
+                                            va_surfaces[0])) {
     LOG(ERROR) << "Decode failed";
     return false;
   }
@@ -99,7 +101,7 @@
   return true;
 }
 
-TEST_F(VaapiJpegDecoderTest, DecodeSuccess) {
+TEST_F(VaapiJpegDecodeAcceleratorTest, DecodeSuccess) {
   JpegParseResult parse_result;
   ASSERT_TRUE(
       ParseJpegPicture(reinterpret_cast<const uint8_t*>(jpeg_data_.data()),
@@ -108,7 +110,7 @@
   EXPECT_TRUE(VerifyDecode(parse_result, kExpectedMd5Sum));
 }
 
-TEST_F(VaapiJpegDecoderTest, DecodeFail) {
+TEST_F(VaapiJpegDecodeAcceleratorTest, DecodeFail) {
   JpegParseResult parse_result;
   ASSERT_TRUE(
       ParseJpegPicture(reinterpret_cast<const uint8_t*>(jpeg_data_.data()),
@@ -125,8 +127,8 @@
   ASSERT_TRUE(
       wrapper_->CreateSurfaces(VA_RT_FORMAT_YUV420, size, 1, &va_surfaces));
 
-  EXPECT_FALSE(
-      VaapiJpegDecoder::Decode(wrapper_.get(), parse_result, va_surfaces[0]));
+  EXPECT_FALSE(VaapiJpegDecodeAccelerator::DoDecode(
+      wrapper_.get(), parse_result, va_surfaces[0]));
 }
 
 }  // namespace
diff --git a/media/gpu/vaapi/vaapi_jpeg_decoder.cc b/media/gpu/vaapi/vaapi_jpeg_decoder.cc
deleted file mode 100644
index b417d736..0000000
--- a/media/gpu/vaapi/vaapi_jpeg_decoder.cc
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "media/gpu/vaapi/vaapi_jpeg_decoder.h"
-
-#include <stddef.h>
-#include <string.h>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "media/filters/jpeg_parser.h"
-
-namespace media {
-
-// VAAPI only support subset of JPEG profiles. This function determines a given
-// parsed JPEG result is supported or not.
-static bool IsVaapiSupportedJpeg(const JpegParseResult& jpeg) {
-  if (jpeg.frame_header.visible_width < 1 ||
-      jpeg.frame_header.visible_height < 1) {
-    DLOG(ERROR) << "width(" << jpeg.frame_header.visible_width
-                << ") and height(" << jpeg.frame_header.visible_height
-                << ") should be at least 1";
-    return false;
-  }
-
-  // Size 64k*64k is the maximum in the JPEG standard. VAAPI doesn't support
-  // resolutions larger than 16k*16k.
-  const int kMaxDimension = 16384;
-  if (jpeg.frame_header.coded_width > kMaxDimension ||
-      jpeg.frame_header.coded_height > kMaxDimension) {
-    DLOG(ERROR) << "VAAPI doesn't support size("
-                << jpeg.frame_header.coded_width << "*"
-                << jpeg.frame_header.coded_height << ") larger than "
-                << kMaxDimension << "*" << kMaxDimension;
-    return false;
-  }
-
-  if (jpeg.frame_header.num_components != 3) {
-    DLOG(ERROR) << "VAAPI doesn't support num_components("
-                << static_cast<int>(jpeg.frame_header.num_components)
-                << ") != 3";
-    return false;
-  }
-
-  if (jpeg.frame_header.components[0].horizontal_sampling_factor <
-          jpeg.frame_header.components[1].horizontal_sampling_factor ||
-      jpeg.frame_header.components[0].horizontal_sampling_factor <
-          jpeg.frame_header.components[2].horizontal_sampling_factor) {
-    DLOG(ERROR) << "VAAPI doesn't supports horizontal sampling factor of Y"
-                << " smaller than Cb and Cr";
-    return false;
-  }
-
-  if (jpeg.frame_header.components[0].vertical_sampling_factor <
-          jpeg.frame_header.components[1].vertical_sampling_factor ||
-      jpeg.frame_header.components[0].vertical_sampling_factor <
-          jpeg.frame_header.components[2].vertical_sampling_factor) {
-    DLOG(ERROR) << "VAAPI doesn't supports vertical sampling factor of Y"
-                << " smaller than Cb and Cr";
-    return false;
-  }
-
-  return true;
-}
-
-static void FillPictureParameters(
-    const JpegFrameHeader& frame_header,
-    VAPictureParameterBufferJPEGBaseline* pic_param) {
-  memset(pic_param, 0, sizeof(*pic_param));
-  pic_param->picture_width = frame_header.coded_width;
-  pic_param->picture_height = frame_header.coded_height;
-  pic_param->num_components = frame_header.num_components;
-
-  for (int i = 0; i < pic_param->num_components; i++) {
-    pic_param->components[i].component_id = frame_header.components[i].id;
-    pic_param->components[i].h_sampling_factor =
-        frame_header.components[i].horizontal_sampling_factor;
-    pic_param->components[i].v_sampling_factor =
-        frame_header.components[i].vertical_sampling_factor;
-    pic_param->components[i].quantiser_table_selector =
-        frame_header.components[i].quantization_table_selector;
-  }
-}
-
-static void FillIQMatrix(const JpegQuantizationTable* q_table,
-                         VAIQMatrixBufferJPEGBaseline* iq_matrix) {
-  memset(iq_matrix, 0, sizeof(*iq_matrix));
-  static_assert(kJpegMaxQuantizationTableNum ==
-                    arraysize(iq_matrix->load_quantiser_table),
-                "max number of quantization table mismatched");
-  for (size_t i = 0; i < kJpegMaxQuantizationTableNum; i++) {
-    if (!q_table[i].valid)
-      continue;
-    iq_matrix->load_quantiser_table[i] = 1;
-    static_assert(
-        arraysize(iq_matrix->quantiser_table[i]) == arraysize(q_table[i].value),
-        "number of quantization entries mismatched");
-    for (size_t j = 0; j < arraysize(q_table[i].value); j++)
-      iq_matrix->quantiser_table[i][j] = q_table[i].value[j];
-  }
-}
-
-static void FillHuffmanTable(const JpegHuffmanTable* dc_table,
-                             const JpegHuffmanTable* ac_table,
-                             VAHuffmanTableBufferJPEGBaseline* huffman_table) {
-  memset(huffman_table, 0, sizeof(*huffman_table));
-  // Use default huffman tables if not specified in header.
-  bool has_huffman_table = false;
-  for (size_t i = 0; i < kJpegMaxHuffmanTableNumBaseline; i++) {
-    if (dc_table[i].valid || ac_table[i].valid) {
-      has_huffman_table = true;
-      break;
-    }
-  }
-  if (!has_huffman_table) {
-    dc_table = kDefaultDcTable;
-    ac_table = kDefaultAcTable;
-  }
-
-  static_assert(kJpegMaxHuffmanTableNumBaseline ==
-                    arraysize(huffman_table->load_huffman_table),
-                "max number of huffman table mismatched");
-  static_assert(sizeof(huffman_table->huffman_table[0].num_dc_codes) ==
-                    sizeof(dc_table[0].code_length),
-                "size of huffman table code length mismatch");
-  static_assert(sizeof(huffman_table->huffman_table[0].dc_values[0]) ==
-                    sizeof(dc_table[0].code_value[0]),
-                "size of huffman table code value mismatch");
-  for (size_t i = 0; i < kJpegMaxHuffmanTableNumBaseline; i++) {
-    if (!dc_table[i].valid || !ac_table[i].valid)
-      continue;
-    huffman_table->load_huffman_table[i] = 1;
-
-    memcpy(huffman_table->huffman_table[i].num_dc_codes,
-           dc_table[i].code_length,
-           sizeof(huffman_table->huffman_table[i].num_dc_codes));
-    memcpy(huffman_table->huffman_table[i].dc_values, dc_table[i].code_value,
-           sizeof(huffman_table->huffman_table[i].dc_values));
-    memcpy(huffman_table->huffman_table[i].num_ac_codes,
-           ac_table[i].code_length,
-           sizeof(huffman_table->huffman_table[i].num_ac_codes));
-    memcpy(huffman_table->huffman_table[i].ac_values, ac_table[i].code_value,
-           sizeof(huffman_table->huffman_table[i].ac_values));
-  }
-}
-
-static void FillSliceParameters(
-    const JpegParseResult& parse_result,
-    VASliceParameterBufferJPEGBaseline* slice_param) {
-  memset(slice_param, 0, sizeof(*slice_param));
-  slice_param->slice_data_size = parse_result.data_size;
-  slice_param->slice_data_offset = 0;
-  slice_param->slice_data_flag = VA_SLICE_DATA_FLAG_ALL;
-  slice_param->slice_horizontal_position = 0;
-  slice_param->slice_vertical_position = 0;
-  slice_param->num_components = parse_result.scan.num_components;
-  for (int i = 0; i < slice_param->num_components; i++) {
-    slice_param->components[i].component_selector =
-        parse_result.scan.components[i].component_selector;
-    slice_param->components[i].dc_table_selector =
-        parse_result.scan.components[i].dc_selector;
-    slice_param->components[i].ac_table_selector =
-        parse_result.scan.components[i].ac_selector;
-  }
-  slice_param->restart_interval = parse_result.restart_interval;
-
-  // Cast to int to prevent overflow.
-  int max_h_factor =
-      parse_result.frame_header.components[0].horizontal_sampling_factor;
-  int max_v_factor =
-      parse_result.frame_header.components[0].vertical_sampling_factor;
-  int mcu_cols = parse_result.frame_header.coded_width / (max_h_factor * 8);
-  DCHECK_GT(mcu_cols, 0);
-  int mcu_rows = parse_result.frame_header.coded_height / (max_v_factor * 8);
-  DCHECK_GT(mcu_rows, 0);
-  slice_param->num_mcus = mcu_rows * mcu_cols;
-}
-
-// static
-bool VaapiJpegDecoder::Decode(VaapiWrapper* vaapi_wrapper,
-                              const JpegParseResult& parse_result,
-                              VASurfaceID va_surface) {
-  DCHECK_NE(va_surface, VA_INVALID_SURFACE);
-  if (!IsVaapiSupportedJpeg(parse_result))
-    return false;
-
-  // Set picture parameters.
-  VAPictureParameterBufferJPEGBaseline pic_param;
-  FillPictureParameters(parse_result.frame_header, &pic_param);
-  if (!vaapi_wrapper->SubmitBuffer(VAPictureParameterBufferType,
-                                   sizeof(pic_param), &pic_param)) {
-    return false;
-  }
-
-  // Set quantization table.
-  VAIQMatrixBufferJPEGBaseline iq_matrix;
-  FillIQMatrix(parse_result.q_table, &iq_matrix);
-  if (!vaapi_wrapper->SubmitBuffer(VAIQMatrixBufferType, sizeof(iq_matrix),
-                                   &iq_matrix)) {
-    return false;
-  }
-
-  // Set huffman table.
-  VAHuffmanTableBufferJPEGBaseline huffman_table;
-  FillHuffmanTable(parse_result.dc_table, parse_result.ac_table,
-                   &huffman_table);
-  if (!vaapi_wrapper->SubmitBuffer(VAHuffmanTableBufferType,
-                                   sizeof(huffman_table), &huffman_table)) {
-    return false;
-  }
-
-  // Set slice parameters.
-  VASliceParameterBufferJPEGBaseline slice_param;
-  FillSliceParameters(parse_result, &slice_param);
-  if (!vaapi_wrapper->SubmitBuffer(VASliceParameterBufferType,
-                                   sizeof(slice_param), &slice_param)) {
-    return false;
-  }
-
-  // Set scan data.
-  if (!vaapi_wrapper->SubmitBuffer(VASliceDataBufferType,
-                                   parse_result.data_size,
-                                   const_cast<char*>(parse_result.data))) {
-    return false;
-  }
-
-  return vaapi_wrapper->ExecuteAndDestroyPendingBuffers(va_surface);
-}
-
-}  // namespace media
diff --git a/media/gpu/vaapi/vaapi_jpeg_decoder.h b/media/gpu/vaapi/vaapi_jpeg_decoder.h
deleted file mode 100644
index 705229a6..0000000
--- a/media/gpu/vaapi/vaapi_jpeg_decoder.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MEDIA_GPU_VAAPI_VAAPI_JPEG_DECODER_H_
-#define MEDIA_GPU_VAAPI_VAAPI_JPEG_DECODER_H_
-
-#include "base/macros.h"
-#include "media/gpu/media_gpu_export.h"
-#include "media/gpu/vaapi/vaapi_wrapper.h"
-
-namespace media {
-
-struct JpegParseResult;
-
-// A JPEG decoder that utilizes VA-API hardware video decode acceleration on
-// Intel systems. Provides functionality to allow plugging VAAPI HW
-// acceleration into the JpegDecodeAccelerator framework.
-//
-// Clients of this class are expected to manage VA surfaces created via
-// VaapiWrapper, parse JPEG picture via ParseJpegPicture, and then pass
-// them to this class.
-class MEDIA_GPU_EXPORT VaapiJpegDecoder {
- public:
-  // Decode a JPEG picture. It will fill VA-API parameters and call
-  // corresponding VA-API methods according to parsed JPEG result
-  // |parse_result|. Decoded data will be outputted to the given |va_surface|.
-  // Return false on failure.
-  // |vaapi_wrapper| should be initialized in kDecode mode with
-  // VAProfileJPEGBaseline profile.
-  // |va_surface| should be created with size at least as large as the picture
-  // size.
-  static bool Decode(VaapiWrapper* vaapi_wrapper,
-                     const JpegParseResult& parse_result,
-                     VASurfaceID va_surface);
-
- private:
-  DISALLOW_IMPLICIT_CONSTRUCTORS(VaapiJpegDecoder);
-};
-
-}  // namespace media
-
-#endif  // MEDIA_GPU_VAAPI_VAAPI_JPEG_DECODER_H_
diff --git a/mojo/public/cpp/bindings/sync_call_restrictions.h b/mojo/public/cpp/bindings/sync_call_restrictions.h
index e72cb1d..0c5972ee 100644
--- a/mojo/public/cpp/bindings/sync_call_restrictions.h
+++ b/mojo/public/cpp/bindings/sync_call_restrictions.h
@@ -25,10 +25,6 @@
 class BlinkTestController;
 }
 
-namespace display {
-class ForwardingDisplayDelegate;
-}
-
 namespace leveldb {
 class LevelDBMojoProxy;
 }
@@ -107,13 +103,6 @@
   friend class ui::HostContextFactoryPrivate;
   // END ALLOWED USAGE.
 
-  // BEGIN USAGE THAT NEEDS TO BE FIXED.
-  // In ash::Shell::Init() it assumes that NativeDisplayDelegate will be
-  // synchronous at first. In mushrome ForwardingDisplayDelegate uses a
-  // synchronous call to get the display snapshots as a workaround.
-  friend class display::ForwardingDisplayDelegate;
-  // END USAGE THAT NEEDS TO BE FIXED.
-
 #if ENABLE_SYNC_CALL_RESTRICTIONS
   static void IncreaseScopedAllowCount();
   static void DecreaseScopedAllowCount();
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 3d06331..f2c15fe2 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -2477,8 +2477,6 @@
     "data/ssl/certificates/self-signed-invalid-name.pem",
     "data/ssl/certificates/self-signed-invalid-sig.pem",
     "data/ssl/certificates/sha1_2016.pem",
-    "data/ssl/certificates/sha1_dec_2015.pem",
-    "data/ssl/certificates/sha1_jan_2016.pem",
     "data/ssl/certificates/sha1_leaf.pem",
     "data/ssl/certificates/spdy_pooling.pem",
     "data/ssl/certificates/start_after_expiry.pem",
@@ -5117,6 +5115,9 @@
     "third_party/quic/platform/impl/quic_url_utils_impl_test.cc",
     "third_party/quic/quartc/quartc_session_test.cc",
     "third_party/quic/quartc/quartc_stream_test.cc",
+    "third_party/quic/quartc/simulated_packet_transport.cc",
+    "third_party/quic/quartc/simulated_packet_transport.h",
+    "third_party/quic/quartc/simulated_packet_transport_test.cc",
     "third_party/quic/test_tools/crypto_test_utils_test.cc",
     "third_party/quic/test_tools/mock_quic_time_wait_list_manager.cc",
     "third_party/quic/test_tools/mock_quic_time_wait_list_manager.h",
diff --git a/net/cert/cert_verify_proc.cc b/net/cert/cert_verify_proc.cc
index 6177891b..7d6be70 100644
--- a/net/cert/cert_verify_proc.cc
+++ b/net/cert/cert_verify_proc.cc
@@ -185,18 +185,6 @@
   return weak_key;
 }
 
-// Beginning with Ballot 118, ratified in the Baseline Requirements v1.2.1,
-// CAs MUST NOT issue SHA-1 certificates beginning on 1 January 2016.
-bool IsPastSHA1DeprecationDate(const X509Certificate& cert) {
-  const base::Time& start = cert.valid_start();
-  if (start.is_max() || start.is_null())
-    return true;
-  // 2016-01-01 00:00:00 UTC.
-  const base::Time kSHA1DeprecationDate =
-      base::Time::FromInternalValue(INT64_C(13096080000000000));
-  return start >= kSHA1DeprecationDate;
-}
-
 // See
 // https://security.googleblog.com/2017/09/chromes-plan-to-distrust-symantec.html
 // for more details.
@@ -498,8 +486,7 @@
 #endif
 }
 
-CertVerifyProc::CertVerifyProc()
-    : sha1_legacy_mode_enabled(base::FeatureList::IsEnabled(kSHA1LegacyMode)) {}
+CertVerifyProc::CertVerifyProc() {}
 
 CertVerifyProc::~CertVerifyProc() = default;
 
@@ -586,13 +573,6 @@
 
   // Flag certificates using weak signature algorithms.
 
-  // Legacy SHA-1 behaviour:
-  // - Reject all publicly trusted SHA-1 leaf certs issued after
-  //   2016-01-01.
-  bool legacy_sha1_issue = verify_result->has_sha1_leaf &&
-                           verify_result->is_issued_by_known_root &&
-                           IsPastSHA1DeprecationDate(*cert);
-
   // Current SHA-1 behaviour:
   // - Reject all SHA-1
   // - ... unless it's not publicly trusted and SHA-1 is allowed
@@ -604,9 +584,7 @@
       (verify_result->has_sha1_leaf ||
        (verify_result->has_sha1 && !AreSHA1IntermediatesAllowed()));
 
-  if (verify_result->has_md5 ||
-      (sha1_legacy_mode_enabled && legacy_sha1_issue) ||
-      (!sha1_legacy_mode_enabled && current_sha1_issue)) {
+  if (verify_result->has_md5 || current_sha1_issue) {
     verify_result->cert_status |= CERT_STATUS_WEAK_SIGNATURE_ALGORITHM;
     // Avoid replacing a more serious error, such as an OS/library failure,
     // by ensuring that if verification failed, it failed with a certificate
@@ -907,10 +885,6 @@
 }
 
 // static
-const base::Feature CertVerifyProc::kSHA1LegacyMode{
-    "SHA1LegacyMode", base::FEATURE_DISABLED_BY_DEFAULT};
-
-// static
 const base::Feature CertVerifyProc::kLegacySymantecPKIEnforcement{
     "LegacySymantecPKI", base::FEATURE_ENABLED_BY_DEFAULT};
 
diff --git a/net/cert/cert_verify_proc.h b/net/cert/cert_verify_proc.h
index c89c1379..b770c52 100644
--- a/net/cert/cert_verify_proc.h
+++ b/net/cert/cert_verify_proc.h
@@ -162,10 +162,6 @@
   // (i.e. by 1 July 2019).
   static bool HasTooLongValidity(const X509Certificate& cert);
 
-  // Emergency kill-switch for SHA-1 deprecation. Disabled by default.
-  static const base::Feature kSHA1LegacyMode;
-  const bool sha1_legacy_mode_enabled;
-
   // Feature flag affecting the Legacy Symantec PKI deprecation, documented
   // at https://g.co/chrome/symantecpkicerts
   static const base::Feature kLegacySymantecPKIEnforcement;
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc
index 65785fa..b11680a 100644
--- a/net/cert/cert_verify_proc_unittest.cc
+++ b/net/cert/cert_verify_proc_unittest.cc
@@ -2069,91 +2069,6 @@
   }
 }
 
-// While all SHA-1 certificates should be rejected, in the event that there
-// emerges some unexpected bug, test that the 'legacy' behaviour works
-// correctly - rejecting all SHA-1 certificates from publicly trusted CAs
-// that were issued after 1 January 2016, while still allowing those from
-// before that date, with SHA-1 in the intermediate, or from an enterprise
-// CA.
-TEST(CertVerifyProcTest, VerifyRejectsSHA1AfterDeprecationLegacyMode) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(CertVerifyProc::kSHA1LegacyMode);
-
-  CertVerifyResult dummy_result;
-  CertVerifyResult verify_result;
-  int error = 0;
-  scoped_refptr<X509Certificate> cert;
-
-  // Publicly trusted SHA-1 leaf certificates issued before 1 January 2016
-  // are accepted.
-  verify_result.Reset();
-  dummy_result.Reset();
-  dummy_result.is_issued_by_known_root = true;
-  dummy_result.has_sha1 = true;
-  dummy_result.has_sha1_leaf = true;
-  scoped_refptr<CertVerifyProc> verify_proc =
-      new MockCertVerifyProc(dummy_result);
-  cert = CreateCertificateChainFromFile(GetTestCertsDirectory(),
-                                        "sha1_dec_2015.pem",
-                                        X509Certificate::FORMAT_AUTO);
-  ASSERT_TRUE(cert);
-  error = verify_proc->Verify(cert.get(), "127.0.0.1", std::string(), 0, NULL,
-                              CertificateList(), &verify_result);
-  EXPECT_THAT(error, IsOk());
-  EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_SHA1_SIGNATURE_PRESENT);
-
-  // Publicly trusted SHA-1 leaf certificates issued on/after 1 January 2016
-  // are rejected.
-  verify_result.Reset();
-  dummy_result.Reset();
-  dummy_result.is_issued_by_known_root = true;
-  dummy_result.has_sha1 = true;
-  dummy_result.has_sha1_leaf = true;
-  verify_proc = base::MakeRefCounted<MockCertVerifyProc>(dummy_result);
-  cert = CreateCertificateChainFromFile(GetTestCertsDirectory(),
-                                        "sha1_jan_2016.pem",
-                                        X509Certificate::FORMAT_AUTO);
-  ASSERT_TRUE(cert);
-  error = verify_proc->Verify(cert.get(), "127.0.0.1", std::string(), 0, NULL,
-                              CertificateList(), &verify_result);
-  EXPECT_THAT(error, IsError(ERR_CERT_WEAK_SIGNATURE_ALGORITHM));
-  EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_WEAK_SIGNATURE_ALGORITHM);
-
-  // Enterprise issued SHA-1 leaf certificates issued on/after 1 January 2016
-  // remain accepted.
-  verify_result.Reset();
-  dummy_result.Reset();
-  dummy_result.is_issued_by_known_root = false;
-  dummy_result.has_sha1 = true;
-  dummy_result.has_sha1_leaf = true;
-  verify_proc = base::MakeRefCounted<MockCertVerifyProc>(dummy_result);
-  cert = CreateCertificateChainFromFile(GetTestCertsDirectory(),
-                                        "sha1_jan_2016.pem",
-                                        X509Certificate::FORMAT_AUTO);
-  ASSERT_TRUE(cert);
-  error = verify_proc->Verify(cert.get(), "127.0.0.1", std::string(), 0, NULL,
-                              CertificateList(), &verify_result);
-  EXPECT_THAT(error, IsOk());
-  EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_SHA1_SIGNATURE_PRESENT);
-
-  // Publicly trusted SHA-1 intermediates issued on/after 1 January 2016 are,
-  // unfortunately, accepted. This can arise due to OS path building quirks.
-  verify_result.Reset();
-  dummy_result.Reset();
-  dummy_result.is_issued_by_known_root = true;
-  dummy_result.has_sha1 = true;
-  dummy_result.has_sha1_leaf = false;
-  verify_proc = base::MakeRefCounted<MockCertVerifyProc>(dummy_result);
-  cert = CreateCertificateChainFromFile(GetTestCertsDirectory(),
-                                        "sha1_jan_2016.pem",
-                                        X509Certificate::FORMAT_AUTO);
-  ASSERT_TRUE(cert);
-  error = verify_proc->Verify(cert.get(), "127.0.0.1", std::string(), 0, NULL,
-                              CertificateList(), &verify_result);
-  EXPECT_THAT(error, IsOk());
-  EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_SHA1_SIGNATURE_PRESENT);
-}
-
 // Test that the certificate returned in CertVerifyResult is able to reorder
 // certificates that are not ordered from end-entity to root. While this is
 // a protocol violation if sent during a TLS handshake, if multiple sources
diff --git a/net/data/ssl/certificates/README b/net/data/ssl/certificates/README
index 3594a94..ee1d35bf 100644
--- a/net/data/ssl/certificates/README
+++ b/net/data/ssl/certificates/README
@@ -165,10 +165,6 @@
 - sha1_2016.pem
     Used to test the handling of SHA1 certificates expiring in 2016.
 
-- sha1_dec_2015.pem
-- sha1_jan_2016.pem
-    Used to test enforcement of the Baseline Requirements' policies on SHA-1.
-
 - 10_year_validity.pem
 - 11_year_validity.pem
 - 39_months_after_2015_04.pem
diff --git a/net/data/ssl/certificates/sha1_dec_2015.pem b/net/data/ssl/certificates/sha1_dec_2015.pem
deleted file mode 100644
index 30633aec..0000000
--- a/net/data/ssl/certificates/sha1_dec_2015.pem
+++ /dev/null
@@ -1,84 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 10 (0xa)
-    Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA
-        Validity
-            Not Before: Dec 31 23:59:59 2015 GMT
-            Not After : Dec 30 00:00:00 2016 GMT
-        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:b6:91:2d:66:93:a5:7c:3c:60:ef:37:dd:70:95:
-                    ec:f4:16:31:64:f5:02:6b:da:28:b0:56:64:6c:4b:
-                    77:3a:ce:88:14:24:36:7d:7c:18:cc:fd:fb:43:24:
-                    09:e0:d5:6c:4d:32:47:08:61:a6:e1:3b:69:9d:4b:
-                    bf:d4:0f:d1:11:1b:c6:08:6e:b1:ad:76:36:ab:f9:
-                    2e:93:da:23:eb:bd:e3:06:a6:94:8a:7b:12:9b:92:
-                    d4:7b:6a:ee:95:95:3e:76:16:77:da:cc:3a:5b:0e:
-                    5d:45:57:fb:d6:73:0e:7e:0e:2d:98:e0:1a:ae:49:
-                    c0:b6:c5:86:f6:c3:06:cc:91:aa:ec:dc:a6:32:cc:
-                    31:3d:60:ff:21:97:77:98:f7:2a:7b:94:68:5e:48:
-                    91:64:2b:25:93:dd:d4:42:bd:45:3b:40:da:fc:5f:
-                    87:d1:82:60:da:54:1a:92:fb:a6:eb:5e:d4:1b:5a:
-                    5e:88:07:a4:1e:b8:9b:e9:6f:8b:9d:0a:5b:94:78:
-                    07:c9:60:ed:16:ec:2d:67:37:e1:37:2e:db:6c:27:
-                    30:5b:5b:b0:7f:bf:29:d1:a7:c5:57:88:9e:a2:4e:
-                    52:56:5c:44:49:67:2c:fb:e4:29:9e:48:88:8a:2b:
-                    a4:86:d3:5a:bc:66:6c:e8:56:68:1f:4e:6a:74:54:
-                    34:f1
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: critical
-                CA:FALSE
-            X509v3 Subject Key Identifier: 
-                8F:94:39:15:DD:3B:6D:DE:5D:23:46:53:92:8A:FF:E4:28:CA:54:40
-            X509v3 Authority Key Identifier: 
-                keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB
-
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-            X509v3 Subject Alternative Name: 
-                IP Address:127.0.0.1
-    Signature Algorithm: sha1WithRSAEncryption
-         3c:ba:22:75:be:4a:28:1d:0b:14:16:f9:6a:24:8b:be:62:f2:
-         aa:38:fe:23:89:b5:50:2c:ab:ea:9e:fb:74:6a:dd:1f:31:bd:
-         6a:d0:16:09:be:a5:af:62:4a:6b:bd:98:d0:d6:4f:8a:3c:05:
-         2c:92:e1:c5:db:5f:e2:64:9c:f5:ba:23:c5:f7:75:53:21:54:
-         a0:9d:ad:2a:36:cb:7a:b8:a7:04:ae:97:17:6b:af:a1:1c:08:
-         14:94:e0:5e:fe:58:51:d2:51:6a:17:fc:89:13:f1:98:76:86:
-         92:66:91:8d:87:c5:6a:db:48:7c:63:7b:b7:db:3c:90:3a:8c:
-         73:5c:db:d0:0b:1b:96:3f:d4:07:ba:69:81:c7:83:3f:81:a7:
-         1d:30:8e:06:1a:95:49:0b:32:d3:b7:ea:e8:04:61:c4:f5:b0:
-         11:77:3d:60:02:e7:dd:3d:93:7d:22:61:81:4c:27:15:07:f1:
-         e5:8c:f1:d2:c6:40:83:03:d7:fc:38:69:aa:75:c0:d1:80:42:
-         cf:9c:92:18:c0:e4:30:df:1a:27:4b:3f:7f:c4:0d:0a:46:96:
-         51:9a:67:84:2b:2d:33:56:c8:52:fb:8b:6d:c7:e0:7e:c0:43:
-         55:69:9c:4c:9d:4b:36:82:be:b9:a7:77:8d:e6:85:90:7e:fb:
-         dc:2e:08:26
------BEGIN CERTIFICATE-----
-MIIDvzCCAqegAwIBAgIBCjANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzET
-MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G
-A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE1MTIzMTIz
-NTk1OVoXDTE2MTIzMDAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh
-bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg
-Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALaRLWaTpXw8YO833XCV7PQWMWT1AmvaKLBWZGxLdzrOiBQkNn18GMz9
-+0MkCeDVbE0yRwhhpuE7aZ1Lv9QP0REbxghusa12Nqv5LpPaI+u94wamlIp7EpuS
-1Htq7pWVPnYWd9rMOlsOXUVX+9ZzDn4OLZjgGq5JwLbFhvbDBsyRquzcpjLMMT1g
-/yGXd5j3KnuUaF5IkWQrJZPd1EK9RTtA2vxfh9GCYNpUGpL7pute1BtaXogHpB64
-m+lvi50KW5R4B8lg7RbsLWc34Tcu22wnMFtbsH+/KdGnxVeInqJOUlZcRElnLPvk
-KZ5IiIorpIbTWrxmbOhWaB9OanRUNPECAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw
-HQYDVR0OBBYEFI+UORXdO23eXSNGU5KK/+QoylRAMB8GA1UdIwQYMBaAFJsmC4qY
-qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP
-BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBBQUAA4IBAQA8uiJ1vkooHQsUFvlq
-JIu+YvKqOP4jibVQLKvqnvt0at0fMb1q0BYJvqWvYkprvZjQ1k+KPAUskuHF21/i
-ZJz1uiPF93VTIVSgna0qNst6uKcErpcXa6+hHAgUlOBe/lhR0lFqF/yJE/GYdoaS
-ZpGNh8Vq20h8Y3u32zyQOoxzXNvQCxuWP9QHummBx4M/gacdMI4GGpVJCzLTt+ro
-BGHE9bARdz1gAufdPZN9ImGBTCcVB/HljPHSxkCDA9f8OGmqdcDRgELPnJIYwOQw
-3xonSz9/xA0KRpZRmmeEKy0zVshS+4ttx+B+wENVaZxMnUs2gr65p3eN5oWQfvvc
-Lggm
------END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/sha1_jan_2016.pem b/net/data/ssl/certificates/sha1_jan_2016.pem
deleted file mode 100644
index cda9de5..0000000
--- a/net/data/ssl/certificates/sha1_jan_2016.pem
+++ /dev/null
@@ -1,84 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 11 (0xb)
-    Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA
-        Validity
-            Not Before: Jan  1 00:00:00 2016 GMT
-            Not After : Dec 30 00:00:00 2016 GMT
-        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:a1:89:77:c3:66:58:98:bc:85:76:2f:a7:0a:23:
-                    52:73:1a:cf:d9:5a:10:50:1e:d9:37:aa:c6:f7:03:
-                    e3:ab:c2:b7:07:72:75:54:b2:e1:cc:9c:99:9a:a6:
-                    a6:f3:b8:5e:b4:f6:ea:c2:09:c6:76:2c:45:b9:e8:
-                    14:cc:ae:8b:99:10:7c:39:52:53:e2:87:70:02:00:
-                    74:ca:9b:3f:81:5e:2b:3b:09:00:51:be:a1:7f:f5:
-                    5e:45:1b:d7:15:44:b4:97:16:f9:d9:18:2d:c8:cc:
-                    e1:dc:f6:34:a6:6d:5d:67:4c:75:64:5c:d2:8c:e9:
-                    1d:90:0c:e2:21:f6:8e:86:d7:3d:4f:92:6a:46:53:
-                    0a:5c:86:98:d9:a4:ad:2a:90:eb:f6:c3:98:dd:86:
-                    af:24:59:a6:c7:b3:80:40:02:8b:20:e8:89:2d:78:
-                    dd:c3:fb:3f:83:16:5d:9c:be:70:73:ec:0c:44:e1:
-                    1d:58:72:61:4c:2d:0d:b0:97:ef:f4:fd:18:93:b1:
-                    07:c1:85:85:c5:6a:9d:c8:86:32:d8:ea:1e:e1:22:
-                    bb:6b:bb:e0:1c:f4:3a:92:f2:b3:1b:36:52:f8:64:
-                    3b:01:32:a0:cd:3f:e9:63:78:93:41:98:05:2c:bf:
-                    0a:cb:e8:e0:18:67:20:03:43:01:82:8a:ed:fb:33:
-                    86:23
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: critical
-                CA:FALSE
-            X509v3 Subject Key Identifier: 
-                15:94:2D:EB:50:FA:06:28:94:5B:58:20:CC:09:20:27:56:7A:2A:3B
-            X509v3 Authority Key Identifier: 
-                keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB
-
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-            X509v3 Subject Alternative Name: 
-                IP Address:127.0.0.1
-    Signature Algorithm: sha1WithRSAEncryption
-         b1:06:12:ad:8f:94:6b:ed:de:ed:7a:5e:ef:93:bd:d1:85:48:
-         62:62:f1:92:03:ac:77:d4:24:1e:64:77:55:8a:15:39:ee:41:
-         6f:76:c4:2b:c5:b3:fd:4e:a1:4e:8e:ad:da:f4:41:3f:69:9c:
-         2a:0d:d3:79:a5:53:0f:be:3c:a8:ef:d2:e1:83:60:a9:bd:3e:
-         a8:1e:3a:cd:c6:04:71:b0:14:98:71:2d:35:d3:ff:1f:27:77:
-         5c:69:ab:8f:9e:f4:26:48:f1:03:61:8d:c9:e7:43:fb:ab:95:
-         e2:97:cb:b9:04:cf:3b:10:5c:21:a2:27:f6:b2:43:c2:3f:5b:
-         3c:06:7a:d5:46:09:74:71:49:32:6a:8c:12:b4:d1:a0:4a:4a:
-         85:77:5a:d0:f0:fd:e9:88:94:2e:fc:db:15:8a:b2:85:82:a4:
-         82:b9:0e:36:54:e8:6a:b9:37:55:0a:63:90:56:06:77:9f:34:
-         6c:25:f2:a6:92:08:eb:c5:df:d4:68:52:73:9e:9c:c9:b8:c3:
-         b7:f2:14:c4:5c:78:12:03:5f:8d:09:a7:ac:ba:79:35:62:14:
-         13:e6:fe:64:41:e7:4a:a5:41:b1:0e:ad:e8:2f:16:36:ba:1c:
-         a5:76:4e:fb:70:62:8c:00:f4:22:55:9d:99:61:5a:b6:e5:fb:
-         7e:94:44:c6
------BEGIN CERTIFICATE-----
-MIIDvzCCAqegAwIBAgIBCzANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzET
-MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G
-A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE2MDEwMTAw
-MDAwMFoXDTE2MTIzMDAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh
-bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg
-Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKGJd8NmWJi8hXYvpwojUnMaz9laEFAe2TeqxvcD46vCtwdydVSy4cyc
-mZqmpvO4XrT26sIJxnYsRbnoFMyui5kQfDlSU+KHcAIAdMqbP4FeKzsJAFG+oX/1
-XkUb1xVEtJcW+dkYLcjM4dz2NKZtXWdMdWRc0ozpHZAM4iH2jobXPU+SakZTClyG
-mNmkrSqQ6/bDmN2GryRZpsezgEACiyDoiS143cP7P4MWXZy+cHPsDEThHVhyYUwt
-DbCX7/T9GJOxB8GFhcVqnciGMtjqHuEiu2u74Bz0OpLysxs2UvhkOwEyoM0/6WN4
-k0GYBSy/Csvo4BhnIANDAYKK7fszhiMCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw
-HQYDVR0OBBYEFBWULetQ+gYolFtYIMwJICdWeio7MB8GA1UdIwQYMBaAFJsmC4qY
-qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP
-BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBBQUAA4IBAQCxBhKtj5Rr7d7tel7v
-k73RhUhiYvGSA6x31CQeZHdVihU57kFvdsQrxbP9TqFOjq3a9EE/aZwqDdN5pVMP
-vjyo79Lhg2CpvT6oHjrNxgRxsBSYcS010/8fJ3dcaauPnvQmSPEDYY3J50P7q5Xi
-l8u5BM87EFwhoif2skPCP1s8BnrVRgl0cUkyaowStNGgSkqFd1rQ8P3piJQu/NsV
-irKFgqSCuQ42VOhquTdVCmOQVgZ3nzRsJfKmkgjrxd/UaFJznpzJuMO38hTEXHgS
-A1+NCaesunk1YhQT5v5kQedKpUGxDq3oLxY2uhyldk77cGKMAPQiVZ2ZYVq25ft+
-lETG
------END CERTIFICATE-----
diff --git a/net/data/ssl/scripts/generate-test-certs.sh b/net/data/ssl/scripts/generate-test-certs.sh
index 45937e6..853363c 100755
--- a/net/data/ssl/scripts/generate-test-certs.sh
+++ b/net/data/ssl/scripts/generate-test-certs.sh
@@ -237,34 +237,6 @@
     -config ca.cnf \
     -md sha1
 
-## SHA1 certificate issued the last second before the SHA-1 deprecation date.
-openssl req -config ../scripts/ee.cnf \
-  -newkey rsa:2048 -text -out out/sha1_dec_2015.req
-CA_NAME="req_ca_dn" \
-  openssl ca \
-    -batch \
-    -extensions user_cert \
-    -startdate 151231235959Z \
-    -enddate   161230000000Z \
-    -in out/sha1_dec_2015.req \
-    -out ../certificates/sha1_dec_2015.pem \
-    -config ca.cnf \
-    -md sha1
-
-## SHA1 certificate issued on the SHA-1 deprecation date.
-openssl req -config ../scripts/ee.cnf \
-  -newkey rsa:2048 -text -out out/sha1_jan_2016.req
-CA_NAME="req_ca_dn" \
-  openssl ca \
-    -batch \
-    -extensions user_cert \
-    -startdate 160101000000Z \
-    -enddate   161230000000Z \
-    -in out/sha1_jan_2016.req \
-    -out ../certificates/sha1_jan_2016.pem \
-    -config ca.cnf \
-    -md sha1
-
 ## Validity too long unit test support.
 openssl req -config ../scripts/ee.cnf \
   -newkey rsa:2048 -text -out out/10_year_validity.req
diff --git a/net/http/http_server_properties_manager_unittest.cc b/net/http/http_server_properties_manager_unittest.cc
index 62dfecd..2d6145f 100644
--- a/net/http/http_server_properties_manager_unittest.cc
+++ b/net/http/http_server_properties_manager_unittest.cc
@@ -1304,7 +1304,7 @@
   base::Time expiration1;
   ASSERT_TRUE(base::Time::FromUTCString("2036-12-01 10:00:00", &expiration1));
   quic::QuicTransportVersionVector advertised_versions = {
-      quic::QUIC_VERSION_41, quic::QUIC_VERSION_35};
+      quic::QUIC_VERSION_44, quic::QUIC_VERSION_35};
   alternative_service_info_vector.push_back(
       AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
           quic_alternative_service1, expiration1, advertised_versions));
@@ -1352,7 +1352,7 @@
       "{\"quic_servers\":{\"https://mail.google.com:80\":{"
       "\"server_info\":\"quic_server_info1\"}},\"servers\":["
       "{\"https://www.google.com:80\":{\"alternative_service\":[{"
-      "\"advertised_versions\":[35,41],\"expiration\":\"13756212000000000\","
+      "\"advertised_versions\":[35,44],\"expiration\":\"13756212000000000\","
       "\"port\":443,\"protocol_str\":\"quic\"},{\"advertised_versions\":[],"
       "\"expiration\":\"13758804000000000\",\"host\":\"www.google.com\","
       "\"port\":1234,\"protocol_str\":\"h2\"}]}},"
@@ -1376,7 +1376,7 @@
       "{\"port\":443,\"protocol_str\":\"quic\"},"
       "{\"port\":123,\"protocol_str\":\"quic\","
       "\"expiration\":\"9223372036854775807\","
-      "\"advertised_versions\":[41,35]}]}");
+      "\"advertised_versions\":[44,35]}]}");
   ASSERT_TRUE(server_value);
   base::DictionaryValue* server_dict;
   ASSERT_TRUE(server_value->GetAsDictionary(&server_dict));
@@ -1414,7 +1414,7 @@
       alternative_service_info_vector[1].advertised_versions();
   EXPECT_EQ(2u, loaded_advertised_versions.size());
   EXPECT_EQ(quic::QUIC_VERSION_35, loaded_advertised_versions[0]);
-  EXPECT_EQ(quic::QUIC_VERSION_41, loaded_advertised_versions[1]);
+  EXPECT_EQ(quic::QUIC_VERSION_44, loaded_advertised_versions[1]);
 }
 
 TEST_P(HttpServerPropertiesManagerTest,
@@ -1424,7 +1424,7 @@
   // #1: Set alternate protocol.
   AlternativeServiceInfoVector alternative_service_info_vector;
   // Quic alternative service set with a single QUIC version:
-  // quic::QUIC_VERSION_41.
+  // quic::QUIC_VERSION_44.
   AlternativeService quic_alternative_service1(kProtoQUIC, "", 443);
   base::Time expiration1;
   ASSERT_TRUE(base::Time::FromUTCString("2036-12-01 10:00:00", &expiration1));
@@ -1472,7 +1472,7 @@
   AlternativeServiceInfoVector alternative_service_info_vector_2;
   // Quic alternative service set with two advertised QUIC versions.
   quic::QuicTransportVersionVector advertised_versions = {
-      quic::QUIC_VERSION_41, quic::QUIC_VERSION_35};
+      quic::QUIC_VERSION_44, quic::QUIC_VERSION_35};
   alternative_service_info_vector_2.push_back(
       AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
           quic_alternative_service1, expiration1, advertised_versions));
@@ -1490,7 +1490,7 @@
       "{\"quic_servers\":{\"https://mail.google.com:80\":"
       "{\"server_info\":\"quic_server_info1\"}},\"servers\":["
       "{\"https://www.google.com:80\":"
-      "{\"alternative_service\":[{\"advertised_versions\":[35,41],"
+      "{\"alternative_service\":[{\"advertised_versions\":[35,44],"
       "\"expiration\":\"13756212000000000\",\"port\":443,"
       "\"protocol_str\":\"quic\"}]}}],\"supports_quic\":"
       "{\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":5}";
@@ -1502,7 +1502,7 @@
   AlternativeServiceInfoVector alternative_service_info_vector_3;
   // A same set of QUIC versions but listed in a different order.
   quic::QuicTransportVersionVector advertised_versions_2 = {
-      quic::QUIC_VERSION_35, quic::QUIC_VERSION_41};
+      quic::QUIC_VERSION_35, quic::QUIC_VERSION_44};
   alternative_service_info_vector_3.push_back(
       AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
           quic_alternative_service1, expiration1, advertised_versions_2));
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc
index a5f1aa1..7496d26 100644
--- a/net/quic/quic_chromium_client_session.cc
+++ b/net/quic/quic_chromium_client_session.cc
@@ -754,7 +754,7 @@
       ignore_read_error_(false),
       headers_include_h2_stream_dependency_(
           headers_include_h2_stream_dependency &&
-          this->connection()->transport_version() > quic::QUIC_VERSION_42),
+          this->connection()->transport_version() >= quic::QUIC_VERSION_43),
       weak_factory_(this) {
   // Make sure connection migration and goaway on path degrading are not turned
   // on at the same time.
diff --git a/net/quic/quic_connection_logger.cc b/net/quic/quic_connection_logger.cc
index 38562884..71e1545c 100644
--- a/net/quic/quic_connection_logger.cc
+++ b/net/quic/quic_connection_logger.cc
@@ -94,13 +94,13 @@
 }
 
 std::unique_ptr<base::Value> NetLogQuicStreamFrameCallback(
-    const quic::QuicStreamFrame* frame,
+    const quic::QuicStreamFrame& frame,
     NetLogCaptureMode /* capture_mode */) {
   std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
-  dict->SetInteger("stream_id", frame->stream_id);
-  dict->SetBoolean("fin", frame->fin);
-  dict->SetString("offset", base::NumberToString(frame->offset));
-  dict->SetInteger("length", frame->data_length);
+  dict->SetInteger("stream_id", frame.stream_id);
+  dict->SetBoolean("fin", frame.fin);
+  dict->SetString("offset", base::NumberToString(frame.offset));
+  dict->SetInteger("length", frame.data_length);
   return std::move(dict);
 }
 
@@ -574,7 +574,7 @@
   if (!net_log_is_capturing_)
     return;
   net_log_.AddEvent(NetLogEventType::QUIC_SESSION_STREAM_FRAME_RECEIVED,
-                    base::Bind(&NetLogQuicStreamFrameCallback, &frame));
+                    base::Bind(&NetLogQuicStreamFrameCallback, frame));
 }
 
 void QuicConnectionLogger::OnAckFrame(const quic::QuicAckFrame& frame) {
diff --git a/net/quic/quic_flags_list.h b/net/quic/quic_flags_list.h
index 7a3c93e..2302d64 100644
--- a/net/quic/quic_flags_list.h
+++ b/net/quic/quic_flags_list.h
@@ -93,8 +93,6 @@
 // If true, enable QUIC v99.
 QUIC_FLAG(bool, FLAGS_quic_enable_version_99, false)
 
-QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_disable_version_41_2, true)
-
 // When true, set the initial congestion control window from connection options
 // in QuicSentPacketManager rather than TcpCubicSenderBytes.
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_unified_iw_options, false)
@@ -122,27 +120,10 @@
 // If true, enable QUIC v44.
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_44, true)
 
-// If true, QuicConnection::ProcessPacket will add the connection to write
-// blocked list if it is write blocked, and will not attempt to write before the
-// writer unblocks.
-QUIC_FLAG(bool,
-          FLAGS_quic_reloadable_flag_quic_add_to_blocked_list_if_writer_blocked,
-          true)
-
 // Only send an ack immediately when a previously missing packet is received if
 // an ack with a larger largest acked has already been sent.
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_ack_reordered_packets, true)
 
-// If true, QuicWriteBlockedList will use StaticStreamCollection to speed up
-// operations on static streams.
-QUIC_FLAG(
-    bool,
-    FLAGS_quic_reloadable_flag_quic_use_static_stream_collection_in_write_blocked_list,
-    true)
-
-// If true, disables QUIC v42.
-QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_disable_version_42, true)
-
 // Stop checking QuicUnackedPacketMap::HasUnackedRetransmittableFrames and
 // instead rely on the existing check that bytes_in_flight > 0
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_optimize_inflight_check, false)
@@ -220,3 +201,21 @@
 QUIC_FLAG(bool,
           FLAGS_quic_reloadable_flag_quic_fix_is_useful_for_retrans,
           false)
+
+// If true, QUIC connection will notify the debug visitor after a connectivity
+// probing is sent.
+QUIC_FLAG(
+    bool,
+    FLAGS_quic_reloadable_flag_quic_notify_debug_visitor_on_connectivity_probing_sent,
+    false)
+
+// If true, disable QUIC version 35.
+QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_disable_version_35, false)
+// If true, then QuicCryptoServerConfig::ProcessClientHelloAfterGetProof() will
+// use the async interface to KeyExchange::CalculateSharedKeys.
+QUIC_FLAG(bool, FLAGS_quic_restart_flag_quic_use_async_key_exchange, false)
+
+// If true, increase size of random bytes in IETF stateless reset packet.
+QUIC_FLAG(bool,
+          FLAGS_quic_reloadable_flag_quic_more_random_bytes_in_stateless_reset,
+          false)
diff --git a/net/quic/quic_http_stream.cc b/net/quic/quic_http_stream.cc
index 3feb6b8..6f9105e 100644
--- a/net/quic/quic_http_stream.cc
+++ b/net/quic/quic_http_stream.cc
@@ -84,10 +84,6 @@
       return HttpResponseInfo::CONNECTION_INFO_QUIC_35;
     case quic::QUIC_VERSION_39:
       return HttpResponseInfo::CONNECTION_INFO_QUIC_39;
-    case quic::QUIC_VERSION_41:
-      return HttpResponseInfo::CONNECTION_INFO_QUIC_41;
-    case quic::QUIC_VERSION_42:
-      return HttpResponseInfo::CONNECTION_INFO_QUIC_42;
     case quic::QUIC_VERSION_43:
       return HttpResponseInfo::CONNECTION_INFO_QUIC_43;
     case quic::QUIC_VERSION_44:
diff --git a/net/quic/quic_http_stream_test.cc b/net/quic/quic_http_stream_test.cc
index d19083d..d5f39cc 100644
--- a/net/quic/quic_http_stream_test.cc
+++ b/net/quic/quic_http_stream_test.cc
@@ -2215,7 +2215,7 @@
 
   quic::QuicPacketNumber client_packet_number = 2;
   if (client_headers_include_h2_stream_dependency_ &&
-      version_ > quic::QUIC_VERSION_42) {
+      version_ >= quic::QUIC_VERSION_43) {
     AddWrite(ConstructClientPriorityPacket(
         client_packet_number++, kIncludeVersion, promise_id_, 0,
         DEFAULT_PRIORITY, &header_stream_offset));
diff --git a/net/quic/quic_http_utils_test.cc b/net/quic/quic_http_utils_test.cc
index e16465e..d06a531 100644
--- a/net/quic/quic_http_utils_test.cc
+++ b/net/quic/quic_http_utils_test.cc
@@ -39,16 +39,16 @@
 
 TEST(QuicHttpUtilsTest, FilterSupportedAltSvcVersions) {
   quic::QuicTransportVersionVector supported_versions = {
-      quic::QUIC_VERSION_35, quic::QUIC_VERSION_39, quic::QUIC_VERSION_41};
+      quic::QUIC_VERSION_35, quic::QUIC_VERSION_39, quic::QUIC_VERSION_44};
 
-  std::vector<uint32_t> alt_svc_versions_google = {quic::QUIC_VERSION_41,
-                                                   quic::QUIC_VERSION_42};
+  std::vector<uint32_t> alt_svc_versions_google = {quic::QUIC_VERSION_44,
+                                                   quic::QUIC_VERSION_43};
   std::vector<uint32_t> alt_svc_versions_ietf = {
-      QuicVersionToQuicVersionLabel(quic::QUIC_VERSION_41),
-      QuicVersionToQuicVersionLabel(quic::QUIC_VERSION_42)};
+      QuicVersionToQuicVersionLabel(quic::QUIC_VERSION_44),
+      QuicVersionToQuicVersionLabel(quic::QUIC_VERSION_43)};
 
   quic::QuicTransportVersionVector supported_alt_svc_versions = {
-      quic::QUIC_VERSION_41};
+      quic::QUIC_VERSION_44};
   spdy::SpdyAltSvcWireFormat::AlternativeService altsvc;
 
   altsvc.protocol_id = "quic";
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index 3fc081b..b1336f6b 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -5678,7 +5678,7 @@
           false, GetRequestHeaders("GET", "https", "/pushed.jpg"),
           &server_header_offset, &server_maker_));
   if (client_headers_include_h2_stream_dependency_ &&
-      version_ > quic::QUIC_VERSION_42) {
+      version_ >= quic::QUIC_VERSION_43) {
     mock_quic_data.AddWrite(
         SYNCHRONOUS,
         ConstructClientPriorityPacket(client_packet_number++, false,
@@ -5766,7 +5766,7 @@
           false, GetRequestHeaders("GET", "https", "/pushed.jpg"),
           &server_header_offset, &server_maker_));
   if (client_headers_include_h2_stream_dependency_ &&
-      version_ > quic::QUIC_VERSION_42) {
+      version_ >= quic::QUIC_VERSION_43) {
     mock_quic_data.AddWrite(
         SYNCHRONOUS,
         ConstructClientPriorityPacket(client_packet_number++, false,
@@ -6000,7 +6000,7 @@
           &server_header_offset, &server_maker_));
 
   if (client_headers_include_h2_stream_dependency_ &&
-      version_ > quic::QUIC_VERSION_42) {
+      version_ >= quic::QUIC_VERSION_43) {
     mock_quic_data.AddWrite(
         SYNCHRONOUS,
         ConstructClientPriorityPacket(client_packet_number++, false,
@@ -6640,7 +6640,7 @@
           false, GetRequestHeaders("GET", "https", "/pushed.jpg"),
           &server_header_offset, &server_maker_));
   if (client_headers_include_h2_stream_dependency_ &&
-      version_ > quic::QUIC_VERSION_42) {
+      version_ >= quic::QUIC_VERSION_43) {
     mock_quic_data.AddWrite(
         SYNCHRONOUS,
         ConstructClientPriorityPacket(client_packet_number++, false,
@@ -7638,7 +7638,7 @@
 TEST_P(QuicNetworkTransactionTest, QuicServerPushUpdatesPriority) {
   // Only run this test if HTTP/2 stream dependency info is sent by client (sent
   // in HEADERS frames for requests and PRIORITY frames).
-  if (version_ <= quic::QUIC_VERSION_42 ||
+  if (version_ < quic::QUIC_VERSION_43 ||
       !client_headers_include_h2_stream_dependency_) {
     return;
   }
diff --git a/net/quic/quic_test_packet_maker.cc b/net/quic/quic_test_packet_maker.cc
index 248bd1dc..571b8728 100644
--- a/net/quic/quic_test_packet_maker.cc
+++ b/net/quic/quic_test_packet_maker.cc
@@ -43,7 +43,7 @@
       long_header_type_(quic::HANDSHAKE),
       client_headers_include_h2_stream_dependency_(
           client_headers_include_h2_stream_dependency &&
-          version > quic::QUIC_VERSION_42) {
+          version >= quic::QUIC_VERSION_43) {
   DCHECK(!(perspective_ == quic::Perspective::IS_SERVER &&
            client_headers_include_h2_stream_dependency_));
 }
@@ -119,7 +119,7 @@
   quic::QuicStreamFrame frame(
       quic::kCryptoStreamId, /*fin=*/false, /*offset=*/0,
       quic::QuicStringPiece(data.data(), data.length()));
-  frames.push_back(quic::QuicFrame(&frame));
+  frames.push_back(quic::QuicFrame(frame));
   DVLOG(1) << "Adding frame: " << frames.back();
   quic::QuicPaddingFrame padding;
   frames.push_back(quic::QuicFrame(padding));
@@ -261,7 +261,7 @@
   quic::QuicFrames frames;
   frames.push_back(quic::QuicFrame(&rst_frame));
   DVLOG(1) << "Adding frame: " << frames.back();
-  frames.push_back(quic::QuicFrame(&headers_frame));
+  frames.push_back(quic::QuicFrame(headers_frame));
   DVLOG(1) << "Adding frame: " << frames.back();
 
   InitializeHeader(num, include_version);
@@ -555,7 +555,7 @@
   InitializeHeader(packet_number, should_include_version);
   quic::QuicStreamFrame frame(stream_id, fin, offset, data);
   DVLOG(1) << "Adding frame: " << frame;
-  return MakePacket(header_, quic::QuicFrame(&frame));
+  return MakePacket(header_, quic::QuicFrame(frame));
 }
 
 std::unique_ptr<quic::QuicReceivedPacket>
@@ -568,19 +568,13 @@
     const std::vector<std::string>& data_writes) {
   InitializeHeader(packet_number, should_include_version);
   quic::QuicFrames data_frames;
-  // quic::QuicFrame takes a raw pointer. Use a std::vector here so we keep
-  // StreamFrames alive until MakeMultipleFramesPacket is done.
-  std::vector<std::unique_ptr<quic::QuicStreamFrame>> stream_frames;
   for (size_t i = 0; i < data_writes.size(); ++i) {
     bool is_fin = fin && (i == data_writes.size() - 1);
-    stream_frames.push_back(std::make_unique<quic::QuicStreamFrame>(
+    quic::QuicFrame quic_frame(quic::QuicStreamFrame(
         stream_id, is_fin, offset, quic::QuicStringPiece(data_writes[i])));
-    offset += data_writes[i].length();
-  }
-  for (const auto& stream_frame : stream_frames) {
-    quic::QuicFrame quic_frame(stream_frame.get());
     DVLOG(1) << "Adding frame: " << quic_frame;
     data_frames.push_back(quic_frame);
+    offset += data_writes[i].length();
   }
   return MakeMultipleFramesPacket(header_, data_frames);
 }
@@ -618,8 +612,8 @@
     DVLOG(1) << "Adding frame: " << frames.back();
   }
 
-  quic::QuicStreamFrame stream_frame(stream_id, fin, offset, data);
-  frames.push_back(quic::QuicFrame(&stream_frame));
+  frames.push_back(
+      quic::QuicFrame(quic::QuicStreamFrame(stream_id, fin, offset, data)));
 
   return MakeMultipleFramesPacket(header_, frames);
 }
@@ -650,7 +644,7 @@
   quic::QuicStreamFrame frame(
       quic::kHeadersStreamId, false, header_offset,
       quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
-  frames.push_back(quic::QuicFrame(&frame));
+  frames.push_back(quic::QuicFrame(frame));
   DVLOG(1) << "Adding frame: " << frames.back();
   if (header_stream_offset != nullptr) {
     *header_stream_offset += spdy_frame.size();
@@ -662,14 +656,11 @@
   std::vector<std::unique_ptr<quic::QuicStreamFrame>> stream_frames;
   for (size_t i = 0; i < data_writes.size(); ++i) {
     bool is_fin = fin && (i == data_writes.size() - 1);
-    stream_frames.push_back(std::make_unique<quic::QuicStreamFrame>(
+    quic::QuicFrame quic_frame(quic::QuicStreamFrame(
         stream_id, is_fin, offset, quic::QuicStringPiece(data_writes[i])));
-    offset += data_writes[i].length();
-  }
-  for (const auto& stream_frame : stream_frames) {
-    quic::QuicFrame quic_frame(stream_frame.get());
     DVLOG(1) << "Adding frame: " << quic_frame;
     frames.push_back(quic_frame);
+    offset += data_writes[i].length();
   }
   return MakeMultipleFramesPacket(header_, frames);
 }
@@ -734,13 +725,13 @@
         quic::kHeadersStreamId, false, *offset,
         quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
     *offset += spdy_frame.size();
-    return MakePacket(header_, quic::QuicFrame(&frame));
+    return MakePacket(header_, quic::QuicFrame(frame));
   } else {
     quic::QuicStreamFrame frame(
         quic::kHeadersStreamId, false, 0,
         quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
 
-    return MakePacket(header_, quic::QuicFrame(&frame));
+    return MakePacket(header_, quic::QuicFrame(frame));
   }
 }
 
@@ -774,7 +765,7 @@
   quic::QuicRstStreamFrame rst_frame(1, stream_id, error_code, bytes_written);
 
   quic::QuicFrames frames;
-  frames.push_back(quic::QuicFrame(&headers_frame));
+  frames.push_back(quic::QuicFrame(headers_frame));
   DVLOG(1) << "Adding frame: " << frames.back();
   frames.push_back(quic::QuicFrame(&rst_frame));
   DVLOG(1) << "Adding frame: " << frames.back();
@@ -848,12 +839,12 @@
         quic::kHeadersStreamId, false, *offset,
         quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
     *offset += spdy_frame.size();
-    return MakePacket(header_, quic::QuicFrame(&frame));
+    return MakePacket(header_, quic::QuicFrame(frame));
   } else {
     quic::QuicStreamFrame frame(
         quic::kHeadersStreamId, false, 0,
         quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
-    return MakePacket(header_, quic::QuicFrame(&frame));
+    return MakePacket(header_, quic::QuicFrame(frame));
   }
 }
 
@@ -874,7 +865,7 @@
       quic::kHeadersStreamId, false, *offset,
       quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
   *offset += spdy_frame.size();
-  return MakePacket(header_, quic::QuicFrame(&quic_frame));
+  return MakePacket(header_, quic::QuicFrame(quic_frame));
 }
 
 // If |offset| is provided, will use the value when creating the packet.
@@ -902,12 +893,12 @@
         quic::kHeadersStreamId, false, *offset,
         quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
     *offset += spdy_frame.size();
-    return MakePacket(header_, quic::QuicFrame(&frame));
+    return MakePacket(header_, quic::QuicFrame(frame));
   } else {
     quic::QuicStreamFrame frame(
         quic::kHeadersStreamId, false, 0,
         quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
-    return MakePacket(header_, quic::QuicFrame(&frame));
+    return MakePacket(header_, quic::QuicFrame(frame));
   }
 }
 
@@ -1043,12 +1034,12 @@
         quic::kHeadersStreamId, false, *offset,
         quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
     *offset += spdy_frame.size();
-    return MakePacket(header_, quic::QuicFrame(&quic_frame));
+    return MakePacket(header_, quic::QuicFrame(quic_frame));
   }
   quic::QuicStreamFrame quic_frame(
       quic::kHeadersStreamId, false, 0,
       quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
-  return MakePacket(header_, quic::QuicFrame(&quic_frame));
+  return MakePacket(header_, quic::QuicFrame(quic_frame));
 }
 
 std::unique_ptr<quic::QuicReceivedPacket>
@@ -1075,9 +1066,9 @@
   quic::QuicStreamFrame quic_frame(
       quic::kHeadersStreamId, false, header_offset,
       quic::QuicStringPiece(spdy_frame.data(), spdy_frame.size()));
-  DVLOG(1) << "Adding frame: " << quic::QuicFrame(&quic_frame);
+  DVLOG(1) << "Adding frame: " << quic::QuicFrame(quic_frame);
   InitializeHeader(packet_number, should_include_version);
-  return MakePacket(header_, quic::QuicFrame(&quic_frame));
+  return MakePacket(header_, quic::QuicFrame(quic_frame));
 }
 
 std::unique_ptr<quic::QuicReceivedPacket>
@@ -1115,9 +1106,7 @@
     offset = &header_offset;
   }
   // Keep SpdySerializedFrames alive until MakeMultipleFramesPacket is done.
-  // Keep StreamFrames alive until MakeMultipleFramesPacket is done.
   std::vector<std::unique_ptr<spdy::SpdySerializedFrame>> spdy_frames;
-  std::vector<std::unique_ptr<quic::QuicStreamFrame>> stream_frames;
   for (const Http2StreamDependency& info : priority_frames) {
     spdy::SpdyPriorityIR priority_frame(
         info.stream_id, info.parent_stream_id,
@@ -1127,12 +1116,12 @@
         spdy_request_framer_.SerializeFrame(priority_frame)));
 
     spdy::SpdySerializedFrame* spdy_frame = spdy_frames.back().get();
-    stream_frames.push_back(std::make_unique<quic::QuicStreamFrame>(
+    quic::QuicStreamFrame stream_frame(
         quic::kHeadersStreamId, false, *offset,
-        quic::QuicStringPiece(spdy_frame->data(), spdy_frame->size())));
+        quic::QuicStringPiece(spdy_frame->data(), spdy_frame->size()));
     *offset += spdy_frame->size();
 
-    frames.push_back(quic::QuicFrame(stream_frames.back().get()));
+    frames.push_back(quic::QuicFrame(stream_frame));
     DVLOG(1) << "Adding frame: " << frames.back();
     ;
   }
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc
index d86b9f0a..f0714c6c 100644
--- a/net/socket/socket_test_util.cc
+++ b/net/socket/socket_test_util.cc
@@ -252,8 +252,20 @@
 
 StaticSocketDataProvider::~StaticSocketDataProvider() = default;
 
+void StaticSocketDataProvider::Pause() {
+  paused_ = true;
+}
+
+void StaticSocketDataProvider::Resume() {
+  paused_ = false;
+}
+
 MockRead StaticSocketDataProvider::OnRead() {
-  CHECK(!helper_.AllReadDataConsumed());
+  if (AllReadDataConsumed()) {
+    const net::MockRead pending_read(net::SYNCHRONOUS, net::ERR_IO_PENDING);
+    return pending_read;
+  }
+
   return helper_.AdvanceRead();
 }
 
@@ -283,7 +295,7 @@
 }
 
 bool StaticSocketDataProvider::AllReadDataConsumed() const {
-  return helper_.AllReadDataConsumed();
+  return paused_ || helper_.AllReadDataConsumed();
 }
 
 bool StaticSocketDataProvider::AllWriteDataConsumed() const {
diff --git a/net/socket/socket_test_util.h b/net/socket/socket_test_util.h
index 231195c6..9f74cfd 100644
--- a/net/socket/socket_test_util.h
+++ b/net/socket/socket_test_util.h
@@ -332,6 +332,10 @@
                            base::span<const MockWrite> writes);
   ~StaticSocketDataProvider() override;
 
+  // Pause/resume reads from this provider.
+  void Pause();
+  void Resume();
+
   // From SocketDataProvider:
   MockRead OnRead() override;
   MockWriteResult OnWrite(const std::string& data) override;
@@ -348,6 +352,7 @@
   void Reset() override;
 
   StaticSocketDataHelper helper_;
+  bool paused_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(StaticSocketDataProvider);
 };
diff --git a/net/test/embedded_test_server/default_handlers.cc b/net/test/embedded_test_server/default_handlers.cc
index 3479f2c..176ca7b 100644
--- a/net/test/embedded_test_server/default_handlers.cc
+++ b/net/test/embedded_test_server/default_handlers.cc
@@ -140,6 +140,9 @@
 
 // /echoall?QUERY
 // Responds with the list of QUERY and the request headers.
+//
+// Alternative form:
+// /echoall/nocache?QUERY prevents caching of the response.
 std::unique_ptr<HttpResponse> HandleEchoAll(const HttpRequest& request) {
   std::unique_ptr<BasicHttpResponse> http_response(new BasicHttpResponse);
 
@@ -167,6 +170,13 @@
 
   http_response->set_content_type("text/html");
   http_response->set_content(body);
+
+  if (base::EndsWith(request.GetURL().path_piece(), "/nocache",
+                     base::CompareCase::SENSITIVE)) {
+    http_response->AddCustomHeader("Cache-Control",
+                                   "no-cache, no-store, must-revalidate");
+  }
+
   return std::move(http_response);
 }
 
diff --git a/net/third_party/quic/core/chlo_extractor_test.cc b/net/third_party/quic/core/chlo_extractor_test.cc
index 277f10d..a899dc2 100644
--- a/net/third_party/quic/core/chlo_extractor_test.cc
+++ b/net/third_party/quic/core/chlo_extractor_test.cc
@@ -54,7 +54,7 @@
     header_.packet_number = 1;
   }
 
-  void MakePacket(QuicStreamFrame* stream_frame) {
+  void MakePacket(const QuicStreamFrame& stream_frame) {
     QuicFrame frame(stream_frame);
     QuicFrames frames;
     frames.push_back(frame);
@@ -69,7 +69,6 @@
     ASSERT_NE(0u, encrypted_length);
     packet_ = QuicMakeUnique<QuicEncryptedPacket>(buffer_, encrypted_length);
     EXPECT_TRUE(packet_ != nullptr);
-    delete stream_frame;
   }
 
  protected:
@@ -89,8 +88,7 @@
   for (ParsedQuicVersion version : AllSupportedVersions()) {
     ParsedQuicVersionVector versions(SupportedVersions(version));
     header_.version = version;
-    MakePacket(
-        new QuicStreamFrame(kCryptoStreamId, false, 0, client_hello_str));
+    MakePacket(QuicStreamFrame(kCryptoStreamId, false, 0, client_hello_str));
     EXPECT_TRUE(ChloExtractor::Extract(*packet_, versions, {}, &delegate_))
         << ParsedQuicVersionToString(version);
     EXPECT_EQ(version.transport_version, delegate_.transport_version());
@@ -107,8 +105,7 @@
 
   QuicString client_hello_str(
       client_hello.GetSerialized(Perspective::IS_CLIENT).AsStringPiece());
-  MakePacket(
-      new QuicStreamFrame(kCryptoStreamId + 1, false, 0, client_hello_str));
+  MakePacket(QuicStreamFrame(kCryptoStreamId + 1, false, 0, client_hello_str));
   EXPECT_FALSE(
       ChloExtractor::Extract(*packet_, AllSupportedVersions(), {}, &delegate_));
 }
@@ -119,13 +116,13 @@
 
   QuicString client_hello_str(
       client_hello.GetSerialized(Perspective::IS_CLIENT).AsStringPiece());
-  MakePacket(new QuicStreamFrame(kCryptoStreamId, false, 1, client_hello_str));
+  MakePacket(QuicStreamFrame(kCryptoStreamId, false, 1, client_hello_str));
   EXPECT_FALSE(
       ChloExtractor::Extract(*packet_, AllSupportedVersions(), {}, &delegate_));
 }
 
 TEST_F(ChloExtractorTest, DoesNotFindInvalidChlo) {
-  MakePacket(new QuicStreamFrame(kCryptoStreamId, false, 0, "foo"));
+  MakePacket(QuicStreamFrame(kCryptoStreamId, false, 0, "foo"));
   EXPECT_FALSE(
       ChloExtractor::Extract(*packet_, AllSupportedVersions(), {}, &delegate_));
 }
diff --git a/net/third_party/quic/core/congestion_control/bbr_sender.cc b/net/third_party/quic/core/congestion_control/bbr_sender.cc
index 1b18fc7..90e5db9 100644
--- a/net/third_party/quic/core/congestion_control/bbr_sender.cc
+++ b/net/third_party/quic/core/congestion_control/bbr_sender.cc
@@ -81,13 +81,12 @@
                      const QuicUnackedPacketMap* unacked_packets,
                      QuicPacketCount initial_tcp_congestion_window,
                      QuicPacketCount max_tcp_congestion_window,
-                     QuicRandom* random,
-                     BandwidthSamplerInterface* sampler)
+                     QuicRandom* random)
     : rtt_stats_(rtt_stats),
       unacked_packets_(unacked_packets),
       random_(random),
       mode_(STARTUP),
-      sampler_(sampler),
+      sampler_(new BandwidthSampler()),
       round_trip_count_(0),
       last_sent_packet_(0),
       current_round_trip_end_(0),
diff --git a/net/third_party/quic/core/congestion_control/bbr_sender.h b/net/third_party/quic/core/congestion_control/bbr_sender.h
index 1411eb6..f91ad14 100644
--- a/net/third_party/quic/core/congestion_control/bbr_sender.h
+++ b/net/third_party/quic/core/congestion_control/bbr_sender.h
@@ -91,32 +91,13 @@
     QuicPacketNumber end_of_app_limited_phase;
   };
 
-  template <typename BandwidthSamplerT = BandwidthSampler>
-  static BbrSender* Create(const RttStats* rtt_stats,
-                           const QuicUnackedPacketMap* unacked_packets,
-                           QuicPacketCount initial_tcp_congestion_window,
-                           QuicPacketCount max_tcp_congestion_window,
-                           QuicRandom* random) {
-    struct SenderSamplerBundle : public BbrSender {
-      SenderSamplerBundle(const RttStats* rtt_stats,
-                          const QuicUnackedPacketMap* unacked_packets,
-                          QuicPacketCount initial_tcp_congestion_window,
-                          QuicPacketCount max_tcp_congestion_window,
-                          QuicRandom* random)
-          : BbrSender(rtt_stats,
-                      unacked_packets,
-                      initial_tcp_congestion_window,
-                      max_tcp_congestion_window,
-                      random,
-                      &sampler) {}
-      BandwidthSamplerT sampler;
-    };
-
-    return new SenderSamplerBundle(rtt_stats, unacked_packets,
-                                   initial_tcp_congestion_window,
-                                   max_tcp_congestion_window, random);
-  }
-
+  BbrSender(const RttStats* rtt_stats,
+            const QuicUnackedPacketMap* unacked_packets,
+            QuicPacketCount initial_tcp_congestion_window,
+            QuicPacketCount max_tcp_congestion_window,
+            QuicRandom* random);
+  BbrSender(const BbrSender&) = delete;
+  BbrSender& operator=(const BbrSender&) = delete;
   ~BbrSender() override;
 
   // Start implementation of SendAlgorithmInterface.
@@ -186,16 +167,6 @@
 
   DebugState ExportDebugState() const;
 
- protected:
-  BbrSender(const RttStats* rtt_stats,
-            const QuicUnackedPacketMap* unacked_packets,
-            QuicPacketCount initial_tcp_congestion_window,
-            QuicPacketCount max_tcp_congestion_window,
-            QuicRandom* random,
-            BandwidthSamplerInterface* sampler);
-  BbrSender(const BbrSender&) = delete;
-  BbrSender& operator=(const BbrSender&) = delete;
-
  private:
   typedef WindowedFilter<QuicBandwidth,
                          MaxFilter<QuicBandwidth>,
@@ -281,7 +252,7 @@
 
   // Bandwidth sampler provides BBR with the bandwidth measurements at
   // individual points.
-  BandwidthSamplerInterface* sampler_;  // Not owned.
+  std::unique_ptr<BandwidthSamplerInterface> sampler_;
 
   // The number of the round trips that have occurred during the connection.
   QuicRoundTripCount round_trip_count_;
diff --git a/net/third_party/quic/core/congestion_control/bbr_sender_test.cc b/net/third_party/quic/core/congestion_control/bbr_sender_test.cc
index 849378b..600a9db 100644
--- a/net/third_party/quic/core/congestion_control/bbr_sender_test.cc
+++ b/net/third_party/quic/core/congestion_control/bbr_sender_test.cc
@@ -126,7 +126,7 @@
     const RttStats* rtt_stats =
         endpoint->connection()->sent_packet_manager().GetRttStats();
     // Ownership of the sender will be overtaken by the endpoint.
-    BbrSender* sender = BbrSender::Create(
+    BbrSender* sender = new BbrSender(
         rtt_stats,
         QuicSentPacketManagerPeer::GetUnackedPacketMap(
             QuicConnectionPeer::GetSentPacketManager(endpoint->connection())),
@@ -330,7 +330,7 @@
 TEST_F(BbrSenderTest, SimpleTransferAckDecimation) {
   // Decrease the CWND gain so extra CWND is required with stretch acks.
   FLAGS_quic_bbr_cwnd_gain = 1.0;
-  sender_ = BbrSender::Create(
+  sender_ = new BbrSender(
       rtt_stats_,
       QuicSentPacketManagerPeer::GetUnackedPacketMap(
           QuicConnectionPeer::GetSentPacketManager(bbr_sender_.connection())),
diff --git a/net/third_party/quic/core/congestion_control/general_loss_algorithm_test.cc b/net/third_party/quic/core/congestion_control/general_loss_algorithm_test.cc
index 689ac174..91602a9 100644
--- a/net/third_party/quic/core/congestion_control/general_loss_algorithm_test.cc
+++ b/net/third_party/quic/core/congestion_control/general_loss_algorithm_test.cc
@@ -31,8 +31,8 @@
   ~GeneralLossAlgorithmTest() override {}
 
   void SendDataPacket(QuicPacketNumber packet_number) {
-    QuicStreamFrame* frame = new QuicStreamFrame();
-    frame->stream_id = kHeadersStreamId;
+    QuicStreamFrame frame;
+    frame.stream_id = kHeadersStreamId;
     SerializedPacket packet(packet_number, PACKET_1BYTE_PACKET_NUMBER, nullptr,
                             kDefaultLength, false, false);
     packet.retransmittable_frames.push_back(QuicFrame(frame));
diff --git a/net/third_party/quic/core/congestion_control/send_algorithm_interface.cc b/net/third_party/quic/core/congestion_control/send_algorithm_interface.cc
index a2027108..5e4b47154 100644
--- a/net/third_party/quic/core/congestion_control/send_algorithm_interface.cc
+++ b/net/third_party/quic/core/congestion_control/send_algorithm_interface.cc
@@ -29,9 +29,9 @@
   QuicPacketCount max_congestion_window = kDefaultMaxCongestionWindowPackets;
   switch (congestion_control_type) {
     case kBBR:
-      return BbrSender::Create(rtt_stats, unacked_packets,
-                               initial_congestion_window, max_congestion_window,
-                               random);
+      return new BbrSender(rtt_stats, unacked_packets,
+                           initial_congestion_window, max_congestion_window,
+                           random);
     case kPCC:
       if (GetQuicReloadableFlag(quic_enable_pcc3)) {
         return CreatePccSender(clock, rtt_stats, unacked_packets, random, stats,
diff --git a/net/third_party/quic/core/crypto/crypto_server_test.cc b/net/third_party/quic/core/crypto/crypto_server_test.cc
index e1c530e..0dd88b7 100644
--- a/net/third_party/quic/core/crypto/crypto_server_test.cc
+++ b/net/third_party/quic/core/crypto/crypto_server_test.cc
@@ -111,6 +111,7 @@
         config_(QuicCryptoServerConfig::TESTING,
                 rand_,
                 crypto_test_utils::ProofSourceForTesting(),
+                KeyExchangeSource::Default(),
                 TlsServerHandshaker::CreateSslCtx()),
         peer_(&config_),
         compressed_certs_cache_(
@@ -1006,9 +1007,11 @@
 
   QuicCryptoServerConfig a(QuicCryptoServerConfig::TESTING, &rand_a,
                            crypto_test_utils::ProofSourceForTesting(),
+                           KeyExchangeSource::Default(),
                            TlsServerHandshaker::CreateSslCtx());
   QuicCryptoServerConfig b(QuicCryptoServerConfig::TESTING, &rand_b,
                            crypto_test_utils::ProofSourceForTesting(),
+                           KeyExchangeSource::Default(),
                            TlsServerHandshaker::CreateSslCtx());
   std::unique_ptr<CryptoHandshakeMessage> scfg_a(
       a.AddDefaultConfig(&rand_a, &clock, options));
@@ -1029,10 +1032,12 @@
 
   QuicCryptoServerConfig a(QuicCryptoServerConfig::TESTING, &rand_a,
                            crypto_test_utils::ProofSourceForTesting(),
+                           KeyExchangeSource::Default(),
                            TlsServerHandshaker::CreateSslCtx());
   rand_b.ChangeValue();
   QuicCryptoServerConfig b(QuicCryptoServerConfig::TESTING, &rand_b,
                            crypto_test_utils::ProofSourceForTesting(),
+                           KeyExchangeSource::Default(),
                            TlsServerHandshaker::CreateSslCtx());
   std::unique_ptr<CryptoHandshakeMessage> scfg_a(
       a.AddDefaultConfig(&rand_a, &clock, options));
@@ -1053,6 +1058,7 @@
 
   QuicCryptoServerConfig a(QuicCryptoServerConfig::TESTING, &rand_a,
                            crypto_test_utils::ProofSourceForTesting(),
+                           KeyExchangeSource::Default(),
                            TlsServerHandshaker::CreateSslCtx());
   std::unique_ptr<CryptoHandshakeMessage> scfg(
       a.AddDefaultConfig(&rand_a, &clock, options));
diff --git a/net/third_party/quic/core/crypto/curve25519_key_exchange.cc b/net/third_party/quic/core/crypto/curve25519_key_exchange.cc
index 8d7b277..3f6c8360 100644
--- a/net/third_party/quic/core/crypto/curve25519_key_exchange.cc
+++ b/net/third_party/quic/core/crypto/curve25519_key_exchange.cc
@@ -87,6 +87,13 @@
   return true;
 }
 
+void Curve25519KeyExchange::CalculateSharedKey(
+    QuicStringPiece peer_public_value,
+    QuicString* shared_key,
+    std::unique_ptr<Callback> callback) const {
+  callback->Run(CalculateSharedKey(peer_public_value, shared_key));
+}
+
 QuicStringPiece Curve25519KeyExchange::public_value() const {
   return QuicStringPiece(reinterpret_cast<const char*>(public_key_),
                          sizeof(public_key_));
diff --git a/net/third_party/quic/core/crypto/curve25519_key_exchange.h b/net/third_party/quic/core/crypto/curve25519_key_exchange.h
index 3ddf7c2..be614300 100644
--- a/net/third_party/quic/core/crypto/curve25519_key_exchange.h
+++ b/net/third_party/quic/core/crypto/curve25519_key_exchange.h
@@ -36,6 +36,9 @@
   const Factory& GetFactory() const override;
   bool CalculateSharedKey(QuicStringPiece peer_public_value,
                           QuicString* shared_key) const override;
+  void CalculateSharedKey(QuicStringPiece peer_public_value,
+                          QuicString* shared_key,
+                          std::unique_ptr<Callback> callback) const override;
   QuicStringPiece public_value() const override;
 
  private:
diff --git a/net/third_party/quic/core/crypto/curve25519_key_exchange_test.cc b/net/third_party/quic/core/crypto/curve25519_key_exchange_test.cc
index 4df2a67..55072e80 100644
--- a/net/third_party/quic/core/crypto/curve25519_key_exchange_test.cc
+++ b/net/third_party/quic/core/crypto/curve25519_key_exchange_test.cc
@@ -7,13 +7,38 @@
 #include <memory>
 
 #include "net/third_party/quic/core/crypto/quic_random.h"
+#include "net/third_party/quic/platform/api/quic_ptr_util.h"
 #include "net/third_party/quic/platform/api/quic_string.h"
 #include "net/third_party/quic/platform/api/quic_test.h"
 
 namespace quic {
 namespace test {
 
-class Curve25519KeyExchangeTest : public QuicTest {};
+class Curve25519KeyExchangeTest : public QuicTest {
+ public:
+  // Holds the result of a key exchange callback.
+  class TestCallbackResult {
+   public:
+    void set_ok(bool ok) { ok_ = ok; }
+    bool ok() { return ok_; }
+
+   private:
+    bool ok_ = false;
+  };
+
+  // Key exchange callback which sets the result into the specificed
+  // TestCallbackResult.
+  class TestCallback : public KeyExchange::Callback {
+   public:
+    TestCallback(TestCallbackResult* result) : result_(result) {}
+    virtual ~TestCallback() = default;
+
+    void Run(bool ok) { result_->set_ok(ok); }
+
+   private:
+    TestCallbackResult* result_;
+  };
+};
 
 // SharedKey just tests that the basic key exchange identity holds: that both
 // parties end up with the same key.
@@ -39,5 +64,39 @@
   }
 }
 
+// SharedKeyAsync just tests that the basic asynchronouse key exchange identity
+// holds: that both parties end up with the same key.
+TEST_F(Curve25519KeyExchangeTest, SharedKeyAsync) {
+  QuicRandom* const rand = QuicRandom::GetInstance();
+
+  for (int i = 0; i < 5; i++) {
+    const QuicString alice_key(Curve25519KeyExchange::NewPrivateKey(rand));
+    const QuicString bob_key(Curve25519KeyExchange::NewPrivateKey(rand));
+
+    std::unique_ptr<Curve25519KeyExchange> alice(
+        Curve25519KeyExchange::New(alice_key));
+    std::unique_ptr<Curve25519KeyExchange> bob(
+        Curve25519KeyExchange::New(bob_key));
+
+    const QuicStringPiece alice_public(alice->public_value());
+    const QuicStringPiece bob_public(bob->public_value());
+
+    QuicString alice_shared, bob_shared;
+    TestCallbackResult alice_result;
+    ASSERT_FALSE(alice_result.ok());
+    alice->CalculateSharedKey(bob_public, &alice_shared,
+                              QuicMakeUnique<TestCallback>(&alice_result));
+    ASSERT_TRUE(alice_result.ok());
+    TestCallbackResult bob_result;
+    ASSERT_FALSE(bob_result.ok());
+    bob->CalculateSharedKey(alice_public, &bob_shared,
+                            QuicMakeUnique<TestCallback>(&bob_result));
+    ASSERT_TRUE(bob_result.ok());
+    ASSERT_EQ(alice_shared, bob_shared);
+    ASSERT_NE(0u, alice_shared.length());
+    ASSERT_NE(0u, bob_shared.length());
+  }
+}
+
 }  // namespace test
 }  // namespace quic
diff --git a/net/third_party/quic/core/crypto/key_exchange.h b/net/third_party/quic/core/crypto/key_exchange.h
index 65fe674..4af57bda 100644
--- a/net/third_party/quic/core/crypto/key_exchange.h
+++ b/net/third_party/quic/core/crypto/key_exchange.h
@@ -39,6 +39,25 @@
     Factory() = default;
   };
 
+  // Callback base class for receiving the results of an async call to
+  // CalculateSharedKeys.
+  class Callback {
+   public:
+    Callback() = default;
+    virtual ~Callback() = default;
+
+    // Invoked upon completion of CalculateSharedKeys.
+    //
+    // |ok| indicates whether the operation completed successfully.  If false,
+    // then the value of |shared_key| passed in to CalculateSharedKey is
+    // undefined.
+    virtual void Run(bool ok) = 0;
+
+   private:
+    Callback(const Callback&) = delete;
+    Callback& operator=(const Callback&) = delete;
+  };
+
   // Get a reference to the singleton Factory object for this KeyExchange type.
   virtual const Factory& GetFactory() const = 0;
 
@@ -48,6 +67,14 @@
   virtual bool CalculateSharedKey(QuicStringPiece peer_public_value,
                                   QuicString* shared_key) const = 0;
 
+  // CalculateSharedKey computes the shared key between the local private key
+  // (which is may not be locally known to a KeyExchange object) and a public
+  // value from the peer.
+  // Callers should expect that |callback| might be invoked synchronously.
+  virtual void CalculateSharedKey(QuicStringPiece peer_public_value,
+                                  QuicString* shared_key,
+                                  std::unique_ptr<Callback> callback) const = 0;
+
   // public_value returns the local public key which can be sent to a peer in
   // order to complete a key exchange. The returned QuicStringPiece is a
   // reference to a member of the KeyExchange and is only valid for as long as
diff --git a/net/third_party/quic/core/crypto/p256_key_exchange.cc b/net/third_party/quic/core/crypto/p256_key_exchange.cc
index 97cc2c4..f61f38d 100644
--- a/net/third_party/quic/core/crypto/p256_key_exchange.cc
+++ b/net/third_party/quic/core/crypto/p256_key_exchange.cc
@@ -128,6 +128,13 @@
   return true;
 }
 
+void P256KeyExchange::CalculateSharedKey(
+    QuicStringPiece peer_public_value,
+    QuicString* shared_key,
+    std::unique_ptr<Callback> callback) const {
+  callback->Run(CalculateSharedKey(peer_public_value, shared_key));
+}
+
 QuicStringPiece P256KeyExchange::public_value() const {
   return QuicStringPiece(reinterpret_cast<const char*>(public_key_),
                          sizeof(public_key_));
diff --git a/net/third_party/quic/core/crypto/p256_key_exchange.h b/net/third_party/quic/core/crypto/p256_key_exchange.h
index f30dddcb..ba3a0e3 100644
--- a/net/third_party/quic/core/crypto/p256_key_exchange.h
+++ b/net/third_party/quic/core/crypto/p256_key_exchange.h
@@ -35,6 +35,9 @@
   const Factory& GetFactory() const override;
   bool CalculateSharedKey(QuicStringPiece peer_public_value,
                           QuicString* shared_key) const override;
+  void CalculateSharedKey(QuicStringPiece peer_public_value,
+                          QuicString* shared_key,
+                          std::unique_ptr<Callback> callback) const override;
   QuicStringPiece public_value() const override;
 
  private:
diff --git a/net/third_party/quic/core/crypto/p256_key_exchange_test.cc b/net/third_party/quic/core/crypto/p256_key_exchange_test.cc
index 6d7b1cc..97fb1a7b 100644
--- a/net/third_party/quic/core/crypto/p256_key_exchange_test.cc
+++ b/net/third_party/quic/core/crypto/p256_key_exchange_test.cc
@@ -6,16 +6,41 @@
 
 #include <memory>
 
+#include "net/third_party/quic/platform/api/quic_ptr_util.h"
 #include "net/third_party/quic/platform/api/quic_string.h"
 #include "net/third_party/quic/platform/api/quic_test.h"
 
 namespace quic {
 namespace test {
 
-class P256KeyExchangeTest : public QuicTest {};
+class P256KeyExchangeTest : public QuicTest {
+ public:
+  // Holds the result of a key exchange callback.
+  class TestCallbackResult {
+   public:
+    void set_ok(bool ok) { ok_ = ok; }
+    bool ok() { return ok_; }
 
-// SharedKey just tests that the basic key exchange identity holds: that both
-// parties end up with the same key.
+   private:
+    bool ok_ = false;
+  };
+
+  // Key exchange callback which sets the result into the specificed
+  // TestCallbackResult.
+  class TestCallback : public KeyExchange::Callback {
+   public:
+    TestCallback(TestCallbackResult* result) : result_(result) {}
+    virtual ~TestCallback() = default;
+
+    void Run(bool ok) { result_->set_ok(ok); }
+
+   private:
+    TestCallbackResult* result_;
+  };
+};
+
+// SharedKeyAsync just tests that the basic asynchronouse key exchange identity
+// holds: that both parties end up with the same key.
 TEST_F(P256KeyExchangeTest, SharedKey) {
   for (int i = 0; i < 5; i++) {
     QuicString alice_private(P256KeyExchange::NewPrivateKey());
@@ -41,5 +66,42 @@
   }
 }
 
+// SharedKey just tests that the basic key exchange identity holds: that both
+// parties end up with the same key.
+TEST_F(P256KeyExchangeTest, AsyncSharedKey) {
+  for (int i = 0; i < 5; i++) {
+    QuicString alice_private(P256KeyExchange::NewPrivateKey());
+    QuicString bob_private(P256KeyExchange::NewPrivateKey());
+
+    ASSERT_FALSE(alice_private.empty());
+    ASSERT_FALSE(bob_private.empty());
+    ASSERT_NE(alice_private, bob_private);
+
+    std::unique_ptr<P256KeyExchange> alice(P256KeyExchange::New(alice_private));
+    std::unique_ptr<P256KeyExchange> bob(P256KeyExchange::New(bob_private));
+
+    ASSERT_TRUE(alice != nullptr);
+    ASSERT_TRUE(bob != nullptr);
+
+    const QuicStringPiece alice_public(alice->public_value());
+    const QuicStringPiece bob_public(bob->public_value());
+
+    QuicString alice_shared, bob_shared;
+    TestCallbackResult alice_result;
+    ASSERT_FALSE(alice_result.ok());
+    alice->CalculateSharedKey(bob_public, &alice_shared,
+                              QuicMakeUnique<TestCallback>(&alice_result));
+    ASSERT_TRUE(alice_result.ok());
+    TestCallbackResult bob_result;
+    ASSERT_FALSE(bob_result.ok());
+    bob->CalculateSharedKey(alice_public, &bob_shared,
+                            QuicMakeUnique<TestCallback>(&bob_result));
+    ASSERT_TRUE(bob_result.ok());
+    ASSERT_EQ(alice_shared, bob_shared);
+    ASSERT_NE(0u, alice_shared.length());
+    ASSERT_NE(0u, bob_shared.length());
+  }
+}
+
 }  // namespace test
 }  // namespace quic
diff --git a/net/third_party/quic/core/crypto/quic_crypto_server_config.cc b/net/third_party/quic/core/crypto/quic_crypto_server_config.cc
index 07c9f4f4..e37494a 100644
--- a/net/third_party/quic/core/crypto/quic_crypto_server_config.cc
+++ b/net/third_party/quic/core/crypto/quic_crypto_server_config.cc
@@ -36,6 +36,7 @@
 #include "net/third_party/quic/platform/api/quic_clock.h"
 #include "net/third_party/quic/platform/api/quic_endian.h"
 #include "net/third_party/quic/platform/api/quic_fallthrough.h"
+#include "net/third_party/quic/platform/api/quic_flag_utils.h"
 #include "net/third_party/quic/platform/api/quic_flags.h"
 #include "net/third_party/quic/platform/api/quic_hostname_utils.h"
 #include "net/third_party/quic/platform/api/quic_logging.h"
@@ -67,8 +68,57 @@
   return QuicString(hkdf.server_write_key());
 }
 
+// Default source for creating KeyExchange objects.
+class DefaultKeyExchangeSource : public KeyExchangeSource {
+ public:
+  DefaultKeyExchangeSource() = default;
+  ~DefaultKeyExchangeSource() override = default;
+
+  std::unique_ptr<KeyExchange> Create(QuicTag type,
+                                      QuicStringPiece private_key) override {
+    if (private_key.empty()) {
+      QUIC_LOG(WARNING) << "Server config contains key exchange method without "
+                           "corresponding private key: "
+                        << type;
+      return nullptr;
+    }
+
+    std::unique_ptr<KeyExchange> ka;
+    switch (type) {
+      case kC255:
+        ka = Curve25519KeyExchange::New(private_key);
+        if (!ka) {
+          QUIC_LOG(WARNING) << "Server config contained an invalid curve25519"
+                               " private key.";
+          return nullptr;
+        }
+        break;
+      case kP256:
+        ka = P256KeyExchange::New(private_key);
+        if (!ka) {
+          QUIC_LOG(WARNING) << "Server config contained an invalid P-256"
+                               " private key.";
+          return nullptr;
+        }
+        break;
+      default:
+        QUIC_LOG(WARNING)
+            << "Server config message contains unknown key exchange "
+               "method: "
+            << type;
+        return nullptr;
+    }
+    return ka;
+  }
+};
+
 }  // namespace
 
+// static
+std::unique_ptr<KeyExchangeSource> KeyExchangeSource::Default() {
+  return QuicMakeUnique<DefaultKeyExchangeSource>();
+}
+
 class ValidateClientHelloHelper {
  public:
   // Note: stores a pointer to a unique_ptr, and std::moves the unique_ptr when
@@ -155,6 +205,7 @@
     QuicStringPiece source_address_token_secret,
     QuicRandom* server_nonce_entropy,
     std::unique_ptr<ProofSource> proof_source,
+    std::unique_ptr<KeyExchangeSource> key_exchange_source,
     bssl::UniquePtr<SSL_CTX> ssl_ctx)
     : replay_protection_(true),
       chlo_multiplier_(kMultiplier),
@@ -162,6 +213,7 @@
       primary_config_(nullptr),
       next_config_promotion_time_(QuicWallTime::Zero()),
       proof_source_(std::move(proof_source)),
+      key_exchange_source_(std::move(key_exchange_source)),
       ssl_ctx_(std::move(ssl_ctx)),
       source_address_token_future_secs_(3600),
       source_address_token_lifetime_secs_(86400),
@@ -612,6 +664,71 @@
   std::unique_ptr<ProcessClientHelloResultCallback> done_cb_;
 };
 
+class QuicCryptoServerConfig::ProcessClientHelloAfterGetProofCallback
+    : public KeyExchange::Callback {
+ public:
+  ProcessClientHelloAfterGetProofCallback(
+      const QuicCryptoServerConfig* config,
+      std::unique_ptr<ProofSource::Details> proof_source_details,
+      const KeyExchange::Factory& key_exchange_factory,
+      std::unique_ptr<CryptoHandshakeMessage> out,
+      QuicStringPiece public_value,
+      const ValidateClientHelloResultCallback::Result& validate_chlo_result,
+      QuicConnectionId connection_id,
+      const QuicSocketAddress& client_address,
+      const ParsedQuicVersionVector& supported_versions,
+      const QuicClock* clock,
+      QuicRandom* rand,
+      QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params,
+      QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
+      const QuicReferenceCountedPointer<Config>& requested_config,
+      const QuicReferenceCountedPointer<Config>& primary_config,
+      std::unique_ptr<ProcessClientHelloResultCallback> done_cb)
+      : config_(config),
+        proof_source_details_(std::move(proof_source_details)),
+        key_exchange_factory_(key_exchange_factory),
+        out_(std::move(out)),
+        public_value_(public_value),
+        validate_chlo_result_(validate_chlo_result),
+        connection_id_(connection_id),
+        client_address_(client_address),
+        supported_versions_(supported_versions),
+        clock_(clock),
+        rand_(rand),
+        params_(params),
+        signed_config_(signed_config),
+        requested_config_(requested_config),
+        primary_config_(primary_config),
+        done_cb_(std::move(done_cb)) {}
+
+  void Run(bool ok) override {
+    config_->ProcessClientHelloAfterCalculateSharedKeys(
+        !ok, std::move(proof_source_details_), key_exchange_factory_,
+        std::move(out_), public_value_, validate_chlo_result_, connection_id_,
+        client_address_, supported_versions_, clock_, rand_, params_,
+        signed_config_, requested_config_, primary_config_,
+        std::move(done_cb_));
+  }
+
+ private:
+  const QuicCryptoServerConfig* config_;
+  std::unique_ptr<ProofSource::Details> proof_source_details_;
+  const KeyExchange::Factory& key_exchange_factory_;
+  std::unique_ptr<CryptoHandshakeMessage> out_;
+  QuicStringPiece public_value_;
+  const ValidateClientHelloResultCallback::Result& validate_chlo_result_;
+  QuicConnectionId connection_id_;
+  const QuicSocketAddress& client_address_;
+  const ParsedQuicVersionVector& supported_versions_;
+  const QuicClock* clock_;
+  QuicRandom* rand_;
+  QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params_;
+  QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config_;
+  const QuicReferenceCountedPointer<Config>& requested_config_;
+  const QuicReferenceCountedPointer<Config>& primary_config_;
+  std::unique_ptr<ProcessClientHelloResultCallback> done_cb_;
+};
+
 void QuicCryptoServerConfig::ProcessClientHello(
     QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
         validate_chlo_result,
@@ -834,12 +951,59 @@
 
   const KeyExchange* key_exchange =
       requested_config->key_exchanges[key_exchange_index].get();
-  if (!key_exchange->CalculateSharedKey(public_value,
-                                        &params->initial_premaster_secret)) {
+  // TODO(rch): Would it be better to implement a move operator and just
+  // std::move(helper) instead of done_cb?
+  helper.DetachCallback();
+  if (GetQuicRestartFlag(quic_use_async_key_exchange)) {
+    QUIC_FLAG_COUNT(quic_restart_flag_quic_use_async_key_exchange);
+    auto cb = QuicMakeUnique<ProcessClientHelloAfterGetProofCallback>(
+        this, std::move(proof_source_details), key_exchange->GetFactory(),
+        std::move(out), public_value, validate_chlo_result, connection_id,
+        client_address, supported_versions, clock, rand, params, signed_config,
+        requested_config, primary_config, std::move(done_cb));
+    key_exchange->CalculateSharedKey(
+        public_value, &params->initial_premaster_secret, std::move(cb));
+  } else {
+    found_error = !key_exchange->CalculateSharedKey(
+        public_value, &params->initial_premaster_secret);
+    ProcessClientHelloAfterCalculateSharedKeys(
+        found_error, std::move(proof_source_details),
+        key_exchange->GetFactory(), std::move(out), public_value,
+        validate_chlo_result, connection_id, client_address, supported_versions,
+        clock, rand, params, signed_config, requested_config, primary_config,
+        std::move(done_cb));
+  }
+}
+
+void QuicCryptoServerConfig::ProcessClientHelloAfterCalculateSharedKeys(
+    bool found_error,
+    std::unique_ptr<ProofSource::Details> proof_source_details,
+    const KeyExchange::Factory& key_exchange_factory,
+    std::unique_ptr<CryptoHandshakeMessage> out,
+    QuicStringPiece public_value,
+    const ValidateClientHelloResultCallback::Result& validate_chlo_result,
+    QuicConnectionId connection_id,
+    const QuicSocketAddress& client_address,
+    const ParsedQuicVersionVector& supported_versions,
+    const QuicClock* clock,
+    QuicRandom* rand,
+    QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params,
+    QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
+    const QuicReferenceCountedPointer<Config>& requested_config,
+    const QuicReferenceCountedPointer<Config>& primary_config,
+    std::unique_ptr<ProcessClientHelloResultCallback> done_cb) const {
+  ProcessClientHelloHelper helper(&done_cb);
+
+  if (found_error) {
     helper.Fail(QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER, "Invalid public value");
     return;
   }
 
+  const CryptoHandshakeMessage& client_hello =
+      validate_chlo_result.client_hello;
+  const ClientHelloInfo& info = validate_chlo_result.info;
+  auto out_diversification_nonce = QuicMakeUnique<DiversificationNonce>();
+
   if (!info.sni.empty()) {
     std::unique_ptr<char[]> sni_tmp(new char[info.sni.length() + 1]);
     memcpy(sni_tmp.get(), info.sni.data(), info.sni.length());
@@ -948,11 +1112,11 @@
   if (ephemeral_key_source_) {
     params->forward_secure_premaster_secret =
         ephemeral_key_source_->CalculateForwardSecureKey(
-            key_exchange->GetFactory(), rand, clock->ApproximateNow(),
-            public_value, &forward_secure_public_value);
+            key_exchange_factory, rand, clock->ApproximateNow(), public_value,
+            &forward_secure_public_value);
   } else {
     std::unique_ptr<KeyExchange> forward_secure_key_exchange =
-        key_exchange->GetFactory().Create(rand);
+        key_exchange_factory.Create(rand);
     forward_secure_public_value =
         QuicString(forward_secure_key_exchange->public_value());
     if (!forward_secure_key_exchange->CalculateSharedKey(
@@ -1664,39 +1828,11 @@
       }
     }
 
-    if (private_key.empty()) {
-      QUIC_LOG(WARNING) << "Server config contains key exchange method without "
-                           "corresponding private key: "
-                        << tag;
+    std::unique_ptr<KeyExchange> ka =
+        key_exchange_source_->Create(tag, private_key);
+    if (!ka) {
       return nullptr;
     }
-
-    std::unique_ptr<KeyExchange> ka;
-    switch (tag) {
-      case kC255:
-        ka = Curve25519KeyExchange::New(private_key);
-        if (!ka.get()) {
-          QUIC_LOG(WARNING) << "Server config contained an invalid curve25519"
-                               " private key.";
-          return nullptr;
-        }
-        break;
-      case kP256:
-        ka = P256KeyExchange::New(private_key);
-        if (!ka.get()) {
-          QUIC_LOG(WARNING) << "Server config contained an invalid P-256"
-                               " private key.";
-          return nullptr;
-        }
-        break;
-      default:
-        QUIC_LOG(WARNING)
-            << "Server config message contains unknown key exchange "
-               "method: "
-            << tag;
-        return nullptr;
-    }
-
     for (const auto& key_exchange : config->key_exchanges) {
       if (key_exchange->GetFactory().tag() == tag) {
         QUIC_LOG(WARNING) << "Duplicate key exchange in config: " << tag;
diff --git a/net/third_party/quic/core/crypto/quic_crypto_server_config.h b/net/third_party/quic/core/crypto/quic_crypto_server_config.h
index eebadec..8983368 100644
--- a/net/third_party/quic/core/crypto/quic_crypto_server_config.h
+++ b/net/third_party/quic/core/crypto/quic_crypto_server_config.h
@@ -16,6 +16,7 @@
 #include "net/third_party/quic/core/crypto/crypto_handshake_message.h"
 #include "net/third_party/quic/core/crypto/crypto_protocol.h"
 #include "net/third_party/quic/core/crypto/crypto_secret_boxer.h"
+#include "net/third_party/quic/core/crypto/key_exchange.h"
 #include "net/third_party/quic/core/crypto/proof_source.h"
 #include "net/third_party/quic/core/crypto/quic_compressed_certs_cache.h"
 #include "net/third_party/quic/core/crypto/quic_crypto_proof.h"
@@ -34,7 +35,6 @@
 
 class CryptoHandshakeMessage;
 class EphemeralKeySource;
-class KeyExchange;
 class ProofSource;
 class QuicClock;
 class QuicRandom;
@@ -154,6 +154,20 @@
                                 CryptoHandshakeMessage* out) const = 0;
 };
 
+// Factory for creating KeyExchange objects.
+class QUIC_EXPORT_PRIVATE KeyExchangeSource {
+ public:
+  virtual ~KeyExchangeSource() = default;
+
+  // Returns the default KeyExchangeSource.
+  static std::unique_ptr<KeyExchangeSource> Default();
+
+  // Create a new KeyExchange of the specified type using the specified
+  // private key.
+  virtual std::unique_ptr<KeyExchange> Create(QuicTag type,
+                                              QuicStringPiece private_key) = 0;
+};
+
 // QuicCryptoServerConfig contains the crypto configuration of a QUIC server.
 // Unlike a client, a QUIC server can have multiple configurations active in
 // order to support clients resuming with a previous configuration.
@@ -201,6 +215,7 @@
   QuicCryptoServerConfig(QuicStringPiece source_address_token_secret,
                          QuicRandom* server_nonce_entropy,
                          std::unique_ptr<ProofSource> proof_source,
+                         std::unique_ptr<KeyExchangeSource> key_exchange_source,
                          bssl::UniquePtr<SSL_CTX> ssl_ctx);
   QuicCryptoServerConfig(const QuicCryptoServerConfig&) = delete;
   QuicCryptoServerConfig& operator=(const QuicCryptoServerConfig&) = delete;
@@ -557,6 +572,30 @@
       const QuicReferenceCountedPointer<Config>& primary_config,
       std::unique_ptr<ProcessClientHelloResultCallback> done_cb) const;
 
+  // Callback class for bridging between ProcessClientHelloAfterGetProof and
+  // ProcessClientHelloAfterCalculateSharedKeys.
+  class ProcessClientHelloAfterGetProofCallback;
+  friend class ProcessClientHelloAfterGetProofCallback;
+
+  // Portion of ProcessClientHello which executes after CalculateSharedKeys.
+  void ProcessClientHelloAfterCalculateSharedKeys(
+      bool found_error,
+      std::unique_ptr<ProofSource::Details> proof_source_details,
+      const KeyExchange::Factory& key_exchange_factory,
+      std::unique_ptr<CryptoHandshakeMessage> out,
+      QuicStringPiece public_value,
+      const ValidateClientHelloResultCallback::Result& validate_chlo_result,
+      QuicConnectionId connection_id,
+      const QuicSocketAddress& client_address,
+      const ParsedQuicVersionVector& supported_versions,
+      const QuicClock* clock,
+      QuicRandom* rand,
+      QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params,
+      QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
+      const QuicReferenceCountedPointer<Config>& requested_config,
+      const QuicReferenceCountedPointer<Config>& primary_config,
+      std::unique_ptr<ProcessClientHelloResultCallback> done_cb) const;
+
   // BuildRejection sets |out| to be a REJ message in reply to |client_hello|.
   void BuildRejection(
       QuicTransportVersion version,
@@ -755,6 +794,10 @@
   // signatures.
   std::unique_ptr<ProofSource> proof_source_;
 
+  // key_exchange_source_ contains an object that can provide key exchange
+  // objects.
+  std::unique_ptr<KeyExchangeSource> key_exchange_source_;
+
   // ssl_ctx_ contains the server configuration for doing TLS handshakes.
   bssl::UniquePtr<SSL_CTX> ssl_ctx_;
 
diff --git a/net/third_party/quic/core/crypto/quic_crypto_server_config_test.cc b/net/third_party/quic/core/crypto/quic_crypto_server_config_test.cc
index c7739b8..8f1ea9ee 100644
--- a/net/third_party/quic/core/crypto/quic_crypto_server_config_test.cc
+++ b/net/third_party/quic/core/crypto/quic_crypto_server_config_test.cc
@@ -32,6 +32,7 @@
   QuicRandom* rand = QuicRandom::GetInstance();
   QuicCryptoServerConfig server(QuicCryptoServerConfig::TESTING, rand,
                                 crypto_test_utils::ProofSourceForTesting(),
+                                KeyExchangeSource::Default(),
                                 TlsServerHandshaker::CreateSslCtx());
   MockClock clock;
 
@@ -53,6 +54,7 @@
   QuicRandom* rand = QuicRandom::GetInstance();
   QuicCryptoServerConfig server(QuicCryptoServerConfig::TESTING, rand,
                                 crypto_test_utils::ProofSourceForTesting(),
+                                KeyExchangeSource::Default(),
                                 TlsServerHandshaker::CreateSslCtx());
   QuicCryptoServerConfigPeer peer(&server);
 
@@ -73,6 +75,7 @@
   QuicRandom* rand = QuicRandom::GetInstance();
   QuicCryptoServerConfig server(QuicCryptoServerConfig::TESTING, rand,
                                 crypto_test_utils::ProofSourceForTesting(),
+                                KeyExchangeSource::Default(),
                                 TlsServerHandshaker::CreateSslCtx());
   QuicCryptoServerConfigPeer peer(&server);
 
@@ -103,6 +106,7 @@
   QuicRandom* rand = QuicRandom::GetInstance();
   QuicCryptoServerConfig server(QuicCryptoServerConfig::TESTING, rand,
                                 crypto_test_utils::ProofSourceForTesting(),
+                                KeyExchangeSource::Default(),
                                 TlsServerHandshaker::CreateSslCtx());
   QuicCryptoServerConfigPeer peer(&server);
 
@@ -147,6 +151,7 @@
         server_(QuicCryptoServerConfig::TESTING,
                 rand_,
                 crypto_test_utils::ProofSourceForTesting(),
+                KeyExchangeSource::Default(),
                 TlsServerHandshaker::CreateSslCtx()),
         peer_(&server_) {
     // Advance the clock to some non-zero time.
@@ -288,6 +293,7 @@
         config_(QuicCryptoServerConfig::TESTING,
                 rand_,
                 crypto_test_utils::ProofSourceForTesting(),
+                KeyExchangeSource::Default(),
                 TlsServerHandshaker::CreateSslCtx()),
         test_peer_(&config_) {}
 
diff --git a/net/third_party/quic/core/frames/quic_frame.cc b/net/third_party/quic/core/frames/quic_frame.cc
index 1da0cb4..650e864 100644
--- a/net/third_party/quic/core/frames/quic_frame.cc
+++ b/net/third_party/quic/core/frames/quic_frame.cc
@@ -16,7 +16,7 @@
 QuicFrame::QuicFrame(QuicPaddingFrame padding_frame)
     : type(PADDING_FRAME), padding_frame(padding_frame) {}
 
-QuicFrame::QuicFrame(QuicStreamFrame* stream_frame)
+QuicFrame::QuicFrame(QuicStreamFrame stream_frame)
     : type(STREAM_FRAME), stream_frame(stream_frame) {}
 
 QuicFrame::QuicFrame(QuicAckFrame* frame) : type(ACK_FRAME), ack_frame(frame) {}
@@ -81,9 +81,7 @@
     case PING_FRAME:
     case MAX_STREAM_ID_FRAME:
     case STREAM_ID_BLOCKED_FRAME:
-      break;
     case STREAM_FRAME:
-      delete frame->stream_frame;
       break;
     case ACK_FRAME:
       delete frame->ack_frame;
@@ -130,11 +128,10 @@
 void RemoveFramesForStream(QuicFrames* frames, QuicStreamId stream_id) {
   QuicFrames::iterator it = frames->begin();
   while (it != frames->end()) {
-    if (it->type != STREAM_FRAME || it->stream_frame->stream_id != stream_id) {
+    if (it->type != STREAM_FRAME || it->stream_frame.stream_id != stream_id) {
       ++it;
       continue;
     }
-    delete it->stream_frame;
     it = frames->erase(it);
   }
 }
@@ -258,7 +255,7 @@
       break;
     }
     case STREAM_FRAME: {
-      os << "type { STREAM_FRAME } " << *(frame.stream_frame);
+      os << "type { STREAM_FRAME } " << frame.stream_frame;
       break;
     }
     case ACK_FRAME: {
diff --git a/net/third_party/quic/core/frames/quic_frame.h b/net/third_party/quic/core/frames/quic_frame.h
index d19b615..e214974 100644
--- a/net/third_party/quic/core/frames/quic_frame.h
+++ b/net/third_party/quic/core/frames/quic_frame.h
@@ -33,11 +33,14 @@
 
 struct QUIC_EXPORT_PRIVATE QuicFrame {
   QuicFrame();
+  // Please keep the constructors in the same order as the union below.
   explicit QuicFrame(QuicPaddingFrame padding_frame);
   explicit QuicFrame(QuicMtuDiscoveryFrame frame);
   explicit QuicFrame(QuicPingFrame frame);
+  explicit QuicFrame(QuicMaxStreamIdFrame frame);
+  explicit QuicFrame(QuicStreamIdBlockedFrame frame);
+  explicit QuicFrame(QuicStreamFrame stream_frame);
 
-  explicit QuicFrame(QuicStreamFrame* stream_frame);
   explicit QuicFrame(QuicAckFrame* frame);
   explicit QuicFrame(QuicRstStreamFrame* frame);
   explicit QuicFrame(QuicConnectionCloseFrame* frame);
@@ -47,8 +50,6 @@
   explicit QuicFrame(QuicBlockedFrame* frame);
   explicit QuicFrame(QuicApplicationCloseFrame* frame);
   explicit QuicFrame(QuicNewConnectionIdFrame* frame);
-  explicit QuicFrame(QuicMaxStreamIdFrame frame);
-  explicit QuicFrame(QuicStreamIdBlockedFrame frame);
   explicit QuicFrame(QuicPathResponseFrame* frame);
   explicit QuicFrame(QuicPathChallengeFrame* frame);
   explicit QuicFrame(QuicStopSendingFrame* frame);
@@ -57,16 +58,21 @@
                                                       const QuicFrame& frame);
 
   QuicFrameType type;
+
+  // TODO(wub): These frames can also be inlined without increasing the size of
+  // QuicFrame: QuicStopWaitingFrame, QuicRstStreamFrame, QuicWindowUpdateFrame,
+  // QuicBlockedFrame, QuicPathResponseFrame, QuicPathChallengeFrame and
+  // QuicStopSendingFrame.
   union {
-    // Frames smaller than a pointer are inline.
+    // Inlined frames.
     QuicPaddingFrame padding_frame;
     QuicMtuDiscoveryFrame mtu_discovery_frame;
     QuicPingFrame ping_frame;
     QuicMaxStreamIdFrame max_stream_id_frame;
     QuicStreamIdBlockedFrame stream_id_blocked_frame;
+    QuicStreamFrame stream_frame;
 
-    // Frames larger than a pointer.
-    QuicStreamFrame* stream_frame;
+    // Out of line frames.
     QuicAckFrame* ack_frame;
     QuicStopWaitingFrame* stop_waiting_frame;
     QuicRstStreamFrame* rst_stream_frame;
@@ -81,9 +87,9 @@
     QuicStopSendingFrame* stop_sending_frame;
   };
 };
-// QuicFrameType consumes 8 bytes with padding.
-static_assert(sizeof(QuicFrame) <= 16,
-              "Frames larger than 8 bytes should be referenced by pointer.");
+// In QuicFrame, QuicFrameType consumes 8 bytes with padding.
+static_assert(sizeof(QuicFrame) <= 32,
+              "Frames larger than 24 bytes should be referenced by pointer.");
 
 typedef std::vector<QuicFrame> QuicFrames;
 
diff --git a/net/third_party/quic/core/frames/quic_stream_frame.cc b/net/third_party/quic/core/frames/quic_stream_frame.cc
index f0abc17..926fa75 100644
--- a/net/third_party/quic/core/frames/quic_stream_frame.cc
+++ b/net/third_party/quic/core/frames/quic_stream_frame.cc
@@ -33,8 +33,6 @@
       data_buffer(data_buffer),
       offset(offset) {}
 
-QuicStreamFrame::~QuicStreamFrame() {}
-
 std::ostream& operator<<(std::ostream& os,
                          const QuicStreamFrame& stream_frame) {
   os << "{ stream_id: " << stream_frame.stream_id
diff --git a/net/third_party/quic/core/frames/quic_stream_frame.h b/net/third_party/quic/core/frames/quic_stream_frame.h
index cf6d981..078f317 100644
--- a/net/third_party/quic/core/frames/quic_stream_frame.h
+++ b/net/third_party/quic/core/frames/quic_stream_frame.h
@@ -25,7 +25,6 @@
                   bool fin,
                   QuicStreamOffset offset,
                   QuicPacketLength data_length);
-  ~QuicStreamFrame();
 
   friend QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
                                                       const QuicStreamFrame& s);
@@ -33,7 +32,7 @@
   QuicStreamId stream_id;
   bool fin;
   QuicPacketLength data_length;
-  const char* data_buffer;
+  const char* data_buffer;  // Not owned.
   QuicStreamOffset offset;  // Location of this data in the stream.
 
   QuicStreamFrame(QuicStreamId stream_id,
@@ -41,8 +40,6 @@
                   QuicStreamOffset offset,
                   const char* data_buffer,
                   QuicPacketLength data_length);
-  QuicStreamFrame(const QuicStreamFrame&) = delete;
-  QuicStreamFrame& operator=(const QuicStreamFrame&) = delete;
 };
 static_assert(sizeof(QuicStreamFrame) <= 64,
               "Keep the QuicStreamFrame size to a cacheline.");
diff --git a/net/third_party/quic/core/http/end_to_end_test.cc b/net/third_party/quic/core/http/end_to_end_test.cc
index 030d12d..b73cb288 100644
--- a/net/third_party/quic/core/http/end_to_end_test.cc
+++ b/net/third_party/quic/core/http/end_to_end_test.cc
@@ -124,6 +124,9 @@
 // Constructs various test permutations.
 std::vector<TestParams> GetTestParams(bool use_tls_handshake,
                                       bool test_stateless_rejects) {
+  // Version 99 is default disabled, but should be exercised in EndToEnd tests
+  QuicFlagSaver flags;
+  FLAGS_quic_enable_version_99 = true;
   // Divide the versions into buckets in which the intra-frame format
   // is compatible. When clients encounter QUIC version negotiation
   // they simply retransmit all packets using the new version's
@@ -274,6 +277,8 @@
         chlo_multiplier_(0),
         stream_factory_(nullptr),
         support_server_push_(false) {
+    // Version 99 is default disabled, but should be exercised in EndToEnd tests
+    FLAGS_quic_enable_version_99 = true;
     FLAGS_quic_supports_tls_handshake = true;
     client_supported_versions_ = GetParam().client_supported_versions;
     server_supported_versions_ = GetParam().server_supported_versions;
@@ -2860,7 +2865,7 @@
   // sending requests for them.
   EXPECT_EQ(1u, client_->num_requests());
   // Including response to original request, 12 responses in total were
-  // recieved.
+  // received.
   EXPECT_EQ(12u, client_->num_responses());
 }
 
@@ -3195,6 +3200,22 @@
   EXPECT_EQ(QUIC_NO_ERROR, client_->connection_error());
 }
 
+TEST_P(EndToEndTest, ResetStreamOnTtlExpires) {
+  ASSERT_TRUE(Initialize());
+  EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
+  SetPacketLossPercentage(30);
+
+  QuicSpdyClientStream* stream = client_->GetOrCreateStream();
+  // Set a TTL which expires immediately.
+  stream->MaybeSetTtl(QuicTime::Delta::FromMicroseconds(1));
+
+  // 1 MB body.
+  QuicString body(1024 * 1024, 'a');
+  stream->WriteOrBufferBody(body, true, nullptr);
+  client_->WaitForResponse();
+  EXPECT_EQ(QUIC_STREAM_TTL_EXPIRED, client_->stream_error());
+}
+
 class EndToEndPacketReorderingTest : public EndToEndTest {
  public:
   void CreateClientWithWriter() override {
diff --git a/net/third_party/quic/core/http/quic_headers_stream_test.cc b/net/third_party/quic/core/http/quic_headers_stream_test.cc
index 441403e..0dcd5166 100644
--- a/net/third_party/quic/core/http/quic_headers_stream_test.cc
+++ b/net/third_party/quic/core/http/quic_headers_stream_test.cc
@@ -483,7 +483,7 @@
       SpdyPriorityIR priority_frame(stream_id, parent_stream_id, weight, true);
       SpdySerializedFrame frame(framer_->SerializeFrame(priority_frame));
       parent_stream_id = stream_id;
-      if (transport_version() <= QUIC_VERSION_42) {
+      if (transport_version() <= QUIC_VERSION_39) {
         EXPECT_CALL(*connection_,
                     CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA,
                                     "SPDY PRIORITY frame received.", _))
diff --git a/net/third_party/quic/core/http/quic_server_session_base_test.cc b/net/third_party/quic/core/http/quic_server_session_base_test.cc
index 59be3322..868719e 100644
--- a/net/third_party/quic/core/http/quic_server_session_base_test.cc
+++ b/net/third_party/quic/core/http/quic_server_session_base_test.cc
@@ -109,6 +109,7 @@
       : crypto_config_(QuicCryptoServerConfig::TESTING,
                        QuicRandom::GetInstance(),
                        std::move(proof_source),
+                       KeyExchangeSource::Default(),
                        TlsServerHandshaker::CreateSslCtx()),
         compressed_certs_cache_(
             QuicCompressedCertsCache::kQuicCompressedCertsCacheSize) {
diff --git a/net/third_party/quic/core/http/quic_spdy_session.cc b/net/third_party/quic/core/http/quic_spdy_session.cc
index da1fdbd..2f1898ac 100644
--- a/net/third_party/quic/core/http/quic_spdy_session.cc
+++ b/net/third_party/quic/core/http/quic_spdy_session.cc
@@ -235,7 +235,7 @@
                   SpdyStreamId parent_id,
                   int weight,
                   bool exclusive) override {
-    if (session_->connection()->transport_version() <= QUIC_VERSION_42) {
+    if (session_->connection()->transport_version() <= QUIC_VERSION_39) {
       CloseConnection("SPDY PRIORITY frame received.",
                       QUIC_INVALID_HEADERS_STREAM_DATA);
       return;
@@ -446,7 +446,7 @@
                                       QuicStreamId parent_stream_id,
                                       int weight,
                                       bool exclusive) {
-  if (connection()->transport_version() <= QUIC_VERSION_42) {
+  if (connection()->transport_version() <= QUIC_VERSION_39) {
     return 0;
   }
   SpdyPriorityIR priority_frame(id, parent_stream_id, weight, exclusive);
diff --git a/net/third_party/quic/core/http/quic_spdy_session_test.cc b/net/third_party/quic/core/http/quic_spdy_session_test.cc
index a21991c..4baafcf 100644
--- a/net/third_party/quic/core/http/quic_spdy_session_test.cc
+++ b/net/third_party/quic/core/http/quic_spdy_session_test.cc
@@ -1415,7 +1415,7 @@
 
   QuicStreamSendBuffer& send_buffer =
       QuicStreamPeer::SendBuffer(headers_stream);
-  if (transport_version() > QUIC_VERSION_42) {
+  if (transport_version() > QUIC_VERSION_39) {
     ASSERT_EQ(1u, send_buffer.size());
 
     SpdyPriorityIR priority_frame(
@@ -1470,9 +1470,9 @@
   EXPECT_CALL(*crypto_stream, HasPendingRetransmission())
       .WillOnce(Return(true));
   EXPECT_CALL(*stream2, HasPendingRetransmission()).WillOnce(Return(true));
-  session_.OnFrameLost(QuicFrame(&frame3));
-  session_.OnFrameLost(QuicFrame(&frame1));
-  session_.OnFrameLost(QuicFrame(&frame2));
+  session_.OnFrameLost(QuicFrame(frame3));
+  session_.OnFrameLost(QuicFrame(frame1));
+  session_.OnFrameLost(QuicFrame(frame2));
   EXPECT_TRUE(session_.WillingAndAbleToWrite());
 
   // Mark streams 2 and 4 write blocked.
@@ -1527,9 +1527,9 @@
   EXPECT_CALL(*stream6, HasPendingRetransmission()).WillOnce(Return(true));
   EXPECT_CALL(*stream4, HasPendingRetransmission()).WillOnce(Return(true));
   EXPECT_CALL(*stream2, HasPendingRetransmission()).WillOnce(Return(true));
-  session_.OnFrameLost(QuicFrame(&frame3));
-  session_.OnFrameLost(QuicFrame(&frame2));
-  session_.OnFrameLost(QuicFrame(&frame1));
+  session_.OnFrameLost(QuicFrame(frame3));
+  session_.OnFrameLost(QuicFrame(frame2));
+  session_.OnFrameLost(QuicFrame(frame1));
 
   session_.MarkConnectionLevelWriteBlocked(stream2->id());
   session_.MarkConnectionLevelWriteBlocked(stream4->id());
@@ -1570,10 +1570,10 @@
   QuicStreamFrame frame3(stream6->id(), false, 0, 9);
   QuicWindowUpdateFrame window_update(1, stream2->id(), 9);
   QuicFrames frames;
-  frames.push_back(QuicFrame(&frame1));
+  frames.push_back(QuicFrame(frame1));
   frames.push_back(QuicFrame(&window_update));
-  frames.push_back(QuicFrame(&frame2));
-  frames.push_back(QuicFrame(&frame3));
+  frames.push_back(QuicFrame(frame2));
+  frames.push_back(QuicFrame(frame3));
   EXPECT_FALSE(session_.WillingAndAbleToWrite());
 
   EXPECT_CALL(*stream2, RetransmitStreamData(_, _, _)).WillOnce(Return(true));
diff --git a/net/third_party/quic/core/http/quic_spdy_stream_test.cc b/net/third_party/quic/core/http/quic_spdy_stream_test.cc
index ad7c5f71..211e6b3 100644
--- a/net/third_party/quic/core/http/quic_spdy_stream_test.cc
+++ b/net/third_party/quic/core/http/quic_spdy_stream_test.cc
@@ -1015,16 +1015,16 @@
 
   EXPECT_CALL(*ack_listener1, OnPacketAcked(7, _));
   EXPECT_TRUE(
-      session_->OnFrameAcked(QuicFrame(&frame1), QuicTime::Delta::Zero()));
+      session_->OnFrameAcked(QuicFrame(frame1), QuicTime::Delta::Zero()));
   EXPECT_CALL(*ack_listener1, OnPacketAcked(5, _));
   EXPECT_TRUE(
-      session_->OnFrameAcked(QuicFrame(&frame2), QuicTime::Delta::Zero()));
+      session_->OnFrameAcked(QuicFrame(frame2), QuicTime::Delta::Zero()));
   EXPECT_CALL(*ack_listener2, OnPacketAcked(7, _));
   EXPECT_TRUE(
-      session_->OnFrameAcked(QuicFrame(&frame3), QuicTime::Delta::Zero()));
+      session_->OnFrameAcked(QuicFrame(frame3), QuicTime::Delta::Zero()));
   EXPECT_CALL(*ack_listener2, OnPacketAcked(5, _));
   EXPECT_TRUE(
-      session_->OnFrameAcked(QuicFrame(&frame4), QuicTime::Delta::Zero()));
+      session_->OnFrameAcked(QuicFrame(frame4), QuicTime::Delta::Zero()));
 }
 
 TEST_P(QuicSpdyStreamTest, StreamBecomesZombieWithWriteThatCloses) {
diff --git a/net/third_party/quic/core/quic_connection.cc b/net/third_party/quic/core/quic_connection.cc
index 43e7ef47..9f9e79e 100644
--- a/net/third_party/quic/core/quic_connection.cc
+++ b/net/third_party/quic/core/quic_connection.cc
@@ -324,12 +324,12 @@
       processing_ack_frame_(false),
       supports_release_time_(writer->SupportsReleaseTime()),
       release_time_into_future_(QuicTime::Delta::Zero()),
-      add_to_blocked_list_if_writer_blocked_(
-          GetQuicReloadableFlag(quic_add_to_blocked_list_if_writer_blocked)),
       ack_reordered_packets_(GetQuicReloadableFlag(quic_ack_reordered_packets)),
       retransmissions_app_limited_(
           GetQuicReloadableFlag(quic_retransmissions_app_limited)),
-      donot_retransmit_old_window_updates_(false) {
+      donot_retransmit_old_window_updates_(false),
+      notify_debug_visitor_on_connectivity_probing_sent_(GetQuicReloadableFlag(
+          quic_notify_debug_visitor_on_connectivity_probing_sent)) {
   if (ack_mode_ == ACK_DECIMATION) {
     QUIC_FLAG_COUNT(quic_reloadable_flag_quic_enable_ack_decimation);
   }
@@ -1419,12 +1419,7 @@
     return false;
   }
 
-  if (add_to_blocked_list_if_writer_blocked_) {
-    QUIC_FLAG_COUNT_N(
-        quic_reloadable_flag_quic_add_to_blocked_list_if_writer_blocked, 2, 2);
-    visitor_->OnWriteBlocked();
-  }
-
+  visitor_->OnWriteBlocked();
   return true;
 }
 
@@ -1436,9 +1431,7 @@
   // If the writer is blocked, don't attempt to send packets now or in the send
   // alarm. When the writer unblocks, OnCanWrite() will be called for this
   // connection to send.
-  if (add_to_blocked_list_if_writer_blocked_ && HandleWriteBlocked()) {
-    QUIC_FLAG_COUNT_N(
-        quic_reloadable_flag_quic_add_to_blocked_list_if_writer_blocked, 1, 2);
+  if (HandleWriteBlocked()) {
     return;
   }
 
@@ -1454,15 +1447,8 @@
 void QuicConnection::SendVersionNegotiationPacket() {
   pending_version_negotiation_packet_ = true;
 
-  if (add_to_blocked_list_if_writer_blocked_) {
-    if (HandleWriteBlocked()) {
-      return;
-    }
-  } else {
-    if (writer_->IsWriteBlocked()) {
-      visitor_->OnWriteBlocked();
-      return;
-    }
+  if (HandleWriteBlocked()) {
+    return;
   }
 
   QUIC_DLOG(INFO) << ENDPOINT << "Sending version negotiation packet: {"
@@ -1965,15 +1951,8 @@
     return true;
   }
 
-  if (add_to_blocked_list_if_writer_blocked_) {
-    if (HandleWriteBlocked()) {
-      return false;
-    }
-  } else {
-    if (writer_->IsWriteBlocked()) {
-      visitor_->OnWriteBlocked();
-      return false;
-    }
+  if (HandleWriteBlocked()) {
+    return false;
   }
 
   // Allow acks to be sent immediately.
@@ -2044,15 +2023,8 @@
         new QuicEncryptedPacket(buffer_copy, encrypted_length, true));
     // This assures we won't try to write *forced* packets when blocked.
     // Return true to stop processing.
-    if (add_to_blocked_list_if_writer_blocked_) {
-      if (HandleWriteBlocked()) {
-        return true;
-      }
-    } else {
-      if (writer_->IsWriteBlocked()) {
-        visitor_->OnWriteBlocked();
-        return true;
-      }
+    if (HandleWriteBlocked()) {
+      return true;
     }
   }
 
@@ -2846,7 +2818,7 @@
     }
     if (save_crypto_packets_as_termination_packets_ &&
         frame.type == STREAM_FRAME &&
-        frame.stream_frame->stream_id == kCryptoStreamId) {
+        frame.stream_frame.stream_id == kCryptoStreamId) {
       return true;
     }
   }
@@ -2939,6 +2911,15 @@
     return false;
   }
 
+  if (notify_debug_visitor_on_connectivity_probing_sent_ &&
+      debug_visitor_ != nullptr) {
+    QUIC_FLAG_COUNT(
+        quic_reloadable_flag_quic_notify_debug_visitor_on_connectivity_probing_sent);  // NOLINT
+    debug_visitor_->OnPacketSent(
+        *probing_packet, probing_packet->original_packet_number,
+        probing_packet->transmission_type, packet_send_time);
+  }
+
   // Call OnPacketSent regardless of the write result.
   sent_packet_manager_.OnPacketSent(
       probing_packet.get(), probing_packet->original_packet_number,
@@ -3156,7 +3137,7 @@
   // Only enable session decides what to write code path for version 42+,
   // because it needs the receiver to allow receiving overlapping stream data.
   const bool enable_session_decides_what_to_write =
-      transport_version() > QUIC_VERSION_41;
+      transport_version() > QUIC_VERSION_39;
   sent_packet_manager_.SetSessionDecideWhatToWrite(
       enable_session_decides_what_to_write);
   packet_generator_.SetCanSetTransmissionType(
diff --git a/net/third_party/quic/core/quic_connection.h b/net/third_party/quic/core/quic_connection.h
index 01d3966..9fffeffe 100644
--- a/net/third_party/quic/core/quic_connection.h
+++ b/net/third_party/quic/core/quic_connection.h
@@ -858,7 +858,7 @@
 
   typedef std::list<SerializedPacket> QueuedPacketList;
 
-  enum PacketContent {
+  enum PacketContent : uint8_t {
     NO_FRAMES_RECEIVED,
     FIRST_FRAME_IS_PING,
     SECOND_FRAME_IS_PADDING,
@@ -1298,10 +1298,6 @@
   // Time this connection can release packets into the future.
   QuicTime::Delta release_time_into_future_;
 
-  // Latched value of
-  // gfe2_reloadable_flag_quic_add_to_blocked_list_if_writer_blocked.
-  const bool add_to_blocked_list_if_writer_blocked_;
-
   // Latched value of quic_reloadable_flag_quic_ack_reordered_packets.
   const bool ack_reordered_packets_;
 
@@ -1311,6 +1307,10 @@
   // Latched value of
   // quic_reloadable_flag_quic_donot_retransmit_old_window_update.
   bool donot_retransmit_old_window_updates_;
+
+  // Latched value of
+  // quic_reloadable_flag_quic_notify_debug_visitor_on_connectivity_probing_sent
+  const bool notify_debug_visitor_on_connectivity_probing_sent_;
 };
 
 }  // namespace quic
diff --git a/net/third_party/quic/core/quic_connection_test.cc b/net/third_party/quic/core/quic_connection_test.cc
index bc97cf1..311ae00 100644
--- a/net/third_party/quic/core/quic_connection_test.cc
+++ b/net/third_party/quic/core/quic_connection_test.cc
@@ -546,7 +546,7 @@
         has_ack, has_pending_frames);
     if (retransmittable == HAS_RETRANSMITTABLE_DATA) {
       serialized_packet.retransmittable_frames.push_back(
-          QuicFrame(new QuicStreamFrame()));
+          QuicFrame(QuicStreamFrame()));
     }
     OnSerializedPacket(&serialized_packet);
   }
@@ -1100,7 +1100,7 @@
     header.packet_number = number;
 
     QuicFrames frames;
-    frames.push_back(QuicFrame(&frame1_));
+    frames.push_back(QuicFrame(frame1_));
     if (has_stop_waiting) {
       frames.push_back(QuicFrame(&stop_waiting_));
     }
@@ -1262,14 +1262,14 @@
 
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_));
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   // Cause change in self_address.
   QuicIpAddress host;
   host.FromString("1.1.1.1");
   QuicSocketAddress self_address(host, 123);
   EXPECT_CALL(visitor_, OnStreamFrame(_));
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), self_address,
                                   kPeerAddress);
   EXPECT_TRUE(connection_.connected());
 }
@@ -1285,7 +1285,7 @@
 
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_));
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   // Cause change in self_address.
   QuicIpAddress host;
@@ -1293,7 +1293,7 @@
   QuicSocketAddress self_address(host, 123);
   EXPECT_CALL(visitor_, AllowSelfAddressChange()).WillOnce(Return(false));
   EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_ERROR_MIGRATING_ADDRESS, _, _));
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), self_address,
                                   kPeerAddress);
   EXPECT_FALSE(connection_.connected());
 }
@@ -1312,18 +1312,18 @@
   QuicIpAddress host;
   host.FromString("1.1.1.1");
   QuicSocketAddress self_address1(host, 443);
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address1,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), self_address1,
                                   kPeerAddress);
   // Cause self_address change to mapped Ipv4 address.
   QuicIpAddress host2;
   host2.FromString(
       QuicStrCat("::ffff:", connection_.self_address().host().ToString()));
   QuicSocketAddress self_address2(host2, connection_.self_address().port());
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address2,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), self_address2,
                                   kPeerAddress);
   EXPECT_TRUE(connection_.connected());
   // self_address change back to Ipv4 address.
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address1,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), self_address1,
                                   kPeerAddress);
   EXPECT_TRUE(connection_.connected());
 }
@@ -1346,7 +1346,7 @@
   const QuicSocketAddress kNewPeerAddress =
       QuicSocketAddress(QuicIpAddress::Loopback6(),
                         /*port=*/23456);
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kNewPeerAddress);
   EXPECT_EQ(kNewPeerAddress, connection_.peer_address());
   EXPECT_EQ(kNewPeerAddress, connection_.effective_peer_address());
@@ -1355,7 +1355,7 @@
   QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 4);
   // This is an old packet, do not migrate.
   EXPECT_CALL(visitor_, OnConnectionMigration(PORT_CHANGE)).Times(0);
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kNewPeerAddress, connection_.peer_address());
   EXPECT_EQ(kNewPeerAddress, connection_.effective_peer_address());
@@ -1377,7 +1377,7 @@
 
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kPeerAddress, connection_.effective_peer_address());
@@ -1387,7 +1387,7 @@
   const QuicSocketAddress kNewPeerAddress =
       QuicSocketAddress(QuicIpAddress::Loopback6(), /*port=*/23456);
   EXPECT_CALL(visitor_, OnConnectionMigration(PORT_CHANGE)).Times(1);
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kNewPeerAddress);
   EXPECT_EQ(kNewPeerAddress, connection_.peer_address());
   EXPECT_EQ(kNewPeerAddress, connection_.effective_peer_address());
@@ -1411,7 +1411,7 @@
 
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kEffectivePeerAddress, connection_.effective_peer_address());
@@ -1422,7 +1422,7 @@
       QuicSocketAddress(QuicIpAddress::Loopback6(), /*port=*/54321);
   connection_.ReturnEffectivePeerAddressForNextPacket(kNewEffectivePeerAddress);
   EXPECT_CALL(visitor_, OnConnectionMigration(PORT_CHANGE)).Times(1);
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kNewEffectivePeerAddress, connection_.effective_peer_address());
@@ -1452,7 +1452,7 @@
   connection_.ReturnEffectivePeerAddressForNextPacket(
       kNewerEffectivePeerAddress);
   EXPECT_CALL(visitor_, OnConnectionMigration(PORT_CHANGE)).Times(1);
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kFinalPeerAddress);
   EXPECT_EQ(kFinalPeerAddress, connection_.peer_address());
   EXPECT_EQ(kNewerEffectivePeerAddress, connection_.effective_peer_address());
@@ -1467,7 +1467,7 @@
       kNewestEffectivePeerAddress);
   EXPECT_CALL(visitor_, OnConnectionMigration(IPV6_TO_IPV4_CHANGE)).Times(1);
   EXPECT_CALL(*send_algorithm_, OnConnectionMigration()).Times(1);
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kFinalPeerAddress);
   EXPECT_EQ(kFinalPeerAddress, connection_.peer_address());
   EXPECT_EQ(kNewestEffectivePeerAddress, connection_.effective_peer_address());
@@ -1491,7 +1491,7 @@
 
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kPeerAddress, connection_.effective_peer_address());
@@ -1584,7 +1584,7 @@
 
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kPeerAddress, connection_.effective_peer_address());
@@ -1614,7 +1614,7 @@
   // Process another packet with the old peer address on server side will not
   // start peer migration.
   EXPECT_CALL(visitor_, OnConnectionMigration(PORT_CHANGE)).Times(0);
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kPeerAddress, connection_.effective_peer_address());
@@ -1637,7 +1637,7 @@
   QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 5);
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kPeerAddress, connection_.effective_peer_address());
@@ -1685,7 +1685,7 @@
 
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kPeerAddress, connection_.effective_peer_address());
@@ -1713,7 +1713,7 @@
   // side will start peer migration.
   EXPECT_CALL(visitor_, OnConnectionMigration(PORT_CHANGE)).Times(1);
 
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kNewPeerAddress);
   EXPECT_EQ(kNewPeerAddress, connection_.peer_address());
   EXPECT_EQ(kNewPeerAddress, connection_.effective_peer_address());
@@ -1734,7 +1734,7 @@
 
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kPeerAddress, connection_.effective_peer_address());
@@ -1773,7 +1773,7 @@
 
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kPeerAddress, connection_.effective_peer_address());
@@ -1815,7 +1815,7 @@
 
   QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
   EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kPeerAddress);
   EXPECT_EQ(kPeerAddress, connection_.peer_address());
   EXPECT_EQ(kPeerAddress, connection_.effective_peer_address());
@@ -1825,7 +1825,7 @@
   const QuicSocketAddress kNewPeerAddress =
       QuicSocketAddress(QuicIpAddress::Loopback6(), /*port=*/23456);
   EXPECT_CALL(visitor_, OnConnectionMigration(PORT_CHANGE)).Times(0);
-  ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
+  ProcessFramePacketWithAddresses(QuicFrame(stream_frame), kSelfAddress,
                                   kNewPeerAddress);
   EXPECT_EQ(kNewPeerAddress, connection_.peer_address());
   EXPECT_EQ(kNewPeerAddress, connection_.effective_peer_address());
@@ -1858,7 +1858,7 @@
 
   QuicFrames frames;
   QuicPaddingFrame padding;
-  frames.push_back(QuicFrame(&frame1_));
+  frames.push_back(QuicFrame(frame1_));
   frames.push_back(QuicFrame(padding));
   std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
   char buffer[kMaxPacketSize];
@@ -1891,7 +1891,7 @@
 
   QuicFrames frames;
   QuicPaddingFrame padding;
-  frames.push_back(QuicFrame(&frame1_));
+  frames.push_back(QuicFrame(frame1_));
   frames.push_back(QuicFrame(padding));
   std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
   char buffer[kMaxPacketSize];
@@ -3138,12 +3138,7 @@
       QuicReceivedPacket(buffer, encrypted_length, clock_.Now(), false));
 
   EXPECT_TRUE(writer_->IsWriteBlocked());
-  if (GetQuicReloadableFlag(quic_add_to_blocked_list_if_writer_blocked)) {
-    EXPECT_FALSE(connection_.GetSendAlarm()->IsSet());
-  } else {
-    EXPECT_EQ(GetParam().ack_response == AckResponse::kDefer,
-              connection_.GetSendAlarm()->IsSet());
-  }
+  EXPECT_FALSE(connection_.GetSendAlarm()->IsSet());
 }
 
 TEST_P(QuicConnectionTest, AddToWriteBlockedListIfWriterBlockedWhenProcessing) {
@@ -3156,11 +3151,7 @@
   // Process an ACK, make sure the connection calls visitor_->OnWriteBlocked().
   QuicAckFrame ack1 = InitAckFrame(1);
   EXPECT_CALL(*send_algorithm_, OnCongestionEvent(_, _, _, _, _));
-  if (GetQuicReloadableFlag(quic_add_to_blocked_list_if_writer_blocked)) {
-    EXPECT_CALL(visitor_, OnWriteBlocked()).Times(1);
-  } else {
-    EXPECT_CALL(visitor_, OnWriteBlocked()).Times(0);
-  }
+  EXPECT_CALL(visitor_, OnWriteBlocked()).Times(1);
   ProcessAckPacket(1, &ack1);
 }
 
@@ -5791,7 +5782,7 @@
   header.packet_number = 12;
 
   QuicFrames frames;
-  frames.push_back(QuicFrame(&frame1_));
+  frames.push_back(QuicFrame(frame1_));
   std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
   char buffer[kMaxPacketSize];
   size_t encrypted_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet,
@@ -5837,7 +5828,7 @@
   header.packet_number = 12;
 
   QuicFrames frames;
-  frames.push_back(QuicFrame(&frame1_));
+  frames.push_back(QuicFrame(frame1_));
   std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
   char buffer[kMaxPacketSize];
   size_t encrypted_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet,
@@ -5890,7 +5881,7 @@
   header.packet_number = 12;
 
   QuicFrames frames;
-  frames.push_back(QuicFrame(&frame1_));
+  frames.push_back(QuicFrame(frame1_));
   std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
   char buffer[kMaxPacketSize];
   size_t encryped_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet,
@@ -5935,7 +5926,7 @@
   header.packet_number = 12;
   header.version_flag = false;
   QuicFrames frames;
-  frames.push_back(QuicFrame(&frame1_));
+  frames.push_back(QuicFrame(frame1_));
   std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
   char buffer[kMaxPacketSize];
   size_t encrypted_length = peer_framer_.EncryptPayload(
@@ -6037,7 +6028,7 @@
   qccf.error_code = QUIC_PEER_GOING_AWAY;
 
   QuicFrames frames;
-  frames.push_back(QuicFrame(&frame1_));
+  frames.push_back(QuicFrame(frame1_));
   frames.push_back(QuicFrame(&qccf));
   std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
   EXPECT_TRUE(nullptr != packet);
@@ -6111,6 +6102,23 @@
   EXPECT_EQ(1u, writer_->packets_write_attempts());
 }
 
+TEST_P(QuicConnectionTest, OnPacketSentDebugVisitor) {
+  MockQuicConnectionDebugVisitor debug_visitor;
+  connection_.set_debug_visitor(&debug_visitor);
+
+  EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _)).Times(1);
+  connection_.SendStreamDataWithString(1, "foo", 0, NO_FIN);
+
+  if (GetQuicReloadableFlag(
+          quic_notify_debug_visitor_on_connectivity_probing_sent)) {
+    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _)).Times(1);
+  } else {
+    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _)).Times(0);
+  }
+  connection_.SendConnectivityProbingPacket(writer_.get(),
+                                            connection_.peer_address());
+}
+
 TEST_P(QuicConnectionTest, OnPacketHeaderDebugVisitor) {
   QuicPacketHeader header;
   header.packet_number = 1;
@@ -6599,7 +6607,7 @@
 
   EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_MAYBE_CORRUPTED_MEMORY, _,
                                            ConnectionCloseSource::FROM_SELF));
-  ForceProcessFramePacket(QuicFrame(&frame1_));
+  ForceProcessFramePacket(QuicFrame(frame1_));
 }
 
 TEST_P(QuicConnectionTest, ClientReceivesRejOnNonCryptoStream) {
@@ -6616,7 +6624,7 @@
 
   EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_MAYBE_CORRUPTED_MEMORY, _,
                                            ConnectionCloseSource::FROM_SELF));
-  ForceProcessFramePacket(QuicFrame(&frame1_));
+  ForceProcessFramePacket(QuicFrame(frame1_));
 }
 
 TEST_P(QuicConnectionTest, CloseConnectionOnPacketTooLarge) {
diff --git a/net/third_party/quic/core/quic_constants.h b/net/third_party/quic/core/quic_constants.h
index 78983ec..ee85afd 100644
--- a/net/third_party/quic/core/quic_constants.h
+++ b/net/third_party/quic/core/quic_constants.h
@@ -220,6 +220,9 @@
 // Number of bytes reserved for connection ID length.
 const size_t kConnectionIdLengthSize = 1;
 
+// Minimum length of random bytes in IETF stateless reset packet.
+const size_t kMinRandomBytesLengthInStatelessReset = 20;
+
 }  // namespace quic
 
 #endif  // NET_THIRD_PARTY_QUIC_CORE_QUIC_CONSTANTS_H_
diff --git a/net/third_party/quic/core/quic_crypto_client_stream_test.cc b/net/third_party/quic/core/quic_crypto_client_stream_test.cc
index 16e1469..61277cd 100644
--- a/net/third_party/quic/core/quic_crypto_client_stream_test.cc
+++ b/net/third_party/quic/core/quic_crypto_client_stream_test.cc
@@ -259,7 +259,7 @@
   // Build a server config update message with certificates
   QuicCryptoServerConfig crypto_config(
       QuicCryptoServerConfig::TESTING, QuicRandom::GetInstance(),
-      crypto_test_utils::ProofSourceForTesting(),
+      crypto_test_utils::ProofSourceForTesting(), KeyExchangeSource::Default(),
       TlsServerHandshaker::CreateSslCtx());
   crypto_test_utils::FakeServerOptions options;
   crypto_test_utils::SetupCryptoServerConfigForTest(
@@ -384,6 +384,7 @@
         server_crypto_config_(QuicCryptoServerConfig::TESTING,
                               QuicRandom::GetInstance(),
                               crypto_test_utils::ProofSourceForTesting(),
+                              KeyExchangeSource::Default(),
                               TlsServerHandshaker::CreateSslCtx()),
         server_compressed_certs_cache_(
             QuicCompressedCertsCache::kQuicCompressedCertsCacheSize),
diff --git a/net/third_party/quic/core/quic_crypto_server_stream_test.cc b/net/third_party/quic/core/quic_crypto_server_stream_test.cc
index 4365e058..5afef53e 100644
--- a/net/third_party/quic/core/quic_crypto_server_stream_test.cc
+++ b/net/third_party/quic/core/quic_crypto_server_stream_test.cc
@@ -38,8 +38,8 @@
 class QuicStream;
 }  // namespace quic
 
-using testing::NiceMock;
 using testing::_;
+using testing::NiceMock;
 
 namespace quic {
 namespace test {
@@ -67,6 +67,7 @@
       : server_crypto_config_(QuicCryptoServerConfig::TESTING,
                               QuicRandom::GetInstance(),
                               std::move(proof_source),
+                              KeyExchangeSource::Default(),
                               TlsServerHandshaker::CreateSslCtx()),
         server_compressed_certs_cache_(
             QuicCompressedCertsCache::kQuicCompressedCertsCacheSize),
diff --git a/net/third_party/quic/core/quic_data_writer.cc b/net/third_party/quic/core/quic_data_writer.cc
index 43ce894..036ee080c 100644
--- a/net/third_party/quic/core/quic_data_writer.cc
+++ b/net/third_party/quic/core/quic_data_writer.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 #include <limits>
 
+#include "net/third_party/quic/core/crypto/quic_random.h"
 #include "net/third_party/quic/core/quic_utils.h"
 #include "net/third_party/quic/platform/api/quic_bug_tracker.h"
 #include "net/third_party/quic/platform/api/quic_flags.h"
@@ -180,6 +181,17 @@
   return WriteBytes(&tag, sizeof(tag));
 }
 
+bool QuicDataWriter::WriteRandomBytes(QuicRandom* random, size_t length) {
+  char* dest = BeginWrite(length);
+  if (!dest) {
+    return false;
+  }
+
+  random->RandBytes(dest, length);
+  length_ += length;
+  return true;
+}
+
 // Converts a uint64_t into an IETF/Quic formatted Variable Length
 // Integer. IETF Variable Length Integers have 62 significant bits, so
 // the value to write must be in the range of 0..(2^62)-1.
diff --git a/net/third_party/quic/core/quic_data_writer.h b/net/third_party/quic/core/quic_data_writer.h
index 55313cc..7832dd9 100644
--- a/net/third_party/quic/core/quic_data_writer.h
+++ b/net/third_party/quic/core/quic_data_writer.h
@@ -16,6 +16,8 @@
 
 namespace quic {
 
+class QuicRandom;
+
 // Maximum value that can be properly encoded using VarInt62 coding.
 const uint64_t kVarInt62MaxValue = UINT64_C(0x3fffffffffffffff);
 
@@ -105,6 +107,9 @@
   // in big endian.
   bool WriteTag(uint32_t tag);
 
+  // Write |length| random bytes generated by |random|.
+  bool WriteRandomBytes(QuicRandom* random, size_t length);
+
   size_t capacity() const { return capacity_; }
 
   size_t remaining() const { return capacity_ - length_; }
diff --git a/net/third_party/quic/core/quic_data_writer_test.cc b/net/third_party/quic/core/quic_data_writer_test.cc
index 70dcbb3..ba766c4 100644
--- a/net/third_party/quic/core/quic_data_writer_test.cc
+++ b/net/third_party/quic/core/quic_data_writer_test.cc
@@ -942,6 +942,20 @@
   EncodeDecodeStreamId(UINT64_C(0x3fffffffffffffff), false);
 }
 
+TEST_P(QuicDataWriterTest, WriteRandomBytes) {
+  char buffer[20];
+  char expected[20];
+  for (size_t i = 0; i < 20; ++i) {
+    expected[i] = 'r';
+  }
+  MockRandom random;
+  QuicDataWriter writer(20, buffer, GetParam().endianness);
+  EXPECT_FALSE(writer.WriteRandomBytes(&random, 30));
+
+  EXPECT_TRUE(writer.WriteRandomBytes(&random, 20));
+  test::CompareCharArraysWithHexError("random", buffer, 20, expected, 20);
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace quic
diff --git a/net/third_party/quic/core/quic_dispatcher.cc b/net/third_party/quic/core/quic_dispatcher.cc
index 79430b88..0eb4b1a 100644
--- a/net/third_party/quic/core/quic_dispatcher.cc
+++ b/net/third_party/quic/core/quic_dispatcher.cc
@@ -162,10 +162,10 @@
         QUIC_BUG << "Unable to consume data into an empty packet.";
         return;
       }
-      offset += frame.stream_frame->data_length;
+      offset += frame.stream_frame.data_length;
       if (offset < reject.length()) {
-        DCHECK(!creator_.HasRoomForStreamFrame(
-            kCryptoStreamId, offset, frame.stream_frame->data_length));
+        DCHECK(!creator_.HasRoomForStreamFrame(kCryptoStreamId, offset,
+                                               frame.stream_frame.data_length));
       }
       creator_.Flush();
     }
diff --git a/net/third_party/quic/core/quic_dispatcher_test.cc b/net/third_party/quic/core/quic_dispatcher_test.cc
index 2bbdf16..f4df750 100644
--- a/net/third_party/quic/core/quic_dispatcher_test.cc
+++ b/net/third_party/quic/core/quic_dispatcher_test.cc
@@ -196,6 +196,7 @@
         crypto_config_(QuicCryptoServerConfig::TESTING,
                        QuicRandom::GetInstance(),
                        std::move(proof_source),
+                       KeyExchangeSource::Default(),
                        TlsServerHandshaker::CreateSslCtx()),
         dispatcher_(new NiceMock<TestDispatcher>(config_,
                                                  &crypto_config_,
@@ -635,9 +636,9 @@
 }
 
 TEST_F(QuicDispatcherTest, SupportedTransportVersionsChangeInFlight) {
-  static_assert(QUIC_ARRAYSIZE(kSupportedTransportVersions) == 7u,
+  static_assert(QUIC_ARRAYSIZE(kSupportedTransportVersions) == 5u,
                 "Supported versions out of sync");
-  SetQuicReloadableFlag(quic_disable_version_41_2, false);
+  SetQuicReloadableFlag(quic_disable_version_35, false);
   SetQuicReloadableFlag(quic_enable_version_43, true);
   SetQuicReloadableFlag(quic_enable_version_44, true);
   SetQuicFlag(&FLAGS_quic_enable_version_99, true);
@@ -758,19 +759,19 @@
                 SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
                 PACKET_4BYTE_PACKET_NUMBER, 1);
 
-  // Turn off version 41.
-  SetQuicReloadableFlag(quic_disable_version_41_2, true);
+  // Turn off version 35.
+  SetQuicReloadableFlag(quic_disable_version_35, true);
   ++connection_id;
   EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address,
                                               QuicStringPiece("hq")))
       .Times(0);
   ProcessPacket(client_address, connection_id, true,
-                ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_41),
+                ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_35),
                 SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
                 PACKET_4BYTE_PACKET_NUMBER, 1);
 
-  // Turn on version 41.
-  SetQuicReloadableFlag(quic_disable_version_41_2, false);
+  // Turn on version 35.
+  SetQuicReloadableFlag(quic_disable_version_35, false);
   ++connection_id;
   EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address,
                                               QuicStringPiece("hq")))
@@ -787,7 +788,7 @@
   EXPECT_CALL(*dispatcher_,
               ShouldCreateOrBufferPacketForConnection(connection_id));
   ProcessPacket(client_address, connection_id, true,
-                ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_41),
+                ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_35),
                 SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
                 PACKET_4BYTE_PACKET_NUMBER, 1);
 }
@@ -2382,6 +2383,8 @@
   // different endianness which causes the client to close the connection
   // because of QUIC_INVALID_STREAM_DATA.
 
+  SetQuicReloadableFlag(quic_disable_version_35, false);
+
   // Send a CHLO with v39. Dispatcher framer's version is set to v39.
   ProcessPacket(client_addr_, 1, true,
                 ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_39),
diff --git a/net/third_party/quic/core/quic_framer.cc b/net/third_party/quic/core/quic_framer.cc
index 14b7485..3eb84444 100644
--- a/net/third_party/quic/core/quic_framer.cc
+++ b/net/third_party/quic/core/quic_framer.cc
@@ -49,7 +49,6 @@
 // edge of the header.
 const uint8_t kPublicHeaderSequenceNumberShift = 4;
 
-// New Frame Types, QUIC v. >= 10:
 // There are two interpretations for the Frame Type byte in the QUIC protocol,
 // resulting in two Frame Types: Special Frame Types and Regular Frame Types.
 //
@@ -65,10 +64,8 @@
 // Special Frame Types encode both a Frame Type and corresponding flags
 // all in the Frame Type byte. Currently defined Special Frame Types
 // are:
-// Stream             : 0b 11xxxxxx   versions other than 41
-// Ack                : 0b 101xxxxx   versions other than 41
-// Stream             : 0b 1xxxxxxx   version 41
-// Ack                : 0b 01xxxxxx   version 41
+// Stream             : 0b 11xxxxxx
+// Ack                : 0b 101xxxxx
 //
 // Semantics of the flag bits above (the x bits) depends on the frame type.
 
@@ -76,13 +73,9 @@
 // and for specific special frame types.
 const uint8_t kQuicFrameTypeSpecialMask = 0xE0;  // 0b 11100000
 const uint8_t kQuicFrameTypeStreamMask = 0x80;
-const uint8_t kQuicFrameTypeStreamMask_v41 = 0xC0;
 const uint8_t kQuicFrameTypeAckMask = 0x40;
-const uint8_t kQuicFrameTypeAckMask_v41 = 0xA0;
 
-// For version 41 the stream type format is 11FSSOOD.
-// For versions other than 41 the stream type format is 1FDOOOSS
-// Where
+// The stream type format is 1FDOOOSS, where
 //    F is the fin bit.
 //    D is the data length bit (0 or 2 bytes).
 //    OO/OOO are the size of the offset.
@@ -93,28 +86,20 @@
 // StreamID may be 1, 2, 3, or 4 bytes.
 const uint8_t kQuicStreamIdShift = 2;
 const uint8_t kQuicStreamIDLengthMask = 0x03;
-const uint8_t kQuicStreamIDLengthShift_v41 = 3;
-const uint8_t kQuicStreamIDLengthNumBits = 2;
 
 // Offset may be 0, 2, 4, or 8 bytes.
 const uint8_t kQuicStreamShift = 3;
 const uint8_t kQuicStreamOffsetMask = 0x07;
-const uint8_t kQuicStreamOffsetNumBits = 2;
-const uint8_t kQuicStreamOffsetShift_v41 = 1;
 
 // Data length may be 0 or 2 bytes.
 const uint8_t kQuicStreamDataLengthShift = 1;
 const uint8_t kQuicStreamDataLengthMask = 0x01;
-const uint8_t kQuicStreamDataLengthShift_v41 = 0;
 
 // Fin bit may be set or not.
 const uint8_t kQuicStreamFinShift = 1;
 const uint8_t kQuicStreamFinMask = 0x01;
-const uint8_t kQuicStreamFinShift_v41 = 5;
 
-// For version 41 the format of the ACK type byte is 101MLLOO
-// For other versions, the format is 01M0LLOO
-// Where
+// The format is 01M0LLOO, where
 //   M if set, there are multiple ack blocks in the frame.
 //  LL is the size of the largest ack field.
 //  OO is the size of the ack blocks offset field.
@@ -125,7 +110,6 @@
 
 // Acks may have only one ack block.
 const uint8_t kQuicHasMultipleAckBlocksOffset = 5;
-const uint8_t kQuicHasMultipleAckBlocksOffset_v41 = 4;
 
 // Maximum length of encoded error strings.
 const int kMaxErrorStringLength = 256;
@@ -172,8 +156,7 @@
                                                  uint8_t flags) {
   switch (flags & PACKET_FLAGS_8BYTE_PACKET) {
     case PACKET_FLAGS_8BYTE_PACKET:
-      return version != QUIC_VERSION_41 ? PACKET_6BYTE_PACKET_NUMBER
-                                        : PACKET_8BYTE_PACKET_NUMBER;
+      return PACKET_6BYTE_PACKET_NUMBER;
     case PACKET_FLAGS_4BYTE_PACKET:
       return PACKET_4BYTE_PACKET_NUMBER;
     case PACKET_FLAGS_2BYTE_PACKET:
@@ -499,30 +482,19 @@
 // static
 size_t QuicFramer::GetStreamOffsetSize(QuicTransportVersion version,
                                        QuicStreamOffset offset) {
-  if (version != QUIC_VERSION_41) {
-    // 0 is a special case.
-    if (offset == 0) {
-      return 0;
-    }
-    // 2 through 8 are the remaining sizes.
-    offset >>= 8;
-    for (int i = 2; i <= 8; ++i) {
-      offset >>= 8;
-      if (offset == 0) {
-        return i;
-      }
-    }
-    QUIC_BUG << "Failed to determine StreamOffsetSize.";
-    return 8;
+  // 0 is a special case.
+  if (offset == 0) {
+    return 0;
   }
-  // try 0, 2 and 4.
-  for (int i = 0; i <= 4; i += 2) {
-    if ((offset >> (8 * i)) == 0) {
+  // 2 through 8 are the remaining sizes.
+  offset >>= 8;
+  for (int i = 2; i <= 8; ++i) {
+    offset >>= 8;
+    if (offset == 0) {
       return i;
     }
   }
-
-  // 8 is the only remaining valid value and will contain any 64bit offset.
+  QUIC_BUG << "Failed to determine StreamOffsetSize.";
   return 8;
 }
 
@@ -567,11 +539,10 @@
     bool last_frame,
     QuicPacketNumberLength packet_number_length) {
   // Prevent a rare crash reported in b/19458523.
-  if ((frame.type == STREAM_FRAME || frame.type == ACK_FRAME) &&
-      frame.stream_frame == nullptr) {
-    QUIC_BUG << "Cannot compute the length of a null frame. "
-             << "type:" << frame.type << "free_bytes:" << free_bytes
-             << " first_frame:" << first_frame << " last_frame:" << last_frame
+  if (frame.type == ACK_FRAME && frame.ack_frame == nullptr) {
+    QUIC_BUG << "Cannot compute the length of a null ack frame. free_bytes:"
+             << free_bytes << " first_frame:" << first_frame
+             << " last_frame:" << last_frame
              << " seq num length:" << packet_number_length;
     RecordInternalErrorLocation(QUIC_FRAMER);
     set_error(QUIC_INTERNAL_ERROR);
@@ -654,7 +625,7 @@
         }
         break;
       case STREAM_FRAME:
-        if (!AppendStreamFrame(*frame.stream_frame, no_stream_frame_length,
+        if (!AppendStreamFrame(frame.stream_frame, no_stream_frame_length,
                                &writer)) {
           QUIC_BUG << "AppendStreamFrame failed";
           return 0;
@@ -778,7 +749,7 @@
         }
         break;
       case STREAM_FRAME:
-        if (!AppendStreamFrame(*frame.stream_frame, no_stream_frame_length,
+        if (!AppendStreamFrame(frame.stream_frame, no_stream_frame_length,
                                &writer)) {
           QUIC_BUG << "AppendStreamFrame failed";
           return 0;
@@ -975,7 +946,12 @@
     QuicConnectionId connection_id,
     QuicUint128 stateless_reset_token) {
   QUIC_DVLOG(1) << "Building IETF stateless reset packet.";
-  size_t len = kPacketHeaderTypeSize + PACKET_1BYTE_PACKET_NUMBER +
+  const bool quic_more_random_bytes =
+      GetQuicReloadableFlag(quic_more_random_bytes_in_stateless_reset);
+  const size_t random_bytes_length = quic_more_random_bytes
+                                         ? kMinRandomBytesLengthInStatelessReset
+                                         : PACKET_1BYTE_PACKET_NUMBER;
+  size_t len = kPacketHeaderTypeSize + random_bytes_length +
                sizeof(stateless_reset_token);
   std::unique_ptr<char[]> buffer(new char[len]);
   QuicDataWriter writer(len, buffer.get(), NETWORK_BYTE_ORDER);
@@ -989,16 +965,22 @@
   if (!writer.WriteUInt8(type)) {
     return nullptr;
   }
-  // Append an random packet number.
-  QuicPacketNumber random_packet_number =
-      QuicRandom::GetInstance()->RandUint64() % 255 + 1;
-  if (!AppendPacketNumber(PACKET_1BYTE_PACKET_NUMBER, random_packet_number,
-                          &writer)) {
-    return nullptr;
+  if (quic_more_random_bytes) {
+    // Append random bytes.
+    if (!writer.WriteRandomBytes(QuicRandom::GetInstance(),
+                                 random_bytes_length)) {
+      return nullptr;
+    }
+  } else {
+    // Append an random packet number.
+    QuicPacketNumber random_packet_number =
+        QuicRandom::GetInstance()->RandUint64() % 255 + 1;
+    if (!AppendPacketNumber(PACKET_1BYTE_PACKET_NUMBER, random_packet_number,
+                            &writer)) {
+      return nullptr;
+    }
   }
 
-  // TODO(fayang): Append random number of random bytes after packet number.
-
   // Append stateless reset token.
   if (!writer.WriteBytes(&stateless_reset_token,
                          sizeof(stateless_reset_token))) {
@@ -1663,8 +1645,7 @@
   } else if (packet_number < UINT64_C(1) << (PACKET_4BYTE_PACKET_NUMBER * 8)) {
     return PACKET_4BYTE_PACKET_NUMBER;
   } else {
-    return version != QUIC_VERSION_41 ? PACKET_6BYTE_PACKET_NUMBER
-                                      : PACKET_8BYTE_PACKET_NUMBER;
+    return PACKET_6BYTE_PACKET_NUMBER;
   }
 }
 
@@ -1904,11 +1885,7 @@
 
     if (frame_type & kQuicFrameTypeSpecialMask) {
       // Stream Frame
-      if ((version_.transport_version != QUIC_VERSION_41 &&
-           (frame_type & kQuicFrameTypeStreamMask)) ||
-          (version_.transport_version >= QUIC_VERSION_41 &&
-           ((frame_type & kQuicFrameTypeStreamMask_v41) ==
-            kQuicFrameTypeStreamMask_v41))) {
+      if (frame_type & kQuicFrameTypeStreamMask) {
         QuicStreamFrame frame;
         if (!ProcessStreamFrame(reader, frame_type, &frame)) {
           return RaiseError(QUIC_INVALID_STREAM_DATA);
@@ -1923,11 +1900,7 @@
       }
 
       // Ack Frame
-      if ((version_.transport_version != QUIC_VERSION_41 &&
-           (frame_type & kQuicFrameTypeAckMask)) ||
-          (version_.transport_version >= QUIC_VERSION_41 &&
-           ((frame_type & kQuicFrameTypeSpecialMask) ==
-            kQuicFrameTypeAckMask_v41))) {
+      if (frame_type & kQuicFrameTypeAckMask) {
         if (!ProcessAckFrame(reader, frame_type)) {
           return RaiseError(QUIC_INVALID_ACK_DATA);
         }
@@ -2326,43 +2299,24 @@
   uint8_t stream_id_length = 0;
   uint8_t offset_length = 4;
   bool has_data_length = true;
-  if (version_.transport_version != QUIC_VERSION_41) {
-    stream_flags &= ~kQuicFrameTypeStreamMask;
+  stream_flags &= ~kQuicFrameTypeStreamMask;
 
-    // Read from right to left: StreamID, Offset, Data Length, Fin.
-    stream_id_length = (stream_flags & kQuicStreamIDLengthMask) + 1;
-    stream_flags >>= kQuicStreamIdShift;
+  // Read from right to left: StreamID, Offset, Data Length, Fin.
+  stream_id_length = (stream_flags & kQuicStreamIDLengthMask) + 1;
+  stream_flags >>= kQuicStreamIdShift;
 
-    offset_length = (stream_flags & kQuicStreamOffsetMask);
-    // There is no encoding for 1 byte, only 0 and 2 through 8.
-    if (offset_length > 0) {
-      offset_length += 1;
-    }
-    stream_flags >>= kQuicStreamShift;
-
-    has_data_length =
-        (stream_flags & kQuicStreamDataLengthMask) == kQuicStreamDataLengthMask;
-    stream_flags >>= kQuicStreamDataLengthShift;
-
-    frame->fin = (stream_flags & kQuicStreamFinMask) == kQuicStreamFinShift;
-
-  } else {
-    stream_flags &= ~kQuicFrameTypeStreamMask_v41;
-
-    stream_id_length = 1 + ExtractBits(stream_flags, kQuicStreamIDLengthNumBits,
-                                       kQuicStreamIDLengthShift_v41);
-
-    offset_length = 1 << ExtractBits(stream_flags, kQuicStreamOffsetNumBits,
-                                     kQuicStreamOffsetShift_v41);
-
-    if (offset_length == 1) {
-      offset_length = 0;
-    }
-
-    has_data_length = ExtractBit(stream_flags, kQuicStreamDataLengthShift_v41);
-
-    frame->fin = ExtractBit(stream_flags, kQuicStreamFinShift_v41);
+  offset_length = (stream_flags & kQuicStreamOffsetMask);
+  // There is no encoding for 1 byte, only 0 and 2 through 8.
+  if (offset_length > 0) {
+    offset_length += 1;
   }
+  stream_flags >>= kQuicStreamShift;
+
+  has_data_length =
+      (stream_flags & kQuicStreamDataLengthMask) == kQuicStreamDataLengthMask;
+  stream_flags >>= kQuicStreamDataLengthShift;
+
+  frame->fin = (stream_flags & kQuicStreamFinMask) == kQuicStreamFinShift;
 
   uint64_t stream_id;
   if (!reader->ReadBytesToUInt64(stream_id_length, &stream_id)) {
@@ -2452,24 +2406,11 @@
 }
 
 bool QuicFramer::ProcessAckFrame(QuicDataReader* reader, uint8_t frame_type) {
-  bool has_ack_blocks =
-      ExtractBit(frame_type, version_.transport_version != QUIC_VERSION_41
-                                 ? kQuicHasMultipleAckBlocksOffset
-                                 : kQuicHasMultipleAckBlocksOffset_v41);
+  const bool has_ack_blocks =
+      ExtractBit(frame_type, kQuicHasMultipleAckBlocksOffset);
   uint8_t num_ack_blocks = 0;
   uint8_t num_received_packets = 0;
 
-  if (version_.transport_version == QUIC_VERSION_41) {
-    if (has_ack_blocks && !reader->ReadUInt8(&num_ack_blocks)) {
-      set_detailed_error("Unable to read num of ack blocks.");
-      return false;
-    }
-    if (!reader->ReadUInt8(&num_received_packets)) {
-      set_detailed_error("Unable to read num received packets.");
-      return false;
-    }
-  }
-
   // Determine the two lengths from the frame type: largest acked length,
   // ack block length.
   const QuicPacketNumberLength ack_block_length = ReadAckPacketNumberLength(
@@ -2505,12 +2446,9 @@
     return false;
   }
 
-  if (has_ack_blocks) {
-    if (version_.transport_version != QUIC_VERSION_41 &&
-        !reader->ReadUInt8(&num_ack_blocks)) {
-      set_detailed_error("Unable to read num of ack blocks.");
-      return false;
-    }
+  if (has_ack_blocks && !reader->ReadUInt8(&num_ack_blocks)) {
+    set_detailed_error("Unable to read num of ack blocks.");
+    return false;
   }
 
   uint64_t first_block_length;
@@ -2587,8 +2525,7 @@
     }
   }
 
-  if (version_.transport_version != QUIC_VERSION_41 &&
-      !reader->ReadUInt8(&num_received_packets)) {
+  if (!reader->ReadUInt8(&num_received_packets)) {
     set_detailed_error("Unable to read num received packets.");
     return false;
   }
@@ -2793,11 +2730,9 @@
     return false;
   }
 
-  if (version_.transport_version != QUIC_VERSION_41) {
-    if (!reader->ReadUInt64(&frame->byte_offset)) {
-      set_detailed_error("Unable to read rst stream sent byte offset.");
-      return false;
-    }
+  if (!reader->ReadUInt64(&frame->byte_offset)) {
+    set_detailed_error("Unable to read rst stream sent byte offset.");
+    return false;
   }
 
   uint32_t error_code;
@@ -2813,13 +2748,6 @@
 
   frame->error_code = static_cast<QuicRstStreamErrorCode>(error_code);
 
-  if (version_.transport_version == QUIC_VERSION_41) {
-    if (!reader->ReadUInt64(&frame->byte_offset)) {
-      set_detailed_error("Unable to read rst stream sent byte offset.");
-      return false;
-    }
-  }
-
   return true;
 }
 
@@ -3218,10 +3146,10 @@
   switch (frame.type) {
     case STREAM_FRAME:
       return GetMinStreamFrameSize(
-                 version_.transport_version, frame.stream_frame->stream_id,
-                 frame.stream_frame->offset, last_frame_in_packet,
-                 frame.stream_frame->data_length) +
-             frame.stream_frame->data_length;
+                 version_.transport_version, frame.stream_frame.stream_id,
+                 frame.stream_frame.offset, last_frame_in_packet,
+                 frame.stream_frame.data_length) +
+             frame.stream_frame.data_length;
     case ACK_FRAME: {
       return GetAckFrameSize(*frame.ack_frame, packet_number_length);
     }
@@ -3249,65 +3177,25 @@
   uint8_t type_byte = 0;
   switch (frame.type) {
     case STREAM_FRAME: {
-      if (frame.stream_frame == nullptr) {
-        QUIC_BUG << "Failed to append STREAM frame with no stream_frame.";
+      // Fin bit.
+      type_byte |= frame.stream_frame.fin ? kQuicStreamFinMask : 0;
+
+      // Data Length bit.
+      type_byte <<= kQuicStreamDataLengthShift;
+      type_byte |= no_stream_frame_length ? 0 : kQuicStreamDataLengthMask;
+
+      // Offset 3 bits.
+      type_byte <<= kQuicStreamShift;
+      const size_t offset_len = GetStreamOffsetSize(version_.transport_version,
+                                                    frame.stream_frame.offset);
+      if (offset_len > 0) {
+        type_byte |= offset_len - 1;
       }
-      if (version_.transport_version != QUIC_VERSION_41) {
-        // Fin bit.
-        type_byte |= frame.stream_frame->fin ? kQuicStreamFinMask : 0;
 
-        // Data Length bit.
-        type_byte <<= kQuicStreamDataLengthShift;
-        type_byte |= no_stream_frame_length ? 0 : kQuicStreamDataLengthMask;
-
-        // Offset 3 bits.
-        type_byte <<= kQuicStreamShift;
-        const size_t offset_len = GetStreamOffsetSize(
-            version_.transport_version, frame.stream_frame->offset);
-        if (offset_len > 0) {
-          type_byte |= offset_len - 1;
-        }
-
-        // stream id 2 bits.
-        type_byte <<= kQuicStreamIdShift;
-        type_byte |= GetStreamIdSize(frame.stream_frame->stream_id) - 1;
-        type_byte |= kQuicFrameTypeStreamMask;  // Set Stream Frame Type to 1.
-      } else {
-        // Fin bit.
-        SetBit(&type_byte, frame.stream_frame->fin, kQuicStreamFinShift_v41);
-
-        // Data Length bit.
-        SetBit(&type_byte, !no_stream_frame_length,
-               kQuicStreamDataLengthShift_v41);
-
-        // Offset 2 bits.
-        uint8_t offset_len_encode = 3;
-        switch (GetStreamOffsetSize(version_.transport_version,
-                                    frame.stream_frame->offset)) {
-          case 0:
-            offset_len_encode = 0;
-            break;
-          case 2:
-            offset_len_encode = 1;
-            break;
-          case 4:
-            offset_len_encode = 2;
-            break;
-          case 8:
-            offset_len_encode = 3;
-            break;
-          default:
-            QUIC_BUG << "Invalid offset_length.";
-        }
-        SetBits(&type_byte, offset_len_encode, kQuicStreamOffsetNumBits,
-                kQuicStreamOffsetShift_v41);
-
-        // stream id 2 bits.
-        SetBits(&type_byte, GetStreamIdSize(frame.stream_frame->stream_id) - 1,
-                kQuicStreamIDLengthNumBits, kQuicStreamIDLengthShift_v41);
-        type_byte |=
-            kQuicFrameTypeStreamMask_v41;  // Set Stream Frame Type to 1.
-      }
+      // stream id 2 bits.
+      type_byte <<= kQuicStreamIdShift;
+      type_byte |= GetStreamIdSize(frame.stream_frame.stream_id) - 1;
+      type_byte |= kQuicFrameTypeStreamMask;  // Set Stream Frame Type to 1.
       break;
     }
     case ACK_FRAME:
@@ -3399,10 +3287,10 @@
       if (!last_frame_in_packet) {
         type_byte |= IETF_STREAM_FRAME_LEN_BIT;
       }
-      if (frame.stream_frame->offset != 0) {
+      if (frame.stream_frame.offset != 0) {
         type_byte |= IETF_STREAM_FRAME_OFF_BIT;
       }
-      if (frame.stream_frame->fin) {
+      if (frame.stream_frame.fin) {
         type_byte |= IETF_STREAM_FRAME_FIN_BIT;
       }
       break;
@@ -3634,9 +3522,7 @@
   // Whether there are multiple ack blocks.
   uint8_t type_byte = 0;
   SetBit(&type_byte, new_ack_info.num_ack_blocks != 0,
-         version_.transport_version != QUIC_VERSION_41
-             ? kQuicHasMultipleAckBlocksOffset
-             : kQuicHasMultipleAckBlocksOffset_v41);
+         kQuicHasMultipleAckBlocksOffset);
 
   SetBits(&type_byte, GetPacketNumberFlags(largest_acked_length),
           kQuicSequenceNumberLengthNumBits, kLargestAckedOffset);
@@ -3644,17 +3530,12 @@
   SetBits(&type_byte, GetPacketNumberFlags(ack_block_length),
           kQuicSequenceNumberLengthNumBits, kActBlockLengthOffset);
 
-  if (version_.transport_version != QUIC_VERSION_41) {
-    type_byte |= kQuicFrameTypeAckMask;
-  } else {
-    type_byte |= kQuicFrameTypeAckMask_v41;
-  }
+  type_byte |= kQuicFrameTypeAckMask;
 
   if (!writer->WriteUInt8(type_byte)) {
     return false;
   }
 
-  size_t num_timestamps_offset = 0;
   size_t max_num_ack_blocks = available_timestamp_and_ack_block_bytes /
                               (ack_block_length + PACKET_1BYTE_PACKET_NUMBER);
 
@@ -3665,20 +3546,6 @@
     num_ack_blocks = std::numeric_limits<uint8_t>::max();
   }
 
-  if (version_.transport_version == QUIC_VERSION_41) {
-    if (num_ack_blocks > 0 && !writer->WriteBytes(&num_ack_blocks, 1)) {
-      return false;
-    }
-
-    // Write a placeholder for the number of timestamps which will be
-    // overwritten after the ack blocks have been written.
-    num_timestamps_offset = writer->length();
-    uint8_t num_timestamps = 0;
-    if (!writer->WriteUInt8(num_timestamps)) {
-      return false;
-    }
-  }
-
   // Largest acked.
   if (!AppendPacketNumber(largest_acked_length, largest_acked, writer)) {
     return false;
@@ -3694,11 +3561,9 @@
     return false;
   }
 
-  if (version_.transport_version != QUIC_VERSION_41) {
-    if (num_ack_blocks > 0) {
-      if (!writer->WriteBytes(&num_ack_blocks, 1)) {
-        return false;
-      }
+  if (num_ack_blocks > 0) {
+    if (!writer->WriteBytes(&num_ack_blocks, 1)) {
+      return false;
     }
   }
 
@@ -3766,11 +3631,9 @@
   // Timestamps.
   // If we don't have enough available space to append all the timestamps, don't
   // append any of them.
-  if (transport_version() != QUIC_VERSION_41) {
-    uint8_t num_received_packets = 0;
-    if (!writer->WriteBytes(&num_received_packets, 1)) {
-      return false;
-    }
+  uint8_t num_received_packets = 0;
+  if (!writer->WriteBytes(&num_received_packets, 1)) {
+    return false;
   }
 
   return true;
@@ -3965,10 +3828,8 @@
     return false;
   }
 
-  if (version_.transport_version != QUIC_VERSION_41) {
-    if (!writer->WriteUInt64(frame.byte_offset)) {
-      return false;
-    }
+  if (!writer->WriteUInt64(frame.byte_offset)) {
+    return false;
   }
 
   uint32_t error_code = static_cast<uint32_t>(frame.error_code);
@@ -3976,12 +3837,6 @@
     return false;
   }
 
-  if (version_.transport_version == QUIC_VERSION_41) {
-    if (!writer->WriteUInt64(frame.byte_offset)) {
-      return false;
-    }
-  }
-
   return true;
 }
 
diff --git a/net/third_party/quic/core/quic_framer_test.cc b/net/third_party/quic/core/quic_framer_test.cc
index 487bd982..b4be7c11 100644
--- a/net/third_party/quic/core/quic_framer_test.cc
+++ b/net/third_party/quic/core/quic_framer_test.cc
@@ -1431,33 +1431,6 @@
     0x00, 0x00,
   };
 
-  unsigned char packet41[] = {
-    // public flags (8 byte connection_id)
-    0x28,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // packet number
-    0x12, 0x34, 0x56, 0x78,
-
-    // paddings
-    0x00, 0x00,
-    // frame type (stream frame with fin)
-    0xFF,
-    // stream id
-    0x01, 0x02, 0x03, 0x04,
-    // offset
-    0x3A, 0x98, 0xFE, 0xDC,
-    0x32, 0x10, 0x76, 0x54,
-    // data length
-    0x00, 0x0c,
-    // data
-    'h',  'e',  'l',  'l',
-    'o',  ' ',  'w',  'o',
-    'r',  'l',  'd',  '!',
-    // paddings
-    0x00, 0x00,
-  };
-
   unsigned char packet44[] = {
     // type (short header, 4 byte packet number)
     0x32,
@@ -1525,8 +1498,6 @@
   } else if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
     p_size = QUIC_ARRAYSIZE(packet44);
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -1612,36 +1583,6 @@
          'r',  'l',  'd',  '!'}},
   };
 
-  PacketFragments packet41 = {
-      // public flags (8 byte connection_id)
-      {"",
-       {0x28}},
-      // connection_id
-      {"",
-       {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
-      // packet number
-      {"",
-       {0x12, 0x34, 0x56, 0x78}},
-      // frame type (stream frame with fin)
-      {"",
-       {0xFF}},
-      // stream id
-      {"Unable to read stream_id.",
-       {0x01, 0x02, 0x03, 0x04}},
-      // offset
-      {"Unable to read offset.",
-       {0x3A, 0x98, 0xFE, 0xDC,
-        0x32, 0x10, 0x76, 0x54}},
-      {"Unable to read frame data.",
-       {
-         // data length
-         0x00, 0x0c,
-         // data
-         'h',  'e',  'l',  'l',
-         'o',  ' ',  'w',  'o',
-         'r',  'l',  'd',  '!'}},
-  };
-
   PacketFragments packet44 = {
       // type (short header, 4 byte packet number)
       {"",
@@ -1708,11 +1649,8 @@
           ? packet99
           : (framer_.transport_version() > QUIC_VERSION_43
                  ? packet44
-                 : (framer_.transport_version() == QUIC_VERSION_41
-                        ? packet41
-                        : (framer_.transport_version() != QUIC_VERSION_35
-                               ? packet39
-                               : packet)));
+                 : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
+                                                                   : packet));
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -1788,29 +1726,6 @@
         'r',  'l',  'd',  '!',
     };
 
-  unsigned char packet41[] = {
-        // public flags (8 byte connection_id)
-        0x28,
-        // connection_id
-        0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
-        // packet number
-        0x12, 0x34, 0x56, 0x78,
-
-        // frame type (stream frame with fin)
-        0xFF,
-        // stream id
-        0x01, 0x02, 0x03, 0x04,
-        // offset
-        0x3A, 0x98, 0xFE, 0xDC,
-        0x32, 0x10, 0x76, 0x54,
-        // data length
-        0x00, 0x0c,
-        // data
-        'h',  'e',  'l',  'l',
-        'o',  ' ',  'w',  'o',
-        'r',  'l',  'd',  '!',
-    };
-
   unsigned char packet44[] = {
         // type (long header with packet type ZERO_RTT_PROTECTED)
         0xFC,
@@ -1842,8 +1757,6 @@
   unsigned char* p = packet;
   if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -1926,43 +1839,10 @@
          'o',  ' ',  'w',  'o',
          'r',  'l',  'd',  '!'}},
   };
-
-  PacketFragments packet41 = {
-      // public flags (8 byte connection_id)
-      {"",
-       {0x28}},
-      // connection_id
-      {"",
-       {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
-      // packet number
-      {"",
-       {0x12, 0x34, 0x56, 0x78}},
-      // frame type (stream frame with fin)
-      {"",
-       {0xF7}},
-      // stream id
-      {"Unable to read stream_id.",
-       {0x02, 0x03, 0x04}},
-      // offset
-      {"Unable to read offset.",
-       {0x3A, 0x98, 0xFE, 0xDC,
-        0x32, 0x10, 0x76, 0x54}},
-      {"Unable to read frame data.",
-       {
-         // data length
-         0x00, 0x0c,
-         // data
-         'h',  'e',  'l',  'l',
-         'o',  ' ',  'w',  'o',
-         'r',  'l',  'd',  '!'}},
-  };
   // clang-format on
 
   PacketFragments& fragments =
-      framer_.transport_version() == QUIC_VERSION_41
-          ? packet41
-          : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
-                                                            : packet);
+      framer_.transport_version() != QUIC_VERSION_35 ? packet39 : packet;
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -2046,36 +1926,6 @@
          'r',  'l',  'd',  '!'}},
   };
 
-  PacketFragments packet41 = {
-      // public flags (8 byte connection_id)
-      {"",
-       {0x28}},
-      // connection_id
-      {"",
-       {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
-      // packet number
-      {"",
-       {0x12, 0x34, 0x56, 0x78}},
-      // frame type (stream frame with fin)
-      {"",
-       {0xEF}},
-      // stream id
-      {"Unable to read stream_id.",
-       {0x03, 0x04}},
-      // offset
-      {"Unable to read offset.",
-       {0x3A, 0x98, 0xFE, 0xDC,
-        0x32, 0x10, 0x76, 0x54}},
-      {"Unable to read frame data.",
-       {
-         // data length
-         0x00, 0x0c,
-         // data
-         'h',  'e',  'l',  'l',
-         'o',  ' ',  'w',  'o',
-         'r',  'l',  'd',  '!'}},
-  };
-
   PacketFragments packet44 = {
       // type (short header, 4 byte packet number)
       {"",
@@ -2142,11 +1992,8 @@
           ? packet99
           : (framer_.transport_version() > QUIC_VERSION_43
                  ? packet44
-                 : (framer_.transport_version() == QUIC_VERSION_41
-                        ? packet41
-                        : (framer_.transport_version() != QUIC_VERSION_35
-                               ? packet39
-                               : packet)));
+                 : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
+                                                                   : packet));
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -2230,36 +2077,6 @@
          'r',  'l',  'd',  '!'}},
   };
 
-  PacketFragments packet41 = {
-      // public flags (8 byte connection_id)
-      {"",
-       {0x28}},
-      // connection_id
-      {"",
-       {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
-      // packet number
-      {"",
-       {0x12, 0x34, 0x56, 0x78}},
-      // frame type (stream frame with fin)
-      {"",
-       {0xE7}},
-      // stream id
-      {"Unable to read stream_id.",
-       {0x04}},
-      // offset
-      {"Unable to read offset.",
-       {0x3A, 0x98, 0xFE, 0xDC,
-        0x32, 0x10, 0x76, 0x54}},
-      {"Unable to read frame data.",
-       {
-         // data length
-         0x00, 0x0c,
-         // data
-         'h',  'e',  'l',  'l',
-         'o',  ' ',  'w',  'o',
-         'r',  'l',  'd',  '!'}},
-  };
-
   PacketFragments packet44 = {
       // type (short header, 4 byte packet number)
       {"",
@@ -2326,11 +2143,8 @@
           ? packet99
           : (framer_.transport_version() > QUIC_VERSION_43
                  ? packet44
-                 : (framer_.transport_version() == QUIC_VERSION_41
-                        ? packet41
-                        : (framer_.transport_version() != QUIC_VERSION_35
-                               ? packet39
-                               : packet)));
+                 : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
+                                                                   : packet));
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -2420,39 +2234,6 @@
          'r',  'l',  'd',  '!'}},
   };
 
-  PacketFragments packet41 = {
-      // public flags (version, 8 byte connection_id)
-      {"",
-       {0x29}},
-      // connection_id
-      {"",
-       {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
-      // version tag
-      {"",
-       {QUIC_VERSION_BYTES}},
-      // packet number
-      {"",
-       {0x12, 0x34, 0x56, 0x78}},
-      // frame type (stream frame with fin)
-      {"",
-       {0xF7}},
-      // stream id
-      {"Unable to read stream_id.",
-       {0x02, 0x03, 0x04}},
-      // offset
-      {"Unable to read offset.",
-       {0x3A, 0x98, 0xFE, 0xDC,
-        0x32, 0x10, 0x76, 0x54}},
-      {"Unable to read frame data.",
-       {
-         // data length
-         0x00, 0x0c,
-         // data
-         'h',  'e',  'l',  'l',
-         'o',  ' ',  'w',  'o',
-         'r',  'l',  'd',  '!'}},
-  };
-
   PacketFragments packet44 = {
       // public flags (long header with packet type ZERO_RTT_PROTECTED)
       {"",
@@ -2531,11 +2312,8 @@
           ? packet99
           : (framer_.transport_version() > QUIC_VERSION_43
                  ? packet44
-                 : (framer_.transport_version() == QUIC_VERSION_41
-                        ? packet41
-                        : (framer_.transport_version() != QUIC_VERSION_35
-                               ? packet39
-                               : packet)));
+                 : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
+                                                                   : packet));
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -2607,29 +2385,6 @@
       'r',  'l',  'd',  '!',
   };
 
-  unsigned char packet41[] = {
-      // public flags (8 byte connection_id)
-      0x28,
-      // connection_id
-      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-      // packet number
-      0x12, 0x34, 0x56, 0x78,
-
-      // frame type (stream frame with fin)
-      0xFF,
-      // stream id
-      0x01, 0x02, 0x03, 0x04,
-      // offset
-      0x3A, 0x98, 0xFE, 0xDC,
-      0x32, 0x10, 0x76, 0x54,
-      // data length
-      0x00, 0x0c,
-      // data
-      'h',  'e',  'l',  'l',
-      'o',  ' ',  'w',  'o',
-      'r',  'l',  'd',  '!',
-  };
-
   unsigned char packet44[] = {
       // type (short header, 4 byte packet number)
       0x32,
@@ -2657,8 +2412,6 @@
   unsigned char* p = packet;
   if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -2771,34 +2524,6 @@
        {0x00}}
   };
 
-  PacketFragments packet41 = {
-      // public flags (8 byte connection_id)
-      {"",
-       {0x2C}},
-      // connection_id
-      {"",
-       {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
-      // packet number
-      {"",
-       {0x12, 0x34, 0x56, 0x78}},
-      // frame type (ack frame)
-      // (one ack block, 2 byte largest observed, 2 byte block length)
-      {"",
-       {0xA5}},
-      // num timestamps.
-      {"Unable to read num received packets.",
-       {0x00}},
-      // largest acked
-      {"Unable to read largest acked.",
-       {0x12, 0x34}},
-      // Zero delta time.
-      {"Unable to read ack delay time.",
-       {0x00, 0x00}},
-      // first ack block length.
-      {"Unable to read first ack block length.",
-       {0x12, 0x34}},
-  };
-
   PacketFragments packet44 = {
       // type (short packet, 4 byte packet number)
       {"",
@@ -2868,11 +2593,8 @@
           ? packet99
           : (framer_.transport_version() > QUIC_VERSION_43
                  ? packet44
-                 : (framer_.transport_version() == QUIC_VERSION_41
-                        ? packet41
-                        : (framer_.transport_version() != QUIC_VERSION_35
-                               ? packet39
-                               : packet)));
+                 : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
+                                                                   : packet));
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -2953,34 +2675,6 @@
        {0x00}}
   };
 
-  PacketFragments packet41 = {
-      // public flags (8 byte connection_id)
-      {"",
-       {0x2C}},
-      // connection_id
-      {"",
-       {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
-      // packet number
-      {"",
-       {0x12, 0x34, 0x56, 0x78}},
-      // frame type (ack frame)
-      // (one ack block, 2 byte largest observed, 2 byte block length)
-      {"",
-       {0xA5}},
-      // num timestamps.
-      {"Unable to read num received packets.",
-       {0x00}},
-      // largest acked
-      {"Unable to read largest acked.",
-       {0x12, 0x34}},
-      // Zero delta time.
-      {"Unable to read ack delay time.",
-       {0x00, 0x00}},
-      // first ack block length.
-      {"Unable to read first ack block length.",
-       {0x88, 0x88}},
-  };
-
   PacketFragments packet44 = {
       // type (short header, 4 byte packet number)
       {"",
@@ -3042,11 +2736,8 @@
           ? packet99
           : (framer_.transport_version() > QUIC_VERSION_43
                  ? packet44
-                 : (framer_.transport_version() == QUIC_VERSION_41
-                        ? packet41
-                        : (framer_.transport_version() != QUIC_VERSION_35
-                               ? packet39
-                               : packet)));
+                 : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
+                                                                   : packet));
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
   EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
@@ -3412,46 +3103,6 @@
         { 0x00 }},
   };
 
-  PacketFragments packet41 = {
-      // public flags (8 byte connection_id)
-      {"",
-       { 0x2C }},
-      // connection_id
-      {"",
-       { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }},
-      // packet number
-      {"",
-       { 0x12, 0x34, 0x56, 0x78 }},
-
-      // frame type (ack frame)
-      // (more than one ack block, 2 byte largest observed, 2 byte block length)
-      {"",
-       { 0xB5 }},
-      // num ack blocks ranges.
-      {"Unable to read num of ack blocks.",
-       { 0x01 }},
-      // Number of timestamps.
-      { "Unable to read num received packets.",
-        { 0x00 }},
-      // largest acked
-      {"Unable to read largest acked.",
-       { 0x12, 0x34 }},
-      // Zero delta time.
-      {"Unable to read ack delay time.",
-       { 0x00, 0x00 }},
-      // first ack block length.
-      {"Unable to read first ack block length.",
-       { 0x00, 0x00 }},
-      // gap to next block.
-      { "First block length is zero but ACK is not empty. "
-        "largest acked is 4660, num ack blocks is 1.",
-        { 0x01 }},
-      // ack block length.
-      { "First block length is zero but ACK is not empty. "
-        "largest acked is 4660, num ack blocks is 1.",
-        { 0x0e, 0xaf }},
-  };
-
   PacketFragments packet44 = {
       // type (short header, 4 byte packet number)
       {"",
@@ -3497,10 +3148,8 @@
   PacketFragments& fragments =
       framer_.transport_version() > QUIC_VERSION_43
           ? packet44
-          : (framer_.transport_version() == QUIC_VERSION_41
-                 ? packet41
-                 : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
-                                                                   : packet));
+          : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
+                                                            : packet);
 
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
@@ -3577,34 +3226,6 @@
        {0x00}}
   };
 
-  PacketFragments packet41 = {
-      // public flags (8 byte connection_id)
-      {"",
-       {0x2C}},
-      // connection_id
-      {"",
-       {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
-      // packet number
-      {"",
-       {0x12, 0x34, 0x56, 0x78}},
-      // frame type (ack frame)
-      // (one ack block, 4 byte largest observed, 2 byte block length)
-      {"",
-       {0xA9}},
-      // num timestamps.
-      {"Unable to read num received packets.",
-       {0x00}},
-      // largest acked
-      {"Unable to read largest acked.",
-       {0x12, 0x34, 0x56, 0x78}},
-      // Zero delta time.
-      {"Unable to read ack delay time.",
-       {0x00, 0x00}},
-      // first ack block length.
-      {"Unable to read first ack block length.",
-       {0x12, 0x34}},
-  };
-
   PacketFragments packet44 = {
       // type (short header, 4 byte packet number)
       {"",
@@ -3666,11 +3287,8 @@
           ? packet99
           : (framer_.transport_version() > QUIC_VERSION_43
                  ? packet44
-                 : (framer_.transport_version() == QUIC_VERSION_41
-                        ? packet41
-                        : (framer_.transport_version() != QUIC_VERSION_35
-                               ? packet39
-                               : packet)));
+                 : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
+                                                                   : packet));
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -3830,74 +3448,6 @@
         { 0x32, 0x10 }},
   };
 
-  PacketFragments packet41 = {
-      // public flags (8 byte connection_id)
-      {"",
-       { 0x2C }},
-      // connection_id
-      {"",
-       { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }},
-      // packet number
-      {"",
-       { 0x12, 0x34, 0x56, 0x78 }},
-
-      // frame type (ack frame)
-      // (more than one ack block, 2 byte largest observed, 2 byte block length)
-      {"",
-       { 0xB5 }},
-      // num ack blocks ranges.
-      {"Unable to read num of ack blocks.",
-       { 0x04 }},
-      // Number of timestamps.
-      { "Unable to read num received packets.",
-        { 0x02 }},
-      // largest acked
-      {"Unable to read largest acked.",
-       { 0x12, 0x34 }},
-      // Zero delta time.
-      {"Unable to read ack delay time.",
-       { 0x00, 0x00 }},
-      // first ack block length.
-      {"Unable to read first ack block length.",
-       { 0x00, 0x01 }},
-      // gap to next block.
-      { "Unable to read gap to next ack block.",
-        { 0x01 }},
-      // ack block length.
-      { "Unable to ack block length.",
-        { 0x0e, 0xaf }},
-      // gap to next block.
-      { "Unable to read gap to next ack block.",
-        { 0xff }},
-      // ack block length.
-      { "Unable to ack block length.",
-        { 0x00, 0x00 }},
-      // gap to next block.
-      { "Unable to read gap to next ack block.",
-        { 0x91 }},
-      // ack block length.
-      { "Unable to ack block length.",
-        { 0x01, 0xea }},
-      // gap to next block.
-      { "Unable to read gap to next ack block.",
-        { 0x05 }},
-      // ack block length.
-      { "Unable to ack block length.",
-        { 0x00, 0x04 }},
-      // Delta from largest observed.
-      { "Unable to read sequence delta in received packets.",
-        { 0x01 }},
-      // Delta time.
-      { "Unable to read time delta in received packets.",
-        { 0x76, 0x54, 0x32, 0x10 }},
-      // Delta from largest observed.
-      { "Unable to read sequence delta in received packets.",
-        { 0x02 }},
-      // Delta time.
-      { "Unable to read incremental time delta in received packets.",
-        { 0x32, 0x10 }},
-  };
-
   PacketFragments packet44 = {
       // type (short header, 4 byte packet number)
       {"",
@@ -4028,11 +3578,8 @@
           ? packet99
           : (framer_.transport_version() > QUIC_VERSION_43
                  ? packet44
-                 : (framer_.transport_version() == QUIC_VERSION_41
-                        ? packet41
-                        : (framer_.transport_version() != QUIC_VERSION_35
-                               ? packet39
-                               : packet)));
+                 : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
+                                                                   : packet));
 
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
@@ -4250,31 +3797,6 @@
        {0x00, 0x00, 0x00, 0x01}}
   };
 
-  PacketFragments packet41 = {
-      // public flags (8 byte connection_id)
-      {"",
-       {0x28}},
-      // connection_id
-      {"",
-       {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
-      // packet number
-      {"",
-       {0x12, 0x34, 0x56, 0x78}},
-      // frame type (rst stream frame)
-      {"",
-       {0x01}},
-      // stream id
-      {"Unable to read stream_id.",
-       {0x01, 0x02, 0x03, 0x04}},
-      // error code
-      {"Unable to read rst stream error code.",
-       {0x00, 0x00, 0x00, 0x01}},
-      // sent byte offset
-      {"Unable to read rst stream sent byte offset.",
-       {0x3A, 0x98, 0xFE, 0xDC,
-        0x32, 0x10, 0x76, 0x54}},
-  };
-
   PacketFragments packet44 = {
       // type (short header, 4 byte packet number)
       {"",
@@ -4330,11 +3852,8 @@
           ? packet99
           : (framer_.transport_version() > QUIC_VERSION_43
                  ? packet44
-                 : (framer_.transport_version() == QUIC_VERSION_41
-                        ? packet41
-                        : (framer_.transport_version() != QUIC_VERSION_35
-                               ? packet39
-                               : packet)));
+                 : (framer_.transport_version() != QUIC_VERSION_35 ? packet39
+                                                                   : packet));
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -5470,7 +4989,7 @@
   QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset,
                                QuicStringPiece("hello world!"));
   QuicPaddingFrame padding_frame(2);
-  QuicFrames frames = {QuicFrame(padding_frame), QuicFrame(&stream_frame),
+  QuicFrames frames = {QuicFrame(padding_frame), QuicFrame(stream_frame),
                        QuicFrame(padding_frame)};
 
   // clang-format off
@@ -5528,33 +5047,6 @@
     0x00, 0x00,
   };
 
-  unsigned char packet41[] = {
-    // public flags (8 byte connection_id)
-    0x28,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // packet number
-    0x12, 0x34, 0x56, 0x78,
-
-    // paddings
-    0x00, 0x00,
-    // frame type (stream frame with fin)
-    0xFF,
-    // stream id
-    0x01, 0x02, 0x03, 0x04,
-    // offset
-    0x3A, 0x98, 0xFE, 0xDC,
-    0x32, 0x10, 0x76, 0x54,
-    // data length
-    0x00, 0x0c,
-    // data
-    'h',  'e',  'l',  'l',
-    'o',  ' ',  'w',  'o',
-    'r',  'l',  'd',  '!',
-    // paddings
-    0x00, 0x00,
-  };
-
   unsigned char packet44[] = {
     // type (short header, 4 byte packet number)
     0x32,
@@ -5621,8 +5113,6 @@
   } else if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
     p_size = QUIC_ARRAYSIZE(packet44);
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -5846,7 +5336,7 @@
   QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset,
                                QuicStringPiece("hello world!"));
 
-  QuicFrames frames = {QuicFrame(&stream_frame)};
+  QuicFrames frames = {QuicFrame(stream_frame)};
 
   // clang-format off
   unsigned char packet[] = {
@@ -5891,27 +5381,6 @@
     'r',  'l',  'd',  '!',
   };
 
-  unsigned char packet41[] = {
-    // public flags (8 byte connection_id)
-    0x28,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // packet number
-    0x12, 0x34, 0x56, 0x78,
-
-    // frame type (stream frame with fin and no length)
-    0xFE,
-    // stream id
-    0x01, 0x02, 0x03, 0x04,
-    // offset
-    0x3A, 0x98, 0xFE, 0xDC,
-    0x32, 0x10, 0x76, 0x54,
-    // data
-    'h',  'e',  'l',  'l',
-    'o',  ' ',  'w',  'o',
-    'r',  'l',  'd',  '!',
-  };
-
   unsigned char packet44[] = {
     // type (short header, 4 byte packet number)
     0x32,
@@ -5966,8 +5435,6 @@
   } else if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
     p_size = QUIC_ARRAYSIZE(packet44);
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -5987,7 +5454,7 @@
 
   QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset,
                                QuicStringPiece("hello world!"));
-  QuicFrames frames = {QuicFrame(&stream_frame)};
+  QuicFrames frames = {QuicFrame(stream_frame)};
 
   // clang-format off
   unsigned char packet[] = {
@@ -6030,26 +5497,6 @@
       'h',  'e',  'l',  'l',  'o',  ' ',  'w',  'o',  'r', 'l', 'd', '!',
   };
 
-  unsigned char packet41[] = {
-      // public flags (version, 8 byte connection_id)
-      0x2D,
-      // connection_id
-      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-      // version tag
-      QUIC_VERSION_BYTES,
-      // packet number
-      0x12, 0x34, 0x56, 0x78,
-
-      // frame type (stream frame with fin and no length)
-      0xFE,
-      // stream id
-      0x01, 0x02, 0x03, 0x04,
-      // offset
-      0x3A, 0x98, 0xFE, 0xDC, 0x32, 0x10, 0x76, 0x54,
-      // data
-      'h',  'e',  'l',  'l',  'o',  ' ',  'w',  'o',  'r', 'l', 'd', '!',
-  };
-
   unsigned char packet44[] = {
       // type (long header with packet type ZERO_RTT_PROTECTED)
       0xFC,
@@ -6107,9 +5554,6 @@
   } else if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
     p_size = QUIC_ARRAYSIZE(packet44);
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
-    p_size = QUIC_ARRAYSIZE(packet41);
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -6212,27 +5656,6 @@
       0x00,
   };
 
-  unsigned char packet41[] = {
-      // public flags (8 byte connection_id)
-      0x28,
-      // connection_id
-      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-      // packet number
-      0x12, 0x34, 0x56, 0x78,
-
-      // frame type (ack frame)
-      // (no ack blocks, 2 byte largest observed, 2 byte block length)
-      0xA5,
-      // num timestamps.
-      0x00,
-      // largest acked
-      0x12, 0x34,
-      // Zero delta time.
-      0x00, 0x00,
-      // first ack block length.
-      0x12, 0x34,
-  };
-
   unsigned char packet44[] = {
       // type (short header, 4 byte packet number)
       0x32,
@@ -6282,8 +5705,6 @@
   } else if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
     p_size = QUIC_ARRAYSIZE(packet44);
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -6349,27 +5770,6 @@
       0x00,
   };
 
-  unsigned char packet41[] = {
-      // public flags (8 byte connection_id)
-      0x28,
-      // connection_id
-      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-      // packet number
-      0x12, 0x34, 0x56, 0x78,
-
-      // frame type (ack frame)
-      // (no ack blocks, 4 byte largest observed, 4 byte block length)
-      0xAA,
-      // num timestamps.
-      0x00,
-      // largest acked
-      0x12, 0x34, 0x56, 0x78,
-      // Zero delta time.
-      0x00, 0x00,
-      // first ack block length.
-      0x12, 0x34, 0x56, 0x78,
-  };
-
   unsigned char packet44[] = {
       // type (short header, 4 byte packet number)
       0x32,
@@ -6420,8 +5820,6 @@
   } else if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
     p_size = QUIC_ARRAYSIZE(packet44);
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -6528,45 +5926,6 @@
       0x00,
   };
 
-  unsigned char packet41[] = {
-      // public flags (8 byte connection_id)
-      0x28,
-      // connection_id
-      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-      // packet number
-      0x12, 0x34, 0x56, 0x78,
-
-      // frame type (ack frame)
-      // (has ack blocks, 2 byte largest observed, 2 byte block length)
-      0xB5,
-      // num ack blocks ranges.
-      0x04,
-      // num timestamps.
-      0x00,
-      // largest acked
-      0x12, 0x34,
-      // Zero delta time.
-      0x00, 0x00,
-      // first ack block length.
-      0x00, 0x01,
-      // gap to next block.
-      0x01,
-      // ack block length.
-      0x0e, 0xaf,
-      // gap to next block.
-      0xff,
-      // ack block length.
-      0x00, 0x00,
-      // gap to next block.
-      0x91,
-      // ack block length.
-      0x01, 0xea,
-      // gap to next block.
-      0x05,
-      // ack block length.
-      0x00, 0x04,
-  };
-
   unsigned char packet44[] = {
       // type (short header, 4 byte packet number)
       0x32,
@@ -6649,8 +6008,6 @@
   } else if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
     p_size = QUIC_ARRAYSIZE(packet44);
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -6868,99 +6225,6 @@
       0x00,
   };
 
-  unsigned char packet41[] = {
-      // public flags (8 byte connection_id)
-      0x28,
-      // connection_id
-      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-      // packet number
-      0x12, 0x34, 0x56, 0x78,
-      // frame type (ack frame)
-      // (has ack blocks, 2 byte largest observed, 2 byte block length)
-      0xB5,
-      // num ack blocks ranges.
-      0xff,
-      // num timestamps.
-      0x00,
-      // largest acked
-      0x12, 0x34,
-      // Zero delta time.
-      0x00, 0x00,
-      // first ack block length.
-      0x0f, 0xdd,
-      // 255 = 4 * 63 + 3
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
-  };
-
   unsigned char packet44[] = {
       // type (short header, 4 byte packet number)
       0x32,
@@ -7147,8 +6411,6 @@
   } else if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
     p_size = QUIC_ARRAYSIZE(packet44);
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -7275,25 +6537,6 @@
     0x05, 0x06, 0x07, 0x08,
   };
 
-  unsigned char packet41[] = {
-    // public flags (8 byte connection_id)
-    0x28,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // packet number
-    0x12, 0x34, 0x56, 0x78,
-
-    // frame type (rst stream frame)
-    0x01,
-    // stream id
-    0x01, 0x02, 0x03, 0x04,
-    // error code
-    0x05, 0x06, 0x07, 0x08,
-    // sent byte offset
-    0x08, 0x07, 0x06, 0x05,
-    0x04, 0x03, 0x02, 0x01,
-  };
-
   unsigned char packet44[] = {
     // type (short packet, 4 byte packet number)
     0x32,
@@ -7345,8 +6588,6 @@
   } else if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
     p_size = QUIC_ARRAYSIZE(packet44);
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -8726,9 +7967,21 @@
   // Skip packet number byte which is random in stateless reset packet.
   test::CompareCharArraysWithHexError("constructed packet", data->data(), 1,
                                       AsChars(packet), 1);
-  test::CompareCharArraysWithHexError("constructed packet", data->data() + 2,
-                                      data->length() - 2, AsChars(packet) + 2,
-                                      QUIC_ARRAYSIZE(packet) - 2);
+  const size_t random_bytes_length =
+      data->length() - kPacketHeaderTypeSize - sizeof(kTestStatelessResetToken);
+  if (GetQuicReloadableFlag(quic_more_random_bytes_in_stateless_reset)) {
+    EXPECT_EQ(kMinRandomBytesLengthInStatelessReset, random_bytes_length);
+  } else {
+    EXPECT_EQ(1u, random_bytes_length);
+  }
+  // Verify stateless reset token is correct.
+  test::CompareCharArraysWithHexError(
+      "constructed packet",
+      data->data() + data->length() - sizeof(kTestStatelessResetToken),
+      sizeof(kTestStatelessResetToken),
+      AsChars(packet) + QUIC_ARRAYSIZE(packet) -
+          sizeof(kTestStatelessResetToken),
+      sizeof(kTestStatelessResetToken));
 }
 
 TEST_P(QuicFramerTest, EncryptPacket) {
@@ -9078,43 +8331,6 @@
     0x9A, 0xBE,
   };
 
-  unsigned char packet41[] = {
-    // public flags (8 byte connection_id)
-    0x28,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // packet number
-    0x12, 0x34, 0x56, 0x78,
-
-    // frame type (stream frame with fin)
-    0xFF,
-    // stream id
-    0x01, 0x02, 0x03, 0x04,
-    // offset
-    0x3A, 0x98, 0xFE, 0xDC,
-    0x32, 0x10, 0x76, 0x54,
-    // data length
-    0x00, 0x0c,
-    // data
-    'h',  'e',  'l',  'l',
-    'o',  ' ',  'w',  'o',
-    'r',  'l',  'd',  '!',
-
-    // frame type (ack frame)
-    0xA0,
-    // least packet number awaiting an ack
-    0x12, 0x34, 0x56, 0x78,
-    0x9A, 0xA0,
-    // largest observed packet number
-    0x12, 0x34, 0x56, 0x78,
-    0x9A, 0xBF,
-    // num missing packets
-    0x01,
-    // missing packet
-    0x12, 0x34, 0x56, 0x78,
-    0x9A, 0xBE,
-  };
-
   unsigned char packet44[] = {
     // type (short header, 4 byte packet number)
     0x32,
@@ -9209,8 +8425,6 @@
   } else if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
     p_size = QUIC_ARRAYSIZE(packet44);
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
@@ -9384,31 +8598,6 @@
     'r',  'l',  'd',  '!',
   };
 
-  unsigned char packet41[] = {
-    // public flags (8 byte connection_id)
-    0x2C,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // packet number
-    0x12, 0x34, 0x56, 0x78,
-    // private flags
-    0x00,
-
-    // frame type (stream frame with fin)
-    0xFF,
-    // stream id
-    0x01, 0x02, 0x03, 0x04,
-    // offset
-    0x3A, 0x98, 0xFE, 0xDC,
-    0x32, 0x10, 0x76, 0x54,
-    // data length
-    0x00, 0x0c,
-    // data
-    'h',  'e',  'l',  'l',
-    'o',  ' ',  'w',  'o',
-    'r',  'l',  'd',  '!',
-  };
-
   unsigned char packet44[] = {
     // type (short header, 4 byte packet number)
     0x32,
@@ -9434,8 +8623,6 @@
   unsigned char* p = packet;
   if (framer_.transport_version() > QUIC_VERSION_43) {
     p = packet44;
-  } else if (framer_.transport_version() == QUIC_VERSION_41) {
-    p = packet41;
   } else if (framer_.transport_version() != QUIC_VERSION_35) {
     p = packet39;
   }
diff --git a/net/third_party/quic/core/quic_packet_creator.cc b/net/third_party/quic/core/quic_packet_creator.cc
index 4c50db7..17f666d 100644
--- a/net/third_party/quic/core/quic_packet_creator.cc
+++ b/net/third_party/quic/core/quic_packet_creator.cc
@@ -130,21 +130,19 @@
   CreateStreamFrame(id, write_length, iov_offset, offset, fin, frame);
   // Explicitly disallow multi-packet CHLOs.
   if (FLAGS_quic_enforce_single_packet_chlo &&
-      StreamFrameStartsWithChlo(*frame->stream_frame) &&
-      frame->stream_frame->data_length < write_length) {
+      StreamFrameStartsWithChlo(frame->stream_frame) &&
+      frame->stream_frame.data_length < write_length) {
     const QuicString error_details =
         "Client hello won't fit in a single packet.";
     QUIC_BUG << error_details << " Constructed stream frame length: "
-             << frame->stream_frame->data_length
+             << frame->stream_frame.data_length
              << " CHLO length: " << write_length;
     delegate_->OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, error_details,
                                     ConnectionCloseSource::FROM_SELF);
-    delete frame->stream_frame;
     return false;
   }
   if (!AddFrame(*frame, /*save_retransmittable_frames=*/true)) {
     // Fails if we try to write unencrypted stream data.
-    delete frame->stream_frame;
     return false;
   }
   if (needs_full_padding) {
@@ -227,8 +225,7 @@
   if (iov_offset == write_length) {
     QUIC_BUG_IF(!fin) << "Creating a stream frame with no data or fin.";
     // Create a new packet for the fin, if necessary.
-    *frame =
-        QuicFrame(new QuicStreamFrame(id, true, offset, QuicStringPiece()));
+    *frame = QuicFrame(QuicStreamFrame(id, true, offset, QuicStringPiece()));
     return;
   }
 
@@ -239,7 +236,7 @@
       std::min<size_t>(BytesFree() - min_frame_size, data_size);
 
   bool set_fin = fin && bytes_consumed == data_size;  // Last frame.
-  *frame = QuicFrame(new QuicStreamFrame(id, set_fin, offset, bytes_consumed));
+  *frame = QuicFrame(QuicStreamFrame(id, set_fin, offset, bytes_consumed));
 }
 
 void QuicPacketCreator::ReserializeAllFrames(
@@ -369,19 +366,17 @@
       std::min<size_t>(available_size, remaining_data_size);
 
   const bool set_fin = fin && (bytes_consumed == remaining_data_size);
-  std::unique_ptr<QuicStreamFrame> frame;
-  frame = QuicMakeUnique<QuicStreamFrame>(id, set_fin, stream_offset,
-                                          bytes_consumed);
-  QUIC_DVLOG(1) << ENDPOINT << "Adding frame: " << *frame;
+  QuicStreamFrame frame(id, set_fin, stream_offset, bytes_consumed);
+  QUIC_DVLOG(1) << ENDPOINT << "Adding frame: " << frame;
 
   // TODO(ianswett): AppendTypeByte and AppendStreamFrame could be optimized
   // into one method that takes a QuicStreamFrame, if warranted.
-  if (!framer_->AppendTypeByte(QuicFrame(frame.get()),
+  if (!framer_->AppendTypeByte(QuicFrame(frame),
                                /* no stream frame length */ true, &writer)) {
     QUIC_BUG << "AppendTypeByte failed";
     return;
   }
-  if (!framer_->AppendStreamFrame(*frame, /* no stream frame length */ true,
+  if (!framer_->AppendStreamFrame(frame, /* no stream frame length */ true,
                                   &writer)) {
     QUIC_BUG << "AppendStreamFrame failed";
     return;
@@ -401,7 +396,7 @@
   packet_size_ = 0;
   packet_.encrypted_buffer = encrypted_buffer;
   packet_.encrypted_length = encrypted_length;
-  packet_.retransmittable_frames.push_back(QuicFrame(frame.release()));
+  packet_.retransmittable_frames.push_back(QuicFrame(frame));
   OnSerializedPacket();
 }
 
@@ -415,7 +410,7 @@
 
 bool QuicPacketCreator::HasPendingStreamFramesOfStream(QuicStreamId id) const {
   for (const auto& frame : packet_.retransmittable_frames) {
-    if (frame.type == STREAM_FRAME && frame.stream_frame->stream_id == id) {
+    if (frame.type == STREAM_FRAME && frame.stream_frame.stream_id == id) {
       return true;
     }
   }
@@ -432,7 +427,7 @@
   }
   if (framer_->transport_version() == QUIC_VERSION_99) {
     return QuicDataWriter::GetVarInt62Len(
-        queued_frames_.back().stream_frame->data_length);
+        queued_frames_.back().stream_frame.data_length);
   }
   return kQuicStreamPayloadLengthSize;
 }
@@ -624,7 +619,7 @@
                                  bool save_retransmittable_frames) {
   QUIC_DVLOG(1) << ENDPOINT << "Adding frame: " << frame;
   if (frame.type == STREAM_FRAME &&
-      frame.stream_frame->stream_id != kCryptoStreamId &&
+      frame.stream_frame.stream_id != kCryptoStreamId &&
       packet_.encryption_level == ENCRYPTION_NONE) {
     const QuicString error_details =
         "Cannot send stream data without encryption.";
@@ -653,7 +648,7 @@
     packet_.retransmittable_frames.push_back(frame);
     queued_frames_.push_back(frame);
     if (frame.type == STREAM_FRAME &&
-        frame.stream_frame->stream_id == kCryptoStreamId) {
+        frame.stream_frame.stream_id == kCryptoStreamId) {
       packet_.has_crypto_handshake = IS_HANDSHAKE;
     }
   } else {
diff --git a/net/third_party/quic/core/quic_packet_creator_test.cc b/net/third_party/quic/core/quic_packet_creator_test.cc
index c1655e6..9f73397 100644
--- a/net/third_party/quic/core/quic_packet_creator_test.cc
+++ b/net/third_party/quic/core/quic_packet_creator_test.cc
@@ -183,17 +183,16 @@
                         QuicStreamOffset offset,
                         bool fin) {
     EXPECT_EQ(STREAM_FRAME, frame.type);
-    ASSERT_TRUE(frame.stream_frame);
-    EXPECT_EQ(stream_id, frame.stream_frame->stream_id);
+    EXPECT_EQ(stream_id, frame.stream_frame.stream_id);
     char buf[kMaxPacketSize];
     QuicDataWriter writer(kMaxPacketSize, buf, HOST_BYTE_ORDER);
-    if (frame.stream_frame->data_length > 0) {
-      producer_.WriteStreamData(stream_id, frame.stream_frame->offset,
-                                frame.stream_frame->data_length, &writer);
+    if (frame.stream_frame.data_length > 0) {
+      producer_.WriteStreamData(stream_id, frame.stream_frame.offset,
+                                frame.stream_frame.data_length, &writer);
     }
-    EXPECT_EQ(data, QuicStringPiece(buf, frame.stream_frame->data_length));
-    EXPECT_EQ(offset, frame.stream_frame->offset);
-    EXPECT_EQ(fin, frame.stream_frame->fin);
+    EXPECT_EQ(data, QuicStringPiece(buf, frame.stream_frame.data_length));
+    EXPECT_EQ(offset, frame.stream_frame.offset);
+    EXPECT_EQ(fin, frame.stream_frame.fin);
   }
 
   // Returns the number of bytes consumed by the header of packet, including
@@ -267,14 +266,12 @@
     creator_.set_encryption_level(level);
     frames_.push_back(QuicFrame(new QuicAckFrame()));
     frames_.push_back(QuicFrame(
-        new QuicStreamFrame(kCryptoStreamId, false, 0u, QuicStringPiece())));
+        QuicStreamFrame(kCryptoStreamId, false, 0u, QuicStringPiece())));
     frames_.push_back(QuicFrame(
-        new QuicStreamFrame(kCryptoStreamId, true, 0u, QuicStringPiece())));
+        QuicStreamFrame(kCryptoStreamId, true, 0u, QuicStringPiece())));
     SerializedPacket serialized = SerializeAllFrames(frames_);
     EXPECT_EQ(level, serialized.encryption_level);
     delete frames_[0].ack_frame;
-    delete frames_[1].stream_frame;
-    delete frames_[2].stream_frame;
     frames_.clear();
 
     {
@@ -318,8 +315,8 @@
   // retransmit must sent with the original length and the others do not change.
   QuicPacketCreatorPeer::SetPacketNumberLength(&creator_,
                                                PACKET_2BYTE_PACKET_NUMBER);
-  QuicStreamFrame* stream_frame = new QuicStreamFrame(
-      kCryptoStreamId, /*fin=*/false, 0u, QuicStringPiece());
+  QuicStreamFrame stream_frame(kCryptoStreamId, /*fin=*/false, 0u,
+                               QuicStringPiece());
   QuicFrames frames;
   frames.push_back(QuicFrame(stream_frame));
   char buffer[kMaxPacketSize];
@@ -348,12 +345,11 @@
     EXPECT_CALL(framer_visitor_, OnPacketComplete());
   }
   ProcessPacket(serialized_packet_);
-  delete stream_frame;
 }
 
 TEST_P(QuicPacketCreatorTest, ReserializeCryptoFrameWithForwardSecurity) {
-  QuicStreamFrame* stream_frame = new QuicStreamFrame(
-      kCryptoStreamId, /*fin=*/false, 0u, QuicStringPiece());
+  QuicStreamFrame stream_frame(kCryptoStreamId, /*fin=*/false, 0u,
+                               QuicStringPiece());
   QuicFrames frames;
   frames.push_back(QuicFrame(stream_frame));
   creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
@@ -366,12 +362,10 @@
       .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
   creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
   EXPECT_EQ(ENCRYPTION_NONE, serialized_packet_.encryption_level);
-  delete stream_frame;
 }
 
 TEST_P(QuicPacketCreatorTest, ReserializeFrameWithForwardSecurity) {
-  QuicStreamFrame* stream_frame =
-      new QuicStreamFrame(0u, /*fin=*/false, 0u, QuicStringPiece());
+  QuicStreamFrame stream_frame(0u, /*fin=*/false, 0u, QuicStringPiece());
   QuicFrames frames;
   frames.push_back(QuicFrame(stream_frame));
   creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
@@ -384,7 +378,6 @@
       .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
   creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
   EXPECT_EQ(ENCRYPTION_FORWARD_SECURE, serialized_packet_.encryption_level);
-  delete stream_frame;
 }
 
 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPadding) {
@@ -404,7 +397,6 @@
       .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
   creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
   EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length);
-  delete frame.stream_frame;
 }
 
 TEST_P(QuicPacketCreatorTest, DoNotRetransmitPendingPadding) {
@@ -457,7 +449,6 @@
   creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize);
 
   EXPECT_EQ(packet_size, serialized_packet_.encrypted_length);
-  delete frame.stream_frame;
 }
 
 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) {
@@ -498,7 +489,6 @@
       EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length);
     }
 
-    delete frame.stream_frame;
     frames_.clear();
   }
 }
@@ -532,8 +522,7 @@
   MakeIOVector("test", &iov_);
   ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, &iov_, 1u, iov_.iov_len, 0u,
                                    0u, false, false, &frame));
-  ASSERT_TRUE(frame.stream_frame);
-  size_t consumed = frame.stream_frame->data_length;
+  size_t consumed = frame.stream_frame.data_length;
   EXPECT_EQ(4u, consumed);
   CheckStreamFrame(frame, 1u, "test", 0u, false);
   EXPECT_TRUE(creator_.HasPendingFrames());
@@ -544,8 +533,7 @@
   MakeIOVector("test", &iov_);
   ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, &iov_, 1u, iov_.iov_len, 0u,
                                    0u, true, false, &frame));
-  ASSERT_TRUE(frame.stream_frame);
-  size_t consumed = frame.stream_frame->data_length;
+  size_t consumed = frame.stream_frame.data_length;
   EXPECT_EQ(4u, consumed);
   CheckStreamFrame(frame, 1u, "test", 0u, true);
   EXPECT_TRUE(creator_.HasPendingFrames());
@@ -555,8 +543,7 @@
   QuicFrame frame;
   ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, nullptr, 0u, 0u, 0u, 0u,
                                    true, false, &frame));
-  ASSERT_TRUE(frame.stream_frame);
-  size_t consumed = frame.stream_frame->data_length;
+  size_t consumed = frame.stream_frame.data_length;
   EXPECT_EQ(0u, consumed);
   CheckStreamFrame(frame, 1u, QuicString(), 0u, true);
   EXPECT_TRUE(creator_.HasPendingFrames());
@@ -584,8 +571,7 @@
       ASSERT_TRUE(creator_.ConsumeData(kGetNthClientInitiatedStreamId1, &iov_,
                                        1u, iov_.iov_len, 0u, kOffset, false,
                                        false, &frame));
-      ASSERT_TRUE(frame.stream_frame);
-      size_t bytes_consumed = frame.stream_frame->data_length;
+      size_t bytes_consumed = frame.stream_frame.data_length;
       EXPECT_LT(0u, bytes_consumed);
       creator_.Flush();
     }
@@ -609,7 +595,6 @@
     ASSERT_TRUE(creator_.ConsumeData(kGetNthClientInitiatedStreamId1, &iov_, 1u,
                                      iov_.iov_len, 0u, kOffset, false, false,
                                      &frame));
-    ASSERT_TRUE(frame.stream_frame);
 
     // BytesFree() returns bytes available for the next frame, which will
     // be two bytes smaller since the stream frame would need to be grown.
@@ -644,8 +629,7 @@
             Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
     ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, &iov_, 1u, iov_.iov_len,
                                      0u, kOffset, false, true, &frame));
-    ASSERT_TRUE(frame.stream_frame);
-    size_t bytes_consumed = frame.stream_frame->data_length;
+    size_t bytes_consumed = frame.stream_frame.data_length;
     EXPECT_LT(0u, bytes_consumed);
     creator_.Flush();
     ASSERT_TRUE(serialized_packet_.encrypted_buffer);
@@ -683,8 +667,7 @@
     ASSERT_TRUE(creator_.ConsumeData(kGetNthClientInitiatedStreamId1, &iov_, 1u,
                                      iov_.iov_len, 0u, kOffset, false, false,
                                      &frame));
-    ASSERT_TRUE(frame.stream_frame);
-    size_t bytes_consumed = frame.stream_frame->data_length;
+    size_t bytes_consumed = frame.stream_frame.data_length;
     EXPECT_LT(0u, bytes_consumed);
     creator_.Flush();
     ASSERT_TRUE(serialized_packet_.encrypted_buffer);
@@ -769,13 +752,8 @@
   QuicPacketCreatorPeer::SetPacketNumber(&creator_,
                                          UINT64_C(64) * 256 * 256 * 256 * 256);
   creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize);
-  if (GetParam().version.transport_version != QUIC_VERSION_41) {
-    EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER,
-              QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
-  } else {
-    EXPECT_EQ(PACKET_8BYTE_PACKET_NUMBER,
-              QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
-  }
+  EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER,
+            QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
 }
 
 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthCwnd) {
@@ -803,13 +781,8 @@
 
   creator_.UpdatePacketNumberLength(
       1, UINT64_C(1000) * 256 * 256 * 256 * 256 / kDefaultMaxPacketSize);
-  if (GetParam().version.transport_version != QUIC_VERSION_41) {
-    EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER,
-              QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
-  } else {
-    EXPECT_EQ(PACKET_8BYTE_PACKET_NUMBER,
-              QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
-  }
+  EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER,
+            QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
 }
 
 TEST_P(QuicPacketCreatorTest, SerializeFrame) {
@@ -817,9 +790,8 @@
     creator_.StopSendingVersion();
   }
   frames_.push_back(QuicFrame(
-      new QuicStreamFrame(kCryptoStreamId, false, 0u, QuicStringPiece())));
+      QuicStreamFrame(kCryptoStreamId, false, 0u, QuicStringPiece())));
   SerializedPacket serialized = SerializeAllFrames(frames_);
-  delete frames_[0].stream_frame;
 
   QuicPacketHeader header;
   {
@@ -858,8 +830,7 @@
       .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
   ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, &iov_, 1u, iov_.iov_len, 0u,
                                    0u, true, false, &frame));
-  ASSERT_TRUE(frame.stream_frame);
-  size_t consumed = frame.stream_frame->data_length;
+  size_t consumed = frame.stream_frame.data_length;
   EXPECT_EQ(payload_length, consumed);
   const QuicString payload(payload_length, 'a');
   CheckStreamFrame(frame, 1u, payload, 0u, false);
@@ -895,8 +866,7 @@
   MakeIOVector("test", &iov_);
   ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, &iov_, 1u, iov_.iov_len, 0u,
                                    0u, false, false, &frame));
-  ASSERT_TRUE(frame.stream_frame);
-  size_t consumed = frame.stream_frame->data_length;
+  size_t consumed = frame.stream_frame.data_length;
   EXPECT_EQ(4u, consumed);
   EXPECT_TRUE(creator_.HasPendingFrames());
   EXPECT_TRUE(creator_.HasPendingStreamFramesOfStream(kCryptoStreamId));
@@ -917,7 +887,6 @@
   const QuicFrames& retransmittable = serialized_packet_.retransmittable_frames;
   ASSERT_EQ(1u, retransmittable.size());
   EXPECT_EQ(STREAM_FRAME, retransmittable[0].type);
-  ASSERT_TRUE(retransmittable[0].stream_frame);
   EXPECT_TRUE(serialized_packet_.has_ack);
   EXPECT_EQ(10u, serialized_packet_.largest_acked);
   DeleteSerializedPacket();
@@ -956,7 +925,6 @@
   const QuicFrames& retransmittable = serialized_packet_.retransmittable_frames;
   ASSERT_EQ(1u, retransmittable.size());
   EXPECT_EQ(STREAM_FRAME, retransmittable[0].type);
-  ASSERT_TRUE(retransmittable[0].stream_frame);
   DeleteSerializedPacket();
 
   EXPECT_FALSE(creator_.HasPendingFrames());
@@ -972,7 +940,7 @@
   EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _));
   QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u,
                                QuicStringPiece());
-  EXPECT_QUIC_BUG(creator_.AddSavedFrame(QuicFrame(&stream_frame)),
+  EXPECT_QUIC_BUG(creator_.AddSavedFrame(QuicFrame(stream_frame)),
                   "Cannot send stream data without encryption.");
 }
 
@@ -1042,8 +1010,8 @@
 }
 
 TEST_P(QuicPacketCreatorTest, SendPendingPaddingInRetransmission) {
-  QuicStreamFrame* stream_frame = new QuicStreamFrame(
-      kCryptoStreamId, /*fin=*/false, 0u, QuicStringPiece());
+  QuicStreamFrame stream_frame(kCryptoStreamId, /*fin=*/false, 0u,
+                               QuicStringPiece());
   QuicFrames frames;
   frames.push_back(QuicFrame(stream_frame));
   char buffer[kMaxPacketSize];
@@ -1067,7 +1035,6 @@
     EXPECT_CALL(framer_visitor_, OnPacketComplete());
   }
   ProcessPacket(serialized_packet_);
-  delete stream_frame;
 }
 
 TEST_P(QuicPacketCreatorTest, SendPacketAfterFullPaddingRetransmission) {
@@ -1103,7 +1070,6 @@
     EXPECT_CALL(framer_visitor_, OnPacketComplete());
   }
   ProcessPacket(serialized_packet_);
-  delete frame.stream_frame;
 
   creator_.ConsumeData(kCryptoStreamId, &iov_, 1u, iov_.iov_len, 0u, 0u, false,
                        false, &frame);
@@ -1147,7 +1113,6 @@
   creator_.ConsumeData(kCryptoStreamId, &iov_, 1u, iov_.iov_len, 0u, 0u, false,
                        false, &frame);
   creator_.Flush();
-  delete frame.stream_frame;
   // 1 byte padding is sent.
   EXPECT_EQ(pending_padding_bytes - 1, creator_.pending_padding_bytes());
   // Send stream frame of size kStreamFramePayloadSize + 1.
@@ -1156,7 +1121,6 @@
                        kStreamFramePayloadSize, false, false, &frame);
   // No padding is sent.
   creator_.Flush();
-  delete frame.stream_frame;
   EXPECT_EQ(pending_padding_bytes - 1, creator_.pending_padding_bytes());
   // Flush all paddings.
   while (creator_.pending_padding_bytes() > 0) {
diff --git a/net/third_party/quic/core/quic_packet_generator.cc b/net/third_party/quic/core/quic_packet_generator.cc
index e88bedc..01ad810 100644
--- a/net/third_party/quic/core/quic_packet_generator.cc
+++ b/net/third_party/quic/core/quic_packet_generator.cc
@@ -100,7 +100,7 @@
     }
 
     // A stream frame is created and added.
-    size_t bytes_consumed = frame.stream_frame->data_length;
+    size_t bytes_consumed = frame.stream_frame.data_length;
     total_bytes_consumed += bytes_consumed;
     fin_consumed = fin && total_bytes_consumed == write_length;
     if (fin_consumed && state == FIN_AND_PADDING) {
diff --git a/net/third_party/quic/core/quic_packet_generator_test.cc b/net/third_party/quic/core/quic_packet_generator_test.cc
index 721039d3..bf93e18e 100644
--- a/net/third_party/quic/core/quic_packet_generator_test.cc
+++ b/net/third_party/quic/core/quic_packet_generator_test.cc
@@ -588,9 +588,9 @@
   SerializedPacket packet = packets_.back();
   EXPECT_TRUE(!packet.retransmittable_frames.empty());
   EXPECT_EQ(STREAM_FRAME, packet.retransmittable_frames.front().type);
-  QuicStreamFrame* stream_frame =
+  const QuicStreamFrame& stream_frame =
       packet.retransmittable_frames.front().stream_frame;
-  EXPECT_EQ(10000u, stream_frame->data_length + stream_frame->offset);
+  EXPECT_EQ(10000u, stream_frame.data_length + stream_frame.offset);
 }
 
 TEST_F(QuicPacketGeneratorTest, ConsumeDataLarge) {
@@ -614,9 +614,9 @@
   SerializedPacket packet = packets_.back();
   EXPECT_TRUE(!packet.retransmittable_frames.empty());
   EXPECT_EQ(STREAM_FRAME, packet.retransmittable_frames.front().type);
-  QuicStreamFrame* stream_frame =
+  const QuicStreamFrame& stream_frame =
       packet.retransmittable_frames.front().stream_frame;
-  EXPECT_EQ(10000u, stream_frame->data_length + stream_frame->offset);
+  EXPECT_EQ(10000u, stream_frame.data_length + stream_frame.offset);
 }
 
 TEST_F(QuicPacketGeneratorTest, ConsumeDataLargeSendAckFalse) {
@@ -649,9 +649,9 @@
   SerializedPacket packet = packets_.back();
   EXPECT_TRUE(!packet.retransmittable_frames.empty());
   EXPECT_EQ(STREAM_FRAME, packet.retransmittable_frames.front().type);
-  QuicStreamFrame* stream_frame =
+  const QuicStreamFrame& stream_frame =
       packet.retransmittable_frames.front().stream_frame;
-  EXPECT_EQ(10000u, stream_frame->data_length + stream_frame->offset);
+  EXPECT_EQ(10000u, stream_frame.data_length + stream_frame.offset);
 }
 
 TEST_F(QuicPacketGeneratorTest, ConsumeDataLargeSendAckTrue) {
@@ -688,9 +688,9 @@
   SerializedPacket packet = packets_.back();
   EXPECT_TRUE(!packet.retransmittable_frames.empty());
   EXPECT_EQ(STREAM_FRAME, packet.retransmittable_frames.front().type);
-  QuicStreamFrame* stream_frame =
+  const QuicStreamFrame& stream_frame =
       packet.retransmittable_frames.front().stream_frame;
-  EXPECT_EQ(10000u, stream_frame->data_length + stream_frame->offset);
+  EXPECT_EQ(10000u, stream_frame.data_length + stream_frame.offset);
 }
 
 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) {
diff --git a/net/third_party/quic/core/quic_sent_packet_manager_test.cc b/net/third_party/quic/core/quic_sent_packet_manager_test.cc
index 9658206f..f01310c 100644
--- a/net/third_party/quic/core/quic_sent_packet_manager_test.cc
+++ b/net/third_party/quic/core/quic_sent_packet_manager_test.cc
@@ -60,7 +60,7 @@
                              HAS_RETRANSMITTABLE_DATA));
     SerializedPacket packet(CreatePacket(packet_number, false));
     packet.retransmittable_frames.push_back(
-        QuicFrame(new QuicStreamFrame(1, false, 0, QuicStringPiece())));
+        QuicFrame(QuicStreamFrame(1, false, 0, QuicStringPiece())));
     packet.has_crypto_handshake = IS_HANDSHAKE;
     manager_.OnPacketSent(&packet, 0, clock_.Now(), HANDSHAKE_RETRANSMISSION,
                           HAS_RETRANSMITTABLE_DATA);
@@ -252,8 +252,8 @@
     SerializedPacket packet(packet_number, PACKET_4BYTE_PACKET_NUMBER, nullptr,
                             kDefaultLength, false, false);
     if (retransmittable) {
-      packet.retransmittable_frames.push_back(QuicFrame(
-          new QuicStreamFrame(kStreamId, false, 0, QuicStringPiece())));
+      packet.retransmittable_frames.push_back(
+          QuicFrame(QuicStreamFrame(kStreamId, false, 0, QuicStringPiece())));
     }
     return packet;
   }
@@ -272,7 +272,7 @@
                              HAS_RETRANSMITTABLE_DATA));
     SerializedPacket packet(CreatePacket(packet_number, false));
     packet.retransmittable_frames.push_back(
-        QuicFrame(new QuicStreamFrame(1, false, 0, QuicStringPiece())));
+        QuicFrame(QuicStreamFrame(1, false, 0, QuicStringPiece())));
     packet.has_crypto_handshake = IS_HANDSHAKE;
     manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION,
                           HAS_RETRANSMITTABLE_DATA);
diff --git a/net/third_party/quic/core/quic_session.cc b/net/third_party/quic/core/quic_session.cc
index e3bdb1d..4136c6e 100644
--- a/net/third_party/quic/core/quic_session.cc
+++ b/net/third_party/quic/core/quic_session.cc
@@ -1060,12 +1060,12 @@
     return control_frame_manager_.OnControlFrameAcked(frame);
   }
   bool new_stream_data_acked = false;
-  QuicStream* stream = GetStream(frame.stream_frame->stream_id);
+  QuicStream* stream = GetStream(frame.stream_frame.stream_id);
   // Stream can already be reset when sent frame gets acked.
   if (stream != nullptr) {
     new_stream_data_acked = stream->OnStreamFrameAcked(
-        frame.stream_frame->offset, frame.stream_frame->data_length,
-        frame.stream_frame->fin, ack_delay_time);
+        frame.stream_frame.offset, frame.stream_frame.data_length,
+        frame.stream_frame.fin, ack_delay_time);
     if (!stream->HasPendingRetransmission()) {
       streams_with_pending_retransmission_.erase(stream->id());
     }
@@ -1093,18 +1093,18 @@
     control_frame_manager_.OnControlFrameLost(frame);
     return;
   }
-  QuicStream* stream = GetStream(frame.stream_frame->stream_id);
+  QuicStream* stream = GetStream(frame.stream_frame.stream_id);
   if (stream == nullptr) {
     return;
   }
-  stream->OnStreamFrameLost(frame.stream_frame->offset,
-                            frame.stream_frame->data_length,
-                            frame.stream_frame->fin);
+  stream->OnStreamFrameLost(frame.stream_frame.offset,
+                            frame.stream_frame.data_length,
+                            frame.stream_frame.fin);
   if (stream->HasPendingRetransmission() &&
       !QuicContainsKey(streams_with_pending_retransmission_,
-                       frame.stream_frame->stream_id)) {
+                       frame.stream_frame.stream_id)) {
     streams_with_pending_retransmission_.insert(
-        std::make_pair(frame.stream_frame->stream_id, true));
+        std::make_pair(frame.stream_frame.stream_id, true));
   }
 }
 
@@ -1120,11 +1120,11 @@
       }
       continue;
     }
-    QuicStream* stream = GetStream(frame.stream_frame->stream_id);
+    QuicStream* stream = GetStream(frame.stream_frame.stream_id);
     if (stream != nullptr &&
-        !stream->RetransmitStreamData(frame.stream_frame->offset,
-                                      frame.stream_frame->data_length,
-                                      frame.stream_frame->fin)) {
+        !stream->RetransmitStreamData(frame.stream_frame.offset,
+                                      frame.stream_frame.data_length,
+                                      frame.stream_frame.fin)) {
       break;
     }
   }
@@ -1134,11 +1134,11 @@
   if (frame.type != STREAM_FRAME) {
     return control_frame_manager_.IsControlFrameOutstanding(frame);
   }
-  QuicStream* stream = GetStream(frame.stream_frame->stream_id);
+  QuicStream* stream = GetStream(frame.stream_frame.stream_id);
   return stream != nullptr &&
-         stream->IsStreamFrameOutstanding(frame.stream_frame->offset,
-                                          frame.stream_frame->data_length,
-                                          frame.stream_frame->fin);
+         stream->IsStreamFrameOutstanding(frame.stream_frame.offset,
+                                          frame.stream_frame.data_length,
+                                          frame.stream_frame.fin);
 }
 
 bool QuicSession::HasPendingCryptoData() const {
diff --git a/net/third_party/quic/core/quic_session_test.cc b/net/third_party/quic/core/quic_session_test.cc
index 8d0d234..e299bef 100644
--- a/net/third_party/quic/core/quic_session_test.cc
+++ b/net/third_party/quic/core/quic_session_test.cc
@@ -1290,9 +1290,9 @@
   EXPECT_CALL(*crypto_stream, HasPendingRetransmission())
       .WillOnce(Return(true));
   EXPECT_CALL(*stream2, HasPendingRetransmission()).WillOnce(Return(true));
-  session_.OnFrameLost(QuicFrame(&frame3));
-  session_.OnFrameLost(QuicFrame(&frame1));
-  session_.OnFrameLost(QuicFrame(&frame2));
+  session_.OnFrameLost(QuicFrame(frame3));
+  session_.OnFrameLost(QuicFrame(frame1));
+  session_.OnFrameLost(QuicFrame(frame2));
   EXPECT_TRUE(session_.WillingAndAbleToWrite());
 
   // Mark streams 2 and 4 write blocked.
@@ -1347,9 +1347,9 @@
   EXPECT_CALL(*stream6, HasPendingRetransmission()).WillOnce(Return(true));
   EXPECT_CALL(*stream4, HasPendingRetransmission()).WillOnce(Return(true));
   EXPECT_CALL(*stream2, HasPendingRetransmission()).WillOnce(Return(true));
-  session_.OnFrameLost(QuicFrame(&frame3));
-  session_.OnFrameLost(QuicFrame(&frame2));
-  session_.OnFrameLost(QuicFrame(&frame1));
+  session_.OnFrameLost(QuicFrame(frame3));
+  session_.OnFrameLost(QuicFrame(frame2));
+  session_.OnFrameLost(QuicFrame(frame1));
 
   session_.MarkConnectionLevelWriteBlocked(stream2->id());
   session_.MarkConnectionLevelWriteBlocked(stream4->id());
@@ -1390,10 +1390,10 @@
   QuicStreamFrame frame3(stream6->id(), false, 0, 9);
   QuicWindowUpdateFrame window_update(1, stream2->id(), 9);
   QuicFrames frames;
-  frames.push_back(QuicFrame(&frame1));
+  frames.push_back(QuicFrame(frame1));
   frames.push_back(QuicFrame(&window_update));
-  frames.push_back(QuicFrame(&frame2));
-  frames.push_back(QuicFrame(&frame3));
+  frames.push_back(QuicFrame(frame2));
+  frames.push_back(QuicFrame(frame3));
   EXPECT_FALSE(session_.WillingAndAbleToWrite());
 
   EXPECT_CALL(*stream2, RetransmitStreamData(_, _, _)).WillOnce(Return(true));
@@ -1417,7 +1417,7 @@
       .Times(2)
       .WillOnce(Return(true))
       .WillOnce(Return(false));
-  session_.OnFrameLost(QuicFrame(&frame));
+  session_.OnFrameLost(QuicFrame(frame));
   // Retransmit stream data causes connection close. Stream has not sent fin
   // yet, so an RST is sent.
   EXPECT_CALL(*stream, OnCanWrite())
diff --git a/net/third_party/quic/core/quic_stream.cc b/net/third_party/quic/core/quic_stream.cc
index 7f7d0a6c..4948266a1 100644
--- a/net/third_party/quic/core/quic_stream.cc
+++ b/net/third_party/quic/core/quic_stream.cc
@@ -79,7 +79,8 @@
       send_buffer_(
           session->connection()->helper()->GetStreamSendBufferAllocator()),
       buffered_data_threshold_(GetQuicFlag(FLAGS_quic_buffered_data_threshold)),
-      is_static_(is_static) {
+      is_static_(is_static),
+      deadline_(QuicTime::Zero()) {
   SetFromConfig();
   session_->RegisterStreamPriority(id, is_static_, priority_);
 }
@@ -281,6 +282,10 @@
 }
 
 void QuicStream::OnCanWrite() {
+  if (HasDeadlinePassed()) {
+    OnDeadlinePassed();
+    return;
+  }
   if (HasPendingRetransmission()) {
     WritePendingRetransmission();
     // Exit early to allow other streams to write pending retransmissions if
@@ -645,6 +650,10 @@
 bool QuicStream::RetransmitStreamData(QuicStreamOffset offset,
                                       QuicByteCount data_length,
                                       bool fin) {
+  if (HasDeadlinePassed()) {
+    OnDeadlinePassed();
+    return true;
+  }
   QuicIntervalSet<QuicStreamOffset> retransmission(offset,
                                                    offset + data_length);
   retransmission.Difference(bytes_acked());
@@ -849,4 +858,41 @@
   }
 }
 
+bool QuicStream::MaybeSetTtl(QuicTime::Delta ttl) {
+  if (is_static_) {
+    QUIC_BUG << "Cannot set TTL of a static stream.";
+    return false;
+  }
+  if (deadline_.IsInitialized()) {
+    QUIC_DLOG(WARNING) << "Deadline has already been set.";
+    return false;
+  }
+  if (!session()->session_decides_what_to_write()) {
+    QUIC_DLOG(WARNING) << "This session does not support stream TTL yet.";
+    return false;
+  }
+  QuicTime now = session()->connection()->clock()->ApproximateNow();
+  deadline_ = now + ttl;
+  return true;
+}
+
+bool QuicStream::HasDeadlinePassed() const {
+  if (!deadline_.IsInitialized()) {
+    // No deadline has been set.
+    return false;
+  }
+  DCHECK(session()->session_decides_what_to_write());
+  QuicTime now = session()->connection()->clock()->ApproximateNow();
+  if (now < deadline_) {
+    return false;
+  }
+  // TTL expired.
+  QUIC_DVLOG(1) << "stream " << id() << " deadline has passed";
+  return true;
+}
+
+void QuicStream::OnDeadlinePassed() {
+  Reset(QUIC_STREAM_TTL_EXPIRED);
+}
+
 }  // namespace quic
diff --git a/net/third_party/quic/core/quic_stream.h b/net/third_party/quic/core/quic_stream.h
index daa5ff49..dcff9427 100644
--- a/net/third_party/quic/core/quic_stream.h
+++ b/net/third_party/quic/core/quic_stream.h
@@ -251,6 +251,10 @@
                                     QuicByteCount data_length,
                                     bool fin);
 
+  // Sets deadline of this stream to be now + |ttl|, returns true if the setting
+  // succeeds.
+  bool MaybeSetTtl(QuicTime::Delta ttl);
+
   // Same as WritevData except data is provided in reference counted memory so
   // that data copy is avoided.
   QuicConsumedData WriteMemSlices(QuicMemSliceSpan span, bool fin);
@@ -314,6 +318,10 @@
   // Writes pending retransmissions if any.
   virtual void WritePendingRetransmission();
 
+  // This is called when stream tries to retransmit data after deadline_. Make
+  // this virtual so that subclasses can implement their own logics.
+  virtual void OnDeadlinePassed();
+
   bool fin_buffered() const { return fin_buffered_; }
 
   const QuicSession* session() const { return session_; }
@@ -354,6 +362,9 @@
   // WriteOrBufferData, Writev and WriteBufferedData.
   void WriteBufferedData();
 
+  // Returns true if deadline_ has passed.
+  bool HasDeadlinePassed() const;
+
   QuicStreamSequencer sequencer_;
   QuicStreamId id_;
   // Pointer to the owning QuicSession object.
@@ -435,6 +446,9 @@
   // If true, then this stream has precedence over other streams for write
   // scheduling.
   const bool is_static_;
+
+  // If initialized, reset this stream at this deadline.
+  QuicTime deadline_;
 };
 
 }  // namespace quic
diff --git a/net/third_party/quic/core/quic_stream_sequencer.cc b/net/third_party/quic/core/quic_stream_sequencer.cc
index 140103c..5566983 100644
--- a/net/third_party/quic/core/quic_stream_sequencer.cc
+++ b/net/third_party/quic/core/quic_stream_sequencer.cc
@@ -139,7 +139,11 @@
 
 void QuicStreamSequencer::Read(QuicString* buffer) {
   DCHECK(!blocked_);
-  buffered_frames_.Read(buffer);
+  buffer->resize(buffer->size() + ReadableBytes());
+  iovec iov;
+  iov.iov_len = ReadableBytes();
+  iov.iov_base = &(*buffer)[buffer->size() - iov.iov_len];
+  Readv(&iov, 1);
 }
 
 int QuicStreamSequencer::Readv(const struct iovec* iov, size_t iov_len) {
diff --git a/net/third_party/quic/core/quic_stream_sequencer.h b/net/third_party/quic/core/quic_stream_sequencer.h
index f536f45a..b3e006d 100644
--- a/net/third_party/quic/core/quic_stream_sequencer.h
+++ b/net/third_party/quic/core/quic_stream_sequencer.h
@@ -59,7 +59,7 @@
   // to do zero-copy reads.
   void MarkConsumed(size_t num_bytes);
 
-  // Copies all of the readable data into |buffer| and marks all of the copied
+  // Appends all of the readable data to |buffer| and marks all of the appended
   // data as consumed.
   void Read(QuicString* buffer);
 
diff --git a/net/third_party/quic/core/quic_stream_sequencer_buffer.cc b/net/third_party/quic/core/quic_stream_sequencer_buffer.cc
index 7bb6d3b..e1549ae 100644
--- a/net/third_party/quic/core/quic_stream_sequencer_buffer.cc
+++ b/net/third_party/quic/core/quic_stream_sequencer_buffer.cc
@@ -339,14 +339,6 @@
   return GetReadableRegions(iov, 1) == 1;
 }
 
-void QuicStreamSequencerBuffer::Read(QuicString* buffer) {
-  iovec iov;
-  while (GetReadableRegion(&iov)) {
-    buffer->append(reinterpret_cast<const char*>(iov.iov_base), iov.iov_len);
-    MarkConsumed(iov.iov_len);
-  }
-}
-
 bool QuicStreamSequencerBuffer::MarkConsumed(size_t bytes_used) {
   if (bytes_used > ReadableBytes()) {
     return false;
diff --git a/net/third_party/quic/core/quic_stream_sequencer_buffer.h b/net/third_party/quic/core/quic_stream_sequencer_buffer.h
index 45368dd..4c81d37 100644
--- a/net/third_party/quic/core/quic_stream_sequencer_buffer.h
+++ b/net/third_party/quic/core/quic_stream_sequencer_buffer.h
@@ -128,10 +128,6 @@
   // Returns false if there is no readable region available.
   bool GetReadableRegion(iovec* iov) const;
 
-  // Copies all of the readable data into |buffer| and marks all of the copied
-  // data as consumed.
-  void Read(QuicString* buffer);
-
   // Called after GetReadableRegions() to free up |bytes_used| space if these
   // bytes are processed.
   // Pre-requisite: bytes_used <= available bytes to read.
diff --git a/net/third_party/quic/core/quic_stream_sequencer_test.cc b/net/third_party/quic/core/quic_stream_sequencer_test.cc
index 3dd4db9..2ec6e20f 100644
--- a/net/third_party/quic/core/quic_stream_sequencer_test.cc
+++ b/net/third_party/quic/core/quic_stream_sequencer_test.cc
@@ -652,6 +652,40 @@
   sequencer_->OnStreamFrame(frame);
 }
 
+TEST_F(QuicStreamSequencerTest, ReadSingleFrame) {
+  EXPECT_CALL(stream_, OnDataAvailable());
+  OnFrame(0u, "abc");
+  QuicString actual;
+  sequencer_->Read(&actual);
+  EXPECT_EQ("abc", actual);
+  EXPECT_EQ(0u, sequencer_->NumBytesBuffered());
+  EXPECT_EQ(3u, stream_.flow_controller()->bytes_consumed());
+}
+
+TEST_F(QuicStreamSequencerTest, ReadMultipleFramesWithMissingFrame) {
+  EXPECT_CALL(stream_, OnDataAvailable());
+  OnFrame(0u, "abc");
+  OnFrame(3u, "def");
+  OnFrame(6u, "ghi");
+  OnFrame(10u, "xyz");  // Byte 9 is missing.
+  QuicString actual;
+  sequencer_->Read(&actual);
+  EXPECT_EQ("abcdefghi", actual);
+  EXPECT_EQ(3u, sequencer_->NumBytesBuffered());
+  EXPECT_EQ(9u, stream_.flow_controller()->bytes_consumed());
+}
+
+TEST_F(QuicStreamSequencerTest, ReadAndAppendToString) {
+  EXPECT_CALL(stream_, OnDataAvailable());
+  OnFrame(0u, "def");
+  OnFrame(3u, "ghi");
+  QuicString actual = "abc";
+  sequencer_->Read(&actual);
+  EXPECT_EQ("abcdefghi", actual);
+  EXPECT_EQ(0u, sequencer_->NumBytesBuffered());
+  EXPECT_EQ(6u, stream_.flow_controller()->bytes_consumed());
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace quic
diff --git a/net/third_party/quic/core/quic_stream_test.cc b/net/third_party/quic/core/quic_stream_test.cc
index fade002..a5907131 100644
--- a/net/third_party/quic/core/quic_stream_test.cc
+++ b/net/third_party/quic/core/quic_stream_test.cc
@@ -1262,6 +1262,50 @@
   EXPECT_TRUE(stream_->RetransmitStreamData(0, 8, true));
 }
 
+TEST_F(QuicStreamTest, ResetStreamOnTtlExpiresRetransmitLostData) {
+  Initialize(kShouldProcessData);
+
+  EXPECT_CALL(*session_, WritevData(_, stream_->id(), 200, 0, FIN))
+      .WillOnce(Invoke(MockQuicSession::ConsumeData));
+  QuicString body(200, 'a');
+  stream_->WriteOrBufferData(body, true, nullptr);
+
+  EXPECT_TRUE(session_->connection()->clock()->WallNow().IsZero());
+  // Set TTL to be 1 s.
+  QuicTime::Delta ttl = QuicTime::Delta::FromSeconds(1);
+  ASSERT_TRUE(stream_->MaybeSetTtl(ttl));
+  // Verify data gets retransmitted because TTL does not expire.
+  EXPECT_CALL(*session_, WritevData(_, stream_->id(), 100, 0, NO_FIN))
+      .WillOnce(Invoke(MockQuicSession::ConsumeData));
+  EXPECT_TRUE(stream_->RetransmitStreamData(0, 100, false));
+  stream_->OnStreamFrameLost(100, 100, true);
+  EXPECT_TRUE(stream_->HasPendingRetransmission());
+
+  connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
+  // Verify stream gets reset because TTL expires.
+  EXPECT_CALL(*session_, SendRstStream(_, QUIC_STREAM_TTL_EXPIRED, _)).Times(1);
+  stream_->OnCanWrite();
+}
+
+TEST_F(QuicStreamTest, ResetStreamOnTtlExpiresEarlyRetransmitData) {
+  Initialize(kShouldProcessData);
+
+  EXPECT_CALL(*session_, WritevData(_, stream_->id(), 200, 0, FIN))
+      .WillOnce(Invoke(MockQuicSession::ConsumeData));
+  QuicString body(200, 'a');
+  stream_->WriteOrBufferData(body, true, nullptr);
+
+  EXPECT_TRUE(session_->connection()->clock()->WallNow().IsZero());
+  // Set TTL to be 1 s.
+  QuicTime::Delta ttl = QuicTime::Delta::FromSeconds(1);
+  ASSERT_TRUE(stream_->MaybeSetTtl(ttl));
+
+  connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
+  // Verify stream gets reset because TTL expires.
+  EXPECT_CALL(*session_, SendRstStream(_, QUIC_STREAM_TTL_EXPIRED, _)).Times(1);
+  stream_->RetransmitStreamData(0, 100, false);
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace quic
diff --git a/net/third_party/quic/core/quic_trace_visitor.cc b/net/third_party/quic/core/quic_trace_visitor.cc
index 7cd9aa6..923aac25 100644
--- a/net/third_party/quic/core/quic_trace_visitor.cc
+++ b/net/third_party/quic/core/quic_trace_visitor.cc
@@ -115,10 +115,10 @@
 
       quic_trace::StreamFrameInfo* info =
           frame_record->mutable_stream_frame_info();
-      info->set_stream_id(frame.stream_frame->stream_id);
-      info->set_fin(frame.stream_frame->fin);
-      info->set_offset(frame.stream_frame->offset);
-      info->set_length(frame.stream_frame->data_length);
+      info->set_stream_id(frame.stream_frame.stream_id);
+      info->set_fin(frame.stream_frame.fin);
+      info->set_offset(frame.stream_frame.offset);
+      info->set_length(frame.stream_frame.data_length);
       break;
     }
 
diff --git a/net/third_party/quic/core/quic_types.h b/net/third_party/quic/core/quic_types.h
index b3a7dce..2de2beb 100644
--- a/net/third_party/quic/core/quic_types.h
+++ b/net/third_party/quic/core/quic_types.h
@@ -131,14 +131,14 @@
   LAST_TRANSMISSION_TYPE = PROBING_RETRANSMISSION,
 };
 
-enum HasRetransmittableData : int8_t {
+enum HasRetransmittableData : uint8_t {
   NO_RETRANSMITTABLE_DATA,
   HAS_RETRANSMITTABLE_DATA,
 };
 
-enum IsHandshake : int8_t { NOT_HANDSHAKE, IS_HANDSHAKE };
+enum IsHandshake : uint8_t { NOT_HANDSHAKE, IS_HANDSHAKE };
 
-enum class Perspective { IS_SERVER, IS_CLIENT };
+enum class Perspective : uint8_t { IS_SERVER, IS_CLIENT };
 QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
                                              const Perspective& s);
 
@@ -152,7 +152,7 @@
   SEND_CONNECTION_CLOSE_PACKET_WITH_NO_ACK
 };
 
-enum QuicFrameType : int8_t {
+enum QuicFrameType : uint8_t {
   // Regular frame types. The values set here cannot change without the
   // introduction of a new QUIC version.
   PADDING_FRAME = 0,
@@ -234,7 +234,7 @@
   PACKET_8BYTE_CONNECTION_ID = 8
 };
 
-enum QuicPacketNumberLength : int8_t {
+enum QuicPacketNumberLength : uint8_t {
   PACKET_1BYTE_PACKET_NUMBER = 1,
   PACKET_2BYTE_PACKET_NUMBER = 2,
   PACKET_4BYTE_PACKET_NUMBER = 4,
@@ -308,7 +308,7 @@
 // (Reno and Cubic are the classic example for that).
 enum CongestionControlType { kCubicBytes, kRenoBytes, kBBR, kPCC };
 
-enum LossDetectionType {
+enum LossDetectionType : uint8_t {
   kNack,          // Used to mimic TCP's loss detection.
   kTime,          // Time based loss detection.
   kAdaptiveTime,  // Adaptive time based loss detection.
@@ -327,7 +327,7 @@
   NUM_ENCRYPTION_LEVELS,
 };
 
-enum AddressChangeType {
+enum AddressChangeType : uint8_t {
   // IP address and port remain unchanged.
   NO_CHANGE,
   // Port changed, but IP address remains unchanged.
@@ -440,7 +440,7 @@
   FRAME_ERROR_base = 0x100,  // add frame type to this base
 };
 
-enum QuicIetfPacketHeaderForm {
+enum QuicIetfPacketHeaderForm : uint8_t {
   // Long header is used for packets that are sent prior to the completion of
   // version negotiation and establishment of 1-RTT keys.
   LONG_HEADER,
diff --git a/net/third_party/quic/core/quic_unacked_packet_map.cc b/net/third_party/quic/core/quic_unacked_packet_map.cc
index f4692a2..a6edfec 100644
--- a/net/third_party/quic/core/quic_unacked_packet_map.cc
+++ b/net/third_party/quic/core/quic_unacked_packet_map.cc
@@ -116,7 +116,7 @@
   if (session_notifier_ != nullptr) {
     for (const QuicFrame& frame : *frames) {
       if (frame.type == STREAM_FRAME) {
-        session_notifier_->OnStreamFrameRetransmitted(*frame.stream_frame);
+        session_notifier_->OnStreamFrameRetransmitted(frame.stream_frame);
       }
     }
   }
@@ -127,10 +127,6 @@
   transmission_info->has_crypto_handshake = false;
   info->num_padding_bytes = transmission_info->num_padding_bytes;
 
-  QUIC_BUG_IF(frames == nullptr)
-      << "Attempt to retransmit packet with no "
-      << "retransmittable frames: " << old_packet_number;
-
   // Don't link old transmissions to new ones when version or
   // encryption changes.
   if (transmission_type == ALL_INITIAL_RETRANSMISSION ||
@@ -420,13 +416,13 @@
     // Determine whether acked stream frame can be aggregated.
     const bool can_aggregate =
         frame.type == STREAM_FRAME &&
-        frame.stream_frame->stream_id == aggregated_stream_frame_.stream_id &&
-        frame.stream_frame->offset == aggregated_stream_frame_.offset +
-                                          aggregated_stream_frame_.data_length;
+        frame.stream_frame.stream_id == aggregated_stream_frame_.stream_id &&
+        frame.stream_frame.offset == aggregated_stream_frame_.offset +
+                                         aggregated_stream_frame_.data_length;
     if (can_aggregate) {
       // Aggregate stream frame.
-      aggregated_stream_frame_.data_length += frame.stream_frame->data_length;
-      aggregated_stream_frame_.fin = frame.stream_frame->fin;
+      aggregated_stream_frame_.data_length += frame.stream_frame.data_length;
+      aggregated_stream_frame_.fin = frame.stream_frame.fin;
       if (aggregated_stream_frame_.fin) {
         // Notify session notifier aggregated stream frame gets acked if fin is
         // acked.
@@ -436,17 +432,17 @@
     }
 
     NotifyAggregatedStreamFrameAcked(ack_delay);
-    if (frame.type != STREAM_FRAME || frame.stream_frame->fin) {
+    if (frame.type != STREAM_FRAME || frame.stream_frame.fin) {
       session_notifier_->OnFrameAcked(frame, ack_delay);
       continue;
     }
 
     // Delay notifying session notifier stream frame gets acked in case it can
     // be aggregated with following acked ones.
-    aggregated_stream_frame_.stream_id = frame.stream_frame->stream_id;
-    aggregated_stream_frame_.offset = frame.stream_frame->offset;
-    aggregated_stream_frame_.data_length = frame.stream_frame->data_length;
-    aggregated_stream_frame_.fin = frame.stream_frame->fin;
+    aggregated_stream_frame_.stream_id = frame.stream_frame.stream_id;
+    aggregated_stream_frame_.offset = frame.stream_frame.offset;
+    aggregated_stream_frame_.data_length = frame.stream_frame.data_length;
+    aggregated_stream_frame_.fin = frame.stream_frame.fin;
   }
 }
 
@@ -457,7 +453,7 @@
     // Aggregated stream frame is empty.
     return;
   }
-  session_notifier_->OnFrameAcked(QuicFrame(&aggregated_stream_frame_),
+  session_notifier_->OnFrameAcked(QuicFrame(aggregated_stream_frame_),
                                   ack_delay);
   // Clear aggregated stream frame.
   aggregated_stream_frame_.stream_id = kInvalidStreamId;
diff --git a/net/third_party/quic/core/quic_unacked_packet_map_test.cc b/net/third_party/quic/core/quic_unacked_packet_map_test.cc
index 8fefd321..dd133aed 100644
--- a/net/third_party/quic/core/quic_unacked_packet_map_test.cc
+++ b/net/third_party/quic/core/quic_unacked_packet_map_test.cc
@@ -44,8 +44,8 @@
       QuicStreamId stream_id) {
     SerializedPacket packet(packet_number, PACKET_1BYTE_PACKET_NUMBER, nullptr,
                             kDefaultLength, false, false);
-    QuicStreamFrame* frame = new QuicStreamFrame();
-    frame->stream_id = stream_id;
+    QuicStreamFrame frame;
+    frame.stream_id = stream_id;
     packet.retransmittable_frames.push_back(QuicFrame(frame));
     return packet;
   }
@@ -137,7 +137,7 @@
     QuicStreamId stream_id = kHeadersStreamId;
     for (const auto& frame : info->retransmittable_frames) {
       if (frame.type == STREAM_FRAME) {
-        stream_id = frame.stream_frame->stream_id;
+        stream_id = frame.stream_frame.stream_id;
         break;
       }
     }
@@ -513,19 +513,19 @@
 
   QuicTransmissionInfo info1;
   QuicStreamFrame stream_frame1(3, false, 0, 100);
-  info1.retransmittable_frames.push_back(QuicFrame(&stream_frame1));
+  info1.retransmittable_frames.push_back(QuicFrame(stream_frame1));
 
   QuicTransmissionInfo info2;
   QuicStreamFrame stream_frame2(3, false, 100, 100);
-  info2.retransmittable_frames.push_back(QuicFrame(&stream_frame2));
+  info2.retransmittable_frames.push_back(QuicFrame(stream_frame2));
 
   QuicTransmissionInfo info3;
   QuicStreamFrame stream_frame3(3, false, 200, 100);
-  info3.retransmittable_frames.push_back(QuicFrame(&stream_frame3));
+  info3.retransmittable_frames.push_back(QuicFrame(stream_frame3));
 
   QuicTransmissionInfo info4;
   QuicStreamFrame stream_frame4(3, true, 300, 0);
-  info4.retransmittable_frames.push_back(QuicFrame(&stream_frame4));
+  info4.retransmittable_frames.push_back(QuicFrame(stream_frame4));
 
   // Verify stream frames are aggregated.
   EXPECT_CALL(notifier_, OnFrameAcked(_, _)).Times(0);
@@ -554,8 +554,8 @@
 
   QuicTransmissionInfo info1;
   info1.retransmittable_frames.push_back(QuicFrame(&window_update));
-  info1.retransmittable_frames.push_back(QuicFrame(&stream_frame1));
-  info1.retransmittable_frames.push_back(QuicFrame(&stream_frame2));
+  info1.retransmittable_frames.push_back(QuicFrame(stream_frame1));
+  info1.retransmittable_frames.push_back(QuicFrame(stream_frame2));
 
   QuicTransmissionInfo info2;
   info2.retransmittable_frames.push_back(QuicFrame(&blocked));
diff --git a/net/third_party/quic/core/quic_version_manager.cc b/net/third_party/quic/core/quic_version_manager.cc
index 07ab5402..6e55a52 100644
--- a/net/third_party/quic/core/quic_version_manager.cc
+++ b/net/third_party/quic/core/quic_version_manager.cc
@@ -17,8 +17,7 @@
     : enable_version_99_(GetQuicFlag(FLAGS_quic_enable_version_99)),
       enable_version_44_(GetQuicReloadableFlag(quic_enable_version_44)),
       enable_version_43_(GetQuicReloadableFlag(quic_enable_version_43)),
-      disable_version_42_(GetQuicReloadableFlag(quic_disable_version_42)),
-      disable_version_41_(GetQuicReloadableFlag(quic_disable_version_41_2)),
+      disable_version_35_(GetQuicReloadableFlag(quic_disable_version_35)),
       allowed_supported_versions_(std::move(supported_versions)) {
   RefilterSupportedVersions();
 }
@@ -40,13 +39,11 @@
   if (enable_version_99_ != GetQuicFlag(FLAGS_quic_enable_version_99) ||
       enable_version_44_ != GetQuicReloadableFlag(quic_enable_version_44) ||
       enable_version_43_ != GetQuicReloadableFlag(quic_enable_version_43) ||
-      disable_version_42_ != GetQuicReloadableFlag(quic_disable_version_42) ||
-      disable_version_41_ != GetQuicReloadableFlag(quic_disable_version_41_2)) {
+      disable_version_35_ != GetQuicReloadableFlag(quic_disable_version_35)) {
     enable_version_99_ = GetQuicFlag(FLAGS_quic_enable_version_99);
     enable_version_44_ = GetQuicReloadableFlag(quic_enable_version_44);
     enable_version_43_ = GetQuicReloadableFlag(quic_enable_version_43);
-    disable_version_42_ = GetQuicReloadableFlag(quic_disable_version_42);
-    disable_version_41_ = GetQuicReloadableFlag(quic_disable_version_41_2);
+    disable_version_35_ = GetQuicReloadableFlag(quic_disable_version_35);
     RefilterSupportedVersions();
   }
 }
diff --git a/net/third_party/quic/core/quic_version_manager.h b/net/third_party/quic/core/quic_version_manager.h
index 839e813..6548a179 100644
--- a/net/third_party/quic/core/quic_version_manager.h
+++ b/net/third_party/quic/core/quic_version_manager.h
@@ -37,14 +37,12 @@
  private:
   // FLAGS_quic_enable_version_99
   bool enable_version_99_;
-  // FLAGS_quic_reloadable_flag_quic_disable_version_44
+  // FLAGS_quic_reloadable_flag_quic_enable_version_44
   bool enable_version_44_;
-  // FLAGS_quic_reloadable_flag_quic_disable_version_43
+  // FLAGS_quic_reloadable_flag_quic_enable_version_43
   bool enable_version_43_;
-  // FLAGS_quic_reloadable_flag_quic_disable_version_42
-  bool disable_version_42_;
-  // FLAGS_quic_reloadable_flag_quic_disable_version_41
-  bool disable_version_41_;
+  // FLAGS_quic_reloadable_flag_quic_disable_version_35
+  bool disable_version_35_;
   // The list of versions that may be supported.
   ParsedQuicVersionVector allowed_supported_versions_;
   // This vector contains QUIC versions which are currently supported based on
diff --git a/net/third_party/quic/core/quic_version_manager_test.cc b/net/third_party/quic/core/quic_version_manager_test.cc
index beb6fcc6..0123aee 100644
--- a/net/third_party/quic/core/quic_version_manager_test.cc
+++ b/net/third_party/quic/core/quic_version_manager_test.cc
@@ -16,49 +16,39 @@
 class QuicVersionManagerTest : public QuicTest {};
 
 TEST_F(QuicVersionManagerTest, QuicVersionManager) {
-  static_assert(QUIC_ARRAYSIZE(kSupportedTransportVersions) == 7u,
+  static_assert(QUIC_ARRAYSIZE(kSupportedTransportVersions) == 5u,
                 "Supported versions out of sync");
   SetQuicFlag(&FLAGS_quic_enable_version_99, false);
   SetQuicReloadableFlag(quic_enable_version_44, false);
   SetQuicReloadableFlag(quic_enable_version_43, false);
-  SetQuicReloadableFlag(quic_disable_version_42, true);
-  SetQuicReloadableFlag(quic_disable_version_41_2, true);
+  SetQuicReloadableFlag(quic_disable_version_35, true);
   QuicVersionManager manager(AllSupportedVersions());
 
   EXPECT_EQ(FilterSupportedTransportVersions(AllSupportedTransportVersions()),
             manager.GetSupportedTransportVersions());
 
+  EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_39}),
+            manager.GetSupportedTransportVersions());
+
+  SetQuicReloadableFlag(quic_disable_version_35, false);
   EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_39, QUIC_VERSION_35}),
             manager.GetSupportedTransportVersions());
 
-  SetQuicReloadableFlag(quic_disable_version_41_2, false);
-  EXPECT_EQ(QuicTransportVersionVector(
-                {QUIC_VERSION_41, QUIC_VERSION_39, QUIC_VERSION_35}),
-            manager.GetSupportedTransportVersions());
-
-  SetQuicReloadableFlag(quic_disable_version_42, false);
-  EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_42, QUIC_VERSION_41,
-                                        QUIC_VERSION_39, QUIC_VERSION_35}),
-            manager.GetSupportedTransportVersions());
-
   SetQuicReloadableFlag(quic_enable_version_43, true);
-  EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_43, QUIC_VERSION_42,
-                                        QUIC_VERSION_41, QUIC_VERSION_39,
-                                        QUIC_VERSION_35}),
+  EXPECT_EQ(QuicTransportVersionVector(
+                {QUIC_VERSION_43, QUIC_VERSION_39, QUIC_VERSION_35}),
             manager.GetSupportedTransportVersions());
 
   SetQuicReloadableFlag(quic_enable_version_44, true);
   EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_44, QUIC_VERSION_43,
-                                        QUIC_VERSION_42, QUIC_VERSION_41,
                                         QUIC_VERSION_39, QUIC_VERSION_35}),
             manager.GetSupportedTransportVersions());
 
   SetQuicFlag(&FLAGS_quic_enable_version_99, true);
-  EXPECT_EQ(
-      QuicTransportVersionVector(
-          {QUIC_VERSION_99, QUIC_VERSION_44, QUIC_VERSION_43, QUIC_VERSION_42,
-           QUIC_VERSION_41, QUIC_VERSION_39, QUIC_VERSION_35}),
-      manager.GetSupportedTransportVersions());
+  EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_99, QUIC_VERSION_44,
+                                        QUIC_VERSION_43, QUIC_VERSION_39,
+                                        QUIC_VERSION_35}),
+            manager.GetSupportedTransportVersions());
 
   // Ensure that all versions are now supported.
   EXPECT_EQ(FilterSupportedTransportVersions(AllSupportedTransportVersions()),
diff --git a/net/third_party/quic/core/quic_versions.cc b/net/third_party/quic/core/quic_versions.cc
index 60bb2ed..71e16339 100644
--- a/net/third_party/quic/core/quic_versions.cc
+++ b/net/third_party/quic/core/quic_versions.cc
@@ -58,10 +58,6 @@
       return MakeVersionLabel(proto, '0', '3', '5');
     case QUIC_VERSION_39:
       return MakeVersionLabel(proto, '0', '3', '9');
-    case QUIC_VERSION_41:
-      return MakeVersionLabel(proto, '0', '4', '1');
-    case QUIC_VERSION_42:
-      return MakeVersionLabel(proto, '0', '4', '2');
     case QUIC_VERSION_43:
       return MakeVersionLabel(proto, '0', '4', '3');
     case QUIC_VERSION_44:
@@ -172,12 +168,8 @@
       if (GetQuicReloadableFlag(quic_enable_version_43)) {
         filtered_versions.push_back(version);
       }
-    } else if (version.transport_version == QUIC_VERSION_42) {
-      if (!GetQuicReloadableFlag(quic_disable_version_42)) {
-        filtered_versions.push_back(version);
-      }
-    } else if (version.transport_version == QUIC_VERSION_41) {
-      if (!GetQuicReloadableFlag(quic_disable_version_41_2)) {
+    } else if (version.transport_version == QUIC_VERSION_35) {
+      if (!GetQuicReloadableFlag(quic_disable_version_35)) {
         filtered_versions.push_back(version);
       }
     } else {
@@ -271,8 +263,6 @@
   switch (transport_version) {
     RETURN_STRING_LITERAL(QUIC_VERSION_35);
     RETURN_STRING_LITERAL(QUIC_VERSION_39);
-    RETURN_STRING_LITERAL(QUIC_VERSION_41);
-    RETURN_STRING_LITERAL(QUIC_VERSION_42);
     RETURN_STRING_LITERAL(QUIC_VERSION_43);
     RETURN_STRING_LITERAL(QUIC_VERSION_44);
     RETURN_STRING_LITERAL(QUIC_VERSION_99);
diff --git a/net/third_party/quic/core/quic_versions.h b/net/third_party/quic/core/quic_versions.h
index dc3ff33..b1737d3 100644
--- a/net/third_party/quic/core/quic_versions.h
+++ b/net/third_party/quic/core/quic_versions.h
@@ -29,8 +29,6 @@
                          // endian. Dot not ack acks. Send a connection level
                          // WINDOW_UPDATE every 20 sent packets which do not
                          // contain retransmittable frames.
-  QUIC_VERSION_41 = 41,  // RST_STREAM, ACK and STREAM frames match IETF format.
-  QUIC_VERSION_42 = 42,  // Allows receiving overlapping stream data.
   QUIC_VERSION_43 = 43,  // PRIORITY frames are sent by client and accepted by
                          // server.
   QUIC_VERSION_44 = 44,  // Use IETF header format.
@@ -98,8 +96,8 @@
 // IMPORTANT: if you are adding to this list, follow the instructions at
 // http://sites/quic/adding-and-removing-versions
 static const QuicTransportVersion kSupportedTransportVersions[] = {
-    QUIC_VERSION_99, QUIC_VERSION_44, QUIC_VERSION_43, QUIC_VERSION_42,
-    QUIC_VERSION_41, QUIC_VERSION_39, QUIC_VERSION_35};
+    QUIC_VERSION_99, QUIC_VERSION_44, QUIC_VERSION_43, QUIC_VERSION_39,
+    QUIC_VERSION_35};
 
 // This vector contains all crypto handshake protocols that are supported.
 static const HandshakeProtocol kSupportedHandshakeProtocols[] = {
diff --git a/net/third_party/quic/core/quic_versions_test.cc b/net/third_party/quic/core/quic_versions_test.cc
index 112929e..9b1fd46 100644
--- a/net/third_party/quic/core/quic_versions_test.cc
+++ b/net/third_party/quic/core/quic_versions_test.cc
@@ -117,13 +117,13 @@
 
   // Test a TLS version:
   FLAGS_quic_supports_tls_handshake = true;
-  QuicTag tls_tag = MakeQuicTag('1', '4', '0', 'T');
+  QuicTag tls_tag = MakeQuicTag('3', '4', '0', 'T');
   EXPECT_EQ(PROTOCOL_TLS1_3, QuicVersionLabelToHandshakeProtocol(tls_tag));
 
   FLAGS_quic_supports_tls_handshake = false;
 #if QUIC_DLOG_INFO_IS_ON
   EXPECT_QUIC_LOG_CALL_CONTAINS(log, INFO,
-                                "Unsupported QuicVersionLabel version: T041")
+                                "Unsupported QuicVersionLabel version: T043")
       .Times(1);
 #endif
   EXPECT_EQ(PROTOCOL_UNSUPPORTED, QuicVersionLabelToHandshakeProtocol(tls_tag));
@@ -134,10 +134,6 @@
             ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '3', '5')));
   EXPECT_EQ(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_39),
             ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '3', '9')));
-  EXPECT_EQ(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_41),
-            ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '4', '1')));
-  EXPECT_EQ(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_42),
-            ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '4', '2')));
   EXPECT_EQ(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43),
             ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '4', '3')));
   EXPECT_EQ(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_44),
@@ -149,10 +145,6 @@
             ParseQuicVersionLabel(MakeVersionLabel('T', '0', '3', '5')));
   EXPECT_EQ(ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_39),
             ParseQuicVersionLabel(MakeVersionLabel('T', '0', '3', '9')));
-  EXPECT_EQ(ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_41),
-            ParseQuicVersionLabel(MakeVersionLabel('T', '0', '4', '1')));
-  EXPECT_EQ(ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_42),
-            ParseQuicVersionLabel(MakeVersionLabel('T', '0', '4', '2')));
   EXPECT_EQ(ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_43),
             ParseQuicVersionLabel(MakeVersionLabel('T', '0', '4', '3')));
   EXPECT_EQ(ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_44),
@@ -184,12 +176,6 @@
   EXPECT_EQ(MakeVersionLabel('Q', '0', '3', '9'),
             CreateQuicVersionLabel(
                 ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_39)));
-  EXPECT_EQ(MakeVersionLabel('Q', '0', '4', '1'),
-            CreateQuicVersionLabel(
-                ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_41)));
-  EXPECT_EQ(MakeVersionLabel('Q', '0', '4', '2'),
-            CreateQuicVersionLabel(
-                ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_42)));
   EXPECT_EQ(MakeVersionLabel('Q', '0', '4', '3'),
             CreateQuicVersionLabel(
                 ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43)));
@@ -205,12 +191,6 @@
   EXPECT_EQ(MakeVersionLabel('T', '0', '3', '9'),
             CreateQuicVersionLabel(
                 ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_39)));
-  EXPECT_EQ(MakeVersionLabel('T', '0', '4', '1'),
-            CreateQuicVersionLabel(
-                ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_41)));
-  EXPECT_EQ(MakeVersionLabel('T', '0', '4', '2'),
-            CreateQuicVersionLabel(
-                ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_42)));
   EXPECT_EQ(MakeVersionLabel('T', '0', '4', '3'),
             CreateQuicVersionLabel(
                 ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_43)));
@@ -318,8 +298,7 @@
 
 TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsAllVersions) {
   QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
-  SetQuicReloadableFlag(quic_disable_version_41_2, false);
-  SetQuicReloadableFlag(quic_disable_version_42, false);
+  SetQuicReloadableFlag(quic_disable_version_35, false);
   SetQuicReloadableFlag(quic_enable_version_43, true);
   SetQuicReloadableFlag(quic_enable_version_44, true);
   SetQuicFlag(&FLAGS_quic_enable_version_99, true);
@@ -328,8 +307,8 @@
     parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
   }
   QuicTransportVersionVector expected_versions = {
-      QUIC_VERSION_99, QUIC_VERSION_44, QUIC_VERSION_43, QUIC_VERSION_42,
-      QUIC_VERSION_41, QUIC_VERSION_39, QUIC_VERSION_35};
+      QUIC_VERSION_99, QUIC_VERSION_44, QUIC_VERSION_43, QUIC_VERSION_39,
+      QUIC_VERSION_35};
   ParsedQuicVersionVector expected_parsed_versions;
   for (QuicTransportVersion version : expected_versions) {
     expected_parsed_versions.push_back(
@@ -342,8 +321,7 @@
 
 TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo99) {
   QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
-  SetQuicReloadableFlag(quic_disable_version_41_2, false);
-  SetQuicReloadableFlag(quic_disable_version_42, false);
+  SetQuicReloadableFlag(quic_disable_version_35, false);
   SetQuicReloadableFlag(quic_enable_version_43, true);
   SetQuicReloadableFlag(quic_enable_version_44, true);
   SetQuicFlag(&FLAGS_quic_enable_version_99, false);
@@ -352,8 +330,7 @@
     parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
   }
   QuicTransportVersionVector expected_versions = {
-      QUIC_VERSION_44, QUIC_VERSION_43, QUIC_VERSION_42,
-      QUIC_VERSION_41, QUIC_VERSION_39, QUIC_VERSION_35};
+      QUIC_VERSION_44, QUIC_VERSION_43, QUIC_VERSION_39, QUIC_VERSION_35};
   ParsedQuicVersionVector expected_parsed_versions;
   for (QuicTransportVersion version : expected_versions) {
     expected_parsed_versions.push_back(
@@ -366,8 +343,7 @@
 
 TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo44) {
   QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
-  SetQuicReloadableFlag(quic_disable_version_41_2, false);
-  SetQuicReloadableFlag(quic_disable_version_42, false);
+  SetQuicReloadableFlag(quic_disable_version_35, false);
   SetQuicReloadableFlag(quic_enable_version_43, true);
   SetQuicReloadableFlag(quic_enable_version_44, false);
   SetQuicFlag(&FLAGS_quic_enable_version_99, false);
@@ -376,8 +352,7 @@
     parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
   }
   QuicTransportVersionVector expected_versions = {
-      QUIC_VERSION_43, QUIC_VERSION_42, QUIC_VERSION_41, QUIC_VERSION_39,
-      QUIC_VERSION_35};
+      QUIC_VERSION_43, QUIC_VERSION_39, QUIC_VERSION_35};
   ParsedQuicVersionVector expected_parsed_versions;
   for (QuicTransportVersion version : expected_versions) {
     expected_parsed_versions.push_back(
@@ -390,54 +365,7 @@
 
 TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo43) {
   QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
-  SetQuicReloadableFlag(quic_disable_version_41_2, false);
-  SetQuicReloadableFlag(quic_disable_version_42, false);
-  SetQuicReloadableFlag(quic_enable_version_43, false);
-  SetQuicReloadableFlag(quic_enable_version_44, false);
-  SetQuicFlag(&FLAGS_quic_enable_version_99, false);
-  ParsedQuicVersionVector parsed_versions;
-  for (QuicTransportVersion version : all_versions) {
-    parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
-  }
-  QuicTransportVersionVector expected_versions = {
-      QUIC_VERSION_42, QUIC_VERSION_41, QUIC_VERSION_39, QUIC_VERSION_35};
-  ParsedQuicVersionVector expected_parsed_versions;
-  for (QuicTransportVersion version : expected_versions) {
-    expected_parsed_versions.push_back(
-        ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
-  }
-
-  ASSERT_EQ(expected_versions, FilterSupportedTransportVersions(all_versions));
-  ASSERT_EQ(expected_parsed_versions, FilterSupportedVersions(parsed_versions));
-}
-
-TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo42) {
-  QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
-  SetQuicReloadableFlag(quic_disable_version_41_2, false);
-  SetQuicReloadableFlag(quic_disable_version_42, true);
-  SetQuicReloadableFlag(quic_enable_version_43, false);
-  SetQuicReloadableFlag(quic_enable_version_44, false);
-  SetQuicFlag(&FLAGS_quic_enable_version_99, false);
-  ParsedQuicVersionVector parsed_versions;
-  for (QuicTransportVersion version : all_versions) {
-    parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
-  }
-  QuicTransportVersionVector expected_versions = {
-      QUIC_VERSION_41, QUIC_VERSION_39, QUIC_VERSION_35};
-  ParsedQuicVersionVector expected_parsed_versions;
-  for (QuicTransportVersion version : expected_versions) {
-    expected_parsed_versions.push_back(
-        ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
-  }
-
-  ASSERT_EQ(expected_versions, FilterSupportedTransportVersions(all_versions));
-  ASSERT_EQ(expected_parsed_versions, FilterSupportedVersions(parsed_versions));
-}
-
-TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo41) {
-  QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
-  SetQuicReloadableFlag(quic_disable_version_41_2, true);
-  SetQuicReloadableFlag(quic_disable_version_42, true);
+  SetQuicReloadableFlag(quic_disable_version_35, false);
   SetQuicReloadableFlag(quic_enable_version_43, false);
   SetQuicReloadableFlag(quic_enable_version_44, false);
   SetQuicFlag(&FLAGS_quic_enable_version_99, false);
@@ -457,6 +385,27 @@
   ASSERT_EQ(expected_parsed_versions, FilterSupportedVersions(parsed_versions));
 }
 
+TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo35) {
+  QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
+  SetQuicReloadableFlag(quic_disable_version_35, true);
+  SetQuicReloadableFlag(quic_enable_version_43, false);
+  SetQuicReloadableFlag(quic_enable_version_44, false);
+  SetQuicFlag(&FLAGS_quic_enable_version_99, false);
+  ParsedQuicVersionVector parsed_versions;
+  for (QuicTransportVersion version : all_versions) {
+    parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
+  }
+  QuicTransportVersionVector expected_versions = {QUIC_VERSION_39};
+  ParsedQuicVersionVector expected_parsed_versions;
+  for (QuicTransportVersion version : expected_versions) {
+    expected_parsed_versions.push_back(
+        ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
+  }
+
+  ASSERT_EQ(expected_versions, FilterSupportedTransportVersions(all_versions));
+  ASSERT_EQ(expected_parsed_versions, FilterSupportedVersions(parsed_versions));
+}
+
 TEST_F(QuicVersionsTest, LookUpVersionByIndex) {
   QuicTransportVersionVector all_versions = {QUIC_VERSION_35, QUIC_VERSION_39};
   int version_count = all_versions.size();
@@ -497,12 +446,10 @@
 // yet a typo was made in doing the #defines and it was caught
 // only in some test far removed from here... Better safe than sorry.
 TEST_F(QuicVersionsTest, CheckVersionNumbersForTypos) {
-  static_assert(QUIC_ARRAYSIZE(quic::kSupportedTransportVersions) == 7u,
+  static_assert(QUIC_ARRAYSIZE(kSupportedTransportVersions) == 5u,
                 "Supported versions out of sync");
   EXPECT_EQ(QUIC_VERSION_35, 35);
   EXPECT_EQ(QUIC_VERSION_39, 39);
-  EXPECT_EQ(QUIC_VERSION_41, 41);
-  EXPECT_EQ(QUIC_VERSION_42, 42);
   EXPECT_EQ(QUIC_VERSION_43, 43);
   EXPECT_EQ(QUIC_VERSION_44, 44);
   EXPECT_EQ(QUIC_VERSION_99, 99);
diff --git a/net/third_party/quic/core/quic_write_blocked_list.cc b/net/third_party/quic/core/quic_write_blocked_list.cc
index 80a8512..f6b2e18 100644
--- a/net/third_party/quic/core/quic_write_blocked_list.cc
+++ b/net/third_party/quic/core/quic_write_blocked_list.cc
@@ -9,10 +9,7 @@
 
 namespace quic {
 
-QuicWriteBlockedList::QuicWriteBlockedList()
-    : last_priority_popped_(0),
-      use_static_stream_collection_(GetQuicReloadableFlag(
-          quic_use_static_stream_collection_in_write_blocked_list)) {
+QuicWriteBlockedList::QuicWriteBlockedList() : last_priority_popped_(0) {
   memset(batch_write_stream_id_, 0, sizeof(batch_write_stream_id_));
   memset(bytes_left_for_batch_write_, 0, sizeof(bytes_left_for_batch_write_));
 }
diff --git a/net/third_party/quic/core/quic_write_blocked_list.h b/net/third_party/quic/core/quic_write_blocked_list.h
index d592123b..fc3e844 100644
--- a/net/third_party/quic/core/quic_write_blocked_list.h
+++ b/net/third_party/quic/core/quic_write_blocked_list.h
@@ -34,30 +34,11 @@
   }
 
   bool HasWriteBlockedSpecialStream() const {
-    if (use_static_stream_collection_) {
-      return static_stream_collection_.num_blocked() > 0;
-    }
-
-    for (const auto& stream : static_streams_) {
-      if (stream.second) {
-        return true;
-      }
-    }
-    return false;
+    return static_stream_collection_.num_blocked() > 0;
   }
 
   size_t NumBlockedSpecialStreams() const {
-    if (use_static_stream_collection_) {
-      return static_stream_collection_.num_blocked();
-    }
-
-    size_t num_blocked = 0;
-    for (const auto& stream : static_streams_) {
-      if (stream.second) {
-        ++num_blocked;
-      }
-    }
-    return num_blocked;
+    return static_stream_collection_.num_blocked();
   }
 
   size_t NumBlockedStreams() const {
@@ -66,47 +47,26 @@
   }
 
   bool ShouldYield(QuicStreamId id) const {
-    if (use_static_stream_collection_) {
-      for (const auto& stream : static_stream_collection_) {
-        if (stream.id == id) {
-          // Static streams should never yield to data streams, or to lower
-          // priority static stream.
-          return false;
-        }
-        if (stream.is_blocked) {
-          return true;  // All data streams yield to static streams.
-        }
+    for (const auto& stream : static_stream_collection_) {
+      if (stream.id == id) {
+        // Static streams should never yield to data streams, or to lower
+        // priority static stream.
+        return false;
       }
-    } else {
-      for (const auto& stream : static_streams_) {
-        if (stream.first == id) {
-          // Static streams should never yield to data streams, or to lower
-          // priority static stream.
-          return false;
-        }
-        if (stream.second) {
-          return true;  // All data streams yield to static streams.
-        }
+      if (stream.is_blocked) {
+        return true;  // All data streams yield to static streams.
       }
     }
+
     return priority_write_scheduler_.ShouldYield(id);
   }
 
   // Pops the highest priorty stream, special casing crypto and headers streams.
   // Latches the most recently popped data stream for batch writing purposes.
   QuicStreamId PopFront() {
-    if (use_static_stream_collection_) {
-      QuicStreamId static_stream_id;
-      if (static_stream_collection_.UnblockFirstBlocked(&static_stream_id)) {
-        return static_stream_id;
-      }
-    } else {
-      for (auto& stream : static_streams_) {
-        if (stream.second) {
-          stream.second = false;
-          return stream.first;
-        }
-      }
+    QuicStreamId static_stream_id;
+    if (static_stream_collection_.UnblockFirstBlocked(&static_stream_id)) {
+      return static_stream_id;
     }
 
     const auto id_and_precedence =
@@ -133,39 +93,19 @@
   void RegisterStream(QuicStreamId stream_id,
                       bool is_static_stream,
                       spdy::SpdyPriority priority) {
-    if (use_static_stream_collection_) {
-      DCHECK(!priority_write_scheduler_.StreamRegistered(stream_id));
-      if (is_static_stream) {
-        static_stream_collection_.Register(stream_id);
-        return;
-      }
-
-      priority_write_scheduler_.RegisterStream(
-          stream_id, spdy::SpdyStreamPrecedence(priority));
-    } else {
-      if (is_static_stream) {
-        DCHECK(!priority_write_scheduler_.StreamRegistered(stream_id));
-        DCHECK(!QuicContainsKey(static_streams_, stream_id));
-        DCHECK(static_streams_.empty() ||
-               stream_id > static_streams_.back().first)
-            << "stream_id: " << stream_id
-            << " last static stream: " << static_streams_.back().first;
-        static_streams_[stream_id] = false;
-        return;
-      }
-      DCHECK(!priority_write_scheduler_.StreamRegistered(stream_id));
-      priority_write_scheduler_.RegisterStream(
-          stream_id, spdy::SpdyStreamPrecedence(priority));
+    DCHECK(!priority_write_scheduler_.StreamRegistered(stream_id));
+    if (is_static_stream) {
+      static_stream_collection_.Register(stream_id);
+      return;
     }
+
+    priority_write_scheduler_.RegisterStream(
+        stream_id, spdy::SpdyStreamPrecedence(priority));
   }
 
   void UnregisterStream(QuicStreamId stream_id, bool is_static) {
     if (is_static) {
-      if (use_static_stream_collection_) {
-        static_stream_collection_.Unregister(stream_id);
-      } else {
-        static_streams_.erase(stream_id);
-      }
+      static_stream_collection_.Unregister(stream_id);
       return;
     }
     priority_write_scheduler_.UnregisterStream(stream_id);
@@ -173,10 +113,7 @@
 
   void UpdateStreamPriority(QuicStreamId stream_id,
                             spdy::SpdyPriority new_priority) {
-    DCHECK(use_static_stream_collection_ ||
-           !QuicContainsKey(static_streams_, stream_id));
-    DCHECK(!use_static_stream_collection_ ||
-           !static_stream_collection_.IsRegistered(stream_id));
+    DCHECK(!static_stream_collection_.IsRegistered(stream_id));
     priority_write_scheduler_.UpdateStreamPrecedence(
         stream_id, spdy::SpdyStreamPrecedence(new_priority));
   }
@@ -195,17 +132,10 @@
   // the list for its priority level.
   // Headers and crypto streams are special cased to always resume first.
   void AddStream(QuicStreamId stream_id) {
-    if (use_static_stream_collection_) {
-      if (static_stream_collection_.SetBlocked(stream_id)) {
-        return;
-      }
-    } else {
-      auto it = static_streams_.find(stream_id);
-      if (it != static_streams_.end()) {
-        it->second = true;
-        return;
-      }
+    if (static_stream_collection_.SetBlocked(stream_id)) {
+      return;
     }
+
     bool push_front =
         stream_id == batch_write_stream_id_[last_priority_popped_] &&
         bytes_left_for_batch_write_[last_priority_popped_] > 0;
@@ -214,16 +144,9 @@
 
   // Returns true if stream with |stream_id| is write blocked.
   bool IsStreamBlocked(QuicStreamId stream_id) const {
-    if (use_static_stream_collection_) {
-      for (const auto& stream : static_stream_collection_) {
-        if (stream.id == stream_id) {
-          return stream.is_blocked;
-        }
-      }
-    } else {
-      auto it = static_streams_.find(stream_id);
-      if (it != static_streams_.end()) {
-        return it->second;
+    for (const auto& stream : static_stream_collection_) {
+      if (stream.id == stream_id) {
+        return stream.is_blocked;
       }
     }
 
@@ -334,14 +257,7 @@
     std::vector<StreamIdBlockedPair> streams_;
   };
 
-  // Used iff use_static_stream_collection_ is true.
   StaticStreamCollection static_stream_collection_;
-
-  // Used iff use_static_stream_collection_ is false.
-  QuicLinkedHashMapImpl<QuicStreamId, bool> static_streams_;
-
-  // Latched value of quic_use_static_stream_collection_in_write_blocked_list.
-  const bool use_static_stream_collection_;
 };
 
 }  // namespace quic
diff --git a/net/third_party/quic/core/stateless_rejector_test.cc b/net/third_party/quic/core/stateless_rejector_test.cc
index dc7ea263..08d30bb 100644
--- a/net/third_party/quic/core/stateless_rejector_test.cc
+++ b/net/third_party/quic/core/stateless_rejector_test.cc
@@ -82,6 +82,7 @@
         config_(QuicCryptoServerConfig::TESTING,
                 QuicRandom::GetInstance(),
                 crypto_test_utils::ProofSourceForTesting(),
+                KeyExchangeSource::Default(),
                 TlsServerHandshaker::CreateSslCtx()),
         config_peer_(&config_),
         compressed_certs_cache_(
diff --git a/net/third_party/quic/quartc/quartc_factory.h b/net/third_party/quic/quartc/quartc_factory.h
index e19109e..c3f1fcf9cc 100644
--- a/net/third_party/quic/quartc/quartc_factory.h
+++ b/net/third_party/quic/quartc/quartc_factory.h
@@ -22,7 +22,7 @@
   QuicAlarmFactory* alarm_factory = nullptr;
   // The clock used by |QuicAlarm|s. Implemented by the Quartc user. Owned by
   // the user, and needs to stay alive for as long as the QuartcFactory exists.
-  QuicClock* clock = nullptr;
+  const QuicClock* clock = nullptr;
 };
 
 struct QuartcSessionConfig {
@@ -78,7 +78,7 @@
   QuicAlarmFactory* alarm_factory_;
   // Used to implement the QuicConnectionHelperInterface.  Owned by the user and
   // must outlive QuartcFactory.
-  QuicClock* clock_;
+  const QuicClock* clock_;
   SimpleBufferAllocator buffer_allocator_;
 };
 
diff --git a/net/third_party/quic/quartc/quartc_session.cc b/net/third_party/quic/quartc/quartc_session.cc
index a45bfda..4a2a3f20 100644
--- a/net/third_party/quic/quartc/quartc_session.cc
+++ b/net/third_party/quic/quartc/quartc_session.cc
@@ -122,7 +122,7 @@
                              const QuicString& unique_remote_server_id,
                              Perspective perspective,
                              QuicConnectionHelperInterface* helper,
-                             QuicClock* clock,
+                             const QuicClock* clock,
                              std::unique_ptr<QuartcPacketWriter> packet_writer)
     : QuicSession(connection.get(), nullptr /*visitor*/, config),
       unique_remote_server_id_(unique_remote_server_id),
@@ -149,7 +149,7 @@
     quic_crypto_server_config_ = QuicMakeUnique<QuicCryptoServerConfig>(
         QuicString(source_address_token_secret, kInputKeyingMaterialLength),
         helper_->GetRandomGenerator(), std::move(proof_source),
-        TlsServerHandshaker::CreateSslCtx());
+        KeyExchangeSource::Default(), TlsServerHandshaker::CreateSslCtx());
     // Provide server with serialized config string to prove ownership.
     QuicCryptoServerConfig::ConfigOptions options;
     // The |message| is used to handle the return value of AddDefaultConfig
diff --git a/net/third_party/quic/quartc/quartc_session.h b/net/third_party/quic/quartc/quartc_session.h
index edd3802..89a1ef9 100644
--- a/net/third_party/quic/quartc/quartc_session.h
+++ b/net/third_party/quic/quartc/quartc_session.h
@@ -40,7 +40,7 @@
                 const QuicString& unique_remote_server_id,
                 Perspective perspective,
                 QuicConnectionHelperInterface* helper,
-                QuicClock* clock,
+                const QuicClock* clock,
                 std::unique_ptr<QuartcPacketWriter> packet_writer);
   QuartcSession(const QuartcSession&) = delete;
   QuartcSession& operator=(const QuartcSession&) = delete;
@@ -161,7 +161,7 @@
   // Not owned by QuartcSession. From the QuartcFactory.
   QuicConnectionHelperInterface* helper_;
   // For recording packet receipt time
-  QuicClock* clock_;
+  const QuicClock* clock_;
   // Not owned by QuartcSession.
   Delegate* session_delegate_ = nullptr;
   // Used by QUIC crypto server stream to track most recently compressed certs.
diff --git a/net/third_party/quic/quartc/quartc_session_test.cc b/net/third_party/quic/quartc/quartc_session_test.cc
index 1b2d988e..debaaea 100644
--- a/net/third_party/quic/quartc/quartc_session_test.cc
+++ b/net/third_party/quic/quartc/quartc_session_test.cc
@@ -15,7 +15,10 @@
 #include "net/third_party/quic/platform/api/quic_test_mem_slice_vector.h"
 #include "net/third_party/quic/quartc/quartc_factory.h"
 #include "net/third_party/quic/quartc/quartc_packet_writer.h"
+#include "net/third_party/quic/quartc/simulated_packet_transport.h"
 #include "net/third_party/quic/test_tools/mock_clock.h"
+#include "net/third_party/quic/test_tools/simulator/packet_filter.h"
+#include "net/third_party/quic/test_tools/simulator/simulator.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -28,192 +31,27 @@
 
 static QuicByteCount kDefaultMaxPacketSize = 1200;
 
-// Single-threaded alarm implementation based on a MockClock.
-//
-// Simulates asynchronous execution on a single thread by holding alarms
-// until Run() is called. Performs no synchronization, assumes that
-// CreateAlarm(), Set(), Cancel(), and Run() are called on the same thread.
-class FakeAlarmFactory : public QuicAlarmFactory {
+// Simple packet filter which drops the first N packets it observes.
+class CountingPacketFilter : public simulator::PacketFilter {
  public:
-  class FakeAlarm : public QuicAlarm {
-   public:
-    FakeAlarm(QuicArenaScopedPtr<QuicAlarm::Delegate> delegate,
-              FakeAlarmFactory* parent)
-        : QuicAlarm(std::move(delegate)), parent_(parent) {}
+  CountingPacketFilter(simulator::Simulator* simulator,
+                       const QuicString& name,
+                       simulator::Endpoint* endpoint)
+      : PacketFilter(simulator, name, endpoint) {}
 
-    ~FakeAlarm() override { parent_->RemoveAlarm(this); }
+  void set_packets_to_drop(int count) { packets_to_drop_ = count; }
 
-    void SetImpl() override { parent_->AddAlarm(this); }
-
-    void CancelImpl() override { parent_->RemoveAlarm(this); }
-
-    void Run() { Fire(); }
-
-   private:
-    FakeAlarmFactory* parent_;
-  };
-
-  explicit FakeAlarmFactory(MockClock* clock) : clock_(clock) {}
-  FakeAlarmFactory(const FakeAlarmFactory&) = delete;
-  FakeAlarmFactory& operator=(const FakeAlarmFactory&) = delete;
-
-  QuicAlarm* CreateAlarm(QuicAlarm::Delegate* delegate) override {
-    return new FakeAlarm(QuicArenaScopedPtr<QuicAlarm::Delegate>(delegate),
-                         this);
-  }
-
-  QuicArenaScopedPtr<QuicAlarm> CreateAlarm(
-      QuicArenaScopedPtr<QuicAlarm::Delegate> delegate,
-      QuicConnectionArena* arena) override {
-    return arena->New<FakeAlarm>(std::move(delegate), this);
-  }
-
-  // Runs all alarms scheduled in the next total_ms milliseconds.  Advances the
-  // clock by total_ms.  Runs tasks in time order.  Executes tasks scheduled at
-  // the same in an arbitrary order.
-  void Run(uint32_t total_ms) {
-    for (uint32_t i = 0; i < total_ms; ++i) {
-      while (!alarms_.empty() && alarms_.top()->deadline() <= clock_->Now()) {
-        alarms_.top()->Run();
-        alarms_.pop();
-      }
-      clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
+ protected:
+  bool FilterPacket(const simulator::Packet& packet) override {
+    if (packets_to_drop_ > 0) {
+      --packets_to_drop_;
+      return false;
     }
+    return true;
   }
 
  private:
-  void RemoveAlarm(FakeAlarm* alarm) {
-    std::vector<FakeAlarm*> leftovers;
-    while (!alarms_.empty()) {
-      FakeAlarm* top = alarms_.top();
-      alarms_.pop();
-      if (top == alarm) {
-        break;
-      }
-      leftovers.push_back(top);
-    }
-    for (FakeAlarm* leftover : leftovers) {
-      alarms_.push(leftover);
-    }
-  }
-
-  void AddAlarm(FakeAlarm* alarm) { alarms_.push(alarm); }
-
-  MockClock* clock_;
-
-  using AlarmCompare = std::function<bool(const FakeAlarm*, const FakeAlarm*)>;
-  const AlarmCompare alarm_later_ = [](const FakeAlarm* l, const FakeAlarm* r) {
-    // Sort alarms so that the earliest deadline appears first.
-    return l->deadline() > r->deadline();
-  };
-  std::priority_queue<FakeAlarm*, std::vector<FakeAlarm*>, AlarmCompare>
-      alarms_{alarm_later_};
-};
-
-// Fake QuartcPacketTransport.  Assumes all methods run on the main test thread.
-class FakePacketTransport : public QuartcPacketTransport {
- public:
-  explicit FakePacketTransport(QuicAlarmFactory* alarm_factory,
-                               MockClock* clock)
-      : alarm_(alarm_factory->CreateAlarm(new AlarmDelegate(this))),
-        clock_(clock) {}
-
-  void SetDestination(FakePacketTransport* dest) {
-    if (!dest_) {
-      dest_ = dest;
-      dest_->SetDestination(this);
-    }
-    if (delegate_) {
-      delegate_->OnTransportCanWrite();
-    }
-  }
-
-  int Write(const char* data,
-            size_t len,
-            const QuartcPacketTransport::PacketInfo& info) {
-    // If the destination is not set.
-    if (!dest_) {
-      return -1;
-    }
-
-    // Advance the time 10us to ensure the RTT is never 0ms.
-    clock_->AdvanceTime(QuicTime::Delta::FromMicroseconds(10));
-
-    if (packets_to_lose_ > 0) {
-      --packets_to_lose_;
-      return len;
-    }
-    last_packet_number_ = info.packet_number;
-
-    if (async_) {
-      packet_queue_.emplace_back(data, len);
-      alarm_->Cancel();
-      alarm_->Set(clock_->Now());
-    } else {
-      Send(QuicString(data, len));
-    }
-    return static_cast<int>(len);
-  }
-
-  QuartcPacketTransport::Delegate* delegate() { return delegate_; }
-
-  void SetDelegate(QuartcPacketTransport::Delegate* delegate) override {
-    delegate_ = delegate;
-    if (dest_ && delegate_) {
-      delegate_->OnTransportCanWrite();
-    }
-  }
-
-  void SetAsync(bool async) { async_ = async; }
-
-  QuicPacketNumber last_packet_number() { return last_packet_number_; }
-
-  void set_packets_to_lose(QuicPacketCount count) { packets_to_lose_ = count; }
-
- private:
-  class AlarmDelegate : public QuicAlarm::Delegate {
-   public:
-    explicit AlarmDelegate(FakePacketTransport* transport)
-        : transport_(transport) {}
-
-    void OnAlarm() override { transport_->OnAlarm(); }
-
-   private:
-    FakePacketTransport* transport_;
-  };
-
-  void Send(const QuicString& data) {
-    DCHECK(dest_);
-    DCHECK(dest_->delegate());
-    dest_->delegate()->OnTransportReceived(data.data(), data.size());
-  }
-
-  void OnAlarm() {
-    QUIC_LOG(WARNING) << "Sending packet: " << packet_queue_.front();
-    Send(packet_queue_.front());
-    packet_queue_.pop_front();
-
-    if (!packet_queue_.empty()) {
-      alarm_->Cancel();
-      alarm_->Set(clock_->Now());
-    }
-  }
-
-  // The writing destination of this channel.
-  FakePacketTransport* dest_ = nullptr;
-  // Packet transport delegate.  Called when data is received.
-  QuartcPacketTransport::Delegate* delegate_ = nullptr;
-  // If async, will send packets by running asynchronous tasks.
-  bool async_ = false;
-  // If async, packets are queued here to send.
-  QuicDeque<QuicString> packet_queue_;
-  // Alarm used to send data asynchronously.
-  QuicArenaScopedPtr<QuicAlarm> alarm_;
-  // The test clock.  Used to ensure the RTT is not 0.
-  MockClock* clock_;
-
-  QuicPacketNumber last_packet_number_;
-  QuicPacketCount packets_to_lose_ = 0;
+  int packets_to_drop_ = 0;
 };
 
 class FakeQuartcSessionDelegate : public QuartcSession::Delegate {
@@ -274,22 +112,27 @@
   std::map<QuicStreamId, QuicRstStreamErrorCode> errors_;
 };
 
-class QuartcSessionTest : public QuicTest,
-                          public QuicConnectionHelperInterface {
+class QuartcSessionTest : public QuicTest {
  public:
   ~QuartcSessionTest() override {}
 
   void Init() {
-    // Quic crashes if packets are sent at time 0, and the clock defaults to 0.
-    clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000));
     client_transport_ =
-        QuicMakeUnique<FakePacketTransport>(&alarm_factory_, &clock_);
+        QuicMakeUnique<simulator::SimulatedQuartcPacketTransport>(
+            &simulator_, "client_transport", "server_transport",
+            10 * kDefaultMaxPacketSize);
     server_transport_ =
-        QuicMakeUnique<FakePacketTransport>(&alarm_factory_, &clock_);
-    // Make the channel asynchronous so that two peer will not keep calling each
-    // other when they exchange information.
-    client_transport_->SetAsync(true);
-    client_transport_->SetDestination(server_transport_.get());
+        QuicMakeUnique<simulator::SimulatedQuartcPacketTransport>(
+            &simulator_, "server_transport", "client_transport",
+            10 * kDefaultMaxPacketSize);
+
+    client_filter_ = QuicMakeUnique<CountingPacketFilter>(
+        &simulator_, "client_filter", client_transport_.get());
+
+    client_server_link_ = QuicMakeUnique<simulator::SymmetricLink>(
+        client_filter_.get(), server_transport_.get(),
+        QuicBandwidth::FromKBitsPerSecond(10 * 1000),
+        QuicTime::Delta::FromMilliseconds(10));
 
     client_writer_ = QuicMakeUnique<QuartcPacketWriter>(client_transport_.get(),
                                                         kDefaultMaxPacketSize);
@@ -324,9 +167,9 @@
         CreateConnection(perspective, writer.get());
     QuicString remote_fingerprint_value = "value";
     QuicConfig config;
-    return QuicMakeUnique<QuartcSession>(std::move(quic_connection), config,
-                                         remote_fingerprint_value, perspective,
-                                         this, &clock_, std::move(writer));
+    return QuicMakeUnique<QuartcSession>(
+        std::move(quic_connection), config, remote_fingerprint_value,
+        perspective, &simulator_, simulator_.GetClock(), std::move(writer));
   }
 
   std::unique_ptr<QuicConnection> CreateConnection(Perspective perspective,
@@ -334,13 +177,12 @@
     QuicIpAddress ip;
     ip.FromString("0.0.0.0");
     return QuicMakeUnique<QuicConnection>(
-        0, QuicSocketAddress(ip, 0), this /*QuicConnectionHelperInterface*/,
-        &alarm_factory_, writer, /*owns_writer=*/false, perspective,
-        CurrentSupportedVersions());
+        0, QuicSocketAddress(ip, 0), &simulator_, simulator_.GetAlarmFactory(),
+        writer, /*owns_writer=*/false, perspective, CurrentSupportedVersions());
   }
 
   // Runs all tasks scheduled in the next 200 ms.
-  void RunTasks() { alarm_factory_.Run(200); }
+  void RunTasks() { simulator_.RunFor(QuicTime::Delta::FromMilliseconds(200)); }
 
   void StartHandshake() {
     server_peer_->StartCryptoHandshake();
@@ -404,23 +246,14 @@
     EXPECT_FALSE(server_peer_->IsCryptoHandshakeConfirmed());
   }
 
-  const QuicClock* GetClock() const override { return &clock_; }
-
-  QuicRandom* GetRandomGenerator() override {
-    return QuicRandom::GetInstance();
-  }
-
-  QuicBufferAllocator* GetStreamSendBufferAllocator() override {
-    return &buffer_allocator_;
-  }
-
  protected:
-  MockClock clock_;
-  FakeAlarmFactory alarm_factory_{&clock_};
-  SimpleBufferAllocator buffer_allocator_;
+  simulator::Simulator simulator_;
 
-  std::unique_ptr<FakePacketTransport> client_transport_;
-  std::unique_ptr<FakePacketTransport> server_transport_;
+  std::unique_ptr<simulator::SimulatedQuartcPacketTransport> client_transport_;
+  std::unique_ptr<simulator::SimulatedQuartcPacketTransport> server_transport_;
+  std::unique_ptr<CountingPacketFilter> client_filter_;
+  std::unique_ptr<simulator::SymmetricLink> client_server_link_;
+
   std::unique_ptr<QuartcPacketWriter> client_writer_;
   std::unique_ptr<QuartcPacketWriter> server_writer_;
   std::unique_ptr<QuartcSession> client_peer_;
@@ -471,6 +304,10 @@
   EXPECT_TRUE(client_peer_->IsClosedStream(id));
 }
 
+// TODO(b/112561077):  This is the wrong layer for this test.  We should write a
+// test specifically for QuartcPacketWriter with a stubbed-out
+// QuartcPacketTransport and remove
+// SimulatedQuartcPacketTransport::last_packet_number().
 TEST_F(QuartcSessionTest, WriterGivesPacketNumberToTransport) {
   CreateClientAndServerSessions();
   StartHandshake();
@@ -515,7 +352,7 @@
   stream->SetDelegate(client_stream_delegate_.get());
   stream->set_cancel_on_loss(false);
 
-  client_transport_->set_packets_to_lose(1);
+  client_filter_->set_packets_to_drop(1);
 
   char kClientMessage[] = "Hello";
   test::QuicTestMemSliceVector stream_data(
@@ -539,13 +376,13 @@
   stream->SetDelegate(client_stream_delegate_.get());
   stream->set_cancel_on_loss(true);
 
-  client_transport_->set_packets_to_lose(1);
+  client_filter_->set_packets_to_drop(1);
 
   char kMessage[] = "Hello";
   test::QuicTestMemSliceVector stream_data(
       {std::make_pair(kMessage, strlen(kMessage))});
   stream->WriteMemSlices(stream_data.span(), /*fin=*/false);
-  alarm_factory_.Run(1);
+  simulator_.RunFor(QuicTime::Delta::FromMilliseconds(1));
 
   // Send another packet to trigger loss detection.
   QuartcStream* stream_1 = client_peer_->CreateOutgoingDynamicStream();
diff --git a/net/third_party/quic/quartc/simulated_packet_transport.cc b/net/third_party/quic/quartc/simulated_packet_transport.cc
new file mode 100644
index 0000000..d15fd14
--- /dev/null
+++ b/net/third_party/quic/quartc/simulated_packet_transport.cc
@@ -0,0 +1,84 @@
+// Copyright (c) 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 "net/third_party/quic/quartc/simulated_packet_transport.h"
+#include "net/third_party/quic/platform/api/quic_str_cat.h"
+
+namespace quic {
+namespace simulator {
+
+SimulatedQuartcPacketTransport::SimulatedQuartcPacketTransport(
+    Simulator* simulator,
+    const QuicString& name,
+    const QuicString& peer_name,
+    QuicByteCount queue_capacity)
+    : Endpoint(simulator, name),
+      peer_name_(peer_name),
+      egress_queue_(simulator,
+                    QuicStringPrintf("%s (TX Queue)", name.c_str()),
+                    queue_capacity) {
+  egress_queue_.set_listener_interface(this);
+}
+
+int SimulatedQuartcPacketTransport::Write(const char* buffer,
+                                          size_t buf_len,
+                                          const PacketInfo& info) {
+  if (egress_queue_.bytes_queued() + buf_len > egress_queue_.capacity()) {
+    return 0;
+  }
+
+  last_packet_number_ = info.packet_number;
+
+  auto packet = QuicMakeUnique<Packet>();
+  packet->contents = QuicString(buffer, buf_len);
+  packet->size = buf_len;
+  packet->tx_timestamp = clock_->Now();
+  packet->source = name();
+  packet->destination = peer_name_;
+
+  egress_queue_.AcceptPacket(std::move(packet));
+  return buf_len;
+}
+
+void SimulatedQuartcPacketTransport::SetDelegate(Delegate* delegate) {
+  delegate_ = delegate;
+  Schedule(clock_->Now());
+}
+
+UnconstrainedPortInterface* SimulatedQuartcPacketTransport::GetRxPort() {
+  return this;
+}
+
+void SimulatedQuartcPacketTransport::SetTxPort(ConstrainedPortInterface* port) {
+  egress_queue_.set_tx_port(port);
+  Schedule(clock_->Now());
+}
+
+void SimulatedQuartcPacketTransport::AcceptPacket(
+    std::unique_ptr<Packet> packet) {
+  // Simulated switches broadcast packets to all ports if the cannot determine
+  // the recipient, so we need to drop packets that aren't intended for us.
+  if (packet->destination != name()) {
+    return;
+  }
+
+  if (delegate_) {
+    delegate_->OnTransportReceived(packet->contents.data(), packet->size);
+  }
+}
+
+void SimulatedQuartcPacketTransport::OnPacketDequeued() {
+  if (delegate_) {
+    delegate_->OnTransportCanWrite();
+  }
+}
+
+void SimulatedQuartcPacketTransport::Act() {
+  if (delegate_) {
+    delegate_->OnTransportCanWrite();
+  }
+}
+
+}  // namespace simulator
+}  // namespace quic
diff --git a/net/third_party/quic/quartc/simulated_packet_transport.h b/net/third_party/quic/quartc/simulated_packet_transport.h
new file mode 100644
index 0000000..c691f92c
--- /dev/null
+++ b/net/third_party/quic/quartc/simulated_packet_transport.h
@@ -0,0 +1,72 @@
+// Copyright (c) 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 NET_THIRD_PARTY_QUIC_QUARTC_SIMULATED_PACKET_TRANSPORT_H_
+#define NET_THIRD_PARTY_QUIC_QUARTC_SIMULATED_PACKET_TRANSPORT_H_
+
+#include "net/third_party/quic/platform/api/quic_string.h"
+#include "net/third_party/quic/quartc/quartc_packet_writer.h"
+#include "net/third_party/quic/test_tools/simulator/port.h"
+#include "net/third_party/quic/test_tools/simulator/queue.h"
+
+namespace quic {
+namespace simulator {
+
+// Simulated implementation of QuartcPacketTransport.  This packet transport
+// implementation connects Quartc to a QUIC simulator's network fabric.
+// Assumes that its caller and delegate run on the same thread as the network
+// simulation and therefore require no additional synchronization.
+class SimulatedQuartcPacketTransport : public Endpoint,
+                                       public QuartcPacketTransport,
+                                       public UnconstrainedPortInterface,
+                                       public Queue::ListenerInterface {
+ public:
+  SimulatedQuartcPacketTransport(Simulator* simulator,
+                                 const QuicString& name,
+                                 const QuicString& peer_name,
+                                 QuicByteCount queue_capacity);
+
+  // QuartcPacketTransport methods.
+  int Write(const char* buffer,
+            size_t buf_len,
+            const PacketInfo& info) override;
+  void SetDelegate(Delegate* delegate) override;
+
+  // Simulation methods below.  These are implementation details.
+
+  // Endpoint methods.  Called by the simulation to connect the transport.
+  UnconstrainedPortInterface* GetRxPort() override;
+  void SetTxPort(ConstrainedPortInterface* port) override;
+
+  // UnconstrainedPortInterface method.  Called by the simulation to deliver a
+  // packet to this transport.
+  void AcceptPacket(std::unique_ptr<Packet> packet) override;
+
+  // Queue::ListenerInterface method.  Called when the internal egress queue has
+  // dispatched a packet and may have room for more.
+  void OnPacketDequeued() override;
+
+  // Actor method.  The transport schedules this to run when the delegate is set
+  // in order to trigger an initial call to |Delegate::OnTransportCanWrite()|.
+  // (The Quartc packet writer starts in a blocked state and needs an initial
+  // callback to unblock it.)
+  void Act() override;
+
+  // Last packet number sent over this simulated transport.
+  // TODO(b/112561077):  Reorganize tests so that this method can be deleted.
+  // This exists purely for use by quartc_session_test.cc, to test that the
+  // packet writer passes packet numbers to the transport.
+  QuicPacketNumber last_packet_number() { return last_packet_number_; }
+
+ private:
+  QuicString peer_name_;
+  Delegate* delegate_ = nullptr;
+  Queue egress_queue_;
+  QuicPacketNumber last_packet_number_;
+};
+
+}  // namespace simulator
+}  // namespace quic
+
+#endif  // NET_THIRD_PARTY_QUIC_QUARTC_SIMULATED_PACKET_TRANSPORT_H_
diff --git a/net/third_party/quic/quartc/simulated_packet_transport_test.cc b/net/third_party/quic/quartc/simulated_packet_transport_test.cc
new file mode 100644
index 0000000..2171178
--- /dev/null
+++ b/net/third_party/quic/quartc/simulated_packet_transport_test.cc
@@ -0,0 +1,165 @@
+// Copyright (c) 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 "net/third_party/quic/quartc/simulated_packet_transport.h"
+
+#include "net/third_party/quic/platform/api/quic_test.h"
+#include "net/third_party/quic/quartc/quartc_packet_writer.h"
+#include "net/third_party/quic/test_tools/simulator/simulator.h"
+#include "net/third_party/quic/test_tools/simulator/switch.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace quic {
+namespace simulator {
+namespace {
+
+using ::testing::ElementsAre;
+
+const QuicBandwidth kDefaultBandwidth =
+    QuicBandwidth::FromKBitsPerSecond(10 * 1000);
+const QuicTime::Delta kDefaultPropagationDelay =
+    QuicTime::Delta::FromMilliseconds(20);
+const QuicByteCount kDefaultBdp = kDefaultBandwidth * kDefaultPropagationDelay;
+const QuicByteCount kDefaultPacketSize = 1200;
+const QuicPacketCount kDefaultQueueLength = 10;
+
+class FakeDelegate : public QuartcPacketTransport::Delegate {
+ public:
+  explicit FakeDelegate(QuartcPacketTransport* transport)
+      : transport_(transport) {
+    transport_->SetDelegate(this);
+  }
+
+  ~FakeDelegate() { transport_->SetDelegate(nullptr); }
+
+  void OnTransportCanWrite() override {
+    while (!packets_to_send_.empty()) {
+      const QuicString& packet = packets_to_send_.front();
+      if (transport_->Write(packet.data(), packet.size(),
+                            QuartcPacketTransport::PacketInfo()) <
+          static_cast<int>(packet.size())) {
+        ++write_blocked_count_;
+        return;
+      }
+      packets_to_send_.pop();
+    }
+  }
+
+  void OnTransportReceived(const char* data, size_t data_len) override {
+    packets_received_.emplace_back(data, data_len);
+  }
+
+  void AddPacketToSend(const QuicString& packet) {
+    packets_to_send_.push(packet);
+  }
+
+  size_t packets_to_send() { return packets_to_send_.size(); }
+  const std::vector<QuicString>& packets_received() {
+    return packets_received_;
+  }
+  int write_blocked_count() { return write_blocked_count_; }
+
+ private:
+  QuartcPacketTransport* const transport_ = nullptr;
+  std::queue<QuicString> packets_to_send_;
+  std::vector<QuicString> packets_received_;
+  int write_blocked_count_ = 0;
+};
+
+class SimulatedPacketTransportTest : public QuicTest {
+ protected:
+  SimulatedPacketTransportTest()
+      : switch_(&simulator_, "Switch", /*port_count=*/8, 2 * kDefaultBdp),
+        client_(&simulator_,
+                "sender",
+                "receiver",
+                kDefaultQueueLength * kDefaultPacketSize),
+        server_(&simulator_,
+                "receiver",
+                "sender",
+                kDefaultQueueLength * kDefaultPacketSize),
+        client_link_(&client_,
+                     switch_.port(1),
+                     kDefaultBandwidth,
+                     kDefaultPropagationDelay),
+        server_link_(&server_,
+                     switch_.port(2),
+                     kDefaultBandwidth,
+                     kDefaultPropagationDelay),
+        client_delegate_(&client_),
+        server_delegate_(&server_) {}
+
+  Simulator simulator_;
+  Switch switch_;
+
+  SimulatedQuartcPacketTransport client_;
+  SimulatedQuartcPacketTransport server_;
+
+  SymmetricLink client_link_;
+  SymmetricLink server_link_;
+
+  FakeDelegate client_delegate_;
+  FakeDelegate server_delegate_;
+};
+
+TEST_F(SimulatedPacketTransportTest, OneWayTransmission) {
+  QuicString packet_1(kDefaultPacketSize, 'a');
+  QuicString packet_2(kDefaultPacketSize, 'b');
+  client_delegate_.AddPacketToSend(packet_1);
+  client_delegate_.AddPacketToSend(packet_2);
+
+  simulator_.RunUntil(
+      [this] { return client_delegate_.packets_to_send() == 0; });
+  simulator_.RunFor(3 * kDefaultPropagationDelay);
+
+  EXPECT_THAT(server_delegate_.packets_received(),
+              ElementsAre(packet_1, packet_2));
+  EXPECT_THAT(client_delegate_.packets_received(), ElementsAre());
+}
+
+TEST_F(SimulatedPacketTransportTest, TwoWayTransmission) {
+  QuicString packet_1(kDefaultPacketSize, 'a');
+  QuicString packet_2(kDefaultPacketSize, 'b');
+  QuicString packet_3(kDefaultPacketSize, 'c');
+  QuicString packet_4(kDefaultPacketSize, 'd');
+
+  client_delegate_.AddPacketToSend(packet_1);
+  client_delegate_.AddPacketToSend(packet_2);
+  server_delegate_.AddPacketToSend(packet_3);
+  server_delegate_.AddPacketToSend(packet_4);
+
+  simulator_.RunUntil(
+      [this] { return client_delegate_.packets_to_send() == 0; });
+  simulator_.RunUntil(
+      [this] { return server_delegate_.packets_to_send() == 0; });
+  simulator_.RunFor(3 * kDefaultPropagationDelay);
+
+  EXPECT_THAT(server_delegate_.packets_received(),
+              ElementsAre(packet_1, packet_2));
+  EXPECT_THAT(client_delegate_.packets_received(),
+              ElementsAre(packet_3, packet_4));
+}
+
+TEST_F(SimulatedPacketTransportTest, TestWriteBlocked) {
+  // Add 10 packets beyond what fits in the egress queue.
+  std::vector<QuicString> packets;
+  for (unsigned int i = 0; i < kDefaultQueueLength + 10; ++i) {
+    packets.push_back(QuicString(kDefaultPacketSize, 'a' + i));
+    client_delegate_.AddPacketToSend(packets.back());
+  }
+
+  simulator_.RunUntil(
+      [this] { return client_delegate_.packets_to_send() == 0; });
+  simulator_.RunFor(3 * kDefaultPropagationDelay);
+
+  // Each of the 10 packets in excess of the sender's egress queue length will
+  // block the first time |client_delegate_| tries to write them.
+  EXPECT_EQ(client_delegate_.write_blocked_count(), 10);
+  EXPECT_EQ(server_delegate_.packets_received(), packets);
+}
+
+}  // namespace
+}  // namespace simulator
+}  // namespace quic
diff --git a/net/third_party/quic/test_tools/crypto_test_utils.cc b/net/third_party/quic/test_tools/crypto_test_utils.cc
index 9263c66..f3cd8ab0 100644
--- a/net/third_party/quic/test_tools/crypto_test_utils.cc
+++ b/net/third_party/quic/test_tools/crypto_test_utils.cc
@@ -391,7 +391,8 @@
 
   QuicCryptoServerConfig crypto_config(
       QuicCryptoServerConfig::TESTING, QuicRandom::GetInstance(),
-      ProofSourceForTesting(), TlsServerHandshaker::CreateSslCtx());
+      ProofSourceForTesting(), KeyExchangeSource::Default(),
+      TlsServerHandshaker::CreateSslCtx());
   QuicCompressedCertsCache compressed_certs_cache(
       QuicCompressedCertsCache::kQuicCompressedCertsCacheSize);
   SetupCryptoServerConfigForTest(server_conn->clock(),
diff --git a/net/third_party/quic/test_tools/crypto_test_utils_test.cc b/net/third_party/quic/test_tools/crypto_test_utils_test.cc
index 06888bb..550783e 100644
--- a/net/third_party/quic/test_tools/crypto_test_utils_test.cc
+++ b/net/third_party/quic/test_tools/crypto_test_utils_test.cc
@@ -113,7 +113,7 @@
   MockClock clock;
   QuicCryptoServerConfig crypto_config(
       QuicCryptoServerConfig::TESTING, QuicRandom::GetInstance(),
-      crypto_test_utils::ProofSourceForTesting(),
+      crypto_test_utils::ProofSourceForTesting(), KeyExchangeSource::Default(),
       TlsServerHandshaker::CreateSslCtx());
   QuicSocketAddress server_addr;
   QuicSocketAddress client_addr(QuicIpAddress::Loopback4(), 1);
diff --git a/net/third_party/quic/test_tools/quic_test_utils.cc b/net/third_party/quic/test_tools/quic_test_utils.cc
index 0f9104b..18b1219 100644
--- a/net/third_party/quic/test_tools/quic_test_utils.cc
+++ b/net/third_party/quic/test_tools/quic_test_utils.cc
@@ -779,8 +779,7 @@
   header.reset_flag = reset_flag;
   header.packet_number_length = packet_number_length;
   header.packet_number = packet_number;
-  QuicStreamFrame stream_frame(1, false, 0, QuicStringPiece(data));
-  QuicFrame frame(&stream_frame);
+  QuicFrame frame(QuicStreamFrame(1, false, 0, QuicStringPiece(data)));
   QuicFrames frames;
   frames.push_back(frame);
   QuicFramer framer(
@@ -827,8 +826,7 @@
   header.reset_flag = reset_flag;
   header.packet_number_length = packet_number_length;
   header.packet_number = packet_number;
-  QuicStreamFrame stream_frame(1, false, 0, QuicStringPiece(data));
-  QuicFrame frame(&stream_frame);
+  QuicFrame frame(QuicStreamFrame(1, false, 0, QuicStringPiece(data)));
   QuicFrames frames;
   frames.push_back(frame);
   QuicFramer framer(versions != nullptr ? *versions : AllSupportedVersions(),
diff --git a/net/third_party/quic/test_tools/simple_session_notifier.cc b/net/third_party/quic/test_tools/simple_session_notifier.cc
index 3dbb671..88cebec8 100644
--- a/net/third_party/quic/test_tools/simple_session_notifier.cc
+++ b/net/third_party/quic/test_tools/simple_session_notifier.cc
@@ -103,7 +103,7 @@
   for (const auto& interval : crypto_bytes_transferred_[ENCRYPTION_NONE]) {
     QuicStreamFrame stream_frame(kCryptoStreamId, false, interval.min(),
                                  interval.max() - interval.min());
-    OnFrameAcked(QuicFrame(&stream_frame), QuicTime::Delta::Zero());
+    OnFrameAcked(QuicFrame(stream_frame), QuicTime::Delta::Zero());
   }
 }
 
@@ -175,16 +175,15 @@
   if (frame.type != STREAM_FRAME) {
     return OnControlFrameAcked(frame);
   }
-  if (!QuicContainsKey(stream_map_, frame.stream_frame->stream_id)) {
+  if (!QuicContainsKey(stream_map_, frame.stream_frame.stream_id)) {
     return false;
   }
-  auto* state = &stream_map_.find(frame.stream_frame->stream_id)->second;
-  QuicStreamOffset offset = frame.stream_frame->offset;
-  QuicByteCount data_length = frame.stream_frame->data_length;
+  auto* state = &stream_map_.find(frame.stream_frame.stream_id)->second;
+  QuicStreamOffset offset = frame.stream_frame.offset;
+  QuicByteCount data_length = frame.stream_frame.data_length;
   QuicIntervalSet<QuicStreamOffset> newly_acked(offset, offset + data_length);
   newly_acked.Difference(state->bytes_acked);
-  const bool fin_newly_acked =
-      frame.stream_frame->fin && state->fin_outstanding;
+  const bool fin_newly_acked = frame.stream_frame.fin && state->fin_outstanding;
   if (newly_acked.Empty() && !fin_newly_acked) {
     return false;
   }
@@ -203,15 +202,15 @@
     OnControlFrameLost(frame);
     return;
   }
-  if (!QuicContainsKey(stream_map_, frame.stream_frame->stream_id)) {
+  if (!QuicContainsKey(stream_map_, frame.stream_frame.stream_id)) {
     return;
   }
-  auto* state = &stream_map_.find(frame.stream_frame->stream_id)->second;
-  QuicStreamOffset offset = frame.stream_frame->offset;
-  QuicByteCount data_length = frame.stream_frame->data_length;
+  auto* state = &stream_map_.find(frame.stream_frame.stream_id)->second;
+  QuicStreamOffset offset = frame.stream_frame.offset;
+  QuicByteCount data_length = frame.stream_frame.data_length;
   QuicIntervalSet<QuicStreamOffset> bytes_lost(offset, offset + data_length);
   bytes_lost.Difference(state->bytes_acked);
-  const bool fin_lost = state->fin_outstanding && frame.stream_frame->fin;
+  const bool fin_lost = state->fin_outstanding && frame.stream_frame.fin;
   if (bytes_lost.Empty() && !fin_lost) {
     return;
   }
@@ -239,17 +238,17 @@
       }
       continue;
     }
-    if (!QuicContainsKey(stream_map_, frame.stream_frame->stream_id)) {
+    if (!QuicContainsKey(stream_map_, frame.stream_frame.stream_id)) {
       continue;
     }
-    const auto& state = stream_map_.find(frame.stream_frame->stream_id)->second;
+    const auto& state = stream_map_.find(frame.stream_frame.stream_id)->second;
     QuicIntervalSet<QuicStreamOffset> retransmission(
-        frame.stream_frame->offset,
-        frame.stream_frame->offset + frame.stream_frame->data_length);
+        frame.stream_frame.offset,
+        frame.stream_frame.offset + frame.stream_frame.data_length);
     EncryptionLevel retransmission_encryption_level =
         connection_->encryption_level();
     EncryptionLevel current_encryption_level = connection_->encryption_level();
-    if (frame.stream_frame->stream_id == kCryptoStreamId) {
+    if (frame.stream_frame.stream_id == kCryptoStreamId) {
       for (size_t i = 0; i < NUM_ENCRYPTION_LEVELS; ++i) {
         if (retransmission.Intersects(crypto_bytes_transferred_[i])) {
           retransmission_encryption_level = static_cast<EncryptionLevel>(i);
@@ -259,7 +258,7 @@
       }
     }
     retransmission.Difference(state.bytes_acked);
-    bool retransmit_fin = frame.stream_frame->fin && state.fin_outstanding;
+    bool retransmit_fin = frame.stream_frame.fin && state.fin_outstanding;
     QuicConsumedData consumed(0, false);
     for (const auto& interval : retransmission) {
       QuicStreamOffset retransmission_offset = interval.min();
@@ -267,14 +266,14 @@
       const bool can_bundle_fin =
           retransmit_fin &&
           (retransmission_offset + retransmission_length == state.bytes_sent);
-      if (frame.stream_frame->stream_id == kCryptoStreamId) {
+      if (frame.stream_frame.stream_id == kCryptoStreamId) {
         // Set appropriate encryption level for crypto stream.
         connection_->SetDefaultEncryptionLevel(retransmission_encryption_level);
       }
       consumed = connection_->SendStreamData(
-          frame.stream_frame->stream_id, retransmission_length,
+          frame.stream_frame.stream_id, retransmission_length,
           retransmission_offset, can_bundle_fin ? FIN : NO_FIN);
-      QUIC_DVLOG(1) << "stream " << frame.stream_frame->stream_id
+      QUIC_DVLOG(1) << "stream " << frame.stream_frame.stream_id
                     << " is forced to retransmit stream data ["
                     << retransmission_offset << ", "
                     << retransmission_offset + retransmission_length
@@ -283,7 +282,7 @@
       if (can_bundle_fin) {
         retransmit_fin = !consumed.fin_consumed;
       }
-      if (frame.stream_frame->stream_id == kCryptoStreamId) {
+      if (frame.stream_frame.stream_id == kCryptoStreamId) {
         // Restore encryption level.
         connection_->SetDefaultEncryptionLevel(current_encryption_level);
       }
@@ -294,9 +293,9 @@
       }
     }
     if (retransmit_fin) {
-      QUIC_DVLOG(1) << "stream " << frame.stream_frame->stream_id
+      QUIC_DVLOG(1) << "stream " << frame.stream_frame.stream_id
                     << " retransmits fin only frame.";
-      consumed = connection_->SendStreamData(frame.stream_frame->stream_id, 0,
+      consumed = connection_->SendStreamData(frame.stream_frame.stream_id, 0,
                                              state.bytes_sent, FIN);
     }
   }
@@ -306,15 +305,15 @@
   if (frame.type != STREAM_FRAME) {
     return IsControlFrameOutstanding(frame);
   }
-  if (!QuicContainsKey(stream_map_, frame.stream_frame->stream_id)) {
+  if (!QuicContainsKey(stream_map_, frame.stream_frame.stream_id)) {
     return false;
   }
-  const auto& state = stream_map_.find(frame.stream_frame->stream_id)->second;
-  QuicStreamOffset offset = frame.stream_frame->offset;
-  QuicByteCount data_length = frame.stream_frame->data_length;
+  const auto& state = stream_map_.find(frame.stream_frame.stream_id)->second;
+  QuicStreamOffset offset = frame.stream_frame.offset;
+  QuicByteCount data_length = frame.stream_frame.data_length;
   return (data_length > 0 &&
           !state.bytes_acked.Contains(offset, offset + data_length)) ||
-         (frame.stream_frame->fin && state.fin_outstanding);
+         (frame.stream_frame.fin && state.fin_outstanding);
 }
 
 bool SimpleSessionNotifier::HasPendingCryptoData() const {
diff --git a/net/third_party/quic/test_tools/simple_session_notifier_test.cc b/net/third_party/quic/test_tools/simple_session_notifier_test.cc
index ffae4bc..db61db5ab 100644
--- a/net/third_party/quic/test_tools/simple_session_notifier_test.cc
+++ b/net/third_party/quic/test_tools/simple_session_notifier_test.cc
@@ -113,7 +113,7 @@
   notifier_.WriteOrBufferData(1, 1024, NO_FIN);
   // Ack [1024, 2048).
   QuicStreamFrame stream_frame(1, false, 1024, 1024);
-  notifier_.OnFrameAcked(QuicFrame(&stream_frame), QuicTime::Delta::Zero());
+  notifier_.OnFrameAcked(QuicFrame(stream_frame), QuicTime::Delta::Zero());
   EXPECT_TRUE(notifier_.StreamIsWaitingForAcks(1));
   // Neuters unencrypted data.
   notifier_.NeuterUnencryptedData();
@@ -146,8 +146,8 @@
   // Lost crypto data [500, 1500) and stream 3 [0, 512).
   QuicStreamFrame frame1(1, false, 500, 1000);
   QuicStreamFrame frame2(3, false, 0, 512);
-  notifier_.OnFrameLost(QuicFrame(&frame1));
-  notifier_.OnFrameLost(QuicFrame(&frame2));
+  notifier_.OnFrameLost(QuicFrame(frame1));
+  notifier_.OnFrameLost(QuicFrame(frame2));
 
   // Connection becomes writable.
   // Lost crypto data gets retransmitted as [500, 1024) and [1024, 1500), as
@@ -189,16 +189,16 @@
   // Ack stream 3 [3, 7), and stream 5 [8, 10).
   QuicStreamFrame ack_frame1(3, false, 3, 4);
   QuicStreamFrame ack_frame2(5, false, 8, 2);
-  notifier_.OnFrameAcked(QuicFrame(&ack_frame1), QuicTime::Delta::Zero());
-  notifier_.OnFrameAcked(QuicFrame(&ack_frame2), QuicTime::Delta::Zero());
+  notifier_.OnFrameAcked(QuicFrame(ack_frame1), QuicTime::Delta::Zero());
+  notifier_.OnFrameAcked(QuicFrame(ack_frame2), QuicTime::Delta::Zero());
   EXPECT_FALSE(notifier_.WillingToWrite());
 
   // Force to send.
   QuicRstStreamFrame rst_stream(1, 5, QUIC_STREAM_NO_ERROR, 10);
   QuicFrames frames;
-  frames.push_back(QuicFrame(&frame2));
+  frames.push_back(QuicFrame(frame2));
   frames.push_back(QuicFrame(&rst_stream));
-  frames.push_back(QuicFrame(&frame1));
+  frames.push_back(QuicFrame(frame1));
   // stream 5 data [0, 8), fin only are retransmitted.
   EXPECT_CALL(connection_, SendStreamData(5, 8, 0, NO_FIN))
       .WillOnce(Return(QuicConsumedData(8, false)));
diff --git a/net/third_party/quic/tools/quic_server.cc b/net/third_party/quic/tools/quic_server.cc
index 13bd2a6a..74383ab 100644
--- a/net/third_party/quic/tools/quic_server.cc
+++ b/net/third_party/quic/tools/quic_server.cc
@@ -72,6 +72,7 @@
       crypto_config_(kSourceAddressTokenSecret,
                      QuicRandom::GetInstance(),
                      std::move(proof_source),
+                     KeyExchangeSource::Default(),
                      TlsServerHandshaker::CreateSslCtx()),
       crypto_config_options_(crypto_config_options),
       version_manager_(supported_versions),
diff --git a/net/third_party/quic/tools/quic_server_test.cc b/net/third_party/quic/tools/quic_server_test.cc
index cb961c6..e342963 100644
--- a/net/third_party/quic/tools/quic_server_test.cc
+++ b/net/third_party/quic/tools/quic_server_test.cc
@@ -151,6 +151,7 @@
       : crypto_config_("blah",
                        QuicRandom::GetInstance(),
                        crypto_test_utils::ProofSourceForTesting(),
+                       KeyExchangeSource::Default(),
                        TlsServerHandshaker::CreateSslCtx()),
         version_manager_(AllSupportedVersions()),
         dispatcher_(
diff --git a/net/third_party/quic/tools/quic_simple_server_session_test.cc b/net/third_party/quic/tools/quic_simple_server_session_test.cc
index 47bf5ba..2c745f29 100644
--- a/net/third_party/quic/tools/quic_simple_server_session_test.cc
+++ b/net/third_party/quic/tools/quic_simple_server_session_test.cc
@@ -189,6 +189,7 @@
       : crypto_config_(QuicCryptoServerConfig::TESTING,
                        QuicRandom::GetInstance(),
                        crypto_test_utils::ProofSourceForTesting(),
+                       KeyExchangeSource::Default(),
                        TlsServerHandshaker::CreateSslCtx()),
         compressed_certs_cache_(
             QuicCompressedCertsCache::kQuicCompressedCertsCacheSize) {
diff --git a/net/third_party/quic/tools/quic_simple_server_stream_test.cc b/net/third_party/quic/tools/quic_simple_server_stream_test.cc
index 8fcd565..13e58426 100644
--- a/net/third_party/quic/tools/quic_simple_server_stream_test.cc
+++ b/net/third_party/quic/tools/quic_simple_server_stream_test.cc
@@ -182,6 +182,7 @@
             QuicCryptoServerConfig::TESTING,
             QuicRandom::GetInstance(),
             crypto_test_utils::ProofSourceForTesting(),
+            KeyExchangeSource::Default(),
             TlsServerHandshaker::CreateSslCtx())),
         compressed_certs_cache_(
             QuicCompressedCertsCache::kQuicCompressedCertsCacheSize),
diff --git a/net/tools/quic/quic_simple_server.cc b/net/tools/quic/quic_simple_server.cc
index 2d1c704..aa48c70 100644
--- a/net/tools/quic/quic_simple_server.cc
+++ b/net/tools/quic/quic_simple_server.cc
@@ -55,6 +55,7 @@
       crypto_config_(kSourceAddressTokenSecret,
                      quic::QuicRandom::GetInstance(),
                      std::move(proof_source),
+                     quic::KeyExchangeSource::Default(),
                      quic::TlsServerHandshaker::CreateSslCtx()),
       read_pending_(false),
       synchronous_read_count_(0),
diff --git a/net/tools/quic/quic_simple_server_test.cc b/net/tools/quic/quic_simple_server_test.cc
index 0b64733a..50151f8 100644
--- a/net/tools/quic/quic_simple_server_test.cc
+++ b/net/tools/quic/quic_simple_server_test.cc
@@ -28,6 +28,7 @@
       : crypto_config_("blah",
                        quic::QuicRandom::GetInstance(),
                        quic::test::crypto_test_utils::ProofSourceForTesting(),
+                       quic::KeyExchangeSource::Default(),
                        quic::TlsServerHandshaker::CreateSslCtx()),
         version_manager_(quic::AllSupportedVersions()),
         dispatcher_(config_,
diff --git a/sandbox/linux/syscall_broker/broker_file_permission.cc b/sandbox/linux/syscall_broker/broker_file_permission.cc
index 18e4c14a..17762ea 100644
--- a/sandbox/linux/syscall_broker/broker_file_permission.cc
+++ b/sandbox/linux/syscall_broker/broker_file_permission.cc
@@ -204,8 +204,8 @@
   if (CheckAccessInternal(requested_filename, F_OK, file_to_access))
     return true;
 
-  // Allow stat() on leading directories if have create permission.
-  if (!allow_create_)
+  // Allow stat() on leading directories if have create or stat() permission.
+  if (!(allow_create_ || allow_stat_with_intermediates_))
     return false;
 
   // NOTE: ValidatePath proved requested_length != 0;
@@ -214,7 +214,10 @@
 
   // Special case for root: only one slash, otherwise must have a second
   // slash in the right spot to avoid substring matches.
+  // |allow_stat_with_intermediates_| can match on the full path, and
+  // |allow_create_| only matches a leading directory.
   if ((requested_length == 1 && requested_filename[0] == '/') ||
+      (allow_stat_with_intermediates_ && path_ == requested_filename) ||
       (requested_length < path_.length() &&
        memcmp(path_.c_str(), requested_filename, requested_length) == 0 &&
        path_.c_str()[requested_length] == '/')) {
@@ -236,13 +239,15 @@
                                            bool temporary_only,
                                            bool allow_read,
                                            bool allow_write,
-                                           bool allow_create)
+                                           bool allow_create,
+                                           bool allow_stat_with_intermediates)
     : path_(path),
       recursive_(recursive),
       temporary_only_(temporary_only),
       allow_read_(allow_read),
       allow_write_(allow_write),
-      allow_create_(allow_create) {
+      allow_create_(allow_create),
+      allow_stat_with_intermediates_(allow_stat_with_intermediates) {
   // Must have enough length for a '/'
   CHECK(path_.length() > 0) << GetErrorMessageForTests();
 
diff --git a/sandbox/linux/syscall_broker/broker_file_permission.h b/sandbox/linux/syscall_broker/broker_file_permission.h
index 4261eb3..3086a16 100644
--- a/sandbox/linux/syscall_broker/broker_file_permission.h
+++ b/sandbox/linux/syscall_broker/broker_file_permission.h
@@ -25,40 +25,45 @@
   BrokerFilePermission& operator=(const BrokerFilePermission&) = default;
 
   static BrokerFilePermission ReadOnly(const std::string& path) {
-    return BrokerFilePermission(path, false, false, true, false, false);
+    return BrokerFilePermission(path, false, false, true, false, false, false);
   }
 
   static BrokerFilePermission ReadOnlyRecursive(const std::string& path) {
-    return BrokerFilePermission(path, true, false, true, false, false);
+    return BrokerFilePermission(path, true, false, true, false, false, false);
   }
 
   static BrokerFilePermission WriteOnly(const std::string& path) {
-    return BrokerFilePermission(path, false, false, false, true, false);
+    return BrokerFilePermission(path, false, false, false, true, false, false);
   }
 
   static BrokerFilePermission ReadWrite(const std::string& path) {
-    return BrokerFilePermission(path, false, false, true, true, false);
+    return BrokerFilePermission(path, false, false, true, true, false, false);
   }
 
   static BrokerFilePermission ReadWriteCreate(const std::string& path) {
-    return BrokerFilePermission(path, false, false, true, true, true);
+    return BrokerFilePermission(path, false, false, true, true, true, false);
   }
 
   static BrokerFilePermission ReadWriteCreateRecursive(
       const std::string& path) {
-    return BrokerFilePermission(path, true, false, true, true, true);
+    return BrokerFilePermission(path, true, false, true, true, true, false);
   }
 
   // Temporary files must always be newly created and do not confer rights to
   // use pre-existing files of the same name.
   static BrokerFilePermission ReadWriteCreateTemporary(
       const std::string& path) {
-    return BrokerFilePermission(path, false, true, true, true, true);
+    return BrokerFilePermission(path, false, true, true, true, true, false);
   }
 
   static BrokerFilePermission ReadWriteCreateTemporaryRecursive(
       const std::string& path) {
-    return BrokerFilePermission(path, true, true, true, true, true);
+    return BrokerFilePermission(path, true, true, true, true, true, false);
+  }
+
+  static BrokerFilePermission StatOnlyWithIntermediateDirs(
+      const std::string& path) {
+    return BrokerFilePermission(path, false, false, false, false, false, true);
   }
 
   // Returns true if |requested_filename| is allowed to be accessed
@@ -108,7 +113,8 @@
                        bool temporary_only,
                        bool allow_read,
                        bool allow_write,
-                       bool allow_create);
+                       bool allow_create,
+                       bool allow_stat_with_intermediates);
 
   // ValidatePath checks |path| and returns true if these conditions are met
   // * Greater than 0 length
@@ -138,6 +144,8 @@
   bool allow_read_;
   bool allow_write_;
   bool allow_create_;
+  // Allow stat() for |path| and all intermediate dirs.
+  bool allow_stat_with_intermediates_;
 };
 
 }  // namespace syscall_broker
diff --git a/sandbox/linux/syscall_broker/broker_file_permission_unittest.cc b/sandbox/linux/syscall_broker/broker_file_permission_unittest.cc
index 006cc49..7cd41b6 100644
--- a/sandbox/linux/syscall_broker/broker_file_permission_unittest.cc
+++ b/sandbox/linux/syscall_broker/broker_file_permission_unittest.cc
@@ -260,6 +260,30 @@
   // expected.
 }
 
+TEST(BrokerFilePermission, StatOnlyWithIntermediateDirs) {
+  const char kPath[] = "/tmp/good/path";
+  const char kLeading1[] = "/";
+  const char kLeading2[] = "/tmp";
+  const char kLeading3[] = "/tmp/good/path";
+  const char kTrailing[] = "/tmp/good/path/bad";
+
+  BrokerFilePermission perm =
+      BrokerFilePermission::StatOnlyWithIntermediateDirs(kPath);
+  // No open or access permission.
+  ASSERT_FALSE(perm.CheckOpen(kPath, O_RDONLY, NULL, NULL));
+  ASSERT_FALSE(perm.CheckOpen(kPath, O_WRONLY, NULL, NULL));
+  ASSERT_FALSE(perm.CheckOpen(kPath, O_RDWR, NULL, NULL));
+  ASSERT_FALSE(perm.CheckAccess(kPath, R_OK, NULL));
+  ASSERT_FALSE(perm.CheckAccess(kPath, W_OK, NULL));
+
+  // Stat for all leading paths, but not trailing paths.
+  ASSERT_TRUE(perm.CheckStat(kPath, NULL));
+  ASSERT_TRUE(perm.CheckStat(kLeading1, NULL));
+  ASSERT_TRUE(perm.CheckStat(kLeading2, NULL));
+  ASSERT_TRUE(perm.CheckStat(kLeading3, NULL));
+  ASSERT_FALSE(perm.CheckStat(kTrailing, NULL));
+}
+
 TEST(BrokerFilePermission, ValidatePath) {
   EXPECT_TRUE(BrokerFilePermissionTester::ValidatePath("/path"));
   EXPECT_TRUE(BrokerFilePermissionTester::ValidatePath("/"));
diff --git a/services/device/hid/hid_connection.cc b/services/device/hid/hid_connection.cc
index 0589be0..ff0e9b16 100644
--- a/services/device/hid/hid_connection.cc
+++ b/services/device/hid/hid_connection.cc
@@ -63,23 +63,6 @@
 
 }  // namespace
 
-struct HidConnection::PendingHidReport {
-  PendingHidReport() = default;
-  PendingHidReport(const PendingHidReport& other) = default;
-  ~PendingHidReport() = default;
-
-  scoped_refptr<base::RefCountedBytes> buffer;
-  size_t size;
-};
-
-struct HidConnection::PendingHidRead {
-  PendingHidRead() = default;
-  PendingHidRead(PendingHidRead&& other) = default;
-  ~PendingHidRead() = default;
-
-  HidConnection::ReadCallback callback;
-};
-
 HidConnection::HidConnection(scoped_refptr<HidDeviceInfo> device_info)
     : device_info_(device_info), closed_(false) {
   has_protected_collection_ =
@@ -107,9 +90,7 @@
     return;
   }
 
-  PendingHidRead pending_read;
-  pending_read.callback = std::move(callback);
-  pending_reads_.push(std::move(pending_read));
+  pending_reads_.emplace(std::move(callback));
   ProcessReadQueue();
 }
 
@@ -210,10 +191,7 @@
   if (IsReportIdProtected(report_id))
     return;
 
-  PendingHidReport report;
-  report.buffer = buffer;
-  report.size = size;
-  pending_reports_.push(report);
+  pending_reports_.emplace(buffer, size);
   ProcessReadQueue();
 }
 
@@ -224,12 +202,15 @@
   // during the loop.
   scoped_refptr<HidConnection> self(this);
   while (pending_reads_.size() && pending_reports_.size()) {
-    PendingHidRead read = std::move(pending_reads_.front());
-    PendingHidReport report = std::move(pending_reports_.front());
+    ReadCallback callback = std::move(pending_reads_.front());
+
+    scoped_refptr<base::RefCountedBytes> buffer;
+    size_t size;
+    std::tie(buffer, size) = std::move(pending_reports_.front());
 
     pending_reads_.pop();
     pending_reports_.pop();
-    std::move(read.callback).Run(true, std::move(report.buffer), report.size);
+    std::move(callback).Run(true, std::move(buffer), size);
   }
 }
 
diff --git a/services/device/hid/hid_connection.h b/services/device/hid/hid_connection.h
index 110b83e..69dc947 100644
--- a/services/device/hid/hid_connection.h
+++ b/services/device/hid/hid_connection.h
@@ -7,6 +7,7 @@
 
 #include <stddef.h>
 #include <stdint.h>
+#include <tuple>
 
 #include "base/callback_forward.h"
 #include "base/containers/queue.h"
@@ -83,16 +84,14 @@
   void ProcessReadQueue();
 
  private:
-  struct PendingHidReport;
-  struct PendingHidRead;
-
   scoped_refptr<HidDeviceInfo> device_info_;
   bool has_protected_collection_;
   base::ThreadChecker thread_checker_;
   bool closed_;
 
-  base::queue<PendingHidReport> pending_reports_;
-  base::queue<PendingHidRead> pending_reads_;
+  base::queue<std::tuple<scoped_refptr<base::RefCountedBytes>, size_t>>
+      pending_reports_;
+  base::queue<ReadCallback> pending_reads_;
 
   DISALLOW_COPY_AND_ASSIGN(HidConnection);
 };
diff --git a/services/device/hid/hid_connection_win.cc b/services/device/hid/hid_connection_win.cc
index c5959c9..c1a5210e 100644
--- a/services/device/hid/hid_connection_win.cc
+++ b/services/device/hid/hid_connection_win.cc
@@ -44,6 +44,7 @@
   // Implements base::win::ObjectWatcher::Delegate.
   void OnObjectSignaled(HANDLE object) override;
 
+ private:
   // The buffer isn't used by this object but it's important that a reference
   // to it is held until the transfer completes.
   scoped_refptr<base::RefCountedBytes> buffer_;
@@ -52,7 +53,6 @@
   base::win::ScopedHandle event_;
   base::win::ObjectWatcher watcher_;
 
- private:
   DISALLOW_COPY_AND_ASSIGN(PendingHidTransfer);
 };
 
@@ -241,7 +241,6 @@
   DWORD bytes_transferred;
   if (signaled && GetOverlappedResult(file_.Get(), transfer->GetOverlapped(),
                                       &bytes_transferred, FALSE)) {
-    DCHECK_LE(bytes_transferred, transfer->buffer_->size());
     std::move(callback).Run(true);
   } else {
     HID_PLOG(EVENT) << "HID write failed";
diff --git a/services/network/public/mojom/tcp_socket.mojom b/services/network/public/mojom/tcp_socket.mojom
index b2d1439..92131f04 100644
--- a/services/network/public/mojom/tcp_socket.mojom
+++ b/services/network/public/mojom/tcp_socket.mojom
@@ -24,6 +24,7 @@
   // On success, |net_error| is net::OK. Caller is to use |send_stream| to send
   // data and |receive_stream| to receive data over the connection. On failure,
   // |result| is a network error code.
+  // |ssl_info| is only returned if |options::skip_cert_verification| is true.
   UpgradeToTLS(HostPortPair host_port_pair,
                TLSClientSocketOptions? options,
                MutableNetworkTrafficAnnotationTag traffic_annotation,
@@ -31,7 +32,8 @@
                SocketObserver? observer)
       => (int32 net_error,
           handle<data_pipe_consumer>? receive_stream,
-          handle<data_pipe_producer>? send_stream);
+          handle<data_pipe_producer>? send_stream,
+          SSLInfo? ssl_info);
 
   // Socket options:
   // Note that an implementation can apply default socket options suitable for
diff --git a/services/network/public/mojom/tls_socket.mojom b/services/network/public/mojom/tls_socket.mojom
index 26c5e050..92d3019 100644
--- a/services/network/public/mojom/tls_socket.mojom
+++ b/services/network/public/mojom/tls_socket.mojom
@@ -20,4 +20,6 @@
 struct TLSClientSocketOptions {
   SSLVersion version_min = kTLS1;
   SSLVersion version_max = kTLS12;
+  // If |true|, the SSLInfo will be returned in the UpgradeToTLS callback.
+  bool skip_cert_verification = false;
 };
diff --git a/services/network/socket_factory.cc b/services/network/socket_factory.cc
index b0e2341e..43fbb75a 100644
--- a/services/network/socket_factory.cc
+++ b/services/network/socket_factory.cc
@@ -12,6 +12,9 @@
 #include "mojo/public/cpp/bindings/type_converter.h"
 #include "net/base/completion_once_callback.h"
 #include "net/base/net_errors.h"
+#include "net/cert/cert_verifier.h"
+#include "net/cert/ct_policy_enforcer.h"
+#include "net/cert/multi_log_ct_verifier.h"
 #include "net/log/net_log.h"
 #include "net/socket/client_socket_factory.h"
 #include "net/socket/client_socket_handle.h"
@@ -24,6 +27,25 @@
 #include "services/network/udp_socket.h"
 
 namespace network {
+namespace {
+// Cert verifier which blindly accepts all certificates, regardless of validity.
+class FakeCertVerifier : public net::CertVerifier {
+ public:
+  FakeCertVerifier() {}
+  ~FakeCertVerifier() override {}
+
+  int Verify(const RequestParams& params,
+             net::CertVerifyResult* verify_result,
+             net::CompletionOnceCallback,
+             std::unique_ptr<Request>*,
+             const net::NetLogWithSource&) override {
+    verify_result->Reset();
+    verify_result->verified_cert = params.certificate();
+    return net::OK;
+  }
+  void SetConfig(const Config& config) override {}
+};
+}  // namespace
 
 SocketFactory::SocketFactory(net::NetLog* net_log,
                              net::URLRequestContext* url_request_context)
@@ -104,15 +126,41 @@
 
   net::SSLConfig ssl_config;
   ssl_config_service_->GetSSLConfig(&ssl_config);
+  net::SSLClientSocketContext& ssl_client_socket_context =
+      ssl_client_socket_context_;
+
+  bool send_ssl_info = false;
   if (socket_options) {
     ssl_config.version_min =
         mojo::MojoSSLVersionToNetSSLVersion(socket_options->version_min);
     ssl_config.version_max =
         mojo::MojoSSLVersionToNetSSLVersion(socket_options->version_max);
+
+    if (socket_options->skip_cert_verification) {
+      if (!no_verification_cert_verifier_) {
+        no_verification_cert_verifier_ = base::WrapUnique(new FakeCertVerifier);
+        no_verification_transport_security_state_.reset(
+            new net::TransportSecurityState);
+        no_verification_cert_transparency_verifier_.reset(
+            new net::MultiLogCTVerifier());
+        no_verification_ct_policy_enforcer_.reset(
+            new net::DefaultCTPolicyEnforcer());
+        no_verification_ssl_client_socket_context_.cert_verifier =
+            no_verification_cert_verifier_.get();
+        no_verification_ssl_client_socket_context_.transport_security_state =
+            no_verification_transport_security_state_.get();
+        no_verification_ssl_client_socket_context_.cert_transparency_verifier =
+            no_verification_cert_transparency_verifier_.get();
+        no_verification_ssl_client_socket_context_.ct_policy_enforcer =
+            no_verification_ct_policy_enforcer_.get();
+      }
+      ssl_client_socket_context = no_verification_ssl_client_socket_context_;
+      send_ssl_info = true;
+    }
   }
   socket_raw->Connect(host_port_pair, ssl_config, std::move(tcp_socket),
-                      ssl_client_socket_context_, client_socket_factory_,
-                      std::move(callback));
+                      ssl_client_socket_context, client_socket_factory_,
+                      std::move(callback), send_ssl_info);
 }
 
 void SocketFactory::OnAccept(std::unique_ptr<TCPConnectedSocket> socket,
diff --git a/services/network/socket_factory.h b/services/network/socket_factory.h
index 65a5985..31297409 100644
--- a/services/network/socket_factory.h
+++ b/services/network/socket_factory.h
@@ -75,7 +75,17 @@
       mojom::TCPConnectedSocket::UpgradeToTLSCallback callback) override;
 
   net::NetLog* const net_log_;
-  const net::SSLClientSocketContext ssl_client_socket_context_;
+
+  // The following are used when |skip_cert_verification| is specified in
+  // upgrade options.
+  net::SSLClientSocketContext no_verification_ssl_client_socket_context_;
+  std::unique_ptr<net::CertVerifier> no_verification_cert_verifier_;
+  std::unique_ptr<net::TransportSecurityState>
+      no_verification_transport_security_state_;
+  std::unique_ptr<net::CTVerifier> no_verification_cert_transparency_verifier_;
+  std::unique_ptr<net::CTPolicyEnforcer> no_verification_ct_policy_enforcer_;
+
+  net::SSLClientSocketContext ssl_client_socket_context_;
   net::ClientSocketFactory* client_socket_factory_;
   net::SSLConfigService* const ssl_config_service_;
   mojo::StrongBindingSet<mojom::UDPSocket> udp_socket_bindings_;
diff --git a/services/network/tcp_connected_socket.cc b/services/network/tcp_connected_socket.cc
index 28423fa..e6bbbbf 100644
--- a/services/network/tcp_connected_socket.cc
+++ b/services/network/tcp_connected_socket.cc
@@ -97,9 +97,9 @@
     return;
   }
   if (!socket_ || !socket_->IsConnected()) {
-    std::move(callback).Run(net::ERR_SOCKET_NOT_CONNECTED,
-                            mojo::ScopedDataPipeConsumerHandle(),
-                            mojo::ScopedDataPipeProducerHandle());
+    std::move(callback).Run(
+        net::ERR_SOCKET_NOT_CONNECTED, mojo::ScopedDataPipeConsumerHandle(),
+        mojo::ScopedDataPipeProducerHandle(), base::nullopt);
     return;
   }
   auto socket_handle = std::make_unique<net::ClientSocketHandle>();
diff --git a/services/network/tcp_socket_unittest.cc b/services/network/tcp_socket_unittest.cc
index 2880bf3..290ac45 100644
--- a/services/network/tcp_socket_unittest.cc
+++ b/services/network/tcp_socket_unittest.cc
@@ -1030,7 +1030,8 @@
         base::BindLambdaForTesting(
             [&](int result,
                 mojo::ScopedDataPipeConsumerHandle receive_pipe_handle,
-                mojo::ScopedDataPipeProducerHandle send_pipe_handle) {
+                mojo::ScopedDataPipeProducerHandle send_pipe_handle,
+                const base::Optional<net::SSLInfo>& ssl_info) {
               EXPECT_EQ(net::ERR_FAILED, result);
               run_loop.Quit();
             }));
diff --git a/services/network/tls_client_socket.cc b/services/network/tls_client_socket.cc
index 54b7815..0243345e 100644
--- a/services/network/tls_client_socket.cc
+++ b/services/network/tls_client_socket.cc
@@ -31,8 +31,10 @@
     std::unique_ptr<net::ClientSocketHandle> tcp_socket,
     const net::SSLClientSocketContext& ssl_client_socket_context,
     net::ClientSocketFactory* socket_factory,
-    mojom::TCPConnectedSocket::UpgradeToTLSCallback callback) {
+    mojom::TCPConnectedSocket::UpgradeToTLSCallback callback,
+    bool send_ssl_info) {
   connect_callback_ = std::move(callback);
+  send_ssl_info_ = send_ssl_info;
   socket_ = socket_factory->CreateSSLClientSocket(std::move(tcp_socket),
                                                   host_port_pair, ssl_config,
                                                   ssl_client_socket_context);
@@ -49,7 +51,7 @@
     socket_ = nullptr;
     std::move(connect_callback_)
         .Run(result, mojo::ScopedDataPipeConsumerHandle(),
-             mojo::ScopedDataPipeProducerHandle());
+             mojo::ScopedDataPipeProducerHandle(), base::nullopt);
     return;
   }
   mojo::DataPipe send_pipe;
@@ -57,9 +59,15 @@
   socket_data_pump_ = std::make_unique<SocketDataPump>(
       socket_.get(), this /*delegate*/, std::move(receive_pipe.producer_handle),
       std::move(send_pipe.consumer_handle), traffic_annotation_);
+  base::Optional<net::SSLInfo> ssl_info;
+  if (send_ssl_info_) {
+    net::SSLInfo local;
+    socket_->GetSSLInfo(&local);
+    ssl_info = std::move(local);
+  }
   std::move(connect_callback_)
       .Run(net::OK, std::move(receive_pipe.consumer_handle),
-           std::move(send_pipe.producer_handle));
+           std::move(send_pipe.producer_handle), std::move(ssl_info));
 }
 
 void TLSClientSocket::OnNetworkReadError(int net_error) {
diff --git a/services/network/tls_client_socket.h b/services/network/tls_client_socket.h
index b5ee7779..70a46c0c 100644
--- a/services/network/tls_client_socket.h
+++ b/services/network/tls_client_socket.h
@@ -40,7 +40,8 @@
                std::unique_ptr<net::ClientSocketHandle> tcp_socket,
                const net::SSLClientSocketContext& ssl_client_socket_context,
                net::ClientSocketFactory* socket_factory,
-               mojom::TCPConnectedSocket::UpgradeToTLSCallback callback);
+               mojom::TCPConnectedSocket::UpgradeToTLSCallback callback,
+               bool send_ssl_info);
 
  private:
   void OnTLSConnectCompleted(int result);
@@ -54,6 +55,7 @@
   std::unique_ptr<SocketDataPump> socket_data_pump_;
   std::unique_ptr<net::SSLClientSocket> socket_;
   mojom::TCPConnectedSocket::UpgradeToTLSCallback connect_callback_;
+  bool send_ssl_info_ = false;
   const net::NetworkTrafficAnnotationTag traffic_annotation_;
 
   DISALLOW_COPY_AND_ASSIGN(TLSClientSocket);
diff --git a/services/network/tls_client_socket_unittest.cc b/services/network/tls_client_socket_unittest.cc
index 8d1242f..8a27192 100644
--- a/services/network/tls_client_socket_unittest.cc
+++ b/services/network/tls_client_socket_unittest.cc
@@ -120,7 +120,8 @@
                mojo::ScopedDataPipeConsumerHandle* consumer_handle,
                mojo::ScopedDataPipeProducerHandle* producer_handle, int result,
                mojo::ScopedDataPipeConsumerHandle receive_pipe_handle,
-               mojo::ScopedDataPipeProducerHandle send_pipe_handle) {
+               mojo::ScopedDataPipeProducerHandle send_pipe_handle,
+               const base::Optional<net::SSLInfo>& ssl_info) {
               *consumer_handle = std::move(receive_pipe_handle);
               *producer_handle = std::move(send_pipe_handle);
               std::move(cb).Run(result);
@@ -307,7 +308,8 @@
       base::BindLambdaForTesting(
           [&](int result,
               mojo::ScopedDataPipeConsumerHandle receive_pipe_handle,
-              mojo::ScopedDataPipeProducerHandle send_pipe_handle) {
+              mojo::ScopedDataPipeProducerHandle send_pipe_handle,
+              const base::Optional<net::SSLInfo>& ssl_info) {
             net_error = result;
             run_loop.Quit();
           }));
@@ -353,7 +355,8 @@
       base::BindLambdaForTesting(
           [&](int result,
               mojo::ScopedDataPipeConsumerHandle receive_pipe_handle,
-              mojo::ScopedDataPipeProducerHandle send_pipe_handle) {
+              mojo::ScopedDataPipeProducerHandle send_pipe_handle,
+              const base::Optional<net::SSLInfo>& ssl_info) {
             net_error = result;
             run_loop.Quit();
           }));
diff --git a/services/ui/input_devices/BUILD.gn b/services/ui/input_devices/BUILD.gn
index f99b761..687a256 100644
--- a/services/ui/input_devices/BUILD.gn
+++ b/services/ui/input_devices/BUILD.gn
@@ -19,14 +19,6 @@
   public_deps = [
     "//services/ui/public/interfaces/input_devices",
   ]
-
-  if (is_chromeos) {
-    sources += [
-      "touch_device_server.cc",
-      "touch_device_server.h",
-    ]
-    deps += [ "//ui/display/manager" ]
-  }
 }
 
 source_set("tests") {
diff --git a/services/ui/input_devices/touch_device_server.cc b/services/ui/input_devices/touch_device_server.cc
deleted file mode 100644
index 2263282..0000000
--- a/services/ui/input_devices/touch_device_server.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "services/ui/input_devices/touch_device_server.h"
-
-#include <utility>
-#include <vector>
-
-#include "ui/display/manager/default_touch_transform_setter.h"
-#include "ui/events/devices/input_device.h"
-#include "ui/events/devices/touchscreen_device.h"
-
-namespace ui {
-
-TouchDeviceServer::TouchDeviceServer()
-    : touch_transform_setter_(
-          std::make_unique<display::DefaultTouchTransformSetter>()) {}
-
-TouchDeviceServer::~TouchDeviceServer() {}
-
-void TouchDeviceServer::AddBinding(mojom::TouchDeviceServerRequest request) {
-  bindings_.AddBinding(this, std::move(request));
-}
-
-void TouchDeviceServer::ConfigureTouchDevices(
-    const std::vector<ui::TouchDeviceTransform>& transforms) {
-  touch_transform_setter_->ConfigureTouchDevices(transforms);
-}
-
-}  // namespace ui
diff --git a/services/ui/input_devices/touch_device_server.h b/services/ui/input_devices/touch_device_server.h
deleted file mode 100644
index 84478e9..0000000
--- a/services/ui/input_devices/touch_device_server.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SERVICES_UI_INPUT_DEVICES_TOUCH_DEVICE_SERVER_H_
-#define SERVICES_UI_INPUT_DEVICES_TOUCH_DEVICE_SERVER_H_
-
-#include "base/macros.h"
-#include "mojo/public/cpp/bindings/binding_set.h"
-#include "mojo/public/cpp/bindings/interface_ptr_set.h"
-#include "services/ui/public/interfaces/input_devices/touch_device_server.mojom.h"
-
-namespace display {
-class DefaultTouchTransformSetter;
-}
-
-namespace ui {
-
-// Implementation of mojom::TouchDeviceServer. Uses an instance of
-// DefaultTouchTransformSetter to apply the actual updates.
-class TouchDeviceServer : public mojom::TouchDeviceServer {
- public:
-  TouchDeviceServer();
-  ~TouchDeviceServer() override;
-
-  void AddBinding(mojom::TouchDeviceServerRequest request);
-
-  // mojom::TouchDeviceServer:
-  void ConfigureTouchDevices(
-      const std::vector<ui::TouchDeviceTransform>& transforms) override;
-
- private:
-  mojo::BindingSet<mojom::TouchDeviceServer> bindings_;
-  std::unique_ptr<display::DefaultTouchTransformSetter> touch_transform_setter_;
-
-  DISALLOW_COPY_AND_ASSIGN(TouchDeviceServer);
-};
-
-}  // namespace ui
-
-#endif  // SERVICES_UI_INPUT_DEVICES_TOUCH_DEVICE_SERVER_H_
diff --git a/services/ui/manifest.json b/services/ui/manifest.json
index 5db8c2b0..965c2c7 100644
--- a/services/ui/manifest.json
+++ b/services/ui/manifest.json
@@ -46,17 +46,13 @@
           "ui.mojom.EventInjector",
           "ui.mojom.RemotingEventInjector"
         ],
-        // TODO(sky): update this to reflect what is really possible.
         "window_manager": [
           "discardable_memory.mojom.DiscardableSharedMemoryManager",
-          "display.mojom.NativeDisplayDelegate",
-          "ui.mojom.AccessibilityManager",
           "ui.mojom.EventInjector",
           "ui.mojom.Gpu",
           "ui.mojom.IMEDriver",
           "ui.mojom.InputDeviceController",
           "ui.mojom.InputDeviceServer",
-          "ui.mojom.TouchDeviceServer",
           "ui.mojom.UserActivityMonitor"
         ]
       },
diff --git a/services/ui/public/interfaces/BUILD.gn b/services/ui/public/interfaces/BUILD.gn
index 127c95d1..168d04d 100644
--- a/services/ui/public/interfaces/BUILD.gn
+++ b/services/ui/public/interfaces/BUILD.gn
@@ -7,7 +7,6 @@
 
 mojom("interfaces") {
   sources = [
-    "accessibility_manager.mojom",
     "event_injector.mojom",
     "gpu.mojom",
     "remoting_event_injector.mojom",
diff --git a/services/ui/public/interfaces/accessibility_manager.mojom b/services/ui/public/interfaces/accessibility_manager.mojom
deleted file mode 100644
index a63873d..0000000
--- a/services/ui/public/interfaces/accessibility_manager.mojom
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module ui.mojom;
-
-// Allows controlling accessibility in the UI service. Only one client at a time
-// can connect to AccessibilityManager per user. If a new client connects to it,
-// then any previously connected client for that user is disconnected.
-interface AccessibilityManager {
-  // Enables (or disables) high contrast mode.
-  SetHighContrastMode(bool enabled);
-};
diff --git a/services/ui/public/interfaces/input_devices/BUILD.gn b/services/ui/public/interfaces/input_devices/BUILD.gn
index 5b0180ef..ba75934 100644
--- a/services/ui/public/interfaces/input_devices/BUILD.gn
+++ b/services/ui/public/interfaces/input_devices/BUILD.gn
@@ -15,11 +15,7 @@
   ]
 
   if (is_chromeos) {
-    sources += [ "touch_device_server.mojom" ]
-    public_deps += [ "//ui/events/devices/mojo" ]
-    if (use_ozone) {
-      sources += [ "input_device_controller.mojom" ]
-      public_deps += [ "//mojo/public/mojom/base" ]
-    }
+    sources += [ "input_device_controller.mojom" ]
+    public_deps += [ "//mojo/public/mojom/base" ]
   }
 }
diff --git a/services/ui/public/interfaces/input_devices/touch_device_server.mojom b/services/ui/public/interfaces/input_devices/touch_device_server.mojom
deleted file mode 100644
index fefcb6f8..0000000
--- a/services/ui/public/interfaces/input_devices/touch_device_server.mojom
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module ui.mojom;
-
-import "ui/events/devices/mojo/touch_device_transform.mojom";
-
-interface TouchDeviceServer {
-  // Reset the touch configuration.
-  ConfigureTouchDevices(array<ui.mojom.TouchDeviceTransform> transforms);
-};
diff --git a/services/ui/ws2/embedding.cc b/services/ui/ws2/embedding.cc
index f356f305..12eb575 100644
--- a/services/ui/ws2/embedding.cc
+++ b/services/ui/ws2/embedding.cc
@@ -22,7 +22,8 @@
       window_(window),
       embedding_tree_intercepts_events_(embedding_tree_intercepts_events) {
   DCHECK(window_);
-}  // namespace ws2
+  DCHECK(!embedding_tree_intercepts_events_ || embedding_tree_);
+}
 
 Embedding::~Embedding() {
   if (!binding_ && embedded_tree_)
diff --git a/services/ui/ws2/remote_view_host/server_remote_view_host.cc b/services/ui/ws2/remote_view_host/server_remote_view_host.cc
index 3f0fd360..6056cd6 100644
--- a/services/ui/ws2/remote_view_host/server_remote_view_host.cc
+++ b/services/ui/ws2/remote_view_host/server_remote_view_host.cc
@@ -27,6 +27,13 @@
   embed_flags_ = embed_flags;
   embed_callback_ = std::move(callback);
 
+  embedding_root_ = std::make_unique<aura::Window>(
+      nullptr, aura::client::WINDOW_TYPE_UNKNOWN, window_service_->env());
+  embedding_root_->set_owned_by_parent(false);
+  embedding_root_->SetName("ServerRemoteViewHostWindow");
+  embedding_root_->SetType(aura::client::WINDOW_TYPE_CONTROL);
+  embedding_root_->Init(ui::LAYER_NOT_DRAWN);
+
   // TODO(sky): having to wait for being parented is a bit of a hassle. Fix
   // this.
   if (GetWidget())
@@ -40,13 +47,6 @@
   // There is a pending embed request.
   DCHECK(!embed_token_.is_empty());
 
-  embedding_root_ = std::make_unique<aura::Window>(
-      nullptr, aura::client::WINDOW_TYPE_UNKNOWN, window_service_->env());
-  embedding_root_->set_owned_by_parent(false);
-  embedding_root_->SetName("ServerRemoteViewHostWindow");
-  embedding_root_->SetType(aura::client::WINDOW_TYPE_CONTROL);
-  embedding_root_->Init(ui::LAYER_NOT_DRAWN);
-
   // TODO(sky): fix this, only necessary because of restrictions in WindowTree.
   // Must happen before EmbedUsingToken call for window server to figure out
   // the relevant display.
@@ -62,7 +62,7 @@
 }
 
 void ServerRemoteViewHost::AddedToWidget() {
-  if (!native_view() && !embedding_root_)
+  if (!native_view())
     EmbedImpl();
 }
 
diff --git a/services/ui/ws2/remote_view_host/server_remote_view_host.h b/services/ui/ws2/remote_view_host/server_remote_view_host.h
index f5a955a..53554aed 100644
--- a/services/ui/ws2/remote_view_host/server_remote_view_host.h
+++ b/services/ui/ws2/remote_view_host/server_remote_view_host.h
@@ -50,6 +50,8 @@
                        int embed_flags,
                        EmbedCallback callback);
 
+  aura::Window* embedding_root() { return embedding_root_.get(); }
+
  private:
   void EmbedImpl();
 
diff --git a/services/ui/ws2/window_service.cc b/services/ui/ws2/window_service.cc
index 23246ccd..eacc2a2d 100644
--- a/services/ui/ws2/window_service.cc
+++ b/services/ui/ws2/window_service.cc
@@ -142,10 +142,12 @@
   if (!tree_and_id.tree)
     return false;
 
+  // Event interception is not supported for embedding without a client.
+  DCHECK(!(embed_flags & mojom::kEmbedFlagEmbedderInterceptsEvents));
+  const bool owner_intercept_events = false;
+
   ServerWindow* server_window =
       GetServerWindowForWindowCreateIfNecessary(window);
-  const bool owner_intercept_events =
-      (embed_flags & mojom::kEmbedFlagEmbedderInterceptsEvents) != 0;
   tree_and_id.tree->CompleteScheduleEmbedForExistingClient(
       window, tree_and_id.id, embed_token);
   std::unique_ptr<Embedding> embedding =
diff --git a/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.cc b/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.cc
index a77e6f8..3343c8d7 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.cc
+++ b/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.cc
@@ -4,6 +4,7 @@
 
 #include "services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.h"
 
+#include "build/build_config.h"
 #include "services/viz/public/cpp/compositing/begin_frame_args_struct_traits.h"
 #include "services/viz/public/cpp/compositing/selection_struct_traits.h"
 #include "services/viz/public/cpp/compositing/surface_id_struct_traits.h"
@@ -22,14 +23,9 @@
     return false;
 
   out->page_scale_factor = data.page_scale_factor();
-  if (!data.ReadScrollableViewportSize(&out->scrollable_viewport_size) ||
-      !data.ReadRootLayerSize(&out->root_layer_size)) {
+  if (!data.ReadScrollableViewportSize(&out->scrollable_viewport_size))
     return false;
-  }
 
-  out->min_page_scale_factor = data.min_page_scale_factor();
-  out->max_page_scale_factor = data.max_page_scale_factor();
-  out->root_overflow_y_hidden = data.root_overflow_y_hidden();
   out->may_contain_video = data.may_contain_video();
   out->is_resourceless_software_draw_with_scroll_or_animation =
       data.is_resourceless_software_draw_with_scroll_or_animation();
@@ -42,11 +38,19 @@
   out->send_frame_token_to_embedder = data.send_frame_token_to_embedder();
   out->request_presentation_feedback = data.request_presentation_feedback();
   out->root_background_color = data.root_background_color();
+  out->min_page_scale_factor = data.min_page_scale_factor();
+
+#if defined(OS_ANDROID)
+  out->max_page_scale_factor = data.max_page_scale_factor();
+  out->root_overflow_y_hidden = data.root_overflow_y_hidden();
+#endif
+
   return data.ReadLatencyInfo(&out->latency_info) &&
          data.ReadReferencedSurfaces(&out->referenced_surfaces) &&
          data.ReadDeadline(&out->deadline) &&
          data.ReadActivationDependencies(&out->activation_dependencies) &&
 #if defined(OS_ANDROID)
+         data.ReadRootLayerSize(&out->root_layer_size) &&
          data.ReadSelection(&out->selection) &&
 #endif  // defined(OS_ANDROID)
          data.ReadBeginFrameAck(&out->begin_frame_ack);
diff --git a/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.h b/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.h
index 5c2fc5e..09e094a 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.h
+++ b/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.h
@@ -38,26 +38,6 @@
     return metadata.scrollable_viewport_size;
   }
 
-  static gfx::SizeF root_layer_size(
-      const viz::CompositorFrameMetadata& metadata) {
-    return metadata.root_layer_size;
-  }
-
-  static float min_page_scale_factor(
-      const viz::CompositorFrameMetadata& metadata) {
-    return metadata.min_page_scale_factor;
-  }
-
-  static float max_page_scale_factor(
-      const viz::CompositorFrameMetadata& metadata) {
-    return metadata.max_page_scale_factor;
-  }
-
-  static bool root_overflow_y_hidden(
-      const viz::CompositorFrameMetadata& metadata) {
-    return metadata.root_overflow_y_hidden;
-  }
-
   static bool may_contain_video(const viz::CompositorFrameMetadata& metadata) {
     return metadata.may_contain_video;
   }
@@ -136,7 +116,27 @@
     return metadata.request_presentation_feedback;
   }
 
+  static float min_page_scale_factor(
+      const viz::CompositorFrameMetadata& metadata) {
+    return metadata.min_page_scale_factor;
+  }
+
 #if defined(OS_ANDROID)
+  static float max_page_scale_factor(
+      const viz::CompositorFrameMetadata& metadata) {
+    return metadata.max_page_scale_factor;
+  }
+
+  static const gfx::SizeF& root_layer_size(
+      const viz::CompositorFrameMetadata& metadata) {
+    return metadata.root_layer_size;
+  }
+
+  static bool root_overflow_y_hidden(
+      const viz::CompositorFrameMetadata& metadata) {
+    return metadata.root_overflow_y_hidden;
+  }
+
   static const viz::Selection<gfx::SelectionBound>& selection(
       const viz::CompositorFrameMetadata& metadata) {
     return metadata.selection;
diff --git a/services/viz/public/cpp/compositing/struct_traits_unittest.cc b/services/viz/public/cpp/compositing/struct_traits_unittest.cc
index f67821b5..97d5155 100644
--- a/services/viz/public/cpp/compositing/struct_traits_unittest.cc
+++ b/services/viz/public/cpp/compositing/struct_traits_unittest.cc
@@ -614,10 +614,6 @@
   const gfx::Vector2dF root_scroll_offset(1234.5f, 6789.1f);
   const float page_scale_factor = 1337.5f;
   const gfx::SizeF scrollable_viewport_size(1337.7f, 1234.5f);
-  const gfx::SizeF root_layer_size(1234.5f, 5432.1f);
-  const float min_page_scale_factor = 3.5f;
-  const float max_page_scale_factor = 4.6f;
-  const bool root_overflow_y_hidden = true;
   const bool may_contain_video = true;
   const bool is_resourceless_software_draw_with_scroll_or_animation = true;
   const float top_bar_height(1234.5f);
@@ -641,7 +637,12 @@
   uint32_t frame_token = 0xdeadbeef;
   uint64_t begin_frame_ack_sequence_number = 0xdeadbeef;
   FrameDeadline frame_deadline(base::TimeTicks(), 4u, base::TimeDelta(), true);
+  const float min_page_scale_factor = 3.5f;
+
 #if defined(OS_ANDROID)
+  const float max_page_scale_factor = 4.6f;
+  const gfx::SizeF root_layer_size(1234.5f, 5432.1f);
+  const bool root_overflow_y_hidden = true;
   Selection<gfx::SelectionBound> selection;
   selection.start.SetEdge(gfx::PointF(1234.5f, 67891.f),
                           gfx::PointF(5432.1f, 1987.6f));
@@ -658,10 +659,6 @@
   input.root_scroll_offset = root_scroll_offset;
   input.page_scale_factor = page_scale_factor;
   input.scrollable_viewport_size = scrollable_viewport_size;
-  input.root_layer_size = root_layer_size;
-  input.min_page_scale_factor = min_page_scale_factor;
-  input.max_page_scale_factor = max_page_scale_factor;
-  input.root_overflow_y_hidden = root_overflow_y_hidden;
   input.may_contain_video = may_contain_video;
   input.is_resourceless_software_draw_with_scroll_or_animation =
       is_resourceless_software_draw_with_scroll_or_animation;
@@ -676,7 +673,12 @@
   input.deadline = frame_deadline;
   input.frame_token = frame_token;
   input.begin_frame_ack.sequence_number = begin_frame_ack_sequence_number;
+  input.min_page_scale_factor = min_page_scale_factor;
+
 #if defined(OS_ANDROID)
+  input.max_page_scale_factor = max_page_scale_factor;
+  input.root_layer_size = root_layer_size;
+  input.root_overflow_y_hidden = root_overflow_y_hidden;
   input.selection = selection;
 #endif  // defined(OS_ANDROID)
 
@@ -686,10 +688,6 @@
   EXPECT_EQ(root_scroll_offset, output.root_scroll_offset);
   EXPECT_EQ(page_scale_factor, output.page_scale_factor);
   EXPECT_EQ(scrollable_viewport_size, output.scrollable_viewport_size);
-  EXPECT_EQ(root_layer_size, output.root_layer_size);
-  EXPECT_EQ(min_page_scale_factor, output.min_page_scale_factor);
-  EXPECT_EQ(max_page_scale_factor, output.max_page_scale_factor);
-  EXPECT_EQ(root_overflow_y_hidden, output.root_overflow_y_hidden);
   EXPECT_EQ(may_contain_video, output.may_contain_video);
   EXPECT_EQ(is_resourceless_software_draw_with_scroll_or_animation,
             output.is_resourceless_software_draw_with_scroll_or_animation);
@@ -712,7 +710,12 @@
   EXPECT_EQ(frame_token, output.frame_token);
   EXPECT_EQ(begin_frame_ack_sequence_number,
             output.begin_frame_ack.sequence_number);
+  EXPECT_EQ(min_page_scale_factor, output.min_page_scale_factor);
+
 #if defined(OS_ANDROID)
+  EXPECT_EQ(max_page_scale_factor, output.max_page_scale_factor);
+  EXPECT_EQ(root_layer_size, output.root_layer_size);
+  EXPECT_EQ(root_overflow_y_hidden, output.root_overflow_y_hidden);
   EXPECT_EQ(selection, output.selection);
 #endif  // defined(OS_ANDROID)
 }
diff --git a/services/viz/public/interfaces/compositing/compositor_frame_metadata.mojom b/services/viz/public/interfaces/compositing/compositor_frame_metadata.mojom
index a1bccf0c..f1d6844 100644
--- a/services/viz/public/interfaces/compositing/compositor_frame_metadata.mojom
+++ b/services/viz/public/interfaces/compositing/compositor_frame_metadata.mojom
@@ -18,10 +18,6 @@
   gfx.mojom.Vector2dF root_scroll_offset;
   float page_scale_factor;
   gfx.mojom.SizeF scrollable_viewport_size;
-  gfx.mojom.SizeF root_layer_size;
-  float min_page_scale_factor;
-  float max_page_scale_factor;
-  bool root_overflow_y_hidden;
   bool may_contain_video;
   bool is_resourceless_software_draw_with_scroll_or_animation;
   float top_controls_height;
@@ -39,6 +35,17 @@
   bool send_frame_token_to_embedder;
   bool request_presentation_feedback;
 
+  float min_page_scale_factor;
+
+  [EnableIf=is_android]
+  float max_page_scale_factor;
+
+  [EnableIf=is_android]
+  gfx.mojom.SizeF root_layer_size;
+
+  [EnableIf=is_android]
+  bool root_overflow_y_hidden;
+
   [EnableIf=is_android]
   Selection selection;
 };
diff --git a/storage/common/fileapi/file_system_type_converters.h b/storage/common/fileapi/file_system_type_converters.h
index 030f3a9..88965e2 100644
--- a/storage/common/fileapi/file_system_type_converters.h
+++ b/storage/common/fileapi/file_system_type_converters.h
@@ -5,6 +5,7 @@
 #ifndef STORAGE_COMMON_FILEAPI_FILE_SYSTEM_TYPE_CONVERTERS_H_
 #define STORAGE_COMMON_FILEAPI_FILE_SYSTEM_TYPE_CONVERTERS_H_
 
+#include "storage/common/fileapi/file_system_info.h"
 #include "storage/common/fileapi/file_system_types.h"
 #include "third_party/blink/public/mojom/filesystem/file_system.mojom.h"
 
diff --git a/testing/buildbot/chromium.json b/testing/buildbot/chromium.json
index 1af50c5..848c4d13 100644
--- a/testing/buildbot/chromium.json
+++ b/testing/buildbot/chromium.json
@@ -1,11 +1,21 @@
 {
   "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
   "AAAAA2 See generate_buildbot_json.py to make changes": {},
+  "android-dbg": {
+    "additional_compile_targets": [
+      "all"
+    ]
+  },
   "android-rel": {
     "additional_compile_targets": [
       "all"
     ]
   },
+  "linux-dbg": {
+    "additional_compile_targets": [
+      "all"
+    ]
+  },
   "linux-rel": {
     "additional_compile_targets": [
       "all"
@@ -20,6 +30,11 @@
       }
     ]
   },
+  "mac-dbg": {
+    "additional_compile_targets": [
+      "all"
+    ]
+  },
   "mac-rel": {
     "additional_compile_targets": [
       "all"
@@ -34,6 +49,11 @@
       }
     ]
   },
+  "win-dbg": {
+    "additional_compile_targets": [
+      "all"
+    ]
+  },
   "win-rel": {
     "additional_compile_targets": [
       "all"
@@ -45,6 +65,11 @@
       }
     ]
   },
+  "win32-dbg": {
+    "additional_compile_targets": [
+      "all"
+    ]
+  },
   "win32-rel": {
     "additional_compile_targets": [
       "all"
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json
index ede34a0..68a0aca 100644
--- a/testing/buildbot/chromium.perf.fyi.json
+++ b/testing/buildbot/chromium.perf.fyi.json
@@ -102,6 +102,41 @@
     "isolated_scripts": [
       {
         "args": [
+          "--benchmarks=blink_perf.layout_ng",
+          "-v",
+          "--upload-results",
+          "--output-format=histograms",
+          "--browser=release"
+        ],
+        "isolate_name": "performance_test_suite",
+        "merge": {
+          "args": [
+            "--service-account-file",
+            "/creds/service_accounts/service-account-chromium-perf-histograms.json"
+          ],
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "blink_perf.layout_ng",
+        "override_compile_targets": [
+          "performance_test_suite"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "10de:1cb3",
+              "id": "build186-b7",
+              "pool": "chrome.tests.perf-fyi"
+            }
+          ],
+          "expiration": 36000,
+          "hard_timeout": 14400,
+          "ignore_task_failure": false,
+          "io_timeout": 3600
+        }
+      },
+      {
+        "args": [
           "--benchmarks=loading.desktop.network_service,rendering.oopd.desktop",
           "-v",
           "--upload-results",
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 579e19b..3442ef3 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -255,7 +255,9 @@
   },
   'checkbins': {
     'remove_from': [
+      'linux-dbg',
       'linux-rel',
+      'mac-dbg',
       'mac-rel',
     ],
   },
@@ -986,16 +988,28 @@
   },
   'sizes': {
     'remove_from': [
+      'win32-dbg',
       'win32-rel',
+      'win-dbg',
       'win-rel',
     ],
     'modifications': {
       # chromium
+      'mac-dbg': {
+        'args': [
+          'mac-debug/sizes',
+        ],
+      },
       'mac-rel': {
         'args': [
           'mac-release/sizes',
         ],
       },
+      'linux-dbg': {
+        'args': [
+          'linux-debug-64/sizes',
+        ],
+      },
       'linux-rel': {
         'args': [
           'linux-release-64/sizes',
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 9f530cb..00445444 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -12,6 +12,11 @@
   {
     'name': 'chromium',
     'machines': {
+      'linux-dbg': {
+        'additional_compile_targets': [
+          'all',
+        ],
+      },
       'linux-rel': {
         'additional_compile_targets': [
           'all',
@@ -20,6 +25,11 @@
           'scripts': 'public_build_scripts',
         },
       },
+      'mac-dbg': {
+        'additional_compile_targets': [
+          'all',
+        ],
+      },
       'mac-rel': {
         'additional_compile_targets': [
           'all',
@@ -28,6 +38,11 @@
           'scripts': 'public_build_scripts',
         },
       },
+      'win32-dbg': {
+        'additional_compile_targets': [
+          'all',
+        ],
+      },
       'win32-rel': {
         'additional_compile_targets': [
           'all',
@@ -36,6 +51,11 @@
           'scripts': 'public_build_scripts',
         },
       },
+      'win-dbg': {
+        'additional_compile_targets': [
+          'all',
+        ],
+      },
       'win-rel': {
         'additional_compile_targets': [
           'all',
@@ -44,6 +64,11 @@
           'scripts': 'public_build_scripts',
         },
       },
+      'android-dbg': {
+        'additional_compile_targets': [
+          'all',
+        ],
+      },
       'android-rel': {
         'additional_compile_targets': [
           'all',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 10327a3..1cbcc59 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1948,21 +1948,6 @@
             ]
         }
     ],
-    "IOSurfaceCapturer": [
-        {
-            "platforms": [
-                "mac"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "IOSurfaceCapturer"
-                    ]
-                }
-            ]
-        }
-    ],
     "ImprovedRecoveryComponent": [
         {
             "platforms": [
diff --git a/third_party/WebKit/LayoutTests/MSANExpectations b/third_party/WebKit/LayoutTests/MSANExpectations
index 2e3c7115..b1be99d 100644
--- a/third_party/WebKit/LayoutTests/MSANExpectations
+++ b/third_party/WebKit/LayoutTests/MSANExpectations
@@ -186,7 +186,7 @@
 
 # Disabled by sheriff due to repeated flakes
 crbug.com/873045 [ Linux ] external/wpt/WebCryptoAPI/idlharness.https.any.worker.html [ Pass Failure Timeout ]
+crbug.com/873045 [ Linux ] external/wpt/picture-in-picture/idlharness.window.html [ Pass Failure Timeout ]
 # Also flaking according to crbug.com/873045 but mentioned in existing entries above:
-# external/wpt/picture-in-picture/idlharness.window.html
 # external/wpt/notifications/idlharness.https.any.worker.html
 # external/wpt/xhr/idlharness.any.worker.html
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index aaf70a7..e42b12c 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2722,6 +2722,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/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html [ Failure ]
+crbug.com/626703 external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/quirks.html [ Failure ]
 crbug.com/626703 external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html [ Failure ]
 crbug.com/626703 external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html [ Failure ]
 crbug.com/626703 [ Mac10.12 ] external/wpt/webxr/xrSession_requestAnimationFrame_getDevicePose.https.html [ Failure Timeout ]
@@ -4965,6 +4967,9 @@
 # Test frequently times out on Mac CQ bots.
 crbug.com/874703 [ Mac ] http/tests/devtools/extensions/extensions-panel.js [ Timeout Pass ]
 
+# This won't pass until the bug fixed.
+crbug.com/875287 fast/frames/crash-frameset-CSS-content-property.html [ Crash ]
+
 # Wake Lock api test timeouts
 crbug.com/872530 external/wpt/wake-lock/wakelock-applicability-manual.https.html [ Pass Timeout ]
 crbug.com/872530 external/wpt/wake-lock/wakelock-document-hidden.https.html [ Pass Timeout ]
@@ -5027,3 +5032,5 @@
 # Does not set correct realm as scope in current implementation
 crbug.com/872138 external/wpt/client-hints/accept_ch.tentative.https.html [ Timeout Pass ]
 
+# Sheriff 2018-08-23
+crbug.com/877183 [ Linux Win ] external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-intrinsic-ratio-003v.html [ Pass Failure ]
diff --git a/third_party/WebKit/LayoutTests/editing/selection/modify_extend/extend_by_character.html b/third_party/WebKit/LayoutTests/editing/selection/modify_extend/extend_by_character.html
index f7ea23ad..9d9a872 100644
--- a/third_party/WebKit/LayoutTests/editing/selection/modify_extend/extend_by_character.html
+++ b/third_party/WebKit/LayoutTests/editing/selection/modify_extend/extend_by_character.html
@@ -15,26 +15,26 @@
 test(() => assert_selection(
     [
         '<div contenteditable>',
-            '|a<img src="../../resources/abe.png">new',
-            '<br>nation    <i>  </i> <img src="../../resources/abe.png">',
+            '|a<img src="../../resources/abe.png">new<br>',
+            'nation    <i>  </i> <img src="../../resources/abe.png">',
             '',
             '',
-            'conceived',
-            '<br>nation<img src="../../resources/abe.png">',
+            'conceived<br>',
+            'nation<img src="../../resources/abe.png">',
         '</div>',
     ].join(' '),
     selection => {
-        for (var i = 0; i < 33; ++i)
+        for (var i = 0; i < 31; ++i)
             selection.modify('extend', 'forward', 'character');
     },
     [
         '<div contenteditable>',
-            '^a<img src="../../resources/abe.png">new',
-            '<br>nation    <i>  </i> <img src="../../resources/abe.png">',
+            '^a<img src="../../resources/abe.png">new<br>',
+            'nation    <i>  </i> <img src="../../resources/abe.png">',
             '',
             '',
-            'conceived',
-            '<br>nation|<img src="../../resources/abe.png">',
+            'conceived<br>',
+            'nation|<img src="../../resources/abe.png">',
         '</div>',
     ].join(' ')),
     'extend forward character through image');
@@ -44,20 +44,20 @@
         '<div contenteditable>',
             '<i>F    |and seven</i> years <b>  as </b>our fathers  f upon this',
             'continent, a new nation, conceived &nbsp;&nbsp; in Liberty,   and dedicated to the',
-            'proposition that all ',
-            '<br>men are created equal.',
+            'proposition that all<br>',
+            'men are created equal.',
         '</div>',
     ].join(' '),
     selection => {
-        for (var i = 0; i < 157; ++i)
+        for (var i = 0; i < 156; ++i)
             selection.modify('extend', 'forward', 'character');
     },
     [
         '<div contenteditable>',
             '<i>F    ^and seven</i> years <b>  as </b>our fathers  f upon this',
             'continent, a new nation, conceived \u{00A0}\u{00A0} in Liberty,   and dedicated to the',
-            'proposition that all ',
-            '<br>men are created equal|.',
+            'proposition that all<br>',
+            'men are created equal|.',
         '</div>',
     ].join(' ')),
     'extend forward character through multiple spaces');
@@ -65,26 +65,26 @@
 test(() => assert_selection(
     [
         '<div contenteditable>',
-            'a<img src="../../resources/abe.png">new',
-            '<br>nation    <i>  </i> <img src="../../resources/abe.png">',
+            'a<img src="../../resources/abe.png">new<br>',
+            'nation    <i>  </i> <img src="../../resources/abe.png">',
             '',
             '',
-            'conceived',
-            '<br>nation|<img src="../../resources/abe.png">',
+            'conceived<br>',
+            'nation|<img src="../../resources/abe.png">',
         '</div>',
     ].join(' '),
     selection => {
-        for (var i = 0; i < 30; ++i)
+        for (var i = 0; i < 28; ++i)
             selection.modify('extend', 'backward', 'character');
     },
     [
         '<div contenteditable>',
-            'a<img src="../../resources/abe.png">n|ew',
-            '<br>nation    <i>  </i> <img src="../../resources/abe.png">',
+            'a<img src="../../resources/abe.png">n|ew<br>',
+            'nation    <i>  </i> <img src="../../resources/abe.png">',
             '',
             '',
-            'conceived',
-            '<br>nation^<img src="../../resources/abe.png">',
+            'conceived<br>',
+            'nation^<img src="../../resources/abe.png">',
         '</div>',
     ].join(' ')),
     'extend backward character through image');
@@ -94,20 +94,20 @@
         '<div contenteditable>',
             '<i>F    and seven</i> years <b>  as </b>our fathers  f upon this',
             'continent, a new nation, conceived &nbsp;&nbsp; in Liberty,   and dedicated to the',
-            'proposition that all ',
-            '<br>men are created equ|al.',
+            'proposition that all<br>',
+            'men are created equ|al.',
         '</div>',
     ].join(' '),
     selection => {
-        for (var i = 0; i < 157; ++i)
+        for (var i = 0; i < 156; ++i)
             selection.modify('extend', 'backward', 'character');
     },
     [
         '<div contenteditable>',
             '<i>|F    and seven</i> years <b>  as </b>our fathers  f upon this',
             'continent, a new nation, conceived \u{00A0}\u{00A0} in Liberty,   and dedicated to the',
-            'proposition that all ',
-            '<br>men are created equ^al.',
+            'proposition that all<br>',
+            'men are created equ^al.',
         '</div>',
     ].join(' ')),
     'extend backward character through multiple spaces');
diff --git a/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-002.html b/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-002.html
index 2a78242..5eedfb0a 100644
--- a/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-002.html
+++ b/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-002.html
@@ -3,20 +3,20 @@
 <script src="../../../resources/testharnessreport.js"></script>
 <body>
 <div contenteditable id="root" class="editing">
-<span id="sample">a<img src="../../resources/abe.png">new 
-<br>nation <i>  </i> <img src="../../resources/abe.png"> conceived
-<br>nation<img src="../../resources/abe.png"></span>
+<span id="sample">a<img src="../../resources/abe.png">new<br>
+nation <i>  </i> <img src="../../resources/abe.png"> conceived<br>
+nation<img src="../../resources/abe.png"></span>
 </div>
 <div id="log"></div>
 <script>
 test(function() {
     var selection = window.getSelection();
     selection.collapse(sample, 0);
-    for (i = 0; i < 33; ++i)
+    for (i = 0; i < 31; ++i)
         selection.modify('move', 'forward', 'character');
     assert_true(selection.isCollapsed, 'isCollapsed');
     assert_equals(selection.anchorNode, sample.childNodes[10], 'anchorNode');
-    assert_equals(selection.anchorOffset, 6, 'anchorOffset');
+    assert_equals(selection.anchorOffset, 7, 'anchorOffset');
 });
 </script>
 
diff --git a/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-003.html b/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-003.html
index e60a6c7..3b04edf 100644
--- a/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-003.html
+++ b/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-003.html
@@ -5,19 +5,19 @@
 <div contenteditable id="root" class="editing">
 <span id="sample"><i>F    and seven</i> years <b>  as </b>our fathers  f upon this
 continent, a new nation, conceived &nbsp;&nbsp; in Liberty,                 and dedicated to the
-proposition that all 
-<br>men are created equal.</span>
+proposition that all<br>
+men are created equal.</span>
 </div>
 <div id="log"></div>
 <script>
 test(function () {
     var selection = window.getSelection();
     selection.collapse(sample, 0);
-    for (i = 0; i < 159; ++i)
+    for (i = 0; i < 158; ++i)
       selection.modify('move', 'forward', 'character');
     assert_true(selection.isCollapsed, 'isCollapsed');
     assert_equals(selection.anchorNode, sample.childNodes[5], 'anchorNode');
-    assert_equals(selection.anchorOffset, 21, 'anchorOffset');
+    assert_equals(selection.anchorOffset, 22, 'anchorOffset');
 });
 </script>
 
diff --git a/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-004.html b/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-004.html
index 6cc4ede..9987bf4f 100644
--- a/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-004.html
+++ b/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-004.html
@@ -3,18 +3,18 @@
 <script src="../../../resources/testharnessreport.js"></script>
 <body>
 <div contenteditable id="root" class="editing">
-<span id="sample">a<img src="../../resources/abe.png">new 
-<br>nation <i>  </i> <img src="../../resources/abe.png"> conceived
-<br>nation<img src="../../resources/abe.png"></span>
+<span id="sample">a<img src="../../resources/abe.png">new<br>
+nation <i>  </i> <img src="../../resources/abe.png"> conceived<br>
+nation<img src="../../resources/abe.png"></span>
 </div>
 <div id="log"></div>
 <script>
 test(function () {
     var selection = window.getSelection();
     selection.collapse(sample, 0);
-    for (i = 0; i < 33; ++i)
+    for (i = 0; i < 31; ++i)
     selection.modify('move', 'forward', 'character');
-    for (i = 0; i < 32; ++i)
+    for (i = 0; i < 30; ++i)
     selection.modify('move', 'backward', 'character');
     assert_true(selection.isCollapsed, 'isCollapsed');
     assert_equals(selection.anchorNode, sample.firstChild, 'anchorNode');
diff --git a/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-005.html b/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-005.html
index 8b45c4f..5f2b223 100644
--- a/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-005.html
+++ b/third_party/WebKit/LayoutTests/editing/selection/modify_move/move-by-character-005.html
@@ -5,17 +5,17 @@
 <div contenteditable id="root" class="editing">
 <span id="sample"><i>F    and seven</i> years <b>  as </b>our fathers  f upon this
 continent, a new nation, conceived &nbsp;&nbsp; in Liberty,                 and dedicated to the
-proposition that all 
-<br>men are created equal.</span>
+proposition that all<br>
+men are created equal.</span>
 </div>
 <div id="log"></div>
 <script>
 test(function() {
     var selection = window.getSelection();
     selection.collapse(sample, 0);
-    for (i = 0; i < 159; ++i)
-        selection.modify('move', 'forward', 'character');
     for (i = 0; i < 158; ++i)
+        selection.modify('move', 'forward', 'character');
+    for (i = 0; i < 157; ++i)
         selection.modify('move', 'backward', 'character');
     assert_true(selection.isCollapsed, 'isCollapsed');
     assert_equals(selection.anchorNode, sample.firstChild.firstChild, 'anchorNode');
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index dece72b..ebb79f1 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -94853,6 +94853,30 @@
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html": [
     [
      "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html",
@@ -96669,6 +96693,30 @@
      {}
     ]
    ],
+   "quirks/text-decoration-doesnt-propagate-into-tables/quirks.html": [
+    [
+     "/quirks/text-decoration-doesnt-propagate-into-tables/quirks.html",
+     [
+      [
+       "/quirks/text-decoration-doesnt-propagate-into-tables/quirks-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "quirks/text-decoration-doesnt-propagate-into-tables/standards.html": [
+    [
+     "/quirks/text-decoration-doesnt-propagate-into-tables/standards.html",
+     [
+      [
+       "/quirks/text-decoration-doesnt-propagate-into-tables/standards-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "service-workers/service-worker/svg-target-reftest.https.html": [
     [
      "/service-workers/service-worker/svg-target-reftest.https.html",
@@ -154916,11 +154964,31 @@
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html": [
+    [
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display-expected.txt": [
     [
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html": [
+    [
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html": [
     [
      {}
@@ -154931,11 +154999,21 @@
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html": [
+    [
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html": [
     [
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-expected.txt": [
     [
      {}
@@ -164221,6 +164299,16 @@
      {}
     ]
    ],
+   "quirks/text-decoration-doesnt-propagate-into-tables/quirks-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "quirks/text-decoration-doesnt-propagate-into-tables/standards-ref.html": [
+    [
+     {}
+    ]
+   ],
    "quirks/unitless-length/support/common.js": [
     [
      {}
@@ -168746,6 +168834,11 @@
      {}
     ]
    ],
+   "service-workers/service-worker/registration-script-url.https-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "service-workers/service-worker/resources/404.py": [
     [
      {}
@@ -176411,11 +176504,6 @@
      {}
     ]
    ],
-   "webxr/interfaces.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "webxr/resources/webxr_check.html": [
     [
      {}
@@ -176426,11 +176514,6 @@
      {}
     ]
    ],
-   "webxr/xrSession_requestAnimationFrame_getDevicePose.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "workers/META.yml": [
     [
      {}
@@ -219342,6 +219425,24 @@
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html",
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html",
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html",
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html": [
     [
      "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html",
@@ -262852,15 +262953,129 @@
      {}
     ]
    ],
+   "webxr/navigator_xr_requestDevice.https.html": [
+    [
+     "/webxr/navigator_xr_requestDevice.https.html",
+     {}
+    ]
+   ],
+   "webxr/navigator_xr_requestDevice_no_device.https.html": [
+    [
+     "/webxr/navigator_xr_requestDevice_no_device.https.html",
+     {}
+    ]
+   ],
+   "webxr/webGLCanvasContext_create_with_xrdevice.https.html": [
+    [
+     "/webxr/webGLCanvasContext_create_with_xrdevice.https.html",
+     {}
+    ]
+   ],
+   "webxr/webGLCanvasContext_setdevice_contextlost.https.html": [
+    [
+     "/webxr/webGLCanvasContext_setdevice_contextlost.https.html",
+     {}
+    ]
+   ],
    "webxr/webxr_availability.http.sub.html": [
     [
      "/webxr/webxr_availability.http.sub.html",
      {}
     ]
    ],
-   "webxr/xrSession_exclusive_requestAnimationFrame.https.html": [
+   "webxr/xrDevice_requestSession_immersive.https.html": [
     [
-     "/webxr/xrSession_exclusive_requestAnimationFrame.https.html",
+     "/webxr/xrDevice_requestSession_immersive.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrDevice_requestSession_immersive_no_gesture.https.html": [
+    [
+     "/webxr/xrDevice_requestSession_immersive_no_gesture.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrDevice_requestSession_immersive_unsupported.https.html": [
+    [
+     "/webxr/xrDevice_requestSession_immersive_unsupported.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html": [
+    [
+     "/webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrDevice_supportsSession_immersive.https.html": [
+    [
+     "/webxr/xrDevice_supportsSession_immersive.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrDevice_supportsSession_immersive_unsupported.https.html": [
+    [
+     "/webxr/xrDevice_supportsSession_immersive_unsupported.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrDevice_supportsSession_non_immersive.https.html": [
+    [
+     "/webxr/xrDevice_supportsSession_non_immersive.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrSession_cancelAnimationFrame.https.html": [
+    [
+     "/webxr/xrSession_cancelAnimationFrame.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html": [
+    [
+     "/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrSession_device.https.html": [
+    [
+     "/webxr/xrSession_device.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrSession_end.https.html": [
+    [
+     "/webxr/xrSession_end.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrSession_prevent_multiple_exclusive.https.html": [
+    [
+     "/webxr/xrSession_prevent_multiple_exclusive.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrSession_requestAnimationFrame_callback_calls.https.html": [
+    [
+     "/webxr/xrSession_requestAnimationFrame_callback_calls.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrSession_requestAnimationFrame_data_valid.https.html": [
+    [
+     "/webxr/xrSession_requestAnimationFrame_data_valid.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrSession_requestAnimationFrame_getDevicePose.https.html": [
+    [
+     "/webxr/xrSession_requestAnimationFrame_getDevicePose.https.html",
+     {}
+    ]
+   ],
+   "webxr/xrSession_requestFrameOfReference.https.html": [
+    [
+     "/webxr/xrSession_requestFrameOfReference.https.html",
      {}
     ]
    ],
@@ -271760,7 +271975,7 @@
    "support"
   ],
   "./lint.whitelist": [
-   "d09b3a4345329983c6a22553d945aa8787b114d4",
+   "0d41c5bf938139df76415ca163eb9b710b12b5d1",
    "support"
   ],
   "./update-built-tests.sh": [
@@ -280836,7 +281051,7 @@
    "support"
   ],
   "common/dummy.xhtml": [
-   "aa9b8818bf76dcf1385f80055c50f1c5235d6c5f",
+   "a49472ffaf21af8cd1ad5222575e6ccfde0a3b32",
    "support"
   ],
   "common/dummy.xml": [
@@ -372355,6 +372570,22 @@
    "7dba7334f7e50a0b6b7e47be9be4a9bd8159c6a5",
    "testharness"
   ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html": [
+   "e37cfc6e8a8c08c31588a792c5154bb7628040cb",
+   "support"
+  ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html": [
+   "8988d21f52cdc186b28e4485a044a4293e9952ba",
+   "reftest"
+  ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html": [
+   "a933efddf1e26b7a442a1245d13c3ca41ae965ab",
+   "support"
+  ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html": [
+   "d5e39e648b7b5c3263a567635a2d4e2a5a900154",
+   "reftest"
+  ],
   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html": [
    "8eb13f9a9ea149970510e9d2982905d523125e85",
    "testharness"
@@ -372367,10 +372598,18 @@
    "c5625a92cc1abbca2b036335a1a9f9655928d2cd",
    "testharness"
   ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html": [
+   "2c92b4f8dafdb0a3537c6c3336bb4ee3cb4d4eab",
+   "support"
+  ],
   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html": [
    "e917fedffc3d199988f9dc39f13e6660caa3e822",
    "testharness"
   ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html": [
+   "9e53cc213f66b1cb8abdb57978286f1f939d72ff",
+   "support"
+  ],
   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html": [
    "670ff1c0278b7febb1dea05615e378d5b45d0201",
    "testharness"
@@ -372395,6 +372634,10 @@
    "ee6d5ca161811bca7826a7489f0e269041c8a5ad",
    "reftest"
   ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html": [
+   "518d50294ab98b5f5e40a700294c73bcb6cd9649",
+   "support"
+  ],
   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html": [
    "329637fd6312e198937660dec52e9ff369b4e0eb",
    "support"
@@ -372407,10 +372650,22 @@
    "80d80d4934f0ad148458c5d5494946f5c7b126c8",
    "testharness"
   ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display-expected.txt": [
+   "42ae7ba84100eec7a44ac32ec4cd2ad098084c07",
+   "support"
+  ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html": [
+   "7b3ff5e10296f258774bfb935401d184611bcc78",
+   "testharness"
+  ],
   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-expected.txt": [
    "cdeb6f45e6108aed938dbfcc8db6e2185d447065",
    "support"
   ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html": [
+   "9c024a437326b9a5fbe01e7a53ed5cdca24d79fd",
+   "testharness"
+  ],
   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html": [
    "1abb9e047f744ecdf1b8ae88b7831174add1f186",
    "support"
@@ -372419,6 +372674,10 @@
    "36e714abbc609386ffbb5f96decba12f2ec1d5b2",
    "reftest"
   ],
+  "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html": [
+   "4e83031b886cc1ef8cacdc0ca46b4ee019186f5f",
+   "testharness"
+  ],
   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html": [
    "1ade350081f603855481f6a8aa2fa9f89689e2b3",
    "support"
@@ -382260,7 +382519,7 @@
    "testharness"
   ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-side-effects-ignore-opens-during-unload.window.js": [
-   "5c2bc5c2a1f8e5d45bca135dc0a894f5a3253e47",
+   "648a7635bcdd0c776178725e82235dbcca58ddf7",
    "testharness"
   ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-side-effects-same-origin-domain.sub.window.js": [
@@ -382268,7 +382527,7 @@
    "testharness"
   ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-side-effects-synchronous-script.window.js": [
-   "9d12a126e2d8aa11f816f8b6d48a29795c44b021",
+   "c8b916f2e07f8d8694feb33b1430c3828206bc94",
    "testharness"
   ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-side-effects-xml.window.js": [
@@ -382356,7 +382615,7 @@
    "support"
   ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.js": [
-   "f6f04a3dbf84190f7487c46f340e12587fe354eb",
+   "062554b9e506320857163c0bde228bac90ebd411",
    "testharness"
   ],
   "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/type-argument-plaintext-subframe.txt": [
@@ -395983,6 +396242,22 @@
    "b7a8466a3842237ddf9446bd3ab49de043001526",
    "testharness"
   ],
+  "quirks/text-decoration-doesnt-propagate-into-tables/quirks-ref.html": [
+   "057c59e4b39d2721a0a479adef115f645e3f077e",
+   "support"
+  ],
+  "quirks/text-decoration-doesnt-propagate-into-tables/quirks.html": [
+   "fb1f0d2bc53b370e5f23ba5442f1c4be3bf2285d",
+   "reftest"
+  ],
+  "quirks/text-decoration-doesnt-propagate-into-tables/standards-ref.html": [
+   "82f7e8e15a9f38d3b5dcc9fdb1655a94adf7d028",
+   "support"
+  ],
+  "quirks/text-decoration-doesnt-propagate-into-tables/standards.html": [
+   "8e97a7d835b95e95b269c66fa835f625c8e96cdb",
+   "reftest"
+  ],
   "quirks/unitless-length/excluded-properties.html": [
    "d1214dc257034cf6a844289039ffd8a2e736193c",
    "testharness"
@@ -406659,6 +406934,10 @@
    "8e509079ae4fc3ba0e3fcf60f4a5d3efd137c7f0",
    "testharness"
   ],
+  "service-workers/service-worker/registration-script-url.https-expected.txt": [
+   "3b5e78923d16473dbde3ba7fbaa100a9766c5d74",
+   "support"
+  ],
   "service-workers/service-worker/registration-script-url.https.html": [
    "5bb7d7fce7eb1e6e96975c7b657ee5a463f8d9df",
    "testharness"
@@ -407544,7 +407823,7 @@
    "support"
   ],
   "service-workers/service-worker/resources/registration-tests-script-url.js": [
-   "88678c58dcfa4e5355d8f96607f92c81d7d3c5d4",
+   "90f320254aa13c150081e105045f4f2fb9957fc5",
    "support"
   ],
   "service-workers/service-worker/resources/registration-tests-script.js": [
@@ -420196,36 +420475,104 @@
    "support"
   ],
   "webxr/idlharness.https.window-expected.txt": [
-   "6751073dc1d5f832445f37291ee9374780acacdb",
+   "5bc3fa58123388669c26bd592cd4eac95cddbb93",
    "support"
   ],
   "webxr/idlharness.https.window.js": [
-   "f86e1b929d4abcd5d40313aff482b1185db5168f",
+   "bc9e52e61d7c97436b81adb6508317d8cd884b17",
    "testharness"
   ],
-  "webxr/interfaces.https-expected.txt": [
-   "58810d4be6ad2b4d087a06dc39a203bfc377b490",
-   "support"
+  "webxr/navigator_xr_requestDevice.https.html": [
+   "e77fbaef18251e570fb44a6bd9a153f27b5b026b",
+   "testharness"
+  ],
+  "webxr/navigator_xr_requestDevice_no_device.https.html": [
+   "c7519f0d0e07ad19eba174b8f30959f57c8fea2d",
+   "testharness"
   ],
   "webxr/resources/webxr_check.html": [
    "3fa96e39a073bda2e813f0b2c2411c26b73d374e",
    "support"
   ],
   "webxr/resources/webxr_util.js": [
-   "e145f999bb691a4d19067c75adc0f1206a63835d",
+   "a7527a18fb1ce0ceb463c76a2a17ae95afdc0c99",
    "support"
   ],
+  "webxr/webGLCanvasContext_create_with_xrdevice.https.html": [
+   "1ad436d9b47a4b44ebded72fc3f34fe440292459",
+   "testharness"
+  ],
+  "webxr/webGLCanvasContext_setdevice_contextlost.https.html": [
+   "73f74fcbbd67f998de9d0383a26449e37762a2f4",
+   "testharness"
+  ],
   "webxr/webxr_availability.http.sub.html": [
    "d8aa0ef8b7b3363fd23af2700dc6d9186201c408",
    "testharness"
   ],
-  "webxr/xrSession_exclusive_requestAnimationFrame.https.html": [
-   "e75f95ee7d2751f7cbeadda9d6219bb29dbedfdc",
+  "webxr/xrDevice_requestSession_immersive.https.html": [
+   "fb896c22096be11e4b228386f8d29278e67b0682",
    "testharness"
   ],
-  "webxr/xrSession_requestAnimationFrame_getDevicePose.https-expected.txt": [
-   "ca34e2b35bd96083b989b684fc1da35e299557aa",
-   "support"
+  "webxr/xrDevice_requestSession_immersive_no_gesture.https.html": [
+   "c028dbf503ddd69928ac45684f64ff88d71662ad",
+   "testharness"
+  ],
+  "webxr/xrDevice_requestSession_immersive_unsupported.https.html": [
+   "b6244a306828d220386b88278def4d4b788d0fc7",
+   "testharness"
+  ],
+  "webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html": [
+   "482a81c30043aaf1a46b436e6d71c5d526f4f3ac",
+   "testharness"
+  ],
+  "webxr/xrDevice_supportsSession_immersive.https.html": [
+   "b75d432c7d2ece7197e489c5e3f3b4f763e0dee6",
+   "testharness"
+  ],
+  "webxr/xrDevice_supportsSession_immersive_unsupported.https.html": [
+   "dbdfe2f95e35f5ff62eaa241c883c1552c89d8ad",
+   "testharness"
+  ],
+  "webxr/xrDevice_supportsSession_non_immersive.https.html": [
+   "0397b0916875c9e6e853de91e706dda6c2fa83b0",
+   "testharness"
+  ],
+  "webxr/xrSession_cancelAnimationFrame.https.html": [
+   "2c4733a61a697aedad7fade7cab5a009c54b9ac5",
+   "testharness"
+  ],
+  "webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html": [
+   "b118b9d33ddd8974a4fc4a4f751ee9de5a7d68bc",
+   "testharness"
+  ],
+  "webxr/xrSession_device.https.html": [
+   "db59820b7b5c644fb9cee91e4423786a7bae9edb",
+   "testharness"
+  ],
+  "webxr/xrSession_end.https.html": [
+   "e7af605d3da3c229380fe4fdcbb3768112d4f9bc",
+   "testharness"
+  ],
+  "webxr/xrSession_prevent_multiple_exclusive.https.html": [
+   "2b35214385c9d89d14d944fea07df06af9983017",
+   "testharness"
+  ],
+  "webxr/xrSession_requestAnimationFrame_callback_calls.https.html": [
+   "bf16488eaebed288db2e97d98ea995237eb0cf19",
+   "testharness"
+  ],
+  "webxr/xrSession_requestAnimationFrame_data_valid.https.html": [
+   "fb0f6344840cfa8c6fe63ac4aeac5e5e65e87272",
+   "testharness"
+  ],
+  "webxr/xrSession_requestAnimationFrame_getDevicePose.https.html": [
+   "9ea6f05cdace34a80492ca1c20b737f43654e94c",
+   "testharness"
+  ],
+  "webxr/xrSession_requestFrameOfReference.https.html": [
+   "c3d22f4a4c69c733f0c46d3cb2396ade9059b1c5",
+   "testharness"
   ],
   "workers/META.yml": [
    "e10618bcfad6f80d5d983b9f4da878560b644108",
@@ -420732,7 +421079,7 @@
    "testharness"
   ],
   "workers/interfaces.worker-expected.txt": [
-   "c6d8f9f3f7b07a61c6bb00dbd4efa13ab374c2ea",
+   "3142fa97c2a9a4e94cbe4d16dbb1204ddf59054b",
    "support"
   ],
   "workers/interfaces.worker.js": [
@@ -421168,7 +421515,7 @@
    "support"
   ],
   "workers/name-property-expected.txt": [
-   "a5bef9fb78bb5b11e9659f1daf50951fa93de700",
+   "8d1980281ff338d2c326896fda640256492c7223",
    "support"
   ],
   "workers/name-property.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/common/dummy.xhtml b/third_party/WebKit/LayoutTests/external/wpt/common/dummy.xhtml
index 5b208d7..dba6945 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/common/dummy.xhtml
+++ b/third_party/WebKit/LayoutTests/external/wpt/common/dummy.xhtml
@@ -1,2 +1,2 @@
 <!DOCTYPE html>
-<html><head><title>Dummy XHTML document</title></head><body /></html>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Dummy XHTML document</title></head><body /></html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html
new file mode 100644
index 0000000..95e2347
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html
@@ -0,0 +1,7 @@
+<!doctype html>
+<title>Reference for fieldset border gap</title>
+<style>
+div { position: relative; top: 25px; width: 100px; height: 50px; background: lime; }
+</style>
+<p>There should be no red.</p>
+<div></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html
new file mode 100644
index 0000000..4d22696
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<title>fieldset border gap</title>
+<link rel=match href=fieldset-border-gap-ref.html>
+<style>
+fieldset, legend { margin: 0; padding: 0; }
+fieldset { border: none; border-top: 100px solid red; width: 100px; }
+legend { width: 100px; height: 50px; background: lime; }
+</style>
+<p>There should be no red.</p>
+<fieldset><legend></legend></fieldset>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html
new file mode 100644
index 0000000..ccb755b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<title>Reference for fieldset containing block</title>
+<style>
+p { margin: 0; height: 100px }
+div { position: absolute; top: 108px; width: 100px; height: 100px; background: lime; }
+</style>
+<p>There should be no red.</p>
+<div></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html
new file mode 100644
index 0000000..e7529946
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<title>fieldset containing block</title>
+<link rel=match href=fieldset-containing-block-ref.html>
+<style>
+p { margin: 0; height: 100px }
+fieldset { position: relative; border: none; padding: 0; margin: 0; }
+legend { padding: 0; width: 100px; height: 50px; background: lime; }
+div { position: absolute; top: 0; width: 100px; height: 50px; background: lime; }
+.behind { height:100px; top: 108px; background: red; }
+</style>
+<p>There should be no red.</p>
+<div class="behind"></div>
+<fieldset><legend></legend><div></div></fieldset>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html
new file mode 100644
index 0000000..5d17b912
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>fieldset and div with display: contents</title>
+<link rel=fieldset-foo-ref.html>
+<style>
+div { display: contents; }
+</style>
+<p>There should be a normal fieldset below with the legend "Foo".</p>
+<fieldset>
+ <div>
+  <legend>Foo</legend>
+ </div>
+</fieldset>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html
new file mode 100644
index 0000000..cace814
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<title>Reference with a fieldset and legend "Foo"</title>
+<p>There should be a normal fieldset below with the legend "Foo".</p>
+<fieldset>
+  <legend>Foo</legend>
+</fieldset>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html
new file mode 100644
index 0000000..3b46eb0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<title>fieldset and shadow DOM</title>
+<link rel=fieldset-foo-ref.html>
+<p>There should be a normal fieldset below with the legend "Foo".</p>
+<template id="my-fieldset">
+  <fieldset><slot name="my-text"></slot></fieldset>
+</template>
+
+<my-fieldset>
+  <legend slot="my-text">Foo</legend>
+</my-fieldset>
+
+<script>
+customElements.define('my-fieldset',
+  class extends HTMLElement {
+    constructor() {
+      super();
+
+      const template = document.getElementById('my-fieldset');
+      const templateContent = template.content;
+
+      this.attachShadow({mode: 'open'}).appendChild(
+        templateContent.cloneNode(true)
+      );
+    }
+  }
+);
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display-expected.txt
new file mode 100644
index 0000000..f9a02c9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display-expected.txt
@@ -0,0 +1,29 @@
+This is a testharness.js-based test.
+PASS rendered legend with display: block
+FAIL rendered legend with display: table assert_equals: display: table is not supported expected "table" but got "block"
+FAIL rendered legend with display: table-row-group assert_equals: display: table-row-group is not supported expected "table-row-group" but got "block"
+FAIL rendered legend with display: table-header-group assert_equals: display: table-header-group is not supported expected "table-header-group" but got "block"
+FAIL rendered legend with display: table-footer-group assert_equals: display: table-footer-group is not supported expected "table-footer-group" but got "block"
+FAIL rendered legend with display: table-row assert_equals: display: table-row is not supported expected "table-row" but got "block"
+FAIL rendered legend with display: table-cell assert_equals: display: table-cell is not supported expected "table-cell" but got "block"
+FAIL rendered legend with display: table-column-group assert_equals: display: table-column-group is not supported expected "table-column-group" but got "block"
+FAIL rendered legend with display: table-column assert_equals: display: table-column is not supported expected "table-column" but got "block"
+FAIL rendered legend with display: table-caption assert_equals: display: table-caption is not supported expected "table-caption" but got "block"
+FAIL rendered legend with display: list-item assert_equals: display: list-item is not supported expected "list-item" but got "block"
+FAIL rendered legend with display: flow assert_equals: display: flow is not supported expected "flow" but got "block"
+FAIL rendered legend with display: flow-root assert_equals: display: flow-root is not supported expected "flow-root" but got "block"
+FAIL rendered legend with display: run-in assert_equals: display: run-in is not supported expected "run-in" but got "block"
+FAIL rendered legend with display: inline assert_equals: display: inline is not supported expected "inline" but got "block"
+FAIL rendered legend with display: inline-block assert_equals: display: inline-block is not supported expected "inline-block" but got "block"
+FAIL rendered legend with display: inline-table assert_equals: display: inline-table is not supported expected "inline-table" but got "block"
+FAIL rendered legend with display: ruby assert_equals: display: ruby is not supported expected "ruby" but got "block"
+FAIL rendered legend with display: ruby-base assert_equals: display: ruby-base is not supported expected "ruby-base" but got "block"
+FAIL rendered legend with display: ruby-text assert_equals: display: ruby-text is not supported expected "ruby-text" but got "block"
+FAIL rendered legend with display: ruby-base-container assert_equals: display: ruby-base-container is not supported expected "ruby-base-container" but got "block"
+FAIL rendered legend with display: ruby-text-container assert_equals: display: ruby-text-container is not supported expected "ruby-text-container" but got "block"
+FAIL rendered legend with display: grid assert_equals: display: grid is not supported expected "grid" but got "block"
+FAIL rendered legend with display: inline-grid assert_equals: display: inline-grid is not supported expected "inline-grid" but got "block"
+FAIL rendered legend with display: flex assert_equals: display: flex is not supported expected "flex" but got "block"
+FAIL rendered legend with display: inline-flex assert_equals: display: inline-flex is not supported expected "inline-flex" but got "block"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html
new file mode 100644
index 0000000..914547f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<title>rendered legend and CSS display</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<fieldset><legend id="ref">x</legend></fieldset>
+<fieldset><legend id="test">x</legend></fieldset>
+<script>
+  const refElm = document.querySelector('#ref');
+  const refStyle = getComputedStyle(refElm);
+  const testElm = document.querySelector('#test');
+  const values = ['block', 'table', 'table-row-group', 'table-header-group', 'table-footer-group', 'table-row', 'table-cell',
+                  'table-column-group', 'table-column', 'table-caption', 'list-item', 'flow', 'flow-root','run-in','inline',
+                  'inline-block', 'inline-table', 'ruby', 'ruby-base', 'ruby-text', 'ruby-base-container', 'ruby-text-container',
+                  'grid', 'inline-grid', 'flex', 'inline-flex'];
+
+  for (const val of values) {
+    test(() => {
+      testElm.style.removeProperty('display');
+      testElm.style.display = val;
+      const computed = getComputedStyle(testElm);
+      // Note that computed value is different from the used value.
+      // E.g., if ruby is not supported, the following assertion will
+      // fail as the computed value of display will be block.
+      // If ruby is supported, computed.display will return "ruby",
+      // but the used value is supposed to be "block".
+      assert_equals(computed.display, val, `display: ${val} is not supported`);
+      assert_equals(computed.width, refStyle.width, 'width');
+      assert_equals(testElm.offsetLeft, refElm.offsetLeft, 'offsetLeft');
+    }, `rendered legend with display: ${val}`);
+  }
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html
new file mode 100644
index 0000000..7979e1d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html
@@ -0,0 +1,88 @@
+<!doctype html>
+<title>legend and float and position: absolute/fixed</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<style>
+ body { margin: 0; }
+ fieldset { margin: 0; padding: 20px; border: 10px solid; width: 300px; }
+ legend { height: 10px; }
+ #legend1 { float: left; }
+ #legend2 { float: right; }
+ #legend3 { position: absolute; }
+ #legend4 { position: fixed; }
+</style>
+<fieldset id=fieldset>
+  <div>div</div>
+  <legend id=legend1>legend1</legend>
+  <legend id=legend2>legend2</legend>
+  <legend id=legend3>legend3</legend>
+  <legend id=legend4>legend4</legend>
+  <legend id=legend5>legend5</legend>
+</fieldset>
+<script>
+ const fieldset = document.getElementById('fieldset');
+ const legends = document.getElementsByTagName('legend');
+ const [legend1, legend2, legend3, legend4, legend5] = legends;
+ const expectedTop = 0;
+ const expectedLeft = 10 + 20;
+
+ function assert_rendered_legend(legend) {
+   assert_equals(legend.offsetTop, expectedTop, `${legend.id}.offsetTop`);
+   assert_equals(legend.offsetLeft, expectedLeft, `${legend.id}.offsetLeft`);
+   for (const other of legends) {
+     if (other === legend) {
+       continue;
+     }
+     if (other.offsetTop === expectedTop && other.offsetLeft === expectedLeft) {
+       assert_unreached(`${other.id} should not be the "rendered legend"`);
+     }
+   }
+ }
+
+ test(t => {
+   assert_rendered_legend(legend5);
+ }, 'no dynamic changes');
+
+ test(t => {
+   const legend = document.createElement('legend');
+   t.add_cleanup(() => {
+     legend.remove();
+   });
+   legend.id = 'script-inserted';
+   legend.textContent = 'script-inserted legend';
+   fieldset.insertBefore(legend, legend1);
+   assert_rendered_legend(legend);
+   legend.remove();
+   assert_rendered_legend(legend5);
+ }, 'inserting a new legend and removing it again');
+
+ test(t => {
+   t.add_cleanup(() => {
+     legend1.id = 'legend1';
+     legend2.id = 'legend2';
+   });
+   legend2.id = '';
+   assert_rendered_legend(legend2);
+   legend1.id = '';
+   assert_rendered_legend(legend1);
+   legend1.id = 'legend1';
+   assert_rendered_legend(legend2);
+   legend2.id = 'legend2';
+   assert_rendered_legend(legend5);
+ }, 'dynamic changes to float');
+
+ test(t => {
+   t.add_cleanup(() => {
+     legend3.id = 'legend3';
+     legend4.id = 'legend4';
+   });
+   legend4.id = '';
+   assert_rendered_legend(legend4);
+   legend3.id = '';
+   assert_rendered_legend(legend3);
+   legend3.id = 'legend3';
+   assert_rendered_legend(legend4);
+   legend4.id = 'legend4';
+   assert_rendered_legend(legend5);
+ }, 'dynamic changes to position');
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html
new file mode 100644
index 0000000..edd2600
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<title>legend and flexbox, grid & multicol</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<style>
+legend { width: 200px; background: silver }
+#flex { display: flex; }
+#inline-flex { display: inline-flex; }
+#grid { display: grid; }
+#inline-grid { display: inline-grid; }
+#grid, #inline-grid { grid-template-columns: auto auto }
+#multicol { columns: 2; }
+</style>
+<fieldset><legend id=ref>12</legend></fieldset>
+<fieldset><legend id=flex><div>1</div><div>2</div></legend></fieldset>
+<fieldset><legend id=inline-flex><div>1</div><div>2</div></legend></fieldset>
+<fieldset><legend id=grid><div>1</div><div>2</div></legend></fieldset>
+<fieldset><legend id=inline-grid><div>1</div><div>2</div></legend></fieldset>
+<fieldset><legend id=multicol><div>1</div><div>2</div></legend></fieldset>
+<script>
+ const ref = document.getElementById('ref');
+ for (const id of ["flex", "inline-flex", "grid", "inline-grid", "multicol"]) {
+   test(() => {
+     const elm = document.getElementById(id);
+     assert_equals(elm.offsetHeight, ref.offsetHeight, 'offsetHeight');
+     if (id !== "multicol") {
+       assert_equals(getComputedStyle(elm).display, id, 'display');
+     }
+   }, id);
+ }
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.js b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.js
index 383f6da..1588f2f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.js
@@ -21,7 +21,7 @@
     // The empty HTML seems to be necessary to cajole Chrome and Safari into
     // firing a load event asynchronously, which is necessary to make sure the
     // frame's document doesn't have a parser associated with it.
-    // See: https://crbug.com/875354
+    // See: https://crbug.com/569511
     frame.src = "/common/blank.html";
     t.add_cleanup(() => frame.remove());
     frame.onload = t.step_func(() => {
@@ -39,7 +39,7 @@
     // The empty HTML seems to be necessary to cajole Chrome into firing a load
     // event, which is necessary to make sure the frame's document doesn't have
     // a parser associated with it.
-    // See: https://crbug.com/875354
+    // See: https://crbug.com/569511
     frame.src = "/common/blank.html";
     t.add_cleanup(() => frame.remove());
     frame.onload = t.step_func(() => {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist b/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist
index 7da58b3..5e4d06c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist
+++ b/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist
@@ -57,6 +57,7 @@
 TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.cur
 TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.ico
 TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.wasm
+TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.bmp
 
 ## Documentation ##
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/quirks-ref.html b/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/quirks-ref.html
new file mode 100644
index 0000000..a72475f4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/quirks-ref.html
@@ -0,0 +1,13 @@
+<title>text decoration doesn't propagate into tables quirks mode ref</title>
+<style>
+.inline-table { display: inline-table }
+.inline, .inline * { display: inline }
+.table { display: table }
+.tbody { display: table-row-group }
+.tr { display: table-row }
+.td { display: table-cell }
+</style>
+<div><table><tr><td>this should not be underlined</table></div>
+<div><table class=inline-table><tr><td>this should not be underlined</table></div>
+<div><table class=inline><tr><td>this should not be underlined</table></div>
+<div><span class=table><span class=tbody><span class=tr><span class=td><u>this should be underlined</u></span></span></span></span></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/quirks.html b/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/quirks.html
new file mode 100644
index 0000000..669c886
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/quirks.html
@@ -0,0 +1,14 @@
+<title>text decoration doesn't propagate into tables quirk</title>
+<link rel=match href=quirks-ref.html>
+<style>
+.inline-table { display: inline-table }
+.inline, .inline * { display: inline }
+.table { display: table }
+.tbody { display: table-row-group }
+.tr { display: table-row }
+.td { display: table-cell }
+</style>
+<div><u><table><tr><td>this should not be underlined</table></u></div>
+<div><u><table class=inline-table><tr><td>this should not be underlined</table></u></div>
+<div><u><table class=inline><tr><td>this should not be underlined</table></u></div>
+<div><u><span class=table><span class=tbody><span class=tr><span class=td>this should be underlined</span></span></span></span></u></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/standards-ref.html b/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/standards-ref.html
new file mode 100644
index 0000000..4e2a3f45
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/standards-ref.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>text decoration doesn't propagate into tables standards mode ref</title>
+<style>
+.inline-table { display: inline-table }
+.inline, .inline * { display: inline }
+.table { display: table }
+.tbody { display: table-row-group }
+.tr { display: table-row }
+.td { display: table-cell }
+</style>
+<div><table><tr><td><u>this should be underlined</u></table></div>
+<div><table class=inline-table><tr><td>this should not be underlined</table></div>
+<div><table class=inline><tr><td><u>this should be underlined</u></table></div>
+<div><span class=table><span class=tbody><span class=tr><span class=td><u>this should be underlined</u></span></span></span></span></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/standards.html b/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/standards.html
new file mode 100644
index 0000000..6b1c8a7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/quirks/text-decoration-doesnt-propagate-into-tables/standards.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<title>text decoration doesn't propagate into tables standards mode</title>
+<link rel=match href=standards-ref.html>
+<style>
+.inline-table { display: inline-table }
+.inline, .inline * { display: inline }
+.table { display: table }
+.tbody { display: table-row-group }
+.tr { display: table-row }
+.td { display: table-cell }
+</style>
+<div><u><table><tr><td>this should be underlined</table></u></div>
+<div><u><table class=inline-table><tr><td>this should not be underlined</table></u></div>
+<div><u><table class=inline><tr><td>this should be underlined</table></u></div>
+<div><u><span class=table><span class=tbody><span class=tr><span class=td>this should be underlined</span></span></span></span></u></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/chromium/webxr-test.js b/third_party/WebKit/LayoutTests/external/wpt/resources/chromium/webxr-test.js
index e5d17259..4b7707b4 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/resources/chromium/webxr-test.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/chromium/webxr-test.js
@@ -352,12 +352,13 @@
         let dataProviderBinding = new mojo.Binding(
             device.mojom.XRFrameDataProvider, this, dataProviderRequest);
 
-        let enviromentProviderPtr =
-            new device.mojom.XREnviromentIntegrationProviderPtr();
-        let enviromentProviderRequest = mojo.makeRequest(enviromentProviderPtr);
-        let enviromentProviderBinding = new mojo.Binding(
-            device.mojom.XREnviromentIntegrationProvider, this,
-            enviromentProviderRequest);
+        let environmentProviderPtr =
+            new device.mojom.XREnvironmentIntegrationProviderPtr();
+        let environmentProviderRequest =
+            mojo.makeRequest(environmentProviderPtr);
+        let environmentProviderBinding = new mojo.Binding(
+            device.mojom.XREnvironmentIntegrationProvider, this,
+            environmentProviderRequest);
 
         let clientRequest = mojo.makeRequest(this.sessionClient_);
 
@@ -365,7 +366,7 @@
           session: {
             submitFrameSink: submit_frame_sink,
             dataProvider: dataProviderPtr,
-            enviromentProvider: enviromentProviderPtr,
+            environmentProvider: environmentProviderPtr,
             clientRequest: clientRequest,
             displayInfo: this.displayInfo_
           }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/registration-script-url.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/registration-script-url.https-expected.txt
new file mode 100644
index 0000000..70d6c089
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/registration-script-url.https-expected.txt
@@ -0,0 +1,10 @@
+This is a testharness.js-based test.
+PASS Script URL including URL-encoded slash
+PASS Script URL including uppercase URL-encoded slash
+PASS Script URL including URL-encoded backslash
+PASS Script URL including uppercase URL-encoded backslash
+FAIL Script URL is a data URL assert_throws: Data URLs should not be registered as service workers. function "function() { throw e }" threw object "SecurityError: Failed to register a ServiceWorker: The origin of the provided scriptURL ('null') does not match the current origin ('https://web-platform.test:8444')." ("SecurityError") expected object "TypeError" ("TypeError")
+PASS Script URL including self-reference
+PASS Script URL including parent-reference
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/registration-tests-script-url.js b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/registration-tests-script-url.js
index 8d777a83..0dc5af1 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/registration-tests-script-url.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/registration-tests-script-url.js
@@ -37,6 +37,15 @@
     }, 'Script URL including uppercase URL-encoded backslash');
 
   promise_test(function(t) {
+      var script = 'data:application/javascript,';
+      var scope = 'resources/scope/data-url-in-script-url';
+      return promise_rejects(t,
+          check_error_types ? new TypeError : null,
+          register_method(script, {scope: scope}),
+          'Data URLs should not be registered as service workers.');
+    }, 'Script URL is a data URL');
+
+  promise_test(function(t) {
       var script = 'resources/././empty-worker.js';
       var scope = 'resources/scope/parent-reference-in-script-url';
       return register_method(script, {scope: scope})
diff --git a/third_party/WebKit/LayoutTests/fast/workers/chromium/worker-sharedarraybuffer-transfer-two-workers-expected.txt b/third_party/WebKit/LayoutTests/fast/workers/chromium/worker-sharedarraybuffer-transfer-two-workers-expected.txt
new file mode 100644
index 0000000..201c3c1c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/workers/chromium/worker-sharedarraybuffer-transfer-two-workers-expected.txt
@@ -0,0 +1,82 @@
+Test sharing SharedArrayBuffers between dedicated workers.
+
+Running SharedArrayBuffer test case
+PASS: Passing SharedArrayBuffer in the transfer list threw.
+PASS: SharedArrayBuffer not neutered during transfer.
+PASS: Original data not changed during transfer.
+PASS: Transferred data is OK.
+PASS: Transferred data is OK.
+Running Int8Array test case
+PASS: Passing SharedArrayBuffer in the transfer list threw.
+PASS: SharedArrayBuffer not neutered during transfer.
+PASS: Original data not changed during transfer.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+Running Uint8Array test case
+PASS: Passing SharedArrayBuffer in the transfer list threw.
+PASS: SharedArrayBuffer not neutered during transfer.
+PASS: Original data not changed during transfer.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+Running Uint8ClampedArray test case
+PASS: Passing SharedArrayBuffer in the transfer list threw.
+PASS: SharedArrayBuffer not neutered during transfer.
+PASS: Original data not changed during transfer.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+Running Int16Array test case
+PASS: Passing SharedArrayBuffer in the transfer list threw.
+PASS: SharedArrayBuffer not neutered during transfer.
+PASS: Original data not changed during transfer.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+Running Uint16Array test case
+PASS: Passing SharedArrayBuffer in the transfer list threw.
+PASS: SharedArrayBuffer not neutered during transfer.
+PASS: Original data not changed during transfer.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+Running Int32Array test case
+PASS: Passing SharedArrayBuffer in the transfer list threw.
+PASS: SharedArrayBuffer not neutered during transfer.
+PASS: Original data not changed during transfer.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+Running Uint32Array test case
+PASS: Passing SharedArrayBuffer in the transfer list threw.
+PASS: SharedArrayBuffer not neutered during transfer.
+PASS: Original data not changed during transfer.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+Running Float32Array test case
+PASS: Passing SharedArrayBuffer in the transfer list threw.
+PASS: SharedArrayBuffer not neutered during transfer.
+PASS: Original data not changed during transfer.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+Running Float64Array test case
+PASS: Passing SharedArrayBuffer in the transfer list threw.
+PASS: SharedArrayBuffer not neutered during transfer.
+PASS: Original data not changed during transfer.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+PASS: Transferred array type is OK.
+PASS: Transferred data is OK.
+DONE
+
diff --git a/third_party/WebKit/LayoutTests/fast/workers/chromium/worker-sharedarraybuffer-transfer-two-workers.html b/third_party/WebKit/LayoutTests/fast/workers/chromium/worker-sharedarraybuffer-transfer-two-workers.html
new file mode 100644
index 0000000..91739758
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/workers/chromium/worker-sharedarraybuffer-transfer-two-workers.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html>
+<body>
+<p>Test sharing SharedArrayBuffers between dedicated workers.</p>
+<div id="result"></div>
+<script type="text/javascript">
+function log(message)
+{
+    document.getElementById("result").innerHTML += message + "</br>";
+}
+
+var testCases = [
+    "testSendSharedArrayBuffer",
+    "testSendInt8Array",
+    "testSendUint8Array",
+    "testSendUint8ClampedArray",
+    "testSendInt16Array",
+    "testSendUint16Array",
+    "testSendInt32Array",
+    "testSendUint32Array",
+    "testSendFloat32Array",
+    "testSendFloat64Array",
+];
+var testIndex = 0;
+
+function logPendingMessages() {
+    if (pendingWorkerReplies > 0) return;
+    workerMessages.forEach(log);
+    workerMessages = [];
+    secondaryWorkerMessages.forEach(log);
+    secondaryWorkerMessages = [];
+}
+
+function runNextTest()
+{
+    if (pendingWorkerReplies > 0) return;
+    if (testIndex < testCases.length) {
+        testIndex++;
+        try {
+            window[testCases[testIndex - 1]]();
+        } catch (ex) {
+            log("FAIL: unexpected exception " + ex);
+            runNextTest();
+        }
+    } else {
+        log("DONE");
+        if (window.testRunner)
+            testRunner.notifyDone();
+    }
+}
+
+function testSendSharedArrayBuffer()
+{
+    runSendTest("SharedArrayBuffer");
+}
+
+function testSendInt8Array()
+{
+    runSendTest("Int8Array");
+}
+
+function testSendUint8Array()
+{
+    runSendTest("Uint8Array");
+}
+
+function testSendUint8ClampedArray()
+{
+    runSendTest("Uint8ClampedArray");
+}
+
+function testSendInt16Array()
+{
+    runSendTest("Int16Array");
+}
+
+function testSendUint16Array()
+{
+    runSendTest("Uint16Array");
+}
+
+function testSendInt32Array()
+{
+    runSendTest("Int32Array");
+}
+
+function testSendUint32Array()
+{
+    runSendTest("Uint32Array");
+}
+
+function testSendFloat32Array()
+{
+    runSendTest("Float32Array");
+}
+
+function testSendFloat64Array()
+{
+    runSendTest("Float64Array");
+}
+
+function initializeTypedArray(ta, length) {
+    var i;
+    for (i = 0; i < length; ++i)
+        ta[i] = i;
+}
+
+function runSendTest(name)
+{
+    var length = 8;
+    var type = window[name];
+    var sab;
+    var ta;
+    var msg;
+
+    log("Running " + name + " test case");
+
+    if (name == 'SharedArrayBuffer') {
+        sab = new SharedArrayBuffer(length);
+        ta = new Uint8Array(sab);
+        msg = {name: name, data: sab, length: length};
+    } else {
+        sab = new SharedArrayBuffer(length * type.BYTES_PER_ELEMENT);
+        ta = new type(sab);
+        msg = {name: name, data: ta, length: length};
+    }
+
+    initializeTypedArray(ta, length);
+
+    // Don't allow passing a SharedArrayBuffer in the transfer list.
+    try {
+      worker.postMessage(msg, [sab]);
+      log("FAIL: Passing SharedArrayBuffer in the transfer list did not throw.");
+    } catch (e) {
+      log("PASS: Passing SharedArrayBuffer in the transfer list threw.");
+    }
+
+    // Without Atomics, we can't safely test modifying the contents of the
+    // SharedArrayBuffer. All we can test for now is that the SharedArrayBuffer
+    // is not neutered when transferred to a Worker.
+    pendingWorkerReplies += 2;
+    worker.postMessage(msg);
+    secondaryWorker.postMessage(msg);
+
+    if (sab.length === 0)
+        log("FAIL: SharedArrayBuffer was neutered during transfer.");
+    else
+        log("PASS: SharedArrayBuffer not neutered during transfer.");
+
+    // Ensure the data wasn't changed.
+    for (i = 0; i < length; ++i) {
+        if (ta[i] != i) {
+            log("FAIL: Original data changed during transfer. Expected " + i +
+                " got " + ta[i]);
+            break;
+        }
+    }
+    if (i == length)
+        log("PASS: Original data not changed during transfer.");
+}
+
+if (window.testRunner) {
+    testRunner.dumpAsText();
+    testRunner.waitUntilDone();
+}
+
+if (window.internals && internals.runtimeFlags.sharedArrayBufferEnabled && window.SharedArrayBuffer) {
+    var worker = new Worker('../resources/worker-sharedarraybuffer-transfer.js');
+    var secondaryWorker = new Worker('../resources/worker-sharedarraybuffer-transfer.js');
+    var pendingWorkerReplies = 0;
+    var workerMessages = [];
+    var secondaryWorkerMessages = [];
+
+    runNextTest();
+
+    worker.onmessage = function(e) {
+        if (e.data != 'DONE') {
+            // The worker sent a pass/fail message.
+            workerMessages.push(e.data);
+        } else {
+            pendingWorkerReplies--;
+            logPendingMessages();
+            runNextTest();
+        }
+    };
+    secondaryWorker.onmessage = function(e) {
+        if (e.data != 'DONE') {
+            // The worker sent a pass/fail message.
+            secondaryWorkerMessages.push(e.data);
+        } else {
+            pendingWorkerReplies--;
+            logPendingMessages();
+            runNextTest();
+        }
+    };
+} else {
+    log("SharedArrayBuffers are not enabled -- skipping test.");
+    testRunner.notifyDone();
+}
+
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/platform/mac/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol-expected.txt
new file mode 100644
index 0000000..e143595
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+FAIL flex assert_equals: offsetHeight expected 18 but got 36
+FAIL inline-flex assert_equals: offsetHeight expected 18 but got 36
+FAIL grid assert_equals: offsetHeight expected 18 but got 36
+FAIL inline-grid assert_equals: offsetHeight expected 18 but got 36
+PASS multicol
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/win/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol-expected.txt b/third_party/WebKit/LayoutTests/platform/win/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol-expected.txt
new file mode 100644
index 0000000..08a8223f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+FAIL flex assert_equals: offsetHeight expected 20 but got 40
+FAIL inline-flex assert_equals: offsetHeight expected 20 but got 40
+FAIL grid assert_equals: offsetHeight expected 20 but got 40
+FAIL inline-grid assert_equals: offsetHeight expected 20 but got 40
+PASS multicol
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn
index df91be1c..fbe413d5b 100644
--- a/third_party/blink/public/BUILD.gn
+++ b/third_party/blink/public/BUILD.gn
@@ -416,6 +416,7 @@
     "web/web_associated_url_loader_options.h",
     "web/web_autofill_client.h",
     "web/web_autofill_state.h",
+    "web/web_ax_context.h",
     "web/web_ax_enums.h",
     "web/web_ax_object.h",
     "web/web_blob.h",
diff --git a/third_party/blink/public/mojom/filesystem/file_system.mojom b/third_party/blink/public/mojom/filesystem/file_system.mojom
index 2b060977..aa5b7be 100644
--- a/third_party/blink/public/mojom/filesystem/file_system.mojom
+++ b/third_party/blink/public/mojom/filesystem/file_system.mojom
@@ -64,13 +64,15 @@
 };
 
 // Interface provided by the browser to the renderer to carry out filesystem
-// operations.
+// operations. All [Sync] methods should only be called synchronously on worker
+// threads (and asynchronously otherwise).
 interface FileSystemManager {
   // Opens a new filesystem and returns a name and root path for the requested
   // filesystem and a success error code if the operation succeeds. If the
   // operation fails, |error_code| indicates the reason for failure.
   // TODO(https://crbug.com/873661): Make interface per frame/worker and remove
   // |origin_url|.
+  [Sync]
   Open(url.mojom.Url origin_url, blink.mojom.FileSystemType file_system_type) =>
       (string name,
        url.mojom.Url root_url,
@@ -79,6 +81,7 @@
   // Resolves a filesystem URL and returns the filesystem information and
   // metadata (file path and type) if the operation is successful. |error_code|
   // indicates the reason for failure if the operation fails.
+  [Sync]
   ResolveURL(url.mojom.Url filesystem_url) =>
       (FileSystemInfo info,
        mojo_base.mojom.FilePath file_path,
@@ -88,18 +91,21 @@
   // Moves a file or directory at |src_path| to |dest_path|. Returns
   // |error_code| after completion to indicate if the operation succeeded or
   // failed.
+  [Sync]
   Move(url.mojom.Url src_path, url.mojom.Url dest_path) =>
       (mojo_base.mojom.FileError error_code);
 
   // Copies a file or directory at |src_path| to |dest_path|. Returns
   // |error_code| after completion to indicate if the operation succeeded or
   // failed.
+  [Sync]
   Copy(url.mojom.Url src_path, url.mojom.Url dest_path) =>
       (mojo_base.mojom.FileError error_code);
 
   // Deletes a file or directory at the given |path|. To delete recursively, set
   // |recursive| to true. Returns |error_code| after completion to indicate if
   // the operation succeeded or failed.
+  [Sync]
   Remove(url.mojom.Url path, bool recursive) =>
       (mojo_base.mojom.FileError error_code);
 
@@ -107,6 +113,7 @@
   // |path|. This may not always return the local platform path in remote
   // filesystem cases. Returns valid metadata if the retrieval is successful,
   // and uses |error_code| to indicate if the operation was successful.
+  [Sync]
   ReadMetadata(url.mojom.Url path) =>
       (mojo_base.mojom.FileInfo file_info,
        mojo_base.mojom.FileError error_code);
@@ -115,6 +122,7 @@
   // If |exclusive| is true, the operation fails if the |path| already exists.
   // Returns |error_code| after completion to indicate if the operation
   // succeeded or failed.
+  [Sync]
   Create(url.mojom.Url path,
          bool exclusive,
          bool is_directory,
@@ -125,6 +133,7 @@
   // checks if a directory exists at the given |path| otherwise. Returns
   // |error_code| to indicate if the file was successfully found or if an error
   // occurred.
+  [Sync]
   Exists(url.mojom.Url path, bool is_directory) =>
       (mojo_base.mojom.FileError error_code);
 
@@ -132,6 +141,10 @@
   // ResultsRetrieved on |listener| when results are ready, or ErrorOccurred
   // if the operation fails.
   ReadDirectory(url.mojom.Url path, FileSystemOperationListener listener);
+  [Sync]
+  ReadDirectorySync(url.mojom.Url path) =>
+    (array<filesystem.mojom.DirectoryEntry> entries,
+     mojo_base.mojom.FileError error_code);
 
   // Write data (indicated by |blob_uuid|) to the given file at |file_path|,
   // at |position|. Calls DidWrite on |listener| to provide progress updates on
@@ -142,6 +155,9 @@
         int64 position,
         FileSystemCancellableOperation& op_request,
         FileSystemOperationListener listener);
+  [Sync]
+  WriteSync(url.mojom.Url file_path, string blob_uuid, int64 position) =>
+      (int64 byte_count, mojo_base.mojom.FileError error_code);
 
   // Changes the file length of the file at |file_path| to the |length|
   // indicated. Returns |error_code| after completion to indicate if the
@@ -151,6 +167,9 @@
            int64 length,
            FileSystemCancellableOperation& op_request) =>
       (mojo_base.mojom.FileError error_code);
+  [Sync]
+  TruncateSync(url.mojom.Url file_path, int64 length) =>
+      (mojo_base.mojom.FileError error_code);
 
   TouchFile(url.mojom.Url path,
             mojo_base.mojom.Time last_access_time,
@@ -169,6 +188,7 @@
   // If |snapshot_listener| is provided, the renderer is expected to call
   // DidReceiveSnapshotFile on the listener (which allows the backend to drop
   // a ref to the temporary snapshot file).
+  [Sync]
   CreateSnapshotFile(url.mojom.Url file_path) =>
       (mojo_base.mojom.FileInfo file_info,
        mojo_base.mojom.FilePath platform_path,
diff --git a/third_party/blink/public/platform/web_file_system.h b/third_party/blink/public/platform/web_file_system.h
index 2109a6bf..94ba988 100644
--- a/third_party/blink/public/platform/web_file_system.h
+++ b/third_party/blink/public/platform/web_file_system.h
@@ -187,13 +187,6 @@
   virtual void CreateSnapshotFileAndReadMetadata(const WebURL& path,
                                                  WebFileSystemCallbacks) = 0;
 
-  // Waits for additional results returned for the method call and returns true
-  // if possible.
-  // Returns false if there is no running method call corresponding for the
-  // given ID.
-  // |callbacks_id| must be the value returned by the original method call.
-  virtual bool WaitForAdditionalResult(int callbacks_id) = 0;
-
  protected:
   virtual ~WebFileSystem() = default;
 };
diff --git a/third_party/blink/public/web/web_ax_context.h b/third_party/blink/public/web/web_ax_context.h
new file mode 100644
index 0000000..c3e1728d
--- /dev/null
+++ b/third_party/blink/public/web/web_ax_context.h
@@ -0,0 +1,31 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_AX_CONTEXT_H_
+#define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_AX_CONTEXT_H_
+
+#include "third_party/blink/public/web/web_ax_object.h"
+#include "third_party/blink/public/web/web_document.h"
+
+namespace blink {
+
+class AXContext;
+
+// An instance of this class, while kept alive, enables accessibility
+// support for the given document.
+class WebAXContext {
+ public:
+  BLINK_EXPORT explicit WebAXContext(WebDocument document);
+  BLINK_EXPORT ~WebAXContext();
+
+  // Returns the root element of the document's accessibility tree.
+  BLINK_EXPORT WebAXObject Root() const;
+
+ private:
+  std::unique_ptr<AXContext> private_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_AX_CONTEXT_H_
diff --git a/third_party/blink/public/web/web_ax_object.h b/third_party/blink/public/web/web_ax_object.h
index 3758ff3..88cd230 100644
--- a/third_party/blink/public/web/web_ax_object.h
+++ b/third_party/blink/public/web/web_ax_object.h
@@ -44,7 +44,6 @@
 namespace blink {
 
 class AXObject;
-class ScopedAXObjectCache;
 class WebAXObject;
 class WebNode;
 class WebDocument;
@@ -67,20 +66,6 @@
                                         const WebVector<WebAXObject>&) = 0;
 };
 
-// An instance of this class, while kept alive, indicates that accessibility
-// should be temporarily enabled. If accessibility was enabled globally
-// (WebSettings::setAccessibilityEnabled), this will have no effect.
-class WebScopedAXContext {
- public:
-  BLINK_EXPORT WebScopedAXContext(WebDocument& root_document);
-  BLINK_EXPORT ~WebScopedAXContext();
-
-  BLINK_EXPORT WebAXObject Root() const;
-
- private:
-  std::unique_ptr<ScopedAXObjectCache> private_;
-};
-
 // A container for passing around a reference to AXObject.
 class WebAXObject {
  public:
diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h
index fdd0176f..5cfce4ee 100644
--- a/third_party/blink/public/web/web_local_frame.h
+++ b/third_party/blink/public/web/web_local_frame.h
@@ -238,14 +238,18 @@
                               const WebURL& unreachable_url = WebURL(),
                               bool replace = false) = 0;
 
-  // Navigates to the given data with specific mime type and optional text
-  // encoding.  For HTML data, baseURL indicates the security origin of
-  // the document and is used to resolve links.  If specified,
-  // unreachableURL is reported via WebDocumentLoader::unreachableURL.  If
-  // replace is false, then this data will be loaded as a normal
-  // navigation.  Otherwise, the current history item will be replaced.
+  // Navigates to the given |data| with specified |mime_type| and optional
+  // |text_encoding|.  For HTML data, |base_url| indicates the security origin
+  // of the document and is used to resolve links.  If specified,
+  // |unreachable_url| is reported via WebDocumentLoader::UnreachableURL.  If
+  // |replace| is false, then this data will be loaded as a normal navigation.
+  // Otherwise, the current history item will be replaced.  The request to
+  // commit will be based either on 1) the previous, provisional request (if
+  // |replace| is true and |unreachable_url| is present) or 2)
+  // |original_failed_request| (if present) or 3) will be constructed from
+  // scratch otherwise.
   virtual void CommitDataNavigation(
-      const WebData&,
+      const WebData& data,
       const WebString& mime_type,
       const WebString& text_encoding,
       const WebURL& base_url,
@@ -255,6 +259,7 @@
       const WebHistoryItem&,
       bool is_client_redirect,
       std::unique_ptr<WebDocumentLoader::ExtraData> navigation_data,
+      const WebURLRequest* original_failed_request,
       const WebNavigationTimings& navigation_timings) = 0;
 
   // Returns the document loader that is currently loading.  May be null.
diff --git a/third_party/blink/public/web/web_settings.h b/third_party/blink/public/web/web_settings.h
index acfa63964..222f9d8 100644
--- a/third_party/blink/public/web/web_settings.h
+++ b/third_party/blink/public/web/web_settings.h
@@ -134,7 +134,6 @@
   // contents at an insecure URL. Otherwise, disallows it. The
   // LocalFrameClient set to the frame may override the value set by this
   // method.
-  virtual void SetAccessibilityEnabled(bool) = 0;
   virtual void SetAccessibilityPasswordValuesEnabled(bool) = 0;
   virtual void SetAllowFileAccessFromFileURLs(bool) = 0;
   virtual void SetAllowCustomScrollbarInMainFrame(bool) = 0;
diff --git a/third_party/blink/renderer/core/accessibility/BUILD.gn b/third_party/blink/renderer/core/accessibility/BUILD.gn
index 285ef59..dbff6a41 100644
--- a/third_party/blink/renderer/core/accessibility/BUILD.gn
+++ b/third_party/blink/renderer/core/accessibility/BUILD.gn
@@ -6,6 +6,8 @@
 
 blink_core_sources("accessibility") {
   sources = [
+    "ax_context.cc",
+    "ax_context.h",
     "ax_object_cache.cc",
     "ax_object_cache.h",
     "ax_object_cache_base.cc",
diff --git a/third_party/blink/renderer/core/accessibility/ax_context.cc b/third_party/blink/renderer/core/accessibility/ax_context.cc
new file mode 100644
index 0000000..0e8ea630
--- /dev/null
+++ b/third_party/blink/renderer/core/accessibility/ax_context.cc
@@ -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.
+
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
+#include "third_party/blink/renderer/core/dom/document.h"
+
+namespace blink {
+
+class AXObjectCache;
+
+AXContext::AXContext(Document& document) : document_(&document) {
+  DCHECK(document_);
+  document_->AddAXContext(this);
+}
+
+AXContext::~AXContext() {
+  if (document_)
+    document_->RemoveAXContext(this);
+}
+
+AXObjectCache& AXContext::GetAXObjectCache() {
+  DCHECK(document_);
+  DCHECK(document_->IsActive());
+  return *document_->ExistingAXObjectCache();
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/accessibility/ax_context.h b/third_party/blink/renderer/core/accessibility/ax_context.h
new file mode 100644
index 0000000..48606e0
--- /dev/null
+++ b/third_party/blink/renderer/core/accessibility/ax_context.h
@@ -0,0 +1,38 @@
+// 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 THIRD_PARTY_BLINK_RENDERER_CORE_ACCESSIBILITY_AX_CONTEXT_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_ACCESSIBILITY_AX_CONTEXT_H_
+
+#include "base/macros.h"
+#include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/platform/heap/persistent.h"
+
+namespace blink {
+
+class AXObjectCache;
+
+// An AXContext enables accessibility support in a Document for as
+// long as the AXContext is alive. While the AXContext exists,
+// Document::ExistingAXObjectCache will always return a valid
+// AXObjectCache if the document is still active.
+class CORE_EXPORT AXContext {
+ public:
+  explicit AXContext(Document& document);
+  virtual ~AXContext();
+
+  // Note: it's an error to call this after |document| is no longer active.
+  // The caller should check this.
+  AXObjectCache& GetAXObjectCache();
+
+ protected:
+  WeakPersistent<Document> document_;
+
+  DISALLOW_COPY_AND_ASSIGN(AXContext);
+};
+
+}  // namespace blink
+
+#endif
diff --git a/third_party/blink/renderer/core/accessibility/ax_object_cache.cc b/third_party/blink/renderer/core/accessibility/ax_object_cache.cc
index 210f4af..8910b9bfe 100644
--- a/third_party/blink/renderer/core/accessibility/ax_object_cache.cc
+++ b/third_party/blink/renderer/core/accessibility/ax_object_cache.cc
@@ -60,30 +60,6 @@
 
 AXObjectCache::~AXObjectCache() = default;
 
-std::unique_ptr<ScopedAXObjectCache> ScopedAXObjectCache::Create(
-    Document& document) {
-  return base::WrapUnique(new ScopedAXObjectCache(document));
-}
-
-ScopedAXObjectCache::ScopedAXObjectCache(Document& document)
-    : document_(&document) {
-  if (!document_->GetOrCreateAXObjectCache())
-    cache_ = AXObjectCache::Create(*document_);
-}
-
-ScopedAXObjectCache::~ScopedAXObjectCache() {
-  if (cache_)
-    cache_->Dispose();
-}
-
-AXObjectCache* ScopedAXObjectCache::Get() {
-  if (cache_)
-    return cache_.Get();
-  AXObjectCache* cache = document_->GetOrCreateAXObjectCache();
-  DCHECK(cache);
-  return cache;
-}
-
 namespace {
 
 typedef HashSet<String, CaseFoldingHash> ARIAWidgetSet;
diff --git a/third_party/blink/renderer/core/accessibility/ax_object_cache.h b/third_party/blink/renderer/core/accessibility/ax_object_cache.h
index c4d8565d..3c5dc96 100644
--- a/third_party/blink/renderer/core/accessibility/ax_object_cache.h
+++ b/third_party/blink/renderer/core/accessibility/ax_object_cache.h
@@ -144,23 +144,6 @@
   DISALLOW_COPY_AND_ASSIGN(AXObjectCache);
 };
 
-class CORE_EXPORT ScopedAXObjectCache {
-  USING_FAST_MALLOC(ScopedAXObjectCache);
-
- public:
-  static std::unique_ptr<ScopedAXObjectCache> Create(Document&);
-  ~ScopedAXObjectCache();
-
-  AXObjectCache* Get();
-
- private:
-  explicit ScopedAXObjectCache(Document&);
-
-  Persistent<Document> document_;
-  Persistent<AXObjectCache> cache_;
-  DISALLOW_COPY_AND_ASSIGN(ScopedAXObjectCache);
-};
-
 }  // namespace blink
 
 #endif
diff --git a/third_party/blink/renderer/core/aom/computed_accessible_node.cc b/third_party/blink/renderer/core/aom/computed_accessible_node.cc
index 279ec28f0..6c4a97c 100644
--- a/third_party/blink/renderer/core/aom/computed_accessible_node.cc
+++ b/third_party/blink/renderer/core/aom/computed_accessible_node.cc
@@ -9,6 +9,7 @@
 
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/web/web_local_frame_client.h"
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
 #include "third_party/blink/renderer/core/dom/frame_request_callback_collection.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
@@ -53,7 +54,8 @@
     Element& element)
     : element_(element),
       resolver_(ScriptPromiseResolver::Create(script_state)),
-      resolve_with_node_(false) {}
+      resolve_with_node_(false),
+      ax_context_(std::make_unique<AXContext>(element_->GetDocument())) {}
 
 ScriptPromise ComputedAccessibleNodePromiseResolver::Promise() {
   return resolver_->Promise();
@@ -94,9 +96,8 @@
 
   Document& document = element_->GetDocument();
   document.View()->UpdateLifecycleToCompositingCleanPlusScrolling();
-  AXObjectCache* cache = element_->GetDocument().GetOrCreateAXObjectCache();
-  DCHECK(cache);
-  AXID ax_id = cache->GetAXID(element_);
+  AXObjectCache& cache = ax_context_->GetAXObjectCache();
+  AXID ax_id = cache.GetAXID(element_);
 
   ComputedAccessibleNode* accessible_node =
       local_frame->GetOrCreateComputedAccessibleNode(ax_id, tree);
@@ -114,7 +115,10 @@
 ComputedAccessibleNode::ComputedAccessibleNode(AXID ax_id,
                                                WebComputedAXTree* tree,
                                                LocalFrame* frame)
-    : ax_id_(ax_id), tree_(tree), frame_(frame) {}
+    : ax_id_(ax_id),
+      tree_(tree),
+      frame_(frame),
+      ax_context_(std::make_unique<AXContext>(*frame->GetDocument())) {}
 
 ComputedAccessibleNode::~ComputedAccessibleNode() {}
 
@@ -124,7 +128,8 @@
 
 ScriptPromise ComputedAccessibleNode::ensureUpToDate(
     ScriptState* script_state) {
-  AXObjectCache* cache = frame_->GetDocument()->GetOrCreateAXObjectCache();
+  AXObjectCache* cache = frame_->GetDocument()->ExistingAXObjectCache();
+  DCHECK(cache);
   Element* element = cache->GetElementFromAXID(ax_id_);
   ComputedAccessibleNodePromiseResolver* resolver =
       ComputedAccessibleNodePromiseResolver::Create(script_state, *element);
diff --git a/third_party/blink/renderer/core/aom/computed_accessible_node.h b/third_party/blink/renderer/core/aom/computed_accessible_node.h
index 616fb5c..d56b6725 100644
--- a/third_party/blink/renderer/core/aom/computed_accessible_node.h
+++ b/third_party/blink/renderer/core/aom/computed_accessible_node.h
@@ -8,6 +8,7 @@
 #include "third_party/blink/public/platform/web_computed_ax_tree.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
 #include "third_party/blink/renderer/core/accessibility/ax_object_cache.h"
 #include "third_party/blink/renderer/core/dom/element.h"
 #include "third_party/blink/renderer/core/dom/events/event_target.h"
@@ -39,6 +40,7 @@
   Member<Element> element_;
   Member<ScriptPromiseResolver> resolver_;
   bool resolve_with_node_;
+  std::unique_ptr<AXContext> ax_context_;
 };
 
 class ComputedAccessibleNode : public ScriptWrappable {
@@ -105,6 +107,7 @@
   // This tree is owned by the RenderFrame.
   blink::WebComputedAXTree* tree_;
   Member<LocalFrame> frame_;
+  std::unique_ptr<AXContext> ax_context_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/css_image_set_value.cc b/third_party/blink/renderer/core/css/css_image_set_value.cc
index adf30f6..a5d7fff 100644
--- a/third_party/blink/renderer/core/css/css_image_set_value.cc
+++ b/third_party/blink/renderer/core/css/css_image_set_value.cc
@@ -102,7 +102,7 @@
 StyleImage* CSSImageSetValue::CacheImage(
     const Document& document,
     float device_scale_factor,
-    FetchParameters::PlaceholderImageRequestType placeholder_image_request_type,
+    FetchParameters::ImageRequestOptimization image_request_optimization,
     CrossOriginAttributeValue cross_origin) {
   if (!images_in_set_.size())
     FillImageSet();
@@ -127,7 +127,7 @@
     }
 
     if (document.GetFrame() &&
-        placeholder_image_request_type == FetchParameters::kAllowPlaceholder &&
+        image_request_optimization == FetchParameters::kAllowPlaceholder &&
         document.GetFrame()->IsClientLoFiAllowed(params.GetResourceRequest())) {
       params.SetClientLoFiPlaceholder();
     }
diff --git a/third_party/blink/renderer/core/css/css_image_set_value.h b/third_party/blink/renderer/core/css/css_image_set_value.h
index 5f61f49..43477d0 100644
--- a/third_party/blink/renderer/core/css/css_image_set_value.h
+++ b/third_party/blink/renderer/core/css/css_image_set_value.h
@@ -50,7 +50,7 @@
   StyleImage* CacheImage(
       const Document&,
       float device_scale_factor,
-      FetchParameters::PlaceholderImageRequestType,
+      FetchParameters::ImageRequestOptimization,
       CrossOriginAttributeValue = kCrossOriginAttributeNotSet);
 
   String CustomCSSText() const;
diff --git a/third_party/blink/renderer/core/css/css_image_value.cc b/third_party/blink/renderer/core/css/css_image_value.cc
index 2945e48a..e443608 100644
--- a/third_party/blink/renderer/core/css/css_image_value.cc
+++ b/third_party/blink/renderer/core/css/css_image_value.cc
@@ -54,7 +54,7 @@
 
 StyleImage* CSSImageValue::CacheImage(
     const Document& document,
-    FetchParameters::PlaceholderImageRequestType placeholder_image_request_type,
+    FetchParameters::ImageRequestOptimization image_request_optimization,
     CrossOriginAttributeValue cross_origin) {
   if (!cached_image_) {
     if (absolute_url_.IsEmpty())
@@ -74,7 +74,7 @@
     }
 
     if (document.GetFrame() &&
-        placeholder_image_request_type == FetchParameters::kAllowPlaceholder &&
+        image_request_optimization == FetchParameters::kAllowPlaceholder &&
         document.GetFrame()->IsClientLoFiAllowed(params.GetResourceRequest())) {
       params.SetClientLoFiPlaceholder();
     }
diff --git a/third_party/blink/renderer/core/css/css_image_value.h b/third_party/blink/renderer/core/css/css_image_value.h
index aea13b6c..6124f79 100644
--- a/third_party/blink/renderer/core/css/css_image_value.h
+++ b/third_party/blink/renderer/core/css/css_image_value.h
@@ -69,7 +69,7 @@
   }
   StyleImage* CacheImage(
       const Document&,
-      FetchParameters::PlaceholderImageRequestType,
+      FetchParameters::ImageRequestOptimization,
       CrossOriginAttributeValue = kCrossOriginAttributeNotSet);
 
   const String& Url() const { return absolute_url_; }
diff --git a/third_party/blink/renderer/core/css/resolver/element_style_resources.cc b/third_party/blink/renderer/core/css/resolver/element_style_resources.cc
index cadb825a69..e6aa01d 100644
--- a/third_party/blink/renderer/core/css/resolver/element_style_resources.cc
+++ b/third_party/blink/renderer/core/css/resolver/element_style_resources.cc
@@ -142,10 +142,10 @@
 StyleImage* ElementStyleResources::LoadPendingImage(
     ComputedStyle* style,
     StylePendingImage* pending_image,
-    FetchParameters::PlaceholderImageRequestType placeholder_image_request_type,
+    FetchParameters::ImageRequestOptimization image_request_optimization,
     CrossOriginAttributeValue cross_origin) {
   if (CSSImageValue* image_value = pending_image->CssImageValue()) {
-    return image_value->CacheImage(*document_, placeholder_image_request_type,
+    return image_value->CacheImage(*document_, image_request_optimization,
                                    cross_origin);
   }
 
@@ -163,7 +163,7 @@
 
   if (CSSImageSetValue* image_set_value = pending_image->CssImageSetValue()) {
     return image_set_value->CacheImage(*document_, device_scale_factor_,
-                                       placeholder_image_request_type,
+                                       image_request_optimization,
                                        cross_origin);
   }
 
@@ -200,7 +200,7 @@
             background_layer->SetImage(LoadPendingImage(
                 style, ToStylePendingImage(background_layer->GetImage()),
                 BackgroundLayerMayBeSprite(*background_layer)
-                    ? FetchParameters::kDisallowPlaceholder
+                    ? FetchParameters::kNone
                     : FetchParameters::kAllowPlaceholder));
           }
         }
@@ -229,9 +229,8 @@
             if (StyleImage* image = current_cursor.GetImage()) {
               if (image->IsPendingImage()) {
                 // cursor images shouldn't be replaced with placeholders
-                current_cursor.SetImage(
-                    LoadPendingImage(style, ToStylePendingImage(image),
-                                     FetchParameters::kDisallowPlaceholder));
+                current_cursor.SetImage(LoadPendingImage(
+                    style, ToStylePendingImage(image), FetchParameters::kNone));
               }
             }
           }
@@ -244,7 +243,7 @@
           // List style images shouldn't be replaced with placeholders
           style->SetListStyleImage(LoadPendingImage(
               style, ToStylePendingImage(style->ListStyleImage()),
-              FetchParameters::kDisallowPlaceholder));
+              FetchParameters::kNone));
         }
         break;
       }
@@ -254,7 +253,7 @@
           // Border images shouldn't be replaced with placeholders
           style->SetBorderImageSource(LoadPendingImage(
               style, ToStylePendingImage(style->BorderImageSource()),
-              FetchParameters::kDisallowPlaceholder));
+              FetchParameters::kNone));
         }
         break;
       }
diff --git a/third_party/blink/renderer/core/css/resolver/element_style_resources.h b/third_party/blink/renderer/core/css/resolver/element_style_resources.h
index 629c923..314d453 100644
--- a/third_party/blink/renderer/core/css/resolver/element_style_resources.h
+++ b/third_party/blink/renderer/core/css/resolver/element_style_resources.h
@@ -78,7 +78,7 @@
   StyleImage* LoadPendingImage(
       ComputedStyle*,
       StylePendingImage*,
-      FetchParameters::PlaceholderImageRequestType,
+      FetchParameters::ImageRequestOptimization,
       CrossOriginAttributeValue = kCrossOriginAttributeNotSet);
 
   Member<Document> document_;
diff --git a/third_party/blink/renderer/core/dom/container_node.cc b/third_party/blink/renderer/core/dom/container_node.cc
index ed1c608..c07792de 100644
--- a/third_party/blink/renderer/core/dom/container_node.cc
+++ b/third_party/blink/renderer/core/dom/container_node.cc
@@ -354,7 +354,7 @@
   }
   DispatchSubtreeModifiedEvent();
 
-  if (AXObjectCache* cache = GetDocument().GetOrCreateAXObjectCache())
+  if (AXObjectCache* cache = GetDocument().ExistingAXObjectCache())
     cache->DidInsertChildrenOfNode(this);
 }
 
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index 40226dd..5609708 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -58,6 +58,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/v0_custom_element_constructor_builder.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_element_creation_options.h"
 #include "third_party/blink/renderer/bindings/core/v8/window_proxy.h"
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
 #include "third_party/blink/renderer/core/accessibility/ax_object_cache.h"
 #include "third_party/blink/renderer/core/animation/document_animations.h"
 #include "third_party/blink/renderer/core/animation/document_timeline.h"
@@ -1654,7 +1655,7 @@
     return;
   DispatchDidReceiveTitle();
 
-  if (AXObjectCache* cache = GetOrCreateAXObjectCache())
+  if (AXObjectCache* cache = ExistingAXObjectCache())
     cache->DocumentTitleChanged();
 }
 
@@ -2824,8 +2825,10 @@
   }
   sequential_focus_navigation_starting_point_ = nullptr;
 
-  if (this == &AXObjectCacheOwner())
+  if (this == &AXObjectCacheOwner()) {
+    ax_contexts_.clear();
     ClearAXObjectCache();
+  }
 
   layout_view_ = nullptr;
   ContainerNode::DetachLayoutTree();
@@ -2924,13 +2927,54 @@
   return *doc;
 }
 
+void Document::AddAXContext(AXContext* context) {
+  // The only case when |&cache_owner| is not |this| is when this is a
+  // pop-up. We want pop-ups to share the AXObjectCache of their parent
+  // document. However, there's no valid reason to explicitly create an
+  // AXContext for a pop-up document, so check to make sure we're not
+  // trying to do that here.
+  DCHECK_EQ(&AXObjectCacheOwner(), this);
+
+  // If the document has already been detached, do not make a new AXObjectCache.
+  if (!GetLayoutView())
+    return;
+
+  ax_contexts_.push_back(context);
+  if (ax_contexts_.size() != 1)
+    return;
+
+  if (!ax_object_cache_)
+    ax_object_cache_ = AXObjectCache::Create(*this);
+}
+
+void Document::RemoveAXContext(AXContext* context) {
+  auto** iter =
+      std::find_if(ax_contexts_.begin(), ax_contexts_.end(),
+                   [&context](const auto& item) { return item == context; });
+  if (iter != ax_contexts_.end())
+    ax_contexts_.erase(iter);
+  if (ax_contexts_.size() == 0)
+    ClearAXObjectCache();
+}
+
 void Document::ClearAXObjectCache() {
   DCHECK_EQ(&AXObjectCacheOwner(), this);
+
   // Clear the cache member variable before calling delete because attempts
   // are made to access it during destruction.
   if (ax_object_cache_)
     ax_object_cache_->Dispose();
   ax_object_cache_.Clear();
+
+  // If there's at least one AXContext in scope and there's still a LayoutView
+  // around, recreate an empty AXObjectCache.
+  //
+  // TODO(dmazzoni): right now ClearAXObjectCache() is being used as a way
+  // to invalidate / reset the AXObjectCache while keeping it around. We
+  // should rewrite that as a method on AXObjectCache rather than destroying
+  // and recreating it here.
+  if (ax_contexts_.size() > 0 && GetLayoutView())
+    ax_object_cache_ = AXObjectCache::Create(*this);
 }
 
 AXObjectCache* Document::ExistingAXObjectCache() const {
@@ -2944,28 +2988,6 @@
   return cache_owner.ax_object_cache_.Get();
 }
 
-AXObjectCache* Document::GetOrCreateAXObjectCache() const {
-  Settings* settings = GetSettings();
-  if (!settings || !settings->GetAccessibilityEnabled())
-    return nullptr;
-
-  // Every document has its own AXObjectCache if accessibility is enabled,
-  // except for page popups (such as select popups or context menus),
-  // which share the AXObjectCache of their owner.
-  //
-  // See http://crbug.com/532249
-  Document& cache_owner = AXObjectCacheOwner();
-
-  // If the document has already been detached, do not make a new axObjectCache.
-  if (!cache_owner.GetLayoutView())
-    return nullptr;
-
-  DCHECK(&cache_owner == this || !ax_object_cache_);
-  if (!cache_owner.ax_object_cache_)
-    cache_owner.ax_object_cache_ = AXObjectCache::Create(cache_owner);
-  return cache_owner.ax_object_cache_.Get();
-}
-
 CanvasFontCache* Document::GetCanvasFontCache() {
   if (!canvas_font_cache_)
     canvas_font_cache_ = CanvasFontCache::Create(*this);
@@ -3431,7 +3453,7 @@
   load_event_progress_ = kLoadEventCompleted;
 
   if (GetFrame() && GetLayoutView()) {
-    if (AXObjectCache* cache = GetOrCreateAXObjectCache()) {
+    if (AXObjectCache* cache = ExistingAXObjectCache()) {
       if (this == &AXObjectCacheOwner())
         cache->HandleLoadComplete(this);
       else
@@ -4758,7 +4780,7 @@
   if (!focus_change_blocked && focused_element_) {
     // Create the AXObject cache in a focus change because Chromium relies on
     // it.
-    if (AXObjectCache* cache = GetOrCreateAXObjectCache()) {
+    if (AXObjectCache* cache = ExistingAXObjectCache()) {
       cache->HandleFocusedUIElementChanged(old_focused_element,
                                            new_focused_element);
     }
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h
index 4e085b6b..b1d1f48 100644
--- a/third_party/blink/renderer/core/dom/document.h
+++ b/third_party/blink/renderer/core/dom/document.h
@@ -83,6 +83,7 @@
 }  // namespace mojom
 
 class AnimationClock;
+class AXContext;
 class AXObjectCache;
 class Attr;
 class CDATASection;
@@ -593,9 +594,12 @@
 
   LayoutView* GetLayoutView() const { return layout_view_; }
 
-  Document& AXObjectCacheOwner() const;
+  // This will return an AXObjectCache only if there's one or more
+  // AXContext associated with this document. When all associated
+  // AXContexts are deleted, the AXObjectCache will be removed.
   AXObjectCache* ExistingAXObjectCache() const;
-  AXObjectCache* GetOrCreateAXObjectCache() const;
+
+  Document& AXObjectCacheOwner() const;
   void ClearAXObjectCache();
 
   // to get visually ordered hebrew and arabic pages right
@@ -1490,6 +1494,10 @@
                            DuringOnFreeze);
   class NetworkStateObserver;
 
+  friend class AXContext;
+  void AddAXContext(AXContext*);
+  void RemoveAXContext(AXContext*);
+
   bool IsDocumentFragment() const =
       delete;  // This will catch anyone doing an unnecessary check.
   bool IsDocumentNode() const =
@@ -1721,6 +1729,7 @@
   String raw_title_;
   Member<Element> title_element_;
 
+  Vector<AXContext*> ax_contexts_;
   Member<AXObjectCache> ax_object_cache_;
   Member<DocumentMarkerController> markers_;
 
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 1f0d4614ea..b13dad2 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -34,6 +34,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/string_or_trusted_html.h"
 #include "third_party/blink/renderer/bindings/core/v8/string_or_trusted_script_url.h"
 #include "third_party/blink/renderer/bindings/core/v8/usv_string_or_trusted_url.h"
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
 #include "third_party/blink/renderer/core/accessibility/ax_object_cache.h"
 #include "third_party/blink/renderer/core/animation/css/css_animations.h"
 #include "third_party/blink/renderer/core/aom/computed_accessible_node.h"
@@ -1404,17 +1405,21 @@
 }
 
 const AtomicString& Element::computedRole() {
-  GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheetsForNode(this);
-  std::unique_ptr<ScopedAXObjectCache> cache =
-      ScopedAXObjectCache::Create(GetDocument());
-  return cache->Get()->ComputedRoleForNode(this);
+  Document& document = GetDocument();
+  if (!document.IsActive())
+    return g_null_atom;
+  document.UpdateStyleAndLayoutIgnorePendingStylesheetsForNode(this);
+  AXContext ax_context(document);
+  return ax_context.GetAXObjectCache().ComputedRoleForNode(this);
 }
 
 String Element::computedName() {
-  GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheetsForNode(this);
-  std::unique_ptr<ScopedAXObjectCache> cache =
-      ScopedAXObjectCache::Create(GetDocument());
-  return cache->Get()->ComputedNameForNode(this);
+  Document& document = GetDocument();
+  if (!document.IsActive())
+    return String();
+  document.UpdateStyleAndLayoutIgnorePendingStylesheetsForNode(this);
+  AXContext ax_context(document);
+  return ax_context.GetAXObjectCache().ComputedNameForNode(this);
 }
 
 AccessibleNode* Element::ExistingAccessibleNode() const {
diff --git a/third_party/blink/renderer/core/dom/node.cc b/third_party/blink/renderer/core/dom/node.cc
index 3d02e7f..9a33399 100644
--- a/third_party/blink/renderer/core/dom/node.cc
+++ b/third_party/blink/renderer/core/dom/node.cc
@@ -1117,7 +1117,7 @@
   ClearNeedsStyleRecalc();
   ClearNeedsReattachLayoutTree();
 
-  if (AXObjectCache* cache = GetDocument().GetOrCreateAXObjectCache())
+  if (AXObjectCache* cache = GetDocument().ExistingAXObjectCache())
     cache->UpdateCacheAfterNodeIsAttached(this);
 }
 
diff --git a/third_party/blink/renderer/core/editing/editor.cc b/third_party/blink/renderer/core/editing/editor.cc
index 520c592f..5357dc0a 100644
--- a/third_party/blink/renderer/core/editing/editor.cc
+++ b/third_party/blink/renderer/core/editing/editor.cc
@@ -410,12 +410,9 @@
 }
 
 void Editor::RespondToChangedContents(const Position& position) {
-  if (GetFrame().GetSettings() &&
-      GetFrame().GetSettings()->GetAccessibilityEnabled()) {
-    Node* node = position.AnchorNode();
-    if (AXObjectCache* cache =
-            GetFrame().GetDocument()->ExistingAXObjectCache())
-      cache->HandleEditableTextContentChanged(node);
+  if (AXObjectCache* cache =
+          GetFrame().GetDocument()->ExistingAXObjectCache()) {
+    cache->HandleEditableTextContentChanged(position.AnchorNode());
   }
 
   GetSpellChecker().RespondToChangedContents();
diff --git a/third_party/blink/renderer/core/exported/web_page_popup_impl.cc b/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
index ad59af0..2cd062e 100644
--- a/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
@@ -295,9 +295,6 @@
   page_->GetSettings().SetMinimumFontSize(main_settings.GetMinimumFontSize());
   page_->GetSettings().SetMinimumLogicalFontSize(
       main_settings.GetMinimumLogicalFontSize());
-  // FIXME: Should we support enabling a11y while a popup is shown?
-  page_->GetSettings().SetAccessibilityEnabled(
-      main_settings.GetAccessibilityEnabled());
   page_->GetSettings().SetScrollAnimatorEnabled(
       main_settings.GetScrollAnimatorEnabled());
   page_->GetSettings().SetAvailablePointerTypes(
@@ -355,7 +352,10 @@
   Document* document = ToLocalFrame(page_->MainFrame())->GetDocument();
   if (!document)
     return nullptr;
-  AXObjectCache* cache = document->GetOrCreateAXObjectCache();
+  AXObjectCache* cache = document->ExistingAXObjectCache();
+  // There should never be a circumstance when RootAXObject() is triggered
+  // and the AXObjectCache doesn't already exist. It's called when trying
+  // to attach the accessibility tree of the pop-up to the host page.
   DCHECK(cache);
   return ToAXObjectCacheBase(cache)->GetOrCreate(document->GetLayoutView());
 }
diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.cc b/third_party/blink/renderer/core/exported/web_settings_impl.cc
index c72a0a5..8ad6851 100644
--- a/third_party/blink/renderer/core/exported/web_settings_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_settings_impl.cc
@@ -160,10 +160,6 @@
   settings_->SetAccessibilityFontScaleFactor(font_scale_factor);
 }
 
-void WebSettingsImpl::SetAccessibilityEnabled(bool enabled) {
-  settings_->SetAccessibilityEnabled(enabled);
-}
-
 void WebSettingsImpl::SetAccessibilityPasswordValuesEnabled(bool enabled) {
   settings_->SetAccessibilityPasswordValuesEnabled(enabled);
 }
diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.h b/third_party/blink/renderer/core/exported/web_settings_impl.h
index 7c20340c..41e835c 100644
--- a/third_party/blink/renderer/core/exported/web_settings_impl.h
+++ b/third_party/blink/renderer/core/exported/web_settings_impl.h
@@ -54,7 +54,6 @@
   void SetAcceleratedCompositingEnabled(bool) override;
   void SetAutoplayPolicy(AutoplayPolicy) override;
   void SetPreferCompositingToLCDTextEnabled(bool) override;
-  void SetAccessibilityEnabled(bool) override;
   void SetAccessibilityPasswordValuesEnabled(bool) override;
   void SetAllowFileAccessFromFileURLs(bool) override;
   void SetAllowCustomScrollbarInMainFrame(bool) override;
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc
index c44619d..0811826 100644
--- a/third_party/blink/renderer/core/frame/local_dom_window.cc
+++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
@@ -39,6 +39,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/source_location.h"
 #include "third_party/blink/renderer/bindings/core/v8/usv_string_or_trusted_url.h"
 #include "third_party/blink/renderer/bindings/core/v8/window_proxy.h"
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
 #include "third_party/blink/renderer/core/aom/computed_accessible_node.h"
 #include "third_party/blink/renderer/core/css/css_computed_style_declaration.h"
 #include "third_party/blink/renderer/core/css/css_rule_list.h"
@@ -1089,8 +1090,6 @@
     ScriptState* script_state,
     Element* element) {
   DCHECK(element);
-  // TODO(meredithl): Create finer grain method for enabling accessibility.
-  element->GetDocument().GetPage()->GetSettings().SetAccessibilityEnabled(true);
   ComputedAccessibleNodePromiseResolver* resolver =
       ComputedAccessibleNodePromiseResolver::Create(script_state, *element);
   ScriptPromise promise = resolver->Promise();
diff --git a/third_party/blink/renderer/core/frame/local_frame_test.cc b/third_party/blink/renderer/core/frame/local_frame_test.cc
index 2ecf72c1..9d8d5a6 100644
--- a/third_party/blink/renderer/core/frame/local_frame_test.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_test.cc
@@ -47,7 +47,7 @@
       new TestLocalFrameClient(WebURLRequest::kPreviewsOff));
   MaybeAllowImagePlaceholder(page_holder.get(), params1);
   EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-            params1.GetPlaceholderImageRequestType());
+            params1.GetImageRequestOptimization());
 
   ResourceRequest request2;
   request2.SetURL(KURL("https://secure.com"));
@@ -57,8 +57,7 @@
       IntSize(800, 600), nullptr,
       new TestLocalFrameClient(WebURLRequest::kClientLoFiOn));
   MaybeAllowImagePlaceholder(page_holder2.get(), params2);
-  EXPECT_EQ(FetchParameters::kDisallowPlaceholder,
-            params2.GetPlaceholderImageRequestType());
+  EXPECT_EQ(FetchParameters::kNone, params2.GetImageRequestOptimization());
 }
 
 TEST(LocalFrameTest, MaybeAllowPlaceholderImageUsesFramePreviewsState) {
@@ -71,7 +70,7 @@
       new TestLocalFrameClient(WebURLRequest::kClientLoFiOn));
   MaybeAllowImagePlaceholder(page_holder.get(), params1);
   EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-            params1.GetPlaceholderImageRequestType());
+            params1.GetImageRequestOptimization());
   EXPECT_TRUE(page_holder->GetFrame().IsUsingDataSavingPreview());
 
   ResourceRequest request2;
@@ -82,8 +81,7 @@
       IntSize(800, 600), nullptr,
       new TestLocalFrameClient(WebURLRequest::kServerLitePageOn));
   MaybeAllowImagePlaceholder(page_holder2.get(), params2);
-  EXPECT_EQ(FetchParameters::kDisallowPlaceholder,
-            params2.GetPlaceholderImageRequestType());
+  EXPECT_EQ(FetchParameters::kNone, params2.GetImageRequestOptimization());
   EXPECT_FALSE(page_holder2->GetFrame().IsUsingDataSavingPreview());
 }
 
@@ -99,7 +97,7 @@
                                WebURLRequest::kClientLoFiOn));
   MaybeAllowImagePlaceholder(page_holder.get(), params1);
   EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-            params1.GetPlaceholderImageRequestType());
+            params1.GetImageRequestOptimization());
 
   ResourceRequest request2;
   request2.SetURL(KURL("http://insecure.com"));
@@ -110,8 +108,7 @@
       new TestLocalFrameClient(WebURLRequest::kServerLoFiOn |
                                WebURLRequest::kClientLoFiOn));
   MaybeAllowImagePlaceholder(page_holder2.get(), params2);
-  EXPECT_EQ(FetchParameters::kDisallowPlaceholder,
-            params2.GetPlaceholderImageRequestType());
+  EXPECT_EQ(FetchParameters::kNone, params2.GetImageRequestOptimization());
 }
 
 TEST(LocalFrameTest, IsUsingDataSavingPreview) {
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc
index 7e427825..1fee2b7 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -961,7 +961,7 @@
     GetLayoutView()->Compositor()->DidLayout();
     layout_count_for_testing_++;
 
-    if (AXObjectCache* cache = document->GetOrCreateAXObjectCache()) {
+    if (AXObjectCache* cache = document->ExistingAXObjectCache()) {
       const KURL& url = document->Url();
       if (url.IsValid() && !url.IsAboutBlankURL())
         cache->HandleLayoutComplete(document);
diff --git a/third_party/blink/renderer/core/frame/settings.json5 b/third_party/blink/renderer/core/frame/settings.json5
index f195279..e7274c7 100644
--- a/third_party/blink/renderer/core/frame/settings.json5
+++ b/third_party/blink/renderer/core/frame/settings.json5
@@ -656,13 +656,6 @@
       type: "HoverType",
     },
 
-    // Whether accessibility support is enabled at all.
-    {
-      name: "accessibilityEnabled",
-      initial: false,
-      invalidate: "AccessibilityState",
-    },
-
     // If true, the value in password fields is exposed to assistive technologies.
     {
       name: "accessibilityPasswordValuesEnabled",
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 c647c91..0d62b887 100644
--- a/third_party/blink/renderer/core/frame/visual_viewport_test.cc
+++ b/third_party/blink/renderer/core/frame/visual_viewport_test.cc
@@ -15,6 +15,7 @@
 #include "third_party/blink/public/platform/web_input_event.h"
 #include "third_party/blink/public/platform/web_layer_tree_view.h"
 #include "third_party/blink/public/platform/web_url_loader_mock_factory.h"
+#include "third_party/blink/public/web/web_ax_context.h"
 #include "third_party/blink/public/web/web_context_menu_data.h"
 #include "third_party/blink/public/web/web_document.h"
 #include "third_party/blink/public/web/web_local_frame_client.h"
@@ -1785,13 +1786,8 @@
   EXPECT_EQ(FloatSize(350, 260), visual_viewport.GetScrollOffset());
 }
 
-static void accessibilitySettings(WebSettings* settings) {
-  VisualViewportTest::ConfigureSettings(settings);
-  settings->SetAccessibilityEnabled(true);
-}
-
 TEST_P(VisualViewportTest, AccessibilityHitTestWhileZoomedIn) {
-  InitializeWithDesktopSettings(accessibilitySettings);
+  InitializeWithDesktopSettings();
 
   RegisterMockedHttpURLLoad("hit-test.html");
   NavigateTo(base_url_ + "hit-test.html");
@@ -1802,6 +1798,8 @@
   WebDocument web_doc = WebView()->MainFrameImpl()->GetDocument();
   LocalFrameView& frame_view = *WebView()->MainFrameImpl()->GetFrameView();
 
+  WebAXContext ax_context(web_doc);
+
   WebView()->SetPageScaleFactor(2);
   WebView()->SetVisualViewportOffset(WebFloatPoint(200, 230));
   frame_view.LayoutViewport()->SetScrollOffset(ScrollOffset(400, 1100),
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
index 2b88743..345ce73 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
@@ -948,7 +948,7 @@
   CommitDataNavigation(data, WebString::FromUTF8("text/html"),
                        WebString::FromUTF8("UTF-8"), base_url, unreachable_url,
                        replace, WebFrameLoadType::kStandard, WebHistoryItem(),
-                       false, nullptr, WebNavigationTimings());
+                       false, nullptr, nullptr, WebNavigationTimings());
 }
 
 void WebLocalFrameImpl::StopLoading() {
@@ -2122,23 +2122,25 @@
     const WebHistoryItem& item,
     bool is_client_redirect,
     std::unique_ptr<WebDocumentLoader::ExtraData> navigation_data,
+    const WebURLRequest* original_failed_request,
     const WebNavigationTimings& navigation_timings) {
   DCHECK(GetFrame());
 
-  // If we are loading substitute data to replace an existing load, then
-  // inherit all of the properties of that original request. This way,
-  // reload will re-attempt the original request. It is essential that
-  // we only do this when there is an unreachableURL since a non-empty
-  // unreachableURL informs FrameLoader::CommitNavigation to load
-  // unreachableURL instead of the currently loaded URL.
   // TODO(dgozman): this whole logic of rewriting the params is odd,
   // and should be moved to the callsites instead.
   ResourceRequest request;
   HistoryItem* history_item = item;
   DocumentLoader* provisional_document_loader =
       GetFrame()->Loader().GetProvisionalDocumentLoader();
+  // If we are loading substitute data to replace an existing load, then
+  // inherit all of the properties of that original request. This way,
+  // reload will re-attempt the original request. It is essential that
+  // we only do this when there is an |unreachable_url| since a non-empty
+  // |unreachable_url| informs FrameLoader::CommitNavigation to load
+  // |unreachable_url| instead of the currently loaded URL.
   if (replace && !unreachable_url.IsEmpty() && provisional_document_loader) {
     request = provisional_document_loader->OriginalRequest();
+
     // When replacing a failed back/forward provisional navigation with an error
     // page, retain the HistoryItem for the failed provisional navigation
     // and reuse it for the error page navigation.
@@ -2152,6 +2154,17 @@
                previous_load_type == WebFrameLoadType::kReloadBypassingCache) {
       web_frame_load_type = previous_load_type;
     }
+  } else if (original_failed_request) {
+    // We should only come here when committing an error page.  In particular,
+    // outside of unit tests, unreachable_url should be non-empty.
+    //
+    // TODO(lukasza): Extract error handling to a separate method.  See a WIP CL
+    // @ https://crrev.com/c/1176230.
+    request = original_failed_request->ToResourceRequest();
+
+    // Locally generated error pages should not be cached (in particular they
+    // should not inherit the cache mode from |original_failed_request|).
+    request.SetCacheMode(mojom::FetchCacheMode::kNoStore);
   }
   request.SetURL(base_url);
 
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
index a21c43f..cd50924 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
@@ -31,6 +31,9 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WEB_LOCAL_FRAME_IMPL_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WEB_LOCAL_FRAME_IMPL_H_
 
+#include <memory>
+#include <set>
+
 #include "base/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/web_file_system_type.h"
 #include "third_party/blink/public/web/devtools_agent.mojom-blink.h"
@@ -46,8 +49,6 @@
 #include "third_party/blink/renderer/platform/wtf/compiler.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
-#include <memory>
-
 namespace blink {
 
 class ChromePrintContext;
@@ -283,6 +284,7 @@
       const WebHistoryItem&,
       bool is_client_redirect,
       std::unique_ptr<WebDocumentLoader::ExtraData> navigation_data,
+      const WebURLRequest* original_request_to_replace,
       const WebNavigationTimings& navigation_timings) override;
   FallbackContentResult MaybeRenderFallbackContent(
       const WebURLError&) const override;
@@ -399,7 +401,7 @@
 
   ContentSettingsClient& GetContentSettingsClient() {
     return content_settings_client_;
-  };
+  }
 
   SharedWorkerRepositoryClientImpl* SharedWorkerRepositoryClient() const {
     return shared_worker_repository_client_.get();
@@ -531,4 +533,4 @@
 
 }  // namespace blink
 
-#endif
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WEB_LOCAL_FRAME_IMPL_H_
diff --git a/third_party/blink/renderer/core/html/forms/picker_indicator_element.cc b/third_party/blink/renderer/core/html/forms/picker_indicator_element.cc
index 9aa9d54..4ba22bb 100644
--- a/third_party/blink/renderer/core/html/forms/picker_indicator_element.cc
+++ b/third_party/blink/renderer/core/html/forms/picker_indicator_element.cc
@@ -159,8 +159,7 @@
 }
 
 void PickerIndicatorElement::DidNotifySubtreeInsertionsToDocument() {
-  if (!GetDocument().GetSettings() ||
-      !GetDocument().GetSettings()->GetAccessibilityEnabled())
+  if (!GetDocument().ExistingAXObjectCache())
     return;
   // Don't make this focusable if we are in layout tests in order to avoid to
   // break existing tests.
diff --git a/third_party/blink/renderer/core/layout/layout_frame_set.cc b/third_party/blink/renderer/core/layout/layout_frame_set.cc
index 0faa36f5..70ab4ee 100644
--- a/third_party/blink/renderer/core/layout/layout_frame_set.cc
+++ b/third_party/blink/renderer/core/layout/layout_frame_set.cc
@@ -588,22 +588,4 @@
   return LayoutBox::GetCursor(point, cursor);
 }
 
-void LayoutFrameSet::InsertedIntoTree() {
-  LayoutBox::InsertedIntoTree();
-  // User scrollability on the scroll paint property depends on framesets (see:
-  // LayoutView::CalculateScrollbarModes) so we need to ensure the property gets
-  // updated.
-  if (Parent() && Parent() == View())
-    Parent()->SetNeedsPaintPropertyUpdate();
-}
-
-void LayoutFrameSet::WillBeRemovedFromTree() {
-  LayoutBox::WillBeRemovedFromTree();
-  // User scrollability on the scroll paint property depends on framesets (see:
-  // LayoutView::CalculateScrollbarModes) so we need to ensure the property gets
-  // updated.
-  if (Parent() && Parent() == View())
-    Parent()->SetNeedsPaintPropertyUpdate();
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_frame_set.h b/third_party/blink/renderer/core/layout/layout_frame_set.h
index 843744e1..6e4df71 100644
--- a/third_party/blink/renderer/core/layout/layout_frame_set.h
+++ b/third_party/blink/renderer/core/layout/layout_frame_set.h
@@ -153,9 +153,6 @@
     return false;
   }
 
-  void InsertedIntoTree() override;
-  void WillBeRemovedFromTree() override;
-
   LayoutObjectChildList children_;
 
   GridAxis rows_;
diff --git a/third_party/blink/renderer/core/layout/layout_object_child_list.cc b/third_party/blink/renderer/core/layout/layout_object_child_list.cc
index 0e90cd0..a4e4d87 100644
--- a/third_party/blink/renderer/core/layout/layout_object_child_list.cc
+++ b/third_party/blink/renderer/core/layout/layout_object_child_list.cc
@@ -224,7 +224,7 @@
   if (!owner->DocumentBeingDestroyed())
     owner->NotifyOfSubtreeChange();
 
-  if (AXObjectCache* cache = owner->GetDocument().GetOrCreateAXObjectCache())
+  if (AXObjectCache* cache = owner->GetDocument().ExistingAXObjectCache())
     cache->ChildrenChanged(owner);
 }
 
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource.cc b/third_party/blink/renderer/core/loader/resource/image_resource.cc
index 727f74f..eb9adda 100644
--- a/third_party/blink/renderer/core/loader/resource/image_resource.cc
+++ b/third_party/blink/renderer/core/loader/resource/image_resource.cc
@@ -150,7 +150,7 @@
                    const ResourceLoaderOptions& options) const override {
     return new ImageResource(request, options,
                              ImageResourceContent::CreateNotStarted(),
-                             fetch_params_->GetPlaceholderImageRequestType() ==
+                             fetch_params_->GetImageRequestOptimization() ==
                                  FetchParameters::kAllowPlaceholder);
   }
 
@@ -181,7 +181,7 @@
     scoped_refptr<const SecurityOrigin> new_source_origin) const {
   // If the image is a placeholder, but this fetch doesn't allow a
   // placeholder, then do not reuse this resource.
-  if (params.GetPlaceholderImageRequestType() !=
+  if (params.GetImageRequestOptimization() !=
           FetchParameters::kAllowPlaceholder &&
       placeholder_option_ != PlaceholderOption::kDoNotReloadPlaceholder)
     return false;
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource_test.cc b/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
index 8f09622..590d49b 100644
--- a/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
+++ b/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
@@ -897,7 +897,7 @@
   params.SetAllowImagePlaceholder();
   ImageResource* image_resource = ImageResource::Fetch(params, fetcher);
   EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-            params.GetPlaceholderImageRequestType());
+            params.GetImageRequestOptimization());
   std::unique_ptr<MockImageResourceObserver> observer =
       MockImageResourceObserver::Create(image_resource->GetContent());
 
@@ -922,14 +922,14 @@
   ImageResource* placeholder_resource =
       ImageResource::Fetch(placeholder_params, fetcher);
   EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-            placeholder_params.GetPlaceholderImageRequestType());
+            placeholder_params.GetImageRequestOptimization());
   EXPECT_TRUE(placeholder_resource->ShouldShowPlaceholder());
 
   FetchParameters full_image_params{ResourceRequest(test_url)};
   ImageResource* full_image_resource =
       ImageResource::Fetch(full_image_params, fetcher);
-  EXPECT_EQ(FetchParameters::kDisallowPlaceholder,
-            full_image_params.GetPlaceholderImageRequestType());
+  EXPECT_EQ(FetchParameters::kNone,
+            full_image_params.GetImageRequestOptimization());
   EXPECT_FALSE(full_image_resource->ShouldShowPlaceholder());
 
   // The |placeholder_resource| should not be reused for the
@@ -1349,8 +1349,7 @@
 
   FetchParameters params{ResourceRequest(test_url)};
   ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher());
-  EXPECT_EQ(FetchParameters::kDisallowPlaceholder,
-            params.GetPlaceholderImageRequestType());
+  EXPECT_EQ(FetchParameters::kNone, params.GetImageRequestOptimization());
   std::unique_ptr<MockImageResourceObserver> observer =
       MockImageResourceObserver::Create(image_resource->GetContent());
 
@@ -1365,8 +1364,7 @@
   FetchParameters params{ResourceRequest(test_url)};
   params.SetAllowImagePlaceholder();
   ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher());
-  EXPECT_EQ(FetchParameters::kDisallowPlaceholder,
-            params.GetPlaceholderImageRequestType());
+  EXPECT_EQ(FetchParameters::kNone, params.GetImageRequestOptimization());
   EXPECT_EQ(g_null_atom,
             image_resource->GetResourceRequest().HttpHeaderField("range"));
   EXPECT_FALSE(image_resource->ShouldShowPlaceholder());
@@ -1380,8 +1378,7 @@
   FetchParameters params(resource_request);
   params.SetAllowImagePlaceholder();
   ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher());
-  EXPECT_EQ(FetchParameters::kDisallowPlaceholder,
-            params.GetPlaceholderImageRequestType());
+  EXPECT_EQ(FetchParameters::kNone, params.GetImageRequestOptimization());
   EXPECT_EQ(g_null_atom,
             image_resource->GetResourceRequest().HttpHeaderField("range"));
   EXPECT_FALSE(image_resource->ShouldShowPlaceholder());
@@ -1397,8 +1394,7 @@
   FetchParameters params(resource_request);
   params.SetAllowImagePlaceholder();
   ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher());
-  EXPECT_EQ(FetchParameters::kDisallowPlaceholder,
-            params.GetPlaceholderImageRequestType());
+  EXPECT_EQ(FetchParameters::kNone, params.GetImageRequestOptimization());
   EXPECT_EQ("bytes=128-255",
             image_resource->GetResourceRequest().HttpHeaderField("range"));
   EXPECT_FALSE(image_resource->ShouldShowPlaceholder());
@@ -1414,7 +1410,7 @@
   params.SetAllowImagePlaceholder();
   ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher());
   EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-            params.GetPlaceholderImageRequestType());
+            params.GetImageRequestOptimization());
   std::unique_ptr<MockImageResourceObserver> observer =
       MockImageResourceObserver::Create(image_resource->GetContent());
 
@@ -1430,7 +1426,7 @@
   params.SetAllowImagePlaceholder();
   ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher());
   EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-            params.GetPlaceholderImageRequestType());
+            params.GetImageRequestOptimization());
   EXPECT_EQ("bytes=0-2047",
             image_resource->GetResourceRequest().HttpHeaderField("range"));
   EXPECT_TRUE(image_resource->ShouldShowPlaceholder());
@@ -1472,7 +1468,7 @@
   params.SetAllowImagePlaceholder();
   ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher());
   EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-            params.GetPlaceholderImageRequestType());
+            params.GetImageRequestOptimization());
   EXPECT_EQ("bytes=0-2047",
             image_resource->GetResourceRequest().HttpHeaderField("range"));
   EXPECT_TRUE(image_resource->ShouldShowPlaceholder());
@@ -1533,7 +1529,7 @@
     ImageResource* image_resource =
         ImageResource::Fetch(params, CreateFetcher());
     EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-              params.GetPlaceholderImageRequestType());
+              params.GetImageRequestOptimization());
     EXPECT_EQ("bytes=0-2047",
               image_resource->GetResourceRequest().HttpHeaderField("range"));
     EXPECT_TRUE(image_resource->ShouldShowPlaceholder());
@@ -1683,7 +1679,7 @@
     ImageResource* image_resource =
         ImageResource::Fetch(params, CreateFetcher());
     EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-              params.GetPlaceholderImageRequestType());
+              params.GetImageRequestOptimization());
     EXPECT_EQ("bytes=0-2047",
               image_resource->GetResourceRequest().HttpHeaderField("range"));
     EXPECT_TRUE(image_resource->ShouldShowPlaceholder());
@@ -1742,7 +1738,7 @@
     ImageResource* image_resource =
         ImageResource::Fetch(params, CreateFetcher());
     EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-              params.GetPlaceholderImageRequestType());
+              params.GetImageRequestOptimization());
     EXPECT_EQ("bytes=0-2047",
               image_resource->GetResourceRequest().HttpHeaderField("range"));
     EXPECT_TRUE(image_resource->ShouldShowPlaceholder());
@@ -1774,7 +1770,7 @@
     ImageResource* image_resource =
         ImageResource::Fetch(params, CreateFetcher());
     EXPECT_EQ(FetchParameters::kAllowPlaceholder,
-              params.GetPlaceholderImageRequestType());
+              params.GetImageRequestOptimization());
     EXPECT_EQ("bytes=0-2047",
               image_resource->GetResourceRequest().HttpHeaderField("range"));
     EXPECT_TRUE(image_resource->ShouldShowPlaceholder());
diff --git a/third_party/blink/renderer/modules/accessibility/accessibility_object_model_test.cc b/third_party/blink/renderer/modules/accessibility/accessibility_object_model_test.cc
index f48838b0..cac291e6 100644
--- a/third_party/blink/renderer/modules/accessibility/accessibility_object_model_test.cc
+++ b/third_party/blink/renderer/modules/accessibility/accessibility_object_model_test.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
 #include "third_party/blink/renderer/core/aom/accessible_node.h"
 #include "third_party/blink/renderer/core/aom/accessible_node_list.h"
 #include "third_party/blink/renderer/core/html/html_body_element.h"
@@ -24,9 +25,8 @@
 
  protected:
   AXObjectCacheImpl* AXObjectCache() {
-    GetDocument().GetSettings()->SetAccessibilityEnabled(true);
     return static_cast<AXObjectCacheImpl*>(
-        GetDocument().GetOrCreateAXObjectCache());
+        GetDocument().ExistingAXObjectCache());
   }
 };
 
@@ -34,6 +34,7 @@
   SimRequest main_resource("https://example.com/", "text/html");
   LoadURL("https://example.com/");
   main_resource.Complete("<button id=button>Click me</button>");
+  AXContext ax_context(GetDocument());
 
   auto* button = GetDocument().getElementById("button");
   EXPECT_NE(nullptr, button->accessibleNode());
@@ -45,6 +46,7 @@
   SimRequest main_resource("https://example.com/", "text/html");
   LoadURL("https://example.com/");
   main_resource.Complete("<button id=button>Click me</button>");
+  AXContext ax_context(GetDocument());
 
   auto* cache = AXObjectCache();
   ASSERT_NE(nullptr, cache);
@@ -66,6 +68,7 @@
   SimRequest main_resource("https://example.com/", "text/html");
   LoadURL("https://example.com/");
   main_resource.Complete("<input id=textbox>");
+  AXContext ax_context(GetDocument());
 
   // Set ARIA attributes.
   auto* textbox = GetDocument().getElementById("textbox");
@@ -96,6 +99,7 @@
   SimRequest main_resource("https://example.com/", "text/html");
   LoadURL("https://example.com/");
   main_resource.Complete("<input type=button id=button>");
+  AXContext ax_context(GetDocument());
 
   // Set ARIA attributes.
   auto* button = GetDocument().getElementById("button");
@@ -141,6 +145,7 @@
   SimRequest main_resource("https://example.com/", "text/html");
   LoadURL("https://example.com/");
   main_resource.Complete("<div role=slider id=slider>");
+  AXContext ax_context(GetDocument());
 
   auto* slider = GetDocument().getElementById("slider");
   ASSERT_NE(nullptr, slider);
@@ -164,6 +169,7 @@
   SimRequest main_resource("https://example.com/", "text/html");
   LoadURL("https://example.com/");
   main_resource.Complete("<div role=heading id=heading>");
+  AXContext ax_context(GetDocument());
 
   auto* heading = GetDocument().getElementById("heading");
   ASSERT_NE(nullptr, heading);
@@ -180,6 +186,7 @@
   LoadURL("https://example.com/");
   main_resource.Complete(
       "<div role=list><div role=listitem id=listitem></div></div>");
+  AXContext ax_context(GetDocument());
 
   auto* listitem = GetDocument().getElementById("listitem");
   ASSERT_NE(nullptr, listitem);
@@ -204,6 +211,7 @@
       </div>
     </div>
   )HTML");
+  AXContext ax_context(GetDocument());
 
   auto* grid = GetDocument().getElementById("grid");
   ASSERT_NE(nullptr, grid);
@@ -293,6 +301,7 @@
     <div id=error role=article>Error</div>
     <div id=error2 role=banner>Error 2</div>
   )HTML");
+  AXContext ax_context(GetDocument());
 
   auto* target = GetDocument().getElementById("target");
   auto* cache = AXObjectCache();
@@ -360,6 +369,7 @@
     <label id=l2>Label 2</label>
     <label id=l3>Label 3</label>
   )HTML");
+  AXContext ax_context(GetDocument());
 
   auto* target = GetDocument().getElementById("target");
   auto* l1 = GetDocument().getElementById("l1");
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
index 01d26a2f..bb209b5 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -162,9 +162,6 @@
 }
 
 AXObject* AXObjectCacheImpl::FocusedObject() {
-  if (!AccessibilityEnabled())
-    return nullptr;
-
   Node* focused_node = document_->FocusedElement();
   if (!focused_node)
     focused_node = document_;
@@ -1034,13 +1031,6 @@
   return document_->GetSettings();
 }
 
-bool AXObjectCacheImpl::AccessibilityEnabled() {
-  Settings* settings = this->GetSettings();
-  if (!settings)
-    return false;
-  return settings->GetAccessibilityEnabled();
-}
-
 bool AXObjectCacheImpl::InlineTextBoxAccessibilityEnabled() {
   Settings* settings = this->GetSettings();
   if (!settings)
diff --git a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc
index 5a08266..3399377 100644
--- a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc
+++ b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.h"
 
 #include <memory>
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
 #include "third_party/blink/renderer/core/accessibility/ax_object_cache.h"
 #include "third_party/blink/renderer/core/dom/dom_node_ids.h"
 #include "third_party/blink/renderer/core/dom/element.h"
@@ -487,21 +488,20 @@
   LocalFrame* local_frame = document.GetFrame();
   if (!local_frame)
     return Response::Error("Frame is detached.");
-  std::unique_ptr<ScopedAXObjectCache> scoped_cache =
-      ScopedAXObjectCache::Create(document);
-  AXObjectCacheImpl* cache = ToAXObjectCacheImpl(scoped_cache->Get());
+  AXContext ax_context(document);
+  AXObjectCacheImpl& cache = ToAXObjectCacheImpl(ax_context.GetAXObjectCache());
 
-  AXObject* inspected_ax_object = cache->GetOrCreate(dom_node);
+  AXObject* inspected_ax_object = cache.GetOrCreate(dom_node);
   *nodes = protocol::Array<protocol::Accessibility::AXNode>::create();
   if (!inspected_ax_object || inspected_ax_object->AccessibilityIsIgnored()) {
     (*nodes)->addItem(BuildObjectForIgnoredNode(dom_node, inspected_ax_object,
                                                 fetch_relatives.fromMaybe(true),
-                                                *nodes, *cache));
+                                                *nodes, cache));
     return Response::OK();
   } else {
     (*nodes)->addItem(
         BuildProtocolAXObject(*inspected_ax_object, inspected_ax_object,
-                              fetch_relatives.fromMaybe(true), *nodes, *cache));
+                              fetch_relatives.fromMaybe(true), *nodes, cache));
   }
 
   if (!inspected_ax_object)
@@ -512,7 +512,7 @@
     return Response::OK();
 
   if (fetch_relatives.fromMaybe(true))
-    AddAncestors(*parent, inspected_ax_object, *nodes, *cache);
+    AddAncestors(*parent, inspected_ax_object, *nodes, cache);
 
   return Response::OK();
 }
diff --git a/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.cc b/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.cc
index c2f0705..4cbf314 100644
--- a/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.cc
+++ b/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.cc
@@ -18,20 +18,12 @@
 
 void AccessibilityTest::SetUp() {
   RenderingTest::SetUp();
-  DCHECK(GetDocument().GetSettings());
-  GetDocument().GetSettings()->SetAccessibilityEnabled(true);
-}
-
-void AccessibilityTest::TearDown() {
-  GetDocument().ClearAXObjectCache();
-  DCHECK(GetDocument().GetSettings());
-  GetDocument().GetSettings()->SetAccessibilityEnabled(false);
-  RenderingTest::TearDown();
+  ax_context_.reset(new AXContext(GetDocument()));
 }
 
 AXObjectCacheImpl& AccessibilityTest::GetAXObjectCache() const {
   auto* ax_object_cache =
-      ToAXObjectCacheImpl(GetDocument().GetOrCreateAXObjectCache());
+      ToAXObjectCacheImpl(GetDocument().ExistingAXObjectCache());
   DCHECK(ax_object_cache);
   return *ax_object_cache;
 }
diff --git a/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.h b/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.h
index b15f578..2b2a454 100644
--- a/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.h
+++ b/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.h
@@ -9,6 +9,7 @@
 #include <sstream>
 #include <string>
 
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
 #include "third_party/blink/renderer/core/testing/core_unit_test_helper.h"
 #include "third_party/blink/renderer/platform/wtf/allocator.h"
 
@@ -26,7 +27,6 @@
 
  protected:
   void SetUp() override;
-  void TearDown() override;
 
   AXObjectCacheImpl& GetAXObjectCache() const;
 
@@ -43,6 +43,8 @@
   std::ostringstream& PrintAXTreeHelper(std::ostringstream&,
                                         const AXObject* root,
                                         size_t level) const;
+
+  std::unique_ptr<AXContext> ax_context_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc
index 7b1ec00..23d9287 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_api_test.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
@@ -309,7 +310,6 @@
     padding:10px; margin:5px;'>
     <button id='button'></button></canvas>
   )HTML");
-  document.GetSettings()->SetAccessibilityEnabled(true);
   HTMLCanvasElement* canvas =
       ToHTMLCanvasElement(document.getElementById("canvas"));
 
@@ -324,6 +324,7 @@
 
 TEST_F(CanvasRenderingContext2DAPITest, AccessibilityRectTestForAddHitRegion) {
   ResetCanvasForAccessibilityRectTest(GetDocument());
+  AXContext ax_context(GetDocument());
 
   Element* button_element = GetDocument().getElementById("button");
   HTMLCanvasElement* canvas =
@@ -353,6 +354,7 @@
 TEST_F(CanvasRenderingContext2DAPITest,
        AccessibilityRectTestForDrawFocusIfNeeded) {
   ResetCanvasForAccessibilityRectTest(GetDocument());
+  AXContext ax_context(GetDocument());
 
   Element* button_element = GetDocument().getElementById("button");
   HTMLCanvasElement* canvas =
diff --git a/third_party/blink/renderer/modules/exported/BUILD.gn b/third_party/blink/renderer/modules/exported/BUILD.gn
index e27cd8b..e3030b0 100644
--- a/third_party/blink/renderer/modules/exported/BUILD.gn
+++ b/third_party/blink/renderer/modules/exported/BUILD.gn
@@ -6,6 +6,7 @@
 blink_modules_sources("exported") {
   sources = [
     "web_apply_constraints_request.cc",
+    "web_ax_context.cc",
     "web_ax_object.cc",
     "web_crypto_normalize.cc",
     "web_dom_file_system.cc",
diff --git a/third_party/blink/renderer/modules/exported/web_ax_context.cc b/third_party/blink/renderer/modules/exported/web_ax_context.cc
new file mode 100644
index 0000000..699672a
--- /dev/null
+++ b/third_party/blink/renderer/modules/exported/web_ax_context.cc
@@ -0,0 +1,25 @@
+// 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 "third_party/blink/public/web/web_ax_context.h"
+
+#include "third_party/blink/public/web/web_document.h"
+#include "third_party/blink/renderer/core/accessibility/ax_context.h"
+#include "third_party/blink/renderer/core/accessibility/ax_object_cache.h"
+#include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h"
+
+namespace blink {
+
+WebAXContext::WebAXContext(WebDocument root_document)
+    : private_(new AXContext(*root_document.Unwrap<Document>())) {}
+
+WebAXContext::~WebAXContext() {}
+
+WebAXObject WebAXContext::Root() const {
+  return WebAXObject(
+      static_cast<AXObjectCacheImpl*>(&private_->GetAXObjectCache())->Root());
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/exported/web_ax_object.cc b/third_party/blink/renderer/modules/exported/web_ax_object.cc
index daf32c8..28a9aa8 100644
--- a/third_party/blink/renderer/modules/exported/web_ax_object.cc
+++ b/third_party/blink/renderer/modules/exported/web_ax_object.cc
@@ -111,18 +111,6 @@
 }
 #endif
 
-WebScopedAXContext::WebScopedAXContext(WebDocument& root_document)
-    : private_(ScopedAXObjectCache::Create(*root_document.Unwrap<Document>())) {
-}
-
-WebScopedAXContext::~WebScopedAXContext() {
-  private_.reset(nullptr);
-}
-
-WebAXObject WebScopedAXContext::Root() const {
-  return WebAXObject(static_cast<AXObjectCacheImpl*>(private_->Get())->Root());
-}
-
 void WebAXObject::Reset() {
   private_.Reset();
 }
@@ -1446,7 +1434,7 @@
 WebAXObject WebAXObject::FromWebDocument(const WebDocument& web_document) {
   const Document* document = web_document.ConstUnwrap<Document>();
   AXObjectCacheImpl* cache =
-      ToAXObjectCacheImpl(document->GetOrCreateAXObjectCache());
+      ToAXObjectCacheImpl(document->ExistingAXObjectCache());
   return cache ? WebAXObject(cache->GetOrCreate(document->GetLayoutView()))
                : WebAXObject();
 }
@@ -1456,7 +1444,7 @@
                                              int ax_id) {
   const Document* document = web_document.ConstUnwrap<Document>();
   AXObjectCacheImpl* cache =
-      ToAXObjectCacheImpl(document->GetOrCreateAXObjectCache());
+      ToAXObjectCacheImpl(document->ExistingAXObjectCache());
   return cache ? WebAXObject(cache->ObjectFromAXID(ax_id)) : WebAXObject();
 }
 
@@ -1465,7 +1453,7 @@
     const WebDocument& web_document) {
   const Document* document = web_document.ConstUnwrap<Document>();
   AXObjectCacheImpl* cache =
-      ToAXObjectCacheImpl(document->GetOrCreateAXObjectCache());
+      ToAXObjectCacheImpl(document->ExistingAXObjectCache());
   return cache ? WebAXObject(cache->FocusedObject()) : WebAXObject();
 }
 
diff --git a/third_party/blink/renderer/modules/filesystem/directory_reader_sync.cc b/third_party/blink/renderer/modules/filesystem/directory_reader_sync.cc
index c858480..7bed698 100644
--- a/third_party/blink/renderer/modules/filesystem/directory_reader_sync.cc
+++ b/third_party/blink/renderer/modules/filesystem/directory_reader_sync.cc
@@ -100,10 +100,7 @@
         ErrorCallbackHelper::Create(this), DOMFileSystemBase::kSynchronous);
   }
 
-  if (error_code_ == FileError::kOK && has_more_entries_ &&
-      entries_.IsEmpty()) {
-    CHECK(Filesystem()->WaitForAdditionalResult(callbacks_id_));
-  }
+  DCHECK(!has_more_entries_);
 
   if (error_code_ != FileError::kOK) {
     FileError::ThrowDOMException(exception_state, error_code_);
diff --git a/third_party/blink/renderer/modules/filesystem/dom_file_system_base.cc b/third_party/blink/renderer/modules/filesystem/dom_file_system_base.cc
index 98a8bb6..c8e148a 100644
--- a/third_party/blink/renderer/modules/filesystem/dom_file_system_base.cc
+++ b/third_party/blink/renderer/modules/filesystem/dom_file_system_base.cc
@@ -474,12 +474,6 @@
                                      std::move(callbacks));
 }
 
-bool DOMFileSystemBase::WaitForAdditionalResult(int callbacks_id) {
-  if (!FileSystem())
-    return false;
-  return FileSystem()->WaitForAdditionalResult(callbacks_id);
-}
-
 STATIC_ASSERT_ENUM(WebFileSystem::kTypeTemporary,
                    mojom::blink::FileSystemType::kTemporary);
 STATIC_ASSERT_ENUM(WebFileSystem::kTypePersistent,
diff --git a/third_party/blink/renderer/modules/filesystem/dom_file_system_base.h b/third_party/blink/renderer/modules/filesystem/dom_file_system_base.h
index 33b79861..76496faa 100644
--- a/third_party/blink/renderer/modules/filesystem/dom_file_system_base.h
+++ b/third_party/blink/renderer/modules/filesystem/dom_file_system_base.h
@@ -155,7 +155,6 @@
                     EntriesCallbacks::OnDidGetEntriesCallback*,
                     ErrorCallbackBase*,
                     SynchronousType = kAsynchronous);
-  bool WaitForAdditionalResult(int callbacks_id);
 
   void Trace(blink::Visitor*) override;
 
diff --git a/third_party/blink/renderer/modules/xr/xr_device.cc b/third_party/blink/renderer/modules/xr/xr_device.cc
index cf795d2..92cd3cb 100644
--- a/third_party/blink/renderer/modules/xr/xr_device.cc
+++ b/third_party/blink/renderer/modules/xr/xr_device.cc
@@ -202,7 +202,7 @@
     frameProvider()->BeginImmersiveSession(session, std::move(session_ptr));
   } else {
     magic_window_provider_.Bind(std::move(session_ptr->data_provider));
-    enviroment_provider_.Bind(std::move(session_ptr->enviroment_provider));
+    environment_provider_.Bind(std::move(session_ptr->environment_provider));
   }
 
   resolver->Resolve(session);
diff --git a/third_party/blink/renderer/modules/xr/xr_device.h b/third_party/blink/renderer/modules/xr/xr_device.h
index 7113265..83e2750 100644
--- a/third_party/blink/renderer/modules/xr/xr_device.h
+++ b/third_party/blink/renderer/modules/xr/xr_device.h
@@ -43,9 +43,9 @@
       const {
     return magic_window_provider_;
   }
-  const device::mojom::blink::XREnviromentIntegrationProviderPtr&
-  xrEnviromentProviderPtr() const {
-    return enviroment_provider_;
+  const device::mojom::blink::XREnvironmentIntegrationProviderPtr&
+  xrEnvironmentProviderPtr() const {
+    return environment_provider_;
   }
 
   void OnFrameFocusChanged();
@@ -81,7 +81,8 @@
   bool did_log_request_immersive_session_ = false;
 
   device::mojom::blink::XRFrameDataProviderPtr magic_window_provider_;
-  device::mojom::blink::XREnviromentIntegrationProviderPtr enviroment_provider_;
+  device::mojom::blink::XREnvironmentIntegrationProviderPtr
+      environment_provider_;
   device::mojom::blink::XRDevicePtr device_ptr_;
 };
 
diff --git a/third_party/blink/renderer/modules/xr/xr_session.cc b/third_party/blink/renderer/modules/xr/xr_session.cc
index 1be1aaf..08fdc3a 100644
--- a/third_party/blink/renderer/modules/xr/xr_session.cc
+++ b/third_party/blink/renderer/modules/xr/xr_session.cc
@@ -316,7 +316,7 @@
 
   // TODO(https://crbug.com/845520): Promise should be rejected if session
   // is deleted.
-  device_->xrEnviromentProviderPtr()->RequestHitTest(
+  device_->xrEnvironmentProviderPtr()->RequestHitTest(
       std::move(ray),
       WTF::Bind(&XRSession::OnHitTestResults, WrapWeakPersistent(this),
                 WrapPersistent(resolver)));
@@ -554,8 +554,8 @@
     DVLOG(2) << __FUNCTION__ << ": got angle=" << output_angle;
   }
 
-  if (device_->xrEnviromentProviderPtr()) {
-    device_->xrEnviromentProviderPtr()->UpdateSessionGeometry(
+  if (device_->xrEnvironmentProviderPtr()) {
+    device_->xrEnvironmentProviderPtr()->UpdateSessionGeometry(
         IntSize(output_width_, output_height_),
         display::Display::DegreesToRotation(output_angle));
   }
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc
index a849d10..b4401a6d 100644
--- a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc
@@ -38,7 +38,7 @@
       decoder_options_(TextResourceDecoderOptions::kPlainTextContent),
       speculative_preload_type_(SpeculativePreloadType::kNotSpeculative),
       defer_(kNoDefer),
-      placeholder_image_request_type_(kDisallowPlaceholder) {}
+      image_request_optimization_(kNone) {}
 
 FetchParameters::FetchParameters(const ResourceRequest& resource_request,
                                  const ResourceLoaderOptions& options)
@@ -47,7 +47,7 @@
       options_(options),
       speculative_preload_type_(SpeculativePreloadType::kNotSpeculative),
       defer_(kNoDefer),
-      placeholder_image_request_type_(kDisallowPlaceholder) {}
+      image_request_optimization_(kNone) {}
 
 FetchParameters::~FetchParameters() = default;
 
@@ -118,7 +118,7 @@
 }
 
 void FetchParameters::SetAllowImagePlaceholder() {
-  DCHECK_EQ(kDisallowPlaceholder, placeholder_image_request_type_);
+  DCHECK_EQ(kNone, image_request_optimization_);
   if (!resource_request_.Url().ProtocolIsInHTTPFamily() ||
       resource_request_.HttpMethod() != "GET" ||
       !resource_request_.HttpHeaderField("range").IsNull()) {
@@ -129,7 +129,7 @@
     return;
   }
 
-  placeholder_image_request_type_ = kAllowPlaceholder;
+  image_request_optimization_ = kAllowPlaceholder;
 
   // Fetch the first few bytes of the image. This number is tuned to both (a)
   // likely capture the entire image for small images and (b) likely contain
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h
index c735ec16..2ea12248 100644
--- a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h
+++ b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h
@@ -57,9 +57,9 @@
     kInDocument,  // The request was discovered in the main document
     kInserted     // The request was discovered in a document.write()
   };
-  enum PlaceholderImageRequestType {
-    kDisallowPlaceholder = 0,  // The requested image must not be a placeholder.
-    kAllowPlaceholder,         // The image is allowed to be a placeholder.
+  enum ImageRequestOptimization {
+    kNone = 0,          // No optimization.
+    kAllowPlaceholder,  // The image is allowed to be a placeholder.
   };
   struct ResourceWidth {
     DISALLOW_NEW();
@@ -171,8 +171,8 @@
 
   void MakeSynchronous();
 
-  PlaceholderImageRequestType GetPlaceholderImageRequestType() const {
-    return placeholder_image_request_type_;
+  ImageRequestOptimization GetImageRequestOptimization() const {
+    return image_request_optimization_;
   }
 
   // Configures the request to load an image placeholder if the request is
@@ -196,7 +196,7 @@
   DeferOption defer_;
   ResourceWidth resource_width_;
   ClientHintsPreferences client_hint_preferences_;
-  PlaceholderImageRequestType placeholder_image_request_type_;
+  ImageRequestOptimization image_request_optimization_;
   bool is_stale_revalidation_ = false;
 };
 
diff --git a/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc b/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc
index 0640d2c6..83133e1a 100644
--- a/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc
+++ b/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc
@@ -157,7 +157,7 @@
 
   is_shared_ = is_shared;
 
-  AdjustAmountOfExternalAllocatedMemory(length);
+  RegisterExternalAllocationWithCurrentContext();
 }
 
 void ArrayBufferContents::DataHolder::Adopt(DataHandle data,
@@ -168,7 +168,7 @@
   data_ = std::move(data);
   is_shared_ = is_shared;
 
-  AdjustAmountOfExternalAllocatedMemory(data.DataLength());
+  RegisterExternalAllocationWithCurrentContext();
 }
 
 void ArrayBufferContents::DataHolder::CopyMemoryFrom(const DataHolder& source) {
@@ -181,12 +181,17 @@
 
   memcpy(data_.Data(), source.Data(), source.DataLength());
 
-  AdjustAmountOfExternalAllocatedMemory(source.DataLength());
+  RegisterExternalAllocationWithCurrentContext();
 }
 
 void ArrayBufferContents::DataHolder::
     RegisterExternalAllocationWithCurrentContext() {
   DCHECK(!has_registered_external_allocation_);
+  // Currently, we can only track an allocation if we have a single owner. For
+  // shared data this is not true, hence do not attempt to track at all.
+  // TODO(crbug.com/877055) Implement tracking of shared external allocations.
+  if (IsShared())
+    return;
   AdjustAmountOfExternalAllocatedMemory(static_cast<int64_t>(DataLength()));
 }
 
@@ -194,6 +199,7 @@
     UnregisterExternalAllocationWithCurrentContext() {
   if (!has_registered_external_allocation_)
     return;
+  DCHECK(!IsShared());
   AdjustAmountOfExternalAllocatedMemory(-static_cast<int64_t>(DataLength()));
 }
 
diff --git a/third_party/instrumented_libraries/BUILD.gn b/third_party/instrumented_libraries/BUILD.gn
index 56259e2..a2c0f64 100644
--- a/third_party/instrumented_libraries/BUILD.gn
+++ b/third_party/instrumented_libraries/BUILD.gn
@@ -57,8 +57,6 @@
     }
   }
 
-  # TODO(GYP): scripts/download_binaries.py uses GYP_DEFINES to decide whether
-  # to download the archives extracted here.
   # Note: This requires a clobber whenever Ubuntu version changes.
   action("extract_prebuilt_instrumented_libraries") {
     visibility = [ ":prebuilt" ]
diff --git a/third_party/tcmalloc/chromium/src/internal_logging.h b/third_party/tcmalloc/chromium/src/internal_logging.h
index 0c300c3..a3fa519 100644
--- a/third_party/tcmalloc/chromium/src/internal_logging.h
+++ b/third_party/tcmalloc/chromium/src/internal_logging.h
@@ -114,12 +114,21 @@
   }                                                                      \
 } while (0)
 
+#define CHECK_CONDITION_PRINT(cond, str)                            \
+  do {                                                              \
+    if (!(cond)) {                                                  \
+      ::tcmalloc::Log(::tcmalloc::kCrash, __FILE__, __LINE__, str); \
+    }                                                               \
+  } while (0)
+
 // Our own version of assert() so we can avoid hanging by trying to do
 // all kinds of goofy printing while holding the malloc lock.
 #ifndef NDEBUG
 #define ASSERT(cond) CHECK_CONDITION(cond)
+#define ASSERT_PRINT(cond, str) CHECK_CONDITION_PRINT(cond, str)
 #else
 #define ASSERT(cond) ((void) 0)
+#define ASSERT_PRINT(cond, str) ((void)0)
 #endif
 
 // Print into buffer
diff --git a/third_party/tcmalloc/chromium/src/tcmalloc.cc b/third_party/tcmalloc/chromium/src/tcmalloc.cc
index be9fbf8..31129bd7 100644
--- a/third_party/tcmalloc/chromium/src/tcmalloc.cc
+++ b/third_party/tcmalloc/chromium/src/tcmalloc.cc
@@ -135,6 +135,9 @@
 
 #include "maybe_emergency_malloc.h"
 
+// Remove to enable huge allocations (> 2GB), the default for gperftools.
+#define TCMALLOC_DISABLE_HUGE_ALLOCATIONS
+
 #if (defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)) && !defined(WIN32_OVERRIDE_ALLOCATORS)
 # define WIN32_DO_PATCHING 1
 #endif
@@ -343,6 +346,18 @@
       "Attempt to get the size of an invalid pointer", ptr);
   return 0;
 }
+
+#if defined(TCMALLOC_DISABLE_HUGE_ALLOCATIONS)
+// For security reasons, we want to limit the size of allocations.
+// See crbug.com/169327.
+inline bool IsAllocSizePermitted(size_t alloc_size) {
+  // Never allow an allocation larger than what can be indexed via an int.
+  // Remove kPageSize to account for various rounding, padding and to have a
+  // small margin.
+  return alloc_size <= ((std::numeric_limits<int>::max)() - kPageSize);
+}
+#endif
+
 }  // unnamed namespace
 
 // Extract interesting stats
@@ -1152,15 +1167,15 @@
   return cached_value == Static::pageheap()->GetDescriptor(p)->sizeclass;
 }
 
-static inline ATTRIBUTE_ALWAYS_INLINE void* CheckedMallocResult(void *result) {
+static inline ATTRIBUTE_ALWAYS_INLINE void* CheckedMallocResult(void* result) {
   ASSERT(result == NULL || CheckCachedSizeClass(result));
   return result;
 }
 
 static inline ATTRIBUTE_ALWAYS_INLINE void* SpanToMallocResult(Span *span) {
   Static::pageheap()->InvalidateCachedSizeClass(span->start);
-  return
-      CheckedMallocResult(reinterpret_cast<void*>(span->start << kPageShift));
+  return CheckedMallocResult(
+      reinterpret_cast<void*>(span->start << kPageShift));
 }
 
 static void* DoSampledAllocation(size_t size) {
@@ -1347,6 +1362,13 @@
 }
 
 ATTRIBUTE_ALWAYS_INLINE inline void* do_malloc(size_t size) {
+#if defined(TCMALLOC_DISABLE_HUGE_ALLOCATIONS)
+  if (!IsAllocSizePermitted(size)) {
+    errno = ENOMEM;
+    return NULL;
+  }
+#endif
+
   if (PREDICT_FALSE(ThreadCache::IsUseEmergencyMalloc())) {
     return tcmalloc::EmergencyMalloc(size);
   }
@@ -1375,7 +1397,8 @@
 
   // The common case, and also the simplest.  This just pops the
   // size-appropriate freelist, after replenishing it if it's empty.
-  return CheckedMallocResult(cache->Allocate(allocated_size, cl, nop_oom_handler));
+  return CheckedMallocResult(
+      cache->Allocate(allocated_size, cl, nop_oom_handler));
 }
 
 static void *retry_malloc(void* size) {
@@ -1411,6 +1434,13 @@
 }
 
 static ATTRIBUTE_NOINLINE void do_free_pages(Span* span, void* ptr) {
+  // Check to see if the object is in use.
+  CHECK_CONDITION_PRINT(span->location == Span::IN_USE,
+                        "Object was not in-use");
+  CHECK_CONDITION_PRINT(
+      span->start << kPageShift == reinterpret_cast<uintptr_t>(ptr),
+      "Pointer is not pointing to the start of a span");
+
   SpinLockHolder h(Static::pageheap_lock());
   if (span->sample) {
     StackTrace* st = reinterpret_cast<StackTrace*>(span->objects);
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 1482505..e627168 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -25,10 +25,15 @@
     # to have proprietary codecs enabled.
     'chromium': {
       'android-rel': 'android_without_codecs_release_bot_minimal_symbols',
+      'android-dbg': 'android_without_codecs_debug_bot_minimal_symbols',
       'linux-rel': 'release_bot',
+      'linux-dbg': 'debug_bot',
       'mac-rel': 'release_bot_mac_strip',
+      'mac-dbg': 'debug_bot',
       'win32-rel': 'release_bot_x86_minimal_symbols_enable_archive_compression',
+      'win32-dbg': 'debug_bot',
       'win-rel': 'release_bot_minimal_symbols_enable_archive_compression',
+      'win-dbg': 'debug_bot',
     },
 
     'chromium.android': {
@@ -908,6 +913,10 @@
       'android_without_codecs', 'shared_release_bot', 'x64', 'dcheck_always_on',
     ],
 
+    'android_without_codecs_debug_bot_minimal_symbols': [
+      'android_without_codecs', 'debug_bot', 'minimal_symbols',
+    ],
+
     'android_without_codecs_release_bot_minimal_symbols': [
       'android_without_codecs', 'release_bot', 'minimal_symbols', 'strip_debug_info',
     ],
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 361284c..2dadca2 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -35280,6 +35280,7 @@
   <int value="8" label="File URL intent"/>
   <int value="9" label="Content URL intent"/>
   <int value="10" label="Progress bar"/>
+  <int value="11" label="Net error page"/>
 </enum>
 
 <enum name="OfflinePagesAggregatedRequestResult">
@@ -35495,34 +35496,44 @@
 </enum>
 
 <enum name="OfflinePagesOfflineUsage">
-  <int value="0" label="Not used">Not used at all during whole day.</int>
-  <int value="1" label="Started, but no pages loaded successfully">
-    Started, but failed to successfully navigate.
+  <int value="0" label="Not used">
+    There was no attempt to perform a navigation in a day.
+  </int>
+  <int value="1" label="Navigation started, but no pages loaded successfully">
+    At least one navigation was started but none committed successfully in a
+    day.
   </int>
   <int value="2" label="Offline pages loaded only">
-    Only navigated to offline pages locally saved on the device.
+    Chrome navigations committed exclusively to locally saved offline pages in a
+    day.
   </int>
-  <int value="3" label="Online pages loaded only">Only navigated online.</int>
-  <int value="4" label="Both offlilne and online pages loaded">
-    Navigated to both online and offline pages.
+  <int value="3" label="Online pages loaded only">
+    Chrome navigations committed exclusively to online pages in a day.
+  </int>
+  <int value="4" label="Both offline and online pages loaded">
+    Chrome navigations committed to both online pages and locally saved offline
+    pages in a day.
   </int>
 </enum>
 
 <enum name="OfflinePagesPrefetchUsage">
-  <int value="0" label="Deprecated: Has prefetched pages">
+  <int value="0" label="Deprecated: Has prefetched offline pages">
     <obsolete>
-      Not useful enough to justify its reporting complexities.
+      This state was never reported.
     </obsolete>
-    Deprecated: Reported when Offline Model DB is loaded.
+    Deprecated: No prefetched offline pages were downloaded nor opened by the
+    user in a day but there are some available locally.
   </int>
-  <int value="1" label="Only fetched new pages">
-    Reported when at least one page was prefetched in a day, but none opened.
+  <int value="1" label="Only prefetched new offline pages">
+    Prefetched offline pages were downloaded in a day but none were opened by
+    the user.
   </int>
-  <int value="2" label="Only opened prefetched page">
-    User opened at least one prefetched page, but no new pages were prefetched.
+  <int value="2" label="Only opened prefetched offline pages">
+    The user opened prefetched offline pages in a day but no new ones were
+    downloaded.
   </int>
-  <int value="3" label="Both fetched and opened prefetched pages">
-    The pages were both prefetched and opened during the day.
+  <int value="3" label="Both prefetched and opened offline pages">
+    Prefetched offline pages were both downloaded a opened by the user in a day.
   </int>
 </enum>
 
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 720859e..02853b7 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -16899,9 +16899,6 @@
 
 <histogram name="DataReductionProxy.ResponseProxyServerStatus"
     enum="DataReductionProxyResponseProxyServerStatus">
-  <obsolete>
-    Deprecated 2018/05.
-  </obsolete>
   <owner>sclittle@chromium.org</owner>
   <owner>bengr@chromium.org</owner>
   <summary>
@@ -64933,7 +64930,9 @@
   <owner>carlosk@chromium.org</owner>
   <owner>fgorski@chromium.org</owner>
   <summary>
-    Can a recent page be saved or not? Logged for all attempts to save
+    Reports whether a web page complies with all requirements for it to be
+    allowed to be  saved as an offline page. This is reported only on Android,
+    after a successful main frame navigation is finished.
   </summary>
 </histogram>
 
@@ -65538,12 +65537,13 @@
 <histogram name="OfflinePages.OfflineUsage" enum="OfflinePagesOfflineUsage">
   <owner>dimich@chromium.org</owner>
   <summary>
-    Enum-based buckets reflect the number of days the Chrome was used in each
-    specific way: - Not used at all during whole day. - Started, but failed to
-    successfully navigate. - Only navigated to offline pages locally saved on
-    the device. - Only navigated online. - Navigated to both online and offline
-    pages. This data is accumulated locally and reported when connection is
-    likely to succeed (usually after successful online navigation).
+    Counts user-days when Chrome was used in specific ways regarding navigation
+    to online and offline content. Buckets are mutually exclusive so that only
+    one bucket is incremented per reported day. This metric is not recorded to
+    UMA immediately due to potential data loss while offline. So day counters
+    are persisted to prefs and reported to the histogram only when the next UMA
+    data upload is likely to succeed. For more details see:
+    https://goo.gl/GJXwFe.
   </summary>
 </histogram>
 
@@ -65606,9 +65606,11 @@
 <histogram name="OfflinePages.PrefetchEnabled" enum="BooleanEnabled">
   <owner>dimich@chromium.org</owner>
   <summary>
-    Whether the Offline Pages Prefetch was effectively enabled during the day.
-    Determined by a combination of flags and user preferences. Reported at the
-    same moment as OfflinePages.OfflineUsage.
+    Counts user-days when candidate articles were suggested to the Offline
+    Prefetch pipeline while it was enabled. This metric is not recorded to UMA
+    immediately due to potential data loss while offline. So day counters are
+    persisted to prefs and reported to the histogram only when the next UMA data
+    upload is likely to succeed. For more details see: https://goo.gl/GJXwFe.
   </summary>
 </histogram>
 
@@ -65803,12 +65805,13 @@
 <histogram name="OfflinePages.PrefetchUsage" enum="OfflinePagesPrefetchUsage">
   <owner>dimich@chromium.org</owner>
   <summary>
-    Enum-based buckets reflect the number of days the Offline Pages Prefetch was
-    able to fetch new pages, and/or user was opening those pages. This data is
-    accumulated locally when fetch operations complete or when prefetched pages
-    are opened (often happens in background or while offline respectively), and
-    reported when connection is likely to succeed (usually after successful
-    online navigation).
+    Counts user-days categorized by how Offline Prefetch performed and had its
+    content accessed by the user. Buckets are mutually exclusive so that only
+    one bucket is incremented per reported day. This metric is not recorded to
+    UMA immediately due to potential data loss while offline. So day counters
+    are persisted to prefs and reported to the histogram only when the next UMA
+    data upload is likely to succeed. For more details see:
+    https://goo.gl/GJXwFe.
   </summary>
 </histogram>
 
diff --git a/tools/perf/flakiness_cli b/tools/perf/flakiness_cli
index ba0dc441..08ca9d7 100755
--- a/tools/perf/flakiness_cli
+++ b/tools/perf/flakiness_cli
@@ -30,7 +30,8 @@
     data = api.GetBuilders()
     print frames.BuildersDataFrame(data)
   elif args.action == 'results':
-    print api.GetTestResults(args.master, args.builder, args.test_type)
+    data = api.GetTestResults(args.master, args.builder, args.test_type)
+    print frames.TestResultsDataFrame(data)
   else:
     raise NotImplementedError(args.action)
 
diff --git a/tools/perf/test_results/frames.py b/tools/perf/test_results/frames.py
index 02a8a43..ba848c6 100644
--- a/tools/perf/test_results/frames.py
+++ b/tools/perf/test_results/frames.py
@@ -10,7 +10,13 @@
   pandas = None
 
 
+TEST_RESULTS_COLUMNS = (
+    'timestamp', 'builder', 'build_number', 'commit_pos', 'test_suite',
+    'test_case', 'result', 'time')
+
+
 def BuildersDataFrame(data):
+  """Convert a builders request response into a data frame."""
   def iter_rows():
     for master in data['masters']:
       for test_type, builders in master['tests'].iteritems():
@@ -19,3 +25,134 @@
 
   return pandas.DataFrame.from_records(
       iter_rows(), columns=('master', 'builder', 'test_type'))
+
+
+def _RunLengthDecode(count_value_pairs):
+  """Iterator to expand a run length encoded sequence.
+
+  The test results dashboard compresses some long lists using "run length
+  encoding", for example:
+
+    ['F', 'F', 'F', 'P', 'P', 'P', 'P', 'F', 'F']
+
+  becomes:
+
+    [[3, 'F'], [4, 'P'], [2, 'F']]
+
+  This function takes the encoded version and returns an iterator that yields
+  the elements of the expanded one.
+
+  Args:
+    count_value_pairs: A list of [count, value] pairs.
+
+  Yields:
+    Each value of the expanded sequence, one at a time.
+  """
+  for count, value in count_value_pairs:
+    for _ in xrange(count):
+      yield value
+
+
+def _IterTestResults(tests_dict, test_path=None):
+  """Parse and iterate over the "tests" section of a test results response.
+
+  The test results dashboard supports multiple levels of "subtests" organised
+  as a tree of nested dicts. The leafs of the tree are "results" dicts.
+
+  This iterator "flattens out" the test path names, splitting them into a
+  test_suite (the top level name) and test_case (all other "sub" names, if any).
+
+  For example:
+
+      {
+          'A': {
+              '1': {'results': [...]},
+              '2': {'results': [...]}
+          },
+          'B': {
+              '3': {
+                  'a': {'results': [...]},
+                  'b': {'results': [...]},
+                  'c': {'results': [...]}
+              }
+          },
+          'C': {'results': [...]}
+      }
+
+  Will generate 6 responses when iterated over:
+
+      ('A', '1', {'results': [...]})
+      ('A', '2', {'results': [...]})
+      ('B', '3/a', {'results': [...]})
+      ('B', '3/b', {'results': [...]})
+      ('B', '3/c', {'results': [...]})
+      ('C', '', {'results': [...]})
+
+  Args:
+    tests_dict: The 'tests' dictionary as contained in a test results response.
+    test_path: An optional prefix for the test path. (Not meant to be used
+        directly, needed for the recursive implementation.)
+
+  Yields:
+    A tripe (test_suite, test_case, test_results) for each test path contained
+    in the input.
+  """
+  if 'results' in tests_dict:
+    assert test_path  # Should not be missing or empty.
+    yield test_path[0], '/'.join(test_path[1:]), tests_dict
+  else:
+    if test_path is None:
+      test_path = []
+    for test_name, subtests_dict in tests_dict.iteritems():
+      test_path.append(test_name)
+      for test_row in _IterTestResults(subtests_dict, test_path):
+        yield test_row
+      assert test_path.pop() == test_name
+
+
+def _AddDataFrameColumn(df, col, values, fill_value=0):
+  """Add a sequence of values as a new column, filling values if needed.
+
+  Args:
+    df: A data frame on which to add the column, it is modified in place.
+    col: A string with the name for the new column.
+    values: A sequence of values for the column.
+    fill_value: If the sequence of values is shorter that the current number
+      of rows in the df, pad the sequence with extra copies of `fill_value`
+      to make the number of rows match.
+  """
+  df[col] = pandas.Series(list(values)).reindex(df.index, fill_value=fill_value)
+
+
+def TestResultsDataFrame(data):
+  """Convert a test results request response into a data frame."""
+  assert data['version'] == 4
+
+  dfs = []
+  for builder, builder_data in data.iteritems():
+    if builder == 'version':
+      continue  # Skip, not a builder.
+    builds = pandas.DataFrame()
+    builds['timestamp'] = pandas.to_datetime(
+        builder_data['secondsSinceEpoch'], unit='s')
+    builds['builder'] = builder
+    builds['build_number'] = builder_data['buildNumbers']
+    _AddDataFrameColumn(builds, 'commit_pos', builder_data['chromeRevision'])
+    for test_suite, test_case, test_results in _IterTestResults(
+        builder_data['tests']):
+      df = builds.copy()
+      df['test_suite'] = test_suite
+      df['test_case'] = test_case
+      _AddDataFrameColumn(df, 'result', _RunLengthDecode(
+          test_results['results']), fill_value='N')
+      _AddDataFrameColumn(df, 'time', _RunLengthDecode(test_results['times']))
+      dfs.append(df)
+
+    if dfs:
+      df = pandas.concat(dfs, ignore_index=True)
+      assert tuple(df.columns) == TEST_RESULTS_COLUMNS
+    else:
+      # Return an empty data frame with the right column names otherwise.
+      df = pandas.DataFrame(columns=TEST_RESULTS_COLUMNS)
+
+    return df
diff --git a/tools/perf/test_results/frames_unittest.py b/tools/perf/test_results/frames_unittest.py
index c477186..e6c02caa 100644
--- a/tools/perf/test_results/frames_unittest.py
+++ b/tools/perf/test_results/frames_unittest.py
@@ -64,3 +64,110 @@
     self.assertItemsEqual(
         df[df['builder'] == 'my-new-android-bot']['master'].unique(),
         ['chromium.perf.fyi'])
+
+  def testRunLengthDecode(self):
+    encoded = [[3, 'F'], [4, 'P'], [2, 'F']]
+    decoded = ['F', 'F', 'F', 'P', 'P', 'P', 'P', 'F', 'F']
+
+    # pylint: disable=protected-access
+    self.assertSequenceEqual(
+        list(frames._RunLengthDecode(encoded)), decoded)
+
+  def testIterTestResults(self):
+    tests_dict = {
+        'A': {
+            '1': {'results': 'A/1'},
+            '2': {'results': 'A/2'}
+        },
+        'B': {
+            '3': {
+                'a': {'results': 'B/3/a'},
+                'b': {'results': 'B/3/b'},
+                'c': {'results': 'B/3/c'}
+            }
+        },
+        'C': {'results': 'C'}
+    }
+
+    expected = [
+        ('A', '1', {'results': 'A/1'}),
+        ('A', '2', {'results': 'A/2'}),
+        ('B', '3/a', {'results': 'B/3/a'}),
+        ('B', '3/b', {'results': 'B/3/b'}),
+        ('B', '3/c', {'results': 'B/3/c'}),
+        ('C', '', {'results': 'C'}),
+    ]
+
+    # pylint: disable=protected-access
+    self.assertItemsEqual(
+        list(frames._IterTestResults(tests_dict)), expected)
+
+  def testTestResultsDataFrame(self):
+    data = {
+        'android-bot': {
+            'secondsSinceEpoch': [1234567892, 1234567891, 1234567890],
+            'buildNumbers': [42, 41, 40],
+            'chromeRevision': [1234, 1233, 1232],
+            'tests': {
+                'some_benchmark': {
+                    'story_1': {
+                        'results': [[3, 'P']],
+                        'times': [[3, 1]]
+                    },
+                    'story_2': {
+                        'results': [[2, 'Q']],
+                        'times': [[2, 5]]
+                    }
+                },
+                'another_benchmark': {
+                    'story_3': {
+                        'results': [[1, 'Q'], [2, 'P']],
+                        'times': [[1, 3], [1, 2], [1, 3]]
+                    }
+                }
+            }
+        },
+        'version': 4
+    }
+    df = frames.TestResultsDataFrame(data)
+    # Poke and check a few simple facts about our sample data.
+    # We have data from 3 builds x 3 stories:
+    self.assertEqual(len(df), 9)
+    # All run on the same bot.
+    self.assertTrue((df['builder'] == 'android-bot').all())
+    # The most recent build number was 42.
+    self.assertEqual(df['build_number'].max(), 42)
+    # some_benchmark/story_1 passed on all builds.
+    selection = df[df['test_case'] == 'story_1']
+    self.assertTrue((selection['test_suite'] == 'some_benchmark').all())
+    self.assertTrue((selection['result'] == 'P').all())
+    # There was no data for story_2 on build 40.
+    selection = df[(df['test_case'] == 'story_2') & (df['build_number'] == 40)]
+    self.assertEqual(len(selection), 1)
+    self.assertTrue(selection.iloc[0]['result'], 'N')
+
+  def testTestResultsDataFrame_empty(self):
+    data = {
+        'android-bot': {
+            'secondsSinceEpoch': [1234567892, 1234567891, 1234567890],
+            'buildNumbers': [42, 41, 40],
+            'chromeRevision': [1234, 1233, 1232],
+            'tests': {}
+        },
+        'version': 4
+    }
+    df = frames.TestResultsDataFrame(data)
+    # The data frame is empty.
+    self.assertTrue(df.empty)
+    # Column names are still defined (although of course empty).
+    self.assertItemsEqual(df['test_case'].unique(), [])
+
+  def testTestResultsDataFrame_wrongVersionRejected(self):
+    data = {
+        'android-bot': {
+            'some': ['new', 'fancy', 'results', 'encoding']
+        },
+        'version': 5
+    }
+    with self.assertRaises(AssertionError):
+      frames.TestResultsDataFrame(data)
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml
index 90d8b19..a61d1b6 100644
--- a/tools/traffic_annotation/summary/annotations.xml
+++ b/tools/traffic_annotation/summary/annotations.xml
@@ -31,10 +31,10 @@
  <item id="bluetooth_socket" hash_code="94099818" type="0" content_hash_code="30932349" os_list="linux,windows" file_path="device/bluetooth/bluetooth_socket_net.cc"/>
  <item id="brandcode_config" hash_code="109679553" type="0" content_hash_code="128843792" os_list="linux,windows" file_path="chrome/browser/profile_resetter/brandcode_config_fetcher.cc"/>
  <item id="captive_portal_service" hash_code="88754904" type="0" content_hash_code="70737580" os_list="linux,windows" file_path="chrome/browser/captive_portal/captive_portal_service.cc"/>
- <item id="cast_channel_send" hash_code="103172229" type="0" content_hash_code="33946302" os_list="linux,windows" file_path="extensions/browser/api/cast_channel/cast_channel_api.cc"/>
- <item id="cast_keep_alive_delegate" hash_code="134755844" type="0" content_hash_code="66118796" os_list="linux,windows" file_path="components/cast_channel/keep_alive_delegate.cc"/>
- <item id="cast_message_handler" hash_code="87558948" type="0" content_hash_code="49684899" os_list="linux,windows" file_path="components/cast_channel/cast_message_handler.cc"/>
- <item id="cast_socket" hash_code="115192205" type="0" content_hash_code="63056899" os_list="linux,windows" file_path="components/cast_channel/cast_socket.cc"/>
+ <item id="cast_channel_send" hash_code="103172229" type="0" deprecated="2018-08-23" content_hash_code="33946302" file_path=""/>
+ <item id="cast_keep_alive_delegate" hash_code="134755844" type="0" deprecated="2018-08-23" content_hash_code="66118796" file_path=""/>
+ <item id="cast_message_handler" hash_code="87558948" type="0" deprecated="2018-08-23" content_hash_code="49684899" file_path=""/>
+ <item id="cast_socket" hash_code="115192205" type="0" content_hash_code="42881651" os_list="linux,windows" file_path="components/cast_channel/cast_socket.cc"/>
  <item id="cast_udp_socket" hash_code="22573197" type="0" content_hash_code="75328301" os_list="linux,windows" file_path="components/mirroring/service/udp_socket_client.cc"/>
  <item id="cast_udp_transport" hash_code="5576536" type="0" content_hash_code="107643273" os_list="linux,windows" file_path="media/cast/net/udp_transport_impl.cc"/>
  <item id="certificate_verifier" hash_code="113553577" type="0" content_hash_code="62346354" os_list="linux,windows" file_path="net/cert_net/cert_net_fetcher_impl.cc"/>
diff --git a/ui/display/manager/BUILD.gn b/ui/display/manager/BUILD.gn
index 66954c3d..f43c0de 100644
--- a/ui/display/manager/BUILD.gn
+++ b/ui/display/manager/BUILD.gn
@@ -19,8 +19,6 @@
     "fake_display_delegate.h",
     "fake_display_snapshot.cc",
     "fake_display_snapshot.h",
-    "forwarding_display_delegate.cc",
-    "forwarding_display_delegate.h",
     "json_converter.cc",
     "json_converter.h",
     "managed_display_info.cc",
diff --git a/ui/display/manager/forwarding_display_delegate.cc b/ui/display/manager/forwarding_display_delegate.cc
deleted file mode 100644
index 50623ee..0000000
--- a/ui/display/manager/forwarding_display_delegate.cc
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/display/manager/forwarding_display_delegate.h"
-
-#include <utility>
-
-#include "base/bind.h"
-#include "mojo/public/cpp/bindings/sync_call_restrictions.h"
-#include "ui/display/types/display_snapshot.h"
-
-namespace display {
-
-ForwardingDisplayDelegate::ForwardingDisplayDelegate(
-    mojom::NativeDisplayDelegatePtr delegate)
-    : delegate_(std::move(delegate)), binding_(this) {}
-
-ForwardingDisplayDelegate::~ForwardingDisplayDelegate() {}
-
-void ForwardingDisplayDelegate::Initialize() {
-  // TODO(kylechar/sky): Figure out how to make this not synchronous.
-  mojo::SyncCallRestrictions::ScopedAllowSyncCall scoped_sync;
-
-  // This is a synchronous call to Initialize() because ash depends on
-  // NativeDisplayDelegate being synchronous during it's initialization. Calls
-  // to GetDisplays() and Configure() will return early starting now using
-  // whatever is in |snapshots_|.
-  mojom::NativeDisplayObserverPtr observer;
-  binding_.Bind(mojo::MakeRequest(&observer));
-  delegate_->Initialize(std::move(observer), &snapshots_);
-}
-
-void ForwardingDisplayDelegate::TakeDisplayControl(
-    DisplayControlCallback callback) {
-  delegate_->TakeDisplayControl(std::move(callback));
-}
-
-void ForwardingDisplayDelegate::RelinquishDisplayControl(
-    DisplayControlCallback callback) {
-  delegate_->RelinquishDisplayControl(std::move(callback));
-}
-
-void ForwardingDisplayDelegate::GetDisplays(GetDisplaysCallback callback) {
-  if (!use_delegate_) {
-    ForwardDisplays(std::move(callback));
-    return;
-  }
-
-  delegate_->GetDisplays(
-      base::BindOnce(&ForwardingDisplayDelegate::StoreAndForwardDisplays,
-                     base::Unretained(this), std::move(callback)));
-}
-
-void ForwardingDisplayDelegate::Configure(const DisplaySnapshot& snapshot,
-                                          const DisplayMode* mode,
-                                          const gfx::Point& origin,
-                                          ConfigureCallback callback) {
-  if (!use_delegate_) {
-    // Pretend configuration succeeded. When the first OnConfigurationChanged()
-    // is received this will run again and actually happen.
-    std::move(callback).Run(true);
-    return;
-  }
-
-  base::Optional<std::unique_ptr<DisplayMode>> transport_mode;
-  if (mode)
-    transport_mode = mode->Clone();
-  delegate_->Configure(snapshot.display_id(), std::move(transport_mode), origin,
-                       std::move(callback));
-}
-
-void ForwardingDisplayDelegate::GetHDCPState(const DisplaySnapshot& snapshot,
-                                             GetHDCPStateCallback callback) {
-  delegate_->GetHDCPState(snapshot.display_id(), std::move(callback));
-}
-
-void ForwardingDisplayDelegate::SetHDCPState(const DisplaySnapshot& snapshot,
-                                             HDCPState state,
-                                             SetHDCPStateCallback callback) {
-  delegate_->SetHDCPState(snapshot.display_id(), state, std::move(callback));
-}
-
-bool ForwardingDisplayDelegate::SetColorMatrix(
-    int64_t display_id,
-    const std::vector<float>& color_matrix) {
-  delegate_->SetColorMatrix(display_id, color_matrix);
-  // DrmNativeDisplayDelegate always returns true so this will too.
-  return true;
-}
-
-bool ForwardingDisplayDelegate::SetGammaCorrection(
-    int64_t display_id,
-    const std::vector<display::GammaRampRGBEntry>& degamma_lut,
-    const std::vector<display::GammaRampRGBEntry>& gamma_lut) {
-  delegate_->SetGammaCorrection(display_id, degamma_lut, gamma_lut);
-  // DrmNativeDisplayDelegate always returns true so this will too.
-  return true;
-}
-
-void ForwardingDisplayDelegate::AddObserver(
-    display::NativeDisplayObserver* observer) {
-  observers_.AddObserver(observer);
-}
-
-void ForwardingDisplayDelegate::RemoveObserver(
-    display::NativeDisplayObserver* observer) {
-  observers_.RemoveObserver(observer);
-}
-
-FakeDisplayController* ForwardingDisplayDelegate::GetFakeDisplayController() {
-  return nullptr;
-}
-
-void ForwardingDisplayDelegate::OnConfigurationChanged() {
-  // Start asynchronous operation once the first OnConfigurationChanged()
-  // arrives. We know |delegate_| is usable at this point.
-  use_delegate_ = true;
-
-  // Forward OnConfigurationChanged received over Mojo to local observers.
-  for (auto& observer : observers_)
-    observer.OnConfigurationChanged();
-}
-
-void ForwardingDisplayDelegate::StoreAndForwardDisplays(
-    GetDisplaysCallback callback,
-    std::vector<std::unique_ptr<DisplaySnapshot>> snapshots) {
-  for (auto& observer : observers_)
-    observer.OnDisplaySnapshotsInvalidated();
-  snapshots_ = std::move(snapshots);
-
-  ForwardDisplays(std::move(callback));
-}
-
-void ForwardingDisplayDelegate::ForwardDisplays(GetDisplaysCallback callback) {
-  std::vector<DisplaySnapshot*> snapshot_ptrs;
-  for (auto& snapshot : snapshots_)
-    snapshot_ptrs.push_back(snapshot.get());
-  std::move(callback).Run(snapshot_ptrs);
-}
-
-}  // namespace display
diff --git a/ui/display/manager/forwarding_display_delegate.h b/ui/display/manager/forwarding_display_delegate.h
deleted file mode 100644
index dd524fda6..0000000
--- a/ui/display/manager/forwarding_display_delegate.h
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_DISPLAY_MANAGER_FORWARDING_DISPLAY_DELEGATE_H_
-#define UI_DISPLAY_MANAGER_FORWARDING_DISPLAY_DELEGATE_H_
-
-#include <memory>
-#include <vector>
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "base/observer_list.h"
-#include "mojo/public/cpp/bindings/binding.h"
-#include "ui/display/manager/display_manager_export.h"
-#include "ui/display/mojo/native_display_delegate.mojom.h"
-#include "ui/display/types/native_display_delegate.h"
-#include "ui/display/types/native_display_observer.h"
-
-namespace display {
-
-class DisplaySnapshot;
-
-// NativeDisplayDelegate implementation that forwards calls to a real
-// NativeDisplayDelegate in another process. Only forwards the methods
-// implemented by Ozone DRM, other method won't do anything.
-class DISPLAY_MANAGER_EXPORT ForwardingDisplayDelegate
-    : public NativeDisplayDelegate,
-      public mojom::NativeDisplayObserver {
- public:
-  explicit ForwardingDisplayDelegate(mojom::NativeDisplayDelegatePtr delegate);
-  ~ForwardingDisplayDelegate() override;
-
-  // display::NativeDisplayDelegate:
-  void Initialize() override;
-  void TakeDisplayControl(DisplayControlCallback callback) override;
-  void RelinquishDisplayControl(DisplayControlCallback callback) override;
-  void GetDisplays(GetDisplaysCallback callback) override;
-  void Configure(const DisplaySnapshot& output,
-                 const DisplayMode* mode,
-                 const gfx::Point& origin,
-                 ConfigureCallback callback) override;
-  void GetHDCPState(const DisplaySnapshot& output,
-                    GetHDCPStateCallback callback) override;
-  void SetHDCPState(const DisplaySnapshot& output,
-                    HDCPState state,
-                    SetHDCPStateCallback callback) override;
-  bool SetColorMatrix(int64_t display_id,
-                      const std::vector<float>& color_matrix) override;
-  bool SetGammaCorrection(
-      int64_t display_id,
-      const std::vector<display::GammaRampRGBEntry>& degamma_lut,
-      const std::vector<display::GammaRampRGBEntry>& gamma_lut) override;
-  void AddObserver(display::NativeDisplayObserver* observer) override;
-  void RemoveObserver(display::NativeDisplayObserver* observer) override;
-  FakeDisplayController* GetFakeDisplayController() override;
-
-  // display::mojom::NativeDisplayObserver:
-  void OnConfigurationChanged() override;
-
- private:
-  // Stores display snapshots and forwards pointers to |callback|.
-  void StoreAndForwardDisplays(
-      GetDisplaysCallback callback,
-      std::vector<std::unique_ptr<DisplaySnapshot>> snapshots);
-
-  // Forwards display snapshot pointers to |callback|.
-  void ForwardDisplays(GetDisplaysCallback callback);
-
-  // True if we should use |delegate_|. This will be false if synchronous
-  // GetDisplays() and Configure() are required.
-  bool use_delegate_ = false;
-
-  mojom::NativeDisplayDelegatePtr delegate_;
-  mojo::Binding<mojom::NativeDisplayObserver> binding_;
-
-  // Display snapshots are owned here but accessed via raw pointers elsewhere.
-  // Call OnDisplaySnapshotsInvalidated() on observers before invalidating them.
-  std::vector<std::unique_ptr<DisplaySnapshot>> snapshots_;
-
-  base::ObserverList<display::NativeDisplayObserver>::Unchecked observers_;
-
-  DISALLOW_COPY_AND_ASSIGN(ForwardingDisplayDelegate);
-};
-
-}  // namespace display
-
-#endif  // UI_DISPLAY_MANAGER_FORWARDING_DISPLAY_DELEGATE_H_
diff --git a/ui/display/mojo/BUILD.gn b/ui/display/mojo/BUILD.gn
index 1b54224..c60046c 100644
--- a/ui/display/mojo/BUILD.gn
+++ b/ui/display/mojo/BUILD.gn
@@ -12,7 +12,6 @@
     "display_mode.mojom",
     "display_snapshot.mojom",
     "gamma_ramp_rgb_entry.mojom",
-    "native_display_delegate.mojom",
   ]
 
   public_deps = [
diff --git a/ui/display/mojo/native_display_delegate.mojom b/ui/display/mojo/native_display_delegate.mojom
deleted file mode 100644
index 6659ac63..0000000
--- a/ui/display/mojo/native_display_delegate.mojom
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module display.mojom;
-
-import "ui/display/mojo/display_constants.mojom";
-import "ui/display/mojo/display_mode.mojom";
-import "ui/display/mojo/display_snapshot.mojom";
-import "ui/display/mojo/gamma_ramp_rgb_entry.mojom";
-import "ui/gfx/geometry/mojo/geometry.mojom";
-
-// Corresponds to display::NativeDisplayObserver.
-interface NativeDisplayObserver {
-  OnConfigurationChanged();
-};
-
-// Corresponds to display::NativeDisplayDelegate. This only implements
-// functionality that is used by Ozone DRM.
-interface NativeDisplayDelegate {
-  // Initializes and registers the observer. This is synchronous so that ash
-  // initialization has an initial set of displays to use.
-  [Sync]
-  Initialize(NativeDisplayObserver observer) =>
-      (array<DisplaySnapshot> snapshots);
-
-  // Take control of the displays from any other controlling process.
-  TakeDisplayControl() => (bool result);
-
-  // Let others control the displays.
-  RelinquishDisplayControl() => (bool result);
-
-  // Queries for a list of fresh displays.
-  GetDisplays() => (array<DisplaySnapshot> snapshots);
-
-  // Configures the display represented by |display_id| to use |mode| and
-  // positions the display to |origin| in the framebuffer. |mode| can be null,
-  // which represents disabling the display.
-  Configure(int64 display_id,
-            DisplayMode? mode,
-            gfx.mojom.Point origin) => (bool status);
-
-  // Gets HDCP state of output.
-  GetHDCPState(int64 display_id) => (bool status, HDCPState state);
-
-  // Sets HDCP state of output.
-  SetHDCPState(int64 display_id, HDCPState state) => (bool status);
-
-  // Sets a 3x3 color transform matrix on the display hardware.
-  // TODO: Consider using a different type for the color matrix.
-  // https://crbug.com/846975.
-  SetColorMatrix(int64 display_id, array<float, 9> color_matrix);
-
-  // Set the gamma lookup tables for |display_id|.
-  SetGammaCorrection(int64 display_id,
-                     array<GammaRampRGBEntry> degamma_lut,
-                     array<GammaRampRGBEntry> gamma_lut);
-};
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn
index 904a597f..2699acc 100644
--- a/ui/gl/BUILD.gn
+++ b/ui/gl/BUILD.gn
@@ -60,6 +60,7 @@
     "ca_renderer_layer_params.h",
     "dc_renderer_layer_params.cc",
     "dc_renderer_layer_params.h",
+    "egl_timestamps.h",
     "gl_bindings.cc",
     "gl_bindings.h",
     "gl_bindings_autogen_gl.cc",
diff --git a/ui/gl/egl_timestamps.h b/ui/gl/egl_timestamps.h
new file mode 100644
index 0000000..50ccdfb
--- /dev/null
+++ b/ui/gl/egl_timestamps.h
@@ -0,0 +1,34 @@
+// Copyright (c) 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_GL_EGL_TIMESTAMPS_H_
+#define UI_GL_EGL_TIMESTAMPS_H_
+
+#include "base/time/time.h"
+#include "ui/gl/gl_export.h"
+
+namespace gl {
+
+// Interface to query EGL timestamps.
+class GL_EXPORT EGLTimestampClient {
+ public:
+  virtual ~EGLTimestampClient() {}
+
+  // Returns whether EGL Timestamps are supported or not.
+  virtual bool IsEGLTimestampSupported() const = 0;
+
+  // Returns false if the egl timestamps are pending for the given frame id. If
+  // timestamps are pending, it means the frame is not yet done. Also returns
+  // the presentation time, composite interval and presentation flags for a
+  // frame as out parameters.
+  virtual bool GetFrameTimestampInfoIfAvailable(
+      base::TimeTicks* presentation_time,
+      base::TimeDelta* composite_interval,
+      uint32_t* presentation_flags,
+      int frame_id) = 0;
+};
+
+}  // namespace gl
+
+#endif  // UI_GL_EGL_TIMESTAMPS_H_
diff --git a/ui/gl/gl_surface.cc b/ui/gl/gl_surface.cc
index 5f983987..a0df579 100644
--- a/ui/gl/gl_surface.cc
+++ b/ui/gl/gl_surface.cc
@@ -243,6 +243,10 @@
   return false;
 }
 
+EGLTimestampClient* GLSurface::GetEGLTimestampClient() {
+  return nullptr;
+}
+
 GLSurface* GLSurface::GetCurrent() {
   return current_surface_.Pointer()->Get();
 }
diff --git a/ui/gl/gl_surface.h b/ui/gl/gl_surface.h
index 317fb9d8..b21b2e49 100644
--- a/ui/gl/gl_surface.h
+++ b/ui/gl/gl_surface.h
@@ -37,6 +37,7 @@
 namespace gl {
 
 class GLContext;
+class EGLTimestampClient;
 
 // Encapsulates a surface that can be rendered to with GL, hiding platform
 // specific management.
@@ -298,6 +299,9 @@
   // triple-buffered surfaces this would return 3, etc.
   virtual int GetBufferCount() const;
 
+  // Return the interface used for querying EGL timestamps.
+  virtual EGLTimestampClient* GetEGLTimestampClient();
+
   static GLSurface* GetCurrent();
 
  protected:
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc
index 373e5bb..00cdf20 100644
--- a/ui/gl/gl_surface_egl.cc
+++ b/ui/gl/gl_surface_egl.cc
@@ -1109,6 +1109,13 @@
 
   eglSurfaceAttrib(GetDisplay(), surface_, EGL_TIMESTAMPS_ANDROID, EGL_TRUE);
 
+  // Check if egl composite interval is supported or not. If not then return.
+  // Else check which other timestamps are supported.
+  EGLint interval_name = EGL_COMPOSITE_INTERVAL_ANDROID;
+  if (!eglGetCompositorTimingSupportedANDROID(GetDisplay(), surface_,
+                                              interval_name))
+    return;
+
   static const struct {
     EGLint egl_name;
     const char* name;
@@ -1131,6 +1138,25 @@
                                               ts.egl_name))
       continue;
 
+    // For presentation feedback, prefer the actual scan out time, but fallback
+    // to SurfaceFlinger's composite time since some devices don't support
+    // the former.
+    switch (ts.egl_name) {
+      case EGL_FIRST_COMPOSITION_START_TIME_ANDROID:
+        // Value of presentation_feedback_index_ relies on the order of
+        // all_timestamps.
+        presentation_feedback_index_ =
+            static_cast<int>(supported_egl_timestamps_.size());
+        presentation_flags_ = 0;
+        break;
+      case EGL_DISPLAY_PRESENT_TIME_ANDROID:
+        presentation_feedback_index_ =
+            static_cast<int>(supported_egl_timestamps_.size());
+        presentation_flags_ = gfx::PresentationFeedback::kVSync |
+                              gfx::PresentationFeedback::kHWCompletion;
+        break;
+    }
+
     // Stored in separate vectors so we can pass the egl timestamps
     // directly to the EGL functions.
     supported_egl_timestamps_.push_back(ts.egl_name);
@@ -1176,21 +1202,24 @@
     return gfx::SwapResult::SWAP_FAILED;
   }
 
-  EGLuint64KHR newFrameId = 0;
-  bool newFrameIdIsValid = true;
+  EGLuint64KHR new_frame_id = 0;
+  bool new_frame_id_is_valid = true;
   if (use_egl_timestamps_) {
-    newFrameIdIsValid =
-        !!eglGetNextFrameIdANDROID(GetDisplay(), surface_, &newFrameId);
+    new_frame_id_is_valid =
+        !!eglGetNextFrameIdANDROID(GetDisplay(), surface_, &new_frame_id);
   }
+  if (!new_frame_id_is_valid)
+    new_frame_id = -1;
 
   GLSurfacePresentationHelper::ScopedSwapBuffers scoped_swap_buffers(
-      presentation_helper_.get(), callback);
+      presentation_helper_.get(), callback, new_frame_id);
+
   if (!eglSwapBuffers(GetDisplay(), surface_)) {
     DVLOG(1) << "eglSwapBuffers failed with error "
              << GetLastEGLErrorString();
     scoped_swap_buffers.set_result(gfx::SwapResult::SWAP_FAILED);
   } else if (use_egl_timestamps_) {
-    UpdateSwapEvents(newFrameId, newFrameIdIsValid);
+    UpdateSwapEvents(new_frame_id, new_frame_id_is_valid);
   }
 
 #if defined(USE_X11)
@@ -1383,6 +1412,84 @@
   return g_use_direct_composition;
 }
 
+EGLTimestampClient* NativeViewGLSurfaceEGL::GetEGLTimestampClient() {
+  // This api call is used by GLSurfacePresentationHelper class which is member
+  // of this class NativeViewGLSurfaceEGL. Hence its guaranteed "this" pointer
+  // will live longer than the GLSurfacePresentationHelper class.
+  return this;
+}
+
+bool NativeViewGLSurfaceEGL::IsEGLTimestampSupported() const {
+  return use_egl_timestamps_;
+}
+
+bool NativeViewGLSurfaceEGL::GetFrameTimestampInfoIfAvailable(
+    base::TimeTicks* presentation_time,
+    base::TimeDelta* composite_interval,
+    uint32_t* presentation_flags,
+    int frame_id) {
+  DCHECK(presentation_time);
+  DCHECK(composite_interval);
+  DCHECK(presentation_flags);
+
+  TRACE_EVENT1("gpu", "NativeViewGLSurfaceEGL:GetFrameTimestampInfoIfAvailable",
+               "frame_id", frame_id);
+
+  // Get the composite interval.
+  EGLint interval_name = EGL_COMPOSITE_INTERVAL_ANDROID;
+  EGLnsecsANDROID composite_interval_ns = 0;
+  *presentation_flags = 0;
+
+  // If an error is generated, we will treat it as a frame done for timestamp
+  // reporting purpose.
+  if (!eglGetCompositorTimingANDROID(GetDisplay(), surface_, 1, &interval_name,
+                                     &composite_interval_ns)) {
+    *composite_interval = base::TimeDelta::FromNanoseconds(
+        base::TimeTicks::kNanosecondsPerSecond / 60);
+    // If we couldn't get the correct presentation time due to some errors,
+    // return the current time.
+    *presentation_time = base::TimeTicks::Now();
+    return true;
+  }
+
+  // If the composite interval is pending, the frame is not yet done.
+  if (composite_interval_ns == EGL_TIMESTAMP_PENDING_ANDROID) {
+    return false;
+  }
+  DCHECK_GT(composite_interval_ns, 0);
+  *composite_interval = base::TimeDelta::FromNanoseconds(composite_interval_ns);
+
+  // Get the all available timestamps for the frame. If a frame is invalid or
+  // an error is generated,  we will treat it as a frame done for timestamp
+  // reporting purpose.
+  std::vector<EGLnsecsANDROID> egl_timestamps(supported_egl_timestamps_.size(),
+                                              EGL_TIMESTAMP_INVALID_ANDROID);
+  if ((frame_id < 0) ||
+      !eglGetFrameTimestampsANDROID(
+          GetDisplay(), surface_, frame_id,
+          static_cast<EGLint>(supported_egl_timestamps_.size()),
+          supported_egl_timestamps_.data(), egl_timestamps.data())) {
+    // If we couldn't get the correct presentation time due to some errors,
+    // return the current time.
+    *presentation_time = base::TimeTicks::Now();
+    return true;
+  }
+  DCHECK_GE(presentation_feedback_index_, 0);
+
+  // Get the presentation time.
+  EGLnsecsANDROID presentation_time_ns =
+      egl_timestamps[presentation_feedback_index_];
+
+  // If the presentation time is pending, the frame is not yet done.
+  if (presentation_time_ns == EGL_TIMESTAMP_PENDING_ANDROID) {
+    return false;
+  }
+  *presentation_time = base::TimeTicks() +
+                       base::TimeDelta::FromNanoseconds(presentation_time_ns);
+  *presentation_flags = presentation_flags_;
+  return true;
+}
+
 gfx::SwapResult NativeViewGLSurfaceEGL::SwapBuffersWithDamage(
     const std::vector<int>& rects,
     const PresentationCallback& callback) {
diff --git a/ui/gl/gl_surface_egl.h b/ui/gl/gl_surface_egl.h
index c2398a61..3d44351 100644
--- a/ui/gl/gl_surface_egl.h
+++ b/ui/gl/gl_surface_egl.h
@@ -21,6 +21,7 @@
 #include "build/build_config.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/vsync_provider.h"
+#include "ui/gl/egl_timestamps.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_export.h"
 #include "ui/gl/gl_surface.h"
@@ -103,7 +104,8 @@
 };
 
 // Encapsulates an EGL surface bound to a view.
-class GL_EXPORT NativeViewGLSurfaceEGL : public GLSurfaceEGL {
+class GL_EXPORT NativeViewGLSurfaceEGL : public GLSurfaceEGL,
+                                         public EGLTimestampClient {
  public:
   NativeViewGLSurfaceEGL(EGLNativeWindowType window,
                          std::unique_ptr<gfx::VSyncProvider> vsync_provider);
@@ -144,6 +146,15 @@
                             std::unique_ptr<gfx::GpuFence> gpu_fence) override;
   bool FlipsVertically() const override;
   bool BuffersFlipped() const override;
+  EGLTimestampClient* GetEGLTimestampClient() override;
+
+  // EGLTimestampClient implementation.
+  bool IsEGLTimestampSupported() const override;
+
+  bool GetFrameTimestampInfoIfAvailable(base::TimeTicks* presentation_time,
+                                        base::TimeDelta* composite_interval,
+                                        uint32_t* presentation_flags,
+                                        int frame_id) override;
 
   // Takes care of the platform dependant bits, of any, for creating the window.
   virtual bool InitializeNativeWindow();
@@ -167,7 +178,6 @@
   // Commit the |pending_overlays_| and clear the vector. Returns false if any
   // fail to be committed.
   bool CommitAndClearPendingOverlays();
-
   void UpdateSwapEvents(EGLuint64KHR newFrameId, bool newFrameIdIsValid);
   void TraceSwapEvents(EGLuint64KHR oldFrameId);
 
@@ -191,6 +201,10 @@
   std::vector<EGLint> supported_egl_timestamps_;
   std::vector<const char*> supported_event_names_;
 
+  // PresentationFeedback support.
+  int presentation_feedback_index_ = -1;
+  uint32_t presentation_flags_ = 0;
+
   base::queue<SwapInfo> swap_info_queue_;
 
   bool vsync_enabled_ = true;
diff --git a/ui/gl/gl_surface_presentation_helper.cc b/ui/gl/gl_surface_presentation_helper.cc
index 064dca9f..ec65cee0 100644
--- a/ui/gl/gl_surface_presentation_helper.cc
+++ b/ui/gl/gl_surface_presentation_helper.cc
@@ -7,6 +7,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "ui/gfx/vsync_provider.h"
+#include "ui/gl/egl_timestamps.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_fence.h"
 #include "ui/gl/gpu_timing.h"
@@ -16,9 +17,15 @@
 GLSurfacePresentationHelper::ScopedSwapBuffers::ScopedSwapBuffers(
     GLSurfacePresentationHelper* helper,
     const GLSurface::PresentationCallback& callback)
+    : ScopedSwapBuffers(helper, callback, -1) {}
+
+GLSurfacePresentationHelper::ScopedSwapBuffers::ScopedSwapBuffers(
+    GLSurfacePresentationHelper* helper,
+    const GLSurface::PresentationCallback& callback,
+    int frame_id)
     : helper_(helper) {
   if (helper_)
-    helper_->PreSwapBuffers(callback);
+    helper_->PreSwapBuffers(callback, frame_id);
 }
 
 GLSurfacePresentationHelper::ScopedSwapBuffers::~ScopedSwapBuffers() {
@@ -29,6 +36,11 @@
 GLSurfacePresentationHelper::Frame::Frame(Frame&& other) = default;
 
 GLSurfacePresentationHelper::Frame::Frame(
+    int frame_id,
+    const GLSurface::PresentationCallback& callback)
+    : frame_id(frame_id), callback(callback) {}
+
+GLSurfacePresentationHelper::Frame::Frame(
     std::unique_ptr<GPUTimer>&& timer,
     const GLSurface::PresentationCallback& callback)
     : timer(std::move(timer)), callback(callback) {}
@@ -47,20 +59,67 @@
 GLSurfacePresentationHelper::Frame& GLSurfacePresentationHelper::Frame::
 operator=(Frame&& other) = default;
 
-bool GLSurfacePresentationHelper::Frame::StillPending() const {
-  DCHECK(timer || fence);
-  return timer ? !timer->IsAvailable() : !fence->HasCompleted();
-}
+bool GLSurfacePresentationHelper::GetFrameTimestampInfoIfAvailable(
+    const Frame& frame,
+    base::TimeTicks* timestamp,
+    base::TimeDelta* interval,
+    uint32_t* flags) {
+  DCHECK(frame.timer || frame.fence || egl_timestamp_client_);
 
-base::TimeTicks GLSurfacePresentationHelper::Frame::GetTimestamp() const {
-  DCHECK(!StillPending());
-  if (timer) {
+  if (egl_timestamp_client_) {
+    return egl_timestamp_client_->GetFrameTimestampInfoIfAvailable(
+        timestamp, interval, flags, frame.frame_id);
+  } else if (frame.timer) {
+    if (!frame.timer->IsAvailable())
+      return false;
     int64_t start = 0;
     int64_t end = 0;
-    timer->GetStartEndTimestamps(&start, &end);
-    return base::TimeTicks() + base::TimeDelta::FromMicroseconds(start);
+    frame.timer->GetStartEndTimestamps(&start, &end);
+    *timestamp = base::TimeTicks() + base::TimeDelta::FromMicroseconds(start);
+  } else {
+    if (!frame.fence->HasCompleted())
+      return false;
+    *timestamp = base::TimeTicks::Now();
   }
-  return base::TimeTicks::Now();
+  // Below logic is used to calculate final values of timestamp, interval and
+  // flags when using timer/fence to report the timestamps.
+  const bool fixed_vsync = !vsync_provider_;
+  const bool hw_clock = vsync_provider_ && vsync_provider_->IsHWClock();
+  *interval = vsync_interval_;
+  *flags = 0;
+  if (vsync_interval_.is_zero() || fixed_vsync) {
+    // If VSync parameters are fixed or not available, we just run
+    // presentation callbacks with timestamp from GPUTimers.
+    return true;
+  } else if (*timestamp < vsync_timebase_) {
+    // We got a VSync whose timestamp is after GPU finished rendering this
+    // back buffer.
+    *flags = gfx::PresentationFeedback::kVSync |
+             gfx::PresentationFeedback::kHWCompletion;
+    auto delta = vsync_timebase_ - *timestamp;
+    if (delta < vsync_interval_) {
+      // The |vsync_timebase_| is the closest VSync's timestamp after the GPU
+      // finished rendering.
+      *timestamp = vsync_timebase_;
+      if (hw_clock)
+        *flags |= gfx::PresentationFeedback::kHWClock;
+    } else {
+      // The |vsync_timebase_| isn't the closest VSync's timestamp after the
+      // GPU finished rendering. We have to compute the closest VSync's
+      // timestmp.
+      *timestamp =
+          timestamp->SnappedToNextTick(vsync_timebase_, vsync_interval_);
+    }
+  } else {
+    // The |vsync_timebase_| is earlier than |timestamp|, we will compute the
+    // next vSync's timestamp and use it to run callback.
+    if (!vsync_interval_.is_zero()) {
+      *timestamp =
+          timestamp->SnappedToNextTick(vsync_timebase_, vsync_interval_);
+      *flags = gfx::PresentationFeedback::kVSync;
+    }
+  }
+  return true;
 }
 
 void GLSurfacePresentationHelper::Frame::Destroy(bool has_context) {
@@ -116,6 +175,20 @@
   pending_frames_.clear();
 
   gl_context_ = context;
+
+  // Get an egl timestamp client.
+  egl_timestamp_client_ = surface_->GetEGLTimestampClient();
+
+  // If there is an egl timestamp client, check if egl timestamps are supported
+  // or not. If supported, then return as there is no need to use gpu timestamp
+  // client or fence.
+  if (egl_timestamp_client_) {
+    if (egl_timestamp_client_->IsEGLTimestampSupported())
+      return;
+    else
+      egl_timestamp_client_ = nullptr;
+  }
+
   gpu_timing_client_ = context->CreateGPUTimingClient();
   if (!gpu_timing_client_->IsAvailable())
     gpu_timing_client_ = nullptr;
@@ -128,8 +201,11 @@
 }
 
 void GLSurfacePresentationHelper::PreSwapBuffers(
-    const GLSurface::PresentationCallback& callback) {
-  if (gpu_timing_client_) {
+    const GLSurface::PresentationCallback& callback,
+    int frame_id) {
+  if (egl_timestamp_client_) {
+    pending_frames_.emplace_back(frame_id, callback);
+  } else if (gpu_timing_client_) {
     std::unique_ptr<GPUTimer> timer;
     timer = gpu_timing_client_->CreateGPUTimer(false /* prefer_elapsed_time */);
     timer->QueryTimeStamp();
@@ -167,6 +243,7 @@
 
   if (!gl_context_->MakeCurrent(surface_)) {
     gl_context_ = nullptr;
+    egl_timestamp_client_ = nullptr;
     gpu_timing_client_ = nullptr;
     for (auto& frame : pending_frames_)
       frame.Destroy();
@@ -177,10 +254,11 @@
   bool need_update_vsync = false;
   bool disjoint_occurred =
       gpu_timing_client_ && gpu_timing_client_->CheckAndResetTimerErrors();
-  if (disjoint_occurred || (!gpu_timing_client_ && !gl_fence_supported_)) {
-    // If GPUTimer and GLFence are not avaliable or disjoint occurred, we will
-    // compute the next VSync's timestamp and use it to run presentation
-    // callback.
+  if (disjoint_occurred ||
+      (!egl_timestamp_client_ && !gpu_timing_client_ && !gl_fence_supported_)) {
+    // If EGLTimestamps, GPUTimer and GLFence are not available or disjoint
+    // occurred, we will compute the next VSync's timestamp and use it to run
+    // presentation callback.
     uint32_t flags = 0;
     auto timestamp = base::TimeTicks::Now();
     if (!vsync_interval_.is_zero()) {
@@ -206,9 +284,6 @@
     }
   }
 
-  const bool fixed_vsync = !vsync_provider_;
-  const bool hw_clock = vsync_provider_ && vsync_provider_->IsHWClock();
-
   while (!pending_frames_.empty()) {
     auto& frame = pending_frames_.front();
     // Helper lambda for running the presentation callback and releasing the
@@ -226,49 +301,16 @@
       continue;
     }
 
-    if (frame.StillPending())
+    base::TimeTicks timestamp;
+    base::TimeDelta interval;
+    uint32_t flags = 0;
+    // Get timestamp info for a frame if available. If timestamp is not
+    // available, it means this frame is not yet done.
+    if (!GetFrameTimestampInfoIfAvailable(frame, &timestamp, &interval, &flags))
       break;
 
-    auto timestamp = frame.GetTimestamp();
-
-    if (vsync_interval_.is_zero() || fixed_vsync) {
-      // If VSync parameters are fixed or not avaliable, we just run
-      // presentation callbacks with timestamp from GPUTimers.
-      frame_presentation_callback(
-          gfx::PresentationFeedback(timestamp, vsync_interval_, 0 /* flags */));
-    } else if (timestamp < vsync_timebase_) {
-      // We got a VSync whose timestamp is after GPU finished renderering this
-      // back buffer.
-      uint32_t flags = gfx::PresentationFeedback::kVSync |
-                       gfx::PresentationFeedback::kHWCompletion;
-      auto delta = vsync_timebase_ - timestamp;
-      if (delta < vsync_interval_) {
-        // The |vsync_timebase_| is the closest VSync's timestamp after the GPU
-        // finished renderering.
-        timestamp = vsync_timebase_;
-        if (hw_clock)
-          flags |= gfx::PresentationFeedback::kHWClock;
-      } else {
-        // The |vsync_timebase_| isn't the closest VSync's timestamp after the
-        // GPU finished renderering. We have to compute the closest VSync's
-        // timestmp.
-        timestamp =
-            timestamp.SnappedToNextTick(vsync_timebase_, vsync_interval_);
-      }
-      frame_presentation_callback(
-          gfx::PresentationFeedback(timestamp, vsync_interval_, flags));
-    } else {
-      // The |vsync_timebase_| is earlier than |timestamp|, we will compute the
-      // next vSync's timestamp and use it to run callback.
-      uint32_t flags = 0;
-      if (!vsync_interval_.is_zero()) {
-        timestamp =
-            timestamp.SnappedToNextTick(vsync_timebase_, vsync_interval_);
-        flags = gfx::PresentationFeedback::kVSync;
-      }
-      frame_presentation_callback(
-          gfx::PresentationFeedback(timestamp, vsync_interval_, flags));
-    }
+    frame_presentation_callback(
+        gfx::PresentationFeedback(timestamp, interval, flags));
   }
 
   if (pending_frames_.empty() && !need_update_vsync)
diff --git a/ui/gl/gl_surface_presentation_helper.h b/ui/gl/gl_surface_presentation_helper.h
index 32c09b7..5162891 100644
--- a/ui/gl/gl_surface_presentation_helper.h
+++ b/ui/gl/gl_surface_presentation_helper.h
@@ -32,6 +32,9 @@
    public:
     ScopedSwapBuffers(GLSurfacePresentationHelper* helper,
                       const GLSurface::PresentationCallback& callback);
+    ScopedSwapBuffers(GLSurfacePresentationHelper* helper,
+                      const GLSurface::PresentationCallback& callback,
+                      int frame_id);
     ~ScopedSwapBuffers();
 
     void set_result(gfx::SwapResult result) { result_ = result; }
@@ -52,12 +55,14 @@
   ~GLSurfacePresentationHelper();
 
   void OnMakeCurrent(GLContext* context, GLSurface* surface);
-  void PreSwapBuffers(const GLSurface::PresentationCallback& callback);
+  void PreSwapBuffers(const GLSurface::PresentationCallback& callback,
+                      int frame_id);
   void PostSwapBuffers(gfx::SwapResult result);
 
  private:
   struct Frame {
     Frame(Frame&& other);
+    Frame(int frame_id, const GLSurface::PresentationCallback& callback);
     Frame(std::unique_ptr<GPUTimer>&& timer,
           const GLSurface::PresentationCallback& callback);
     Frame(std::unique_ptr<GLFence>&& fence,
@@ -66,17 +71,21 @@
     ~Frame();
     Frame& operator=(Frame&& other);
 
-    bool StillPending() const;
-    base::TimeTicks GetTimestamp() const;
     void Destroy(bool has_context = false);
 
     std::unique_ptr<GPUTimer> timer;
     // GLFence is used only if gpu timers are not available.
     std::unique_ptr<GLFence> fence;
+    int frame_id = -1;
     GLSurface::PresentationCallback callback;
     gfx::SwapResult result = gfx::SwapResult::SWAP_ACK;
   };
 
+  bool GetFrameTimestampInfoIfAvailable(const Frame& frame,
+                                        base::TimeTicks* timestamp,
+                                        base::TimeDelta* interval,
+                                        uint32_t* flags);
+
   // Check |pending_frames_| and run presentation callbacks.
   void CheckPendingFrames();
 
@@ -97,6 +106,7 @@
   base::TimeDelta vsync_interval_;
   bool check_pending_frame_scheduled_ = false;
   bool gl_fence_supported_ = false;
+  EGLTimestampClient* egl_timestamp_client_ = nullptr;
 
   base::WeakPtrFactory<GLSurfacePresentationHelper> weak_ptr_factory_;
 
diff --git a/ui/strings/translations/ui_strings_ar.xtb b/ui/strings/translations/ui_strings_ar.xtb
index 6cc243ed..ddc6a09 100644
--- a/ui/strings/translations/ui_strings_ar.xtb
+++ b/ui/strings/translations/ui_strings_ar.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">انقر هنا</translation>
 <translation id="5076340679995252485">ل&amp;صق</translation>
 <translation id="5120799197269191491">بحث+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">‏بدء مساعد Google</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> بيتابايت</translation>
 <translation id="5266161281976477809">مثلث الإفصاح</translation>
 <translation id="528468243742722775">‏مفتاح End</translation>
diff --git a/ui/strings/translations/ui_strings_da.xtb b/ui/strings/translations/ui_strings_da.xtb
index eddabe4e..f906eb4 100644
--- a/ui/strings/translations/ui_strings_da.xtb
+++ b/ui/strings/translations/ui_strings_da.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Tryk her</translation>
 <translation id="5076340679995252485">&amp;Indsæt</translation>
 <translation id="5120799197269191491">Søgetast+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Start Google Assistent</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Trekant til at vise eller skjule indhold</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_de.xtb b/ui/strings/translations/ui_strings_de.xtb
index ca940e6..7e54a160 100644
--- a/ui/strings/translations/ui_strings_de.xtb
+++ b/ui/strings/translations/ui_strings_de.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Hier tippen</translation>
 <translation id="5076340679995252485">&amp;Einfügen</translation>
 <translation id="5120799197269191491">Suche+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Google Assistant starten</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Aufklappdreieck</translation>
 <translation id="528468243742722775">Ende</translation>
diff --git a/ui/strings/translations/ui_strings_en-GB.xtb b/ui/strings/translations/ui_strings_en-GB.xtb
index 6f1fa9a..c1d3575 100644
--- a/ui/strings/translations/ui_strings_en-GB.xtb
+++ b/ui/strings/translations/ui_strings_en-GB.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Tap here</translation>
 <translation id="5076340679995252485">&amp;Paste</translation>
 <translation id="5120799197269191491">Search+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Start Google Assistant</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Disclosure triangle</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_es.xtb b/ui/strings/translations/ui_strings_es.xtb
index d37745b7..fd79f22 100644
--- a/ui/strings/translations/ui_strings_es.xtb
+++ b/ui/strings/translations/ui_strings_es.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Toca aquí</translation>
 <translation id="5076340679995252485">&amp;Pegar</translation>
 <translation id="5120799197269191491">Buscar+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Iniciar el Asistente de Google</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Triángulo de expansión</translation>
 <translation id="528468243742722775">Fin</translation>
diff --git a/ui/strings/translations/ui_strings_fil.xtb b/ui/strings/translations/ui_strings_fil.xtb
index a67e63a..4986f87 100644
--- a/ui/strings/translations/ui_strings_fil.xtb
+++ b/ui/strings/translations/ui_strings_fil.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Mag-tap dito</translation>
 <translation id="5076340679995252485">&amp;Ilagay</translation>
 <translation id="5120799197269191491">Search+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Simulan ang Google Assistant</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> (na) PB</translation>
 <translation id="5266161281976477809">Disclosure triangle</translation>
 <translation id="528468243742722775">Wakas na</translation>
diff --git a/ui/strings/translations/ui_strings_fr.xtb b/ui/strings/translations/ui_strings_fr.xtb
index 42e4eeb..e11c497 100644
--- a/ui/strings/translations/ui_strings_fr.xtb
+++ b/ui/strings/translations/ui_strings_fr.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Appuyez ici</translation>
 <translation id="5076340679995252485">C&amp;oller</translation>
 <translation id="5120799197269191491">Recherche + <ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Démarrer l'Assistant Google</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> Po</translation>
 <translation id="5266161281976477809">Triangle d'expansion</translation>
 <translation id="528468243742722775">Fin</translation>
diff --git a/ui/strings/translations/ui_strings_hr.xtb b/ui/strings/translations/ui_strings_hr.xtb
index 8dd3124..85b0eab 100644
--- a/ui/strings/translations/ui_strings_hr.xtb
+++ b/ui/strings/translations/ui_strings_hr.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Dodirnite ovdje</translation>
 <translation id="5076340679995252485">&amp;Zalijepi</translation>
 <translation id="5120799197269191491">Pretraživanje + <ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Pokretanje Google asistenta</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Trokut za otkrivanje</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_id.xtb b/ui/strings/translations/ui_strings_id.xtb
index 6466158..25c10676 100644
--- a/ui/strings/translations/ui_strings_id.xtb
+++ b/ui/strings/translations/ui_strings_id.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Tap di sini</translation>
 <translation id="5076340679995252485">Tem&amp;pel</translation>
 <translation id="5120799197269191491">Telusuri+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Mulai Asisten Google</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Segitiga aksesibilitas</translation>
 <translation id="528468243742722775">Berakhir</translation>
diff --git a/ui/strings/translations/ui_strings_it.xtb b/ui/strings/translations/ui_strings_it.xtb
index 5bfa97b..bc6bfef 100644
--- a/ui/strings/translations/ui_strings_it.xtb
+++ b/ui/strings/translations/ui_strings_it.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Tocca qui</translation>
 <translation id="5076340679995252485">&amp;Incolla</translation>
 <translation id="5120799197269191491">Ricerca+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Avvia l'Assistente Google</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Triangolo di apertura</translation>
 <translation id="528468243742722775">Fine</translation>
diff --git a/ui/strings/translations/ui_strings_ja.xtb b/ui/strings/translations/ui_strings_ja.xtb
index 6f10c004..c516513 100644
--- a/ui/strings/translations/ui_strings_ja.xtb
+++ b/ui/strings/translations/ui_strings_ja.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">ここをタップしてください</translation>
 <translation id="5076340679995252485">貼り付け(&amp;P)</translation>
 <translation id="5120799197269191491">検索+<ph name="KEY_COMBO_NAME" /></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_ms.xtb b/ui/strings/translations/ui_strings_ms.xtb
index 9debfac..f938d0bd 100644
--- a/ui/strings/translations/ui_strings_ms.xtb
+++ b/ui/strings/translations/ui_strings_ms.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Ketik di sini</translation>
 <translation id="5076340679995252485">&amp;Tampal</translation>
 <translation id="5120799197269191491">Carian+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Mulakan Google Assistant</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Segi tiga pendedahan</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_nl.xtb b/ui/strings/translations/ui_strings_nl.xtb
index 285fd5a..d1f27327 100644
--- a/ui/strings/translations/ui_strings_nl.xtb
+++ b/ui/strings/translations/ui_strings_nl.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Tik hier</translation>
 <translation id="5076340679995252485">&amp;Plakken</translation>
 <translation id="5120799197269191491">Zoeken+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">De Google Assistent starten</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Driehoek voor samen-/uitvouwen</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_pt-BR.xtb b/ui/strings/translations/ui_strings_pt-BR.xtb
index 8f820268..203b9ca 100644
--- a/ui/strings/translations/ui_strings_pt-BR.xtb
+++ b/ui/strings/translations/ui_strings_pt-BR.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Toque aqui</translation>
 <translation id="5076340679995252485">&amp;Colar</translation>
 <translation id="5120799197269191491">Pesquisar+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Inicie o Google Assistente</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Triângulo de divulgação</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_pt-PT.xtb b/ui/strings/translations/ui_strings_pt-PT.xtb
index af9ab43..fd6c7d9 100644
--- a/ui/strings/translations/ui_strings_pt-PT.xtb
+++ b/ui/strings/translations/ui_strings_pt-PT.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Toque aqui</translation>
 <translation id="5076340679995252485">C&amp;olar</translation>
 <translation id="5120799197269191491">Pesquisar+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Iniciar o Assistente Google</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Triângulo de divulgação</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_ru.xtb b/ui/strings/translations/ui_strings_ru.xtb
index 4bf4065..cf373583 100644
--- a/ui/strings/translations/ui_strings_ru.xtb
+++ b/ui/strings/translations/ui_strings_ru.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Нажмите здесь</translation>
 <translation id="5076340679995252485">&amp;Вставить</translation>
 <translation id="5120799197269191491">Поиск + <ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Запустить Google Ассистента</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> ПБ</translation>
 <translation id="5266161281976477809">Треугольник развертывания</translation>
 <translation id="528468243742722775">Завершить</translation>
diff --git a/ui/strings/translations/ui_strings_sv.xtb b/ui/strings/translations/ui_strings_sv.xtb
index 0191bb0..3c37602 100644
--- a/ui/strings/translations/ui_strings_sv.xtb
+++ b/ui/strings/translations/ui_strings_sv.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Tryck här</translation>
 <translation id="5076340679995252485">K&amp;listra in</translation>
 <translation id="5120799197269191491">Sök+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Starta Google Assistent</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Utökningstriangel</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_th.xtb b/ui/strings/translations/ui_strings_th.xtb
index f545342..9834ce7 100644
--- a/ui/strings/translations/ui_strings_th.xtb
+++ b/ui/strings/translations/ui_strings_th.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">แตะที่นี่</translation>
 <translation id="5076340679995252485">&amp;วาง</translation>
 <translation id="5120799197269191491">ค้นหา+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">เริ่มใช้ Google Assistant</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_tr.xtb b/ui/strings/translations/ui_strings_tr.xtb
index bbbcf201..d70388f7 100644
--- a/ui/strings/translations/ui_strings_tr.xtb
+++ b/ui/strings/translations/ui_strings_tr.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Buraya dokunun</translation>
 <translation id="5076340679995252485">&amp;Yapıştır</translation>
 <translation id="5120799197269191491">Arama tuşu+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Google Asistan'ı başlat</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Açıklama üçgeni</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_uk.xtb b/ui/strings/translations/ui_strings_uk.xtb
index e803b08..47786ef 100644
--- a/ui/strings/translations/ui_strings_uk.xtb
+++ b/ui/strings/translations/ui_strings_uk.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Торкніться тут</translation>
 <translation id="5076340679995252485">&amp;Вставити</translation>
 <translation id="5120799197269191491">Клавіша пошуку+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Запустити Google Асистент</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> Пб</translation>
 <translation id="5266161281976477809">Трикутник відкривання</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_vi.xtb b/ui/strings/translations/ui_strings_vi.xtb
index 4123c2e..1bbf853 100644
--- a/ui/strings/translations/ui_strings_vi.xtb
+++ b/ui/strings/translations/ui_strings_vi.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">Nhấn vào đây</translation>
 <translation id="5076340679995252485">&amp;Dán</translation>
 <translation id="5120799197269191491">Tìm kiếm+<ph name="KEY_COMBO_NAME" /></translation>
+<translation id="5137751499640340777">Bắt đầu sử dụng Trợ lý Google</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Tam giác hiển thị</translation>
 <translation id="528468243742722775">End</translation>
diff --git a/ui/strings/translations/ui_strings_zh-TW.xtb b/ui/strings/translations/ui_strings_zh-TW.xtb
index 9b13503..3e20d12 100644
--- a/ui/strings/translations/ui_strings_zh-TW.xtb
+++ b/ui/strings/translations/ui_strings_zh-TW.xtb
@@ -87,6 +87,7 @@
 <translation id="5046499563572181734">輕觸這裡</translation>
 <translation id="5076340679995252485">貼上(&amp;P)</translation>
 <translation id="5120799197269191491">搜尋鍵 + <ph name="KEY_COMBO_NAME" /> 鍵</translation>
+<translation id="5137751499640340777">開啟 Google 助理</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">顯示/隱藏三角標記</translation>
 <translation id="528468243742722775">結束</translation>
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
index 54a3129..6ab1241 100644
--- a/ui/views/controls/menu/menu_controller.cc
+++ b/ui/views/controls/menu/menu_controller.cc
@@ -1413,6 +1413,7 @@
       CloseSubmenu();
       break;
 
+#if !defined(OS_MACOSX)
     case ui::VKEY_APPS: {
       Button* hot_view = GetFirstHotTrackedView(pending_state_.item);
       if (hot_view) {
@@ -1432,6 +1433,7 @@
       }
       break;
     }
+#endif
 
 #if defined(OS_WIN)
     // On Windows, pressing Alt and F10 keys should hide the menu to match the
@@ -2177,7 +2179,7 @@
   SubmenuView* submenu = item->GetSubmenu();
   DCHECK(submenu);
 
-  gfx::Size pref = submenu->GetScrollViewContainer()->GetPreferredSize();
+  gfx::Size menu_size = submenu->GetScrollViewContainer()->GetPreferredSize();
   int x = 0;
   int y = 0;
   const MenuConfig& menu_config = MenuConfig::instance();
@@ -2187,119 +2189,117 @@
       BubbleBorder::GetBorderAndShadowInsets(
           menu_config.touchable_menu_shadow_elevation);
 
+  const gfx::Rect& monitor_bounds = state_.monitor_bounds;
+
   if (!item->GetParentMenuItem()) {
     // This is a top-level menu, position it relative to the anchor bounds.
-    const gfx::Rect& owner_bounds = pending_state_.initial_bounds;
+    const gfx::Rect& anchor_bounds = pending_state_.initial_bounds;
 
     // First the size gets reduced to the possible space.
-    if (!state_.monitor_bounds.IsEmpty()) {
-      int max_width = state_.monitor_bounds.width();
-      int max_height = state_.monitor_bounds.height();
+    if (!monitor_bounds.IsEmpty()) {
+      int max_width = monitor_bounds.width();
+      int max_height = monitor_bounds.height();
       // In case of bubbles, the maximum width is limited by the space
       // between the display corner and the target area + the tip size.
       if (state_.anchor == MENU_ANCHOR_BUBBLE_LEFT) {
-        max_width = owner_bounds.x() - state_.monitor_bounds.x() +
-                    kBubbleTipSizeLeftRight;
+        max_width =
+            anchor_bounds.x() - monitor_bounds.x() + kBubbleTipSizeLeftRight;
       } else if (state_.anchor == MENU_ANCHOR_BUBBLE_RIGHT) {
-        max_width = state_.monitor_bounds.right() - owner_bounds.right() +
+        max_width = monitor_bounds.right() - anchor_bounds.right() +
                     kBubbleTipSizeLeftRight;
       } else if (state_.anchor == MENU_ANCHOR_BUBBLE_ABOVE) {
-        max_height = owner_bounds.y() - state_.monitor_bounds.y() +
-                     kBubbleTipSizeTopBottom;
+        max_height =
+            anchor_bounds.y() - monitor_bounds.y() + kBubbleTipSizeTopBottom;
       } else if (state_.anchor == MENU_ANCHOR_BUBBLE_BELOW) {
-        max_height = state_.monitor_bounds.bottom() - owner_bounds.bottom() +
+        max_height = monitor_bounds.bottom() - anchor_bounds.bottom() +
                      kBubbleTipSizeTopBottom;
       }
       // The menu should always have a non-empty available area.
       DCHECK_GE(max_width, kBubbleTipSizeLeftRight);
       DCHECK_GE(max_height, kBubbleTipSizeTopBottom);
-      pref.set_width(std::min(pref.width(), max_width));
-      pref.set_height(std::min(pref.height(), max_height));
+      menu_size.SetToMin(gfx::Size(max_width, max_height));
     }
     // Respect the delegate's maximum width.
-    pref.set_width(
-        std::min(pref.width(), item->GetDelegate()->GetMaxWidthForMenu(item)));
+    menu_size.set_width(std::min(
+        menu_size.width(), item->GetDelegate()->GetMaxWidthForMenu(item)));
 
     if (state_.anchor == MENU_ANCHOR_BUBBLE_ABOVE ||
         state_.anchor == MENU_ANCHOR_BUBBLE_BELOW) {
       if (state_.anchor == MENU_ANCHOR_BUBBLE_ABOVE)
-        y = owner_bounds.y() - pref.height() + kBubbleTipSizeTopBottom;
+        y = anchor_bounds.y() - menu_size.height() + kBubbleTipSizeTopBottom;
       else
-        y = owner_bounds.bottom() - kBubbleTipSizeTopBottom;
+        y = anchor_bounds.bottom() - kBubbleTipSizeTopBottom;
 
-      x = owner_bounds.CenterPoint().x() - pref.width() / 2;
+      x = anchor_bounds.CenterPoint().x() - menu_size.width() / 2;
       int x_old = x;
-      if (x < state_.monitor_bounds.x())
-        x = state_.monitor_bounds.x();
-      else if (x + pref.width() > state_.monitor_bounds.right())
-        x = state_.monitor_bounds.right() - pref.width();
-      submenu->GetScrollViewContainer()->SetBubbleArrowOffset(pref.width() / 2 -
-                                                              x + x_old);
+      x = base::ClampToRange(x, monitor_bounds.x(),
+                             monitor_bounds.right() - menu_size.width());
+      submenu->GetScrollViewContainer()->SetBubbleArrowOffset(
+          menu_size.width() / 2 - x + x_old);
+    } else if (state_.anchor == MENU_ANCHOR_BUBBLE_LEFT ||
+               state_.anchor == MENU_ANCHOR_BUBBLE_RIGHT) {
+      if (state_.anchor == MENU_ANCHOR_BUBBLE_RIGHT)
+        x = anchor_bounds.right() - kBubbleTipSizeLeftRight;
+      else
+        x = anchor_bounds.x() - menu_size.width() + kBubbleTipSizeLeftRight;
+
+      y = anchor_bounds.CenterPoint().y() - menu_size.height() / 2;
+      int y_old = y;
+      y = base::ClampToRange(y, monitor_bounds.y(),
+                             monitor_bounds.bottom() - menu_size.height());
+      submenu->GetScrollViewContainer()->SetBubbleArrowOffset(
+          menu_size.height() / 2 - y + y_old);
     } else if (state_.anchor == MENU_ANCHOR_BUBBLE_TOUCHABLE_ABOVE) {
       // Align the left edges of the menu and anchor, and the bottom of the menu
       // with the top of the anchor.
-      x = owner_bounds.origin().x() - border_and_shadow_insets.left();
-      y = owner_bounds.origin().y() - pref.height() +
+      x = anchor_bounds.x() - border_and_shadow_insets.left();
+      y = anchor_bounds.y() - menu_size.height() +
           border_and_shadow_insets.bottom() -
           menu_config.touchable_anchor_offset;
       // Align the right of the container with the right of the anchor.
-      if (x + pref.width() > state_.monitor_bounds.width()) {
-        x = owner_bounds.right() - pref.width() +
+      if (x + menu_size.width() > monitor_bounds.width()) {
+        x = anchor_bounds.right() - menu_size.width() +
             border_and_shadow_insets.right();
       }
       // Align the top of the menu with the bottom of the anchor.
-      if (y < state_.monitor_bounds.y()) {
-        y = owner_bounds.bottom() - border_and_shadow_insets.top() +
+      if (y < monitor_bounds.y()) {
+        y = anchor_bounds.bottom() - border_and_shadow_insets.top() +
             menu_config.touchable_anchor_offset;
       }
     } else if (state_.anchor == MENU_ANCHOR_BUBBLE_TOUCHABLE_LEFT) {
       // Align the right of the menu with the left of the anchor, and the top of
       // the menu with the top of the anchor.
-      x = owner_bounds.origin().x() - pref.width() +
+      x = anchor_bounds.x() - menu_size.width() +
           border_and_shadow_insets.right() -
           menu_config.touchable_anchor_offset;
-      y = owner_bounds.origin().y() - border_and_shadow_insets.top();
+      y = anchor_bounds.y() - border_and_shadow_insets.top();
       // Align the left of the menu with the right of the anchor.
-      if (x < state_.monitor_bounds.x()) {
-        x = owner_bounds.right() - border_and_shadow_insets.left() +
+      if (x < monitor_bounds.x()) {
+        x = anchor_bounds.right() - border_and_shadow_insets.left() +
             menu_config.touchable_anchor_offset;
       }
       // Align the bottom of the menu to the bottom of the anchor.
-      if (y + pref.height() > state_.monitor_bounds.height()) {
-        y = owner_bounds.bottom() - pref.height() +
+      if (y + menu_size.height() > monitor_bounds.height()) {
+        y = anchor_bounds.bottom() - menu_size.height() +
             border_and_shadow_insets.bottom();
       }
     } else if (state_.anchor == MENU_ANCHOR_BUBBLE_TOUCHABLE_RIGHT) {
       // Align the left of the menu with the right of the anchor, and the top of
       // the menu with the top of the anchor.
-      x = owner_bounds.right() - border_and_shadow_insets.left() +
+      x = anchor_bounds.right() - border_and_shadow_insets.left() +
           menu_config.touchable_anchor_offset;
-      y = owner_bounds.origin().y() - border_and_shadow_insets.top();
-      if (x + pref.width() > state_.monitor_bounds.width()) {
+      y = anchor_bounds.y() - border_and_shadow_insets.top();
+      if (x + menu_size.width() > monitor_bounds.width()) {
         // Align the right of the menu with the left of the anchor.
-        x = owner_bounds.origin().x() - pref.width() +
+        x = anchor_bounds.x() - menu_size.width() +
             border_and_shadow_insets.right() -
             menu_config.touchable_anchor_offset;
       }
-      if (y + pref.height() > state_.monitor_bounds.height()) {
+      if (y + menu_size.height() > monitor_bounds.height()) {
         // Align the bottom of the menu with the bottom of the anchor.
-        y = owner_bounds.bottom() - pref.height() +
+        y = anchor_bounds.bottom() - menu_size.height() +
             border_and_shadow_insets.bottom();
       }
-    } else {
-      if (state_.anchor == MENU_ANCHOR_BUBBLE_RIGHT)
-        x = owner_bounds.right() - kBubbleTipSizeLeftRight;
-      else
-        x = owner_bounds.x() - pref.width() + kBubbleTipSizeLeftRight;
-
-      y = owner_bounds.CenterPoint().y() - pref.height() / 2;
-      int y_old = y;
-      if (y < state_.monitor_bounds.y())
-        y = state_.monitor_bounds.y();
-      else if (y + pref.height() > state_.monitor_bounds.bottom())
-        y = state_.monitor_bounds.bottom() - pref.height();
-      submenu->GetScrollViewContainer()->SetBubbleArrowOffset(
-          pref.height() / 2 - y + y_old);
     }
   } else {
     if (!use_touchable_layout_) {
@@ -2312,14 +2312,12 @@
     // If the layout is RTL, then a 'leading' menu is positioned to the left of
     // the parent menu item and not to the right.
     const bool layout_is_rtl = base::i18n::IsRTL();
-    const bool create_on_the_right = (prefer_leading && !layout_is_rtl) ||
-                                     (!prefer_leading && layout_is_rtl);
-    if (create_on_the_right) {
+    const bool create_on_right = prefer_leading != layout_is_rtl;
+    if (create_on_right) {
       x = item_bounds.right() - border_and_shadow_insets.left();
-      if (state_.monitor_bounds.width() != 0 &&
-          (x + menu_config.touchable_menu_width -
-               border_and_shadow_insets.right() >
-           state_.monitor_bounds.right())) {
+      if (monitor_bounds.width() != 0 && (x + menu_config.touchable_menu_width -
+                                              border_and_shadow_insets.right() >
+                                          monitor_bounds.right())) {
         *is_leading = prefer_leading;
         x = item_bounds.x() - menu_config.touchable_menu_width -
             border_and_shadow_insets.right();
@@ -2327,7 +2325,7 @@
     } else {
       x = item_bounds.x() - menu_config.touchable_menu_width -
           border_and_shadow_insets.right();
-      if (state_.monitor_bounds.width() != 0 && x < state_.monitor_bounds.x()) {
+      if (monitor_bounds.width() != 0 && x < monitor_bounds.x()) {
         *is_leading = !prefer_leading;
         x = item_bounds.x() + menu_config.touchable_menu_width -
             border_and_shadow_insets.left();
@@ -2335,15 +2333,12 @@
     }
     y = item_bounds.y() - border_and_shadow_insets.top() -
         menu_config.vertical_touchable_menu_item_padding;
-    if (y + pref.height() - border_and_shadow_insets.bottom() >
-        state_.monitor_bounds.bottom()) {
-      y = state_.monitor_bounds.bottom() - pref.height() +
-          border_and_shadow_insets.top();
-    }
-    if (y < state_.monitor_bounds.y())
-      y = state_.monitor_bounds.y() - border_and_shadow_insets.top();
+    y = base::ClampToRange(y,
+                           monitor_bounds.y() - border_and_shadow_insets.top(),
+                           monitor_bounds.bottom() - menu_size.height() +
+                               border_and_shadow_insets.top());
   }
-  return gfx::Rect(x, y, pref.width(), pref.height());
+  return gfx::Rect(x, y, menu_size.width(), menu_size.height());
 }
 
 // static
diff --git a/ui/views/mus/ax_remote_host.cc b/ui/views/mus/ax_remote_host.cc
index 280d14c..0affab6 100644
--- a/ui/views/mus/ax_remote_host.cc
+++ b/ui/views/mus/ax_remote_host.cc
@@ -57,7 +57,8 @@
   // Check if we're already tracking a widget.
   // TODO(jamescook): Support multiple widgets.
   if (widget_)
-    return;
+    StopMonitoringWidget();
+
   widget_ = widget;
   widget_->AddObserver(this);
 
@@ -174,9 +175,11 @@
 }
 
 void AXRemoteHost::Enable() {
-  // Extensions can send multiple enable events.
-  if (enabled_)
-    return;
+  // Don't early-exit if already enabled. AXRemoteHost can start up in the
+  // "enabled" state even if ChromeVox is on at the moment the app launches.
+  // Turning on ChromeVox later will generate another OnAutomationEnabled()
+  // call and we need to serialize the node tree again. This is similar to
+  // AutomationManagerAura's behavior. https://crbug.com/876407
   enabled_ = true;
 
   std::set<aura::Window*> roots =
@@ -188,7 +191,6 @@
     // widget.
     if (widget) {
       // TODO(jamescook): Support multiple roots.
-      DCHECK(!widget_);
       StartMonitoringWidget(widget);
     }
   }
diff --git a/ui/views/mus/ax_remote_host_unittest.cc b/ui/views/mus/ax_remote_host_unittest.cc
index 94155bb..fd18735 100644
--- a/ui/views/mus/ax_remote_host_unittest.cc
+++ b/ui/views/mus/ax_remote_host_unittest.cc
@@ -34,6 +34,14 @@
     return ptr;
   }
 
+  void ResetCounts() {
+    add_client_count_ = 0;
+    event_count_ = 0;
+    last_tree_id_ = 0;
+    last_updates_.clear();
+    last_event_ = ui::AXEvent();
+  }
+
   // ax::mojom::AXHost:
   void SetRemoteHost(ax::mojom::AXRemoteHostPtr client) override {
     ++add_client_count_;
@@ -135,6 +143,28 @@
             service.last_event_.id);
 }
 
+// Regression test for https://crbug.com/876407
+TEST_F(AXRemoteHostTest, AutomationEnabledTwice) {
+  // If ChromeVox has ever been open during the user session then the remote app
+  // can see automation enabled at startup.
+  TestAXHostService service(true /*automation_enabled*/);
+  AXRemoteHost* remote = CreateRemote(&service);
+  std::unique_ptr<Widget> widget = CreateTestWidget();
+  remote->FlushForTesting();
+
+  // Remote host sent load complete.
+  EXPECT_EQ(ax::mojom::Event::kLoadComplete, service.last_event_.event_type);
+  service.ResetCounts();
+
+  // Simulate host service asking to enable again. This happens if ChromeVox is
+  // re-enabled after the remote app is open.
+  remote->OnAutomationEnabled(true);
+  remote->FlushForTesting();
+
+  // Load complete was sent again after the second enable.
+  EXPECT_EQ(ax::mojom::Event::kLoadComplete, service.last_event_.event_type);
+}
+
 // Views can trigger accessibility events during Widget construction before the
 // AXRemoteHost starts monitoring the widget. This happens with the material
 // design focus ring on text fields. Verify we don't crash in this case.
diff --git a/webrunner/service/webrunner_main_delegate.cc b/webrunner/service/webrunner_main_delegate.cc
index dd15e25..afa691da 100644
--- a/webrunner/service/webrunner_main_delegate.cc
+++ b/webrunner/service/webrunner_main_delegate.cc
@@ -57,7 +57,6 @@
 
 WebRunnerMainDelegate::WebRunnerMainDelegate(zx::channel context_channel)
     : context_channel_(std::move(context_channel)) {
-  DCHECK(context_channel_);
   g_current_webrunner_main_delegate = this;
 }
 
@@ -86,7 +85,6 @@
 
 content::ContentBrowserClient*
 WebRunnerMainDelegate::CreateContentBrowserClient() {
-  DCHECK(context_channel_);
   DCHECK(!browser_client_);
   browser_client_ = std::make_unique<WebRunnerContentBrowserClient>(
       std::move(context_channel_));