diff --git a/DEPS b/DEPS
index d3a5014..a67cb6f 100644
--- a/DEPS
+++ b/DEPS
@@ -175,11 +175,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': '165b68ebb6ad21adae9f7a099ee0f78de93e1424',
+  'skia_revision': 'd1988219065ad7cf6e56f8c72682372ff41fe3ba',
   # 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': '96e601c0faa5778b7fce900bae351981c0556d67',
+  'v8_revision': 'c17b51288b978cbfe0fd34da7aac5575b0cf2166',
   # 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.
@@ -187,15 +187,15 @@
   # 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': '31e36a6313457e32bcb7da0a85ed5a73504dd231',
+  'angle_revision': '6fead3754375fb086cd7fa6ccef650d102dee06d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': '95b77b44a8a80b1311dc6f3bf197e931cd3d7083',
+  'swiftshader_revision': '12e857a3bca20092bf372b33187595edb8989147',
   # 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': 'dcbd802564ed5075280e390bb747736983253846',
+  'pdfium_revision': 'cd1f1eb24f50c6ea538445fde93b83d78fb1e3e0',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
@@ -238,7 +238,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': '1dea10da0ae8713f8214bcfe80d59ff3fa736ad2',
+  'catapult_revision': '85201b613e63a9e819049f3208c45315365f2433',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -246,7 +246,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': 'c41827fa748db850c83cc66dff16ea31f6f2372f',
+  'devtools_frontend_revision': '0769db92d4780901d31ffd066451f84c6cadd09e',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -306,7 +306,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'quiche_revision': '0be7fce4c6e4911295b2985175a1752b0e9ebb0a',
+  'quiche_revision': '84639a15fe700eedd3b158837c7e7e42338833f2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ios_webkit
   # and whatever else without interference from each other.
@@ -877,7 +877,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '01ed358917aa9f9f6314414ba3bb5e808bdedca2',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'ae3586b5380f0c00448c5a056528419b03ddf9b1',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1228,7 +1228,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '4cde8177699c222c0b36dde7bbd780f5436c92a3',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '82dd375715f3741bb9128f85459904a89f14f37f',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1448,7 +1448,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '84ee597cdeae08bb26e578fc66a35bcf35f633f4',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '7eab0a820f9c891f22df26bddfd8cb4435153ac5',
+    Var('webrtc_git') + '/src.git' + '@' + '06a4dd62094edc1c0271ad86a3b87278daad1c9c',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1523,7 +1523,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@e9340f3aaa1e089f216561c9b2a39dae722a1740',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6aad039a4e0ccb02cd2e45091aeac4c27a4b5682',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc
index 0029f894..9e6432f3 100644
--- a/ash/app_list/app_list_controller_impl.cc
+++ b/ash/app_list/app_list_controller_impl.cc
@@ -1483,6 +1483,14 @@
 
   // Notify chrome of visibility changes.
   if (last_visible_ != real_visibility) {
+    // When showing the launcher with the virtual keyboard enabled, one feature
+    // called "transient blur" (which means that if focus was lost but regained
+    // a few seconds later, we would show the virtual keyboard again) may show
+    // the virtual keyboard, which is not what we want. So hide the virtual
+    // keyboard explicitly when the launcher shows.
+    if (real_visibility)
+      keyboard::KeyboardUIController::Get()->HideKeyboardExplicitlyBySystem();
+
     if (client_)
       client_->OnAppListVisibilityChanged(real_visibility);
 
diff --git a/ash/app_list/app_list_controller_impl_unittest.cc b/ash/app_list/app_list_controller_impl_unittest.cc
index 39fa3ea4..eb20f615 100644
--- a/ash/app_list/app_list_controller_impl_unittest.cc
+++ b/ash/app_list/app_list_controller_impl_unittest.cc
@@ -21,6 +21,7 @@
 #include "ash/ime/ime_controller_impl.h"
 #include "ash/ime/test_ime_controller_client.h"
 #include "ash/keyboard/keyboard_controller_impl.h"
+#include "ash/keyboard/ui/test/keyboard_test_util.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/ash_features.h"
 #include "ash/public/cpp/presentation_time_recorder.h"
@@ -57,6 +58,12 @@
 
 namespace {
 
+void PressHomeButton() {
+  Shell::Get()->app_list_controller()->ToggleAppList(
+      display::Screen::GetScreen()->GetPrimaryDisplay().id(),
+      AppListShowSource::kShelfButton, base::TimeTicks());
+}
+
 bool IsTabletMode() {
   return Shell::Get()->tablet_mode_controller()->InTabletMode();
 }
@@ -131,6 +138,13 @@
     }
   }
 
+  bool IsAppListBoundsAnimationRunning() {
+    AppListView* app_list_view = GetAppListTestHelper()->GetAppListView();
+    ui::Layer* widget_layer =
+        app_list_view ? app_list_view->GetWidget()->GetLayer() : nullptr;
+    return widget_layer && !widget_layer->GetAnimator()->is_animating();
+  }
+
  private:
   DISALLOW_COPY_AND_ASSIGN(AppListControllerImplTest);
 };
@@ -428,6 +442,68 @@
       0u, message_center::MessageCenter::Get()->GetPopupNotifications().size());
 }
 
+// Verifiy that when showing the launcher, the virtual keyboard dismissed before
+// will not show automatically due to the feature called "transient blur" (see
+// https://crbug.com/1057320).
+TEST_F(AppListControllerImplTest,
+       TransientBlurIsNotTriggeredWhenShowingLauncher) {
+  // Enable animation.
+  ui::ScopedAnimationDurationScaleMode non_zero_duration(
+      ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION);
+
+  // Enable virtual keyboard.
+  KeyboardController* const keyboard_controller =
+      Shell::Get()->keyboard_controller();
+  keyboard_controller->SetEnableFlag(
+      keyboard::KeyboardEnableFlag::kCommandLineEnabled);
+
+  // Create |window1| which contains a textfield as child view.
+  std::unique_ptr<aura::Window> window1 =
+      AshTestBase::CreateTestWindow(gfx::Rect(0, 0, 200, 200));
+  auto* widget = views::Widget::GetWidgetForNativeView(window1.get());
+  std::unique_ptr<views::Textfield> text_field =
+      std::make_unique<views::Textfield>();
+
+  // Note that the bounds of |text_field| cannot be too small. Otherwise, it
+  // may not receive the gesture event.
+  text_field->SetBoundsRect(gfx::Rect(0, 0, 100, 100));
+  const auto* text_field_p = text_field.get();
+  widget->GetRootView()->AddChildView(std::move(text_field));
+  wm::ActivateWindow(window1.get());
+  widget->Show();
+
+  // Create |window2|.
+  std::unique_ptr<aura::Window> window2 =
+      AshTestBase::CreateTestWindow(gfx::Rect(200, 0, 200, 200));
+  window2->Show();
+
+  // Tap at the textfield in |window1|. The virtual keyboard should be visible.
+  const gfx::Point tap_point = text_field_p->GetBoundsInScreen().CenterPoint();
+  GetEventGenerator()->GestureTapAt(tap_point);
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(keyboard::WaitUntilShown());
+
+  // Tap at the center of |window2| to hide the virtual keyboard.
+  GetEventGenerator()->GestureTapAt(window2->GetBoundsInScreen().CenterPoint());
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(keyboard::WaitUntilHidden());
+
+  // Press the home button to show the launcher. Wait for the animation of
+  // launcher to finish. Note that the launcher does not exist before toggling
+  // the home button.
+  PressHomeButton();
+  const base::TimeDelta delta = base::TimeDelta::FromMilliseconds(200);
+  do {
+    base::RunLoop run_loop;
+    base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+        FROM_HERE, run_loop.QuitClosure(), delta);
+    run_loop.Run();
+  } while (IsAppListBoundsAnimationRunning());
+
+  // Expect that the virtual keyboard is invisible when the launcher shows.
+  EXPECT_FALSE(keyboard_controller->IsKeyboardVisible());
+}
+
 // Tests that full screen apps list opens when user touches on or near the
 // expand view arrow. (see https://crbug.com/906858)
 TEST_F(AppListControllerImplTest,
diff --git a/ash/display/display_prefs_unittest.cc b/ash/display/display_prefs_unittest.cc
index b05a4bf4..ab892c8 100644
--- a/ash/display/display_prefs_unittest.cc
+++ b/ash/display/display_prefs_unittest.cc
@@ -50,12 +50,6 @@
 namespace ash {
 
 namespace {
-const char kPrimaryIdKey[] = "primary-id";
-const char kPositionKey[] = "position";
-const char kOffsetKey[] = "offset";
-const char kPlacementDisplayIdKey[] = "placement.display_id";
-const char kPlacementParentDisplayIdKey[] = "placement.parent_display_id";
-
 bool IsRotationLocked() {
   return ash::Shell::Get()->screen_orientation_controller()->rotation_locked();
 }
@@ -514,8 +508,13 @@
   EXPECT_EQ(id2, stored_placement.parent_display_id);
   EXPECT_EQ(id2, stored_layout.primary_id);
 
-  if (true)
-    return;
+  // TODO(oshima): Make the below pass and re-enable, https://crbug.com/1063529
+#if 0
+  const char kPrimaryIdKey[] = "primary-id";
+  const char kPositionKey[] = "position";
+  const char kOffsetKey[] = "offset";
+  const char kPlacementDisplayIdKey[] = "placement.display_id";
+  const char kPlacementParentDisplayIdKey[] = "placement.parent_display_id";
 
   std::string primary_id_str;
   EXPECT_TRUE(layout_value->GetString(kPrimaryIdKey, &primary_id_str));
@@ -609,6 +608,7 @@
   EXPECT_TRUE(property->GetInteger("height", &height));
   EXPECT_EQ(500, width);
   EXPECT_EQ(400, height);
+#endif
 }
 
 TEST_F(DisplayPrefsTest, PreventStore) {
diff --git a/ash/home_screen/window_scale_animation.cc b/ash/home_screen/window_scale_animation.cc
index e0b4899..291f3d1 100644
--- a/ash/home_screen/window_scale_animation.cc
+++ b/ash/home_screen/window_scale_animation.cc
@@ -4,7 +4,6 @@
 
 #include "ash/home_screen/window_scale_animation.h"
 
-#include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/shelf_config.h"
 #include "ash/public/cpp/window_backdrop.h"
 #include "ash/public/cpp/window_properties.h"
@@ -75,16 +74,6 @@
     // Minimize the dragged window after transform animation is completed.
     window_util::MinimizeAndHideWithoutAnimation({window_});
 
-    // When showing home launcher by the gesture swipe up from shelf, one
-    // feature called "transient blur" (which means that if focus was lost but
-    // regained a few seconds later, we would show the virtual keyboard again)
-    // may show the virtual keyboard, which is not what we want. So hide the
-    // virtual keyboard explicitly.
-    keyboard::KeyboardUIController* keyboard_ui_controller =
-        keyboard::KeyboardUIController::Get();
-    if (keyboard_ui_controller)
-      keyboard_ui_controller->HideKeyboardExplicitlyBySystem();
-
     // Reset its transform to identity transform and its original backdrop mode.
     window_->layer()->SetTransform(gfx::Transform());
     window_->layer()->SetOpacity(1.f);
diff --git a/ash/keyboard/ui/keyboard_ui_controller.cc b/ash/keyboard/ui/keyboard_ui_controller.cc
index 0faf0dd..62aa3401 100644
--- a/ash/keyboard/ui/keyboard_ui_controller.cc
+++ b/ash/keyboard/ui/keyboard_ui_controller.cc
@@ -528,6 +528,21 @@
 void KeyboardUIController::HideKeyboard(HideReason reason) {
   TRACE_EVENT0("vk", "HideKeyboard");
 
+  // Decide whether regaining focus in a web-based text field should cause
+  // the keyboard to come back.
+  switch (reason) {
+    case HIDE_REASON_SYSTEM_IMPLICIT:
+      time_of_last_blur_ = base::Time::Now();
+      break;
+
+    case HIDE_REASON_SYSTEM_TEMPORARY:
+    case HIDE_REASON_SYSTEM_EXPLICIT:
+    case HIDE_REASON_USER_EXPLICIT:
+    case HIDE_REASON_USER_IMPLICIT:
+      time_of_last_blur_ = base::Time::UnixEpoch();
+      break;
+  }
+
   switch (model_.state()) {
     case KeyboardUIState::kUnknown:
     case KeyboardUIState::kInitial:
@@ -554,21 +569,6 @@
           break;
       }
 
-      // Decide whether regaining focus in a web-based text field should cause
-      // the keyboard to come back.
-      switch (reason) {
-        case HIDE_REASON_SYSTEM_IMPLICIT:
-          time_of_last_blur_ = base::Time::Now();
-          break;
-
-        case HIDE_REASON_SYSTEM_TEMPORARY:
-        case HIDE_REASON_SYSTEM_EXPLICIT:
-        case HIDE_REASON_USER_EXPLICIT:
-        case HIDE_REASON_USER_IMPLICIT:
-          time_of_last_blur_ = base::Time::UnixEpoch();
-          break;
-      }
-
       NotifyKeyboardBoundsChanging(gfx::Rect());
 
       set_keyboard_locked(false);
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index bb07649..f8c91b7f 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -597,6 +597,7 @@
 <translation id="8735953464173050365">कीबोर्ड सेटिंग दिखाएं. <ph name="KEYBOARD_NAME" /> चुना गया है</translation>
 <translation id="875593634123171288">VPN सेटिंग दिखाएं</translation>
 <translation id="8785070478575117577"><ph name="NETWORK_NAME" /> से कनेक्ट करें</translation>
+<translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">वाई-फ़ाई </translation>
 <translation id="8825863694328519386">वापस जाने के लिए, स्क्रीन के बाएं किनारे से स्वाइप करें</translation>
 <translation id="8828714802988429505">90°</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index cd42648..5d751ee 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -600,6 +600,7 @@
 <translation id="8735953464173050365">キーボード設定を表示します。<ph name="KEYBOARD_NAME" /> が選択されています</translation>
 <translation id="875593634123171288">VPN 設定を表示</translation>
 <translation id="8785070478575117577"><ph name="NETWORK_NAME" /> に接続</translation>
+<translation id="8788027118671217603"><ph name="STATE_TEXT" />。<ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
 <translation id="8825863694328519386">左側からスワイプすると前の画面に戻ります</translation>
 <translation id="8828714802988429505">90°</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 33b1402..6f689ee 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -600,6 +600,7 @@
 <translation id="8735953464173050365">కీబోర్డ్ సెట్టింగ్‌లను చూపుతుంది. <ph name="KEYBOARD_NAME" /> ఎంపిక చేయబడింది</translation>
 <translation id="875593634123171288">VPN సెట్టింగ్‌లను చూపుతుంది</translation>
 <translation id="8785070478575117577"><ph name="NETWORK_NAME" />కు కనెక్ట్ చేయండి</translation>
+<translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
 <translation id="8825863694328519386">వెనుకకు వెళ్లడానికి ఎడమ వైపు నుండి స్వైప్ చేయండి</translation>
 <translation id="8828714802988429505">90°</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index 5707d5d..35c9d949 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -599,6 +599,7 @@
 <translation id="8735953464173050365">Hiển thị các tùy chọn cài đặt bàn phím. <ph name="KEYBOARD_NAME" /> được chọn</translation>
 <translation id="875593634123171288">Hiển thị các tùy chọn cài đặt VPN</translation>
 <translation id="8785070478575117577">Kết nối với <ph name="NETWORK_NAME" /></translation>
+<translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
 <translation id="8825863694328519386">Vuốt từ trái sang để quay lại</translation>
 <translation id="8828714802988429505">90°</translation>
diff --git a/ash/system/message_center/arc/arc_notification_content_view.cc b/ash/system/message_center/arc/arc_notification_content_view.cc
index ae41eb6..bce2128 100644
--- a/ash/system/message_center/arc/arc_notification_content_view.cc
+++ b/ash/system/message_center/arc/arc_notification_content_view.cc
@@ -317,6 +317,15 @@
   return floating_control_buttons_widget_ ? &control_buttons_view_ : nullptr;
 }
 
+void ArcNotificationContentView::VisibilityChanged(View* starting_from,
+                                                   bool is_visible) {
+  // Need to explicitly set visibility for control_buttons_view_ to
+  // make sure they don't capture focus when the notification is not
+  // visible due to the message center being collapsed.
+  control_buttons_view_.SetVisible(is_visible);
+  UpdateControlButtonsVisibility();
+}
+
 void ArcNotificationContentView::UpdateControlButtonsVisibility() {
   if (!control_buttons_view_.parent())
     return;
@@ -329,9 +338,10 @@
   DCHECK(floating_control_buttons_widget_);
 
   const bool target_visibility =
-      control_buttons_view_.IsAnyButtonFocused() ||
-      (message_view_->GetMode() != message_center::MessageView::Mode::SETTING &&
-       IsMouseHovered());
+      GetVisible() && (control_buttons_view_.IsAnyButtonFocused() ||
+                       (message_view_->GetMode() !=
+                            message_center::MessageView::Mode::SETTING &&
+                        IsMouseHovered()));
 
   if (target_visibility == floating_control_buttons_widget_->IsVisible())
     return;
diff --git a/ash/system/message_center/arc/arc_notification_content_view.h b/ash/system/message_center/arc/arc_notification_content_view.h
index c9dc26fb..b76fef9 100644
--- a/ash/system/message_center/arc/arc_notification_content_view.h
+++ b/ash/system/message_center/arc/arc_notification_content_view.h
@@ -108,6 +108,7 @@
   void OnAccessibilityEvent(ax::mojom::Event event) override;
   void AddedToWidget() override;
   void RemovedFromWidget() override;
+  void VisibilityChanged(View* starting_from, bool is_visible) override;
 
   // aura::WindowObserver
   void OnWindowBoundsChanged(aura::Window* window,
diff --git a/ash/system/message_center/unified_message_center_view.cc b/ash/system/message_center/unified_message_center_view.cc
index 8332b981..348cdaf 100644
--- a/ash/system/message_center/unified_message_center_view.cc
+++ b/ash/system/message_center/unified_message_center_view.cc
@@ -302,7 +302,7 @@
 
   OnMessageCenterScrolled();
 
-  if (features::IsUnifiedMessageCenterRefactorEnabled()) {
+  if (features::IsUnifiedMessageCenterRefactorEnabled() && !collapsed()) {
     views::View* first_view = GetFirstFocusableChild();
     views::View* last_view = GetLastFocusableChild();
 
@@ -519,8 +519,10 @@
 }
 
 void UnifiedMessageCenterView::FocusOut(bool reverse) {
-  if (message_center_bubble_)
-    message_center_bubble_->FocusOut(reverse);
+  if (message_center_bubble_ && message_center_bubble_->FocusOut(reverse)) {
+    GetFocusManager()->ClearFocus();
+    GetFocusManager()->SetStoredFocusView(nullptr);
+  }
 }
 
 void UnifiedMessageCenterView::FocusEntered(bool reverse) {
@@ -542,14 +544,24 @@
 }
 
 views::View* UnifiedMessageCenterView::GetLastFocusableChild() {
-  views::FocusTraversable* dummy_focus_traversable;
-  views::View* dummy_focus_traversable_view;
-  return focus_search_->FindNextFocusableView(
+  views::FocusTraversable* focus_traversable = nullptr;
+  views::View* dummy_focus_traversable_view = nullptr;
+  views::View* last_view = focus_search_->FindNextFocusableView(
       nullptr, views::FocusSearch::SearchDirection::kBackwards,
       views::FocusSearch::TraversalDirection::kDown,
       views::FocusSearch::StartingViewPolicy::kSkipStartingView,
       views::FocusSearch::AnchoredDialogPolicy::kCanGoIntoAnchoredDialog,
-      &dummy_focus_traversable, &dummy_focus_traversable_view);
+      &focus_traversable, &dummy_focus_traversable_view);
+
+  if (last_view || !focus_traversable)
+    return last_view;
+
+  return focus_traversable->GetFocusSearch()->FindNextFocusableView(
+      nullptr, views::FocusSearch::SearchDirection::kBackwards,
+      views::FocusSearch::TraversalDirection::kDown,
+      views::FocusSearch::StartingViewPolicy::kSkipStartingView,
+      views::FocusSearch::AnchoredDialogPolicy::kCanGoIntoAnchoredDialog,
+      &focus_traversable, &dummy_focus_traversable_view);
 }
 
 }  // namespace ash
diff --git a/ash/system/network/auto_connect_notifier.cc b/ash/system/network/auto_connect_notifier.cc
index 7cebbbb..5f1859b 100644
--- a/ash/system/network/auto_connect_notifier.cc
+++ b/ash/system/network/auto_connect_notifier.cc
@@ -146,7 +146,7 @@
 
 void AutoConnectNotifier::DisplayNotification(
     const chromeos::NetworkState* network) {
-  NET_LOG(EVENT) << "Show AutoConnect Notification for: " << network->name();
+  NET_LOG(EVENT) << "Show AutoConnect Notification for: " << NetworkId(network);
   auto notification = CreateSystemNotification(
       message_center::NotificationType::NOTIFICATION_TYPE_SIMPLE,
       kAutoConnectNotificationId,
diff --git a/ash/wm/desks/desks_restore_util.cc b/ash/wm/desks/desks_restore_util.cc
index 8e6a23c..8ccce9fc 100644
--- a/ash/wm/desks/desks_restore_util.cc
+++ b/ash/wm/desks/desks_restore_util.cc
@@ -55,7 +55,7 @@
 
   // If we don't have any restore data, or the list is corrupt for some reason,
   // abort.
-  if (!restore_size || restore_size >= desks_util::kMaxNumberOfDesks)
+  if (!restore_size || restore_size > desks_util::kMaxNumberOfDesks)
     return;
 
   auto* desks_controller = DesksController::Get();
diff --git a/ash/wm/tablet_mode/tablet_mode_controller.cc b/ash/wm/tablet_mode/tablet_mode_controller.cc
index 9ef797b58..e0d479f 100644
--- a/ash/wm/tablet_mode/tablet_mode_controller.cc
+++ b/ash/wm/tablet_mode/tablet_mode_controller.cc
@@ -426,6 +426,7 @@
                              /*delete_screenshot=*/true));
   animating_layer_ = window->layer();
   animating_layer_->GetAnimator()->AddObserver(this);
+  animating_layer_->AddObserver(this);
 }
 
 void TabletModeController::StopObservingAnimation(bool record_stats,
@@ -434,9 +435,17 @@
 
   ResetDestroyObserver();
 
-  if (animating_layer_)
-    animating_layer_->GetAnimator()->RemoveObserver(this);
-  animating_layer_ = nullptr;
+  if (animating_layer_) {
+    animating_layer_->GetAnimator()->StopAnimating();
+
+    // If the observed layer is part of a cross fade animation, stopping the
+    // animation will end up destroying the layer.
+    if (animating_layer_) {
+      animating_layer_->RemoveObserver(this);
+      animating_layer_->GetAnimator()->RemoveObserver(this);
+      animating_layer_ = nullptr;
+    }
+  }
 
   if (record_stats && fps_counter_)
     fps_counter_->LogUma();
@@ -695,6 +704,13 @@
   StopObservingAnimation(/*record_stats=*/false, /*delete_screenshot=*/true);
 }
 
+void TabletModeController::LayerDestroyed(ui::Layer* layer) {
+  DCHECK_EQ(animating_layer_, layer);
+  animating_layer_->RemoveObserver(this);
+  animating_layer_->GetAnimator()->RemoveObserver(this);
+  animating_layer_ = nullptr;
+}
+
 void TabletModeController::SetEnabledForDev(bool enabled) {
   tablet_mode_behavior_ = enabled ? kOnForDev : kDefault;
   force_notify_events_blocking_changed_ = true;
diff --git a/ash/wm/tablet_mode/tablet_mode_controller.h b/ash/wm/tablet_mode/tablet_mode_controller.h
index f11640b..7973d45 100644
--- a/ash/wm/tablet_mode/tablet_mode_controller.h
+++ b/ash/wm/tablet_mode/tablet_mode_controller.h
@@ -25,6 +25,7 @@
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "ui/aura/window_occlusion_tracker.h"
 #include "ui/compositor/layer_animation_observer.h"
+#include "ui/compositor/layer_observer.h"
 #include "ui/compositor/layer_tree_owner.h"
 #include "ui/events/devices/input_device_event_observer.h"
 #include "ui/gfx/geometry/vector3d_f.h"
@@ -71,7 +72,8 @@
       public WindowTreeHostManager::Observer,
       public SessionObserver,
       public ui::InputDeviceEventObserver,
-      public ui::LayerAnimationObserver {
+      public ui::LayerAnimationObserver,
+      public ui::LayerObserver {
  public:
   // Enable or disable using a screenshot for testing as it makes the
   // initialization flow async, which makes most tests harder to write.
@@ -158,6 +160,9 @@
   void OnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) override;
   void OnLayerAnimationScheduled(ui::LayerAnimationSequence* sequence) override;
 
+  // ui::LayerObserver:
+  void LayerDestroyed(ui::Layer* layer) override;
+
   void increment_app_window_drag_count() { ++app_window_drag_count_; }
   void increment_app_window_drag_in_splitview_count() {
     ++app_window_drag_in_splitview_count_;
@@ -447,6 +452,8 @@
   // everything in the screen rotation container except the top window. It helps
   // with animation performance because it fully occludes all windows except the
   // animating window for the duration of the animation.
+  // TODO(sammiequon): See if we can move screenshot and tablet mode transition
+  // animation related code into a separate class/file.
   std::unique_ptr<ui::Layer> screenshot_layer_;
 
   base::ObserverList<TabletModeObserver>::Unchecked tablet_mode_observers_;
diff --git a/base/trace_event/memory_infra_background_allowlist.cc b/base/trace_event/memory_infra_background_allowlist.cc
index 89cdde01..f9a894e 100644
--- a/base/trace_event/memory_infra_background_allowlist.cc
+++ b/base/trace_event/memory_infra_background_allowlist.cc
@@ -31,6 +31,7 @@
     "DiscardableSharedMemoryManager",
     "DOMStorage",
     "DownloadService",
+    "ExtensionFunctions",
     "gpu::BufferManager",
     "gpu::RenderbufferManager",
     "gpu::ServiceDiscardableManager",
@@ -98,6 +99,7 @@
     "discardable",
     "discardable/madv_free_allocated",
     "discardable/child_0x?",
+    "extensions/functions",
     "extensions/value_store/Extensions.Database.Open.Settings/0x?",
     "extensions/value_store/Extensions.Database.Open.Rules/0x?",
     "extensions/value_store/Extensions.Database.Open.State/0x?",
diff --git a/build/android/gyp/lint.py b/build/android/gyp/lint.py
index 1cb75351..cfbf47e 100755
--- a/build/android/gyp/lint.py
+++ b/build/android/gyp/lint.py
@@ -24,25 +24,25 @@
 _LINT_MD_URL = 'https://chromium.googlesource.com/chromium/src/+/master/build/android/docs/lint.md' # pylint: disable=line-too-long
 
 
-def _OnStaleMd5(lint_path,
-                config_path,
-                processed_config_path,
-                manifest_path,
-                result_path,
-                product_dir,
-                sources,
-                jar_path,
-                cache_dir,
-                android_sdk_version,
-                srcjars,
-                min_sdk_version,
-                manifest_package,
-                resource_sources,
-                disable=None,
-                classpath=None,
-                can_fail_build=False,
-                include_unexpected=False,
-                silent=False):
+def _RunLint(lint_path,
+             config_path,
+             processed_config_path,
+             manifest_path,
+             result_path,
+             product_dir,
+             sources,
+             jar_path,
+             cache_dir,
+             android_sdk_version,
+             srcjars,
+             min_sdk_version,
+             manifest_package,
+             resource_sources,
+             disable=None,
+             classpath=None,
+             can_fail_build=False,
+             include_unexpected=False,
+             silent=False):
 
   def _RebasePath(path):
     """Returns relative path to top-level src dir.
@@ -354,6 +354,7 @@
                       help='Directories containing java files.')
   parser.add_argument('--srcjars',
                       help='GN list of included srcjars.')
+  parser.add_argument('--stamp', help='Path to stamp upon success.')
   parser.add_argument(
       '--min-sdk-version',
       required=True,
@@ -421,26 +422,34 @@
     disable = build_utils.ParseGnList(args.disable)
     input_strings.extend(disable)
 
-  output_paths = [args.result_path, args.processed_config_path]
+  output_paths = [args.stamp]
+
+  def on_stale_md5():
+    _RunLint(
+        args.lint_path,
+        args.config_path,
+        args.processed_config_path,
+        args.manifest_path,
+        args.result_path,
+        args.product_dir,
+        sources,
+        args.jar_path,
+        args.cache_dir,
+        args.android_sdk_version,
+        args.srcjars,
+        args.min_sdk_version,
+        args.manifest_package,
+        resource_sources,
+        disable=disable,
+        classpath=classpath,
+        can_fail_build=args.can_fail_build,
+        include_unexpected=args.include_unexpected_failures,
+        silent=args.silent)
+
+    build_utils.Touch(args.stamp)
 
   md5_check.CallAndWriteDepfileIfStale(
-      lambda: _OnStaleMd5(args.lint_path,
-                          args.config_path,
-                          args.processed_config_path,
-                          args.manifest_path, args.result_path,
-                          args.product_dir, sources,
-                          args.jar_path,
-                          args.cache_dir,
-                          args.android_sdk_version,
-                          args.srcjars,
-                          args.min_sdk_version,
-                          args.manifest_package,
-                          resource_sources,
-                          disable=disable,
-                          classpath=classpath,
-                          can_fail_build=args.can_fail_build,
-                          include_unexpected=args.include_unexpected_failures,
-                          silent=args.silent),
+      on_stale_md5,
       args,
       input_paths=input_paths,
       input_strings=input_strings,
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index cf6d110..582b7a1 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -837,10 +837,6 @@
   android_sdk_jar = "$android_sdk/android.jar"
 
   template("android_lint") {
-    _min_sdk_version = 19
-    if (defined(invoker.min_sdk_version)) {
-      _min_sdk_version = invoker.min_sdk_version
-    }
     action_with_pydeps(target_name) {
       forward_variables_from(invoker,
                              [
@@ -862,10 +858,15 @@
         lint_suppressions_file = "//build/android/lint/suppressions.xml"
       }
 
+      _min_sdk_version = 19
+      if (defined(invoker.min_sdk_version)) {
+        _min_sdk_version = invoker.min_sdk_version
+      }
       _lint_path = "$lint_android_sdk_root/tools-lint/bin/lint"
       _cache_dir = "$root_build_dir/android_lint_cache"
-      _result_path = "$target_gen_dir/$target_name/result.xml"
-      _config_path = "$target_gen_dir/$target_name/config.xml"
+      _result_path = "$target_out_dir/$target_name/result.xml"
+      _config_path = "$target_out_dir/$target_name/config.xml"
+      _stamp_path = "$target_out_dir/$target_name/build.stamp"
       _suppressions_file = lint_suppressions_file
       _platform_xml_path =
           "${android_sdk_root}/platform-tools/api/api-versions.xml"
@@ -877,10 +878,11 @@
         _suppressions_file,
       ]
 
-      outputs = [
-        _result_path,
-        _config_path,
-      ]
+      # _config_path and _stamp_path are also outputs, but do not list them
+      # in order to avoid them being uploaded to swarming as part of isolates.
+      # This happens as a side-effect of lint targets being listed as
+      # "data_deps" in order to have them run concurrently with other targets.
+      outputs = [ _stamp_path ]
 
       args = [
         "--lint-path",
@@ -899,6 +901,8 @@
         rebase_path(_config_path, root_build_dir),
         "--result-path",
         rebase_path(_result_path, root_build_dir),
+        "--stamp",
+        rebase_path(_stamp_path, root_build_dir),
         "--include-unexpected-failures",
         "--min-sdk-version=$_min_sdk_version",
       ]
@@ -3378,14 +3382,15 @@
         not_needed(invoker, [ "manifest_package" ])
       }
     }
-    if (defined(invoker.enable_errorprone)) {
-      _enable_errorprone = invoker.enable_errorprone
-    } else {
-      _enable_errorprone =
-          _java_files != [] && _chromium_code && use_errorprone_java_compiler
-    }
 
     if (_has_sources) {
+      if (defined(invoker.enable_errorprone)) {
+        _enable_errorprone = invoker.enable_errorprone
+      } else {
+        _enable_errorprone =
+            _java_files != [] && _chromium_code && use_errorprone_java_compiler
+      }
+
       _type = invoker.type
       template("compile_java_helper") {
         compile_java(target_name) {
@@ -3431,8 +3436,7 @@
         output_jar_path = _javac_jar_path
       }
       if (_enable_errorprone) {
-        _compile_java_errorprone_target =
-            "${_main_target_name}__compile_java_errorprone"
+        _compile_java_errorprone_target = "${_main_target_name}__errorprone"
         compile_java_helper(_compile_java_errorprone_target) {
           forward_variables_from(invoker, _compile_java_forward_variables)
           enable_errorprone = true
@@ -3442,7 +3446,7 @@
             }
             javac_args += invoker.errorprone_args
           }
-          output_jar_path = _javac_jar_path + ".errorprone_stamp"
+          output_jar_path = "$target_out_dir/$target_name.errorprone.stamp"
         }
         _analysis_public_deps += [ ":$_compile_java_errorprone_target" ]
       }
@@ -3479,15 +3483,6 @@
         _analysis_public_deps += [ ":$_android_lint_target" ]
       }
 
-      if (_analysis_public_deps != []) {
-        # Use an intermediate group() rather as the data_deps target in order to
-        # avoid errorprone or lint artifacts showing up as runtime_deps (while
-        # still having them run in parallel to other targets).
-        group("${_main_target_name}__analysis") {
-          public_deps = _analysis_public_deps
-        }
-      }
-
       # Update this after lint so that lint does not depend on javac.
       _accumulated_public_deps += [ ":$_compile_java_target" ]
     }  # _has_sources
@@ -3608,11 +3603,11 @@
           # as inputs to other targets.
           public_deps = _accumulated_public_deps
 
-          if (_lint_enabled || _enable_errorprone) {
+          if (defined(_analysis_public_deps)) {
             if (!defined(data_deps)) {
               data_deps = []
             }
-            data_deps += [ ":${_main_target_name}__analysis" ]
+            data_deps += _analysis_public_deps
           }
         }
       }
@@ -3649,11 +3644,11 @@
                                  "visibility",
                                ])
         public_deps = _accumulated_public_deps
-        if (_lint_enabled || _enable_errorprone) {
+        if (defined(_analysis_public_deps)) {
           if (!defined(data_deps)) {
             data_deps = []
           }
-          data_deps += [ ":${_main_target_name}__analysis" ]
+          data_deps += _analysis_public_deps
         }
       }
     }
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 6f096b95..5fa34150 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -1591,8 +1591,10 @@
 
     # TODO(thakis): Enable this more often, https://crbug.com/346399
     # use_libfuzzer: https://crbug.com/1063180
+    # cros/arm has warnings in nacl code.
     if (!is_nacl && !use_libfuzzer &&
-        (target_os == "fuchsia" || target_os == "linux")) {
+        ((target_os == "chromeos" && target_cpu != "arm") ||
+         target_os == "fuchsia" || target_os == "linux")) {
       cflags += [ "-Wunreachable-code" ]
     }
 
diff --git a/cc/paint/paint_image.h b/cc/paint/paint_image.h
index e2f2fdd..3e13b4e 100644
--- a/cc/paint/paint_image.h
+++ b/cc/paint/paint_image.h
@@ -297,6 +297,8 @@
     return paint_worklet_input_;
   }
 
+  bool IsOpaque() const { return GetSkImage() && GetSkImage()->isOpaque(); }
+
   std::string ToString() const;
 
  private:
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
index 82581645..a37393a 100644
--- a/chrome/android/chrome_test_java_sources.gni
+++ b/chrome/android/chrome_test_java_sources.gni
@@ -428,6 +428,7 @@
   "javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java",
   "javatests/src/org/chromium/chrome/browser/settings/homepage/HomepageSettingsFragmentTest.java",
   "javatests/src/org/chromium/chrome/browser/settings/homepage/HomepageSettingsFragmentWithEditorTest.java",
+  "javatests/src/org/chromium/chrome/browser/settings/language/LanguageSettingsTest.java",
   "javatests/src/org/chromium/chrome/browser/shape_detection/ShapeDetectionTest.java",
   "javatests/src/org/chromium/chrome/browser/share/LensUtilsTest.java",
   "javatests/src/org/chromium/chrome/browser/share/ShareButtonControllerTest.java",
diff --git a/chrome/android/features/cablev2_authenticator/internal/native/cablev2_authenticator_android.cc b/chrome/android/features/cablev2_authenticator/internal/native/cablev2_authenticator_android.cc
index b25a7e6..da0075ab 100644
--- a/chrome/android/features/cablev2_authenticator/internal/native/cablev2_authenticator_android.cc
+++ b/chrome/android/features/cablev2_authenticator/internal/native/cablev2_authenticator_android.cc
@@ -175,6 +175,8 @@
   base::Optional<device::cablev2::NonceAndEID> qr_advert;
   // qr_psk_gen_key contains the PSK generating key derived from the QR secret.
   base::Optional<device::CablePskGeneratorKey> qr_psk_gen_key;
+  // peer_identity is the public-key of the desktop from the scanned QR code.
+  base::Optional<bssl::UniquePtr<EC_POINT>> qr_peer_identity;
 };
 
 // Client represents the state of a single BLE peer.
@@ -273,15 +275,16 @@
           handshake_result = device::cablev2::RespondToHandshake(
               auth_state_->pairing_data.v2->psk_gen_key,
               auth_state_->pairing_advert, auth_state_->identity_key.get(),
-              /*pairing_data=*/nullptr, message->second, &response);
+              /*peer_identity=*/nullptr, /*pairing_data=*/nullptr,
+              message->second, &response);
         } else if (auth_state_->qr_advert.has_value() &&
                    requested_eid == auth_state_->qr_advert->second) {
           // TODO: QR handshakes currently always send pairing data, but it's
           // optional in the protocol.
           handshake_result = device::cablev2::RespondToHandshake(
               *auth_state_->qr_psk_gen_key, *auth_state_->qr_advert,
-              /*identity=*/nullptr, &auth_state_->pairing_data, message->second,
-              &response);
+              /*identity=*/nullptr, auth_state_->qr_peer_identity->get(),
+              &auth_state_->pairing_data, message->second, &response);
         } else {
           FIDO_LOG(ERROR) << "Peer is connecting to unknown EID "
                           << base::HexEncode(requested_eid);
@@ -487,21 +490,36 @@
 
     base::StringPiece qr_url_base64(qr_url);
     qr_url_base64 = qr_url_base64.substr(sizeof(kPrefix) - 1);
-    std::string qr_secret_str;
+    std::string qr_data_str;
     if (!base::Base64UrlDecode(qr_url_base64,
                                base::Base64UrlDecodePolicy::DISALLOW_PADDING,
-                               &qr_secret_str) ||
-        qr_secret_str.size() != device::kCableQRSecretSize) {
+                               &qr_data_str) ||
+        qr_data_str.size() != device::kCableQRDataSize) {
       FIDO_LOG(ERROR) << "QR decoding failed: " << qr_url;
       return;
     }
 
-    uint8_t qr_secret[device::kCableQRSecretSize];
-    memcpy(qr_secret, qr_secret_str.data(), sizeof(qr_secret));
-    const device::CableDiscoveryData discovery_data(qr_secret);
-    auth_state_.qr_psk_gen_key.emplace(discovery_data.v2->psk_gen_key);
+    const base::Optional<device::CableDiscoveryData> discovery_data =
+        device::CableDiscoveryData::FromQRData(
+            base::span<const uint8_t, device::kCableQRDataSize>(
+                reinterpret_cast<const uint8_t*>(qr_data_str.data()),
+                qr_data_str.size()));
+    if (!discovery_data) {
+      FIDO_LOG(ERROR) << "Failed to decode QR data from: " << qr_url;
+      return;
+    }
 
-    StartAdvertising(discovery_data.v2->eid_gen_key,
+    auth_state_.qr_psk_gen_key.emplace(discovery_data->v2->psk_gen_key);
+
+    bssl::UniquePtr<EC_GROUP> p256(
+        EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1));
+    auth_state_.qr_peer_identity.emplace(EC_POINT_new(p256.get()));
+    CHECK(EC_POINT_oct2point(p256.get(), auth_state_.qr_peer_identity->get(),
+                             discovery_data->v2->peer_identity->data(),
+                             discovery_data->v2->peer_identity->size(),
+                             /*ctx=*/nullptr));
+
+    StartAdvertising(discovery_data->v2->eid_gen_key,
                      &auth_state_.qr_advert.emplace());
   }
 
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
index a050672..ea92043 100644
--- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
+++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
@@ -20,6 +20,7 @@
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.core.AllOf.allOf;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -37,6 +38,7 @@
 import static org.chromium.content_public.browser.test.util.CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL;
 import static org.chromium.content_public.browser.test.util.CriteriaHelper.DEFAULT_POLLING_INTERVAL;
 
+import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
@@ -57,6 +59,7 @@
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Rule;
@@ -87,6 +90,7 @@
 import org.chromium.chrome.browser.tasks.tab_management.TabSuggestionMessageService;
 import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher;
 import org.chromium.chrome.browser.tasks.tab_management.TabSwitcherCoordinator;
+import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
 import org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper;
 import org.chromium.chrome.tab_ui.R;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
@@ -124,8 +128,9 @@
 /** Tests for the {@link StartSurfaceLayout} */
 @RunWith(ChromeJUnit4ClassRunner.class)
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
-        "enable-features=" + ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID + "<Study",
         "force-fieldtrials=Study/Group"})
+@Features.EnableFeatures({ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID + "<Study",
+        ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study"})
 @Restriction(
         {UiRestriction.RESTRICTION_TYPE_PHONE, Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE})
 public class StartSurfaceLayoutTest {
@@ -186,6 +191,12 @@
         assertEquals(0, mTabListDelegate.getBitmapFetchCountForTesting());
     }
 
+    @After
+    public void tearDown() {
+        mActivityTestRule.getActivity().setRequestedOrientation(
+                ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
+    }
+
     @Test
     @MediumTest
     @Feature({"RenderTest"})
@@ -260,6 +271,7 @@
     @CommandLineFlags.Add({BASE_PARAMS})
     public void testRenderGrid_3NativeTabs() throws InterruptedException, IOException {
         // clang-format on
+        assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         // Prepare some incognito native tabs and enter tab switcher.
         // NTP in incognito mode is chosen for its consistency in look, and we don't have to mock
         // away the MV tiles, login promo, feed, etc.
@@ -276,10 +288,11 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
+    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @CommandLineFlags.Add({BASE_PARAMS})
     public void testTabToGridFromLiveTab() throws InterruptedException {
         // clang-format on
+        assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         assertEquals(0, mTabListDelegate.getSoftCleanupDelayForTesting());
         assertEquals(0, mTabListDelegate.getCleanupDelayForTesting());
 
@@ -305,10 +318,11 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
+    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @CommandLineFlags.Add({BASE_PARAMS + "/soft-cleanup-delay/2000/cleanup-delay/10000"})
     public void testTabToGridFromLiveTabWarm() throws InterruptedException {
         // clang-format on
+        assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         assertEquals(2000, mTabListDelegate.getSoftCleanupDelayForTesting());
         assertEquals(10000, mTabListDelegate.getCleanupDelayForTesting());
 
@@ -324,6 +338,7 @@
     @MinAndroidSdkLevel(Build.VERSION_CODES.M) // TODO(crbug.com/997065#c8): remove SDK restriction.
     public void testTabToGridFromLiveTabWarmAnimation() throws InterruptedException {
         // clang-format on
+        assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         prepareTabs(2, 0, NTP_URL);
         testTabToGrid(mUrl);
     }
@@ -331,10 +346,11 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
+    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @CommandLineFlags.Add({BASE_PARAMS + "/cleanup-delay/10000"})
     public void testTabToGridFromLiveTabSoft() throws InterruptedException {
         // clang-format on
+        assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         assertEquals(0, mTabListDelegate.getSoftCleanupDelayForTesting());
         assertEquals(10000, mTabListDelegate.getCleanupDelayForTesting());
 
@@ -350,6 +366,7 @@
     @MinAndroidSdkLevel(Build.VERSION_CODES.M) // TODO(crbug.com/997065#c8): remove SDK restriction.
     public void testTabToGridFromLiveTabSoftAnimation() throws InterruptedException {
         // clang-format on
+        assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         prepareTabs(2, 0, NTP_URL);
         testTabToGrid(mUrl);
     }
@@ -404,8 +421,9 @@
 
     @Test
     @MediumTest
-    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
+    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     public void testGridToTabToCurrentLive() throws InterruptedException {
+        assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         prepareTabs(1, 0, mUrl);
         testGridToTab(false, false);
     }
@@ -426,8 +444,9 @@
      */
     @Test
     @MediumTest
-    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
+    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     public void testGridToTabToCurrentLiveDetached() throws Exception {
+        assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         // This works on emulators but not on real devices. See crbug.com/986047.
         if (!isEmulator()) return;
 
@@ -468,14 +487,16 @@
     @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
     @DisabledTest(message = "crbug.com/993201 This test fails deterministically on Nexus 5X")
     public void testGridToTabToCurrentLiveWithAnimation() throws InterruptedException {
+        assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         prepareTabs(1, 0, mUrl);
         testGridToTab(false, false);
     }
 
     @Test
     @MediumTest
-    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
+    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     public void testGridToTabToOtherLive() throws InterruptedException {
+        assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         prepareTabs(2, 0, mUrl);
         testGridToTab(true, false);
     }
@@ -486,14 +507,16 @@
     @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
     @DisabledTest(message = "crbug.com/993201 This test fails deterministically on Nexus 5X")
     public void testGridToTabToOtherLiveWithAnimation() throws InterruptedException {
+        assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         prepareTabs(2, 0, mUrl);
         testGridToTab(true, false);
     }
 
     @Test
     @MediumTest
-    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
+    @Features.DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     public void testGridToTabToOtherFrozen() throws InterruptedException {
+        assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
         prepareTabs(2, 0, mUrl);
         testGridToTab(true, true);
     }
@@ -976,9 +999,6 @@
 
         onView(withId(R.id.tab_list_view))
                 .check(MessageCardWidthAssertion.checkMessageItemSpanSize(3, 3));
-
-        // Reset device orientation.
-        rotateDeviceToOrientation(cta, Configuration.ORIENTATION_PORTRAIT);
     }
 
     private static class MessageCardWidthAssertion implements ViewAssertion {
@@ -1020,7 +1040,7 @@
     @MediumTest
     @Feature("NewTabTile")
     // clang-format off
-    @Features.DisableFeatures({ChromeFeatureList.TAB_TO_GTS_ANIMATION,
+    @Features.DisableFeatures({ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study",
             ChromeFeatureList.CLOSE_TAB_SUGGESTIONS})
     @CommandLineFlags.Add({BASE_PARAMS + "/tab_grid_layout_android_new_tab_tile/false"
             + "/tab_grid_layout_android_new_tab/false"})
@@ -1042,7 +1062,6 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.EnableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @CommandLineFlags.Add({BASE_PARAMS})
     public void testThumbnailAspectRatio_default() throws Exception {
         // clang-format on
@@ -1055,7 +1074,6 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.EnableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @CommandLineFlags.Add({BASE_PARAMS + "/thumbnail_aspect_ratio/0.75"})
     public void testThumbnailAspectRatio_point75() throws Exception {
         prepareTabs(2, 0, mUrl);
@@ -1075,7 +1093,6 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.EnableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @CommandLineFlags.Add({BASE_PARAMS + "/thumbnail_aspect_ratio/2.0/allow_to_refetch/true"})
     public void testThumbnailAspectRatio_fromTwoToPoint75() throws Exception {
         // clang-format on
@@ -1102,7 +1119,6 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.EnableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @CommandLineFlags.Add({BASE_PARAMS})
     public void testThumbnailFetchingResult_defaultAspectRatio() throws Exception {
         // clang-format on
@@ -1180,7 +1196,6 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.EnableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @CommandLineFlags.Add({BASE_PARAMS + "/thumbnail_aspect_ratio/2.0/allow_to_refetch/true"})
     public void testThumbnailFetchingResult_changingAspectRatio() throws Exception {
         // clang-format on
@@ -1264,7 +1279,6 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.EnableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @DisableIf.Build(sdk_is_less_than = Build.VERSION_CODES.M,
         message = "https://crbug.com/1023833")
     @CommandLineFlags.Add({BASE_PARAMS})
@@ -1279,7 +1293,6 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.EnableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @DisableIf.Build(sdk_is_less_than = Build.VERSION_CODES.M,
         message = "https://crbug.com/1023833")
     @CommandLineFlags.Add({BASE_PARAMS + "/thumbnail_aspect_ratio/0.75"})
@@ -1294,7 +1307,6 @@
     @Test
     @MediumTest
     // clang-format off
-    @Features.EnableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @DisableIf.Build(sdk_is_less_than = Build.VERSION_CODES.M,
         message = "https://crbug.com/1023833")
     @CommandLineFlags.Add({BASE_PARAMS + "/thumbnail_aspect_ratio/0.75"})
@@ -1309,7 +1321,7 @@
     @MediumTest
     @Feature("NewTabVariation")
     // clang-format off
-    @Features.DisableFeatures({ChromeFeatureList.TAB_TO_GTS_ANIMATION,
+    @Features.DisableFeatures({ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study",
             ChromeFeatureList.CLOSE_TAB_SUGGESTIONS})
     @CommandLineFlags.Add({BASE_PARAMS + "/tab_grid_layout_android_new_tab/NewTabVariation"})
     public void testNewTabVariation() throws InterruptedException {
@@ -1478,6 +1490,7 @@
     @MediumTest
     @CommandLineFlags.Add({BASE_PARAMS + "/enable_search_term_chip/true"})
     public void testSearchTermChip_noChip() throws InterruptedException {
+        assertTrue(TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.getValue());
         prepareTabs(1, 0, mUrl);
         enterGTSWithThumbnailChecking();
 
@@ -1489,6 +1502,7 @@
     @MediumTest
     @CommandLineFlags.Add({BASE_PARAMS + "/enable_search_term_chip/true"})
     public void testSearchTermChip_withChip() throws InterruptedException {
+        assertTrue(TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.getValue());
         // Make sure we support RTL and CJKV languages.
         String searchTermWithSpecialCodePoints = "a\n ئۇيغۇرچە\u200E漢字";
         // Special code points like new line (\n) and left-to-right marker (‎‎‎\u200E) should
@@ -1560,9 +1574,13 @@
 
     @Test
     @MediumTest
-    @CommandLineFlags.
-    Add({BASE_PARAMS + "/enable_search_term_chip/true/enable_search_term_chip_adaptive_icon/true"})
+    // clang-format off
+    @CommandLineFlags.Add({BASE_PARAMS +
+            "/enable_search_term_chip/true/enable_search_term_chip_adaptive_icon/true"})
     public void testSearchTermChip_adaptiveIcon() throws InterruptedException {
+        // clang-format on
+        assertTrue(TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.getValue());
+        assertTrue(TabUiFeatureUtilities.ENABLE_SEARCH_CHIP_ADAPTIVE.getValue());
         String searchTerm = "hello world";
 
         // Do search, and verify the chip is still not shown.
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
index 3a28abc..62e8be1 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
@@ -127,7 +127,7 @@
                         (int) res.getDimension(R.dimen.tab_list_selected_inset));
                 view.setForeground(model.get(TabProperties.IS_SELECTED) ? drawable : null);
             }
-            if (TabUiFeatureUtilities.isSearchTermChipEnabled()) {
+            if (TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.getValue()) {
                 ChipView searchButton = (ChipView) view.fastFindViewById(R.id.search_button);
                 searchButton.getPrimaryTextView().setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
                 searchButton.getPrimaryTextView().setEllipsize(TextUtils.TruncateAt.END);
@@ -194,8 +194,7 @@
             updateColor(view, model.get(TabProperties.IS_INCOGNITO), TabProperties.UiType.CLOSABLE);
         } else if (TabProperties.ACCESSIBILITY_DELEGATE == propertyKey) {
             view.setAccessibilityDelegate(model.get(TabProperties.ACCESSIBILITY_DELEGATE));
-        } else if (TabUiFeatureUtilities.isSearchTermChipEnabled()
-                && TabProperties.SEARCH_QUERY == propertyKey) {
+        } else if (TabProperties.SEARCH_QUERY == propertyKey) {
             String query = model.get(TabProperties.SEARCH_QUERY);
             ChipView searchButton = (ChipView) view.fastFindViewById(R.id.search_button);
             if (TextUtils.isEmpty(query)) {
@@ -204,8 +203,7 @@
                 searchButton.setVisibility(View.VISIBLE);
                 searchButton.getPrimaryTextView().setText(query);
             }
-        } else if (TabUiFeatureUtilities.isSearchTermChipEnabled()
-                && TabProperties.SEARCH_LISTENER == propertyKey) {
+        } else if (TabProperties.SEARCH_LISTENER == propertyKey) {
             TabListMediator.TabActionListener listener = model.get(TabProperties.SEARCH_LISTENER);
             ChipView searchButton = (ChipView) view.fastFindViewById(R.id.search_button);
             if (listener == null) {
@@ -216,8 +214,7 @@
                 int tabId = model.get(TabProperties.TAB_ID);
                 listener.run(tabId);
             });
-        } else if (TabUiFeatureUtilities.isSearchTermChipEnabled()
-                && TabProperties.SEARCH_CHIP_ICON_DRAWABLE_ID == propertyKey) {
+        } else if (TabProperties.SEARCH_CHIP_ICON_DRAWABLE_ID == propertyKey) {
             ChipView searchButton = (ChipView) view.fastFindViewById(R.id.search_button);
             int iconDrawableId = model.get(TabProperties.SEARCH_CHIP_ICON_DRAWABLE_ID);
             boolean shouldTint = iconDrawableId != R.drawable.ic_logo_googleg_24dp;
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
index a23d9434..ab4240e 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
@@ -38,7 +38,6 @@
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.base.task.PostTask;
 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
 import org.chromium.chrome.browser.native_page.NativePageFactory;
 import org.chromium.chrome.browser.profiles.Profile;
@@ -787,7 +786,7 @@
             };
         }
 
-        if (TabUiFeatureUtilities.isSearchTermChipEnabled()) {
+        if (TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.getValue()) {
             mSearchChipIconDrawableId = getSearchChipIconDrawableId();
             mTemplateUrlObserver = () -> {
                 mSearchChipIconDrawableId = getSearchChipIconDrawableId();
@@ -1004,7 +1003,7 @@
         mModel.get(index).model.set(TabProperties.TITLE, getLatestTitleForTab(tab));
         mModel.get(index).model.set(TabProperties.URL, getUrlForTab(tab));
 
-        if (TabUiFeatureUtilities.isSearchTermChipEnabled() && mUiType == UiType.CLOSABLE) {
+        if (TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.getValue() && mUiType == UiType.CLOSABLE) {
             mModel.get(index).model.set(TabProperties.SEARCH_QUERY, getLastSearchTerm(tab));
             mModel.get(index).model.set(TabProperties.SEARCH_LISTENER,
                     SearchTermChipUtils.getSearchQueryListener(tab, mTabSelectedListener));
@@ -1203,7 +1202,7 @@
                         .with(CARD_TYPE, TAB)
                         .build();
 
-        if (TabUiFeatureUtilities.isSearchTermChipEnabled() && mUiType == UiType.CLOSABLE) {
+        if (TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.getValue() && mUiType == UiType.CLOSABLE) {
             tabInfo.set(TabProperties.SEARCH_QUERY, getLastSearchTerm(tab));
             tabInfo.set(TabProperties.SEARCH_LISTENER,
                     SearchTermChipUtils.getSearchQueryListener(tab, mTabSelectedListener));
@@ -1257,7 +1256,7 @@
     }
 
     private String getLastSearchTerm(Tab tab) {
-        assert TabUiFeatureUtilities.isSearchTermChipEnabled();
+        assert TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.getValue();
         if (mActionsOnAllRelatedTabs && TabUiFeatureUtilities.isTabGroupsAndroidEnabled()
                 && getRelatedTabsForId(tab.getId()).size() > 1) {
             return null;
@@ -1267,7 +1266,7 @@
 
     private int getSearchChipIconDrawableId() {
         int iconDrawableId;
-        if (isSearchChipAdaptiveIconEnabled()) {
+        if (TabUiFeatureUtilities.ENABLE_SEARCH_CHIP_ADAPTIVE.getValue()) {
             iconDrawableId = TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle()
                     ? R.drawable.ic_logo_googleg_24dp
                     : R.drawable.ic_search;
@@ -1277,21 +1276,6 @@
         return iconDrawableId;
     }
 
-    private boolean isSearchChipAdaptiveIconEnabled() {
-        if (SearchTermChipUtils.sIsSearchChipAdaptiveIconEnabledForTesting != null) {
-            return SearchTermChipUtils.sIsSearchChipAdaptiveIconEnabledForTesting;
-        }
-        if (!TabUiFeatureUtilities.isGridTabSwitcherEnabled() || !ChromeFeatureList.isInitialized()
-                || !TabUiFeatureUtilities.isSearchTermChipEnabled()
-                || !ChromeFeatureList
-                            .getFieldTrialParamByFeature(ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID,
-                                    "enable_search_term_chip_adaptive_icon")
-                            .equals("true")) {
-            return false;
-        }
-        return true;
-    }
-
     private String getUrlForTab(Tab tab) {
         if (!TabUiFeatureUtilities.isTabGroupsAndroidContinuationEnabled()) return "";
         if (!mActionsOnAllRelatedTabs) return tab.getUrlString();
@@ -1501,10 +1485,5 @@
                 navigateToLastSearchQuery(originalTab);
             };
         }
-
-        @VisibleForTesting
-        static void setIsSearchChipAdaptiveIconEnabledForTesting(Boolean isEnabled) {
-            sIsSearchChipAdaptiveIconEnabledForTesting = isEnabled;
-        }
     }
 }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorCoordinator.java
index 5cb7602..d07c1a24 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorCoordinator.java
@@ -120,6 +120,8 @@
         mContext = context;
         mParentView = parentView;
         mTabModelSelector = tabModelSelector;
+        assert mode == TabListCoordinator.TabListMode.GRID
+                || mode == TabListCoordinator.TabListMode.LIST;
 
         mTabListCoordinator = new TabListCoordinator(mode, context, mTabModelSelector,
                 tabContentManager::getTabThumbnailWithCallback, null, false, null, null,
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherCoordinator.java
index 7133451..2352f8e 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherCoordinator.java
@@ -172,7 +172,7 @@
             }
         }
 
-        if (TabUiFeatureUtilities.isSearchTermChipEnabled()
+        if (TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.getValue()
                 && mode != TabListCoordinator.TabListMode.CAROUSEL) {
             mTabAttributeCache = new TabAttributeCache(mTabModelSelector);
         }
@@ -193,8 +193,12 @@
     @Override
     public void initWithNative(Context context, TabContentManager tabContentManager,
             DynamicResourceLoader dynamicResourceLoader) {
-        mTabSelectionEditorCoordinator = new TabSelectionEditorCoordinator(
-                context, mContainer, mTabModelSelector, tabContentManager, null, mMode);
+        // For tab switcher in carousel mode, the selection editor should still follow grid style.
+        int selectionEditorMode = mMode == TabListCoordinator.TabListMode.CAROUSEL
+                ? TabListCoordinator.TabListMode.GRID
+                : mMode;
+        mTabSelectionEditorCoordinator = new TabSelectionEditorCoordinator(context, mContainer,
+                mTabModelSelector, tabContentManager, null, selectionEditorMode);
         mMediator.initWithNative(mTabSelectionEditorCoordinator.getController());
 
         mTabListCoordinator.initWithNative(dynamicResourceLoader);
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java
index 45ff034..652c06c 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java
@@ -7,7 +7,6 @@
 import android.text.TextUtils;
 
 import androidx.annotation.Nullable;
-import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.ContextUtils;
 import org.chromium.chrome.browser.device.DeviceClassManager;
@@ -44,25 +43,17 @@
             new DoubleCachedFieldTrialParameter(
                     ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID, THUMBNAIL_ASPECT_RATIO_PARAM, 1.0);
 
-    private static Boolean sSearchTermChipEnabledForTesting;
+    public static final String SEARCH_CHIP_PARAM = "enable_search_term_chip";
+    public static final BooleanCachedFieldTrialParameter ENABLE_SEARCH_CHIP =
+            new BooleanCachedFieldTrialParameter(
+                    ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID, SEARCH_CHIP_PARAM, false);
+
+    public static final String SEARCH_CHIP_ADAPTIVE_PARAM = "enable_search_term_chip_adaptive_icon";
+    public static final BooleanCachedFieldTrialParameter ENABLE_SEARCH_CHIP_ADAPTIVE =
+            new BooleanCachedFieldTrialParameter(
+                    ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID, SEARCH_CHIP_ADAPTIVE_PARAM, false);
+
     private static Boolean sTabManagementModuleSupportedForTesting;
-    private static Double sTabThumbnailAspectRatioForTesting;
-
-    /**
-     * Set whether the search term chip in Grid tab switcher is enabled for testing.
-     */
-    public static void setSearchTermChipEnabledForTesting(@Nullable Boolean enabled) {
-        sSearchTermChipEnabledForTesting = enabled;
-    }
-
-    /**
-     * @return Whether the search term chip in Grid tab switcher is enabled.
-     */
-    public static boolean isSearchTermChipEnabled() {
-        if (sSearchTermChipEnabledForTesting != null) return sSearchTermChipEnabledForTesting;
-        return ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean(
-                ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID, "enable_search_term_chip", false);
-    }
 
     /**
      * Set whether the tab management module is supported for testing.
@@ -141,22 +132,10 @@
      * @return Whether the thumbnail_aspect_ratio field trail is set.
      */
     public static boolean isTabThumbnailAspectRatioNotOne() {
-        double aspectRatio;
-        if (sTabThumbnailAspectRatioForTesting != null) {
-            aspectRatio = sTabThumbnailAspectRatioForTesting;
-        } else {
-            aspectRatio = THUMBNAIL_ASPECT_RATIO.getValue();
-        }
-
-        return Double.compare(1.0, aspectRatio) != 0;
+        return Double.compare(1.0, THUMBNAIL_ASPECT_RATIO.getValue()) != 0;
     }
 
     public static boolean isTabGridLayoutAndroidNewTabTileEnabled() {
         return TextUtils.equals(TAB_GRID_LAYOUT_ANDROID_NEW_TAB_TILE.getValue(), "NewTabTile");
     }
-
-    @VisibleForTesting
-    public static void setTabThumbnailAspectRatioForTesting(Double value) {
-        sTabThumbnailAspectRatioForTesting = value;
-    }
 }
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java
index a111c80..c4be3cac 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java
@@ -44,6 +44,7 @@
 import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount;
 
 import android.content.Intent;
+import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.support.test.espresso.Espresso;
@@ -124,6 +125,8 @@
     @After
     public void tearDown() {
         TabUiFeatureUtilities.setTabManagementModuleSupportedForTesting(null);
+        mActivityTestRule.getActivity().setRequestedOrientation(
+                ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
     }
 
     @Test
@@ -487,9 +490,6 @@
         mSelectionEditorRobot.resultRobot.verifyTabSelectionEditorIsHidden();
         assertTrue(isDialogShowing(cta));
         checkPopupPosition(cta, true, false);
-
-        // Reset orientation.
-        rotateDeviceToOrientation(cta, Configuration.ORIENTATION_PORTRAIT);
     }
 
     @Test
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphTest.java
index da59f07..f791d45 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphTest.java
@@ -26,6 +26,7 @@
 import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.rotateDeviceToOrientation;
 import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount;
 
+import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.espresso.NoMatchingRootException;
@@ -35,6 +36,7 @@
 
 import androidx.recyclerview.widget.RecyclerView;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -90,6 +92,12 @@
                                             .getCurrentTabModelFilter()::isTabModelRestored);
     }
 
+    @After
+    public void tearDown() {
+        mActivityTestRule.getActivity().setRequestedOrientation(
+                ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
+    }
+
     @Test
     @MediumTest
     public void testShowAndHideIphDialog() throws InterruptedException {
@@ -179,9 +187,6 @@
         onView(withId(R.id.tab_grid_message_item)).check(matches(isDisplayed()));
 
         mRenderTestRule.render(cta.findViewById(R.id.tab_grid_message_item), "iph_landscape");
-
-        // Reset orientation.
-        rotateDeviceToOrientation(cta, Configuration.ORIENTATION_PORTRAIT);
     }
 
     @Test
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupPopupUiTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupPopupUiTest.java
index 1b8777a..ab69bbf 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupPopupUiTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupPopupUiTest.java
@@ -26,6 +26,7 @@
 import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyShowingPopupTabList;
 import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount;
 
+import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.espresso.contrib.RecyclerViewActions;
@@ -33,6 +34,7 @@
 import android.view.View;
 import android.widget.FrameLayout;
 
+import org.junit.After;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TestRule;
@@ -80,6 +82,12 @@
     @Rule
     public TestRule mProcessor = new Features.InstrumentationProcessor();
 
+    @After
+    public void tearDown() {
+        mActivityTestRule.getActivity().setRequestedOrientation(
+                ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
+    }
+
     @Test
     @MediumTest
     public void testOnAnchorViewChanged_HOME_SEARCH_TAB_SWITCHER() throws InterruptedException {
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListViewHolderTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListViewHolderTest.java
index 4935097..0e567bc 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListViewHolderTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListViewHolderTest.java
@@ -122,8 +122,6 @@
     @Override
     public void setUpTest() throws Exception {
         super.setUpTest();
-        TabUiFeatureUtilities.setTabThumbnailAspectRatioForTesting(1.0d);
-        TabUiFeatureUtilities.setSearchTermChipEnabledForTesting(true);
         ViewGroup view = new LinearLayout(getActivity());
         FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                 ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
@@ -585,8 +583,6 @@
         mStripMCP.destroy();
         mGridMCP.destroy();
         mSelectableMCP.destroy();
-        TabUiFeatureUtilities.setTabThumbnailAspectRatioForTesting(null);
-        TabUiFeatureUtilities.setSearchTermChipEnabledForTesting(null);
         super.tearDownTest();
     }
 }
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java
index 93146df..af57697 100644
--- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java
+++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java
@@ -252,7 +252,7 @@
         mMocker.mock(UrlUtilitiesJni.TEST_HOOKS, mUrlUtilitiesJniMock);
 
         CachedFeatureFlags.setForTesting(ChromeFeatureList.START_SURFACE_ANDROID, false);
-        TabUiFeatureUtilities.setSearchTermChipEnabledForTesting(true);
+        TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.setForTesting(true);
         mTab1 = prepareTab(TAB1_ID, TAB1_TITLE, TAB1_URL);
         mTab2 = prepareTab(TAB2_ID, TAB2_TITLE, TAB2_URL);
         mViewHolder1 = prepareViewHolder(TAB1_ID, POSITION1);
@@ -318,7 +318,6 @@
 
         mModel = new TabListModel();
         TemplateUrlServiceFactory.setInstanceForTesting(mTemplateUrlService);
-        TabListMediator.SearchTermChipUtils.setIsSearchChipAdaptiveIconEnabledForTesting(false);
         mMediator = new TabListMediator(mContext, mModel, mTabModelSelector,
                 mTabContentManager::getTabThumbnailWithCallback, mTitleProvider,
                 mTabListFaviconProvider, false, null, mGridCardOnClickListenerProvider, null,
@@ -332,7 +331,6 @@
     public void tearDown() {
         RecordHistogram.setDisabledForTests(false);
         CachedFeatureFlags.setForTesting(ChromeFeatureList.START_SURFACE_ANDROID, null);
-        TabUiFeatureUtilities.setSearchTermChipEnabledForTesting(null);
         TabAttributeCache.clearAllForTesting();
         getGroupTitleSharedPreferences().edit().clear();
     }
@@ -1913,7 +1911,6 @@
     public void testSearchChipAdaptiveIcon_Disabled() {
         // Mock that google is the default search engine, and the search chip adaptive icon field
         // is set as false.
-        TabListMediator.SearchTermChipUtils.setIsSearchChipAdaptiveIconEnabledForTesting(false);
         doReturn(true).when(mTemplateUrlService).isDefaultSearchEngineGoogle();
 
         // Re-initialize the mediator to setup TemplateUrlServiceObserver if needed.
@@ -1937,7 +1934,7 @@
     public void testSearchChipAdaptiveIcon_ChangeWithSetting() {
         // Mock that google is the default search engine, and the search chip adaptive icon is
         // turned on.
-        TabListMediator.SearchTermChipUtils.setIsSearchChipAdaptiveIconEnabledForTesting(true);
+        TabUiFeatureUtilities.ENABLE_SEARCH_CHIP_ADAPTIVE.setForTesting(true);
         doReturn(true).when(mTemplateUrlService).isDefaultSearchEngineGoogle();
 
         // Re-initialize the mediator to setup TemplateUrlServiceObserver if needed.
@@ -2076,7 +2073,6 @@
         // TODO(crbug.com/1058196): avoid re-instanciate TabListMediator by using annotation.
         CachedFeatureFlags.setForTesting(TAB_GROUPS_ANDROID, true);
 
-        TabListMediator.SearchTermChipUtils.setIsSearchChipAdaptiveIconEnabledForTesting(false);
         mMediator = new TabListMediator(mContext, mModel, mTabModelSelector,
                 mTabContentManager::getTabThumbnailWithCallback, mTitleProvider,
                 mTabListFaviconProvider, actionOnRelatedTabs, null, null, handler,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index ea7d9e3..7c7f565 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -82,6 +82,7 @@
 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
 import org.chromium.chrome.browser.gesturenav.NavigationSheet;
 import org.chromium.chrome.browser.gesturenav.TabbedSheetDelegate;
+import org.chromium.chrome.browser.history.HistoryManagerUtils;
 import org.chromium.chrome.browser.incognito.IncognitoNotificationManager;
 import org.chromium.chrome.browser.incognito.IncognitoTabHost;
 import org.chromium.chrome.browser.incognito.IncognitoTabHostRegistry;
@@ -2145,7 +2146,9 @@
         mNavigationSheet = NavigationSheet.create(
                 getWindow().getDecorView().findViewById(android.R.id.content), this,
                 this::getBottomSheetController);
-        mNavigationSheet.setDelegate(new TabbedSheetDelegate(tab));
+        mNavigationSheet.setDelegate(new TabbedSheetDelegate(tab, aTab -> {
+            HistoryManagerUtils.showHistoryManager(ChromeTabbedActivity.this, aTab);
+        }, getResources().getString(R.string.show_full_history)));
         if (!mNavigationSheet.startAndExpand(/* forward=*/false, /* animate=*/true)) {
             mNavigationSheet = null;
         } else {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabSheetContent.java
index f34cacf..2c8b643 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabSheetContent.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabSheetContent.java
@@ -25,7 +25,6 @@
 import org.chromium.chrome.browser.thinwebview.ThinWebViewFactory;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContent;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
-import org.chromium.components.browser_ui.modaldialog.AppModalPresenter;
 import org.chromium.components.browser_ui.widget.FadingShadow;
 import org.chromium.components.browser_ui.widget.FadingShadowView;
 import org.chromium.components.embedder_support.delegate.WebContentsDelegateAndroid;
@@ -35,7 +34,6 @@
 import org.chromium.content_public.browser.RenderCoordinates;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.ui.base.ActivityWindowAndroid;
-import org.chromium.ui.modaldialog.ModalDialogManager;
 import org.chromium.url.GURL;
 
 /**
@@ -59,7 +57,6 @@
     private FadingShadowView mShadow;
     private Drawable mCurrentFavicon;
     private ImageView mFaviconView;
-    private ModalDialogManager mModalDialogManager;
 
     /**
      * Constructor.
@@ -103,12 +100,8 @@
      * bottom sheet.
      */
     private void createThinWebView(int maxSheetHeight) {
-        mThinWebView = ThinWebViewFactory.create(mContext, new ActivityWindowAndroid(mContext) {
-            @Override
-            public @Nullable ModalDialogManager getModalDialogManager() {
-                return EphemeralTabSheetContent.this.getModalDialogManager();
-            }
-        }, new ThinWebViewConstraints());
+        mThinWebView = ThinWebViewFactory.create(
+                mContext, new ActivityWindowAndroid(mContext), new ThinWebViewConstraints());
 
         mSheetContentView = new FrameLayout(mContext);
         mThinWebView.getView().setLayoutParams(new FrameLayout.LayoutParams(
@@ -118,14 +111,6 @@
         mSheetContentView.setPadding(0, mToolbarHeightPx, 0, 0);
     }
 
-    private ModalDialogManager getModalDialogManager() {
-        if (mModalDialogManager == null) {
-            mModalDialogManager = new ModalDialogManager(
-                    new AppModalPresenter(mContext), ModalDialogManager.ModalDialogType.APP);
-        }
-        return mModalDialogManager;
-    }
-
     private void createToolbarView() {
         mToolbarView =
                 (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.sheet_tab_toolbar, null);
@@ -247,10 +232,6 @@
     @Override
     public void destroy() {
         mThinWebView.destroy();
-        if (mModalDialogManager != null) {
-            mModalDialogManager.destroy();
-            mModalDialogManager = null;
-        }
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/HistoryNavigationCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/HistoryNavigationCoordinator.java
index aefba7f..546e3bd 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/HistoryNavigationCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/HistoryNavigationCoordinator.java
@@ -9,10 +9,11 @@
 import android.os.Build;
 import android.view.View;
 
+import org.chromium.base.Consumer;
+import org.chromium.base.Function;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.browser.ActivityTabProvider;
 import org.chromium.chrome.browser.ActivityTabProvider.ActivityTabTabObserver;
-import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.SwipeRefreshHandler;
 import org.chromium.chrome.browser.compositor.CompositorViewHolder;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
@@ -20,7 +21,6 @@
 import org.chromium.chrome.browser.lifecycle.Destroyable;
 import org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver;
 import org.chromium.chrome.browser.tab.Tab;
-import org.chromium.chrome.browser.tab.TabImpl;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
 import org.chromium.components.browser_ui.widget.InsetObserverView;
 import org.chromium.content_public.browser.WebContents;
@@ -35,6 +35,11 @@
     private InsetObserverView mInsetObserverView;
     private ActivityTabTabObserver mActivityTabObserver;
     private ActivityLifecycleDispatcher mActivityLifecycleDispatcher;
+    private Function<Tab, Boolean> mBackShouldCloseTab;
+    private Runnable mOnBackPressed;
+    private Consumer<Tab> mShowHistoryManager;
+    private String mHistoryMenu;
+    private Supplier<BottomSheetController> mBottomSheetControllerSupplier;
     private Tab mTab;
     private boolean mEnabled;
 
@@ -45,16 +50,24 @@
      * @param tabProvider Activity tab provider.
      * @param insetObserverView View that provides information about the inset and inset
      *        capabilities of the device.
+     * @param backShouldCloseTab Boolean function that returns true if back button press
+     *        will close the tab.
+     * @param onBackPressed Runnable that performs an action when back button is pressed.
+     * @param showHistoryManager Function that shows full navigation history UI.
+     * @param historyMenu UI string for full history UI in its header.
+     * @param bottomSheetControllerSupplier Supplier for {@link BottomSheetController}.
      * @return HistoryNavigationCoordinator object or null if not enabled via feature flag.
      */
-    public static HistoryNavigationCoordinator create(
-            ActivityLifecycleDispatcher lifecycleDispatcher,
+    public static void create(ActivityLifecycleDispatcher lifecycleDispatcher,
             CompositorViewHolder compositorViewHolder, ActivityTabProvider tabProvider,
-            InsetObserverView insetObserverView) {
-        if (!isFeatureFlagEnabled()) return null;
+            InsetObserverView insetObserverView, Function<Tab, Boolean> backShouldCloseTab,
+            Runnable onBackPressed, Consumer<Tab> showHistoryManager, String historyMenu,
+            Supplier<BottomSheetController> bottomSheetControllerSupplier) {
+        if (!isFeatureFlagEnabled()) return;
         HistoryNavigationCoordinator coordinator = new HistoryNavigationCoordinator();
-        coordinator.init(lifecycleDispatcher, compositorViewHolder, tabProvider, insetObserverView);
-        return coordinator;
+        coordinator.init(lifecycleDispatcher, compositorViewHolder, tabProvider, insetObserverView,
+                backShouldCloseTab, onBackPressed, showHistoryManager, historyMenu,
+                bottomSheetControllerSupplier);
     }
 
     /**
@@ -62,10 +75,17 @@
      */
     private void init(ActivityLifecycleDispatcher lifecycleDispatcher,
             CompositorViewHolder compositorViewHolder, ActivityTabProvider tabProvider,
-            InsetObserverView insetObserverView) {
+            InsetObserverView insetObserverView, Function<Tab, Boolean> backShouldCloseTab,
+            Runnable onBackPressed, Consumer<Tab> showHistoryManager, String historyMenu,
+            Supplier<BottomSheetController> bottomSheetControllerSupplier) {
         mNavigationLayout = new HistoryNavigationLayout(compositorViewHolder.getContext());
         mCompositorViewHolder = compositorViewHolder;
         mActivityLifecycleDispatcher = lifecycleDispatcher;
+        mBackShouldCloseTab = backShouldCloseTab;
+        mOnBackPressed = onBackPressed;
+        mShowHistoryManager = showHistoryManager;
+        mHistoryMenu = historyMenu;
+        mBottomSheetControllerSupplier = bottomSheetControllerSupplier;
         lifecycleDispatcher.register(this);
 
         compositorViewHolder.addView(mNavigationLayout);
@@ -105,34 +125,34 @@
         }
     }
 
+    private static boolean isDetached(Tab tab) {
+        return tab.getWebContents() == null
+                || tab.getWebContents().getTopLevelNativeWindow() == null;
+    }
+
     /**
      * Creates {@link HistoryNavigationDelegate} for native/rendered pages on Tab.
      */
-    private static HistoryNavigationDelegate createDelegate(Tab tab) {
-        if (((TabImpl) tab).getActivity() == null) return HistoryNavigationDelegate.DEFAULT;
+    private static HistoryNavigationDelegate createDelegate(Tab tab,
+            Function<Tab, Boolean> backShouldCloseTab, Runnable onBackPressed,
+            Consumer<Tab> showHistoryManager, String historyMenu,
+            Supplier<BottomSheetController> bottomSheetControllerSupplier) {
+        if (isDetached(tab)) return HistoryNavigationDelegate.DEFAULT;
 
         return new HistoryNavigationDelegate() {
-            // TODO(jinsukkim): Avoid getting activity from tab.
-            private final Supplier<BottomSheetController> mController = () -> {
-                ChromeActivity activity = ((TabImpl) tab).getActivity();
-                return activity == null || activity.isActivityFinishingOrDestroyed()
-                        ? null
-                        : activity.getBottomSheetController();
-            };
-
             @Override
             public NavigationHandler.ActionDelegate createActionDelegate() {
-                return new TabbedActionDelegate(tab);
+                return new TabbedActionDelegate(tab, backShouldCloseTab, onBackPressed);
             }
 
             @Override
             public NavigationSheet.Delegate createSheetDelegate() {
-                return new TabbedSheetDelegate(tab);
+                return new TabbedSheetDelegate(tab, showHistoryManager, historyMenu);
             }
 
             @Override
             public Supplier<BottomSheetController> getBottomSheetController() {
-                return mController;
+                return isDetached(tab) ? () -> null : bottomSheetControllerSupplier;
             }
         };
     }
@@ -182,7 +202,8 @@
             // Also updates NavigationHandler when tab == null (going into TabSwitcher).
             if (mTab == null || webContents != null) {
                 HistoryNavigationDelegate delegate = webContents != null
-                        ? createDelegate(mTab)
+                        ? createDelegate(mTab, mBackShouldCloseTab, mOnBackPressed,
+                                mShowHistoryManager, mHistoryMenu, mBottomSheetControllerSupplier)
                         : HistoryNavigationDelegate.DEFAULT;
                 boolean isNativePage = mTab != null ? mTab.isNativePage() : false;
                 mNavigationLayout.initNavigationHandler(delegate, webContents, isNativePage);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedActionDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedActionDelegate.java
index a0363b63..fa5741d6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedActionDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedActionDelegate.java
@@ -6,21 +6,26 @@
 
 import android.os.Handler;
 
+import org.chromium.base.Function;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabAssociatedApp;
-import org.chromium.chrome.browser.tab.TabImpl;
 
 /**
  * Implementation of {@link NavigationHandler#ActionDelegate} that works with
  * native/rendered pages in tabbed mode. Uses interface methods of {@link Tab}
- * and {@link ChromeActivity} to implement navigation.
+ * to implement navigation.
  */
 public class TabbedActionDelegate implements NavigationHandler.ActionDelegate {
     private final Tab mTab;
     private final Handler mHandler = new Handler();
+    private final Function<Tab, Boolean> mBackShouldCloseTab;
+    private final Runnable mOnBackPressed;
 
-    public TabbedActionDelegate(Tab tab) {
+    public TabbedActionDelegate(
+            Tab tab, Function<Tab, Boolean> backShouldCloseTab, Runnable onBackPressed) {
         mTab = tab;
+        mBackShouldCloseTab = backShouldCloseTab;
+        mOnBackPressed = onBackPressed;
     }
 
     @Override
@@ -36,19 +41,19 @@
             // Perform back action at the next UI thread execution. The back action can
             // potentially close the tab we're running on, which causes use-after-destroy
             // exception if the closing operation is performed synchronously.
-            mHandler.post(() -> ((TabImpl) mTab).getActivity().onBackPressed());
+            mHandler.post(mOnBackPressed);
         }
     }
 
     @Override
     public boolean willBackCloseTab() {
-        return !mTab.canGoBack() && ((TabImpl) mTab).getActivity().backShouldCloseTab(mTab);
+        return !mTab.canGoBack() && mBackShouldCloseTab.apply(mTab);
     }
 
     @Override
     public boolean willBackExitApp() {
         return !mTab.canGoBack()
-                && (!((TabImpl) mTab).getActivity().backShouldCloseTab(mTab)
+                && (!mBackShouldCloseTab.apply(mTab)
                         || TabAssociatedApp.isOpenedFromExternalApp(mTab));
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedSheetDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedSheetDelegate.java
index 6a4f9f8..dfec6674 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedSheetDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedSheetDelegate.java
@@ -4,10 +4,8 @@
 
 package org.chromium.chrome.browser.gesturenav;
 
-import org.chromium.chrome.R;
-import org.chromium.chrome.browser.history.HistoryManagerUtils;
+import org.chromium.base.Consumer;
 import org.chromium.chrome.browser.tab.Tab;
-import org.chromium.chrome.browser.tab.TabImpl;
 import org.chromium.components.embedder_support.util.UrlConstants;
 import org.chromium.content_public.browser.NavigationEntry;
 import org.chromium.content_public.browser.NavigationHistory;
@@ -21,12 +19,13 @@
     private static final int FULL_HISTORY_ENTRY_INDEX = -1;
 
     private final Tab mTab;
+    private final Consumer<Tab> mShowHistoryManager;
     private final String mFullHistoryMenu;
 
-    public TabbedSheetDelegate(Tab tab) {
+    public TabbedSheetDelegate(Tab tab, Consumer<Tab> showHistoryManager, String historyMenu) {
         mTab = tab;
-        mFullHistoryMenu =
-                ((TabImpl) tab).getActivity().getResources().getString(R.string.show_full_history);
+        mShowHistoryManager = showHistoryManager;
+        mFullHistoryMenu = historyMenu;
     }
 
     @Override
@@ -42,7 +41,7 @@
     @Override
     public void navigateToIndex(int index) {
         if (index == FULL_HISTORY_ENTRY_INDEX) {
-            HistoryManagerUtils.showHistoryManager(((TabImpl) mTab).getActivity(), mTab);
+            mShowHistoryManager.accept(mTab);
         } else {
             mTab.getWebContents().getNavigationController().goToNavigationIndex(index);
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/language/settings/LanguageListBaseAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/language/settings/LanguageListBaseAdapter.java
index d30696b..4513fa0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/language/settings/LanguageListBaseAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/language/settings/LanguageListBaseAdapter.java
@@ -17,6 +17,7 @@
 
 import androidx.annotation.DrawableRes;
 import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
 import androidx.core.view.ViewCompat;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView.ViewHolder;
@@ -219,4 +220,9 @@
     protected boolean isPassivelyDraggable(ViewHolder viewHolder) {
         return viewHolder instanceof LanguageRowViewHolder;
     }
+
+    @VisibleForTesting
+    public List<LanguageItem> getLanguageItemList() {
+        return mElements;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
index 66e2457..af81755 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
@@ -27,6 +27,7 @@
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
 import org.chromium.chrome.browser.gesturenav.HistoryNavigationCoordinator;
+import org.chromium.chrome.browser.history.HistoryManagerUtils;
 import org.chromium.chrome.browser.language.LanguageAskPrompt;
 import org.chromium.chrome.browser.lifecycle.NativeInitObserver;
 import org.chromium.chrome.browser.locale.LocaleManager;
@@ -168,9 +169,18 @@
         super.onLayoutManagerAvailable(layoutManager);
 
         initStatusIndicatorCoordinator(layoutManager);
+
+        // clang-format off
         HistoryNavigationCoordinator.create(mActivity.getLifecycleDispatcher(),
                 mActivity.getCompositorViewHolder(), mActivity.getActivityTabProvider(),
-                mActivity.getInsetObserverView());
+                mActivity.getInsetObserverView(),
+                mActivity::backShouldCloseTab,
+                mActivity::onBackPressed,
+                tab -> HistoryManagerUtils.showHistoryManager(mActivity, tab),
+                mActivity.getResources().getString(R.string.show_full_history),
+                () -> mActivity.isActivityFinishingOrDestroyed() ? null
+                                                                 : getBottomSheetController());
+        // clang-format on
     }
 
     @Override
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxTest.java
index 7196ee10..3660abfb 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxTest.java
@@ -356,68 +356,6 @@
         checkAutocompleteText(suggestionsMap, "test", "testing", 4, 7);
     }
 
-    @Test
-    @DisableIf.Build(sdk_is_greater_than = Build.VERSION_CODES.O, message = "crbug.com/1027549")
-    @MediumTest
-    @Feature({"Omnibox"})
-    @RetryOnFailure
-    public void testGrowingAutocompleteTextResults()
-            throws InterruptedException, ExecutionException {
-        Map<String, List<SuggestionsResult>> suggestionsMap = buildSuggestionMap(
-                new TestSuggestionResultsBuilder()
-                        .setTextShownFor("test")
-                        .addSuggestions(new SuggestionsResultBuilder()
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "test", null)
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "testing", null)
-                                .setAutocompleteText("i"))
-                        .addSuggestions(new SuggestionsResultBuilder()
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "test", null)
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "testz", null)
-                                .setAutocompleteText("in"))
-                        .addSuggestions(new SuggestionsResultBuilder()
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "test", null)
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "testblarg", null)
-                                .setAutocompleteText("ing for the win")));
-        checkAutocompleteText(suggestionsMap, "test", "testing for the win", 4, 19);
-    }
-
-    @Test
-    @MediumTest
-    @Feature({"Omnibox"})
-    @RetryOnFailure
-    @DisabledTest
-    public void testShrinkingAutocompleteTextResults()
-            throws InterruptedException, ExecutionException {
-        Map<String, List<SuggestionsResult>> suggestionsMap = buildSuggestionMap(
-                new TestSuggestionResultsBuilder()
-                        .setTextShownFor("test")
-                        .addSuggestions(new SuggestionsResultBuilder()
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "test", null)
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "testing", null)
-                                .setAutocompleteText("ing is awesome"))
-                        .addSuggestions(new SuggestionsResultBuilder()
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "test", null)
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "testz", null)
-                                .setAutocompleteText("ing is hard"))
-                        .addSuggestions(new SuggestionsResultBuilder()
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "test", null)
-                                .addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
-                                        "testblarg", null)
-                                .setAutocompleteText("ingz")));
-        checkAutocompleteText(suggestionsMap, "test", "testingz", 4, 8);
-    }
-
     private void checkAutocompleteText(
             Map<String, List<SuggestionsResult>> suggestionsMap,
             final String textToType, final String expectedAutocompleteText,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/UrlBarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/UrlBarTest.java
index cb6f38f..65e5ef2 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/UrlBarTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/UrlBarTest.java
@@ -12,6 +12,7 @@
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SmallTest;
 import android.text.Editable;
+import android.text.Selection;
 import android.text.TextUtils;
 import android.view.KeyEvent;
 import android.view.ViewGroup;
@@ -200,6 +201,25 @@
         return getAutocompleteState(() -> mUrlBar.setSelection(selectionStart, selectionEnd));
     }
 
+    private void assertAutocompleteSelectionRange(
+            int expectedSelectionStart, int expectedSelectionEnd) {
+        int[] selection = getSelectionRange();
+        Assert.assertEquals("Selection start did not match", expectedSelectionStart, selection[0]);
+        if (!ChromeFeatureList.isEnabled(ChromeFeatureList.SPANNABLE_INLINE_AUTOCOMPLETE)) {
+            Assert.assertEquals("Selection end did not match", expectedSelectionEnd, selection[1]);
+        }
+    }
+
+    private int[] getSelectionRange() {
+        return TestThreadUtils.runOnUiThreadBlockingNoException(() -> {
+            int[] selection = new int[2];
+            CharSequence text = mUrlBar.getText();
+            selection[0] = Selection.getSelectionStart(text);
+            selection[1] = Selection.getSelectionEnd(text);
+            return selection;
+        });
+    }
+
     @Test
     @SmallTest
     @Feature({"Omnibox"})
@@ -858,4 +878,30 @@
         setTextAndVerifyNoAutocomplete("");
         Mockito.verify(listener).onTextChanged("", "");
     }
+
+    @Test
+    @SmallTest
+    @Feature({"Omnibox"})
+    @RetryOnFailure
+    public void testSetAutocompleteText_ShrinkingText() {
+        toggleFocusAndIgnoreImeOperations(mUrlBar, true);
+        setTextAndVerifyNoAutocomplete("test");
+        setAutocomplete("test", "ing is awesome");
+        setAutocomplete("test", "ing is hard");
+        setAutocomplete("test", "ingz");
+        assertAutocompleteSelectionRange(4, 8);
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"Omnibox"})
+    @RetryOnFailure
+    public void testSetAutocompleteText_GrowingText() {
+        toggleFocusAndIgnoreImeOperations(mUrlBar, true);
+        setTextAndVerifyNoAutocomplete("test");
+        setAutocomplete("test", "ingz");
+        setAutocomplete("test", "ing is hard");
+        setAutocomplete("test", "ing is awesome");
+        assertAutocompleteSelectionRange(4, 18);
+    }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/language/LanguageSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/language/LanguageSettingsTest.java
new file mode 100644
index 0000000..048764d3
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/language/LanguageSettingsTest.java
@@ -0,0 +1,171 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.settings.language;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.hasSibling;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static android.support.test.espresso.matcher.ViewMatchers.withText;
+
+import static org.hamcrest.core.AllOf.allOf;
+
+import android.support.test.InstrumentationRegistry;
+import android.support.test.espresso.contrib.RecyclerViewActions;
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.Restriction;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.language.settings.LanguageItem;
+import org.chromium.chrome.browser.language.settings.LanguageListBaseAdapter;
+import org.chromium.chrome.browser.language.settings.LanguageSettings;
+import org.chromium.chrome.browser.settings.SettingsActivity;
+import org.chromium.chrome.browser.settings.SettingsActivityTest;
+import org.chromium.chrome.browser.translate.TranslateBridge;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.chrome.test.util.browser.RecyclerViewTestUtils;
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
+import org.chromium.ui.test.util.UiRestriction;
+
+/**
+ * Tests for the "Languages" settings screen.
+ */
+@RunWith(ChromeJUnit4ClassRunner.class)
+// clang-format off
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
+@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE)
+public class LanguageSettingsTest {
+    // clang-format on
+
+    private SettingsActivity mActivity;
+
+    @Before
+    public void setUp() throws Exception {
+        mActivity = SettingsActivityTest.startSettingsActivity(
+                InstrumentationRegistry.getInstrumentation(), LanguageSettings.class.getName());
+    }
+
+    private void addLanguage() {
+        onView(withId(R.id.add_language)).check(matches(isDisplayed()));
+        RecyclerView acceptLanguageList = mActivity.findViewById(R.id.language_list);
+        int originalAcceptLanguageCount = acceptLanguageList.getChildCount();
+        // Disable animation to reduce flakiness.
+        acceptLanguageList.setItemAnimator(null);
+
+        // Enter "Add language" screen.
+        onView(withId(R.id.add_language)).perform(click());
+        onView(withId(R.id.language_list)).check(matches(isDisplayed()));
+        onView(withId(R.id.language_list))
+                .perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
+
+        // Back to "Language" screen.
+        Assert.assertEquals(mActivity.getString(R.string.language_settings), mActivity.getTitle());
+        acceptLanguageList = mActivity.findViewById(R.id.language_list);
+        Assert.assertEquals("Failed to add a new language.", originalAcceptLanguageCount + 1,
+                acceptLanguageList.getChildCount());
+    }
+
+    @Test
+    @SmallTest
+    public void testRemoveLanguage() {
+        RecyclerView acceptLanguageList = mActivity.findViewById(R.id.language_list);
+        int originalAcceptLanguageCount = acceptLanguageList.getChildCount();
+
+        // Enter "Add language" screen.
+        addLanguage();
+
+        View newLangView =
+                acceptLanguageList.findViewHolderForAdapterPosition(originalAcceptLanguageCount)
+                        .itemView;
+
+        // Toggle popup menu to remove a language.
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> { newLangView.findViewById(R.id.more).performClick(); });
+        onView(withText(R.string.remove)).perform(click());
+        Assert.assertEquals("The language is not removed.", originalAcceptLanguageCount,
+                acceptLanguageList.getChildCount());
+    }
+
+    @Test
+    @SmallTest
+    public void testToggleOfferToTranslate() {
+        RecyclerView acceptLanguageList = mActivity.findViewById(R.id.language_list);
+        int originalAcceptLanguageCount = acceptLanguageList.getChildCount();
+
+        // Enter "Add language" screen.
+        addLanguage();
+
+        Assert.assertEquals(mActivity.getString(R.string.language_settings), mActivity.getTitle());
+        acceptLanguageList = mActivity.findViewById(R.id.language_list);
+        Assert.assertEquals("Failed to add a new language.", originalAcceptLanguageCount + 1,
+                acceptLanguageList.getChildCount());
+        View newLangView =
+                acceptLanguageList.findViewHolderForAdapterPosition(originalAcceptLanguageCount)
+                        .itemView;
+        LanguageItem languageItem = ((LanguageListBaseAdapter) acceptLanguageList.getAdapter())
+                                            .getLanguageItemList()
+                                            .get(originalAcceptLanguageCount);
+
+        // Turn on "offer to translate".
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> { newLangView.findViewById(R.id.more).performClick(); });
+        onView(withText(R.string.languages_item_option_offer_to_translate)).perform(click());
+
+        // Verify that the "offer to translate" is on.
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            Assert.assertFalse("Language should not be blocked when 'offer to translate' is on.",
+                    TranslateBridge.isBlockedLanguage(languageItem.getCode()));
+        });
+
+        RecyclerViewTestUtils.waitForStableRecyclerView(acceptLanguageList);
+        // Open popup menu to verify the drawable (blue tick) is visible.
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> { newLangView.findViewById(R.id.more).performClick(); });
+
+        onView(withText(R.string.languages_item_option_offer_to_translate))
+                .check(matches(isDisplayed()));
+        onView(allOf(hasSibling(withText(R.string.languages_item_option_offer_to_translate)),
+                       withId(R.id.menu_item_end_icon)))
+                .check((v, e) -> {
+                    Assert.assertNotNull(
+                            "There should exist an icon next to the text to indicate 'offer to translate' is on",
+                            ((ImageView) v).getDrawable());
+                });
+
+        // Turn off "offer to translate".
+        onView(withText(R.string.languages_item_option_offer_to_translate)).perform(click());
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            Assert.assertTrue("Language should be blocked when 'offer to translate' is off.",
+                    TranslateBridge.isBlockedLanguage(languageItem.getCode()));
+        });
+
+        // Open popup menu to verify the drawable (blue tick) is invisible.
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> { newLangView.findViewById(R.id.more).performClick(); });
+
+        onView(allOf(hasSibling(withText(R.string.languages_item_option_offer_to_translate)),
+                       withId(R.id.menu_item_end_icon)))
+                .check((v, e) -> { Assert.assertNull(((ImageView) v).getDrawable()); });
+
+        // Reset states by toggling popup menu to remove a language.
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> { newLangView.findViewById(R.id.more).performClick(); });
+        onView(withText(R.string.remove)).perform(click());
+    }
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java
index 52e849c..5c0f5f2 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java
@@ -17,6 +17,8 @@
 
 import org.chromium.base.Callback;
 import org.chromium.base.test.util.CallbackHelper;
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.test.ChromeBrowserTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
@@ -35,10 +37,16 @@
  * Tests for WebsitePermissionsFetcher.
  */
 @RunWith(ChromeJUnit4ClassRunner.class)
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
+        WebsitePermissionsFetcherTest.ENABLE_EXPERIMENTAL_WEB_PLATFORM_FEATURES})
 public class WebsitePermissionsFetcherTest {
     @Rule
     public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule();
 
+    /** Command line flag to enable experimental web platform features in tests. */
+    public static final String ENABLE_EXPERIMENTAL_WEB_PLATFORM_FEATURES =
+            "enable-experimental-web-platform-features";
+
     private static final String[] PERMISSION_URLS = {
             "http://www.google.com/",
             "http://www.youtube.com/",
@@ -621,12 +629,14 @@
         fetcher.setWebsitePreferenceBridgeForTesting(websitePreferenceBridge);
 
         String googleOrigin = "https://google.com";
-        ArrayList<Integer> permissionInfoTypes = new ArrayList<>(
-                Arrays.asList(PermissionInfo.Type.AUGMENTED_REALITY, PermissionInfo.Type.CAMERA,
-                        PermissionInfo.Type.CLIPBOARD, PermissionInfo.Type.GEOLOCATION,
-                        PermissionInfo.Type.MICROPHONE, PermissionInfo.Type.NOTIFICATION,
-                        PermissionInfo.Type.PROTECTED_MEDIA_IDENTIFIER, PermissionInfo.Type.SENSORS,
-                        PermissionInfo.Type.VIRTUAL_REALITY));
+        ArrayList<Integer> permissionInfoTypes = new ArrayList<>(Arrays.asList(
+                PermissionInfo.Type.AUGMENTED_REALITY, PermissionInfo.Type.CAMERA,
+                PermissionInfo.Type.CLIPBOARD, PermissionInfo.Type.GEOLOCATION,
+                PermissionInfo.Type.MICROPHONE, PermissionInfo.Type.NFC,
+                PermissionInfo.Type.NOTIFICATION, PermissionInfo.Type.PROTECTED_MEDIA_IDENTIFIER,
+                PermissionInfo.Type.SENSORS, PermissionInfo.Type.VIRTUAL_REALITY));
+        // MIDI is excluded from the above list because it does not have a top level category.
+        Assert.assertEquals(11, PermissionInfo.Type.NUM_ENTRIES);
 
         for (@PermissionInfo.Type int type : permissionInfoTypes) {
             PermissionInfo fakePermissionInfo =
@@ -656,9 +666,11 @@
         String preferenceSource = "preference";
         ArrayList<Integer> contentSettingExceptionTypes = new ArrayList<>(Arrays.asList(
                 ContentSettingException.Type.ADS, ContentSettingException.Type.AUTOMATIC_DOWNLOADS,
-                ContentSettingException.Type.BACKGROUND_SYNC, ContentSettingException.Type.COOKIE,
-                ContentSettingException.Type.JAVASCRIPT, ContentSettingException.Type.POPUP,
-                ContentSettingException.Type.SOUND));
+                ContentSettingException.Type.BACKGROUND_SYNC,
+                ContentSettingException.Type.BLUETOOTH_SCANNING,
+                ContentSettingException.Type.COOKIE, ContentSettingException.Type.JAVASCRIPT,
+                ContentSettingException.Type.POPUP, ContentSettingException.Type.SOUND));
+        Assert.assertEquals(8, ContentSettingException.Type.NUM_ENTRIES);
 
         for (@ContentSettingsType int type : contentSettingExceptionTypes) {
             @ContentSettingsType
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/AdaptiveToolbarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/AdaptiveToolbarTest.java
index 6d0595a..8da79d6 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/AdaptiveToolbarTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/top/AdaptiveToolbarTest.java
@@ -34,6 +34,7 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Restriction;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.compositor.layouts.Layout;
@@ -198,6 +199,7 @@
 
     @Test
     @MediumTest
+    @DisabledTest(message = "Failed on android-arm-stable-tests. crbug.com/1062634")
     // clang-format off
     @CommandLineFlags.Add({"enable-features=" + ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID +
             "<Study", "force-fieldtrials=Study/Group", NO_NEW_TAB_VARIATION_PARAMS})
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index 79b36b7f..1323f098 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-82.0.4085.16_rc-r1-merged.afdo.bz2
\ No newline at end of file
+chromeos-chrome-amd64-82.0.4085.17_rc-r1-merged.afdo.bz2
\ No newline at end of file
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 4c2282f..57db5ba 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5287,6 +5287,16 @@
         Remove suggestion from clipboard?
       </message>
       </if>
+      <if expr="use_titlecase">
+        <message name="IDS_CONTEXT_MENU_SHOW_FULL_URLS" desc="In Title Case: The text label of the omnibox context menu option to show full URLs">
+          Always Show Full URLs
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_CONTEXT_MENU_SHOW_FULL_URLS" desc="The text label of the omnibox context menu option to show full URLs">
+          Always show full URLs
+        </message>
+      </if>
 
       <!-- NTP -->
       <message name="IDS_GOOGLE_SEARCH_BOX_EMPTY_HINT" desc="The text displayed in the fakebox (on the New Tab page) when it is empty, and Google is the default search engine.">
diff --git a/chrome/app/generated_resources_grd/IDS_CONTEXT_MENU_SHOW_FULL_URLS.png.sha1 b/chrome/app/generated_resources_grd/IDS_CONTEXT_MENU_SHOW_FULL_URLS.png.sha1
new file mode 100644
index 0000000..d54a4b8
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_CONTEXT_MENU_SHOW_FULL_URLS.png.sha1
@@ -0,0 +1 @@
+a26b6bbe306759ceb8b5f6a6310bd05aec8701e4
\ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_hi.xtb b/chrome/app/resources/chromium_strings_hi.xtb
index c1f31d0..e2a6235b 100644
--- a/chrome/app/resources/chromium_strings_hi.xtb
+++ b/chrome/app/resources/chromium_strings_hi.xtb
@@ -41,6 +41,7 @@
 <translation id="2886012850691518054">वैकल्पिक: अपने आप इस्तेमाल के आंकड़े और खराबी रिपोर्ट Google को भेजकर Chrome को बेहतर बनाने में मदद करें.</translation>
 <translation id="2910007522516064972">&amp;क्रोमियम के बारे में</translation>
 <translation id="2977470724722393594">क्रोमियम अप टू डेट है</translation>
+<translation id="2983934633046890458">क्रोमियम, पासवर्ड में बदलाव करने की कोशिश कर रहा है.</translation>
 <translation id="3032787606318309379">क्रोमियम में जोड़ रहा है...</translation>
 <translation id="3068515742935458733">Google को क्रैश रिपोर्ट और <ph name="UMA_LINK" /> भेजकर क्रोमियम को बेहतर बनाने में मदद करें</translation>
 <translation id="3103660991484857065">इंस्‍टॉलर संगह को असंकुचित करने में विफल हुआ. कृपया क्रोमियम फिर से डाउनलोड करें.</translation>
@@ -105,6 +106,7 @@
 <translation id="5479196819031988440">क्रोमियम OS यह पेज नहीं खोल सकता.</translation>
 <translation id="5480860683791598150">इस साइट से आपकी जगह की जानकारी शेयर करने के लिए क्रोमियम को आपकी जगह की जानकारी का एक्सेस चाहिए</translation>
 <translation id="549669000822060376">कृपया क्रोमियम द्वारा नवीनतम सिस्टम अपडेट इंस्टॉल करने के दौरान प्रतीक्षा करें.</translation>
+<translation id="5496810170689441661">क्रोमियम, पासवर्ड कॉपी करने की कोशिश कर रहा है. इसकी अनुमति देने के लिए Windows का पासवर्ड डालें.</translation>
 <translation id="5623402015214259806">{0,plural, =0{क्रोमियम का एक अपडेट उपलब्ध है}=1{क्रोमियम का एक अपडेट उपलब्ध है}one{क्रोमियम का एक अपडेट # दिनों से उपलब्ध है}other{क्रोमियम का एक अपडेट # दिनों से उपलब्ध है}}</translation>
 <translation id="5631814766731275228">क्रोमियम पर नाम और तस्वीर</translation>
 <translation id="5634636535844844681">क्रोमियम के लिए Windows 7 या उसके बाद के वर्शन की आवश्यकता होती है.</translation>
diff --git a/chrome/app/resources/chromium_strings_ja.xtb b/chrome/app/resources/chromium_strings_ja.xtb
index ad99140..6c533ca 100644
--- a/chrome/app/resources/chromium_strings_ja.xtb
+++ b/chrome/app/resources/chromium_strings_ja.xtb
@@ -43,6 +43,7 @@
 <translation id="2886012850691518054">オプション: 使用状況データと障害レポートを Google に自動送信して Chromium の機能向上に役立てる。</translation>
 <translation id="2910007522516064972">Chromium について(&amp;C)</translation>
 <translation id="2977470724722393594">Chromium は最新版です</translation>
+<translation id="2983934633046890458">Chromium でパスワードを編集しようとしています。</translation>
 <translation id="3032706164202344641">Chromium でパスワードを確認できません。しばらくしてからもう一度お試しください。</translation>
 <translation id="3032787606318309379">Chromium に追加...</translation>
 <translation id="3068515742935458733">障害レポートと<ph name="UMA_LINK" />を Google に自動送信して Chromium の機能向上に役立てる</translation>
@@ -110,6 +111,7 @@
 <translation id="5479196819031988440">Chromium OS ではこのページを開けません。</translation>
 <translation id="5480860683791598150">このサイトで現在地を共有するには、Chromium で位置情報の使用を許可する必要があります</translation>
 <translation id="549669000822060376">Chromium は最新のシステム アップデートをインストールしています。しばらくお待ちください。</translation>
+<translation id="5496810170689441661">Chromium でパスワードを編集しようとしています。続行するには、Windows のパスワードを入力してください。</translation>
 <translation id="5623402015214259806">{0,plural, =0{Chromium のアップデートが利用可能です}=1{Chromium のアップデートが利用可能です}other{Chromium のアップデートが利用可能になってから # 日経過しています}}</translation>
 <translation id="5631814766731275228">Chromium の名前と画像</translation>
 <translation id="5634636535844844681">Chromium のご利用には Windows 7 以上が必要です。</translation>
diff --git a/chrome/app/resources/chromium_strings_te.xtb b/chrome/app/resources/chromium_strings_te.xtb
index 69a0799..0fb4fcb 100644
--- a/chrome/app/resources/chromium_strings_te.xtb
+++ b/chrome/app/resources/chromium_strings_te.xtb
@@ -43,6 +43,7 @@
 <translation id="2886012850691518054">ఐచ్ఛికం: Googleకు వినియోగ‌ గణాంకాలను, క్రాష్ నివేదికలను ఆటోమేటిక్‌గా పంపడం ద్వారా Chromiumను మరింత మెరుగుపరచడానికి సహాయం చేస్తుంది.</translation>
 <translation id="2910007522516064972">&amp;Chromium గురించి</translation>
 <translation id="2977470724722393594">Chromium తాజాగా ఉంది</translation>
+<translation id="2983934633046890458">Chromium పాస్‌వర్డ్‌లను ఎడిట్ చేయడానికి ప్రయత్నిస్తోంది.</translation>
 <translation id="3032706164202344641">Chromium మీ పాస్‌వర్డ్‌లను తనిఖీ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation>
 <translation id="3032787606318309379">Chromiumకి జోడిస్తోంది...</translation>
 <translation id="3068515742935458733">Googleకు వినియోగ గణాంకాలు, <ph name="UMA_LINK" />ను పంపడం ద్వారా Chromiumను మెరుగుపరచడంలో సహాయపడండి</translation>
@@ -108,6 +109,7 @@
 <translation id="5479196819031988440">Chromium OS ఈ పేజీని తెరవలేదు.</translation>
 <translation id="5480860683791598150">ఈ సైట్‌తో మీ స్థానాన్ని షేర్ చేయడానికి Chromiumకు మీ స్థాన యాక్సెస్ అవసరం</translation>
 <translation id="549669000822060376">దయచేసి Chromium తాజా సిస్టమ్ నవీకరణలను ఇన్‌స్టాల్ చేస్తున్నప్పుడు వేచి ఉండండి.</translation>
+<translation id="5496810170689441661">పాస్‌వర్డ్‌లను ఎడిట్ చేయడానికి Chromium ప్రయత్నిస్తోంది. దీన్ని అనుమతించడానికి మీ Windows పాస్‌వర్డ్‌ను టైప్ చేయండి.</translation>
 <translation id="5623402015214259806">{0,plural, =0{ఒక Chromium అప్‌డేట్ అందుబాటులో ఉంది}=1{ఒక Chromium అప్‌డేట్ అందుబాటులో ఉంది}other{ఒక Chromium అప్‌డేట్ # రోజులుగా అందుబాటులో ఉంది}}</translation>
 <translation id="5631814766731275228">Chromium పేరు మరియు చిత్రం</translation>
 <translation id="5634636535844844681">Chromiumకి Windows 7 లేదా అంతకంటే ఆధునికమైనది ఉండటం ఆవశ్యకం.</translation>
diff --git a/chrome/app/resources/chromium_strings_vi.xtb b/chrome/app/resources/chromium_strings_vi.xtb
index 583dc9e..da1109d 100644
--- a/chrome/app/resources/chromium_strings_vi.xtb
+++ b/chrome/app/resources/chromium_strings_vi.xtb
@@ -43,6 +43,7 @@
 <translation id="2886012850691518054">Tùy chọn: giúp cải thiện Chromium bằng cách tự động gửi thống kê sử dụng và báo cáo sự cố cho Google.</translation>
 <translation id="2910007522516064972">Giới thiệu về &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium đã được cập nhật</translation>
+<translation id="2983934633046890458">Chromium đang cố gắng chỉnh sửa mật khẩu.</translation>
 <translation id="3032706164202344641">Chromium không thể kiểm tra mật khẩu của bạn. Hãy thử lại sau.</translation>
 <translation id="3032787606318309379">Đang thêm vào Chromium...</translation>
 <translation id="3068515742935458733">Giúp cải thiện Chromium bằng cách gửi báo cáo sự cố và <ph name="UMA_LINK" /> tới Google</translation>
@@ -110,6 +111,7 @@
 <translation id="5479196819031988440">Chromium OS không thể mở trang này.</translation>
 <translation id="5480860683791598150">Chromium cần quyền truy cập vào vị trí của bạn để chia sẻ thông tin vị trí với trang web này</translation>
 <translation id="549669000822060376">Vui lòng đợi khi Chromium cài đặt các bản cập nhật hệ thống mới nhất.</translation>
+<translation id="5496810170689441661">Chromium đang cố gắng chỉnh sửa mật khẩu. Hãy nhập mật khẩu Windows của bạn để cho phép việc này.</translation>
 <translation id="5623402015214259806">{0,plural, =0{Đã có bản cập nhật Chromium}=1{Đã có bản cập nhật Chromium}other{Đã có bản cập nhật Chromium từ # ngày trước}}</translation>
 <translation id="5631814766731275228">Tên và ảnh trên Chromium</translation>
 <translation id="5634636535844844681">Chromium yêu cầu Windows 7 trở lên.</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index de42d60..d3627e2 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Laai op</translation>
 <translation id="1244265436519979884">Linux-terugstelling vind tans plaas</translation>
 <translation id="1244303850296295656">Uitbreidingfout</translation>
+<translation id="1246158006305844142">Jou programme en instellings sal op alle Chrome-bedryfstelseltoestelle waarop jy met jou Google-rekening aangemeld is, sinkroniseer. Gaan na <ph name="LINK_BEGIN" />Chrome-instellings<ph name="LINK_END" /> toe vir blaaiersinkroniseringopsies.</translation>
 <translation id="1246905108078336582">Verwyder voorstel van knipbord af?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> is geblokkeer omdat dit opgeskort is</translation>
 <translation id="1251366534849411931">Verwag beginkrulhakie: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Nee, dankie</translation>
 <translation id="1525740877599838384">Gebruik net Wi-Fi om ligging te bepaal</translation>
 <translation id="152629053603783244">Herbegin Linux</translation>
+<translation id="1526335046150927198">Aktiveer raakpaneelrolleesversnelling</translation>
 <translation id="1526560967942511387">Titellose dokument</translation>
 <translation id="1529891865407786369">Kragbron</translation>
 <translation id="1530838837447122178">Maak muis- en raakpaneeltoestelinstellings oop</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Netwerkverbinding is herstel</translation>
 <translation id="2727633948226935816">Moet my nie weer herinner nie</translation>
 <translation id="2727712005121231835">Werklike grootte</translation>
+<translation id="2729314457178420145">Vee ook blaaierdata uit (<ph name="URL" />), wat jou by Google.com kan afmeld. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Rugsteun tans Linux-programme en -lêers</translation>
 <translation id="273093730430620027">Hierdie bladsy gaan tans by jou kamera in.</translation>
 <translation id="2731392572903530958">Maak geslote venster weer oop</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Meer <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Webkoekies en ander web- en inpropdata</translation>
 <translation id="383891835335927981">Geen werwe is in- of uitgezoem nie</translation>
+<translation id="3839509547554145593">Aktiveer muisrolleesversnelling</translation>
 <translation id="3839516600093027468">Blokkeer <ph name="HOST" /> altyd om die knipbord te sien</translation>
 <translation id="3841964634449506551">Wagwoord is ongeldig</translation>
 <translation id="3842552989725514455">Serif-lettertipe</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Gekaste prente en lêers</translation>
 <translation id="4699357559218762027">(outomaties begin)</translation>
 <translation id="470074695271471509">Meld af om klaar te maak?</translation>
+<translation id="4701025263201366865">Oueraanmelding</translation>
 <translation id="4707302005824653064">Die bestuurder (<ph name="CUSTODIAN_EMAIL" />) kan gebruik en geskiedenis op chrome.com nagaan.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + gebruikersertifikaat</translation>
 <translation id="4708794300267213770">Wys sluitskerm wanneer dit uit slaap wakker word</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, soek met <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Voer die PIN vir jou sekuriteitsleutel in. As jy nie die PIN ken nie, sal jy die sekuriteitsleutel moet terugstel.</translation>
 <translation id="5139955368427980650">Maak oop</translation>
+<translation id="5142793792982256885">Raakpaneel se rolleesspoed</translation>
 <translation id="5142961317498132443">Stawing</translation>
 <translation id="5143374789336132547">Die uitbreiding "<ph name="EXTENSION_NAME" />" het verander watter bladsy gewys word wanneer jy die Tuis-knoppie klik.</translation>
 <translation id="5143712164865402236">Gaan by volskerm in</translation>
@@ -3645,6 +3651,7 @@
 <translation id="5901630391730855834">Geel</translation>
 <translation id="5906655207909574370">Amper op datum! Herbegin jou toestel om opdatering te voltooi.</translation>
 <translation id="5906732635754427568">Data wat met hierdie program geassosieer word, sal van hierdie toestel af verwyder word.</translation>
+<translation id="5908695239556627796">Muis se rolleesspoed</translation>
 <translation id="5908769186679515905">Verhinder werwe om Flash te laat loop</translation>
 <translation id="5910363049092958439">Stoor prent as …</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> is vanlyn</translation>
@@ -5092,6 +5099,7 @@
     <ph name="BEGIN_BOLD" />Let wel:<ph name="END_BOLD" /> Die stelsel sal tydens die proses herselflaai.</translation>
 <translation id="7828731929332799387">Dit sal alle webkoekies en werfdata uitvee wat in derdeparty-kontekste beskikbaar is. Wil jy voortgaan?</translation>
 <translation id="7829298379596169484">Gaan tans by oudio-invoer in</translation>
+<translation id="7829877209233347340">Vra 'n ouer om aan te meld om toestemming te gee om 'n skoolrekening by te voeg</translation>
 <translation id="7830594666202422257">Koppel aan Linux</translation>
 <translation id="7831491651892296503">Kon nie netwerk opstel nie</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">Kat</translation>
 <translation id="8808744862003883508">Jy kan al die uitbreidings wat in Chrome geïnstalleer is op hierdie bladsy sien.</translation>
 <translation id="8809147117840417135">Liggroenblou</translation>
+<translation id="8812593354822910461">Vee ook blaaierdata uit (<ph name="URL" />), wat jou by kan <ph name="DOMAIN" /> afmeld. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Kan nie by <ph name="USERNAME" /> aanmeld nie</translation>
 <translation id="8813811964357448561">vel papier</translation>
 <translation id="8813872945700551674">Kry 'n ouer om "<ph name="EXTENSION_NAME" />" goed te keur</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">Profielskepping geaktiveer</translation>
 <translation id="9203904171912129171">Kies 'n toestel</translation>
 <translation id="9203962528777363226">Die administrateur van hierdie toestel het die byvoeging van nuwe gebruikers gedeaktiveer</translation>
+<translation id="9209689095351280025">Werwe kan nie webkoekies gebruik wat jou oral op die web naspoor nie</translation>
 <translation id="9211177926627870898">Opdatering vereis</translation>
 <translation id="9214520840402538427">Oeps! Die inwyding van die installeringtydeienskappe het uitgetel. Kontak asseblief jou steundiensverteenwoordiger.</translation>
 <translation id="9214695392875603905">Kolwyntjie</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index daa9309..09e6314 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">ስቀል</translation>
 <translation id="1244265436519979884">Linux ወደነበረበት መመለስ አሁን በሂደት ላይ ነው</translation>
 <translation id="1244303850296295656">የቅጥያ ስህተት</translation>
+<translation id="1246158006305844142">የእርስዎ መተግበሪያዎች እና ቅንብሮች በGoogle መለያዎ በገቡባቸው ሁሉም የChrome OS መሣሪያዎች ላይ ይሰምራሉ። ለአሳሽ ስምረት አማራጮች ወደ <ph name="LINK_BEGIN" />የChrome ቅንብሮች<ph name="LINK_END" /> ይሂዱ።</translation>
 <translation id="1246905108078336582">የአስተያየት ጥቆማ ከቅንጥብ ሰሌዳ ይወገድ?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> የተቋረጠ ስለሆነ ታግዷል</translation>
 <translation id="1251366534849411931">የሚገመት ጠምዛዛ መያዣን መክፈቻ፦ <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">አይ፣ አመሰግናለሁ</translation>
 <translation id="1525740877599838384">አካባቢን ለመወሰን Wi-Fiን ብቻ ተጠቀም</translation>
 <translation id="152629053603783244">Linuxን ዳግም አስነሳ</translation>
+<translation id="1526335046150927198">የመዳሰሻ ሰሌዳ ሽብለላ ማፍጠኛን አንቃ</translation>
 <translation id="1526560967942511387">ርዕስ አልባ ሰነድ</translation>
 <translation id="1529891865407786369">የኃይል ምንጭ</translation>
 <translation id="1530838837447122178">የመዳፊት እና የመዳሰሻ መሣሪያ ቅንብሮችን ክፈት</translation>
@@ -1312,6 +1314,7 @@
 <translation id="2725200716980197196">የአውታረ መረብ ግንኙነት ወደነበረበት ተመልሷል</translation>
 <translation id="2727633948226935816">ዳግም አታስታውሰኝ</translation>
 <translation id="2727712005121231835">ትክክለኛ መጠን</translation>
+<translation id="2729314457178420145">እርስዎን ከGoogle.com ሊያስወጣዎት የሚችለውን የአሰሳ ውሂብ (<ph name="URL" />) በተጨማሪ ያጽዱ። <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">የLinux መተግበሪያዎችን እና ፋይሎችን በምትኬ ማስቀመጥ</translation>
 <translation id="273093730430620027">ይህ ገጽ ካሜራዎን እየደረሰበት ነው።</translation>
 <translation id="2731392572903530958">የተ&amp;ዘጋውን መስኮት ዳግም ክፈት</translation>
@@ -2163,6 +2166,7 @@
 <translation id="3838486795898716504">ተጨማሪ <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">ኩኪዎች እና የሌላ ጣቢያ እና ተሰኪ ውሂብ</translation>
 <translation id="383891835335927981">ምንም ጣቢያዎች አልጎሉም ወይም አላነሱም</translation>
+<translation id="3839509547554145593">የመዳፊት ሽብለላ ማፍጠኛን አንቃ</translation>
 <translation id="3839516600093027468"><ph name="HOST" /> የቅንጥብ ሰሌዳው እንዳይመለከት አግድ</translation>
 <translation id="3841964634449506551">የይለፍ ቃል ልክ አይደለም</translation>
 <translation id="3842552989725514455">ባለጭረት ቅርጸ-ቁምፊ</translation>
@@ -2772,6 +2776,7 @@
 <translation id="4699172675775169585">የተሸጎጡ ምስሎች እና ፋይሎች</translation>
 <translation id="4699357559218762027">(በራስ-ጀምሯል)</translation>
 <translation id="470074695271471509">ለመጨረስ ዘግተው ይውጡ?</translation>
+<translation id="4701025263201366865">የወላጆች መግቢያ</translation>
 <translation id="4707302005824653064">አጠቃቀም እና ታሪክ chrome.com ላይ በአቀናባሪው (<ph name="CUSTODIAN_EMAIL" />) ሊከለሱ ይችላሉ።</translation>
 <translation id="4707579418881001319">L2TP/IPsec + የተጠቃሚ እውቅና ማረጋገጫ</translation>
 <translation id="4708794300267213770">ከእንቅልፍ በመነሳት ጊዜ የማያ ገጽ መቆለፊያን አሳይ</translation>
@@ -3079,6 +3084,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />፣ <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> ፍለጋ</translation>
 <translation id="5139823398361067371">የደህንነት ቁልፍዎን ፒን ያስገቡ። ፒኑን የማያውቁት ከሆነ የደህንነት ቁልፉን ዳግም ማቀናበር አለብዎት።</translation>
 <translation id="5139955368427980650">&amp;ክፈት</translation>
+<translation id="5142793792982256885">የመዳሰሻ ሰሌዳ ሽብለላ ፍጥነት</translation>
 <translation id="5142961317498132443">ማረጋገጥ</translation>
 <translation id="5143374789336132547">ይህ «<ph name="EXTENSION_NAME" />» ቅጥያ የመነሻ አዝራሩን ጠቅ ሲያደርጉ የሚታየውን ገጽ ቀይሮታል።</translation>
 <translation id="5143712164865402236">ወደ ሙሉ ገጽ ዕይታ ግባ</translation>
@@ -3641,6 +3647,7 @@
 <translation id="5901630391730855834">ቢጫ</translation>
 <translation id="5906655207909574370">የተዘመነ ለመሆን ጥቂት ብቻ ቀርቷል! ዝማኔውን ለማጠናቀቅ መሣሪያዎን ዳግም ያስጀምሩት።</translation>
 <translation id="5906732635754427568">ከዚህ መተግበሪያ ጋር የተጎዳኘ ውሂብ ከዚህ መሣሪያ ላይ ይወገዳል።</translation>
+<translation id="5908695239556627796">የመዳፊት ሽብለላ ፍጥነት</translation>
 <translation id="5908769186679515905">ጣቢያዎች Flashን እንዳያሄዱ አግድ</translation>
 <translation id="5910363049092958439">ምስል አስ&amp;ቀምጥ እንደ…</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ከመስመር ውጭ ነው</translation>
@@ -5088,6 +5095,7 @@
     <ph name="BEGIN_BOLD" />ማስታወሻ፦<ph name="END_BOLD" />  ስርዓቱ በሂደቱ ጊዜ ዳግም ይነሳል።</translation>
 <translation id="7828731929332799387">ይህ በሦስተኛ ወገን ዓውደ አገባቦች ውስጥ የሚገኙ ሁሉንም ኩኪዎች እና የጣቢያ ውሂብ ይሰርዛል። መቀጠል ይፈልጋሉ?</translation>
 <translation id="7829298379596169484">የኦዲዮ ግብዓትን በመድረስ ላይ</translation>
+<translation id="7829877209233347340">አንድ ወላጅ የትምህርት ቤት መለያ ለማከል ፈቃድ እንዲሰጡ ይጠይቋቸው</translation>
 <translation id="7830594666202422257">ከLinux ጋር ተገናኝ</translation>
 <translation id="7831491651892296503">አውታረ መረብን ማዋቀር ላይ ስህተት</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5846,6 +5854,7 @@
 <translation id="8808686172382650546">ድመት</translation>
 <translation id="8808744862003883508">በዚህ ገጽ ላይ፣ ሁሉንም በChrome ውስጥ የተጫኑ ቅጥያዎች ማየት ይችላሉ።</translation>
 <translation id="8809147117840417135">ፈካ ያለ መካከለኛ አረንጓዴ</translation>
+<translation id="8812593354822910461">እርስዎን ከ<ph name="DOMAIN" /> ሊያስወጣዎት የሚችለውን የአሰሳ ውሂብ (<ph name="URL" />) በተጨማሪ ያጽዱ። <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">ወደ <ph name="USERNAME" /> መግባት አልተቻለም</translation>
 <translation id="8813811964357448561">የወረቀት ሉክ</translation>
 <translation id="8813872945700551674">አንድ ወላጅ «<ph name="EXTENSION_NAME" />»ን እንዲያጸድቅ ያድርጉ</translation>
@@ -6135,6 +6144,7 @@
 <translation id="9203398526606335860">&amp;መገለጫ መስራት ነቅቷል</translation>
 <translation id="9203904171912129171">መሣሪያ ይምረጡ</translation>
 <translation id="9203962528777363226">የዚህ መሣሪያ አስተዳዳሪ አዲስ ተጠቃሚዎች እንዳይታከሉ አሰናክሏል</translation>
+<translation id="9209689095351280025">ጣቢያዎች እርስዎን በመላ ድር ላይ የሚከታተሉ ኩኪዎችን መጠቀም አይችሉም</translation>
 <translation id="9211177926627870898">ዝማኔ ያስፈልጋል</translation>
 <translation id="9214520840402538427">ውይ!  የጭነት ጊዜ መገለጫ ባህሪያት ጊዜ አልፎባቸዋል።  እባክዎ የድጋፍ ተወካይዎን ያግኙ።</translation>
 <translation id="9214695392875603905">ዘቢብ ኬክ</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index fe2e4b2..87eb643 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Качване</translation>
 <translation id="1244265436519979884">В момента се извършва възстановяване на Linux</translation>
 <translation id="1244303850296295656">Грешка в разширението</translation>
+<translation id="1246158006305844142">Приложенията и настройките ви ще се синхронизират с всички устройства с Chrome OS, в които сте влезли в профила си в Google. За да намерите опциите за синхронизиране на браузъра, отворете <ph name="LINK_BEGIN" />настройките на Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Искате ли да премахнете предложението от буферната памет?</translation>
 <translation id="1249643471736608405">Приставката <ph name="PLUGIN_NAME" /> бе блокирана, тъй като е оттеглена</translation>
 <translation id="1251366534849411931">Очаква се отваряща фигурна скоба: <ph name="ERROR_LINE" /></translation>
@@ -388,6 +389,7 @@
 <translation id="1524563461097350801">Не, благодаря</translation>
 <translation id="1525740877599838384">Определяне на местоположението само посредством Wi-Fi</translation>
 <translation id="152629053603783244">Рестартиране на Linux</translation>
+<translation id="1526335046150927198">Активиране на ускорено превъртане със сензорния панел</translation>
 <translation id="1526560967942511387">Неозаглавен документ</translation>
 <translation id="1529891865407786369">Източник на захранване</translation>
 <translation id="1530838837447122178">Отваряне на настройките за мишката и сензорния панел</translation>
@@ -1310,6 +1312,7 @@
 <translation id="2725200716980197196">Връзката с мрежата е възстановена</translation>
 <translation id="2727633948226935816">Без повторно напомняне</translation>
 <translation id="2727712005121231835">Действителен размер</translation>
+<translation id="2729314457178420145">Също така изчистване на данните за сърфирането (<ph name="URL" />), при което може да бъде прекратена сесията ви в Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Създава се резервно копие на приложенията и файловете под Linux</translation>
 <translation id="273093730430620027">Тази страница осъществява достъп до камерата ви.</translation>
 <translation id="2731392572903530958">По&amp;вторно отваряне на затворения прозорец</translation>
@@ -2162,6 +2165,7 @@
 <translation id="3838486795898716504">Още от „<ph name="PAGE_TITLE" />“</translation>
 <translation id="3838543471119263078">„Бисквитки“ и други данни за сайтове и приставки</translation>
 <translation id="383891835335927981">Няма сайтове с увеличен или намален мащаб</translation>
+<translation id="3839509547554145593">Активиране на ускорено превъртане с мишката</translation>
 <translation id="3839516600093027468">Забраняване винаги на <ph name="HOST" /> да преглежда буферната памет</translation>
 <translation id="3841964634449506551">Паролата е невалидна</translation>
 <translation id="3842552989725514455">Серифен шрифт</translation>
@@ -2774,6 +2778,7 @@
 <translation id="4699172675775169585">Кеширани изображения и файлове</translation>
 <translation id="4699357559218762027">(автоматично стартирано)</translation>
 <translation id="470074695271471509">Искате ли да излезете от профила, за да завършите процеса?</translation>
+<translation id="4701025263201366865">Влизане в профила на родител</translation>
 <translation id="4707302005824653064">Мениджърът (<ph name="CUSTODIAN_EMAIL" />) може да преглежда данните за употребата и историята на адрес chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec с потребителски сертификат</translation>
 <translation id="4708794300267213770">Показване на заключения екран при излизане от спящ режим</translation>
@@ -3081,6 +3086,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, търсене с(ъс) <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Въведете ПИН кода за ключа си за сигурност. Ако не го знаете, трябва да нулирате ключа за сигурност.</translation>
 <translation id="5139955368427980650">&amp;Отваряне</translation>
+<translation id="5142793792982256885">Скорост на превъртане със сензорния панел</translation>
 <translation id="5142961317498132443">Удостоверяване</translation>
 <translation id="5143374789336132547">Разширението „<ph name="EXTENSION_NAME" />“ промени страницата, която се показва при кликване върху бутона „Начална страница“.</translation>
 <translation id="5143712164865402236">Вход за цял екран</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">жълто</translation>
 <translation id="5906655207909574370">Актуализирането почти завърши! Остава само да рестартирате устройството си.</translation>
 <translation id="5906732635754427568">Данните, свързани с това приложение, ще бъдат премахнати от устройството.</translation>
+<translation id="5908695239556627796">Скорост на превъртане с мишката</translation>
 <translation id="5908769186679515905">Блокиране на изпълняването на Flash от сайтове</translation>
 <translation id="5910363049092958439">&amp;Запазване на изображението като...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> е офлайн</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Забележка:<ph name="END_BOLD" />  Системата ще се рестартира по време на процеса.</translation>
 <translation id="7828731929332799387">Така ще бъдат изтрити всички „бисквитки“ и данни за сайтове, налични в контексти на трети страни. Искате ли да продължите?</translation>
 <translation id="7829298379596169484">Осъществява се достъп до аудиовхода</translation>
+<translation id="7829877209233347340">Поискайте от родител да влезе в профила си, за да разреши добавянето на училищен профил</translation>
 <translation id="7830594666202422257">Свързване с Linux</translation>
 <translation id="7831491651892296503">Грешка при конфигурирането на мрежата</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">Котка</translation>
 <translation id="8808744862003883508">На тази страница можете да видите всички разширения, инсталирани в Chrome.</translation>
 <translation id="8809147117840417135">Светло синьо-зелено</translation>
+<translation id="8812593354822910461">Също така изчистване на данните за сърфирането (<ph name="URL" />), при което ще бъде прекратена сесията ви в(ъв) <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Не мога да вляза в профила <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">лист хартия</translation>
 <translation id="8813872945700551674">Помолете някой от родителите си да одобри „<ph name="EXTENSION_NAME" />“</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">&amp;Профилирането е активирано</translation>
 <translation id="9203904171912129171">Избор на устройство</translation>
 <translation id="9203962528777363226">Администраторът на това устройство е деактивирал добавянето на нови потребители</translation>
+<translation id="9209689095351280025">Сайтовете не могат да използват „бисквитки“, които ви следят в мрежата</translation>
 <translation id="9211177926627870898">Изисква се актуализация</translation>
 <translation id="9214520840402538427">Ами сега!  Времето за изчакване на инициализирането на атрибутите за времето за инсталиране изтече.  Моля, свържете се с представител на екипа си за поддръжка.</translation>
 <translation id="9214695392875603905">Кексче</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 374a2e8..040cfb6 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -521,7 +521,7 @@
 <translation id="1697686431566694143">ফাইল এডিট করতে পারবে</translation>
 <translation id="1698122934742150150">শুধুমাত্র বর্তমান ছদ্মবেশী সেশন</translation>
 <translation id="1698650002254827833">সেই সমস্ত অ্যাপের তালিকা যা লোড করা যাবে না। আবার চেষ্টা করুন।</translation>
-<translation id="1700079447639026019">এমন সাইট যা কখনও কুকি ব্যবহার করে</translation>
+<translation id="1700079447639026019">এমন সাইট যা কখনও কুকি ব্যবহার করে না</translation>
 <translation id="1701062906490865540">এই ব্যক্তিকে সরান</translation>
 <translation id="1703331064825191675">আপনার পাসওয়ার্ড সম্পর্কে কখনও চিন্তা করবেন না</translation>
 <translation id="1704970325597567340"><ph name="DATE" />-তে নিরাপত্তা সংক্রান্ত পরীক্ষা চালানো হয়েছে</translation>
@@ -3171,7 +3171,7 @@
 <translation id="5275352920323889391">কুকুর</translation>
 <translation id="527605982717517565">সর্বদা <ph name="HOST" />-এ জাভাস্ক্রিপ্ট মঞ্জুর করুন</translation>
 <translation id="5280174558369304332">এক্সটেনশনটি সরিয়ে দেওয়া হবে:</translation>
-<translation id="5280243692621919988">কুকি এবং সাইটের ডেটা মুছে দেয় যখন আপনি উইন্ডো বন্ধ করে দেন</translation>
+<translation id="5280243692621919988">আপনি উইন্ডো বন্ধ করে দিলে কুকি এবং সাইটের ডেটা মুছে দেয়</translation>
 <translation id="5280426389926346830">শর্টকাট তৈরি করবেন?</translation>
 <translation id="528208740344463258">Android অ্যাপ ডাউনলোড এবং ব্যবহার করার জন্য প্রথমে আপনাকে এই প্রয়োজনীয় আপডেটটি ইনস্টল করা করতে হবে। আপনার <ph name="DEVICE_TYPE" /> আপডেট হওয়ার সময়, আপনি এটি ব্যবহার করতে পারবেন না। ইনস্টলেশন শেষ হওয়ার পরে, আপনার <ph name="DEVICE_TYPE" /> আবার চালু করা হবে।</translation>
 <translation id="5282733140964383898">‘ট্র্যাক করবেন না’ চালু করার মানে হল যে আপনার ব্রাউজিং ট্র্যাফিকের সাথে একটি অনুরোধ অন্তর্ভুক্ত করা হবে। একটি ওয়েবসাইট অনুরোধে সাড়া দেবে কিনা এবং কিভাবে অনুরোধটিকে ব্যখ্যা করে তার উপর যেকোনো এফেক্ট নির্ভর করে। উদাহরণস্বরূপ, কিছু ওয়েবসাইট আপনার ভিজিট করা অন্যান্য ওয়েবসাইটগুলির উপর ভিত্তি না করে বিজ্ঞাপনগুলি দেখানোর মাধ্যমে এই অনুরোধটিতে প্রতিক্রিয়া জানাতে পারে। এমনও অনেক ওয়েবসাইট রয়েছে যা তা সত্বেও আপনার ব্রাউজিং ডেটা সংগ্রহ এবং ব্যবহার করবে - উদাহরণস্বরূপ, তাদের ওয়েবসাইটগুলির নিরাপত্তা ব্যবস্থার উন্নতি ঘটাতে, সামগ্রী, পরিষেবা, বিজ্ঞাপন এবং প্রস্তাবগুলি সরবরাহ করতে এবং রিপোর্টের পরিসংখ্যান তৈরি করতে। <ph name="BEGIN_LINK" />আরো জানুন<ph name="END_LINK" /></translation>
@@ -5697,7 +5697,7 @@
 <translation id="8643443571868262066"><ph name="FILE_NAME" /> বিপজ্জনক হতে পারে। স্ক্যান করার জন্য Google-এর উন্নত সুরক্ষা প্রোগ্রামে পাঠাবেন?</translation>
 <translation id="8644655801811752511">এই নিরাপত্তা কী রিসেট করা যাবে না। কী লেখার পরেই সেটি রিসেট করার চেষ্টা করুন।</translation>
 <translation id="8645354835496065562">সেন্সর অ্যাক্সেস করার অনুমতি চালু রাখুন</translation>
-<translation id="8645920082661222035">কোনও ক্ষতিকারক ঘটনা ঘটলে সেটি অনুমান করে আপনাকে সতর্ক করা হয়</translation>
+<translation id="8645920082661222035">ক্ষতিকারক কিছু হতে পারে মনে হলে তা আগে থেকে অনুমান করে আপনাকে সতর্ক করে</translation>
 <translation id="8647834505253004544">ওয়েব ঠিকানাটি ভুল</translation>
 <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> অথবা <ph name="RE_SCAN_LINK" /></translation>
 <translation id="8650543407998814195">যদিও পুরনো প্রোফাইলটি আপনি আর অ্যাক্সেস করতে পারবেন না, আপনি সেটি সরিয়ে দিতে পারেন।</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 6207bba0..7f584e0 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Otpremi</translation>
 <translation id="1244265436519979884">Vraćanje Linuxa je trenutno u toku</translation>
 <translation id="1244303850296295656">Greška ekstenzije</translation>
+<translation id="1246158006305844142">Vaše aplikacije i postavke će se sinhronizirati na svim Chrome OS uređajima na kojima ste se prijavili putem Google računa. Za opcije sinhronizacije preglednika, idite na <ph name="LINK_BEGIN" />postavke Chromea<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Ukloniti prijedlog iz međumemorije?</translation>
 <translation id="1249643471736608405">Dodatak <ph name="PLUGIN_NAME" /> je blokiran jer je zastario</translation>
 <translation id="1251366534849411931">Očekivana početna vitičasta zagrada: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Ne, hvala</translation>
 <translation id="1525740877599838384">Za određivanje lokacije koristi isključivo WiFi</translation>
 <translation id="152629053603783244">Ponovo pokrenite Linux</translation>
+<translation id="1526335046150927198">Uključi ubrzanje klizanja po dodirnoj podlozi</translation>
 <translation id="1526560967942511387">Dokument bez naslova</translation>
 <translation id="1529891865407786369">Izvor napajanja</translation>
 <translation id="1530838837447122178">Otvori postavke uređaja miša i dodirne podloge</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Veza s mrežom ponovno je uspostavljena</translation>
 <translation id="2727633948226935816">Ne podsjećaj me ponovo</translation>
 <translation id="2727712005121231835">Stvarna veličina</translation>
+<translation id="2729314457178420145">Također obrišite podatke pregledanja (<ph name="URL" />), što vas može odjaviti s domene Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Kreiranje sigurnosne kopije Linux aplikacija i fajlova</translation>
 <translation id="273093730430620027">Ova stranica pristupa vašoj kameri.</translation>
 <translation id="2731392572903530958">P&amp;onovo otvori zatvoreni prozor</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Više: <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Kolačići i drugi podaci web lokacije i dodataka</translation>
 <translation id="383891835335927981">Nijedna web lokacija nije uvećana ili umanjena</translation>
+<translation id="3839509547554145593">Omogući ubrzanje klizanja miša</translation>
 <translation id="3839516600093027468">Uvijek blokiraj pristup međumemoriji web lokaciji <ph name="HOST" /></translation>
 <translation id="3841964634449506551">Nevažeća lozinka</translation>
 <translation id="3842552989725514455">Serifni font</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Slike i fajlovi u keš memoriji</translation>
 <translation id="4699357559218762027">(pokrenuto automatski)</translation>
 <translation id="470074695271471509">Želite se odjaviti da završite?</translation>
+<translation id="4701025263201366865">Prijavljivanje roditelja</translation>
 <translation id="4707302005824653064">Upravitelj (<ph name="CUSTODIAN_EMAIL" />) može pregledati upotrebu i povijest na adresi chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + potvrda korisnika</translation>
 <translation id="4708794300267213770">Prikaži zaključan zaslon prilikom vraćanja iz mirovanja</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> pretraživanje</translation>
 <translation id="5139823398361067371">Unesite PIN za sigurnosni ključ. Ako ne znate PIN, morat ćete ponovo postaviti sigurnosni ključ.</translation>
 <translation id="5139955368427980650">&amp;Otvori</translation>
+<translation id="5142793792982256885">Brzina klizanja po dodirnoj podlozi</translation>
 <translation id="5142961317498132443">Autentifikacija</translation>
 <translation id="5143374789336132547">Ekstenzija "<ph name="EXTENSION_NAME" />" je promijenila stranicu koja se prikazuje kada kliknete dugme Početna stranica.</translation>
 <translation id="5143712164865402236">Uđi u prikaz cijelog ekrana</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Žuta</translation>
 <translation id="5906655207909574370">Još malo pa je ažurirano! Ponovo pokrenite uređaj da završite ažuriranje.</translation>
 <translation id="5906732635754427568">Podaci koji su povezani s ovom aplikacijom bit će uklonjeni s ovog uređaja.</translation>
+<translation id="5908695239556627796">Brzina klizanja miša</translation>
 <translation id="5908769186679515905">Blokiraj pokretanje Flasha na web lokacijama</translation>
 <translation id="5910363049092958439">Sa&amp;čuvaj sliku kao…</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> je van mreže</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Napomena:<ph name="END_BOLD" />  Sistem će se ponovo pokrenuti za vrijeme ovog postupka.</translation>
 <translation id="7828731929332799387">Ovim će se obrisati svi kolačići i podaci o web lokacijama koji su dostupni u kontekstima treće strane. Želite li nastaviti?</translation>
 <translation id="7829298379596169484">Pristupanje audioulazu</translation>
+<translation id="7829877209233347340">Pitaj roditelja da se prijavi kako bi dodijelio odobrenje za dodavanje školskog računa</translation>
 <translation id="7830594666202422257">Poveži na Linux</translation>
 <translation id="7831491651892296503">Greška prilikom konfiguriranja mreže</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">Mačka</translation>
 <translation id="8808744862003883508">Na ovoj stranici možete vidjeti sve ekstenzije koje su instalirane na Chromeu.</translation>
 <translation id="8809147117840417135">Svijetlotirkizna</translation>
+<translation id="8812593354822910461">Također obrišite podatke pregledanja (<ph name="URL" />), što vas može odjaviti s domene <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Nije se moguće prijaviti na <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">list papira</translation>
 <translation id="8813872945700551674">Zatraži od roditelja da odobri ekstenziju "<ph name="EXTENSION_NAME" />"</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">&amp;Profiliranje je omogućeno</translation>
 <translation id="9203904171912129171">Odaberite uređaj</translation>
 <translation id="9203962528777363226">Administrator ovog uređaja je onemogućio dodavanje novih korisnika</translation>
+<translation id="9209689095351280025">Web lokacije ne mogu koristiti kolačiće koji vas prate na webu</translation>
 <translation id="9211177926627870898">Potrebno je ažuriranje</translation>
 <translation id="9214520840402538427">Ups!  Pokretanje atributa za vrijeme instalacije je isteklo.  Obratite se predstavniku za podršku.</translation>
 <translation id="9214695392875603905">Kolačić</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 2ca6d70c..5ca33c4 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Penja</translation>
 <translation id="1244265436519979884">Hi ha una restauració de Linux en curs</translation>
 <translation id="1244303850296295656">Error d'extensió</translation>
+<translation id="1246158006305844142">Les teves aplicacions i opcions de configuració se sincronitzaran en tots els dispositius amb Chrome OS en què hagis iniciat la sessió amb el teu Compte de Google. Per accedir a les opcions de sincronització del navegador, ves a la <ph name="LINK_BEGIN" />configuració de Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Vols suprimir el suggeriment del porta-retalls?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> s'ha bloquejat perquè està obsolet</translation>
 <translation id="1251366534849411931">Hi ha d'haver una clau d'obertura: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">No, gràcies</translation>
 <translation id="1525740877599838384">Utilitza només una xarxa Wi-Fi per determinar la ubicació</translation>
 <translation id="152629053603783244">Reinicia Linux</translation>
+<translation id="1526335046150927198">Activa l'acceleració del desplaçament del ratolí tàctil</translation>
 <translation id="1526560967942511387">Document sense títol</translation>
 <translation id="1529891865407786369">Font d'alimentació</translation>
 <translation id="1530838837447122178">Obre la configuració del ratolí i del ratolí tàctil</translation>
@@ -1312,6 +1314,7 @@
 <translation id="2725200716980197196">S'ha restablert la connectivitat de la xarxa</translation>
 <translation id="2727633948226935816">No m'ho tornis a recordar</translation>
 <translation id="2727712005121231835">Mida real</translation>
+<translation id="2729314457178420145">Esborra també les dades de navegació (<ph name="URL" />). Pot ser que, en fer-ho, se't tanqui la sessió de Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">S'està fent una còpia de seguretat de les aplicacions i dels fitxers de Linux</translation>
 <translation id="273093730430620027">Aquesta pàgina té accés a la càmera.</translation>
 <translation id="2731392572903530958">T&amp;orna a obrir la finestra tancada</translation>
@@ -2162,6 +2165,7 @@
 <translation id="3838486795898716504">Més <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Galetes i altres dades de llocs i de connectors</translation>
 <translation id="383891835335927981">No s'ha ampliat ni reduït cap lloc</translation>
+<translation id="3839509547554145593">Activa l'acceleració del desplaçament del ratolí tàctil</translation>
 <translation id="3839516600093027468">No permetis mai que <ph name="HOST" /> vegi el porta-retalls</translation>
 <translation id="3841964634449506551">La contrasenya no és vàlida</translation>
 <translation id="3842552989725514455">Tipus de lletra Serif</translation>
@@ -2772,6 +2776,7 @@
 <translation id="4699172675775169585">Imatges i fitxers desats a la memòria cau</translation>
 <translation id="4699357559218762027">(inici automàtic)</translation>
 <translation id="470074695271471509">Vols tancar la sessió per acabar?</translation>
+<translation id="4701025263201366865">Inici de sessió dels pares</translation>
 <translation id="4707302005824653064">El gestor (<ph name="CUSTODIAN_EMAIL" />) pot revisar-ne l'ús i l'historial a chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + certificat d'usuari</translation>
 <translation id="4708794300267213770">Mostra la pantalla de bloqueig en reactivar el dispositiu</translation>
@@ -3079,6 +3084,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />; cerca-ho a <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Introdueix el PIN de la clau de seguretat. Si no el saps, hauràs de restablir la clau.</translation>
 <translation id="5139955368427980650">&amp;Obre</translation>
+<translation id="5142793792982256885">Velocitat de desplaçament del ratolí tàctil</translation>
 <translation id="5142961317498132443">Autenticació</translation>
 <translation id="5143374789336132547">L'extensió <ph name="EXTENSION_NAME" /> ha canviat la pàgina que es mostra quan feu clic al botó Pàgina d'inici.</translation>
 <translation id="5143712164865402236">Passa a pantalla completa</translation>
@@ -3643,6 +3649,7 @@
 <translation id="5901630391730855834">Groc</translation>
 <translation id="5906655207909574370">Gairebé has acabat amb l'actualització. Reinicia el dispositiu per completar-la.</translation>
 <translation id="5906732635754427568">Les dades associades a aquesta aplicació se suprimiran del dispositiu.</translation>
+<translation id="5908695239556627796">Velocitat de desplaçament del ratolí</translation>
 <translation id="5908769186679515905">Impedeix que els llocs executin Flash</translation>
 <translation id="5910363049092958439">De&amp;sa la imatge com a...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> no té connexió</translation>
@@ -5090,6 +5097,7 @@
     <ph name="BEGIN_BOLD" />Nota<ph name="END_BOLD" />: el sistema es reiniciarà durant el procés.</translation>
 <translation id="7828731929332799387">Se suprimiran totes les galetes i les dades de llocs web disponibles en contexts de tercers. Vols continuar?</translation>
 <translation id="7829298379596169484">S'està accedint a l'entrada d'àudio</translation>
+<translation id="7829877209233347340">Demana als pares que iniciïn la sessió per atorgar-te permís per afegir un compte de centre educatiu.</translation>
 <translation id="7830594666202422257">Connecta a Linux</translation>
 <translation id="7831491651892296503">S'ha produït un error en configurar la xarxa</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5844,6 +5852,7 @@
 <translation id="8808686172382650546">Gat</translation>
 <translation id="8808744862003883508">En aquesta pàgina pots veure totes les extensions instal·lades a Chrome.</translation>
 <translation id="8809147117840417135">Verd blavós clar</translation>
+<translation id="8812593354822910461">Esborra també les dades de navegació (<ph name="URL" />). En fer-ho, se't tancarà la sessió del domini <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">No es pot iniciar la sessió a <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">full de paper</translation>
 <translation id="8813872945700551674">Demana als teus pares que aprovin "<ph name="EXTENSION_NAME" />"</translation>
@@ -6133,6 +6142,7 @@
 <translation id="9203398526606335860">Creació de &amp;perfils activada</translation>
 <translation id="9203904171912129171">Selecciona un dispositiu</translation>
 <translation id="9203962528777363226">L'administrador d'aquest dispositiu ha desactivat la possibilitat d'afegir-hi usuaris nous</translation>
+<translation id="9209689095351280025">Els llocs web no poden utilitzar galetes que facin un seguiment de la teva activitat al web</translation>
 <translation id="9211177926627870898">Es necessita una actualització</translation>
 <translation id="9214520840402538427">La inicialització dels atributs en temps d'instal·lació ha esgotat el temps d'espera. Contacteu amb el representant d'assistència.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 38769726..a83566c 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Upload</translation>
 <translation id="1244265436519979884">Linux er i øjeblikket ved at blive gendannet</translation>
 <translation id="1244303850296295656">Udvidelsesfejl</translation>
+<translation id="1246158006305844142">Dine apps og indstillinger synkroniseres på tværs af alle de Chrome OS-enheder, hvor du er logget ind med din Google-konto. Du kan se muligheder for synkronisering af browseren i <ph name="LINK_BEGIN" />indstillingerne for Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Vil du fjerne forslaget fra udklipsholderen?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> blev blokeret, da pluginnet er udfaset</translation>
 <translation id="1251366534849411931">Forventet krøllet startparentes: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Nej tak</translation>
 <translation id="1525740877599838384">Brug kun Wi-Fi til at fastslå placeringen</translation>
 <translation id="152629053603783244">Genstart Linux</translation>
+<translation id="1526335046150927198">Aktivér acceleration af rulning på touchplade</translation>
 <translation id="1526560967942511387">Unavngivet dokument</translation>
 <translation id="1529891865407786369">Strømkilde</translation>
 <translation id="1530838837447122178">Åbn indstillingerne for mus og touchplade på enheden</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Forbindelsen til netværket er genoprettet</translation>
 <translation id="2727633948226935816">Påmind mig ikke igen</translation>
 <translation id="2727712005121231835">Faktisk størrelse</translation>
+<translation id="2729314457178420145">Ryd også browserdata (<ph name="URL" />), hvilket muligvis logger dig ud af Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Sikkerhedskopierer Linux-apps og -filer</translation>
 <translation id="273093730430620027">Denne side har adgang til dit kamera.</translation>
 <translation id="2731392572903530958">G&amp;enåbn lukket vindue</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Flere <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Cookies og andre website- og plugindata</translation>
 <translation id="383891835335927981">Der er ikke zoomet ind eller ud på nogen websites</translation>
+<translation id="3839509547554145593">Aktivér acceleration af rulning på mus</translation>
 <translation id="3839516600093027468">Bloker altid <ph name="HOST" /> fra at se udklipsholderen</translation>
 <translation id="3841964634449506551">Adgangskoden er ugyldig</translation>
 <translation id="3842552989725514455">Serif-skrifttype</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Billeder og filer, der er gemt i cache</translation>
 <translation id="4699357559218762027">(automatisk opstart)</translation>
 <translation id="470074695271471509">Vil du logge ud for at afslutte?</translation>
+<translation id="4701025263201366865">Forældrelogin</translation>
 <translation id="4707302005824653064">Forbrug og historik kan gennemgås af administratoren (<ph name="CUSTODIAN_EMAIL" />) på chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + brugercertifikat</translation>
 <translation id="4708794300267213770">Vis låseskærmen, når enheden vågner fra dvale</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Søgning</translation>
 <translation id="5139823398361067371">Angiv pinkoden til din sikkerhedsnøgle. Hvis du ikke kender pinkoden, skal du nulstille sikkerhedsnøglen.</translation>
 <translation id="5139955368427980650">&amp;Åbn</translation>
+<translation id="5142793792982256885">Hastighed for rulning på touchplade</translation>
 <translation id="5142961317498132443">Godkendelse</translation>
 <translation id="5143374789336132547">Udvidelsen <ph name="EXTENSION_NAME" /> har ændret, hvilken side der vises, når du klikker på knappen Startside.</translation>
 <translation id="5143712164865402236">Åbn Fuld skærm</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Gul</translation>
 <translation id="5906655207909574370">Næsten opdateret. Genstart din enhed for at afslutte opdateringen.</translation>
 <translation id="5906732635754427568">Data, der er knyttet til denne app, bliver fjernet fra enheden.</translation>
+<translation id="5908695239556627796">Hastighed for rulning på mus</translation>
 <translation id="5908769186679515905">Bloker websites fra at køre Flash</translation>
 <translation id="5910363049092958439">Ge&amp;m billede som...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> er offline</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Bemærk!<ph name="END_BOLD" />  Systemet genstarter under processen.</translation>
 <translation id="7828731929332799387">Dette sletter alle cookies og websitedata, der er tilgængelig i tredjepartssammenhænge. Vil du fortsætte?</translation>
 <translation id="7829298379596169484">Åbner lydinput</translation>
+<translation id="7829877209233347340">Bed din forælder om at logge ind og give tilladelse til, at skolekontoen tilføjes</translation>
 <translation id="7830594666202422257">Opret forbindelse til Linux</translation>
 <translation id="7831491651892296503">Der opstod en fejl under konfigurationen af netværket</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5846,6 +5854,7 @@
 <translation id="8808686172382650546">Kat</translation>
 <translation id="8808744862003883508">På denne side kan du se alle de udvidelser, der er installeret i Chrome.</translation>
 <translation id="8809147117840417135">Lys turkis</translation>
+<translation id="8812593354822910461">Ryd også browserdata (<ph name="URL" />), hvilket muligvis logger dig ud af <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Det var ikke muligt at logge ind på <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">papirark</translation>
 <translation id="8813872945700551674">Bed din forælder om at godkende "<ph name="EXTENSION_NAME" />"</translation>
@@ -6135,6 +6144,7 @@
 <translation id="9203398526606335860">&amp;Profilering aktiveret</translation>
 <translation id="9203904171912129171">Vælg en enhed</translation>
 <translation id="9203962528777363226">Administratoren af ​​denne enhed har deaktiveret tilføjelse af nye brugere</translation>
+<translation id="9209689095351280025">Websites kan ikke bruge cookies, der sporer din aktivitet på nettet</translation>
 <translation id="9211177926627870898">Opdatering er påkrævet</translation>
 <translation id="9214520840402538427">Ups! Initialiseringen af ​​installationstidens attributter har fået timeout. Kontakt en supportmedarbejder.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 6a9162c..fad13683 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Μεταφόρτωση</translation>
 <translation id="1244265436519979884">Η επαναφορά Linux βρίσκεται σε εξέλιξη.</translation>
 <translation id="1244303850296295656">Σφάλμα επέκτασης</translation>
+<translation id="1246158006305844142">Οι εφαρμογές και οι ρυθμίσεις σας θα συγχρονιστούν σε όλες τις συσκευές Chrome OS, στις οποίες έχετε συνδεθεί με τον Λογαριασμό σας Google. Για επιλογές συγχρονισμού προγράμματος περιήγησης, μεταβείτε στις <ph name="LINK_BEGIN" />Ρυθμίσεις Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Θέλετε να καταργήσετε την πρόταση από το πρόχειρο;</translation>
 <translation id="1249643471736608405">Το πρόσθετο <ph name="PLUGIN_NAME" /> αποκλείστηκε γιατί έχει καταργηθεί</translation>
 <translation id="1251366534849411931">Αναμενόμενο άγκιστρο ανοίγματος: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Όχι, ευχαριστώ</translation>
 <translation id="1525740877599838384">Χρήση μόνο Wi-Fi για καθορισμό τοποθεσίας</translation>
 <translation id="152629053603783244">Επανεκκίνηση του Linux</translation>
+<translation id="1526335046150927198">Ενεργοποίηση επιτάχυνσης κύλισης επιφάνειας αφής</translation>
 <translation id="1526560967942511387">Έγγραφο χωρίς τίτλο</translation>
 <translation id="1529891865407786369">Πηγή ενέργειας</translation>
 <translation id="1530838837447122178">Άνοιγμα των ρυθμίσεων ποντικιού και επιφάνειας αφής της συσκευής</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Αποκαταστάθηκε η συνδεσιμότητα δικτύου</translation>
 <translation id="2727633948226935816">Να μην μου ξαναγίνει υπενθύμιση</translation>
 <translation id="2727712005121231835">Πραγματικό Μέγεθος</translation>
+<translation id="2729314457178420145">Επίσης, διαγράψτε δεδομένα περιήγησης (<ph name="URL" />) τα οποία ενδέχεται να σας αποσυνδέσουν από το Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Δημιουργία αντιγράφων ασφαλείας εφαρμογών και αρχείων Linux</translation>
 <translation id="273093730430620027">Αυτή η σελίδα έχει πρόσβαση στην κάμερά σας.</translation>
 <translation id="2731392572903530958">Εκ νέου ά&amp;νοιγμα κλειστού παραθύρου</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Περισσότερες σελίδες <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Cookie και άλλα δεδομένα ιστότοπου και προσθηκών</translation>
 <translation id="383891835335927981">Δεν έχει γίνει μεγέθυνση ή σμίκρυνση κανενός ιστοτόπου</translation>
+<translation id="3839509547554145593">Ενεργοποίηση επιτάχυνσης κύλισης ποντικιού</translation>
 <translation id="3839516600093027468">Να γίνεται πάντα αποκλεισμός της προβολής του προχείρου από <ph name="HOST" /></translation>
 <translation id="3841964634449506551">Μη έγκυρος κωδικός πρόσβασης</translation>
 <translation id="3842552989725514455">Γραμματοσειρά Serif</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Εικόνες και αρχεία στην κρυφή μνήμη</translation>
 <translation id="4699357559218762027">(αυτόματη εκκίνηση)</translation>
 <translation id="470074695271471509">Αποσύνδεση για ολοκλήρωση;</translation>
+<translation id="4701025263201366865">Γονική σύνδεση</translation>
 <translation id="4707302005824653064">Η χρήση και το ιστορικό μπορούν να ελεγχθούν από το διαχειριστή (<ph name="CUSTODIAN_EMAIL" />) στη διεύθυνση chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + πιστοποιητικό χρήστη</translation>
 <translation id="4708794300267213770">Εμφάνιση κλειδώματος οθόνης κατά την αφύπνιση από την αδράνεια</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, Αναζήτηση <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Εισαγάγετε το PIN για το κλειδί ασφαλείας σας. Εάν δεν γνωρίζετε το PIN, θα χρειαστεί να επαναφέρετε το κλειδί ασφαλείας σας.</translation>
 <translation id="5139955368427980650">Άν&amp;οιγμα</translation>
+<translation id="5142793792982256885">Ταχύτητα κύλισης επιφάνειας αφής</translation>
 <translation id="5142961317498132443">Έλεγχος ταυτότητας</translation>
 <translation id="5143374789336132547">Η επέκταση <ph name="EXTENSION_NAME" /> άλλαξε τη σελίδα που εμφανίζεται όταν κάνετε κλικ στο κουμπί αρχικής σελίδας.</translation>
 <translation id="5143712164865402236">Ενεργοποίηση πλήρους οθόνης</translation>
@@ -3645,6 +3651,7 @@
 <translation id="5901630391730855834">Κίτρινο</translation>
 <translation id="5906655207909574370">Η ενημέρωση σχεδόν ολοκληρώθηκε! Επανεκκινήστε τη συσκευή σας για να ολοκληρωθεί η ενημέρωση.</translation>
 <translation id="5906732635754427568">Τα δεδομένα που σχετίζονται με αυτήν την εφαρμογή θα καταργηθούν από αυτήν τη συσκευή.</translation>
+<translation id="5908695239556627796">Ταχύτητα κύλισης ποντικιού</translation>
 <translation id="5908769186679515905">Αποκλεισμός ιστοτόπων από την εκτέλεση Flash</translation>
 <translation id="5910363049092958439">Απο&amp;θήκευση Εικόνας Ως...</translation>
 <translation id="5910726859585389579">Η συσκευή <ph name="DEVICE_TYPE" /> είναι εκτός σύνδεσης.</translation>
@@ -5092,6 +5099,7 @@
     <ph name="BEGIN_BOLD" />Σημείωση:<ph name="END_BOLD" />  Θα γίνει επανεκκίνηση του συστήματος κατά τη διάρκεια της διαδικασίας.</translation>
 <translation id="7828731929332799387">Με αυτή την ενέργεια θα διαγραφούν όλα τα cookie και τα δεδομένα ιστοτόπων που διατίθενται σε περιβάλλοντα τρίτου μέρους. Θέλετε να συνεχίσετε;</translation>
 <translation id="7829298379596169484">Πρόσβαση στην είσοδο ήχου</translation>
+<translation id="7829877209233347340">Ζήτα από έναν γονέα να συνδεθεί για να εκχωρήσει δικαίωμα προσθήκης ενός λογαριασμού σχολείου.</translation>
 <translation id="7830594666202422257">Σύνδεση σε Linux</translation>
 <translation id="7831491651892296503">Σφάλμα κατά τη διαμόρφωση του δικτύου</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5844,6 +5852,7 @@
 <translation id="8808686172382650546">Γάτα</translation>
 <translation id="8808744862003883508">Σε αυτήν τη σελίδα μπορείτε να δείτε όλες τις επεκτάσεις που είναι εγκατεστημένες στο Chrome.</translation>
 <translation id="8809147117840417135">Ανοιχτό γαλαζοπράσινο</translation>
+<translation id="8812593354822910461">Επίσης, διαγράψτε δεδομένα περιήγησης (<ph name="URL" />) τα οποία θα σας αποσυνδέσουν από τον τομέα <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Δεν είναι δυνατή η σύνδεση στο <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">φύλλο χαρτιού</translation>
 <translation id="8813872945700551674">Ζήτα από τον γονέα σου να εγκρίνει την επέκταση "<ph name="EXTENSION_NAME" />"</translation>
@@ -6133,6 +6142,7 @@
 <translation id="9203398526606335860">Ενεργοποιημένη &amp;δυνατότητα δημιουργίας προφίλ</translation>
 <translation id="9203904171912129171">Επιλέξτε μια συσκευή</translation>
 <translation id="9203962528777363226">Ο διαχειριστής αυτής της συσκευής έχει απενεργοποιήσει την προσθήκη νέων χρηστών</translation>
+<translation id="9209689095351280025">Οι ιστότοποι δεν μπορούν να χρησιμοποιήσουν cookie που σας παρακολουθούν στον ιστό.</translation>
 <translation id="9211177926627870898">Απαιτείται ενημέρωση</translation>
 <translation id="9214520840402538427">Ωχ!  Η περίοδος προετοιμασίας των ιδιοτήτων χρόνου εγκατάστασης έχει λήξει.  Επικοινωνήστε με τον αντιπρόσωπό σας υποστήριξης.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index d766166..5730e95 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Laadi üles</translation>
 <translation id="1244265436519979884">Linuxi taastamine on pooleli</translation>
 <translation id="1244303850296295656">Laienduse viga</translation>
+<translation id="1246158006305844142">Teie rakendused ja seaded sünkroonitakse kõigis Chrome OS-i seadmetes, kuhu olete oma Google'i kontoga sisse logitud. Brauseri sünkroonimisvalikute nägemiseks avage <ph name="LINK_BEGIN" />Chrome'i seaded<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Kas eemaldada soovitus lõikelaualt?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> blokeeriti, sest selle tugi katkestati</translation>
 <translation id="1251366534849411931">Vaja on esimest looksulgu: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Ei, tänan</translation>
 <translation id="1525740877599838384">Asukoha määramine ainult WiFi-ühenduse kaudu</translation>
 <translation id="152629053603783244">Taaskäivita Linux</translation>
+<translation id="1526335046150927198">Luba puuteplaadil kerimise kiirendamine</translation>
 <translation id="1526560967942511387">Pealkirjata dokument</translation>
 <translation id="1529891865407786369">Toiteallikas</translation>
 <translation id="1530838837447122178">Hiire ja puuteplaadi seadme seadete avamine</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Võrguühendus on taastatud</translation>
 <translation id="2727633948226935816">Ära tuleta rohkem meelde</translation>
 <translation id="2727712005121231835">Tegelik suurus</translation>
+<translation id="2729314457178420145">Kustutage ka sirvimisandmed (<ph name="URL" />). See võib teid saidilt Google.com välja logida. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Linuxi rakenduste ja failide varundamine</translation>
 <translation id="273093730430620027">See leht pääseb teie kaamera juurde.</translation>
 <translation id="2731392572903530958">A&amp;va suletud aken uuesti</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Rohkem: <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Küpsised ja muud saidi ning pistikprogrammi andmed</translation>
 <translation id="383891835335927981">Ühtegi saiti pole sisse ega välja suumitud</translation>
+<translation id="3839509547554145593">Luba hiire kerimise kiirendamine</translation>
 <translation id="3839516600093027468">Blokeeri hosti <ph name="HOST" /> jaoks alati lõikelaua nägemine</translation>
 <translation id="3841964634449506551">Parool on sobimatu</translation>
 <translation id="3842552989725514455">Seriifidega font</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Vahemällu salvestatud kujutised ja failid</translation>
 <translation id="4699357559218762027">(automaatselt käivitatud)</translation>
 <translation id="470074695271471509">Kas logida lõpuleviimiseks välja?</translation>
+<translation id="4701025263201366865">Lapsevanema sisselogimine</translation>
 <translation id="4707302005824653064">Haldur (<ph name="CUSTODIAN_EMAIL" />) saab kasutamise ja ajaloo üle vaadata aadressil chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + kasutaja sertifikaat</translation>
 <translation id="4708794300267213770">Kuva unerežiimist ärgates lukustuskuva</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, otsing teenusega <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Sisestage turvavõtme PIN-kood. Kui te PIN-koodi ei tea, peate turvavõtme lähtestama.</translation>
 <translation id="5139955368427980650">&amp;Ava</translation>
+<translation id="5142793792982256885">Puuteplaadi kerimiskiirus</translation>
 <translation id="5142961317498132443">Autentimine</translation>
 <translation id="5143374789336132547">Laiendus „<ph name="EXTENSION_NAME" />” muutis seda, milline leht kuvatakse avalehe nupul klõpsamisel.</translation>
 <translation id="5143712164865402236">Kuvamine täisekraanil</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Kollane</translation>
 <translation id="5906655207909574370">Seade on peaaegu ajakohane. Värskenduse lõpuleviimiseks taaskäivitage seade.</translation>
 <translation id="5906732635754427568">Selle rakendusega seostatud andmed eemaldatakse seadmest.</translation>
+<translation id="5908695239556627796">Hiire kerimiskiirus</translation>
 <translation id="5908769186679515905">Keela Flashi käitamine saitidel</translation>
 <translation id="5910363049092958439">Sal&amp;vesta pilt nimega...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> on võrguühenduseta</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Märkus.<ph name="END_BOLD" />  Protsessi käigus süsteem taaskäivitatakse.</translation>
 <translation id="7828731929332799387">See kustutab kõik kolmanda osapoole pakutavad küpsisefailid ja saidi andmed. Kas soovite jätkata?</translation>
 <translation id="7829298379596169484">Juurdepääs helisisendile</translation>
+<translation id="7829877209233347340">Palu vanemal sisse logida, et ta annaks loa koolikonto lisamiseks</translation>
 <translation id="7830594666202422257">Ühenda Linuxiga</translation>
 <translation id="7831491651892296503">Viga võrgu seadistamisel</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">Kass</translation>
 <translation id="8808744862003883508">Sellel lehel näete kõiki Chrome'i installitud laiendusi.</translation>
 <translation id="8809147117840417135">Helesinakasroheline</translation>
+<translation id="8812593354822910461">Kustutage ka sirvimisandmed (<ph name="URL" />). See võib teid saidilt <ph name="DOMAIN" /> välja logida. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Kasutaja <ph name="USERNAME" /> kontole ei saa sisse logida</translation>
 <translation id="8813811964357448561">paberileht</translation>
 <translation id="8813872945700551674">Palu vanemal laiendus „<ph name="EXTENSION_NAME" />” kinnitada</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">&amp;Profileerimine lubatud</translation>
 <translation id="9203904171912129171">Valige seade</translation>
 <translation id="9203962528777363226">Selle seadme administraator on keelanud uute kasutajate lisamise</translation>
+<translation id="9209689095351280025">Saidid ei saa veebis teie jälgimiseks kasutada küpsisefaile</translation>
 <translation id="9211177926627870898">Värskendamine on nõutav</translation>
 <translation id="9214520840402538427">Installimisaja atribuutide lähtestamisel ilmnes ajalõpp. Võtke ühendust tugiteenuse esindajaga.</translation>
 <translation id="9214695392875603905">Keeks</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index f68127b..876f404e 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Lähetä</translation>
 <translation id="1244265436519979884">Linux-palautus käynnissä</translation>
 <translation id="1244303850296295656">Laajennusvirhe</translation>
+<translation id="1246158006305844142">Sovelluksesi ja asetuksesi synkronoidaan kaikilla Chrome OS ‑laitteilla, joilla olet kirjautuneena Google-tilillesi. Näet selaimen synkronointiasetukset <ph name="LINK_BEGIN" />Chromen asetuksista<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Poistetaanko ehdotus leikepöydältä?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> estettiin, koska se on poistettu käytöstä.</translation>
 <translation id="1251366534849411931">Odotettu aloittava kaarisulje: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Ei kiitos</translation>
 <translation id="1525740877599838384">Käytä vain Wi-Fi-yhteyttä sijainnin määrittämiseen</translation>
 <translation id="152629053603783244">Käynnistä Linux uudelleen</translation>
+<translation id="1526335046150927198">Ota käyttöön kosketuslevyn vierityksen kiihdytys</translation>
 <translation id="1526560967942511387">Nimetön asiakirja</translation>
 <translation id="1529891865407786369">Virtalähde</translation>
 <translation id="1530838837447122178">Avaa hiiren ja ohjauslevyn laiteasetukset</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Verkkoyhteys palautettu</translation>
 <translation id="2727633948226935816">Älä muistuta uudelleen</translation>
 <translation id="2727712005121231835">Todellinen koko</translation>
+<translation id="2729314457178420145">Poista lisäksi selaustiedot (<ph name="URL" />). Tämä saattaa kirjata sinut ulos Google.comista. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Varmuuskopioidaan Linux-sovelluksia ja ‑tiedostoja</translation>
 <translation id="273093730430620027">Tämä sivu käyttää kameraasi.</translation>
 <translation id="2731392572903530958">Avaa suljettu ikkuna uud&amp;elleen</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Lisää <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Evästeet ja muut sivuston ja laajennuksien tiedot</translation>
 <translation id="383891835335927981">Zoomausta ei ole käytetty sivustoilla.</translation>
+<translation id="3839509547554145593">Ota käyttöön hiiren vierityksen kiihdytys</translation>
 <translation id="3839516600093027468"><ph name="HOST" /> ei saa koskaan nähdä leikepöydän sisältöä</translation>
 <translation id="3841964634449506551">Virheellinen salasana</translation>
 <translation id="3842552989725514455">Serif-fontti</translation>
@@ -2772,6 +2776,7 @@
 <translation id="4699172675775169585">Välimuistissa olevat kuvat ja tiedostot</translation>
 <translation id="4699357559218762027">(käynnistyy automaattisesti)</translation>
 <translation id="470074695271471509">Kirjaudutaanko lopuksi ulos?</translation>
+<translation id="4701025263201366865">Vanhemman sisäänkirjautuminen</translation>
 <translation id="4707302005824653064">Hallinnoija (<ph name="CUSTODIAN_EMAIL" />) voi tarkkailla tämän käyttäjän käyttö- ja historiatietoja osoitteessa chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + käyttäjävarmenne</translation>
 <translation id="4708794300267213770">Näytä lukitusnäyttö, kun laite poistuu virransäästötilasta</translation>
@@ -3079,6 +3084,7 @@
 <translation id="5139112070765735680"><ph name="DEFAULT_SEARCH_ENGINE_NAME" />, haku <ph name="QUERY_NAME" /></translation>
 <translation id="5139823398361067371">Lisää suojausavaimen PIN-koodi. Jos et tiedä PIN-koodia, suojausavain on nollattava.</translation>
 <translation id="5139955368427980650">&amp;Avaa</translation>
+<translation id="5142793792982256885">Kosketuslevyn vieritysnopeus</translation>
 <translation id="5142961317498132443">Todennus</translation>
 <translation id="5143374789336132547">Laajennus <ph name="EXTENSION_NAME" /> on vaihtanut Etusivu-painikkeella avattavan sivun.</translation>
 <translation id="5143712164865402236">Siirry koko näytön tilaan</translation>
@@ -3641,6 +3647,7 @@
 <translation id="5901630391730855834">Keltainen</translation>
 <translation id="5906655207909574370">Melkein ajan tasalla. Viimeistele päivitys käynnistämällä laite uudelleen.</translation>
 <translation id="5906732635754427568">Tähän sovellukseen liittyvät tiedot poistetaan tältä laitteelta.</translation>
+<translation id="5908695239556627796">Hiiren vieritysnopeus</translation>
 <translation id="5908769186679515905">Estä sivustoja suorittamasta Flashia</translation>
 <translation id="5910363049092958439">T&amp;allenna kuva nimellä...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> on offline-tilassa</translation>
@@ -5089,6 +5096,7 @@
     <ph name="BEGIN_BOLD" />Huom.<ph name="END_BOLD" /> Järjestelmä käynnistyy uudelleen prosessin aikana.</translation>
 <translation id="7828731929332799387">Tämä poistaa kaikki kolmansien osapuolten yhteydessä saatavilla olevat evästeet ja sivustodatan. Haluatko jatkaa?</translation>
 <translation id="7829298379596169484">Äänituloa käytetään</translation>
+<translation id="7829877209233347340">Pyydä vanhempaa kirjautumaan, jotta hän voi antaa luvan koulutilin lisäämiseen</translation>
 <translation id="7830594666202422257">Yhdistä Linuxiin</translation>
 <translation id="7831491651892296503">Verkon määritysvirhe</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5843,6 +5851,7 @@
 <translation id="8808686172382650546">Kissa</translation>
 <translation id="8808744862003883508">Tällä sivulla näet kaikki Chromeen asennetut laajennukset.</translation>
 <translation id="8809147117840417135">Vaalea turkoosi</translation>
+<translation id="8812593354822910461">Poista myös selaustiedot (<ph name="URL" />), jolloin sinut kirjataan ulos <ph name="DOMAIN" />-sivulta. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Sisäänkirjautuminen ei onnistu: <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">paperiarkki</translation>
 <translation id="8813872945700551674">Pyydä vanhempaa hyväksymään <ph name="EXTENSION_NAME" /></translation>
@@ -6132,6 +6141,7 @@
 <translation id="9203398526606335860">&amp;Profilointi on käytössä</translation>
 <translation id="9203904171912129171">Valitse laite</translation>
 <translation id="9203962528777363226">Tämän laitteen järjestelmänvalvoja on estänyt uusien käyttäjien lisäämisen</translation>
+<translation id="9209689095351280025">Sivustot eivät voi seurata sinua verkossa evästeiden avulla</translation>
 <translation id="9211177926627870898">Päivitys vaaditaan</translation>
 <translation id="9214520840402538427">Hups! Asennus-aika-attribuuttien alustaminen on aikakatkaistu. Ota yhteyttä tukipalveluun.</translation>
 <translation id="9214695392875603905">Kuppikakku</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index 5cdb02e..2da93e9 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Téléverser</translation>
 <translation id="1244265436519979884">Restauration Linux en cours…</translation>
 <translation id="1244303850296295656">Erreur au niveau des extensions</translation>
+<translation id="1246158006305844142">Vos applications et vos paramètres seront synchronisés sur tous les appareils Chrome OS sur lesquels vous êtes connectés avec votre compte Google. Pour voir les options de synchronisation du navigateur, accédez aux <ph name="LINK_BEGIN" />paramètres de Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Supprimer la suggestion du presse-papiers?</translation>
 <translation id="1249643471736608405">Le plugiciel <ph name="PLUGIN_NAME" /> a été bloqué, car il est discontinué</translation>
 <translation id="1251366534849411931">Accolade ouvrante attendue : <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Non, merci</translation>
 <translation id="1525740877599838384">Utiliser uniquement le réseau Wi-Fi pour déterminer l'emplacement</translation>
 <translation id="152629053603783244">Redémarrer Linux</translation>
+<translation id="1526335046150927198">Activer l'accélération du défilement pour le pavé tactile</translation>
 <translation id="1526560967942511387">Document sans titre</translation>
 <translation id="1529891865407786369">Source d'énergie</translation>
 <translation id="1530838837447122178">Ouvrir les paramètres de la souris et du pavé tactile de l'appareil</translation>
@@ -1314,6 +1316,7 @@
 <translation id="2725200716980197196">La connectivité réseau a été rétablie</translation>
 <translation id="2727633948226935816">Ne pas me le rappeler</translation>
 <translation id="2727712005121231835">Taille réelle</translation>
+<translation id="2729314457178420145">Aussi effacer les données de navigation (<ph name="URL" />), ce qui risque de vous déconnecter de Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Sauvegarde des applications et des fichiers Linux en cours…</translation>
 <translation id="273093730430620027">Cette page accède à votre caméra.</translation>
 <translation id="2731392572903530958">Rouvrir la fenêtre f&amp;ermée</translation>
@@ -2165,6 +2168,7 @@
 <translation id="3838486795898716504">Pages suivantes pour <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Témoins et autres données de sites et de plugiciels</translation>
 <translation id="383891835335927981">Aucun site n'a fait l'objet d'un zoom avant ou arrière</translation>
+<translation id="3839509547554145593">Activer l'accélération du défilement pour la souris</translation>
 <translation id="3839516600093027468">Toujours empêcher <ph name="HOST" /> de voir le presse-papiers</translation>
 <translation id="3841964634449506551">Mot de passe incorrect</translation>
 <translation id="3842552989725514455">Police avec empattement</translation>
@@ -2776,6 +2780,7 @@
 <translation id="4699172675775169585">Images et fichiers dans la mémoire cache</translation>
 <translation id="4699357559218762027">(lancement automatique)</translation>
 <translation id="470074695271471509">Se déconnecter pour terminer?</translation>
+<translation id="4701025263201366865">Connexion d'un parent</translation>
 <translation id="4707302005824653064">L'utilisation et l'historique peuvent être consultés par le gestionnaire (<ph name="CUSTODIAN_EMAIL" />) sur chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPSec et certificat utilisateur</translation>
 <translation id="4708794300267213770">Afficher l'écran de verrouillage au réveil</translation>
@@ -3083,6 +3088,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, recherche <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Entrez le NIP de votre clé de sécurité. Si vous ne connaissez pas le NIP, vous devrez réinitialiser la clé de sécurité.</translation>
 <translation id="5139955368427980650">&amp;Ouvrir</translation>
+<translation id="5142793792982256885">Vitesse de défilement du pavé tactile</translation>
 <translation id="5142961317498132443">Authentification</translation>
 <translation id="5143374789336132547">L'extension « <ph name="EXTENSION_NAME" /> » a modifié la page qui s'affiche lorsque vous cliquez sur le bouton Accueil.</translation>
 <translation id="5143712164865402236">Activer le mode plein écran</translation>
@@ -3645,6 +3651,7 @@
 <translation id="5901630391730855834">Jaune</translation>
 <translation id="5906655207909574370">La mise à jour est presque terminée! Pour la compléter, veuillez redémarrer votre appareil.</translation>
 <translation id="5906732635754427568">Les données associées à cette application seront supprimées de cet appareil.</translation>
+<translation id="5908695239556627796">Vitesse de défilement de la souris</translation>
 <translation id="5908769186679515905">Bloquer l'exécution de Flash par les sites</translation>
 <translation id="5910363049092958439">En&amp;registrer l'image sous...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> est hors ligne</translation>
@@ -5092,6 +5099,7 @@
     <ph name="BEGIN_BOLD" />Note :<ph name="END_BOLD" />  Le système va redémarrer durant le processus.</translation>
 <translation id="7828731929332799387">Cela supprimera tous les témoins et les données des sites proposés dans les contextes tiers. Voulez-vous continuer?</translation>
 <translation id="7829298379596169484">Accès à l'entrée audio en cours…</translation>
+<translation id="7829877209233347340">Demande à un parent de se connecter afin d'accorder l'autorisation d'ajouter un compte scolaire</translation>
 <translation id="7830594666202422257">Connexion à Linux</translation>
 <translation id="7831491651892296503">Erreur de configuration réseau</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">Chat</translation>
 <translation id="8808744862003883508">Vous pouvez voir dans cette page toutes les extensions installées dans Chrome.</translation>
 <translation id="8809147117840417135">Turquoise clair</translation>
+<translation id="8812593354822910461">Aussi effacer les données de navigation (<ph name="URL" />), ce qui vous déconnectera de <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Impossible de connecter <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">feuille de papier</translation>
 <translation id="8813872945700551674">Demande à un parent d'approuver l'extension « <ph name="EXTENSION_NAME" /> »</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">&amp;Profilage activé</translation>
 <translation id="9203904171912129171">Sélectionner un appareil</translation>
 <translation id="9203962528777363226">L'administrateur de cet appareil a désactivé la fonctionnalité d'ajout de nouveaux utilisateurs</translation>
+<translation id="9209689095351280025">Les sites ne peuvent pas utiliser de témoins qui font le suivi de votre activité sur le Web</translation>
 <translation id="9211177926627870898">Mise à jour requise</translation>
 <translation id="9214520840402538427">Oups… Le délai alloué à l'initialisation des attributs de temps d'installation a expiré. Veuillez communiquer avec le service d'assistance.</translation>
 <translation id="9214695392875603905">Petit gâteau</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 1c3a8ff..c11dbd3 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">અપલોડ કરો</translation>
 <translation id="1244265436519979884">હાલમાં Linuxને પહેલાંના જેવું કરવાની પ્રક્રિયા ચાલુ છે</translation>
 <translation id="1244303850296295656">એક્સટેંશન ભૂલ</translation>
+<translation id="1246158006305844142">તમે તમારા Google એકાઉન્ટ વડે જેમાં સાઇન ઇન કર્યું છે, તે તમામ Chrome OS ડિવાઇસ પર તમારી ઍપ અને સેટિંગ સિંક કરવામાં આવશે. બ્રાઉઝર સિંક કરવાના વિકલ્પો માટે, <ph name="LINK_BEGIN" />Chrome સેટિંગ<ph name="LINK_END" /> પર જાઓ.</translation>
 <translation id="1246905108078336582">શું ક્લિપબોર્ડમાંથી સૂચન કાઢી નાખીએ?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" />ને ટાળવામાં આવી હોવાથી બ્લૉક કરવામાં આવી છે</translation>
 <translation id="1251366534849411931">અપેક્ષિત ખુલતો વાંકળિયો કૌંસ: <ph name="ERROR_LINE" /></translation>
@@ -388,6 +389,7 @@
 <translation id="1524563461097350801">ના, આભાર</translation>
 <translation id="1525740877599838384">સ્થાન નક્કી કરવા માટે માત્ર વાઇ-ફાઇનો ઉપયોગ કરો</translation>
 <translation id="152629053603783244">Linux ફરીથી ચાલુ કરો</translation>
+<translation id="1526335046150927198">ટચપૅડ સ્ક્રોલ ઍક્સલરેશન સુવિધા ચાલુ કરો</translation>
 <translation id="1526560967942511387">નામ વિનાનો દસ્તાવેજ</translation>
 <translation id="1529891865407786369">પાવર સ્રોત</translation>
 <translation id="1530838837447122178">માઉસ અને ટચપેડ ઉપકરણ સેટિંગ્સ ખોલો</translation>
@@ -1309,6 +1311,7 @@
 <translation id="2725200716980197196">નેટવર્ક કનેક્ટિવિટી પુનઃસ્થાપિત કરી</translation>
 <translation id="2727633948226935816">મને ફરીથી યાદ કરાવશો નહીં</translation>
 <translation id="2727712005121231835">વાસ્તવિક કદ</translation>
+<translation id="2729314457178420145">બ્રાઉઝિંગ ડેટા (<ph name="URL" />) પણ સાફ કરો જે તમને Google.comમાંથી સાઇન આઉટ કરી શકે છે. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Linux ઍપ અને ફાઇલોનું બૅકઅપ લઈ રહ્યાં છીએ</translation>
 <translation id="273093730430620027">આ પૃષ્ઠ તમારા કૅમેરાને ઍક્સેસ કરી રહ્યું છે.</translation>
 <translation id="2731392572903530958">બંધ કરેલી વિંડો ફ&amp;રીથી ખોલો</translation>
@@ -2160,6 +2163,7 @@
 <translation id="3838486795898716504">વધુ <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">કુકીઝ અને અન્ય સાઇટ તથા પ્લગિન ડેટા</translation>
 <translation id="383891835335927981">કોઈ સાઇટનું ઝૂમ વધારેલ અથવા તો ઘટાડેલ નથી</translation>
+<translation id="3839509547554145593">માઉસ સ્ક્રોલ ઍક્સલરેશન સુવિધા ચાલુ કરો</translation>
 <translation id="3839516600093027468"><ph name="HOST" />ને હંમેશા ક્લિપબોર્ડ જોવાથી બ્લૉક કરો</translation>
 <translation id="3841964634449506551">પાસવર્ડ અમાન્ય</translation>
 <translation id="3842552989725514455">Serif ફૉન્ટ</translation>
@@ -2771,6 +2775,7 @@
 <translation id="4699172675775169585">કેશ કરેલ છબીઓ અને ફાઇલો</translation>
 <translation id="4699357559218762027">(સ્વતઃ-લોંચ કરેલું)</translation>
 <translation id="470074695271471509">સમાપ્ત કરવા માટે સાઇન આઉટ કરીએ?</translation>
+<translation id="4701025263201366865">માતાપિતા સાઇન ઇન કરે</translation>
 <translation id="4707302005824653064">ઉપયોગ અને ઇતિહાસની chrome.com પર સંચાલક (<ph name="CUSTODIAN_EMAIL" />) દ્વારા સમીક્ષા કરવામાં આવી શકે છે.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + વપરાશકર્તા પ્રમાણપત્ર</translation>
 <translation id="4708794300267213770">નિષ્ક્રિયતામાંથી બહાર આવવા પર લૉક સ્ક્રીન બતાવો</translation>
@@ -3078,6 +3083,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> શોધો</translation>
 <translation id="5139823398361067371">તમારી સિક્યુરિટી કી માટેનો પિન દાખલ કરો. જો તમને તમારો પિન યાદ ન હોય, તો તમારે સિક્યુરિટી કી રીસેટ કરવી પડશે.</translation>
 <translation id="5139955368427980650">&amp;ખોલો</translation>
+<translation id="5142793792982256885">ટચપૅડ સ્ક્રોલની ઝડપ</translation>
 <translation id="5142961317498132443">પ્રમાણીકરણ</translation>
 <translation id="5143374789336132547">જ્યારે તમે હોમ બટન ક્લિક કરો છો ત્યારે જે પૃષ્ઠ દર્શાવવામાં આવે છે તે <ph name="EXTENSION_NAME" /> એક્સટેન્શને બદલ્યું છે.</translation>
 <translation id="5143712164865402236">પૂર્ણ સ્ક્રીનમાં દાખલ થાઓ</translation>
@@ -3641,6 +3647,7 @@
 <translation id="5901630391730855834">પીળો</translation>
 <translation id="5906655207909574370">અપ ટૂ ડેટ થવામાં છે! અપડેટ કરવાનું સમાપ્ત કરવા માટે તમારા ઉપકરણને પુનઃપ્રારંભ કરો.</translation>
 <translation id="5906732635754427568">આ ઍપ્લિકેશન સાથે સંકળાયેલ ડેટાને આ ઉપકરણમાંથી દૂર કરવામાં આવશે.</translation>
+<translation id="5908695239556627796">માઉસ સ્ક્રોલની ઝડપ</translation>
 <translation id="5908769186679515905">સાઇટ્સને ફ્લેશ ચલાવવાથી અવરોધિત કરો</translation>
 <translation id="5910363049092958439">છબીને આ રૂપે સા&amp;ચવો...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ઑફલાઇન છે</translation>
@@ -4031,7 +4038,7 @@
 <translation id="6414888972213066896">આ પૃષ્ઠની મુલાકાત લો છો તે ઠીક છે કે કેમ તેવું તમે તમારા માતાપિતાને પૂછ્યું</translation>
 <translation id="6415900369006735853">તમારા ફોન મારફત ઇન્ટરનેટ સાથે કનેક્ટ કરો</translation>
 <translation id="6416743254476733475">તમારા કમ્પ્યુટર પર મંજૂરી આપો અથવા બ્લૉક કરો.</translation>
-<translation id="6417265370957905582">Google સહાયક</translation>
+<translation id="6417265370957905582">Google Assistant</translation>
 <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" />ના પૂર્વમાં ઇન્સ્ટૉલ કરેલા વર્ઝન પર પાછું ફરી રહ્યા છે</translation>
 <translation id="6418481728190846787">બધી ઍપ્લિકેશનો માટે કાયમીરૂપે ઍક્સેસ દૂર કરો</translation>
 <translation id="6418511932144861495">મહત્ત્વપૂર્ણ અપડેટ ઇન્સ્ટૉલ કરો</translation>
@@ -5088,6 +5095,7 @@
     <ph name="BEGIN_BOLD" />નોંધ:<ph name="END_BOLD" /> પ્રક્રિયા દરમ્યાન આ સિસ્ટમ રીબૂટ થશે.</translation>
 <translation id="7828731929332799387">આનાથી ત્રીજા પક્ષ સંદર્ભમાં ઉપલબ્ધ બધી કુકી અને સાઇટ ડેટા ડિલીટ થઈ જશે. શું તમે ચાલુ રાખવા માગો છો?</translation>
 <translation id="7829298379596169484">ઑડિઓ ઇનપુટને ઍક્સેસ કરી રહ્યું છે</translation>
+<translation id="7829877209233347340">સ્કૂલ એકાઉન્ટ ઉમેરવાની પરવાનગી આપવા માટે તમારા માતાપિતાને સાઇન ઇન કરવાનું કહો</translation>
 <translation id="7830594666202422257">Linux સાથે કનેક્ટ કરો</translation>
 <translation id="7831491651892296503">નેટવર્કની ગોઠવણી કરતી વખતે ભૂલ આવી</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5837,6 +5845,7 @@
 <translation id="8808686172382650546">બિલાડી</translation>
 <translation id="8808744862003883508">આ પેજ પર તમે Chromeમાં ઇન્સ્ટૉલ થયેલા બધા એક્સ્ટેંશન જોઈ શકો છો.</translation>
 <translation id="8809147117840417135">આછો મોરપીંછ</translation>
+<translation id="8812593354822910461">બ્રાઉઝિંગ ડેટા (<ph name="URL" />) પણ સાફ કરો જે તમને <ph name="DOMAIN" />માંથી સાઇન આઉટ કરશે. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039"><ph name="USERNAME" /> પર સાઇન ઇન કરી શકતાં નથી</translation>
 <translation id="8813811964357448561">કાગળનું પત્રક</translation>
 <translation id="8813872945700551674">જાઓ અને માતાપિતા પાસેથી "<ph name="EXTENSION_NAME" />"ની મંજૂરી મેળવો</translation>
@@ -6126,6 +6135,7 @@
 <translation id="9203398526606335860">&amp;પ્રોફાઇલિંગ સક્ષમ</translation>
 <translation id="9203904171912129171">ઉપકરણ પસંદ કરો</translation>
 <translation id="9203962528777363226">આ ઉપકરણનાં વ્યવસ્થાપકે નવા વપરાશકર્તાઓને ઉમેરવાથી અક્ષમ કર્યા છે</translation>
+<translation id="9209689095351280025">સાઇટ તમને વેબ પર બધે ટ્રૅક કરતી કુકીનો ઉપયોગ કરી શકશે નહીં</translation>
 <translation id="9211177926627870898">અપડેટ જરૂરી છે</translation>
 <translation id="9214520840402538427">અરે! ઇન્સ્ટૉલેશન-સમયનો ચાલુ એટ્રિબ્યૂટનો સમય સમાપ્ત થયો. કૃપા કરીને તમારા સપોર્ટ પ્રતિનિધિનો સંપર્ક કરો.</translation>
 <translation id="9214695392875603905">કપકૅક</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 57fda58..c4ad103 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -51,6 +51,7 @@
 <translation id="1058262162121953039">PUK</translation>
 <translation id="1061745542578250838"><ph name="FILE_NAME" /> में संवेदनशील सामग्री है और इसे ब्लॉक किया गया है.</translation>
 <translation id="1061904396131502319">ब्रेक लेने का समय होने वाला है</translation>
+<translation id="1064552680598333868">जब Linux अगली बार रीस्टार्ट होगा, तब माइक्रोफ़ोन में किए गए बदलाव लागू होंगे.</translation>
 <translation id="1067048845568873861">निर्मित</translation>
 <translation id="1067291318998134776">Linux (बीटा)</translation>
 <translation id="1067922213147265141">Google की दूसरी सेवाएंं</translation>
@@ -111,6 +112,7 @@
 <translation id="1147991416141538220">ऐक्सेस मांगने के लिए, इस डिवाइस के एडमिन से संपर्क करें.</translation>
 <translation id="1149401351239820326">समाप्ति माह</translation>
 <translation id="1150565364351027703">धूप के चश्मे</translation>
+<translation id="1151841030700667295">आपको सभी साइटों और खुले हुए टैब से साइन आउट कर दिया जाएगा.</translation>
 <translation id="1151917987301063366"><ph name="HOST" /> को सेंसर ऐक्सेस करने की हमेशा मंज़ूरी दें</translation>
 <translation id="1153356358378277386">युग्‍मित डिवाइस</translation>
 <translation id="1153636665119721804">Google बेहतर सुरक्षा कार्यक्रम</translation>
@@ -276,6 +278,7 @@
 <translation id="1386387014181100145">कैसे हैं.</translation>
 <translation id="138784436342154190">डिफ़ॉल्ट स्टार्टअप पेज को बहाल करना चाहते हैं?</translation>
 <translation id="1390548061267426325">नियमित टैब के रूप में खोलें</translation>
+<translation id="1392232653471491344">Linux को रीस्टार्ट करने की ज़रूरत है</translation>
 <translation id="1393283411312835250">सूरज और बादल</translation>
 <translation id="1393787139683794508">इससे <ph name="ORIGIN_NAME" /> का सेव किया गया पूरा डेटा और कुकी मिट जाएंगी.</translation>
 <translation id="1395730723686586365">अपडेटर प्रारंभ हुआ</translation>
@@ -303,6 +306,7 @@
 <translation id="1420920093772172268">युग्मन की अनुमति देने के लिए <ph name="TURN_ON_BLUETOOTH_LINK" /></translation>
 <translation id="1422159345171879700">असुरक्षित स्क्रिप्ट लोड करें</translation>
 <translation id="1426410128494586442">हां</translation>
+<translation id="142655739075382478"><ph name="APP_NAME" /> को ब्लॉक कर दिया गया है</translation>
 <translation id="1426870617281699524">अपने कंप्यूटर पर 'फिर से कोशिश करें' पर क्लिक करें और संकेत को स्वीकार करें</translation>
 <translation id="1427269577154060167">देश</translation>
 <translation id="142758023928848008">स्टिकी की चालू करें (कीबोर्ड शॉर्टकट को क्रम से लिखकर उनका उपयोग करने के लिए)</translation>
@@ -341,6 +345,7 @@
 <translation id="1476607407192946488">&amp;भाषा सेटिंग</translation>
 <translation id="1478340334823509079">विवरण: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">इंस्टॉलेशन चालू नहीं है</translation>
+<translation id="1481537595330271162">डिस्क का साइज़ बदलते समय गड़बड़ी हुई</translation>
 <translation id="1482626744466814421">इस टैब को बुकमार्क करें...</translation>
 <translation id="1483493594462132177">भेजें</translation>
 <translation id="1484979925941077974">साइट ब्लूटूथ का इस्तेमाल कर रही है</translation>
@@ -599,6 +604,7 @@
 <translation id="1805822111539868586">व्यू का निरीक्षण करें</translation>
 <translation id="1805888043020974594">प्रिंट सर्वर</translation>
 <translation id="1805967612549112634">पिन की पुष्टि करें</translation>
+<translation id="1806335016774576568">किसी दूसरे खुले हुए ऐप्लिकेशन पर स्विच करें</translation>
 <translation id="1809734401532861917">मेरे बुकमार्क, इतिहास, पासवर्ड और अन्य सेटिंग को <ph name="USER_EMAIL_ADDRESS" /> में जोड़ें</translation>
 <translation id="1813278315230285598">सेवाएं</translation>
 <translation id="18139523105317219">EDI पार्टी नाम</translation>
@@ -684,6 +690,7 @@
 <translation id="1921050530041573580">अपने फ़ोन को मैसेज ऐप्लिकेशन/सेवा से जोड़ें</translation>
 <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation>
 <translation id="192494336144674234">इसके साथ खोलें</translation>
+<translation id="1925017091976104802">चिपकाने के लिए <ph name="MODIFIER_KEY_DESCRIPTION" /> दबाएं</translation>
 <translation id="1925021887439448749">पसंद के मुताबिक वेब पता डालें</translation>
 <translation id="1925124445985510535">सुरक्षा जांच <ph name="TIME" /> बजे हुई</translation>
 <translation id="1926339101652878330">ये सेटिंग एंटरप्राइज़ नीति द्वारा नियंत्रित होती हैं. कृपया ज़्यादा जानकारी के लिए अपने नियंत्रक से संपर्क करें.</translation>
@@ -828,6 +835,7 @@
 <translation id="2135787500304447609">&amp;फिर से शुरू करें</translation>
 <translation id="2136372518715274136">नया पासवर्ड डालें</translation>
 <translation id="2136476978468204130">आपने जो 'पासफ़्रेज़' डाला है, वह गलत है</translation>
+<translation id="2137122615728646911">{COUNT,plural, =0{कुकी ब्लॉक की गई हैं.}=1{कुकी ब्लॉक की गई हैं, 1 अपवाद}one{कुकी ब्लॉक की गई हैं, {COUNT} अपवाद}other{कुकी ब्लॉक की गई हैं, {COUNT} अपवाद}}</translation>
 <translation id="2138398485845393913">"<ph name="DEVICE_NAME" />" से कनेक्शन अब भी प्रगति में है</translation>
 <translation id="2139545522194199494"><ph name="NETWORK_COUNT" /> में से <ph name="NETWORK_INDEX" /> नेटवर्क, <ph name="NETWORK_NAME" />, सिग्नल की क्षमता <ph name="SIGNAL_STRENGTH" />%, आपका एडमिन प्रबंधित करता है, कनेक्ट करें</translation>
 <translation id="2139919072249842737">'सेट अप करें' बटन</translation>
@@ -994,10 +1002,12 @@
 <translation id="2346953515226895098">एसओडीए की सेवा</translation>
 <translation id="2347644257713614136">Hangouts और Cast for Education का इस्तेमाल 'Google निजता नीति' से नियंत्रित होता है.</translation>
 <translation id="2348176352564285430">ऐप्लिकेशन: <ph name="ARC_PROCESS_NAME" /></translation>
+<translation id="234889437187286781">डेटा लोड होने में कोई गड़बड़ी हुई</translation>
 <translation id="2350133097354918058">फिर से लोड किया गया</translation>
 <translation id="2350182423316644347">ऐप्स  आरंभ किया जा रहा है...</translation>
 <translation id="2350796302381711542"><ph name="HANDLER_HOSTNAME" /> को <ph name="REPLACED_HANDLER_TITLE" /> के बजाय सभी <ph name="PROTOCOL" /> लिंक खोलने दें?</translation>
 <translation id="2351266942280602854">भाषा और इनपुट</translation>
+<translation id="2352495879228166246">{NUM_ITEMS,plural, =1{1 आइटम}one{{NUM_ITEMS} आइटम}other{{NUM_ITEMS} आइटम}}</translation>
 <translation id="2352662711729498748">&lt; एक एमबी</translation>
 <translation id="2352810082280059586">लॉक स्क्रीन के नोट <ph name="LOCK_SCREEN_APP_NAME" /> में अपने आप सेव किए जाते हैं. आपका सबसे हाल का नोट लॉक स्क्रीन पर ही रहेगा.</translation>
 <translation id="2353297238722298836">कैमरे और माइक्रोफ़ोन की अनुमति है</translation>
@@ -1029,6 +1039,7 @@
 <translation id="2392369802118427583">सक्रिय करें</translation>
 <translation id="2394566832561516196">अगली बार फिर से लोड करने पर सेटिंग साफ़ हो जाएंगी.</translation>
 <translation id="2395616325548404795">आपका <ph name="DEVICE_TYPE" /> डिवाइस एंटरप्राइज़ प्रबंधन के लिए सफलतापूर्वक नामांकित हो गया है, लेकिन वह अपनी एसेट और स्‍थान की जानकारी भेजने में विफल रहा है. कृपया इस डिवाइस के लिए अपने Admin console से यह जानकारी मैन्‍युअल रूप से डालें.</translation>
+<translation id="2396387085693598316">आपके एडमिन ने "<ph name="EXTENSION_NAME" />" को ब्लॉक किया है</translation>
 <translation id="2396783860772170191">चार अंकों वाला पिन (0000-9999) डालें</translation>
 <translation id="2399939490305346086">सुरक्षा कुंजी पर साइन इन का डेटा</translation>
 <translation id="2400664245143453337">तुरंत अपडेट करने की ज़रूरत है</translation>
@@ -1311,6 +1322,7 @@
 <translation id="2753677631968972007">साइट की अनुमतियों को मैन्युअल तरीके से नियंत्रित करें.</translation>
 <translation id="2755367719610958252">सुलभता सुविधाएं प्रबंधित करें</translation>
 <translation id="275662540872599901">स्क्रीन बंद है</translation>
+<translation id="2757338480560142065">पक्का करें कि आप जो पासवर्ड सेव कर रहे हैं वह <ph name="WEBSITE" /> के आपके पासवर्ड से मेल खाता हो</translation>
 <translation id="2762441749940182211">कैमरा ब्लॉक किया गया है</translation>
 <translation id="2765217105034171413">छोटा</translation>
 <translation id="276969039800130567"><ph name="USER_EMAIL_ADDRESS" /> के रूप में प्रवेश किया गया.</translation>
@@ -1561,6 +1573,7 @@
 <translation id="3090819949319990166">बाहरी crx फ़ाइल की <ph name="TEMP_CRX_FILE" /> में कॉपी नहीं बनाई जा सकती.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" युग्मित किया गया</translation>
 <translation id="3092699946856346803">अपना सिम कार्ड डालें और फिर से कोशिश करें</translation>
+<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{1 ऐसा एक्सटेंशन बंद किया गया जो शायद नुकसान पहुंचा सकता है. आप इसे हटा भी सकते हैं.}one{{NUM_EXTENSIONS} ऐसा एक्सटेंशन बंद किया गया जो शायद नुकसान पहुंचा सकता है. आप इसे हटा भी सकते हैं.}other{{NUM_EXTENSIONS} ऐसे एक्सटेंशन बंद किए गए जो शायद नुकसान पहुंचा सकते हैं. आप इन्हें हटा भी सकते हैं.}}</translation>
 <translation id="3101709781009526431">तारीख और समय</translation>
 <translation id="3103941660000130485">Linux को बेहतर बनाने में गड़बड़ी हुई</translation>
 <translation id="310671807099593501">साइट ब्लूटूथ का इस्तेमाल कर रही है</translation>
@@ -1632,6 +1645,7 @@
 <translation id="3201422919974259695">उपलब्ध यूएसबी डिवाइस यहां दिखाई देंगे.</translation>
 <translation id="3202131003361292969">पाथ</translation>
 <translation id="3202173864863109533">इस टैब का ऑडियो म्‍यूट किया जा रहा है.</translation>
+<translation id="3208321278970793882">ऐप्लिकेशन</translation>
 <translation id="3208584281581115441">अभी देखें</translation>
 <translation id="3208703785962634733">पुष्टि न की गई</translation>
 <translation id="32101887417650595">प्रिंटर से कनेक्ट नहीं हो पा रहा है</translation>
@@ -1652,6 +1666,7 @@
 <translation id="3239373508713281971"><ph name="APP_NAME" /> के लिए समयसीमा हटा दी गई है</translation>
 <translation id="3241680850019875542">पैक के एक्सटेंशन की 'रूट निर्देशिका' को चुनें. किसी एक्स्टेंशन को अपडेट करने के लिए, फिर से इस्तेमाल करने के लिए 'निजी कुंजी फ़ाइल' को भी चुनें.</translation>
 <translation id="3244294424315804309">आवाज़ बंद रखें</translation>
+<translation id="3246107497225150582">{0,plural, =1{1 दिन के अंदर डिवाइस अपडेट करें}one{# दिन के अंदर डिवाइस अपडेट करें}other{# दिनों के अंदर डिवाइस अपडेट करें}}</translation>
 <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - नेटवर्क गड़बड़ी</translation>
 <translation id="3248902735035392926">सुरक्षा ज़रूरी है. थोड़ा समय निकालकर, <ph name="BEGIN_LINK" />अभी अपने एक्सटेंशन की जांच करें.<ph name="END_LINK" /></translation>
 <translation id="3249950116250264636"><ph name="APP_NAME" /> (<ph name="APP_URL" />)</translation>
@@ -1737,6 +1752,7 @@
 <translation id="3356580349448036450">पूरा हुआ</translation>
 <translation id="3359256513598016054">प्रमाणपत्र नीति बाध्यताएं</translation>
 <translation id="3360297538363969800">प्रिंट करना पूरा नहीं हो सका. कृपया अपना प्रिंटर जाँचें और फिर से कोशिश करें.</translation>
+<translation id="3364986687961713424">आपके एडमिन से: <ph name="ADMIN_MESSAGE" /></translation>
 <translation id="3365598184818502391">Ctrl या फिर Alt का इस्तेमाल करें</translation>
 <translation id="3367047597842238025">अपनी पसंद के हिसाब से अपना <ph name="DEVICE_TYPE" /> सेट अप करें और उन सभी अनोखी क्षमताओं का पता लगाएं जिन तक आप आसानी से पहुंच सकते हैं .</translation>
 <translation id="3368922792935385530">कनेक्टेड</translation>
@@ -1837,6 +1853,7 @@
 <translation id="3496213124478423963">ज़ूम आउट</translation>
 <translation id="3497560059572256875">डूडल शेयर करें</translation>
 <translation id="3498215018399854026">हम इस समय आपके अभिभावक तक नहीं पहुंच पा रहे हैं. कृपया फिर से प्रयास करें.</translation>
+<translation id="3500417806337761827">शेयर माउंट करने में गड़बड़ी हुई. बहुत से एसएमबी शेयर पहले ही माउंट कर दिए गए हैं.</translation>
 <translation id="3505030558724226696">डिवाइस एक्सेस रद्द करें</translation>
 <translation id="3507421388498836150">"<ph name="EXTENSION_NAME" />" के लिए वर्तमान अनुमतियां</translation>
 <translation id="3507888235492474624">ब्लूटूथ डिवाइस के लिए दोबारा स्कैन करें</translation>
@@ -1901,6 +1918,7 @@
 <translation id="3592260987370335752">&amp;अधिक जानें</translation>
 <translation id="359283478042092570">प्रवेश</translation>
 <translation id="3593965109698325041">प्रमाणपत्र नाम बाध्यताएं</translation>
+<translation id="3595381248165458839">अपने संगठन के डिवाइस एडमिन से संपर्क करें</translation>
 <translation id="3596235046596950091">क्लाउड सेवाएं चालू करें</translation>
 <translation id="3599221874935822507">बढ़ाया गया</translation>
 <translation id="3599863153486145794">साइन इन किए हुए सभी डिवाइसों से इतिहास साफ़ कर देता है. आपके Google खाते में <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> पर अन्य प्रकार के ब्राउज़िंग इतिहास हो सकते हैं.</translation>
@@ -2032,6 +2050,7 @@
 <translation id="3742055079367172538">स्क्रीनशॉट लिया गया</translation>
 <translation id="3742666961763734085">इस नाम की संगठनात्मक इकाई नहीं मिल पा रही है. कृपया फिर से कोशिश करें.</translation>
 <translation id="3744111561329211289">बैकग्राउंड सिंक</translation>
+<translation id="3747039297326604768">Plugin VM को खोला नहीं जा सका</translation>
 <translation id="3747077776423672805">ऐप्लिकेशन हटाने के लिए, सेटिंग &gt; 'Google Play स्टोर' &gt; Android से जुड़ी पसंद प्रबंधित करें &gt; ऐप्लिकेशन या ऐप्लिकेशन मैनेजर पर जाएं. उसके बाद उस ऐप्लिकेशन पर टैप करें जिसे आप अनइंस्टॉल करना चाहते हैं (ऐप्लिकेशन ढूंढने के लिए आपको दाएं या बाएं स्वाइप करना पड़ सकता है). फिर 'अनइंस्टॉल करें' या 'बंद करें' पर टैप करें.</translation>
 <translation id="3748026146096797577">कनेक्ट नहीं है</translation>
 <translation id="3752582316358263300">ठीक है...</translation>
@@ -2106,6 +2125,7 @@
 <translation id="3827774300009121996">&amp;पूर्ण स्क्रीन</translation>
 <translation id="3828029223314399057">बुकमार्क से खोजें</translation>
 <translation id="3829765597456725595">एसएमबी फ़ाइल शेयर</translation>
+<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{आपके एडमिन ने 1 ऐसा एक्सटेंशन फिर से चालू कर दिया है जो शायद नुकसान पहुंचा सकता है}one{आपके एडमिन ने {NUM_EXTENSIONS} ऐसा एक्सटेंशन फिर से चालू कर दिया है जो शायद नुकसान पहुंचा सकता है}other{आपके एडमिन ने {NUM_EXTENSIONS} ऐसे एक्सटेंशन फिर से चालू कर दिए हैं जो शायद नुकसान पहुंचा सकते हैं}}</translation>
 <translation id="3831436149286513437">'Google डिस्क' के खोज सुझाव</translation>
 <translation id="383161972796689579">इस डिवाइस के मालिक ने नए उपयोगकर्ता जोड़े जाना अक्षम कर दिया है</translation>
 <translation id="3834775135533257713">"<ph name="TO_INSTALL_APP_NAME" />" ऐप्लिकेशन जोड़ा नहीं जा सका क्योंकि उसका "<ph name="INSTALLED_APP_NAME" />" से विरोध है.</translation>
@@ -2275,6 +2295,7 @@
 <translation id="4047726037116394521">होम पेज पर जाएं</translation>
 <translation id="4050225813016893843">पुष्टि करने का तरीका</translation>
 <translation id="4052120076834320548">छोटा</translation>
+<translation id="4056908315660577142">आप उस समयसीमा तक पहुंच गए हैं जो आपके माता-पिता ने <ph name="APP_NAME" /> Chrome ऐप्लिकेशन के लिए तय की थी. आप इसे कल <ph name="TIME_LIMIT" /> के लिए इस्तेमाल कर सकते हैं.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">स्टोर में देखें</translation>
 <translation id="4058647953897694817">ब्लूटूथ के ज़रिए पुष्टि करें</translation>
@@ -2404,6 +2425,7 @@
 <translation id="424963718355121712">ऐप्लिकेशन को उस होस्ट से पेश किया जाना चाहिए, जिसे वे प्रभावित करते हैं</translation>
 <translation id="4250229828105606438">स्क्रीनशॉट</translation>
 <translation id="4250680216510889253">नहीं</translation>
+<translation id="4252035718262427477">वेबपेज, एक फ़ाइल (वेब बंडल)</translation>
 <translation id="4252852543720145436">सुरक्षित सामग्री के पहचानकर्ता</translation>
 <translation id="4252899949534773101">ब्लूटूथ बंद है</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - टैब सामग्री शेयर की गई</translation>
@@ -2498,6 +2520,7 @@
 <translation id="4400963414856942668">टैब को बुकमार्क करने के लिए आप स्टार के निशान पर क्लिक कर सकते हैं</translation>
 <translation id="4403775189117163360">कोई दूसरा फ़ोल्डर चुनें</translation>
 <translation id="4404136731284211429">फिर से स्कैन करें</translation>
+<translation id="4404843640767531781">आपके माता-पिता ने <ph name="APP_NAME" /> को ब्लॉक किया है. उनसे इस ऐप्लिकेशन का इस्तेमाल करने की अनुमति लें.</translation>
 <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation>
 <translation id="4408599188496843485">स&amp;हायता</translation>
 <translation id="4409697491990005945">मार्जिन</translation>
@@ -2565,6 +2588,7 @@
 <translation id="450099669180426158">'विस्मयादिबोधक चिह्न' आइकॉन</translation>
 <translation id="4501530680793980440">हटाने की पुष्टि करें</translation>
 <translation id="4502423230170890588">इस डिवाइस से हटाएं</translation>
+<translation id="4504374760782163539">{COUNT,plural, =0{कुकी की अनुमति है}=1{कुकी की अनुमति है, 1 अपवाद}one{कुकी की अनुमति है, {COUNT} अपवाद}other{कुकी की अनुमति है, {COUNT} अपवाद}}</translation>
 <translation id="4504940961672722399">इस आइकॉन पर क्लिक करके या <ph name="EXTENSION_SHORTCUT" /> को दबाकर यह एक्सटेंशन चालू करें.</translation>
 <translation id="4508051413094283164">सभी को गुप्त विंडो में खोलें</translation>
 <translation id="4508265954913339219">सक्रियण विफल</translation>
@@ -2676,6 +2700,7 @@
 <translation id="465878909996028221">ब्राउज़र रीडायरेक्ट के लिए सिर्फ़ एचटीटीपी, एचटीटीपीएस और फ़ाइल प्रोटोकॉल काम करते हैं.</translation>
 <translation id="4659077111144409915">प्राथमिक खाता</translation>
 <translation id="4660476621274971848">अपेक्षित वर्शन "<ph name="EXPECTED_VERSION" />" है, लेकिन वर्शन "<ph name="NEW_ID" />" था</translation>
+<translation id="4660540330091848931">साइज़ बदला जा रहा है</translation>
 <translation id="4660838440047236328">आपके कमरे का लेआउट</translation>
 <translation id="4662788913887017617">इस बुकमार्क को अपने iPhone से शेयर करें</translation>
 <translation id="4663373278480897665">कैमरे की अनुमति है</translation>
@@ -2855,6 +2880,7 @@
 <translation id="4918086044614829423">स्वीकार करें</translation>
 <translation id="4918221908152712722"><ph name="APP_NAME" /> इंस्टॉल करें (डाउनलोड करने की ज़रूरत नहीं है)</translation>
 <translation id="4920887663447894854">निम्न साइटों को इस पेज पर आपकी स्थिति ट्रैक करने से अवरोधित कर दिया गया है:</translation>
+<translation id="49226369361073053">{0,plural, =0{डिवाइस को अभी अपडेट करें}=1{डिवाइस को 1 सेकंड में अपडेट करें}one{डिवाइस को # सेकंड में अपडेट करें}other{डिवाइस को # सेकंड में अपडेट करें}}</translation>
 <translation id="492299503953721473">Android ऐप्लिकेशन निकालें</translation>
 <translation id="4923279099980110923">हां, मुझे सहायता चाहिए</translation>
 <translation id="4924352752174756392">12x</translation>
@@ -3001,6 +3027,7 @@
 <translation id="5135085122826131075">"Ok Google" बोलकर अपनी Assistant की सेवा ऐक्सेस करें.</translation>
 <translation id="5135533361271311778">बुकमार्क आइटम नहीं बना सका.</translation>
 <translation id="5137501176474113045">यह आइटम मिटाएं</translation>
+<translation id="5138982052046316113">Linux डिस्क का साइज़ बदलें</translation>
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> खोजें</translation>
 <translation id="5139823398361067371">अपनी सुरक्षा कुंजी का पिन डालें. अगर आपको पिन नहीं पता है, तो सुरक्षा कुंजी रीसेट करनी होगी.</translation>
 <translation id="5139955368427980650">&amp;खोलें</translation>
@@ -3154,6 +3181,7 @@
 <translation id="5353252989841766347">Chrome से पासवर्ड निर्यात करें</translation>
 <translation id="5355099869024327351">Assistant को आपको सूचनाएं दिखाने दें</translation>
 <translation id="5355926466126177564">एक्सटेंशन "<ph name="EXTENSION_NAME" />" ने यह बदल दिया है कि जब आप ऑम्निबॉक्स से खोजते हैं तब कौन सा पेज दिखाया जाए.</translation>
+<translation id="535911077628776608"><ph name="FILE_NAME" /> खतरनाक हो सकती है. क्या आप इसे स्कैनिंग के लिए 'Google बेहतर सुरक्षा' को भेजना चाहते हैं? डाउनलोड बार वाले हिस्से पर जाने के लिए Shift+F6 दबाएं.</translation>
 <translation id="5359910752122114278">एक नतीजा</translation>
 <translation id="5360150013186312835">टूलबार में दिखाएं</translation>
 <translation id="5362741141255528695">निजी कुंजी फ़ाइल को चुनें.</translation>
@@ -3291,6 +3319,7 @@
 <translation id="5539221284352502426">आपने जो पासवर्ड डाला है, उसे सर्वर ने अस्वीकार कर दिया है. संभावित कारण ये हो सकते हैं: पासवर्ड बहुत छोटा है. पासवर्ड में संख्याएं या चिह्न होने चाहिए. पासवर्ड, पिछले पासवर्ड से अलग होना चाहिए.</translation>
 <translation id="5541694225089836610">आपके एडमिन ने कार्रवाई बंद कर दी है</translation>
 <translation id="5542132724887566711">प्रोफ़ाइल</translation>
+<translation id="5542133445231529202"><ph name="ORGANIZATION_NAME" /> ने कहा है कि आप इस डिवाइस को तुरंत अपडेट करें.</translation>
 <translation id="5542750926112347543"><ph name="DOMAIN" /> की कुकी ब्लॉक की गई हैं</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> से कनेक्ट हो रहा है</translation>
 <translation id="5543983818738093899">स्थिति की जाँच की जा रही है...</translation>
@@ -3336,6 +3365,7 @@
 <translation id="5593357315997824387">मेरी फ़ाइलों को सिंक करें</translation>
 <translation id="5595152862129936745">बहुत दूर</translation>
 <translation id="5595485650161345191">पते में बदलाव करें</translation>
+<translation id="5595727715083333657">आपके कंटेनर में साइज़ बदलने की सुविधा नहीं है. Linux (बीटा) के लिए पहले से तय की गई जगह में बदलाव करने के लिए, उसका बैक अप लें. इसके बाद, उसे नए कंटेनर में फिर से सेव करें.</translation>
 <translation id="5596627076506792578">ज़्यादा विकल्प</translation>
 <translation id="5600706100022181951">अपडेट को डाउनलोड करने में <ph name="UPDATE_SIZE_MB" /> एमबी मोबाइल डेटा का इस्तेमाल होगा. क्या आप जारी रखना चाहते हैं?</translation>
 <translation id="5601503069213153581">पिन</translation>
@@ -3407,6 +3437,7 @@
 <translation id="5691511426247308406">परिवार</translation>
 <translation id="5691772641933328258">फ़िंगरप्रिंट नहीं पहचाना गया</translation>
 <translation id="5692183275898619210">प्रिंट हो गया</translation>
+<translation id="5692875591060376599">चुनी गई फ़ाइल अज्ञात है और खतरनाक हो सकती है. क्या आप इसे स्कैनिंग के लिए 'Google बेहतर सुरक्षा' को भेजना चाहते हैं?</translation>
 <translation id="569425414730375234">मौजूदा गुप्त सत्र: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation>
 <translation id="5696143504434933566">"<ph name="EXTENSION_NAME" />" से दुर्व्यवहार की रिपोर्ट करें</translation>
 <translation id="5696679855467848181">मौजूदा पीपीडी फ़ाइल का इस्तेमाल किया जा रहा है: <ph name="PPD_NAME" /></translation>
@@ -3615,6 +3646,7 @@
 <translation id="5976160379964388480">अन्य</translation>
 <translation id="5978277834170881274">&amp;बुनियादी 'वर्तनी जाँच' का इस्तेमाल करें</translation>
 <translation id="5979084224081478209">पासवर्ड जांचें</translation>
+<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{आपने 1 ऐसा एक्सटेंशन फिर से चालू कर दिया है जो शायद नुकसान पहुंचा सकता है}one{आपके एडमिन ने {NUM_EXTENSIONS} ऐसा एक्सटेंशन फिर से चालू कर दिया है जो शायद नुकसान पहुंचा सकता है}other{आपने {NUM_EXTENSIONS} ऐसे एक्सटेंशन फिर से चालू कर दिए हैं जो शायद नुकसान पहुंचा सकते हैं}}</translation>
 <translation id="5979421442488174909"><ph name="LANGUAGE" /> में &amp;अनुवाद करें</translation>
 <translation id="5979469435153841984">पेज बुकमार्क करने के लिए, पता बार में मौजूद तारे के निशान पर क्‍लिक करें.</translation>
 <translation id="5984222099446776634">हाल ही में देखे गए</translation>
@@ -3861,6 +3893,7 @@
 <translation id="6309510305002439352">माइक्रोफ़ोन बंद किया गया</translation>
 <translation id="6311220991371174222">Chrome शुरू नहीं हो पा रहा है क्योंकि आपकी प्रोफ़ाइल खोलते समय कुछ गलत हो गया. Chrome को फिर से शुरू करने की कोशिश करें.</translation>
 <translation id="6312403991423642364">अज्ञात नेटवर्क गड़बड़ी</translation>
+<translation id="6312567056350025599">{NUM_DAYS,plural, =1{सुरक्षा जांच 1 दिन पहले हुई है}one{सुरक्षा जांच {NUM_DAYS} दिन पहले हुई है}other{सुरक्षा जांच {NUM_DAYS} दिन पहले हुई है}}</translation>
 <translation id="6312638141433622592">अगर सुविधा उपलब्ध है, तो लेख को रीडर मोड में दिखाने का विकल्प दें</translation>
 <translation id="6313641880021325787">VR से बाहर निकलें</translation>
 <translation id="6314819609899340042">आपने इस <ph name="IDS_SHORT_PRODUCT_NAME" /> डिवाइस पर डीबग करने की सुविधाओं को सफलतापूर्वक सक्षम कर लिया है.</translation>
@@ -3876,6 +3909,7 @@
 <translation id="6325191661371220117">ऑटो-लॉन्च बंद करें</translation>
 <translation id="6326175484149238433">Chrome से नि‍कालें</translation>
 <translation id="6326855256003666642">कीपअलाइव की गणना</translation>
+<translation id="632707535499064463"><ph name="ORGANIZATION_NAME" /> ने कहा है कि आप तय समय से पहले इस डिवाइस को अपडेट करें.</translation>
 <translation id="6327785803543103246">वेब प्रॉक्सी अपने आप खोज</translation>
 <translation id="6333064448949140209">डीबग करने के लिए फ़ाइल Google को भेजी जाएगी</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> के लिए एक नया प्रोफ़ाइल बनाएं</translation>
@@ -3901,11 +3935,13 @@
 <translation id="6365411474437319296">परिवार और मित्रों को जोड़ें</translation>
 <translation id="636850387210749493">एंटरप्राइज़ नामांकन</translation>
 <translation id="6370021412472292592">मेनिफ़ेस्‍ट लोड नहीं किया जा सका.</translation>
+<translation id="6371486244597785139">{NUM_PASSWORDS,plural, =1{पासवर्ड बदलें}one{पासवर्ड बदलें}other{पासवर्ड बदलें}}</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">फिर से कोशिश करें</translation>
 <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' के लिए एक नतीजा मिला है</translation>
 <translation id="6380143666419481200">स्वीकार करें और जारी रखें</translation>
 <translation id="6384275966486438344">अपनी खोज सेटिंग इसमें बदलें: <ph name="SEARCH_HOST" /></translation>
+<translation id="6385149369087767061">इंटरनेट से जोड़ें और फिर से कोशिश करें</translation>
 <translation id="6385543213911723544">साइटें कुकी डेटा को सेव सकती हैं और पढ़ सकती हैं</translation>
 <translation id="6386099547750337629">अगर ऐसा नहीं होना चाहिए था, तो कृपया 'सहायता' से संपर्क करें.</translation>
 <translation id="6387674443318562538">वर्टिकल (ऊपर से नीचे की ओर) रूप से छोटे-छोटे हिस्सों में बांटें यानी स्प्लिट करें</translation>
@@ -3983,6 +4019,7 @@
 <translation id="6478248366783946499">खतरनाक फ़ाइल रखें?</translation>
 <translation id="6483485061007832714">डाउनलोड खोलें</translation>
 <translation id="6483805311199035658"><ph name="FILE" /> खोला जा रहा है...</translation>
+<translation id="6485092675191826776">Plugin VM लाइसेंस की समयसीमा खत्म हो गई है</translation>
 <translation id="6488384360522318064">भाषा चुनें</translation>
 <translation id="648927581764831596">कोई भी उपलब्ध नहीं</translation>
 <translation id="6490471652906364588">USB-C डिवाइस (दायां पोर्ट)</translation>
@@ -4171,6 +4208,7 @@
 <translation id="6762833852331690540">चालू है</translation>
 <translation id="6767566652486411142">कोई दूसरी भाषा चुनें...</translation>
 <translation id="6767639283522617719">डोमेन से नहीं जोड़ सकते. पक्का करें कि संगठनात्मक इकाई के लिए सेटिंग सही हैं.</translation>
+<translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> का सुझाव है कि आप इस डिवाइस को अपडेट करें.</translation>
 <translation id="6769712124046837540">प्रिंटर जोड़ा जा रहा है...</translation>
 <translation id="6770602306803890733">यह सुविधा, वेब पर आपकी और सभी उपयोगकर्ताओं की सुरक्षा को बेहतर बनाती है</translation>
 <translation id="6770664076092644100">NFC के ज़रिए पुष्टि करें</translation>
@@ -4301,6 +4339,7 @@
 <translation id="6943836128787782965">HTTP विफल हुआ</translation>
 <translation id="6945221475159498467">चुनें</translation>
 <translation id="694592694773692225">इस पेज पर रीडायरेक्ट ब्लॉक किया गया.</translation>
+<translation id="6947526360212886241">{NUM_PASSWORDS,plural, =1{1 पासवर्ड या तो हैक हुआ है या चोरी हुआ है}one{{NUM_PASSWORDS} पासवर्ड या तो हैक हुआ है या चोरी हुआ है}other{{NUM_PASSWORDS} पासवर्ड या तो हैक हुए हैं या चोरी हुए हैं}}</translation>
 <translation id="6949434160682548041">पासवर्ड (वैकल्पिक)</translation>
 <translation id="6950627417367801484">ऐप्लिकेशन बहाल करें</translation>
 <translation id="6950943362443484797">हम आपके लिए वह ऐप्लिकेशन इंस्टॉल करेंगे</translation>
@@ -4384,6 +4423,7 @@
 <translation id="7053983685419859001">ब्लॉक करें</translation>
 <translation id="7055152154916055070">रीडायरेक्ट ब्लॉक किया गया:</translation>
 <translation id="7056526158851679338">&amp;उपकरणों की जाँच करें</translation>
+<translation id="7057184853669165321">{NUM_MINS,plural, =1{सुरक्षा जांच 1 मिनट पहले की गई है}one{सुरक्षा जांच {NUM_MINS} मिनट पहले की गई है}other{सुरक्षा जांच {NUM_MINS} मिनट पहले की गई है}}</translation>
 <translation id="7057767408836081338">ऐप्लिकेशन का डेटा नहीं मिल सका. इसके बावजूद, ऐप्लिकेशन को चलाने की कोशिश की जा रही है...</translation>
 <translation id="7059858479264779982">अपने-आप-लॉन्च पर सेट करें</translation>
 <translation id="7059893117020417984">निजी रूप से ब्राउज़ करने के लिए, 'डॉट आइकॉन मेन्यू' पर क्लिक करके 'गुप्त विंडो' खोलें</translation>
@@ -4621,6 +4661,7 @@
 <translation id="7370592524170198497">ईथरनेट EAP:</translation>
 <translation id="7371006317849674875">शुरू करने का समय</translation>
 <translation id="7375053625150546623">EAP</translation>
+<translation id="7375235221357833624">{0,plural, =1{1 घंटे के अंदर डिवाइस अपडेट करें}one{# घंटे के अंदर डिवाइस अपडेट करें}other{# घंटों के अंदर डिवाइस अपडेट करें}}</translation>
 <translation id="7376553024552204454">माउस कर्सर के हिलने पर उसे हाइलाइट करें</translation>
 <translation id="7377451353532943397">सेंसर का ऐक्सेस ब्लॉक करते रहें</translation>
 <translation id="73786666777299047">Chrome वेब स्टोर खोलें</translation>
@@ -4638,6 +4679,7 @@
 <translation id="7400418766976504921">URL</translation>
 <translation id="7400839060291901923">अपने <ph name="PHONE_NAME" /> पर कनेक्शन सेट अप करें</translation>
 <translation id="7401778920660465883">यह मैसेज खारिज करें</translation>
+<translation id="7405938989981604410">{NUM_HOURS,plural, =1{सुरक्षा जांच 1 घंटे पहले हुई है}one{सुरक्षा जांच {NUM_HOURS} घंटे पहले हुई है}other{सुरक्षा जांच {NUM_HOURS} घंटे पहले हुई है}}</translation>
 <translation id="740624631517654988">पॉप-अप अवरोधित</translation>
 <translation id="7407430846095439694">आयात करें और आबद्ध करें</translation>
 <translation id="7407504355934009739">ज़्यादातर लोग इस साइट को सूचनाएं दिखाने से रोकते हैं</translation>
@@ -4668,6 +4710,7 @@
 <translation id="7441830548568730290">अन्य उपयोगकर्ता</translation>
 <translation id="7442465037756169001">आपका Hangouts Meet hardware सेट अप किए जाने के लिए तैयार है.</translation>
 <translation id="744341768939279100">नई प्रोफ़ाइल बनाएं</translation>
+<translation id="744366959743242014">डेटा को लोड किया जा रहा है, इसमें कुछ सेकंड लग सकते हैं.</translation>
 <translation id="7443806024147773267">अपने Google खाते में साइन इन करके जब चाहें अपने पासवर्ड को ऐक्सेस करें</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> बंद करें</translation>
 <translation id="7448430327655618736">ऐप्लिकेशन को अपने आप इंस्टॉल करें</translation>
@@ -4702,6 +4745,7 @@
 <translation id="7489761397368794366">अपने डिवाइस से कॉल करें</translation>
 <translation id="749028671485790643">व्यक्ति <ph name="VALUE" /></translation>
 <translation id="7490813197707563893">MAC पता</translation>
+<translation id="7491963308094506985">{NUM_COOKIES,plural, =1{1 कुकी}one{{NUM_COOKIES} कुकी}other{{NUM_COOKIES} कुकी}}</translation>
 <translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> एक्सटेंशन,   लिखे जाने वाले सभी लेख को एकत्र कर सकता है, जिसमें पासवर्ड और क्रेडिट कार्ड नंबर जैसा व्यक्तिगत डेटा भी शामिल है. क्या आप इस एक्सटेंशन का उपयोग करना चाहते हैं?</translation>
 <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="7495778526395737099">क्या आप अपना पुराना पासवर्ड भूल गए हैं?</translation>
@@ -4722,10 +4766,14 @@
 <translation id="7513029293694390567">स्टोर किए गए क्रेडेंशियल के ज़रिए वेबसाइट में अपने आप साइन इन करें. बंद होने पर, आपसे किसी वेबसाइट में साइन इन करने से पहले हर बार पुष्टि करने के लिए कहा जाएगा.</translation>
 <translation id="7514239104543605883">अपने डिवाइस में कॉपी करें</translation>
 <translation id="7514365320538308">डाउनलोड करें</translation>
+<translation id="751523031290522286">आपके एडमिन ने <ph name="APP_NAME" /> को ब्लॉक किया है. इस ऐप्लिकेशन का इस्तेमाल करने के लिए, एडमिन से अनुमति मांगें.</translation>
+<translation id="7516981202574715431"><ph name="APP_NAME" /> को रोका गया</translation>
+<translation id="7517063221058203587">{0,plural, =1{डिवाइस को 1 मिनट में अपडेट करें}one{डिवाइस को # मिनट में अपडेट करें}other{डिवाइस को # मिनट में अपडेट करें}}</translation>
 <translation id="7520766081042531487">गुप्त पोर्टल: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7522255036471229694">"Ok Google" बोलें</translation>
 <translation id="7525067979554623046">बनाएं</translation>
+<translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 और}one{{NUM_DOWNLOADS} और}other{{NUM_DOWNLOADS} और}}</translation>
 <translation id="7529411698175791732">अपना इंटरनेट कनेक्शन जाँचें. अगर समस्या बनी रहती है, तो साइन आउट करें और दोबारा साइन इन करके देखें.</translation>
 <translation id="7530016656428373557">डिस्चार्ज दर वॉट में</translation>
 <translation id="7531779363494549572">सेटिंग &gt; ऐप्लिकेशन और सूचनाएं &gt; सूचनाएं पर जाएं.</translation>
@@ -4890,6 +4938,7 @@
 <translation id="7765158879357617694">ले जाएं</translation>
 <translation id="7766807826975222231">एक झलक देखें</translation>
 <translation id="7766838926148951335">अनुमतियां स्वीकार करें</translation>
+<translation id="7768770796815395237">बदलें</translation>
 <translation id="7769672763586021400">मॉडल आईडी</translation>
 <translation id="7770651108375708429">वाई-फ़ाई डिसकनेक्ट करें</translation>
 <translation id="7771452384635174008">लेआउट</translation>
@@ -5322,6 +5371,7 @@
 <translation id="8286963743045814739">आप गुप्त विंडो का उपयोग करके निजी रूप से ब्राउज़ कर सकते हैं</translation>
 <translation id="8287902281644548111">एपीआई कॉल/यूआरएल के हिसाब से खोजें</translation>
 <translation id="8288032458496410887"><ph name="APP" /> ऐप्लिकेशन अनइंस्टॉल करें...</translation>
+<translation id="8289128870594824098">डिस्क का साइज़</translation>
 <translation id="8291967909914612644">'होम' पर काम करने वाली सेवाएं देने वाला देश</translation>
 <translation id="8294431847097064396">स्रोत</translation>
 <translation id="8297006494302853456">कमज़ोर</translation>
@@ -5531,6 +5581,7 @@
 <translation id="8608618451198398104">Kerberos टिकट जोड़ें</translation>
 <translation id="8609465669617005112">ऊपर जाएं</translation>
 <translation id="8610103157987623234">फ़ॉर्मैट गलत है, कृपया फिर से कोशिश करें</translation>
+<translation id="8612935480510351790"><ph name="FILE_NAME" /> खतरनाक हो सकती है. क्या आप इसे स्कैनिंग के लिए 'Google बेहतर सुरक्षा' को भेजना चाहते हैं?</translation>
 <translation id="8613164732773110792">सिर्फ़ छोटे अक्षर, अंक, अंडरस्कोर या डैश</translation>
 <translation id="8615618338313291042">गुप्‍त ऐप्लिकेशन: <ph name="APP_NAME" /></translation>
 <translation id="8619803522055190423">ड्रॉप शैडो</translation>
@@ -5556,6 +5607,7 @@
 <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - पोर्ट</translation>
 <translation id="8642900771896232685">2 सेकंड</translation>
 <translation id="8642947597466641025">लेख को बड़ा करें</translation>
+<translation id="8643443571868262066"><ph name="FILE_NAME" /> खतरनाक हो सकती है. क्या आप इसे स्कैनिंग के लिए 'Google बेहतर सुरक्षा' को भेजना चाहते हैं?</translation>
 <translation id="8644655801811752511">यह सुरक्षा कुंजी रीसेट नहीं हो पा रही है. कुंजी डालने के तुरंत बाद इसे रीसेट करके देखें.</translation>
 <translation id="8645354835496065562">सेंसर का ऐक्सेस जारी रहने दें</translation>
 <translation id="8645920082661222035">यह सुविधा, नुकसान पहुंचाने वाली घटनाओं का पहले से अंदाज़ा लगाती है और उनके बारे में आपको चेतावनी देती है</translation>
@@ -5968,6 +6020,7 @@
 <translation id="9169931577761441333">होम स्क्रीन पर <ph name="APP_NAME" /> जोड़ें</translation>
 <translation id="9170848237812810038">&amp;पूर्ववत् करें</translation>
 <translation id="9170884462774788842">आपके कंप्यूटर पर किसी अन्य प्रोग्राम ने एक्सटेंशन जोड़ा है, जो Chrome के काम करने के तरीके को बदल सकता है.</translation>
+<translation id="917350715406657904">आप उस समयसीमा तक पहुंच गए हैं जो आपके माता-पिता ने <ph name="APP_NAME" /> के लिए तय की थी. आप इसे कल <ph name="TIME_LIMIT" /> के लिए इस्तेमाल कर सकते हैं.</translation>
 <translation id="9173995187295789444">ब्लूटूथ डिवाइस के लिए स्कैन किया जा रहा है...</translation>
 <translation id="917510707618656279">जब कोई साइट ब्लूटूथ डिवाइस ऐक्सेस करना चाहे, तो इसके लिए पूछें</translation>
 <translation id="9176476835295860688">इस्तेमाल और निदान से जुड़ा डेटा भेजें. यह डिवाइस फ़िलहाल Google को निदान, डिवाइस, और ऐप्लिकेशन के इस्तेमाल से जुड़ा डेटा अपने आप भेज रहा है. यह सिस्टम और ऐप्लिकेशन की स्थिरता और दूसरे सुधारों में मदद करेगा. कुछ एग्रीगेट डेटा Google ऐप्लिकेशन और पार्टनर, जैसे कि Android डेवलपरों की भी मदद करेगा. यह <ph name="BEGIN_LINK1" />सेटिंग<ph name="END_LINK1" /> डिवाइस के मालिक ने लागू की है. अगर आपकी दूसरी 'वेब और ऐप्लिकेशन गतिविधि' सेटिंग चालू है, तो यह डेटा आपके Google खाते में सेव किया जा सकता है. <ph name="BEGIN_LINK2" />ज़्यादा जानें<ph name="END_LINK2" /></translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 7b95777..f7f77204 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Prenesi</translation>
 <translation id="1244265436519979884">U tijeku je vraćanje Linuxa</translation>
 <translation id="1244303850296295656">Pogreška proširenja</translation>
+<translation id="1246158006305844142">Vaše aplikacije i postavke sinkronizirat će se na svim uređajima s OS-om Chrome na kojima ste prijavljeni svojim Google računom. Za opcije sinkronizacije preglednika otvorite <ph name="LINK_BEGIN" />postavke Chromea<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Želite li ukloniti prijedlog iz međuspremnika?</translation>
 <translation id="1249643471736608405">Dodatak <ph name="PLUGIN_NAME" /> blokiran je jer je zastario</translation>
 <translation id="1251366534849411931">Očekivano otvaranje vitičaste zagrade: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Ne, hvala</translation>
 <translation id="1525740877599838384">Za utvrđivanje lokacije upotrebljava se samo Wi-Fi</translation>
 <translation id="152629053603783244">Ponovo pokrenite Linux</translation>
+<translation id="1526335046150927198">Omogući ubrzanje pomicanja dodirnom podlogom</translation>
 <translation id="1526560967942511387">Neimenovani dokument</translation>
 <translation id="1529891865407786369">Izvor napajanja</translation>
 <translation id="1530838837447122178">Otvorite postavke miša i dodirne podloge na uređaju</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Veza s mrežom ponovno je uspostavljena</translation>
 <translation id="2727633948226935816">Nemoj me više podsjećati</translation>
 <translation id="2727712005121231835">Stvarna veličina</translation>
+<translation id="2729314457178420145">Izbrišite i podatke o pregledavanju (<ph name="URL" />), čime ćete se možda odjaviti s web-lokacije Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Sigurnosno kopiranje Linux aplikacija i datoteka</translation>
 <translation id="273093730430620027">Ova stranica pristupa vašoj kameri.</translation>
 <translation id="2731392572903530958">P&amp;onovo otvori zatvoreni prozor</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Više za <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Kolačići i ostali podaci o web-lokacijama i dodacima</translation>
 <translation id="383891835335927981">Nijedna web-lokacija nije povećana ili smanjena</translation>
+<translation id="3839509547554145593">Omogući ubrzanje pomicanja mišem</translation>
 <translation id="3839516600093027468">Uvijek blokiraj web-lokaciji <ph name="HOST" /> uvid u međuspremnik</translation>
 <translation id="3841964634449506551">Zaporka nije važeća</translation>
 <translation id="3842552989725514455">Font Serif</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Predmemorirane slike i datoteke</translation>
 <translation id="4699357559218762027">(pokrenuto automatski)</translation>
 <translation id="470074695271471509">Odjava radi završetka?</translation>
+<translation id="4701025263201366865">Prijava roditelja</translation>
 <translation id="4707302005824653064">Upravitelj (<ph name="CUSTODIAN_EMAIL" />) može pregledati upotrebu i povijest na adresi chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + korisnički certifikat</translation>
 <translation id="4708794300267213770">Prikaži zaključan zaslon prilikom vraćanja iz mirovanja</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> pretraživanje</translation>
 <translation id="5139823398361067371">Unesite PIN za sigurnosni ključ. Ako ne znate PIN, morat ćete vratiti sigurnosni ključ na zadano.</translation>
 <translation id="5139955368427980650">&amp;Otvori</translation>
+<translation id="5142793792982256885">Brzina pomicanja dodirnom podlogom</translation>
 <translation id="5142961317498132443">Autentifikacija</translation>
 <translation id="5143374789336132547">Proširenje "<ph name="EXTENSION_NAME" />" promijenilo je stranicu koja se prikazuje kada se klikne gumb Početna.</translation>
 <translation id="5143712164865402236">Otvori na cijelom zaslonu</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Žuta</translation>
 <translation id="5906655207909574370">Ažuriranje će uskoro biti gotovo. Za dovršetak ponovo pokrenite uređaj.</translation>
 <translation id="5906732635754427568">Podaci povezani s tom aplikacijom uklonit će se s uređaja.</translation>
+<translation id="5908695239556627796">Brzina pomicanja mišem</translation>
 <translation id="5908769186679515905">Onemogući web-lokacijama pokretanje Flasha</translation>
 <translation id="5910363049092958439">Sp&amp;remi sliku kao...</translation>
 <translation id="5910726859585389579">Uređaj <ph name="DEVICE_TYPE" /> nije povezan s internetom</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Napomena:<ph name="END_BOLD" /> sustav će se ponovo pokrenuti tijekom postupka.</translation>
 <translation id="7828731929332799387">Time će se izbrisati svi kolačići i podaci o web-lokaciji treće strane. Želite li nastaviti?</translation>
 <translation id="7829298379596169484">Pristupanje audioulazu</translation>
+<translation id="7829877209233347340">Zamoli roditelja da se prijavi i da ti da dopuštenje za dodavanje školskog računa</translation>
 <translation id="7830594666202422257">Poveži s Linuxom</translation>
 <translation id="7831491651892296503">Pogreška prilikom konfiguriranja mreže</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">Mačka</translation>
 <translation id="8808744862003883508">Na ovoj stranici možete vidjeti sva proširenja instalirana u Chromeu.</translation>
 <translation id="8809147117840417135">Svijetlotirkiznoplava</translation>
+<translation id="8812593354822910461">Izbrišite i podatke o pregledavanju (<ph name="URL" />), čime ćete se odjaviti s web-lokacije <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Prijava na <ph name="USERNAME" /> nije uspjela</translation>
 <translation id="8813811964357448561">list papira</translation>
 <translation id="8813872945700551674">Potraži roditelja koji će odobriti proširenje „<ph name="EXTENSION_NAME" />”</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">&amp;Profiliranje omogućeno</translation>
 <translation id="9203904171912129171">Odaberite uređaj</translation>
 <translation id="9203962528777363226">Administrator ovog uređaja onemogućio je dodavanje novih korisnika</translation>
+<translation id="9209689095351280025">Web-lokacije ne mogu upotrebljavati kolačiće koji vas prate na webu</translation>
 <translation id="9211177926627870898">Potrebno je ažuriranje</translation>
 <translation id="9214520840402538427">Ups! Inicijalizacija atributa vremena instalacije istekla je. Obratite se predstavniku podrške.</translation>
 <translation id="9214695392875603905">Kolač</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 8ace78ed..b21837e0 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -281,7 +281,7 @@
 <translation id="1386387014181100145">Üdvözöljük!</translation>
 <translation id="138784436342154190">Visszaállítja az alapértelmezett kezdőoldalt?</translation>
 <translation id="1390548061267426325">Megnyitás normál lapként</translation>
-<translation id="1392232653471491344">A Linux újraindítása szükséges</translation>
+<translation id="1392232653471491344">Újra kell indítani a Linuxot</translation>
 <translation id="1393283411312835250">Nap és felhők</translation>
 <translation id="1393787139683794508">Ezzel törli a(z) <ph name="ORIGIN_NAME" /> által tárolt összes adatot és cookie-t.</translation>
 <translation id="1395730723686586365">A frissítő elindult</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index f33155c..38b969c 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Վերբեռնել</translation>
 <translation id="1244265436519979884">Լինուքսի վերականգնումն ընթացքի մեջ է</translation>
 <translation id="1244303850296295656">Ընդլայնման սխալ</translation>
+<translation id="1246158006305844142">Ձեր հավելվածներն ու կարգավորումները կհամաժամացվեն բոլոր Chrome OS սարքերում, որոնցում մտած եք ձեր Google հաշիվ։ Դիտարկիչներում համաժամացման տարբերակներին ծանոթանալու համար անցեք <ph name="LINK_BEGIN" />Chrome-ի կարգավորումներ<ph name="LINK_END" />։</translation>
 <translation id="1246905108078336582">Հեռացնե՞լ առաջարկը սեղմատախտակից:</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" />-ն արգելափակվել է, քանի որ այն հնացած է</translation>
 <translation id="1251366534849411931">Պակասում է բացող ձևավոր փակագիծ՝ <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Ոչ</translation>
 <translation id="1525740877599838384">Տեղորոշելու համար օգտագործել միայն Wi-Fi ցանցը</translation>
 <translation id="152629053603783244">Վերագործարկել Լինուքսը</translation>
+<translation id="1526335046150927198">Միացնել հպահարթակով ոլորման արագացումը</translation>
 <translation id="1526560967942511387">Անանուն փաստաթուղթ</translation>
 <translation id="1529891865407786369">Սնուցման աղբյուր</translation>
 <translation id="1530838837447122178">Բացել մկնիկի և հպահարթակի կարգավորումները</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Ցանցի կապակցումը վերականգնվել է</translation>
 <translation id="2727633948226935816">Այլևս չհիշեցնել</translation>
 <translation id="2727712005121231835">Actual Size</translation>
+<translation id="2729314457178420145">Ջնջել նաև այցելությունների պատմությունը (<ph name="URL" />)։ Նկատի ունեցեք, որ արդյունքում հնարավոր է դուրս գրվեք ձեր հաշվից Google.com կայքում։ <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Լինուքսի հավելվածների ու ֆայլերի պահուստավորում</translation>
 <translation id="273093730430620027">Այս էջն օգտագործում է ձեր տեսախցիկը:</translation>
 <translation id="2731392572903530958">Նո&amp;րից բացել փակված պատուհանը</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> վերնագրով այլ էջեր</translation>
 <translation id="3838543471119263078">Cookie ֆայլերը և կայքերի ու փլագինների այլ տվյալներ</translation>
 <translation id="383891835335927981">Ոչ մի կայք չի մասշտաբավորվել</translation>
+<translation id="3839509547554145593">Միացնել մկնիկով ոլորման արագացումը</translation>
 <translation id="3839516600093027468">Միշտ արգելափակել <ph name="HOST" /> կայքի մուտքը սեղմատախտակին</translation>
 <translation id="3841964634449506551">Գաղտնաբառը սխալ է</translation>
 <translation id="3842552989725514455">Serif տառատեսակ</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Քեշավորված պատկերներ և ֆայլեր</translation>
 <translation id="4699357559218762027">(ինքնագործարկում)</translation>
 <translation id="470074695271471509">Դուրս գա՞լ հաշվից՝ ավարտելու համար</translation>
+<translation id="4701025263201366865">Մուտք ծնողի համար</translation>
 <translation id="4707302005824653064">Կառավարիչը (<ph name="CUSTODIAN_EMAIL" />) կարող է վերահսկել օգտագործումն ու պատմությունը chrome.com-ում:</translation>
 <translation id="4707579418881001319">L2TP/IPsec + օգտատիրոջ վկայագիր</translation>
 <translation id="4708794300267213770">Ցույց տալ կողպէկրանը քնի ռեժիմից դուրս գալիս</translation>
@@ -3083,6 +3088,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, որոնում <ph name="DEFAULT_SEARCH_ENGINE_NAME" />-ում</translation>
 <translation id="5139823398361067371">Մուտքագրեք անվտանգության բանալու PIN կոդը: Եթե չգիտեք PIN կոդը, զրոյացրեք անվտանգության բանալու կարգավորումները:</translation>
 <translation id="5139955368427980650">&amp;Բացել</translation>
+<translation id="5142793792982256885">Հպահարթակով ոլորման արագությունը</translation>
 <translation id="5142961317498132443">Նույնականացում</translation>
 <translation id="5143374789336132547">«<ph name="EXTENSION_NAME" />» ընդլայնումը փոխել է Սկիզբ կոճակի սեղմումով ցուցադրվող էջը:</translation>
 <translation id="5143712164865402236">Enter Full Screen</translation>
@@ -3647,6 +3653,7 @@
 <translation id="5901630391730855834">Դեղին</translation>
 <translation id="5906655207909574370">Գրեթե պատրաստ է: Վերագործարկեք սարքը` թարմացումն ավարտելու համար:</translation>
 <translation id="5906732635754427568">Այս հավելվածի հետ առնչվող տվյալները կհեռացվեն այս սարքից:</translation>
+<translation id="5908695239556627796">Մկնիկով ոլորման արագությունը</translation>
 <translation id="5908769186679515905">Արգելել կայքերին աշխատեցնել Flash</translation>
 <translation id="5910363049092958439">Պա&amp;հել պատկերը որպես…</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> սարքը միացած չէ ինտերնետին</translation>
@@ -5093,6 +5100,7 @@
     <ph name="BEGIN_BOLD" />Ուշադրություն.<ph name="END_BOLD" /> գործողության ժամանակ համակարգը կվերաբեռնվի:</translation>
 <translation id="7828731929332799387">Երրորդ կողմի բոլոր քուքիներն ու կայքերի տվյալները կջնջվեն։ Շարունակե՞լ։</translation>
 <translation id="7829298379596169484">Ձայնային մուտքի մատչում</translation>
+<translation id="7829877209233347340">Խնդրեք ծնողին մուտք գործել հաշիվ և ուսումնական հաշիվ ավելացնելու թույլտվություն տալ</translation>
 <translation id="7830594666202422257">Միացնել Լինուքսին</translation>
 <translation id="7831491651892296503">Չհաջողվեց կազմաձևել ցանցը</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5846,6 +5854,7 @@
 <translation id="8808686172382650546">Կատու</translation>
 <translation id="8808744862003883508">Այս էջում դուք կարող եք տեսնել Chrome-ում տեղադրված բոլոր ընդլայնումները։</translation>
 <translation id="8809147117840417135">Բաց փիրուզագույն</translation>
+<translation id="8812593354822910461">Ջնջել նաև այցելությունների պատմությունը (<ph name="URL" />)։ Նկատի ունեցեք, որ արդյունքում հնարավոր է դուրս գրվեք ձեր հաշվից <ph name="DOMAIN" /> կայքում։ <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Հնարավոր չէ մուտք գործել <ph name="USERNAME" /> հաշիվ</translation>
 <translation id="8813811964357448561">թղթի թերթ</translation>
 <translation id="8813872945700551674">Դիմեք ձեր ծնողին՝ «<ph name="EXTENSION_NAME" />» ընդլայնումը թույլատրելու համար</translation>
@@ -6135,6 +6144,7 @@
 <translation id="9203398526606335860">&amp;Տվյալների հավաքումը միացված է</translation>
 <translation id="9203904171912129171">Ընտրեք սարքը</translation>
 <translation id="9203962528777363226">Այս կայքի ադմինիստրատորն արգելել է նոր օգտատերերի ավելացումը</translation>
+<translation id="9209689095351280025">Կայքերը չեն կարող օգտագործել քուքիները, որոնց միջոցով հետագծվում են ձեր գործողությունները համացանցում։</translation>
 <translation id="9211177926627870898">Պահանջվում է թարմացում</translation>
 <translation id="9214520840402538427">Ցավոք, եղադրման ժամանակի հատկանիշների սկզբնավորումը ժամասպառվեց: Կապվեք ձեր աջակցման կենտրոնի ներկայացուցչի հետ:</translation>
 <translation id="9214695392875603905">Կեքս</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 959d0ea..bb3dbac 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -4754,7 +4754,7 @@
 <translation id="7400418766976504921">Vefslóð</translation>
 <translation id="7400839060291901923">Settu upp tengingu í <ph name="PHONE_NAME" /></translation>
 <translation id="7401778920660465883">Hunsa þessi skilaboð</translation>
-<translation id="7405938989981604410">{NUM_HOURS,plural, =1{Öryggisathugun var gerð fyrir 1 klukkustund}one{Öryggisathugun var keyrð fyrir {NUM_HOURS} klukkustund}other{Öryggisathugun var keyrð fyrir {NUM_HOURS} klukkustundum}}</translation>
+<translation id="7405938989981604410">{NUM_HOURS,plural, =1{Öryggisathugun var gerð fyrir 1 klukkustund}one{Öryggisathugun var gerð fyrir {NUM_HOURS} klukkustund}other{Öryggisathugun var gerð fyrir {NUM_HOURS} klukkustundum}}</translation>
 <translation id="740624631517654988">Sprettigluggi útilokaður</translation>
 <translation id="7407430846095439694">Flytja inn og binda</translation>
 <translation id="7407504355934009739">Flestir notendur loka á tilkynningar frá þessu vefsvæði</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index c8b8f25..ebef52a 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Carica</translation>
 <translation id="1244265436519979884">È in corso il ripristino di Linux</translation>
 <translation id="1244303850296295656">Errore delle estensioni</translation>
+<translation id="1246158006305844142">Le app e le impostazioni verranno sincronizzate su tutti i dispositivi Chrome OS a cui hai effettuato l'accesso con il tuo Account Google. Per le opzioni di sincronizzazione del browser, vai alle <ph name="LINK_BEGIN" />impostazioni di Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Rimuovere il suggerimento dagli appunti?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> è stato bloccato perché è obsoleto</translation>
 <translation id="1251366534849411931">Parentesi graffa aperta prevista: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">No, grazie</translation>
 <translation id="1525740877599838384">Usa solo la rete Wi-Fi per stabilire la posizione</translation>
 <translation id="152629053603783244">Riavvia Linux</translation>
+<translation id="1526335046150927198">Attiva l'accelerazione di scorrimento del touchpad</translation>
 <translation id="1526560967942511387">Documento senza titolo</translation>
 <translation id="1529891865407786369">Fonte di alimentazione</translation>
 <translation id="1530838837447122178">Apri le impostazioni di mouse e touchpad</translation>
@@ -1312,6 +1314,7 @@
 <translation id="2725200716980197196">Connettività di rete ripristinata</translation>
 <translation id="2727633948226935816">Non visualizzare più il promemoria</translation>
 <translation id="2727712005121231835">Dimensioni reali</translation>
+<translation id="2729314457178420145">Cancella anche i dati di navigazione (<ph name="URL" />) che potrebbero farti uscire dall'account su Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Backup di app e file Linux</translation>
 <translation id="273093730430620027">Questa pagina sta accedendo alla webcam.</translation>
 <translation id="2731392572903530958">R&amp;iapri finestra chiusa</translation>
@@ -2163,6 +2166,7 @@
 <translation id="3838486795898716504">Altre <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Cookie e altri dati di siti e plug-in</translation>
 <translation id="383891835335927981">Non è stato aumentato o diminuito lo zoom di alcun sito</translation>
+<translation id="3839509547554145593">Attiva l'accelerazione di scorrimento del mouse</translation>
 <translation id="3839516600093027468">Impedisci sempre a <ph name="HOST" /> di leggere gli appunti</translation>
 <translation id="3841964634449506551">Password non valida</translation>
 <translation id="3842552989725514455">Carattere serif</translation>
@@ -2774,6 +2778,7 @@
 <translation id="4699172675775169585">Immagini e file memorizzati nella cache</translation>
 <translation id="4699357559218762027">(avviata automaticamente)</translation>
 <translation id="470074695271471509">Vuoi uscire per completare la configurazione?</translation>
+<translation id="4701025263201366865">Accesso per i genitori</translation>
 <translation id="4707302005824653064">Il gestore (<ph name="CUSTODIAN_EMAIL" />) può esaminare l'utilizzo e la cronologia su chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + certificato utente</translation>
 <translation id="4708794300267213770">Mostra la schermata di blocco quando il dispositivo viene riattivato dopo la sospensione</translation>
@@ -3081,6 +3086,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, ricerca in <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Inserisci il PIN del token di sicurezza. Se non conosci il PIN, devi reimpostare il token di sicurezza.</translation>
 <translation id="5139955368427980650">&amp;Apri</translation>
+<translation id="5142793792982256885">Velocità di scorrimento del touchpad</translation>
 <translation id="5142961317498132443">Autenticazione</translation>
 <translation id="5143374789336132547">L'estensione "<ph name="EXTENSION_NAME" />" ha cambiato la pagina mostrata quando fai clic sul pulsante Pagina iniziale.</translation>
 <translation id="5143712164865402236">Passa a schermo intero</translation>
@@ -3643,6 +3649,7 @@
 <translation id="5901630391730855834">Giallo</translation>
 <translation id="5906655207909574370">Aggiornamento quasi completato. Riavvia il dispositivo per terminare l'aggiornamento.</translation>
 <translation id="5906732635754427568">I dati associati a questa app verranno rimossi dal dispositivo.</translation>
+<translation id="5908695239556627796">Velocità di scorrimento del mouse</translation>
 <translation id="5908769186679515905">Impedisci ai siti di eseguire Flash</translation>
 <translation id="5910363049092958439">Sal&amp;va immagine con nome...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> è offline</translation>
@@ -5090,6 +5097,7 @@
     <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> il sistema viene riavviato durante la procedura.</translation>
 <translation id="7828731929332799387">Verranno eliminati tutti i cookie e i dati dei siti disponibili in contesti di terze parti. Vuoi continuare?</translation>
 <translation id="7829298379596169484">Accesso all'input audio in corso</translation>
+<translation id="7829877209233347340">Chiedi a un genitore di accedere per autorizzare l'aggiunta di un account della scuola</translation>
 <translation id="7830594666202422257">Connetti a Linux</translation>
 <translation id="7831491651892296503">Errore durante la configurazione della rete</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5843,6 +5851,7 @@
 <translation id="8808686172382650546">Gatto</translation>
 <translation id="8808744862003883508">In questa pagina puoi vedere tutte le estensioni installate in Chrome.</translation>
 <translation id="8809147117840417135">Verde acqua</translation>
+<translation id="8812593354822910461">Cancella anche i dati di navigazione (<ph name="URL" />) che ti faranno uscire dall'account su <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Impossibile accedere a <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">foglio</translation>
 <translation id="8813872945700551674">Chiedi a un genitore di approvare "<ph name="EXTENSION_NAME" />"</translation>
@@ -6132,6 +6141,7 @@
 <translation id="9203398526606335860">&amp;Profiling attivato</translation>
 <translation id="9203904171912129171">Seleziona un dispositivo</translation>
 <translation id="9203962528777363226">L'amministratore di questo dispositivo ha disattivato l'aggiunta di nuovi utenti</translation>
+<translation id="9209689095351280025">I siti non possono utilizzare i cookie per monitorare la tua attività sul Web.</translation>
 <translation id="9211177926627870898">Aggiornamento richiesto</translation>
 <translation id="9214520840402538427">Spiacenti. L'inizializzazione degli attributi installation-time è scaduta. Contatta il tuo rappresentante dell'assistenza.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 3096606..8a30ac1e 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">העלה</translation>
 <translation id="1244265436519979884">‏מתבצע כעת שחזור של Linux</translation>
 <translation id="1244303850296295656">שגיאת תוסף</translation>
+<translation id="1246158006305844142">‏האפליקציות וההגדרות שלך יסתנכרנו בין כל מכשירי Chrome OS שאליהם נכנסת עם חשבון Google שלך. כדי לראות את אפשרויות סנכרון הדפדפן, יש לעבור אל <ph name="LINK_BEGIN" />הגדרות Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">להסיר את ההצעה מהלוח?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> נחסם מפני שהוא הוצא כבר משימוש</translation>
 <translation id="1251366534849411931">חסרים סוגריים מסולסלים פותחים: <ph name="ERROR_LINE" /></translation>
@@ -388,6 +389,7 @@
 <translation id="1524563461097350801">לא, תודה</translation>
 <translation id="1525740877599838384">‏קביעת מיקום רק באמצעות Wi-Fi</translation>
 <translation id="152629053603783244">‏האם להפעיל מחדש את Linux?</translation>
+<translation id="1526335046150927198">הפעלה של האצת גלילה בלוח מגע</translation>
 <translation id="1526560967942511387">מסמך ללא שם</translation>
 <translation id="1529891865407786369">מקור חשמל</translation>
 <translation id="1530838837447122178">פתח את הגדרות המכשיר של העכבר ולוח המגע</translation>
@@ -1310,6 +1312,8 @@
 <translation id="2725200716980197196">קישוריות הרשת התחדשה</translation>
 <translation id="2727633948226935816">אל תזכיר לי שוב</translation>
 <translation id="2727712005121231835">גודל ממשי</translation>
+<translation id="2729314457178420145">‏אני רוצה גם לנקות את נתוני הגלישה (<ph name="URL" />). פעולה זו עשויה לנתק אותך מ-Google.com.
+<ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">‏גיבוי אפליקציות וקובצי Linux</translation>
 <translation id="273093730430620027">דף זה ניגש למצלמה שלך.</translation>
 <translation id="2731392572903530958">פתח מ&amp;חדש חלון שנסגר</translation>
@@ -2161,6 +2165,7 @@
 <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> נוספים</translation>
 <translation id="3838543471119263078">‏קובצי cookie ונתוני אתר ופלאגין נוספים</translation>
 <translation id="383891835335927981">באף אתר לא השתנה המרחק מהתצוגה</translation>
+<translation id="3839509547554145593">הפעלה של האצת גלילה בעכבר</translation>
 <translation id="3839516600093027468">יש למנוע תמיד מ-<ph name="HOST" /> לגשת אל הלוח</translation>
 <translation id="3841964634449506551">הסיסמה לא חוקית</translation>
 <translation id="3842552989725514455">‏גופן Serif</translation>
@@ -2772,6 +2777,7 @@
 <translation id="4699172675775169585">תמונות וקבצים במטמון</translation>
 <translation id="4699357559218762027">(מופעל אוטומטית)</translation>
 <translation id="470074695271471509">לצאת כדי לסיים את התהליך?</translation>
+<translation id="4701025263201366865">כניסה של הורה</translation>
 <translation id="4707302005824653064">‏המנהל (<ph name="CUSTODIAN_EMAIL" />) יכול לבדוק את נתוני השימוש וההיסטוריה באתר chrome.com.</translation>
 <translation id="4707579418881001319">‏L2TP/‏IPSec + אישור משתמש</translation>
 <translation id="4708794300267213770">הצג את מסך הנעילה ביציאה ממצב שינה</translation>
@@ -3079,6 +3085,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, חיפוש ב-<ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">יש להזין את קוד האימות של מפתח האבטחה. אם לא ידוע לך מהו קוד האימות, יהיה עליך לאפס את מפתח האבטחה.</translation>
 <translation id="5139955368427980650">&amp;פתח</translation>
+<translation id="5142793792982256885">מהירות גלילה בלוח מגע</translation>
 <translation id="5142961317498132443">אימות</translation>
 <translation id="5143374789336132547">התוסף "<ph name="EXTENSION_NAME" />" שינה את הדף שמוצג כשאתה לוחץ על הלחצן 'דף הבית'.</translation>
 <translation id="5143712164865402236">עבור למסך מלא</translation>
@@ -3641,6 +3648,7 @@
 <translation id="5901630391730855834">צהוב</translation>
 <translation id="5906655207909574370">העדכון כמעט הושלם! הפעל מחדש את המכשיר כדי לסיים את העדכון.</translation>
 <translation id="5906732635754427568">המערכת תסיר מהמכשיר הזה נתונים המשויכים לאפליקציה הזו.</translation>
+<translation id="5908695239556627796">מהירות גלילת העכבר</translation>
 <translation id="5908769186679515905">‏חסום הפעלה של Flash על-ידי אתרים</translation>
 <translation id="5910363049092958439">שמ&amp;ור תמונה כ...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> במצב לא מקוון</translation>
@@ -5087,6 +5095,7 @@
     <ph name="BEGIN_BOLD" />הערה:<ph name="END_BOLD" /> המערכת תבצע הפעלה מחדש בזמן התהליך.</translation>
 <translation id="7828731929332799387">‏הפעולה הזו תמחק את כל קובצי ה-cookie ונתוני האתרים הזמינים בהקשרים של צד שלישי. להמשיך?</translation>
 <translation id="7829298379596169484">גישה לקלט אודיו</translation>
+<translation id="7829877209233347340">צריך לבקש מהורה להיכנס לחשבון כדי לאשר הוספה של חשבון בית ספרי</translation>
 <translation id="7830594666202422257">‏חיבור ל-Linux</translation>
 <translation id="7831491651892296503">אירעה שגיאה בהגדרת הרשת</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5843,6 +5852,7 @@
 <translation id="8808686172382650546">חתול</translation>
 <translation id="8808744862003883508">‏בדף הזה מוצגים כל התוספים שהותקנו ב-Chrome.</translation>
 <translation id="8809147117840417135">כחול-ירקרק בהיר</translation>
+<translation id="8812593354822910461">‏אני רוצה גם לנקות את נתוני הגלישה (<ph name="URL" />). פעולה זו עשויה לנתק אותך מ-Google.com <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">לא ניתן להיכנס עם שם המשתמש <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">גליון נייר</translation>
 <translation id="8813872945700551674">צריך שההורים יאשרו את "<ph name="EXTENSION_NAME" />"</translation>
@@ -6132,6 +6142,7 @@
 <translation id="9203398526606335860">&amp;יצירת פרופילים מופעלת</translation>
 <translation id="9203904171912129171">בחירת מכשיר</translation>
 <translation id="9203962528777363226">מנהל המערכת של מכשיר זה השבית את ההוספה של משתמשים חדשים</translation>
+<translation id="9209689095351280025">‏אתרים לא יכולים להשתמש בקובצי cookie שעוקבים אחריך באינטרנט</translation>
 <translation id="9211177926627870898">נדרש עדכון</translation>
 <translation id="9214520840402538427">אופס!  תם הזמן הקצוב לאתחול של מאפייני זמן ההתקנה. פנה אל נציג התמיכה שלך.</translation>
 <translation id="9214695392875603905">קאפקייק</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 81ad23f..36a845a 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -52,6 +52,7 @@
 <translation id="1058262162121953039">PUK</translation>
 <translation id="1061745542578250838"><ph name="FILE_NAME" /> は機密性の高い内容を含んでいるためブロックされました。</translation>
 <translation id="1061904396131502319">もうすぐ休憩の時間です</translation>
+<translation id="1064552680598333868">マイクの変更は、Linux を再起動すると有効になります。</translation>
 <translation id="1067048845568873861">作成日</translation>
 <translation id="1067291318998134776">Linux(ベータ版)</translation>
 <translation id="1067922213147265141">他の Google サービス</translation>
@@ -112,6 +113,7 @@
 <translation id="1147991416141538220">アクセスをリクエストするには、このデバイスの管理者にご連絡ください。</translation>
 <translation id="1149401351239820326">有効期限(月)</translation>
 <translation id="1150565364351027703">サングラス</translation>
+<translation id="1151841030700667295">開いているすべてのタブで、すべてのサイトからログアウトします。</translation>
 <translation id="1151917987301063366"><ph name="HOST" /> によるセンサーへのアクセスを常に許可する</translation>
 <translation id="1153356358378277386">ペア設定されたデバイス</translation>
 <translation id="1153636665119721804">Google の高度な保護機能プログラム</translation>
@@ -279,6 +281,7 @@
 <translation id="1386387014181100145">こんにちは。</translation>
 <translation id="138784436342154190">デフォルトの起動ページに戻しますか?</translation>
 <translation id="1390548061267426325">通常のタブとして開く</translation>
+<translation id="1392232653471491344">Linux の再起動が必要です</translation>
 <translation id="1393283411312835250">太陽と雲</translation>
 <translation id="1393787139683794508"><ph name="ORIGIN_NAME" /> により保存されたすべてのデータと Cookie が削除されます。</translation>
 <translation id="1395730723686586365">アップデータ起動</translation>
@@ -307,6 +310,7 @@
 <translation id="1420920093772172268">ペア設定するには <ph name="TURN_ON_BLUETOOTH_LINK" /></translation>
 <translation id="1422159345171879700">安全でないスクリプトを読み込む</translation>
 <translation id="1426410128494586442">はい</translation>
+<translation id="142655739075382478"><ph name="APP_NAME" /> はブロックされています</translation>
 <translation id="1426870617281699524">[再試行] をクリックし、パソコンに表示されるメッセージに同意してください</translation>
 <translation id="1427269577154060167">国</translation>
 <translation id="142758023928848008">スティッキー キーを有効にする(キーを順に押してキーボード ショートカットを実行します)</translation>
@@ -345,6 +349,7 @@
 <translation id="1476607407192946488">言語設定(&amp;L)</translation>
 <translation id="1478340334823509079">詳細: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">インストールが有効になっていません</translation>
+<translation id="1481537595330271162">ディスクのサイズ変更中にエラーが発生しました</translation>
 <translation id="1482626744466814421">このタブをブックマークに追加...</translation>
 <translation id="1483493594462132177">送信</translation>
 <translation id="1484979925941077974">サイトで Bluetooth が使用されています</translation>
@@ -605,6 +610,7 @@
 <translation id="1805822111539868586">ビューを検証</translation>
 <translation id="1805888043020974594">プリント サーバー</translation>
 <translation id="1805967612549112634">PIN の確認</translation>
+<translation id="1806335016774576568">別の開いているアプリに切り替える</translation>
 <translation id="1809734401532861917">自分のブックマーク、履歴、パスワード、その他の設定を <ph name="USER_EMAIL_ADDRESS" /> に追加します</translation>
 <translation id="1813278315230285598">サービス</translation>
 <translation id="18139523105317219">EDI パーティ名</translation>
@@ -691,6 +697,7 @@
 <translation id="1921050530041573580">スマートフォンとメッセージのペア設定</translation>
 <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation>
 <translation id="192494336144674234">アプリケーションで開く</translation>
+<translation id="1925017091976104802">貼り付けるには、<ph name="MODIFIER_KEY_DESCRIPTION" /> キーを押してください</translation>
 <translation id="1925021887439448749">カスタムのウェブアドレスを入力</translation>
 <translation id="1925124445985510535">安全確認を <ph name="TIME" /> に実行しました</translation>
 <translation id="1926339101652878330">これらの設定は会社のポリシーによって制御されています。詳しくは管理者にお尋ねください。</translation>
@@ -836,6 +843,7 @@
 <translation id="2135787500304447609">再開(&amp;R)</translation>
 <translation id="2136372518715274136">新しいパスワードを入力</translation>
 <translation id="2136476978468204130">入力したパスフレーズが正しくありません</translation>
+<translation id="2137122615728646911">{COUNT,plural, =0{Cookie がブロックされています}=1{Cookie がブロックされています(1 件の例外)}other{Cookie がブロックされています({COUNT} 件の例外)}}</translation>
 <translation id="2138398485845393913">「<ph name="DEVICE_NAME" />」に接続中です</translation>
 <translation id="2139545522194199494"><ph name="NETWORK_INDEX" /> 番目のネットワーク(全 <ph name="NETWORK_COUNT" /> 件)、<ph name="NETWORK_NAME" />、信号強度 <ph name="SIGNAL_STRENGTH" />%、管理者によって管理、接続</translation>
 <translation id="2139919072249842737">設定ボタン</translation>
@@ -1003,11 +1011,13 @@
 <translation id="2346953515226895098">SODA サービス</translation>
 <translation id="2347644257713614136">ハングアウトと Cast for Education のご利用には、Google プライバシー ポリシーが適用されます。</translation>
 <translation id="2348176352564285430">アプリ: <ph name="ARC_PROCESS_NAME" /></translation>
+<translation id="234889437187286781">データの読み込み中にエラーが発生しました</translation>
 <translation id="2349896577940037438">[その他のウェブとアプリのアクティビティ] の設定がオンになっている場合、このデータは Google アカウントに保存されます。データの確認、削除、アカウント設定の変更は、account.google.com で行うことができます。</translation>
 <translation id="2350133097354918058">再読み込みされました</translation>
 <translation id="2350182423316644347">アプリケーションを初期化しています...</translation>
 <translation id="2350796302381711542">すべての <ph name="PROTOCOL" /> リンクを <ph name="REPLACED_HANDLER_TITLE" /> ではなく <ph name="HANDLER_HOSTNAME" /> で開きますか?</translation>
 <translation id="2351266942280602854">言語と入力</translation>
+<translation id="2352495879228166246">{NUM_ITEMS,plural, =1{1 件の項目}other{{NUM_ITEMS} 件の項目}}</translation>
 <translation id="2352662711729498748">1 MB 未満</translation>
 <translation id="2352810082280059586">ロック画面のメモは<ph name="LOCK_SCREEN_APP_NAME" />に自動的に保存されます。最新のメモはロック画面に表示されます。</translation>
 <translation id="2353297238722298836">カメラとマイクを使用できます</translation>
@@ -1041,6 +1051,7 @@
 <translation id="2392369802118427583">有効にする</translation>
 <translation id="2394566832561516196">設定は次の再読み込みで消去されます。</translation>
 <translation id="2395616325548404795">この <ph name="DEVICE_TYPE" /> は組織の管理対象として登録されましたが、アセットと位置情報を送信できませんでした。このデバイスの管理コンソールで、この情報を手動で入力してください。</translation>
+<translation id="2396387085693598316">「<ph name="EXTENSION_NAME" />」は管理者によってブロックされています</translation>
 <translation id="2396783860772170191">4 桁の PIN(0000~9999)を入力してください</translation>
 <translation id="2399939490305346086">セキュリティ キーのログインデータ</translation>
 <translation id="2400664245143453337">今すぐ更新が必要です</translation>
@@ -1327,6 +1338,7 @@
 <translation id="2753677631968972007">サイトの権限を手動で管理します。</translation>
 <translation id="2755367719610958252">ユーザー補助機能の管理</translation>
 <translation id="275662540872599901">画面オフ</translation>
+<translation id="2757338480560142065">保存するパスワードが <ph name="WEBSITE" /> のパスワードと一致していることを確認してください</translation>
 <translation id="2762441749940182211">カメラがブロックされています</translation>
 <translation id="2765217105034171413">小</translation>
 <translation id="2766161002040448006">保護者に聞く</translation>
@@ -1579,6 +1591,7 @@
 <translation id="3090819949319990166">外部の crx ファイルは <ph name="TEMP_CRX_FILE" /> にコピーできません。</translation>
 <translation id="3090871774332213558">「<ph name="DEVICE_NAME" />」がペア設定されました</translation>
 <translation id="3092699946856346803">SIM を挿入してもう一度お試しください</translation>
+<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{1 個の有害な可能性がある拡張機能がオフになっています。削除することもできます。}other{{NUM_EXTENSIONS} 個の有害な可能性がある拡張機能がオフになっています。削除することもできます。}}</translation>
 <translation id="3101709781009526431">日時</translation>
 <translation id="3103941660000130485">Linux のアップグレード中にエラーが発生しました</translation>
 <translation id="310671807099593501">サイトで Bluetooth が使用されています</translation>
@@ -1652,6 +1665,7 @@
 <translation id="3201422919974259695">使用可能な USB デバイスがここに表示されます。</translation>
 <translation id="3202131003361292969">パス</translation>
 <translation id="3202173864863109533">このタブの音声はミュートされています。</translation>
+<translation id="3208321278970793882">アプリ</translation>
 <translation id="3208584281581115441">今すぐ確認</translation>
 <translation id="3208703785962634733">未確認</translation>
 <translation id="32101887417650595">プリンタに接続できません</translation>
@@ -1672,6 +1686,7 @@
 <translation id="3239373508713281971"><ph name="APP_NAME" /> の使用時間制限が削除されました</translation>
 <translation id="3241680850019875542">パッケージ化する拡張機能のルート ディレクトリを選択します。拡張機能を更新するには、再使用する秘密鍵ファイルも選択してください。</translation>
 <translation id="3244294424315804309">音声のミュートを続行する</translation>
+<translation id="3246107497225150582">{0,plural, =1{1 日以内にデバイスを更新してください}other{# 日以内にデバイスを更新してください}}</translation>
 <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - ネットワーク エラー</translation>
 <translation id="3248902735035392926">安全性に問題がないか、<ph name="BEGIN_LINK" />拡張機能を確認<ph name="END_LINK" />しましょう</translation>
 <translation id="3249950116250264636"><ph name="APP_NAME" />(<ph name="APP_URL" />)</translation>
@@ -1758,6 +1773,7 @@
 <translation id="3356580349448036450">完了</translation>
 <translation id="3359256513598016054">証明書ポリシーの制約</translation>
 <translation id="3360297538363969800">印刷できませんでした。プリンタを確認してもう一度お試しください。</translation>
+<translation id="3364986687961713424">管理者からのメッセージ: <ph name="ADMIN_MESSAGE" /></translation>
 <translation id="3365598184818502391">Ctrl キーまたは Alt キーのいずれかを使用してください</translation>
 <translation id="3367047597842238025"><ph name="DEVICE_TYPE" /> を自分好みにセットアップして、多彩な機能を思いのままにご活用ください。</translation>
 <translation id="3368922792935385530">接続済み</translation>
@@ -1862,6 +1878,7 @@
 <translation id="3496213124478423963">縮小</translation>
 <translation id="3497560059572256875">Doodle を共有</translation>
 <translation id="3498215018399854026">現在、保護者にたずねることができません。もう一度お試しください。</translation>
+<translation id="3500417806337761827">共有フォルダのマウントエラー。マウントされた SMB 共有の数が上限を超えています。</translation>
 <translation id="3505030558724226696">デバイスのアクセスを取り消す</translation>
 <translation id="3507421388498836150">「<ph name="EXTENSION_NAME" />」の現在の権限</translation>
 <translation id="3507888235492474624">Bluetooth デバイスを再スキャン</translation>
@@ -1927,6 +1944,7 @@
 <translation id="3592260987370335752">詳細(&amp;L)</translation>
 <translation id="359283478042092570">ログイン</translation>
 <translation id="3593965109698325041">証明書名の制約</translation>
+<translation id="3595381248165458839">組織のデバイス管理者にお問い合わせください</translation>
 <translation id="3596235046596950091">クラウド サービスを有効にする</translation>
 <translation id="3596414637720633074">シークレット モードでサードパーティの Cookie をブロックします</translation>
 <translation id="3599221874935822507">浮き彫り</translation>
@@ -2060,6 +2078,7 @@
 <translation id="3742666961763734085">この名前の組織部門が見つかりません。もう一度お試しください。</translation>
 <translation id="3744111561329211289">バックグラウンド同期</translation>
 <translation id="3746127522257263495">Android アプリで G Suite for Education アカウントを追加することはできません。</translation>
+<translation id="3747039297326604768">Plugin VM を開けませんでした</translation>
 <translation id="3747077776423672805">アプリを削除するには、まず [設定] &gt; [Google Play ストア] &gt; [Android 設定を管理] &gt; [アプリ] または [アプリケーション管理] に移動して、アンインストールするアプリをタップします(必要であれば左右にスワイプしてアプリを見つけます)。次に、[アンインストール] または [無効にする] をタップします。</translation>
 <translation id="3748026146096797577">接続されていません</translation>
 <translation id="3752582316358263300">OK...</translation>
@@ -2135,6 +2154,7 @@
 <translation id="3827774300009121996">全画面表示(&amp;F)</translation>
 <translation id="3828029223314399057">ブックマークを検索</translation>
 <translation id="3829765597456725595">SMB ファイル共有</translation>
+<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{管理者が 1 個の有害な可能性がある拡張機能を再度有効にしました}other{管理者が {NUM_EXTENSIONS} 個の有害な可能性がある拡張機能を再度有効にしました}}</translation>
 <translation id="3831436149286513437">Google ドライブのファイル候補</translation>
 <translation id="383161972796689579">このデバイスの所有者は新規ユーザーの追加を無効にしています</translation>
 <translation id="3834775135533257713">「<ph name="INSTALLED_APP_NAME" />」と競合するため、アプリケーション「<ph name="TO_INSTALL_APP_NAME" />」を追加できませんでした。</translation>
@@ -2311,6 +2331,7 @@
 <translation id="4047726037116394521">ホームに移動</translation>
 <translation id="4050225813016893843">認証方法</translation>
 <translation id="4052120076834320548">極小</translation>
+<translation id="4056908315660577142">保護者が設定した <ph name="APP_NAME" /> Chrome アプリの利用時間の上限に達しました。明日は <ph name="TIME_LIMIT" /> まで使えます。</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">ストアで見る</translation>
 <translation id="4058647953897694817">Bluetooth を使って確認</translation>
@@ -2442,6 +2463,7 @@
 <translation id="424963718355121712">アプリは関連付けられたホストから配信される必要があります</translation>
 <translation id="4250229828105606438">スクリーンショット</translation>
 <translation id="4250680216510889253">いいえ</translation>
+<translation id="4252035718262427477">ウェブページ、1 つのファイル(Web Bundle)</translation>
 <translation id="4252852543720145436">保護されているコンテンツの識別子</translation>
 <translation id="4252899949534773101">Bluetooth が無効です</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - タブのコンテンツが共有されています</translation>
@@ -2537,6 +2559,7 @@
 <translation id="4400963414856942668">スターアイコンをクリックしてタブをブックマークに追加できます</translation>
 <translation id="4403775189117163360">別のフォルダを選択</translation>
 <translation id="4404136731284211429">再スキャン</translation>
+<translation id="4404843640767531781"><ph name="APP_NAME" /> は保護者によってブロックされています。このアプリを使用するには、保護者の許可が必要です。</translation>
 <translation id="4405117686468554883">*.jpeg、*.jpg、*.png</translation>
 <translation id="4408599188496843485">ヘルプ(&amp;H)</translation>
 <translation id="4409697491990005945">余白</translation>
@@ -2606,6 +2629,7 @@
 <translation id="450099669180426158">感嘆符アイコン</translation>
 <translation id="4501530680793980440">削除の確認</translation>
 <translation id="4502423230170890588">このデバイスから削除</translation>
+<translation id="4504374760782163539">{COUNT,plural, =0{Cookie が許可されています}=1{Cookie が許可されています(1 件の例外)}other{Cookie が許可されています({COUNT} 件の例外)}}</translation>
 <translation id="4504940961672722399">この拡張機能を使用するには、このアイコンをクリックするか、<ph name="EXTENSION_SHORTCUT" /> を押します。</translation>
 <translation id="4508051413094283164">すべてをシークレット ウィンドウで開く</translation>
 <translation id="4508265954913339219">起動に失敗しました</translation>
@@ -2719,6 +2743,7 @@
 <translation id="465878909996028221">ブラウザのリダイレクトでは、http、https、file プロトコルのみサポートされています。</translation>
 <translation id="4659077111144409915">メイン アカウント</translation>
 <translation id="4660476621274971848">バージョン「<ph name="EXPECTED_VERSION" />」が必要ですが、バージョン「<ph name="NEW_ID" />」が検出されました</translation>
+<translation id="4660540330091848931">サイズを変更しています</translation>
 <translation id="4660838440047236328">あなたの部屋のレイアウト</translation>
 <translation id="4661407454952063730">アプリのデータとは、(デベロッパーの設定に基づいて)アプリが保存したデータのことで、連絡先、メッセージ、写真などのデータが含まれます。</translation>
 <translation id="4661931051827810091">新たな脅威を発見し、すべてのウェブユーザーを保護するため、アクセスした一部のページの匿名 URL、限定的なシステム情報、一部のページ コンテンツを送信します。</translation>
@@ -2902,6 +2927,7 @@
 <translation id="4918086044614829423">同意する</translation>
 <translation id="4918221908152712722"><ph name="APP_NAME" /> をインストール(ダウンロードは不要です)</translation>
 <translation id="4920887663447894854">以下のサイトは、このページ内であなたの現在地を追跡できないようブロックされています:</translation>
+<translation id="49226369361073053">{0,plural, =0{今すぐデバイスを更新してください}=1{1 秒以内にデバイスを更新してください}other{# 秒以内にデバイスを更新してください}}</translation>
 <translation id="492299503953721473">Android アプリを削除</translation>
 <translation id="4923279099980110923">はい、協力します</translation>
 <translation id="4924352752174756392">12 倍</translation>
@@ -3052,6 +3078,7 @@
 <translation id="5135085122826131075">「OK Google」と話すとアシスタントにアクセスできます。</translation>
 <translation id="5135533361271311778">ブックマークの項目を作成できませんでした。</translation>
 <translation id="5137501176474113045">このアイテムを削除</translation>
+<translation id="5138982052046316113">Linux ディスクのサイズ変更</translation>
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />、<ph name="DEFAULT_SEARCH_ENGINE_NAME" /> 検索</translation>
 <translation id="5139823398361067371">セキュリティ キーの PIN を入力してください。PIN がわからない場合は、セキュリティ キーをリセットする必要があります。</translation>
 <translation id="5139955368427980650">開く(&amp;O)</translation>
@@ -3208,6 +3235,7 @@
 <translation id="5353252989841766347">Chrome からパスワードをエクスポート</translation>
 <translation id="5355099869024327351">アシスタントによる通知の表示を許可する</translation>
 <translation id="5355926466126177564">拡張機能「<ph name="EXTENSION_NAME" />」により、アドレスバーから検索したときに表示されるページが変更されました。</translation>
+<translation id="535911077628776608"><ph name="FILE_NAME" /> は危害を及ぼす可能性があります。Google の高度な保護機能に送信してスキャンしますか?ダウンロード バーの領域に切り替えるには Shift+F6 キーを押してください。</translation>
 <translation id="5359910752122114278">検索結果 1 件</translation>
 <translation id="5360150013186312835">ツールバーに表示</translation>
 <translation id="5362741141255528695">秘密鍵ファイルを選択します。</translation>
@@ -3346,6 +3374,7 @@
 <translation id="5539221284352502426">入力したパスワードはサーバーによって拒否されました。考えられる原因は次のとおりです。パスワードが短すぎる。パスワードに数字または記号が含まれていない。以前と同じパスワードを指定した。</translation>
 <translation id="5541694225089836610">操作が管理者によって無効にされています</translation>
 <translation id="5542132724887566711">プロフィール</translation>
+<translation id="5542133445231529202"><ph name="ORGANIZATION_NAME" /> が今すぐこのデバイスを更新するよう求めています。</translation>
 <translation id="5542750926112347543"><ph name="DOMAIN" /> からの Cookie がブロックされました</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> に接続しています</translation>
 <translation id="5543983818738093899">ステータスを確認しています...</translation>
@@ -3391,6 +3420,7 @@
 <translation id="5593357315997824387">ファイルを同期</translation>
 <translation id="5595152862129936745">非常に遠い</translation>
 <translation id="5595485650161345191">住所の編集</translation>
+<translation id="5595727715083333657">コンテナのサイズを変更することはできません。Linux(ベータ版)に事前に割り当てられている容量を調整するには、バックアップしてから新しいコンテナに復元してください。</translation>
 <translation id="5596627076506792578">その他のオプション</translation>
 <translation id="5600706100022181951">アップデートをダウンロードすると、<ph name="UPDATE_SIZE_MB" /> MB のモバイルデータを使用することになります。続行してもよろしいですか?</translation>
 <translation id="5601503069213153581">PIN</translation>
@@ -3463,6 +3493,7 @@
 <translation id="5691511426247308406">ファミリー</translation>
 <translation id="5691772641933328258">指紋を認識できません</translation>
 <translation id="5692183275898619210">印刷完了</translation>
+<translation id="5692875591060376599">選択したファイルは不明で、危害を及ぼす可能性があります。Google の高度な保護機能に送信してスキャンしますか?</translation>
 <translation id="569425414730375234">現在のシークレット モード セッション: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation>
 <translation id="5696143504434933566">「<ph name="EXTENSION_NAME" />」の不正行為を報告する</translation>
 <translation id="5696679855467848181">現在使用中の PPD ファイル: <ph name="PPD_NAME" /></translation>
@@ -3674,6 +3705,7 @@
 <translation id="5976160379964388480">その他</translation>
 <translation id="5978277834170881274">基本スペルチェックを使用(&amp;U)</translation>
 <translation id="5979084224081478209">パスワードを確認</translation>
+<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{1 個の有害な可能性がある拡張機能を再度有効にしました}other{{NUM_EXTENSIONS} 個の有害な可能性がある拡張機能を再度有効にしました}}</translation>
 <translation id="5979421442488174909"><ph name="LANGUAGE" />に翻訳(&amp;T)</translation>
 <translation id="5979469435153841984">ページをブックマークするには、アドレスバーのスターアイコンをクリックしてください</translation>
 <translation id="5984222099446776634">最近のアクセス</translation>
@@ -3924,6 +3956,7 @@
 <translation id="6309510305002439352">マイクがオフになっています</translation>
 <translation id="6311220991371174222">プロフィールを開こうとして問題が発生したため、Chrome を起動できません。Chrome を再起動してみてください。</translation>
 <translation id="6312403991423642364">ネットワークが不明なためエラーが発生しました</translation>
+<translation id="6312567056350025599">{NUM_DAYS,plural, =1{安全確認を 1 日前に実行しました}other{安全確認を {NUM_DAYS} 日前に実行しました}}</translation>
 <translation id="6312638141433622592">記事をリーダーモードで表示するか確認します(可能な場合)</translation>
 <translation id="6313641880021325787">VR を終了</translation>
 <translation id="6314819609899340042">この <ph name="IDS_SHORT_PRODUCT_NAME" /> デバイスでデバッグ機能が有効になりました。</translation>
@@ -3939,6 +3972,7 @@
 <translation id="6325191661371220117">自動起動を無効にする</translation>
 <translation id="6326175484149238433">Chrome から削除</translation>
 <translation id="6326855256003666642">キープアライブ カウント</translation>
+<translation id="632707535499064463"><ph name="ORGANIZATION_NAME" /> が期限までにこのデバイスを更新するよう求めています。</translation>
 <translation id="6327785803543103246">ウェブプロキシ自動検出</translation>
 <translation id="6333064448949140209">ファイルはデバッグのため Google に送信されます</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> の新しいプロフィールを作成します</translation>
@@ -3965,11 +3999,13 @@
 <translation id="6366190659675876144">標準保護機能</translation>
 <translation id="636850387210749493">企業の登録</translation>
 <translation id="6370021412472292592">マニフェストを読み込めませんでした。</translation>
+<translation id="6371486244597785139">{NUM_PASSWORDS,plural, =1{パスワードを変更}other{パスワードを変更}}</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">再試行</translation>
 <translation id="6377268785556383139">「<ph name="SEARCH_TEXT" />」に対する 1 件の検索結果</translation>
 <translation id="6380143666419481200">同意して続行</translation>
 <translation id="6384275966486438344">検索設定を次に変更します: <ph name="SEARCH_HOST" /></translation>
+<translation id="6385149369087767061">インターネットに接続して、もう一度お試しください</translation>
 <translation id="6385543213911723544">サイトでは Cookie データの保存と読み込みが可能です</translation>
 <translation id="6386099547750337629">この動作が想定外の場合は、サポートにお問い合わせください。</translation>
 <translation id="6387674443318562538">縦に分割</translation>
@@ -4048,6 +4084,7 @@
 <translation id="6478248366783946499">危険なファイルを保存しますか?</translation>
 <translation id="6483485061007832714">ダウンロードしたファイルを開く</translation>
 <translation id="6483805311199035658"><ph name="FILE" /> を開いています...</translation>
+<translation id="6485092675191826776">Plugin VM のライセンスの有効期限が切れました</translation>
 <translation id="6488384360522318064">言語を選択</translation>
 <translation id="648927581764831596">使用できるものはありません</translation>
 <translation id="6490471652906364588">USB-C デバイス(右側面のポート)</translation>
@@ -4237,6 +4274,7 @@
 <translation id="6762833852331690540">オン</translation>
 <translation id="6767566652486411142">別の言語を選択...</translation>
 <translation id="6767639283522617719">ドメインを追加できません。組織部門の設定が正しいことをご確認ください。</translation>
+<translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> がこのデバイスの更新をすすめています。</translation>
 <translation id="6769712124046837540">プリンタの追加...</translation>
 <translation id="6770602306803890733">すべてのウェブユーザーの安全性を高めます</translation>
 <translation id="6770664076092644100">NFC を使って確認</translation>
@@ -4369,6 +4407,7 @@
 <translation id="6943836128787782965">HTTP を取得できませんでした</translation>
 <translation id="6945221475159498467">選択</translation>
 <translation id="694592694773692225">このページでリダイレクトがブロックされました。</translation>
+<translation id="6947526360212886241">{NUM_PASSWORDS,plural, =1{不正使用されたパスワード: 1 件}other{不正使用されたパスワード: {NUM_PASSWORDS} 件}}</translation>
 <translation id="6949434160682548041">パスワード(任意)</translation>
 <translation id="6950627417367801484">アプリを復元</translation>
 <translation id="6950943362443484797">このアプリをインストールします</translation>
@@ -4453,6 +4492,7 @@
 <translation id="7053983685419859001">ブロック</translation>
 <translation id="7055152154916055070">リダイレクトがブロックされました</translation>
 <translation id="7056526158851679338">デバイスを検証(&amp;I)</translation>
+<translation id="7057184853669165321">{NUM_MINS,plural, =1{安全確認を 1 分前に実行しました}other{安全確認を {NUM_MINS} 分前に実行しました}}</translation>
 <translation id="7057767408836081338">アプリのデータを取得できませんでした。引き続きアプリの実行を試みています...</translation>
 <translation id="7059858479264779982">自動起動に設定する</translation>
 <translation id="7059893117020417984">シークレット モードを使うには、その他アイコンのメニューからシークレット ウィンドウを開きます</translation>
@@ -4696,6 +4736,7 @@
 <translation id="7371006317849674875">開始時間</translation>
 <translation id="7371490947952970241">位置情報の使用を無効にするには、このデバイスでメインの位置情報の設定を無効にします。また、位置情報の設定で、Wi‑Fi、モバイル ネットワーク、センサーを現在地の特定に使用しないよう指定することもできます。</translation>
 <translation id="7375053625150546623">EAP</translation>
+<translation id="7375235221357833624">{0,plural, =1{1 時間以内にデバイスを更新してください}other{# 時間以内にデバイスを更新してください}}</translation>
 <translation id="7376553024552204454">移動時にマウスカーソルを強調表示する</translation>
 <translation id="7377451353532943397">センサーへのアクセスを引き続きブロックする</translation>
 <translation id="73786666777299047">Chrome ウェブストアを開きます</translation>
@@ -4713,6 +4754,7 @@
 <translation id="7400418766976504921">URL</translation>
 <translation id="7400839060291901923">「<ph name="PHONE_NAME" />」で接続設定を行ってください</translation>
 <translation id="7401778920660465883">このメッセージを表示しない</translation>
+<translation id="7405938989981604410">{NUM_HOURS,plural, =1{安全確認を 1 時間前に実行しました}other{安全確認を {NUM_HOURS} 時間前に実行しました}}</translation>
 <translation id="740624631517654988">ポップアップがブロックされました</translation>
 <translation id="7407430846095439694">インポートしてバインド</translation>
 <translation id="7407504355934009739">ほとんどのユーザーがこのサイトの通知をブロックしています</translation>
@@ -4743,6 +4785,7 @@
 <translation id="7441830548568730290">他のユーザー</translation>
 <translation id="7442465037756169001">Hangouts Meet ハードウェアを設定できます。</translation>
 <translation id="744341768939279100">新しいプロフィールを作成</translation>
+<translation id="744366959743242014">データを読み込んでいます。これには数秒かかる場合があります。</translation>
 <translation id="7443806024147773267">Google アカウントにログインすれば、いつでもパスワードにアクセスできます。</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> を無効にする</translation>
 <translation id="7448430327655618736">アプリの自動インストール</translation>
@@ -4778,6 +4821,7 @@
 <translation id="7489761397368794366">デバイスから発信</translation>
 <translation id="749028671485790643">ユーザー <ph name="VALUE" /></translation>
 <translation id="7490813197707563893">MAC アドレス</translation>
+<translation id="7491963308094506985">{NUM_COOKIES,plural, =1{1 件の Cookie}other{{NUM_COOKIES} 件の Cookie}}</translation>
 <translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> 拡張機能では、パスワードやクレジット カード番号などの個人データを含むすべての入力テキストが収集される可能性があります。この拡張機能を使用しますか?</translation>
 <translation id="7494694779888133066"><ph name="WIDTH" />x<ph name="HEIGHT" /></translation>
 <translation id="7495778526395737099">パスワードを忘れた場合</translation>
@@ -4798,10 +4842,14 @@
 <translation id="7513029293694390567">保存されている認証情報を使用してウェブサイトに自動的にログインします。この機能が無効になっている場合は、ウェブサイトにログインするときに毎回確認を求められます。</translation>
 <translation id="7514239104543605883">デバイスにコピー</translation>
 <translation id="7514365320538308">ダウンロード</translation>
+<translation id="751523031290522286"><ph name="APP_NAME" /> は管理者によってブロックされています。このアプリを使用するには、管理者の許可が必要です。</translation>
+<translation id="7516981202574715431"><ph name="APP_NAME" /> は一時停止中です</translation>
+<translation id="7517063221058203587">{0,plural, =1{1 分以内にデバイスを更新してください}other{# 分以内にデバイスを更新してください}}</translation>
 <translation id="7520766081042531487">シークレット ポータル: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7522255036471229694">「OK Google」と言ってください</translation>
 <translation id="7525067979554623046">作成</translation>
+<translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{他 1 件}other{他 {NUM_DOWNLOADS} 件}}</translation>
 <translation id="7529411698175791732">インターネット接続を確認してください。問題が解消しない場合は、ログアウトして再度ログインしてみてください。</translation>
 <translation id="7530016656428373557">放電率(ワット)</translation>
 <translation id="7531779363494549572">[設定] &gt; [アプリと通知] &gt; [通知] の順に選択します。</translation>
@@ -4970,6 +5018,7 @@
 <translation id="7765158879357617694">移動</translation>
 <translation id="7766807826975222231">使い方ガイド</translation>
 <translation id="7766838926148951335">権限を許可</translation>
+<translation id="7768770796815395237">変更</translation>
 <translation id="7769672763586021400">モデル ID</translation>
 <translation id="7770651108375708429">Wi-Fi の接続を解除する</translation>
 <translation id="7771452384635174008">レイアウト</translation>
@@ -5406,6 +5455,7 @@
 <translation id="8286963743045814739">シークレット ウィンドウを使って、シークレット モードで閲覧できます</translation>
 <translation id="8287902281644548111">API 呼び出しまたは URL で検索</translation>
 <translation id="8288032458496410887">「<ph name="APP" />」をアンインストール...</translation>
+<translation id="8289128870594824098">ディスクサイズ</translation>
 <translation id="8291967909914612644">ホーム プロバイダの国</translation>
 <translation id="8294431847097064396">ソース</translation>
 <translation id="8297006494302853456">弱い</translation>
@@ -5618,6 +5668,7 @@
 <translation id="8608618451198398104">Kerberos チケットの追加</translation>
 <translation id="8609465669617005112">上に移動</translation>
 <translation id="8610103157987623234">無効な形式です。もう一度お試しください</translation>
+<translation id="8612935480510351790"><ph name="FILE_NAME" /> は危害を及ぼす可能性があります。Google の高度な保護機能に送信してスキャンしますか?</translation>
 <translation id="8613164732773110792">英小文字、数字、アンダースコア、ダッシュのみ</translation>
 <translation id="8615618338313291042">シークレット モード アプリ: <ph name="APP_NAME" /></translation>
 <translation id="8619803522055190423">ドロップ シャドウ</translation>
@@ -5645,6 +5696,7 @@
 <translation id="8641606876632989680">不正使用されたパスワードでログインした場合、Chrome で通知します</translation>
 <translation id="8642900771896232685">2秒</translation>
 <translation id="8642947597466641025">テキストを拡大する</translation>
+<translation id="8643443571868262066"><ph name="FILE_NAME" /> は危害を及ぼす可能性があります。Google の高度な保護機能に送信してスキャンしますか?</translation>
 <translation id="8644655801811752511">このセキュリティ キーをリセットできません。キーの挿入直後にリセットしてみてください。</translation>
 <translation id="8645354835496065562">センサーへのアクセスを引き続き許可する</translation>
 <translation id="8645920082661222035">危険なイベントの発生を予測して警告します</translation>
@@ -6065,6 +6117,7 @@
 <translation id="9169931577761441333">ホーム画面に <ph name="APP_NAME" /> を追加</translation>
 <translation id="9170848237812810038">取消(&amp;U)</translation>
 <translation id="9170884462774788842">パソコン上の別のプログラムにより、Chrome の動作方法を変更する可能性のあるテーマが追加されました。</translation>
+<translation id="917350715406657904">保護者が設定した <ph name="APP_NAME" /> の利用時間の上限に達しました。明日は <ph name="TIME_LIMIT" />まで使えます。</translation>
 <translation id="9173995187295789444">Bluetooth デバイスをスキャンしています...</translation>
 <translation id="9174401638287877180">使用状況データや診断データを送信します。診断データやデバイスとアプリの使用状況データを Google に自動送信して、お子様向けの Android 機能の向上にご協力ください。この情報を使ってお子様個人が特定されることはありません。この情報は、システムとアプリの安定性の向上やその他の機能の改善に役立てられます。また、Google のアプリやパートナー(Android デベロッパーなど)も、集計データとしてこの情報を活用します。お子様の [その他のウェブとアプリのアクティビティ] の設定がオンになっている場合、このデータはお子様の Google アカウントに保存されます。</translation>
 <translation id="917510707618656279">サイトから Bluetooth デバイスへのアクセスを求められたときに確認する</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index ea179a0..8430fa5 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">ອັບ​ໂຫຼດ</translation>
 <translation id="1244265436519979884">ການກູ້ຄືນຂໍ້ມູນຂອງ Linux ພວມດຳເນີນຢູ່ໃນປັດຈຸບັນ</translation>
 <translation id="1244303850296295656">ສ່ວນຂະຫຍາຍຜິດພາດ</translation>
+<translation id="1246158006305844142">ແອັບ ແລະ ການຕັ້ງຄ່າຂອງທ່ານຈະຊິ້ງຂໍ້ມູນໃນທົ່ວອຸປະກອນ Chrome OS ທີ່ທ່ານເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ Google ຂອງທ່ານ. ສຳລັບຕົວເລືອກການຊິ້ງຂໍ້ມູນ, ກະລຸນາໄປທີ່<ph name="LINK_BEGIN" />ການຕັ້ງຄ່າ Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">ລຶບການແນະນຳອອກຈາກຄລິບບອດບໍ?</translation>
 <translation id="1249643471736608405">ບລັອກ <ph name="PLUGIN_NAME" /> ໄວ້ແລ້ວ ເພາະວ່າລະບົບເຊົາຮອງຮັບມັນແລ້ວ</translation>
 <translation id="1251366534849411931">ເຄື່ອງໝາຍວົງປີກກາເປີດທີ່ຕ້ອງມີ: <ph name="ERROR_LINE" /></translation>
@@ -389,6 +390,7 @@
 <translation id="1524563461097350801">ບໍ່, ຂອບໃຈ</translation>
 <translation id="1525740877599838384">ໃຊ້ແຕ່ Wi-Fi ເພື່ອກຳນົດສະຖານທີ່</translation>
 <translation id="152629053603783244">ຣີສະຕາດ Linux</translation>
+<translation id="1526335046150927198">ເປີດການນຳໃຊ້ການເລັ່ງຄວາມໄວການເລື່ອນແຜ່ນສໍາຜັດ</translation>
 <translation id="1526560967942511387">ເອກະສານບໍ່ມີຫົວຂໍ້</translation>
 <translation id="1529891865407786369">ແຫຼ່ງພະລັງງານ</translation>
 <translation id="1530838837447122178">ເປີດການຕັ້ງຄ່າອຸປະກອນເມົ້າ ແລະ ແຜ່ນສຳຜັດ</translation>
@@ -1311,6 +1313,7 @@
 <translation id="2725200716980197196">ເອົາການ​ເຊື່ອມ​ຕໍ່​ເຄືອຄືນມາແລ້ວ</translation>
 <translation id="2727633948226935816">ຢ່າ​ເຕືອນ​ຂ້ອຍ​ອີກ</translation>
 <translation id="2727712005121231835">ຂະໜາດຕົວຈິງ</translation>
+<translation id="2729314457178420145">ລຶບລ້າງຂໍ້ມູນການນຳໃຊ້ (<ph name="URL" />) ນຳ ເຊິ່ງອາດຈະນຳທ່ານອອກຈາກລະບົບ Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">ກຳລັງສຳຮອງຂໍ້ມູນແອັບ ແລະ ໄຟລ໌ Linux ໄວ້</translation>
 <translation id="273093730430620027">ໜ້ານີ້ກໍາລັງເຂົ້າຫາກ້ອງຖ່າຍຮູບຂອງທ່ານ.</translation>
 <translation id="2731392572903530958">ເປີດໜ້າ​ຕ່າງທີ່ປິດແລ້ວຄືນໃໝ່</translation>
@@ -2162,6 +2165,7 @@
 <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> ເພີ່ມເຕີມ</translation>
 <translation id="3838543471119263078">ຄຸກກີ້ ແລະເວັບໄຊທ໌ອື່ນ ແລະຂໍ້ມູນປລັກອິນ</translation>
 <translation id="383891835335927981">ບໍ່ມີການຕັ້ງຄ່າຊູມເຂົ້າ ຫຼື ຊູມອອກສຳລັບເວັບໄຊໃດ</translation>
+<translation id="3839509547554145593">ເປີດການນຳໃຊ້ການເລັ່ງຄວາມໄວການເລື່ອນເມົ້າ</translation>
 <translation id="3839516600093027468">ບລັອກບໍ່ໃຫ້ <ph name="HOST" /> ເຫັນຄລິບບອດທຸກເທື່ອ</translation>
 <translation id="3841964634449506551">ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ</translation>
 <translation id="3842552989725514455">ຟອນ Serif</translation>
@@ -2773,6 +2777,7 @@
 <translation id="4699172675775169585">ຮູບ ແລະໄຟລ໌ທີ່ແຄຊ໌ແລ້ວ</translation>
 <translation id="4699357559218762027">(ເປີດໃຊ້ອັດຕະໂນມັດ)</translation>
 <translation id="470074695271471509">ອອກຈາກລະບົບເພື່ອສຳເລັດບໍ?</translation>
+<translation id="4701025263201366865">ການເຂົ້າສູ່ລະບົບຂອງພໍ່ແມ່</translation>
 <translation id="4707302005824653064">ສາມາດທົບທວນເບິ່ງການ​​ໃຊ້​ ແລະ​ປະ​ຫວັດ​ດ້ວຍຕົວ​ຈັດ​ການ (<ph name="CUSTODIAN_EMAIL" />)  ຢູ່ທີ່ chrome.com ໄດ້.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + ໃບຢັ້ງຢືນຜູ້ໃຊ້</translation>
 <translation id="4708794300267213770">ສະແດງໜ້າຈໍລັອກໃນເວລາຕື່ນຈາກການພັກເຄື່ອງ</translation>
@@ -3080,6 +3085,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> ຊອກຫາ</translation>
 <translation id="5139823398361067371">ປ້ອນ PIN ສຳລັບກະແຈຄວາມປອດໄພຂອງທ່ານ. ຖ້າທ່ານບໍ່ຮູ້ PIN, ທ່ານຈະຈຳເປັນຕ້ອງຣີເຊັດກະແຈຄວາມປອດໄພ</translation>
 <translation id="5139955368427980650">ເປີດ</translation>
+<translation id="5142793792982256885">ຄວາມໄວການເລື່ອນແຜ່ນສໍາຜັດ</translation>
 <translation id="5142961317498132443">ການຮັບຮອງຄວາມຖືກຕ້ອງ</translation>
 <translation id="5143374789336132547">ສ່ວນຂະຫຍາຍ "<ph name="EXTENSION_NAME" />" ໄດ້​ປ່ຽນ​ແປງ​ວ່າ​ຈະໃຫ້ໜ້າໃດປະກົດຂຶ້ນ ເມື່ອ​ທ່ານ​ຄ​ລິກ​ປຸ່ມ​ໜ້າ​ຫຼັກ.</translation>
 <translation id="5143712164865402236">​ໃສ່ເຕັມ​ຫນ້າ​ຈໍ</translation>
@@ -3642,6 +3648,7 @@
 <translation id="5901630391730855834">ສີ​ເຫຼືອງ</translation>
 <translation id="5906655207909574370">ອັບເດດໃກ້ແລ້ວໆ! ກະລຸນາປິດແລ້ວເປີດອຸປະກອນຂອງທ່ານຄືນໃໝ່ເພື່ອສິ້ນສຸດຂັ້ນຕອນການອັບເດດ.</translation>
 <translation id="5906732635754427568">ຂໍ້ມູນທີ່ເຊື່ອມໂຍງກັບແອັບນີ້ຈະຖືກລຶບອອກຈາກອຸປະກອນນີ້.</translation>
+<translation id="5908695239556627796">ຄວາມໄວການເລື່ອນເມົ້າ</translation>
 <translation id="5908769186679515905">ບລັອກບໍ່ໃຫ້ເວັບໄຊເປີດໃຊ້ Flash</translation>
 <translation id="5910363049092958439">ບັນທຶກຮູບເປັນ...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ອອບລາຍຢູ່</translation>
@@ -5088,6 +5095,7 @@
     <ph name="BEGIN_BOLD" />ໝາຍເຫດ:<ph name="END_BOLD" /> ລະບົບຈະປິດເປີດເຄື່ອງຄືນໃໝ່ໃນລະຫວ່າງຂະບວນການນັ້ນ.</translation>
 <translation id="7828731929332799387">ນີ້ຈະລຶບຄຸກກີ້ ແລະ ຂໍ້ມູນເວັບໄຊທັງໝົດທີ່ມີໃຫ້ໃນບໍລິບົດພາກສ່ວນທີສາມ. ທ່ານຕ້ອງການດຳເນີນການຕໍ່ບໍ?</translation>
 <translation id="7829298379596169484">ການ​ເຂົ້າ​ໃຊ້ການປ້ອນຂໍ້ມູນ​ສຽງ</translation>
+<translation id="7829877209233347340">ຂໍໃຫ້ພໍ່ແມ່ເຂົ້າສູ່ລະບົບເພື່ອອະນຸຍາດໃຫ້ເພີ່ມບັນຊີໂຮງຮຽນ</translation>
 <translation id="7830594666202422257">ເຊື່ອມຕໍ່ກັບ Linux</translation>
 <translation id="7831491651892296503">ມີຄວາມຜິດພາດໃນການກຳນົດຄ່າເຄືອຂ່າຍ</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5841,6 +5849,7 @@
 <translation id="8808686172382650546">ແມວ</translation>
 <translation id="8808744862003883508">ໃນໜ້ານີ້ ທ່ານສາມາດເຫັນສ່ວນຂະຫຍາຍທັງໝົດທີ່ຕິດຕັ້ງໃນ Chrome.</translation>
 <translation id="8809147117840417135">ສີຂຽວອົມຟ້າອ່ອນ</translation>
+<translation id="8812593354822910461">ລຶບລ້າງຂໍ້ມູນການນຳໃຊ້ (<ph name="URL" />) ນຳ ເຊິ່ງອາດຈະນຳທ່ານອອກຈາກລະບົບ <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">ບໍ່ສາມາດລົງຊື່ເຂົ້າໃຊ້ <ph name="USERNAME" /> ໄດ້</translation>
 <translation id="8813811964357448561">ແຜ່ນ​ເຈ້ຍ</translation>
 <translation id="8813872945700551674">ຂໍໃຫ້ພໍ່ແມ່ອະນຸຍາດ "<ph name="EXTENSION_NAME" />"</translation>
@@ -6130,6 +6139,7 @@
 <translation id="9203398526606335860">ການສ້າງໂປຣໄຟລ໌ເປີດໃຊ້ງານແລ້ວ</translation>
 <translation id="9203904171912129171">ເລືອກອຸປະກອນ</translation>
 <translation id="9203962528777363226">ຜູ້ຄວບຄຸມອຸປະກອນປິດໃຊ້ງານຜູ້ໃຊ້ໃໝ່ຈາກທີ່ໄດ້ເພີ່ມເຂົ້າແລ້ວ</translation>
+<translation id="9209689095351280025">ເວັບໄຊບໍ່ສາມາດໃຊ້ຄຸກກີ້ທີ່ຕິດຕາມທ່ານໃນທົ່ວເວັບໄຊໄດ້</translation>
 <translation id="9211177926627870898">ຈຳເປັນຕ້ອງອັບເດດ</translation>
 <translation id="9214520840402538427">ອຸ້ຍ! ການລິເລີ່ມຄຸນລັກສະນະເວລາການຕິດຕັ້ງໝົດເວລາແລ້ວ. ກະລຸນາຕິດຕໍ່ຕົວແທນຊ່ວຍເຫຼືອຂອງທ່ານ.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index d2951b1..68cfe51 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Įkelti</translation>
 <translation id="1244265436519979884">Šiuo metu vykdomas „Linux“ atkūrimas</translation>
 <translation id="1244303850296295656">Plėtinio klaida</translation>
+<translation id="1246158006305844142">Programos ir nustatymai bus sinchronizuojami visuose „Chrome“ įrenginiuose, kuriuose esate prisijungę naudodami „Google“ paskyrą. Jei reikia naršyklės sinchronizavimo parinkčių, eikite į <ph name="LINK_BEGIN" />„Chrome“ nustatymų skiltį<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Pašalinti pasiūlymą iš iškarpinės?</translation>
 <translation id="1249643471736608405">Papildinys „<ph name="PLUGIN_NAME" />“ užblokuotas, nes jis nebenaudojamas</translation>
 <translation id="1251366534849411931">Pradžioje turi būti nurodytas riestinis skliaustas: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Ačiū, ne</translation>
 <translation id="1525740877599838384">Naudoti tik „Wi‑Fi“ vietovei nustatyti</translation>
 <translation id="152629053603783244">Iš naujo paleisti „Linux“</translation>
+<translation id="1526335046150927198">Įgalinti slinkimo jutikline dalimi paspartinimą</translation>
 <translation id="1526560967942511387">Dokumentas be pavadinimo</translation>
 <translation id="1529891865407786369">Maitinimo šaltinis</translation>
 <translation id="1530838837447122178">Atidaryti įrenginio pelės ir jutiklinės dalies nustatymus</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Tinklo ryšys atkurtas</translation>
 <translation id="2727633948226935816">Nebepriminti</translation>
 <translation id="2727712005121231835">Faktinis dydis</translation>
+<translation id="2729314457178420145">Taip pat išvalyti naršymo duomenis (<ph name="URL" />). Tai padarius galite būti atjungti nuo Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Kuriama atsarginė „Linux“ programų ir failų kopija</translation>
 <translation id="273093730430620027">Šis puslapis gali pasiekti jūsų fotoaparatą.</translation>
 <translation id="2731392572903530958">I&amp;š naujo atidaryti uždarytą langą</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Daugiau <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Slapukai ir kiti svetainių bei papildinių duomenys</translation>
 <translation id="383891835335927981">Nėra svetainių, kurių turinys priartintas arba atitolintas</translation>
+<translation id="3839509547554145593">Įgalinti slinkimo pele paspartinimą</translation>
 <translation id="3839516600093027468">Niekada neleisti <ph name="HOST" /> peržiūrėti iškarpinės</translation>
 <translation id="3841964634449506551">Netinkamas slaptažodis</translation>
 <translation id="3842552989725514455">Šriftas „Serif“</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Talpykloje esantys vaizdai ir failai</translation>
 <translation id="4699357559218762027">(automatiškai paleidžiama)</translation>
 <translation id="470074695271471509">Norite atsijungti, kad užbaigtumėte?</translation>
+<translation id="4701025263201366865">Vieno iš tėvų prisijungimas</translation>
 <translation id="4707302005824653064">Valdytojas (<ph name="CUSTODIAN_EMAIL" />) gali peržiūrėti naudojimo ir istorijos duomenis apsilankęs chrome.com.</translation>
 <translation id="4707579418881001319">L2TP / „IPsec“ ir naudotojo sertifikatas</translation>
 <translation id="4708794300267213770">Rodyti užrakto ekraną pažadinant iš miego būsenos</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, „<ph name="DEFAULT_SEARCH_ENGINE_NAME" />“ paieška</translation>
 <translation id="5139823398361067371">Įveskite saugos rakto PIN kodą. Jei PIN kodo nežinote, reikės iš naujo nustatyti saugos raktą.</translation>
 <translation id="5139955368427980650">&amp;Atidaryti</translation>
+<translation id="5142793792982256885">Slinkimo jutikline dalimi sparta</translation>
 <translation id="5142961317498132443">Autentifikavimas</translation>
 <translation id="5143374789336132547">Plėtinys „<ph name="EXTENSION_NAME" />“ pakeitė puslapį, kuris rodomas spustelėjus pagrindinio puslapio mygtuką.</translation>
 <translation id="5143712164865402236">Įvesti viso ekrano režimu</translation>
@@ -3645,6 +3651,7 @@
 <translation id="5901630391730855834">Geltona</translation>
 <translation id="5906655207909574370">Beveik įdiegta naujausia versija! Paleiskite įrenginį iš naujo, kad būtų užbaigtas naujinimas.</translation>
 <translation id="5906732635754427568">Su šia programa susieti duomenys bus pašalinti iš šio įrenginio.</translation>
+<translation id="5908695239556627796">Slinkimo pele sparta</translation>
 <translation id="5908769186679515905">Užblokuoti svetaines, kad nebūtų galima vykdyti „Flash“</translation>
 <translation id="5910363049092958439">Iš&amp;saugoti vaizdą kaip...</translation>
 <translation id="5910726859585389579">„<ph name="DEVICE_TYPE" />“ ryšys išjungtas</translation>
@@ -5092,6 +5099,7 @@
     <ph name="BEGIN_BOLD" />Pastaba:<ph name="END_BOLD" /> vykdant procesą sistema bus paleista iš naujo.</translation>
 <translation id="7828731929332799387">Bus ištrinti visi su trečiosiomis šalimis susiję slapukai ir svetainių duomenys. Ar norite tęsti?</translation>
 <translation id="7829298379596169484">Pasiekiama garso įrašų įvestis</translation>
+<translation id="7829877209233347340">Paprašykite vieno iš tėvų prisijungti, kad suteiktų leidimą pridėti mokyklos paskyrą</translation>
 <translation id="7830594666202422257">Prijungti prie „Linux“</translation>
 <translation id="7831491651892296503">Klaida konfigūruojant tinklą</translation>
 <translation id="7831754656372780761">„<ph name="TAB_TITLE" />“ <ph name="EMOJI_MUTING" /></translation>
@@ -5846,6 +5854,7 @@
 <translation id="8808686172382650546">Katė</translation>
 <translation id="8808744862003883508">Šiame puslapyje galite peržiūrėti visus „Chrome“ įdiegtus plėtinius.</translation>
 <translation id="8809147117840417135">Šviesi žalsvai mėlyna</translation>
+<translation id="8812593354822910461">Taip pat išvalyti naršymo duomenis (<ph name="URL" />). Tai padarius būsite atjungti nuo <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Nepavyko prisijungti prie <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">popieriaus lapas</translation>
 <translation id="8813872945700551674">Paprašykite vieno iš tėvų patvirtinti „<ph name="EXTENSION_NAME" />“</translation>
@@ -6135,6 +6144,7 @@
 <translation id="9203398526606335860">&amp;Profiliavimas įgalintas</translation>
 <translation id="9203904171912129171">Pasirinkti įrenginį</translation>
 <translation id="9203962528777363226">Šio įrenginio administratorius neleido pridėti naujų naudotojų</translation>
+<translation id="9209689095351280025">Svetainės negali naudoti slapukų, stebinčių jus žiniatinklyje</translation>
 <translation id="9211177926627870898">Būtina atnaujinti</translation>
 <translation id="9214520840402538427">Oi! Diegimo trukmės atributų iniciacijos laikas baigėsi. Susisiekite su palaikymo komandos atstovu.</translation>
 <translation id="9214695392875603905">Keksinis pyragaitis</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 9e51f37e..9655ab2 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Augšupielādēt</translation>
 <translation id="1244265436519979884">Šobrīd notiek Linux atjaunošana</translation>
 <translation id="1244303850296295656">Paplašinājuma kļūda</translation>
+<translation id="1246158006305844142">Jūsu lietotnes un iestatījumi tiks sinhronizēti visās Chrome OS ierīcēs, kurās esat pierakstījies, izmantojot savu Google kontu. Lai skatītu pārlūkprogrammas sinhronizācijas opcijas, dodieties uz <ph name="LINK_BEGIN" />Chrome iestatījumi<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Vai noņemt ieteikumu no starpliktuves?</translation>
 <translation id="1249643471736608405">Spraudnis <ph name="PLUGIN_NAME" /> tika bloķēts, jo tā lietošana tika pārtraukta</translation>
 <translation id="1251366534849411931">Jābūt figūriekavai: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Nē, paldies</translation>
 <translation id="1525740877599838384">Izmantot tikai Wi-Fi tīklu, lai noteiktu atrašanās vietu</translation>
 <translation id="152629053603783244">Restartēt operētājsistēmu Linux</translation>
+<translation id="1526335046150927198">Iespējot skārienpaliktņa ritināšanas paātrinātāju</translation>
 <translation id="1526560967942511387">Dokuments bez nosaukuma</translation>
 <translation id="1529891865407786369">Barošanas avots</translation>
 <translation id="1530838837447122178">Atvērt peles un skārienpaliktņa ierīces iestatījumus</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Tīkla savienojums atjaunots</translation>
 <translation id="2727633948226935816">Turpmāk vairs neatgādināt</translation>
 <translation id="2727712005121231835">Faktiskais izmērs</translation>
+<translation id="2729314457178420145">Arī notīrīt pārlūkošanas datus (<ph name="URL" />). Tādējādi varat tikt izrakstīts no vietnes Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Notiek Linux lietotņu un failu dublēšana</translation>
 <translation id="273093730430620027">Šī lapa piekļūst jūsu kamerai.</translation>
 <translation id="2731392572903530958">Vēlr&amp;eiz atvērt aizvērto logu</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Citas lapas ar nosaukumu <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Sīkfaili un citi vietņu un spraudņu dati</translation>
 <translation id="383891835335927981">Nevienā vietnē nav veikta tālummaiņa.</translation>
+<translation id="3839509547554145593">Iespējot peles ritināšanas paātrinātāju</translation>
 <translation id="3839516600093027468">Vienmēr bloķēt starpliktuves satura rādīšanu vietnei <ph name="HOST" /></translation>
 <translation id="3841964634449506551">Parole ir nederīga</translation>
 <translation id="3842552989725514455">Serif fonts</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Kešatmiņā ievietotie attēli un faili</translation>
 <translation id="4699357559218762027">(tiek palaista automātiski)</translation>
 <translation id="470074695271471509">Vai vēlaties izrakstīties, lai pabeigtu?</translation>
+<translation id="4701025263201366865">Jāpierakstās vienam no vecākiem</translation>
 <translation id="4707302005824653064">Pārvaldnieks (<ph name="CUSTODIAN_EMAIL" />) var skatīt lietojumu un vēsturi vietnē chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + lietotāja sertifikāts</translation>
 <translation id="4708794300267213770">Rādīt bloķēšanas ekrānu, kad tiek izslēgts miega režīms</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680">Meklēšana: <ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Ievadiet drošības atslēgas PIN. Ja nezināt PIN, būs jāatiestata drošības atslēga.</translation>
 <translation id="5139955368427980650">Atvērt</translation>
+<translation id="5142793792982256885">Skārienpaliktņa ritināšanas ātrums</translation>
 <translation id="5142961317498132443">Autentifikācija</translation>
 <translation id="5143374789336132547">Paplašinājums “<ph name="EXTENSION_NAME" />” mainīja iestatījumu, kura lapa tiek parādīta, noklikšķinot uz pogas Sākums.</translation>
 <translation id="5143712164865402236">Ieiet pilnekrāna režīmā</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Dzeltena</translation>
 <translation id="5906655207909574370">Atjaunināšana ir gandrīz pabeigta. Restartējiet ierīci, lai pabeigtu atjaunināšanu.</translation>
 <translation id="5906732635754427568">Ar šo lietotni saistītie dati tiks noņemti no šīs ierīces.</translation>
+<translation id="5908695239556627796">Peles ritināšanas ātrums</translation>
 <translation id="5908769186679515905">Bloķēt Flash aktivizēšanu vietnēs</translation>
 <translation id="5910363049092958439">Saglabāt attēlu &amp;kā...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ir bezsaistē</translation>
@@ -5090,6 +5097,7 @@
     <ph name="BEGIN_BOLD" />Piezīme.<ph name="END_BOLD" /> Procesa laikā sistēma tiks atkārtoti palaista.</translation>
 <translation id="7828731929332799387">Tiks dzēsti visi sīkfaili un vietņu dati, kas pieejami trešo pušu kontekstā. Vai vēlaties turpināt?</translation>
 <translation id="7829298379596169484">Notiek piekļūšana audio ievadei</translation>
+<translation id="7829877209233347340">Lūdziet vienam no vecākiem pierakstīties, lai piešķirtu atļauju mācību iestādes konta pievienošanai</translation>
 <translation id="7830594666202422257">Izveidot savienojumu ar Linux</translation>
 <translation id="7831491651892296503">Tīkla konfigurācijas kļūda</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5844,6 +5852,7 @@
 <translation id="8808686172382650546">Kaķis</translation>
 <translation id="8808744862003883508">Šajā lapā varat skatīt visus pārlūkā Chrome instalētos paplašinājumus.</translation>
 <translation id="8809147117840417135">Gaiši zilganzaļa</translation>
+<translation id="8812593354822910461">Arī notīrīt pārlūkošanas datus (<ph name="URL" />). Tādējādi tiksiet izrakstīts no vietnes <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Problēma ar pierakstīšanos kontā <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">papīra loksne</translation>
 <translation id="8813872945700551674">Lūdziet kādam no vecākiem apstiprināt paplašinājumu <ph name="EXTENSION_NAME" />.</translation>
@@ -6133,6 +6142,7 @@
 <translation id="9203398526606335860">&amp;Profilēšana iespējota</translation>
 <translation id="9203904171912129171">Atlasiet ierīci</translation>
 <translation id="9203962528777363226">Šīs ierīces administrators ir atspējojis jaunu lietotāju pievienošanu.</translation>
+<translation id="9209689095351280025">Vietnēs nevar izmantot sīkfailus, kas izseko jūsu darbības tīmeklī</translation>
 <translation id="9211177926627870898">Jāveic atjaunināšana</translation>
 <translation id="9214520840402538427">Instalācijas laika atribūtu inicializēšanā diemžēl iestājās noildze. Lūdzu, sazinieties ar savu atbalsta pārstāvi.</translation>
 <translation id="9214695392875603905">Glazūrkēkss</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index ef33be5..ec19f92 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Постави</translation>
 <translation id="1244265436519979884">Обновата на Linux моментално е во тек</translation>
 <translation id="1244303850296295656">Грешка на наставка</translation>
+<translation id="1246158006305844142">Вашите апликации и поставки ќе се синхронизираат на сите уреди со Chrome OS каде што сте најавени со сметката на Google. За опциите за синхронизирање на прелистувачот, одете во <ph name="LINK_BEGIN" />Поставки за Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Дали да се отстрани предлогот од привремената меморија?</translation>
 <translation id="1249643471736608405">Приклучокот <ph name="PLUGIN_NAME" /> е блокиран затоа што е неподдржан</translation>
 <translation id="1251366534849411931">Се очекува лева голема заграда: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Не, благодарам</translation>
 <translation id="1525740877599838384">Користи само Wi-Fi за утврдување на локацијата</translation>
 <translation id="152629053603783244">Рестартирај го Linux</translation>
+<translation id="1526335046150927198">Овозможи забрзување на лизгањето на подлогата за допир</translation>
 <translation id="1526560967942511387">Документ без наслов</translation>
 <translation id="1529891865407786369">Извор на напојување</translation>
 <translation id="1530838837447122178">Отворете ги поставките на уредот за глувчето и подлогата за допир</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Обновена мрежна поврзливост</translation>
 <translation id="2727633948226935816">Не потсетувај ме повторно</translation>
 <translation id="2727712005121231835">Вистинска големина</translation>
+<translation id="2729314457178420145">Избришете ги и податоците од прелистувањето (<ph name="URL" />), а тоа може да ве одјави од Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Се прави бекап на апликациите и датотеките на Linux</translation>
 <translation id="273093730430620027">Страницата пристапува до фотоапаратот.</translation>
 <translation id="2731392572903530958">Повторно&amp; отвори затворен прозорец</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Повеќе <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Колачиња и други податоци од локација и од приклучок</translation>
 <translation id="383891835335927981">Ниеден сајт не е зумиран ниту одзумиран</translation>
+<translation id="3839509547554145593">Овозможи забрзување на лизгањето на глувчето</translation>
 <translation id="3839516600093027468">Секогаш блокирај го пристапот на <ph name="HOST" /> за гледање на привремената меморија</translation>
 <translation id="3841964634449506551">Погрешна лозинка</translation>
 <translation id="3842552989725514455">Фонт Serif</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Кеширани слики и датотеки</translation>
 <translation id="4699357559218762027">(автоматско стартување)</translation>
 <translation id="470074695271471509">Дали сакате да се одјавите за да завршите?</translation>
+<translation id="4701025263201366865">Најавување на родител</translation>
 <translation id="4707302005824653064">Користењето и историјата може да ги прегледува управникот (<ph name="CUSTODIAN_EMAIL" />) на chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + сертификат на корисник</translation>
 <translation id="4708794300267213770">Прикажи заклучен екран при будење од режим на мирување</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, пребарајте со <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Внесете го PIN-кодот за вашиот безбедносен клуч. Ако не го знаете PIN-кодот, ќе треба да го ресетирате безбедносниот клуч.</translation>
 <translation id="5139955368427980650">&amp;Отвори</translation>
+<translation id="5142793792982256885">Брзина на лизгање на подлогата за допир</translation>
 <translation id="5142961317498132443">Проверка</translation>
 <translation id="5143374789336132547">Екстензијата „<ph name="EXTENSION_NAME" />“ ја смени страницата што се прикажува кога ќе кликнете на копчето Почетна страница.</translation>
 <translation id="5143712164865402236">Влези во цел екран</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Жолта боја</translation>
 <translation id="5906655207909574370">Речиси ажурирано! Рестартирајте го уредот за да се заврши ажурирањето.</translation>
 <translation id="5906732635754427568">Податоците поврзани со оваа апликација ќе бидат отстранети од уредов.</translation>
+<translation id="5908695239556627796">Брзина на лизгање на глувчето</translation>
 <translation id="5908769186679515905">Блокирајте страниците да пуштаат Flash</translation>
 <translation id="5910363049092958439">Сни&amp;ми слика како…</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> е офлајн</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Напомена:<ph name="END_BOLD" /> системот ќе се рестартира во текот на процесот.</translation>
 <translation id="7828731929332799387">Ова ќе ги избрише сите колачиња и податоците за сајтовите што се достапни во контексти на трета страна. Дали сакате да продолжите?</translation>
 <translation id="7829298379596169484">Пристап до аудиовлез</translation>
+<translation id="7829877209233347340">Побарај од родителот да се најави за да даде дозвола за додавање училишна сметка</translation>
 <translation id="7830594666202422257">Поврзи се со Linux</translation>
 <translation id="7831491651892296503">Грешка при конфигурирање на мрежата</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5847,6 +5855,7 @@
 <translation id="8808686172382650546">Мачка</translation>
 <translation id="8808744862003883508">На страницава, може да ги видите сите екстензии инсталирани во Chrome.</translation>
 <translation id="8809147117840417135">Светла синозелена</translation>
+<translation id="8812593354822910461">Избришете ги и податоците од прелистувањето (<ph name="URL" />), а тоа ќе ве одјави од <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Не може да се најави на <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">лист хартија</translation>
 <translation id="8813872945700551674">Повикај родител за да ја одобри „<ph name="EXTENSION_NAME" />“</translation>
@@ -6136,6 +6145,7 @@
 <translation id="9203398526606335860">&amp;Профилирањето е овозможено</translation>
 <translation id="9203904171912129171">Изберете уред</translation>
 <translation id="9203962528777363226">Администраторот на уредов оневозможи додавање нови корисници</translation>
+<translation id="9209689095351280025">Сајтовите не можат да користат колачиња што ве следат на интернет</translation>
 <translation id="9211177926627870898">Потребно е ажурирање</translation>
 <translation id="9214520840402538427">Упс! Иницијализацијата на атрибутите за време на инсталација истече. Контактирајте со вашиот претставник за поддршка.</translation>
 <translation id="9214695392875603905">Тортичка</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 6b6b668..316ca13 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">അപ്‌ലോഡുചെയ്യുക</translation>
 <translation id="1244265436519979884">Linux പുനഃസ്ഥാപിക്കൽ നിലവിൽ പുരോഗതിയിലാണ്</translation>
 <translation id="1244303850296295656">വിപുലീകരണ പിശക്</translation>
+<translation id="1246158006305844142">നിങ്ങളുടെ Google അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്‌തിട്ടുള്ള എല്ലാ Chrome OS ഉപകരണങ്ങളിലുമുടനീളം നിങ്ങളുടെ ആപ്പുകളും ക്രമീകരണവും സമന്വയിപ്പിക്കും. ബ്രൗസർ സമന്വയിപ്പിക്കൽ ഓപ്‌ഷനുകൾക്ക് <ph name="LINK_BEGIN" />Chrome ക്രമീകരണത്തിലേക്ക്<ph name="LINK_END" /> പോവുക.</translation>
 <translation id="1246905108078336582">ക്ലിപ്പ്ബോർഡിൽ നിന്ന് നിർദ്ദേശം നീക്കം ചെയ്യണോ?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> അവസാനിപ്പിച്ചതിനാൽ ഇത് ബ്ലോക്ക് ചെയ്‌തു</translation>
 <translation id="1251366534849411931">പ്രതീക്ഷിച്ചത് ഓപ്പൺ ചുരുൾ ബ്രാക്കറ്റ്: <ph name="ERROR_LINE" /></translation>
@@ -388,6 +389,7 @@
 <translation id="1524563461097350801">വേണ്ട</translation>
 <translation id="1525740877599838384">ലൊക്കേഷൻ നിർണ്ണയിക്കാൻ വൈഫൈ മാത്രം ഉപയോഗിക്കുക</translation>
 <translation id="152629053603783244">Linux റീസ്റ്റാർട്ട് ചെയ്യുക</translation>
+<translation id="1526335046150927198">ടച്ച്‌പാഡ് സ്‍ക്രോള്‍ ആക്‌സിലറേഷൻ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="1526560967942511387">പേരില്ലാത്ത പ്രമാണം</translation>
 <translation id="1529891865407786369">പവർ ഉറവിടം</translation>
 <translation id="1530838837447122178">മൗസ്, ടച്ച്‌പാഡ് ഉപകരണ ക്രമീകരണം തുറക്കുക</translation>
@@ -1310,6 +1312,7 @@
 <translation id="2725200716980197196">നെറ്റ്‌വർക്ക് കണക്‌റ്റിവിറ്റി പുനഃസ്‌ഥാപിച്ചു</translation>
 <translation id="2727633948226935816">എന്നെ വീണ്ടും ഓർമ്മപ്പെടുത്തരുത്</translation>
 <translation id="2727712005121231835">യഥാര്‍ത്ഥ വലിപ്പം</translation>
+<translation id="2729314457178420145">Google.com-ൽ നിന്ന് നിങ്ങളെ സൈൻ ഔട്ട് ചെയ്‌തേക്കാവുന്ന ബ്രൗസിംഗ് ഡാറ്റയും (<ph name="URL" />) മായ്‌ക്കുക. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Linux ആപ്പുകളും ഫയലുകളും ബാക്കപ്പ് ചെയ്യുന്നു</translation>
 <translation id="273093730430620027">ഈ പേജ് നിങ്ങളുടെ ക്യാമറ ആക്‌സസ്സുചെയ്യുന്നു.</translation>
 <translation id="2731392572903530958">അടച്ച വിൻഡോ വീണ്ടും തു&amp;റക്കുക</translation>
@@ -2161,6 +2164,7 @@
 <translation id="3838486795898716504">കൂടുതൽ <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">കുക്കികളും മറ്റുള്ള സൈറ്റും പ്ലഗിൻ വിവരവും</translation>
 <translation id="383891835335927981">സൈറ്റുകളൊന്നും സൂം ഇൻ അല്ലെങ്കിൽ സൂം ഔട്ട് ചെയ്‌തിട്ടില്ല</translation>
+<translation id="3839509547554145593">മൗസ് സ്‍ക്രോള്‍ ആക്‌സിലറേഷൻ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="3839516600093027468">ക്ലിപ്പ്‌ബോർഡ് കാണുന്നതിൽ നിന്ന് എല്ലായ്പ്പോഴും <ph name="HOST" /> എന്നതിനെ ബ്ലോക്ക് ചെയ്യുക</translation>
 <translation id="3841964634449506551">പാസ്‌വേഡ് അസാധുവാണ്</translation>
 <translation id="3842552989725514455">Serif font </translation>
@@ -2771,6 +2775,7 @@
 <translation id="4699172675775169585">കാഷെ ചെയ്‌ത ചിത്രങ്ങളും ഫയലുകളും</translation>
 <translation id="4699357559218762027">(സ്വയമേവ-സമാരംഭിച്ചു)</translation>
 <translation id="470074695271471509">പൂർത്തിയാക്കാൻ സൈൻ ഔട്ട് ചെയ്യണോ?</translation>
+<translation id="4701025263201366865">രക്ഷിതാവിനുള്ള സൈൻ ഇൻ</translation>
 <translation id="4707302005824653064">ഉപയോഗവും ചരിത്രവും chrome.com എന്നതിലെ മാനേജർ (<ph name="CUSTODIAN_EMAIL" />) അവലോകനം ചെയ്യാനിടയുണ്ട്.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + ഉപയോക്തൃ സർട്ടിഫിക്കറ്റ്</translation>
 <translation id="4708794300267213770">സുഷുപ്‌തിയിൽ നിന്നുണരുമ്പോൾ ലോക്ക് സ്‌ക്രീൻ കാണിക്കുക</translation>
@@ -3078,6 +3083,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> തിരയൽ</translation>
 <translation id="5139823398361067371">നിങ്ങളുടെ സുരക്ഷാ കീയുടെ പിൻ നൽകുക. നിങ്ങൾക്ക് പിൻ അറിയില്ലെങ്കിൽ, സുരക്ഷാ കീ റീസെറ്റ് ചെയ്യേണ്ടതുണ്ട്.</translation>
 <translation id="5139955368427980650">&amp;തുറക്കൂ</translation>
+<translation id="5142793792982256885">ടച്ച്‌പാഡ് സ്‍ക്രോള്‍ ചെയ്യൽ വേഗത</translation>
 <translation id="5142961317498132443">പരിശോധിച്ചുറപ്പിക്കൽ</translation>
 <translation id="5143374789336132547">നിങ്ങൾ ഹോം ബട്ടൺ ക്ലിക്ക് ചെയ്യുമ്പോൾ ദൃശ്യമാകുന്ന പേജിനെ "<ph name="EXTENSION_NAME" />" വിപുലീകരണം മാറ്റി.</translation>
 <translation id="5143712164865402236">പൂര്‍‌ണ്ണ സ്‌ക്രീനില്‍‌ പ്രവേശിക്കുക</translation>
@@ -3641,6 +3647,7 @@
 <translation id="5901630391730855834">മഞ്ഞ</translation>
 <translation id="5906655207909574370">എകദേശം അപ് റ്റു ഡേറ്റാണ്! അപ്‌ഡേറ്റ് ചെയ്യൽ പൂർത്തിയാക്കാൻ ഉപകരണം പുനരാരംഭിക്കുക.</translation>
 <translation id="5906732635754427568">ഈ ആപ്പുമായി ബന്ധപ്പെട്ട വിവരങ്ങൾ ഈ ഉപകരണത്തിൽ നിന്ന് നീക്കംചെയ്യപ്പെടും.</translation>
+<translation id="5908695239556627796">മൗസ് സ്‍ക്രോള്‍ ചെയ്യൽ വേഗത</translation>
 <translation id="5908769186679515905">Flash റൺ ചെയ്യുന്നതിൽ നിന്ന് സൈറ്റുകളെ തടയുക</translation>
 <translation id="5910363049092958439">ചിത്രം ഇതായി സം&amp;രക്ഷിക്കുക...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ഓഫ്‌ലൈൻ ആണ്</translation>
@@ -5089,6 +5096,7 @@
     <ph name="BEGIN_BOLD" />കുറിപ്പ്:<ph name="END_BOLD" />  പ്രോസസ് വേളയിൽ സിസ്റ്റം റീബൂട്ട് ചെയ്യും.</translation>
 <translation id="7828731929332799387">മൂന്നാം കക്ഷികളുമായി ബന്ധപ്പെട്ട സന്ദർഭങ്ങളിൽ ലഭ്യമായ എല്ലാ സൈറ്റ് ഡാറ്റയും കുക്കികളും ഇത് ഇല്ലാതാക്കും. തുടരാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?</translation>
 <translation id="7829298379596169484">ഓഡിയോ ഇൻപുട്ട് ആക്‌സസ്സുചെയ്യുന്നു</translation>
+<translation id="7829877209233347340">സ്‌കൂൾ അക്കൗണ്ട് ചേർക്കുന്നതിന് അനുമതി നൽകാൻ രക്ഷിതാവിനോട് സൈൻ ഇൻ ചെയ്യാൻ ആവശ്യപ്പെടുക</translation>
 <translation id="7830594666202422257">Linux-ലേക്ക് കണക്റ്റ് ചെയ്യുക</translation>
 <translation id="7831491651892296503">നെറ്റ്‍വര്‍ക്ക് കോണ്‍ഫിഗര്‍ ചെയ്യുന്നതിൽ പിശക്</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5842,6 +5850,7 @@
 <translation id="8808686172382650546">പൂച്ച</translation>
 <translation id="8808744862003883508">ഈ പേജിൽ നിങ്ങൾക്ക് Chrome-ൽ ഇൻസ്റ്റാൾ ചെയ്‍തിരിക്കുന്ന എല്ലാ വിപുലീകരണങ്ങളും കാണാം.</translation>
 <translation id="8809147117840417135">ഇളം ടീൽ</translation>
+<translation id="8812593354822910461"><ph name="DOMAIN" /> എന്നതിൽ നിന്ന് നിങ്ങളെ സൈൻ ഔട്ട് ചെയ്യുന്ന ബ്രൗസിംഗ് ഡാറ്റയും (<ph name="URL" />) മായ്‌ക്കുക.<ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039"><ph name="USERNAME" /> എന്നതിലേക്ക് സൈൻ ഇൻ ചെയ്യാനാവില്ല</translation>
 <translation id="8813811964357448561">പേപ്പറുകളുടെ ഷീറ്റ്</translation>
 <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />"-ന് അംഗീകാരം നൽകാൻ രക്ഷിതാവിനോട് ആവശ്യപ്പെടുക</translation>
@@ -6131,6 +6140,7 @@
 <translation id="9203398526606335860">&amp;പ്രൊഫൈലിംഗ് പ്രാപ്തമാക്കി</translation>
 <translation id="9203904171912129171">ഒരു ഉപകരണം തിരഞ്ഞെടുക്കുക</translation>
 <translation id="9203962528777363226">പുതിയ ഉപയോക്താക്കളെ ചേർക്കുന്നത് ഈ ഉപകരണത്തിന്റെ അഡ്‌മിൻ പ്രവർത്തനരഹിതമാക്കി</translation>
+<translation id="9209689095351280025">വെബിലുടനീളം നിങ്ങളെ ട്രാക്ക് ചെയ്യുന്ന കുക്കികൾ ഉപയോഗിക്കാൻ സെെറ്റുകൾക്കാവില്ല</translation>
 <translation id="9211177926627870898">അപ്ഡേറ്റ് ആവശ്യമാണ്</translation>
 <translation id="9214520840402538427">ക്ഷമിക്കണം!  ഇൻസ്റ്റലേഷൻ സമയ-ആട്രിബ്യൂട്ടുകളുടെ ലോഞ്ച് ചെയ്യൽ കാലഹരണപ്പെട്ടു.  നിങ്ങളുടെ പിന്തുണാ പ്രതിനിധിയെ ബന്ധപ്പെടുക.</translation>
 <translation id="9214695392875603905">കപ്പ്‌കേക്ക്</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index d7e1c4f..ad099ca5 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Muat naik</translation>
 <translation id="1244265436519979884">Pemulihan Linux sedang dijalankan</translation>
 <translation id="1244303850296295656">Ralat sambungan</translation>
+<translation id="1246158006305844142">Apl dan tetapan anda akan disegerakkan pada semua peranti OS Chrome yang anda gunakan untuk log masuk dengan akaun Google anda. Untuk mendapatkan pilihan penyegerakan penyemak imbas, lawati <ph name="LINK_BEGIN" />tetapan Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Alih keluar cadangan daripada papan keratan?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> disekat kerana telah ditamatkan</translation>
 <translation id="1251366534849411931">Tiada tanda kurung keriting pembuka: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Tidak Perlu</translation>
 <translation id="1525740877599838384">Gunakan Wi-Fi sahaja untuk menentukan lokasi</translation>
 <translation id="152629053603783244">Mulakan semula Linux</translation>
+<translation id="1526335046150927198">Dayakan pemecutan penatalan pad sentuh</translation>
 <translation id="1526560967942511387">Dokumen Tidak Bertajuk</translation>
 <translation id="1529891865407786369">Sumber kuasa</translation>
 <translation id="1530838837447122178">Buka tetapan peranti tetikus dan pad sentuh</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Sambungan rangkaian dipulihkan</translation>
 <translation id="2727633948226935816">Jangan ingatkan saya lagi</translation>
 <translation id="2727712005121231835">Saiz Sebenar</translation>
+<translation id="2729314457178420145">Kosongkan data semakan imbas (<ph name="URL" />) juga, yang mungkin melog anda keluar daripada Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Menyandarkan apl dan fail Linux</translation>
 <translation id="273093730430620027">Halaman ini mengakses kamera anda.</translation>
 <translation id="2731392572903530958">B&amp;uka Semula Tetingkap Yang Ditutup</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Lagi <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Kuki, data tapak lain dan data pemalam</translation>
 <translation id="383891835335927981">Tiada tapak yang telah dizum masuk atau keluar</translation>
+<translation id="3839509547554145593">Dayakan pemecutan penatalan tetikus</translation>
 <translation id="3839516600093027468">Sentiasa sekat <ph name="HOST" /> daripada melihat papan keratan</translation>
 <translation id="3841964634449506551">Kata laluan tidak sah</translation>
 <translation id="3842552989725514455">Fon Serif</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Imej dan fail dicache</translation>
 <translation id="4699357559218762027">(dilancarkan secara automatik)</translation>
 <translation id="470074695271471509">Log keluar untuk menyelesaikan proses ini?</translation>
+<translation id="4701025263201366865">Log masuk ibu atau bapa</translation>
 <translation id="4707302005824653064">Penggunaan dan sejarah boleh dikaji semula oleh (<ph name="CUSTODIAN_EMAIL" />) pengurus pada chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + sijil pengguna</translation>
 <translation id="4708794300267213770">Tunjukkan kunci skrin apabila bangun tidur</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, Carian <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Masukkan PIN untuk kunci keselamatan anda. Jika anda tidak tahu nombor PIN, anda perlu menetapkan semula kunci keselamatan itu.</translation>
 <translation id="5139955368427980650">&amp;Buka</translation>
+<translation id="5142793792982256885">Kelajuan penatalan pad sentuh</translation>
 <translation id="5142961317498132443">Pengesahan</translation>
 <translation id="5143374789336132547">Sambungan "<ph name="EXTENSION_NAME" />" telah menukar halaman yang ditunjukkan apabila anda mengklik butang Laman Utama.</translation>
 <translation id="5143712164865402236">Memasuki Skrin Penuh</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Kuning</translation>
 <translation id="5906655207909574370">Hampir terkini! Mulakan semula peranti anda untuk menyelesaikan kemas kini.</translation>
 <translation id="5906732635754427568">Data yang berkaitan dengan apl ini akan dialih keluar daripada peranti ini.</translation>
+<translation id="5908695239556627796">Kelajuan penatalan tetikus</translation>
 <translation id="5908769186679515905">Sekat tapak daripada menjalankan Flash</translation>
 <translation id="5910363049092958439">Si&amp;mpan Imej Sebagai...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> di luar talian</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" />  Sistem akan mengebut semula semasa proses ini.</translation>
 <translation id="7828731929332799387">Tindakan ini akan memadam semua kuki dan data tapak yang tersedia dalam konteks pihak ketiga. Anda ingin teruskan?</translation>
 <translation id="7829298379596169484">Mengakses input audio</translation>
+<translation id="7829877209233347340">Minta ibu atau bapa log masuk untuk memberikan kebenaran bagi penambahan akaun institusi pengajian</translation>
 <translation id="7830594666202422257">Sambungkan ke Linux</translation>
 <translation id="7831491651892296503">Ralat mengkonfigurasi rangkaian</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5846,6 +5854,7 @@
 <translation id="8808686172382650546">Kucing</translation>
 <translation id="8808744862003883508">Pada halaman ini, anda dapat melihat semua sambungan yang dipasang pada Chrome.</translation>
 <translation id="8809147117840417135">Hijau kebiruan cerah</translation>
+<translation id="8812593354822910461">Kosongkan data semakan imbas (<ph name="URL" />) juga, yang akan melog anda keluar daripada <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Tidak dapat mengelog masuk ke <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">helai kertas</translation>
 <translation id="8813872945700551674">Sila minta ibu/bapa meluluskan "<ph name="EXTENSION_NAME" />"</translation>
@@ -6135,6 +6144,7 @@
 <translation id="9203398526606335860">&amp;Dayakan pemprofilan</translation>
 <translation id="9203904171912129171">Pilih peranti</translation>
 <translation id="9203962528777363226">Pentadbir peranti ini telah melumpuhkan pengguna baharu daripada ditambah</translation>
+<translation id="9209689095351280025">Tapak tidak dapat menggunakan kuki untuk menjejaki anda merentas web</translation>
 <translation id="9211177926627870898">Kemas kini diperlukan</translation>
 <translation id="9214520840402538427">Alamak! Pemulaan sifat masa pemasangan telah tamat masa. Sila hubungi wakil sokongan anda.</translation>
 <translation id="9214695392875603905">Kek cawan</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index 68245676..c8a843d 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">အာပ်လုဒ် လုပ်ရန်</translation>
 <translation id="1244265436519979884">Linux ပြန်ယူခြင်းကို လောလောဆယ် လုပ်ဆောင်နေသည်</translation>
 <translation id="1244303850296295656">အိတ်စတန်းရှင်း မှားယွင်းမှု</translation>
+<translation id="1246158006305844142">သင်၏ Google အကောင့်ဖြင့် လက်မှတ်ထိုးဝင်ထား​သော Chrome OS စက်အားလုံးတွင် သင့်အက်ပ်နှင့် ဆက်တင်များကို စင့်ခ်လုပ်ပါမည်။ ဘရောင်ဇာစင့်ခ်လုပ်ခြင်း ရွေးစရာများအတွက် <ph name="LINK_BEGIN" />Chrome ဆက်တင်များ<ph name="LINK_END" /> သို့သွားပါ။</translation>
 <translation id="1246905108078336582">ကလစ်ဘုတ်မှ အကြံပြုချက်ကို ဖယ်ရှားလိုပါသလား။</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> ရပ်ဆိုင်းသွားသဖြင့် ၎င်းကို ပိတ်ထားသည်</translation>
 <translation id="1251366534849411931">အဖွင့် တွန့်ကွင်းတစ်ခု လိုနေသည်- <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">မလိုပါ</translation>
 <translation id="1525740877599838384">တည်နေရာ သိရှိနိုင်ရန် Wi-Fi ကိုသာ အသုံးပြုပါ</translation>
 <translation id="152629053603783244">Linux ကို ပြန်လည်စတင်ရန်</translation>
+<translation id="1526335046150927198">တာ့ချ်ပက်ရွှေ့သည့် အရှိန်မြှင့်စနစ် ဖွင့်ရန်</translation>
 <translation id="1526560967942511387">ခေါင်းစဉ်မဲ့ စာတမ်း</translation>
 <translation id="1529891865407786369">ပါဝါ ရင်းမြစ်</translation>
 <translation id="1530838837447122178">မောက်စ်နှင့် တာ့ချ်ပဲဒ်ကိရိယာဆက်တင်များကို ဖွင့်ပါ</translation>
@@ -1314,6 +1316,7 @@
 <translation id="2725200716980197196">ကွန်ရက်ချိတ်ဆက်မှု ပြန်လည်သိုလှောင်ပြီး</translation>
 <translation id="2727633948226935816">ထပ်ပြီးသတိမပေးပါနှင့်</translation>
 <translation id="2727712005121231835">မူရင်းဆိုဒ်</translation>
+<translation id="2729314457178420145">ဖွင့်ကြည့်ထားသည့် မှတ်တမ်းဒေတာ (<ph name="URL" />) ကိုလည်း ရှင်းထုတ်မည်ဖြစ်ပြီး Google.com မှ ထွက်သွားပါမည်။ <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Linux အက်ပ်နှင့် ဖိုင်များကို အရန်သိမ်းနေသည်</translation>
 <translation id="273093730430620027">ဒီစာမျက်နှာသည် သင်၏ ကင်မရာကို ရယူသုံးနေသည်။</translation>
 <translation id="2731392572903530958">ပိတ်ထား ဝင်ဒိုးကို ပြန်&amp;ဖွင့်ရန်</translation>
@@ -2165,6 +2168,7 @@
 <translation id="3838486795898716504">နောက်ထပ် <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">ကွတ်ကီးများနှင့် အခြားဆိုက်နှင့်ပလက်ဂင်ဒေတာ</translation>
 <translation id="383891835335927981">မည်သည့်ဝဘ်ဆိုက်ကိုမျှ ဇူးမ် ချဲ့ခြင်း သို့မဟုတ် ချုံ့ခြင်း ပြုလုပ်မထားပါ</translation>
+<translation id="3839509547554145593">မောက်စ်လှိမ့်သည့် အရှိန်မြှင့်စနစ် ဖွင့်ရန်</translation>
 <translation id="3839516600093027468">ကလစ်ဘုတ်အား ကြည့်ရှုခွင့်ကို <ph name="HOST" /> အတွက် အမြဲပိတ်ရန်</translation>
 <translation id="3841964634449506551">စကားဝှက် မမှန်ကန်ပါ</translation>
 <translation id="3842552989725514455">Serif ဖောင့်</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">ကက်ရှ်လုပ်ထားသည့် ပုံများနှင့် ဖိုင်များ</translation>
 <translation id="4699357559218762027">(အလိုအလျောက်-စရန်)</translation>
 <translation id="470074695271471509">အပြီးသတ်ရန် အကောင့်ထွက်မလား။</translation>
+<translation id="4701025263201366865">မိဘ လက်မှတ်ထိုး ဝင်ရန်</translation>
 <translation id="4707302005824653064">သုံးစွဲမှု နှင့် မှတ်တမ်းကို (<ph name="CUSTODIAN_EMAIL" />) chrome.com ထဲက မန်နေဂျာ ဆန်းစစ်ကြည့်နိုင်သည်။</translation>
 <translation id="4707579418881001319">L2TP/IPsec + အသုံးပြုသူ လက်မှတ်</translation>
 <translation id="4708794300267213770">မျက်နှာပြင်ကို ပိတ်ထားရာမှ ဖွင့်လိုက်သည့်အခါ လော့ခ်မျက်နှာပြင်ကို ပြပါ</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />၊ <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Search</translation>
 <translation id="5139823398361067371">သင်၏လုံခြုံရေးကီးအတွက် ပင်နံပါတ် ထည့်ပါ။ ပင်နံပါတ်မသိပါက လုံခြုံရေးကီးကို ပြင်ဆင်သတ်မှတ်ရပါမည်။</translation>
 <translation id="5139955368427980650">&amp;ဖွင့်</translation>
+<translation id="5142793792982256885">တာ့ချ်ပက်ရွှေ့သည့် မြန်နှုန်း</translation>
 <translation id="5142961317498132443">အထောက်အထားစိစစ်မှု</translation>
 <translation id="5143374789336132547">သင်မူလစာမျက်နှာခလုတ်ကို နှိပ်လျှင် ပြမည့် စာမျက်နှာပြမည်အား ဤ  "<ph name="EXTENSION_NAME" />" အိတ်စတန်းရှင်းမှ ပြောင်းလဲပြီး ဖြစ်၏။</translation>
 <translation id="5143712164865402236">မျက်နှာပြင် အပြည့်ကို ဝင်ရန်</translation>
@@ -3645,6 +3651,7 @@
 <translation id="5901630391730855834">အၐါရောင်</translation>
 <translation id="5906655207909574370">အပ်ဒိတ်ပြီးရန် အနည်းငယ်သာလိုပါသည်။ အပ်ဒိတ်လုပ်ခြင်းကို အဆုံးသတ်ရန် သင့်စက်ပစ္စည်းကို ပြန်ဖွင့်ပါ။</translation>
 <translation id="5906732635754427568">ဤအက်ပ်နှင့်ဆက်စပ်သည့် ဒေတာကို ဤစက်ပစ္စည်းထဲမှ ဖယ်ရှားပါမည်။</translation>
+<translation id="5908695239556627796">မောက်စ်လှိမ့်သည့် မြန်နှုန်း</translation>
 <translation id="5908769186679515905">ဆိုက်များအား Flash ကို ဖွင့်ခြင်းမှ ပိတ်ဆို့ပါ</translation>
 <translation id="5910363049092958439">ပုံ&amp;ကို အဖြစ် သိမ်းရန်...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> က အော့ဖ်လိုင်းဖြစ်နေသည်</translation>
@@ -5089,6 +5096,7 @@
     <ph name="BEGIN_BOLD" />မှတ်ချက်-<ph name="END_BOLD" />  လုပ်ငန်းစဉ်အတွင်း စနစ် ပြန်လည်စတင်ပါမည်။</translation>
 <translation id="7828731929332799387">၎င်းက ပြင်ပအခြေအနေများတွင် ရရှိနိုင်သော ကွတ်ကီးနှင့် ဝဘ်ဆိုက်ဒေတာအားလုံးကို ဖျက်လိုက်ပါမည်။ ရှေ့ဆက်လိုသလား။</translation>
 <translation id="7829298379596169484">အသံ ထည့်သွင်းမှုကို ရယူနေ</translation>
+<translation id="7829877209233347340">ကျောင်းအကောင့်ထည့်ရန်အတွက် ခွင့်ပြုချက်ပေးရန် မိဘကို လက်မှတ်ထိုးဝင်ခိုင်းပါ</translation>
 <translation id="7830594666202422257">Linux သို့ ချိတ်ဆက်ရန်</translation>
 <translation id="7831491651892296503">ကွန်ရက်စီစဉ်သတ်မှတ်ရာတွင် အမှားအယွင်းရှိပါသည်</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /><ph name="EMOJI_MUTING" /></translation>
@@ -5842,6 +5850,7 @@
 <translation id="8808686172382650546">ကြောင်</translation>
 <translation id="8808744862003883508">ဤစာမျက်နှာတွင် Chrome အတွင်း ထည့်သွင်းထားသည့် နောက်ဆက်တွဲများအားလုံးကို မြင်နိုင်သည်။</translation>
 <translation id="8809147117840417135">စိမ်းပြာဖျော့</translation>
+<translation id="8812593354822910461">ဖွင့်ကြည့်ထားသည့် မှတ်တမ်းဒေတာ (<ph name="URL" />) ကိုလည်း ရှင်းထုတ်မည်ဖြစ်ပြီး <ph name="DOMAIN" /> မှ ထွက်သွားပါမည်။ <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039"><ph name="USERNAME" /> သို့ လက်မှတ်ထိုးဝင်၍ မရပါ</translation>
 <translation id="8813811964357448561">စက္ကူ စာရွက်</translation>
 <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />" အတွက် မိဘ အတည်ပြုချက် ရယူပါ</translation>
@@ -6131,6 +6140,7 @@
 <translation id="9203398526606335860">&amp;ပရိုဖိုင်ကြည့်မှု ဖွင့်ထား</translation>
 <translation id="9203904171912129171">စက်ပစ္စည်းတစ်ခု ရွေးချယ်ပါ</translation>
 <translation id="9203962528777363226">အသုံးပြုသူများ ထပ်ပေါင်းထည့်ရန် ဤစက်ပစ္စည်း ကြီးကြပ်သူမှ ပိတ်ထားပါသည်</translation>
+<translation id="9209689095351280025">ဝဘ်တစ်လျှောက် သင့်အားခြေရာခံသည့် ကွတ်ကီးများကို ဝဘ်ဆိုက်များက အသုံးမပြုနိုင်ပါ</translation>
 <translation id="9211177926627870898">အပ်ဒိတ်လုပ်ရန် လိုပါသည်</translation>
 <translation id="9214520840402538427">အူးပ်စ်!  တပ်ဆင်ရေး-အချိန် အချင်းလက္ခဏာများ အတွက် သတ်မှတ်ချိန် ကုန်သွားပါပြီ။ ကျေးဇူးပြုပြီး သင့်ကို ကူညီပေးသည့် ကိုယ်စားလှယ်ကို ဆက်သွယ်ပါ။</translation>
 <translation id="9214695392875603905">ကြက်ဥမုန့်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 67c14c9..eeafca6 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -1455,7 +1455,7 @@
 <translation id="2903457445916429186">चयन गरिएका वस्तुहरू खोल्नुहोस्</translation>
 <translation id="2903882649406874750"><ph name="HOST" /> लाई सेन्सरहरूमाथि पहुँच राख्न दिनबाट सधै रोक्नुहोस्‌</translation>
 <translation id="2904456025988372123">कुनै साइटले पहिलो फाइल पछि फाइलहरू स्वतः डाउनलोड गर्ने प्रयास गर्दा सोध्ने</translation>
-<translation id="2905789169763945526">इन्कोग्निटो मोडमा इन्टरनेट चलाउँदा साइटहरूले तपाईंका गतिविधिअनुसार विज्ञापन देखाउने जस्ता प्रयोजनहरूका लागि विभिन्न साइटहरूमा तपाईंको ब्राउजिङसम्बन्धी गतिविधि हेर्न तपाईंका कुकीहरूको प्रयोग गर्न सक्दैनन्। कतिपय साइटहरू राम्ररी नचल्न सक्छन्।</translation>
+<translation id="2905789169763945526">इन्कोग्निटो मोडमा ब्राउज गर्दा साइटहरूले तपाईंका गतिविधिअनुसार विज्ञापन देखाउने जस्ता प्रयोजनहरूका लागि विभिन्न साइटहरूमा तपाईंको ब्राउजिङसम्बन्धी गतिविधि हेर्न तपाईंका कुकीहरूको प्रयोग गर्न सक्दैनन्। कतिपय साइटहरू राम्ररी नचल्न सक्छन्।</translation>
 <translation id="2907619724991574506">सुरुवात युआरएलहरू</translation>
 <translation id="2907798539022650680">'<ph name="NAME" />'मा जडान गर्न सकिएन
         <ph name="DETAILS" />
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 278b4fb..b038125 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Uploaden</translation>
 <translation id="1244265436519979884">Linux-herstel wordt momenteel uitgevoerd</translation>
 <translation id="1244303850296295656">Fout met extensie</translation>
+<translation id="1246158006305844142">Je apps en instellingen worden gesynchroniseerd voor alle Chrome OS-apparaten waarop je bent ingelogd met je Google-account. Ga naar de <ph name="LINK_BEGIN" />Chrome-instellingen<ph name="LINK_END" /> voor opties voor browsersynchronisatie.</translation>
 <translation id="1246905108078336582">Suggestie verwijderen van klembord?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> is geblokkeerd omdat deze is verouderd</translation>
 <translation id="1251366534849411931">Verwachte openingsaccolade <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Nee, bedankt</translation>
 <translation id="1525740877599838384">Alleen wifi gebruiken om de locatie te bepalen</translation>
 <translation id="152629053603783244">Linux opnieuw opstarten</translation>
+<translation id="1526335046150927198">Scrollversnelling voor touchpad inschakelen</translation>
 <translation id="1526560967942511387">Naamloos document</translation>
 <translation id="1529891865407786369">Voedingsbron</translation>
 <translation id="1530838837447122178">Muis- en touchpadinstellingen van apparaat openen</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Netwerkverbinding hersteld</translation>
 <translation id="2727633948226935816">Niet opnieuw herinneren</translation>
 <translation id="2727712005121231835">Normaal</translation>
+<translation id="2729314457178420145">Ook browsergegevens wissen (<ph name="URL" />). Als je dit doet, kun je worden uitgelogd bij Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Een back-up maken van Linux-apps en -bestanden</translation>
 <translation id="273093730430620027">Deze pagina gebruikt je camera.</translation>
 <translation id="2731392572903530958">G&amp;esloten venster opnieuw openen</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Meer <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Cookies en andere site- en plug-ingegevens</translation>
 <translation id="383891835335927981">Er zijn geen sites in- of uitgezoomd</translation>
+<translation id="3839509547554145593">Scrollversnelling voor muis inschakelen</translation>
 <translation id="3839516600093027468"><ph name="HOST" /> altijd blokkeren voor het klembord</translation>
 <translation id="3841964634449506551">Wachtwoord ongeldig</translation>
 <translation id="3842552989725514455">Serif-lettertype</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Gecachte afbeeldingen en bestanden</translation>
 <translation id="4699357559218762027">(automatisch gestart)</translation>
 <translation id="470074695271471509">Uitloggen om te voltooien?</translation>
+<translation id="4701025263201366865">Inloggen voor ouders</translation>
 <translation id="4707302005824653064">Gebruik en geschiedenis kunnen worden gecontroleerd door de beheerder (<ph name="CUSTODIAN_EMAIL" />) op chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + gebruikerscertificaat</translation>
 <translation id="4708794300267213770">Het vergrendelingsscherm weergeven bij activering vanuit de slaapstand</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, zoeken in <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Geef de pincode van je beveiligingssleutel op. Als je de pincode niet weet, moet je de beveiligingssleutel resetten.</translation>
 <translation id="5139955368427980650">&amp;Openen</translation>
+<translation id="5142793792982256885">Scrollsnelheid voor touchpad</translation>
 <translation id="5142961317498132443">Verificatie</translation>
 <translation id="5143374789336132547">De extensie '<ph name="EXTENSION_NAME" />' heeft gewijzigd welke pagina wordt weergegeven wanneer je op de knop 'Homepage' klikt.</translation>
 <translation id="5143712164865402236">Volledig scherm openen</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Geel</translation>
 <translation id="5906655207909574370">Updaten bijna voltooid. Start je apparaat opnieuw op om de update te voltooien.</translation>
 <translation id="5906732635754427568">Gegevens die zijn gekoppeld aan deze app, worden verwijderd van dit apparaat.</translation>
+<translation id="5908695239556627796">Scrollsnelheid voor muis</translation>
 <translation id="5908769186679515905">Niet toestaan dat sites Flash uitvoeren</translation>
 <translation id="5910363049092958439">Af&amp;beelding opslaan als...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> is offline</translation>
@@ -5090,6 +5097,7 @@
     <ph name="BEGIN_BOLD" />Opmerking:<ph name="END_BOLD" /> Het systeem wordt opnieuw opgestart tijdens het proces.</translation>
 <translation id="7828731929332799387">Dit verwijdert alle cookies en sitegegevens van derden. Wil je doorgaan?</translation>
 <translation id="7829298379596169484">Audio-invoer openen</translation>
+<translation id="7829877209233347340">Vraag een ouder om in te loggen en toe te staan dat je een schoolaccount toevoegt</translation>
 <translation id="7830594666202422257">Verbinden met Linux</translation>
 <translation id="7831491651892296503">Fout bij configureren van netwerk</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">Kat</translation>
 <translation id="8808744862003883508">Op deze pagina kun je alle extensies zien die in Chrome zijn geïnstalleerd.</translation>
 <translation id="8809147117840417135">Lichtblauwgroen</translation>
+<translation id="8812593354822910461">Ook browsergegevens wissen (<ph name="URL" />). Als je dit doet, word je uitgelogd bij <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Kan niet inloggen bij <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">vel papier</translation>
 <translation id="8813872945700551674">Vraag een ouder om <ph name="EXTENSION_NAME" /> goed te keuren</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">&amp;Profiling ingeschakeld</translation>
 <translation id="9203904171912129171">Een apparaat selecteren</translation>
 <translation id="9203962528777363226">De beheerder van dit apparaat heeft het toevoegen van nieuwe gebruikers uitgeschakeld</translation>
+<translation id="9209689095351280025">Sites kunnen geen cookies gebruiken die je volgen op internet</translation>
 <translation id="9211177926627870898">Update vereist</translation>
 <translation id="9214520840402538427">De initialisatie van de kenmerken van de installatietijd is verlopen. Neem contact op met je ondersteuningsmedewerker.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index e623f80..6fd25920 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Last opp</translation>
 <translation id="1244265436519979884">Linux-gjenoppretting pågår</translation>
 <translation id="1244303850296295656">Feil med utvidelse</translation>
+<translation id="1246158006305844142">Appene og innstillingene dine blir synkronisert på alle Chrome OS-enheter hvor du er logget på med Google-kontoen din. For alternativer for nettlesersynkronisering, gå til<ph name="LINK_BEGIN" />Chrome-innstillingene<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Vil du fjerne forslaget fra utklippstavlen?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> ble blokkert fordi det er avviklet</translation>
 <translation id="1251366534849411931">Forventet venstrestilt krøllparentes: <ph name="ERROR_LINE" /></translation>
@@ -388,6 +389,7 @@
 <translation id="1524563461097350801">Nei takk</translation>
 <translation id="1525740877599838384">Bruk bare Wi-Fi til å fastslå posisjonen</translation>
 <translation id="152629053603783244">Start Linux på nytt</translation>
+<translation id="1526335046150927198">Slå på rulleakselerering for styreflaten</translation>
 <translation id="1526560967942511387">Dokument uten tittel</translation>
 <translation id="1529891865407786369">Strømkilde</translation>
 <translation id="1530838837447122178">Åpne innstillingene for mus og styreflate</translation>
@@ -1310,6 +1312,7 @@
 <translation id="2725200716980197196">Nettverkstilkoblingen er gjenopprettet</translation>
 <translation id="2727633948226935816">Ikke minn meg på dette igjen</translation>
 <translation id="2727712005121231835">Faktisk størrelse</translation>
+<translation id="2729314457178420145">Slett også nettlesingsdata (<ph name="URL" />), noe som kan medføre at du blir logget av Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Sikkerhetskopierer Linux-apper og -filer</translation>
 <translation id="273093730430620027">Denne siden kan bruke kameraet ditt.</translation>
 <translation id="2731392572903530958">Å&amp;pne det lukkede vinduet igjen</translation>
@@ -2161,6 +2164,7 @@
 <translation id="3838486795898716504">Mer av <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Informasjonskapsler og andre nettsteds- og programtilleggsdata</translation>
 <translation id="383891835335927981">Det er ikke zoomet inn eller ut på noen nettsteder</translation>
+<translation id="3839509547554145593">Slå på rulleakselerering for musen</translation>
 <translation id="3839516600093027468">Blokkér alltid <ph name="HOST" /> fra å se utklippstavlen</translation>
 <translation id="3841964634449506551">Ugyldig passord</translation>
 <translation id="3842552989725514455">Med seriffer</translation>
@@ -2770,6 +2774,7 @@
 <translation id="4699172675775169585">Bufrede bilder og filer</translation>
 <translation id="4699357559218762027">(automatisk oppstart)</translation>
 <translation id="470074695271471509">Vil du logge av for å fullføre?</translation>
+<translation id="4701025263201366865">Pålogging av forelder</translation>
 <translation id="4707302005824653064">Administratoren (<ph name="CUSTODIAN_EMAIL" />) kan gå gjennom bruken og loggen på chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + brukersertifikat</translation>
 <translation id="4708794300267213770">Vis låseskjermen ved oppvåkning etter hvilemodus</translation>
@@ -3077,6 +3082,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" /> – <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Søk</translation>
 <translation id="5139823398361067371">Skriv inn PIN-koden for sikkerhetsnøkkelen din. Hvis du ikke kan PIN-koden, må du tilbakestille sikkerhetsnøkkelen.</translation>
 <translation id="5139955368427980650">&amp;Åpne</translation>
+<translation id="5142793792982256885">Rullehastighet for styreflaten</translation>
 <translation id="5142961317498132443">Autentisering</translation>
 <translation id="5143374789336132547">Utvidelsen «<ph name="EXTENSION_NAME" />» har endret hvilken side som vises når du klikker på Startside-knappen.</translation>
 <translation id="5143712164865402236">Gå til fullskjermmodus</translation>
@@ -3639,6 +3645,7 @@
 <translation id="5901630391730855834">Gul</translation>
 <translation id="5906655207909574370">Nå er oppdateringen snart ferdig! Start enheten på nytt for å fullføre oppdateringen.</translation>
 <translation id="5906732635754427568">Data som er tilknyttet denne appen, fjernes fra denne enheten.</translation>
+<translation id="5908695239556627796">Rullehastighet for musen</translation>
 <translation id="5908769186679515905">Blokkér nettsteder fra å kjøre Flash</translation>
 <translation id="5910363049092958439">Lagre &amp;bildet som</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> er uten nett</translation>
@@ -5086,6 +5093,7 @@
     <ph name="BEGIN_BOLD" />Merk:<ph name="END_BOLD" /> Systemet startes på nytt i løpet av prosessen.</translation>
 <translation id="7828731929332799387">Dette sletter alle informasjonskapsler og nettstedsdata som er tilgjengelige i tredjepartskontekster. Vil du fortsette?</translation>
 <translation id="7829298379596169484">Åpner lydinngang</translation>
+<translation id="7829877209233347340">Be en forelder om å logge på for å gi tillatelse til å legge til en skolekonto</translation>
 <translation id="7830594666202422257">Koble til Linux</translation>
 <translation id="7831491651892296503">En feil oppsto under konfigureringen av nettverket</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5840,6 +5848,7 @@
 <translation id="8808686172382650546">Katt</translation>
 <translation id="8808744862003883508">På denne siden kan du se alle utvidelsene som er installert i Chrome.</translation>
 <translation id="8809147117840417135">Lys blågrønn</translation>
+<translation id="8812593354822910461">Slett også nettlesingsdata (<ph name="URL" />), noe som medfører at du blir logget av <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Kan ikke logge på <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">ark</translation>
 <translation id="8813872945700551674">Få en forelder til å godkjenne «<ph name="EXTENSION_NAME" />»</translation>
@@ -6129,6 +6138,7 @@
 <translation id="9203398526606335860">&amp;Profilering aktivert</translation>
 <translation id="9203904171912129171">Velg enhet</translation>
 <translation id="9203962528777363226">Administratoren til denne enheten har deaktivert tillegging av nye brukere</translation>
+<translation id="9209689095351280025">Nettsteder kan ikke bruke informasjonskapsler som sporer deg overalt på nettet</translation>
 <translation id="9211177926627870898">Oppdatering kreves</translation>
 <translation id="9214520840402538427">Beklager. Oppstarten av attributtene for installasjonstid er tidsavbrutt. Ta kontakt med brukerstøtterepresentanten din.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 893e814..61a47e3d 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Prześlij</translation>
 <translation id="1244265436519979884">W tej chwili trwa przywracanie Linuksa</translation>
 <translation id="1244303850296295656">Błąd rozszerzenia</translation>
+<translation id="1246158006305844142">Po zalogowaniu się na konto Google Twoje aplikacje i ustawienia zsynchronizują się na wszystkich urządzeniach z Chrome OS. Opcje synchronizacji przeglądarek znajdziesz w <ph name="LINK_BEGIN" />ustawieniach Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Usunąć podpowiedź ze schowka?</translation>
 <translation id="1249643471736608405">Wtyczka <ph name="PLUGIN_NAME" /> została zablokowana, ponieważ jest wycofana</translation>
 <translation id="1251366534849411931">Oczekiwany otwierający nawias klamrowy: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Nie, dziękuję</translation>
 <translation id="1525740877599838384">Do określania lokalizacji używaj tylko Wi-Fi</translation>
 <translation id="152629053603783244">Uruchom ponownie Linuksa</translation>
+<translation id="1526335046150927198">Włącz szybkie działanie przewijania na touchpadzie</translation>
 <translation id="1526560967942511387">Dokument bez tytułu</translation>
 <translation id="1529891865407786369">Źródło zasilania</translation>
 <translation id="1530838837447122178">Otwórz ustawienia myszy i touchpada</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Łączność z siecią przywrócona</translation>
 <translation id="2727633948226935816">Nie przypominaj więcej</translation>
 <translation id="2727712005121231835">Rzeczywisty rozmiar</translation>
+<translation id="2729314457178420145">Wyczyść też dane przeglądania (<ph name="URL" />) – w rezultacie może dojść do wylogowania z Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Tworzę kopię zapasową aplikacji i plików Linuksa</translation>
 <translation id="273093730430620027">Ta strona ma dostęp do kamery.</translation>
 <translation id="2731392572903530958">Otwórz ponowni&amp;e zamknięte okno</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Więcej o <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Pliki cookie oraz inne dane witryn i wtyczek</translation>
 <translation id="383891835335927981">Żadna strona nie jest powiększana ani pomniejszana</translation>
+<translation id="3839509547554145593">Włącz szybkie działanie przewijania kółkiem myszy</translation>
 <translation id="3839516600093027468">Zawsze blokuj stronie <ph name="HOST" /> dostęp do schowka</translation>
 <translation id="3841964634449506551">Nieprawidłowe hasło</translation>
 <translation id="3842552989725514455">Czcionka szeryfowa</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Obrazy i pliki zapisane w pamięci podręcznej</translation>
 <translation id="4699357559218762027">(automatyczne uruchamianie)</translation>
 <translation id="470074695271471509">Czy chcesz się wylogować, by wprowadzić zmiany?</translation>
+<translation id="4701025263201366865">Logowanie rodzica</translation>
 <translation id="4707302005824653064">Działania i historię może sprawdzać menedżer (<ph name="CUSTODIAN_EMAIL" />) na chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + certyfikat użytkownika</translation>
 <translation id="4708794300267213770">Pokaż ekran blokady po wybudzeniu</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, szukaj w: <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Wpisz kod PIN klucza bezpieczeństwa. Jeśli go nie znasz, musisz zresetować klucz.</translation>
 <translation id="5139955368427980650">&amp;Otwórz</translation>
+<translation id="5142793792982256885">Szybkość przewijania na touchpadzie</translation>
 <translation id="5142961317498132443">Uwierzytelnianie</translation>
 <translation id="5143374789336132547">Rozszerzenie „<ph name="EXTENSION_NAME" />” ustawiło inną stronę wyświetlaną po kliknięciu przycisku strony głównej.</translation>
 <translation id="5143712164865402236">Przejdź do pełnego ekranu</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Żółty</translation>
 <translation id="5906655207909574370">Już prawie gotowe. Uruchom ponownie urządzenie, by zakończyć aktualizację.</translation>
 <translation id="5906732635754427568">Dane powiązane z tą aplikacją zostaną usunięte z urządzenia.</translation>
+<translation id="5908695239556627796">Szybkość przewijania kółkiem myszy</translation>
 <translation id="5908769186679515905">Zablokuj uruchamianie Flasha na stronach</translation>
 <translation id="5910363049092958439">Zapisz gra&amp;fikę jako...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> jest offline</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Uwaga:<ph name="END_BOLD" /> podczas tego procesu system uruchomi się ponownie.</translation>
 <translation id="7828731929332799387">Spowoduje to usunięcie wszystkich plików cookie i danych witryn dostępnych w kontekście witryn innych firm. Czy chcesz kontynuować?</translation>
 <translation id="7829298379596169484">Otwieram wejście audio</translation>
+<translation id="7829877209233347340">Poproś rodzica, by się zalogował i zezwolił na utworzenie konta szkolnego.</translation>
 <translation id="7830594666202422257">Podłącz do Linuksa</translation>
 <translation id="7831491651892296503">Podczas konfigurowania sieci wystąpił błąd</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">Kot</translation>
 <translation id="8808744862003883508">Na tej stronie możesz zobaczyć wszystkie rozszerzenia zainstalowane w Chrome.</translation>
 <translation id="8809147117840417135">Jasny morski</translation>
+<translation id="8812593354822910461">Wyczyść też dane przeglądania (<ph name="URL" />) – w rezultacie nastąpi wylogowanie z <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Problem z logowaniem na konto <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">kartka</translation>
 <translation id="8813872945700551674">Poproś rodzica o zatwierdzenie rozszerzenia „<ph name="EXTENSION_NAME" />”</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">&amp;Profilowanie włączone</translation>
 <translation id="9203904171912129171">Wybierz urządzenie</translation>
 <translation id="9203962528777363226">Administrator tego urządzenia wyłączył możliwość dodawania nowych użytkowników</translation>
+<translation id="9209689095351280025">Strony nie mogą używać plików cookie śledzących, co robisz w sieci.</translation>
 <translation id="9211177926627870898">Wymagana aktualizacja</translation>
 <translation id="9214520840402538427">Upłynął limit czasu inicjowania atrybutów instalacyjnych. Skontaktuj się z przedstawicielem obsługi klienta.</translation>
 <translation id="9214695392875603905">Babeczka</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index b9c4be6..853b5e2 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Fazer upload</translation>
 <translation id="1244265436519979884">A restauração do Linux está em andamento</translation>
 <translation id="1244303850296295656">Erro na extensão</translation>
+<translation id="1246158006305844142">Seus apps e suas configurações serão sincronizados por todos os dispositivos Chrome OS conectados à sua Conta do Google. Para ver as opções de sincronização do navegador, acesse as <ph name="LINK_BEGIN" />configurações do Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Remover sugestão da área de transferência?</translation>
 <translation id="1249643471736608405">O plug-in <ph name="PLUGIN_NAME" /> foi bloqueado porque está obsoleto</translation>
 <translation id="1251366534849411931">Chave de abertura esperada: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Não, obrigado</translation>
 <translation id="1525740877599838384">Usar apenas o Wi-Fi para determinar a localização</translation>
 <translation id="152629053603783244">Reiniciar Linux</translation>
+<translation id="1526335046150927198">Ativar aceleração de rolagem do touchpad</translation>
 <translation id="1526560967942511387">Documento sem título</translation>
 <translation id="1529891865407786369">Fonte de energia</translation>
 <translation id="1530838837447122178">Abrir configurações do mouse e touchpad do dispositivo</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Conectividade de rede restaurada</translation>
 <translation id="2727633948226935816">Não me lembrar novamente</translation>
 <translation id="2727712005121231835">Tamanho real</translation>
+<translation id="2729314457178420145">Limpar também os dados de navegação (<ph name="URL" />). Sua conta poderá ser desconectada de google.com.br. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Fazendo backup dos arquivos e apps do Linux</translation>
 <translation id="273093730430620027">Esta página está acessando sua câmera.</translation>
 <translation id="2731392572903530958">R&amp;eabrir janela fechada</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Mais <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Cookies e outros dados de site e plug-in</translation>
 <translation id="383891835335927981">Nenhum site teve o zoom aumentado ou diminuído</translation>
+<translation id="3839509547554145593">Ativar aceleração de rolagem do mouse</translation>
 <translation id="3839516600093027468">Sempre impedir que <ph name="HOST" /> veja a área de transferência</translation>
 <translation id="3841964634449506551">Senha inválida</translation>
 <translation id="3842552989725514455">Fonte Serif</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Imagens e arquivos armazenados em cache</translation>
 <translation id="4699357559218762027">(aberto automaticamente)</translation>
 <translation id="470074695271471509">Sair para concluir?</translation>
+<translation id="4701025263201366865">Login do pai/mãe</translation>
 <translation id="4707302005824653064">O uso e o histórico podem ser analisados pelo administrador (<ph name="CUSTODIAN_EMAIL" />) no site chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + certificado de usuário</translation>
 <translation id="4708794300267213770">Mostrar tela de bloqueio ao sair do modo de suspensão</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, pesquisa no <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Insira o PIN da sua chave de segurança. Se não souber o PIN, redefina a chave de segurança.</translation>
 <translation id="5139955368427980650">&amp;Abrir</translation>
+<translation id="5142793792982256885">Velocidade de rolagem do touchpad</translation>
 <translation id="5142961317498132443">Autenticação</translation>
 <translation id="5143374789336132547">A extensão "<ph name="EXTENSION_NAME" />" alterou a página que é exibida quando você clica no botão "Página inicial".</translation>
 <translation id="5143712164865402236">Tela cheia</translation>
@@ -3645,6 +3651,7 @@
 <translation id="5901630391730855834">Amarelo</translation>
 <translation id="5906655207909574370">Atualização quase concluída. Reinicie o dispositivo para concluí-la.</translation>
 <translation id="5906732635754427568">Os dados associados a este app serão removidos deste dispositivo.</translation>
+<translation id="5908695239556627796">Velocidade de rolagem do mouse</translation>
 <translation id="5908769186679515905">Impedir que sites executem Flash</translation>
 <translation id="5910363049092958439">Sal&amp;var imagem como...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> está off-line</translation>
@@ -5093,6 +5100,7 @@
     <ph name="BEGIN_BOLD" />Observação:<ph name="END_BOLD" /> o sistema será reinicializado durante o processo.</translation>
 <translation id="7828731929332799387">Essa ação excluirá todos os cookies e dados de sites disponíveis em contextos de terceiros. Quer continuar?</translation>
 <translation id="7829298379596169484">Acessando entrada de áudio</translation>
+<translation id="7829877209233347340">Peça a um pai/mãe para se conectar e permitir a adição de uma conta escolar</translation>
 <translation id="7830594666202422257">Conectar ao Linux</translation>
 <translation id="7831491651892296503">Erro ao configurar a rede</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5847,6 +5855,7 @@
 <translation id="8808686172382650546">Gato</translation>
 <translation id="8808744862003883508">Nesta página, é possível ver todas as extensões instaladas no Chrome.</translation>
 <translation id="8809147117840417135">Verde-água</translation>
+<translation id="8812593354822910461">Limpar também os dados de navegação (<ph name="URL" />). Sua conta poderá ser desconectada de <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Não é possível fazer login em <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">folha de papel</translation>
 <translation id="8813872945700551674">Peça para seu pai/mãe aprovar a extensão <ph name="EXTENSION_NAME" /></translation>
@@ -6136,6 +6145,7 @@
 <translation id="9203398526606335860">&amp;Criação de perfil ativada</translation>
 <translation id="9203904171912129171">Selecione um dispositivo</translation>
 <translation id="9203962528777363226">O administrador deste dispositivo desativou a adição de novos usuários</translation>
+<translation id="9209689095351280025">Os sites não podem usar cookies que rastreiem você pela Web</translation>
 <translation id="9211177926627870898">Atualização necessária</translation>
 <translation id="9214520840402538427">Ops! A inicialização dos atributos de tempo de instalação ultrapassou o tempo limite. Entre em contato com o representante de suporte.</translation>
 <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 27c094a..dfdeac5 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Încărcați</translation>
 <translation id="1244265436519979884">O restabilire Linux este în desfășurare</translation>
 <translation id="1244303850296295656">Eroare privind extensiile</translation>
+<translation id="1246158006305844142">Aplicațiile și setările se vor sincroniza pe toate dispozitivele cu sistemul de operare Chrome pe care te-ai conectat cu contul Google. Pentru opțiunile de sincronizare a browserului, accesează <ph name="LINK_BEGIN" />Setările Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Elimini sugestia din clipboard?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> a fost blocat deoarece este învechit</translation>
 <translation id="1251366534849411931">Se așteaptă o acoladă de deschidere: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Nu, mulțumesc</translation>
 <translation id="1525740877599838384">Folosește numai rețeaua Wi-Fi pentru a detecta locația</translation>
 <translation id="152629053603783244">Repornește Linux</translation>
+<translation id="1526335046150927198">Activează accelerarea derulării touchpadului</translation>
 <translation id="1526560967942511387">Document fără titlu</translation>
 <translation id="1529891865407786369">Sursă de alimentare</translation>
 <translation id="1530838837447122178">Deschide setările dispozitivului privind mouse-ul și touchpadul</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Conexiunea la rețea a fost restabilită</translation>
 <translation id="2727633948226935816">Nu-mi mai reaminti</translation>
 <translation id="2727712005121231835">Dimensiunea actuală</translation>
+<translation id="2729314457178420145">Șterge și datele de navigare (<ph name="URL" />), acțiune care te poate deconecta de la Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Se face backup pentru aplicațiile și fișierele Linux</translation>
 <translation id="273093730430620027">Această pagină vă accesează camera.</translation>
 <translation id="2731392572903530958">R&amp;edeschide fereastra închisă</translation>
@@ -1878,7 +1881,7 @@
 <translation id="3496213124478423963">Micșorează</translation>
 <translation id="3497560059572256875">Trimite doodle-ul</translation>
 <translation id="3498215018399854026">Momentan, nu ți-am putut contacta părintele. Încearcă din nou.</translation>
-<translation id="3500417806337761827">Eroare la conectarea spațiului comun de stocare. Au fost conectate deja prea multe spații comune de stocare SMB.</translation>
+<translation id="3500417806337761827">Eroare la montarea dispozitivului de stocare în rețea. Au fost conectate deja prea multe dispozitive de stocare în rețea SMB.</translation>
 <translation id="3505030558724226696">Revocă accesul la dispozitiv</translation>
 <translation id="3507421388498836150">Permisiuni actuale pentru „<ph name="EXTENSION_NAME" />”</translation>
 <translation id="3507888235492474624">Caută din nou dispozitive Bluetooth</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Mai multe <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Cookie-urile și alte date privind site-ul și pluginul</translation>
 <translation id="383891835335927981">Nu s-a mărit sau micșorat niciun site</translation>
+<translation id="3839509547554145593">Activează accelerarea derulării mouse-ului</translation>
 <translation id="3839516600093027468">Blochează întotdeauna accesul <ph name="HOST" /> la clipboard</translation>
 <translation id="3841964634449506551">Parolă nevalidă</translation>
 <translation id="3842552989725514455">Font Serif</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Imaginile și fișierele memorate în cache</translation>
 <translation id="4699357559218762027">(lansată automat)</translation>
 <translation id="470074695271471509">Te deconectezi pentru a finaliza?</translation>
+<translation id="4701025263201366865">Conectarea unui părinte</translation>
 <translation id="4707302005824653064">Administratorul (<ph name="CUSTODIAN_EMAIL" />) poate să examineze datele privind utilizarea și istoricul pe chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + certificat de utilizator</translation>
 <translation id="4708794300267213770">Afișează blocarea ecranului când dispozitivul este activat</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, căutare în <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Introdu codul PIN pentru cheia de securitate. Dacă nu știi codul PIN, va trebui să resetezi cheia de securitate.</translation>
 <translation id="5139955368427980650">&amp;Deschide</translation>
+<translation id="5142793792982256885">Viteza de derulare a touchpadului</translation>
 <translation id="5142961317498132443">Autentificare</translation>
 <translation id="5143374789336132547">Extensia „<ph name="EXTENSION_NAME" />” a modificat ce pagină se afișează când dai clic pe butonul Pagina principală.</translation>
 <translation id="5143712164865402236">Deschide în ecran complet</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Galben</translation>
 <translation id="5906655207909574370">Aproape actualizat! Repornește dispozitivul pentru a finaliza actualizarea.</translation>
 <translation id="5906732635754427568">Datele asociate acestei aplicații vor fi eliminate de pe dispozitiv.</translation>
+<translation id="5908695239556627796">Viteza de derulare a mouse-ului</translation>
 <translation id="5908769186679515905">Nu permite site-urilor să ruleze Flash</translation>
 <translation id="5910363049092958439">Sal&amp;vează imaginea ca...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> este offline</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Notă:<ph name="END_BOLD" /> sistemul va reporni în timpul acestui proces.</translation>
 <translation id="7828731929332799387">Vor fi șterse toate cookie-urile și datele privind site-urile disponibile în contexte terță parte. Dorești să continui?</translation>
 <translation id="7829298379596169484">Se accesează intrarea audio</translation>
+<translation id="7829877209233347340">Roagă-ți părintele să se conecteze pentru a-ți acorda permisiunea să adaugi un cont de la școală</translation>
 <translation id="7830594666202422257">Conectează-te la Linux</translation>
 <translation id="7831491651892296503">Eroare la configurarea rețelei</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">Pisică</translation>
 <translation id="8808744862003883508">În această pagină poți vedea toate extensiile instalate în Chrome.</translation>
 <translation id="8809147117840417135">Turcoaz deschis</translation>
+<translation id="8812593354822910461">Șterge și datele de navigare (<ph name="URL" />), acțiune care te poate deconecta de la <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Nu te poți conecta folosind <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">foaie de hârtie</translation>
 <translation id="8813872945700551674">Cere-i unui părinte să aprobe „<ph name="EXTENSION_NAME" />”</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">&amp;Analizare activată</translation>
 <translation id="9203904171912129171">Selectează un dispozitiv</translation>
 <translation id="9203962528777363226">Administratorul acestui dispozitiv a dezactivat adăugarea de utilizatori noi</translation>
+<translation id="9209689095351280025">Site-urile nu pot folosi cookie-uri care te urmăresc pe web.</translation>
 <translation id="9211177926627870898">Actualizare necesară</translation>
 <translation id="9214520840402538427">Hopa! Inițializarea atributelor necesare în momentul instalării a expirat. Contactați reprezentantul dvs. de asistență.</translation>
 <translation id="9214695392875603905">Brioșă</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index ea55458..214fc41 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Nahrať</translation>
 <translation id="1244265436519979884">Prebieha obnovenie systému Linux</translation>
 <translation id="1244303850296295656">Chyba rozšírenia</translation>
+<translation id="1246158006305844142">Vaše aplikácie a nastavenia budú synchronizované vo všetkých zariadeniach Chrome OS, v ktorých ste sa prihlásili pomocou svojho účtu Google. Možnosti synchronizácie prehliadača nájdete v <ph name="LINK_BEGIN" />nastaveniach Chromu<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Chcete odstrániť návrh zo schránky?</translation>
 <translation id="1249643471736608405">Doplnok <ph name="PLUGIN_NAME" /> bol zablokovaný, pretože jeho podpora bola ukončená</translation>
 <translation id="1251366534849411931">Očakávaná úvodná zložená zátvorka: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Nie, ďakujem</translation>
 <translation id="1525740877599838384">Na zistenie polohy používať iba Wi-Fi</translation>
 <translation id="152629053603783244">Reštartovať Linux</translation>
+<translation id="1526335046150927198">Povoliť zrýchlenie pri posúvaní touchpadom</translation>
 <translation id="1526560967942511387">Dokument bez názvu</translation>
 <translation id="1529891865407786369">Zdroj napájania</translation>
 <translation id="1530838837447122178">Otvoriť nastavenia myši a touchpadu</translation>
@@ -1312,6 +1314,7 @@
 <translation id="2725200716980197196">Pripojenie k sieti bolo obnovené</translation>
 <translation id="2727633948226935816">Viac nepripomínať</translation>
 <translation id="2727712005121231835">Skutočná veľkosť</translation>
+<translation id="2729314457178420145">Vymazať tiež dáta prehliadania (<ph name="URL" />), po čom vás môže systém odhlásiť z domény Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Zálohovanie aplikácií a súborov systému Linux</translation>
 <translation id="273093730430620027">Táto stránka má prístup k vašej kamere.</translation>
 <translation id="2731392572903530958">Znova o&amp;tvoriť zatvorené okno</translation>
@@ -2163,6 +2166,7 @@
 <translation id="3838486795898716504">Ďalšie <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Súbory cookie a ďalšie dáta webov a doplnkov</translation>
 <translation id="383891835335927981">Žiadne weby neboli priblížené ani oddialené</translation>
+<translation id="3839509547554145593">Povoliť zrýchlenie pri posúvaní myšou</translation>
 <translation id="3839516600093027468">Webu <ph name="HOST" /> vždy blokovať zobrazenie schránky</translation>
 <translation id="3841964634449506551">Neplatné heslo</translation>
 <translation id="3842552989725514455">Pätkové písmo</translation>
@@ -2774,6 +2778,7 @@
 <translation id="4699172675775169585">Obrázky a súbory vo vyrovnávacej pamäti</translation>
 <translation id="4699357559218762027">(automaticky spustené)</translation>
 <translation id="470074695271471509">Odhlásiť sa a dokončiť?</translation>
+<translation id="4701025263201366865">Prihlásenie rodiča</translation>
 <translation id="4707302005824653064">Aktivitu a históriu môže skontrolovať správca (<ph name="CUSTODIAN_EMAIL" />) na adrese chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + certifikát používateľa</translation>
 <translation id="4708794300267213770">Pri prebúdzaní z režimu spánku spúšťať uzamknutú obrazovku</translation>
@@ -3081,6 +3086,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, vyhľadávanie vo vyhľadávači <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Zadajte kód PIN bezpečnostného kľúča Ak si ho nepamätáte, budete musieť bezpečnostný kľúč resetovať.</translation>
 <translation id="5139955368427980650">&amp;Otvoriť</translation>
+<translation id="5142793792982256885">Rýchlosť posúvania touchpadom</translation>
 <translation id="5142961317498132443">Overenie totožnosti</translation>
 <translation id="5143374789336132547">Rozšírenie „<ph name="EXTENSION_NAME" />“ zmenilo stránku, ktorá sa zobrazí po kliknutí na tlačidlo Domovská stránka.</translation>
 <translation id="5143712164865402236">Celá obrazovka</translation>
@@ -3643,6 +3649,7 @@
 <translation id="5901630391730855834">Žltá</translation>
 <translation id="5906655207909574370">Aktualizácia je takmer hotová! Dokončite ju reštartovaním zariadenia.</translation>
 <translation id="5906732635754427568">Dáta priradené k danej aplikácii budú odstránené z tohto zariadenia.</translation>
+<translation id="5908695239556627796">Rýchlosť posúvania myšou</translation>
 <translation id="5908769186679515905">Zakázať webom spúšťať Flash</translation>
 <translation id="5910363049092958439">Uložiť &amp;obrázok ako...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> je offline</translation>
@@ -5090,6 +5097,7 @@
     <ph name="BEGIN_BOLD" />Poznámka:<ph name="END_BOLD" />  Systém sa počas príslušného procesu reštartuje.</translation>
 <translation id="7828731929332799387">Týmto odstránite všetky súbory cookie a údaje webu dostupné v kontextoch tretích strán. Chcete pokračovať?</translation>
 <translation id="7829298379596169484">Pristupovanie k zvukovému vstupu</translation>
+<translation id="7829877209233347340">Požiadajte rodiča, aby sa prihlásil a povolil pridanie školského účtu</translation>
 <translation id="7830594666202422257">Pripojiť k systému Linux</translation>
 <translation id="7831491651892296503">Chyba pri konfigurácii siete</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5843,6 +5851,7 @@
 <translation id="8808686172382650546">Mačka</translation>
 <translation id="8808744862003883508">Na tejto stránke nájdete všetky rozšírenia nainštalované v Chrome.</translation>
 <translation id="8809147117840417135">Svetlá modrozelená</translation>
+<translation id="8812593354822910461">Vymazať tiež dáta prehliadania (<ph name="URL" />), po čom vás systém odhlási z domény <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Nedá sa prihlásiť do účtu <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">list papiera</translation>
 <translation id="8813872945700551674">Požiadajte rodiča o schválenie rozšírenia <ph name="EXTENSION_NAME" /></translation>
@@ -6132,6 +6141,7 @@
 <translation id="9203398526606335860">&amp;Profilovanie povolené</translation>
 <translation id="9203904171912129171">Výber zariadenia</translation>
 <translation id="9203962528777363226">Správca tohto zariadenia zakázal pridávanie nových používateľov</translation>
+<translation id="9209689095351280025">Weby nemôžu používať súbory cookie, ktoré vás sledujú na internete</translation>
 <translation id="9211177926627870898">Vyžaduje sa aktualizácia</translation>
 <translation id="9214520840402538427">Ojoj! Časový limit pre inicializáciu atribútov času inštalácie uplynul. Kontaktujte zástupcu podpory.</translation>
 <translation id="9214695392875603905">Koláčik</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index d27830c6..31d755e7 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Prenesi</translation>
 <translation id="1244265436519979884">Trenutno poteka obnavljanje vsebnika za Linux</translation>
 <translation id="1244303850296295656">Napaka razširitve</translation>
+<translation id="1246158006305844142">Vaše aplikacije in nastavitve se bodo sinhronizirale v vseh napravah s sistemom Chrome OS, v katerih ste prijavljeni z računom Google. Če vas zanimajo možnosti sinhronizacije brskalnika, odprite <ph name="LINK_BEGIN" />Chromove nastavitve<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Ali želite odstraniti predlog iz odložišča?</translation>
 <translation id="1249643471736608405">Vtičnik <ph name="PLUGIN_NAME" /> je blokiran, ker je zastarel</translation>
 <translation id="1251366534849411931">Pričakovan zaviti oklepaj: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Ne, hvala</translation>
 <translation id="1525740877599838384">Uporaba samo omrežja Wi-Fi za določanje lokacije</translation>
 <translation id="152629053603783244">Znova zaženi Linux</translation>
+<translation id="1526335046150927198">Omogoči pospeševalnik drsenja s sledilno ploščico</translation>
 <translation id="1526560967942511387">Dokument brez naslova</translation>
 <translation id="1529891865407786369">Vir napajanja</translation>
 <translation id="1530838837447122178">Odpiranje nastavitev miške in sledilne ploščice v napravi</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">Omrežna povezava je znova vzpostavljena</translation>
 <translation id="2727633948226935816">Ne opominjaj me več</translation>
 <translation id="2727712005121231835">Dejanska velikost</translation>
+<translation id="2729314457178420145">Izbriši tudi podatke brskanja (<ph name="URL" />), s čimer ste lahko odjavljeni iz domene Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Varnostno kopiranje aplikacij in datotek za Linux</translation>
 <translation id="273093730430620027">Ta stran dostopa do vaše kamere.</translation>
 <translation id="2731392572903530958">&amp;Znova odpri zaprto okno</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Več <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Piškotki in drugi podatki spletnih mest in vtičnikov</translation>
 <translation id="383891835335927981">Nobeno spletno mesto ni povečano ali pomanjšano</translation>
+<translation id="3839509547554145593">Omogoči pospeševalnik drsenja z miško</translation>
 <translation id="3839516600093027468">Vedno prepreči naslovu <ph name="HOST" /> ogled odložišča</translation>
 <translation id="3841964634449506551">Neveljavno geslo</translation>
 <translation id="3842552989725514455">Serifna pisava</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Predpomnjene slike in datoteke</translation>
 <translation id="4699357559218762027">(samodejno zagnana)</translation>
 <translation id="470074695271471509">Se želite odjaviti in dokončati?</translation>
+<translation id="4701025263201366865">Prijava starša</translation>
 <translation id="4707302005824653064">Upravitelj (<ph name="CUSTODIAN_EMAIL" />) lahko na chrome.com pregleduje uporabo in zgodovino.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + uporabniško potrdilo</translation>
 <translation id="4708794300267213770">Prikaži zaklenjen zaslon pri preklopu iz stanja pripravljenosti</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, iskanje z iskalnikom <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Vnesite kodo PIN za varnostni ključ. Če ne veste kode PIN, morate ponastaviti varnostni ključ.</translation>
 <translation id="5139955368427980650">&amp;Odpri</translation>
+<translation id="5142793792982256885">Hitrost drsenja s sledilno ploščico</translation>
 <translation id="5142961317498132443">Preverjanje pristnosti</translation>
 <translation id="5143374789336132547">Zaradi razširitve <ph name="EXTENSION_NAME" /> se je spremenila stran, ki je prikazana, ko kliknete gumb za začetno stran.</translation>
 <translation id="5143712164865402236">Prehod v celozaslonski način</translation>
@@ -3646,6 +3652,7 @@
 <translation id="5901630391730855834">Rumena</translation>
 <translation id="5906655207909574370">Samo še malo. Znova zaženite napravo, da dokončate posodobitev.</translation>
 <translation id="5906732635754427568">Podatki, povezani s to aplikacijo, bodo odstranjeni iz te naprave.</translation>
+<translation id="5908695239556627796">Hitrost drsenja z miško</translation>
 <translation id="5908769186679515905">Mestom prepreči izvajanje Flasha</translation>
 <translation id="5910363049092958439">Sh&amp;rani sliko kot ...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> nima vzpostavljene povezave</translation>
@@ -5093,6 +5100,7 @@
     <ph name="BEGIN_BOLD" />Opomba:<ph name="END_BOLD" /> sistem se bo med postopkom znova zagnal.</translation>
 <translation id="7828731929332799387">S tem bodo izbrisani vsi piškotki in podatki spletnih mest, na voljo v kontekstih drugih ponudnikov. Ali želite nadaljevati?</translation>
 <translation id="7829298379596169484">Dostopanje do zvočnega vhoda</translation>
+<translation id="7829877209233347340">Prosi starša, naj se prijavi, da odobri dovoljenje za dodajanje šolskega računa</translation>
 <translation id="7830594666202422257">Povezava z Linuxom</translation>
 <translation id="7831491651892296503">Napaka pri konfiguriranju omrežja</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5847,6 +5855,7 @@
 <translation id="8808686172382650546">Mačka</translation>
 <translation id="8808744862003883508">Na tej strani so prikazane vse razširitve, nameščene v Chromu.</translation>
 <translation id="8809147117840417135">Svetlo zelenomodra</translation>
+<translation id="8812593354822910461">Izbriši tudi podatke brskanja (<ph name="URL" />), s čimer boste odjavljeni iz domene <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Prijava v račun <ph name="USERNAME" /> ni mogoča</translation>
 <translation id="8813811964357448561">list papirja</translation>
 <translation id="8813872945700551674">Prosi starša, da odobri »<ph name="EXTENSION_NAME" />«</translation>
@@ -6136,6 +6145,7 @@
 <translation id="9203398526606335860">&amp;Profiliranje omogočeno</translation>
 <translation id="9203904171912129171">Izberite napravo</translation>
 <translation id="9203962528777363226">Skrbnik te naprave je onemogočil dodajanje novih uporabnikov</translation>
+<translation id="9209689095351280025">Spletna mesta vam ne morejo slediti po spletu na podlagi piškotkov</translation>
 <translation id="9211177926627870898">Potrebna je posodobitev</translation>
 <translation id="9214520840402538427">Ojoj! Potekla je časovna omejitev inicializacije atributov časa namestitve. Obrnite se na predstavnika podpore.</translation>
 <translation id="9214695392875603905">Tortica</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index df962ff..9a753e4 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Pakia</translation>
 <translation id="1244265436519979884">Shughuli ya kupakia metadata ya Linux inaendelea wakati huu</translation>
 <translation id="1244303850296295656">Hitilafu ya kiendelezi</translation>
+<translation id="1246158006305844142">Mipangilio na programu zako zitasawazishwa kwenye vifaa vyote vinavyotumia Mfumo wa Uendeshaji wa Chrome, ambavyo umetumia kuingia katika akaunti yako ya Google. Ili upate chaguo za kusawazisha kwenye kivinjari, nenda katika <ph name="LINK_BEGIN" />Mipangilio ya Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Je, ungependa kuondoa pendekezo kwenye ubao wa kunakili?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> imezuiwa kwa sababu iliacha kuendesha huduma</translation>
 <translation id="1251366534849411931">Hamna mchirizi wa kufungua: <ph name="ERROR_LINE" /></translation>
@@ -388,6 +389,7 @@
 <translation id="1524563461097350801">Hapana</translation>
 <translation id="1525740877599838384">Tumia Wi-Fi pekee ili kutambua mahali</translation>
 <translation id="152629053603783244">Zima Kisha Uwashe Linux</translation>
+<translation id="1526335046150927198">Ruhusu hali ya kuongeza kasi ya kusogeza padi ya kugusa</translation>
 <translation id="1526560967942511387">Andiko lisilo na kichwa</translation>
 <translation id="1529891865407786369">Chanzo cha nishati</translation>
 <translation id="1530838837447122178">Fungua mipangilio ya kipanya na padi ya kugusa</translation>
@@ -1310,6 +1312,7 @@
 <translation id="2725200716980197196">Muunganisho wa mtandao umerejeshwa</translation>
 <translation id="2727633948226935816">Usinikumbushe tena</translation>
 <translation id="2727712005121231835">Ukubwa Halisi</translation>
+<translation id="2729314457178420145">Futa pia data ya kuvinjari (<ph name="URL" />), hatua inayoweza kukuondoa kwenye akaunti ya Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Inahifadhi nakala ya programu na faili za Linux</translation>
 <translation id="273093730430620027">Ukurasa huu unafikia kamera yako.</translation>
 <translation id="2731392572903530958">Fungua &amp;Tena Dirisha Lililofungwa</translation>
@@ -2161,6 +2164,7 @@
 <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> zaidi</translation>
 <translation id="3838543471119263078">Vidakuzi na data nyingine ya tovuti na programu jalizi</translation>
 <translation id="383891835335927981">Hakuna tovuti zilizovutwa karibu wala kusogezwa mbali</translation>
+<translation id="3839509547554145593">Ruhusu hali ya kuongeza kasi ya kusogeza kipanya</translation>
 <translation id="3839516600093027468">Zuia <ph name="HOST" /> kila wakati ili isione ubao wa kunakili</translation>
 <translation id="3841964634449506551">Nenosiri si sahihi</translation>
 <translation id="3842552989725514455">Fonti ya Serif</translation>
@@ -2770,6 +2774,7 @@
 <translation id="4699172675775169585">Picha na faili zilizoakibishwa</translation>
 <translation id="4699357559218762027">(imezinduliwa kiotomatiki)</translation>
 <translation id="470074695271471509">Je, ungependa kuondoka kwenye akaunti ili ukamilishe?</translation>
+<translation id="4701025263201366865">Mzazi aingie katika akaunti</translation>
 <translation id="4707302005824653064">Matumizi na historia vinaweza kukaguliwa na kisimamia (<ph name="CUSTODIAN_EMAIL" />) kwenye chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPsec + cheti cha mtumiaji</translation>
 <translation id="4708794300267213770">Onyesha skrini iliyofungwa unapoamsha kutoka hali tuli</translation>
@@ -3077,6 +3082,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, Utafutaji wa <ph name="DEFAULT_SEARCH_ENGINE_NAME" />.</translation>
 <translation id="5139823398361067371">Weka PIN ya ufunguo wako wa usalama. Ikiwa hujui PIN, utahitaji kuweka upya mipangilio ya ufunguo wa usalama.</translation>
 <translation id="5139955368427980650">&amp;Fungua</translation>
+<translation id="5142793792982256885">Kasi ya kusogeza ya padi ya kugusa</translation>
 <translation id="5142961317498132443">Uthibitishaji</translation>
 <translation id="5143374789336132547">Kiendelezi "<ph name="EXTENSION_NAME" />" kimebadilisha ukurasa unaoonyeshwa unapobofya kitufe cha Mwanzo.</translation>
 <translation id="5143712164865402236">Ingia Skrini Kamili</translation>
@@ -3639,6 +3645,7 @@
 <translation id="5901630391730855834">Manjano</translation>
 <translation id="5906655207909574370">Inakaribia kukamilisha kusasishwa! Zima na uwashe kifaa chako ili ukamilishe kusasisha.</translation>
 <translation id="5906732635754427568">Data inayohusishwa na programu hii itaondolewa kwenye kifaa hiki.</translation>
+<translation id="5908695239556627796">Kasi ya kusogeza kipanya</translation>
 <translation id="5908769186679515905">Zuia tovuti kutumia Flash</translation>
 <translation id="5910363049092958439">&amp;Hifadhi Picha Kama...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> iko nje ya mtandao</translation>
@@ -5088,6 +5095,7 @@
     <ph name="BEGIN_BOLD" />Kumbuka:<ph name="END_BOLD" /> Mfumo utazima na kuwaka tena wakati wa mchakato huu.</translation>
 <translation id="7828731929332799387">Hatua hii itafuta vidakuzi na data yote ya tovuti inayopatikana katika muktadha wa watu au kampuni nyingine. Je, ungependa kuendelea?</translation>
 <translation id="7829298379596169484">Inafikia vifaa vya kuingiza sauti</translation>
+<translation id="7829877209233347340">Mweleze mzazi aingie katika akaunti ili akupe ruhusa ya kuweka akaunti ya shuleni</translation>
 <translation id="7830594666202422257">Unganisha kwenye Linux</translation>
 <translation id="7831491651892296503">Hitilafu imetokea wakati wa kuweka mipangilio ya mtandao</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5842,6 +5850,7 @@
 <translation id="8808686172382650546">Paka</translation>
 <translation id="8808744862003883508">Kwenye ukurasa huu, unaweza kuona viendelezi vyote vilivyosakinishwa katika Chrome.</translation>
 <translation id="8809147117840417135">Samawati ya kijani isiyokolea</translation>
+<translation id="8812593354822910461">Futa pia data ya kuvinjari (<ph name="URL" />), hatua inayoweza kukuondoa kwenye akaunti ya <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Haiwezi kuingia katika <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">karatasi</translation>
 <translation id="8813872945700551674">Mwombe mzazi aidhinishe "<ph name="EXTENSION_NAME" />"</translation>
@@ -6131,6 +6140,7 @@
 <translation id="9203398526606335860">&amp;Uwekaji maelezo mafupi umewezeshwa</translation>
 <translation id="9203904171912129171">Chagua kifaa</translation>
 <translation id="9203962528777363226">Msimamizi wa kifaa hiki amelemaza kuongezwa kwa watumiaji wapya</translation>
+<translation id="9209689095351280025">Tovuti haziwezi kutumia vidakuzi vinavyokufuatilia kwenye wavuti</translation>
 <translation id="9211177926627870898">Sasisho linahitajika</translation>
 <translation id="9214520840402538427">Lo! Uanzishaji wa muda wa usakinishaji sifa umechina. Tafadhali wasiliana na mwakilishi wako wa kutoa msaada.</translation>
 <translation id="9214695392875603905">Keki dogo</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 1c8048d..075832b 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -994,7 +994,7 @@
 <translation id="2346953515226895098">SODA சேவை</translation>
 <translation id="2347644257713614136">Hangouts மற்றும் Cast for Education ஆகியவற்றின் பயன்பாடு, Google தனியுரிமைக் கொள்கையால் நிர்வகிக்கப்படுகிறது.</translation>
 <translation id="2348176352564285430">ஆப்ஸ்: <ph name="ARC_PROCESS_NAME" /></translation>
-<translation id="2349896577940037438">கூடுதல் ’இணையம் &amp; ஆப்ஸ் செயல்பாடு’ அமைப்பு இயக்கப்பட்டிருந்தால், இந்தத் தரவு உங்கள் Google கணக்கில் சேமிக்கப்படக்கூடும். account.google.comமில் எப்போது வேண்டுமானாலும் உங்களின் தரவைப் பார்க்கலாம், நீக்கலாம் மற்றும் மாற்றலாம்.</translation>
+<translation id="2349896577940037438">கூடுதல் ’இணையம் &amp; ஆப்ஸ் செயல்பாடு’ அமைப்பு இயக்கப்பட்டிருந்தால், இந்தத் தரவு உங்கள் Google கணக்கில் சேமிக்கப்படக்கூடும். account.google.comமில் உங்களின் தரவைப் பார்க்கலாம், நீக்கலாம் மற்றும் மாற்றலாம்.</translation>
 <translation id="2350133097354918058">ரெஃப்ரெஷ் செய்யப்பட்டது</translation>
 <translation id="2350182423316644347">ஆப்ஸை தொடங்குகிறது...</translation>
 <translation id="2350796302381711542">எல்லா <ph name="PROTOCOL" /> இணைப்புகளையும் திறக்க, <ph name="REPLACED_HANDLER_TITLE" /> க்குப் பதிலாக <ph name="HANDLER_HOSTNAME" /> ஐ அனுமதிக்கவா?</translation>
@@ -1435,7 +1435,7 @@
 <translation id="2903457445916429186">தேர்ந்தெடுத்த புத்தகக்குறிகளைத் திற</translation>
 <translation id="2903882649406874750">சென்சார்களை அணுக <ph name="HOST" />ஐ எப்போதும் அனுமதிக்காதே</translation>
 <translation id="2904456025988372123">முதல் கோப்பைப் பதிவிறக்கியதும், தளமானது கோப்புகளைத் தானாகவே பதிவிறக்க முயலும் போது கேள்</translation>
-<translation id="2905789169763945526">மறைநிலையில் உள்ளபோது, விளம்பரங்களைப் பிரத்தியேகமாக்குவது போன்று வெவ்வேறு தளங்களில் உங்களின் உலாவால் செயல்பாட்டைப் பார்க்க குக்கீகளை தளங்கள் பயன்படுத்த முடியாது. சில தளங்கள் சரியாகச் செயல்படாமல் போகக்கூடும்.</translation>
+<translation id="2905789169763945526">மறைநிலையில் உள்ளபோது, விளம்பரங்களைப் பிரத்தியேகமாக்குவது போன்று வெவ்வேறு தளங்களில் உங்களின் உலாவால் செயல்பாட்டைப் பார்க்கக் குக்கீகளை தளங்கள் பயன்படுத்த முடியாது. சில தளங்கள் சரியாகச் செயல்படாமல் போகக்கூடும்.</translation>
 <translation id="2907619724991574506">தொடக்க URLகள்</translation>
 <translation id="2907798539022650680">'<ph name="NAME" />' உடன் இணைக்க முடியவில்லை: <ph name="DETAILS" />
     சேவையகப் பிழை: <ph name="SERVER_MSG" /></translation>
@@ -1867,7 +1867,7 @@
 <translation id="3528033729920178817">இந்தப் பக்கம் உங்கள் இருப்பிடத்தை தடமறிகிறது.</translation>
 <translation id="3528498924003805721">ஷார்ட்கட் இலக்குகள்</translation>
 <translation id="353316712352074340"><ph name="WINDOW_TITLE" /> - ஆடியோ முடக்கப்பட்டது</translation>
-<translation id="3533694711092285624">சேமித்த கடவுச்சொற்கள் எதுவும் இல்லை. நீங்கள் அவற்றைச் சேமிக்கும்போது Chromeமால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை.</translation>
+<translation id="3533694711092285624">சேமித்த கடவுச்சொற்கள் எதுவும் இல்லை. நீங்கள் அவற்றைச் சேமிக்கும்போது Chromeமால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியும்.</translation>
 <translation id="3538066758857505094">Linuxஸை நிறுவல் நீக்கும்போது பிழை ஏற்பட்டது. மீண்டும் முயலவும்.</translation>
 <translation id="354060433403403521">AC அடாப்டர்</translation>
 <translation id="354068948465830244">இந்த நீட்டிப்பால் தளத் தரவைப் படிக்கவும் மாற்றவும் முடியும்</translation>
@@ -2121,7 +2121,7 @@
 <translation id="383161972796689579">இந்தச் சாதனத்தில் புதியவர்கள் சேர்க்கப்படுவதை இதன் உரிமையாளர் முடக்கியுள்ளார்</translation>
 <translation id="3834775135533257713">"<ph name="TO_INSTALL_APP_NAME" />" ஆப்ஸ் "<ph name="INSTALLED_APP_NAME" />" உடன் முரண்படுவதால், அதைச் சேர்க்க முடியவில்லை.</translation>
 <translation id="3835522725882634757">அச்சச்சோ!!! <ph name="PRODUCT_NAME" /> ஆல் புரிந்துகொள்ள முடியாத தரவைச் சேவையகம் அனுப்பிக்கொண்டிருக்கிறது. தயவுசெய்து <ph name="BEGIN_LINK" />பிழை எனப் புகாரளித்து<ph name="END_LINK" />, <ph name="BEGIN2_LINK" />மாற்றப்படாத பட்டியலைச்<ph name="END2_LINK" /> சேர்த்திடுங்கள்.</translation>
-<translation id="383669374481694771">இந்தச் சாதனம் மற்றும் இதைப் பயன்படுத்தும் விதம் (பேட்டரியின் அளவு, சிஸ்டம் மற்றும் ஆப்ஸ் செயல்பாடு மற்றும் பிழைகள் போன்றவை) குறித்த பொதுவான தகவலை இந்தப் பக்கம் காட்டும். Androidடை மேம்படுத்த இந்தத் தரவு பயன்படுத்தப்படும். மேலும், Google ஆப்ஸை மேம்படுத்தவும் மற்றும் Android டெவலப்பர்கள் போன்ற கூட்டாளர்கள் தங்களின் ஆப்ஸ் மற்றும் தயாரிப்புகளைச் சிறப்பாக அமைக்கவும் ஒருங்கிணைக்கப்பட்ட சில தரவு உதவும்.</translation>
+<translation id="383669374481694771">இந்தச் சாதனம் மற்றும் இதைப் பயன்படுத்தும் விதம் (பேட்டரியின் அளவு, சிஸ்டம் மற்றும் ஆப்ஸ் செயல்பாடு மற்றும் பிழைகள் போன்றவை) குறித்த பொதுவான தகவல் இது. Androidடை மேம்படுத்த இந்தத் தரவு பயன்படுத்தப்படும். மேலும், Google ஆப்ஸுக்கும் Android டெவலப்பர்கள் போன்ற கூட்டாளர்கள் தங்களின் ஆப்ஸ் மற்றும் தயாரிப்புகளைச் சிறப்பாக அமைக்கவும் ஒருங்கிணைக்கப்பட்ட சில தரவு உதவும்.</translation>
 <translation id="3838085852053358637">நீட்டிப்பை ஏற்ற முடியவில்லை</translation>
 <translation id="3838486795898716504">மேலும் <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">குக்கீகள், பிற தளம் மற்றும் செருகுநிரல் தரவு</translation>
@@ -2188,7 +2188,7 @@
 <translation id="392089482157167418">ChromeVox (பேச்சுவடிவ கருத்து) ஐ இயக்கு</translation>
 <translation id="3923676227229836009">இந்தப் பக்கத்தில் கோப்புகளைப் பார்க்க முடியும்</translation>
 <translation id="3924145049010392604">Meta</translation>
-<translation id="3924487862883651986">URLகளைச் சரிபார்க்க பாதுகாப்பு உலாவலுக்கு அவற்றை அனுப்பும். புதிய அச்சுறுத்தல்களைக் கண்டறிவதற்கு உதவ, பக்கங்கள், பதிவிறக்கங்கள், நீட்டிப்புகள் செயல்பாடு, சிஸ்டம் தகவல் போன்ற சிலவற்றையும் அனுப்பும். Google ஆப்ஸ் முழுவதிலும் உங்களைப் பாதுகாக்க, உங்கள் Google கணக்கில் உள்நுழைந்திருக்கும்போது தற்காலிகமாக அதனுடன் இந்தத் தரவை இணைக்கும்.</translation>
+<translation id="3924487862883651986">URLகளைச் சரிபார்க்க பாதுகாப்பு உலாவலுக்கு அவற்றை அனுப்பும். புதிய அச்சுறுத்தல்களைக் கண்டறிவதற்கு உதவ, பக்கங்கள், பதிவிறக்கங்கள், நீட்டிப்பு செயல்பாடு, சிஸ்டம் தகவல் போன்ற சிலவற்றையும் அனுப்பும். Google ஆப்ஸ் முழுவதிலும் உங்களைப் பாதுகாக்க, உங்கள் Google கணக்கில் உள்நுழைந்திருக்கும்போது தற்காலிகமாக அதனுடன் இந்தத் தரவை இணைக்கும்.</translation>
 <translation id="3925573269917483990">கேமரா:</translation>
 <translation id="3926002189479431949">Smart Lockகின் ஃபோன் மாற்றப்பட்டது</translation>
 <translation id="3927787410750478258">இனி இந்த <ph name="DEVICE_TYPE" /> ஐ <ph name="DOMAIN" /> நிர்வகிக்கும்.</translation>
@@ -2698,7 +2698,7 @@
 <translation id="4660476621274971848">எதிர்பார்க்கப்பட்ட பதிப்பு "<ph name="EXPECTED_VERSION" />", ஆனால் இருப்பது "<ph name="NEW_ID" />" பதிப்பு ஆகும்</translation>
 <translation id="4660838440047236328">உங்கள் அறையின் வடிவமைப்பு</translation>
 <translation id="4661407454952063730">ஆப்ஸ் தரவு என்பது தொடர்புகள், செய்திகள், படங்கள் போன்ற தரவு உட்பட ஆப்ஸ் சேமித்த (டெவெலப்பர் அமைப்புகளின் அடிப்படையில்) எந்தத் தரவாகவும் இருக்கலாம்.</translation>
-<translation id="4661931051827810091">வலையில் உள்ள அனைத்துப் பயனர்களின் நலனுக்கு எதிராகச் செயல்படும் புதிய அச்சுறுத்தல்களைக் கண்டறியவும் தடுக்கவும் நீங்கள் பார்வையிடும் சில பக்கங்களின் அடையாளமற்ற URLகள், வரம்பிடப்பட்ட சிஸ்டம் தகவல்கள் மற்றும் சில பக்க உள்ளடக்கத்தை அனுப்பும்.</translation>
+<translation id="4661931051827810091">வலையில் உள்ள அனைத்துப் பயனர்களின் நலனுக்கு எதிராகச் செயல்படும் புதிய அச்சுறுத்தல்களைக் கண்டறிந்து தடுக்க உதவுவதற்கு நீங்கள் பார்வையிடும் சில பக்கங்களின் URLகள், வரம்பிடப்பட்ட சிஸ்டம் தகவல்கள் மற்றும் சில பக்க உள்ளடக்கத்தை அனுப்பும்.</translation>
 <translation id="4662788913887017617">இந்தப் புத்தகக்குறியை உங்கள் iPhone உடன் பகிருங்கள்</translation>
 <translation id="4663373278480897665">கேமரா அனுமதிக்கப்பட்டது</translation>
 <translation id="4664482161435122549">PKCS #12 ஏற்றுமதி பிழை</translation>
@@ -2907,7 +2907,7 @@
 <translation id="4965808351167763748">Hangouts Meetஐ இயக்க, இந்தச் சாதனத்தை நிச்சயமாக அமைக்க விரும்புகிறீர்களா?</translation>
 <translation id="496888482094675990">Google இயக்ககம், வெளிப்புறச் சேமிப்பகம் அல்லது உங்கள் Chrome OS சாதனத்தில் சேமித்துள்ள கோப்புகளுக்கான விரைவான அணுகலை Files ஆப்ஸ் வழங்குகிறது.</translation>
 <translation id="4971412780836297815">முடிந்ததும் திற</translation>
-<translation id="4971735654804503942">ஆபத்தான இணையதளங்கள், பதிவிறக்கங்கள் மற்றும் நீட்டிப்புகளுக்கு எதிராக வேகமான, பிரத்தியேகப் பாதுகாப்பு. கடவுச்சொல் மீறல்கள் குறித்து உங்களுக்கு எச்சரிக்கை அளிக்கிறது. Googleளுக்கு அனுப்ப உலாவிய தரவு தேவை.</translation>
+<translation id="4971735654804503942">ஆபத்தான இணையதளங்கள், பதிவிறக்கங்கள் மற்றும் நீட்டிப்புகளுக்கு எதிராக வேகமான, முன்னெச்சரிக்கைப் பாதுகாப்பு. கடவுச்சொல் மீறல்கள் குறித்து உங்களுக்கு எச்சரிக்கை அளிக்கிறது. Googleளுக்கு அனுப்ப உலாவிய தரவு தேவை.</translation>
 <translation id="4972129977812092092">பிரிண்டரின் தகவலை மாற்று</translation>
 <translation id="4972164225939028131">தவறான கடவுச்சொல்</translation>
 <translation id="4973307593867026061">அச்சுப்பொறிகளைச் சேர்</translation>
@@ -3962,7 +3962,7 @@
 <translation id="6410328738210026208">சேனல் மற்றும் பவர்வாஷை மாற்று</translation>
 <translation id="6410668567036790476">தேடல் இன்ஜினைச் சேர்</translation>
 <translation id="641081527798843608">சப்ஜெக்ட் மேட்ச்</translation>
-<translation id="6412673304250309937">Chromeமில் சேமிக்கப்பட்டுள்ள பாதுகாப்பில்லாத தளங்களின் பட்டியலைப் பயன்படுத்தி URLகளைச் சரிபார்க்கும். தளம் உங்கள் கடவுச்சொல்லைத் திருட முயன்றலோ தீங்குவிளைவிக்கும் கோப்பை நீங்கள் பதிவிறக்கினாலோ Chromeமானது பக்க உள்ளடக்கத்தின் சிறிய பகுதிகள் உட்பட URLகளையும் பாதுகாப்பு உலாவலுக்கு அனுப்பும்.</translation>
+<translation id="6412673304250309937">Chromeமில் சேமிக்கப்பட்டுள்ள பாதுகாப்பில்லாத தளங்களின் பட்டியலைப் பயன்படுத்தி URLகளைச் சரிபார்க்கும். தளம் உங்கள் கடவுச்சொல்லைத் திருட முயன்றலோ தீங்குவிளைவிக்கும் கோப்பை நீங்கள் பதிவிறக்கினாலோ Chromeமானது பக்க உள்ளடக்கத்தின் சிறிய பகுதிகள் உட்பட URLகளையும் பாதுகாப்பு உலாவலுக்கு அனுப்பக்கூடும்.</translation>
 <translation id="6412931879992742813">புதிய மறைநிலைச் சாளரம்</translation>
 <translation id="641469293210305670">புதுப்பிப்புகளையும் ஆப்ஸையும் நிறுவுதல்</translation>
 <translation id="6414888972213066896">இந்தத் தளத்தைப் பார்வையிடலாமா என, நீங்கள் பெற்றோரிடம் கேட்டுள்ளீர்கள்</translation>
@@ -4617,7 +4617,7 @@
 <translation id="7310598146671372464">உள்நுழைய முடியவில்லை. குறிப்பிடப்பட்டுள்ள Kerberos என்க்ரிப்ஷன் வகைகளைச் சேவையகம் ஆதரிக்கவில்லை. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="7311079019872751559">சாண்ட்பாக்ஸ் செய்யப்படாத செருகுநிரல் அணுகல்</translation>
 <translation id="73174032666024687"><ph name="NUMBER_OF_SHEETS" /> <ph name="SHEETS_LABEL" /></translation>
-<translation id="732018663949361753">விளம்பரங்களைப் பிரத்தியேகமாக்குவது போன்று வெவ்வேறு தளங்களில் உங்களின் உலாவல் செயல்பாட்டைப் பார்க்க குக்கீகளை தளங்கள் பயன்படுத்த முடியாது.  சில தளங்கள் சரியாகச் செயல்படாமல் போகக்கூடும்.</translation>
+<translation id="732018663949361753">விளம்பரங்களைப் பிரத்தியேகமாக்குவது போன்று வெவ்வேறு தளங்களில் உங்களின் உலாவல் செயல்பாட்டைப் பார்க்கக் குக்கீகளை தளங்கள் பயன்படுத்த முடியாது.  சில தளங்கள் சரியாகச் செயல்படாமல் போகக்கூடும்.</translation>
 <translation id="7321545336522791733">சேவையகத்தைத் தொடர்புகொள்ள  முடியவில்லை</translation>
 <translation id="7324297612904500502">பீட்டா மன்றம்</translation>
 <translation id="7325209047678309347">காகிதம் சிக்கிக் கொண்டது</translation>
@@ -4659,7 +4659,7 @@
 <translation id="736877393389250337"><ph name="URL" /> இணைப்பை <ph name="ALTERNATIVE_BROWSER_NAME" /> உலாவியில் திறக்க இயலவில்லை. உங்கள் சிஸ்டம் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="7370592524170198497">ஈதர்நெட் EAP:</translation>
 <translation id="7371006317849674875">தொடக்க நேரம்</translation>
-<translation id="7371490947952970241">இந்தச் சாதனத்தில் உள்ள முதன்மை இருப்பிட அமைப்புகளை முடக்கி இருப்பிடத்தை நீக்கலாம். வைஃபை, மொபைல் நெட்வொர்க்குகள் மற்றும் இருப்பிடத்திற்காக இருப்பிட அமைப்புகளில் உள்ள சென்சார்களைப் பயன்படுத்துவதையும் நீங்கள் முடக்கலாம்.</translation>
+<translation id="7371490947952970241">இந்தச் சாதனத்தில் உள்ள முதன்மை இருப்பிட அமைப்புகளை முடக்கி இருப்பிடத்தை முடக்கலாம். வைஃபை, மொபைல் நெட்வொர்க்குகள் மற்றும் இருப்பிடத்திற்காக இருப்பிட அமைப்புகளில் உள்ள சென்சார்களைப் பயன்படுத்துவதையும் நீங்கள் முடக்கலாம்.</translation>
 <translation id="7375053625150546623">EAP</translation>
 <translation id="7376553024552204454">மவுஸ் கர்சரை நகர்த்தும் போது, அதை ஹைலைட் செய்</translation>
 <translation id="7377451353532943397">தொடர்ந்து சென்சார் அணுகலைத் தடு</translation>
@@ -4820,7 +4820,7 @@
 <translation id="7609148976235050828">இணையத்துடன் இணைத்து, மீண்டும் முயலவும்.</translation>
 <translation id="7611008212562900400">சாதனம், ஆப்ஸ், இணையத்தில் தேடவும்...</translation>
 <translation id="7614260613810441905">எனது சாதனத்திலுள்ள கோப்புகளையோ கோப்புறைகளையோ ஒரு தளம் மாற்ற விரும்பும்போது அனுமதி கேள் (பரிந்துரைக்கப்படுகிறது)</translation>
-<translation id="761530003705945209">Google Driveவிற்குக் காப்புப் பிரதி எடுக்கவும். உங்கள் தரவை எளிதாக மீட்டெடுக்கலாம் அல்லது எப்போது வேண்டுமானாலும் சாதனத்தை மாற்றலாம். ஆப்ஸ் தரவும் உங்கள் காப்புப் பிரதியில் அடங்கும். உங்களின் காப்புப்பிரதிகள் Googleளுக்குப் பதிவேற்றப்பட்டு Google கணக்கின் கடவுச்சொல்லைப் பயன்படுத்தி என்க்ரிப்ஷன் செய்யப்படுகின்றன.</translation>
+<translation id="761530003705945209">Google Driveவிற்குக் காப்புப் பிரதி எடுக்கவும். எப்போது வேண்டுமானாலும் உங்கள் தரவை எளிதாக மீட்டெடுக்கலாம் அல்லது சாதனத்தை மாற்றலாம். ஆப்ஸ் தரவும் உங்கள் காப்புப் பிரதியில் அடங்கும். உங்களின் காப்புப்பிரதிகள் Googleளுக்குப் பதிவேற்றப்பட்டு Google கணக்கின் கடவுச்சொல்லைப் பயன்படுத்தி என்க்ரிப்ஷன் செய்யப்படுகின்றன.</translation>
 <translation id="7616214729753637086">சாதனத்தைப் பதிவுசெய்கிறது...</translation>
 <translation id="7617366389578322136">"<ph name="DEVICE_NAME" />" சாதனத்துடன் இணைக்கிறது</translation>
 <translation id="7621382409404463535">சாதன உள்ளமைவை சிஸ்டத்தால் சேமிக்க முடியவில்லை.</translation>
@@ -5690,7 +5690,7 @@
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8738766971144275885">இந்தக் கோப்பு என்க்ரிப்ட் செய்யப்பட்டுள்ளது, எனவே இதைத் திறப்பது தடுக்கப்பட்டுள்ளது.</translation>
 <translation id="8742371904523228557"><ph name="ORIGIN" />க்கான உங்கள் குறியீடு: <ph name="ONE_TIME_CODE" /></translation>
-<translation id="8742998548129056176">உங்கள் சாதனம் மற்றும் இதை நீங்கள் பயன்படுத்தும் விதம் (பேட்டரியின் அளவு, சிஸ்டம் மற்றும் ஆப்ஸ் செயல்பாடு மற்றும் பிழைகள் போன்றவை) குறித்த பொதுவான தகவலை இந்தப் பக்கம் காட்டும். Androidடை மேம்படுத்த இந்தத் தரவு பயன்படுத்தப்படும். மேலும், Google ஆப்ஸை மேம்படுத்தவும் மற்றும் Android டெவலப்பர்கள் போன்ற கூட்டாளர்கள் தங்களின் ஆப்ஸ் மற்றும் தயாரிப்புகளைச் சிறப்பாக அமைக்கவும் ஒருங்கிணைக்கப்பட்ட சில தரவு உதவும்.</translation>
+<translation id="8742998548129056176">உங்கள் சாதனம் மற்றும் இதை நீங்கள் பயன்படுத்தும் விதம் (பேட்டரியின் அளவு, சிஸ்டம் மற்றும் ஆப்ஸ் செயல்பாடு மற்றும் பிழைகள் போன்றவை) குறித்த பொதுவான தகவல் இது. Androidடை மேம்படுத்த இந்தத் தரவு பயன்படுத்தப்படும். மேலும், Google ஆப்ஸுக்கும் Android டெவலப்பர்கள் போன்ற கூட்டாளர்கள் தங்களின் ஆப்ஸ் மற்றும் தயாரிப்புகளைச் சிறப்பாக அமைக்கவும் ஒருங்கிணைக்கப்பட்ட சில தகவல்களும் உதவும்.</translation>
 <translation id="8743390665131937741">முழுத்திரைப் பெரிதாக்கியின் அளவை மாற்றுவதற்கான நிலை:</translation>
 <translation id="8743864605301774756">புதுப்பித்தது: 1ம முன்பு</translation>
 <translation id="8746654918629346731">ஏற்கனவே "<ph name="EXTENSION_NAME" />" ஐக் கோரியுள்ளீர்கள்</translation>
@@ -5927,7 +5927,7 @@
 <translation id="9027459031423301635">இணைப்பைப் புதிய &amp;தாவலில் திற</translation>
 <translation id="9030515284705930323">உங்கள் கணக்கிற்கு Google Play ஸ்டோர் அணுகலை உங்கள் நிறுவனம் இயக்கவில்லை. மேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="9030785788945687215">Gmail</translation>
-<translation id="9031549947500880805">Google Driveவிற்குக் காப்புப் பிரதி எடுக்கவும். உங்கள் தரவை எளிதாக மீட்டெடுக்கலாம் அல்லது எப்போது வேண்டுமானாலும் சாதனத்தை மாற்றலாம். ஆப்ஸ் தரவும் உங்கள் காப்புப் பிரதியில் அடங்கும்.</translation>
+<translation id="9031549947500880805">Google Driveவிற்குக் காப்புப் பிரதி எடுக்கவும். எப்போது வேண்டுமானாலும் உங்கள் தரவை எளிதாக மீட்டெடுக்கலாம் அல்லது சாதனத்தை மாற்றலாம். ஆப்ஸ் தரவும் உங்கள் காப்புப் பிரதியில் அடங்கும்.</translation>
 <translation id="9033857511263905942">&amp;ஒட்டு</translation>
 <translation id="9037965129289936994">அசல் மொழியில் காட்டு</translation>
 <translation id="903797871439633902"><ph name="DEVICE_TYPE" /> இன் மென்பொருளுக்கும் பாதுகாப்பிற்கும் தானாக செய்யப்படும் கடைசிப் புதுப்பிப்பு இது தான். எதிர்வரும் புதுப்பிப்புகளைப் பெற புதிய வகை சாதனங்களுக்கு மாறவும். &lt;a target="_blank" href="<ph name="URL" />"&gt;மேலும் அறிக&lt;/a&gt;</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 848039e..eeb271a 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -52,6 +52,7 @@
 <translation id="1058262162121953039">PUK</translation>
 <translation id="1061745542578250838"><ph name="FILE_NAME" /> గోప్యమైన కంటెంట్‌ను కలిగి ఉన్నందున బ్లాక్ చేయబడింది.</translation>
 <translation id="1061904396131502319">దాదాపు విరామ సమయం</translation>
+<translation id="1064552680598333868">తర్వాత Linuxను రీస్టార్ట్ చేసినప్పుడు, మైక్రోఫోన్‌కు చేసిన మార్పులు అమలు అవుతాయి.</translation>
 <translation id="1067048845568873861">సృష్టించబడింది</translation>
 <translation id="1067291318998134776">Linux (బీటా)</translation>
 <translation id="1067922213147265141">ఇతర Google సేవలు</translation>
@@ -112,6 +113,7 @@
 <translation id="1147991416141538220">యాక్సెస్‌ను అడగడానికి, ఈ పరికరం యొక్క నిర్వాహకులను సంప్రదించండి.</translation>
 <translation id="1149401351239820326">గడువు ముగింపు నెల</translation>
 <translation id="1150565364351027703">చలువ అద్దాలు</translation>
+<translation id="1151841030700667295">తెరిచిన ట్యాబ్‌లతో సహా, అన్ని సైట్‌ల నుండి మీరు సైన్ అవుట్ చేయబడతారు.</translation>
 <translation id="1151917987301063366">సెన్సార్‌లను యాక్సెస్ చేయడానికి ఎల్లవేళలా <ph name="HOST" />ని అనుమతించు</translation>
 <translation id="1153356358378277386">జత చేసిన పరికరాలు</translation>
 <translation id="1153636665119721804">Google అధునాతన రక్షణ ప్రోగ్రామ్</translation>
@@ -279,6 +281,7 @@
 <translation id="1386387014181100145">హాయ్.</translation>
 <translation id="138784436342154190">డిఫాల్ట్ ప్రారంభ పేజీని పునరుద్ధరించాలా?</translation>
 <translation id="1390548061267426325">సాధారణ ట్యాబ్‌ లాగా తెరువు</translation>
+<translation id="1392232653471491344">Linuxను రీస్టార్ట్ చేయడం అవసరం</translation>
 <translation id="1393283411312835250">సూర్యుడు మరియు మేఘాలు</translation>
 <translation id="1393787139683794508">ఇది <ph name="ORIGIN_NAME" /> ద్వారా నిల్వ చేసిన మొత్తం డేటా మరియు కుక్కీలను తొలగిస్తుంది.</translation>
 <translation id="1395730723686586365">అప్‌డేటర్ ప్రారంభించబడింది</translation>
@@ -307,6 +310,7 @@
 <translation id="1420920093772172268">జత చేయడాన్ని అనుమతించడానికి <ph name="TURN_ON_BLUETOOTH_LINK" /></translation>
 <translation id="1422159345171879700">అసురక్షిత స్క్రిప్ట్‌లను లోడ్ చేయి</translation>
 <translation id="1426410128494586442">అవును</translation>
+<translation id="142655739075382478"><ph name="APP_NAME" /> బ్లాక్ చేయబడింది</translation>
 <translation id="1426870617281699524">మళ్లీ ప్రయత్నించును క్లిక్ చేసి, మీ కంప్యూటర్‌లో ప్రాంప్ట్‌ను ఆమోదించండి</translation>
 <translation id="1427269577154060167">దేశం</translation>
 <translation id="142758023928848008">స్టిక్కీ కీలను ప్రారంభించు (క్రమానుసారంగా కీబోర్డ్ షార్ట్‌క‌ట్‌ల‌ను టైప్ చేయడం ద్వారా వాటిని అమలు చేయడానికి)</translation>
@@ -345,6 +349,7 @@
 <translation id="1476607407192946488">&amp;భాష సెట్టింగ్‌లు</translation>
 <translation id="1478340334823509079">వివరాలు: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">ఇన్‌స్టాలేషన్ ప్రారంభించబడలేదు</translation>
+<translation id="1481537595330271162">డిస్క్ పరిమాణాన్ని మార్చడంలో ఎర్రర్ ఏర్పడింది</translation>
 <translation id="1482626744466814421">ఈ ట్యాబ్‌ను బుక్‌మార్క్ చేయి...</translation>
 <translation id="1483493594462132177">పంపు</translation>
 <translation id="1484979925941077974">బ్లూటూత్‌ను సైట్ ఉపయోగిస్తోంది</translation>
@@ -604,6 +609,7 @@
 <translation id="1805822111539868586">వీక్షణలను పరిశీలించండి</translation>
 <translation id="1805888043020974594">ప్రింట్ సర్వర్</translation>
 <translation id="1805967612549112634">పిన్‌ను నిర్ధారించండి</translation>
+<translation id="1806335016774576568">మరొక తెరిచి ఉన్న యాప్‌కు మారండి</translation>
 <translation id="1809734401532861917">నా బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు మరియు ఇతర సెట్టింగ్‌లను <ph name="USER_EMAIL_ADDRESS" />కి జోడించు</translation>
 <translation id="1813278315230285598">సేవలు</translation>
 <translation id="18139523105317219">EDI వేడుక పేరు</translation>
@@ -690,6 +696,7 @@
 <translation id="1921050530041573580">మీ ఫోన్‌ని సందేశాలతో జత చేయండి</translation>
 <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation>
 <translation id="192494336144674234">దీనితో తెరువు</translation>
+<translation id="1925017091976104802">అతికించడానికి <ph name="MODIFIER_KEY_DESCRIPTION" />ను నొక్కండి</translation>
 <translation id="1925021887439448749">అనుకూల వెబ్ చిరునామాను నమోదు చేయండి</translation>
 <translation id="1925124445985510535">భద్రతా తనిఖీ <ph name="TIME" />కు రన్ చేయబడింది</translation>
 <translation id="1926339101652878330">ఈ సెట్టింగ్‌లను ఎంటర్‌ప్రైజ్ విధానం నియంత్రిస్తుంది. మరింత సమాచారం కోసం, దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి.</translation>
@@ -834,6 +841,7 @@
 <translation id="2135787500304447609">&amp;మళ్ళీ ప్రారంభించు</translation>
 <translation id="2136372518715274136">కొత్త పాస్‌వర్డ్‌ను నమోదు చేయండి</translation>
 <translation id="2136476978468204130">మీరు నమోదు చేసిన రహస్య పదబంధం తప్పు</translation>
+<translation id="2137122615728646911">{COUNT,plural, =0{కుక్కీలు బ్లాక్ చేయబడ్డాయి.}=1{కుక్కీలు బ్లాక్ చేయబడ్డాయి, 1 మినహాయింపు}other{కుక్కీలు బ్లాక్ చేయబడ్డాయి, {COUNT} మినహాయింపులు}}</translation>
 <translation id="2138398485845393913">"<ph name="DEVICE_NAME" />"కి కనెక్షన్ ఇప్పటికీ ప్రోగ్రెస్‌లో ఉంది</translation>
 <translation id="2139545522194199494"><ph name="NETWORK_COUNT" />లో <ph name="NETWORK_INDEX" />వ నెట్‌వర్క్, <ph name="NETWORK_NAME" />, సిగ్నల్ సామర్థ్యం <ph name="SIGNAL_STRENGTH" />%, మీ అడ్మినిస్ట్రేటర్ ద్వారా నిర్వహించబడుతోంది, కనెక్ట్ చేయండి</translation>
 <translation id="2139919072249842737">సెటప్ బటన్</translation>
@@ -1000,11 +1008,13 @@
 <translation id="2346953515226895098">SODA సర్వీస్</translation>
 <translation id="2347644257713614136">Hangouts మరియు Cast for Educationల వినియోగం Google గోప్యతా విధానానికి అనుగుణంగా ఉంటుంది.</translation>
 <translation id="2348176352564285430">యాప్: <ph name="ARC_PROCESS_NAME" /></translation>
+<translation id="234889437187286781">డేటాను లోడ్ చేయడంలో ఎర్రర్ ఏర్పడింది</translation>
 <translation id="2349896577940037438">మీ అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. మీరు account.google.comలో మీ డేటాను చూడవచ్చు, దానిని తొలగించవచ్చు, మీ ఖాతా సెట్టింగ్‌లను మార్చవచ్చు.</translation>
 <translation id="2350133097354918058">మళ్లీ లోడ్ చేయబడింది</translation>
 <translation id="2350182423316644347">అప్లికేషన్‌ను ప్రారంభిస్తోంది...</translation>
 <translation id="2350796302381711542"><ph name="REPLACED_HANDLER_TITLE" />కి బదులుగా అన్ని <ph name="PROTOCOL" /> లింక్‌లను తెరవడానికి <ph name="HANDLER_HOSTNAME" />ను అనుమతించాలా?</translation>
 <translation id="2351266942280602854">భాష మరియు ఇన్‌పుట్</translation>
+<translation id="2352495879228166246">{NUM_ITEMS,plural, =1{1 ఐటెమ్}other{{NUM_ITEMS} ఐటెమ్‌లు}}</translation>
 <translation id="2352662711729498748">&lt; 1 MB</translation>
 <translation id="2352810082280059586">లాక్ స్క్రీన్ గమనికలు స్వయంచాలకంగా <ph name="LOCK_SCREEN_APP_NAME" />కి సేవ్ చేయబడ్డాయి. మీ అత్యంత తాజా గమనిక లాక్ స్క్రీన్‌పై అలాగే ఉంటుంది.</translation>
 <translation id="2353297238722298836">కెమెరా మరియు మైక్రోఫోన్ అనుమతించబడ్డాయి</translation>
@@ -1038,6 +1048,7 @@
 <translation id="2392369802118427583">సక్రియం చెయ్యి</translation>
 <translation id="2394566832561516196">సెట్టింగ్‌లు తర్వాతిసారి మళ్లీ లోడ్‌ చేసే సమయంలో క్లియర్ చేయబడతాయి.</translation>
 <translation id="2395616325548404795">మీ <ph name="DEVICE_TYPE" /> ఎంటర్‌ప్రైజ్ నిర్వహణ కోసం విజయవంతంగా నమోదు చేయబడింది, కానీ దాని లక్షణ మరియు స్థాన సమాచారాన్ని పంపడంలో విఫలమైంది. దయచేసి ఈ పరికరం కోసం ఈ సమాచారాన్ని మీ నిర్వాహక కన్సోల్ నుండి మాన్యువల్‌గా నమోదు చేయండి.</translation>
+<translation id="2396387085693598316">మీ అడ్మిన్ "<ph name="EXTENSION_NAME" />"ను బ్లాక్ చేశారు</translation>
 <translation id="2396783860772170191">4 అంకెల పిన్ (0000-9999) నమోదు చేయండి</translation>
 <translation id="2399939490305346086">'సెక్యూరిటీ కీ' సైన్-ఇన్ డేటా</translation>
 <translation id="2400664245143453337">వెంటనే అప్‌డేట్ చేయడం అవసరం</translation>
@@ -1324,6 +1335,7 @@
 <translation id="2753677631968972007">సైట్ అనుమతులను మాన్యువల్‌గా నియంత్రించడం.</translation>
 <translation id="2755367719610958252">యాక్సెస్‌ ఫీచ‌ర్‌ల‌ను నిర్వహించండి</translation>
 <translation id="275662540872599901">స్క్రీన్ ఆఫ్‌లో ఉంది</translation>
+<translation id="2757338480560142065">మీరు సేవ్ చేస్తున్న పాస్‌వర్డ్ మీ <ph name="WEBSITE" /> యొక్క పాస్‌వర్డ్‌తో సరిపోలుతుందని నిర్ధారించుకోండి</translation>
 <translation id="2762441749940182211">కెమెరా బ్లాక్ చేయబడింది</translation>
 <translation id="2765217105034171413">చిన్నది</translation>
 <translation id="2766161002040448006">తల్లి/తండ్రిని అడగండి</translation>
@@ -1576,6 +1588,7 @@
 <translation id="3090819949319990166">బాహ్య crx ఫైల్‌ను <ph name="TEMP_CRX_FILE" />‌కు కాపీ చేయడం సాధ్యపడదు.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" జత చేయబడింది</translation>
 <translation id="3092699946856346803">దయచేసి మీ SIMను చొప్పించి, ఆపై మళ్లీ ప్రయత్నించండి</translation>
+<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{1 హానికరమైనది అయ్యే అవకాశం ఉన్న ఎక్స్‌టెన్షన్ ఆఫ్ చేయబడింది. మీరు కూడా దానిని తీసివేయవచ్చు.}other{{NUM_EXTENSIONS} హానికరమైనవి అయ్యే అవకాశం ఉన్న ఎక్స్‌టెన్షన్‌లు ఆఫ్ చేయబడ్డాయి. మీరు కూడా వాటిని తీసివేయవచ్చు.}}</translation>
 <translation id="3101709781009526431">తేదీ మరియు సమయం</translation>
 <translation id="3103941660000130485">Linuxను అప్‌గ్రేడ్ చేయడంలో ఎర్రర్ ఏర్పడింది</translation>
 <translation id="310671807099593501">సైట్ బ్లూటూత్‌ను ఉపయోగిస్తోంది</translation>
@@ -1649,6 +1662,7 @@
 <translation id="3201422919974259695">అందుబాటులో గల USB పరికరాలు ఇక్కడ కనిపిస్తాయి.</translation>
 <translation id="3202131003361292969">పాథ్‌</translation>
 <translation id="3202173864863109533">ఈ ట్యాబ్ ఆడియో మ్యూట్ చేయబడుతోంది.</translation>
+<translation id="3208321278970793882">యాప్</translation>
 <translation id="3208584281581115441">ఇప్పుడే తనిఖీ చేయి</translation>
 <translation id="3208703785962634733">నిర్థారించబడలేదు</translation>
 <translation id="32101887417650595">ప్రింటర్‌కు కనెక్ట్ చేయడం సాధ్యపడలేదు</translation>
@@ -1669,6 +1683,7 @@
 <translation id="3239373508713281971"><ph name="APP_NAME" />కు సెట్ చేసిన సమయ పరిమితి తీసివేయబడింది</translation>
 <translation id="3241680850019875542">ప్యాక్ చేయ‌డానికి ఎక్స్‌టెన్ష‌న్‌ యొక్క రూట్ డైరెక్టరీని ఎంచుకోండి. ఒక ఎక్స్‌టెన్ష‌న్‌ను అప్‌డేట్ చేయ‌డానికి, మ‌ళ్లీ ఉపయోగించడానికి వ్యక్తిగత కీ ఫైల్‌ను కూడా ఎంచుకోండి.</translation>
 <translation id="3244294424315804309">సౌండ్‌ని మ్యూట్ చేయడాన్ని కొనసాగించు</translation>
+<translation id="3246107497225150582">{0,plural, =1{ఒక రోజు లోపు పరికరాన్ని అప్‌డేట్ చేయండి}other{# రోజుల లోపు పరికరాన్ని అప్‌డేట్ చేయండి}}</translation>
 <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - నెట్‌వర్క్ ఎర్రర్</translation>
 <translation id="3248902735035392926">భద్రత చాలా ముఖ్యమైనది. <ph name="BEGIN_LINK" />ఇప్పుడే మీ ఎక్స్‌టెన్షన్‌లను తనిఖీ చేయడానికి<ph name="END_LINK" /> సమయం తీసుకోండి</translation>
 <translation id="3249950116250264636"><ph name="APP_NAME" /> (<ph name="APP_URL" />)</translation>
@@ -1754,6 +1769,7 @@
 <translation id="3356580349448036450">పూర్తయింది</translation>
 <translation id="3359256513598016054">సర్టిఫికెట్ విధాన పరిమితులు</translation>
 <translation id="3360297538363969800">ముద్రణ విఫలమైంది. దయచేసి మీ ప్రింటర్‌ను తనిఖీ చేసి మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="3364986687961713424">మీ నిర్వాహకుడి నుండి: <ph name="ADMIN_MESSAGE" /></translation>
 <translation id="3365598184818502391">Ctrl లేదా Altను ఉపయోగించండి</translation>
 <translation id="3367047597842238025">మీ <ph name="DEVICE_TYPE" />ను మీకు నచ్చిన విధంగా సెటప్ చేసుకొని కోరుకున్న నైపుణ్యాలను క్షణాలలో చేజిక్కించుకోవచ్చు</translation>
 <translation id="3368922792935385530">కనెక్ట్ అయింది</translation>
@@ -1857,6 +1873,7 @@
 <translation id="3496213124478423963">దూరంగా జూమ్ చెయ్యి</translation>
 <translation id="3497560059572256875">డూడుల్‌ని షేర్ చేయి</translation>
 <translation id="3498215018399854026">మేము ప్రస్తుతం మీ తల్లి/తండ్రిని సంప్రదించలేకపోయాము. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="3500417806337761827">షేర్‌ను మౌంట్ చేయడంలో ఎర్రర్ ఏర్పడింది. చాలా SMB షేర్‌లు ఇప్పటికే మౌంట్ చేయబడ్డాయి.</translation>
 <translation id="3505030558724226696">పరికర యాక్సెస్‌ను ఉపసంహరించు</translation>
 <translation id="3507421388498836150">"<ph name="EXTENSION_NAME" />" ప్రస్తుత అనుమతులు</translation>
 <translation id="3507888235492474624">బ్లూటూత్ పరికరాలను మళ్లీ స్కాన్ చేయండి</translation>
@@ -1922,6 +1939,7 @@
 <translation id="3592260987370335752">&amp;మరింత తెలుసుకోండి</translation>
 <translation id="359283478042092570">నమోదు చేయి</translation>
 <translation id="3593965109698325041">సర్టిఫికెట్ పేరు పరిమితులు</translation>
+<translation id="3595381248165458839">మీ సంస్థ యొక్క పరికర నిర్వాహకుడిని సంప్రదించండి</translation>
 <translation id="3596235046596950091">క్లౌడ్ సేవలను ప్రారంభించు</translation>
 <translation id="3596414637720633074">అజ్ఞాతంలో థర్డ్-పార్టీ కుక్కీలను బ్లాక్ చేయి</translation>
 <translation id="3599221874935822507">పైకి ఉన్నట్లుగా</translation>
@@ -2054,6 +2072,7 @@
 <translation id="3742666961763734085">ఈ పేరుతో సంస్థాగత యూనిట్ కనుగొనబడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
 <translation id="3744111561329211289">బ్యాక్‌గ్రౌండ్ సింక్</translation>
 <translation id="3746127522257263495">Android యాప్‌లలో 'విద్య కోసం G Suite' ఖాతాను యాడ్ చేయడానికి వీలుపడదు.</translation>
+<translation id="3747039297326604768">Plugin VMను తెరవడం సాధ్యం కాలేదు</translation>
 <translation id="3747077776423672805">యాప్‌లను తీసివేయడం కోసం, సెట్టింగ్‌లు &gt; Google Play స్టోర్ &gt; Android ప్రాధాన్యతలను నిర్వహించు &gt; యాప్‌లు లేదా అప్లికేషన్ మేనేజర్‌లోకి వెళ్లండి. ఆపై, మీరు అన్ఇన్‌స్టాల్ చేయాలనుకుంటున్న యాప్‌ని నొక్కండి (మీరు యాప్‌ని కనుగొనడం కోసం ఎడమ లేదా కుడి వైపునకు స్వైప్ చేయాల్సి రావచ్చు). ఆపై, అన్ఇన్‌స్టాల్ చేయి లేదా నిలిపివేయిని ఎంచుకోండి.</translation>
 <translation id="3748026146096797577">కనెక్ట్ కాలేదు</translation>
 <translation id="3752582316358263300">సరే...</translation>
@@ -2129,6 +2148,7 @@
 <translation id="3827774300009121996">&amp;పూర్తి స్క్రీన్</translation>
 <translation id="3828029223314399057">బుక్‌మార్క్‌లను వెతుకు</translation>
 <translation id="3829765597456725595">SMB ఫైల్ షేర్</translation>
+<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{మీ నిర్వాహకుడు, హానికరమైనది అయ్యే అవకాశం ఉన్న 1 ఎక్స్‌టెన్షన్‌ను తిరిగి ఆన్ చేశారు}other{మీ నిర్వాహకుడు, హానికరమైనవి అయ్యే అవకాశం ఉన్న {NUM_EXTENSIONS} ఎక్స్‌టెన్షన్‌లను తిరిగి ఆన్ చేశారు}}</translation>
 <translation id="3831436149286513437">Google డిస్క్ శోధన సూచనలు</translation>
 <translation id="383161972796689579">ఈ పరికరం యొక్క యజమాని కొత్త‌ వినియోగదారులను జోడించడం నిలిపివేశారు</translation>
 <translation id="3834775135533257713"><ph name="TO_INSTALL_APP_NAME" /> యాప్ "<ph name="INSTALLED_APP_NAME" />"కి వైరుధ్యంగా ఉన్నందున దాన్ని జోడించలేరు.</translation>
@@ -2304,6 +2324,7 @@
 <translation id="4047726037116394521">హోమ్‌కు వెళ్లు</translation>
 <translation id="4050225813016893843">ప్రామాణీకరణ పద్ధతి</translation>
 <translation id="4052120076834320548">చిన్న</translation>
+<translation id="4056908315660577142"><ph name="APP_NAME" /> Chrome యాప్‌కు మీ తల్లి/తండ్రి సెట్ చేసిన సమయ పరిమితిని మీరు చేరుకున్నారు. మీరు రేపు దానిని <ph name="TIME_LIMIT" /> సమయం ఉపయోగించవచ్చు.</translation>
 <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation>
 <translation id="4057896668975954729">స్టోర్‌లో వీక్షించండి</translation>
 <translation id="4058647953897694817">బ్లూటూత్ ద్వారా ధృవీకరించు</translation>
@@ -2435,6 +2456,7 @@
 <translation id="424963718355121712">యాప్‌లు తప్పనిసరిగా అవి ప్రభావితమయ్యే హోస్ట్ నుండి అందించబడాలి</translation>
 <translation id="4250229828105606438">స్క్రీన్‌షాట్</translation>
 <translation id="4250680216510889253">కాదు</translation>
+<translation id="4252035718262427477">వెబ్‌పేజీ, ఒక ఫైల్ (వెబ్ బండిల్)</translation>
 <translation id="4252852543720145436">రక్షిత కంటెంట్ ఐడెంటిఫైయర్‌లు</translation>
 <translation id="4252899949534773101">బ్లూటూత్ నిలిపివేయబడింది</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - ట్యాబ్ కంటెంట్ భాగస్వామ్యం చేయబడింది</translation>
@@ -2530,6 +2552,7 @@
 <translation id="4400963414856942668">మీరు ట్యాబ్‌ను బుక్‌మార్క్ చేయడానికి నక్షత్రం గుర్తును క్లిక్ చేయవచ్చు</translation>
 <translation id="4403775189117163360">వేరొక ఫోల్డర్‌ను ఎంచుకోండి</translation>
 <translation id="4404136731284211429">మళ్లీ స్కాన్ చేయి</translation>
+<translation id="4404843640767531781"><ph name="APP_NAME" />ను మీ తల్లి/తండ్రి బ్లాక్ చేశారు. ఈ యాప్‌ను ఉపయోగించడానికి మీ తల్లి/తండ్రి అనుమతిని అడగండి.</translation>
 <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation>
 <translation id="4408599188496843485">స&amp;హాయం</translation>
 <translation id="4409697491990005945">సరిహద్దులు</translation>
@@ -2599,6 +2622,7 @@
 <translation id="450099669180426158">ఆశ్చర్యార్థక గుర్తు చిహ్నం</translation>
 <translation id="4501530680793980440">తీసివేతను నిర్ధారించండి</translation>
 <translation id="4502423230170890588">ఈ పరికరం నుండి తీసివేయి</translation>
+<translation id="4504374760782163539">{COUNT,plural, =0{కుక్కీలు అనుమతించబడ్డాయి}=1{కుక్కీలు అనుమతించబడ్డాయి, 1 మినహాయింపు}other{కుక్కీలు అనుమతించబడ్డాయి, {COUNT} మినహాయింపులు}}</translation>
 <translation id="4504940961672722399">ఈ చిహ్నంపై క్లిక్ చేయడం ద్వారా లేదా <ph name="EXTENSION_SHORTCUT" />ను నొక్కడం ద్వారా ఈ ఎక్స్‌టెన్ష‌న్‌ను ఉపయోగించండి.</translation>
 <translation id="4508051413094283164">అన్నింటినీ అజ్ఞాత విండోలో తెరవండి</translation>
 <translation id="4508265954913339219">సక్రియం  చేయడం విఫలమైంది</translation>
@@ -2711,6 +2735,7 @@
 <translation id="465878909996028221">కేవలం http, https, ఫైల్ ప్రోటోకాల్‌లు మాత్రమే బ్రౌజర్ మళ్లింపులకు మద్దతిస్తాయి.</translation>
 <translation id="4659077111144409915">ప్రాథమిక ఖాతా</translation>
 <translation id="4660476621274971848">ఆశించిన వెర్షన్ "<ph name="EXPECTED_VERSION" />", కానీ ఉన్న వెర్షన్ "<ph name="NEW_ID" />"</translation>
+<translation id="4660540330091848931">పరిమాణాన్ని మారుస్తోంది</translation>
 <translation id="4660838440047236328">మీ గది యొక్క లేఅవుట్</translation>
 <translation id="4661407454952063730">కాంటాక్ట్‌లు, మెసేజ్‌లు, ఫోటోలు లాంటి డేటాతో సహా యాప్ సేవ్ చేసిన (డెవలపర్ సెట్టింగ్‌ల ఆధారంగా) ఎలాంటి డేటా అయినా యాప్ డేటా లాగా పరిగణించబడుతుంది.</translation>
 <translation id="4661931051827810091">వెబ్‌లోని అందరు యూజర్‌లకు ప్రమాదం కగించే థ్రెట్స్‌ను గుర్తించి వాటిని బ్లాక్ చేయడంలో సహాయపడేందుకు, మీరు సందర్శించే కొన్ని పేజీల URLలను, కొంత సిస్టమ్ సమాచారాన్ని, కొంత పేజీ కంటెంట్‌ను మీ గుర్తింపు బయటపడకుండా పంపుతుంది.</translation>
@@ -2893,6 +2918,7 @@
 <translation id="4918086044614829423">ఆమోదించు</translation>
 <translation id="4918221908152712722"><ph name="APP_NAME" />ను ఇన్‌స్టాల్ చేయండి (డౌన్‌లోడ్ చేయాల్సిన అవసరం లేదు)</translation>
 <translation id="4920887663447894854">ఈ పేజీలో మీ స్థానాన్ని ట్రాక్ చెయ్యకుండా ఈ క్రింది సైట్‌లు బ్లాక్ చెయ్యబడ్డాయి:</translation>
+<translation id="49226369361073053">{0,plural, =0{ఇప్పుడే పరికరాన్ని అప్‌డేట్ చేయండి}=1{1 సెకను లోపు పరికరాన్ని అప్‌డేట్ చేయండి}other{# సెకన్ల లోపు పరికరాన్ని అప్‌డేట్ చేయండి}}</translation>
 <translation id="492299503953721473">Android యాప్‌లను తీసివేయి</translation>
 <translation id="4923279099980110923">అవును, నేను సహాయం అందించాలనుకుంటున్నాను</translation>
 <translation id="4924352752174756392">12x</translation>
@@ -3043,6 +3069,7 @@
 <translation id="5135085122826131075">మీరు "Ok Google" అని చెప్పడం ద్వారా మీ అసిస్టెంట్‌ను యాక్సెస్ చేయండి.</translation>
 <translation id="5135533361271311778">బుక్‌మార్క్ అంశాన్ని సృష్టించలేకపోయాము.</translation>
 <translation id="5137501176474113045">ఈ అంశాన్ని తొలగించు</translation>
+<translation id="5138982052046316113">Linux డిస్క్ పరిమాణాన్ని మార్చండి</translation>
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> శోధన</translation>
 <translation id="5139823398361067371">మీ సెక్యూరిటీ కీకి చెందిన పిన్‌ను నమోదు చేయండి. మీకు పిన్ తెలియకపోతే, మీరు 'సెక్యూరిటీ కీ'ని రీసెట్ చేయాలి.</translation>
 <translation id="5139955368427980650">&amp;తెరువు</translation>
@@ -3198,6 +3225,7 @@
 <translation id="5353252989841766347">Chrome నుండి పాస్‌వర్డ్‌లను ఎగుమతి చేయండి</translation>
 <translation id="5355099869024327351">మీకు నోటిఫికేషన్‌లను చూపించడానికి అసిస్టెంట్‌ను అనుమతించండి</translation>
 <translation id="5355926466126177564">మీరు ఓమ్నిబాక్స్ నుండి వెతికేటప్పుడు చూపబడే పేజీని "<ph name="EXTENSION_NAME" />" ఎక్స్‌టెన్షన్ మార్చింది.</translation>
+<translation id="535911077628776608"><ph name="FILE_NAME" /> ప్రమాదకరమైనది కావచ్చు. స్కాన్ చేయడానికి Google అధునాతన రక్షణకు పంపాలా? డౌన్‌లోడ్‌ల బార్ ప్రాంతంలోకి వెళ్లడం కోసం 'Shift+F6' నొక్కండి.</translation>
 <translation id="5359910752122114278">1 ఫలితం</translation>
 <translation id="5360150013186312835">సాధనపట్టీలో చూపండి</translation>
 <translation id="5362741141255528695">వ్యక్తిగత కీ ఫైల్‌ను ఎంచుకోండి.</translation>
@@ -3336,6 +3364,7 @@
 <translation id="5539221284352502426">మీరు నమోదు చేసిన పాస్‌వర్డ్‌ను సర్వర్ తిరస్కరించింది. సంభావ్య కారణాలు: పాస్‌వర్డ్ చాలా చిన్నదిగా ఉంది. పాస్‌వర్డ్ తప్పనిసరిగా సంఖ్యలు లేదా గుర్తులను కలిగి ఉండాలి. మునుపు ఉపయోగించిన పాస్‌వర్డ్‌లలో దేనినీ తిరిగి ఉపయోగించకూడదు.</translation>
 <translation id="5541694225089836610">మీ నిర్వాహకుల ద్వారా చర్య నిలిపివేయబడింది</translation>
 <translation id="5542132724887566711">ప్రొఫైల్</translation>
+<translation id="5542133445231529202">ఆ పరికరాన్ని వెంటనే అప్‌డేట్ చేయమని <ph name="ORGANIZATION_NAME" /> తెలియజేస్తోంది.</translation>
 <translation id="5542750926112347543"><ph name="DOMAIN" /> నుండి కుక్కీలు బ్లాక్ చేయబడ్డాయి</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" />కు కనెక్ట్ చేయబడుతోంది</translation>
 <translation id="5543983818738093899">స్థితి కోసం తనిఖీ చేస్తోంది...</translation>
@@ -3381,6 +3410,7 @@
 <translation id="5593357315997824387">నా ఫైల్‌లను సమకాలీకరించు</translation>
 <translation id="5595152862129936745">చాలా దూరంగా ఉండాలి</translation>
 <translation id="5595485650161345191">చిరునామాను సవరించు</translation>
+<translation id="5595727715083333657">మీ కంటైనర్ పరిమాణాన్ని మార్చడానికి సపోర్ట్ చేయదు. Linux (బీటా)కు ముందుగానే కేటాయించిన ఖాళీని సర్దుబాటు చేయడానికి, బ్యాకప్ చేసి, ఆపై కొత్త కంటైనర్‌లో రీస్టోర్ చేయండి.</translation>
 <translation id="5596627076506792578">మరిన్ని ఎంపికలు</translation>
 <translation id="5600706100022181951"><ph name="UPDATE_SIZE_MB" /> MB మొబైల్ డేటాను ఉపయోగించి అప్‌డేట్‌ డౌన్‌లోడ్ చేయబడుతుంది. మీరు కొనసాగాలని అనుకుంటున్నారా?</translation>
 <translation id="5601503069213153581">PIN</translation>
@@ -3453,6 +3483,7 @@
 <translation id="5691511426247308406">కుటుంబం</translation>
 <translation id="5691772641933328258">వేలిముద్ర గుర్తించబడలేదు</translation>
 <translation id="5692183275898619210">ముద్రణ పూర్తయింది</translation>
+<translation id="5692875591060376599">ఎంచుకున్న ఫైల్ తెలియనిది, అలాగే ప్రమాదకరం కావచ్చు. స్కాన్ చేయడానికి Google అధునాతన రక్షణకు పంపాలా?</translation>
 <translation id="569425414730375234">ప్రస్తుత అజ్ఞాత సెషన్: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation>
 <translation id="5696143504434933566">"<ph name="EXTENSION_NAME" />" నుండి దుర్వినియోగాన్ని నివేదించు</translation>
 <translation id="5696679855467848181">వినియోగంలో ఉన్న ప్రస్తుత PPD ఫైల్: <ph name="PPD_NAME" /></translation>
@@ -3664,6 +3695,7 @@
 <translation id="5976160379964388480">ఇతర</translation>
 <translation id="5978277834170881274">ప్రాథమిక స్పెల్ చెక్‌ను &amp;ఉపయోగించు</translation>
 <translation id="5979084224081478209">పాస్‌వర్డ్‌లను తనిఖీ చేయి</translation>
+<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{మీరు హానికరమైనది అయ్యే అవకాశం ఉన్న 1 ఎక్స్‌టెన్షన్‌ను తిరిగి ఆన్ చేశారు}other{మీరు హానికరమైనవి అయ్యే అవకాశం ఉన్న {NUM_EXTENSIONS} ఎక్స్‌టెన్షన్‌లను తిరిగి ఆన్ చేశారు}}</translation>
 <translation id="5979421442488174909"><ph name="LANGUAGE" />కు &amp;అనువదించు</translation>
 <translation id="5979469435153841984">పేజీలను బుక్‌మార్క్ చేయాలంటే, చిరునామా బార్‌లో ఉన్న నక్షత్రాన్ని క్లిక్ చేయండి</translation>
 <translation id="5984222099446776634">ఇటీవల సందర్శించినవి</translation>
@@ -3914,6 +3946,7 @@
 <translation id="6309510305002439352">మైక్రోఫోన్ ఆఫ్ చేయబడింది</translation>
 <translation id="6311220991371174222">మీ ప్రొఫైల్‌ను తెరుస్తున్నప్పుడు ఏదో తప్పు జరిగినందున Chromeను తెరవడం సాధ్యపడలేదు. Chromeను పునఃప్రారంభించడానికి ప్రయత్నించండి.</translation>
 <translation id="6312403991423642364">తెలియని నెట్‌వర్క్ ఎర్రర్</translation>
+<translation id="6312567056350025599">{NUM_DAYS,plural, =1{భద్రతా తనిఖీ జరిగి 1 రోజు అయింది}other{భద్రతా తనిఖీ జరిగి {NUM_DAYS} రోజులు అయింది}}</translation>
 <translation id="6312638141433622592">సపోర్ట్ ఉన్న సందర్భాలలో, రీడర్ మోడ్‌లో కథనాలను చూడగలిగే అవకాశం అందిస్తుంది</translation>
 <translation id="6313641880021325787">VRని నిష్క్రమించు</translation>
 <translation id="6314819609899340042">మీరు ఈ <ph name="IDS_SHORT_PRODUCT_NAME" /> పరికరంలో డీబగ్గింగ్ ఫీచ‌ర్‌లను విజయవంతంగా ప్రారంభించారు.</translation>
@@ -3929,6 +3962,7 @@
 <translation id="6325191661371220117">ఆటో-లాంఛ్‌ను నిలిపివేయి</translation>
 <translation id="6326175484149238433">Chrome నుండి తీసివేయండి</translation>
 <translation id="6326855256003666642">సక్రియ కార్యాచరణల గణన</translation>
+<translation id="632707535499064463">గడువుకు ముందే పరికరాన్ని అప్‌డేట్ చేయమని <ph name="ORGANIZATION_NAME" /> తెలియజేస్తోంది.</translation>
 <translation id="6327785803543103246">వెబ్ ప్రాక్సీ స్వీయశోధన</translation>
 <translation id="6333064448949140209">ఫైల్ డీబగ్గింగ్ కోసం Googleకు పంపబడుతుంది</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> కోసం కొత్త ప్రొఫైల్‌ను సృష్టించు</translation>
@@ -3955,11 +3989,13 @@
 <translation id="6366190659675876144">ప్రామాణిక రక్షణ</translation>
 <translation id="636850387210749493">ఎంటర్‌ప్రైజ్ నమోదు</translation>
 <translation id="6370021412472292592">మానిఫెస్ట్‌ను లోడ్ చేయడం సాధ్యపడలేదు.</translation>
+<translation id="6371486244597785139">{NUM_PASSWORDS,plural, =1{పాస్‌వర్డ్‌ను మార్చండి}other{పాస్‌వర్డ్‌లను మార్చండి}}</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">మళ్లీ ప్రయత్నించు</translation>
 <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' అనే దానికి 1 ఫలితం మాత్రమే లభించింది</translation>
 <translation id="6380143666419481200">అంగీకరించి, కొనసాగండి</translation>
 <translation id="6384275966486438344">మీ శోధన సెట్టింగ్‌లను దీనికి మార్చండి: <ph name="SEARCH_HOST" /></translation>
+<translation id="6385149369087767061">ఇంటర్నెట్‌కు కనెక్ట్ చేసి, మళ్లీ ప్రయత్నించండి</translation>
 <translation id="6385543213911723544">సైట్‌లు కుక్కీ డేటాను సేవ్ చేయగలవు మరియు చదవగలవు</translation>
 <translation id="6386099547750337629">ఇది అనూహ్యమైనదైతే, దయచేసి మద్దతును సంప్రదించండి.</translation>
 <translation id="6387674443318562538">నిలువుగా విభజించు</translation>
@@ -4038,6 +4074,7 @@
 <translation id="6478248366783946499">అపాయకరమైన ఫైల్‌ను ఉంచాలా?</translation>
 <translation id="6483485061007832714">డౌన్‌లోడ్ చేసినది తెరువు</translation>
 <translation id="6483805311199035658"><ph name="FILE" /> ని తెరుస్తుంది...</translation>
+<translation id="6485092675191826776">Plugin VM లైసెన్స్ గడువు ముగిసింది</translation>
 <translation id="6488384360522318064">భాషను ఎంచుకోండి</translation>
 <translation id="648927581764831596">ఏవీ అందుబాటులో లేవు</translation>
 <translation id="6490471652906364588">USB-C పరికరం (కుడి పోర్ట్)</translation>
@@ -4227,6 +4264,7 @@
 <translation id="6762833852331690540">ఆన్‌లో ఉంది</translation>
 <translation id="6767566652486411142">మరొక భాషను ఎంచుకోండి...</translation>
 <translation id="6767639283522617719">డొమైన్‌కు చేర్చడం సాధ్యపడలేదు. సంస్థాగత యూనిట్ యొక్క సెట్టింగ్‌లు సరిగ్గా ఉన్నాయని నిర్ధారించుకోండి.</translation>
+<translation id="6769557323306147204">ఈ పరికరాన్ని అప్‌డేట్ చేయమని <ph name="ORGANIZATION_NAME" /> మీకు తెలియజేస్తోంది.</translation>
 <translation id="6769712124046837540">ప్రింటర్‌ని జోడిస్తోంది...</translation>
 <translation id="6770664076092644100">NFC ద్వారా ధృవీకరించు</translation>
 <translation id="6771503742377376720">ప్రమాణపత్ర అధికారం</translation>
@@ -4357,6 +4395,7 @@
 <translation id="6943836128787782965">HTTP పొందడంలో విఫలమైంది</translation>
 <translation id="6945221475159498467">ఎంచుకోండి</translation>
 <translation id="694592694773692225">మళ్ళింపు ఈ పేజీలో బ్లాక్ చేయబడింది.</translation>
+<translation id="6947526360212886241">{NUM_PASSWORDS,plural, =1{1 చోరీకి గురైన పాస్‌వర్డ్}other{{NUM_PASSWORDS} చోరీకి గురైన పాస్‌వర్డ్‌లు}}</translation>
 <translation id="6949434160682548041">పాస్‌వర్డ్ (ఐచ్ఛికం)</translation>
 <translation id="6950627417367801484">యాప్‌లను పునరుద్ధరించండి</translation>
 <translation id="6950943362443484797">మేము మీ కోసం ఆ యాప్‌ని ఇన్‌స్టాల్ చేస్తాము</translation>
@@ -4439,6 +4478,7 @@
 <translation id="7053983685419859001">నిరోధించు</translation>
 <translation id="7055152154916055070">మళ్లింపు బ్లాక్ చేయబడింది:</translation>
 <translation id="7056526158851679338">&amp;పరికరాలను పర్యవేక్షించు</translation>
+<translation id="7057184853669165321">{NUM_MINS,plural, =1{భద్రతా తనిఖీ జరిగి 1 నిమిషం అయింది}other{భద్రతా తనిఖీ జరిగి {NUM_MINS} నిమిషాలు అయింది}}</translation>
 <translation id="7057767408836081338">యాప్ డేటాను పొందడంలో సమస్య ఉంది, యాప్‌ను రన్ చేయడానికి ప్రయత్నిస్తోంది...</translation>
 <translation id="7059858479264779982">స్వీయ-ప్రారంభానికి సెట్ చేయి</translation>
 <translation id="7059893117020417984">ప్రైవేట్‌గా బ్రౌజ్ చేయ‌డానికి, అజ్ఞాత విండోను తెరవడం కోసం చుక్కల చిహ్నం మెనూను క్లిక్ చేయండి.</translation>
@@ -4682,6 +4722,7 @@
 <translation id="7371006317849674875">ప్రారంభ సమయం</translation>
 <translation id="7371490947952970241">మీరు ఈ పరికరంలో ప్రధాన లొకేషన్ సెట్టింగ్‌ను ఆఫ్ చేయడం ద్వారా లొకేషన్‌ను ఆఫ్ చేయవచ్చు. మీరు లొకేషన్ సెట్టింగ్‌లలో లొకేషన్ కోసం Wi‑Fi, మొబైల్ నెట్‌వర్క్‌లు, సెన్సార్‌ల వినియోగాన్ని కూడా ఆఫ్ చేయవచ్చు.</translation>
 <translation id="7375053625150546623">EAP</translation>
+<translation id="7375235221357833624">{0,plural, =1{ఒక గంట లోపు పరికరాన్ని అప్‌డేట్ చేయండి}other{# గంటల లోపు పరికరాన్ని అప్‌డేట్ చేయండి}}</translation>
 <translation id="7376553024552204454">మౌస్ కర్సర్ జరుగుతున్నప్పుడు దానిని హైలైట్ చేయి</translation>
 <translation id="7377451353532943397">సెన్సార్ యాక్సెస్‌ను బ్లాక్ చేయడం కొనసాగించు</translation>
 <translation id="73786666777299047">Chrome వెబ్ స్టోర్‌ను తెరువు</translation>
@@ -4699,6 +4740,7 @@
 <translation id="7400418766976504921">URL</translation>
 <translation id="7400839060291901923">మీ <ph name="PHONE_NAME" />లో కనెక్షన్‌ని సెటప్ చేయండి</translation>
 <translation id="7401778920660465883">ఈ సందేశాన్ని రద్దు చేయి</translation>
+<translation id="7405938989981604410">{NUM_HOURS,plural, =1{భద్రతా తనిఖీ జరిగి 1 గంట అయింది}other{భద్రతా తనిఖీ జరిగి {NUM_HOURS} గంటలు అయింది}}</translation>
 <translation id="740624631517654988">పాప్-అప్ నిరోధించబడింది</translation>
 <translation id="7407430846095439694">దిగుమతి చేసి, అనుబంధించు</translation>
 <translation id="7407504355934009739">చాలా మంది వ్యక్తులు ఈ సైట్ నుండి నోటిఫికేషన్‌లను బ్లాక్ చేస్తారు</translation>
@@ -4729,6 +4771,7 @@
 <translation id="7441830548568730290">ఇతర వినియోగదారులు</translation>
 <translation id="7442465037756169001">మీ Hangouts Meet hardware సెటప్ చేయడానికి సిద్ధంగా ఉంది.</translation>
 <translation id="744341768939279100">కొత్త ప్రొఫైల్‌ను సృష్టించు</translation>
+<translation id="744366959743242014">డేటా లోడ్ అవుతోంది, దీనికి కొన్ని సెకన్లు పట్టవచ్చు.</translation>
 <translation id="7443806024147773267">మీ Google ఖాతాలో ఎప్పుడు సైన్ ఇన్ చేసినా, మీ పాస్‌వర్డ్‌లను యాక్సెస్ చేయండి</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" />ను నిలిపివేయి</translation>
 <translation id="7448430327655618736">యాప్‌లను ఆటోమేటిక్‌గా ఇన్‌స్టాల్ చేస్తుంది</translation>
@@ -4764,6 +4807,7 @@
 <translation id="7489761397368794366">మీ పరికరం నుండి కాల్ చేయండి</translation>
 <translation id="749028671485790643">వ్యక్తి <ph name="VALUE" /></translation>
 <translation id="7490813197707563893">MAC చిరునామా</translation>
+<translation id="7491963308094506985">{NUM_COOKIES,plural, =1{1 కుక్కీ}other{{NUM_COOKIES} కుక్కీలు}}</translation>
 <translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> ఎక్స్‌టెన్ష‌న్‌, మీరు టైప్ చేసే పాస్‌వర్డ్‌లు, క్రెడిట్ కార్డ్‌ నంబర్‌ల వంటి వ్యక్తిగత డేటాతో సహా మొత్తం వచనాన్ని సేకరించవచ్చు. మీరు ఈ ఎక్స్‌టెన్ష‌న్‌ను ఉపయోగించాలనుకుంటున్నారా?</translation>
 <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="7495778526395737099">మీ పాత పాస్‌వర్డ్‌ను మర్చిపోయారా?</translation>
@@ -4783,10 +4827,14 @@
 <translation id="7513029293694390567">నిల్వ చేసిన ఆధారాలను ఉపయోగించి ఆటోమేటిక్‌గా వెబ్‌సైట్‌లకు సైన్ ఇన్ చేస్తుంది. దీన్ని నిలిపివేస్తే, మీరు వెబ్‌సైట్‌కు సైన్ ఇన్ చేసే ప్రతిసారి నిర్ధారణ కోసం మిమ్మల్ని అడుగుతుంది.</translation>
 <translation id="7514239104543605883">మీ పరికరానికి కాపీ చేయండి</translation>
 <translation id="7514365320538308">డౌన్‌లోడ్ చేయి</translation>
+<translation id="751523031290522286">అడ్మిన్ <ph name="APP_NAME" />ను బ్లాక్ చేశారు. ఈ యాప్‌ను ఉపయోగించడానికి అడ్మిన్‌ను అనుమతి అడగండి.</translation>
+<translation id="7516981202574715431"><ph name="APP_NAME" /> పాజ్ చేయబడింది</translation>
+<translation id="7517063221058203587">{0,plural, =1{1 నిమిషం లోపు పరికరాన్ని అప్‌డేట్ చేయండి}other{# నిమిషాల లోపు పరికరాన్ని అప్‌డేట్ చేయండి}}</translation>
 <translation id="7520766081042531487">అజ్ఞాత పోర్టల్: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7522255036471229694">"Ok Google" చెప్పండి</translation>
 <translation id="7525067979554623046">సృష్టించు</translation>
+<translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{మరో 1}other{మరో {NUM_DOWNLOADS}}}</translation>
 <translation id="7529411698175791732">మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేయండి. సమస్య కొనసాగితే, సైన్ అవుట్ చేసి, మళ్లీ సైన్ ఇన్ చేయడాన్ని ప్రయత్నించండి.</translation>
 <translation id="7530016656428373557">వాట్‌లలో తరుగుదల రేట్</translation>
 <translation id="7531779363494549572">సెట్టింగ్‌లు &gt; యాప్‌లు &amp; నోటిఫికేషన్‌లు &gt; నోటిఫికేషన్‌లలోకి వెళ్లండి.</translation>
@@ -4955,6 +5003,7 @@
 <translation id="7765158879357617694">తరలించు</translation>
 <translation id="7766807826975222231">పర్యటనలో పాల్గొనండి</translation>
 <translation id="7766838926148951335">అనుమతులను ఆమోదించు</translation>
+<translation id="7768770796815395237">మార్చు</translation>
 <translation id="7769672763586021400">మోడల్ ID</translation>
 <translation id="7770651108375708429">Wi-Fiని డిస్‌కనెక్ట్ చేయండి</translation>
 <translation id="7771452384635174008">లేఅవుట్</translation>
@@ -5387,6 +5436,7 @@
 <translation id="8286963743045814739">అజ్ఞాత విండోను ఉపయోగించి మీరు ప్రైవేట్‌గా బ్రౌజ్ చేయవచ్చు</translation>
 <translation id="8287902281644548111">API కాల్/URL ద్వారా శోధించండి</translation>
 <translation id="8288032458496410887"><ph name="APP" />ని అన్‌ఇన్‌స్టాల్ చేయి...</translation>
+<translation id="8289128870594824098">డిస్క్ పరిమాణం</translation>
 <translation id="8291967909914612644">స్వస్థల నెట్‌వర్క్ ప్రదాత దేశం</translation>
 <translation id="8294431847097064396">మూలం</translation>
 <translation id="8297006494302853456">బలహీనం</translation>
@@ -5597,6 +5647,7 @@
 <translation id="8608618451198398104">Kerberos టిక్కెట్‌ను జోడించండి</translation>
 <translation id="8609465669617005112">పైకి తరలించు</translation>
 <translation id="8610103157987623234">ఫార్మాట్ తప్పు, దయచేసి మళ్లీ ప్రయత్నించండి</translation>
+<translation id="8612935480510351790"><ph name="FILE_NAME" /> ప్రమాదకరమైనది కావచ్చు. స్కాన్ చేయడానికి Google అధునాతన రక్షణకు పంపాలా?</translation>
 <translation id="8613164732773110792">లోయర్‌కేస్ అక్షరాలు, అంకెలు, కింది గీతలు లేదా డాష్‌లు మాత్రమే</translation>
 <translation id="8615618338313291042">అజ్ఞాత యాప్: <ph name="APP_NAME" /></translation>
 <translation id="8619803522055190423">నీడను చూపు</translation>
@@ -5624,6 +5675,7 @@
 <translation id="8641606876632989680">చోరీకి గురైన పాస్‌వర్డ్‌తో మీరు సైన్ ఇన్ చేసినప్పుడు, Chrome తెలియజేస్తుంది</translation>
 <translation id="8642900771896232685">2 సెకన్లు</translation>
 <translation id="8642947597466641025">టెక్స్ట్‌ని పెద్దదిగా చెయ్యి</translation>
+<translation id="8643443571868262066"><ph name="FILE_NAME" /> ప్రమాదకరమైనది కావచ్చు. స్కాన్ చేయడానికి Google అధునాతన రక్షణకు పంపాలా?</translation>
 <translation id="8644655801811752511">ఈ సెక్యూరిటీ కీని రీసెట్ చేయలేకపోయింది. కీని ఇన్‌సర్ట్ చేసిన తక్షణం రీసెట్ చేయడానికి ప్రయత్నించండి.</translation>
 <translation id="8645354835496065562">సెన్సార్ యాక్సెన్‌ను అనుమతించడం కొనసాగించు</translation>
 <translation id="8647834505253004544">వెబ్ చిరునామా చెల్లదు</translation>
@@ -6043,6 +6095,7 @@
 <translation id="9169931577761441333"><ph name="APP_NAME" />ను హోమ్ స్క్రీన్‌కు జోడించండి</translation>
 <translation id="9170848237812810038">&amp;అన్డు</translation>
 <translation id="9170884462774788842">మీ కంప్యూటర్‌లోని మరో ప్రోగ్రామ్ జోడించిన థీమ్ కారణంగా Chrome పని చేసే విధానం మారవచ్చు.</translation>
+<translation id="917350715406657904"><ph name="APP_NAME" /> కోసం మీ తల్లి/తండ్రి సెట్ చేసిన సమయ పరిమితిని మీరు చేరుకున్నారు. మీరు రేపు దానిని <ph name="TIME_LIMIT" /> సమయం ఉపయోగించవచ్చు.</translation>
 <translation id="9173995187295789444">బ్లూటూత్ పరికరాల కోసం స్కాన్ చేస్తోంది...</translation>
 <translation id="9174401638287877180">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపడం ద్వారా మీ చిన్నారి Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది మీ చిన్నారిని గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత ఏకీకృత డేటా కూడా Google యాప్‌లకు, Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు.</translation>
 <translation id="917510707618656279">బ్లూటూత్ పరికరాలను సైట్ యాక్సెస్ చేయాలన్నప్పుడు అనుమతి అడగాలి</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 442d683..9b4a77c 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">อัปโหลด</translation>
 <translation id="1244265436519979884">กำลังดำเนินการคืนค่า Linux</translation>
 <translation id="1244303850296295656">ข้อผิดพลาดของส่วนขยาย</translation>
+<translation id="1246158006305844142">แอปและการตั้งค่าของคุณจะซิงค์กับอุปกรณ์ Chrome OS ทั้งหมดที่คุณลงชื่อเข้าใช้ไว้ด้วยบัญชี Google ดูตัวเลือกการซิงค์เบราว์เซอร์ได้ที่<ph name="LINK_BEGIN" />การตั้งค่า Chrome<ph name="LINK_END" /></translation>
 <translation id="1246905108078336582">นำคำแนะนำออกจากคลิปบอร์ดไหม</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> ถูกบล็อกเนื่องจากเลิกใช้งานไปแล้ว</translation>
 <translation id="1251366534849411931">เครื่องหมายวงเล็บปีกกาเปิดที่ต้องมี: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">ไม่เป็นไร ขอบคุณ</translation>
 <translation id="1525740877599838384">ใช้ Wi-Fi เพื่อระบุตำแหน่งเท่านั้น</translation>
 <translation id="152629053603783244">รีสตาร์ท Linux</translation>
+<translation id="1526335046150927198">เปิดใช้การเร่งการเลื่อนทัชแพด</translation>
 <translation id="1526560967942511387">เอกสารที่ไม่ระบุชื่อ</translation>
 <translation id="1529891865407786369">แหล่งพลังงาน</translation>
 <translation id="1530838837447122178">เปิดการตั้งค่าอุปกรณ์เมาส์และทัชแพด</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">กู้คืนการเชื่อมต่อเครือข่ายแล้ว</translation>
 <translation id="2727633948226935816">ไม่ต้องเตือนฉันอีก</translation>
 <translation id="2727712005121231835">ขนาดจริง</translation>
+<translation id="2729314457178420145">รวมถึงล้างข้อมูลการท่องเว็บ (<ph name="URL" />) ซึ่งอาจนำคุณออกจากระบบของ Google.com <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">กำลังสำรองข้อมูลแอปและไฟล์ Linux</translation>
 <translation id="273093730430620027">หน้านี้กำลังเข้าถึงกล้องของคุณ</translation>
 <translation id="2731392572903530958">เ&amp;ปิดหน้าต่างที่ถูกปิดขึ้นใหม่</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> เพิ่มเติม</translation>
 <translation id="3838543471119263078">คุกกี้และข้อมูลอื่นๆ ของเว็บไซต์ ตลอดจนข้อมูลปลั๊กอิน</translation>
 <translation id="383891835335927981">ไม่มีการซูมเข้าหรือซูมออกเว็บไซต์ใดๆ</translation>
+<translation id="3839509547554145593">เปิดใช้การเร่งการเลื่อนเมาส์</translation>
 <translation id="3839516600093027468">บล็อก <ph name="HOST" /> ไม่ให้ดูคลิปบอร์ดเสมอ</translation>
 <translation id="3841964634449506551">รหัสผ่านไม่ถูกต้อง</translation>
 <translation id="3842552989725514455">แบบอักษร Serif</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">รูปภาพและไฟล์ในแคช</translation>
 <translation id="4699357559218762027">(เรียกใช้อัตโนมัติ)</translation>
 <translation id="470074695271471509">ออกจากระบบเพื่อตั้งค่าให้เสร็จไหม</translation>
+<translation id="4701025263201366865">การลงชื่อเข้าใช้ของผู้ปกครอง</translation>
 <translation id="4707302005824653064">การใช้งานและประวัติอาจได้รับการตรวจสอบโดยผู้จัดการ (<ph name="CUSTODIAN_EMAIL" />) ใน chrome.com</translation>
 <translation id="4707579418881001319">L2TP/IPsec + ใบรับรองผู้ใช้</translation>
 <translation id="4708794300267213770">แสดงหน้าจอล็อกเมื่อปลุกให้ทำงานจากโหมดสลีป</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Search</translation>
 <translation id="5139823398361067371">ป้อน PIN ของคีย์ความปลอดภัย หากไม่ทราบ PIN คุณจะต้องรีเซ็ตคีย์ความปลอดภัย</translation>
 <translation id="5139955368427980650">เ&amp;ปิด</translation>
+<translation id="5142793792982256885">ความเร็วในการเลื่อนทัชแพด</translation>
 <translation id="5142961317498132443">การตรวจสอบสิทธิ์</translation>
 <translation id="5143374789336132547">ส่วนขยาย "<ph name="EXTENSION_NAME" />" ได้เปลี่ยนหน้าที่จะแสดงเมื่อคุณคลิกปุ่มหน้าแรก</translation>
 <translation id="5143712164865402236">เข้าสู่โหมดเต็มหน้าจอ</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">สีเหลือง</translation>
 <translation id="5906655207909574370">การอัปเดตใกล้จะเสร็จเรียบร้อยแล้ว รีสตาร์ทอุปกรณ์เพื่อให้การอัปเดตเสร็จสิ้น</translation>
 <translation id="5906732635754427568">ระบบจะนำข้อมูลที่เชื่อมโยงกับแอปนี้ออกจากอุปกรณ์เครื่องนี้</translation>
+<translation id="5908695239556627796">ความเร็วในการเลื่อนเมาส์</translation>
 <translation id="5908769186679515905">บล็อกไม่ให้เว็บไซต์เรียกใช้ Flash</translation>
 <translation id="5910363049092958439">&amp;บันทึกรูปภาพเป็น...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ออฟไลน์</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />หมายเหตุ:<ph name="END_BOLD" />  ระบบจะเริ่มต้นใหม่ระหว่างการดำเนินการ</translation>
 <translation id="7828731929332799387">การดำเนินการนี้จะลบคุกกี้และข้อมูลเว็บไซต์ทั้งหมดที่มีอยู่ในบริบทของบุคคลที่สาม ต้องการทำต่อไหม</translation>
 <translation id="7829298379596169484">กำลังเข้าถึงอินพุตเสียง</translation>
+<translation id="7829877209233347340">ขอให้ผู้ปกครองลงชื่อเข้าใช้เพื่อให้สิทธิ์ในการเพิ่มบัญชีโรงเรียน</translation>
 <translation id="7830594666202422257">เชื่อมต่อกับ Linux</translation>
 <translation id="7831491651892296503">เกิดข้อผิดพลาดในการกำหนดค่าเครือข่าย</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">แมว</translation>
 <translation id="8808744862003883508">ในหน้านี้คุณจะเห็นส่วนขยายทั้งหมดที่ติดตั้งใน Chrome</translation>
 <translation id="8809147117840417135">สีน้ำเงินอมเขียวอ่อน</translation>
+<translation id="8812593354822910461">รวมถึงล้างข้อมูลการท่องเว็บ (<ph name="URL" />) ซึ่งจะนำคุณออกจากระบบของ <ph name="DOMAIN" /> <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">ไม่สามารถลงชื่อเข้าใช้ <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">หน้ากระดาษ</translation>
 <translation id="8813872945700551674">ต้องขอให้ผู้ปกครองอนุมัติ "<ph name="EXTENSION_NAME" />"</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">&amp;เปิดใช้งานการทำแฟ้มประวัติ</translation>
 <translation id="9203904171912129171">เลือกอุปกรณ์</translation>
 <translation id="9203962528777363226">ผู้ดูแลระบบของอุปกรณ์นี้ปิดการใช้งานไม่ให้เพิ่มผู้ใช้ใหม่เข้าไป</translation>
+<translation id="9209689095351280025">เว็บไซต์ต่างๆ จะใช้คุกกี้ที่ติดตามคุณในอินเทอร์เน็ตไม่ได้</translation>
 <translation id="9211177926627870898">ต้องอัปเดต</translation>
 <translation id="9214520840402538427">อ๊ะ! การเริ่มแอตทริบิวต์เวลาการติดตั้งได้หมดเวลาแล้ว โปรดติดต่อตัวแทนการสนับสนุึนของคุณ</translation>
 <translation id="9214695392875603905">คัปเค้ก</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 5800253..a473fe88 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Завантажити</translation>
 <translation id="1244265436519979884">Триває відновлення Linux</translation>
 <translation id="1244303850296295656">Помилка розширення</translation>
+<translation id="1246158006305844142">Ваші додатки й налаштування буде синхронізовано на всіх пристроях з ОС Chrome, де ви ввійшли в обліковий запис Google. Щоб переглянути параметри синхронізації веб-переглядача, перейдіть у <ph name="LINK_BEGIN" />налаштування Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Видалити пропозицію з буфера обміну?</translation>
 <translation id="1249643471736608405">Плагін <ph name="PLUGIN_NAME" /> заблоковано, оскільки він більше не підтримується</translation>
 <translation id="1251366534849411931">Очікується ліва фігурна дужка: <ph name="ERROR_LINE" /></translation>
@@ -391,6 +392,7 @@
 <translation id="1524563461097350801">Ні, дякую</translation>
 <translation id="1525740877599838384">Визначати місцезнаходження лише за допомогою Wi-Fi</translation>
 <translation id="152629053603783244">Перезапустити Linux</translation>
+<translation id="1526335046150927198">Увімкнути прискорення прокрутки сенсорною панеллю</translation>
 <translation id="1526560967942511387">Документ без імені</translation>
 <translation id="1529891865407786369">Джерело живлення</translation>
 <translation id="1530838837447122178">Відкрити налаштування миші та сенсорної панелі</translation>
@@ -1313,6 +1315,7 @@
 <translation id="2725200716980197196">З’єднання з мережею відновлено</translation>
 <translation id="2727633948226935816">Більше не нагадувати</translation>
 <translation id="2727712005121231835">Дійсний розмір</translation>
+<translation id="2729314457178420145">Також видалити дані веб-перегляду (<ph name="URL" />), що може призвести до виходу з облікового запису на сайті Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Створення резервних копій додатків і файлів Linux</translation>
 <translation id="273093730430620027">Ця сторінка має доступ до вашої камери.</translation>
 <translation id="2731392572903530958">В&amp;ідкрити закрите вікно знову</translation>
@@ -2164,6 +2167,7 @@
 <translation id="3838486795898716504">Інші <ph name="PAGE_TITLE" /></translation>
 <translation id="3838543471119263078">Файли cookie й інші дані із сайтів і плагінів</translation>
 <translation id="383891835335927981">Масштабування сайтів не змінено</translation>
+<translation id="3839509547554145593">Увімкнути прискорення прокрутки мишею</translation>
 <translation id="3839516600093027468">Завжди забороняти сайту <ph name="HOST" /> переглядати буфер обміну</translation>
 <translation id="3841964634449506551">Пароль недійсний</translation>
 <translation id="3842552989725514455">Шрифт Serif</translation>
@@ -2775,6 +2779,7 @@
 <translation id="4699172675775169585">Кешовані зображення та файли</translation>
 <translation id="4699357559218762027">(автозапуск)</translation>
 <translation id="470074695271471509">Вийти, щоб завершити?</translation>
+<translation id="4701025263201366865">Вхід для батьків</translation>
 <translation id="4707302005824653064">Адміністратор (<ph name="CUSTODIAN_EMAIL" />) може переглядати дії й історію на сайті chrome.com.</translation>
 <translation id="4707579418881001319">L2TP/IPSec + Сертифікат користувача</translation>
 <translation id="4708794300267213770">Показувати заблокований екран, коли пристрій виходить із режиму сну</translation>
@@ -3082,6 +3087,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, Пошук <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation>
 <translation id="5139823398361067371">Введіть PIN-код ключа безпеки. Якщо ви не знаєте PIN-код, потрібно скинути ключ безпеки.</translation>
 <translation id="5139955368427980650">&amp;Відкрити</translation>
+<translation id="5142793792982256885">Швидкість прокрутки за допомогою сенсорної панелі</translation>
 <translation id="5142961317498132443">Автентифікація</translation>
 <translation id="5143374789336132547">Розширення "<ph name="EXTENSION_NAME" />" змінило сторінку, яка відкривається під час натискання кнопки "Домашня сторінка".</translation>
 <translation id="5143712164865402236">Увійти в повноекранний режим</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Жовтий</translation>
 <translation id="5906655207909574370">Майже оновлено. Перезапустіть пристрій, щоб завершити оновлення.</translation>
 <translation id="5906732635754427568">Дані, пов’язані з цим додатком, буде видалено з пристрою.</translation>
+<translation id="5908695239556627796">Швидкість прокрутки мишею</translation>
 <translation id="5908769186679515905">Не дозволяти сайтам запускати Flash</translation>
 <translation id="5910363049092958439">Збер&amp;егти зображення як...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> у режимі офлайн</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Примітка.<ph name="END_BOLD" /> Під час процедури система перезавантажиться.</translation>
 <translation id="7828731929332799387">Буде видалено всі файли cookie та дані із сайтів, доступні в ресурсах третіх сторін. Продовжити?</translation>
 <translation id="7829298379596169484">Отримання доступу до аудіовходу</translation>
+<translation id="7829877209233347340">Щоб додати обліковий запис навчального закладу, попросіть когось із батьків увійти в їхній обліковий запис</translation>
 <translation id="7830594666202422257">Підключити до Linux</translation>
 <translation id="7831491651892296503">Помилка налаштування мережі</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5845,6 +5853,7 @@
 <translation id="8808686172382650546">Кіт</translation>
 <translation id="8808744862003883508">На цій сторінці можна переглянути всі розширення, установлені в Chrome.</translation>
 <translation id="8809147117840417135">Світло-бірюзовий</translation>
+<translation id="8812593354822910461">Також видалити дані веб-перегляду (<ph name="URL" />), що може призвести до виходу з облікового запису на сайті <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Не вдається ввійти в обліковий запис <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">аркуш паперу</translation>
 <translation id="8813872945700551674">Поклич когось із батьків, щоб вони дозволили розширення "<ph name="EXTENSION_NAME" />"</translation>
@@ -6134,6 +6143,7 @@
 <translation id="9203398526606335860">&amp;Профілювання ввімкнено</translation>
 <translation id="9203904171912129171">Виберіть пристрій</translation>
 <translation id="9203962528777363226">Адміністратор цього пристрою вимкнув можливість додавати нових користувачів</translation>
+<translation id="9209689095351280025">Сайти не можуть використовувати файли cookie, щоб відстежувати ваші дії в Інтернеті</translation>
 <translation id="9211177926627870898">Потрібне оновлення</translation>
 <translation id="9214520840402538427">На жаль, ініціалізація атрибутів часу встановлення минула. Зв’яжіться з представником служби підтримки.</translation>
 <translation id="9214695392875603905">Кекс</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index c8216477..6d69621 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -745,7 +745,7 @@
 <translation id="1990512225220753005">اس صفحہ پر شارٹ کٹس نہ دکھائیں</translation>
 <translation id="1992397118740194946">سیٹ نہیں ہے</translation>
 <translation id="1994173015038366702">‏سائٹ کا URL</translation>
-<translation id="1995916364271252349">سائٹس کون سی معلومات استعمال اور دکھا سکتی ہے (مقام، کیمرا، پاپ اپس، اور بہت کچھ) کو کنٹرول کرتا ہے</translation>
+<translation id="1995916364271252349">سائٹس کون سی معلومات استعمال اور دکھا سکتی ہیں (مقام، کیمرا، پاپ اپس، اور بہت کچھ) کو کنٹرول کرتا ہے</translation>
 <translation id="1997484222658892567"><ph name="URL" /> آپ کے مقامی کمپیوٹر پر مستقل طور پر بڑا ڈیٹا اسٹور کرنا چاہتا ہے</translation>
 <translation id="1997616988432401742">آپ کے سرٹیفیکیٹس</translation>
 <translation id="1999115740519098545">شروعات میں</translation>
@@ -2028,7 +2028,7 @@
 <translation id="3688526734140524629">چینل تبدیل کریں</translation>
 <translation id="3688578402379768763">اپ ٹو ڈیٹ</translation>
 <translation id="3688794912214798596">زبانیں تبدیل کریں...</translation>
-<translation id="3690369331356918524">اگر پاس ورڈز ڈیٹا کی خلاف ورزی میں افشاء ہوتے ہیں تو وارننگ حاصل کریں</translation>
+<translation id="3690369331356918524">اگر پاس ورڈز ڈیٹا کی خلاف ورزی میں افشاء ہوتے ہیں تو آپ کو متنبہ کرتی ہے</translation>
 <translation id="3691231116639905343">کی بورڈ ایپس</translation>
 <translation id="3691267899302886494"><ph name="HOST" /> آپ کی اسکرین کا اشتراک کرنا چاہتا ہے</translation>
 <translation id="369135240373237088">اسکول کے اکاؤنٹ کے ساتھ دوبارہ سائن ان کریں</translation>
@@ -2755,7 +2755,7 @@
 <translation id="4665446389743427678"><ph name="SITE" /> کا اسٹور کردہ تمام ڈیٹا حذف ہو جائے گا۔</translation>
 <translation id="4668721319092543482"><ph name="PLUGIN_NAME" /> کو فعال کرنے کیلئے کلک کریں</translation>
 <translation id="4670064810192446073">ورچوئل رئیلٹی</translation>
-<translation id="4672879467403304774">‏آپ کے سائن ان ہونے پر آپ کو Chrome اور دیگر Google ایپس پر محفوظ رکھتا ہے</translation>
+<translation id="4672879467403304774">‏آپ کے سائن ان ہونے پر آپ کو Chrome اور دیگر Google ایپس پر محفوظ رکھتی ہے</translation>
 <translation id="46733273239502219">انسٹال کردہ ایپس میں آف لائن ڈیٹا بھی صاف ہو جائے گا</translation>
 <translation id="4673442866648850031">اسٹائلس کو ہٹانے کے وقت اسٹائلس ٹولز کھولیں</translation>
 <translation id="4677772697204437347">‏GPU میموری</translation>
@@ -4277,7 +4277,7 @@
 <translation id="6767639283522617719">ڈومین میں شامل نہیں کیا جا سکا۔ یقینی بنائیں کہ ترتیبات تنظیمی یونٹ کے لیے درست ہیں۔</translation>
 <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> تجویز کرتا ہے کہ آپ اس آلہ کو اپ ڈیٹ کریں۔</translation>
 <translation id="6769712124046837540">پرنٹر کو شامل کیا جا رہا ہے…</translation>
-<translation id="6770602306803890733">آپ کے لیے اور ویب پر سبھی کے لیے سیکیورٹی کو بہتر بناتا ہے</translation>
+<translation id="6770602306803890733">آپ کے لیے اور ویب پر سبھی کے لیے سیکیورٹی کو بہتر بناتی ہے</translation>
 <translation id="6770664076092644100">‏NFC کے ذریعے توثیق کریں</translation>
 <translation id="6771503742377376720">ایک سرٹیفیکیشن ادارہ ہے</translation>
 <translation id="6772339735733515807">اپنی ایکسٹینشنز کا نظم کریں</translation>
@@ -4423,7 +4423,7 @@
 <translation id="6965382102122355670">ٹھیک ہے</translation>
 <translation id="6965648386495488594">پورٹ</translation>
 <translation id="6965978654500191972">آلہ</translation>
-<translation id="6966201992886493384">سائٹس آپ کے براؤزنگ کے تجربہ کو، مثال کے طور پر، آپ کو سائن ان رکھنے یا آپ کے شاپنگ کارٹ میں آئٹمز کو یاد رکھنے کے لیے، بہتر بنانے کے لیے کوکیز کا استعمال کر سکتی ہیں</translation>
+<translation id="6966201992886493384">سائٹس آپ کے براؤزنگ کے تجربہ کو، مثال کے طور پر، آپ کو سائن ان رکھنے یا آپ کی شاپنگ کارٹ میں آئٹمز کو یاد رکھنے کے لیے، بہتر بنانے کے لیے کوکیز کا استعمال کر سکتی ہیں</translation>
 <translation id="696780070563539690">سائٹس کوکیز کے ذریعے مختلف سائٹس پر، مثال کے طور پر، اشتہارات کو ذاتی نوعیت کا بنانے کے لیے، آپ کی براؤزنگ کی سرگرمی نہیں دیکھ سکتی ہیں</translation>
 <translation id="6968288415730398122">اسکرین لاک کنفیگر کرنے کیلئے اپنا پاس ورڈ درج کریں</translation>
 <translation id="6970480684834282392">شروعات کی قسم</translation>
@@ -4839,7 +4839,7 @@
 <translation id="7507207699631365376">اس فراہم کنندہ کی <ph name="BEGIN_LINK" />راز داری کی پالیسی<ph name="END_LINK" /> دیکھیں</translation>
 <translation id="7507930499305566459">صورتحال کا جواب دہندہ سرٹیفیکیٹ</translation>
 <translation id="7508054832109420082">پرنٹرز تک رسائی دیں</translation>
-<translation id="751120035300339">سائٹس آپ کے براؤزنگ کے تجربہ کو، مثال کے طور پر، آپ کو سائن ان رکھنے یا آپ کے شاپنگ کارٹ میں آئٹمز کو یاد رکھنے کے لیے، بہتر بنانے کے لیے کوکیز کا استعمال نہیں کر سکتی ہیں</translation>
+<translation id="751120035300339">سائٹس آپ کے براؤزنگ کے تجربہ کو، مثال کے طور پر، آپ کو سائن ان رکھنے یا آپ کی شاپنگ کارٹ میں آئٹمز کو یاد رکھنے کے لیے، بہتر بنانے کے لیے کوکیز کا استعمال نہیں کر سکتی ہیں</translation>
 <translation id="7513029293694390567">اسٹور کردہ اسناد کا استعمال کر کے ویب سائٹس میں خود کار طور پر سائن ان کریں۔ خصوصیت غیر فعال ہونے پر، ویب سائٹ میں سائن ان کرنے سے پہلے ہر بار آپ سے توثیق کرنے کو کہا جائے گا۔</translation>
 <translation id="7514239104543605883">اپنے آلہ پر کاپی کریں</translation>
 <translation id="7514365320538308">ڈاؤن لوڈ کریں</translation>
@@ -5532,7 +5532,7 @@
 <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> نیٹ ورک، منسلک ہو رہا ہے</translation>
 <translation id="8410775397654368139">Google Play</translation>
 <translation id="8413385045638830869">پہلے پوچھیں (تجویز کردہ)</translation>
-<translation id="8417573335434189196">‏خطرناک ویب سائٹس، ڈاؤن لوڈز یا ایکسٹینشنز سے آپ کی حفاظت نہیں کرتا ہے۔ Chrome اس ترتیب کی تجویز نہیں کرتا ہے۔</translation>
+<translation id="8417573335434189196">‏خطرناک ویب سائٹس، ڈاؤن لوڈز یا ایکسٹینشنز سے آپ کی حفاظت نہیں کرتی ہے۔ Chrome اس ترتیب کی تجویز نہیں کرتا ہے۔</translation>
 <translation id="8418445294933751433">ٹیب کے بطور &amp;دکھائیں</translation>
 <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' کیلئے تلاش کے نتائج</translation>
 <translation id="8419368276599091549">اپنے <ph name="DEVICE_TYPE" /> میں خوش آمدید!</translation>
@@ -5700,7 +5700,7 @@
 <translation id="8643443571868262066">‏<ph name="FILE_NAME" /> خطرناک ہو سکتا ہے۔ اسکیننگ کے لیے Google کے اعلی تحفظ کو بھیجیں؟</translation>
 <translation id="8644655801811752511">اس سیکیورٹی کلید کو دوبارہ ترتیب نہیں دیا جا سکتا۔ کلید داخل کرنے کے بعد اسے فوری طور پر دوبارہ ترتیب دینے کی کوشش کریں۔</translation>
 <translation id="8645354835496065562">سینسر تک رسائی کی اجازت جاری رکھیں</translation>
-<translation id="8645920082661222035">خطرناک ایونٹس ہونے سے پہلے ان کی پیشین گوئی کرتا ہے اور آپ کو ان کے بارے میں متنبہ کرتا ہے</translation>
+<translation id="8645920082661222035">خطرناک ایونٹس ہونے سے پہلے ان کی پیشین گوئی کرتی ہے اور آپ کو ان کے بارے میں متنبہ کرتی ہے</translation>
 <translation id="8647834505253004544">ویب پتہ درست نہیں ہے</translation>
 <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> یا <ph name="RE_SCAN_LINK" /></translation>
 <translation id="8650543407998814195">اگرچہ آپ اپنے پرانے پروفائل تک مزید رسائی حاصل نہیں کر سکتے لیکن آپ اسے اب بھی ہٹا سکتے ہیں۔</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 0682a56..8854fc4 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -52,6 +52,7 @@
 <translation id="1058262162121953039">PUK</translation>
 <translation id="1061745542578250838"><ph name="FILE_NAME" /> chứa nội dung nhạy cảm và đã bị chặn.</translation>
 <translation id="1061904396131502319">Sắp đến giờ nghỉ giải lao</translation>
+<translation id="1064552680598333868">Các thay đổi đối với micrô sẽ có hiệu lực khi bạn khởi động lại Linux vào lần sau.</translation>
 <translation id="1067048845568873861">Đã tạo</translation>
 <translation id="1067291318998134776">Linux (Beta)</translation>
 <translation id="1067922213147265141">Các dịch vụ khác của Google</translation>
@@ -112,6 +113,7 @@
 <translation id="1147991416141538220">Để yêu cầu quyền truy cập, hãy liên hệ với quản trị viên của thiết bị này.</translation>
 <translation id="1149401351239820326">Tháng hết hạn</translation>
 <translation id="1150565364351027703">Kính mát</translation>
+<translation id="1151841030700667295">Bạn sẽ bị đăng xuất khỏi tất cả các trang web, bao gồm cả những thẻ đang mở.</translation>
 <translation id="1151917987301063366">Luôn cho phép <ph name="HOST" /> sử dụng các cảm biến của thiết bị</translation>
 <translation id="1153356358378277386">Thiết bị được ghép nối</translation>
 <translation id="1153636665119721804">Chương trình Bảo vệ nâng cao của Google</translation>
@@ -279,6 +281,7 @@
 <translation id="1386387014181100145">Xin chào!</translation>
 <translation id="138784436342154190">Khôi phục trang khởi động mặc định?</translation>
 <translation id="1390548061267426325">Mở dưới dạng tab thông thường</translation>
+<translation id="1392232653471491344">Cần khởi động lại Linux</translation>
 <translation id="1393283411312835250">Mặt trời và những đám mây</translation>
 <translation id="1393787139683794508">Thao tác này sẽ xóa toàn bộ dữ liệu và cookie mà <ph name="ORIGIN_NAME" /> lưu trữ.</translation>
 <translation id="1395730723686586365">Trình cập nhật đã bắt đầu</translation>
@@ -307,6 +310,7 @@
 <translation id="1420920093772172268"><ph name="TURN_ON_BLUETOOTH_LINK" /> để cho phép ghép nối</translation>
 <translation id="1422159345171879700">Tải tập lệnh không an toàn</translation>
 <translation id="1426410128494586442">Có</translation>
+<translation id="142655739075382478">Đã chặn <ph name="APP_NAME" /></translation>
 <translation id="1426870617281699524">Hãy nhấp vào Thử lại rồi chấp nhận lời nhắc trên máy tính của bạn</translation>
 <translation id="1427269577154060167">Quốc gia</translation>
 <translation id="142758023928848008">Bật phím cố định (để thực hiện phím tắt bằng cách nhập chúng liên tục)</translation>
@@ -345,6 +349,7 @@
 <translation id="1476607407192946488">&amp;Cài đặt ngôn ngữ</translation>
 <translation id="1478340334823509079">Chi tiết: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Cài đặt chưa được bật</translation>
+<translation id="1481537595330271162">Lỗi khi thay đổi dung lượng ổ đĩa</translation>
 <translation id="1482626744466814421">Đánh dấu tab này...</translation>
 <translation id="1483493594462132177">Gửi</translation>
 <translation id="1484979925941077974">Trang web đang sử dụng Bluetooth</translation>
@@ -605,6 +610,7 @@
 <translation id="1805822111539868586">Kiểm tra chế độ xem</translation>
 <translation id="1805888043020974594">Máy chủ máy in</translation>
 <translation id="1805967612549112634">Xác nhận mã PIN</translation>
+<translation id="1806335016774576568">Chuyển sang một ứng dụng đang mở khác</translation>
 <translation id="1809734401532861917">Thêm dấu trang, lịch sử, mật khẩu của tôi và các cài đặt khác vào <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="1813278315230285598">Dịch vụ</translation>
 <translation id="18139523105317219">Tên của Bên EDI</translation>
@@ -691,6 +697,7 @@
 <translation id="1921050530041573580">Ghép nối điện thoại của bạn với ứng dụng Messages</translation>
 <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation>
 <translation id="192494336144674234">Mở bằng</translation>
+<translation id="1925017091976104802">Nhấn <ph name="MODIFIER_KEY_DESCRIPTION" /> để dán</translation>
 <translation id="1925021887439448749">Nhập địa chỉ web tùy chỉnh</translation>
 <translation id="1925124445985510535">Tính năng kiểm tra an toàn đã chạy vào lúc <ph name="TIME" /></translation>
 <translation id="1926339101652878330">Các cài đặt này chịu sự kiểm soát của chính sách doanh nghiệp. Vui lòng liên hệ với quản trị viên của bạn để biết thêm thông tin.</translation>
@@ -836,6 +843,7 @@
 <translation id="2135787500304447609">&amp;Tiếp tục</translation>
 <translation id="2136372518715274136">Nhập mật khẩu mới</translation>
 <translation id="2136476978468204130">Cụm mật khẩu bạn đã nhập không chính xác</translation>
+<translation id="2137122615728646911">{COUNT,plural, =0{Đã chặn các cookie.}=1{Đã chặn các cookie nhưng có 1 trường hợp ngoại lệ}other{Đã chặn các cookie nhưng có {COUNT} trường hợp ngoại lệ}}</translation>
 <translation id="2138398485845393913">Vẫn đang kết nối với "<ph name="DEVICE_NAME" />"</translation>
 <translation id="2139545522194199494">Mạng <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, Cường độ tín hiệu <ph name="SIGNAL_STRENGTH" />%, Do quản trị viên của bạn quản lý, Kết nối</translation>
 <translation id="2139919072249842737">Nút thiết lập</translation>
@@ -1003,11 +1011,13 @@
 <translation id="2346953515226895098">Dịch vụ SODA</translation>
 <translation id="2347644257713614136">Việc sử dụng Hangouts và Cast for Education chịu sự điều chỉnh của Chính sách quyền riêng tư của Google.</translation>
 <translation id="2348176352564285430">Ứng dụng: <ph name="ARC_PROCESS_NAME" /></translation>
+<translation id="234889437187286781">Lỗi khi tải dữ liệu</translation>
 <translation id="2349896577940037438">Nếu bạn bật tùy chọn cài đặt Hoạt động trên web và ứng dụng bổ sung, thì dữ liệu này có thể được lưu vào Tài khoản Google của bạn. Bạn có thể xem, xóa dữ liệu và thay đổi các tùy chọn cài đặt tài khoản của mình tại account.google.com.</translation>
 <translation id="2350133097354918058">Đã tải lại</translation>
 <translation id="2350182423316644347">Đang chạy ứng dụng...</translation>
 <translation id="2350796302381711542">Cho phép <ph name="HANDLER_HOSTNAME" /> mở tất cả liên kết <ph name="PROTOCOL" /> thay vì <ph name="REPLACED_HANDLER_TITLE" />?</translation>
 <translation id="2351266942280602854">Ngôn ngữ và phương thức nhập</translation>
+<translation id="2352495879228166246">{NUM_ITEMS,plural, =1{1 mục}other{{NUM_ITEMS} mục}}</translation>
 <translation id="2352662711729498748">&lt; 1 MB</translation>
 <translation id="2352810082280059586">Ghi chú trên màn hình khóa được tự động lưu vào <ph name="LOCK_SCREEN_APP_NAME" />. Ghi chú mới nhất của bạn sẽ vẫn còn trên màn hình khóa.</translation>
 <translation id="2353297238722298836">Cho phép máy ảnh và micrô</translation>
@@ -1041,6 +1051,7 @@
 <translation id="2392369802118427583">Kích hoạt</translation>
 <translation id="2394566832561516196">Cài đặt sẽ được xóa trong lần tải lại tiếp theo.</translation>
 <translation id="2395616325548404795">Thiết bị <ph name="DEVICE_TYPE" /> của bạn đã được đăng ký thành công cho quản lý doanh nghiệp, nhưng không gửi được thông tin phần tử và vị trí. Vui lòng nhập thủ công thông tin này từ Bảng điều khiển dành cho quản trị viên của thiết bị này.</translation>
+<translation id="2396387085693598316">Quản trị viên đã chặn "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="2396783860772170191">Nhập mã pin có 4 chữ số (0000-9999)</translation>
 <translation id="2399939490305346086">Dữ liệu đăng nhập trên khóa bảo mật</translation>
 <translation id="2400664245143453337">Bạn cần cập nhật ngay</translation>
@@ -1327,6 +1338,7 @@
 <translation id="2753677631968972007">Kiểm soát các quyền của trang web theo cách thủ công.</translation>
 <translation id="2755367719610958252">Quản lý tính năng hỗ trợ tiếp cận</translation>
 <translation id="275662540872599901">màn hình tắt</translation>
+<translation id="2757338480560142065">Đảm bảo mật khẩu bạn đang lưu khớp với mật khẩu trên <ph name="WEBSITE" /></translation>
 <translation id="2762441749940182211">Máy ảnh bị chặn</translation>
 <translation id="2765217105034171413">Nhỏ</translation>
 <translation id="2766161002040448006">Xin phép cha mẹ</translation>
@@ -1579,6 +1591,7 @@
 <translation id="3090819949319990166">Không thể sao chép tệp crx bên ngoài sang <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Đã ghép nối "<ph name="DEVICE_NAME" />"</translation>
 <translation id="3092699946856346803">Vui lòng lắp SIM rồi thử lại</translation>
+<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{Đã tắt 1 tiện ích có thể gây hại. Bạn cũng có thể xóa tiện ích này.}other{Đã tắt {NUM_EXTENSIONS} tiện ích có thể gây hại. Bạn cũng có thể xóa các tiện ích này.}}</translation>
 <translation id="3101709781009526431">Ngày và giờ</translation>
 <translation id="3103941660000130485">Lỗi khi nâng cấp Linux</translation>
 <translation id="310671807099593501">Trang web đang sử dụng Bluetooth</translation>
@@ -1652,6 +1665,7 @@
 <translation id="3201422919974259695">Các thiết bị USB có sẵn sẽ xuất hiện ở đây.</translation>
 <translation id="3202131003361292969">Đường dẫn</translation>
 <translation id="3202173864863109533">Âm thanh của tab này hiện bị tắt.</translation>
+<translation id="3208321278970793882">Ứng dụng</translation>
 <translation id="3208584281581115441">Kiểm tra ngay</translation>
 <translation id="3208703785962634733">Không được xác nhận</translation>
 <translation id="32101887417650595">Không thể kết nối với máy in</translation>
@@ -1672,6 +1686,7 @@
 <translation id="3239373508713281971">Đã xóa giới hạn thời gian đối với <ph name="APP_NAME" /></translation>
 <translation id="3241680850019875542">Chọn thư mục gốc của tiện ích để đóng gói. Để cập nhật tiện ích, bạn cũng chọn tệp khóa cá nhân để sử dụng lại.</translation>
 <translation id="3244294424315804309">Tiếp tục tắt tiếng</translation>
+<translation id="3246107497225150582">{0,plural, =1{Cập nhật thiết bị trong vòng 1 ngày}other{Cập nhật thiết bị trong vòng # ngày}}</translation>
 <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - Lỗi mạng</translation>
 <translation id="3248902735035392926">Vấn đề an toàn rất quan trọng. Hãy dành giây lát để <ph name="BEGIN_LINK" />kiểm tra các tiện ích của bạn ngay bây giờ<ph name="END_LINK" /></translation>
 <translation id="3249950116250264636"><ph name="APP_NAME" /> (<ph name="APP_URL" />)</translation>
@@ -1758,6 +1773,7 @@
 <translation id="3356580349448036450">Hoàn tất</translation>
 <translation id="3359256513598016054">Giới hạn Chính sách của Chứng chỉ</translation>
 <translation id="3360297538363969800">Không in được. Vui lòng kiểm tra máy in và thử lại.</translation>
+<translation id="3364986687961713424">Thông báo của quản trị viên: <ph name="ADMIN_MESSAGE" /></translation>
 <translation id="3365598184818502391">Sử dụng phím Ctrl hoặc Alt</translation>
 <translation id="3367047597842238025">Thiết lập <ph name="DEVICE_TYPE" /> theo cách bạn muốn và khám phá tất cả những khả năng ấn tượng ngay trong tầm tay.</translation>
 <translation id="3368922792935385530">Đã kết nối</translation>
@@ -1862,6 +1878,7 @@
 <translation id="3496213124478423963">Thu Nhỏ</translation>
 <translation id="3497560059572256875">Chia sẻ Doodle</translation>
 <translation id="3498215018399854026">Chúng tôi không thể liên lạc với cha mẹ của bạn vào thời điểm này. Vui lòng thử lại.</translation>
+<translation id="3500417806337761827">Lỗi kết nối mục chia sẻ. Đã có quá nhiều mục chia sẻ của doanh nghiệp vừa và nhỏ (SMB) được liên kết.</translation>
 <translation id="3505030558724226696">Thu hồi quyền truy cập thiết bị</translation>
 <translation id="3507421388498836150">Quyền hiện tại cho "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="3507888235492474624">Quét lại các thiết bị Bluetooth</translation>
@@ -1927,6 +1944,7 @@
 <translation id="3592260987370335752">&amp;Tìm hiểu thêm</translation>
 <translation id="359283478042092570">Nhập</translation>
 <translation id="3593965109698325041">Ràng buộc Tên của Chứng chỉ</translation>
+<translation id="3595381248165458839">Hãy liên hệ với quản trị viên thiết bị của tổ chức bạn</translation>
 <translation id="3596235046596950091">Bật dịch vụ đám mây</translation>
 <translation id="3596414637720633074">Chặn các cookie của bên thứ ba trong chế độ Ẩn danh</translation>
 <translation id="3599221874935822507">Nhô lên</translation>
@@ -2060,6 +2078,7 @@
 <translation id="3742666961763734085">Không tìm thấy đơn vị tổ chức có tên đó. Vui lòng thử lại.</translation>
 <translation id="3744111561329211289">Đồng bộ hóa dưới nền</translation>
 <translation id="3746127522257263495">Các ứng dụng Android không hỗ trợ thao tác thêm tài khoản G Suite cho Giáo dục.</translation>
+<translation id="3747039297326604768">Không thể mở Plugin VM</translation>
 <translation id="3747077776423672805">Để xóa ứng dụng, hãy chuyển đến mục Cài đặt &gt; Cửa hàng Google Play &gt; Quản lý tùy chọn Android &gt; Ứng dụng hoặc Trình quản lý ứng dụng. Tiếp theo, hãy nhấn vào ứng dụng mà bạn muốn gỡ cài đặt (bạn có thể phải vuốt sang phải hoặc trái để tìm ứng dụng đó). Sau đó, hãy nhấn vào Gỡ cài đặt hoặc Tắt.</translation>
 <translation id="3748026146096797577">Chưa được kết nối</translation>
 <translation id="3752582316358263300">OK...</translation>
@@ -2135,6 +2154,7 @@
 <translation id="3827774300009121996">&amp;Toàn Màn hình</translation>
 <translation id="3828029223314399057">Tìm kiếm dấu trang</translation>
 <translation id="3829765597456725595">Chia sẻ tệp SMB</translation>
+<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{Quản trị viên đã bật lại 1 tiện ích có thể gây hại}other{Quản trị viên đã bật lại {NUM_EXTENSIONS} tiện ích có thể gây hại}}</translation>
 <translation id="3831436149286513437">Đề xuất tìm kiếm của Google Drive</translation>
 <translation id="383161972796689579">Chủ sở hữu của thiết bị này đã vô hiệu hóa thêm người dùng mới</translation>
 <translation id="3834775135533257713">Không thể thêm ứng dụng "<ph name="TO_INSTALL_APP_NAME" />" vì ứng dụng này xung đột với "<ph name="INSTALLED_APP_NAME" />".</translation>
@@ -2311,6 +2331,7 @@
 <translation id="4047726037116394521">Chuyển đến màn hình chính</translation>
 <translation id="4050225813016893843">Phương thức xác thực</translation>
 <translation id="4052120076834320548">Rất nhỏ</translation>
+<translation id="4056908315660577142">Bạn đã đạt tới giới hạn thời gian mà cha mẹ bạn đặt cho ứng dụng <ph name="APP_NAME" /> trên Chrome. Bạn có thể dùng ứng dụng này trong <ph name="TIME_LIMIT" /> vào ngày mai.</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>
@@ -2442,6 +2463,7 @@
 <translation id="424963718355121712">Ứng dụng phải được cung cấp từ máy chủ lưu trữ mà chúng ảnh hưởng</translation>
 <translation id="4250229828105606438">Ảnh chụp màn hình</translation>
 <translation id="4250680216510889253">Không</translation>
+<translation id="4252035718262427477">Trang web, Tệp đơn (Web Bundle)</translation>
 <translation id="4252852543720145436">Giá trị nhận dạng cho nội dung được bảo vệ</translation>
 <translation id="4252899949534773101">Bluetooth đã bị tắt</translation>
 <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Đã chia sẻ nội dung tab</translation>
@@ -2537,6 +2559,7 @@
 <translation id="4400963414856942668">Bạn có thể nhấp vào dấu sao để đánh dấu một tab</translation>
 <translation id="4403775189117163360">Chọn một thư mục khác</translation>
 <translation id="4404136731284211429">Quét lại</translation>
+<translation id="4404843640767531781">Cha mẹ bạn đã chặn <ph name="APP_NAME" />. Hãy xin phép cha mẹ cấp quyền sử dụng ứng dụng này.</translation>
 <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation>
 <translation id="4408599188496843485">T&amp;rợ giúp</translation>
 <translation id="4409697491990005945">Lề</translation>
@@ -2606,6 +2629,7 @@
 <translation id="450099669180426158">Biểu tượng dấu chấm than</translation>
 <translation id="4501530680793980440">Xác nhận xóa</translation>
 <translation id="4502423230170890588">Xóa khỏi thiết bị này</translation>
+<translation id="4504374760782163539">{COUNT,plural, =0{Đã cho phép các cookie}=1{Đã cho phép các cookie nhưng có 1 trường hợp ngoại lệ}other{Đã cho phép các cookie nhưng có {COUNT} trường hợp ngoại lệ}}</translation>
 <translation id="4504940961672722399">Sử dụng tiện ích này bằng cách nhấp vào biểu tượng này hoặc bằng cách nhấn <ph name="EXTENSION_SHORTCUT" />.</translation>
 <translation id="4508051413094283164">Mở tất cả trong cửa sổ ẩn danh</translation>
 <translation id="4508265954913339219">Kích hoạt không thành công</translation>
@@ -2719,6 +2743,7 @@
 <translation id="465878909996028221">Chỉ hỗ trợ chuyển hướng trình duyệt cho các giao thức http, https và tệp.</translation>
 <translation id="4659077111144409915">Tài khoản chính</translation>
 <translation id="4660476621274971848">Phiên bản mong muốn là "<ph name="EXPECTED_VERSION" />", nhưng phiên bản phát hiện là "<ph name="NEW_ID" />"</translation>
+<translation id="4660540330091848931">Đang thay đổi dung lượng</translation>
 <translation id="4660838440047236328">cách bài trí phòng của bạn</translation>
 <translation id="4661407454952063730">Dữ liệu ứng dụng có thể là bất kỳ dữ liệu nào mà một ứng dụng đã lưu (dựa trên các tùy chọn cài đặt của nhà phát triển), bao gồm các dữ liệu như danh bạ, tin nhắn và ảnh.</translation>
 <translation id="4661931051827810091">Gửi URL ẩn danh của một số trang mà bạn truy cập, số ít thông tin về hệ thống và một số nội dung trang để giúp khám phá và chặn đứng các mối đe dọa mới nhắm đến tất cả người dùng trên web.</translation>
@@ -2902,6 +2927,7 @@
 <translation id="4918086044614829423">Chấp nhận</translation>
 <translation id="4918221908152712722">Cài đặt <ph name="APP_NAME" /> (không cần tải xuống)</translation>
 <translation id="4920887663447894854">Các trang web sau đã bị chặn theo dõi vị trí của bạn trên trang này:</translation>
+<translation id="49226369361073053">{0,plural, =0{Cập nhật thiết bị ngay}=1{Cập nhật thiết bị trong vòng 1 giây}other{Cập nhật thiết bị trong vòng # giây}}</translation>
 <translation id="492299503953721473">Xóa ứng dụng Android</translation>
 <translation id="4923279099980110923">Vâng, tôi muốn được trợ giúp</translation>
 <translation id="4924352752174756392">12x</translation>
@@ -3052,6 +3078,7 @@
 <translation id="5135085122826131075">Nói "Ok Google" khi bạn muốn sử dụng Trợ lý.</translation>
 <translation id="5135533361271311778">Không thể tạo mục dấu trang.</translation>
 <translation id="5137501176474113045">Xóa mục này</translation>
+<translation id="5138982052046316113">Thay đổi dung lượng ổ đĩa Linux</translation>
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Tìm kiếm</translation>
 <translation id="5139823398361067371">Nhập mã PIN cho khóa bảo mật của bạn. Bạn cần đặt lại khóa bảo mật nếu không biết mã PIN này.</translation>
 <translation id="5139955368427980650">&amp;Mở</translation>
@@ -3208,6 +3235,7 @@
 <translation id="5353252989841766347">Xuất mật khẩu từ Chrome</translation>
 <translation id="5355099869024327351">Cho phép Trợ lý hiển thị thông báo cho bạn</translation>
 <translation id="5355926466126177564">Tiện ích "<ph name="EXTENSION_NAME" />" đã thay đổi trang nào được hiển thị khi bạn tìm kiếm từ Thanh địa chỉ.</translation>
+<translation id="535911077628776608"><ph name="FILE_NAME" /> có thể nguy hiểm. Gửi tệp tới Hệ thống bảo vệ nâng cao của Google để quét? Hãy nhấn tổ hợp phím Shift+F6 để chuyển tới khu vực thanh tệp đã tải xuống.</translation>
 <translation id="5359910752122114278">1 kết quả</translation>
 <translation id="5360150013186312835">Hiển thị trên thanh công cụ</translation>
 <translation id="5362741141255528695">Chọn tệp khóa cá nhân.</translation>
@@ -3346,6 +3374,7 @@
 <translation id="5539221284352502426">Mật khẩu bạn nhập đã bị máy chủ từ chối. Các lý do có thể bao gồm: Mật khẩu quá ngắn. Mật khẩu phải chứa chữ số hoặc biểu tượng. Mật khẩu phải khác với mật khẩu cũ.</translation>
 <translation id="5541694225089836610">Quản trị viên đã vô hiệu hóa thao tác này</translation>
 <translation id="5542132724887566711">Tiểu sử</translation>
+<translation id="5542133445231529202"><ph name="ORGANIZATION_NAME" /> yêu cầu bạn cập nhật thiết bị này ngay lập tức.</translation>
 <translation id="5542750926112347543">Đã chặn cookie từ <ph name="DOMAIN" /></translation>
 <translation id="5542949973455282971">Đang kết nối với <ph name="CARRIER_NAME" /></translation>
 <translation id="5543983818738093899">Đang kiểm tra trạng thái...</translation>
@@ -3391,6 +3420,7 @@
 <translation id="5593357315997824387">Đồng bộ hóa các tệp</translation>
 <translation id="5595152862129936745">Rất xa</translation>
 <translation id="5595485650161345191">Chỉnh sửa địa chỉ</translation>
+<translation id="5595727715083333657">Không hỗ trợ thay đổi dung lượng vùng chứa của bạn. Để điều chỉnh mức dung lượng được phân bổ sẵn cho Linux (Phiên bản thử nghiệm), hãy sao lưu rồi khôi phục dữ liệu sang một vùng chứa mới.</translation>
 <translation id="5596627076506792578">Tùy chọn khác</translation>
 <translation id="5600706100022181951">Bản cập nhật sẽ được tải xuống bằng cách dùng <ph name="UPDATE_SIZE_MB" /> MB dữ liệu di động. Bạn có muốn tiếp tục không?</translation>
 <translation id="5601503069213153581">Mã PIN</translation>
@@ -3463,6 +3493,7 @@
 <translation id="5691511426247308406">Gia đình</translation>
 <translation id="5691772641933328258">Không nhận dạng được vân tay</translation>
 <translation id="5692183275898619210">Đã in xong</translation>
+<translation id="5692875591060376599">Tệp đã chọn là không xác định và có thể nguy hiểm. Bạn có muốn gửi tệp tới chương trình Bảo vệ nâng cao của Google để quét không?</translation>
 <translation id="569425414730375234">Phiên truy cập ẩn danh hiện tại: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation>
 <translation id="5696143504434933566">Báo cáo vi phạm từ "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="5696679855467848181">Tệp PPD hiện được sử dụng: <ph name="PPD_NAME" /></translation>
@@ -3674,6 +3705,7 @@
 <translation id="5976160379964388480">Khác</translation>
 <translation id="5978277834170881274">&amp;Sử dụng tính năng kiểm tra lỗi chính tả cơ bản</translation>
 <translation id="5979084224081478209">Kiểm tra mật khẩu</translation>
+<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Bạn đã bật lại 1 tiện ích có thể gây hại}other{Bạn đã bật lại {NUM_EXTENSIONS} tiện ích có thể gây hại}}</translation>
 <translation id="5979421442488174909">&amp;Dịch sang <ph name="LANGUAGE" /></translation>
 <translation id="5979469435153841984">Để đánh dấu các trang, hãy nhấp vào dấu sao trong thanh địa chỉ</translation>
 <translation id="5984222099446776634">Truy cập gần đây</translation>
@@ -3924,6 +3956,7 @@
 <translation id="6309510305002439352">Đã tắt micrô</translation>
 <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="6312403991423642364">Lỗi mạng không xác định</translation>
+<translation id="6312567056350025599">{NUM_DAYS,plural, =1{Tính năng Kiểm tra an toàn đã chạy 1 ngày trước}other{Tính năng Kiểm tra an toàn đã chạy {NUM_DAYS} ngày trước}}</translation>
 <translation id="6312638141433622592">Đề xuất hiển thị các bài viết ở chế độ đọc khi được hỗ trợ</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>
@@ -3939,6 +3972,7 @@
 <translation id="6325191661371220117">Tắt tính năng tự động chạy</translation>
 <translation id="6326175484149238433">Xóa khỏi Chrome</translation>
 <translation id="6326855256003666642">Số lượng giữ kết nối</translation>
+<translation id="632707535499064463"><ph name="ORGANIZATION_NAME" /> yêu cầu bạn phải cập nhật thiết bị này trước thời hạn.</translation>
 <translation id="6327785803543103246">Tự động phát hiện proxy web</translation>
 <translation id="6333064448949140209">Tệp sẽ được gửi tới Google để được gỡ lỗi</translation>
 <translation id="6339668969738228384">Tạo hồ sơ mới cho <ph name="USER_EMAIL_ADDRESS" /></translation>
@@ -3965,11 +3999,13 @@
 <translation id="6366190659675876144">Bảo vệ thông thường</translation>
 <translation id="636850387210749493">Đăng ký doanh nghiệp</translation>
 <translation id="6370021412472292592">Không thể tải tệp kê khai.</translation>
+<translation id="6371486244597785139">{NUM_PASSWORDS,plural, =1{Đổi mật khẩu}other{Đổi mật khẩu}}</translation>
 <translation id="6374077068638737855">Iceweasel</translation>
 <translation id="6374469231428023295">Thử lại</translation>
 <translation id="6377268785556383139">1 kết quả cho '<ph name="SEARCH_TEXT" />'</translation>
 <translation id="6380143666419481200">Đồng ý và tiếp tục</translation>
 <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="6385149369087767061">Hãy kết nối Internet rồi thử lại</translation>
 <translation id="6385543213911723544">Trang web có thể lưu và đọc dữ liệu cookie</translation>
 <translation id="6386099547750337629">Nếu đây là tình huống không mong muốn, vui lòng liên hệ với bộ phận hỗ trợ.</translation>
 <translation id="6387674443318562538">Chia dọc</translation>
@@ -4048,6 +4084,7 @@
 <translation id="6478248366783946499">Giữ tệp nguy hiểm?</translation>
 <translation id="6483485061007832714">Mở tệp đã tải xuống</translation>
 <translation id="6483805311199035658">Đang mở <ph name="FILE" />...</translation>
+<translation id="6485092675191826776">Giấy phép của Plugin VM đã hết hạn</translation>
 <translation id="6488384360522318064">Chọn ngôn ngữ</translation>
 <translation id="648927581764831596">Không có</translation>
 <translation id="6490471652906364588">Thiết bị USB-C (cổng bên phải)</translation>
@@ -4237,6 +4274,7 @@
 <translation id="6762833852331690540">Đang bật</translation>
 <translation id="6767566652486411142">Chọn ngôn ngữ khá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="6769557323306147204"><ph name="ORGANIZATION_NAME" /> yêu cầu bạn phải cập nhật thiết bị này.</translation>
 <translation id="6769712124046837540">Đang thêm máy in...</translation>
 <translation id="6770602306803890733">Tăng cường bảo mật cho bạn và mọi người trên web</translation>
 <translation id="6770664076092644100">Xác minh qua NFC</translation>
@@ -4369,6 +4407,7 @@
 <translation id="6943836128787782965">HTTP gặp lỗi</translation>
 <translation id="6945221475159498467">Chọn</translation>
 <translation id="694592694773692225">Đã chặn chuyển hướng trên trang này.</translation>
+<translation id="6947526360212886241">{NUM_PASSWORDS,plural, =1{1 mật khẩu bị lộ}other{{NUM_PASSWORDS} mật khẩu bị lộ}}</translation>
 <translation id="6949434160682548041">Mật khẩu (tùy chọn)</translation>
 <translation id="6950627417367801484">Khôi phục ứng dụng</translation>
 <translation id="6950943362443484797">Chúng tôi sẽ cài đặt ứng dụng đó cho bạn</translation>
@@ -4453,6 +4492,7 @@
 <translation id="7053983685419859001">Chặn</translation>
 <translation id="7055152154916055070">Liên kết chuyển hướng đã chặn:</translation>
 <translation id="7056526158851679338">&amp;Kiểm tra thiết bị</translation>
+<translation id="7057184853669165321">{NUM_MINS,plural, =1{Tính năng Kiểm tra an toàn đã chạy 1 phút trước}other{Tính năng Kiểm tra an toàn đã chạy {NUM_MINS} phút trước}}</translation>
 <translation id="7057767408836081338">Không lấy được dữ liệu ứng dụng. Hệ thống vẫn đang cố chạy ứng dụng...</translation>
 <translation id="7059858479264779982">Đặt thành tự động chạy</translation>
 <translation id="7059893117020417984">Để duyệt web riêng tư, hãy nhấp vào menu biểu tượng ba dấu chấm để mở cửa sổ ẩn danh</translation>
@@ -4696,6 +4736,7 @@
 <translation id="7371006317849674875">Thời gian bắt đầu</translation>
 <translation id="7371490947952970241">Bạn có thể tắt Vị trí bằng cách tắt tùy chọn cài đặt Vị trí chính trên thiết bị này. Bạn cũng có thể tắt tùy chọn sử dụng mạng Wi-Fi, mạng di động và cảm biến cho vị trí trong phần cài đặt vị trí.</translation>
 <translation id="7375053625150546623">EAP</translation>
+<translation id="7375235221357833624">{0,plural, =1{Cập nhật thiết bị trong vòng một giờ}other{Cập nhật thiết bị trong vòng # giờ}}</translation>
 <translation id="7376553024552204454">Đánh dấu con trỏ chuột khi đang di chuyển</translation>
 <translation id="7377451353532943397">Tiếp tục chặn quyền sử dụng cảm biến</translation>
 <translation id="73786666777299047">Mở cửa hàng Chrome trực tuyến</translation>
@@ -4713,6 +4754,7 @@
 <translation id="7400418766976504921">URL</translation>
 <translation id="7400839060291901923">Thiết lập kết nối trên <ph name="PHONE_NAME" /> của bạn</translation>
 <translation id="7401778920660465883">Đóng thông báo này</translation>
+<translation id="7405938989981604410">{NUM_HOURS,plural, =1{Tính năng Kiểm tra an toàn đã chạy 1 giờ trước}other{Tính năng Kiểm tra an toàn đã chạy {NUM_HOURS} giờ trước}}</translation>
 <translation id="740624631517654988">Đã chặn cửa sổ bật lên</translation>
 <translation id="7407430846095439694">Nhập và liên kết</translation>
 <translation id="7407504355934009739">Hầu hết mọi người đều chặn thông báo từ trang web này</translation>
@@ -4743,6 +4785,7 @@
 <translation id="7441830548568730290">Người dùng khác</translation>
 <translation id="7442465037756169001">Bạn hiện có thể thiết lập phần cứng Hangouts Meet.</translation>
 <translation id="744341768939279100">Tạo cấu hình mới</translation>
+<translation id="744366959743242014">Đang tải dữ liệu. Quá trình này có thể mất vài giây.</translation>
 <translation id="7443806024147773267">Sử dụng mật khẩu mỗi khi bạn đăng nhập vào Tài khoản Google của mình</translation>
 <translation id="7444983668544353857">Vô hiệu hóa <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Tự động cài đặt ứng dụng</translation>
@@ -4778,6 +4821,7 @@
 <translation id="7489761397368794366">Gọi bằng thiết bị của bạn</translation>
 <translation id="749028671485790643">Cá nhân <ph name="VALUE" /></translation>
 <translation id="7490813197707563893">Địa chỉ MAC</translation>
+<translation id="7491963308094506985">{NUM_COOKIES,plural, =1{1 cookie}other{{NUM_COOKIES} cookie}}</translation>
 <translation id="7493386493263658176">Tiện ích <ph name="EXTENSION_NAME" /> có thể thu thập tất cả nội dung bạn nhập, bao gồm dữ liệu cá nhân như mật khẩu và số thẻ tín dụng. Bạn có muốn sử dụng tiện ích này không?</translation>
 <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="7495778526395737099">Quên mật khẩu cũ của bạn?</translation>
@@ -4798,10 +4842,14 @@
 <translation id="7513029293694390567">Tự động đăng nhập vào các trang web bằng thông tin đăng nhập được lưu trữ. Nếu tính năng này tắt, bạn sẽ luôn được yêu cầu xác nhận trước khi đăng nhập vào trang web.</translation>
 <translation id="7514239104543605883">Sao chép vào thiết bị của bạn</translation>
 <translation id="7514365320538308">Tải xuống</translation>
+<translation id="751523031290522286">Quản trị viên đã chặn <ph name="APP_NAME" />. Hãy yêu cầu quản trị viên cấp quyền sử dụng ứng dụng này.</translation>
+<translation id="7516981202574715431"><ph name="APP_NAME" /> đã bị tạm dừng</translation>
+<translation id="7517063221058203587">{0,plural, =1{Cập nhật thiết bị trong vòng 1 phút}other{Cập nhật thiết bị trong vòng # phút}}</translation>
 <translation id="7520766081042531487">Cổng thông tin ẩn danh: <ph name="SUBFRAME_SITE" /></translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7522255036471229694">Nói “Ok Google”</translation>
 <translation id="7525067979554623046">Tạo</translation>
+<translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 mục khác}other{{NUM_DOWNLOADS} mục khác}}</translation>
 <translation id="7529411698175791732">Kiểm tra kết nối Internet. Nếu sự cố vẫn tiếp diễn, hãy thử đăng xuất và đăng nhập lại.</translation>
 <translation id="7530016656428373557">Tốc độ phóng điện tính bằng Watt</translation>
 <translation id="7531779363494549572">Chuyển đến Cài đặt &gt; Ứng dụng và thông báo &gt; Thông báo.</translation>
@@ -4970,6 +5018,7 @@
 <translation id="7765158879357617694">Di chuyển</translation>
 <translation id="7766807826975222231">Tham quan</translation>
 <translation id="7766838926148951335">Chấp nhận quyền</translation>
+<translation id="7768770796815395237">Thay đổi</translation>
 <translation id="7769672763586021400">ID kiểu máy</translation>
 <translation id="7770651108375708429">Ngắt kết nối Wi-Fi</translation>
 <translation id="7771452384635174008">Bố cục</translation>
@@ -5406,6 +5455,7 @@
 <translation id="8286963743045814739">Bạn có thể duyệt web riêng tư bằng cách sử dụng cửa sổ ẩn danh</translation>
 <translation id="8287902281644548111">Tìm kiếm theo lệnh gọi API/URL</translation>
 <translation id="8288032458496410887">Gỡ cài đặt <ph name="APP" />...</translation>
+<translation id="8289128870594824098">Dung lượng ổ đĩa</translation>
 <translation id="8291967909914612644">Quốc gia của nhà cung cấp Home</translation>
 <translation id="8294431847097064396">Nguồn</translation>
 <translation id="8297006494302853456">Yếu</translation>
@@ -5618,6 +5668,7 @@
 <translation id="8608618451198398104">Thêm phiếu Kerberos</translation>
 <translation id="8609465669617005112">Di chuyển lên</translation>
 <translation id="8610103157987623234">Định dạng không chính xác. Hãy thử lại</translation>
+<translation id="8612935480510351790"><ph name="FILE_NAME" /> có thể nguy hiểm. Gửi tệp tới Hệ thống bảo vệ nâng cao của Google để quét?</translation>
 <translation id="8613164732773110792">Chỉ các ký tự viết thường, chữ số, dấu gạch dưới hoặc dấu gạch ngang</translation>
 <translation id="8615618338313291042">Ứng dụng Ẩn danh: <ph name="APP_NAME" /></translation>
 <translation id="8619803522055190423">Bóng đổ</translation>
@@ -5645,6 +5696,7 @@
 <translation id="8641606876632989680">Chrome sẽ thông báo khi mật khẩu bạn dùng để đăng nhập đã bị lộ</translation>
 <translation id="8642900771896232685">2 giây</translation>
 <translation id="8642947597466641025">Phóng to Văn bản</translation>
+<translation id="8643443571868262066"><ph name="FILE_NAME" /> có thể nguy hiểm. Bạn có muốn gửi tệp tới chương trình Bảo vệ nâng cao của Google để quét không?</translation>
 <translation id="8644655801811752511">Không thể đặt lại khóa bảo mật này. Thử đặt lại khóa này ngay sau khi cắm.</translation>
 <translation id="8645354835496065562">Tiếp tục cho phép sử dụng cảm biến</translation>
 <translation id="8645920082661222035">Dự đoán và cảnh báo cho bạn các sự kiện nguy hiểm trước khi các sự kiện đó xảy ra</translation>
@@ -6065,6 +6117,7 @@
 <translation id="9169931577761441333">Thêm <ph name="APP_NAME" /> vào Màn hình chính</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="917350715406657904">Bạn đã đạt đến giới hạn thời gian sử dụng <ph name="APP_NAME" /> do cha mẹ đặt ra. Bạn có thể dùng ứng dụng này trong <ph name="TIME_LIMIT" /> vào ngày mai.</translation>
 <translation id="9173995187295789444">Đang quét tìm thiết bị Bluetooth...</translation>
 <translation id="9174401638287877180">Gửi dữ liệu chẩn đoán và dữ liệu về mức sử dụng. Giúp cải thiện trải nghiệm Android của con bạn bằng cách tự động gửi dữ liệu chẩn đoán cũng như dữ liệu về mức sử dụng ứng dụng và thiết bị cho Google. Những thông tin này sẽ không dùng để nhận dạng con bạn mà giúp tăng độ ổn định của hệ thống và ứng dụng cũng như cải thiện các mặt khác. Một số dữ liệu tổng hợp cũng sẽ hữu ích cho các ứng dụng và đối tác của Google, chẳng hạn như những nhà phát triển Android. Nếu bạn bật tùy chọn cài đặt Hoạt động bổ sung trên web và ứng dụng cho con mình, thì dữ liệu này có thể được lưu vào Tài khoản Google của con.</translation>
 <translation id="917510707618656279">Hỏi khi một trang web muốn truy cập vào các thiết bị Bluetooth</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index ee4e086..8664a26 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">上传</translation>
 <translation id="1244265436519979884">正在进行 Linux 恢复</translation>
 <translation id="1244303850296295656">扩展程序错误</translation>
+<translation id="1246158006305844142">您的应用和设置会在您使用自己的 Google 帐号登录的所有 Chrome 操作系统设备上保持同步。如需了解浏览器同步选项,请转到 <ph name="LINK_BEGIN" />Chrome 设置<ph name="LINK_END" />。</translation>
 <translation id="1246905108078336582">从剪贴板中移除建议?</translation>
 <translation id="1249643471736608405">“<ph name="PLUGIN_NAME" />”已被屏蔽,因为它已被弃用</translation>
 <translation id="1251366534849411931">缺少左大括号:<ph name="ERROR_LINE" /></translation>
@@ -388,6 +389,7 @@
 <translation id="1524563461097350801">不用了</translation>
 <translation id="1525740877599838384">仅根据 Wi-Fi 确定位置</translation>
 <translation id="152629053603783244">重启 Linux</translation>
+<translation id="1526335046150927198">启用触控板滚屏加速</translation>
 <translation id="1526560967942511387">无标题文档</translation>
 <translation id="1529891865407786369">电源</translation>
 <translation id="1530838837447122178">打开鼠标和触控板设备设置</translation>
@@ -1309,6 +1311,7 @@
 <translation id="2725200716980197196">网络连接已恢复</translation>
 <translation id="2727633948226935816">不再提醒</translation>
 <translation id="2727712005121231835">实际大小</translation>
+<translation id="2729314457178420145">一并清除浏览数据 (<ph name="URL" />),这可能会使您在 Google.com 上退出帐号。<ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">正在备份 Linux 应用和文件</translation>
 <translation id="273093730430620027">此网页正在使用您的摄像头。</translation>
 <translation id="2731392572903530958">重新打开关闭的窗口(&amp;E)</translation>
@@ -2160,6 +2163,7 @@
 <translation id="3838486795898716504">更多“<ph name="PAGE_TITLE" />”</translation>
 <translation id="3838543471119263078">Cookie 及其他网站数据和插件数据</translation>
 <translation id="383891835335927981">未对任何网站设置缩放级别</translation>
+<translation id="3839509547554145593">启用鼠标滚屏加速</translation>
 <translation id="3839516600093027468">始终禁止 <ph name="HOST" /> 查看剪贴板</translation>
 <translation id="3841964634449506551">密码无效</translation>
 <translation id="3842552989725514455">Serif 字体</translation>
@@ -2770,6 +2774,7 @@
 <translation id="4699172675775169585">缓存的图片和文件</translation>
 <translation id="4699357559218762027">(自动启动)</translation>
 <translation id="470074695271471509">退出以结束?</translation>
+<translation id="4701025263201366865">家长登录</translation>
 <translation id="4707302005824653064">管理员(<ph name="CUSTODIAN_EMAIL" />)可在chrome.com上查看使用情况和历史记录。</translation>
 <translation id="4707579418881001319">L2TP/IPSec + 用户证书</translation>
 <translation id="4708794300267213770">从休眠状态唤醒时显示锁定屏幕</translation>
@@ -3077,6 +3082,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />,用<ph name="DEFAULT_SEARCH_ENGINE_NAME" />执行搜索</translation>
 <translation id="5139823398361067371">为您的安全密钥输入 PIN 码。如果您不知道 PIN 码,则需重置此安全密钥。</translation>
 <translation id="5139955368427980650">打开(&amp;O)</translation>
+<translation id="5142793792982256885">触控板滚屏速度</translation>
 <translation id="5142961317498132443">身份验证</translation>
 <translation id="5143374789336132547">“<ph name="EXTENSION_NAME" />”扩展程序更改了您点击“主页”按钮后系统显示的页面。</translation>
 <translation id="5143712164865402236">进入全屏模式</translation>
@@ -3639,6 +3645,7 @@
 <translation id="5901630391730855834">黄色</translation>
 <translation id="5906655207909574370">即将更新到最新版本!重新启动您的设备即可完成更新。</translation>
 <translation id="5906732635754427568">系统将会从此设备上移除与该应用相关的数据。</translation>
+<translation id="5908695239556627796">鼠标滚屏速度</translation>
 <translation id="5908769186679515905">禁止网站运行 Flash</translation>
 <translation id="5910363049092958439">图片存储为(&amp;V)...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> 处于离线状态</translation>
@@ -5086,6 +5093,7 @@
     <ph name="BEGIN_BOLD" />注意<ph name="END_BOLD" />:在恢复过程中,系统将会重新启动。</translation>
 <translation id="7828731929332799387">这将会删除第三方环境下的所有可用 Cookie 和网站数据。要继续吗?</translation>
 <translation id="7829298379596169484">正在存取音频输入</translation>
+<translation id="7829877209233347340">要添加学校帐号,请让家长登录并向您授权</translation>
 <translation id="7830594666202422257">连接到 Linux</translation>
 <translation id="7831491651892296503">配置网络时出错</translation>
 <translation id="7831754656372780761">“<ph name="TAB_TITLE" />”<ph name="EMOJI_MUTING" /></translation>
@@ -5839,6 +5847,7 @@
 <translation id="8808686172382650546">猫</translation>
 <translation id="8808744862003883508">在此页面上,您可看到 Chrome 中已安装的所有扩展程序。</translation>
 <translation id="8809147117840417135">浅蓝绿色</translation>
+<translation id="8812593354822910461">一并清除浏览数据 (<ph name="URL" />),这会使您在 <ph name="DOMAIN" /> 上退出帐号。<ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">无法登录 <ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">张纸</translation>
 <translation id="8813872945700551674">请让家长批准安装“<ph name="EXTENSION_NAME" />”</translation>
@@ -6128,6 +6137,7 @@
 <translation id="9203398526606335860">分析已启用(&amp;P)</translation>
 <translation id="9203904171912129171">选择设备</translation>
 <translation id="9203962528777363226">此设备的管理员已禁止添加新用户</translation>
+<translation id="9209689095351280025">网站无法使用 Cookie 来跟踪您在网上的活动</translation>
 <translation id="9211177926627870898">需要更新</translation>
 <translation id="9214520840402538427">糟糕!安装时间属性的初始化已过期,请与您的支持代表联系。</translation>
 <translation id="9214695392875603905">纸杯蛋糕</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index ae939b2..44539bc5 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -192,6 +192,7 @@
 <translation id="1243314992276662751">Layisha</translation>
 <translation id="1244265436519979884">Ukubuyiselwa kwe-Linux manje kuyaqhubeka</translation>
 <translation id="1244303850296295656">Iphutha lesandiso</translation>
+<translation id="1246158006305844142">Izinhlelo zokusebenza nezilungiselelo zizovumelanisa kuwo wonke amadivayisi we-Chrome OS lapho ongene khona ngemvume nge-akhawunti yakho ye-Google. Ukuthola izinketho zokuvumelanisa isiphequluli, iya kuzilungiselelo ze-<ph name="LINK_BEGIN" />Chrome<ph name="LINK_END" />.</translation>
 <translation id="1246905108078336582">Susa isiphakamiso kusukela kubhodi lokunamathisela?</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> ivinjelwe ngoba yehlisiwe</translation>
 <translation id="1251366534849411931">I-brace egoqekile yokuvuleka okulindelwe: <ph name="ERROR_LINE" /></translation>
@@ -389,6 +390,7 @@
 <translation id="1524563461097350801">Cha, Ngiyabonga</translation>
 <translation id="1525740877599838384">Sebenzisa kuphela i-Wi-Fi ukuze unqume indawo</translation>
 <translation id="152629053603783244">Qala kabusha i-Linux</translation>
+<translation id="1526335046150927198">Nika amandla ukusheshisa ukuskrola kwephedi yokuthinta</translation>
 <translation id="1526560967942511387">Idokhumenti engenasihloko</translation>
 <translation id="1529891865407786369">Umthombo wamandla</translation>
 <translation id="1530838837447122178">Vula izilungiselelo zemawuzi nezedivayisi yephedi yokuthinta</translation>
@@ -1311,6 +1313,7 @@
 <translation id="2725200716980197196">Kubuyiselwe ukuxhumeka kwenethiwekhi</translation>
 <translation id="2727633948226935816">Ungaphindi ungikhumbuze futhi</translation>
 <translation id="2727712005121231835">Usayizi wangempela</translation>
+<translation id="2729314457178420145">Futhi sula idatha yopheqululo (<ph name="URL" />) engase ikwenze uphume ngemvume ku-Google.com. <ph name="LEARN_MORE" /></translation>
 <translation id="2730029791981212295">Yenza isipele izinhlelo zokusebenza ze-Linux namafayela</translation>
 <translation id="273093730430620027">Leli khasi lifinyelela kukhamela yakho.</translation>
 <translation id="2731392572903530958">Phinda uvule iwindi elivaliwe</translation>
@@ -2162,6 +2165,7 @@
 <translation id="3838486795898716504">I-<ph name="PAGE_TITLE" /> eningi</translation>
 <translation id="3838543471119263078">Amakhukhi nelinye isayithi nedatha ye-plugin</translation>
 <translation id="383891835335927981">Awekho amasayithi asondezwe noma ahlehliselwe isithombe</translation>
+<translation id="3839509547554145593">Nika amandla ukusheshisa ukuskrola kwegundane</translation>
 <translation id="3839516600093027468">Hlala uvimbela u-<ph name="HOST" /> ekuboneni ibhodi lokunamathisela</translation>
 <translation id="3841964634449506551">Iphasiwedi ayivumelekile</translation>
 <translation id="3842552989725514455">ifonti ye-serif</translation>
@@ -2772,6 +2776,7 @@
 <translation id="4699172675775169585">Izithombe ezifakwe kunqolobane namafayela</translation>
 <translation id="4699357559218762027">(iqaliswe ngokuzenzakalela)</translation>
 <translation id="470074695271471509">Phuma ngemvume ukuze uqedele?</translation>
+<translation id="4701025263201366865">Ukungena ngemvume komzali</translation>
 <translation id="4707302005824653064">Ukusebenzisa nomlando kungabuyekezwa umphathi (<ph name="CUSTODIAN_EMAIL" />) ku-chrome.com.</translation>
 <translation id="4707579418881001319">I-L2TP/IPsec + isitifiketi somsebenzisi</translation>
 <translation id="4708794300267213770">Bonisa isikrini sokukhiya uma uvuka ebuthongweni</translation>
@@ -3079,6 +3084,7 @@
 <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Sesha</translation>
 <translation id="5139823398361067371">Faka i-PIN yokhiye wakho wokuqinisekia ubunikazi. Uma ungayazi iphinikhodi, uzodinga ukusetha kabusha ukhiye wokuqinisekisa ubunikazi.</translation>
 <translation id="5139955368427980650">Vula</translation>
+<translation id="5142793792982256885">Isivinini sokukrola iphedi yokuthinta</translation>
 <translation id="5142961317498132443">Ukufakazela ubuqiniso</translation>
 <translation id="5143374789336132547">Isandiso se-"<ph name="EXTENSION_NAME" />" siguqule ukuthi yiliphi ikhasi eliboniswa uma uchofoza inkinobho yasekhaya.</translation>
 <translation id="5143712164865402236">Faka isikrini esigcwele</translation>
@@ -3644,6 +3650,7 @@
 <translation id="5901630391730855834">Okuliphuzi</translation>
 <translation id="5906655207909574370">Kucishe isesikhathini! Qala kabusha idivayisi yakho ukuze uqedele ukubuyekeza.</translation>
 <translation id="5906732635754427568">Idatha ephathelaniswe nalolu hlelo lokusebenza izosuswa kule divayisi.</translation>
+<translation id="5908695239556627796">Isivinini sokuskrola segundane</translation>
 <translation id="5908769186679515905">Vimbela amasayithi kusukela ekuqaliseni i-Flash</translation>
 <translation id="5910363049092958439">Londoloza isithombe njenge...</translation>
 <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ayixhunyiwe kwi-inthanethi</translation>
@@ -5091,6 +5098,7 @@
     <ph name="BEGIN_BOLD" />Qaphela:<ph name="END_BOLD" />  Isistimu izoqalisa kabusha ngesikhathi senqubo.</translation>
 <translation id="7828731929332799387">Lokhu kuzosusa wonke amakhukhi nedatha yesayithi etholakala kokuqukethwe kwenkampani yangaphandle. Ingabe ufuna ukuqhubeka?</translation>
 <translation id="7829298379596169484">Ifinyelela kokokufaka komsindo</translation>
+<translation id="7829877209233347340">Cela umzali angene ngemvume ukunikeza imvume yokwengeza i-akhawunti yesikole</translation>
 <translation id="7830594666202422257">Xhumeka ku-Linux</translation>
 <translation id="7831491651892296503">Iphutha lokulungiselela inethiwekhi</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -5844,6 +5852,7 @@
 <translation id="8808686172382650546">Ikati</translation>
 <translation id="8808744862003883508">Kuleli khasi ungabona zonke izandiso ezifakiwe ku-Chrome.</translation>
 <translation id="8809147117840417135">I-teal ekhanyayo</translation>
+<translation id="8812593354822910461">Futhi sula idatha yopheqululo (<ph name="URL" />) ezokwenza uphume ngemvume ku-<ph name="DOMAIN" />.<ph name="LEARN_MORE" /></translation>
 <translation id="8813698869395535039">Ayikwazi ukungena ngemvume ku-<ph name="USERNAME" /></translation>
 <translation id="8813811964357448561">ishidi lephepha</translation>
 <translation id="8813872945700551674">Ukuze uthole umzali ozogunyaza i-"<ph name="EXTENSION_NAME" />"</translation>
@@ -6133,6 +6142,7 @@
 <translation id="9203398526606335860">Ukwenza iphrofayela kunikwe amandla</translation>
 <translation id="9203904171912129171">Khetha idivaysi</translation>
 <translation id="9203962528777363226">Umlawuli wale divayisi ukhubaze abasebenzisi abasha kusuka ekungezweni</translation>
+<translation id="9209689095351280025">Amasayithi awakwazi ukusebenzisa amakhukhi akulandelayo kuwebhu yonkana</translation>
 <translation id="9211177926627870898">Isibuyekezo siyadingeka</translation>
 <translation id="9214520840402538427">Eshu! Ukuqaliswa kwezichasiso zesikhathi sokufakwa kuphelelwe yisikhathi. Sicela uxhumane nabaqokelwe ukumela abanye bakho bosekelo.</translation>
 <translation id="9214695392875603905">I-Cupcake</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb
index 9384ed3e2..a9c83380 100644
--- a/chrome/app/resources/google_chrome_strings_hi.xtb
+++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -152,6 +152,7 @@
 <translation id="573759479754913123">Chrome OS के बारे में</translation>
 <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome कैनरी</translation>
 <translation id="5804318322022881572">Chrome लॉन्च नहीं किया जा सका. फिर से कोशिश करें.</translation>
+<translation id="5867197326698922595">Google Chrome, पासवर्ड में बदलाव करने की कोशिश कर रहा है.</translation>
 <translation id="5895138241574237353">फिर से प्रारंभ करें</translation>
 <translation id="5940385492829620908">आपके वेब, बुकमार्क और अन्य Chrome सामग्री यहां मौजूद रहती है.</translation>
 <translation id="5941830788786076944">Google Chrome को सामान्य ब्राउज़र बनाएं</translation>
@@ -232,6 +233,7 @@
 <translation id="870251953148363156">Google Chrome को अपडेट करना</translation>
 <translation id="873133009373065397">Google Chrome डिफ़ॉल्ट ब्राउज़र तय या सेट नहीं कर सकता</translation>
 <translation id="8823341990149967727">Chrome पुराना हो गया है</translation>
+<translation id="8834965163890861871">Google Chrome, पासवर्ड में बदलाव करने की कोशिश कर रहा है. इसकी अनुमति देने के लिए Windows का पासवर्ड डालें.</translation>
 <translation id="884296878221830158">इससे यह भी नियंत्रित होता है कि जब आप Chrome शुरू करते हैं या होम बटन पर क्लिक करते हैं तब कौन सा पेज दिखाया जाए.</translation>
 <translation id="8862326446509486874">सिस्टम-स्तर स्थापना के लिए आपके पास उचित अधिकार नहीं हैं. इंस्टॉलर को व्यवस्थापक के रूप में फिर से चलाने का प्रयास करें.</translation>
 <translation id="8914504000324227558">Chrome को फिर से लॉन्‍च करें</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb
index 9622802..59e1e97 100644
--- a/chrome/app/resources/google_chrome_strings_ja.xtb
+++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -154,6 +154,7 @@
 <translation id="573759479754913123">Chrome OS について</translation>
 <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation>
 <translation id="5804318322022881572">Chrome を起動できませんでした。もう一度お試しください。</translation>
+<translation id="5867197326698922595">Google Chrome でパスワードを編集しようとしています。</translation>
 <translation id="5895138241574237353">再起動</translation>
 <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - ネットワークにログイン</translation>
 <translation id="5940385492829620908">ウェブ、ブックマーク、その他の Chrome データを好みに設定できます。</translation>
@@ -236,6 +237,7 @@
 <translation id="870251953148363156">Google Chrome を更新(&amp;G)</translation>
 <translation id="873133009373065397">Google Chrome では既定のブラウザを判定または設定できません</translation>
 <translation id="8823341990149967727">Chrome は古いバージョンです</translation>
+<translation id="8834965163890861871">Google Chrome でパスワードを編集しようとしています。続行するには、Windows のパスワードを入力してください。</translation>
 <translation id="884296878221830158">この拡張機能では、Chrome の起動時、またはホーム ボタンのクリック時に表示されるページも制御されます。</translation>
 <translation id="8862326446509486874">権限が不十分なためシステムレベルのインストールができません。管理者権限でインストールしてください。</translation>
 <translation id="8914504000324227558">Chrome の再起動</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb
index 6a35d4a..ced1d7a 100644
--- a/chrome/app/resources/google_chrome_strings_te.xtb
+++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -154,6 +154,7 @@
 <translation id="573759479754913123">Chrome OS గురించి</translation>
 <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation>
 <translation id="5804318322022881572">Chromeను ప్రారంభించడం సాధ్యపడలేదు. మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="5867197326698922595">పాస్‌వర్డ్‌లను ఎడిట్ చేయడానికి Google Chrome ప్రయత్నిస్తోంది.</translation>
 <translation id="5895138241574237353">మళ్ళీ ప్రారంభించు</translation>
 <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - నెట్‌వర్క్ సైన్ ఇన్</translation>
 <translation id="5940385492829620908">మీ వెబ్, బుక్‌మార్క్‌లు మరియు ఇతర Chrome అంశాలు ఇక్కడ చూపబడతాయి.</translation>
@@ -236,6 +237,7 @@
 <translation id="870251953148363156">&amp;Google Chromeను అప్‌డేట్ చేయి</translation>
 <translation id="873133009373065397">Google Chrome డిఫాల్ట్ బ్రౌజర్‌ను నిశ్చయించలేదు లేదా సెట్ చేయలేదు</translation>
 <translation id="8823341990149967727">Chrome కాలం చెల్లినది</translation>
+<translation id="8834965163890861871">పాస్‌వర్డ్‌లను ఎడిట్ చేయడానికి Google Chrome ప్రయత్నిస్తోంది. దీన్ని అనుమతించడానికి మీ Windows పాస్‌వర్డ్‌ను టైప్ చేయండి.</translation>
 <translation id="884296878221830158">ఇది మీరు Chromeను ప్రారంభించేటప్పుడు లేదా హోమ్ బటన్‌ను క్లిక్ చేసేటప్పుడు చూపబడే పేజీని కూడా నియంత్రిస్తుంది.</translation>
 <translation id="8862326446509486874">సిస్టమ్-స్థాయిలో ఇన్‌స్టాల్‌ చేయ‌డానికి మీకు సరైన హక్కులు లేవు. నిర్వాహకుడి లాగా ఇన్‌స్టాలర్‌ను మ‌ళ్లీ రన్ చేయ‌డానికి ప్రయత్నించండి.</translation>
 <translation id="8914504000324227558">Chromeను పునఃప్రారంభించు</translation>
diff --git a/chrome/app/resources/google_chrome_strings_vi.xtb b/chrome/app/resources/google_chrome_strings_vi.xtb
index 0da01a5..ea79744e 100644
--- a/chrome/app/resources/google_chrome_strings_vi.xtb
+++ b/chrome/app/resources/google_chrome_strings_vi.xtb
@@ -158,6 +158,7 @@
 <translation id="573759479754913123">Giới thiệu về Chrome OS</translation>
 <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation>
 <translation id="5804318322022881572">Không thể mở Chrome. Hãy thử lại.</translation>
+<translation id="5867197326698922595">Google Chrome đang cố gắng chỉnh sửa mật khẩu.</translation>
 <translation id="5895138241574237353">Khởi động lại</translation>
 <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Đăng nhập vào mạng</translation>
 <translation id="5940385492829620908">Web, dấu trang và các nội dung khác của bạn trên Chrome đều có ở đây.</translation>
@@ -240,6 +241,7 @@
 <translation id="870251953148363156">Cập nhật &amp;Google Chrome</translation>
 <translation id="873133009373065397">Google Chrome không thể xác định hoặc đặt trình duyệt mặc định</translation>
 <translation id="8823341990149967727">Chrome đã lỗi thời</translation>
+<translation id="8834965163890861871">Google Chrome đang cố gắng chỉnh sửa mật khẩu. Hãy nhập mật khẩu Windows của bạn để cho phép việc này.</translation>
 <translation id="884296878221830158">Tiện ích này cũng điều khiển trang nào được hiển thị khi bạn khởi động Chrome hoặc nhấp vào nút Trang chủ.</translation>
 <translation id="8862326446509486874">Bạn không có quyền thích hợp để cài đặt cấp hệ thống. Thử chạy lại trình cài đặt với vai trò Quản trị viên.</translation>
 <translation id="8914504000324227558">Chạy lại Chrome</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 158e42b..1b62c30 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1863,6 +1863,10 @@
     "unexpire_flags.h",
     "unified_consent/unified_consent_service_factory.cc",
     "unified_consent/unified_consent_service_factory.h",
+    "upboarding/query_tiles/cached_image_loader.cc",
+    "upboarding/query_tiles/cached_image_loader.h",
+    "upboarding/query_tiles/tile_service_factory.cc",
+    "upboarding/query_tiles/tile_service_factory.h",
     "update_client/chrome_update_query_params_delegate.cc",
     "update_client/chrome_update_query_params_delegate.h",
     "usb/usb_blocklist.cc",
@@ -2998,6 +3002,7 @@
       "//chrome/browser/share",
       "//chrome/browser/upboarding",
       "//chrome/browser/updates",
+      "//chrome/common:non_code_constants",
       "//chrome/services/media_gallery_util/public/cpp",
       "//components/autofill_assistant/browser",
       "//components/cbor",
diff --git a/chrome/browser/android/thin_webview/internal/BUILD.gn b/chrome/browser/android/thin_webview/internal/BUILD.gn
index 91d61ff..8ec4528 100644
--- a/chrome/browser/android/thin_webview/internal/BUILD.gn
+++ b/chrome/browser/android/thin_webview/internal/BUILD.gn
@@ -17,6 +17,7 @@
     ":jni_headers",
     "//cc",
     "//chrome/browser/ui",
+    "//components/permissions",
     "//skia",
   ]
 
diff --git a/chrome/browser/android/thin_webview/internal/thin_webview.cc b/chrome/browser/android/thin_webview/internal/thin_webview.cc
index 81fe000..edba6055 100644
--- a/chrome/browser/android/thin_webview/internal/thin_webview.cc
+++ b/chrome/browser/android/thin_webview/internal/thin_webview.cc
@@ -10,6 +10,7 @@
 #include "chrome/browser/ui/android/view_android_helper.h"
 #include "chrome/browser/ui/tab_helpers.h"
 #include "components/embedder_support/android/delegate/web_contents_delegate_android.h"
+#include "components/permissions/permission_request_manager.h"
 #include "content/public/browser/web_contents.h"
 
 using base::android::JavaParamRef;
@@ -76,6 +77,8 @@
     web_contents->SetDelegate(delegate);
 
   TabHelpers::AttachTabHelpers(web_contents);
+  permissions::PermissionRequestManager::FromWebContents(web_contents)
+      ->set_web_contents_supports_permission_requests(false);
   ViewAndroidHelper::FromWebContents(web_contents)
       ->SetViewAndroid(web_contents->GetNativeView());
 }
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
index 1c30b63..5e7f241 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -52,6 +52,7 @@
 #include "chrome/browser/ssl/stateful_ssl_host_state_delegate_factory.h"
 #include "chrome/browser/storage/durable_storage_permission_context.h"
 #include "chrome/browser/subresource_filter/subresource_filter_profile_context_factory.h"
+#include "chrome/browser/sync/profile_sync_service_factory.h"
 #include "chrome/browser/translate/chrome_translate_client.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
@@ -1600,6 +1601,9 @@
 TEST_F(ChromeBrowsingDataRemoverDelegateTest, AutofillRemovalLastHour) {
   GetProfile()->CreateWebDataService();
   RemoveAutofillTester tester(GetProfile());
+  // Initialize sync service so that PersonalDatabaseHelper::server_database_
+  // gets initialized:
+  ProfileSyncServiceFactory::GetForProfile(GetProfile());
 
   ASSERT_FALSE(tester.HasProfile());
   tester.AddProfilesAndCards();
@@ -1621,6 +1625,9 @@
 TEST_F(ChromeBrowsingDataRemoverDelegateTest, AutofillRemovalOlderThan30Days) {
   GetProfile()->CreateWebDataService();
   RemoveAutofillTester tester(GetProfile());
+  // Initialize sync service so that PersonalDatabaseHelper::server_database_
+  // gets initialized:
+  ProfileSyncServiceFactory::GetForProfile(GetProfile());
 
   const base::Time kNow = base::Time::Now();
   const base::Time k30DaysOld = kNow - base::TimeDelta::FromDays(30);
@@ -1658,6 +1665,9 @@
 TEST_F(ChromeBrowsingDataRemoverDelegateTest, AutofillRemovalEverything) {
   GetProfile()->CreateWebDataService();
   RemoveAutofillTester tester(GetProfile());
+  // Initialize sync service so that PersonalDatabaseHelper::server_database_
+  // gets initialized:
+  ProfileSyncServiceFactory::GetForProfile(GetProfile());
 
   ASSERT_FALSE(tester.HasProfile());
   tester.AddProfilesAndCards();
@@ -1678,6 +1688,9 @@
        StrikeDatabaseEmptyOnAutofillRemoveEverything) {
   GetProfile()->CreateWebDataService();
   RemoveAutofillTester tester(GetProfile());
+  // Initialize sync service so that PersonalDatabaseHelper::server_database_
+  // gets initialized:
+  ProfileSyncServiceFactory::GetForProfile(GetProfile());
 
   ASSERT_FALSE(tester.HasProfile());
   tester.AddProfilesAndCards();
@@ -1703,6 +1716,9 @@
        AutofillOriginsRemovedWithHistory) {
   GetProfile()->CreateWebDataService();
   RemoveAutofillTester tester(GetProfile());
+  // Initialize sync service so that PersonalDatabaseHelper::server_database_
+  // gets initialized:
+  ProfileSyncServiceFactory::GetForProfile(GetProfile());
 
   tester.AddProfilesAndCards();
   EXPECT_FALSE(tester.HasOrigin(std::string()));
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc
index 51f967c..04353b8 100644
--- a/chrome/browser/chrome_browser_interface_binders.cc
+++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -25,6 +25,7 @@
 #include "chrome/browser/soda/soda_service.h"
 #include "chrome/browser/soda/soda_service_factory.h"
 #include "chrome/browser/ssl/insecure_sensitive_input_driver_factory.h"
+#include "chrome/browser/ssl/security_state_tab_helper.h"
 #include "chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals.mojom.h"
 #include "chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.h"
 #include "chrome/browser/ui/webui/engagement/site_engagement_ui.h"
@@ -47,6 +48,8 @@
 #include "components/performance_manager/performance_manager_tab_helper.h"
 #include "components/performance_manager/public/mojom/coordination_unit.mojom.h"
 #include "components/safe_browsing/buildflags.h"
+#include "components/security_state/content/content_utils.h"
+#include "components/security_state/core/security_state.h"
 #include "components/translate/content/common/translate.mojom.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/render_process_host.h"
@@ -216,6 +219,14 @@
       dom_distiller::DistillabilityDriver::FromWebContents(web_contents);
   if (!driver)
     return;
+  driver->SetIsDangerousCallback(
+      base::BindRepeating([](content::WebContents* contents) {
+        // SecurityStateTabHelper uses chrome-specific
+        // GetVisibleSecurityState to determine if a page is DANGEROUS.
+        return SecurityStateTabHelper::FromWebContents(contents)
+                   ->GetSecurityLevel() !=
+               security_state::SecurityLevel::DANGEROUS;
+      }));
   driver->CreateDistillabilityService(std::move(receiver));
 }
 
diff --git a/chrome/browser/chrome_security_exploit_browsertest.cc b/chrome/browser/chrome_security_exploit_browsertest.cc
index 039cd93..8d2bbad 100644
--- a/chrome/browser/chrome_security_exploit_browsertest.cc
+++ b/chrome/browser/chrome_security_exploit_browsertest.cc
@@ -472,10 +472,8 @@
   content::RenderFrameHost* rfh =
       browser()->tab_strip_model()->GetActiveWebContents()->GetMainFrame();
 
-  base::HistogramTester histograms;
-  content::RenderProcessHostWatcher crash_observer(
-      rfh->GetProcess(),
-      content::RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT);
+  content::RenderProcessHostBadMojoMessageWaiter crash_observer(
+      rfh->GetProcess());
 
   // The renderer should always get killed, but sometimes ExecuteScript returns
   // true anyway, so just ignore the result.
@@ -483,9 +481,10 @@
       content::ExecuteScript(rfh, "URL.createObjectURL(new Blob(['foo']))"));
 
   // If the process is killed, this test passes.
-  crash_observer.Wait();
-  histograms.ExpectUniqueSample("Stability.BadMessageTerminated.Content", 123,
-                                1);
+  EXPECT_EQ(
+      "Received bad user message: Non committable URL passed to "
+      "BlobURLStore::Register",
+      crash_observer.Wait());
 }
 
 // chrome://xyz should not be able to create a "blob:chrome://abc" resource.
@@ -509,10 +508,8 @@
   content::RenderFrameHost* rfh =
       browser()->tab_strip_model()->GetActiveWebContents()->GetMainFrame();
 
-  base::HistogramTester histograms;
-  content::RenderProcessHostWatcher crash_observer(
-      rfh->GetProcess(),
-      content::RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT);
+  content::RenderProcessHostBadMojoMessageWaiter crash_observer(
+      rfh->GetProcess());
 
   // The renderer should always get killed, but sometimes ExecuteScript returns
   // true anyway, so just ignore the result.
@@ -520,7 +517,8 @@
       content::ExecuteScript(rfh, "URL.createObjectURL(new Blob(['foo']))"));
 
   // If the process is killed, this test passes.
-  crash_observer.Wait();
-  histograms.ExpectUniqueSample("Stability.BadMessageTerminated.Content", 123,
-                                1);
+  EXPECT_EQ(
+      "Received bad user message: Non committable URL passed to "
+      "BlobURLStore::Register",
+      crash_observer.Wait());
 }
diff --git a/chrome/browser/chromeos/accessibility/speech_monitor.cc b/chrome/browser/chromeos/accessibility/speech_monitor.cc
index f7638867..fc6ded6 100644
--- a/chrome/browser/chromeos/accessibility/speech_monitor.cc
+++ b/chrome/browser/chromeos/accessibility/speech_monitor.cc
@@ -121,6 +121,8 @@
   utterance_queue_.emplace_back(utterance->GetText(), utterance->GetLang());
   if (loop_runner_.get())
     loop_runner_->Quit();
+
+  MaybeContinueReplay();
 }
 
 bool SpeechMonitor::LoadBuiltInTtsEngine(
@@ -152,4 +154,49 @@
   return delay_for_last_utterance_MS_;
 }
 
+SpeechMonitor& SpeechMonitor::ExpectSpeech(const std::string& text) {
+  CHECK(!replay_loop_runner_.get());
+  replay_queue_.push_back([this, text]() {
+    for (auto it = utterance_queue_.begin(); it != utterance_queue_.end();
+         it++) {
+      if (it->text == text) {
+        utterance_queue_.erase(it);
+        return true;
+      }
+    }
+    return false;
+  });
+  return *this;
+}
+
+SpeechMonitor& SpeechMonitor::Call(std::function<void()> func) {
+  CHECK(!replay_loop_runner_.get());
+  replay_queue_.push_back([func]() {
+    func();
+    return true;
+  });
+  return *this;
+}
+
+void SpeechMonitor::Replay() {
+  MaybeContinueReplay();
+}
+
+void SpeechMonitor::MaybeContinueReplay() {
+  auto it = replay_queue_.begin();
+  while (it != replay_queue_.end()) {
+    if ((*it)())
+      it = replay_queue_.erase(it);
+    else
+      break;
+  }
+
+  if (replay_queue_.size() > 0 && !replay_loop_runner_.get()) {
+    replay_loop_runner_ = new content::MessageLoopRunner();
+    replay_loop_runner_->Run();
+  } else if (replay_queue_.empty() && replay_loop_runner_.get()) {
+    replay_loop_runner_->Quit();
+  }
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/accessibility/speech_monitor.h b/chrome/browser/chromeos/accessibility/speech_monitor.h
index 9e64990..54ecd57 100644
--- a/chrome/browser/chromeos/accessibility/speech_monitor.h
+++ b/chrome/browser/chromeos/accessibility/speech_monitor.h
@@ -32,6 +32,11 @@
   SpeechMonitor();
   virtual ~SpeechMonitor();
 
+  // Blocing api.
+  // Use the following apis to write a synchronous test e.g.
+  // DoSomething();
+  // EXPECT_EQ("foo", speech_monitor_.GetNextUtterance());
+
   // Blocks until the next utterance is spoken, and returns its text.
   std::string GetNextUtterance();
   // Blocks until the next utterance is spoken, and returns its text.
@@ -48,6 +53,21 @@
   // Blocks until StopSpeaking() is called on TtsController.
   void BlockUntilStop();
 
+  // Non-blocking api.
+  // Use these apis if you want to write an async test e.g.
+  // speech_monitor_.ExpectSpeech("foo")
+  //                .Call([this]() { DoSomething(); })
+  //                .Replay();
+
+  // Adds an expectation of spoken text.
+  SpeechMonitor& ExpectSpeech(const std::string& text);
+
+  // Adds a call to be included in replay.
+  SpeechMonitor& Call(std::function<void()> func);
+
+  // Replays all expectations.
+  void Replay();
+
   // Delayed utterances.
   double GetDelayForLastUtteranceMS();
 
@@ -73,6 +93,8 @@
   void ClearError() override;
   void SetError(const std::string& error) override;
 
+  void MaybeContinueReplay();
+
   scoped_refptr<content::MessageLoopRunner> loop_runner_;
   // Our list of utterances and specified language.
   base::circular_deque<SpeechMonitorUtterance> utterance_queue_;
@@ -87,6 +109,12 @@
   // Stores the last time Speak() was called.
   std::chrono::steady_clock::time_point time_of_last_utterance_;
 
+  // Queue of expectations to be replayed.
+  std::vector<std::function<bool()>> replay_queue_;
+
+  // Blocks this test when replaying expectations.
+  scoped_refptr<content::MessageLoopRunner> replay_loop_runner_;
+
   DISALLOW_COPY_AND_ASSIGN(SpeechMonitor);
 };
 
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
index 5e9448e..d3fdf05 100644
--- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
+++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
@@ -728,22 +728,19 @@
 
   // Press Search+H to go to the next heading
   SendKeyPressWithSearch(ui::VKEY_H);
-  while ("Middle" != speech_monitor_.GetNextUtterance()) {
-  }
-
-  // To ensure that the setSequentialFocusNavigationStartingPoint has
-  // executed before pressing Tab, the page has an event handler waiting
-  // for the 'blur' event on the button, and when it loses focus it
-  // triggers a live region announcement that we wait for, here.
-  while ("button lost focus" != speech_monitor_.GetNextUtterance()) {
-  }
-
-  // Now we know that focus has left the button, so the sequential focus
-  // navigation starting point must be on the heading. Press Tab and
-  // ensure that we land on the first link past the heading.
-  SendKeyPress(ui::VKEY_TAB);
-  while ("44" != speech_monitor_.GetNextUtterance()) {
-  }
+  speech_monitor_
+      .ExpectSpeech("Middle")
+      // To ensure that the setSequentialFocusNavigationStartingPoint has
+      // executed before pressing Tab, the page has an event handler waiting
+      // for the 'blur' event on the button, and when it loses focus it
+      // triggers a live region announcement that we wait for, here.
+      .ExpectSpeech("button lost focus")
+      // Now we know that focus has left the button, so the sequential focus
+      // navigation starting point must be on the heading. Press Tab and
+      // ensure that we land on the first link past the heading.
+      .Call([this]() { SendKeyPress(ui::VKEY_TAB); })
+      .ExpectSpeech("44")
+      .Replay();
 }
 
 //
@@ -770,9 +767,7 @@
 IN_PROC_BROWSER_TEST_F(GuestSpokenFeedbackTest, FocusToolbar) {
   EnableChromeVox();
   chrome::ExecuteCommand(browser(), IDC_FOCUS_TOOLBAR);
-  while (speech_monitor_.GetNextUtterance() != "Reload") {
-  }
-  EXPECT_EQ("Button", speech_monitor_.GetNextUtterance());
+  speech_monitor_.ExpectSpeech("Reload").ExpectSpeech("Button").Replay();
 }
 
 //
@@ -866,7 +861,6 @@
 IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest,
                        MoveByCharacterPhoneticSpeechAndHints) {
   EnableChromeVox();
-
   ui_test_utils::NavigateToURL(
       browser(), GURL("data:text/html,<button autofocus>Click me</button>"));
   EXPECT_EQ("Web Content", speech_monitor_.GetNextUtterance());
@@ -920,36 +914,30 @@
   ui_test_utils::NavigateToURL(
       browser(), GURL("data:text/html,<button autofocus>Click me</button>"));
 
-  // Included to reduce flakiness.
-  while (speech_monitor_.GetNextUtterance() !=
-         "Press Search plus Space to activate") {
-  }
   // Reset Tts settings using hotkey and assert speech output.
-  SendKeyPressWithSearchAndControlAndShift(ui::VKEY_OEM_5);
-  while (speech_monitor_.GetNextUtterance() !=
-         "Reset text to speech settings to default values") {
-  }
-  // Increase speech rate.
-  SendKeyPressWithSearch(ui::VKEY_OEM_4);
-  while (speech_monitor_.GetNextUtterance() != "Rate 19 percent") {
-  }
-  // Increase speech pitch.
-  SendKeyPressWithSearch(ui::VKEY_OEM_6);
-  while (speech_monitor_.GetNextUtterance() != "Pitch 50 percent") {
-  }
-  // Reset Tts settings again.
-  SendKeyPressWithSearchAndControlAndShift(ui::VKEY_OEM_5);
-  while (speech_monitor_.GetNextUtterance() !=
-         "Reset text to speech settings to default values") {
-  }
-  // Ensure that increasing speech rate and pitch jump to the same values as
-  // before.
-  SendKeyPressWithSearch(ui::VKEY_OEM_4);
-  while (speech_monitor_.GetNextUtterance() != "Rate 19 percent") {
-  }
-  SendKeyPressWithSearch(ui::VKEY_OEM_6);
-  while (speech_monitor_.GetNextUtterance() != "Pitch 50 percent") {
-  }
+  speech_monitor_
+      .Call([this]() {
+        SendKeyPressWithSearchAndControlAndShift(ui::VKEY_OEM_5);
+      })
+      .ExpectSpeech("Reset text to speech settings to default values")
+      // Increase speech rate.
+      .Call([this]() { SendKeyPressWithSearch(ui::VKEY_OEM_4); })
+      .ExpectSpeech("Rate 19 percent")
+      // Increase speech pitch.
+      .Call([this]() { SendKeyPressWithSearch(ui::VKEY_OEM_6); })
+      .ExpectSpeech("Pitch 50 percent")
+      // Reset Tts settings again.
+      .Call([this]() {
+        SendKeyPressWithSearchAndControlAndShift(ui::VKEY_OEM_5);
+      })
+      .ExpectSpeech("Reset text to speech settings to default values")
+      // Ensure that increasing speech rate and pitch jump to the same values as
+      // before.
+      .Call([this]() { SendKeyPressWithSearch(ui::VKEY_OEM_4); })
+      .ExpectSpeech("Rate 19 percent")
+      .Call([this]() { SendKeyPressWithSearch(ui::VKEY_OEM_6); })
+      .ExpectSpeech("Pitch 50 percent")
+      .Replay();
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
index 2302244..b86fee6 100644
--- a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
+++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
@@ -1559,7 +1559,7 @@
 }
 
 bool FileManagerBrowserTestBase::GetEnableFilesNg() const {
-  return false;
+  return true;
 }
 
 bool FileManagerBrowserTestBase::GetEnableNativeSmb() const {
diff --git a/chrome/browser/chromeos/mobile/mobile_activator.cc b/chrome/browser/chromeos/mobile/mobile_activator.cc
index f2c2fb7..e7c5013f1 100644
--- a/chrome/browser/chromeos/mobile/mobile_activator.cc
+++ b/chrome/browser/chromeos/mobile/mobile_activator.cc
@@ -90,8 +90,8 @@
   reconnect_timeout_timer_.Stop();
 
   if (NetworkHandler::IsInitialized()) {
-    NetworkHandler::Get()->network_state_handler()->
-        RemoveObserver(this, FROM_HERE);
+    NetworkHandler::Get()->network_state_handler()->RemoveObserver(this,
+                                                                   FROM_HERE);
   }
   meid_.clear();
   iccid_.clear();
@@ -112,16 +112,17 @@
   if (!network || network->type() != shill::kTypeCellular)
     return;
 
-  const DeviceState* device = NetworkHandler::Get()->network_state_handler()->
-      GetDeviceState(network->device_path());
+  const DeviceState* device =
+      NetworkHandler::Get()->network_state_handler()->GetDeviceState(
+          network->device_path());
   if (!device) {
     LOG(ERROR) << "Cellular device can't be found: " << network->device_path();
     return;
   }
   if (network->device_path() != device_path_) {
     LOG(WARNING) << "Ignoring property update for cellular service "
-                 << network->path()
-                 << " on unknown device " << network->device_path()
+                 << network->path() << " on unknown device "
+                 << network->device_path()
                  << " (Stored device path = " << device_path_ << ")";
     return;
   }
@@ -145,13 +146,14 @@
 
 void MobileActivator::InitiateActivation(const std::string& service_path) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  const NetworkState* network =  GetNetworkState(service_path);
+  const NetworkState* network = GetNetworkState(service_path);
   if (!network) {
     LOG(WARNING) << "Cellular service can't be found: " << service_path;
     return;
   }
-  const DeviceState* device = NetworkHandler::Get()->network_state_handler()->
-      GetDeviceState(network->device_path());
+  const DeviceState* device =
+      NetworkHandler::Get()->network_state_handler()->GetDeviceState(
+          network->device_path());
   if (!device) {
     LOG(ERROR) << "Cellular device can't be found: " << network->device_path();
     return;
@@ -180,8 +182,8 @@
 void MobileActivator::GetPropertiesFailure(
     const std::string& error_name,
     std::unique_ptr<base::DictionaryValue> error_data) {
-  NET_LOG_ERROR("MobileActivator GetProperties Failed: " + error_name,
-                service_path_);
+  NET_LOG(ERROR) << "MobileActivator GetProperties failed for "
+                 << NetworkPathId(service_path_) << " Error: " << error_name;
 }
 
 void MobileActivator::OnSetTransactionStatus(bool success) {
@@ -254,9 +256,8 @@
 void MobileActivator::StartOTASPTimer() {
   pending_activation_request_ = false;
   state_duration_timer_.Start(
-      FROM_HERE,
-      base::TimeDelta::FromMilliseconds(kOTASPRetryDelay),
-      this, &MobileActivator::HandleOTASPTimeout);
+      FROM_HERE, base::TimeDelta::FromMilliseconds(kOTASPRetryDelay), this,
+      &MobileActivator::HandleOTASPTimeout);
 }
 
 void MobileActivator::StartActivation() {
@@ -342,7 +343,7 @@
     // Try to start with OTASP immediately if we have received payment recently.
     state_ = PLAN_ACTIVATION_START_OTASP;
   } else {
-    state_ =  PLAN_ACTIVATION_START;
+    state_ = PLAN_ACTIVATION_START;
   }
 
   EvaluateCellularNetwork(network);
@@ -426,15 +427,13 @@
   // Keep trying to connect until told otherwise.
   continue_reconnect_timer_.Stop();
   continue_reconnect_timer_.Start(
-      FROM_HERE,
-      base::TimeDelta::FromMilliseconds(kReconnectDelayMS),
-      this, &MobileActivator::ContinueConnecting);
+      FROM_HERE, base::TimeDelta::FromMilliseconds(kReconnectDelayMS), this,
+      &MobileActivator::ContinueConnecting);
   // If we don't ever connect again, we're going to call this a failure.
   reconnect_timeout_timer_.Stop();
   reconnect_timeout_timer_.Start(
-      FROM_HERE,
-      base::TimeDelta::FromMilliseconds(kMaxReconnectTime),
-      this, &MobileActivator::ReconnectTimedOut);
+      FROM_HERE, base::TimeDelta::FromMilliseconds(kMaxReconnectTime), this,
+      &MobileActivator::ReconnectTimedOut);
 }
 
 void MobileActivator::ReconnectTimedOut() {
@@ -475,8 +474,7 @@
 
 void MobileActivator::RefreshCellularNetworks() {
   if (state_ == PLAN_ACTIVATION_PAGE_LOADING ||
-      state_ == PLAN_ACTIVATION_DONE ||
-      state_ == PLAN_ACTIVATION_ERROR) {
+      state_ == PLAN_ACTIVATION_DONE || state_ == PLAN_ACTIVATION_ERROR) {
     return;
   }
 
@@ -569,7 +567,8 @@
          activation == shill::kActivationStateActivating) &&
         (network->GetError().empty() ||
          network->GetError() == shill::kErrorOtaspFailed)) {
-      NET_LOG_EVENT("Activation failure detected ", network->path());
+      NET_LOG(EVENT) << "Activation failure detected for "
+                     << NetworkId(network);
       switch (state_) {
         case PLAN_ACTIVATION_OTASP:
           new_state = PLAN_ACTIVATION_DELAY_OTASP;
@@ -647,7 +646,7 @@
       break;
     case PLAN_ACTIVATION_START_OTASP: {
       if (activation == shill::kActivationStatePartiallyActivated) {
-          new_state = PLAN_ACTIVATION_OTASP;
+        new_state = PLAN_ACTIVATION_OTASP;
       } else if (activation == shill::kActivationStateActivated) {
         new_state = PLAN_ACTIVATION_RECONNECTING;
       } else {
@@ -751,16 +750,14 @@
   return "UNKNOWN";
 }
 
-
 void MobileActivator::CompleteActivation() {
   // Remove observers, we are done with this page.
-  NetworkHandler::Get()->network_state_handler()->
-      RemoveObserver(this, FROM_HERE);
+  NetworkHandler::Get()->network_state_handler()->RemoveObserver(this,
+                                                                 FROM_HERE);
 }
 
 bool MobileActivator::RunningActivation() const {
-  return !(state_ == PLAN_ACTIVATION_DONE ||
-           state_ == PLAN_ACTIVATION_ERROR ||
+  return !(state_ == PLAN_ACTIVATION_DONE || state_ == PLAN_ACTIVATION_ERROR ||
            state_ == PLAN_ACTIVATION_PAGE_LOADING);
 }
 
@@ -772,11 +769,13 @@
   pending_activation_request_ = false;
   const NetworkState* network = GetNetworkState(service_path);
   if (!network) {
-    NET_LOG_ERROR("Cellular service no longer exists", service_path);
+    NET_LOG(ERROR) << "Cellular network no longer exists: "
+                   << NetworkPathId(service_path);
     return;
   }
   UMA_HISTOGRAM_COUNTS_1M("Cellular.ActivationFailure", 1);
-  NET_LOG_ERROR("Failed to call Activate() on service", service_path);
+  NET_LOG(ERROR) << "Failed to call Activate() on "
+                 << NetworkPathId(service_path);
   if (new_state == PLAN_ACTIVATION_OTASP) {
     ChangeState(network, PLAN_ACTIVATION_DELAY_OTASP, ActivationError::kNone);
   } else {
@@ -790,14 +789,14 @@
     const base::Closure& success_callback,
     const network_handler::ErrorCallback& error_callback) {
   DCHECK(network);
-  NET_LOG_EVENT("Activating cellular service", network->path());
+  NET_LOG(EVENT) << "Activating cellular service: "
+                 << NetworkPathId(network->path());
   UMA_HISTOGRAM_COUNTS_1M("Cellular.ActivationTry", 1);
   pending_activation_request_ = true;
-  NetworkHandler::Get()->network_activation_handler()->
-      Activate(network->path(),
-               "",  // carrier
-               success_callback,
-               error_callback);
+  NetworkHandler::Get()->network_activation_handler()->Activate(
+      network->path(),
+      "",  // carrier
+      success_callback, error_callback);
 }
 
 void MobileActivator::ChangeState(const NetworkState* network,
@@ -822,8 +821,7 @@
   }
 
   static bool first_time = true;
-  VLOG(1) << "Activation state flip old = "
-          << GetStateDescription(state_)
+  VLOG(1) << "Activation state flip old = " << GetStateDescription(state_)
           << ", new = " << GetStateDescription(new_state);
   if (state_ == new_state && !first_time)
     return;
@@ -868,8 +866,7 @@
           base::BindRepeating(&MobileActivator::StartOTASPTimer,
                               weak_ptr_factory_.GetWeakPtr()),
           on_activation_error);
-      }
-      break;
+    } break;
     case PLAN_ACTIVATION_PAGE_LOADING:
       return;
     case PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING:
@@ -936,8 +933,8 @@
 
 bool MobileActivator::HasRecentCellularPlanPayment() const {
   const int kRecentPlanPaymentHours = 6;
-  return (base::Time::Now() -
-          cellular_plan_payment_time_).InHours() < kRecentPlanPaymentHours;
+  return (base::Time::Now() - cellular_plan_payment_time_).InHours() <
+         kRecentPlanPaymentHours;
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/net/network_portal_detector_impl.cc b/chrome/browser/chromeos/net/network_portal_detector_impl.cc
index 784e5c1d..ba5c53d 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_impl.cc
+++ b/chrome/browser/chromeos/net/network_portal_detector_impl.cc
@@ -20,9 +20,9 @@
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/shill/shill_profile_client.h"
 #include "chromeos/login/login_state/login_state.h"
+#include "chromeos/network/network_event_log.h"
 #include "chromeos/network/network_state.h"
 #include "chromeos/network/network_state_handler.h"
-#include "components/device_event_log/device_event_log.h"
 #include "content/public/browser/notification_service.h"
 #include "net/http/http_status_code.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
@@ -173,21 +173,16 @@
     DetectionAttemptCompletedReport() = default;
 
 NetworkPortalDetectorImpl::DetectionAttemptCompletedReport::
-    DetectionAttemptCompletedReport(const std::string network_name,
-                                    const std::string network_id,
+    DetectionAttemptCompletedReport(const std::string network_id,
                                     captive_portal::CaptivePortalResult result,
                                     int response_code)
-    : network_name(network_name),
-      network_id(network_id),
-      result(result),
-      response_code(response_code) {}
+    : network_id(network_id), result(result), response_code(response_code) {}
 
 void NetworkPortalDetectorImpl::DetectionAttemptCompletedReport::Report()
     const {
   // To see NET_LOG output, use '--vmodule=device_event_log*=1'
   NET_LOG(EVENT) << "Detection attempt completed: "
-                 << "name=" << network_name << ", "
-                 << "id=" << network_id << ", "
+                 << "id=" << NetworkGuidId(network_id) << ", "
                  << "result="
                  << captive_portal::CaptivePortalResultToString(result) << ", "
                  << "response_code=" << response_code;
@@ -195,8 +190,8 @@
 
 bool NetworkPortalDetectorImpl::DetectionAttemptCompletedReport::Equals(
     const DetectionAttemptCompletedReport& o) const {
-  return network_name == o.network_name && network_id == o.network_id &&
-         result == o.result && response_code == o.response_code;
+  return network_id == o.network_id && result == o.result &&
+         response_code == o.response_code;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -291,7 +286,7 @@
   if (!start_detection || !network)
     return;
   NET_LOG(EVENT) << "Starting detection attempt:"
-                 << " name=" << network->name() << " id=" << network->guid();
+                 << " id=" << NetworkId(network);
   SetNetworkPortalDetected(network, false /* portal_detected */);
   portal_state_map_.erase(network->guid());
   StartDetection();
@@ -331,7 +326,6 @@
   if (!default_network) {
     NET_LOG(EVENT) << "Default network changed: None";
 
-    default_network_name_.clear();
     default_proxy_config_.reset();
 
     StopDetection();
@@ -342,8 +336,6 @@
     return;
   }
 
-  default_network_name_ = default_network->name();
-
   bool network_changed = (default_network_id_ != default_network->guid());
   if (network_changed)
     default_network_id_ = default_network->guid();
@@ -371,8 +363,7 @@
     last_shill_reports_portal_time_ = NowTicks();
 
   NET_LOG(EVENT) << "Default network changed:"
-                 << " name=" << default_network_name_
-                 << " id=" << default_network_id_
+                 << " id=" << NetworkGuidId(default_network_id_)
                  << " state=" << default_connection_state_
                  << " changed=" << network_changed
                  << " state_changed=" << connection_state_changed;
@@ -479,8 +470,7 @@
   DCHECK(is_checking_for_portal());
 
   NET_LOG(ERROR) << "Portal detection timeout: "
-                 << " name=" << default_network_name_
-                 << " id=" << default_network_id_;
+                 << " id=" << NetworkGuidId(default_network_id_);
 
   captive_portal_detector_->Cancel();
   CaptivePortalDetector::Results results;
@@ -508,7 +498,7 @@
   }
 
   DetectionAttemptCompletedReport attempt_completed_report(
-      default_network_name_, default_network_id_, result, response_code);
+      default_network_id_, result, response_code);
   if (!attempt_completed_report_.Equals(attempt_completed_report)) {
     attempt_completed_report_ = attempt_completed_report;
     attempt_completed_report_.Report();
@@ -592,7 +582,7 @@
   if (type == chrome::NOTIFICATION_AUTH_SUPPLIED ||
       type == chrome::NOTIFICATION_AUTH_CANCELLED) {
     NET_LOG(EVENT) << "Restarting portal detection due to auth change"
-                   << " name=" << default_network_name_;
+                   << " id=" << NetworkGuidId(default_network_id_);
     StopDetection();
     ScheduleAttempt(base::TimeDelta::FromSeconds(kProxyChangeDelaySec));
   }
diff --git a/chrome/browser/chromeos/net/network_portal_detector_impl.h b/chrome/browser/chromeos/net/network_portal_detector_impl.h
index fc069de..5ff712e 100644
--- a/chrome/browser/chromeos/net/network_portal_detector_impl.h
+++ b/chrome/browser/chromeos/net/network_portal_detector_impl.h
@@ -86,8 +86,7 @@
   struct DetectionAttemptCompletedReport {
     DetectionAttemptCompletedReport();
 
-    DetectionAttemptCompletedReport(const std::string network_name,
-                                    const std::string network_id,
+    DetectionAttemptCompletedReport(const std::string network_id,
                                     captive_portal::CaptivePortalResult result,
                                     int response_code);
 
@@ -95,7 +94,6 @@
 
     bool Equals(const DetectionAttemptCompletedReport& o) const;
 
-    std::string network_name;
     std::string network_id;
     captive_portal::CaptivePortalResult result = captive_portal::RESULT_COUNT;
     int response_code = -1;
@@ -208,9 +206,6 @@
     time_ticks_for_testing_ += delta;
   }
 
-  // Name of the default network.
-  std::string default_network_name_;
-
   // Unique identifier of the default network.
   std::string default_network_id_;
 
diff --git a/chrome/browser/chromeos/network_change_manager_client.cc b/chrome/browser/chromeos/network_change_manager_client.cc
index 9fd3168..77e954a5 100644
--- a/chrome/browser/chromeos/network_change_manager_client.cc
+++ b/chrome/browser/chromeos/network_change_manager_client.cc
@@ -121,7 +121,8 @@
     // If we lost a default network, we must update our state and notify
     // observers, otherwise we have nothing to do.
     if (connection_type_ != net::NetworkChangeNotifier::CONNECTION_NONE) {
-      NET_LOG_EVENT("NCNDefaultNetworkLost", service_path_);
+      NET_LOG(EVENT) << "NCN DefaultNetwork lost"
+                     << NetworkPathId(service_path_);
       *ip_address_changed = true;
       *dns_changed = true;
       *connection_type_changed = true;
@@ -140,19 +141,18 @@
       ConnectionTypeFromShill(default_network->type(),
                               default_network->network_technology());
   if (new_connection_type != connection_type_) {
-    NET_LOG_EVENT(
-        "NCNDefaultConnectionTypeChanged",
-        base::StringPrintf("%s -> %s",
-                           net::NetworkChangeNotifier::ConnectionTypeToString(
-                               connection_type_),
-                           net::NetworkChangeNotifier::ConnectionTypeToString(
-                               new_connection_type)));
+    NET_LOG(EVENT) << "NCN Default connection type changed: "
+                   << net::NetworkChangeNotifier::ConnectionTypeToString(
+                          connection_type_)
+                   << " -> "
+                   << net::NetworkChangeNotifier::ConnectionTypeToString(
+                          new_connection_type);
     *connection_type_changed = true;
   }
   if (default_network->path() != service_path_) {
-    NET_LOG_EVENT("NCNDefaultNetworkServicePathChanged",
-                  base::StringPrintf("%s -> %s", service_path_.c_str(),
-                                     default_network->path().c_str()));
+    NET_LOG(EVENT) << "NCN Default network changed: "
+                   << NetworkPathId(service_path_) << " -> "
+                   << NetworkId(default_network);
 
     // If we had a default network service change, network resources
     // must always be invalidated.
@@ -174,16 +174,14 @@
       is_suppressed = false;
       *ip_address_changed = true;
     }
-    NET_LOG_EVENT(base::StringPrintf("%s%s", "NCNDefaultIPAddressChanged",
-                                     is_suppressed ? " (Suppressed)" : ""),
-                  base::StringPrintf("%s -> %s", ip_address_.c_str(),
-                                     new_ip_address.c_str()));
+    NET_LOG(EVENT) << "NCN Default IPAddress changed"
+                   << (is_suppressed ? " (Suppressed)" : "") << ip_address_
+                   << " -> " << new_ip_address;
   }
   std::string new_dns_servers = default_network->GetDnsServersAsString();
   if (new_dns_servers != dns_servers_) {
-    NET_LOG_EVENT("NCNDefaultDNSServerChanged",
-                  base::StringPrintf("%s -> %s", dns_servers_.c_str(),
-                                     new_dns_servers.c_str()));
+    NET_LOG(EVENT) << "NCN Default DNS server changed" << dns_servers_ << " -> "
+                   << new_dns_servers;
     *dns_changed = true;
   }
 
diff --git a/chrome/browser/chromeos/policy/system_proxy_settings_policy_handler.cc b/chrome/browser/chromeos/policy/system_proxy_settings_policy_handler.cc
index 5b2421f..a2fb9c2 100644
--- a/chrome/browser/chromeos/policy/system_proxy_settings_policy_handler.cc
+++ b/chrome/browser/chromeos/policy/system_proxy_settings_policy_handler.cc
@@ -69,8 +69,8 @@
       chromeos::kSystemProxySettingsKeySystemServicesPassword);
 
   if (!username || username->empty() || !password || password->empty()) {
-    NET_LOG_ERROR("Proxy credentials for system traffic not set.",
-                  kSystemProxyService);
+    NET_LOG(ERROR) << "Proxy credentials for system traffic not set: "
+                   << kSystemProxyService;
     return;
   }
 
@@ -88,20 +88,17 @@
 void SystemProxySettingsPolicyHandler::OnSetSystemTrafficCredentials(
     const system_proxy::SetSystemTrafficCredentialsResponse& response) {
   if (response.has_error_message()) {
-    NET_LOG_ERROR(
-        "Failed to set system traffic credentials for system proxy with "
-        "error: " +
-            response.error_message(),
-        kSystemProxyService);
+    NET_LOG(ERROR)
+        << "Failed to set system traffic credentials for system proxy: "
+        << kSystemProxyService << ", Error: " << response.error_message();
   }
 }
 
 void SystemProxySettingsPolicyHandler::OnDaemonShutDown(
     const system_proxy::ShutDownResponse& response) {
   if (response.has_error_message() && !response.error_message().empty()) {
-    NET_LOG_ERROR("Failed to shutdown system proxy with error: " +
-                      response.error_message(),
-                  kSystemProxyService);
+    NET_LOG(ERROR) << "Failed to shutdown system proxy: " << kSystemProxyService
+                   << ", error: " << response.error_message();
   }
 }
 
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn
index c0aa017..a88b1fe 100644
--- a/chrome/browser/extensions/BUILD.gn
+++ b/chrome/browser/extensions/BUILD.gn
@@ -831,6 +831,7 @@
     "//components/net_log",
     "//components/omnibox/browser",
     "//components/onc",
+    "//components/page_load_metrics/browser:browser",
     "//components/password_manager/core/browser",
     "//components/password_manager/core/browser:affiliation",
     "//components/password_manager/core/browser/leak_detection",
diff --git a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc
index 0f950c1..204f0bd2 100644
--- a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc
+++ b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc
@@ -16,11 +16,15 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
+#include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
 #include "components/permissions/permission_request_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/web_contents.h"
 #include "crypto/sha2.h"
 #include "device/fido/features.h"
+#include "extensions/browser/extension_api_frame_id_map.h"
 #include "extensions/common/error_utils.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
 #include "url/origin.h"
@@ -29,6 +33,10 @@
 #include "device/fido/win/webauthn_api.h"
 #endif  // defined(OS_WIN)
 
+namespace extensions {
+
+namespace api {
+
 namespace {
 
 // U2FAttestationPromptResult enumerates events related to attestation prompts.
@@ -86,12 +94,21 @@
                             event);
 }
 
+content::RenderFrameHost* RenderFrameHostForTabAndFrameId(
+    content::BrowserContext* const browser_context,
+    const int tab_id,
+    const int frame_id) {
+  content::WebContents* web_contents = nullptr;
+  if (!ExtensionTabUtil::GetTabById(tab_id, browser_context,
+                                    /*include_incognito=*/true,
+                                    &web_contents)) {
+    return nullptr;
+  }
+  return ExtensionApiFrameIdMap::GetRenderFrameHostById(web_contents, frame_id);
+}
+
 }  // namespace
 
-namespace extensions {
-
-namespace api {
-
 void CryptotokenRegisterProfilePrefs(
     user_prefs::PrefRegistrySyncable* registry) {
   registry->RegisterListPref(prefs::kSecurityKeyPermitAttestation);
@@ -268,5 +285,40 @@
   Respond(OneArgument(std::make_unique<base::Value>(result)));
 }
 
+ExtensionFunction::ResponseAction
+CryptotokenPrivateRecordRegisterRequestFunction::Run() {
+  auto params =
+      cryptotoken_private::RecordRegisterRequest::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+
+  content::RenderFrameHost* frame = RenderFrameHostForTabAndFrameId(
+      browser_context(), params->tab_id, params->frame_id);
+  if (!frame) {
+    return RespondNow(Error("cannot find specified tab or frame"));
+  }
+
+  page_load_metrics::MetricsWebContentsObserver::RecordFeatureUsage(
+      frame, page_load_metrics::mojom::PageLoadFeatures(
+                 {blink::mojom::WebFeature::kU2FCryptotokenRegister}, {}, {}));
+  return RespondNow(NoArguments());
+}
+
+ExtensionFunction::ResponseAction
+CryptotokenPrivateRecordSignRequestFunction::Run() {
+  auto params = cryptotoken_private::RecordSignRequest::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+
+  content::RenderFrameHost* frame = RenderFrameHostForTabAndFrameId(
+      browser_context(), params->tab_id, params->frame_id);
+  if (!frame) {
+    return RespondNow(Error("cannot find specified tab or frame"));
+  }
+
+  page_load_metrics::MetricsWebContentsObserver::RecordFeatureUsage(
+      frame, page_load_metrics::mojom::PageLoadFeatures(
+                 {blink::mojom::WebFeature::kU2FCryptotokenSign}, {}, {}));
+  return RespondNow(NoArguments());
+}
+
 }  // namespace api
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.h b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.h
index 9ac938c8..33e8072 100644
--- a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.h
+++ b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.h
@@ -63,6 +63,29 @@
   void Complete(bool result);
 };
 
+class CryptotokenPrivateRecordRegisterRequestFunction
+    : public ExtensionFunction {
+ public:
+  CryptotokenPrivateRecordRegisterRequestFunction() = default;
+  DECLARE_EXTENSION_FUNCTION("cryptotokenPrivate.recordRegisterRequest",
+                             CRYPTOTOKENPRIVATE_RECORDREGISTERREQUEST)
+
+ protected:
+  ~CryptotokenPrivateRecordRegisterRequestFunction() override = default;
+  ResponseAction Run() override;
+};
+
+class CryptotokenPrivateRecordSignRequestFunction : public ExtensionFunction {
+ public:
+  CryptotokenPrivateRecordSignRequestFunction() = default;
+  DECLARE_EXTENSION_FUNCTION("cryptotokenPrivate.recordSignRequest",
+                             CRYPTOTOKENPRIVATE_RECORDSIGNREQUEST)
+
+ protected:
+  ~CryptotokenPrivateRecordSignRequestFunction() override = default;
+  ResponseAction Run() override;
+};
+
 }  // namespace api
 }  // namespace extensions
 
diff --git a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api_unittest.cc b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api_unittest.cc
index ce64efc..4192568 100644
--- a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api_unittest.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/extensions/extension_function_test_utils.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
+#include "components/page_load_metrics/browser/page_load_metrics_test_waiter.h"
 #include "components/permissions/permission_request_manager.h"
 #include "components/permissions/test/mock_permission_prompt_factory.h"
 #include "components/sessions/content/session_tab_helper.h"
@@ -154,6 +155,57 @@
   EXPECT_FALSE(result);
 }
 
+TEST_F(CryptoTokenPrivateApiTest, RecordRegisterRequest) {
+  const GURL url("https://example.com/signin");
+  AddTab(browser(), url);
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetWebContentsAt(0);
+  const int tab_id = sessions::SessionTabHelper::IdForTab(web_contents).id();
+
+  page_load_metrics::PageLoadMetricsTestWaiter web_feature_waiter(web_contents);
+  web_feature_waiter.AddWebFeatureExpectation(
+      blink::mojom::WebFeature::kU2FCryptotokenRegister);
+  // Force the metrics waiter to attach.
+  NavigateAndCommitActiveTab(url);
+
+  auto function = base::MakeRefCounted<
+      api::CryptotokenPrivateRecordRegisterRequestFunction>();
+  auto args = std::make_unique<base::ListValue>();
+  args->AppendInteger(tab_id);
+  args->AppendInteger(0 /* top-level frame */);
+  ASSERT_TRUE(extension_function_test_utils::RunFunction(
+      function.get(), base::ListValue::From(std::move(args)), browser(),
+      api_test_utils::NONE));
+  ASSERT_EQ(function->GetResultList()->GetSize(), 0u);
+
+  web_feature_waiter.Wait();
+}
+
+TEST_F(CryptoTokenPrivateApiTest, RecordSignRequest) {
+  const GURL url("https://example.com/signin");
+  AddTab(browser(), url);
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetWebContentsAt(0);
+  const int tab_id = sessions::SessionTabHelper::IdForTab(web_contents).id();
+
+  page_load_metrics::PageLoadMetricsTestWaiter web_feature_waiter(web_contents);
+  web_feature_waiter.AddWebFeatureExpectation(
+      blink::mojom::WebFeature::kU2FCryptotokenSign);
+  // Force the metrics waiter to attach.
+  NavigateAndCommitActiveTab(url);
+
+  auto function =
+      base::MakeRefCounted<api::CryptotokenPrivateRecordSignRequestFunction>();
+  auto args = std::make_unique<base::ListValue>();
+  args->AppendInteger(tab_id);
+  args->AppendInteger(0 /* top-level frame */);
+  ASSERT_TRUE(extension_function_test_utils::RunFunction(
+      function.get(), base::ListValue::From(std::move(args)), browser(),
+      api_test_utils::NONE));
+  ASSERT_EQ(function->GetResultList()->GetSize(), 0u);
+
+  web_feature_waiter.Wait();
+}
 }  // namespace
 
 class CryptoTokenPermissionTest : public ExtensionApiUnittest {
diff --git a/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc b/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
index d1b80f6..27e5add6 100644
--- a/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
+++ b/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
@@ -784,7 +784,7 @@
           GoogleServiceAuthError::InvalidGaiaCredentialsReason::
               CREDENTIALS_REJECTED_BY_SERVER));
 
-  EXPECT_EQ(api::passwords_private::PASSWORD_CHECK_STATE_OTHER_ERROR,
+  EXPECT_EQ(api::passwords_private::PASSWORD_CHECK_STATE_SIGNED_OUT,
             delegate().GetPasswordCheckStatus().state);
 }
 
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 8c05966b..ded2b49 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -167,7 +167,7 @@
   {
     "name": "arc-print-spooler-experiment",
     "owners": [ "jschettler@google.com", "bmgordon@google.com" ],
-    "expiry_milestone": 82
+    "expiry_milestone": 84
   },
   {
     "name": "arc-usb-host",
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index d7911267..ebe00be9 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -101,6 +101,7 @@
     &kAllowRemoteContextForNotifications,
     &kAndroidBlockIntentNonSafelistedHeaders,
     &kAndroidNightModeTabReparenting,
+    &kAndroidPartnerCustomizationPhenotype,
     &kAndroidPayIntegrationV1,
     &kAndroidPayIntegrationV2,
     &kAndroidSearchEngineChoiceNotification,
@@ -287,6 +288,9 @@
 const base::Feature kAllowRemoteContextForNotifications{
     "AllowRemoteContextForNotifications", base::FEATURE_ENABLED_BY_DEFAULT};
 
+const base::Feature kAndroidPartnerCustomizationPhenotype{
+    "AndroidPartnerCustomizationPhenotype", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // TODO(rouslan): Remove this.
 const base::Feature kAndroidPayIntegrationV2{"AndroidPayIntegrationV2",
                                              base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h
index a8ab62c..dbbd359c 100644
--- a/chrome/browser/flags/android/chrome_feature_list.h
+++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -17,6 +17,7 @@
 extern const base::Feature kAllowRemoteContextForNotifications;
 extern const base::Feature kAndroidBlockIntentNonSafelistedHeaders;
 extern const base::Feature kAndroidNightModeTabReparenting;
+extern const base::Feature kAndroidPartnerCustomizationPhenotype;
 extern const base::Feature kAndroidPayIntegrationV1;
 extern const base::Feature kAndroidPayIntegrationV2;
 extern const base::Feature kAndroidPaymentApps;
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index 1ff52e1..5f976949 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -217,6 +217,8 @@
             "AndroidBlockIntentNonSafelistedHeaders";
     public static final String ANDROID_NIGHT_MODE_TAB_REPARENTING =
             "AndroidNightModeTabReparenting";
+    public static final String ANDROID_PARTNER_CUSTOMIZATION_PHENOTYPE =
+            "AndroidPartnerCustomizationPhenotype";
     public static final String ANDROID_PAY_INTEGRATION_V1 = "AndroidPayIntegrationV1";
     public static final String ANDROID_PAY_INTEGRATION_V2 = "AndroidPayIntegrationV2";
     public static final String ANDROID_SEARCH_ENGINE_CHOICE_NOTIFICATION =
diff --git a/chrome/browser/lifetime/browser_close_manager.cc b/chrome/browser/lifetime/browser_close_manager.cc
index 774aa5b..bc7995a 100644
--- a/chrome/browser/lifetime/browser_close_manager.cc
+++ b/chrome/browser/lifetime/browser_close_manager.cc
@@ -99,9 +99,7 @@
 #if defined(OS_MACOSX)
   // Mac has its own in-progress downloads prompt in app_controller_mac.mm.
   CloseBrowsers();
-  return;
-#endif
-
+#else
   int download_count =
       DownloadCoreService::NonMaliciousDownloadCountAllProfiles();
   if (download_count == 0) {
@@ -112,6 +110,7 @@
   ConfirmCloseWithPendingDownloads(
       download_count,
       base::Bind(&BrowserCloseManager::OnReportDownloadsCancellable, this));
+#endif
 }
 
 void BrowserCloseManager::ConfirmCloseWithPendingDownloads(
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter.cc b/chrome/browser/metrics/process_memory_metrics_emitter.cc
index 85adb56..3b7943b 100644
--- a/chrome/browser/metrics/process_memory_metrics_emitter.cc
+++ b/chrome/browser/metrics/process_memory_metrics_emitter.cc
@@ -146,6 +146,8 @@
      &Memory_Experimental::SetDownloadService},
     {"discardable", "Discardable", MetricSize::kLarge, kEffectiveSize,
      EmitTo::kSizeInUkmAndUma, &Memory_Experimental::SetDiscardable},
+    {"extensions/functions", "ExtensionFunctions", MetricSize::kLarge,
+     kEffectiveSize, EmitTo::kSizeInUmaOnly, nullptr},
     {"extensions/value_store", "Extensions.ValueStore", MetricSize::kLarge,
      kEffectiveSize, EmitTo::kSizeInUkmAndUma,
      &Memory_Experimental::SetExtensions_ValueStore},
diff --git a/chrome/browser/net/chrome_network_service_restart_browsertest.cc b/chrome/browser/net/chrome_network_service_restart_browsertest.cc
index f8e53f40..1c96790c 100644
--- a/chrome/browser/net/chrome_network_service_restart_browsertest.cc
+++ b/chrome/browser/net/chrome_network_service_restart_browsertest.cc
@@ -43,10 +43,8 @@
                        StoragePartitionGetNetworkContext) {
   if (content::IsInProcessNetworkService())
     return;
-#if defined(OS_MACOSX)
   // |NetworkServiceTestHelper| doesn't work on browser_tests on macOS.
-  return;
-#endif
+#if !defined(OS_MACOSX)
   StoragePartition* partition =
       BrowserContext::GetDefaultStoragePartition(browser()->profile());
 
@@ -65,6 +63,7 @@
   EXPECT_NE(old_network_context, partition->GetNetworkContext());
   EXPECT_EQ(net::OK,
             LoadBasicRequest(partition->GetNetworkContext(), GetTestURL()));
+#endif
 }
 
 // Make sure |SystemNetworkContextManager::GetContext()| returns valid interface
@@ -73,10 +72,8 @@
                        SystemNetworkContextManagerGetContext) {
   if (content::IsInProcessNetworkService())
     return;
-#if defined(OS_MACOSX)
   // |NetworkServiceTestHelper| doesn't work on browser_tests on macOS.
-  return;
-#endif
+#if !defined(OS_MACOSX)
   SystemNetworkContextManager* system_network_context_manager =
       g_browser_process->system_network_context_manager();
 
@@ -96,6 +93,7 @@
   EXPECT_EQ(net::OK,
             LoadBasicRequest(system_network_context_manager->GetContext(),
                              GetTestURL()));
+#endif
 }
 
 }  // namespace content
diff --git a/chrome/browser/net/profile_network_context_service.h b/chrome/browser/net/profile_network_context_service.h
index 3a74bf5..8294147 100644
--- a/chrome/browser/net/profile_network_context_service.h
+++ b/chrome/browser/net/profile_network_context_service.h
@@ -113,9 +113,6 @@
   // formatting them as appropriate.
   void UpdateAcceptLanguage();
 
-  // Forwards changes to |block_third_party_cookies_| to the NetworkContext.
-  void UpdateBlockThirdPartyCookies();
-
   // Computes appropriate value of Accept-Language header based on
   // |pref_accept_language_|
   std::string ComputeAcceptLanguage() const;
diff --git a/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer_browsertest.cc
index d064e0a..6f4b03c 100644
--- a/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer_browsertest.cc
+++ b/chrome/browser/page_load_metrics/observers/data_saver_site_breakdown_metrics_observer_browsertest.cc
@@ -9,10 +9,12 @@
 #include "base/command_line.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h"
 #include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h"
+#include "chrome/browser/previews/previews_test_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
@@ -240,6 +242,11 @@
   std::string data_savings_percent;
 };
 
+// Prints readable output on test failures.
+void PrintTo(const SaveDataSavingsEstimate& estimate, std::ostream* os) {
+  *os << "'" << estimate.host << "' : " << estimate.data_savings_percent;
+}
+
 struct SaveDataSingleTestCase {
   std::string test_host;
   double expected_savings_percent;
@@ -262,30 +269,50 @@
 }
 
 struct SaveDataTestCase {
-  // One of the origin_savings_estimate fields will be populated.
+  // One of the origin_savings_estimate_* fields will be populated.
   std::string origin_savings_estimate_raw_json;
   std::vector<SaveDataSavingsEstimate> origin_savings_estimate_list;
-
+  bool is_valid_json;
   std::vector<SaveDataSingleTestCase> tests;
 } kSaveDataTestCases[] = {
     // No savings recorded without field trial config.
-    {"", {}, {{"foo.com", 0.0}}},
+    {"", {}, false, {{"foo.com", 0.0}}},
 
     // No savings recorded with invalid field trial parameter.
-    {"invalid json", {}, {{"foo.com", 0.0}}},
+    {"invalid json", {}, false, {{"foo.com", 0.0}}},
+
+    // JSON not a dictionary
+    {"[\"valid\", \"json\", \"but\", \"an\", \"array\", \"type\"]",
+     {},
+     false,
+     {{"foo.com", 0.0}}},
 
     {"",
      {{"saving.com", "10"}},
+     true,
      {{{"saving.com", 10.0}, {"notsaving.com", 0.0}}}},
 
     {"",
-     {{"saving.com", "20"}, {"savingfloatingpoint.edu", "15.7"}},
-     {{{"saving.com", 20.0},
-       {"savingfloatingpoint.edu", 15.7},
+     {{"www.saving.com", "20"}, {"m.savingfloatingpoint.edu", "15.7"}},
+     true,
+     {{{"www.saving.com", 20.0},
+       {"m.savingfloatingpoint.edu", 15.7},
        {"notsaving.com", 0.0}}}}
 
 };
 
+// Prints readable output on test failures.
+void PrintTo(const SaveDataTestCase& test, std::ostream* os) {
+  *os << "{ origin_savings_estimate_raw_json='"
+      << test.origin_savings_estimate_raw_json
+      << "', origin_savings_estimate_list={";
+  for (const auto& estimate : test.origin_savings_estimate_list) {
+    PrintTo(estimate, os);
+    *os << ", ";
+  }
+  *os << " }, is_valid_json=" << test.is_valid_json << " }";
+}
+
 // Browser tests with Lite mode not enabled.
 class SaveDataSavingsEstimateBrowserTest
     : public DataSaverSiteBreakdownMetricsObserverBrowserTest,
@@ -308,10 +335,19 @@
           {});
     }
     DataSaverSiteBreakdownMetricsObserverBrowserTest::SetUp();
+    if (!estimates_json.empty()) {
+      histogram_tester_.ExpectUniqueSample(
+          "DataReductionProxy.ReportSaveDataSavings.ParseResult",
+          GetParam().is_valid_json, 1);
+    } else {
+      histogram_tester_.ExpectTotalCount(
+          "DataReductionProxy.ReportSaveDataSavings.ParseResult", 0);
+    }
   }
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
+  base::HistogramTester histogram_tester_;
 };
 
 INSTANTIATE_TEST_SUITE_P(SaveDataSavingsEstimateBrowserTest,
@@ -319,7 +355,7 @@
                          ::testing::ValuesIn(kSaveDataTestCases));
 
 IN_PROC_BROWSER_TEST_P(SaveDataSavingsEstimateBrowserTest,
-                       NavigateToSimplePage) {
+                       DISABLE_ON_WIN_MAC_CHROMEOS(NavigateToSimplePage)) {
   WaitForDBToInitialize();
 
   for (const auto& test : GetParam().tests) {
diff --git a/chrome/browser/payments/payment_handler_exploit_browsertest.cc b/chrome/browser/payments/payment_handler_exploit_browsertest.cc
index 91b27cd..a4cd5bb 100644
--- a/chrome/browser/payments/payment_handler_exploit_browsertest.cc
+++ b/chrome/browser/payments/payment_handler_exploit_browsertest.cc
@@ -48,9 +48,8 @@
                   GetActiveWebContents()->GetBrowserContext(),
                   service_worker_scope, &service_worker_process_id));
 
-    content::RenderProcessHostWatcher crash_observer(
-        content::RenderProcessHost::FromID(service_worker_process_id),
-        content::RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT);
+    content::RenderProcessHostBadMojoMessageWaiter crash_observer(
+        content::RenderProcessHost::FromID(service_worker_process_id));
 
     GURL cross_origin_url("https://127.0.0.1:80");
     EXPECT_FALSE(url::IsSameOriginWith(cross_origin_url, service_worker_scope));
@@ -58,8 +57,11 @@
 
     EXPECT_TRUE(content::ExecJs(GetActiveWebContents(), "launch()"));
 
-    crash_observer.Wait();
-    EXPECT_FALSE(crash_observer.did_exit_normally());
+    EXPECT_EQ(
+        "Received bad user message: "
+        "Received PaymentRequestEvent#openWindow() request "
+        "for a cross-origin URL.",
+        crash_observer.Wait());
   }
 
   base::test::ScopedFeatureList features_;
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index c0467563..1d661bc 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -77,6 +77,7 @@
 #include "chrome/browser/ui/search_engines/keyword_editor_controller.h"
 #include "chrome/browser/ui/send_tab_to_self/send_tab_to_self_bubble_controller.h"
 #include "chrome/browser/ui/tabs/pinned_tab_codec.h"
+#include "chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.h"
 #include "chrome/browser/ui/webui/flags_ui.h"
 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
 #include "chrome/browser/ui/webui/print_preview/policy_settings.h"
@@ -844,6 +845,7 @@
   browsing_data::prefs::RegisterBrowserUserPrefs(registry);
   certificate_transparency::prefs::RegisterPrefs(registry);
   ChromeContentBrowserClient::RegisterProfilePrefs(registry);
+  ChromeLocationBarModelDelegate::RegisterProfilePrefs(registry);
   StatefulSSLHostStateDelegate::RegisterProfilePrefs(registry);
   ChromeVersionService::RegisterProfilePrefs(registry);
   chrome_browser_net::NetErrorTabHelper::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/profiles/profile_destroyer.cc b/chrome/browser/profiles/profile_destroyer.cc
index 52f8dc1..88c6128e 100644
--- a/chrome/browser/profiles/profile_destroyer.cc
+++ b/chrome/browser/profiles/profile_destroyer.cc
@@ -122,8 +122,7 @@
         // these potential leaks, but we handle it in release so that we don't
         // crash or corrupt profile data on disk.
         LOG(WARNING) << "A render process host wasn't destroyed early enough.";
-        (*i)->profile_ = NULL;
-        break;
+        (*i)->profile_ = nullptr;
       }
     }
   }
@@ -163,7 +162,7 @@
 ProfileDestroyer::~ProfileDestroyer() {
   if (profile_) {
     ProfileDestroyer::DestroyOffTheRecordProfileNow(profile_);
-    profile_ = nullptr;
+    DCHECK(!profile_);
   }
 
   // Once the profile is deleted, all renderer hosts must have been deleted.
diff --git a/chrome/browser/resources/bookmarks/folder_node.html b/chrome/browser/resources/bookmarks/folder_node.html
index 9388154..3feb687 100644
--- a/chrome/browser/resources/bookmarks/folder_node.html
+++ b/chrome/browser/resources/bookmarks/folder_node.html
@@ -9,7 +9,7 @@
     display: grid;
     grid-template-areas: 'arrow folder label';
     grid-template-columns: 24px 24px auto;
-    height: 40px;
+    min-height: 40px;
     min-width: fit-content;
     overflow: hidden;
     padding-inline-start: calc(var(--node-depth, 0) * 15px);
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
index 565b956..1867f467 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
@@ -668,7 +668,7 @@
 <translation id="6385591741672306837">કૉલમ</translation>
 <translation id="6387719785439924554">aside</translation>
 <translation id="6393014464788431702">ઇવેન્ટના બધા ફિલ્ટર બંધ કરો</translation>
-<translation id="6417265370957905582">Google સહાયક</translation>
+<translation id="6417265370957905582">Google Assistant</translation>
 <translation id="641759969622533235">{COUNT,plural, =1{મહાવિરામ}one{# મહાવિરામ}other{# મહાવિરામ}}</translation>
 <translation id="6444046323172968959">ચેતવણી સંવાદ</translation>
 <translation id="6452403590345320472">અનુક્રમણિકા</translation>
diff --git a/chrome/browser/resources/chromeos/edu_login/edu_login_css.html b/chrome/browser/resources/chromeos/edu_login/edu_login_css.html
index d1396a9e..7a972fc3 100644
--- a/chrome/browser/resources/chromeos/edu_login/edu_login_css.html
+++ b/chrome/browser/resources/chromeos/edu_login/edu_login_css.html
@@ -24,7 +24,9 @@
     }
 
     .text-elide {
-      @apply --cr-text-elide;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
     }
 
     .secondary {
diff --git a/chrome/browser/resources/cryptotoken/enroller.js b/chrome/browser/resources/cryptotoken/enroller.js
index fd81423..4088338 100644
--- a/chrome/browser/resources/cryptotoken/enroller.js
+++ b/chrome/browser/resources/cryptotoken/enroller.js
@@ -492,6 +492,8 @@
     return null;
   }
 
+  chrome.cryptotokenPrivate.recordRegisterRequest(sender.tabId, sender.frameId);
+
   var timeoutValueSeconds = getTimeoutValueFromRequest(request);
   // Attenuate watchdog timeout value less than the enroller's timeout, so the
   // watchdog only fires after the enroller could reasonably have called back,
diff --git a/chrome/browser/resources/cryptotoken/signer.js b/chrome/browser/resources/cryptotoken/signer.js
index 30cd3ca..725e8ee 100644
--- a/chrome/browser/resources/cryptotoken/signer.js
+++ b/chrome/browser/resources/cryptotoken/signer.js
@@ -58,6 +58,9 @@
 
   queuedSignRequest = validateAndEnqueueSignRequest(
       sender, request, sendErrorResponse, sendSuccessResponse);
+  if (queuedSignRequest) {
+    chrome.cryptotokenPrivate.recordSignRequest(sender.tabId, sender.frameId);
+  }
   return queuedSignRequest;
 }
 
diff --git a/chrome/browser/resources/cryptotoken/webrequestsender.js b/chrome/browser/resources/cryptotoken/webrequestsender.js
index 9630de4..734abbb 100644
--- a/chrome/browser/resources/cryptotoken/webrequestsender.js
+++ b/chrome/browser/resources/cryptotoken/webrequestsender.js
@@ -12,6 +12,7 @@
  * @typedef {{
  *   origin: string,
  *   tabId: (number|undefined)
+ *   frameId: (number|undefined)
  * }}
  */
 var WebRequestSender;
@@ -31,6 +32,7 @@
   var sender = {origin: origin};
   if (messageSender.tab) {
     sender.tabId = messageSender.tab.id;
+    sender.frameId = messageSender.frameId;
   }
   return sender;
 }
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js
index 42dd763..573f406 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.js
+++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -1885,7 +1885,8 @@
   // includes non-white backgrounds, excluding dark mode gray if dark mode is
   // enabled.
   const isDefaultBackground = theme.usingDefaultTheme && !theme.imageUrl;
-  document.body.classList.toggle(CLASSES.USE_NOTIFIER, !isDefaultBackground);
+  const useNotifier = configData.doodleNotifierEnabled && !isDefaultBackground;
+  document.body.classList.toggle(CLASSES.USE_NOTIFIER, useNotifier);
 
   // If a custom background has been selected the image will be applied to the
   // custom-background element instead of the body.
diff --git a/chrome/browser/resources/new_tab_page/BUILD.gn b/chrome/browser/resources/new_tab_page/BUILD.gn
index 3abf289..d7bb922 100644
--- a/chrome/browser/resources/new_tab_page/BUILD.gn
+++ b/chrome/browser/resources/new_tab_page/BUILD.gn
@@ -13,6 +13,7 @@
     ":customize_dialog",
     ":fakebox",
     ":grid",
+    ":logo",
     ":theme_icon",
     ":untrusted_iframe",
     ":utils",
@@ -125,6 +126,12 @@
   ]
 }
 
+js_library("logo") {
+  deps = [
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+  ]
+}
+
 polymer_modulizer("app") {
   js_file = "app.js"
   html_file = "app.html"
@@ -197,6 +204,12 @@
   html_type = "v3-ready"
 }
 
+polymer_modulizer("logo") {
+  js_file = "logo.js"
+  html_file = "logo.html"
+  html_type = "v3-ready"
+}
+
 group("polymer3_elements") {
   public_deps = [
     ":app_module",
@@ -206,6 +219,7 @@
     ":customize_themes_module",
     ":fakebox_module",
     ":grid_module",
+    ":logo_module",
     ":mini_page_module",
     ":most_visited_module",
     ":theme_icon_module",
diff --git a/chrome/browser/resources/new_tab_page/app.html b/chrome/browser/resources/new_tab_page/app.html
index 386cdfa..c1335375 100644
--- a/chrome/browser/resources/new_tab_page/app.html
+++ b/chrome/browser/resources/new_tab_page/app.html
@@ -43,17 +43,27 @@
     flex-direction: column;
   }
 
+  #oneGoogleBar {
+    pointer-events: none;
+  }
+
   #oneGoogleBarSpacer {
     height: 56px;
     width: 100%;
   }
 
-  #oneGoogleBar {
-    height: 100%;
-    pointer-events: none;
-    position: fixed;
-    width: 100%;
-    z-index: 1;
+  #logo {
+    margin-bottom: 8px;
+  }
+
+  ntp-fakebox {
+    margin-bottom: 32px;
+  }
+
+  ntp-most-visited[dark] {
+    --icon-button-color-active: var(--google-grey-refresh-300);
+    --icon-button-color: white;
+    --tile-hover-color: rgba(255, 255, 255, .1);
   }
 
   #promo {
@@ -150,27 +160,22 @@
   #backgroundImageAttribution2 {
     font-size: 0.75rem;
   }
-
-  ntp-most-visited[dark] {
-    --icon-button-color-active: var(--google-grey-refresh-300);
-    --icon-button-color: white;
-    --tile-hover-color: rgba(255, 255, 255, .1);
-  }
 </style>
 <div id="background"
     style="background-color: [[rgbOrInherit_(theme_.backgroundColor)]];
         --ntp-theme-text-color: [[rgbOrInherit_(theme_.shortcutTextColor)]];
         --ntp-theme-shortcut-background-color:
-              [[rgbOrInherit_(theme_.shortcutBackgroundColor)]];">
+              [[rgbOrInherit_(theme_.shortcutBackgroundColor)]];
+        --ntp-logo-color: [[rgbOrInherit_(theme_.logoColor)]];">
   <ntp-untrusted-iframe id="backgroundImage" path="[[backgroundImagePath_]]"
       hidden="[[!showBackgroundImage_]]">
   </ntp-untrusted-iframe>
   <div id="backgroundGradient" hidden="[[!showBackgroundImage_]]"></div>
   <div id="content">
     <div id="oneGoogleBarSpacer"></div>
-    <ntp-untrusted-iframe id="oneGoogleBar" path="one-google-bar"
-        hidden$="[[!oneGoogleBarLoaded_]]">
-    </ntp-untrusted-iframe>
+    <ntp-logo id="logo" doodle-allowed$="[[doodleAllowed_]]"
+        single-colored$="[[singleColoredLogo_]]">
+    </ntp-logo>
     <ntp-fakebox id="fakebox" on-open-voice-search="onVoiceSearchClick_">
     </ntp-fakebox>
     <ntp-most-visited id="mostVisited" dark$="[[theme_.isDark]]">
@@ -214,4 +219,7 @@
       </div>
     </a>
   </div>
+  <ntp-untrusted-iframe id="oneGoogleBar" path="one-google-bar"
+      hidden$="[[!oneGoogleBarLoaded_]]">
+  </ntp-untrusted-iframe>
 </div>
diff --git a/chrome/browser/resources/new_tab_page/app.js b/chrome/browser/resources/new_tab_page/app.js
index f79ccc1..f5a695f 100644
--- a/chrome/browser/resources/new_tab_page/app.js
+++ b/chrome/browser/resources/new_tab_page/app.js
@@ -8,6 +8,7 @@
 import './voice_search_overlay.js';
 import './untrusted_iframe.js';
 import './fakebox.js';
+import './logo.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.m.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 
@@ -62,6 +63,18 @@
         computed: 'computeBackgroundImagePath_(theme_)',
         type: String,
       },
+
+      /** @private */
+      doodleAllowed_: {
+        computed: 'computeDoodleAllowed_(showBackgroundImage_, theme_)',
+        type: Boolean,
+      },
+
+      /** @private */
+      singleColoredLogo_: {
+        computed: 'computeSingleColoredLogo_(theme_)',
+        type: Boolean,
+      },
     };
   }
 
@@ -154,6 +167,24 @@
   }
 
   /**
+   * @return {boolean}
+   * @private
+   */
+  computeDoodleAllowed_() {
+    return !this.showBackgroundImage_ &&
+        (!this.theme_ ||
+         this.theme_.type === newTabPage.mojom.ThemeType.DEFAULT);
+  }
+
+  /**
+   * @return {boolean}
+   * @private
+   */
+  computeSingleColoredLogo_() {
+    return this.theme_ && !!this.theme_.logoColor;
+  }
+
+  /**
    * Handles messages from the OneGoogleBar iframe. The messages that are
    * handled include show bar on load and activate/deactivate.
    * The activate/deactivate controls if the OneGoogleBar accepts mouse events,
diff --git a/chrome/browser/resources/new_tab_page/logo.html b/chrome/browser/resources/new_tab_page/logo.html
new file mode 100644
index 0000000..2c4a887
--- /dev/null
+++ b/chrome/browser/resources/new_tab_page/logo.html
@@ -0,0 +1,41 @@
+<style>
+  :host {
+    height: 230px;
+  }
+
+  #singleColoredLogo,
+  #multiColoredLogo {
+    height: 92px;
+    margin-top: 108px;
+    width: 272px;
+  }
+
+  #singleColoredLogo {
+    -webkit-mask-image: url(chrome://resources/images/google_logo.svg);
+    -webkit-mask-repeat: no-repeat;
+    -webkit-mask-size: 100%;
+    background-color: var(--ntp-logo-color);
+  }
+
+  #multiColoredLogo {
+    background-image: url(chrome://resources/images/google_logo.svg);
+  }
+
+  #iframe {
+    height: 200px;
+    width: 500px;
+  }
+</style>
+<iron-pages selected="[[mode_]]" attr-for-selected="id">
+  <div id="logo">
+    <!-- TODO(crbug.com/1039910): Add flower if doodle available. -->
+    <div id="singleColoredLogo" hidden="[[!singleColored]]"></div>
+    <div id="multiColoredLogo" hidden="[[singleColored]]"></div>
+  </div>
+  <div id="doodle">
+    <img id="image" src="[[imageUrl_]]" hidden="[[!imageUrl_]]"></img>
+    <ntp-untrusted-iframe id="iframe" path="[[iframeUrl_]]"
+        hidden="[[!iframeUrl_]]">
+    </ntp-untrusted-iframe>
+  </div>
+</iron-pages>
diff --git a/chrome/browser/resources/new_tab_page/logo.js b/chrome/browser/resources/new_tab_page/logo.js
new file mode 100644
index 0000000..955e2ae
--- /dev/null
+++ b/chrome/browser/resources/new_tab_page/logo.js
@@ -0,0 +1,117 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'chrome://resources/polymer/v3_0/iron-pages/iron-pages.js';
+import './untrusted_iframe.js';
+
+import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {BrowserProxy} from './browser_proxy.js';
+
+// Shows the Google logo or a doodle if available.
+class LogoElement extends PolymerElement {
+  static get is() {
+    return 'ntp-logo';
+  }
+
+  static get template() {
+    return html`{__html_template__}`;
+  }
+
+  static get properties() {
+    return {
+      /**
+       * If true displays doodle if one is available instead of Google logo.
+       * @type {boolean}
+       */
+      doodleAllowed: {
+        reflectToAttribute: true,
+        type: Boolean,
+        value: true,
+      },
+
+      /**
+       * If true displays the Google logo single-colored.
+       * @type {boolean}
+       */
+      singleColored: {
+        reflectToAttribute: true,
+        type: Boolean,
+        value: false,
+      },
+
+      /** @private */
+      loaded_: Boolean,
+
+      /** @private */
+      doodle_: Object,
+
+      /** @private */
+      mode_: {
+        computed: 'computeMode_(doodleAllowed, loaded_, doodle_)',
+        type: Boolean,
+      },
+
+      /** @private */
+      imageUrl_: {
+        computed: 'computeImageUrl_(doodle_)',
+        type: String,
+      },
+
+      /** @private */
+      iframeUrl_: {
+        computed: 'computeIframeUrl_(doodle_)',
+        type: String,
+      },
+    };
+  }
+
+  constructor() {
+    super();
+    BrowserProxy.getInstance().handler.getDoodle().then(({doodle}) => {
+      this.doodle_ = doodle;
+      this.loaded_ = true;
+    });
+  }
+
+  /**
+   * @return {string}
+   * @private
+   */
+  computeMode_() {
+    if (this.doodleAllowed) {
+      if (!this.loaded_) {
+        return 'none';
+      }
+      if (this.doodle_ &&
+          /* We hide interactive doodles when offline. Otherwise, the iframe
+             would show an ugly error page. */
+          (!this.doodle_.content.url || window.navigator.onLine)) {
+        return 'doodle';
+      }
+    }
+    return 'logo';
+  }
+
+  /**
+   * @return {string}
+   * @private
+   */
+  computeImageUrl_() {
+    return (this.doodle_ && this.doodle_.content.image) ?
+        this.doodle_.content.image :
+        '';
+  }
+
+  /**
+   * @return {string}
+   * @private
+   */
+  computeIframeUrl_() {
+    return (this.doodle_ && this.doodle_.content.url) ?
+        `iframe?${this.doodle_.content.url.url}` :
+        '';
+  }
+}
+
+customElements.define(LogoElement.is, LogoElement);
diff --git a/chrome/browser/resources/new_tab_page/most_visited.html b/chrome/browser/resources/new_tab_page/most_visited.html
index 06548b7..3c09c59 100644
--- a/chrome/browser/resources/new_tab_page/most_visited.html
+++ b/chrome/browser/resources/new_tab_page/most_visited.html
@@ -16,7 +16,6 @@
     display: flex;
     flex-wrap: wrap;
     justify-content: center;
-    margin: 10px auto;
     overflow: hidden;
     transition: opacity 300ms ease-in-out;
     width: calc(var(--content-width) + 12px);
diff --git a/chrome/browser/resources/new_tab_page/new_tab_page_resources.grd b/chrome/browser/resources/new_tab_page/new_tab_page_resources.grd
index b7658b3..3ffb582 100644
--- a/chrome/browser/resources/new_tab_page/new_tab_page_resources.grd
+++ b/chrome/browser/resources/new_tab_page/new_tab_page_resources.grd
@@ -82,6 +82,9 @@
       <include name="IDR_NEW_TAB_PAGE_FAKEBOX_JS"
           file="${root_gen_dir}/chrome/browser/resources/new_tab_page/fakebox.js"
           use_base_dir="false" type="BINDATA" compress="gzip" />
+      <include name="IDR_NEW_TAB_PAGE_LOGO_JS"
+          file="${root_gen_dir}/chrome/browser/resources/new_tab_page/logo.js"
+          use_base_dir="false" type="BINDATA" compress="gzip" />
     </includes>
     <structures>
       <structure name="IDR_NEW_TAB_PAGE_NEW_TAB_PAGE_HTML"
@@ -104,6 +107,8 @@
           file="untrusted/promo.js" type="chrome_html" compress="gzip" />
       <structure name="IDR_NEW_TAB_PAGE_UNTRUSTED_IMAGE_HTML"
           file="untrusted/image.html" type="chrome_html" compress="gzip" />
+      <structure name="IDR_NEW_TAB_PAGE_UNTRUSTED_IFRAME_HTML"
+          file="untrusted/iframe.html" type="chrome_html" compress="gzip" />
     </structures>
   </release>
 </grit>
diff --git a/chrome/browser/resources/new_tab_page/untrusted/iframe.html b/chrome/browser/resources/new_tab_page/untrusted/iframe.html
new file mode 100644
index 0000000..43ee393
--- /dev/null
+++ b/chrome/browser/resources/new_tab_page/untrusted/iframe.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<html>
+  <head>
+    <style>
+      html,
+      body,
+      iframe {
+        height: 100%;
+        width: 100%;
+      }
+
+      body {
+        margin: 0
+      }
+
+      iframe {
+        border: none;
+      }
+    </style>
+  </head>
+  <body>
+    <iframe src="$i18nRaw{url}"></iframe>
+  </body>
+</html>
diff --git a/chrome/browser/resources/new_tab_page/untrusted_iframe.html b/chrome/browser/resources/new_tab_page/untrusted_iframe.html
index 38c6011..726e1b0d 100644
--- a/chrome/browser/resources/new_tab_page/untrusted_iframe.html
+++ b/chrome/browser/resources/new_tab_page/untrusted_iframe.html
@@ -2,8 +2,8 @@
   iframe {
     border: none;
     border-radius: inherit;
-    height: 100%;
-    width: 100%;
+    height: inherit;
+    width: inherit;
   }
 </style>
 <iframe id="iframe" src="[[src_]]"></iframe>
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_page.js b/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_page.js
index e95731f..fc8d142 100644
--- a/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_page.js
+++ b/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_page.js
@@ -1255,7 +1255,6 @@
     // configurations are set.
     const vpnConfig = config.typeConfig.vpn;
     if (vpnConfig) {
-      vpnConfig.type = this.managedProperties_.typeProperties.vpn.type;
       if (vpnConfig.openVpn && vpnConfig.openVpn.saveCredentials == undefined) {
         vpnConfig.openVpn.saveCredentials = false;
       }
diff --git a/chrome/browser/resources/settings/controls/settings_toggle_button.html b/chrome/browser/resources/settings/controls/settings_toggle_button.html
index 3ead3be..af9ca39 100644
--- a/chrome/browser/resources/settings/controls/settings_toggle_button.html
+++ b/chrome/browser/resources/settings/controls/settings_toggle_button.html
@@ -26,7 +26,9 @@
       }
 
       :host([elide-label]) .label {
-        @apply --cr-text-elide;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
       }
 
       #outerRow {
diff --git a/chrome/browser/resources/settings/lazy_load.js b/chrome/browser/resources/settings/lazy_load.js
index ef94bde..8a7dcd4 100644
--- a/chrome/browser/resources/settings/lazy_load.js
+++ b/chrome/browser/resources/settings/lazy_load.js
@@ -65,6 +65,7 @@
 import './search_engines_page/search_engine_dialog.m.js';
 import './search_engines_page/search_engine_entry.m.js';
 import './site_settings/chooser_exception_list_entry.m.js';
+import './site_settings/site_details_permission.m.js';
 import './site_settings/site_entry.m.js';
 import './site_settings/site_list_entry.m.js';
 import './site_settings/site_list.m.js';
diff --git a/chrome/browser/resources/settings/settings_resources_v3.grdp b/chrome/browser/resources/settings/settings_resources_v3.grdp
index 792d10c..7e0ea28 100644
--- a/chrome/browser/resources/settings/settings_resources_v3.grdp
+++ b/chrome/browser/resources/settings/settings_resources_v3.grdp
@@ -602,6 +602,10 @@
            file="${root_gen_dir}/chrome/browser/resources/settings/site_settings/site_data_details_subpage.m.js"
            use_base_dir="false"
            type="BINDATA" />
+  <include name="IDR_SETTINGS_SITE_SETTINGS_SITE_DETAILS_PERMISSION_M_JS"
+           file="${root_gen_dir}/chrome/browser/resources/settings/site_settings/site_details_permission.m.js"
+           use_base_dir="false"
+           type="BINDATA" />
   <include name="IDR_SETTINGS_SITE_SETTINGS_SITE_ENTRY_M_JS"
            file="${root_gen_dir}/chrome/browser/resources/settings/site_settings/site_entry.m.js"
            use_base_dir="false"
diff --git a/chrome/browser/resources/settings/settings_shared_css.html b/chrome/browser/resources/settings/settings_shared_css.html
index e5bf3ed..ef097ab1 100644
--- a/chrome/browser/resources/settings/settings_shared_css.html
+++ b/chrome/browser/resources/settings/settings_shared_css.html
@@ -126,7 +126,9 @@
 
       /* See also: .no-min-width below. */
       .text-elide {
-        @apply --cr-text-elide;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
       }
 
       /* By default, flexbox children have min-width calculated to be the width
diff --git a/chrome/browser/resources/settings/site_settings/BUILD.gn b/chrome/browser/resources/settings/site_settings/BUILD.gn
index 208bda0..d80e6d0 100644
--- a/chrome/browser/resources/settings/site_settings/BUILD.gn
+++ b/chrome/browser/resources/settings/site_settings/BUILD.gn
@@ -320,7 +320,7 @@
 
     #    ":site_data_entry.m",
     #    ":site_details.m",
-    #    ":site_details_permission.m",
+    ":site_details_permission.m",
     ":site_entry.m",
     ":site_list.m",
     ":site_list_entry.m",
@@ -517,7 +517,13 @@
 js_library("site_details_permission.m") {
   sources = [ "$root_gen_dir/chrome/browser/resources/settings/site_settings/site_details_permission.m.js" ]
   deps = [
-    # TODO: Fill those in.
+    ":constants.m",
+    ":site_settings_behavior.m",
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+    "//ui/webui/resources/js:assert.m",
+    "//ui/webui/resources/js:i18n_behavior.m",
+    "//ui/webui/resources/js:load_time_data.m",
+    "//ui/webui/resources/js:web_ui_listener_behavior.m",
   ]
   extra_deps = [ ":site_details_permission_module" ]
 }
@@ -772,6 +778,13 @@
   js_file = "site_details_permission.js"
   html_file = "site_details_permission.html"
   html_type = "dom-module"
+  auto_imports = settings_auto_imports + [
+                   "chrome/browser/resources/settings/route.html|routes",
+                   "chrome/browser/resources/settings/site_settings/constants.html|ContentSetting,ContentSettingsTypes,SiteSettingSource",
+                   "chrome/browser/resources/settings/site_settings/site_settings_prefs_browser_proxy.html|RawSiteException",
+                   "ui/webui/resources/html/assert.html|assert",
+                 ]
+  namespace_rewrites = settings_namespace_rewrites
 }
 
 polymer_modulizer("site_entry") {
diff --git a/chrome/browser/resources/settings/site_settings/site_details_permission.html b/chrome/browser/resources/settings/site_settings/site_details_permission.html
index 9fa3257..36abd5f 100644
--- a/chrome/browser/resources/settings/site_settings/site_details_permission.html
+++ b/chrome/browser/resources/settings/site_settings/site_details_permission.html
@@ -2,8 +2,11 @@
 
 <link rel="import" href="chrome://resources/cr_elements/md_select_css.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
-<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
+<link rel="import" href="chrome://resources/html/assert.html">
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
+<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
+<link rel="import" href="../i18n_setup.html">
+<link rel="import" href="../route.html">
 <link rel="import" href="../settings_shared_css.html">
 <link rel="import" href="../settings_vars_css.html">
 <link rel="import" href="constants.html">
diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc
index a70206c..853a08b 100644
--- a/chrome/browser/search/local_ntp_source.cc
+++ b/chrome/browser/search/local_ntp_source.cc
@@ -623,6 +623,10 @@
               omnibox::kOmniboxSuggestionTransparencyOptions));
     }
 
+    config_data.SetBoolean(
+        "doodleNotifierEnabled",
+        base::FeatureList::IsEnabled(ntp_features::kDoodleNotifier));
+
     // Serialize the dictionary.
     std::string js_text;
     JSONStringValueSerializer serializer(&js_text);
@@ -748,7 +752,7 @@
     if (!observing()) {
       ++version_started_;
     }
-    service->GetLogo(std::move(callbacks));
+    service->GetLogo(std::move(callbacks), /*for_webui_ntp=*/false);
   }
 
   bool observing() const {
diff --git a/chrome/browser/search/ntp_features.cc b/chrome/browser/search/ntp_features.cc
index 9dc056d..a145e95 100644
--- a/chrome/browser/search/ntp_features.cc
+++ b/chrome/browser/search/ntp_features.cc
@@ -42,6 +42,10 @@
 const base::Feature kSearchSuggestChips{"SearchSuggestChips",
                                         base::FEATURE_DISABLED_BY_DEFAULT};
 
+// If enabled, shows the Doodle notifier spinner next to Google logo on the NTP.
+const base::Feature kDoodleNotifier{"DoodleNotifier",
+                                    base::FEATURE_ENABLED_BY_DEFAULT};
+
 // If enabled, the WebUI new tab page will load when a new tab is created
 // instead of the local NTP.
 const base::Feature kWebUI{"NtpWebUI", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/search/ntp_features.h b/chrome/browser/search/ntp_features.h
index 5131b407..dabfd81 100644
--- a/chrome/browser/search/ntp_features.h
+++ b/chrome/browser/search/ntp_features.h
@@ -23,6 +23,8 @@
 
 extern const base::Feature kSearchSuggestChips;
 
+extern const base::Feature kDoodleNotifier;
+
 // Returns true if either kRealbox or omnibox::kZeroSuggestionsOnNTPRealbox
 // are enabled; or omnibox::kOnFocusSuggestions is enabled and configured to
 // show suggestions of some type in the NTP Realbox.
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanCoordinator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanCoordinator.java
index 40bbc57..cb25058 100644
--- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanCoordinator.java
+++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanCoordinator.java
@@ -7,6 +7,7 @@
 import android.content.Context;
 import android.view.View;
 
+import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.browser.share.qrcode.QrCodeDialogTab;
 import org.chromium.ui.modelutil.PropertyModel;
 import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
@@ -40,6 +41,7 @@
 
     @Override
     public void onResume() {
+        RecordUserAction.record("SharingQRCode.TabVisible.Scan");
         mMediator.setIsOnForeground(true);
     }
 
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanMediator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanMediator.java
index 37cbec8..6ccb88d 100644
--- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanMediator.java
+++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanMediator.java
@@ -21,6 +21,7 @@
 import com.google.android.gms.vision.barcode.Barcode;
 import com.google.android.gms.vision.barcode.BarcodeDetector;
 
+import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.base.task.AsyncTask;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.IntentHandler;
@@ -162,12 +163,14 @@
             String toastMessage =
                     mContext.getString(R.string.qr_code_not_a_url_label, firstCode.rawValue);
             Toast.makeText(mContext, toastMessage, Toast.LENGTH_LONG).show();
+            RecordUserAction.record("SharingQRCode.ScannedNonURL");
             camera.setOneShotPreviewCallback(this);
             return;
         }
 
         openUrl(firstCode.rawValue);
         mNavigationObserver.onNavigation();
+        RecordUserAction.record("SharingQRCode.ScannedURL");
     }
 
     private void openUrl(String url) {
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/share_tab/QrCodeShareCoordinator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/share_tab/QrCodeShareCoordinator.java
index c6524d8..1cf04a6 100644
--- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/share_tab/QrCodeShareCoordinator.java
+++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/share_tab/QrCodeShareCoordinator.java
@@ -7,6 +7,7 @@
 import android.content.Context;
 import android.view.View;
 
+import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.browser.share.qrcode.QrCodeDialogTab;
 import org.chromium.ui.modelutil.PropertyModel;
 import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
@@ -33,7 +34,9 @@
     }
 
     @Override
-    public void onResume() {}
+    public void onResume() {
+        RecordUserAction.record("SharingQRCode.TabVisible.Share");
+    }
 
     @Override
     public void onPause() {}
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/share_tab/QrCodeShareMediator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/share_tab/QrCodeShareMediator.java
index dfe0ca2..39e50c2 100644
--- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/share_tab/QrCodeShareMediator.java
+++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/share_tab/QrCodeShareMediator.java
@@ -8,6 +8,7 @@
 import android.graphics.Bitmap;
 import android.view.View;
 
+import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.share.ShareImageFileUtils;
 import org.chromium.ui.modelutil.PropertyModel;
@@ -20,6 +21,8 @@
 class QrCodeShareMediator implements ShareImageFileUtils.OnImageSaveListener {
     private final Context mContext;
     private final PropertyModel mPropertyModel;
+    // The number of times the user has attempted to download the QR code in this dialog.
+    private int mNumDownloads;
 
     /**
      * The QrCodeScanMediator constructor.
@@ -42,6 +45,17 @@
                     R.string.qr_code_filename_prefix, String.valueOf(System.currentTimeMillis()));
             ShareImageFileUtils.saveBitmapToExternalStorage(mContext, fileName, qrcodeBitmap, this);
         }
+        logDownload();
+    }
+
+    /** Logs user actions when attempting to download a QR code. */
+    private void logDownload() {
+        // Always log the singular metric; otherwise it's easy to miss during analysis.
+        RecordUserAction.record("SharingQRCode.DownloadQRCode");
+        if (mNumDownloads > 0) {
+            RecordUserAction.record("SharingQRCode.DownloadQRCodeMultipleAttempts");
+        }
+        mNumDownloads++;
     }
 
     // ShareImageFileUtils.OnImageSaveListener implementation.
@@ -49,11 +63,13 @@
     public void onImageSaved(File imageFile) {
         // TODO(gayane): Maybe need to show confirmation message.
         mPropertyModel.set(QrCodeShareViewProperties.DOWNLOAD_SUCCESSFUL, true);
+        RecordUserAction.record("SharingQRCode.DownloadQRCode.Succeeded");
     }
 
     @Override
     public void onImageSaveError() {
         // TODO(gayane): Maybe need to show error message.
         mPropertyModel.set(QrCodeShareViewProperties.DOWNLOAD_SUCCESSFUL, false);
+        RecordUserAction.record("SharingQRCode.DownloadQRCode.Failed");
     }
 }
\ No newline at end of file
diff --git a/chrome/browser/sync/glue/extensions_activity_monitor_unittest.cc b/chrome/browser/sync/glue/extensions_activity_monitor_unittest.cc
index 334056e5..622e2c3d 100644
--- a/chrome/browser/sync/glue/extensions_activity_monitor_unittest.cc
+++ b/chrome/browser/sync/glue/extensions_activity_monitor_unittest.cc
@@ -52,7 +52,7 @@
 void FireBookmarksApiEvent(
     const scoped_refptr<Extension>& extension, int repeats) {
   scoped_refptr<T> bookmarks_function(new T());
-  bookmarks_function->set_name(T::function_name());
+  bookmarks_function->SetName(T::function_name());
   for (int i = 0; i < repeats; i++) {
     content::NotificationService::current()->Notify(
         extensions::NOTIFICATION_EXTENSION_BOOKMARKS_API_INVOKED,
diff --git a/chrome/browser/sync/sync_ui_util.cc b/chrome/browser/sync/sync_ui_util.cc
index 9c79935c..f1769fbf 100644
--- a/chrome/browser/sync/sync_ui_util.cc
+++ b/chrome/browser/sync/sync_ui_util.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/signin/signin_util.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
@@ -20,6 +21,7 @@
 #include "components/sync/driver/sync_user_settings.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "google_apis/gaia/google_service_auth_error.h"
+#include "net/base/url_util.h"
 
 #if defined(OS_CHROMEOS)
 #include "chromeos/constants/chromeos_features.h"
@@ -177,8 +179,9 @@
   FocusWebContents(browser);
 
   NavigateParams params(GetSingletonTabNavigateParams(browser, url));
-  params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE;
-  ShowSingletonTabOverwritingNTP(browser, std::move(params));
+  // Allow the window to close itself.
+  params.created_with_opener = true;
+  Navigate(&params);
 }
 
 // Returns true if the user has consented to browser sync-the-feature or
@@ -334,8 +337,14 @@
 }
 
 void OpenTabForSyncKeyRetrieval(Browser* browser) {
-  OpenTabForSyncKeyRetrievalWithURL(
-      browser, GaiaUrls::GetInstance()->signin_chrome_sync_keys_url());
+  const GURL continue_url =
+      GURL(UIThreadSearchTermsData().GoogleBaseURLValue());
+  GURL retrieval_url = GaiaUrls::GetInstance()->signin_chrome_sync_keys_url();
+  if (continue_url.is_valid()) {
+    retrieval_url = net::AppendQueryParameter(retrieval_url, "continue",
+                                              continue_url.spec());
+  }
+  OpenTabForSyncKeyRetrievalWithURL(browser, retrieval_url);
 }
 
 void OpenTabForSyncKeyRetrievalWithURLForTesting(Browser* browser,
diff --git a/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc b/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
index dc339757..778a71b3 100644
--- a/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
@@ -22,6 +22,7 @@
 #include "chrome/browser/sync/test/integration/status_change_checker.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_tabstrip.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/sync/base/time.h"
@@ -33,6 +34,7 @@
 #include "crypto/ec_private_key.h"
 #include "google_apis/gaia/gaia_switches.h"
 #include "testing/gmock/include/gmock/gmock.h"
+#include "url/url_constants.h"
 
 namespace {
 
@@ -172,6 +174,35 @@
   return specifics;
 }
 
+// Used to wait until a tab closes.
+class TabClosedChecker : public StatusChangeChecker,
+                         public content::WebContentsObserver {
+ public:
+  explicit TabClosedChecker(content::WebContents* web_contents)
+      : WebContentsObserver(web_contents) {
+    DCHECK(web_contents);
+  }
+
+  ~TabClosedChecker() override = default;
+
+  // StatusChangeChecker overrides.
+  bool IsExitConditionSatisfied(std::ostream* os) override {
+    *os << "Waiting for the tab to be closed";
+    return closed_;
+  }
+
+  // content::WebContentsObserver overrides.
+  void WebContentsDestroyed() override {
+    closed_ = true;
+    CheckExitCondition();
+  }
+
+ private:
+  bool closed_ = false;
+
+  DISALLOW_COPY_AND_ASSIGN(TabClosedChecker);
+};
+
 // Used to wait until a page's title changes to a certain value (useful to
 // detect Javascript events).
 class PageTitleChecker : public StatusChangeChecker,
@@ -184,7 +215,7 @@
     DCHECK(web_contents);
   }
 
-  ~PageTitleChecker() override {}
+  ~PageTitleChecker() override = default;
 
   // StatusChangeChecker overrides.
   bool IsExitConditionSatisfied(std::ostream* os) override {
@@ -579,6 +610,11 @@
                                 IDS_SYNC_STATUS_NEEDS_KEYS_BUTTON,
                                 sync_ui_util::RETRIEVE_TRUSTED_VAULT_KEYS));
 
+  // There needs to be an existing tab for the second tab (the retrieval flow)
+  // to be closeable via javascript.
+  chrome::AddTabAt(GetBrowser(0), GURL(url::kAboutBlankURL), /*index=*/0,
+                   /*foreground=*/true);
+
   // Mimic opening a web page where the user can interact with the retrieval
   // flow.
   sync_ui_util::OpenTabForSyncKeyRetrievalWithURLForTesting(GetBrowser(0),
@@ -586,12 +622,10 @@
   ASSERT_THAT(GetBrowser(0)->tab_strip_model()->GetActiveWebContents(),
               NotNull());
 
-  // Wait until the title changes to "OK" via Javascript, which indicates
-  // completion.
-  PageTitleChecker title_checker(
-      /*expected_title=*/"OK",
-      GetBrowser(0)->tab_strip_model()->GetActiveWebContents());
-  EXPECT_TRUE(title_checker.Wait());
+  // Wait until the page closes, which indicates successful completion.
+  EXPECT_TRUE(
+      TabClosedChecker(GetBrowser(0)->tab_strip_model()->GetActiveWebContents())
+          .Wait());
 
   EXPECT_TRUE(PasswordSyncActiveChecker(GetSyncService(0)).Wait());
   EXPECT_FALSE(GetSyncService(0)
@@ -612,6 +646,11 @@
 
   ASSERT_TRUE(SetupClients());
 
+  // There needs to be an existing tab for the second tab (the retrieval flow)
+  // to be closeable via javascript.
+  chrome::AddTabAt(GetBrowser(0), GURL(url::kAboutBlankURL), /*index=*/0,
+                   /*foreground=*/true);
+
   // Mimic opening a web page where the user can interact with the retrieval
   // flow, while the user is signed out.
   sync_ui_util::OpenTabForSyncKeyRetrievalWithURLForTesting(GetBrowser(0),
@@ -619,12 +658,10 @@
   ASSERT_THAT(GetBrowser(0)->tab_strip_model()->GetActiveWebContents(),
               NotNull());
 
-  // Wait until the title changes to "OK" via Javascript, which indicates
-  // completion.
-  PageTitleChecker title_checker(
-      /*expected_title=*/"OK",
-      GetBrowser(0)->tab_strip_model()->GetActiveWebContents());
-  EXPECT_TRUE(title_checker.Wait());
+  // Wait until the page closes, which indicates successful completion.
+  EXPECT_TRUE(
+      TabClosedChecker(GetBrowser(0)->tab_strip_model()->GetActiveWebContents())
+          .Wait());
 }
 
 IN_PROC_BROWSER_TEST_F(SingleClientNigoriWithWebApiTest,
@@ -660,6 +697,11 @@
   // retrieval or before it).
   cookie_helper::AddSigninCookie(GetProfile(0));
 
+  // There needs to be an existing tab for the second tab (the retrieval flow)
+  // to be closeable via javascript.
+  chrome::AddTabAt(GetBrowser(0), GURL(url::kAboutBlankURL), /*index=*/0,
+                   /*foreground=*/true);
+
   TrustedVaultKeysChangedStateChecker keys_fetched_checker(GetSyncService(0));
   // Mimic opening a web page where the user can interact with the retrieval
   // flow, while the user is signed out.
@@ -668,12 +710,10 @@
   ASSERT_THAT(GetBrowser(0)->tab_strip_model()->GetActiveWebContents(),
               NotNull());
 
-  // Wait until the title changes to "OK" via Javascript, which indicates
-  // completion.
-  PageTitleChecker title_checker(
-      /*expected_title=*/"OK",
-      GetBrowser(0)->tab_strip_model()->GetActiveWebContents());
-  EXPECT_TRUE(title_checker.Wait());
+  // Wait until the page closes, which indicates successful completion.
+  EXPECT_TRUE(
+      TabClosedChecker(GetBrowser(0)->tab_strip_model()->GetActiveWebContents())
+          .Wait());
   EXPECT_TRUE(keys_fetched_checker.Wait());
 
   // Mimic signin cookie clearing.
@@ -720,6 +760,11 @@
   ASSERT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::PASSWORDS));
   ASSERT_TRUE(sync_ui_util::ShouldShowSyncKeysMissingError(GetSyncService(0)));
 
+  // There needs to be an existing tab for the second tab (the retrieval flow)
+  // to be closeable via javascript.
+  chrome::AddTabAt(GetBrowser(0), GURL(url::kAboutBlankURL), /*index=*/0,
+                   /*foreground=*/true);
+
   // Mimic opening a web page where the user can interact with the retrieval
   // flow.
   sync_ui_util::OpenTabForSyncKeyRetrievalWithURLForTesting(GetBrowser(0),
@@ -727,12 +772,10 @@
   ASSERT_THAT(GetBrowser(0)->tab_strip_model()->GetActiveWebContents(),
               NotNull());
 
-  // Wait until the title changes to "OK" via Javascript, which indicates
-  // completion.
-  PageTitleChecker title_checker(
-      /*expected_title=*/"OK",
-      GetBrowser(0)->tab_strip_model()->GetActiveWebContents());
-  ASSERT_TRUE(title_checker.Wait());
+  // Wait until the page closes, which indicates successful completion.
+  EXPECT_TRUE(
+      TabClosedChecker(GetBrowser(0)->tab_strip_model()->GetActiveWebContents())
+          .Wait());
 
   // Mimic remote transition to keystore passphrase.
   const std::vector<std::vector<uint8_t>>& keystore_keys =
@@ -784,6 +827,11 @@
   ASSERT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::PASSWORDS));
   ASSERT_TRUE(sync_ui_util::ShouldShowSyncKeysMissingError(GetSyncService(0)));
 
+  // There needs to be an existing tab for the second tab (the retrieval flow)
+  // to be closeable via javascript.
+  chrome::AddTabAt(GetBrowser(0), GURL(url::kAboutBlankURL), /*index=*/0,
+                   /*foreground=*/true);
+
   // Mimic opening a web page where the user can interact with the retrieval
   // flow.
   sync_ui_util::OpenTabForSyncKeyRetrievalWithURLForTesting(GetBrowser(0),
@@ -791,12 +839,10 @@
   ASSERT_THAT(GetBrowser(0)->tab_strip_model()->GetActiveWebContents(),
               NotNull());
 
-  // Wait until the title changes to "OK" via Javascript, which indicates
-  // completion.
-  PageTitleChecker title_checker(
-      /*expected_title=*/"OK",
-      GetBrowser(0)->tab_strip_model()->GetActiveWebContents());
-  ASSERT_TRUE(title_checker.Wait());
+  // Wait until the page closes, which indicates successful completion.
+  EXPECT_TRUE(
+      TabClosedChecker(GetBrowser(0)->tab_strip_model()->GetActiveWebContents())
+          .Wait());
 
   // Mimic remote transition to custom passphrase.
   const KeyParams kCustomPassphraseKeyParams = {
@@ -865,7 +911,12 @@
                                                   /*desired_state=*/true)
                   .Wait());
 
-  // Mimic opening a web page where the user can interact with the retrival
+  // There needs to be an existing tab for the second tab (the retrieval flow)
+  // to be closeable via javascript.
+  chrome::AddTabAt(GetBrowser(0), GURL(url::kAboutBlankURL), /*index=*/0,
+                   /*foreground=*/true);
+
+  // Mimic opening a web page where the user can interact with the retrieval
   // flow.
   sync_ui_util::OpenTabForSyncKeyRetrievalWithURLForTesting(GetBrowser(0),
                                                             retrieval_url);
diff --git a/chrome/browser/themes/browser_theme_pack.cc b/chrome/browser/themes/browser_theme_pack.cc
index 9eb9e8a2..13ac02e 100644
--- a/chrome/browser/themes/browser_theme_pack.cc
+++ b/chrome/browser/themes/browser_theme_pack.cc
@@ -7,6 +7,7 @@
 #include <limits.h>
 #include <stddef.h>
 
+#include <algorithm>
 #include <limits>
 #include <memory>
 #include <utility>
@@ -110,8 +111,7 @@
   // someone adds a new resource.
   int idr_id;
 
-  // String to check for when parsing theme manifests or null if this isn't
-  // supposed to be changeable by the user.
+  // String to check for when parsing theme manifests.
   const char* const key;
 };
 
@@ -149,37 +149,20 @@
     {PRS_THEME_WINDOW_CONTROL_BACKGROUND, IDR_THEME_WINDOW_CONTROL_BACKGROUND,
      "theme_window_control_background"},
 };
-const size_t kPersistingImagesLength = base::size(kPersistingImages);
-
-int GetPersistentIDByNameHelper(const std::string& key,
-                                const PersistingImagesTable* image_table,
-                                size_t image_table_size) {
-  for (size_t i = 0; i < image_table_size; ++i) {
-    if (image_table[i].key &&
-        base::LowerCaseEqualsASCII(key, image_table[i].key)) {
-      return image_table[i].persistent_id;
-    }
-  }
-  return -1;
-}
 
 int GetPersistentIDByName(const std::string& key) {
-  return GetPersistentIDByNameHelper(key,
-                                     kPersistingImages,
-                                     kPersistingImagesLength);
+  auto* it = std::find_if(std::begin(kPersistingImages),
+                          std::end(kPersistingImages), [&](const auto& image) {
+                            return base::LowerCaseEqualsASCII(key, image.key);
+                          });
+  return it == std::end(kPersistingImages) ? -1 : it->persistent_id;
 }
 
 int GetPersistentIDByIDR(int idr) {
-  static std::map<int,int>* lookup_table = new std::map<int,int>();
-  if (lookup_table->empty()) {
-    for (size_t i = 0; i < kPersistingImagesLength; ++i) {
-      int idr = kPersistingImages[i].idr_id;
-      int prs_id = kPersistingImages[i].persistent_id;
-      (*lookup_table)[idr] = prs_id;
-    }
-  }
-  auto it = lookup_table->find(idr);
-  return (it == lookup_table->end()) ? -1 : it->second;
+  auto* it =
+      std::find_if(std::begin(kPersistingImages), std::end(kPersistingImages),
+                   [&](const auto& image) { return image.idr_id == idr; });
+  return it == std::end(kPersistingImages) ? -1 : it->persistent_id;
 }
 
 // Returns the maximum persistent id.
@@ -800,11 +783,7 @@
 
 // static
 bool BrowserThemePack::IsPersistentImageID(int id) {
-  for (size_t i = 0; i < kPersistingImagesLength; ++i)
-    if (kPersistingImages[i].idr_id == id)
-      return true;
-
-  return false;
+  return GetPersistentIDByIDR(id) != -1;
 }
 
 // static
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 973f9c9..157ae7c 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1472,6 +1472,7 @@
       "//components/network_session_configurator/common",
       "//components/page_load_metrics/browser",
       "//components/profile_metrics",
+      "//components/search_provider_logos",
       "//components/ui_metrics",
       "//components/url_formatter",
       "//components/vector_icons",
diff --git a/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_arc_tracker.cc b/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_arc_tracker.cc
index 3801100..3efc7fb 100644
--- a/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_arc_tracker.cc
+++ b/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_arc_tracker.cc
@@ -137,8 +137,8 @@
   state = static_cast<apps::InstanceState>(
       state | apps::InstanceState::kStarted | apps::InstanceState::kRunning);
   app_service_controller_->app_service_instance_helper()->OnInstances(
-      task_id_to_arc_app_window_info_[task_id]->app_shelf_id().ToString(),
-      window, std::string(), state);
+      task_id_to_arc_app_window_info_[task_id]->app_shelf_id().app_id(), window,
+      std::string(), state);
   arc_window_candidates_.erase(window);
 }
 
diff --git a/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_launcher_controller.cc b/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_launcher_controller.cc
index 1585371..178011a9 100644
--- a/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_launcher_controller.cc
@@ -38,6 +38,19 @@
 #include "ui/aura/window.h"
 #include "ui/views/widget/widget.h"
 
+namespace {
+
+// Returns the app id from the app id or the shelf group id.
+std::string GetAppId(const std::string& id) {
+  const arc::ArcAppShelfId arc_app_shelf_id =
+      arc::ArcAppShelfId::FromString(id);
+  if (!arc_app_shelf_id.valid() || !arc_app_shelf_id.has_shelf_group_id())
+    return id;
+  return arc_app_shelf_id.app_id();
+}
+
+}  // namespace
+
 AppServiceAppWindowLauncherController::AppServiceAppWindowLauncherController(
     ChromeLauncherController* owner)
     : AppWindowLauncherController(owner),
@@ -185,7 +198,7 @@
   // set it as |kVisible|, otherwise, clear the visible bit.
   apps::InstanceState state =
       app_service_instance_helper_->CalculateVisibilityState(window, visible);
-  app_service_instance_helper_->OnInstances(shelf_id.app_id, window,
+  app_service_instance_helper_->OnInstances(GetAppId(shelf_id.app_id), window,
                                             shelf_id.launch_id, state);
 
   if (!visible || shelf_id.app_id == extension_misc::kChromeAppId)
@@ -220,8 +233,9 @@
   }
 
   // Delete the instance from InstanceRegistry.
-  app_service_instance_helper_->OnInstances(
-      shelf_id.app_id, window, std::string(), apps::InstanceState::kDestroyed);
+  app_service_instance_helper_->OnInstances(GetAppId(shelf_id.app_id), window,
+                                            std::string(),
+                                            apps::InstanceState::kDestroyed);
 
   auto app_window_it = aura_window_to_app_window_.find(window);
   if (app_window_it == aura_window_to_app_window_.end())
@@ -413,7 +427,7 @@
 
   apps::InstanceState state =
       app_service_instance_helper_->CalculateActivatedState(window, active);
-  app_service_instance_helper_->OnInstances(shelf_id.app_id, window,
+  app_service_instance_helper_->OnInstances(GetAppId(shelf_id.app_id), window,
                                             std::string(), state);
 }
 
diff --git a/chrome/browser/ui/ash/network/enrollment_dialog_view.cc b/chrome/browser/ui/ash/network/enrollment_dialog_view.cc
index 0084402..5619986 100644
--- a/chrome/browser/ui/ash/network/enrollment_dialog_view.cc
+++ b/chrome/browser/ui/ash/network/enrollment_dialog_view.cc
@@ -195,7 +195,9 @@
 class DialogEnrollmentDelegate {
  public:
   // |owning_window| is the window that will own the dialog.
-  DialogEnrollmentDelegate(const std::string& network_name, Profile* profile);
+  DialogEnrollmentDelegate(const std::string& network_guid,
+                           const std::string& network_name,
+                           Profile* profile);
   ~DialogEnrollmentDelegate();
 
   // EnrollmentDelegate overrides
@@ -203,6 +205,7 @@
               const base::Closure& connect);
 
  private:
+  std::string network_guid_;
   std::string network_name_;
   Profile* profile_;
 
@@ -210,9 +213,12 @@
 };
 
 DialogEnrollmentDelegate::DialogEnrollmentDelegate(
+    const std::string& network_guid,
     const std::string& network_name,
     Profile* profile)
-    : network_name_(network_name), profile_(profile) {}
+    : network_guid_(network_guid),
+      network_name_(network_name),
+      profile_(profile) {}
 
 DialogEnrollmentDelegate::~DialogEnrollmentDelegate() {}
 
@@ -230,21 +236,24 @@
     if (uri.IsStandard() || uri.scheme() == extensions::kExtensionScheme) {
       // If this is a "standard" scheme, like http, ftp, etc., then open that in
       // the enrollment dialog.
-      NET_LOG_EVENT("Showing enrollment dialog", network_name_);
+      NET_LOG(EVENT) << "Showing enrollment dialog for: "
+                     << NetworkGuidId(network_guid_);
       EnrollmentDialogView::ShowDialog(network_name_, profile_, uri,
                                        post_action);
       return true;
     }
-    NET_LOG_DEBUG("Nonstandard URI: " + uri.spec(), network_name_);
+    NET_LOG(DEBUG) << "Nonstandard URI: " + uri.spec()
+                   << " For: " << NetworkGuidId(network_guid_);
   }
 
   // No appropriate scheme was found.
-  NET_LOG_ERROR("No usable enrollment URI", network_name_);
+  NET_LOG(ERROR) << "No usable enrollment URI for: "
+                 << NetworkGuidId(network_guid_);
   return false;
 }
 
 void EnrollmentComplete(const std::string& network_id) {
-  NET_LOG_USER("Enrollment Complete", network_id);
+  NET_LOG(USER) << "Enrollment Complete for: " << NetworkGuidId(network_id);
 }
 
 // Decides if the enrollment dialog is allowed in the current login state.
@@ -291,7 +300,8 @@
       NetworkHandler::Get()->network_state_handler()->GetNetworkStateFromGuid(
           network_id);
   if (!network) {
-    NET_LOG_ERROR("Enrolling Unknown network", network_id);
+    NET_LOG(ERROR) << "Enrolling Unknown network: "
+                   << NetworkGuidId(network_id);
     return false;
   }
   Profile* profile = ProfileManager::GetPrimaryUserProfile();
@@ -315,17 +325,18 @@
     return false;
 
   if (cert_config.pattern.Empty())
-    NET_LOG_ERROR("Certificate pattern is empty", network_id);
+    NET_LOG(ERROR) << "Certificate pattern is empty for: "
+                   << NetworkGuidId(network_id);
 
   if (cert_config.pattern.enrollment_uri_list().empty()) {
-    NET_LOG_EVENT("No enrollment URIs", network_id);
+    NET_LOG(EVENT) << "No enrollment URIs for: " << NetworkGuidId(network_id);
     return false;
   }
 
-  NET_LOG_USER("Enrolling", network_id);
+  NET_LOG(USER) << "Enrolling: " << NetworkGuidId(network_id);
 
   DialogEnrollmentDelegate* enrollment =
-      new DialogEnrollmentDelegate(network->name(), profile);
+      new DialogEnrollmentDelegate(network_id, network->name(), profile);
   return enrollment->Enroll(cert_config.pattern.enrollment_uri_list(),
                             base::Bind(&EnrollmentComplete, network_id));
 }
diff --git a/chrome/browser/ui/ash/network/network_state_notifier.cc b/chrome/browser/ui/ash/network/network_state_notifier.cc
index 21fd9e2e..c66f620 100644
--- a/chrome/browser/ui/ash/network/network_state_notifier.cc
+++ b/chrome/browser/ui/ash/network/network_state_notifier.cc
@@ -18,10 +18,10 @@
 #include "chromeos/network/network_configuration_handler.h"
 #include "chromeos/network/network_connect.h"
 #include "chromeos/network/network_connection_handler.h"
+#include "chromeos/network/network_event_log.h"
 #include "chromeos/network/network_state.h"
 #include "chromeos/network/network_state_handler.h"
 #include "chromeos/network/shill_property_util.h"
-#include "components/device_event_log/device_event_log.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/message_center/public/cpp/notification.h"
@@ -176,8 +176,8 @@
       NetworkHandler::Get()->network_state_handler()->GetNetworkState(
           service_path);
   if (!ShouldConnectFailedNotificationBeShown(error_name, network)) {
-    NET_LOG(EVENT) << "Skipping notification for: " << service_path
-                   << " Error: " << error_name;
+    NET_LOG(EVENT) << "Skipping notification for: "
+                   << NetworkPathId(service_path) << " Error: " << error_name;
     return;
   }
   ShowNetworkConnectErrorForGuid(error_name, network ? network->guid() : "");
@@ -301,7 +301,7 @@
         l10n_util::GetStringFUTF16(IDS_NETWORK_OUT_OF_CREDITS_BODY,
                                    base::UTF8ToUTF16(primary_network->name()));
     ShowErrorNotification(
-        primary_network->path(), kNetworkOutOfCreditsNotificationId,
+        NetworkId(primary_network), kNetworkOutOfCreditsNotificationId,
         primary_network->type(),
         l10n_util::GetStringUTF16(IDS_NETWORK_OUT_OF_CREDITS_TITLE), error_msg,
         base::Bind(&NetworkStateNotifier::ShowMobileSetup,
@@ -427,7 +427,7 @@
     const std::string& service_path,
     const base::DictionaryValue& shill_properties) {
   base::string16 error = GetConnectErrorString(error_name);
-  NET_LOG(DEBUG) << "Notify: " << service_path
+  NET_LOG(DEBUG) << "Notify: " << NetworkPathId(service_path)
                  << ": Connect error: " << error_name << ": "
                  << base::UTF16ToUTF8(error);
 
@@ -435,6 +435,8 @@
       NetworkHandler::Get()->network_state_handler()->GetNetworkState(
           service_path);
   std::string guid = network ? network->guid() : "";
+  std::string log_id =
+      network ? NetworkId(network) : NetworkPathId(service_path);
 
   if (error.empty()) {
     std::string shill_error;
@@ -443,12 +445,12 @@
     if (!NetworkState::ErrorIsValid(shill_error)) {
       shill_properties.GetStringWithoutPathExpansion(
           shill::kPreviousErrorProperty, &shill_error);
-      NET_LOG(DEBUG) << "Notify: " << service_path
+      NET_LOG(DEBUG) << "Notify: " << log_id
                      << ": Service.PreviousError: " << shill_error;
       if (!NetworkState::ErrorIsValid(shill_error))
         shill_error.clear();
     } else {
-      NET_LOG(DEBUG) << "Notify: " << service_path
+      NET_LOG(DEBUG) << "Notify: " << log_id
                      << ": Service.Error: " << shill_error;
     }
 
@@ -457,14 +459,14 @@
       // TODO(stevenjb): This shouldn't ever be necessary, but is kept here as
       // a failsafe since more information is better than less when debugging
       // and we have encountered some strange edge cases before.
-      NET_LOG(DEBUG) << "Notify: " << service_path
+      NET_LOG(DEBUG) << "Notify: " << log_id
                      << ": Network.GetError(): " << network->GetError();
       if (shill_error.empty())
         shill_error = network->GetError();
     }
 
     if (ShillErrorIsIgnored(shill_error)) {
-      NET_LOG(DEBUG) << "Notify: " << service_path
+      NET_LOG(DEBUG) << "Notify: " << log_id
                      << ": Ignoring error: " << error_name;
       return;
     }
@@ -480,7 +482,7 @@
       error = l10n_util::GetStringUTF16(IDS_CHROMEOS_NETWORK_ERROR_UNKNOWN);
     }
   }
-  NET_LOG(ERROR) << "Notify: " << service_path
+  NET_LOG(ERROR) << "Notify: " << log_id
                  << ": Connect error: " + base::UTF16ToUTF8(error);
 
   std::string network_name = shill_property_util::GetNameFromProperties(
@@ -510,7 +512,7 @@
                                                  &network_type);
 
   ShowErrorNotification(
-      service_path, kNetworkConnectNotificationId, network_type,
+      NetworkPathId(service_path), kNetworkConnectNotificationId, network_type,
       l10n_util::GetStringUTF16(IDS_NETWORK_CONNECTION_ERROR_TITLE), error_msg,
       base::Bind(&NetworkStateNotifier::ShowNetworkSettings,
                  weak_ptr_factory_.GetWeakPtr(), guid));
@@ -521,7 +523,7 @@
   base::string16 error_msg = l10n_util::GetStringFUTF16(
       IDS_NETWORK_VPN_CONNECTION_LOST_BODY, base::UTF8ToUTF16(vpn->name));
   ShowErrorNotification(
-      vpn->guid, kNetworkConnectNotificationId, shill::kTypeVPN,
+      NetworkGuidId(vpn->guid), kNetworkConnectNotificationId, shill::kTypeVPN,
       l10n_util::GetStringUTF16(IDS_NETWORK_VPN_CONNECTION_LOST_TITLE),
       error_msg,
       base::Bind(&NetworkStateNotifier::ShowNetworkSettings,
@@ -536,7 +538,7 @@
     return;
   std::string error = network->GetError();
   if (!error.empty()) {
-    NET_LOG(ERROR) << "Notify ShowNetworkSettings: " << network_id
+    NET_LOG(ERROR) << "Notify ShowNetworkSettings: " << NetworkId(network)
                    << ": Error: " << error;
   }
   if (!NetworkTypePattern::Primitive(network->type())
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 72518a4..0e35330 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -818,8 +818,7 @@
 #if defined(OS_MACOSX)
   // On Mac, we don't want to suffix the page title with the application name.
   return title;
-#endif
-
+#else
   // If there is no title and this is an app, fall back on the app name. This
   // ensures that the native window gets a title which is important for a11y,
   // for example the window selector uses the Aura window title.
@@ -836,6 +835,7 @@
              ? l10n_util::GetStringFUTF16(IDS_BROWSER_WINDOW_TITLE_FORMAT,
                                           title)
              : title;
+#endif
 }
 
 // static
diff --git a/chrome/browser/ui/search/local_ntp_doodle_browsertest.cc b/chrome/browser/ui/search/local_ntp_doodle_browsertest.cc
index 87a870e..7e35882 100644
--- a/chrome/browser/ui/search/local_ntp_doodle_browsertest.cc
+++ b/chrome/browser/ui/search/local_ntp_doodle_browsertest.cc
@@ -68,7 +68,9 @@
  public:
   MOCK_METHOD1(GetLogoPtr, void(LogoCallbacks* callbacks));
 
-  void GetLogo(LogoCallbacks callbacks) override { GetLogoPtr(&callbacks); }
+  void GetLogo(LogoCallbacks callbacks, bool for_webui_ntp) override {
+    GetLogoPtr(&callbacks);
+  }
   void GetLogo(LogoObserver* observer) override { NOTREACHED(); }
 };
 
diff --git a/chrome/browser/ui/toolbar/app_menu_model_unittest.cc b/chrome/browser/ui/toolbar/app_menu_model_unittest.cc
index 2b7c980..94c9c3f 100644
--- a/chrome/browser/ui/toolbar/app_menu_model_unittest.cc
+++ b/chrome/browser/ui/toolbar/app_menu_model_unittest.cc
@@ -165,24 +165,25 @@
 
   // Choose something from the bookmark submenu and make sure it makes it back
   // to the delegate as well.
-  int bookmarksModelIndex = -1;
+  int bookmarks_model_index = -1;
   for (int i = 0; i < itemCount; ++i) {
     if (model.GetTypeAt(i) == ui::MenuModel::TYPE_SUBMENU) {
       // The bookmarks submenu comes after the Tabs and Downloads items.
-      bookmarksModelIndex = i + 2;
+      bookmarks_model_index = i + 2;
       break;
     }
   }
-  EXPECT_GT(bookmarksModelIndex, -1);
-  ui::MenuModel* bookmarksModel = model.GetSubmenuModelAt(bookmarksModelIndex);
-  EXPECT_TRUE(bookmarksModel);
+  EXPECT_GT(bookmarks_model_index, -1);
+  ui::MenuModel* bookmarks_model =
+      model.GetSubmenuModelAt(bookmarks_model_index);
+  EXPECT_TRUE(bookmarks_model);
   // The bookmarks model may be empty until we tell it we're going to show it.
-  bookmarksModel->MenuWillShow();
-  EXPECT_GT(bookmarksModel->GetItemCount(), 1);
+  bookmarks_model->MenuWillShow();
+  EXPECT_GT(bookmarks_model->GetItemCount(), 1);
 
   // Bookmark manager item.
-  bookmarksModel->ActivatedAt(4);
-  EXPECT_TRUE(bookmarksModel->IsEnabledAt(4));
+  bookmarks_model->ActivatedAt(4);
+  EXPECT_TRUE(bookmarks_model->IsEnabledAt(4));
   EXPECT_EQ(model.execute_count_, 1);
   EXPECT_EQ(model.enable_count_, 1);
 }
diff --git a/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.cc b/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.cc
index 8e14c66b..a453cfa7 100644
--- a/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.cc
+++ b/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.cc
@@ -18,6 +18,8 @@
 #include "components/google/core/common/google_util.h"
 #include "components/offline_pages/buildflags/buildflags.h"
 #include "components/omnibox/browser/autocomplete_input.h"
+#include "components/omnibox/browser/omnibox_pref_names.h"
+#include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
 #include "components/security_interstitials/content/security_interstitial_tab_helper.h"
 #include "components/security_state/core/security_state.h"
@@ -73,8 +75,12 @@
 }
 
 bool ChromeLocationBarModelDelegate::ShouldPreventElision() const {
-#if BUILDFLAG(ENABLE_EXTENSIONS)
   Profile* const profile = GetProfile();
+  if (profile &&
+      profile->GetPrefs()->GetBoolean(omnibox::kPreventUrlElisionsInOmnibox)) {
+    return true;
+  }
+#if BUILDFLAG(ENABLE_EXTENSIONS)
   return profile && extensions::ExtensionRegistry::Get(profile)
                         ->enabled_extensions()
                         .Contains(kPreventElisionExtensionId);
@@ -228,3 +234,9 @@
   Profile* const profile = GetProfile();
   return profile ? TemplateURLServiceFactory::GetForProfile(profile) : nullptr;
 }
+
+// static
+void ChromeLocationBarModelDelegate::RegisterProfilePrefs(
+    user_prefs::PrefRegistrySyncable* registry) {
+  registry->RegisterBooleanPref(omnibox::kPreventUrlElisionsInOmnibox, false);
+}
diff --git a/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.h b/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.h
index 2def55d..285bab9 100644
--- a/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.h
+++ b/chrome/browser/ui/toolbar/chrome_location_bar_model_delegate.h
@@ -16,6 +16,10 @@
 class WebContents;
 }  // namespace content
 
+namespace user_prefs {
+class PrefRegistrySyncable;
+}  // namespace user_prefs
+
 // Implementation of LocationBarModelDelegate for the Chrome embedder. It leaves
 // out how to fetch the active WebContents to its subclasses.
 class ChromeLocationBarModelDelegate : public LocationBarModelDelegate {
@@ -44,6 +48,9 @@
   AutocompleteClassifier* GetAutocompleteClassifier() override;
   TemplateURLService* GetTemplateURLService() override;
 
+  // Registers a preference used to prevent URL elisions.
+  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
+
  protected:
   ChromeLocationBarModelDelegate();
   ~ChromeLocationBarModelDelegate() override;
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_container.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_container.cc
index 4ba7197..e311cca 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_container.cc
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_container.cc
@@ -31,7 +31,6 @@
 #if defined(OS_CHROMEOS)
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "third_party/skia/include/core/SkPaint.h"
-#include "ui/native_theme/native_theme.h"
 #include "ui/views/background.h"
 #endif
 
@@ -112,8 +111,8 @@
   explicit AppListDialogContainer(std::unique_ptr<views::View> dialog_body)
       : BaseDialogContainer(std::move(dialog_body), base::RepeatingClosure()) {
     SetBackground(std::make_unique<AppListOverlayBackground>());
-    close_button_ = AddChildView(views::BubbleFrameView::CreateCloseButton(
-        this, GetNativeTheme()->ShouldUseDarkColors()));
+    close_button_ =
+        AddChildView(views::BubbleFrameView::CreateCloseButton(this));
   }
   ~AppListDialogContainer() override {}
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
index 2513d22..c4e4135 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
@@ -37,6 +37,7 @@
 #include "components/omnibox/browser/omnibox_edit_model.h"
 #include "components/omnibox/browser/omnibox_field_trial.h"
 #include "components/omnibox/browser/omnibox_popup_model.h"
+#include "components/omnibox/browser/omnibox_pref_names.h"
 #include "components/omnibox/common/omnibox_features.h"
 #include "components/security_state/core/security_state.h"
 #include "components/strings/grit/components_strings.h"
@@ -496,6 +497,9 @@
     case IDS_SHOW_URL:
       model()->Unelide(true /* exit_query_in_omnibox */);
       return;
+    case IDS_CONTEXT_MENU_SHOW_FULL_URLS:
+      ToggleShowFullUrlsPref();
+      return;
     case IDC_EDIT_SEARCH_ENGINES:
       location_bar_view_->command_updater()->ExecuteCommand(command_id);
       return;
@@ -525,6 +529,14 @@
   }
 }
 
+void OmniboxViewViews::ToggleShowFullUrlsPref() {
+  bool pref_enabled = location_bar_view_->profile()->GetPrefs()->GetBoolean(
+      omnibox::kPreventUrlElisionsInOmnibox);
+  location_bar_view_->profile()->GetPrefs()->SetBoolean(
+      omnibox::kPreventUrlElisionsInOmnibox, !pref_enabled);
+  Update();
+}
+
 ui::TextInputType OmniboxViewViews::GetTextInputType() const {
   ui::TextInputType input_type = views::Textfield::GetTextInputType();
   // We'd like to set the text input type to TEXT_INPUT_TYPE_URL, because this
@@ -1509,6 +1521,8 @@
   // Menu item is only shown when it is valid.
   if (command_id == IDS_SHOW_URL)
     return true;
+  if (command_id == IDS_CONTEXT_MENU_SHOW_FULL_URLS)
+    return true;
 
   return Textfield::IsCommandIdEnabled(command_id) ||
          location_bar_view_->command_updater()->IsCommandEnabled(command_id);
@@ -1904,8 +1918,10 @@
   menu_contents->InsertItemWithStringIdAt(paste_position + 1, IDC_PASTE_AND_GO,
                                           IDS_PASTE_AND_GO);
 
-  // Only add this menu entry if Query in Omnibox feature is enabled.
-  if (base::FeatureList::IsEnabled(omnibox::kQueryInOmnibox)) {
+  // Only add this menu entry if Query in Omnibox feature is enabled and the
+  // feature providing an "Always Show Full URLs" option is disabled.
+  if (base::FeatureList::IsEnabled(omnibox::kQueryInOmnibox) &&
+      !base::FeatureList::IsEnabled(omnibox::kOmniboxContextMenuShowFullUrls)) {
     // If the user has not started editing the text, and we are not showing the
     // full URL, then provide a way to unelide via the context menu.
     if (!GetReadOnly() && !model()->user_input_in_progress() &&
@@ -1922,6 +1938,19 @@
   // on IDC_ for now.
   menu_contents->AddItemWithStringId(IDC_EDIT_SEARCH_ENGINES,
                                      IDS_EDIT_SEARCH_ENGINES);
+
+  if (base::FeatureList::IsEnabled(omnibox::kOmniboxContextMenuShowFullUrls)) {
+    menu_contents->AddCheckItemWithStringId(IDS_CONTEXT_MENU_SHOW_FULL_URLS,
+                                            IDS_CONTEXT_MENU_SHOW_FULL_URLS);
+  }
+}
+
+bool OmniboxViewViews::IsCommandIdChecked(int id) const {
+  if (id == IDS_CONTEXT_MENU_SHOW_FULL_URLS) {
+    return location_bar_view_->profile()->GetPrefs()->GetBoolean(
+        omnibox::kPreventUrlElisionsInOmnibox);
+  }
+  return false;
 }
 
 void OmniboxViewViews::OnCompositingDidCommit(ui::Compositor* compositor) {
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.h b/chrome/browser/ui/views/omnibox/omnibox_view_views.h
index 4a1cb65..942ac38 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views.h
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.h
@@ -292,6 +292,9 @@
   int OnDrop(const ui::OSExchangeData& data) override;
   void UpdateContextMenu(ui::SimpleMenuModel* menu_contents) override;
 
+  // ui::SimpleMenuModel::Delegate:
+  bool IsCommandIdChecked(int id) const override;
+
   // ui::CompositorObserver:
   void OnCompositingDidCommit(ui::Compositor* compositor) override;
   void OnCompositingStarted(ui::Compositor* compositor,
@@ -302,6 +305,9 @@
   // TemplateURLServiceObserver:
   void OnTemplateURLServiceChanged() override;
 
+  // Toggle whether to show full URLs in the omnibox.
+  virtual void ToggleShowFullUrlsPref();
+
   // When true, the location bar view is read only and also is has a slightly
   // different presentation (smaller font size). This is used for popups.
   bool popup_window_mode_;
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc
index 91e17dd5..3b389f3 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc
@@ -23,6 +23,7 @@
 #include "chrome/browser/search_engines/template_url_service_factory_test_util.h"
 #include "chrome/browser/ui/omnibox/chrome_omnibox_client.h"
 #include "chrome/browser/ui/omnibox/chrome_omnibox_edit_controller.h"
+#include "chrome/grit/generated_resources.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/views/chrome_views_test_base.h"
 #include "components/omnibox/browser/omnibox_edit_model.h"
@@ -71,9 +72,16 @@
 
   void CheckUpdatePopupNotCalled();
 
+  void ToggleShowFullUrlsPref() override {
+    toggle_show_full_urls_called_ = true;
+  }
+
   Range scheme_range() const { return scheme_range_; }
   Range emphasis_range() const { return emphasis_range_; }
   bool base_text_emphasis() const { return base_text_emphasis_; }
+  bool toggle_show_full_urls_called() const {
+    return toggle_show_full_urls_called_;
+  }
 
   // OmniboxViewViews:
   void EmphasizeURLComponents() override;
@@ -92,6 +100,7 @@
   size_t update_popup_call_count_ = 0;
   base::string16 update_popup_text_;
   Range update_popup_selection_range_;
+  bool toggle_show_full_urls_called_ = false;
 
   // Range of the last scheme logged by UpdateSchemeStyle().
   Range scheme_range_;
@@ -1324,3 +1333,8 @@
   EXPECT_EQ(render_text->GetUpdatedDisplayOffset().x(), 0);
   EXPECT_FALSE(omnibox_view()->IsSelectAll());
 }
+
+TEST_F(OmniboxViewViewsTest, ContextMenuShowFullUrlsTogglesPref) {
+  omnibox_view()->ExecuteCommand(IDS_CONTEXT_MENU_SHOW_FULL_URLS, ui::EF_NONE);
+  EXPECT_TRUE(omnibox_view()->toggle_show_full_urls_called());
+}
diff --git a/chrome/browser/ui/views/reader_mode/reader_mode_icon_view_browsertest.cc b/chrome/browser/ui/views/reader_mode/reader_mode_icon_view_browsertest.cc
index 031b44f..cbd679f 100644
--- a/chrome/browser/ui/views/reader_mode/reader_mode_icon_view_browsertest.cc
+++ b/chrome/browser/ui/views/reader_mode/reader_mode_icon_view_browsertest.cc
@@ -6,6 +6,8 @@
 #include "chrome/browser/ui/views/reader_mode/reader_mode_icon_view.h"
 
 #include "base/test/scoped_feature_list.h"
+#include "chrome/browser/interstitials/security_interstitial_page_test_utils.h"
+#include "chrome/browser/ssl/security_state_tab_helper.h"
 #include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/frame/toolbar_button_provider.h"
@@ -16,8 +18,12 @@
 #include "components/dom_distiller/core/dom_distiller_features.h"
 #include "components/dom_distiller/core/dom_distiller_switches.h"
 #include "components/dom_distiller/core/pref_names.h"
+#include "components/security_interstitials/content/security_interstitial_page.h"
+#include "components/security_interstitials/content/security_interstitial_tab_helper.h"
+#include "components/security_interstitials/core/controller_client.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test.h"
+#include "content/public/test/test_navigation_observer.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/views/test/button_test_api.h"
 
@@ -25,6 +31,7 @@
 
 const char* kSimpleArticlePath = "/dom_distiller/simple_article.html";
 const char* kNonArticlePath = "/dom_distiller/non_og_article.html";
+const char* kArticleTitle = "Test Page Title";
 
 class TestDistillabilityObserver
     : public dom_distiller::DistillabilityObserver {
@@ -226,4 +233,62 @@
   EXPECT_FALSE(is_visible_after_navigation_back_to_non_distillable_page);
 }
 
+IN_PROC_BROWSER_TEST_F(ReaderModeIconViewBrowserTest,
+                       DangerousPagesNotDistillable) {
+  std::unique_ptr<net::EmbeddedTestServer> https_server_expired;
+  https_server_expired.reset(
+      new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS));
+  https_server_expired->SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED);
+  https_server_expired->ServeFilesFromSourceDirectory(GetChromeTestDataDir());
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  SecurityStateTabHelper* helper =
+      SecurityStateTabHelper::FromWebContents(web_contents);
+
+  TestDistillabilityObserver observer(web_contents);
+  dom_distiller::DistillabilityResult expected_result;
+  expected_result.is_distillable = true;
+  expected_result.is_last = false;
+  expected_result.is_mobile_friendly = false;
+
+  // Check test setup by ensuring the icon is shown with the normal test
+  // server.
+  ui_test_utils::NavigateToURL(
+      browser(), embedded_test_server()->GetURL(kSimpleArticlePath));
+  EXPECT_NE(security_state::DANGEROUS, helper->GetSecurityLevel());
+  observer.WaitForResult(expected_result);
+  EXPECT_TRUE(reader_mode_icon_->GetVisible());
+
+  // Set security state to DANGEROUS for the test by using an expired
+  // certificate.
+  ASSERT_TRUE(https_server_expired->Start());
+  content::TitleWatcher title_watcher(web_contents,
+                                      base::ASCIIToUTF16(kArticleTitle));
+  ui_test_utils::NavigateToURL(
+      browser(), https_server_expired->GetURL(kSimpleArticlePath));
+
+  // Proceed through the intersitial warning page.
+  web_contents = browser()->tab_strip_model()->GetActiveWebContents();
+  content::TestNavigationObserver nav_observer(web_contents, 1);
+  security_interstitials::SecurityInterstitialTabHelper* interstitial_helper =
+      security_interstitials::SecurityInterstitialTabHelper::FromWebContents(
+          web_contents);
+  interstitial_helper
+      ->GetBlockingPageForCurrentlyCommittedNavigationForTesting()
+      ->CommandReceived(
+          base::NumberToString(security_interstitials::CMD_PROCEED));
+  nav_observer.Wait();
+
+  // Check we are on the right page.
+  ASSERT_EQ(base::ASCIIToUTF16(kArticleTitle), title_watcher.WaitAndGetTitle());
+
+  // Check security state is DANGEROUS per https_server_expired_.
+  EXPECT_EQ(security_state::DANGEROUS, helper->GetSecurityLevel());
+  expected_result.is_distillable = false;
+
+  // The page should not be distillable.
+  observer.WaitForResult(expected_result);
+  EXPECT_FALSE(reader_mode_icon_->GetVisible());
+}
+
 }  // namespace
diff --git a/chrome/browser/ui/views/translate/translate_bubble_view.cc b/chrome/browser/ui/views/translate/translate_bubble_view.cc
index 7df689a..32dfd0da 100644
--- a/chrome/browser/ui/views/translate/translate_bubble_view.cc
+++ b/chrome/browser/ui/views/translate/translate_bubble_view.cc
@@ -1508,7 +1508,7 @@
 }
 
 std::unique_ptr<views::Button> TranslateBubbleView::CreateCloseButton() {
-  auto close_button = views::BubbleFrameView::CreateCloseButton(this, false);
+  auto close_button = views::BubbleFrameView::CreateCloseButton(this);
   close_button->SetID(BUTTON_ID_CLOSE);
   return close_button;
 }
diff --git a/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.cc b/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.cc
index 11003dc3..0d1abc3b 100644
--- a/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.cc
+++ b/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.cc
@@ -172,27 +172,26 @@
     uint8_t out_buf[QRCode::kInputBytes],
     base::span<const uint8_t, 32> qr_generator_key) {
   const int64_t current_tick = device::CableDiscoveryData::CurrentTimeTick();
-  auto qr_secret = device::CableDiscoveryData::DeriveQRSecret(qr_generator_key,
-                                                              current_tick);
+  const device::CableQRData qr_data =
+      device::CableDiscoveryData::DeriveQRData(qr_generator_key, current_tick);
 
-  std::string base64_qr_secret;
+  std::string base64_qr_data;
   base::Base64UrlEncode(
-      base::StringPiece(reinterpret_cast<const char*>(qr_secret.data()),
-                        qr_secret.size()),
-      base::Base64UrlEncodePolicy::OMIT_PADDING, &base64_qr_secret);
-  static constexpr size_t kEncodedSecretLength =
-      Base64EncodedSize(sizeof(qr_secret));
-  DCHECK_EQ(kEncodedSecretLength, base64_qr_secret.size());
+      base::StringPiece(reinterpret_cast<const char*>(qr_data.data()),
+                        sizeof(qr_data)),
+      base::Base64UrlEncodePolicy::OMIT_PADDING, &base64_qr_data);
+  static constexpr size_t kEncodedDataLength =
+      Base64EncodedSize(sizeof(qr_data));
+  DCHECK_EQ(kEncodedDataLength, base64_qr_data.size());
 
   static constexpr char kPrefix[] = "fido://c1/";
   static constexpr size_t kPrefixLength = sizeof(kPrefix) - 1;
 
-  static_assert(QRCode::kInputBytes >= kPrefixLength + kEncodedSecretLength,
+  static_assert(QRCode::kInputBytes >= kPrefixLength + kEncodedDataLength,
                 "unexpected QR input length");
   memcpy(out_buf, kPrefix, kPrefixLength);
-  memcpy(&out_buf[kPrefixLength], base64_qr_secret.data(),
-         kEncodedSecretLength);
-  return base::span<uint8_t>(out_buf, kPrefixLength + kEncodedSecretLength);
+  memcpy(&out_buf[kPrefixLength], base64_qr_data.data(), kEncodedDataLength);
+  return base::span<uint8_t>(out_buf, kPrefixLength + kEncodedDataLength);
 }
 
 }  // anonymous namespace
diff --git a/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_dialog.cc b/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_dialog.cc
index 542665cb..2264f8e 100644
--- a/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_dialog.cc
+++ b/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_dialog.cc
@@ -10,9 +10,9 @@
 #include "chrome/browser/ui/simple_message_box.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/grit/generated_resources.h"
+#include "chromeos/network/network_event_log.h"
 #include "chromeos/network/network_state.h"
 #include "chromeos/network/network_state_handler.h"
-#include "components/device_event_log/device_event_log.h"
 #include "ui/aura/window.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/geometry/size.h"
@@ -54,7 +54,7 @@
     NET_LOG(ERROR) << "MobileSetupDialog: Network ID not found: " << network_id;
     return;
   }
-  NET_LOG(EVENT) << "Opening MobileSetupDialog, ID: " << network_id;
+  NET_LOG(EVENT) << "Opening MobileSetupDialog, ID: " << NetworkId(network);
   dialog_instance = new MobileSetupDialog(*network);
   dialog_instance->ShowSystemDialog();
 }
diff --git a/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_ui.cc b/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_ui.cc
index 9868804..4e225777 100644
--- a/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_ui.cc
@@ -27,10 +27,10 @@
 #include "chrome/grit/browser_resources.h"
 #include "chrome/grit/generated_resources.h"
 #include "chromeos/network/device_state.h"
+#include "chromeos/network/network_event_log.h"
 #include "chromeos/network/network_state.h"
 #include "chromeos/network/network_state_handler.h"
 #include "chromeos/network/network_state_handler_observer.h"
-#include "components/device_event_log/device_event_log.h"
 #include "components/strings/grit/components_strings.h"
 #include "content/public/browser/url_data_source.h"
 #include "content/public/browser/web_contents.h"
@@ -114,7 +114,8 @@
 
 void DataRequestFailed(const std::string& service_path,
                        content::URLDataSource::GotDataCallback callback) {
-  NET_LOG(ERROR) << "Data Request Failed for Mobile Setup: " << service_path;
+  NET_LOG(ERROR) << "Data Request Failed for Mobile Setup: "
+                 << NetworkPathId(service_path);
   scoped_refptr<base::RefCountedBytes> html_bytes(new base::RefCountedBytes);
   std::move(callback).Run(html_bytes.get());
 }
@@ -283,14 +284,16 @@
   }
 
   if (!network->Matches(NetworkTypePattern::Cellular())) {
-    NET_LOG(ERROR) << "Mobile setup attempt for non cellular network: " << path;
+    NET_LOG(ERROR) << "Mobile setup attempt for non cellular network: "
+                   << NetworkId(network);
     DataRequestFailed(path, std::move(callback));
     return;
   }
 
   if (network->payment_url().empty() &&
       network->activation_state() != shill::kActivationStateActivated) {
-    NET_LOG(ERROR) << "Mobile setup network in unexpected state: " << path
+    NET_LOG(ERROR) << "Mobile setup network in unexpected state: "
+                   << NetworkId(network)
                    << " payment_url: " << network->payment_url()
                    << " activation_state: " << network->activation_state();
     DataRequestFailed(path, std::move(callback));
@@ -307,7 +310,7 @@
     return;
   }
 
-  NET_LOG(EVENT) << "Starting mobile setup: " << path;
+  NET_LOG(EVENT) << "Starting mobile setup: " << NetworkId(network);
   base::DictionaryValue strings;
 
   strings.SetString(
@@ -441,7 +444,7 @@
   if (path.empty())
     return;
 
-  NET_LOG(EVENT) << "Starting activation for service: " << path;
+  NET_LOG(EVENT) << "Starting activation for service: " << NetworkPathId(path);
   active_ = true;
   AllowJavascript();
 
diff --git a/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_dialog.cc b/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_dialog.cc
index 2d073c4..e584870 100644
--- a/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_dialog.cc
+++ b/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_dialog.cc
@@ -24,21 +24,26 @@
 
 namespace chromeos {
 
-void CrostiniUpgraderDialog::Show(base::OnceClosure launch_closure) {
+void CrostiniUpgraderDialog::Show(base::OnceClosure launch_closure,
+                                  bool only_run_launch_closure_on_restart) {
   auto* instance = SystemWebDialogDelegate::FindInstance(GetUrl().spec());
   if (instance) {
     instance->Focus();
     return;
   }
 
-  instance = new CrostiniUpgraderDialog(std::move(launch_closure));
+  instance = new CrostiniUpgraderDialog(std::move(launch_closure),
+                                        only_run_launch_closure_on_restart);
   instance->ShowSystemDialog();
   base::UmaHistogramEnumeration(crostini::kUpgradeDialogEventHistogram,
                                 crostini::UpgradeDialogEvent::kDialogShown);
 }
 
-CrostiniUpgraderDialog::CrostiniUpgraderDialog(base::OnceClosure launch_closure)
+CrostiniUpgraderDialog::CrostiniUpgraderDialog(
+    base::OnceClosure launch_closure,
+    bool only_run_launch_closure_on_restart)
     : SystemWebDialogDelegate{GetUrl(), /*title=*/{}},
+      only_run_launch_closure_on_restart_(only_run_launch_closure_on_restart),
       launch_closure_{std::move(launch_closure)} {}
 
 CrostiniUpgraderDialog::~CrostiniUpgraderDialog() = default;
@@ -71,12 +76,15 @@
 namespace {
 void RunLaunchClosure(base::WeakPtr<crostini::CrostiniManager> crostini_manager,
                       base::OnceClosure launch_closure,
+                      bool only_run_launch_closure_on_restart,
                       bool restart_required) {
   if (!crostini_manager) {
     return;
   }
   if (!restart_required) {
-    std::move(launch_closure).Run();
+    if (!only_run_launch_closure_on_restart) {
+      std::move(launch_closure).Run();
+    }
     return;
   }
   crostini_manager->RestartCrostini(
@@ -106,9 +114,9 @@
                             crostini::kCrostiniDefaultContainerName));
 
   upgrader_ui_ = static_cast<CrostiniUpgraderUI*>(webui->GetController());
-  upgrader_ui_->set_launch_callback(
-      base::BindOnce(&RunLaunchClosure, crostini_manager->GetWeakPtr(),
-                     std::move(launch_closure_)));
+  upgrader_ui_->set_launch_callback(base::BindOnce(
+      &RunLaunchClosure, crostini_manager->GetWeakPtr(),
+      std::move(launch_closure_), only_run_launch_closure_on_restart_));
   return SystemWebDialogDelegate::OnDialogShown(webui);
 }
 
diff --git a/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_dialog.h b/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_dialog.h
index fd252d4..dc94be2 100644
--- a/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_dialog.h
+++ b/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_dialog.h
@@ -13,10 +13,18 @@
 
 class CrostiniUpgraderDialog : public SystemWebDialogDelegate {
  public:
-  static void Show(base::OnceClosure launch_closure);
+  // If a restart of Crostini is not required, the launch closure can be
+  // optionally dropped. e.g. when running the upgrader from Settings, if the
+  // user cancels before starting the upgrade, the launching of a Terminal is
+  // not desired. This contrasts to being propmpted for container upgrade from
+  // The app launcher, in which case the user could opt not to upgrade and the
+  // app should still be launched.
+  static void Show(base::OnceClosure launch_closure,
+                   bool only_run_launch_closure_on_restart = false);
 
  private:
-  explicit CrostiniUpgraderDialog(base::OnceClosure launch_closure);
+  explicit CrostiniUpgraderDialog(base::OnceClosure launch_closure,
+                                  bool only_run_launch_closure_on_restart);
   ~CrostiniUpgraderDialog() override;
 
   // SystemWebDialogDelegate:
@@ -30,8 +38,8 @@
                        bool* out_close_dialog) override;
 
  private:
-  // Not owned.
-  CrostiniUpgraderUI* upgrader_ui_ = nullptr;
+  CrostiniUpgraderUI* upgrader_ui_ = nullptr;  // Not owned.
+  const bool only_run_launch_closure_on_restart_;
   base::OnceClosure launch_closure_;
 };
 
diff --git a/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_page_handler.cc b/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_page_handler.cc
index 93859bb..5610cbf 100644
--- a/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_page_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_page_handler.cc
@@ -87,22 +87,23 @@
 }
 
 void CrostiniUpgraderPageHandler::Launch() {
-  std::move(launch_callback_).Run(true);
+  std::move(launch_callback_).Run(restart_required_);
 }
 
 void CrostiniUpgraderPageHandler::CancelBeforeStart() {
   base::UmaHistogramEnumeration(crostini::kUpgradeDialogEventHistogram,
                                 crostini::UpgradeDialogEvent::kNotStarted);
+  restart_required_ = false;
   upgrader_ui_delegate_->CancelBeforeStart();
   if (launch_callback_) {
     // Running launch closure - no upgrade wanted, no need to restart crostini.
-    std::move(launch_callback_).Run(false);
+    Launch();
   }
 }
 
 void CrostiniUpgraderPageHandler::Close() {
   if (launch_callback_) {
-    std::move(launch_callback_).Run(true);
+    Launch();
   }
   std::move(close_dialog_callback_).Run();
 }
diff --git a/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_page_handler.h b/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_page_handler.h
index 56004a6..edf98821 100644
--- a/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_page_handler.h
+++ b/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_page_handler.h
@@ -70,6 +70,10 @@
   mojo::Remote<chromeos::crostini_upgrader::mojom::Page> page_;
   base::OnceClosure close_dialog_callback_;
   base::OnceCallback<void(bool)> launch_callback_;
+  // Will we need to restart the container as part of launch_callback?
+  // |restart_required_| is true unless the user cancels before starting the
+  // upgrade.
+  bool restart_required_ = true;
 
   base::WeakPtrFactory<CrostiniUpgraderPageHandler> weak_ptr_factory_{this};
 
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom b/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom
index 8d46b0c9..41bd71a 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom
@@ -88,6 +88,8 @@
   skia.mojom.SkColor shortcut_text_color;
   // True if the theme is dark (e.g. NTP background color is dark).
   bool is_dark;
+  // Color of Google logo. If not set show the logo multi-colored.
+  skia.mojom.SkColor? logo_color;
   // URL to the background image. Can point to untrusted content.
   url.mojom.Url? background_image_url;
   // Human readable attributions of the background image.
@@ -102,6 +104,20 @@
   ThemeInfo info;
 };
 
+// The contents of a doodle.
+union DoodleContent {
+  // Doodle image encoded as data URL. Set for static and animated doodles.
+  string image;
+  // URL pointing to doodle page. Set for interactive doodles.
+  url.mojom.Url url;
+};
+
+// A doodle. Retrieved from the Google doodle server.
+struct Doodle {
+  // The doodle content.
+  DoodleContent content;
+};
+
 // Used by the WebUI page to bootstrap bidirectional communication.
 interface PageHandlerFactory {
   // The WebUI page's |BrowserProxy| singleton calls this method when the page
@@ -151,6 +167,8 @@
   FocusOmnibox();
   // Pastes |text| into the omnibox.
   PasteIntoOmnibox(string text);
+  // Gets current doodle if there is one.
+  GetDoodle() => (Doodle? doodle);
 };
 
 // WebUI-side handler for requests from the browser.
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
index 56708208..a34ea8c 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h"
 
+#include "base/base64.h"
 #include "base/bind.h"
 #include "base/i18n/rtl.h"
 #include "base/strings/utf_string_conversions.h"
@@ -14,10 +15,13 @@
 #include "chrome/browser/search/chrome_colors/chrome_colors_service.h"
 #include "chrome/browser/search/instant_service.h"
 #include "chrome/browser/search/instant_service_factory.h"
+#include "chrome/browser/search_provider_logos/logo_service_factory.h"
 #include "chrome/browser/ui/search/omnibox_utils.h"
 #include "chrome/common/search/generated_colors_info.h"
 #include "chrome/common/search/instant_types.h"
 #include "chrome/common/themes/autogenerated_theme_util.h"
+#include "components/search_provider_logos/logo_service.h"
+#include "components/search_provider_logos/switches.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/color_utils.h"
 
@@ -55,6 +59,9 @@
   theme->shortcut_background_color = ntp_theme.shortcut_color;
   theme->shortcut_text_color = ntp_theme.text_color;
   theme->is_dark = !color_utils::IsDark(ntp_theme.text_color);
+  if (ntp_theme.logo_alternate) {
+    theme->logo_color = ntp_theme.logo_color;
+  }
   if (!ntp_theme.custom_background_url.is_empty()) {
     theme->background_image_url = ntp_theme.custom_background_url;
   }
@@ -86,11 +93,13 @@
       instant_service_(InstantServiceFactory::GetForProfile(profile)),
       ntp_background_service_(
           NtpBackgroundServiceFactory::GetForProfile(profile)),
+      logo_service_(LogoServiceFactory::GetForProfile(profile)),
       page_{std::move(pending_page)},
       receiver_{this, std::move(pending_page_handler)},
       web_contents_(web_contents) {
   CHECK(instant_service_);
   CHECK(ntp_background_service_);
+  CHECK(logo_service_);
   CHECK(web_contents_);
   instant_service_->AddObserver(this);
   ntp_background_service_->AddObserver(this);
@@ -261,6 +270,27 @@
   search::PasteIntoOmnibox(base::UTF8ToUTF16(text), web_contents_);
 }
 
+void NewTabPageHandler::GetDoodle(GetDoodleCallback callback) {
+  search_provider_logos::LogoCallbacks callbacks;
+  std::string fresh_doodle_param;
+  if (net::GetValueForKeyInQuery(web_contents_->GetLastCommittedURL(),
+                                 "fresh-doodle", &fresh_doodle_param) &&
+      fresh_doodle_param == "1") {
+    // In fresh-doodle mode, wait for the desired doodle to be downloaded.
+    callbacks.on_fresh_encoded_logo_available =
+        base::BindOnce(&NewTabPageHandler::OnLogoAvailable,
+                       weak_ptr_factory_.GetWeakPtr(), std::move(callback));
+  } else {
+    // In regular mode, return cached doodle as it is available faster.
+    callbacks.on_cached_encoded_logo_available =
+        base::BindOnce(&NewTabPageHandler::OnLogoAvailable,
+                       weak_ptr_factory_.GetWeakPtr(), std::move(callback));
+  }
+  // This will trigger re-downloading the doodle and caching it. This means that
+  // in regular mode a new doodle will be returned on subsequent NTP loads.
+  logo_service_->GetLogo(std::move(callbacks), /*for_webui_ntp=*/true);
+}
+
 void NewTabPageHandler::NtpThemeChanged(const NtpTheme& ntp_theme) {
   page_->SetTheme(MakeTheme(ntp_theme));
 }
@@ -345,3 +375,37 @@
     page_->SetFakeboxVisible(reason != OMNIBOX_FOCUS_CHANGE_TYPING);
   }
 }
+
+void NewTabPageHandler::OnLogoAvailable(
+    GetDoodleCallback callback,
+    search_provider_logos::LogoCallbackReason type,
+    const base::Optional<search_provider_logos::EncodedLogo>& logo) {
+  if (!logo) {
+    std::move(callback).Run(nullptr);
+    return;
+  }
+  auto doodle = new_tab_page::mojom::Doodle::New();
+  switch (logo->metadata.type) {
+    case search_provider_logos::LogoType::SIMPLE:
+    case search_provider_logos::LogoType::ANIMATED: {
+      if (!logo->encoded_image) {
+        std::move(callback).Run(nullptr);
+        return;
+      }
+      std::string base64;
+      base::Base64Encode(logo->encoded_image->data(), &base64);
+      auto data_url =
+          base::StringPrintf("data:%s;base64,%s",
+                             logo->metadata.mime_type.c_str(), base64.c_str());
+      doodle->content = new_tab_page::mojom::DoodleContent::NewImage(data_url);
+    } break;
+    case search_provider_logos::LogoType::INTERACTIVE:
+      doodle->content = new_tab_page::mojom::DoodleContent::NewUrl(
+          logo->metadata.full_page_url);
+      break;
+    default:
+      std::move(callback).Run(nullptr);
+      return;
+  }
+  std::move(callback).Run(std::move(doodle));
+}
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h
index 9b47656..38fccc1 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h
@@ -12,6 +12,7 @@
 #include "chrome/browser/ui/omnibox/omnibox_tab_helper.h"
 #include "chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom.h"
 #include "chrome/common/search/instant_types.h"
+#include "components/search_provider_logos/logo_common.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -31,6 +32,10 @@
 class WebContents;
 }  // namespace content
 
+namespace search_provider_logos {
+class LogoService;
+}  // namespace search_provider_logos
+
 class NewTabPageHandler : public new_tab_page::mojom::PageHandler,
                           public InstantServiceObserver,
                           public NtpBackgroundServiceObserver,
@@ -69,6 +74,7 @@
                            GetBackgroundImagesCallback callback) override;
   void FocusOmnibox() override;
   void PasteIntoOmnibox(const std::string& text) override;
+  void GetDoodle(GetDoodleCallback callback) override;
 
  private:
   // InstantServiceObserver:
@@ -86,9 +92,15 @@
   void OnOmniboxFocusChanged(OmniboxFocusState state,
                              OmniboxFocusChangeReason reason) override;
 
+  void OnLogoAvailable(
+      GetDoodleCallback callback,
+      search_provider_logos::LogoCallbackReason type,
+      const base::Optional<search_provider_logos::EncodedLogo>& logo);
+
   chrome_colors::ChromeColorsService* chrome_colors_service_;
   InstantService* instant_service_;
   NtpBackgroundService* ntp_background_service_;
+  search_provider_logos::LogoService* logo_service_;
   GURL last_blacklisted_;
   GetBackgroundCollectionsCallback background_collections_callback_;
   std::string images_request_collection_id_;
@@ -96,6 +108,7 @@
   mojo::Remote<new_tab_page::mojom::Page> page_;
   mojo::Receiver<new_tab_page::mojom::PageHandler> receiver_;
   content::WebContents* web_contents_;
+  base::WeakPtrFactory<NewTabPageHandler> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(NewTabPageHandler);
 };
diff --git a/chrome/browser/ui/webui/new_tab_page/untrusted_source.cc b/chrome/browser/ui/webui/new_tab_page/untrusted_source.cc
index e4d486d..af00210 100644
--- a/chrome/browser/ui/webui/new_tab_page/untrusted_source.cc
+++ b/chrome/browser/ui/webui/new_tab_page/untrusted_source.cc
@@ -71,6 +71,7 @@
     const content::WebContents::Getter& wc_getter,
     content::URLDataSource::GotDataCallback callback) {
   const std::string path = url.has_path() ? url.path().substr(1) : "";
+  GURL url_param = GURL(url.query());
   if (path == "one-google-bar" && one_google_bar_service_) {
     one_google_bar_callbacks_.push_back(std::move(callback));
     if (one_google_bar_callbacks_.size() == 1) {
@@ -97,14 +98,24 @@
         bundle.LoadDataResourceBytes(IDR_NEW_TAB_PAGE_UNTRUSTED_PROMO_JS));
     return;
   }
-  if (path == "image" && url.has_query()) {
+  if (path == "image" && url_param.is_valid() &&
+      url_param.SchemeIs(url::kHttpsScheme)) {
     ui::TemplateReplacements replacements;
-    replacements["url"] = url.query();
+    replacements["url"] = url_param.spec();
     std::string html =
         FormatTemplate(IDR_NEW_TAB_PAGE_UNTRUSTED_IMAGE_HTML, replacements);
     std::move(callback).Run(base::RefCountedString::TakeString(&html));
     return;
   }
+  if (path == "iframe" && url_param.is_valid() &&
+      url_param.SchemeIs(url::kHttpsScheme)) {
+    ui::TemplateReplacements replacements;
+    replacements["url"] = url_param.spec();
+    std::string html =
+        FormatTemplate(IDR_NEW_TAB_PAGE_UNTRUSTED_IFRAME_HTML, replacements);
+    std::move(callback).Run(base::RefCountedString::TakeString(&html));
+    return;
+  }
   std::move(callback).Run(base::MakeRefCounted<base::RefCountedString>());
 }
 
@@ -137,7 +148,8 @@
   }
   const std::string path = url.path().substr(1);
   return path == "one-google-bar" || path == "one_google_bar.js" ||
-         path == "promo" || path == "promo.js" || path == "image";
+         path == "promo" || path == "promo.js" || path == "image" ||
+         path == "iframe";
 }
 
 void UntrustedSource::OnOneGoogleBarDataUpdated() {
diff --git a/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc b/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc
index 4997085..24181cb 100644
--- a/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc
@@ -445,8 +445,12 @@
 void CrostiniHandler::HandleRequestContainerUpgradeView(
     const base::ListValue* args) {
   CHECK_EQ(0U, args->GetList().size());
-  chromeos::CrostiniUpgraderDialog::Show(base::BindOnce(
-      &CrostiniHandler::LaunchTerminal, weak_ptr_factory_.GetWeakPtr()));
+  chromeos::CrostiniUpgraderDialog::Show(
+      base::BindOnce(&CrostiniHandler::LaunchTerminal,
+                     weak_ptr_factory_.GetWeakPtr()),
+      // If the user cancels the upgrade, we won't need to restart Crostini and
+      // we don't want to run the launch closure which would launch Terminal.
+      /*only_run_launch_closure_on_restart=*/true);
 }
 
 void CrostiniHandler::OnCrostiniExportImportOperationStatusChanged(
diff --git a/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc b/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc
index e75796e..bd301cf 100644
--- a/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc
@@ -143,7 +143,8 @@
     return;
   }
   if (network->type() != shill::kTypeVPN) {
-    NET_LOG(ERROR) << "ConfigureThirdPartyVpn: Network is not a VPN: " << guid;
+    NET_LOG(ERROR) << "ConfigureThirdPartyVpn: Network is not a VPN: "
+                   << NetworkId(network);
     return;
   }
 
@@ -169,7 +170,8 @@
   }
 
   NET_LOG(ERROR) << "ConfigureThirdPartyVpn: Unsupported VPN type: "
-                 << network->GetVpnProviderType() << " For: " << guid;
+                 << network->GetVpnProviderType()
+                 << " For: " << NetworkId(network);
 }
 
 void InternetHandler::RequestGmsCoreNotificationsDisabledDeviceNames(
diff --git a/chrome/browser/upboarding/query_tiles/BUILD.gn b/chrome/browser/upboarding/query_tiles/BUILD.gn
index e5f64ac..7e04cc67 100644
--- a/chrome/browser/upboarding/query_tiles/BUILD.gn
+++ b/chrome/browser/upboarding/query_tiles/BUILD.gn
@@ -24,6 +24,7 @@
 
 source_set("public") {
   sources = [
+    "image_loader.h",
     "query_tile_entry.cc",
     "query_tile_entry.h",
     "tile_service.h",
@@ -47,10 +48,7 @@
 }
 
 source_set("factory") {
-  sources = [
-    "tile_service_factory.cc",
-    "tile_service_factory.h",
-  ]
+  sources = []
 
   deps = [
     ":public",
diff --git a/chrome/browser/upboarding/query_tiles/cached_image_loader.cc b/chrome/browser/upboarding/query_tiles/cached_image_loader.cc
new file mode 100644
index 0000000..a1a8131
--- /dev/null
+++ b/chrome/browser/upboarding/query_tiles/cached_image_loader.cc
@@ -0,0 +1,74 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/upboarding/query_tiles/cached_image_loader.h"
+
+#include <utility>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "chrome/browser/upboarding/query_tiles/image_loader.h"
+#include "components/image_fetcher/core/image_fetcher.h"
+#include "components/image_fetcher/core/image_fetcher_service.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/gfx/image/image.h"
+
+namespace upboarding {
+namespace {
+
+// A string used to log UMA for query tiles in image fetcher service.
+constexpr char kImageFetcherUmaClientName[] = "QueryTiles";
+
+constexpr net::NetworkTrafficAnnotationTag kQueryTilesTrafficAnnotation =
+    net::DefineNetworkTrafficAnnotation("query_tiles_image_loader", R"(
+      semantics {
+        sender: "Query Tiles Image Loader"
+        description:
+          "Fetches image for query tiles on Android NTP. Images are hosted on"
+          " Google static content server, the data source may come from third"
+          " parties."
+        trigger:
+          "When the user opens NTP to view the query tiles on Android, and"
+          " the image cache doesn't have a fresh copy on disk."
+        data: "URL of the image to be fetched."
+        destination: GOOGLE_OWNED_SERVICE
+      }
+      policy {
+        cookies_allowed: NO
+        setting: "Disabled when the user uses search engines other than Google."
+        chrome_policy {
+            DefaultSearchProviderEnabled {
+              policy_options {mode: MANDATORY}
+              DefaultSearchProviderEnabled: false
+            }
+        }
+      })");
+
+void OnImageFetched(ImageLoader::BitmapCallback callback,
+                    const gfx::Image& image,
+                    const image_fetcher::RequestMetadata&) {
+  DCHECK(callback);
+  std::move(callback).Run(image.AsBitmap());
+}
+
+}  // namespace
+
+CachedImageLoader::CachedImageLoader(image_fetcher::ImageFetcher* image_fetcher)
+    : image_fetcher_(image_fetcher) {
+  DCHECK(image_fetcher_);
+}
+
+CachedImageLoader::~CachedImageLoader() = default;
+
+void CachedImageLoader::FetchImage(const GURL& url, BitmapCallback callback) {
+  // Fetch and decode the image from network or disk cache.
+  // TODO(xingliu): Add custom expiration to ImageFetcherParams.
+  image_fetcher::ImageFetcherParams params(kQueryTilesTrafficAnnotation,
+                                           kImageFetcherUmaClientName);
+  image_fetcher_->FetchImage(
+      url, base::BindOnce(&OnImageFetched, std::move(callback)), params);
+}
+
+}  // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/cached_image_loader.h b/chrome/browser/upboarding/query_tiles/cached_image_loader.h
new file mode 100644
index 0000000..a93191d
--- /dev/null
+++ b/chrome/browser/upboarding/query_tiles/cached_image_loader.h
@@ -0,0 +1,37 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UPBOARDING_QUERY_TILES_CACHED_IMAGE_LOADER_H_
+#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_CACHED_IMAGE_LOADER_H_
+
+#include <memory>
+
+#include "chrome/browser/upboarding/query_tiles/image_loader.h"
+#include "components/image_fetcher/core/image_fetcher.h"
+
+namespace image_fetcher {
+class ImageFetcher;
+}  // namespace image_fetcher
+
+namespace upboarding {
+
+// Loads image with image fetcher service, which provides a disk cache to reduce
+// network data consumption.
+class CachedImageLoader : public ImageLoader {
+ public:
+  explicit CachedImageLoader(image_fetcher::ImageFetcher* image_fetcher);
+  ~CachedImageLoader() override;
+
+ private:
+  // ImageLoader implementation.
+  void FetchImage(const GURL& url, BitmapCallback callback) override;
+
+  // Owned by ImageFetcherService. Outlives TileService, the owner of this
+  // class.
+  image_fetcher::ImageFetcher* image_fetcher_;
+};
+
+}  // namespace upboarding
+
+#endif  // CHROME_BROWSER_UPBOARDING_QUERY_TILES_CACHED_IMAGE_LOADER_H_
diff --git a/chrome/browser/upboarding/query_tiles/cached_image_loader_unittest.cc b/chrome/browser/upboarding/query_tiles/cached_image_loader_unittest.cc
new file mode 100644
index 0000000..65c50ec
--- /dev/null
+++ b/chrome/browser/upboarding/query_tiles/cached_image_loader_unittest.cc
@@ -0,0 +1,79 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/upboarding/query_tiles/cached_image_loader.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/memory/weak_ptr.h"
+#include "base/test/task_environment.h"
+#include "components/image_fetcher/core/mock_image_fetcher.h"
+#include "components/image_fetcher/core/request_metadata.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/gfx/image/image.h"
+
+using ::testing::_;
+using ::testing::Invoke;
+
+namespace upboarding {
+namespace {
+
+class CachedImageLoaderTest : public testing::Test {
+ public:
+  CachedImageLoaderTest() = default;
+  ~CachedImageLoaderTest() override = default;
+
+  void SetUp() override {
+    image_loader_ = std::make_unique<CachedImageLoader>(&mock_fetcher_);
+  }
+
+ protected:
+  void FetchImage() {
+    image_loader_->FetchImage(
+        GURL("https://www.example.com/dummy_image"),
+        base::BindOnce(&CachedImageLoaderTest::OnBitmapFetched,
+                       weak_ptr_factory_.GetWeakPtr()));
+  }
+
+  image_fetcher::MockImageFetcher* mock_fetcher() { return &mock_fetcher_; }
+
+  const SkBitmap& result() const { return result_; }
+
+ private:
+  void OnBitmapFetched(SkBitmap bitmap) { result_ = bitmap; }
+
+  base::test::TaskEnvironment task_environment_;
+  image_fetcher::MockImageFetcher mock_fetcher_;
+
+  std::unique_ptr<ImageLoader> image_loader_;
+  SkBitmap result_;
+
+  base::WeakPtrFactory<CachedImageLoaderTest> weak_ptr_factory_{this};
+};
+
+TEST_F(CachedImageLoaderTest, FetchImage) {
+  // Create a non-empty bitmap.
+  SkBitmap bitmap;
+  bitmap.allocN32Pixels(32, 16);
+  EXPECT_FALSE(bitmap.empty());
+  EXPECT_EQ(bitmap.width(), 32);
+  auto image = gfx::Image::CreateFrom1xBitmap(bitmap);
+
+  EXPECT_CALL(*mock_fetcher(), FetchImageAndData_(_, _, _, _))
+      .WillRepeatedly(
+          Invoke([&image](const GURL&, image_fetcher::ImageDataFetcherCallback*,
+                          image_fetcher::ImageFetcherCallback* fetch_callback,
+                          image_fetcher::ImageFetcherParams) {
+            std::move(*fetch_callback)
+                .Run(image, image_fetcher::RequestMetadata());
+          }));
+  FetchImage();
+  EXPECT_FALSE(result().empty());
+  EXPECT_EQ(result().width(), 32);
+}
+
+}  // namespace
+}  // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/image_loader.h b/chrome/browser/upboarding/query_tiles/image_loader.h
new file mode 100644
index 0000000..bec54bdb
--- /dev/null
+++ b/chrome/browser/upboarding/query_tiles/image_loader.h
@@ -0,0 +1,36 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UPBOARDING_QUERY_TILES_IMAGE_LOADER_H_
+#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_IMAGE_LOADER_H_
+
+#include <memory>
+#include <string>
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "url/gurl.h"
+
+class SkBitmap;
+
+namespace upboarding {
+
+// Loads image for query tiles.
+class ImageLoader {
+ public:
+  using BitmapCallback = base::OnceCallback<void(SkBitmap bitmap)>;
+
+  ImageLoader() = default;
+  virtual ~ImageLoader() = default;
+  ImageLoader(const ImageLoader&) = delete;
+  ImageLoader& operator=(const ImageLoader&) = delete;
+
+  // Fetches the bitmap of an image based on its URL. Callback will be invoked
+  // with the bitmap of the image, or an empty bitmap on failure.
+  virtual void FetchImage(const GURL& url, BitmapCallback callback) = 0;
+};
+
+}  // namespace upboarding
+
+#endif  // CHROME_BROWSER_UPBOARDING_QUERY_TILES_IMAGE_LOADER_H_
diff --git a/chrome/browser/upboarding/query_tiles/internal/BUILD.gn b/chrome/browser/upboarding/query_tiles/internal/BUILD.gn
index 6ad84b2..f2fa9815 100644
--- a/chrome/browser/upboarding/query_tiles/internal/BUILD.gn
+++ b/chrome/browser/upboarding/query_tiles/internal/BUILD.gn
@@ -15,8 +15,6 @@
     "image_decoder.h",
     "image_info_store.cc",
     "image_info_store.h",
-    "image_loader.cc",
-    "image_loader.h",
     "proto_conversion.cc",
     "proto_conversion.h",
     "query_tile_store.cc",
diff --git a/chrome/browser/upboarding/query_tiles/internal/image_loader.cc b/chrome/browser/upboarding/query_tiles/internal/image_loader.cc
deleted file mode 100644
index 8b2d0bd..0000000
--- a/chrome/browser/upboarding/query_tiles/internal/image_loader.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/upboarding/query_tiles/internal/image_loader.h"
-
-namespace upboarding {
-
-ImageLoader::ImageLoader() = default;
-
-ImageLoader::~ImageLoader() = default;
-
-}  // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/internal/image_loader.h b/chrome/browser/upboarding/query_tiles/internal/image_loader.h
deleted file mode 100644
index de141fc..0000000
--- a/chrome/browser/upboarding/query_tiles/internal/image_loader.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_IMAGE_LOADER_H_
-#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_IMAGE_LOADER_H_
-
-#include <memory>
-#include <string>
-
-#include "base/callback.h"
-#include "base/macros.h"
-#include "url/gurl.h"
-
-class SkBitmap;
-
-namespace upboarding {
-
-// Loads image for query tiles. The image will be fetched from a URL and cached
-// on disk.
-class ImageLoader {
- public:
-  using SuccessCallback = base::OnceCallback<bool>;
-  using BitmapCallback = base::OnceCallback<std::unique_ptr<SkBitmap>>;
-  using Id = std::string;
-
-  ImageLoader();
-  virtual ~ImageLoader();
-
-  // Updates the image cache for a specific tile. If the URL is changed, we will
-  // immediately fetch the image, then invoke the callback.
-  virtual void Update(const Id& id,
-                      const GURL& url,
-                      SuccessCallback callback) = 0;
-  // Deletes an image cache for a specific tile.
-  virtual void Delete(const Id& id, SuccessCallback callback) = 0;
-
-  // Gets the bitmap for a specific tile. Callback will be invoked after
-  // reading the data from disk or the fetch is done.
-  void GetBitmap(const Id& id, BitmapCallback callback);
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ImageLoader);
-};
-
-}  // namespace upboarding
-
-#endif  // CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_IMAGE_LOADER_H_
diff --git a/chrome/browser/upboarding/query_tiles/tile_service_factory.cc b/chrome/browser/upboarding/query_tiles/tile_service_factory.cc
index ec4af58..d068075 100644
--- a/chrome/browser/upboarding/query_tiles/tile_service_factory.cc
+++ b/chrome/browser/upboarding/query_tiles/tile_service_factory.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/upboarding/query_tiles/tile_service_factory.h"
 
 #include "base/memory/singleton.h"
+#include "chrome/browser/image_fetcher/image_fetcher_service_factory.h"
 #include "components/keyed_service/core/simple_dependency_manager.h"
 
 namespace upboarding {
@@ -22,7 +23,9 @@
 
 TileServiceFactory::TileServiceFactory()
     : SimpleKeyedServiceFactory("TileService",
-                                SimpleDependencyManager::GetInstance()) {}
+                                SimpleDependencyManager::GetInstance()) {
+  DependsOn(ImageFetcherServiceFactory::GetInstance());
+}
 
 TileServiceFactory::~TileServiceFactory() {}
 
diff --git a/chrome/common/extensions/api/cryptotoken_private.idl b/chrome/common/extensions/api/cryptotoken_private.idl
index 71bf64d..bd76150 100644
--- a/chrome/common/extensions/api/cryptotoken_private.idl
+++ b/chrome/common/extensions/api/cryptotoken_private.idl
@@ -11,6 +11,7 @@
 namespace cryptotokenPrivate {
 
   callback BooleanCallback = void(boolean result);
+  callback VoidCallback = void();
 
   dictionary CanAppIdGetAttestationOptions {
     // The AppId (see definition, above) that was used in the registration
@@ -48,5 +49,15 @@
     // require that some attestation be provided.
     static void canAppIdGetAttestation(CanAppIdGetAttestationOptions options,
                                        BooleanCallback callback);
+
+    // Increments the WebFeature::kU2FCryptotokenRegister UseCounter for the
+    // main frame associated with |tabId|.
+    static void recordRegisterRequest(long tabId, long frameId,
+                                      optional VoidCallback callback);
+
+    // Increments the WebFeature::kU2FCryptotokenSign UseCounter for the
+    // main frame associated with |tabId|.
+    static void recordSignRequest(long tabId, long frameId,
+                                  optional VoidCallback callback);
   };
 };
diff --git a/chrome/common/extensions/api/input_method_private.json b/chrome/common/extensions/api/input_method_private.json
index 0cc5e66..592912f 100644
--- a/chrome/common/extensions/api/input_method_private.json
+++ b/chrome/common/extensions/api/input_method_private.json
@@ -85,15 +85,16 @@
         "type": "object",
         "description": "User preference settings for a specific input method. Japanese input methods are not included because they are managed separately by Mozc module.",
         "properties": {
-          "autoCorrectionLevelPK": { "type": "integer", "optional": true, "description": "The level of auto correction for physical keyboard (0: Off, 1: Modest, 2: Aggressive)."},
-          "autoCorrectionLevelVK": { "type": "integer", "optional": true, "description": "The level of auto correction for virtual keyboard (0: Off, 1: Modest, 2: Aggressive)."},
-          "enableCapitalizationPK": { "type": "boolean", "optional": true, "description": "Whether to enable auto capitalization for physical keyboard."},
-          "enableCapitalizationVK": { "type": "boolean", "optional": true, "description": "Whether enable auto capitalization for virtual keyboard."},
           "enableCompletion": { "type": "boolean", "optional": true, "description": "Whether to enable auto completion."},
           "enableDoubleSpacePeriod": { "type": "boolean", "optional": true, "description": "Whether to auto transform double spaces to type period."},
           "enableGestureTyping": { "type": "boolean", "optional": true, "description": "Whether to enable gesture typing."},
           "enablePrediction": { "type": "boolean", "optional": true, "description": "Whether to enable word prediction."},
           "enableSoundOnKeypress": { "type": "boolean", "optional": true, "description": "Whether to enable sound on keypress."},
+          "physicalKeyboardAutoCorrectionLevel": { "type": "integer", "optional": true, "description": "The level of auto correction for physical keyboard (0: Off, 1: Modest, 2: Aggressive)."},
+          "physicalKeyboardEnableCapitalization": { "type": "boolean", "optional": true, "description": "Whether to enable auto capitalization for physical keyboard."},
+          "virtualKeyboardAutoCorrectionLevel": { "type": "integer", "optional": true, "description": "The level of auto correction for virtual keyboard (0: Off, 1: Modest, 2: Aggressive)."},
+          "virtualKeyboardEnableCapitalization": { "type": "boolean", "optional": true, "description": "Whether enable auto capitalization for virtual keyboard."},
+          "xkbLayout": { "type": "string", "optional": true, "description": "The xkb keyboard (system provided keyboard) layout."},
           "koreanEnableSyllableInput": { "type": "boolean", "optional": true, "description": "Whether input one syllable at a time in korean input method."},
           "koreanKeyboardLayout": { "type": "string", "optional": true, "description": "The layout of korean keyboard."},
           "koreanShowHangulCandidate": { "type": "boolean", "optional": true, "description": "Whether to show hangul candidates in korean input method."},
@@ -126,10 +127,9 @@
               "z_zh": {"type": "boolean", "optional": true, "description": "Whether to enable z_zh fuzzy"}
             }
           },
-          "xkbLayout": { "type": "string", "optional": true, "description": "The xkb keyboard (system provided keyboard) layout."},
           "zhuyinKeyboardLayout": { "type": "string", "optional": true, "description": "The layout of zhuyin keyboard."},
           "zhuyinPageSize": { "type": "integer", "optional": true, "description": "The page size of zhuyin candidate page."},
-          "zhuyinSelectionKeys": { "type": "string", "optional": true, "description": "The keys used to select candidates in zhuyin."}
+          "zhuyinSelectKeys": { "type": "string", "optional": true, "description": "The keys used to select candidates in zhuyin."}
         }
       }
     ],
diff --git a/chrome/credential_provider/setup/setup.cc b/chrome/credential_provider/setup/setup.cc
index d043728..62c4259 100644
--- a/chrome/credential_provider/setup/setup.cc
+++ b/chrome/credential_provider/setup/setup.cc
@@ -27,6 +27,7 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/win/process_startup_helper.h"
+#include "base/win/scoped_com_initializer.h"
 #include "base/win/scoped_handle.h"
 #include "base/win/win_util.h"
 #include "base/win/windows_version.h"
@@ -163,11 +164,8 @@
     return -1;
   }
 
-  hr = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
-  if (FAILED(hr)) {
-    LOGFN(ERROR) << "Could not initialize COM.";
-    return -1;
-  }
+  base::win::ScopedCOMInitializer com_initializer(
+      base::win::ScopedCOMInitializer::kMTA);
 
   // Parse command line.
   bool is_uninstall =
@@ -224,6 +222,5 @@
                 << ". " << time_string;
   }
 
-  ::CoUninitialize();
   return 0;
 }
diff --git a/chrome/credential_provider/test/gcp_setup_unittests.cc b/chrome/credential_provider/test/gcp_setup_unittests.cc
index de7a706..10eca52 100644
--- a/chrome/credential_provider/test/gcp_setup_unittests.cc
+++ b/chrome/credential_provider/test/gcp_setup_unittests.cc
@@ -6,7 +6,6 @@
 #include <atlcom.h>
 #include <atlcomcli.h>
 #include <lmerr.h>
-#include <objbase.h>
 #include <unknwn.h>
 #include <wrl/client.h>
 
@@ -28,6 +27,7 @@
 #include "base/test/scoped_path_override.h"
 #include "base/test/test_reg_util_win.h"
 #include "base/win/registry.h"
+#include "base/win/scoped_com_initializer.h"
 #include "base/win/win_util.h"
 #include "build/build_config.h"
 #include "chrome/credential_provider/common/gcp_strings.h"
@@ -95,6 +95,8 @@
   void GetModulePathAndProductVersion(base::FilePath* module_path,
                                       base::string16* product_version);
 
+  base::win::ScopedCOMInitializer com_initializer_{
+      base::win::ScopedCOMInitializer::kMTA};
   registry_util::RegistryOverrideManager registry_override_;
   base::ScopedTempDir scoped_temp_prog_dir_;
   base::ScopedTempDir scoped_temp_start_menu_dir_;
@@ -216,9 +218,6 @@
 }
 
 void GcpSetupTest::SetUp() {
-  ASSERT_TRUE(SUCCEEDED(
-      CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE)));
-
   // Get the path to the setup exe (this exe during unit tests) and the
   // chrome version.
   GetModulePathAndProductVersion(&module_path_, &product_version_);
diff --git a/chrome/installer/setup/install_unittest.cc b/chrome/installer/setup/install_unittest.cc
index b69e4590..4bb9806 100644
--- a/chrome/installer/setup/install_unittest.cc
+++ b/chrome/installer/setup/install_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/installer/setup/install.h"
 
-#include <objbase.h>
 #include <stddef.h>
 
 #include <memory>
@@ -24,6 +23,7 @@
 #include "base/test/scoped_path_override.h"
 #include "base/test/test_shortcut_win.h"
 #include "base/version.h"
+#include "base/win/scoped_com_initializer.h"
 #include "base/win/shortcut.h"
 #include "build/branding_buildflags.h"
 #include "chrome/install_static/install_details.h"
@@ -207,8 +207,7 @@
 class InstallShortcutTest : public testing::Test {
  protected:
   void SetUp() override {
-    EXPECT_EQ(S_OK, CoInitialize(NULL));
-
+    ASSERT_TRUE(com_initializer_.Succeeded());
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
     chrome_exe_ = temp_dir_.GetPath().Append(installer::kChromeExe);
     EXPECT_EQ(0, base::WriteFile(chrome_exe_, "", 0));
@@ -272,7 +271,6 @@
     base::win::UnpinShortcutFromTaskbar(user_start_menu_subdir_shortcut_);
     base::win::UnpinShortcutFromTaskbar(system_start_menu_shortcut_);
     base::win::UnpinShortcutFromTaskbar(system_start_menu_subdir_shortcut_);
-    CoUninitialize();
   }
 
   installer::MasterPreferences* GetFakeMasterPrefs(
@@ -300,6 +298,8 @@
     return new installer::MasterPreferences(master_prefs);
   }
 
+  base::win::ScopedCOMInitializer com_initializer_;
+
   base::win::ShortcutProperties expected_properties_;
   base::win::ShortcutProperties expected_start_menu_properties_;
 
diff --git a/chrome/services/app_service/public/cpp/preferred_apps_list.cc b/chrome/services/app_service/public/cpp/preferred_apps_list.cc
index 3512e3fb..1305578 100644
--- a/chrome/services/app_service/public/cpp/preferred_apps_list.cc
+++ b/chrome/services/app_service/public/cpp/preferred_apps_list.cc
@@ -31,11 +31,12 @@
   while (iter != preferred_apps->end()) {
     if (apps_util::FiltersHaveOverlap((*iter)->intent_filter, intent_filter)) {
       // Add the to be removed preferred app into a map, key by app_id.
-      auto entry = replaced_preference_map.find(app_id);
+      const std::string replaced_app_id = (*iter)->app_id;
+      auto entry = replaced_preference_map.find(replaced_app_id);
       if (entry == replaced_preference_map.end()) {
         std::vector<apps::mojom::IntentFilterPtr> intent_filter_vector;
         intent_filter_vector.push_back((*iter)->intent_filter->Clone());
-        replaced_preference_map.emplace(app_id,
+        replaced_preference_map.emplace(replaced_app_id,
                                         std::move(intent_filter_vector));
       } else {
         entry->second.push_back((*iter)->intent_filter->Clone());
diff --git a/chrome/services/app_service/public/cpp/preferred_apps_list_unittest.cc b/chrome/services/app_service/public/cpp/preferred_apps_list_unittest.cc
index 2f174af..d6f4e68 100644
--- a/chrome/services/app_service/public/cpp/preferred_apps_list_unittest.cc
+++ b/chrome/services/app_service/public/cpp/preferred_apps_list_unittest.cc
@@ -187,3 +187,111 @@
 
   EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url));
 }
+
+// Test that when overlap happens, the previous setting will be removed.
+TEST_F(PreferredAppListTest, OverlapPreferredApp) {
+  GURL filter_url_1 = GURL("https://www.google.com/abc");
+  GURL filter_url_2 = GURL("http://www.google.com.au/abc");
+  auto intent_filter_1 = apps_util::CreateIntentFilterForUrlScope(filter_url_1);
+  intent_filter_1->conditions[0]->condition_values.push_back(
+      apps_util::MakeConditionValue(filter_url_2.scheme(),
+                                    apps::mojom::PatternMatchType::kNone));
+  intent_filter_1->conditions[1]->condition_values.push_back(
+      apps_util::MakeConditionValue(filter_url_2.host(),
+                                    apps::mojom::PatternMatchType::kNone));
+  preferred_apps_.AddPreferredApp(kAppId1, intent_filter_1);
+  EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_1));
+  EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_2));
+
+  GURL filter_url_3 = GURL("https://www.abc.com/abc");
+  auto intent_filter_2 = apps_util::CreateIntentFilterForUrlScope(filter_url_3);
+  intent_filter_2->conditions[0]->condition_values.push_back(
+      apps_util::MakeConditionValue(filter_url_2.scheme(),
+                                    apps::mojom::PatternMatchType::kNone));
+  intent_filter_2->conditions[1]->condition_values.push_back(
+      apps_util::MakeConditionValue(filter_url_2.host(),
+                                    apps::mojom::PatternMatchType::kNone));
+  preferred_apps_.AddPreferredApp(kAppId2, intent_filter_2);
+  EXPECT_EQ(base::nullopt,
+            preferred_apps_.FindPreferredAppForUrl(filter_url_1));
+  EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url_2));
+  EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url_3));
+}
+
+// Test that the replaced app preferences is correct.
+TEST_F(PreferredAppListTest, ReplacedAppPreference) {
+  GURL filter_url_1 = GURL("https://www.google.com/abc");
+  GURL filter_url_2 = GURL("http://www.google.com.au/abc");
+  auto intent_filter_1 = apps_util::CreateIntentFilterForUrlScope(filter_url_1);
+  intent_filter_1->conditions[0]->condition_values.push_back(
+      apps_util::MakeConditionValue(filter_url_2.scheme(),
+                                    apps::mojom::PatternMatchType::kNone));
+  intent_filter_1->conditions[1]->condition_values.push_back(
+      apps_util::MakeConditionValue(filter_url_2.host(),
+                                    apps::mojom::PatternMatchType::kNone));
+  auto replaced_app_preferences =
+      preferred_apps_.AddPreferredApp(kAppId1, intent_filter_1);
+  EXPECT_EQ(0u, replaced_app_preferences->replaced_preference.size());
+
+  GURL filter_url_3 = GURL("https://www.abc.com/abc");
+  auto intent_filter_2 = apps_util::CreateIntentFilterForUrlScope(filter_url_3);
+  intent_filter_2->conditions[0]->condition_values.push_back(
+      apps_util::MakeConditionValue(filter_url_2.scheme(),
+                                    apps::mojom::PatternMatchType::kNone));
+  intent_filter_2->conditions[1]->condition_values.push_back(
+      apps_util::MakeConditionValue(filter_url_2.host(),
+                                    apps::mojom::PatternMatchType::kNone));
+  replaced_app_preferences =
+      preferred_apps_.AddPreferredApp(kAppId2, intent_filter_2);
+  EXPECT_EQ(1u, replaced_app_preferences->replaced_preference.size());
+  EXPECT_TRUE(replaced_app_preferences->replaced_preference.find(kAppId1) !=
+              replaced_app_preferences->replaced_preference.end());
+
+  GURL filter_url_4 = GURL("http://www.example.com/abc");
+  auto intent_filter_3 = apps_util::CreateIntentFilterForUrlScope(filter_url_3);
+  intent_filter_3->conditions[0]->condition_values.push_back(
+      apps_util::MakeConditionValue(filter_url_4.scheme(),
+                                    apps::mojom::PatternMatchType::kNone));
+  intent_filter_3->conditions[1]->condition_values.push_back(
+      apps_util::MakeConditionValue(filter_url_4.host(),
+                                    apps::mojom::PatternMatchType::kNone));
+
+  // Test when replacing multiple preferred app entries with same app id.
+  replaced_app_preferences =
+      preferred_apps_.AddPreferredApp(kAppId1, intent_filter_1);
+  EXPECT_EQ(1u, replaced_app_preferences->replaced_preference.size());
+  EXPECT_TRUE(replaced_app_preferences->replaced_preference.find(kAppId2) !=
+              replaced_app_preferences->replaced_preference.end());
+
+  replaced_app_preferences =
+      preferred_apps_.AddPreferredApp(kAppId1, intent_filter_3);
+  EXPECT_EQ(0u, replaced_app_preferences->replaced_preference.size());
+
+  replaced_app_preferences =
+      preferred_apps_.AddPreferredApp(kAppId2, intent_filter_2);
+  EXPECT_EQ(1u, replaced_app_preferences->replaced_preference.size());
+  auto entry = replaced_app_preferences->replaced_preference.find(kAppId1);
+  EXPECT_TRUE(entry != replaced_app_preferences->replaced_preference.end());
+  EXPECT_EQ(2u, entry->second.size());
+
+  // Test when replacing multiple preferred app entries with different app id.
+  replaced_app_preferences =
+      preferred_apps_.AddPreferredApp(kAppId1, intent_filter_1);
+  EXPECT_EQ(1u, replaced_app_preferences->replaced_preference.size());
+  EXPECT_TRUE(replaced_app_preferences->replaced_preference.find(kAppId2) !=
+              replaced_app_preferences->replaced_preference.end());
+
+  replaced_app_preferences =
+      preferred_apps_.AddPreferredApp(kAppId2, intent_filter_3);
+  EXPECT_EQ(0u, replaced_app_preferences->replaced_preference.size());
+
+  replaced_app_preferences =
+      preferred_apps_.AddPreferredApp(kAppId3, intent_filter_2);
+  EXPECT_EQ(2u, replaced_app_preferences->replaced_preference.size());
+  entry = replaced_app_preferences->replaced_preference.find(kAppId1);
+  EXPECT_TRUE(entry != replaced_app_preferences->replaced_preference.end());
+  EXPECT_EQ(1u, entry->second.size());
+  entry = replaced_app_preferences->replaced_preference.find(kAppId2);
+  EXPECT_TRUE(entry != replaced_app_preferences->replaced_preference.end());
+  EXPECT_EQ(1u, entry->second.size());
+}
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index dfe9964..95d19b4b 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -168,6 +168,7 @@
     #"//chrome/app/theme:theme_resources",
     "//chrome/browser:test_support",
     "//chrome/child",
+    "//chrome/common:non_code_constants",
     "//chrome/common:test_support",
     "//chrome/renderer",
     "//chrome/renderer:test_support",
@@ -3468,6 +3469,7 @@
     "../browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc",
     "../browser/ui/webui/local_state/local_state_ui_unittest.cc",
     "../browser/ui/webui/log_web_ui_url_unittest.cc",
+    "../browser/upboarding/query_tiles/cached_image_loader_unittest.cc",
     "../browser/update_client/chrome_update_query_params_delegate_unittest.cc",
     "../browser/vr/metrics/session_tracker_unittest.cc",
     "../browser/vr/vr_tab_helper_unittest.cc",
diff --git a/chrome/test/chromedriver/server/http_handler.cc b/chrome/test/chromedriver/server/http_handler.cc
index 777b07c..ca96d85 100644
--- a/chrome/test/chromedriver/server/http_handler.cc
+++ b/chrome/test/chromedriver/server/http_handler.cc
@@ -1255,7 +1255,9 @@
         inner_params->SetString("data.text", "");
       } else {
         std::string alertText = message.substr(first, last - first);
-        alertText = alertText.substr(alertText.find(":") + 2);
+        auto colon = alertText.find(":");
+        if (colon != std::string::npos && alertText.size() > (colon + 2))
+          alertText = alertText.substr(colon + 2);
         inner_params->SetString("data.text", alertText);
       }
     }
diff --git a/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeDisabled-basic_list_menu.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeDisabled-basic_list_menu.Nexus_5X-23.png.sha1
new file mode 100644
index 0000000..4bf9694
--- /dev/null
+++ b/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeDisabled-basic_list_menu.Nexus_5X-23.png.sha1
@@ -0,0 +1 @@
+674dad2a4bbc57e179add7769e21c63b241754d4
\ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeEnabled-basic_list_menu.Nexus_5X-23.png.sha1 b/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeEnabled-basic_list_menu.Nexus_5X-23.png.sha1
new file mode 100644
index 0000000..2841ed5
--- /dev/null
+++ b/chrome/test/data/android/render_tests/ListMenuRenderTest.NightModeEnabled-basic_list_menu.Nexus_5X-23.png.sha1
@@ -0,0 +1 @@
+05ec9348dca4c304762ae06e3fb5390d5d4e3ed7
\ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs-select_last.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs-select_last.Pixel_2-28.png.sha1
new file mode 100644
index 0000000..fd348b4
--- /dev/null
+++ b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs-select_last.Pixel_2-28.png.sha1
@@ -0,0 +1 @@
+fa98aefcb8086f224786715eda9f13acd1340561
\ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs.Pixel_2-28.png.sha1
new file mode 100644
index 0000000..ba9651a
--- /dev/null
+++ b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.10_web_tabs.Pixel_2-28.png.sha1
@@ -0,0 +1 @@
+57edc2c0238df085a1c07eeb3f777a3696d829ff
\ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_ntps.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_ntps.Pixel_2-28.png.sha1
new file mode 100644
index 0000000..1a40339
--- /dev/null
+++ b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_ntps.Pixel_2-28.png.sha1
@@ -0,0 +1 @@
+d0005b01db02cd457c8356c4204a3a51379ce62b
\ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_web_tabs.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_web_tabs.Pixel_2-28.png.sha1
new file mode 100644
index 0000000..dea470ae
--- /dev/null
+++ b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_incognito_web_tabs.Pixel_2-28.png.sha1
@@ -0,0 +1 @@
+35c87059bad2d390adf4f7978b8da96acc13a1ed
\ No newline at end of file
diff --git a/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_web_tabs.Pixel_2-28.png.sha1 b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_web_tabs.Pixel_2-28.png.sha1
new file mode 100644
index 0000000..ab4ae4dd
--- /dev/null
+++ b/chrome/test/data/android/render_tests/StartSurfaceLayoutTest.3_web_tabs.Pixel_2-28.png.sha1
@@ -0,0 +1 @@
+5737404db83a4a8c182f4219e78f6752220f7134
\ No newline at end of file
diff --git a/chrome/test/data/sync/encryption_keys_retrieval.html b/chrome/test/data/sync/encryption_keys_retrieval.html
index ef71c2fe..0cb9b18 100644
--- a/chrome/test/data/sync/encryption_keys_retrieval.html
+++ b/chrome/test/data/sync/encryption_keys_retrieval.html
@@ -1,27 +1,15 @@
 <html>
 <head>
 <script>
-// This particular test page uses ASCII keys for simplicity. Real callers are
-// not expected to deal with strings and converting them via charCodeAt().
-// TODO(crbug.com/978430): Pass an actual binary (non-ASCII) key.
-function asciiToArrayBuffer(s) {
-  var buffer = new ArrayBuffer(s.length);
-  var view = new Uint8Array(buffer);
-  for (var i = 0; i < s.length; i++) {
-    view[i] = s.charCodeAt(i);
-  }
-  return buffer;
-}
-
 window.onload = function() {
-  if (typeof chrome.setSyncEncryptionKeys == "undefined") {
-    document.title = "UNDEFINED";
-  } else {
-    chrome.setSyncEncryptionKeys(() => { document.title = "OK"; },
-                                 location.search.substring(1),
-                                 [asciiToArrayBuffer(location.hash.substring(1))],
-                                 /*last_key_version=*/7);
-  }
+  setTimeout(function() {
+    // A second page is loaded during retrieval, such that Blink sees a
+    // non-empty navigation history when determining whether closing the tab via
+    // Javascript is allowed.
+    this.document.location.href =
+        "/sync/encryption_keys_retrieval_complete.html" +
+        location.search + location.hash;
+  }, 0);
 }
 </script>
 </head>
diff --git a/chrome/test/data/sync/encryption_keys_retrieval_complete.html b/chrome/test/data/sync/encryption_keys_retrieval_complete.html
new file mode 100644
index 0000000..44083cd
--- /dev/null
+++ b/chrome/test/data/sync/encryption_keys_retrieval_complete.html
@@ -0,0 +1,28 @@
+<html>
+<head>
+<script>
+// This particular test page uses ASCII keys for simplicity. Real callers are
+// not expected to deal with strings and converting them via charCodeAt().
+// TODO(crbug.com/978430): Pass an actual binary (non-ASCII) key.
+function asciiToArrayBuffer(s) {
+  var buffer = new ArrayBuffer(s.length);
+  var view = new Uint8Array(buffer);
+  for (var i = 0; i < s.length; i++) {
+    view[i] = s.charCodeAt(i);
+  }
+  return buffer;
+}
+
+window.onload = function() {
+  if (typeof chrome.setSyncEncryptionKeys == "undefined") {
+    document.title = "UNDEFINED";
+  } else {
+    chrome.setSyncEncryptionKeys(() => { window.close(); },
+                                 location.search.substring(1),
+                                 [asciiToArrayBuffer(location.hash.substring(1))],
+                                 /*last_key_version=*/7);
+  }
+}
+</script>
+</head>
+</html>
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index 10221a5..b501b40 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -259,6 +259,7 @@
     "$root_gen_dir/chrome/test/data/webui/settings/test_local_data_browser_proxy.m.js",
     "$root_gen_dir/chrome/test/data/webui/settings/test_metrics_browser_proxy.m.js",
     "$root_gen_dir/chrome/test/data/webui/settings/site_data_details_subpage_tests.m.js",
+    "$root_gen_dir/chrome/test/data/webui/settings/site_details_permission_tests.m.js",
     "$root_gen_dir/chrome/test/data/webui/settings/site_entry_tests.m.js",
     "$root_gen_dir/chrome/test/data/webui/settings/site_list_entry_tests.m.js",
     "$root_gen_dir/chrome/test/data/webui/settings/site_list_tests.m.js",
diff --git a/chrome/test/data/webui/new_tab_page/app_test.js b/chrome/test/data/webui/new_tab_page/app_test.js
index 99372b2..4cdb30b 100644
--- a/chrome/test/data/webui/new_tab_page/app_test.js
+++ b/chrome/test/data/webui/new_tab_page/app_test.js
@@ -8,6 +8,23 @@
 import {assertNotStyle, assertStyle, createTestProxy} from 'chrome://test/new_tab_page/test_support.js';
 import {flushTasks} from 'chrome://test/test_util.m.js';
 
+/** @return {!newTabPage.mojom.Theme} */
+function createTheme() {
+  return {
+    type: newTabPage.mojom.ThemeType.DEFAULT,
+    info: {chromeThemeId: 0},
+    backgroundColor: {value: 0xffff0000},
+    shortcutBackgroundColor: {value: 0xff00ff00},
+    shortcutTextColor: {value: 0xff0000ff},
+    isDark: false,
+    logoColor: null,
+    backgroundImageUrl: null,
+    backgroundImageAttribution1: '',
+    backgroundImageAttribution2: '',
+    backgroundImageAttributionUrl: null,
+  };
+}
+
 suite('NewTabPageAppTest', () => {
   /** @type {!AppElement} */
   let app;
@@ -28,6 +45,9 @@
     testProxy.handler.setResultFor('getChromeThemes', Promise.resolve({
       chromeThemes: [],
     }));
+    testProxy.handler.setResultFor('getDoodle', Promise.resolve({
+      doodle: null,
+    }));
     testProxy.setResultMapperFor('matchMedia', () => ({
                                                  addListener() {},
                                                  removeListener() {},
@@ -55,18 +75,7 @@
   test('setting theme updates customize dialog', async () => {
     // Arrange.
     app.$.customizeButton.click();
-    const theme = {
-      type: newTabPage.mojom.ThemeType.DEFAULT,
-      info: {chromeThemeId: 0},
-      backgroundColor: {value: 0xffff0000},
-      shortcutBackgroundColor: {value: 0xff00ff00},
-      shortcutTextColor: {value: 0xff0000ff},
-      isDark: false,
-      backgroundImageUrl: null,
-      backgroundImageAttribution1: '',
-      backgroundImageAttribution2: '',
-      backgroundImageAttributionUrl: null,
-    };
+    const theme = createTheme();
 
     // Act.
     testProxy.callbackRouterRemote.setTheme(theme);
@@ -79,14 +88,7 @@
 
   test('setting theme updates ntp', async () => {
     // Act.
-    testProxy.callbackRouterRemote.setTheme({
-      type: newTabPage.mojom.ThemeType.DEFAULT,
-      info: {chromeThemeId: 0},
-      backgroundColor: {value: 0xffff0000},
-      shortcutBackgroundColor: {value: 0xff00ff00},
-      shortcutTextColor: {value: 0xff0000ff},
-      isDark: false,
-    });
+    testProxy.callbackRouterRemote.setTheme(createTheme());
     await testProxy.callbackRouterRemote.$.flushForTesting();
 
     // Assert.
@@ -100,6 +102,8 @@
     assertStyle(app.$.backgroundGradient, 'display', 'none');
     assertStyle(app.$.backgroundImageAttribution, 'display', 'none');
     assertStyle(app.$.backgroundImageAttribution2, 'display', 'none');
+    assertTrue(app.$.logo.doodleAllowed);
+    assertFalse(app.$.logo.singleColored);
   });
 
   test('open voice search event opens voice search overlay', async () => {
@@ -111,20 +115,10 @@
     assertTrue(!!app.shadowRoot.querySelector('ntp-voice-search-overlay'));
   });
 
-  test('setting background images shows iframe and gradient', async () => {
-    // Act.
-    const theme = {
-      type: newTabPage.mojom.ThemeType.DEFAULT,
-      info: {chromeThemeId: 0},
-      backgroundColor: {value: 0xffff0000},
-      shortcutBackgroundColor: {value: 0xff00ff00},
-      shortcutTextColor: {value: 0xff0000ff},
-      isDark: false,
-      backgroundImageUrl: {url: 'https://img.png'},
-      backgroundImageAttribution1: '',
-      backgroundImageAttribution2: '',
-      backgroundImageAttributionUrl: null,
-    };
+  test('setting background image shows image, disallows doodle', async () => {
+    // Arrange.
+    const theme = createTheme();
+    theme.backgroundImageUrl = {url: 'https://img.png'};
 
     // Act.
     testProxy.callbackRouterRemote.setTheme(theme);
@@ -135,22 +129,15 @@
     assertNotStyle(app.$.backgroundGradient, 'display', 'none');
     assertNotStyle(app.$.backgroundImageAttribution, 'text-shadow', 'none');
     assertEquals(app.$.backgroundImage.path, 'image?https://img.png');
+    assertFalse(app.$.logo.doodleAllowed);
   });
 
   test('setting attributions shows attributions', async function() {
-    // Act.
-    const theme = {
-      type: newTabPage.mojom.ThemeType.DEFAULT,
-      info: {chromeThemeId: 0},
-      backgroundColor: {value: 0xffff0000},
-      shortcutBackgroundColor: {value: 0xff00ff00},
-      shortcutTextColor: {value: 0xff0000ff},
-      isDark: false,
-      backgroundImageUrl: null,
-      backgroundImageAttribution1: 'foo',
-      backgroundImageAttribution2: 'bar',
-      backgroundImageAttributionUrl: {url: 'https://info.com'},
-    };
+    // Arrange.
+    const theme = createTheme();
+    theme.backgroundImageAttribution1 = 'foo';
+    theme.backgroundImageAttribution2 = 'bar';
+    theme.backgroundImageAttributionUrl = {url: 'https://info.com'};
 
     // Act.
     testProxy.callbackRouterRemote.setTheme(theme);
@@ -165,4 +152,31 @@
     assertEquals(app.$.backgroundImageAttribution1.textContent.trim(), 'foo');
     assertEquals(app.$.backgroundImageAttribution2.textContent.trim(), 'bar');
   });
+
+  test('setting non-default theme disallows doodle', async function() {
+    // Arrange.
+    const theme = createTheme();
+    theme.type = newTabPage.mojom.ThemeType.CHROME;
+
+    // Act.
+    testProxy.callbackRouterRemote.setTheme(theme);
+    await testProxy.callbackRouterRemote.$.flushForTesting();
+
+    // Assert.
+    assertFalse(app.$.logo.doodleAllowed);
+  });
+
+  test('setting logo color colors logo', async function() {
+    // Arrange.
+    const theme = createTheme();
+    theme.logoColor = {value: 0xffff0000};
+
+    // Act.
+    testProxy.callbackRouterRemote.setTheme(theme);
+    await testProxy.callbackRouterRemote.$.flushForTesting();
+
+    // Assert.
+    assertTrue(app.$.logo.singleColored);
+    assertStyle(app.$.logo, '--ntp-logo-color', 'rgb(255, 0, 0)');
+  });
 });
diff --git a/chrome/test/data/webui/new_tab_page/logo_test.js b/chrome/test/data/webui/new_tab_page/logo_test.js
new file mode 100644
index 0000000..3ff4ccc
--- /dev/null
+++ b/chrome/test/data/webui/new_tab_page/logo_test.js
@@ -0,0 +1,109 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'chrome://new-tab-page/logo.js';
+
+import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js';
+import {assertNotStyle, assertStyle, createTestProxy} from 'chrome://test/new_tab_page/test_support.js';
+import {flushTasks} from 'chrome://test/test_util.m.js';
+
+suite('NewTabPageLogoTest', () => {
+  /**
+   * @implements {BrowserProxy}
+   * @extends {TestBrowserProxy}
+   */
+  let testProxy;
+
+  async function createLogo(doodle = null) {
+    testProxy.handler.setResultFor('getDoodle', Promise.resolve({
+      doodle: doodle,
+    }));
+    const logo = document.createElement('ntp-logo');
+    document.body.appendChild(logo);
+    await flushTasks();
+    return logo;
+  }
+
+  setup(() => {
+    PolymerTest.clearBody();
+
+    testProxy = createTestProxy();
+    BrowserProxy.instance_ = testProxy;
+  });
+
+  test('setting static, animated doodle shows image', async () => {
+    // Act.
+    const logo = await createLogo({content: {image: 'data:foo'}});
+
+    // Assert.
+    assertNotStyle(logo.$.doodle, 'display', 'none');
+    assertStyle(logo.$.logo, 'display', 'none');
+    assertEquals(logo.$.image.src, 'data:foo');
+    assertNotStyle(logo.$.image, 'display', 'none');
+    assertStyle(logo.$.iframe, 'display', 'none');
+  });
+
+  test('setting interactive doodle shows iframe', async () => {
+    // Act.
+    const logo = await createLogo({content: {url: {url: 'https://foo.com'}}});
+
+    // Assert.
+    assertNotStyle(logo.$.doodle, 'display', 'none');
+    assertStyle(logo.$.logo, 'display', 'none');
+    assertEquals(logo.$.iframe.path, 'iframe?https://foo.com');
+    assertNotStyle(logo.$.iframe, 'display', 'none');
+    assertStyle(logo.$.image, 'display', 'none');
+  });
+
+  test('disallowing doodle shows logo', async () => {
+    // Act.
+    const logo = await await createLogo({content: {image: 'data:foo'}});
+    logo.doodleAllowed = false;
+
+    // Assert.
+    assertNotStyle(logo.$.logo, 'display', 'none');
+    assertStyle(logo.$.doodle, 'display', 'none');
+  });
+
+  test('before doodle loaded shows nothing', () => {
+    // Act.
+    testProxy.handler.setResultFor('getDoodle', new Promise(() => {}));
+    const logo = document.createElement('ntp-logo');
+    document.body.appendChild(logo);
+
+    // Assert.
+    assertStyle(logo.$.logo, 'display', 'none');
+    assertStyle(logo.$.doodle, 'display', 'none');
+  });
+
+  test('unavailable doodle shows logo', async () => {
+    // Act.
+    const logo = await createLogo();
+
+    // Assert.
+    assertNotStyle(logo.$.logo, 'display', 'none');
+    assertStyle(logo.$.doodle, 'display', 'none');
+  });
+
+  test('not setting-single colored shows multi-colored logo', async () => {
+    // Act.
+    const logo = await createLogo();
+
+    // Assert.
+    assertNotStyle(logo.$.multiColoredLogo, 'display', 'none');
+    assertStyle(logo.$.singleColoredLogo, 'display', 'none');
+  });
+
+  test('setting single-colored shows single-colored logo', async () => {
+    // Act.
+    const logo = await createLogo();
+    logo.singleColored = true;
+    logo.style.setProperty('--ntp-logo-color', 'red');
+
+    // Assert.
+    assertNotStyle(logo.$.singleColoredLogo, 'display', 'none');
+    assertStyle(logo.$.singleColoredLogo, 'background-color', 'rgb(255, 0, 0)');
+    assertStyle(logo.$.multiColoredLogo, 'display', 'none');
+  });
+});
diff --git a/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.js b/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.js
index 8c8324f..84a2abc 100644
--- a/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.js
+++ b/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.js
@@ -146,3 +146,15 @@
 TEST_F('NewTabPageFakeboxTest', 'All', function() {
   mocha.run();
 });
+
+// eslint-disable-next-line no-var
+var NewTabPageLogoTest = class extends NewTabPageBrowserTest {
+  /** @override */
+  get browsePreload() {
+    return 'chrome://new-tab-page/test_loader.html?module=new_tab_page/logo_test.js';
+  }
+};
+
+TEST_F('NewTabPageLogoTest', 'All', function() {
+  mocha.run();
+});
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn
index ebc03a3..8b89cac 100644
--- a/chrome/test/data/webui/settings/BUILD.gn
+++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -54,6 +54,7 @@
     "settings_toggle_button_tests.js",
     "settings_ui_tests.js",
     "site_data_details_subpage_tests.js",
+    "site_details_permission_tests.js",
     "site_entry_tests.js",
     "site_list_entry_tests.js",
     "site_list_tests.js",
diff --git a/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js b/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js
index c723563..2b2704b 100644
--- a/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js
@@ -779,3 +779,16 @@
 TEST_F('CrSettingsSiteEntryV3Test', 'All', function() {
   mocha.run();
 });
+
+// eslint-disable-next-line no-var
+var CrSettingsSiteDetailsPermissionV3Test =
+    class extends CrSettingsV3BrowserTest {
+  /** @override */
+  get browsePreload() {
+    return 'chrome://settings/test_loader.html?module=settings/site_details_permission_tests.m.js';
+  }
+};
+
+TEST_F('CrSettingsSiteDetailsPermissionV3Test', 'All', function() {
+  mocha.run();
+});
diff --git a/chrome/test/data/webui/settings/site_details_permission_tests.js b/chrome/test/data/webui/settings/site_details_permission_tests.js
index 7559dc5..9230b8ce 100644
--- a/chrome/test/data/webui/settings/site_details_permission_tests.js
+++ b/chrome/test/data/webui/settings/site_details_permission_tests.js
@@ -2,6 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// clang-format off
+// #import {ContentSetting,ContentSettingsTypes,SiteSettingSource,SiteSettingsPrefsBrowserProxyImpl} from 'chrome://settings/lazy_load.js';
+// #import {createContentSettingTypeToValuePair,createDefaultContentSetting,createRawSiteException,createSiteSettingsPrefs} from 'chrome://test/settings/test_util.m.js';
+// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+// #import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
+// #import {TestSiteSettingsPrefsBrowserProxy} from 'chrome://test/settings/test_site_settings_prefs_browser_proxy.m.js';
+// clang-format on
+
 /** @fileoverview Suite of tests for site-details. */
 suite('SiteDetailsPermission', function() {
   /**
@@ -11,6 +19,12 @@
   let testElement;
 
   /**
+   * The mock proxy object to use during test.
+   * @type {TestSiteSettingsPrefsBrowserProxy}
+   */
+  let browserProxy;
+
+  /**
    * An example pref with only camera allowed.
    * @type {SiteSettingsPref}
    */
@@ -154,7 +168,7 @@
     permissionSourcesNoSetting[settings.SiteSettingSource.KILL_SWITCH] =
         'Temporarily blocked to protect your security';
 
-    for (testSource in permissionSourcesNoSetting) {
+    for (const testSource in permissionSourcesNoSetting) {
       testElement.site = {
         origin: origin,
         embeddingOrigin: origin,
@@ -189,7 +203,7 @@
     extensionSourceStrings[settings.ContentSetting.ASK] =
         'Setting controlled by an extension';
 
-    for (testSetting in extensionSourceStrings) {
+    for (const testSetting in extensionSourceStrings) {
       testElement.site = {
         origin: origin,
         embeddingOrigin: origin,
@@ -214,7 +228,7 @@
     policySourceStrings[settings.ContentSetting.ASK] =
         'Setting controlled by your administrator';
 
-    for (testSetting in policySourceStrings) {
+    for (const testSetting in policySourceStrings) {
       testElement.site = {
         origin: origin,
         embeddingOrigin: origin,
diff --git a/chrome/updater/mac/BUILD.gn b/chrome/updater/mac/BUILD.gn
index 7231c5f..83a68e72 100644
--- a/chrome/updater/mac/BUILD.gn
+++ b/chrome/updater/mac/BUILD.gn
@@ -48,6 +48,8 @@
 mac_app_bundle("updater_bundle") {
   info_plist = "Info.plist"
   output_name = updater_product_full_name
+  extra_substitutions =
+      [ "MAC_BUNDLE_IDENTIFIER=$mac_updater_bundle_identifier" ]
 
   sources = [ "main.cc" ]
   deps = [
diff --git a/chrome/updater/mac/Info.plist b/chrome/updater/mac/Info.plist
index 9a17f07..a023e718 100644
--- a/chrome/updater/mac/Info.plist
+++ b/chrome/updater/mac/Info.plist
@@ -4,6 +4,8 @@
 <dict>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
+	<key>CFBundleIdentifier</key>
+	<string>${MAC_BUNDLE_IDENTIFIER}</string>
 	<key>CFBundleDisplayName</key>
 	<string>${PRODUCT_NAME}</string>
 	<key>CFBundleExecutable</key>
diff --git a/chromecast/media/cma/backend/volume_control.cc b/chromecast/media/cma/backend/volume_control.cc
index 4aed589..7c2ed84 100644
--- a/chromecast/media/cma/backend/volume_control.cc
+++ b/chromecast/media/cma/backend/volume_control.cc
@@ -154,7 +154,7 @@
                  AudioContentType type,
                  float level) {
     if (type == AudioContentType::kOther) {
-      NOTREACHED() << "Can't set volume for content type kOther";
+      DLOG(ERROR) << "Can't set volume for content type kOther";
       return;
     }
 
@@ -167,20 +167,19 @@
 
   void SetVolumeMultiplier(AudioContentType type, float multiplier) {
     if (type == AudioContentType::kOther) {
-      NOTREACHED() << "Can't set volume multiplier for content type kOther";
+      DLOG(ERROR) << "Can't set volume multiplier for content type kOther";
       return;
     }
 
-    if (BUILDFLAG(SYSTEM_OWNS_VOLUME)) {
-      LOG(INFO) << "Ignore global volume multiplier since volume is externally "
-                << "controlled";
-      return;
-    }
-
+#if BUILDFLAG(SYSTEM_OWNS_VOLUME)
+    LOG(INFO) << "Ignore global volume multiplier since volume is externally "
+              << "controlled";
+#else
     thread_.task_runner()->PostTask(
         FROM_HERE,
         base::BindOnce(&VolumeControlInternal::SetVolumeMultiplierOnThread,
                        base::Unretained(this), type, multiplier));
+#endif
   }
 
   bool IsMuted(AudioContentType type) {
@@ -190,7 +189,7 @@
 
   void SetMuted(VolumeChangeSource source, AudioContentType type, bool muted) {
     if (type == AudioContentType::kOther) {
-      NOTREACHED() << "Can't set mute state for content type kOther";
+      DLOG(ERROR) << "Can't set mute state for content type kOther";
       return;
     }
 
@@ -202,7 +201,7 @@
 
   void SetOutputLimit(AudioContentType type, float limit) {
     if (type == AudioContentType::kOther) {
-      NOTREACHED() << "Can't set output limit for content type kOther";
+      DLOG(ERROR) << "Can't set output limit for content type kOther";
       return;
     }
 
@@ -234,28 +233,27 @@
       volume_multipliers_[type] = 1.0f;
 
 #if BUILDFLAG(SYSTEM_OWNS_VOLUME)
-      // If ALSA owns volume, our internal mixer should not apply any scaling
+      // ALSA owns volume; our internal mixer should not apply any scaling
       // multiplier.
       mixer_->SetVolume(type, 1.0f);
-#else   // BUILDFLAG(SYSTEM_OWNS_VOLUME)
+#else
       mixer_->SetVolume(type, DbFsToScale(dbfs));
-#endif  // BUILDFLAG(SYSTEM_OWNS_VOLUME)
+#endif
 
       // Note that mute state is not persisted across reboots.
       muted_[type] = false;
     }
 
 #if BUILDFLAG(SYSTEM_OWNS_VOLUME)
-    // If ALSA owns the volume, then read the current volume and mute state
-    // from the ALSA mixer element(s).
+    // Read the current volume and mute state from the ALSA mixer element(s).
     volumes_[AudioContentType::kMedia] = system_volume_control_->GetVolume();
     muted_[AudioContentType::kMedia] = system_volume_control_->IsMuted();
-#else   // BUILDFLAG(SYSTEM_OWNS_VOLUME)
-    // Otherwise, make sure the ALSA mixer element correctly reflects the
-    // current volume state.
+#else
+    // Make sure the ALSA mixer element correctly reflects the current volume
+    // state.
     system_volume_control_->SetVolume(volumes_[AudioContentType::kMedia]);
     system_volume_control_->SetMuted(false);
-#endif  // BUILDFLAG(SYSTEM_OWNS_VOLUME)
+#endif
 
     volumes_[AudioContentType::kOther] = 1.0;
     muted_[AudioContentType::kOther] = false;
@@ -268,7 +266,7 @@
                          float level,
                          bool from_system) {
     DCHECK(thread_.task_runner()->BelongsToCurrentThread());
-    DCHECK(type != AudioContentType::kOther);
+    DCHECK_NE(AudioContentType::kOther, type);
     DCHECK(!from_system || type == AudioContentType::kMedia);
     DCHECK(volume_multipliers_.find(type) != volume_multipliers_.end());
 
@@ -285,9 +283,9 @@
     }
 
     float dbfs = VolumeControl::VolumeToDbFS(level);
-    if (!BUILDFLAG(SYSTEM_OWNS_VOLUME)) {
-      mixer_->SetVolume(type, DbFsToScale(dbfs) * volume_multipliers_[type]);
-    }
+#if !BUILDFLAG(SYSTEM_OWNS_VOLUME)
+    mixer_->SetVolume(type, DbFsToScale(dbfs) * volume_multipliers_[type]);
+#endif
 
     if (!from_system && type == AudioContentType::kMedia) {
       system_volume_control_->SetVolume(level);
@@ -306,13 +304,15 @@
 
   void SetVolumeMultiplierOnThread(AudioContentType type, float multiplier) {
     DCHECK(thread_.task_runner()->BelongsToCurrentThread());
-    DCHECK(type != AudioContentType::kOther);
-    DCHECK(!BUILDFLAG(SYSTEM_OWNS_VOLUME));
-
+    DCHECK_NE(AudioContentType::kOther, type);
+#if BUILDFLAG(SYSTEM_OWNS_VOLUME)
+    NOTREACHED();
+#else
     volume_multipliers_[type] = multiplier;
     float scale =
         DbFsToScale(VolumeControl::VolumeToDbFS(volumes_[type])) * multiplier;
     mixer_->SetVolume(type, scale);
+#endif
   }
 
   void SetMutedOnThread(VolumeChangeSource source,
@@ -320,7 +320,7 @@
                         bool muted,
                         bool from_system) {
     DCHECK(thread_.task_runner()->BelongsToCurrentThread());
-    DCHECK(type != AudioContentType::kOther);
+    DCHECK_NE(AudioContentType::kOther, type);
 
     {
       base::AutoLock lock(volume_lock_);
@@ -330,9 +330,9 @@
       muted_[type] = muted;
     }
 
-    if (!BUILDFLAG(SYSTEM_OWNS_VOLUME)) {
-      mixer_->SetMuted(type, muted);
-    }
+#if !BUILDFLAG(SYSTEM_OWNS_VOLUME)
+    mixer_->SetMuted(type, muted);
+#endif
 
     if (!from_system && type == AudioContentType::kMedia) {
       system_volume_control_->SetMuted(muted);
@@ -348,13 +348,11 @@
 
   void SetOutputLimitOnThread(AudioContentType type, float limit) {
     if (type == AudioContentType::kOther) {
-      NOTREACHED() << "Can't set output limit for content type kOther";
+      DLOG(ERROR) << "Can't set output limit for content type kOther";
       return;
     }
 
-    if (BUILDFLAG(SYSTEM_OWNS_VOLUME)) {
-      return;
-    }
+#if !BUILDFLAG(SYSTEM_OWNS_VOLUME)
     limit = base::ClampToRange(limit, 0.0f, 1.0f);
     mixer_->SetVolumeLimit(type,
                            DbFsToScale(VolumeControl::VolumeToDbFS(limit)));
@@ -362,6 +360,7 @@
     if (type == AudioContentType::kMedia) {
       system_volume_control_->SetLimit(limit);
     }
+#endif
   }
 
   void SetPowerSaveModeOnThread(bool power_save_on) {
diff --git a/chromeos/components/media_app_ui/resources/js/launch.js b/chromeos/components/media_app_ui/resources/js/launch.js
index a768b534..8f1253c 100644
--- a/chromeos/components/media_app_ui/resources/js/launch.js
+++ b/chromeos/components/media_app_ui/resources/js/launch.js
@@ -29,6 +29,13 @@
  */
 let currentlyWritableFileHandle = null;
 
+/**
+ * Reference to the directory handle that contains the first file in the most
+ * recent launch event.
+ * @type {?FileSystemDirectoryHandle}
+ */
+let currentDirectoryHandle = null;
+
 /** A pipe through which we can send messages to the guest frame. */
 const guestMessagePipe = new MessagePipe('chrome://media-app-guest');
 
@@ -42,7 +49,7 @@
 
 guestMessagePipe.registerHandler(Message.OVERWRITE_FILE, async (message) => {
   const overwrite = /** @type{OverwriteFileMessage} */ (message);
-  if (!currentlyWritableFileHandle || overwrite.token != fileToken) {
+  if (!currentlyWritableFileHandle || overwrite.token !== fileToken) {
     throw new Error('File not current.');
   }
   const writer = await currentlyWritableFileHandle.createWritable();
@@ -51,6 +58,37 @@
   await writer.close();
 });
 
+/** Handler to delete the currently focused file. */
+guestMessagePipe.registerHandler(Message.DELETE_FILE, async (message) => {
+  const deleteMsg = /** @type{DeleteFileMessage} */ (message);
+
+  if (!currentlyWritableFileHandle || deleteMsg.token !== fileToken) {
+    throw new Error('File not current for delete.');
+  }
+
+  if (!currentDirectoryHandle) {
+    throw new Error('Delete for file without launch directory.');
+  }
+
+  // Get the name from the file reference. Handles file renames.
+  const currentFilename = (await currentlyWritableFileHandle.getFile()).name;
+
+  // Check the file to be deleted exists in the directory handle. Prevents
+  // deleting the wrong file / deleting a file that doesn't exist (this isn't
+  // a failure case in `removeEntry()` but should be handled with different UX
+  // in MediaApp).
+  const fileHandle = await currentDirectoryHandle.getFile(currentFilename);
+
+  const isSameFileHandle =
+      await fileHandle.isSameEntry(currentlyWritableFileHandle);
+  if (!isSameFileHandle) {
+    return {deleteResult: DeleteResult.FILE_MOVED};
+  }
+
+  await currentDirectoryHandle.removeEntry(currentFilename);
+  return {deleteResult: DeleteResult.SUCCESS};
+});
+
 /**
  * Loads a file in the guest.
  *
@@ -105,6 +143,7 @@
     }
   }
   entryIndex = currentFiles.findIndex(i => i.file.name == focusFile.name);
+  currentDirectoryHandle = directory;
 }
 
 /**
diff --git a/chromeos/components/media_app_ui/resources/js/media_app.externs.js b/chromeos/components/media_app_ui/resources/js/media_app.externs.js
index 6e8129e..de6f736 100644
--- a/chromeos/components/media_app_ui/resources/js/media_app.externs.js
+++ b/chromeos/components/media_app_ui/resources/js/media_app.externs.js
@@ -52,6 +52,14 @@
 mediaApp.AbstractFile.prototype.overwriteOriginal;
 
 /**
+ * A function that will delete the original file. Returns a promise that
+ * resolves to an enum value (see DeleteResult in message_types) reflecting the
+ * result of the deletion (SUCCESS, FILE_MOVED), rejected if the deletion fails.
+ * @type {function(): Promise<number>|undefined}
+ */
+mediaApp.AbstractFile.prototype.deleteOriginalFile;
+
+/**
  * Wraps an HTML FileList object.
  * @record
  * @struct
diff --git a/chromeos/components/media_app_ui/resources/js/message_pipe.js b/chromeos/components/media_app_ui/resources/js/message_pipe.js
index d2170e6f4..b2ac23608 100644
--- a/chromeos/components/media_app_ui/resources/js/message_pipe.js
+++ b/chromeos/components/media_app_ui/resources/js/message_pipe.js
@@ -317,8 +317,8 @@
       error = err;
       sawError = true;
       /** @type{GenericErrorResponse} */
-      const errorRespose = {message: error.message || ''};
-      response = errorRespose;
+      const errorResponse = {message: error.message || ''};
+      response = errorResponse;
     }
 
     this.postToTarget_(error ? ERROR_TYPE : RESPONSE_TYPE, response, messageId);
diff --git a/chromeos/components/media_app_ui/resources/js/message_types.js b/chromeos/components/media_app_ui/resources/js/message_types.js
index bd77d28..c1cca24 100644
--- a/chromeos/components/media_app_ui/resources/js/message_types.js
+++ b/chromeos/components/media_app_ui/resources/js/message_types.js
@@ -12,11 +12,27 @@
  * @enum {string}
  */
 const Message = {
+  DELETE_FILE: 'delete-file',
   LOAD_FILE: 'load-file',
   OPEN_FEEDBACK_DIALOG: 'open-feedback-dialog',
   OVERWRITE_FILE: 'overwrite-file',
 };
 
+/**
+ * Enum for valid results of deleting a file.
+ * @enum {number}
+ */
+const DeleteResult = {
+  SUCCESS: 0,
+  FILE_MOVED: 1,
+};
+
+/** @typedef {{ token: number }} */
+let DeleteFileMessage;
+
+/** @typedef {{ deleteResult: DeleteResult }}  */
+let DeleteFileResponse;
+
 /** @typedef {{token: number, file: !File}} */
 let OpenFileMessage;
 
diff --git a/chromeos/components/media_app_ui/resources/js/receiver.js b/chromeos/components/media_app_ui/resources/js/receiver.js
index ed631d3..f17873b3 100644
--- a/chromeos/components/media_app_ui/resources/js/receiver.js
+++ b/chromeos/components/media_app_ui/resources/js/receiver.js
@@ -59,6 +59,17 @@
     this.size = blob.size;
     this.mimeType = blob.type;
   }
+
+  /**
+   * @override
+   * @return {!Promise<number>}
+   */
+  async deleteOriginalFile() {
+    const deleteResponse =
+        /** @type {!DeleteFileResponse} */ (await parentMessagePipe.sendMessage(
+            Message.DELETE_FILE, {token: this.token}));
+    return deleteResponse.deleteResult;
+  }
 }
 
 parentMessagePipe.registerHandler(Message.LOAD_FILE, (message) => {
diff --git a/chromeos/components/media_app_ui/resources/js/web_app_file_handling.externs.js b/chromeos/components/media_app_ui/resources/js/web_app_file_handling.externs.js
index dd12c32..5f800f3c 100644
--- a/chromeos/components/media_app_ui/resources/js/web_app_file_handling.externs.js
+++ b/chromeos/components/media_app_ui/resources/js/web_app_file_handling.externs.js
@@ -82,6 +82,12 @@
   }
 
   /**
+   * @param {FileSystemHandle} other
+   * @return {Promise<boolean>}
+   */
+  isSameEntry(other) {}
+
+  /**
    * @param {FileSystemHandlePermissionDescriptor} descriptor
    * @return {!Promise<PermissionState>}
    */
diff --git a/chromeos/components/media_app_ui/test/driver.js b/chromeos/components/media_app_ui/test/driver.js
index 0d047503..d749b7b 100644
--- a/chromeos/components/media_app_ui/test/driver.js
+++ b/chromeos/components/media_app_ui/test/driver.js
@@ -15,10 +15,10 @@
    *   tagName if unspecified.
    */
   async waitForElementInGuest(query, opt_property, opt_commands = {}) {
-    /** @type{TestMessageQueryData} */
+    /** @type {TestMessageQueryData} */
     const message = {testQuery: query, property: opt_property};
 
-    const result = /** @type{TestMessageResponseData} */ (
+    const result = /** @type {TestMessageResponseData} */ (
         await guestMessagePipe.sendMessage(
             'test', {...message, ...opt_commands}));
     return result.testQueryResult;
@@ -30,7 +30,7 @@
   constructor(/** !Blob= */ data = new Blob()) {
     this.data = data;
 
-    /** @type{function(!Blob)} */
+    /** @type {function(!Blob)} */
     this.resolveClose;
 
     this.closePromise = new Promise((/** function(!Blob) */ resolve) => {
@@ -60,33 +60,101 @@
   }
 }
 
-/** @implements FileSystemFileHandle  */
-class FakeFileSystemFileHandle {
+/** @implements FileSystemHandle  */
+class FakeFileSystemHandle {
   constructor() {
     this.isFile = true;
     this.isDirectory = false;
-    this.name = 'fakefile';
+    this.name = '';
+  }
+  /** @override */
+  async isSameEntry(other) {
+    return this === other;
+  }
+  /** @override */
+  async queryPermission(descriptor) {}
+  /** @override */
+  async requestPermission(descriptor) {}
+}
 
-    /** @type{?FakeWritableFileStream} */
+/** @implements FileSystemFileHandle  */
+class FakeFileSystemFileHandle extends FakeFileSystemHandle {
+  constructor() {
+    super();
+    /** @type {?FakeWritableFileStream} */
     this.lastWritable;
   }
-
-  /** @override */
-  queryPermission(descriptor) {}
-  /** @override */
-  requestPermission(descriptor) {}
   /** @override */
   createWriter(options) {
     throw new Error('createWriter() deprecated.')
   }
   /** @override */
-  createWritable(options) {
+  async createWritable(options) {
     this.lastWritable = new FakeWritableFileStream();
-    return Promise.resolve(this.lastWritable);
+    return this.lastWritable;
   }
   /** @override */
-  getFile() {
-    console.error('getFile() not implemented');
-    return Promise.resolve(new File([], 'fake-file'));
+  async getFile() {
+    return new File([], this.name);
   }
 }
+
+/** @implements FileSystemDirectoryHandle  */
+class FakeFileSystemDirectoryHandle extends FakeFileSystemHandle {
+  constructor() {
+    super();
+    this.isFile = false;
+    this.isDirectory = true;
+    this.name = 'fake-dir';
+    /**
+     * Internal state mocking file handles in a directory handle.
+     * @type {!Array<!FakeFileSystemFileHandle>}
+     */
+    this.files = [];
+    /**
+     * Used to spy on the last deleted file.
+     * @type {?FakeFileSystemFileHandle}
+     */
+    this.lastDeleted = null;
+  }
+  /**
+   * Use to populate `FileSystemFileHandle`s for tests.
+   * @param {!FakeFileSystemFileHandle} fileHandle
+   */
+  addFileHandleForTest(fileHandle) {
+    this.files.push(fileHandle);
+  }
+  /** @override */
+  getFile(name, options) {
+    const fileHandler = this.files.find(f => f.name === name);
+    return fileHandler ? Promise.resolve(fileHandler) :
+                         Promise.reject(new Error(`File ${name} not found`));
+  }
+  /** @override */
+  getDirectory(name, options) {}
+  /**
+   * @override
+   * @return {!AsyncIterable<!FileSystemHandle>}
+   * @suppress {reportUnknownTypes} suppress [JSC_UNKNOWN_EXPR_TYPE] for `yield
+   * file`.
+   */
+  async * getEntries() {
+    for (const file of this.files) {
+      yield file;
+    }
+  }
+  /** @override */
+  async removeEntry(name, options) {
+    // Remove file handle from internal state.
+    const fileHandleIndex = this.files.findIndex(f => f.name === name);
+    // Store the file removed for spying in tests.
+    this.lastDeleted = this.files.splice(fileHandleIndex, 1)[0];
+  }
+}
+
+/** Creates a mock directory with a single file in it. */
+function createMockTestDirectory() {
+  const directory = new FakeFileSystemDirectoryHandle();
+  directory.addFileHandleForTest(new FakeFileSystemFileHandle());
+  return directory;
+}
diff --git a/chromeos/components/media_app_ui/test/driver_api.js b/chromeos/components/media_app_ui/test/driver_api.js
index 28a2d64..6bef3f33 100644
--- a/chromeos/components/media_app_ui/test/driver_api.js
+++ b/chromeos/components/media_app_ui/test/driver_api.js
@@ -11,7 +11,8 @@
  *     pathToRoot: (Array<string>|undefined),
  *     property: (string|undefined),
  *     requestFullscreen: (boolean|undefined),
- *     overwriteLastFile: (string|undefined)
+ *     overwriteLastFile: (string|undefined),
+ *     deleteLastFile: (boolean|undefined)
  * }}
  */
 var TestMessageQueryData;
diff --git a/chromeos/components/media_app_ui/test/guest_query_receiver.js b/chromeos/components/media_app_ui/test/guest_query_receiver.js
index 3bb62c5..634489f 100644
--- a/chromeos/components/media_app_ui/test/guest_query_receiver.js
+++ b/chromeos/components/media_app_ui/test/guest_query_receiver.js
@@ -4,7 +4,7 @@
 
 /**
  * The last file loaded into the guest, updated via a spy on loadFile().
- * @type{?Promise<!ReceivedFile>}
+ * @type {?Promise<!ReceivedFile>}
  */
 let lastReceivedFile = null;
 
@@ -16,7 +16,7 @@
  * @return {Promise<!Element>}
  */
 async function waitForNode(query, opt_path) {
-  /** @type{!HTMLElement|!ShadowRoot} */
+  /** @type {!HTMLElement|!ShadowRoot} */
   let node = document.body;
   const parent = opt_path ? opt_path.shift() : undefined;
   if (parent) {
@@ -61,7 +61,7 @@
       try {
         await element.requestFullscreen();
         result = 'hooray';
-      } catch (/** @type{TypeError} */ typeError) {
+      } catch (/** @type {TypeError} */ typeError) {
         result = typeError.message;
       }
     }
@@ -70,6 +70,18 @@
     const ensureLoaded = await lastReceivedFile;
     await ensureLoaded.overwriteOriginal(testBlob);
     result = 'overwriteOriginal resolved';
+  } else if (data.deleteLastFile) {
+    try {
+      const ensureLoaded = await lastReceivedFile;
+      const deleteResult = await ensureLoaded.deleteOriginalFile();
+      if (deleteResult === DeleteResult.FILE_MOVED) {
+        result = 'deleteOriginalFile resolved file moved';
+      } else {
+        result = 'deleteOriginalFile resolved success';
+      }
+    } catch (/** @type{Error} */ error) {
+      result = `deleteOriginalFile failed Error: ${error}`;
+    }
   }
 
   return {testQueryResult: result};
@@ -79,7 +91,7 @@
 // parsed and executed.
 window.addEventListener('DOMContentLoaded', () => {
   parentMessagePipe.registerHandler('test', (data) => {
-    return runTestQuery(/** @type{TestMessageQueryData} */ (data));
+    return runTestQuery(/** @type {TestMessageQueryData} */ (data));
   });
   // Turn off error rethrowing for tests so the test runner doesn't mark
   // our error handling tests as failed.
diff --git a/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js b/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js
index 55b018e..d7d6c21 100644
--- a/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js
+++ b/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js
@@ -192,3 +192,42 @@
   assertEquals(await writeResult.text(), 'Foo');
   testDone();
 });
+
+// Tests the IPC behind the implementation of ReceivedFile.deleteOriginalFile()
+// in the untrusted context.
+TEST_F('MediaAppUIBrowserTest', 'DeleteOriginalIPC', async () => {
+  const directory = createMockTestDirectory();
+  // Simulate steps taken to load a file via a launch event.
+  const firstFile = directory.files[0];
+  loadFile(await createTestImageFile(), firstFile);
+  setCurrentDirectory(directory, firstFile);
+  let testResponse;
+
+  // Nothing should be deleted initially.
+  assertEquals(null, directory.lastDeleted);
+
+  const messageDelete = {deleteLastFile: true};
+  testResponse = await guestMessagePipe.sendMessage('test', messageDelete);
+
+  // Assertion will fail if exceptions from launch.js are thrown, no exceptions
+  // indicates the file was successfully deleted.
+  assertEquals(
+      testResponse.testQueryResult, 'deleteOriginalFile resolved success');
+  assertEquals(firstFile, directory.lastDeleted);
+  // File removed from `DirectoryHandle` internal state.
+  assertEquals(directory.files.length, 0);
+
+  // Even though the name is the same, the new file shouldn't shouldn't
+  // be deleted as it has a different `FileHandle` reference.
+  directory.addFileHandleForTest(new FakeFileSystemFileHandle());
+
+  // Try delete the first file again, should result in file moved.
+  const messageDeleteMoved = {deleteLastFile: true};
+  testResponse = await guestMessagePipe.sendMessage('test', messageDeleteMoved);
+
+  assertEquals(
+      testResponse.testQueryResult, 'deleteOriginalFile resolved file moved');
+  // New file not removed from `DirectoryHandle` internal state.
+  assertEquals(directory.files.length, 1);
+  testDone();
+});
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc
index 89e0a1f..b24b496 100644
--- a/chromeos/constants/chromeos_features.cc
+++ b/chromeos/constants/chromeos_features.cc
@@ -157,7 +157,7 @@
                                     base::FEATURE_DISABLED_BY_DEFAULT};
 
 // Enables the next generation file manager.
-const base::Feature kFilesNG{"FilesNG", base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kFilesNG{"FilesNG", base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Enables the use of Mojo by Chrome-process code to communicate with Power
 // Manager. In order to use mojo, this feature must be turned on and a callsite
diff --git a/chromeos/network/network_event_log.cc b/chromeos/network/network_event_log.cc
index 36117e3..291c94d 100644
--- a/chromeos/network/network_event_log.cc
+++ b/chromeos/network/network_event_log.cc
@@ -12,7 +12,8 @@
 #include "third_party/cros_system_api/dbus/service_constants.h"
 
 namespace {
-const char* kServicePrefix = "/service/";
+constexpr char kServicePrefix[] = "/service/";
+constexpr char kUnknownId[] = "<none>";
 
 chromeos::NetworkStateHandler* GetNetworkStateHandler() {
   if (!chromeos::NetworkHandler::IsInitialized())
@@ -28,7 +29,7 @@
 // e.g.: ethernet_0, wifi_psk_1, cellular_lte_2, vpn_openvpn_3.
 std::string NetworkId(const NetworkState* network) {
   if (!network)
-    return "<none>";
+    return kUnknownId;
 
   const std::string& type = network->type();
   if (type == kTypeTether) {
@@ -78,6 +79,8 @@
 // Calls NetworkId() if a NetworkState exists for |guid|, otherwise
 // returns |guid|.
 std::string NetworkGuidId(const std::string& guid) {
+  if (guid.empty())
+    return kUnknownId;
   NetworkStateHandler* handler = GetNetworkStateHandler();
   if (handler) {
     const NetworkState* network = handler->GetNetworkStateFromGuid(guid);
diff --git a/chromeos/network/network_event_log.h b/chromeos/network/network_event_log.h
index 865aa6d..ac444e91 100644
--- a/chromeos/network/network_event_log.h
+++ b/chromeos/network/network_event_log.h
@@ -31,51 +31,6 @@
 COMPONENT_EXPORT(CHROMEOS_NETWORK)
 std::string NetworkGuidId(const std::string& guid);
 
-// Namespace for functions for logging network events.
-namespace network_event_log {
-
-namespace internal {
-
-// Adds an entry to the event log at level specified by |log_level|.
-// A maximum number of events are recorded after which new events replace
-// old ones. Error events are prioritized such that error events will only be
-// deleted if more than least half of the entries are errors (at which point
-// the oldest error entry will be replaced). Does nothing unless Initialize()
-// has been called. NOTE: Generally use NET_LOG instead.
-COMPONENT_EXPORT(CHROMEOS_NETWORK)
-void AddEntry(const char* file,
-              int file_line,
-              device_event_log::LogLevel log_level,
-              const std::string& event,
-              const std::string& description);
-
-}  // namespace internal
-
-// Errors
-#define NET_LOG_ERROR(event, desc) \
-  NET_LOG_LEVEL(::device_event_log::LOG_LEVEL_ERROR, event, desc)
-
-// Chrome initiated events, e.g. connection requests, scan requests,
-// configuration removal (either from the UI or from ONC policy application).
-#define NET_LOG_USER(event, desc) \
-  NET_LOG_LEVEL(::device_event_log::LOG_LEVEL_USER, event, desc)
-
-// Important events, e.g. state updates
-#define NET_LOG_EVENT(event, desc) \
-  NET_LOG_LEVEL(::device_event_log::LOG_LEVEL_EVENT, event, desc)
-
-// Non-essential debugging events
-#define NET_LOG_DEBUG(event, desc) \
-  NET_LOG_LEVEL(::device_event_log::LOG_LEVEL_DEBUG, event, desc)
-
-// Macro to include file and line number info in the event log.
-#define NET_LOG_LEVEL(log_level, event, description)                       \
-  ::device_event_log::AddEntryWithDescription(                             \
-      __FILE__, __LINE__, ::device_event_log::LOG_TYPE_NETWORK, log_level, \
-      event, description)
-
-}  // namespace network_event_log
-
 }  // namespace chromeos
 
 #endif  // CHROMEOS_NETWORK_NETWORK_EVENT_LOG_H_
diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc
index 4bf0d2d..2044258 100644
--- a/chromeos/network/network_state_handler.cc
+++ b/chromeos/network/network_state_handler.cc
@@ -1066,6 +1066,10 @@
     const std::string& service_path) {
   NetworkState* network = GetModifiableNetworkState(service_path);
   if (network) {
+    // Tether networks are not managed by Shill; do not request properties.
+    if (network->type() == kTypeTether)
+      return;
+
     network->set_update_requested(true);
     NET_LOG(EVENT) << "RequestUpdate for: " << NetworkId(network);
   } else {
diff --git a/chromeos/services/network_config/cros_network_config.cc b/chromeos/services/network_config/cros_network_config.cc
index cbf6450..3c3d7c75 100644
--- a/chromeos/services/network_config/cros_network_config.cc
+++ b/chromeos/services/network_config/cros_network_config.cc
@@ -1561,7 +1561,10 @@
                 open_vpn.user_authentication_type, &open_vpn_dict);
       type_dict.SetKey(::onc::vpn::kOpenVPN, std::move(open_vpn_dict));
     }
-    SetString(::onc::vpn::kType, MojoVpnTypeToOnc(vpn.type), &type_dict);
+    if (vpn.type) {
+      SetString(::onc::vpn::kType, MojoVpnTypeToOnc(vpn.type->value),
+                &type_dict);
+    }
   } else if (properties->type_config->is_wifi()) {
     type = mojom::NetworkType::kWiFi;
     const mojom::WiFiConfigProperties& wifi =
diff --git a/chromeos/services/network_config/public/mojom/cros_network_config.mojom b/chromeos/services/network_config/public/mojom/cros_network_config.mojom
index 3e69047..631ed015 100644
--- a/chromeos/services/network_config/public/mojom/cros_network_config.mojom
+++ b/chromeos/services/network_config/public/mojom/cros_network_config.mojom
@@ -656,16 +656,23 @@
 // ensures that configurations are valid before translating and passing them to
 // Shill.
 
-// Wrapper to allow optional configuration auto_connect configuration.
+// Wrapper to allow optional auto_connect configuration.
 struct AutoConnectConfig {
   bool value;
 };
 
-// Wrapper to allow optional configuration priority configuration.
+// Wrapper to allow optional priority configuration.
 struct PriorityConfig {
   int32 value;
 };
 
+// Wrapper to allow optional VpnType configuration. Note: only configuration of
+// internal VPN types (kOpenVPN and kL2TPIPsec) is supported.
+// TODO(657632): Remove wrapper once optional enums are supported.
+struct VpnTypeConfig {
+  VpnType value;
+};
+
 struct ProxyLocation {
   string host;
   int32 port;
@@ -744,7 +751,9 @@
 };
 
 struct EthernetConfigProperties {
-  string authentication;
+  // |authentication| will default to "none" if not provided for new configs.
+  // TODO(657632): Use AuthenticationType here.
+  string? authentication;
   EAPConfigProperties? eap;
 };
 
@@ -753,15 +762,15 @@
   IPSecConfigProperties? ip_sec;
   L2TPConfigProperties? l2tp;
   OpenVPNConfigProperties? open_vpn;
-  // For existing configurations, this must match the VPN type. Only
-  // configuration of internal VPN types (kOpenVPN and kL2TPIPsec) is supported.
-  VpnType type;
+  // |type| is required for new configs, optional otherwise.
+  VpnTypeConfig? type;
 };
 
 struct WiFiConfigProperties {
   EAPConfigProperties? eap;
   string? passphrase;
-  string ssid;
+  // |ssid| is required for new configurations, optional otherwise.
+  string? ssid;
   SecurityType security = kNone;
 };
 
diff --git a/chromeos/strings/chromeos_strings_hi.xtb b/chromeos/strings/chromeos_strings_hi.xtb
index 4f94603..9f520c1 100644
--- a/chromeos/strings/chromeos_strings_hi.xtb
+++ b/chromeos/strings/chromeos_strings_hi.xtb
@@ -6,6 +6,7 @@
 <translation id="1482734542997480527">इस डिवाइस को <ph name="ENROLLMENT_DOMAIN" /> प्रबंधित करता है और आपकी गतिविधि पर नज़र रख सकता है.</translation>
 <translation id="150962533380566081">गलत पीयूके.</translation>
 <translation id="1510238584712386396">लॉन्चर</translation>
+<translation id="159973520823200404">खोजें</translation>
 <translation id="1734367976349034509">यह डिवाइस एंटरप्राइज़ द्वारा प्रबंधित है</translation>
 <translation id="1905710495812624430">अधिकतम स्वीकार्य प्रयासों की सीमा पार हो गई है.</translation>
 <translation id="1930797645656624981">Chrome OS के इनपुट के तरीके की सेवा</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb
index c36ef729..eb94a5c 100644
--- a/chromeos/strings/chromeos_strings_ja.xtb
+++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -6,6 +6,7 @@
 <translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> はこのデバイスを管理しており、アクティビティを監視できる可能性があります。</translation>
 <translation id="150962533380566081">無効な PUK です。</translation>
 <translation id="1510238584712386396">ランチャー</translation>
+<translation id="159973520823200404">使い方・ヒント</translation>
 <translation id="1734367976349034509">このデバイスは会社が管理しています</translation>
 <translation id="1905710495812624430">最大試行回数を超えました。</translation>
 <translation id="1930797645656624981">Chrome OS の入力方法サービス</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index 8c7a822..f343737 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -6,6 +6,7 @@
 <translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> ఈ పరికరాన్ని నిర్వహిస్తుంది. అలాగే మీ కార్యకలాపాన్ని కూడా పర్యవేక్షించే అవకాశం ఉంటుంది.</translation>
 <translation id="150962533380566081">PUK చెల్లదు.</translation>
 <translation id="1510238584712386396">లాంచర్</translation>
+<translation id="159973520823200404">Discover</translation>
 <translation id="1734367976349034509">ఈ పరికరం సంస్థ ద్వారా నిర్వహించబడుతోంది</translation>
 <translation id="1905710495812624430">అనుమతించిన గరిష్ట ప్రయత్నాలు మించిపోయారు.</translation>
 <translation id="1930797645656624981">Chrome OS ఇన్‌పుట్ విధానం సేవ</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb
index 9beed81..c85cf06 100644
--- a/chromeos/strings/chromeos_strings_vi.xtb
+++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -6,6 +6,7 @@
 <translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> quản lý thiết bị này và có thể giám sát hoạt động của bạn.</translation>
 <translation id="150962533380566081">PUK không hợp lệ.</translation>
 <translation id="1510238584712386396">Trình chạy</translation>
+<translation id="159973520823200404">Khám phá</translation>
 <translation id="1734367976349034509">Thiết bị này do doanh nghiệp quản lý</translation>
 <translation id="1905710495812624430">Đã vượt quá số lần thử tối đa được phép.</translation>
 <translation id="1930797645656624981">Dịch vụ cung cấp phương thức nhập trên Chrome OS</translation>
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc
index 2583a5f7..b45611a 100644
--- a/components/autofill/core/common/autofill_features.cc
+++ b/components/autofill/core/common/autofill_features.cc
@@ -48,7 +48,15 @@
 // Controls whether we download server credit cards to the ephemeral
 // account-based storage when sync the transport is enabled.
 const base::Feature kAutofillEnableAccountWalletStorage{
-    "AutofillEnableAccountWalletStorage", base::FEATURE_DISABLED_BY_DEFAULT};
+  "AutofillEnableAccountWalletStorage",
+#if defined(OS_CHROMEOS) || defined(OS_ANDROID) || defined(OS_IOS)
+      // Wallet transport is only currently available on Win/Mac/Linux.
+      // (Somehow, swapping this check makes iOS unhappy?)
+      base::FEATURE_DISABLED_BY_DEFAULT
+#else
+      base::FEATURE_ENABLED_BY_DEFAULT
+#endif
+};
 
 // Controls whether we use COMPANY as part of Autofill
 const base::Feature kAutofillEnableCompanyName{
diff --git a/components/browser_ui/widget/android/BUILD.gn b/components/browser_ui/widget/android/BUILD.gn
index 852f697..4c96ac5 100644
--- a/components/browser_ui/widget/android/BUILD.gn
+++ b/components/browser_ui/widget/android/BUILD.gn
@@ -198,6 +198,7 @@
     "java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditTextTest.java",
     "java/src/org/chromium/components/browser_ui/widget/WrappingLayoutTest.java",
     "java/src/org/chromium/components/browser_ui/widget/highlight/ViewHighlighterTest.java",
+    "java/src/org/chromium/components/browser_ui/widget/listmenu/ListMenuRenderTest.java",
     "java/src/org/chromium/components/browser_ui/widget/scrim/ScrimTest.java",
     "java/src/org/chromium/components/browser_ui/widget/text/ChromeTextInputLayoutRenderTest.java",
   ]
diff --git a/components/browser_ui/widget/android/java/res/layout/list_menu_item.xml b/components/browser_ui/widget/android/java/res/layout/list_menu_item.xml
index b299a01..67dd71b 100644
--- a/components/browser_ui/widget/android/java/res/layout/list_menu_item.xml
+++ b/components/browser_ui/widget/android/java/res/layout/list_menu_item.xml
@@ -28,4 +28,11 @@
         android:singleLine="false"
         android:textAppearance="@style/TextAppearance.ListMenuItem" />
 
+    <org.chromium.ui.widget.ChromeImageView
+        android:id="@+id/menu_item_end_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:visibility="gone"
+        app:tint="@color/default_icon_color_secondary" />
+
 </LinearLayout>
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/listmenu/ListMenuItemViewBinder.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/listmenu/ListMenuItemViewBinder.java
index fbe80c4..2706b34 100644
--- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/listmenu/ListMenuItemViewBinder.java
+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/listmenu/ListMenuItemViewBinder.java
@@ -6,7 +6,6 @@
 
 import android.graphics.drawable.Drawable;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.ImageView;
 import android.widget.TextView;
 
@@ -25,7 +24,8 @@
 public class ListMenuItemViewBinder {
     public static void binder(PropertyModel model, View view, PropertyKey propertyKey) {
         TextView textView = view.findViewById(R.id.menu_item_text);
-        ImageView imageView = view.findViewById(R.id.menu_item_icon);
+        ImageView startIcon = view.findViewById(R.id.menu_item_icon);
+        ImageView endIcon = view.findViewById(R.id.menu_item_end_icon);
         if (propertyKey == ListMenuItemProperties.TITLE_ID) {
             textView.setText(model.get(ListMenuItemProperties.TITLE_ID));
         } else if (propertyKey == ListMenuItemProperties.START_ICON_ID
@@ -33,28 +33,34 @@
             int id = model.get((ReadableIntPropertyKey) propertyKey);
             Drawable drawable =
                     id == 0 ? null : AppCompatResources.getDrawable(view.getContext(), id);
-            imageView.setImageDrawable(drawable);
             if (drawable != null) {
                 if (propertyKey == ListMenuItemProperties.START_ICON_ID) {
                     // need more space between the start and the icon if icon is on the start.
+                    startIcon.setImageDrawable(drawable);
                     textView.setPaddingRelative(
                             view.getResources().getDimensionPixelOffset(R.dimen.menu_padding_start),
                             textView.getPaddingTop(), textView.getPaddingEnd(),
                             textView.getPaddingBottom());
+                    startIcon.setVisibility(View.VISIBLE);
+                    endIcon.setVisibility(View.GONE);
                 } else {
                     // Move to the end.
-                    ViewGroup layout = (ViewGroup) view;
-                    layout.removeView(imageView);
-                    layout.addView(imageView);
+                    endIcon.setImageDrawable(drawable);
+                    startIcon.setVisibility(View.GONE);
+                    endIcon.setVisibility(View.VISIBLE);
                 }
             }
         } else if (propertyKey == ListMenuItemProperties.TINT_COLOR_ID) {
-            ApiCompatibilityUtils.setImageTintList(imageView,
+            ApiCompatibilityUtils.setImageTintList(startIcon,
+                    ContextCompat.getColorStateList(
+                            view.getContext(), model.get(ListMenuItemProperties.TINT_COLOR_ID)));
+            ApiCompatibilityUtils.setImageTintList(endIcon,
                     ContextCompat.getColorStateList(
                             view.getContext(), model.get(ListMenuItemProperties.TINT_COLOR_ID)));
         } else if (propertyKey == ListMenuItemProperties.ENABLED) {
             textView.setEnabled(model.get(ListMenuItemProperties.ENABLED));
-            imageView.setEnabled(model.get(ListMenuItemProperties.ENABLED));
+            startIcon.setEnabled(model.get(ListMenuItemProperties.ENABLED));
+            endIcon.setEnabled(model.get(ListMenuItemProperties.ENABLED));
         }
     }
 }
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/listmenu/ListMenuRenderTest.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/listmenu/ListMenuRenderTest.java
new file mode 100644
index 0000000..2580e453
--- /dev/null
+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/listmenu/ListMenuRenderTest.java
@@ -0,0 +1,96 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.browser_ui.widget.listmenu;
+
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+
+import android.app.Activity;
+import android.view.View;
+import android.widget.LinearLayout.LayoutParams;
+
+import androidx.test.filters.MediumTest;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.base.test.params.BaseJUnit4RunnerDelegate;
+import org.chromium.base.test.params.ParameterAnnotations;
+import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate;
+import org.chromium.base.test.params.ParameterSet;
+import org.chromium.base.test.params.ParameterizedRunner;
+import org.chromium.base.test.util.Feature;
+import org.chromium.components.browser_ui.widget.test.R;
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
+import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
+import org.chromium.ui.test.util.DummyUiActivityTestCase;
+import org.chromium.ui.test.util.NightModeTestUtils;
+import org.chromium.ui.test.util.RenderTestRule;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * Render tests for {@link BasicListMenu}.
+ */
+@RunWith(ParameterizedRunner.class)
+@UseRunnerDelegate(BaseJUnit4RunnerDelegate.class)
+public class ListMenuRenderTest extends DummyUiActivityTestCase {
+    @ParameterAnnotations.ClassParameter
+    private static List<ParameterSet> sClassParams =
+            new NightModeTestUtils.NightModeParams().getParameters();
+
+    @Rule
+    public RenderTestRule mRenderTestRule =
+            new RenderTestRule("chrome/test/data/android/render_tests");
+
+    private View mView;
+
+    public ListMenuRenderTest(boolean nightModeEnabled) {
+        NightModeTestUtils.setUpNightModeForDummyUiActivity(nightModeEnabled);
+        mRenderTestRule.setNightModeEnabled(nightModeEnabled);
+    }
+
+    @Override
+    public void setUpTest() throws Exception {
+        super.setUpTest();
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            Activity activity = getActivity();
+            ModelList data = new ModelList();
+            data.add(BasicListMenu.buildMenuListItem(
+                    R.string.test_primary_1, 0, R.drawable.ic_check_googblue_24dp));
+            data.add(BasicListMenu.buildMenuListItem(
+                    R.string.test_primary_1, 0, R.drawable.ic_check_googblue_24dp, false));
+            data.add(BasicListMenu.buildMenuListItemWithEndIcon(
+                    R.string.test_primary_1, 0, R.drawable.ic_check_googblue_24dp, true));
+            data.add(BasicListMenu.buildMenuListItemWithEndIcon(
+                    R.string.test_primary_1, 0, R.drawable.ic_check_googblue_24dp, false));
+            data.add(BasicListMenu.buildMenuListItem(R.string.test_primary_1, 0, 0));
+            data.add(BasicListMenu.buildMenuListItem(R.string.test_primary_1, 0, 0, false));
+            data.add(BasicListMenu.buildMenuDivider());
+
+            BasicListMenu listMenu = new BasicListMenu(activity, data, null);
+            mView = listMenu.getContentView();
+            mView.setBackground(ApiCompatibilityUtils.getDrawable(
+                    activity.getResources(), R.drawable.popup_bg_tinted));
+            int width = activity.getResources().getDimensionPixelSize(R.dimen.list_menu_width);
+            activity.setContentView(mView, new LayoutParams(width, WRAP_CONTENT));
+        });
+    }
+
+    @Override
+    public void tearDownTest() throws Exception {
+        NightModeTestUtils.tearDownNightModeForDummyUiActivity();
+        super.tearDownTest();
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"RenderTest"})
+    public void testRender_BasicListMenu() throws IOException {
+        mRenderTestRule.render(mView, "basic_list_menu");
+    }
+}
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc
index b3b529e..36a649b 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc
@@ -48,7 +48,14 @@
   if (origin_savings_estimate_json.empty())
     return base::nullopt;
 
-  return base::JSONReader::Read(origin_savings_estimate_json);
+  auto origin_savings_estimates =
+      base::JSONReader::Read(origin_savings_estimate_json);
+
+  UMA_HISTOGRAM_BOOLEAN(
+      "DataReductionProxy.ReportSaveDataSavings.ParseResult",
+      origin_savings_estimates && origin_savings_estimates->is_dict());
+
+  return origin_savings_estimates;
 }
 
 }  // namespace
diff --git a/components/dom_distiller/content/browser/distillability_driver.cc b/components/dom_distiller/content/browser/distillability_driver.cc
index 21ece70..99a9a1a 100644
--- a/components/dom_distiller/content/browser/distillability_driver.cc
+++ b/components/dom_distiller/content/browser/distillability_driver.cc
@@ -46,7 +46,7 @@
 };
 
 DistillabilityDriver::DistillabilityDriver(content::WebContents* web_contents)
-    : latest_result_(base::nullopt) {
+    : latest_result_(base::nullopt), web_contents_(web_contents) {
   if (!web_contents)
     return;
 }
@@ -60,8 +60,25 @@
       std::move(receiver));
 }
 
+void DistillabilityDriver::SetIsDangerousCallback(
+    base::RepeatingCallback<bool(content::WebContents*)> is_dangerous_check) {
+  is_dangerous_check_ = std::move(is_dangerous_check);
+}
+
 void DistillabilityDriver::OnDistillability(
     const DistillabilityResult& result) {
+  if (result.is_distillable) {
+    if (!is_dangerous_check_ || !is_dangerous_check_.Run(web_contents_)) {
+      DistillabilityResult not_distillable;
+      not_distillable.is_distillable = false;
+      not_distillable.is_last = result.is_last;
+      not_distillable.is_mobile_friendly = result.is_mobile_friendly;
+      latest_result_ = not_distillable;
+      for (auto& observer : observers_)
+        observer.OnResult(not_distillable);
+      return;
+    }
+  }
   latest_result_ = result;
   for (auto& observer : observers_)
     observer.OnResult(result);
diff --git a/components/dom_distiller/content/browser/distillability_driver.h b/components/dom_distiller/content/browser/distillability_driver.h
index f14eb90..d12f7fb 100644
--- a/components/dom_distiller/content/browser/distillability_driver.h
+++ b/components/dom_distiller/content/browser/distillability_driver.h
@@ -34,6 +34,12 @@
     return latest_result_;
   }
 
+  // Sets a callback which can be used to determine the security of a page,
+  // to decide whether it can be distilled. DANGEROUS pages are never
+  // distillable.
+  void SetIsDangerousCallback(
+      base::RepeatingCallback<bool(content::WebContents*)> is_dangerous_check);
+
   UMAHelper::DistillabilityDriverTimer& GetTimer() { return timer_; }
 
  private:
@@ -58,6 +64,9 @@
   // metrics for the ReaderMode experiment.
   UMAHelper::DistillabilityDriverTimer timer_;
 
+  content::WebContents* web_contents_;
+  base::RepeatingCallback<bool(content::WebContents*)> is_dangerous_check_;
+
   base::WeakPtrFactory<DistillabilityDriver> weak_factory_{this};
 
   WEB_CONTENTS_USER_DATA_KEY_DECL();
diff --git a/components/dom_distiller/core/css/distilledpage.css b/components/dom_distiller/core/css/distilledpage.css
index 5efa885..4870bff 100644
--- a/components/dom_distiller/core/css/distilledpage.css
+++ b/components/dom_distiller/core/css/distilledpage.css
@@ -173,7 +173,7 @@
 
 .light th,
 .light td {
-  border-left: 1px solid #AAA;
+  border-inline-start: 2px solid #AAA;
 }
 
 .sepia tbody tr:nth-child(odd) {
@@ -182,7 +182,7 @@
 
 .sepia th,
 .sepia td {
-  border-left: 1px solid rgb(147, 125, 102);
+  border-inline-start: 1px solid rgb(147, 125, 102);
 }
 
 .dark tbody tr:nth-child(odd) {
@@ -191,16 +191,16 @@
 
 .dark th,
 .dark td {
-  border-left: 1px solid #555;
+  border-inline-start: 1px solid #555;
 }
 
 /* #content-wrap is added to be more specific than the color theme rules */
 #content-wrap th:first-child {
-  border-left: none;
+  border-inline-start: none;
 }
 
 #content-wrap td:first-child {
-  border-left: none;
+  border-inline-start: none;
 }
 
 
@@ -295,8 +295,8 @@
 }
 
 blockquote {
-  border-left: 4px solid #888;
-  padding-left: 1em;
+  border-inline-start: 4px solid #888;
+  padding-inline-start: 1em;
 }
 
 cite {
@@ -350,7 +350,7 @@
 
 ol,
 ul {
-  margin-left: 1.296rem;
+  margin-inline-start: 1.296rem;
 }
 
 code,
@@ -388,8 +388,8 @@
 
 .youtubeIframe {
   height: 100%;
-  left: 0;
   position: absolute;
+  start: 0;
   top: 0;
   width: 100%;
 }
diff --git a/components/omnibox/browser/autocomplete_result.cc b/components/omnibox/browser/autocomplete_result.cc
index 6e9e396..bb29cce 100644
--- a/components/omnibox/browser/autocomplete_result.cc
+++ b/components/omnibox/browser/autocomplete_result.cc
@@ -736,11 +736,14 @@
   constexpr char kAsyncMatchChangeHistogramName[] =
       "Omnibox.MatchStability.AsyncMatchChange2";
 
+  bool any_match_changed = false;
+
   size_t min_size = std::min(old_result.size(), new_result.size());
   for (size_t i = 0; i < min_size; ++i) {
     if (old_result[i] != GetMatchComparisonFields(new_result.match_at(i))) {
       base::UmaHistogramExactLinear(kAsyncMatchChangeHistogramName, i,
                                     kMaxAutocompletePositionValue);
+      any_match_changed = true;
     }
   }
 
@@ -749,7 +752,12 @@
   for (size_t i = new_result.size(); i < old_result.size(); ++i) {
     base::UmaHistogramExactLinear(kAsyncMatchChangeHistogramName, i,
                                   kMaxAutocompletePositionValue);
+    any_match_changed = true;
   }
+
+  base::UmaHistogramBoolean(
+      "Omnibox.MatchStability.AsyncMatchChangedInAnyPosition",
+      any_match_changed);
 }
 
 // static
diff --git a/components/omnibox/browser/autocomplete_result_unittest.cc b/components/omnibox/browser/autocomplete_result_unittest.cc
index a195ce41..01494f5 100644
--- a/components/omnibox/browser/autocomplete_result_unittest.cc
+++ b/components/omnibox/browser/autocomplete_result_unittest.cc
@@ -928,6 +928,11 @@
       histograms.GetAllSamples("Omnibox.MatchStability.AsyncMatchChange2"),
       testing::ElementsAre(base::Bucket(0, 1), base::Bucket(2, 1),
                            base::Bucket(3, 1), base::Bucket(4, 1)));
+
+  // Expect that we log that at least one of the matches has changed.
+  EXPECT_THAT(histograms.GetAllSamples(
+                  "Omnibox.MatchStability.AsyncMatchChangedInAnyPosition"),
+              testing::ElementsAre(base::Bucket(1, 1)));
 }
 
 TEST_F(AutocompleteResultTest, DemoteOnDeviceSearchSuggestions) {
diff --git a/components/omnibox/browser/clipboard_provider.cc b/components/omnibox/browser/clipboard_provider.cc
index e612d960..8cab614 100644
--- a/components/omnibox/browser/clipboard_provider.cc
+++ b/components/omnibox/browser/clipboard_provider.cc
@@ -21,6 +21,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
+#include "build/build_config.h"
 #include "components/omnibox/browser/autocomplete_input.h"
 #include "components/omnibox/browser/autocomplete_match.h"
 #include "components/omnibox/browser/autocomplete_provider_client.h"
@@ -279,12 +280,6 @@
 
 base::Optional<AutocompleteMatch> ClipboardProvider::CreateTextMatch(
     const AutocompleteInput& input) {
-  // Only try text match if feature is enabled
-  if (!base::FeatureList::IsEnabled(
-          omnibox::kEnableClipboardProviderTextSuggestions)) {
-    return base::nullopt;
-  }
-
   base::Optional<base::string16> optional_text =
       clipboard_content_->GetRecentTextFromClipboard();
   if (!optional_text)
@@ -330,16 +325,6 @@
   match.keyword = default_url->keyword();
   match.transition = ui::PAGE_TRANSITION_GENERATED;
 
-  // Some users may be in a counterfactual study arm in which we perform all
-  // necessary work but do not forward the autocomplete matches.
-  bool in_counterfactual_group = base::GetFieldTrialParamByFeatureAsBool(
-      omnibox::kEnableClipboardProviderTextSuggestions,
-      "ClipboardProviderTextSuggestionsCounterfactualArm", false);
-  field_trial_triggered_ = true;
-  field_trial_triggered_in_session_ = true;
-  if (in_counterfactual_group)
-    return base::nullopt;
-
   return match;
 }
 
diff --git a/components/omnibox/browser/clipboard_provider_unittest.cc b/components/omnibox/browser/clipboard_provider_unittest.cc
index 9599e3e..76017690 100644
--- a/components/omnibox/browser/clipboard_provider_unittest.cc
+++ b/components/omnibox/browser/clipboard_provider_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
+#include "build/build_config.h"
 #include "components/omnibox/browser/autocomplete_input.h"
 #include "components/omnibox/browser/autocomplete_provider_listener.h"
 #include "components/omnibox/browser/mock_autocomplete_provider_client.h"
@@ -119,9 +120,6 @@
 }
 
 TEST_F(ClipboardProviderTest, MatchesText) {
-  base::test::ScopedFeatureList feature_list;
-  base::Feature textFeature = omnibox::kEnableClipboardProviderTextSuggestions;
-  feature_list.InitAndEnableFeature(textFeature);
   auto template_url_service = std::make_unique<TemplateURLService>(
       /*initializers=*/nullptr, /*count=*/0);
   client_->set_template_url_service(std::move(template_url_service));
@@ -154,9 +152,6 @@
 }
 
 TEST_F(ClipboardProviderTest, DeleteMatch) {
-  base::test::ScopedFeatureList feature_list;
-  base::Feature textFeature = omnibox::kEnableClipboardProviderTextSuggestions;
-  feature_list.InitAndEnableFeature(textFeature);
   auto template_url_service = std::make_unique<TemplateURLService>(
       /*initializers=*/nullptr, /*count=*/0);
   client_->set_template_url_service(std::move(template_url_service));
diff --git a/components/omnibox/browser/omnibox_pref_names.cc b/components/omnibox/browser/omnibox_pref_names.cc
index a29f2cb..9bc17f2 100644
--- a/components/omnibox/browser/omnibox_pref_names.cc
+++ b/components/omnibox/browser/omnibox_pref_names.cc
@@ -13,4 +13,7 @@
 // A cache of zero suggest results using JSON serialized into a string.
 const char kZeroSuggestCachedResults[] = "zerosuggest.cachedresults";
 
+// Boolean that specifies whether to always show full URLs in the omnibox.
+const char kPreventUrlElisionsInOmnibox[] = "omnibox.prevent_url_elisions";
+
 }  // namespace omnibox
diff --git a/components/omnibox/browser/omnibox_pref_names.h b/components/omnibox/browser/omnibox_pref_names.h
index 6a3ad7d..f8d3f7d 100644
--- a/components/omnibox/browser/omnibox_pref_names.h
+++ b/components/omnibox/browser/omnibox_pref_names.h
@@ -12,6 +12,7 @@
 
 extern const char kDocumentSuggestEnabled[];
 extern const char kZeroSuggestCachedResults[];
+extern const char kPreventUrlElisionsInOmnibox[];
 
 }  // namespace omnibox
 
diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc
index 777c5bd..cf69a1d 100644
--- a/components/omnibox/common/omnibox_features.cc
+++ b/components/omnibox/common/omnibox_features.cc
@@ -130,17 +130,6 @@
 const base::Feature kOmniboxSuggestionTransparencyOptions{
     "OmniboxSuggestionTransparencyOptions", base::FEATURE_DISABLED_BY_DEFAULT};
 
-// Feature to enable clipboard provider to suggest copied text.
-// TODO(gangwu): Remove this feature flag after full launched in Android.
-const base::Feature kEnableClipboardProviderTextSuggestions{
-  "OmniboxEnableClipboardProviderTextSuggestions",
-#if defined(OS_IOS) || defined(OS_ANDROID)
-      base::FEATURE_ENABLED_BY_DEFAULT
-#else
-      base::FEATURE_DISABLED_BY_DEFAULT
-#endif
-};
-
 // Feature to enable clipboard provider to suggest searching for copied images.
 const base::Feature kEnableClipboardProviderImageSuggestions{
   "OmniboxEnableClipboardProviderImageSuggestions",
diff --git a/components/omnibox/common/omnibox_features.h b/components/omnibox/common/omnibox_features.h
index 0a71511..a33ef8b 100644
--- a/components/omnibox/common/omnibox_features.h
+++ b/components/omnibox/common/omnibox_features.h
@@ -28,7 +28,6 @@
 extern const base::Feature kExperimentalKeywordMode;
 extern const base::Feature kOmniboxPedalSuggestions;
 extern const base::Feature kOmniboxSuggestionTransparencyOptions;
-extern const base::Feature kEnableClipboardProviderTextSuggestions;
 extern const base::Feature kEnableClipboardProviderImageSuggestions;
 extern const base::Feature kSearchProviderWarmUpOnFocus;
 extern const base::Feature kDisplayTitleForCurrentUrl;
diff --git a/components/page_load_metrics/browser/observers/core_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/core_page_load_metrics_observer.cc
index 7e537bc1..1f885fe 100644
--- a/components/page_load_metrics/browser/observers/core_page_load_metrics_observer.cc
+++ b/components/page_load_metrics/browser/observers/core_page_load_metrics_observer.cc
@@ -11,6 +11,7 @@
 
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/power_monitor/power_monitor.h"
 #include "components/page_load_metrics/browser/page_load_metrics_util.h"
 #include "content/public/common/process_type.h"
 #include "net/http/http_response_headers.h"
@@ -136,6 +137,11 @@
 const char kHistogramFirstContentfulPaintNoStore[] =
     "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.NoStore";
 
+const char kHistogramFirstContentfulPaintOnBattery[] =
+    "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.OnBattery";
+const char kHistogramFirstContentfulPaintNotOnBattery[] =
+    "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.NotOnBattery";
+
 const char kHistogramLoadTypeFirstContentfulPaintReload[] =
     "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType."
     "Reload";
@@ -408,6 +414,14 @@
                           timing.paint_timing->first_contentful_paint.value());
     }
 
+    if (base::PowerMonitor::IsOnBatteryPower()) {
+      PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstContentfulPaintOnBattery,
+                          timing.paint_timing->first_contentful_paint.value());
+    } else {
+      PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstContentfulPaintNotOnBattery,
+                          timing.paint_timing->first_contentful_paint.value());
+    }
+
     // TODO(bmcquade): consider adding a histogram that uses
     // UserInputInfo.user_input_event.
     if (GetDelegate().GetUserInitiatedInfo().browser_initiated ||
diff --git a/components/page_load_metrics/browser/observers/core_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/core_page_load_metrics_observer_unittest.cc
index b6b963e..0b269b71 100644
--- a/components/page_load_metrics/browser/observers/core_page_load_metrics_observer_unittest.cc
+++ b/components/page_load_metrics/browser/observers/core_page_load_metrics_observer_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/test/power_monitor_test_base.h"
 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
 #include "components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.h"
 #include "components/page_load_metrics/browser/page_load_metrics_util.h"
@@ -41,6 +42,14 @@
   void SetUp() override {
     page_load_metrics::PageLoadMetricsObserverContentTestHarness::SetUp();
     page_load_metrics::LargestContentfulPaintHandler::SetTestMode(true);
+
+    base::PowerMonitor::Initialize(
+        std::make_unique<base::PowerMonitorTestSource>());
+  }
+
+  void TearDown() override {
+    base::PowerMonitor::ShutdownForTesting();
+    page_load_metrics::PageLoadMetricsObserverContentTestHarness::TearDown();
   }
 
   void OnCpuTimingUpdate(RenderFrameHost* render_frame_host,
diff --git a/components/password_manager/core/browser/leak_detection/bulk_leak_check_impl.cc b/components/password_manager/core/browser/leak_detection/bulk_leak_check_impl.cc
index 196aa8b..7e724b6 100644
--- a/components/password_manager/core/browser/leak_detection/bulk_leak_check_impl.cc
+++ b/components/password_manager/core/browser/leak_detection/bulk_leak_check_impl.cc
@@ -139,6 +139,8 @@
   if (error.state() != GoogleServiceAuthError::NONE) {
     if (error.state() == GoogleServiceAuthError::CONNECTION_FAILED)
       delegate_->OnError(LeakDetectionError::kNetworkError);
+    else if (error.state() == GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)
+      delegate_->OnError(LeakDetectionError::kNotSignIn);
     else
       delegate_->OnError(LeakDetectionError::kTokenRequestFailure);
     // |this| can be destroyed here.
diff --git a/components/password_manager/core/browser/leak_detection/bulk_leak_check_impl_unittest.cc b/components/password_manager/core/browser/leak_detection/bulk_leak_check_impl_unittest.cc
index d919628..83f20fb 100644
--- a/components/password_manager/core/browser/leak_detection/bulk_leak_check_impl_unittest.cc
+++ b/components/password_manager/core/browser/leak_detection/bulk_leak_check_impl_unittest.cc
@@ -167,9 +167,7 @@
   credentials.push_back(TestCredential("user1"));
   bulk_check().CheckCredentials(std::move(credentials));
   identity_test_env().WaitForAccessTokenRequestIfNecessaryAndRespondWithError(
-      GoogleServiceAuthError::FromInvalidGaiaCredentialsReason(
-          GoogleServiceAuthError::InvalidGaiaCredentialsReason::
-              CREDENTIALS_REJECTED_BY_SERVER));
+      GoogleServiceAuthError::FromServiceError("error"));
 }
 
 TEST_F(BulkLeakCheckTest, CheckCredentialsAccessTokenNetError) {
@@ -186,6 +184,22 @@
       GoogleServiceAuthError::FromConnectionError(net::ERR_TIMED_OUT));
 }
 
+TEST_F(BulkLeakCheckTest, CheckCredentialsAccessTokenSignedOut) {
+  AccountInfo info = identity_test_env().MakeAccountAvailable(kTestEmail);
+  identity_test_env().SetCookieAccounts({{info.email, info.gaia}});
+  identity_test_env().SetRefreshTokenForAccount(info.account_id);
+
+  EXPECT_CALL(delegate(), OnError(LeakDetectionError::kNotSignIn));
+
+  std::vector<LeakCheckCredential> credentials;
+  credentials.push_back(TestCredential("user1"));
+  bulk_check().CheckCredentials(std::move(credentials));
+  identity_test_env().WaitForAccessTokenRequestIfNecessaryAndRespondWithError(
+      GoogleServiceAuthError::FromInvalidGaiaCredentialsReason(
+          GoogleServiceAuthError::InvalidGaiaCredentialsReason::
+              CREDENTIALS_REJECTED_BY_SERVER));
+}
+
 TEST_F(BulkLeakCheckTest, CheckCredentialsAccessDoesNetworkRequest) {
   AccountInfo info = identity_test_env().MakeAccountAvailable(kTestEmail);
   identity_test_env().SetCookieAccounts({{info.email, info.gaia}});
diff --git a/components/permissions/DEPS b/components/permissions/DEPS
index f4da47b..fcf23a4 100644
--- a/components/permissions/DEPS
+++ b/components/permissions/DEPS
@@ -11,7 +11,7 @@
   "+content/public/browser",
   "+content/public/common",
   "+content/public/test",
-  "+media/base/android",
+  "+media/base/android/media_drm_bridge.h",
   "+services/metrics/public/cpp",
   "+third_party/blink/public/mojom/feature_policy",
   "+ui/base",
diff --git a/components/permissions/permission_request_manager.cc b/components/permissions/permission_request_manager.cc
index 321dbdbd..0faea2a8 100644
--- a/components/permissions/permission_request_manager.cc
+++ b/components/permissions/permission_request_manager.cc
@@ -93,6 +93,12 @@
     return;
   }
 
+  if (!web_contents_supports_permission_requests_) {
+    request->Cancelled();
+    request->RequestFinished();
+    return;
+  }
+
   // TODO(tsergeant): change the UMA to no longer mention bubbles.
   base::RecordAction(base::UserMetricsAction("PermissionBubbleRequest"));
 
diff --git a/components/permissions/permission_request_manager.h b/components/permissions/permission_request_manager.h
index f1d9c1c9f..483c88dc 100644
--- a/components/permissions/permission_request_manager.h
+++ b/components/permissions/permission_request_manager.h
@@ -109,6 +109,12 @@
   void Deny() override;
   void Closing() override;
 
+  void set_web_contents_supports_permission_requests(
+      bool web_contents_supports_permission_requests) {
+    web_contents_supports_permission_requests_ =
+        web_contents_supports_permission_requests;
+  }
+
   // For testing only, used to override the default UI selector.
   void set_notification_permission_ui_selector_for_testing(
       std::unique_ptr<NotificationPermissionUiSelector> selector) {
@@ -233,6 +239,10 @@
   // should be ignored.
   bool deleting_bubble_ = false;
 
+  // Whether the web contents associated with this request manager supports
+  // permission prompts.
+  bool web_contents_supports_permission_requests_ = true;
+
   base::WeakPtrFactory<PermissionRequestManager> weak_factory_{this};
   WEB_CONTENTS_USER_DATA_KEY_DECL();
 };
diff --git a/components/permissions/permission_request_manager_unittest.cc b/components/permissions/permission_request_manager_unittest.cc
index 2ea6f2a..2c801087 100644
--- a/components/permissions/permission_request_manager_unittest.cc
+++ b/components/permissions/permission_request_manager_unittest.cc
@@ -566,4 +566,16 @@
   EXPECT_FALSE(manager_->ShouldCurrentRequestUseQuietUI());
   Accept();
 }
+
+TEST_F(PermissionRequestManagerTest, RequestsNotSupported) {
+  manager_->AddRequest(&request1_);
+  WaitForBubbleToBeShown();
+  Accept();
+  EXPECT_TRUE(request1_.granted());
+
+  manager_->set_web_contents_supports_permission_requests(false);
+
+  manager_->AddRequest(&request2_);
+  EXPECT_TRUE(request2_.cancelled());
+}
 }  // namespace permissions
diff --git a/components/search_provider_logos/google_logo_api.cc b/components/search_provider_logos/google_logo_api.cc
index 8edf2a9c..9c96f47 100644
--- a/components/search_provider_logos/google_logo_api.cc
+++ b/components/search_provider_logos/google_logo_api.cc
@@ -102,8 +102,9 @@
 }
 
 GURL AppendPreliminaryParamsToDoodleURL(bool gray_background,
+                                        bool for_webui_ntp,
                                         const GURL& logo_url) {
-  std::string api_params = "ntp:1";
+  std::string api_params = for_webui_ntp ? "ntp:2" : "ntp:1";
   if (gray_background) {
     api_params += ",graybg:1";
   }
diff --git a/components/search_provider_logos/google_logo_api.h b/components/search_provider_logos/google_logo_api.h
index c686b67..2688a41 100644
--- a/components/search_provider_logos/google_logo_api.h
+++ b/components/search_provider_logos/google_logo_api.h
@@ -29,6 +29,7 @@
 // will have to be processed again to add the fingerprint before making the
 // request to the server, see AppendFingerprintParamToDoodleURL().
 GURL AppendPreliminaryParamsToDoodleURL(bool gray_background,
+                                        bool for_webui_ntp,
                                         const GURL& logo_url);
 
 // Implements ParseLogoResponse, defined in logo_common.h, for Google or
diff --git a/components/search_provider_logos/google_logo_api_unittest.cc b/components/search_provider_logos/google_logo_api_unittest.cc
index ae38846..6331879 100644
--- a/components/search_provider_logos/google_logo_api_unittest.cc
+++ b/components/search_provider_logos/google_logo_api_unittest.cc
@@ -42,25 +42,27 @@
 TEST(GoogleNewLogoApiTest, AppendPreliminaryParamsParsing) {
   const std::string base_url = "http://foo.bar/";
   EXPECT_EQ(GURL("http://foo.bar/?async=ntp:1"),
-            AppendPreliminaryParamsToDoodleURL(false, GURL(base_url)));
+            AppendPreliminaryParamsToDoodleURL(false, false, GURL(base_url)));
   EXPECT_EQ(GURL("http://foo.bar/?test=param&async=ntp:1"),
-            AppendPreliminaryParamsToDoodleURL(false,
+            AppendPreliminaryParamsToDoodleURL(false, false,
                                                GURL(base_url + "?test=param")));
   EXPECT_EQ(GURL("http://foo.bar/?async=inside,ntp:1&test=param"),
             AppendPreliminaryParamsToDoodleURL(
-                false, GURL(base_url + "?async=inside&test=param")));
+                false, false, GURL(base_url + "?async=inside&test=param")));
   EXPECT_EQ(GURL("http://foo.bar/?async=inside,ntp:1&async=param"),
             AppendPreliminaryParamsToDoodleURL(
-                false, GURL(base_url + "?async=inside&async=param")));
+                false, false, GURL(base_url + "?async=inside&async=param")));
 }
 
 TEST(GoogleNewLogoApiTest, AppendPreliminaryParams) {
   const GURL logo_url("https://base.doo/target");
 
   EXPECT_EQ(GURL("https://base.doo/target?async=ntp:1"),
-            AppendPreliminaryParamsToDoodleURL(false, logo_url));
+            AppendPreliminaryParamsToDoodleURL(false, false, logo_url));
   EXPECT_EQ(GURL("https://base.doo/target?async=ntp:1,graybg:1"),
-            AppendPreliminaryParamsToDoodleURL(true, logo_url));
+            AppendPreliminaryParamsToDoodleURL(true, false, logo_url));
+  EXPECT_EQ(GURL("https://base.doo/target?async=ntp:2"),
+            AppendPreliminaryParamsToDoodleURL(false, true, logo_url));
 }
 
 TEST(GoogleNewLogoApiTest, AppendFingerprintParam) {
diff --git a/components/search_provider_logos/logo_service.h b/components/search_provider_logos/logo_service.h
index 540601f..6dd7396 100644
--- a/components/search_provider_logos/logo_service.h
+++ b/components/search_provider_logos/logo_service.h
@@ -29,8 +29,9 @@
   // 1.  Load a cached logo, and call callbacks.on_cached_{en,de}coded_logo.
   // 2.  Fetch a fresh logo, and call callbacks.on_fresh_{en,de}coded_logo.
   //
-  // At least one member of |callbacks| must be non-null.
-  virtual void GetLogo(LogoCallbacks callbacks) = 0;
+  // At least one member of |callbacks| must be non-null. If |for_webui_ntp| is
+  // true fetches a logo that is compatible with the WebUI NTP.
+  virtual void GetLogo(LogoCallbacks callbacks, bool for_webui_ntp) = 0;
 
   // Gets the logo for the default search provider and notifies |observer|
   // 0-2 times with the results. The service will:
diff --git a/components/search_provider_logos/logo_service_impl.cc b/components/search_provider_logos/logo_service_impl.cc
index 75c7aba..0922f622 100644
--- a/components/search_provider_logos/logo_service_impl.cc
+++ b/components/search_provider_logos/logo_service_impl.cc
@@ -216,10 +216,10 @@
       base::BindOnce(ObserverOnLogoAvailable, observer, true);
   callbacks.on_fresh_decoded_logo_available =
       base::BindOnce(ObserverOnLogoAvailable, observer, false);
-  GetLogo(std::move(callbacks));
+  GetLogo(std::move(callbacks), false);
 }
 
-void LogoServiceImpl::GetLogo(LogoCallbacks callbacks) {
+void LogoServiceImpl::GetLogo(LogoCallbacks callbacks, bool for_webui_ntp) {
   if (!template_url_service_) {
     RunCallbacksWithDisabled(std::move(callbacks));
     return;
@@ -285,7 +285,7 @@
     // We encode the type of doodle (regular or gray) in the URL so that the
     // logo cache gets cleared when that value changes.
     GURL prefilled_url = AppendPreliminaryParamsToDoodleURL(
-        want_gray_logo_getter_.Run(), doodle_url);
+        want_gray_logo_getter_.Run(), for_webui_ntp, doodle_url);
     SetServerAPI(
         prefilled_url,
         base::BindRepeating(&search_provider_logos::ParseDoodleLogoResponse,
diff --git a/components/search_provider_logos/logo_service_impl.h b/components/search_provider_logos/logo_service_impl.h
index 4d26bf2..9555920a 100644
--- a/components/search_provider_logos/logo_service_impl.h
+++ b/components/search_provider_logos/logo_service_impl.h
@@ -78,7 +78,7 @@
   // At least one callback must be non-null. All non-null callbacks will be
   // invoked exactly once.
   void GetLogo(LogoObserver* observer) override;
-  void GetLogo(LogoCallbacks callbacks) override;
+  void GetLogo(LogoCallbacks callbacks, bool for_webui_ntp) override;
 
   // Overrides the cache used to store logos.
   void SetLogoCacheForTests(std::unique_ptr<LogoCache> cache);
diff --git a/components/search_provider_logos/logo_service_impl_unittest.cc b/components/search_provider_logos/logo_service_impl_unittest.cc
index 8dcedee..0619fd1 100644
--- a/components/search_provider_logos/logo_service_impl_unittest.cc
+++ b/components/search_provider_logos/logo_service_impl_unittest.cc
@@ -135,7 +135,7 @@
       response_time + base::TimeDelta::FromHours(19);
   logo.metadata.fingerprint = "8bc33a80";
   logo.metadata.source_url =
-      AppendPreliminaryParamsToDoodleURL(false, logo_url);
+      AppendPreliminaryParamsToDoodleURL(false, false, logo_url);
   logo.metadata.on_click_url = GURL("https://www.google.com/search?q=potato");
   logo.metadata.alt_text = "A logo about potatoes";
   logo.metadata.animated_url = GURL("https://www.google.com/logos/doodle.png");
@@ -155,7 +155,7 @@
       response_time + base::TimeDelta::FromHours(19);
   logo.metadata.fingerprint = "8bc33a80";
   logo.metadata.source_url =
-      AppendPreliminaryParamsToDoodleURL(false, logo_url);
+      AppendPreliminaryParamsToDoodleURL(false, false, logo_url);
   logo.metadata.on_click_url = GURL("https://www.google.com/search?q=potato");
   logo.metadata.alt_text = "A logo about potatoes";
   logo.metadata.animated_url = GURL("https://www.google.com/logos/doodle.png");
@@ -170,7 +170,7 @@
   logo.metadata.expiration_time = base::Time();
   logo.metadata.fingerprint = "71082741021409127";
   logo.metadata.source_url =
-      AppendPreliminaryParamsToDoodleURL(false, logo_url);
+      AppendPreliminaryParamsToDoodleURL(false, false, logo_url);
   logo.metadata.on_click_url = GURL("https://example.com/page25");
   logo.metadata.alt_text = "The logo for example.com";
   logo.metadata.mime_type = "image/jpeg";
@@ -459,7 +459,8 @@
     int error_code,
     net::HttpStatusCode response_code) {
   GURL url_with_fp = AppendFingerprintParamToDoodleURL(
-      AppendPreliminaryParamsToDoodleURL(false, DoodleURL()), fingerprint);
+      AppendPreliminaryParamsToDoodleURL(false, false, DoodleURL()),
+      fingerprint);
 
   auto head = network::mojom::URLResponseHead::New();
   std::string headers(base::StringPrintf(
@@ -481,7 +482,7 @@
 }
 
 void LogoServiceImplTest::GetLogo(LogoCallbacks callbacks) {
-  logo_service_->GetLogo(std::move(callbacks));
+  logo_service_->GetLogo(std::move(callbacks), /*for_webui_ntp=*/false);
   task_environment_.RunUntilIdle();
 }
 
@@ -525,9 +526,11 @@
   std::string response =
       ServerResponse(GetSampleLogo(DoodleURL(), test_clock_.Now()));
   GURL query_with_gray_background = AppendFingerprintParamToDoodleURL(
-      AppendPreliminaryParamsToDoodleURL(true, DoodleURL()), std::string());
+      AppendPreliminaryParamsToDoodleURL(true, false, DoodleURL()),
+      std::string());
   GURL query_without_gray_background = AppendFingerprintParamToDoodleURL(
-      AppendPreliminaryParamsToDoodleURL(false, DoodleURL()), std::string());
+      AppendPreliminaryParamsToDoodleURL(false, false, DoodleURL()),
+      std::string());
 
   use_gray_background_ = false;
   test_url_loader_factory_.ClearResponses();
@@ -538,7 +541,7 @@
     EXPECT_CALL(fresh, Run(_, _));
     LogoCallbacks callbacks;
     callbacks.on_fresh_decoded_logo_available = fresh.Get();
-    logo_service_->GetLogo(std::move(callbacks));
+    logo_service_->GetLogo(std::move(callbacks), /*for_webui_ntp=*/false);
     task_environment_.RunUntilIdle();
   }
   EXPECT_EQ(latest_url_.query().find("graybg:1"), std::string::npos);
@@ -552,7 +555,7 @@
     EXPECT_CALL(fresh, Run(_, _));
     LogoCallbacks callbacks;
     callbacks.on_fresh_decoded_logo_available = fresh.Get();
-    logo_service_->GetLogo(std::move(callbacks));
+    logo_service_->GetLogo(std::move(callbacks), /*for_webui_ntp=*/false);
     task_environment_.RunUntilIdle();
   }
   EXPECT_NE(latest_url_.query().find("graybg:1"), std::string::npos);
@@ -662,7 +665,7 @@
   Logo logo;
   logo.image = MakeBitmap(1, 2);
   logo.metadata.source_url =
-      AppendPreliminaryParamsToDoodleURL(false, DoodleURL());
+      AppendPreliminaryParamsToDoodleURL(false, false, DoodleURL());
   logo.metadata.can_show_after_expiration = true;
   logo.metadata.mime_type = "image/png";
 
@@ -993,7 +996,7 @@
       std::move((*cached_callbacks)[start_index]);
   callbacks.on_fresh_decoded_logo_available =
       std::move((*fresh_callbacks)[start_index]);
-  logo_service->GetLogo(std::move(callbacks));
+  logo_service->GetLogo(std::move(callbacks), /*for_webui_ntp=*/false);
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
       base::BindOnce(&EnqueueCallbacks, logo_service, cached_callbacks,
@@ -1043,7 +1046,7 @@
   LogoCallbacks first_callbacks;
   first_callbacks.on_cached_decoded_logo_available = first_cached.Get();
   first_callbacks.on_fresh_decoded_logo_available = first_fresh.Get();
-  logo_service_->GetLogo(std::move(first_callbacks));
+  logo_service_->GetLogo(std::move(first_callbacks), /*for_webui_ntp=*/false);
 
   // Change default search engine; new DSE has a doodle URL.
   AddSearchEngine("cr", "Chromium", "https://www.chromium.org/?q={searchTerms}",
@@ -1061,7 +1064,7 @@
   LogoCallbacks second_callbacks;
   second_callbacks.on_cached_decoded_logo_available = second_cached.Get();
   second_callbacks.on_fresh_decoded_logo_available = second_fresh.Get();
-  logo_service_->GetLogo(std::move(second_callbacks));
+  logo_service_->GetLogo(std::move(second_callbacks), /*for_webui_ntp=*/false);
 
   task_environment_.RunUntilIdle();
 }
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index d484dca..7c2f095 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Enigiets wat jy tik, enige bladsye wat jy bekyk of enige ander aktiwiteit op die web word dopgehou. Inhoud op werwe kan sonder jou wete verander word.</translation>
 <translation id="2289385804009217824">Knip</translation>
 <translation id="2292556288342944218">Jou internettoegang is geblokkeer</translation>
+<translation id="2293443924986248631">Wanneer dit aan is, kan werwe nie webkoekies gebruik wat jou oral op die web naspoor nie. Kenmerke op sommige werwe kan breek.</translation>
 <translation id="2297722699537546652">B5 (Envelope)</translation>
 <translation id="2300306941146563769">Nie opgelaai nie</translation>
 <translation id="2310021320168182093">Chou2 (Envelope)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Bladsy 1}other{Bladsy {COUNT}}}</translation>
 <translation id="4154664944169082762">Vingerafdrukke</translation>
 <translation id="4159784952369912983">Pers</translation>
+<translation id="4163132590327127354">Chrome het hierdie bladsy vereenvoudig om dit makliker te maak om te lees.</translation>
 <translation id="4165986682804962316">Werfinstellings</translation>
 <translation id="4171400957073367226">Swak verifiëringhandtekening</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,11 @@
 <translation id="536296301121032821">Kon nie beleidinstellings stoor nie</translation>
 <translation id="5371425731340848620">Dateer kaart op</translation>
 <translation id="5377026284221673050">"Jou horlosie is agter" of "Jou horlosie is voor" of "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">Die bediener waarheen jy nou gaan, <ph name="ORIGIN" />, het 'n opskrif gestel
+    wat vereis dat 'n oorsprongbeleid op alle versoeke daaraan toegepas word. Maar
+    die opskrif is misvormd, wat die blaaier verhoed om jou versoek
+    vir <ph name="SITE" /> uit te voer. Werfoperateurs kan oorsprongbeleide gebruik om
+    sekuriteit- en ander eienskappe vir 'n werf op te stel.</translation>
 <translation id="5386426401304769735">Die sertifikaatketting vir hierdie werf bevat 'n sertifikaat wat met gebruik van SHA-1 onderteken is.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Randhegting regs</translation>
@@ -1575,6 +1582,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Brandmuur- of teenvirussagteware het dalk die verbinding geblokkeer.</translation>
 <translation id="7759163816903619567">Vertoondomein:</translation>
+<translation id="776110834126722255">Afgekeur</translation>
 <translation id="7761701407923456692">Bediener se sertifikaat stem nie met die URL ooreen nie.</translation>
 <translation id="7763386264682878361">Betalingmanifesontleder</translation>
 <translation id="7764225426217299476">Voeg adres by</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index a6ea6a6..607e216 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">ማናቸውም እርስዎ የሚተይቡት፣ የሚመለከቱት ማናቸውም ገጽ፣ ወይም ማናቸውም በድር ላይ ያለ ሌላ እንቅስቃሴ እየታየ ነው። በጣቢያዎች ላይ ያለ ይዘት እርስዎ ሳያውቁት ሊለወጥ ይችላል።</translation>
 <translation id="2289385804009217824">ከርክም</translation>
 <translation id="2292556288342944218">የእርስዎ የበየነመረብ መዳረሻ ታግዷል</translation>
+<translation id="2293443924986248631">ሲበራ ጣቢያዎች እርስዎን በመላው ድር ላይ የሚከታተሉ ኩኪዎችን መጠቀም አይችሉም። በአንዳንድ ጣቢያዎች ላይ ያሉ ባህሪያት ሊሰበሩ ይችላሉ።</translation>
 <translation id="2297722699537546652">B5 (የደብዳቤ ፖስታ)</translation>
 <translation id="2300306941146563769">አልተሰቀለም</translation>
 <translation id="2310021320168182093">Chou2 (የደብዳቤ ፖስታ)</translation>
@@ -724,6 +725,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{ገጽ 1}one{ገጽ {COUNT}}other{ገጽ {COUNT}}}</translation>
 <translation id="4154664944169082762">የጣት አሻራዎች</translation>
 <translation id="4159784952369912983">ሐምራዊ</translation>
+<translation id="4163132590327127354">Chrome ለማንበብ እንዲቀልል ይህን ገጽ አቃልሎታል።</translation>
 <translation id="4165986682804962316">የጣቢያ ቅንብሮች</translation>
 <translation id="4171400957073367226">መጥፎ የማረጋገጫ ፊርማ</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1024,6 +1026,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="5380442954567233718">እየሄዱበት ያለው አገልጋይ <ph name="ORIGIN" /> ወደ እሱ በሚደረጉ ሁሉም ጥያቄዎች ላይ የምንጭ መመሪያ እንዲተገብር የሚፈልግ ራስጌ አቀናብሯል። ነገር ግን ራስጌው የተበላሸ ነው፣ ይህ አሳሹ <ph name="SITE" /> ጥያቄዎን እንዳያሟላ ይከለክለዋል። የምንጭ መመሪያዎች በጣቢያ ሥርዓት ከዋኞች የደኅንነት እና ሌላ ባሕሪያትን ለጣቢያው ለማዋቀር ጥቅም ላይ ሊውል ይችላል።</translation>
 <translation id="5386426401304769735">የዚህ ጣቢያ የዕውቅና ማረጋገጫ ሰንሰለቱ SHA-1 በመጠቀም የተፈረመ የዕውቅና ማረጋገጫን ያካትታል።</translation>
 <translation id="538659543871111977">A4-ትር</translation>
 <translation id="5396631636586785122">ቀኝ ጫፍን ስፋ</translation>
@@ -1570,6 +1573,7 @@
 <translation id="7757555340166475417">ዳይ ፓ ካይ</translation>
 <translation id="7758069387465995638">የኬላ ወይም የፀረ-ቫይረስ ሶፍትዌር ግንኙነቱን አግዶት ሊሆን ይችላል።</translation>
 <translation id="7759163816903619567">የማሳያ ጎራ፦</translation>
+<translation id="776110834126722255">ተቋርጧል</translation>
 <translation id="7761701407923456692">የአገልጋይ እውቅና ማረጋገጫ ከዩ አር ኤሉ ጋር አይዛመድም።</translation>
 <translation id="7763386264682878361">የክፍያ ዝርዝር ሰነድ ተንታኝ</translation>
 <translation id="7764225426217299476">አድራሻ አክል</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index b89f49b..ff8b3672 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Всичко, което въвеждате, всички страници, които преглеждате, и всяка друга активност в мрежата са под наблюдение. Съдържанието на сайтовете може да бъде променяно без ваше знание.</translation>
 <translation id="2289385804009217824">Отрязване</translation>
 <translation id="2292556288342944218">Достъпът ви до интернет е блокиран</translation>
+<translation id="2293443924986248631">Когато тази функция е включена, сайтовете не могат да използват „бисквитки“, които проследяват активността ви в мрежата. Функциите в някои сайтове може да не работят правилно.</translation>
 <translation id="2297722699537546652">B5 (плик)</translation>
 <translation id="2300306941146563769">Не е качено</translation>
 <translation id="2310021320168182093">Chou2 (плик)</translation>
@@ -727,6 +728,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Страница 1}other{Страница {COUNT}}}</translation>
 <translation id="4154664944169082762">Пръстови отпечатъци</translation>
 <translation id="4159784952369912983">лилаво</translation>
+<translation id="4163132590327127354">Chrome опрости тази страница, за да улесни четенето ѝ.</translation>
 <translation id="4165986682804962316">Настройки за сайта</translation>
 <translation id="4171400957073367226">Невалиден подпис за потвърждаване</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1027,6 +1029,9 @@
 <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="5380442954567233718">Сървърът, който посещавате (<ph name="ORIGIN" />), има зададена заглавка,
+     изискваща за всички заявки към него да се прилага правило за източник. Тя обаче е неправилно образувана, поради което браузърът не може да изпълни заявката ви за <ph name="SITE" />. Операторите на сайтове могат да използват правилата за източник,
+за да конфигурират сигурността и други свойства за даден сайт.</translation>
 <translation id="5386426401304769735">Веригата от сертификати за този сайт съдържа сертификат, подписан с SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Зашиване на десния ръб</translation>
@@ -1573,6 +1578,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Възможно е връзката да е блокирана от защитна стена или антивирусен софтуер.</translation>
 <translation id="7759163816903619567">Показван домейн:</translation>
+<translation id="776110834126722255">Оттеглено</translation>
 <translation id="7761701407923456692">Сертификатът на сървъра не съответства на URL адреса.</translation>
 <translation id="7763386264682878361">Инструмент за синтактичен анализ на манифести за плащания</translation>
 <translation id="7764225426217299476">Добавяне на адрес</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index 40477a2..30ac6406 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Sve što napišete, svaka stranica koju pregledate ili bilo koja druga aktivnost na webu se nadzire. Sadržaj na web lokacijama se može promijeniti bez vašeg znanja.</translation>
 <translation id="2289385804009217824">Skrati</translation>
 <translation id="2292556288342944218">Vaš pristup internetu je blokiran</translation>
+<translation id="2293443924986248631">Kada je ovo uključeno, web lokacije ne mogu koristiti kolačiće koji vas prate na internetu. Moguće je da će funkcije na nekim web lokacijama prestati s radom.</translation>
 <translation id="2297722699537546652">B5 (koverta)</translation>
 <translation id="2300306941146563769">Nije otpremljeno</translation>
 <translation id="2310021320168182093">Chou2 (koverta)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{1. stranica}one{{COUNT}. stranica}few{{COUNT}. stranica}other{{COUNT}. stranica}}</translation>
 <translation id="4154664944169082762">Otisci prstiju</translation>
 <translation id="4159784952369912983">Ljubičasta</translation>
+<translation id="4163132590327127354">Chrome je pojednostavio ovu stranicu za lakše čitanje.</translation>
 <translation id="4165986682804962316">Postavke web-lokacije</translation>
 <translation id="4171400957073367226">Nevažeći potpis za potvrdu</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,11 @@
 <translation id="536296301121032821">Pohranjivanje postavki pravila nije uspjelo</translation>
 <translation id="5371425731340848620">Ažuriraj karticu</translation>
 <translation id="5377026284221673050">"Sat kasni" ili "Sat brza" ili "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">Server na koji idete, <ph name="ORIGIN" />, ima zaglavlje
+    koje traži da izvorno pravilo bude primijenjeno na sve zahtjeve upućene njemu. Ali,
+    zaglavlje je neispravno, što sprečava da preglednik ispuni
+    vaš zahtjev za web lokaciju <ph name="SITE" />. Operateri web lokacija mogu koristiti izvorna pravila
+    za konfiguriranje sigurnosti i drugih osobina web lokacije.</translation>
 <translation id="5386426401304769735">Lanac potvrda za ovu web lokaciju sadrži potvrdu koja je izdata koristeći SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Uvez desnog ruba</translation>
@@ -1575,6 +1582,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Zaštitni zid ili antivirus je možda blokirao vezu.</translation>
 <translation id="7759163816903619567">Prikaži domenu:</translation>
+<translation id="776110834126722255">Obustavljeno</translation>
 <translation id="7761701407923456692">Potvrda servera se ne podudara s URL-om.</translation>
 <translation id="7763386264682878361">Raščlanjivač deklaracije o plaćanju</translation>
 <translation id="7764225426217299476">Dodaj adresu</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index 9563e742..5567374 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Tot el que escrius, les pàgines que veus i qualsevol altra activitat que fas al web se supervisa. És possible que el contingut dels llocs web canviï sense que ho sàpigues.</translation>
 <translation id="2289385804009217824">Retallat</translation>
 <translation id="2292556288342944218">El vostre accés a Internet està bloquejat</translation>
+<translation id="2293443924986248631">Quan està activada, els llocs web no poden utilitzar galetes que facin un seguiment de la teva activitat al web. Pot ser que les funcions d'alguns llocs web no funcionin.</translation>
 <translation id="2297722699537546652">B5 (sobre)</translation>
 <translation id="2300306941146563769">No penjat</translation>
 <translation id="2310021320168182093">Chou2 (sobre)</translation>
@@ -723,6 +724,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Pàgina 1}other{Pàgina {COUNT}}}</translation>
 <translation id="4154664944169082762">Empremtes</translation>
 <translation id="4159784952369912983">Porpra</translation>
+<translation id="4163132590327127354">Chrome ha simplificat aquesta pàgina perquè sigui més fàcil de llegir.</translation>
 <translation id="4165986682804962316">Configuració del lloc web</translation>
 <translation id="4171400957073367226">La signatura de verificació és incorrecta</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1022,6 +1024,7 @@
 <translation id="536296301121032821">No s'ha pogut emmagatzemar la configuració de la política</translation>
 <translation id="5371425731340848620">Actualitza la targeta</translation>
 <translation id="5377026284221673050">"El rellotge està endarrerit", "El rellotge està avançat" o "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">El servidor de destinació, <ph name="ORIGIN" />, ha establert una capçalera en què se sol·licita que s'apliqui una política d'origen a totes les sol·licituds que rebi. Tanmateix, com que la capçalera no està ben formada, el navegador no pot completar la sol·licitud que has fet per a <ph name="SITE" />. Els operadors de llocs web poden fer servir les polítiques d'origen per configurar la seguretat i altres propietats d'un lloc web.</translation>
 <translation id="5386426401304769735">La cadena de certificats d'aquest lloc conté un certificat que s'ha signat amb SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Cosit de la vora a la dreta</translation>
@@ -1568,6 +1571,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">És possible que l'antivirus o el tallafoc hagi bloquejat la connexió.</translation>
 <translation id="7759163816903619567">Domini de publicació:</translation>
+<translation id="776110834126722255">Obsoleta</translation>
 <translation id="7761701407923456692">El certificat del servidor no coincideix amb l'URL.</translation>
 <translation id="7763386264682878361">Analitzador de fitxers de manifest de pagament</translation>
 <translation id="7764225426217299476">Afegeix una adreça</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 1c016c9..793072a 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Alt det, du skriver, alle de sider, du besøger, og alle dine andre aktiviteter på nettet overvåges. Indholdet på websites kan blive ændret uden din viden.</translation>
 <translation id="2289385804009217824">Beskær</translation>
 <translation id="2292556288342944218">Din internetadgang er blokeret</translation>
+<translation id="2293443924986248631">Når denne indstilling er aktiveret, kan websites ikke anvende cookies, der sporer din aktivitet på nettet. Funktioner på visse websites virker muligvis ikke.</translation>
 <translation id="2297722699537546652">B5 (Envelope)</translation>
 <translation id="2300306941146563769">Ikke uploadet</translation>
 <translation id="2310021320168182093">Chou2 (Envelope)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Side 1}one{Side {COUNT}}other{Side {COUNT}}}</translation>
 <translation id="4154664944169082762">Fingeraftryk</translation>
 <translation id="4159784952369912983">Lilla</translation>
+<translation id="4163132590327127354">Chrome har forenklet denne side for at gøre den nemmere at læse.</translation>
 <translation id="4165986682804962316">Indstillinger for websites</translation>
 <translation id="4171400957073367226">Ugyldig verifikationssignatur</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,11 @@
 <translation id="536296301121032821">Der kunne ikke gemmes indstillinger for politik</translation>
 <translation id="5371425731340848620">Opdater kortet</translation>
 <translation id="5377026284221673050">"Dit ur er bagud" eller "Dit ur er forud" eller "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">Den server, du er på vej til, <ph name="ORIGIN" />, har angivet en header,
+     som kræver, at en politik for oprindelse anvendes ved alle anmodninger, der sendes til den. Der er dog
+    en fejl i headeren, som forhindrer browseren i at opfylde
+    din anmodning til <ph name="SITE" />. Politikker for oprindelse kan anvendes af
+    websiteoperatorer til at konfigurere sikkerhed og andre egenskaber for et website.</translation>
 <translation id="5386426401304769735">Certifikatkæden for dette website indeholder et certifikat, der er signeret med SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Kanthæftning i højre side</translation>
@@ -1575,6 +1582,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Firewall- eller antivirussoftware kan have blokeret forbindelsen.</translation>
 <translation id="7759163816903619567">Vist domæne:</translation>
+<translation id="776110834126722255">Udfaset</translation>
 <translation id="7761701407923456692">Serverens certifikat passer ikke til webadressen.</translation>
 <translation id="7763386264682878361">Værktøj til parsing af betalingsmanifester</translation>
 <translation id="7764225426217299476">Tilføj adresse</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 9f9109c..154a96a 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Οτιδήποτε πληκτρολογείτε, τυχόν σελίδες που βλέπετε ή οποιαδήποτε άλλη δραστηριότητα στον ιστό παρακολουθείται. Το περιεχόμενο σε ιστοτόπους μπορεί να αλλάξει χωρίς να το γνωρίζετε.</translation>
 <translation id="2289385804009217824">Περικοπή</translation>
 <translation id="2292556288342944218">Η πρόσβασή σας στο διαδίκτυο είναι αποκλεισμένη</translation>
+<translation id="2293443924986248631">Όταν είναι ενεργοποιημένο, οι ιστότοποι δεν μπορούν να χρησιμοποιήσουν cookie που σας παρακολουθούν στον ιστό. Μπορεί να παρουσιαστούν προβλήματα με τη λειτουργία ορισμένων ιστοτόπων.</translation>
 <translation id="2297722699537546652">B5 (Φάκελος)</translation>
 <translation id="2300306941146563769">Δεν έγινε μεταφόρτωση</translation>
 <translation id="2310021320168182093">Chou2 (Φάκελος)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Σελίδα 1}other{Σελίδα {COUNT}}}</translation>
 <translation id="4154664944169082762">Αποτυπώματα</translation>
 <translation id="4159784952369912983">Μοβ</translation>
+<translation id="4163132590327127354">Το Chrome απλοποίησε αυτήν τη σελίδα για να διευκολύνει την ανάγνωσή της.</translation>
 <translation id="4165986682804962316">Ρυθμίσεις ιστότοπου</translation>
 <translation id="4171400957073367226">Εσφαλμένη υπογραφή επαλήθευσης</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1030,6 +1032,11 @@
 <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="5380442954567233718">Ο διακομιστής στον οποίο μεταβαίνετε, <ph name="ORIGIN" />, έχει ορίσει μια κεφαλίδα
+    που απαιτεί την εφαρμογή μιας πολιτικής προέλευσης σε όλα τα αιτήματα που δέχεται. Ωστόσο,
+    η κεφαλίδα είναι εσφαλμένη, κάτι που αποτρέπει την εκπλήρωση του αιτήματός σας
+    για τον ιστότοπο <ph name="SITE" /> από το πρόγραμμα περιήγησης. Οι πολιτικές προέλευσης μπορούν να χρησιμοποιηθούν από
+    χειριστές ιστοτόπων για τη διαμόρφωση της ασφάλειας και άλλων ιδιοτήτων ενός ιστοτόπου.</translation>
 <translation id="5386426401304769735">Η αλυσίδα πιστοποιητικού για αυτόν τον ιστότοπο περιέχει ένα πιστοποιητικό το οποίο είναι υπογεγραμμένο με χρήση SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Ραφή στο δεξί άκρο</translation>
@@ -1576,6 +1583,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Το τείχος προστασίας ή το λογισμικό προστασίας από ιούς ενδέχεται να έχει αποκλείσει τη σύνδεση.</translation>
 <translation id="7759163816903619567">Τομέας προβολής:</translation>
+<translation id="776110834126722255">Καταργήθηκε</translation>
 <translation id="7761701407923456692">Το πιστοποιητικό του διακομιστή δεν συμφωνεί με τη διεύθυνση URL.</translation>
 <translation id="7763386264682878361">Συντακτικός αναλυτής διακήρυξης πληρωμών</translation>
 <translation id="7764225426217299476">Προσθήκη διεύθυνσης</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 7d64e43..93ac995 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Kõike, mida sisestate, mis tahes lehti, mida vaatate, või mis tahes muid veebitoiminguid jälgitakse. Saitide sisu võidakse teie teadmata muuta.</translation>
 <translation id="2289385804009217824">Kärbi</translation>
 <translation id="2292556288342944218">Teie juurdepääs Internetile on blokeeritud</translation>
+<translation id="2293443924986248631">Kui see on sisse lülitatud, ei saa saidid kasutada küpsisefaile, mis jälgivad teid kogu veebis. Mõne saidi funktsioonid ei pruugi töötada.</translation>
 <translation id="2297722699537546652">B5 (ümbrik)</translation>
 <translation id="2300306941146563769">Üles laadimata</translation>
 <translation id="2310021320168182093">Chou2 (ümbrik)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Leht 1}other{Leht {COUNT}}}</translation>
 <translation id="4154664944169082762">Sõrmejäljed</translation>
 <translation id="4159784952369912983">Lilla</translation>
+<translation id="4163132590327127354">Chrome lihtsustas seda lehte, et seda oleks lihtsam lugeda.</translation>
 <translation id="4165986682804962316">Saidi seaded</translation>
 <translation id="4171400957073367226">Sobimatu kinnitusallkiri</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,10 @@
 <translation id="536296301121032821">Reegli seadete talletamine ebaõnnestus</translation>
 <translation id="5371425731340848620">Värskendage kaarti</translation>
 <translation id="5377026284221673050">„Teie kell on ajast maas” või „Teie kell on ajast ees” või „&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;”</translation>
+<translation id="5380442954567233718">Server <ph name="ORIGIN" />, kuhu sisenete, on määranud päise,
+    mis nõuab lähtekohareegli rakendamist kõigi sellele saadetud taotluste puhul. Päis on aga valesti moodustatud ja see ei lase brauseril teie
+    saidile <ph name="SITE" /> esitatud taotlust täita. Saidioperaatorid saavad kasutada
+    lähtekohareegleid saidi turbe ja muude atribuutide seadistamiseks.</translation>
 <translation id="5386426401304769735">Selle saidi sertifikaadiahel sisaldab sertifikaati, mis on allkirjastatud SHA-1-ga.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Õmblus paremas servas</translation>
@@ -1575,6 +1581,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Tulemüür või viirusetõrjetarkvara võis ühenduse blokeerida.</translation>
 <translation id="7759163816903619567">Kuvatav domeen:</translation>
+<translation id="776110834126722255">Tugi on katkestatud</translation>
 <translation id="7761701407923456692">Serveri sertifikaat ei vasta URL-ile.</translation>
 <translation id="7763386264682878361">Makse manifesti parser</translation>
 <translation id="7764225426217299476">Lisage aadress</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index 7c78b30..11d00799d 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Joku muu näkee kaikki kirjoittamasi asiat, avaamasi sivut ja muut toimesi verkossa. Sivustojen sisältöä voidaan muuttaa tietämättäsi.</translation>
 <translation id="2289385804009217824">Leikkaus</translation>
 <translation id="2292556288342944218">Internetyhteytesi on estetty</translation>
+<translation id="2293443924986248631">Kun tämä on päällä, sivustot eivät voi seurata sinua verkossa evästeiden avulla. Joidenkin sivustojen ominaisuudet saattavat lakata toimimasta.</translation>
 <translation id="2297722699537546652">B5 (kirjekuori)</translation>
 <translation id="2300306941146563769">Ei lähetetty</translation>
 <translation id="2310021320168182093">Chou2 (kirjekuori)</translation>
@@ -730,6 +731,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Sivu 1}other{Sivu {COUNT}}}</translation>
 <translation id="4154664944169082762">Tunnistetiedostot</translation>
 <translation id="4159784952369912983">Violetti</translation>
+<translation id="4163132590327127354">Chrome teki sivusta yksinkertaisemman, jotta sen lukeminen olisi helpompaa.</translation>
 <translation id="4165986682804962316">Sivustoasetukset</translation>
 <translation id="4171400957073367226">Virheellinen vahvistusallekirjoitus.</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1030,6 +1032,11 @@
 <translation id="536296301121032821">Käytännön asetuksien tallentaminen epäonnistui</translation>
 <translation id="5371425731340848620">Päivitä kortti</translation>
 <translation id="5377026284221673050">"Kellosi jätättää", "Kellosi edistää" tai "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">Kohdepalvelin <ph name="ORIGIN" /> pyytää otsikossaan
+    alkuperäkäytännön soveltamista kaikkiin sen saamiin pyyntöihin. Koska
+    otsikko on muotoiltu väärin, selain ei voi täyttää
+    pyyntöäsi (<ph name="SITE" />). Alkuperäkäytäntöjen avulla
+    sivuston operaattorit voivat määrittää sen tietosuojan ja muita ominaisuuksia.</translation>
 <translation id="5386426401304769735">Tämän sivuston varmenneketju sisältää varmenteen, joka on allekirjoitettu SHA-1:llä.</translation>
 <translation id="538659543871111977">A4-välilehti</translation>
 <translation id="5396631636586785122">Reunasidonta oikealla</translation>
@@ -1576,6 +1583,7 @@
 <translation id="7757555340166475417">Dai Pa Kai (275 mm x 395 mm)</translation>
 <translation id="7758069387465995638">Palomuuri tai virustorjuntaohjelmisto on saattanut estää yhteyden.</translation>
 <translation id="7759163816903619567">Näytä verkkotunnus:</translation>
+<translation id="776110834126722255">Käytöstä poistettu</translation>
 <translation id="7761701407923456692">Palvelimen varmenne ei vastaa URL-osoitetta.</translation>
 <translation id="7763386264682878361">Maksuluettelon jäsentäjä</translation>
 <translation id="7764225426217299476">Lisää osoite</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index 9cb2f96..09d6fb0 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Tout ce que vous écrivez, toutes les pages que vous consultez ou toute autre activité sur le Web sont sous surveillance, et le contenu des sites peut être changé sans que vous le sachiez.</translation>
 <translation id="2289385804009217824">Découper</translation>
 <translation id="2292556288342944218">Votre accès à Internet est bloqué</translation>
+<translation id="2293443924986248631">Lorsque ce mode est activé, les sites ne peuvent pas utiliser de témoins qui font le suivi de votre activité sur le Web. Les fonctionnalités pourraient ne pas fonctionner sur certains sites.</translation>
 <translation id="2297722699537546652">Enveloppe B5</translation>
 <translation id="2300306941146563769">Non téléversé</translation>
 <translation id="2310021320168182093">Enveloppe Chou2</translation>
@@ -723,6 +724,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Page 1}one{Page {COUNT}}other{Page {COUNT}}}</translation>
 <translation id="4154664944169082762">Empreintes</translation>
 <translation id="4159784952369912983">Mauve</translation>
+<translation id="4163132590327127354">Chrome a simplifié cette page pour la rendre plus facile à lire.</translation>
 <translation id="4165986682804962316">Paramètres du site</translation>
 <translation id="4171400957073367226">Signature de validation incorrecte</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1022,6 +1024,7 @@
 <translation id="536296301121032821">Échec de stockage des paramètres de la règle</translation>
 <translation id="5371425731340848620">Mettre à jour la carte</translation>
 <translation id="5377026284221673050">« Votre horloge est en retard », « Votre horloge est en avance » ou « &lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt; »</translation>
+<translation id="5380442954567233718">Le serveur auquel vous accédez, <ph name="ORIGIN" />, a défini un en-tête qui exige d'une politique d'origine soit appliquée à toutes les demandes adressées à lui. Mais l'en-tête est formaté de manière incorrecte, ce qui empêche le navigateur de répondre à votre demande pour <ph name="SITE" />. Les exploitants de sites peuvent utiliser des politiques d'origine pour configurer la sécurité et d'autres propriétés d'un site.</translation>
 <translation id="5386426401304769735">La chaîne de certificat pour ce site contient un certificat qui a été signé avec SHA-1.</translation>
 <translation id="538659543871111977">A4 à onglet</translation>
 <translation id="5396631636586785122">Agrafage par le bord droit</translation>
@@ -1568,6 +1571,7 @@
 <translation id="7757555340166475417">Dai Pa Kai</translation>
 <translation id="7758069387465995638">Votre pare-feu ou votre antivirus ont peut-être bloqué la connexion.</translation>
 <translation id="7759163816903619567">Domaine d'affichage :</translation>
+<translation id="776110834126722255">Obsolète</translation>
 <translation id="7761701407923456692">Le certificat du serveur ne correspond pas à l'adresse URL.</translation>
 <translation id="7763386264682878361">Analyseur de fichier de configuration de paiement</translation>
 <translation id="7764225426217299476">Ajouter une adresse</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index f2cea32..29854ff99 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">તમે જે કંઈપણ ટાઇપ કરશો તે, તમે જોશો તે કોઈપણ પેજ અથવા વેબ પરની અન્ય કોઈપણ પ્રવૃત્તિ પર નજર રાખવામાં આવી રહી છે. સાઇટ પરના કન્ટેન્ટમાં તમારી જાણ વિના ફેરફાર કરવામાં આવી શકે છે.</translation>
 <translation id="2289385804009217824">ટ્રિમ કરો</translation>
 <translation id="2292556288342944218">તમારી ઇન્ટરનેટ ઍક્સેસ અવરોધિત છે</translation>
+<translation id="2293443924986248631">જ્યારે આ વિકલ્પ ચાલુ હોય, ત્યારે સાઇટ તમને વેબ પર બધે ટ્રૅક કરતી કુકીનો ઉપયોગ કરી શકશે નહીં. અમુક સાઇટ પરની સુવિધાઓમાં કદાચ ખલેલ પડી શકે છે.</translation>
 <translation id="2297722699537546652">B5 (એન્વલપ)</translation>
 <translation id="2300306941146563769">અપલોડ કર્યો નથી</translation>
 <translation id="2310021320168182093">Chou2 (એન્વલપ)</translation>
@@ -728,6 +729,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{પેજ 1}one{પેજ {COUNT}}other{પેજ {COUNT}}}</translation>
 <translation id="4154664944169082762">ફિંગરપ્રીંટ્સ</translation>
 <translation id="4159784952369912983">જાંબલી</translation>
+<translation id="4163132590327127354">Chrome દ્વારા આ પેજને સરળ બનાવવામાં આવ્યું છે જેથી તેને વધુ સરળતાથી વાંચી શકાય.</translation>
 <translation id="4165986682804962316">સાઇટ સેટિંગ્સ</translation>
 <translation id="4171400957073367226">ખોટી ચકાસણી સહી</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1027,6 +1029,11 @@
 <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="5380442954567233718">તમે જે સર્વર પર જઈ રહ્યાં છો, <ph name="ORIGIN" />, તેણે એવું હેડર સેટ કર્યું છે કે
+    જે તેના માટેની બધી વિનંતીઓ પર ઑરિજિન નીતિ લાગુ કરવાનું જરૂરી બનાવે છે. પરંતુ
+    હેડર દૂષિત છે, જે બ્રાઉઝરને
+    <ph name="SITE" /> માટેની તમારી વિનંતી પૂરી કરતા અટકાવે છે. સાઇટ ઑપરેટર ઑરિજિન
+    નીતિનો ઉપયોગ સાઇટ માટે સુરક્ષા અને અન્ય પ્રોપર્ટીની ગોઠવણી કરવા માટે કરી શકે છે.</translation>
 <translation id="5386426401304769735">આ સાઇટ માટેની પ્રમાણપત્ર શ્રૃંખલા SHA-1 નો ઉપયોગ કરીને સહી કરેલ પ્રમાણપત્ર ધરાવે છે.</translation>
 <translation id="538659543871111977">A4-ટૅબ</translation>
 <translation id="5396631636586785122">જમણી બાજુએ કિનારી જોડો</translation>
@@ -1573,6 +1580,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">ફાયરવોલ અથવા એન્ટિવાયરસ સોફ્ટવેર એ કનેક્શન અવરોધિત કર્યું હોઈ શકે છે.</translation>
 <translation id="7759163816903619567">ડોમેન બતાવો:</translation>
+<translation id="776110834126722255">ટાળેલી</translation>
 <translation id="7761701407923456692">સર્વરનું પ્રમાણપત્ર URL સાથે મેળ ખાતું નથી.</translation>
 <translation id="7763386264682878361">ચુકવણી મેનિફેસ્ટ વિશ્લેષક</translation>
 <translation id="7764225426217299476">સરનામું ઉમેરો</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 7460d8d..01d0ed7 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -597,6 +597,7 @@
 <translation id="3587738293690942763">मिडल</translation>
 <translation id="3592413004129370115">इटैलियन (एन्वेलप)</translation>
 <translation id="3600246354004376029"><ph name="TITLE" />, <ph name="DOMAIN" />, <ph name="TIME" /></translation>
+<translation id="3603507503523709">आपके एडमिन ने ऐप्लिकेशन को ब्लॉक कर दिया है</translation>
 <translation id="3608932978122581043">फ़ीड ओरिएंटेशन</translation>
 <translation id="3614103345592970299">आकार 2</translation>
 <translation id="361438452008624280">सूची एंट्री "<ph name="LANGUAGE_ID" />": अनजान या काम नहीं करने वाली भाषा.</translation>
@@ -850,6 +851,7 @@
 <translation id="467662567472608290">यह सर्वर यह प्रमाणित नहीं कर सका कि यह <ph name="DOMAIN" /> है; इसके सुरक्षा प्रमाणपत्र में त्रुटियां हैं. ऐसा गलत कॉन्फ़िगरेशन के कारण या किसी आक्रमणकर्ता द्वारा आपके कनेक्शन में अवरोध डालने के कारण हो सकता है.</translation>
 <translation id="4677585247300749148"><ph name="URL" /> सुलभता इवेंट का जवाब देना चाहता है</translation>
 <translation id="467809019005607715">Google स्लाइड</translation>
+<translation id="4680804919228900307">आपने अभी जिस साइट पर अपना पासवर्ड डाला है वह सुरक्षित नहीं है. क्रोमियम, <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" />, और उन साइटों पर तुरंत जाकर, सेव किए गए पासवर्ड की जांच करने का सुझाव देता है जिन पर आपने इनका इस्तेमाल किया था.</translation>
 <translation id="4690462567478992370">अमान्य प्रमाणपत्र का उपयोग करना बंद करें</translation>
 <translation id="4691835149146451662">आर्किटेक्चर-ए (एन्वेलप)</translation>
 <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation>
@@ -1015,8 +1017,10 @@
 <translation id="5329858041417644019">आपका ब्राउज़र प्रबंधित नहीं है</translation>
 <translation id="5332219387342487447">शिपिंग का तरीका</translation>
 <translation id="5334013548165032829">सिस्टम लॉग की ज़्यादा जानकारी</translation>
+<translation id="5340250774223869109">ऐप्लिकेशन को ब्लॉक किया गया है</translation>
 <translation id="534295439873310000">NFC डिवाइस</translation>
 <translation id="5344579389779391559">यह पेज आपसे शुल्क लेने की कोशिश कर सकता है</translation>
+<translation id="5346336634660260557">क्लिपबोर्ड की सामग्री और Chrome में डाउनलोड या अपलोड की जाने वाली फ़ाइलों की सामग्री को स्कैन करें.</translation>
 <translation id="5355557959165512791">आप इस समय <ph name="SITE" /> पर नहीं जा सकते हैं क्योंकि उसका प्रमाणपत्र रद्द कर दिया गया है. नेटवर्क की गड़बड़ी और हमले आमतौर पर कुछ देर के लिए होते हैं, इसलिए मुमकिन है कि यह पेज बाद में काम करे.</translation>
 <translation id="536296301121032821">नीति सेटिंग संग्रहित करने में विफल</translation>
 <translation id="5371425731340848620">कार्ड अपडेट करें</translation>
@@ -1427,6 +1431,7 @@
 <translation id="7219179957768738017">कनेक्‍शन <ph name="SSL_VERSION" /> का उपयोग करता है.</translation>
 <translation id="7220786058474068424">संसाधित हो रहा है</translation>
 <translation id="7221855153210829124">नोटिफ़िकेशन दिखाएं</translation>
+<translation id="7229659723041939809">आपने अभी जिस साइट पर अपना पासवर्ड डाला है वह सुरक्षित नहीं है. Chrome, <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" />, और उन साइटों पर तुरंत जाकर, सेव किए गए पासवर्ड की जांच करने का सुझाव देता है जिन पर आपने इनका इस्तेमाल किया था.</translation>
 <translation id="7233592378249864828">जिस शीट की पुष्टि की गई है उसे प्रिंट करें</translation>
 <translation id="7238585580608191973">SHA-256 फ़िंगरप्रिंट</translation>
 <translation id="7240120331469437312">प्रमाणपत्र विषय वैकल्पिक नाम</translation>
@@ -1494,6 +1499,7 @@
 <translation id="7485870689360869515">कोई डेटा नहीं मिला</translation>
 <translation id="7495290002932347110">किसी साइट या ऐप्लिकेशन पर हुए डेटा ब्रीच में आपका पासवर्ड उजागर हो गया है. Chrome का सुझाव है कि आप अपने सेव किए हुए पासवर्ड की जांच करें और <ph name="ORIGIN" /> पर अभी अपना पासवर्ड बदलें.</translation>
 <translation id="7498234416455752244">बदलाव करना जारी रखें</translation>
+<translation id="7503664977220660814">आपने अभी जिस साइट पर अपना पासवर्ड डाला है वह सुरक्षित नहीं है. क्रोमियम, <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> और उन साइटों पर तुरंत जाकर, सेव किए गए पासवर्ड की जांच करने का सुझाव देता है जिन पर आपने इनका इस्तेमाल किया था.</translation>
 <translation id="7508255263130623398">वापस लौटाया हुआ नीति डिवाइस आईडी खाली है या उसका मिलान वर्तमान डिवाइस आईडी से नहीं होता है</translation>
 <translation id="7508870219247277067">एवोकैडो हरा</translation>
 <translation id="7511955381719512146">आप जिस वाई-फ़ाई का उपयोग कर रहे हैं, उसके लिए आपको <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" /> पर जाने की ज़रूरत पड़ सकती है.</translation>
@@ -1569,6 +1575,7 @@
 <translation id="7763386264682878361">भुगतान मेनिफ़ेस्ट पार्सर</translation>
 <translation id="7764225426217299476">पता जोड़ें</translation>
 <translation id="7766518757692125295">स्कर्ट</translation>
+<translation id="7767271804335921384">इस ऐप्लिकेशन को आपके एडमिन ने ब्लॉक कर दिया है</translation>
 <translation id="7770259615151589601">लंबाई वाला फ़ॉर्मैट</translation>
 <translation id="7773005668374414287">इसी तरह सीधा करके रखें</translation>
 <translation id="777702478322588152">प्रांत</translation>
@@ -1589,6 +1596,7 @@
 <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
 <translation id="7862185352068345852">साइट छोड़ें?</translation>
 <translation id="7865448901209910068">सबसे अच्छी रफ़्तार</translation>
+<translation id="7874263914261512992">आपने अभी जिस साइट पर अपना पासवर्ड डाला है वह सुरक्षित नहीं है. Chrome, <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> और उन साइटों पर तुरंत जाकर, सेव किए गए पासवर्ड की जांच करने का सुझाव देता है जिन पर आपने इनका इस्तेमाल किया था.</translation>
 <translation id="7878562273885520351">आपके पासवर्ड से छेड़छाड़ की जा सकती है</translation>
 <translation id="7882421473871500483">भूरा</translation>
 <translation id="7887683347370398519">अपना कार्ड वेरीफ़िकेशन कोड (सीवीसी) जांचे और फिर से कोशिश करें</translation>
@@ -1725,6 +1733,7 @@
 <translation id="8474910779563686872">डेवलपर की जानकारी दिखाएं</translation>
 <translation id="8479754468255770962">नीचे बाईं ओर स्टेपल</translation>
 <translation id="8483780878231876732">कार्ड का इस्तेमाल अपने Google खाते से करने के लिए, Chrome में साइन करें</translation>
+<translation id="8485393050551136813">आपने अभी जिस साइट पर अपना पासवर्ड डाला है वह सुरक्षित नहीं है. क्रोमियम, <ph name="WEBSITE_1" /> और उन साइटों पर तुरंत जाकर, सेव किए गए पासवर्ड की जांच करने का सुझाव देता है जिन पर आपने इनका इस्तेमाल किया था.</translation>
 <translation id="8488350697529856933">इस पर लागू होती है</translation>
 <translation id="8490137692873530638">स्टैकर 10</translation>
 <translation id="8498891568109133222"><ph name="HOST_NAME" /> को लोड होने में बहुत ज़्यादा समय लगा.</translation>
@@ -1775,6 +1784,7 @@
 <translation id="87601671197631245">यह साइट एक पुराने सुरक्षा कॉन्फ़िगरेशन का इस्तेमाल करती है. इस वजह से, साइट पर भेजी जाने वाली आपकी जानकारी (उदाहरण के लिए, पासवर्ड, मैसेज या क्रेडिट कार्ड) को कोई और देख सकता है.</translation>
 <translation id="8761567432415473239">Google सुरक्षित ब्राउज़िंग को <ph name="SITE" /> पर हाल ही में <ph name="BEGIN_LINK" />हानिकारक प्रोग्राम मिले हैं<ph name="END_LINK" />.</translation>
 <translation id="8763927697961133303">USB डिवाइस</translation>
+<translation id="8774457497170244317">आपने अभी जिस साइट पर अपना पासवर्ड डाला है वह सुरक्षित नहीं है. Chrome, <ph name="WEBSITE_1" /> और उन साइटों पर तुरंत जाकर, सेव किए गए पासवर्ड की जांच करने का सुझाव देता है जिन पर आपने इनका इस्तेमाल किया था.</translation>
 <translation id="877985182522063539">ए4</translation>
 <translation id="8790007591277257123">मिटाना &amp;फिर से करें</translation>
 <translation id="8792621596287649091">आपके <ph name="ORG_NAME" /> खाते का एक्सेस खो सकता है या आपकी पहचान चोरी हो सकती है. क्रोमियम आपको अभी अपना पासवर्ड बदलने का सुझाव देता है.</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index 6ae035f..144c056 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Prati se sve što upisujete, stranice koje pregledavate ili druge aktivnosti na webu, a sadržaj na web-lokacijama može se izmijeniti bez vašeg znanja.</translation>
 <translation id="2289385804009217824">Obrezivanje</translation>
 <translation id="2292556288342944218">Internetski je pristup blokiran</translation>
+<translation id="2293443924986248631">Kad je ta značajka uključena, web-lokacije ne mogu upotrebljavati kolačiće koji vas prate na webu. Značajke na nekim web-lokacijama mogu prestati funkcionirati.</translation>
 <translation id="2297722699537546652">B5 (omotnica)</translation>
 <translation id="2300306941146563769">Nije preneseno</translation>
 <translation id="2310021320168182093">Chou2 (omotnica)</translation>
@@ -728,6 +729,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Stranica 1}one{Stranica {COUNT}}few{Stranica {COUNT}}other{Stranica {COUNT}}}</translation>
 <translation id="4154664944169082762">Otisci prstiju</translation>
 <translation id="4159784952369912983">Ljubičasto</translation>
+<translation id="4163132590327127354">Chrome je pojednostavio ovu stranicu radi lakšeg čitanja.</translation>
 <translation id="4165986682804962316">Postavke web-lokacije</translation>
 <translation id="4171400957073367226">Potpis za potvrdu nije ispravan.</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1028,6 +1030,11 @@
 <translation id="536296301121032821">Pohrana postavki pravila nije uspjela</translation>
 <translation id="5371425731340848620">Ažuriranje kartice</translation>
 <translation id="5377026284221673050">"Sat kasni" ili "Sat ide unaprijed" ili "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">Poslužitelj kojem pristupate, <ph name="ORIGIN" />, postavio je zaglavlje
+    sa zahtjevom da se izvorno pravilo primjenjuje na sve zahtjeve upućene prema njemu. No
+    zaglavlje nije ispravno, što onemogućuje ispunjavanje
+    vašeg zahtjeva u pregledniku za web-lokaciju <ph name="SITE" />. Operatori web-lokacije mogu koristiti 
+    izvorna pravila radi konfiguracije sigurnosti i drugih svojstava web-lokacije.</translation>
 <translation id="5386426401304769735">Lanac certifikata za ovu web-lokaciju sadrži certifikat s SHA-1 potpisom.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Rubni šav s desne strane</translation>
@@ -1574,6 +1581,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Vezu možda blokira vatrozid ili antivirusni softver.</translation>
 <translation id="7759163816903619567">Prikaži domenu:</translation>
+<translation id="776110834126722255">Zastarjelo</translation>
 <translation id="7761701407923456692">Certifikat poslužitelja ne podudara se s URL-om.</translation>
 <translation id="7763386264682878361">Raščlanjivač manifesta za plaćanje</translation>
 <translation id="7764225426217299476">Dodaj adresu</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb
index de848142..59f067d 100644
--- a/components/strings/components_strings_hy.xtb
+++ b/components/strings/components_strings_hy.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Ձեր մուտքագրած տեքստերը, դիտած էջերը և ցանկացած այլ գործողություն համացանցում հետագծվում է։ Կայքերի բովանդակությունը կարող է փոխվել առանց ձեր իմացության։</translation>
 <translation id="2289385804009217824">Կտրել</translation>
 <translation id="2292556288342944218">Համացանցի մուտքն արգելափակված է</translation>
+<translation id="2293443924986248631">Երբ այս կարգավորումը միացված է, կայքերը չեն կարող օգտագործել քուքիները, որոնց միջոցով հետագծվում են ձեր գործողությունները համացանցում։ Որոշ կայքերում գործառույթները կարող են չաշխատել։</translation>
 <translation id="2297722699537546652">B5 (ծրար)</translation>
 <translation id="2300306941146563769">Վերբեռնված չէ</translation>
 <translation id="2310021320168182093">Chou2 (ծրար)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Էջ 1}one{Էջ {COUNT}}other{Էջ {COUNT}}}</translation>
 <translation id="4154664944169082762">Մատնահետքեր</translation>
 <translation id="4159784952369912983">Մանուշակագույն</translation>
+<translation id="4163132590327127354">Chrome-ը պարզեցրել է այս էջը՝ այն ավելի ընթեռնելի դարձնելու համար։</translation>
 <translation id="4165986682804962316">Կայքի կարգավորումներ</translation>
 <translation id="4171400957073367226">Հաստատող ստորագրությունը սխալ է</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,11 @@
 <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="5380442954567233718">Սերվերը, ուր պատրաստվում եք անցնել (<ph name="ORIGIN" />) վերնագիր է սահմանել, որը
+    պահանջում է, որ սկզբնական կանոնը կիրառվի իրեն ուղարկված բոլոր հարցումների նկատմամբ։ Սակայն
+    վերնագրի կազմությունը սխալ է, ինչը թույլ չի տալիս դիտարկիչին կատարել
+    <ph name="SITE" /> կայքի ձեր հարցումը։ Սկզբնական կանոնները կարող են օգտագործվել
+    կայքերի օպերատորների կողմից կայքի տարատեսակ պարամետրերի և անվտանգության կարգավորումների համար։</translation>
 <translation id="5386426401304769735">Այս կայքի վկայագրերի շարքում առկա է մեկ վկայագիր` SHA-1 ստորագրությամբ:</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Աջ եզրակար</translation>
@@ -1575,6 +1582,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Հնարավոր է՝ հրապատը կամ հակավիրուսային ծրագիրը արգելափակել են կապակցումը:</translation>
 <translation id="7759163816903619567">Ցուցադրել տիրույթը՝</translation>
+<translation id="776110834126722255">Հնացած</translation>
 <translation id="7761701407923456692">Սերվերի վկայագիրը չի համապատասխանում URL-ին:</translation>
 <translation id="7763386264682878361">Վճարումների մանիֆեստների վերլուծիչ</translation>
 <translation id="7764225426217299476">Ավելացնել հասցե</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb
index 8fe1232..cbbc4f47 100644
--- a/components/strings/components_strings_is.xtb
+++ b/components/strings/components_strings_is.xtb
@@ -601,7 +601,7 @@
 <translation id="3587738293690942763">Miðja</translation>
 <translation id="3592413004129370115">Italian (umslag)</translation>
 <translation id="3600246354004376029"><ph name="TITLE" />, <ph name="DOMAIN" />, <ph name="TIME" /></translation>
-<translation id="3603507503523709">Kerfisstjóri lokaði á forritið</translation>
+<translation id="3603507503523709">Kerfisstjóri hefur lokað á þetta forrit</translation>
 <translation id="3608932978122581043">Inntaksstefna</translation>
 <translation id="3614103345592970299">Stærð 2</translation>
 <translation id="361438452008624280">Listafærslan „<ph name="LANGUAGE_ID" />“: Óþekkt eða óstutt tungumál.</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index d54e0b7..1990ef1 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Tutto ciò che digiti, tutte le pagine che visualizzi e ogni altra attività che svolgi sul Web vengono monitorati. I contenuti sui siti potrebbero essere modificati a tua insaputa.</translation>
 <translation id="2289385804009217824">Taglio</translation>
 <translation id="2292556288342944218">L'accesso a Internet è bloccato</translation>
+<translation id="2293443924986248631">Se questa opzione è attiva, i siti non possono utilizzare i cookie per monitorare la tua attività sul Web. Le funzionalità su alcuni siti potrebbero non essere disponibili.</translation>
 <translation id="2297722699537546652">B5 (Envelope)</translation>
 <translation id="2300306941146563769">Non caricato</translation>
 <translation id="2310021320168182093">Chou2 (Envelope)</translation>
@@ -726,6 +727,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Pagina 1}other{Pagina {COUNT}}}</translation>
 <translation id="4154664944169082762">Impronte digitali</translation>
 <translation id="4159784952369912983">Viola</translation>
+<translation id="4163132590327127354">Chrome ha semplificato questa pagina per facilitarne la lettura.</translation>
 <translation id="4165986682804962316">Impostazioni sito</translation>
 <translation id="4171400957073367226">Firma di verifica non valida</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1026,6 +1028,11 @@
 <translation id="536296301121032821">Archiviazione delle impostazioni criterio non riuscita</translation>
 <translation id="5371425731340848620">Aggiorna carta</translation>
 <translation id="5377026284221673050">"L'orologio è indietro", "L'orologio è avanti" oppure "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">Il server a cui ti stai collegando, <ph name="ORIGIN" />, ha impostato un'intestazione
+    che richiede una norma di partenza da applicare a tutte le richieste. Tuttavia
+    l'intestazione non è corretta e impedisce al browser di soddisfare
+    la tua richiesta per <ph name="SITE" />. Le norme di partenza possono essere usate dagli
+    operatori del sito per configurare la sicurezza e altre proprietà del sito.</translation>
 <translation id="5386426401304769735">Il certificato di questo sito contiene un certificato che è stato firmato utilizzando SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Impuntura a destra</translation>
@@ -1571,6 +1578,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Il software antivirus o il firewall potrebbe avere bloccato la connessione.</translation>
 <translation id="7759163816903619567">Dominio visualizzato:</translation>
+<translation id="776110834126722255">Obsoleto</translation>
 <translation id="7761701407923456692">Il certificato del server non corrisponde all'URL.</translation>
 <translation id="7763386264682878361">Analizzatore sintattico dei file manifest dei pagamenti</translation>
 <translation id="7764225426217299476">Aggiungi indirizzo</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 06e9d73..e9d5977 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">כל הקלדת טקסט, הצגת דף או פעילות אחרת באינטרנט נמצאת במעקב. בנוסף, התוכן באתרים עשוי להשתנות ללא ידיעתך.</translation>
 <translation id="2289385804009217824">חיתוך</translation>
 <translation id="2292556288342944218">הגישה לאינטרנט חסומה</translation>
+<translation id="2293443924986248631">‏כשהאפשרות מופעלת, אתרים לא יכולים להשתמש בקובצי cookie כדי לעקוב אחריך באינטרנט. ייתכנו שיבושים בפעולה של תכונות באתרים מסוימים.</translation>
 <translation id="2297722699537546652">B5 (Envelope)‎</translation>
 <translation id="2300306941146563769">לא הועלה</translation>
 <translation id="2310021320168182093">Chou2 (Envelope)‎</translation>
@@ -727,6 +728,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{דף 1}two{דף {COUNT}}many{דף {COUNT}}other{דף {COUNT}}}</translation>
 <translation id="4154664944169082762">טביעות אצבע</translation>
 <translation id="4159784952369912983">סגול</translation>
+<translation id="4163132590327127354">‏Chrome יצר גרסה פשוטה של הדף הזה כדי להקל את הקריאה שלו.</translation>
 <translation id="4165986682804962316">הגדרות לאתרים</translation>
 <translation id="4171400957073367226">חתימת אימות לא חוקית</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> ‏- <ph name="RESULT_OWNER" /> ‏- <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1031,6 +1033,11 @@
 <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="5380442954567233718">בשרת שאליו ביקשת לעבור, <ph name="ORIGIN" />, הוגדרה כותרת
+    שדורשת להחיל מדיניות מקור על כל הבקשות הנשלחות אליו. עם זאת,
+    פורמט הכותרת שגוי, ולכן הדפדפן לא יכול למלא
+    את הבקשה שלך בשביל <ph name="SITE" />. מפעילי אתרים יכולים להשתמש במדיניות מקור
+    כדי להגדיר מאפייני אבטחה ומאפיינים אחרים עבור אתר מסוים.</translation>
 <translation id="5386426401304769735">‏שרשרת האישורים של האתר הזה כוללת אישור שנחתם באמצעות SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">הידוק קצוות בצד ימין</translation>
@@ -1578,6 +1585,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">ייתכן שחומת אש או תוכנת אנטי-וירוס חסמו את החיבור.</translation>
 <translation id="7759163816903619567">דומיין תצוגה:</translation>
+<translation id="776110834126722255">הוצאה משימוש</translation>
 <translation id="7761701407923456692">אישור השרת אינו תואם לכתובת האתר.</translation>
 <translation id="7763386264682878361">מנתח מניפסט התשלום</translation>
 <translation id="7764225426217299476">הוסף כתובת</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 52173da..5f39d302 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -594,6 +594,7 @@
 <translation id="3587738293690942763">中</translation>
 <translation id="3592413004129370115">Italian(封筒)</translation>
 <translation id="3600246354004376029"><ph name="TITLE" />、<ph name="DOMAIN" />、<ph name="TIME" /></translation>
+<translation id="3603507503523709">アプリケーションは管理者によってブロックされています</translation>
 <translation id="3608932978122581043">給紙方向</translation>
 <translation id="3614103345592970299">サイズ 2</translation>
 <translation id="361438452008624280">リスト項目「<ph name="LANGUAGE_ID" />」: 不明またはサポートされていない言語です。</translation>
@@ -847,6 +848,7 @@
 <translation id="467662567472608290">このサーバーが <ph name="DOMAIN" /> であることを確認できませんでした。このサーバーのセキュリティ証明書にはエラーがあります。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。</translation>
 <translation id="4677585247300749148"><ph name="URL" /> から、ユーザー補助機能のイベントに応答する許可を求められています</translation>
 <translation id="467809019005607715">Google スライド</translation>
+<translation id="4680804919228900307">偽のサイトでパスワードを入力しました。<ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" /> のほか、このパスワードを使用しているサイトで、保存したパスワードを今すぐ確認することをおすすめします。</translation>
 <translation id="4690462567478992370">無効な証明書の使用をやめる</translation>
 <translation id="4691835149146451662">Architecture-A(封筒)</translation>
 <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation>
@@ -1012,8 +1014,10 @@
 <translation id="5329858041417644019">ご使用のブラウザは管理されていません</translation>
 <translation id="5332219387342487447">配送方法</translation>
 <translation id="5334013548165032829">詳細なシステムログ</translation>
+<translation id="5340250774223869109">アプリケーションがブロックされました</translation>
 <translation id="534295439873310000">NFC デバイス</translation>
 <translation id="5344579389779391559">このページでは課金される恐れがあります</translation>
+<translation id="5346336634660260557">クリップボードと、Chrome でダウンロードまたはアップロードするファイルのコンテンツをスキャンします。</translation>
 <translation id="5355557959165512791"><ph name="SITE" /> は証明書が失効しているため、現在アクセスできません。通常、ネットワーク エラーやネットワークへの攻撃は一時的なものです。しばらくするとページにアクセスできるようになります。</translation>
 <translation id="536296301121032821">ポリシー設定を保存できませんでした</translation>
 <translation id="5371425731340848620">カードを更新</translation>
@@ -1424,6 +1428,7 @@
 <translation id="7219179957768738017">この接続には <ph name="SSL_VERSION" /> を使用しています。</translation>
 <translation id="7220786058474068424">処理しています</translation>
 <translation id="7221855153210829124">通知の表示</translation>
+<translation id="7229659723041939809">偽のサイトでパスワードを入力しました。<ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" /> のほか、このパスワードを使用しているサイトで、保存したパスワードを今すぐ確認することをおすすめします。</translation>
 <translation id="7233592378249864828">確認シートの印刷</translation>
 <translation id="7238585580608191973">SHA-256 指紋</translation>
 <translation id="7240120331469437312">証明書のサブジェクトの代替名</translation>
@@ -1491,6 +1496,7 @@
 <translation id="7485870689360869515">データが見つかりません。</translation>
 <translation id="7495290002932347110">サイトまたはアプリでのデータ侵害により、パスワード情報が漏洩しました。保存したパスワードを確認し、<ph name="ORIGIN" /> のパスワードを今すぐ変更することをおすすめします。</translation>
 <translation id="7498234416455752244">編集を続ける</translation>
+<translation id="7503664977220660814">偽のサイトでパスワードを入力しました。<ph name="WEBSITE_1" />、<ph name="WEBSITE_2" /> のほか、このパスワードを使用しているサイトで、保存したパスワードを今すぐ確認することをおすすめします。</translation>
 <translation id="7508255263130623398">返されたポリシーのデバイス ID が空であるか、現在のデバイス ID と一致しません</translation>
 <translation id="7508870219247277067">アボカド グリーン</translation>
 <translation id="7511955381719512146">ご利用の Wi-Fi では、<ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" /> へのアクセスが必要な可能性があります。</translation>
@@ -1566,6 +1572,7 @@
 <translation id="7763386264682878361">Payment Manifest Parser</translation>
 <translation id="7764225426217299476">住所を追加</translation>
 <translation id="7766518757692125295">スカート</translation>
+<translation id="7767271804335921384">アプリケーションは管理者によってブロックされています</translation>
 <translation id="7770259615151589601">Designated-Long</translation>
 <translation id="7773005668374414287">同じ順序(上向き)</translation>
 <translation id="777702478322588152">都道府県</translation>
@@ -1586,6 +1593,7 @@
 <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation>
 <translation id="7862185352068345852">このサイトを離れますか?</translation>
 <translation id="7865448901209910068">最高速度</translation>
+<translation id="7874263914261512992">偽のサイトでパスワードを入力しました。<ph name="WEBSITE_1" />、<ph name="WEBSITE_2" /> のほか、このパスワードを使用しているサイトで、保存したパスワードを今すぐ確認することをおすすめします。</translation>
 <translation id="7878562273885520351">パスワードが不正使用される可能性があります</translation>
 <translation id="7882421473871500483">茶</translation>
 <translation id="7887683347370398519">CVC を確認してからもう一度お試しください</translation>
@@ -1722,6 +1730,7 @@
 <translation id="8474910779563686872">デベロッパーの詳細を表示</translation>
 <translation id="8479754468255770962">ステープル(左下)</translation>
 <translation id="8483780878231876732">Google アカウントに保存したカードを使用するには Chrome にログインしてください</translation>
+<translation id="8485393050551136813">偽のサイトでパスワードを入力しました。<ph name="WEBSITE_1" /> のほか、このパスワードを使用しているサイトで、保存したパスワードを今すぐ確認することをおすすめします。</translation>
 <translation id="8488350697529856933">適用先</translation>
 <translation id="8490137692873530638">スタッカー 10</translation>
 <translation id="8498891568109133222"><ph name="HOST_NAME" /> からの応答時間が長すぎます。</translation>
@@ -1772,6 +1781,7 @@
 <translation id="87601671197631245">このサイトでは古いセキュリティ設定を使用しています。このサイトにパスワード、メッセージ、クレジット カードなどの情報を送信すると流出する恐れがあります。</translation>
 <translation id="8761567432415473239"><ph name="SITE" /> では最近、Google セーフ ブラウジングにより<ph name="BEGIN_LINK" />有害なプログラムが検出<ph name="END_LINK" />されました。</translation>
 <translation id="8763927697961133303">USB デバイス</translation>
+<translation id="8774457497170244317">偽のサイトでパスワードを入力しました。<ph name="WEBSITE_1" /> のほか、このパスワードを使用しているサイトで、保存したパスワードを今すぐ確認することをおすすめします。</translation>
 <translation id="877985182522063539">A4</translation>
 <translation id="8790007591277257123">削除のやり直し(&amp;R)</translation>
 <translation id="8792621596287649091"><ph name="ORG_NAME" /> アカウントにアクセスできなくなったり、個人情報が盗まれたりする可能性があります。今すぐパスワードを変更することをおすすめします。</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 66820eb..37f4ce0 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">ມີການເຝົ້າຕິດຕາມເບິ່ງທຸກຢ່າງທີ່ທ່ານພິມ, ໜ້າເວັບໃດກໍຕາມທີ່ທ່ານເບິ່ງ ຫຼື ການເຄື່ອນໄຫວອື່ນໃດໆກໍຕາມໃນເວັບ. ອາດມີການປ່ຽນແປງເນື້ອຫາໃນເວັບໄຊໂດຍບໍ່ມີການແຈ້ງໃຫ້ທ່ານຊາບ.</translation>
 <translation id="2289385804009217824">ຕັດ</translation>
 <translation id="2292556288342944218">ການເຂົ້າເຖິງອິນເຕີເນັດຂອງທ່ານຖືກບລັອກໄວ້</translation>
+<translation id="2293443924986248631">ເມື່ອເປີດຢູ່, ເວັບໄຊຈະບໍ່ສາມາດໃຊ້ຄຸກກີ້ທີ່ຕິດຕາມທ່ານໃນທົ່ວເວັບໄຊ. ຄຸນສົມບັດໃນບາງເວັບໄຊອາດຈະໃຊ້ບໍ່ໄດ້.</translation>
 <translation id="2297722699537546652">B5 (ຊອງຈົດໝາຍ)</translation>
 <translation id="2300306941146563769">ອັບໂຫຼດບໍ່ໄດ້</translation>
 <translation id="2310021320168182093">Chou2 (ຊອງຈົດໝາຍ)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{ໜ້າ 1}other{ໜ້າ {COUNT}}}</translation>
 <translation id="4154664944169082762">ລາຍນີ້ວມື</translation>
 <translation id="4159784952369912983">ສີມ່ວງ</translation>
+<translation id="4163132590327127354">Chrome ໄດ້ເຮັດໃຫ້ໜ້ານີ້ອ່ານໄດ້ງ່າຍຂຶ້ນ.</translation>
 <translation id="4165986682804962316">ການຕັ້ງຄ່າເວັບໄຊທ໌</translation>
 <translation id="4171400957073367226">ລາຍເຊັນການຢື​ນ​ຢັນບໍ່​ດີ</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,11 @@
 <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="5380442954567233718">ເຊີບເວີທີ່ທ່ານຈະໄປຫາ, <ph name="ORIGIN" />, ໄດ້ຕັ້ງຄ່າສ່ວນຫົວ
+    ທີ່ກຳນົດໃຫ້ນຳໃຊ້ນະໂຍບາຍຕົ້ນທາງກັບທຸກຄຳຂໍທີ່ສົ່ງຫາມັນ. ແຕ່
+    ສ່ວນຫົວດັ່ງກ່າວມີຮູບແບບບໍ່ຖືກຕ້ອງ, ເຊິ່ງເຮັດໃຫ້ໂປຣແກຣມທ່ອງເວັບດຳເນີນການຕາມ
+    ຄຳຂໍຂອງທ່ານສຳລັບ <ph name="SITE" /> ບໍ່ໄດ້. ນະໂຍບາຍຕົ້ນທາງສາມາດໃຊ້ໄດ້ໂດຍ
+    ຜູ້ໃຫ້ບໍລິການເວັບໄຊເພື່ອກຳນົດຄ່າຄວາມປອດໄພ ແລະ ຄຸນລັກສະນະອື່ນໆສຳລັບເວັບໄຊ.</translation>
 <translation id="5386426401304769735">ຕ່ອງໂສ້ໃບຮັບຮອງສຳລັບເວັບໄຊນີ້ປະກອບມີໃບຮັບຮອງທີ່ເຊັນຊື່ໂດຍໃຊ້ SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">ຫຍິບຂອບເບື້ອງຂວາ</translation>
@@ -1575,6 +1582,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">ໄຟຣ໌ວໍ ຫຼື ຊອບແວປ້ອງກັນໄວຣັສອາດຈະບລັອກການເຊື່ອມຕໍ່ໄວ້ແລ້ວ.</translation>
 <translation id="7759163816903619567">ໂດເມນສະແດງຜົນ:</translation>
+<translation id="776110834126722255">ເຊົາຮອງຮັບແລ້ວ</translation>
 <translation id="7761701407923456692">ໃບຢັ້ງຢືນຂອງເຊີບເວີບໍ່ເຂົ້າກັບ URL.</translation>
 <translation id="7763386264682878361">ຕົວແຍກວິເຄາະໄຟລ໌ Manifest</translation>
 <translation id="7764225426217299476">ເພີ່ມ​ທີ່​ຢູ່</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index 72f6fe1d..321b74cd 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Visas vedamas tekstas, visi peržiūrimi puslapiai ar bet kokia kita veikla žiniatinklyje yra stebima. Svetainių turinys gali būti keičiamas jums nežinant.</translation>
 <translation id="2289385804009217824">Apkarpymas</translation>
 <translation id="2292556288342944218">Interneto prieiga užblokuota</translation>
+<translation id="2293443924986248631">Įjungus svetainės negalės naudoti slapukų, kurie stebi jūsų veiklą žiniatinklyje. Funkcijos gali neveikti tam tikrose svetainėse.</translation>
 <translation id="2297722699537546652">B5 (vokas)</translation>
 <translation id="2300306941146563769">Neįkelta</translation>
 <translation id="2310021320168182093">„Chou2“ (vokas)</translation>
@@ -730,6 +731,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{1 psl.}one{{COUNT} psl.}few{{COUNT} psl.}many{{COUNT} psl.}other{{COUNT} psl}}</translation>
 <translation id="4154664944169082762">Pirštų atspaudai</translation>
 <translation id="4159784952369912983">Violetinė</translation>
+<translation id="4163132590327127354">„Chrome“ supaprastino šį puslapį, kad būtų paprasčiau skaityti.</translation>
 <translation id="4165986682804962316">Svetainės nustatymai</translation>
 <translation id="4171400957073367226">Netinkamas patvirtinimo parašas</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1030,6 +1032,11 @@
 <translation id="536296301121032821">Išsaugant politikos nustatymus įvyko klaida</translation>
 <translation id="5371425731340848620">Atnaujinkite kortelę</translation>
 <translation id="5377026284221673050">„Laikrodis atsilieka“, „Laikrodis skuba“ arba „&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;“</translation>
+<translation id="5380442954567233718">Serveris, į kurį esate nukreipiami (<ph name="ORIGIN" />), nustatė antraštę,
+    pagal kurią reikalaujama, kad pradinė politika būtų taikoma visoms jam teikiamoms užklausoms. Bet
+    antraštė netinkamai suformatuota, todėl naršyklė negali įvykdyti
+    <ph name="SITE" /> užklausos. Pradinę politiką gali naudoti
+    svetainių operatoriai, siekdami konfigūruoti svetainės saugą ir kitas nuosavybes.</translation>
 <translation id="5386426401304769735">Šios svetainės sertifikatų grandinėje yra sertifikatas, pasirašytas naudojant SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Kraštų sukabinimas dešinėje</translation>
@@ -1576,6 +1583,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Gali būti, kad užkarda arba antivirusinė programinė įranga užblokavo ryšį.</translation>
 <translation id="7759163816903619567">Pateikties domenas:</translation>
+<translation id="776110834126722255">Nebenaudojama</translation>
 <translation id="7761701407923456692">Serverio sertifikatas neatitinka URL.</translation>
 <translation id="7763386264682878361">Mokėjimo aprašo analizavimo įrankis</translation>
 <translation id="7764225426217299476">Pridėti adresą</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index b3a511e1..77c92382 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Tiek skatīts viss, ko jūs rakstāt, visas lapas, kuras skatāt, vai jebkura cita darbība tīmeklī. Vietņu saturs var tikt mainīts, jūs neinformējot.</translation>
 <translation id="2289385804009217824">Apgriešana</translation>
 <translation id="2292556288342944218">Piekļuve internetam ir bloķēta</translation>
+<translation id="2293443924986248631">Ja šis iestatījums ir ieslēgts, vietnes nevar izmantot sīkfailus, lai izsekotu jūsu darbības tīmeklī. Noteiktās vietnēs funkcijas var nedarboties.</translation>
 <translation id="2297722699537546652">B5 (aploksne)</translation>
 <translation id="2300306941146563769">Nav augšupielādēts</translation>
 <translation id="2310021320168182093">Chou2 (aploksne)</translation>
@@ -726,6 +727,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{1. lapa}zero{{COUNT}. lapa}one{{COUNT}. lapa}other{{COUNT}. lapa}}</translation>
 <translation id="4154664944169082762">Pirkstu nospiedumi</translation>
 <translation id="4159784952369912983">Violets</translation>
+<translation id="4163132590327127354">Chrome vienkāršoja šo lapu, lai atvieglotu lasīšanu.</translation>
 <translation id="4165986682804962316">Vietnes iestatījumi</translation>
 <translation id="4171400957073367226">Verifikācijas paraksts nav derīgs.</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" />, <ph name="RESULT_OWNER" /> — <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1026,6 +1028,11 @@
 <translation id="536296301121032821">Neizdevās saglabāt politikas iestatījumus.</translation>
 <translation id="5371425731340848620">Kartes atjaunināšana</translation>
 <translation id="5377026284221673050">“Pulkstenis atpaliek”, “Pulkstenis steidzas” vai “&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;”</translation>
+<translation id="5380442954567233718">Visiem pieprasījumiem uz serveri <ph name="ORIGIN" />, kurā ir iestatīta galvene,
+    jāpiemēro izcelsmes politika. Taču
+    galvene ir nepareizi izveidota, kas neļauj pārlūkprogrammai izpildīt
+    jūsu pieprasījumu vietnei <ph name="SITE" />. Vietņu operatori var izmantot
+    izcelsmes politikas, lai konfigurētu drošību un citus vietnes rekvizītus.</translation>
 <translation id="5386426401304769735">Šīs vietnes sertifikātu ķēdē ir iekļauts sertifikāts, kas ir parakstīts, izmantojot SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Malu sašuvums labajā pusē</translation>
@@ -1572,6 +1579,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Iespējams, savienojumu ir bloķējis ugunsmūris vai pretvīrusu programmatūra.</translation>
 <translation id="7759163816903619567">Parādāmais domēns:</translation>
+<translation id="776110834126722255">Novecojusi</translation>
 <translation id="7761701407923456692">Servera sertifikāts neatbilst URL.</translation>
 <translation id="7763386264682878361">Maksājumu manifestu parsētājs</translation>
 <translation id="7764225426217299476">Pievienot adresi</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb
index d67268a..73cda19 100644
--- a/components/strings/components_strings_mk.xtb
+++ b/components/strings/components_strings_mk.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Сѐ што ќе напишете, сите страници што ќе ги прегледате или секоја друга активност на интернет се надгледува, а содржините на сајтовите може да се променат без ваше знаење.</translation>
 <translation id="2289385804009217824">Кратење</translation>
 <translation id="2292556288342944218">Вашиот пристап на интернет е блокиран</translation>
+<translation id="2293443924986248631">Кога е вклучено, сајтовите не можат да користат колачиња за да ве следат на интернет. Функциите на некои сајтови може да не функционираат.</translation>
 <translation id="2297722699537546652">B5 (плик)</translation>
 <translation id="2300306941146563769">Не е прикачен</translation>
 <translation id="2310021320168182093">Chou 2 (плик)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Страница 1}one{Страница {COUNT}}other{Страница {COUNT}}}</translation>
 <translation id="4154664944169082762">Отпечатоци</translation>
 <translation id="4159784952369912983">Пурпурна</translation>
+<translation id="4163132590327127354">Chrome ја поедностави страницава за да биде полесна за читање.</translation>
 <translation id="4165986682804962316">Поставки на локација</translation>
 <translation id="4171400957073367226">Лош потпис за проверка</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,11 @@
 <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="5380442954567233718">Серверот каде што сте упатени, <ph name="ORIGIN" />, поставил наслов
+    што бара правилото за потекло да се применува за сите барања до него. Но,
+    насловот е лошо форматиран, што го спречува прелистувачот да го исполни
+    вашето барање за <ph name="SITE" />. Операторите на сајтови може да ги користат
+     правилата за потекло за конфигурирање на безбедноста и другите својства за сајтот.</translation>
 <translation id="5386426401304769735">Синџирот со сертификати за сајтов содржи сертификат потпишан со SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Шиење на работ десно</translation>
@@ -1575,6 +1582,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Заштитниот ѕид или антивирусниот софтвер можеби ја блокирале врската.</translation>
 <translation id="7759163816903619567">Домен на приказот:</translation>
+<translation id="776110834126722255">Неподдржано</translation>
 <translation id="7761701407923456692">Сертификатот на серверот не се совпаѓа со URL.</translation>
 <translation id="7763386264682878361">Анализатор на манифестот за плаќање</translation>
 <translation id="7764225426217299476">Додај адреса</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index 1958e62..bc88fa77 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">നിങ്ങൾ ടൈപ്പ് ചെയ്യുന്നവയും കാണുന്ന പേജുകളും വെബിലെ മറ്റ് എല്ലാ ആക്റ്റിവിറ്റികളും നിരീക്ഷിക്കപ്പെടുന്നുണ്ട്. നിങ്ങളുടെ അറിവില്ലാതെ സൈറ്റുകളിലെ ഉള്ളടക്കം മാറുകയും ചെയ്തേക്കാം.</translation>
 <translation id="2289385804009217824">ട്രിം ചെയ്യുക</translation>
 <translation id="2292556288342944218">നിങ്ങളുടെ ഇന്റർനെറ്റ് ആക്‌സസ്സ് ബ്ലോക്ക് ചെയ്‌തു</translation>
+<translation id="2293443924986248631">ഓണായിരിക്കുമ്പോൾ, വെബിലുടനീളം നിങ്ങളെ ട്രാക്ക് ചെയ്യുന്ന കുക്കികൾ ഉപയോഗിക്കാൻ സെെറ്റുകൾക്കാവില്ല. ചില സൈറ്റുകളിലെ ഫീച്ചറുകൾക്ക് പ്രവർത്തനം നടത്താനായേക്കില്ല.</translation>
 <translation id="2297722699537546652">B5 (എൻവലപ്പ്)</translation>
 <translation id="2300306941146563769">അപ്‌ലോഡ് ചെയ്‌തില്ല</translation>
 <translation id="2310021320168182093">Chou2 (എൻവലപ്പ്)</translation>
@@ -722,6 +723,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{പേജ് 1}other{പേജ് {COUNT}}}</translation>
 <translation id="4154664944169082762">ഫിംഗര്‍‌പ്രിന്‍റുകള്‍‌</translation>
 <translation id="4159784952369912983">പര്‍പ്പിള്‍</translation>
+<translation id="4163132590327127354">വായന എളുപ്പമാക്കുന്നതിന് Chrome ഈ പേജ് ലളിതമാക്കി.</translation>
 <translation id="4165986682804962316">സൈറ്റ് ക്രമീകരണങ്ങൾ</translation>
 <translation id="4171400957073367226">മോശം പരിശോധിച്ചുറപ്പിക്കൽ സിഗ്‌നേച്ചർ</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1021,6 +1023,9 @@
 <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="5380442954567233718"><ph name="ORIGIN" />, എന്നതിലേക്ക് പോകാൻ നിങ്ങൾ ഉപയോഗിക്കുന്ന സെർവർ, അതിലേക്കുള്ള എല്ലാ അഭ്യർത്ഥനകൾക്കും ഉറവിട നയം ബാധകമാക്കാൻ ആവശ്യ‌പ്പെട്ട് കൊണ്ടുള്ള ഒരു തലക്കെട്ട് സജ്ജീകരിച്ചിട്ടുണ്ട്. എന്നാൽ ശരിയായ രീതിയിൽ തലക്കെട്ട് സജ്ജീകരിക്കാത്തതിനാൽ, <ph name="SITE" /> എന്നതിനുള്ള
+നിങ്ങളുടെ അഭ്യർത്ഥന പൂർത്തീകരിക്കാൻ
+ബ്രൗസറിന് കഴിയുന്നില്ല. ഒരു സൈറ്റിന്റെ സുരക്ഷയും മറ്റ് പ്രോപ്പർട്ടികളും കോൺഫിഗർ ചെയ്യാൻ സൈറ്റ് ഓപ്പറേറ്റർമാർക്ക് ഉറവിട നയങ്ങൾ ഉപയോഗിക്കാനാവും.</translation>
 <translation id="5386426401304769735">ഈ സൈറ്റിന്റെ സർട്ടിഫിക്കറ്റ് ചെയിനിൽ SHA-1 ഉപയോഗിച്ച് സൈൻ ചെയ്‌ത ഒരു സർട്ടിഫിക്കറ്റ് അടങ്ങിയിരിക്കുന്നു.</translation>
 <translation id="538659543871111977">A4-ടാബ്</translation>
 <translation id="5396631636586785122">വലതുവശത്ത് അരിക് കൂട്ടിച്ചേർക്കൽ</translation>
@@ -1565,6 +1570,7 @@
 <translation id="7757555340166475417">ഡായ്-പാ-കായ്</translation>
 <translation id="7758069387465995638">ഫയർവാളോ ആന്റി വൈറസ് സോഫ്‌റ്റ്‌വെയറോ കണക്ഷൻ ബ്ലോക്ക് ചെയ്‌തിട്ടുണ്ടാകാം.</translation>
 <translation id="7759163816903619567">പ്രദർശിപ്പിച്ച ഡൊമെയ്ന്‍:</translation>
+<translation id="776110834126722255">ഒഴിവാക്കി</translation>
 <translation id="7761701407923456692">സെർവറിന്റെ സർട്ടിഫിക്കറ്റ് URL-മായി പൊരുത്തപ്പെടുന്നില്ല.</translation>
 <translation id="7763386264682878361">പേയ്‌മെന്റ് മാനിഫെസ്‌റ്റ് പാർസർ</translation>
 <translation id="7764225426217299476">വിലാസം ചേർക്കുക</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index bb2b7ec..02c0d278 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Apa-apa sahaja yang anda taip, sebarang halaman yang anda lihat atau sebarang aktiviti lain menerusi web sedang diperhatikan. Kandungan pada tapak boleh diubah tanpa pengetahuan anda.</translation>
 <translation id="2289385804009217824">Pangkas</translation>
 <translation id="2292556288342944218">Akses Internet anda disekat</translation>
+<translation id="2293443924986248631">Apabila pilihan ini dihidupkan, tapak tidak dapat menggunakan kuki yang menjejaki anda merentas web. Ciri pada sesetengah tapak mungkin rosak.</translation>
 <translation id="2297722699537546652">B5 (Sampul Surat)</translation>
 <translation id="2300306941146563769">Tidak dimuat naik</translation>
 <translation id="2310021320168182093">Chou2 (Sampul Surat)</translation>
@@ -730,6 +731,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Halaman 1}other{Halaman {COUNT}}}</translation>
 <translation id="4154664944169082762">Cap jari</translation>
 <translation id="4159784952369912983">Ungu</translation>
+<translation id="4163132590327127354">Chrome meringkaskan halaman ini untuk memudahkan pembacaan.</translation>
 <translation id="4165986682804962316">Tetapan tapak</translation>
 <translation id="4171400957073367226">Tandatangan pengesahan tidak sah</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1030,6 +1032,11 @@
 <translation id="536296301121032821">Gagal menyimpan tetapan dasar</translation>
 <translation id="5371425731340848620">Kemas kini kad</translation>
 <translation id="5377026284221673050">"Jam anda lambat" atau "Jam anda cepat" atau "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">Pelayan destinasi anda, <ph name="ORIGIN" />, telah menetapkan pengepala
+    yang menghendaki dasar asal dikenakan pada semua permintaan yang diterima oleh pelayan itu. Tetapi
+    pengepala tersebut telah rosak dan menghalang penyemak imbas daripada memenuhi
+    permintaan anda untuk <ph name="SITE" />. Dasar asal boleh digunakan oleh
+    pengendali tapak untuk mengkonfigurasi keselamatan dan sifat lain bagi tapak.</translation>
 <translation id="5386426401304769735">Rantaian sijil untuk tapak ini mengandungi sijil yang ditandatangani menggunakan SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Jahitan tepi kanan</translation>
@@ -1576,6 +1583,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Tembok api atau perisian antivirus mungkin telah menyekat sambungan.</translation>
 <translation id="7759163816903619567">Domain paparan:</translation>
+<translation id="776110834126722255">Ditamatkan</translation>
 <translation id="7761701407923456692">Sijil pelayan tidak sepadan dengan URL.</translation>
 <translation id="7763386264682878361">Penghurai Manifes Bayaran</translation>
 <translation id="7764225426217299476">Tambahkan alamat</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index 0a7bcc6..da11d9a 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -315,6 +315,7 @@
 <translation id="2288422996159078444">သင်ရိုက်သည့်အရာ၊ သင်ကြည့်သည့် စာမျက်နှာ သို့မဟုတ် ဝဘ်ပေါ်တွင် အခြားလုပ်ဆောင်ချက်တိုင်းကို စောင့်ကြည့်နေသည်။ ဝဘ်ဆိုက်များပေါ်ရှိ အကြောင်းအရာကို သင်မသိဘဲ ပြောင်းနိုင်သည်။</translation>
 <translation id="2289385804009217824">ဖြတ်ထုတ်ရန်</translation>
 <translation id="2292556288342944218">သင့်အင်တာနက် အသုံးပြုမှုကို ပိတ်ဆို့ထားသည်</translation>
+<translation id="2293443924986248631">ဖွင့်ထားသည့်အခါ ဝဘ်တစ်လျှောက် သင့်အားခြေရာခံသည့် ကွတ်ကီးများကို ဝဘ်ဆိုက်များက အသုံးမပြုနိုင်ပါ။ အချို့ဝဘ်ဆိုက်များပေါ်ရှိ ဝန်ဆောင်မှုများ ရပ်သွားနိုင်ပါသည်။</translation>
 <translation id="2297722699537546652">B5 (စာအိတ်)</translation>
 <translation id="2300306941146563769">အပ်လုဒ်လုပ်မထားပါ</translation>
 <translation id="2310021320168182093">Chou2 (စာအိတ်)</translation>
@@ -728,6 +729,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{စာမျက်နှာ ၁}other{စာမျက်နှာ {COUNT}}}</translation>
 <translation id="4154664944169082762">လက်ဗွေများ</translation>
 <translation id="4159784952369912983">ခရမ်း</translation>
+<translation id="4163132590327127354">ဤစာမျက်နှာကို ပိုမိုလွယ်ကူစွာ ဖတ်ရှုနိုင်ရန် Chrome က လွယ်ကူအောင်ပြုလုပ်ထားသည်။</translation>
 <translation id="4165986682804962316">ဝက်ဆိုက် ဆက်တင်များ</translation>
 <translation id="4171400957073367226">ဆိုးရွားသည့် အတည်ပြု လက်မှတ်</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,11 @@
 <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="5380442954567233718">သင်သွားနေသည့် <ph name="ORIGIN" /> ဆာဗာက ၎င်းထံတောင်းဆိုသမျှ အားလုံးသို့
+    ရင်းမြစ်မူဝါဒ ထည့်သွင်းမည်ဖြစ်ကြောင်း သတ်မှတ်ထားသည့် ခေါင်းစဉ်ကို ထည့်သွင်းလိုက်သည်။ သို့သော်
+    ခေါင်းစဉ်က ပုံစံပျက်ယွင်းနေသောကြောင့် ဘရောင်ဇာက <ph name="SITE" /> အတွက်
+    သင်၏တောင်းဆိုချက်ကို မဖြည့်ဆည်းနိုင်ပါ။ ဝဘ်ဆိုက်တစ်ခုအတွက် လုံခြုံရေးနှင့် အခြားသတ်မှတ်ချက်များကို
+    စီစဉ်သတ်မှတ်ရန် ဝဘ်ဆိုက် အော်ပရေတာများက ရင်းမြစ် မူဝါဒများကို အသုံးပြုနိုင်ပါသည်။</translation>
 <translation id="5386426401304769735">ဤဆိုက်အတွက် အသိအမှတ်ပြုလက်မှတ်ကွင်းဆက်တွင် SHA-1 ကို အသုံးပြု၍ လက်မှတ်ထိုးထားသည့် အသိအမှတ်ပြုလက်မှတ်တစ်စောင် ပါဝင်ပါသည်။</translation>
 <translation id="538659543871111977">A4-တဘ်</translation>
 <translation id="5396631636586785122">ညာဘက်အစွန်းတွင် အပ်ချည်ဖြင့်ချုပ်ရန်</translation>
@@ -1575,6 +1582,7 @@
 <translation id="7757555340166475417">ဒိုင်ပါကိုင်</translation>
 <translation id="7758069387465995638">Firewall သို့မဟုတ် ဗိုင်းရက်တိုက်ဖျက်ရေးဆော့ဝဲသည် ချိတ်ဆက်မှုကို ပိတ်ဆို့ထားခြင်း ဖြစ်နိုင်သည်။</translation>
 <translation id="7759163816903619567">ဒိုမိန်း ဖော်ပြမှု−</translation>
+<translation id="776110834126722255">ရပ်ဆိုင်းထားသည်</translation>
 <translation id="7761701407923456692">Server's certificate does not match the URL နှင့်မကိုက်ညီပါ။</translation>
 <translation id="7763386264682878361">ငွေပေးချေမှု မန်နီးဖက်စ်ပါဆာ</translation>
 <translation id="7764225426217299476">လိပ်စာများ ထည့်သွင်းပါ</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index 2cf357b..9338d39 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Alles wat je typt, pagina's die je bekijkt en andere activiteiten op internet worden in de gaten gehouden. Content op sites kan zonder jouw medeweten worden gewijzigd.</translation>
 <translation id="2289385804009217824">Bijsnijden</translation>
 <translation id="2292556288342944218">Je toegang tot internet wordt geblokkeerd</translation>
+<translation id="2293443924986248631">Als deze optie is ingeschakeld, kunnen sites geen cookies gebruiken die je volgen op internet. Functies op bepaalde sites werken mogelijk niet meer.</translation>
 <translation id="2297722699537546652">B5 (envelop)</translation>
 <translation id="2300306941146563769">Niet geüpload</translation>
 <translation id="2310021320168182093">Chou2 (envelop)</translation>
@@ -718,6 +719,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Pagina 1}other{Pagina {COUNT}}}</translation>
 <translation id="4154664944169082762">Vingerafdrukken</translation>
 <translation id="4159784952369912983">Paars</translation>
+<translation id="4163132590327127354">Chrome heeft deze pagina vereenvoudigd om deze beter leesbaar te maken.</translation>
 <translation id="4165986682804962316">Site-instellingen</translation>
 <translation id="4171400957073367226">Onjuiste verificatiehandtekening</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1017,6 +1019,7 @@
 <translation id="536296301121032821">Opslaan van beleidsinstellingen is mislukt</translation>
 <translation id="5371425731340848620">Pas updaten</translation>
 <translation id="5377026284221673050">'Je klok loopt achter', 'Je klok loopt voor' of '&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;'</translation>
+<translation id="5380442954567233718">Voor de server waar je naartoe gaat (<ph name="ORIGIN" />), is een header ingesteld die vereist dat een herkomstbeleid wordt toegepast op alle verzoeken aan de server. De header heeft echter een verkeerde indeling, waardoor de browser je verzoek voor <ph name="SITE" /> niet kan uitvoeren. Herkomstbeleidsregels kunnen worden gebruikt door site-operators om beveiliging en andere eigenschappen voor een site te configureren.</translation>
 <translation id="5386426401304769735">De certificaatketen voor deze site bevat een certificaat dat is ondertekend met SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Inbinden met nietjes rechts</translation>
@@ -1562,6 +1565,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">De verbinding is mogelijk geblokkeerd door de firewall of antivirussoftware.</translation>
 <translation id="7759163816903619567">Weergegeven domein:</translation>
+<translation id="776110834126722255">Beëindigd</translation>
 <translation id="7761701407923456692">Het servercertificaat komt niet overeen met de URL.</translation>
 <translation id="7763386264682878361">Payment Manifest Parser</translation>
 <translation id="7764225426217299476">Adres toevoegen</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index b4c2d52..f8da2d7 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Alt du skriver, alle sider du besøker, og all annen aktivitet på nettet blir overvåket. Innholdet på nettsteder kan bli endret uten at du vet om det.</translation>
 <translation id="2289385804009217824">Beskjær</translation>
 <translation id="2292556288342944218">Internett-tilgangen din er blokkert</translation>
+<translation id="2293443924986248631">Når dette er på, kan ikke nettsteder bruke informasjonskapsler som sporer deg overalt på nettet. Det kan hende at funksjoner på enkelte nettsteder slutter å fungere.</translation>
 <translation id="2297722699537546652">B5 (konvolutt)</translation>
 <translation id="2300306941146563769">Ikke lastet opp</translation>
 <translation id="2310021320168182093">Chou2 (konvolutt)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Side 1}other{Side {COUNT}}}</translation>
 <translation id="4154664944169082762">Fingeravtrykk</translation>
 <translation id="4159784952369912983">Fiolett</translation>
+<translation id="4163132590327127354">Chrome har forenklet denne siden for å gjøre den lettere å lese.</translation>
 <translation id="4165986682804962316">Nettstedsinnstillinger</translation>
 <translation id="4171400957073367226">Ugyldig bekreftelsessignatur</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,11 @@
 <translation id="536296301121032821">Kunne ikke lagre angivelsen for enhetsinnstillinger</translation>
 <translation id="5371425731340848620">Oppdater kortet</translation>
 <translation id="5377026284221673050">«Klokken går for sent», «Klokken går for fort» eller «&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;»</translation>
+<translation id="5380442954567233718">Tjeneren du er på vei til (<ph name="ORIGIN" />), har angitt et hode
+    som krever at en opphavsregel brukes for alle forespørsler som sendes til den. Men
+    hodet har feil format, og dette forhindrer nettleseren fra å utføre
+    forespørselen din til <ph name="SITE" />. Nettstedsoperatører kan bruke
+    opphavsregler til å konfigurere sikkerhet og andre egenskaper for nettsteder.</translation>
 <translation id="5386426401304769735">Sertifikatkjeden for dette nettstedet inneholder et sertifikat som er signert med SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Kantstifting høyre</translation>
@@ -1574,6 +1581,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Brannmur- eller antivirusprogramvare kan ha blokkert tilkoblingen.</translation>
 <translation id="7759163816903619567">Visningsdomene:</translation>
+<translation id="776110834126722255">Avviklet</translation>
 <translation id="7761701407923456692">Tjenerens sertifikat samsvarer ikke med nettadressen.</translation>
 <translation id="7763386264682878361">Parser for betalingsmanifest</translation>
 <translation id="7764225426217299476">Legg til adresse</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index 7dea4d7..20b71424 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Wszystko co piszesz, przeglądane przez Ciebie strony i wszelka pozostała aktywność w internecie są monitorowane. Oprócz tego bez Twojej wiedzy mogą zostać zmienione treści na stronach.</translation>
 <translation id="2289385804009217824">Przycięcie</translation>
 <translation id="2292556288342944218">Masz zablokowany dostęp do internetu</translation>
+<translation id="2293443924986248631">Gdy to ustawienie jest włączone, strony internetowe nie mogą używać plików cookie śledzących, co robisz w sieci. Funkcje niektórych witryn mogą nie działać prawidłowo.</translation>
 <translation id="2297722699537546652">B5 (koperta)</translation>
 <translation id="2300306941146563769">Nieprzesłany</translation>
 <translation id="2310021320168182093">Chou2 (koperta)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Strona 1}few{Strona {COUNT}}many{Strona {COUNT}}other{Strona {COUNT}}}</translation>
 <translation id="4154664944169082762">Odciski cyfrowe</translation>
 <translation id="4159784952369912983">Purpurowy</translation>
+<translation id="4163132590327127354">Strona została uproszczona przez Chrome, by była bardziej czytelna.</translation>
 <translation id="4165986682804962316">Ustawienia witryn</translation>
 <translation id="4171400957073367226">Nieprawidłowy podpis weryfikujący</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,7 @@
 <translation id="536296301121032821">Zapisanie ustawień zasady nie powiodło się</translation>
 <translation id="5371425731340848620">Zaktualizuj dane karty</translation>
 <translation id="5377026284221673050">„Twój zegar się spóźnia” lub „Twój zegar się śpieszy” lub „&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;”</translation>
+<translation id="5380442954567233718">Serwer <ph name="ORIGIN" />, z którym chcesz się połączyć, ma ustawiony nagłówek z wymaganiem, by do wszystkich kierowanych do niego żądań stosować zasadę dotyczącą źródła. Jednak ten nagłówek ma nieprawidłowy format, przez co przeglądarka nie może spełnić Twojego żądania dotyczącego strony <ph name="SITE" />. Zasady dotyczące źródła mogą stosować operatorzy stron internetowych, by skonfigurować zabezpieczenia i inne właściwości strony.</translation>
 <translation id="5386426401304769735">Łańcuch certyfikatów tej witryny zawiera certyfikat podpisany za pomocą SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Zszywanie przy prawej krawędzi</translation>
@@ -1575,6 +1578,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Połączenie mogło zostać zablokowane przez zaporę sieciową lub program antywirusowy.</translation>
 <translation id="7759163816903619567">Wyświetlana domena:</translation>
+<translation id="776110834126722255">Wycofane</translation>
 <translation id="7761701407923456692">Certyfikat serwera jest niezgodny z adresem URL.</translation>
 <translation id="7763386264682878361">Parser pliku manifestu dla płatności</translation>
 <translation id="7764225426217299476">Dodaj adres</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 3bc484d4..ab9fe845 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Tudo o que é digitado, as páginas que são acessadas e qualquer outra atividade na Web está sendo monitorado, e o conteúdo dos sites pode mudar sem que você saiba.</translation>
 <translation id="2289385804009217824">Cortar</translation>
 <translation id="2292556288342944218">O seu acesso à Internet está bloqueado</translation>
+<translation id="2293443924986248631">Quando ativado, os sites não podem usar cookies que rastreiem você pela Web. Os recursos de alguns sites podem falhar.</translation>
 <translation id="2297722699537546652">B5 (Envelope)</translation>
 <translation id="2300306941146563769">Não enviado</translation>
 <translation id="2310021320168182093">Chou2 (Envelope)</translation>
@@ -723,6 +724,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Página 1}one{Página {COUNT}}other{Página {COUNT}}}</translation>
 <translation id="4154664944169082762">Assinaturas digitais</translation>
 <translation id="4159784952369912983">Roxo</translation>
+<translation id="4163132590327127354">O Chrome simplificou esta página para facilitar a leitura.</translation>
 <translation id="4165986682804962316">Configurações do site</translation>
 <translation id="4171400957073367226">Assinatura de verificação inválida</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1022,6 +1024,7 @@
 <translation id="536296301121032821">Falha ao armazenar as configurações da política</translation>
 <translation id="5371425731340848620">Atualizar cartão</translation>
 <translation id="5377026284221673050">"Seu relógio está atrasado", "Seu relógio está adiantado" ou "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">O servidor que você acessará, <ph name="ORIGIN" />, definiu um cabeçalho solicitando que uma política de origem seja aplicada a todas as solicitações. No entanto, o cabeçalho está incorreto, o que impede que o navegador realize a solicitação para <ph name="SITE" />. Políticas de origem podem ser usadas por operadores para configurar a segurança e outras propriedades de um site.</translation>
 <translation id="5386426401304769735">A cadeia de certificados desse site contém um certificado assinado usando SHA-1.</translation>
 <translation id="538659543871111977">A4 Tab</translation>
 <translation id="5396631636586785122">Costura no lado direito</translation>
@@ -1568,6 +1571,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">É possível que o software antivírus ou o firewall tenha bloqueado a conexão.</translation>
 <translation id="7759163816903619567">Domínio de exibição:</translation>
+<translation id="776110834126722255">Uso suspenso</translation>
 <translation id="7761701407923456692">O certificado do servidor não é compatível com o URL.</translation>
 <translation id="7763386264682878361">Analisador de manifesto de pagamento</translation>
 <translation id="7764225426217299476">Adicionar endereço</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 01a9bf1..249872f0 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Tot ceea ce tastezi, paginile pe care le afișezi și orice altă activitate de pe web este urmărită. Conținutul site-urilor poate fi modificat fără știrea ta.</translation>
 <translation id="2289385804009217824">Decupare</translation>
 <translation id="2292556288342944218">Accesul la internet este blocat</translation>
+<translation id="2293443924986248631">Dacă opțiunea este activată, site-urile nu pot folosi cookie-uri care te urmăresc pe web. Este posibil ca funcțiile de pe anumite site-uri să fie întrerupte.</translation>
 <translation id="2297722699537546652">B5 (Plic)</translation>
 <translation id="2300306941146563769">Nu s-a încărcat</translation>
 <translation id="2310021320168182093">Chou2 (Plic)</translation>
@@ -727,6 +728,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Pagina 1}few{Pagina {COUNT}}other{Pagina {COUNT}}}</translation>
 <translation id="4154664944169082762">Amprente digitale</translation>
 <translation id="4159784952369912983">Mov</translation>
+<translation id="4163132590327127354">Chrome a simplificat această pagină pentru a fi mai ușor de citit.</translation>
 <translation id="4165986682804962316">Setări pentru site-uri</translation>
 <translation id="4171400957073367226">Semnătură de verificare nevalidă</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1027,6 +1029,11 @@
 <translation id="536296301121032821">Setările pentru politică nu au putut fi stocate</translation>
 <translation id="5371425731340848620">Actualizează cardul</translation>
 <translation id="5377026284221673050">„Ora este setată în trecut”, „Ora este setată în viitor” sau „&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;”</translation>
+<translation id="5380442954567233718">Serverul pe care dorești să îl accesezi, <ph name="ORIGIN" />, a setat un antet care solicită
+    ca o politică de origine să fie aplicată tuturor solicitărilor către el. Dar
+    antetul este deteriorat, ceea ce împiedică browserul să îți îndeplinească
+    solicitarea pentru <ph name="SITE" />. Politicile de origine pot fi folosite de
+    operatorii de site pentru a configura securitatea și alte proprietăți ale site-ului.</translation>
 <translation id="5386426401304769735">Lanțul de certificate pentru acest site conține un certificat semnat folosind SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Broșare pe marginea din dreapta</translation>
@@ -1573,6 +1580,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Este posibil ca firewallul sau software-ul antivirus să fi blocat conexiunea.</translation>
 <translation id="7759163816903619567">Domeniu afișat:</translation>
+<translation id="776110834126722255">Învechită</translation>
 <translation id="7761701407923456692">Certificatul serverului nu se potrivește cu adresa URL.</translation>
 <translation id="7763386264682878361">Parser pentru manifestul plății</translation>
 <translation id="7764225426217299476">Adaugă o adresă</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index a17bd4f..b5fc676 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Akýkoľvek zadaný text, zobrazené stránky aj všetka ďalšia aktivita na webe sú sledované. Obsah na weboch môže byť bez vášho vedomia zmenený.</translation>
 <translation id="2289385804009217824">Orezať</translation>
 <translation id="2292556288342944218">Váš prístup k internetu je blokovaný</translation>
+<translation id="2293443924986248631">Keď toto nastavenie zapnete, weby nebudú môcť používať súbory cookie, ktoré vás sledujú na internete. Funkcie na niektorých weboch môžu zlyhávať.</translation>
 <translation id="2297722699537546652">B5 (obálka)</translation>
 <translation id="2300306941146563769">Nenahrané</translation>
 <translation id="2310021320168182093">Chou2 (obálka)</translation>
@@ -719,6 +720,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{1. strana}few{{COUNT}. strana}many{{COUNT}. strana}other{{COUNT}. strana}}</translation>
 <translation id="4154664944169082762">Odtlačky</translation>
 <translation id="4159784952369912983">Purpurová</translation>
+<translation id="4163132590327127354">Chrome zjednodušil túto stránku, aby sa dala ľahšie prečítať.</translation>
 <translation id="4165986682804962316">Nastavenia webu</translation>
 <translation id="4171400957073367226">Nesprávny overovací podpis</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1018,6 +1020,7 @@
 <translation id="536296301121032821">Nastavenia pravidla sa nepodarilo uložiť</translation>
 <translation id="5371425731340848620">Aktualizujte si kartu</translation>
 <translation id="5377026284221673050">„Vaše hodiny meškajú“, „Vaše hodiny idú dopredu“ alebo „&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;“</translation>
+<translation id="5380442954567233718">Server <ph name="ORIGIN" />, na ktorý prechádzate, nastavil hlavičku, ktorá požaduje, aby sa na všetky žiadosti odoslané na server vzťahovalo pravidlo pre zdroj. Hlavička má však nesprávny tvar a prehliadač preto nemôže vašej žiadosti pre web <ph name="SITE" /> vyhovieť. Pomocou pravidiel pre zdroj môžu operátori webu nakonfigurovať zabezpečenie a ďalšie vlastnosti webu.</translation>
 <translation id="5386426401304769735">Reťazec certifikátu pre tento web obsahuje certifikát podpísaný pomocou funkcie SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Zošiť hrebeňovou väzbou vpravo</translation>
@@ -1563,6 +1566,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Pripojenie mohla zablokovať brána firewall alebo antivírusový softvér.</translation>
 <translation id="7759163816903619567">Zobrazená doména:</translation>
+<translation id="776110834126722255">Ukončená podpora</translation>
 <translation id="7761701407923456692">Certifikát servera sa nezhoduje s webovou adresou.</translation>
 <translation id="7763386264682878361">Analyzátor manifestov platieb</translation>
 <translation id="7764225426217299476">Pridať adresu</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index cd41e526..b38eb83a 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Vse, kar vnesete, vse spletne strani, ki si jih ogledate, in vsa dejavnost v spletu se nadzorujejo. Vsebino na spletnih mestih je mogoče spremeniti brez vaše vednosti.</translation>
 <translation id="2289385804009217824">Obrezovanje</translation>
 <translation id="2292556288342944218">Internetni dostop je blokiran</translation>
+<translation id="2293443924986248631">Ko je to omogočeno, vam spletna mesta ne morejo slediti po spletu na podlagi piškotkov. Funkcije na nekaterih spletnih mestih morda ne bodo delovale.</translation>
 <translation id="2297722699537546652">B5 (Envelope)</translation>
 <translation id="2300306941146563769">Ni naloženo</translation>
 <translation id="2310021320168182093">Chou2 (Envelope)</translation>
@@ -729,6 +730,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{1. stran}one{{COUNT}. stran}two{{COUNT}. stran}few{{COUNT}. stran}other{{COUNT}. stran}}</translation>
 <translation id="4154664944169082762">Prstni odtisi</translation>
 <translation id="4159784952369912983">Vijolična</translation>
+<translation id="4163132590327127354">Chrome je prilagodil to stran za lažje branje.</translation>
 <translation id="4165986682804962316">Nastavitve spletnega mesta</translation>
 <translation id="4171400957073367226">Neveljavni podpis za preverjanje</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1029,6 +1031,11 @@
 <translation id="536296301121032821">Nastavitev pravilnika ni bilo mogoče shraniti</translation>
 <translation id="5371425731340848620">Posodobite kartico</translation>
 <translation id="5377026284221673050">Ura zaostaja« ali »Ura prehiteva« ali »&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;«</translation>
+<translation id="5380442954567233718">Strežnik, na katerega greste, <ph name="ORIGIN" />, je nastavil glavo,
+    ki zahteva, da se za vse zahteve, ki so mu poslane, uporabi pravilnik o izvoru. Vendar
+    je glava popačena, zaradi česar brskalnik ne more
+    izpolniti vaše zahteve za <ph name="SITE" />. Pravilnike izvora lahko uporabljajo
+    ponudniki spletnih mest zaradi konfiguriranja varnosti in drugih lastnosti spletnega mesta.</translation>
 <translation id="5386426401304769735">Veriga potrdil za to spletno mesto vsebuje potrdilo, podpisano z algoritmom SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Robni šiv na desni</translation>
@@ -1575,6 +1582,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Povezavo je morda blokiral požarni zid ali protivirusni program.</translation>
 <translation id="7759163816903619567">Prikaz domene:</translation>
+<translation id="776110834126722255">Zastarelo</translation>
 <translation id="7761701407923456692">Potrdilo strežnika se ne ujema z URL-jem.</translation>
 <translation id="7763386264682878361">Razčlenjevalnik manifesta plačil</translation>
 <translation id="7764225426217299476">Dodaj naslov</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index 8de8258..5f40229 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Chochote unachochapa, kurasa zozote unazoangalia au shughuli nyingine zozote kwenye wavuti zinafuatiliwa. Maudhui kwenye tovuti yanaweza kubadilishwa bila kukujulisha.</translation>
 <translation id="2289385804009217824">Punguza</translation>
 <translation id="2292556288342944218">Ufikiaji wako wa intaneti umezuiwa</translation>
+<translation id="2293443924986248631">Ikiwashwa, tovuti haziwezi kutumia vidakuzi vinavyokufuatilia kwenye wavuti. Huenda vipengele kwenye baadhi ya tovuti vikakosa kufanya kazi.</translation>
 <translation id="2297722699537546652">B5 (Bahasha)</translation>
 <translation id="2300306941146563769">Haikupakiwa</translation>
 <translation id="2310021320168182093">Chou2 (Bahasha)</translation>
@@ -727,6 +728,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Ukurasa wa kwanza}other{Ukurasa wa {COUNT}}}</translation>
 <translation id="4154664944169082762">Alazama za Vidole</translation>
 <translation id="4159784952369912983">Zambarau</translation>
+<translation id="4163132590327127354">Chrome imerahisisha ukurasa huu ili kuufanya usomeke kwa urahisi.</translation>
 <translation id="4165986682804962316">Mipangilio ya tovuti</translation>
 <translation id="4171400957073367226">Sahihi mbaya ya uthibitishaji</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1026,6 +1028,10 @@
 <translation id="536296301121032821">Imeshindwa kuhifadhi mipangilio ya sera</translation>
 <translation id="5371425731340848620">Badilisha maelezo ya kadi</translation>
 <translation id="5377026284221673050">"Saa yako iko nyuma" au "Saa yako iko mbele" au "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">Seva ambako unaenda, <ph name="ORIGIN" />, ina mada
+    inayotaka sera ya asili itumike katika maombi yote inayopokea. Lakini
+    mada si sahihi, hali inayozuia kivinjari kisitekeleze
+    ombi lako la <ph name="SITE" />. Sera za asili zinaweza kutumiwa na wahudumu wa tovuti ili kuweka mipangilio ya usalama na sifa nyingine za tovuti.</translation>
 <translation id="5386426401304769735">Msururu wa cheti wa tovuti hii una cheti kilichotiwa sahihi kwa kutumia SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Shona ncha ya kulia</translation>
@@ -1570,6 +1576,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Huenda muunganisho huu umezuiwa na kinga mtandao au kingavirusi.</translation>
 <translation id="7759163816903619567">Onyesha kikoa:</translation>
+<translation id="776110834126722255">Haitumiki</translation>
 <translation id="7761701407923456692">Cheti cha seva hakilingani na URL.</translation>
 <translation id="7763386264682878361">Kichanganuzi cha Faili za Maelezo ya Malipo</translation>
 <translation id="7764225426217299476">Ongeza anwani</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index e72b199..698c482a 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -600,6 +600,7 @@
 <translation id="3587738293690942763">మధ్యలో</translation>
 <translation id="3592413004129370115">ఇటాలియన్ (ఎన్వలప్)</translation>
 <translation id="3600246354004376029"><ph name="TITLE" />, <ph name="DOMAIN" />, <ph name="TIME" /></translation>
+<translation id="3603507503523709">మీ నిర్వాహకుడు యాప్‌ను బ్లాక్ చేశారు</translation>
 <translation id="3608932978122581043">ఫీడ్ ఓరియంటేషన్</translation>
 <translation id="3614103345592970299">పరిమాణం 2</translation>
 <translation id="361438452008624280">జాబితా నమోదు "<ph name="LANGUAGE_ID" />": తెలియని లేదా మద్దతు లేని భాష.</translation>
@@ -854,6 +855,7 @@
 <translation id="467662567472608290">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రంలో లోపాలు ఉన్నాయి. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation>
 <translation id="4677585247300749148">యాక్సెసిబిలిటీ ఈవెంట్‌లకు <ph name="URL" /> ప్రతిస్పందించాలని అనుకుంటోంది</translation>
 <translation id="467809019005607715">Google స్లయిడ్‌లు</translation>
+<translation id="4680804919228900307">మీరు మోసపూరితమైన సైట్‌లో మీ పాస్‌వర్డ్‌ను ఎంటర్ చేశారు. <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" />, ఇతర సైట్‌లలో ప్రస్తుతం మీరు ఎక్కడైతే ఈ పాస్‌వర్డ్‌ను ఉపయోగిస్తారో, అక్కడ మీ సేవ్ చేసిన పాస్‌వర్డ్‌లను తనిఖీ చేసుకోమని Chromium సిఫార్సు చేస్తోంది.</translation>
 <translation id="4690462567478992370">చెల్లని ప్రమాణపత్రాన్ని ఉపయోగించడాన్ని ఆపివేయి</translation>
 <translation id="4691835149146451662">ఆర్కిటెక్చర్-A (ఎన్వలప్)</translation>
 <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation>
@@ -1019,8 +1021,10 @@
 <translation id="5329858041417644019">మీ బ్రౌజర్ నిర్వహించబడటం లేదు</translation>
 <translation id="5332219387342487447">షిప్పింగ్ పద్ధతి</translation>
 <translation id="5334013548165032829">వివరణాత్మక సిస్టమ్ లాగ్‌లు</translation>
+<translation id="5340250774223869109">యాప్ బ్లాక్ చేయబడింది</translation>
 <translation id="534295439873310000">NFC పరికరాలు</translation>
 <translation id="5344579389779391559">ఈ పేజీ మీకు డబ్బు ఛార్జీ చేయడానికి ప్రయత్నించవచ్చు</translation>
+<translation id="5346336634660260557">క్లిప్‌బోర్డ్‌లోని కంటెంట్‌తో సహా Chromeలో మీరు డౌన్‌లోడ్ లేదా అప్‌లోడ్ చేసే ఫైల్స్‌ను స్కాన్ చేస్తుంది.</translation>
 <translation id="5355557959165512791"><ph name="SITE" /> యొక్క ప్రమాణపత్రం రద్దు చేయబడినందున మీరు ప్రస్తుతం దీన్ని సందర్శించలేరు. నెట్‌వర్క్ లోపాలు మరియు దాడులు సాధారణంగా తాత్కాలికమే, కనుక ఈ పేజీ తర్వాత పని చేయవచ్చు.</translation>
 <translation id="536296301121032821">విధాన సెట్టింగ్‌లను నిల్వ చేయడంలో విఫలమైంది</translation>
 <translation id="5371425731340848620">కార్డ్‌ని అప్‌డేట్ చేయండి</translation>
@@ -1431,6 +1435,7 @@
 <translation id="7219179957768738017">కనెక్షన్ <ph name="SSL_VERSION" />ని ఉపయోగిస్తుంది.</translation>
 <translation id="7220786058474068424">ప్రాసెస్ చేస్తోంది</translation>
 <translation id="7221855153210829124">నోటిఫికేషన్‌లను చూపాలనుకుంటోంది</translation>
+<translation id="7229659723041939809">మీరు మోసపూరితమైన సైట్‌లో మీ పాస్‌వర్డ్‌ను ఎంటర్ చేశారు. <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" />, ఇతర సైట్‌లలో ప్రస్తుతం మీరు ఎక్కడైతే ఈ పాస్‌వర్డ్‌ను ఉపయోగిస్తారో, అక్కడ మీ సేవ్ చేసిన పాస్‌వర్డ్‌లను తనిఖీ చేసుకోమని Chrome సిఫార్సు చేస్తోంది.</translation>
 <translation id="7233592378249864828">ప్రింట్ చేయడాన్ని నిర్ధారించే షీట్</translation>
 <translation id="7238585580608191973">SHA-256 వేలిముద్ర</translation>
 <translation id="7240120331469437312">సర్టిఫికెట్ విషయ ప్రత్యామ్నాయ పేరు</translation>
@@ -1498,6 +1503,7 @@
 <translation id="7485870689360869515">డేటా కనుగొనబడలేదు.</translation>
 <translation id="7495290002932347110">సైట్ లేదా యాప్‌లో జరిగిన డేటా ఉల్లంఘన వల్ల మీ పాస్‌వర్డ్ బహిర్గతం అయింది. సేవ్ చేసిన మీ పాస్‌వర్డ్‌లను చెక్ చేయాల‌ని, ఇప్పుడే <ph name="ORIGIN" />లో మీ పాస్‌వర్డ్‌ను మార్చాల‌ని Chrome సూచిస్తోంది.</translation>
 <translation id="7498234416455752244">సవరణను కొనసాగించు</translation>
+<translation id="7503664977220660814">మీరు మోసపూరితమైన సైట్‌లో మీ పాస్‌వర్డ్‌ను ఎంటర్ చేశారు. <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, ఇతర సైట్‌లలో ప్రస్తుతం మీరు ఎక్కడైతే ఈ పాస్‌వర్డ్‌ను ఉపయోగిస్తారో, అక్కడ మీ సేవ్ చేసిన పాస్‌వర్డ్‌లను తనిఖీ చేసుకోమని Chromium సిఫార్సు చేస్తోంది.</translation>
 <translation id="7508255263130623398">అందించబడిన విధాన పరికర id ఖాళీగా ఉంది లేదా ప్రస్తుత పరికర idకి సరిపోలలేదు</translation>
 <translation id="7508870219247277067">వెన్నపండు ఆకుపచ్చ</translation>
 <translation id="7511955381719512146">మీరు ఉపయోగిస్తున్న Wi-Fiకు మీరు<ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />ను సందర్శించడం అవసరం.</translation>
@@ -1573,6 +1579,7 @@
 <translation id="7763386264682878361">చెల్లింపు మానిఫెస్ట్ అన్వయ ప్రక్రియ</translation>
 <translation id="7764225426217299476">చిరునామాను జోడించు</translation>
 <translation id="7766518757692125295">స్కర్ట్</translation>
+<translation id="7767271804335921384">మీ నిర్వాహకుడు యాప్‌ను బ్లాక్ చేశారు</translation>
 <translation id="7770259615151589601">పొడవుగా నిర్దేశించబడింది</translation>
 <translation id="7773005668374414287">ఒకే క్రమంలో ఉన్న ఫేస్ అప్</translation>
 <translation id="777702478322588152">అధికారిక నివాసం</translation>
@@ -1593,6 +1600,7 @@
 <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
 <translation id="7862185352068345852">సైట్ నుండి నిష్క్రమించాలా?</translation>
 <translation id="7865448901209910068">ఉత్తమ వేగం</translation>
+<translation id="7874263914261512992">మీరు మోసపూరితమైన సైట్‌లో మీ పాస్‌వర్డ్‌ను ఎంటర్ చేశారు. <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, ఇతర సైట్‌లలో ప్రస్తుతం మీరు ఎక్కడైతే ఈ పాస్‌వర్డ్‌ను ఉపయోగిస్తారో, అక్కడ మీ సేవ్ చేసిన పాస్‌వర్డ్‌లను తనిఖీ చేసుకోమని Chrome సిఫార్సు చేస్తోంది.</translation>
 <translation id="7878562273885520351">మీ పాస్‌వర్డ్ ఎవరికైనా తెలిసిపోయి ఉండవచ్చు</translation>
 <translation id="7882421473871500483">గోధుమ రంగు</translation>
 <translation id="7887683347370398519">మీ CVCని తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి</translation>
@@ -1729,6 +1737,7 @@
 <translation id="8474910779563686872">డెవలపర్ వివరాలను చూపు</translation>
 <translation id="8479754468255770962">ఎడమవైపు దిగువ భాగంలో స్టేపుల్</translation>
 <translation id="8483780878231876732">మీ Google ఖాతా నుండి కార్డ్‌లను ఉపయోగించేందుకు, Chromeకు సైన్ ఇన్ చేయండి</translation>
+<translation id="8485393050551136813">మీరు మోసపూరితమైన సైట్‌లో మీ పాస్‌వర్డ్‌ను ఎంటర్ చేశారు. <ph name="WEBSITE_1" />, ఇతర సైట్‌లలో ప్రస్తుతం మీరు ఎక్కడైతే ఈ పాస్‌వర్డ్‌ను ఇప్పుడు ఉపయోగిస్తారో, అక్కడ మీ సేవ్ చేసిన పాస్‌వర్డ్‌లను తనిఖీ చేసుకోమని Chromium సిఫార్సు చేస్తోంది.</translation>
 <translation id="8488350697529856933">వీటికి వర్తిస్తుంది</translation>
 <translation id="8490137692873530638">స్టాకర్ 10</translation>
 <translation id="8498891568109133222"><ph name="HOST_NAME" /> ప్రతిస్పందించడానికి చాలా ఎక్కువ సమయం పట్టింది.</translation>
@@ -1778,6 +1787,7 @@
 <translation id="87601671197631245">ఈ సైట్ ఉపయోగిస్తున్న భద్రతా కాన్ఫిగరేషన్ గడువు ముగిసింది, దీని వలన మీరు మీ సమాచారాన్ని (ఉదాహరణకు, పాస్‌వర్డ్‌లు, మెసేజ్‌లు లేదా క్రెడిట్ కార్డ్‌లు) ఈ సైట్‌కు పంపించినప్పుడు అది బహిర్గతం అవ్వవచ్చు.</translation>
 <translation id="8761567432415473239">Google సురక్షిత బ్రౌజింగ్ ఇటీవల <ph name="SITE" />లో <ph name="BEGIN_LINK" />హానికర ప్రోగ్రామ్‍లను కనుగొనింది<ph name="END_LINK" />.</translation>
 <translation id="8763927697961133303">USB పరికరం</translation>
+<translation id="8774457497170244317">మీరు మోసపూరితమైన సైట్‌లో మీ పాస్‌వర్డ్‌ను ఎంటర్ చేశారు. <ph name="WEBSITE_1" />, ఇతర సైట్‌లలో ప్రస్తుతం మీరు ఎక్కడైతే ఈ పాస్‌వర్డ్‌ను ఉపయోగిస్తారో, అక్కడ మీ సేవ్ చేసిన పాస్‌వర్డ్‌లను తనిఖీ చేసుకోమని Chrome సిఫార్సు చేస్తోంది.</translation>
 <translation id="877985182522063539">A4</translation>
 <translation id="8790007591277257123">&amp;తొలగించడాన్ని పునరావృతం చేయి</translation>
 <translation id="8792621596287649091">మీరు మీ <ph name="ORG_NAME" /> ఖాతాకు యాక్సెస్‌ను కోల్పోవచ్చు. లేదా గుర్తింపు స‌మాచారం చోరీకి గురి కావచ్చు. మీ పాస్‌వర్డ్‌ను ఇప్పుడే రీసెట్ చేయాల్సిందిగా Chromium సిఫార్సు చేస్తోంది.</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 3255ccc..b4cebf3 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">มีการสอดแนมทุกอย่างที่คุณพิมพ์ หน้าที่คุณเข้าชม หรือกิจกรรมอื่นใดที่คุณทำในหน้าเว็บ อาจมีการเปลี่ยนแปลงเนื้อหาในเว็บไซต์โดยไม่แจ้งให้คุณทราบ</translation>
 <translation id="2289385804009217824">ตัด</translation>
 <translation id="2292556288342944218">การเข้าถึงอินเทอร์เน็ตของคุณถูกบล็อก</translation>
+<translation id="2293443924986248631">เมื่อเปิดใช้ เว็บไซต์ต่างๆ จะใช้คุกกี้ที่ติดตามคุณในอินเทอร์เน็ตไม่ได้ ฟีเจอร์ในเว็บไซต์บางแห่งอาจใช้งานไม่ได้</translation>
 <translation id="2297722699537546652">B5 (ซองจดหมาย)</translation>
 <translation id="2300306941146563769">ไม่ได้อัปโหลด</translation>
 <translation id="2310021320168182093">Chou2 (ซองจดหมาย)</translation>
@@ -722,6 +723,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{หน้า 1}other{หน้า {COUNT}}}</translation>
 <translation id="4154664944169082762">ลายนิ้วมือ</translation>
 <translation id="4159784952369912983">ม่วง</translation>
+<translation id="4163132590327127354">Chrome ทำให้หน้านี้อ่านง่ายขึ้น</translation>
 <translation id="4165986682804962316">การตั้งค่าเว็บไซต์</translation>
 <translation id="4171400957073367226">ลายเซ็นยืนยันไม่ถูกต้อง</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1021,6 +1023,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="5380442954567233718">เซิร์ฟเวอร์ที่คุณกำลังจะเข้าถึง <ph name="ORIGIN" /> ได้ตั้งค่าส่วนหัวที่กำหนดให้บังคับใช้นโยบายดั้งเดิมกับคำขอทั้งหมดที่จะส่งถึงเซิร์ฟเวอร์ แต่ส่วนหัวดังกล่าวมีรูปแบบที่ไม่ถูกต้อง ซึ่งทำให้เบราว์เซอร์ดำเนินการตามคำขอของคุณสำหรับ <ph name="SITE" /> ไม่ได้ ผู้ให้บริการเว็บไซต์อาจใช้นโยบายดั้งเดิมในการกำหนดค่าความปลอดภัยและคุณสมบัติอื่นๆ ของเว็บไซต์</translation>
 <translation id="5386426401304769735">กลุ่มใบรับรองสำหรับเว็บไซต์นี้มีใบรับรองที่ลงนามโดยใช้ SHA-1</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">เย็บขอบด้านขวา</translation>
@@ -1567,6 +1570,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">ไฟร์วอลล์หรือซอฟต์แวร์ป้องกันไวรัสอาจบล็อกการเชื่อมต่อนี้</translation>
 <translation id="7759163816903619567">โดเมนที่แสดง:</translation>
+<translation id="776110834126722255">เลิกใช้งาน</translation>
 <translation id="7761701407923456692">ใบรับรองของเซิร์ฟเวอร์ไม่ตรงกับ URL</translation>
 <translation id="7763386264682878361">โปรแกรมแยกวิเคราะห์ไฟล์ Manifest ของการชำระเงิน</translation>
 <translation id="7764225426217299476">เพิ่มที่อยู่</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 4e8b6e8a..3ce1cce7 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Усі дані, що ви вводите, сторінки, які переглядаєте, або інші дії в Інтернеті відстежуються, а контент на сайтах може змінюватися без вашого відома.</translation>
 <translation id="2289385804009217824">Обрізати</translation>
 <translation id="2292556288342944218">Ваш доступ до Інтернету заблоковано</translation>
+<translation id="2293443924986248631">Якщо цей параметр увімкнено, сайти не можуть використовувати файли cookie, через які відстежуються ваші дії в Інтернеті. Функції на деяких сайтах можуть не працювати.</translation>
 <translation id="2297722699537546652">B5 (конверт)</translation>
 <translation id="2300306941146563769">Не завантажено</translation>
 <translation id="2310021320168182093">Chou2 (конверт)</translation>
@@ -723,6 +724,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Сторінка 1}one{Сторінка {COUNT}}few{Сторінка {COUNT}}many{Сторінка {COUNT}}other{Сторінка {COUNT}}}</translation>
 <translation id="4154664944169082762">Відбитки</translation>
 <translation id="4159784952369912983">Пурпуровий</translation>
+<translation id="4163132590327127354">Веб-переглядач Chrome зробив цю сторінку простішою для читання.</translation>
 <translation id="4165986682804962316">Налаштування сайту</translation>
 <translation id="4171400957073367226">Недійсний підпис для підтвердження</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" />, <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1022,6 +1024,11 @@
 <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="5380442954567233718">Для сервера, на який ви переходите (<ph name="ORIGIN" />), вибрано заголовок,
+    який вимагає застосовувати правило джерела до всіх запитів, які йому надсилаються. Однак
+    структура заголовка неправильна, тому веб-переглядач не може виконати
+    ваш запит для сайту <ph name="SITE" />. Оператори можуть використовувати
+    правило джерела, щоб налаштувати захист та інші ресурси сайту.</translation>
 <translation id="5386426401304769735">Ланцюжок сертифіката цього сайту містить сертифікат, підписаний за допомогою SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Зшити вздовж правого краю</translation>
@@ -1568,6 +1575,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Можливо, брандмауер або антивірусна програма заблокували з’єднання.</translation>
 <translation id="7759163816903619567">Видимий домен:</translation>
+<translation id="776110834126722255">Не підтримується</translation>
 <translation id="7761701407923456692">Сертифікат сервера не відповідає URL-адресі.</translation>
 <translation id="7763386264682878361">Синтаксичний аналізатор маніфесту платежу</translation>
 <translation id="7764225426217299476">Додати адресу</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index cb88d30..383c7dd 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -600,6 +600,7 @@
 <translation id="3587738293690942763">Ở giữa</translation>
 <translation id="3592413004129370115">Italian (Phong bì)</translation>
 <translation id="3600246354004376029"><ph name="TITLE" />, <ph name="DOMAIN" />, <ph name="TIME" /></translation>
+<translation id="3603507503523709">Quản trị viên đã chặn ứng dụng</translation>
 <translation id="3608932978122581043">Hướng nạp giấy</translation>
 <translation id="3614103345592970299">Kích thước 2</translation>
 <translation id="361438452008624280">Mục nhập danh sách "<ph name="LANGUAGE_ID" />": Ngôn ngữ không xác định hoặc không được hỗ trợ.</translation>
@@ -854,6 +855,7 @@
 <translation id="467662567472608290">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 có lỗi. Điều này có thể do định cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn.</translation>
 <translation id="4677585247300749148"><ph name="URL" /> muốn phản hồi các sự kiện trợ năng</translation>
 <translation id="467809019005607715">Google Trang trình bày</translation>
+<translation id="4680804919228900307">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation>
 <translation id="4690462567478992370">Dừng sử dụng chứng chỉ không hợp lệ</translation>
 <translation id="4691835149146451662">Architecture-A (Phong bì)</translation>
 <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation>
@@ -1019,8 +1021,10 @@
 <translation id="5329858041417644019">Trình duyệt của bạn không được quản lý</translation>
 <translation id="5332219387342487447">Phương thức giao hàng</translation>
 <translation id="5334013548165032829">Nhật ký hệ thống chi tiết</translation>
+<translation id="5340250774223869109">Đã chặn ứng dụng</translation>
 <translation id="534295439873310000">Thiết bị dùng công nghệ NFC</translation>
 <translation id="5344579389779391559">Trang này có thể tìm cách tính phí bạn</translation>
+<translation id="5346336634660260557">Quét nội dung trong khay nhớ tạm cũng như các tệp bạn tải xuống hoặc tải lên Chrome.</translation>
 <translation id="5355557959165512791">Bạn không thể truy cập vào <ph name="SITE" /> ngay bây giờ vì chứng chỉ của trang này đã bị thu hồi. Lỗi mạng và các cuộc tấn công mạng thường chỉ là tạm thời nên trang này có thể sẽ hoạt động lại sau.</translation>
 <translation id="536296301121032821">Không thể lưu trữ cài đặt chính sách</translation>
 <translation id="5371425731340848620">Cập nhật thẻ</translation>
@@ -1431,6 +1435,7 @@
 <translation id="7219179957768738017">Kết nối sử dụng <ph name="SSL_VERSION" />.</translation>
 <translation id="7220786058474068424">Đang xử lý</translation>
 <translation id="7221855153210829124">Hiển thị thông báo</translation>
+<translation id="7229659723041939809">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation>
 <translation id="7233592378249864828">In tờ xác nhận</translation>
 <translation id="7238585580608191973">SHA-256 Fingerprint</translation>
 <translation id="7240120331469437312">Tên Thay thế Đối tượng của Chứng chỉ</translation>
@@ -1498,6 +1503,7 @@
 <translation id="7485870689360869515">Không tìm thấy dữ liệu.</translation>
 <translation id="7495290002932347110">Một sự cố rò rỉ dữ liệu xảy ra trên một trang web hoặc ứng dụng đã làm lộ mật khẩu của bạn. Bạn nên kiểm tra các mật khẩu đã lưu và đổi mật khẩu dùng trên <ph name="ORIGIN" /> ngay bây giờ.</translation>
 <translation id="7498234416455752244">Tiếp tục chỉnh sửa</translation>
+<translation id="7503664977220660814">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation>
 <translation id="7508255263130623398">ID thiết bị thuộc chính sách trả lại trống hoặc không khớp với ID của thiết bị hiện tại</translation>
 <translation id="7508870219247277067">Xanh quả bơ</translation>
 <translation id="7511955381719512146">Wi-Fi mà bạn đang sử dụng có thể yêu cầu bạn phải truy cập <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />.</translation>
@@ -1573,6 +1579,7 @@
 <translation id="7763386264682878361">Trình phân tích cú pháp tệp kê khai thanh toán</translation>
 <translation id="7764225426217299476">Thêm địa chỉ</translation>
 <translation id="7766518757692125295">Viền</translation>
+<translation id="7767271804335921384">Quản trị viên đã chặn ứng dụng này</translation>
 <translation id="7770259615151589601">Designated-Long</translation>
 <translation id="7773005668374414287">Cùng thứ tự hướng lên</translation>
 <translation id="777702478322588152">Quận</translation>
@@ -1593,6 +1600,7 @@
 <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
 <translation id="7862185352068345852">Rời khỏi trang web?</translation>
 <translation id="7865448901209910068">Tốc độ tốt nhất</translation>
+<translation id="7874263914261512992">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation>
 <translation id="7878562273885520351">Mật khẩu của bạn có thể bị xâm phạm</translation>
 <translation id="7882421473871500483">Nâu</translation>
 <translation id="7887683347370398519">Kiểm tra CVC của bạn và thử lại</translation>
@@ -1729,6 +1737,7 @@
 <translation id="8474910779563686872">Hiển thị thông tin chi tiết của nhà phát triển</translation>
 <translation id="8479754468255770962">Dập ghim dưới cùng bên trái</translation>
 <translation id="8483780878231876732">Để sử dụng thẻ từ Tài khoản Google, hãy đăng nhập vào Chrome</translation>
+<translation id="8485393050551136813">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation>
 <translation id="8488350697529856933">Áp dụng cho</translation>
 <translation id="8490137692873530638">Khay xếp chồng 10</translation>
 <translation id="8498891568109133222"><ph name="HOST_NAME" /> mất quá nhiều thời gian để phản hồi.</translation>
@@ -1779,6 +1788,7 @@
 <translation id="87601671197631245">Trang web này dùng cấu hình bảo mật lỗi thời nên có thể làm lộ thông tin của bạn (chẳng hạn như mật khẩu, thư hoặc thẻ tín dụng) trong quá trình gửi các thông tin này đến trang web này.</translation>
 <translation id="8761567432415473239">Gần đây, Duyệt web an toàn của Google <ph name="BEGIN_LINK" />tìm thấy chương trình độc hại<ph name="END_LINK" /> trên trang <ph name="SITE" />.</translation>
 <translation id="8763927697961133303">Thiết bị USB</translation>
+<translation id="8774457497170244317">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation>
 <translation id="877985182522063539">A4</translation>
 <translation id="8790007591277257123">&amp;Làm lại xóa</translation>
 <translation id="8792621596287649091">Bạn có thể mất quyền truy cập vào tài khoản <ph name="ORG_NAME" /> của mình hoặc bị đánh cắp danh tính. Chromium khuyên bạn nên thay đổi mật khẩu ngay bây giờ.</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 13a1213..431c725 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">您输入的任何内容、查看的任何网页或从事的任何其他网络活动都在被监视。网站上的内容可能会在您不知情的情况下遭到改动。</translation>
 <translation id="2289385804009217824">裁切</translation>
 <translation id="2292556288342944218">您被禁止访问互联网</translation>
+<translation id="2293443924986248631">当此设置处于开启状态时,网站无法使用 Cookie 来跟踪您在网上的活动。某些网站上的功能可能会无法正常运作。</translation>
 <translation id="2297722699537546652">B5 (Envelope)</translation>
 <translation id="2300306941146563769">未上传</translation>
 <translation id="2310021320168182093">Chou2 (Envelope)</translation>
@@ -719,6 +720,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{第 1 页}other{第 {COUNT} 页}}</translation>
 <translation id="4154664944169082762">指纹</translation>
 <translation id="4159784952369912983">紫色</translation>
+<translation id="4163132590327127354">Chrome 简化了该页面,以使它更易于阅读。</translation>
 <translation id="4165986682804962316">网站设置</translation>
 <translation id="4171400957073367226">验证签名无效</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1018,6 +1020,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="5380442954567233718">您要访问的服务器 <ph name="ORIGIN" /> 已设置一个头文件,其中要求收到的所有请求都应用一项来源政策。但该头文件的格式不正确,导致浏览器无法实现您对 <ph name="SITE" /> 的访问请求。网站运营商可以使用来源政策为网站配置安全属性及其他属性。</translation>
 <translation id="5386426401304769735">此网站的证书链包含使用 SHA-1 签署的证书。</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">边缘装订(右侧)</translation>
@@ -1563,6 +1566,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">防火墙或防病毒软件可能已阻止您连接到网络。</translation>
 <translation id="7759163816903619567">显示网域:</translation>
+<translation id="776110834126722255">已弃用</translation>
 <translation id="7761701407923456692">服务器的证书与网址不相符。</translation>
 <translation id="7763386264682878361">付款清单解析器</translation>
 <translation id="7764225426217299476">添加地址</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb
index a742064..d64e209 100644
--- a/components/strings/components_strings_zu.xtb
+++ b/components/strings/components_strings_zu.xtb
@@ -313,6 +313,7 @@
 <translation id="2288422996159078444">Noma yini oyithayiphayo, noma imaphi amakhasi owabukayo, noma imuphi umsebenzi kuwebhu obukwayo. Okuqukethwe kumasayithi kungashintshwa ngaphandle kolwazi lwakho.</translation>
 <translation id="2289385804009217824">Lungisa</translation>
 <translation id="2292556288342944218">Ukufinyelela kwakho ku-inthanethi kuvinjiwe</translation>
+<translation id="2293443924986248631">Uma kuvuliwe, amasayithi awakwazi ukusebenzisa amakhukhi akulandelayo kuwebhu yonkana. Izici ezikwamanye amasayithi zingase zinqamuke.</translation>
 <translation id="2297722699537546652">B5 (Envelope)</translation>
 <translation id="2300306941146563769">Akulayishiwe</translation>
 <translation id="2310021320168182093">Chou2 (Envelope)</translation>
@@ -726,6 +727,7 @@
 <translation id="4152318981910038897">{COUNT,plural, =1{Ikhasi 1}one{Ikhasi {COUNT}}other{Ikhasi {COUNT}}}</translation>
 <translation id="4154664944169082762">Izigxivizo zeminwe</translation>
 <translation id="4159784952369912983">Okuphephuli</translation>
+<translation id="4163132590327127354">I-Chrome yenze leli khasi laba lula okwenza kube lula ukufunda.</translation>
 <translation id="4165986682804962316">Izilungiselelo zesayithi</translation>
 <translation id="4171400957073367226">Isiginesha embi yokuqinisekisa</translation>
 <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
@@ -1026,6 +1028,11 @@
 <translation id="536296301121032821">Yehlulekile ukugcina izilungiselelo zenqubomgomo</translation>
 <translation id="5371425731340848620">Buyekeza ikhadi</translation>
 <translation id="5377026284221673050">"Iwashi lakho lisemuva" noma "Iwashi lakho liphambili" noma "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
+<translation id="5380442954567233718">Iseva oya kuyo, <ph name="ORIGIN" />, inesihloko
+    esidinga ukuthi inqubomgomo yokwangempela izosetshenziswa kuzo zonke izicelo zayo. Kodwa
+    isihloko asakhekanga kahle, okugwema isiphequluli ukufeza
+    isicelo sakho se-<ph name="SITE" />. Izinqubomgomo zoqobo zingasetshenziswa
+    abasebenzisi besayithi ukulungisa ukuphepha nezinye izinto zesayithi.</translation>
 <translation id="5386426401304769735">Iketanga lesitifiketi laleli sayithi liqukethe isitifiketi esisayinwe kusetshenziswa i-SHA-1.</translation>
 <translation id="538659543871111977">A4-Tab</translation>
 <translation id="5396631636586785122">Ukuthunga umphetho kwesokudla</translation>
@@ -1572,6 +1579,7 @@
 <translation id="7757555340166475417">Dai-Pa-Kai</translation>
 <translation id="7758069387465995638">Isofthiwe yohlelo lokuvikela noma yokumelene namagciwane kungenzeka ivikele ukuxhumeka.</translation>
 <translation id="7759163816903619567">Isizinda sokubonisa:</translation>
+<translation id="776110834126722255">Kwehlisiwe</translation>
 <translation id="7761701407923456692">Isitifiketi seseva asifani ne-URL.</translation>
 <translation id="7763386264682878361">Umhlahleli we-manifest yenkokhelo</translation>
 <translation id="7764225426217299476">Engeza ikheli</translation>
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc
index 8d07647..ceb0c4ec 100644
--- a/components/viz/service/display/gl_renderer.cc
+++ b/components/viz/service/display/gl_renderer.cc
@@ -1107,8 +1107,7 @@
   // On Macs, this path can sometimes lead to all black output.
   // TODO(enne): investigate this and remove this hack.
   return nullptr;
-#endif
-
+#else
   // Can only collapse a single tile quad.
   if (pass->quad_list.size() != 1)
     return nullptr;
@@ -1151,6 +1150,7 @@
     return nullptr;
 
   return tile_quad;
+#endif
 }
 
 void GLRenderer::DrawRenderPassQuad(const RenderPassDrawQuad* quad,
diff --git a/content/browser/accessibility/accessibility_ipc_error_browsertest.cc b/content/browser/accessibility/accessibility_ipc_error_browsertest.cc
index 5319fde9..0b61c49 100644
--- a/content/browser/accessibility/accessibility_ipc_error_browsertest.cc
+++ b/content/browser/accessibility/accessibility_ipc_error_browsertest.cc
@@ -160,7 +160,10 @@
   }
 
   // Construct a bad accessibility message that BrowserAccessibilityManager
-  // will reject.
+  // will reject.  Note that BrowserAccessibilityManager is hosted in a
+  // renderer process - the test verifies that the renderer process will crash
+  // (i.e. the scenario under test does not involve mojo::ReportBadMessage
+  // or content::bad_message::ReceivedBadMessage).
   AXEventNotificationDetails bad_accessibility_event;
   bad_accessibility_event.updates.resize(1);
   bad_accessibility_event.updates[0].root_id = 1;
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index a6a82e3..1ed20d2 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -1674,6 +1674,11 @@
   RunHtmlTest(AccessibilityInputDateWithPopupOpenMultiple_TestFile);
 }
 
+IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest,
+                       AccessibilityInputTimeWithPopupOpen) {
+  RunHtmlTest(FILE_PATH_LITERAL("input-time-with-popup-open.html"));
+}
+
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilityInputDateTime) {
   RunHtmlTest(FILE_PATH_LITERAL("input-datetime.html"));
 }
diff --git a/content/browser/loader/cross_site_document_blocking_browsertest.cc b/content/browser/loader/cross_site_document_blocking_browsertest.cc
index 0f2a4409..526053c 100644
--- a/content/browser/loader/cross_site_document_blocking_browsertest.cc
+++ b/content/browser/loader/cross_site_document_blocking_browsertest.cc
@@ -1241,7 +1241,7 @@
   // InjectRequestInitiator-modified request into
   // AppCacheSubresourceURLFactory).  This necessitates testing via
   // mojo::test::BadMessageObserver rather than via RenderProcessHostWatcher or
-  // RenderProcessHostBadIpcMessageWaiter.
+  // RenderProcessHostBadMojoMessageWaiter.
   mojo::test::BadMessageObserver bad_message_observer;
   const char kScriptTemplate[] = R"(
       var img = document.createElement('img');
@@ -1295,7 +1295,7 @@
   // InjectFetchMode-modified request into
   // AppCacheSubresourceURLFactory).  This necessitates testing via
   // mojo::test::BadMessageObserver rather than via RenderProcessHostWatcher or
-  // RenderProcessHostBadIpcMessageWaiter.
+  // RenderProcessHostBadMojoMessageWaiter.
   mojo::test::BadMessageObserver bad_message_observer;
   const char kScriptTemplate[] = R"(
       var img = document.createElement('img');
diff --git a/content/browser/network_service_restart_browsertest.cc b/content/browser/network_service_restart_browsertest.cc
index 1093190..b4cf3991 100644
--- a/content/browser/network_service_restart_browsertest.cc
+++ b/content/browser/network_service_restart_browsertest.cc
@@ -40,8 +40,8 @@
 #include "content/public/test/test_utils.h"
 #include "content/shell/browser/shell.h"
 #include "content/shell/browser/shell_browser_context.h"
+#include "content/test/io_thread_shared_url_loader_factory_owner.h"
 #include "content/test/storage_partition_test_helpers.h"
-#include "content/test/storage_partition_test_utils.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/bindings/sync_call_restrictions.h"
diff --git a/content/browser/security_exploit_browsertest.cc b/content/browser/security_exploit_browsertest.cc
index b6199ea..e802bfe0 100644
--- a/content/browser/security_exploit_browsertest.cc
+++ b/content/browser/security_exploit_browsertest.cc
@@ -861,9 +861,8 @@
   // interceptor above and be rewritten to register the blob URL with the b.com
   // origin. This should result in a kill because a.com should not be allowed
   // to create blob URLs outside of its own origin.
-  base::HistogramTester histograms;
-  RenderProcessHostWatcher crash_observer(
-      rfh->GetProcess(), RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT);
+  content::RenderProcessHostBadMojoMessageWaiter crash_observer(
+      rfh->GetProcess());
 
   // The renderer should always get killed, but sometimes ExecuteScript returns
   // true anyway, so just ignore the result.
@@ -871,9 +870,10 @@
       content::ExecuteScript(rfh, "URL.createObjectURL(new Blob(['foo']))"));
 
   // If the process is killed, this test passes.
-  crash_observer.Wait();
-  histograms.ExpectUniqueSample("Stability.BadMessageTerminated.Content", 123,
-                                1);
+  EXPECT_EQ(
+      "Received bad user message: "
+      "Non committable URL passed to BlobURLStore::Register",
+      crash_observer.Wait());
 }
 
 // Check that with site isolation enabled, an origin can't create a filesystem
diff --git a/content/browser/sms/sms_browsertest.cc b/content/browser/sms/sms_browsertest.cc
index 71722fc9..c78c7aa2 100644
--- a/content/browser/sms/sms_browsertest.cc
+++ b/content/browser/sms/sms_browsertest.cc
@@ -46,6 +46,8 @@
                                     "SmsReceiver");
     command_line->AppendSwitch(
         switches::kEnableExperimentalWebPlatformFeatures);
+    command_line->AppendSwitchASCII(switches::kWebOtpBackend,
+                                    switches::kWebOtpBackendSmsVerification);
     cert_verifier_.SetUpCommandLine(command_line);
   }
 
diff --git a/content/browser/sms/sms_provider.cc b/content/browser/sms/sms_provider.cc
index 4113e73dd..3372f762 100644
--- a/content/browser/sms/sms_provider.cc
+++ b/content/browser/sms/sms_provider.cc
@@ -27,10 +27,11 @@
 std::unique_ptr<SmsProvider> SmsProvider::Create(RenderFrameHost* rfh) {
 #if defined(OS_ANDROID)
   if (base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
-          switches::kWebOtpBackend) == switches::kWebOtpBackendUserConsent) {
-    return std::make_unique<SmsProviderGmsUserConsent>(rfh);
+          switches::kWebOtpBackend) ==
+      switches::kWebOtpBackendSmsVerification) {
+    return std::make_unique<SmsProviderGmsVerification>();
   }
-  return std::make_unique<SmsProviderGmsVerification>();
+  return std::make_unique<SmsProviderGmsUserConsent>(rfh);
 #else
   return nullptr;
 #endif
diff --git a/content/browser/sms/sms_service.cc b/content/browser/sms/sms_service.cc
index 4a8576b..ad2961d0 100644
--- a/content/browser/sms/sms_service.cc
+++ b/content/browser/sms/sms_service.cc
@@ -105,7 +105,8 @@
   one_time_code_ = one_time_code;
 
   if (base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
-          switches::kWebOtpBackend) == switches::kWebOtpBackendUserConsent) {
+          switches::kWebOtpBackend) !=
+      switches::kWebOtpBackendSmsVerification) {
     Process(SmsStatus::kSuccess, one_time_code_);
     return;
   }
diff --git a/content/browser/sms/sms_service_unittest.cc b/content/browser/sms/sms_service_unittest.cc
index 726bc143..65df3f1 100644
--- a/content/browser/sms/sms_service_unittest.cc
+++ b/content/browser/sms/sms_service_unittest.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
+#include "base/command_line.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/run_loop.h"
@@ -21,6 +22,7 @@
 #include "content/browser/sms/test/mock_sms_web_contents_delegate.h"
 #include "content/browser/web_contents/web_contents_impl.h"
 #include "content/public/browser/sms_fetcher.h"
+#include "content/public/common/content_switches.h"
 #include "content/public/common/service_manager_connection.h"
 #include "content/public/test/navigation_simulator.h"
 #include "content/public/test/test_browser_context.h"
@@ -140,6 +142,12 @@
   SmsServiceTest() = default;
   ~SmsServiceTest() override = default;
 
+  void SetUp() override {
+    RenderViewHostTestHarness::SetUp();
+    base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+        switches::kWebOtpBackend, switches::kWebOtpBackendSmsVerification);
+  }
+
   void ExpectDestroyedReasonCount(SmsReceiverDestroyedReason bucket,
                                   int32_t count) {
     histogram_tester_.ExpectBucketCount("Blink.Sms.Receive.DestroyedReason",
diff --git a/content/browser/storage_partition_impl_browsertest.cc b/content/browser/storage_partition_impl_browsertest.cc
index cd4e39a..91415226 100644
--- a/content/browser/storage_partition_impl_browsertest.cc
+++ b/content/browser/storage_partition_impl_browsertest.cc
@@ -18,7 +18,7 @@
 #include "content/public/test/url_loader_interceptor.h"
 #include "content/shell/browser/shell.h"
 #include "content/shell/browser/shell_browser_context.h"
-#include "content/test/storage_partition_test_utils.h"
+#include "content/test/io_thread_shared_url_loader_factory_owner.h"
 #include "net/http/http_response_headers.h"
 #include "net/http/http_status_code.h"
 #include "net/ssl/client_cert_identity.h"
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 227292b..976ca9d 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -264,6 +264,8 @@
     "gmock_util.h",
     "gpu_browsertest_helpers.cc",
     "gpu_browsertest_helpers.h",
+    "io_thread_shared_url_loader_factory_owner.cc",
+    "io_thread_shared_url_loader_factory_owner.h",
     "mock_background_sync_controller.cc",
     "mock_background_sync_controller.h",
     "mock_clipboard_host.cc",
@@ -299,8 +301,6 @@
     "render_document_feature.h",
     "storage_partition_test_helpers.cc",
     "storage_partition_test_helpers.h",
-    "storage_partition_test_utils.cc",
-    "storage_partition_test_utils.h",
     "stub_layer_tree_view_delegate.cc",
     "stub_layer_tree_view_delegate.h",
     "stub_render_view_host_delegate_view.h",
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-android.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-android.txt
new file mode 100644
index 0000000..4bb3794
--- /dev/null
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-android.txt
@@ -0,0 +1 @@
+#<skip - date and time controls drop their children, including the popup button, on Android>
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-auralinux.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-auralinux.txt
new file mode 100644
index 0000000..78424ae3
--- /dev/null
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-auralinux.txt
@@ -0,0 +1,172 @@
+[document web]
+++[section]
+++++[dateeditor]
+++++++[section]
+++++++++[section]
+++++++++++[spin button] name='Hours' current=1.000000 minimum=1.000000 maximum=12.000000
+++++++++++++[static] name='01'
+++++++++++[static] name=':'
+++++++++++[spin button] name='Minutes' current=50.000000 minimum=0.000000 maximum=59.000000
+++++++++++++[static] name='50'
+++++++++++[static] name=':'
+++++++++++[spin button] name='Seconds' current=2.000000 minimum=0.000000 maximum=59.000000
+++++++++++++[static] name='02'
+++++++++++[static] name='.'
+++++++++++[spin button] name='Milliseconds' current=922.000000 minimum=0.000000 maximum=999.000000
+++++++++++++[static] name='922'
+++++++++++[static] name=' '
+++++++++++[spin button] name='AM/PM' current=2.000000 minimum=1.000000 maximum=2.000000
+++++++++++++[static] name='PM'
+++++++[push button] name='Show time picker'
+++++++[document web]
+++++++++[section]
+++++++++++[section]
+++++++++++++[list box] name='Hours'
+++++++++++++++[list item] name='01' selectable selected
+++++++++++++++[list item] name='02' selectable
+++++++++++++++[list item] name='03' selectable
+++++++++++++++[list item] name='04' selectable
+++++++++++++++[list item] name='05' selectable
+++++++++++++++[list item] name='06' selectable
+++++++++++++++[list item] name='07' selectable
+++++++++++++++[list item] name='08' selectable
+++++++++++++++[list item] name='09' selectable
+++++++++++++++[list item] name='10' selectable
+++++++++++++++[list item] name='11' selectable
+++++++++++++++[list item] name='12' selectable
+++++++++++++[list box] name='Minutes'
+++++++++++++++[list item] name='01' selectable
+++++++++++++++[list item] name='02' selectable
+++++++++++++++[list item] name='03' selectable
+++++++++++++++[list item] name='04' selectable
+++++++++++++++[list item] name='05' selectable
+++++++++++++++[list item] name='06' selectable
+++++++++++++++[list item] name='07' selectable
+++++++++++++++[list item] name='08' selectable
+++++++++++++++[list item] name='09' selectable
+++++++++++++++[list item] name='10' selectable
+++++++++++++++[list item] name='11' selectable
+++++++++++++++[list item] name='12' selectable
+++++++++++++++[list item] name='13' selectable
+++++++++++++++[list item] name='14' selectable
+++++++++++++++[list item] name='15' selectable
+++++++++++++++[list item] name='16' selectable
+++++++++++++++[list item] name='17' selectable
+++++++++++++++[list item] name='18' selectable
+++++++++++++++[list item] name='19' selectable
+++++++++++++++[list item] name='20' selectable
+++++++++++++++[list item] name='21' selectable
+++++++++++++++[list item] name='22' selectable
+++++++++++++++[list item] name='23' selectable
+++++++++++++++[list item] name='24' selectable
+++++++++++++++[list item] name='25' selectable
+++++++++++++++[list item] name='26' selectable
+++++++++++++++[list item] name='27' selectable
+++++++++++++++[list item] name='28' selectable
+++++++++++++++[list item] name='29' selectable
+++++++++++++++[list item] name='30' selectable
+++++++++++++++[list item] name='31' selectable
+++++++++++++++[list item] name='32' selectable
+++++++++++++++[list item] name='33' selectable
+++++++++++++++[list item] name='34' selectable
+++++++++++++++[list item] name='35' selectable
+++++++++++++++[list item] name='36' selectable
+++++++++++++++[list item] name='37' selectable
+++++++++++++++[list item] name='38' selectable
+++++++++++++++[list item] name='39' selectable
+++++++++++++++[list item] name='40' selectable
+++++++++++++++[list item] name='41' selectable
+++++++++++++++[list item] name='42' selectable
+++++++++++++++[list item] name='43' selectable
+++++++++++++++[list item] name='44' selectable
+++++++++++++++[list item] name='45' selectable
+++++++++++++++[list item] name='46' selectable
+++++++++++++++[list item] name='47' selectable
+++++++++++++++[list item] name='48' selectable
+++++++++++++++[list item] name='49' selectable
+++++++++++++++[list item] name='50' selectable selected
+++++++++++++++[list item] name='51' selectable
+++++++++++++++[list item] name='52' selectable
+++++++++++++++[list item] name='53' selectable
+++++++++++++++[list item] name='54' selectable
+++++++++++++++[list item] name='55' selectable
+++++++++++++++[list item] name='56' selectable
+++++++++++++++[list item] name='57' selectable
+++++++++++++++[list item] name='58' selectable
+++++++++++++++[list item] name='59' selectable
+++++++++++++++[list item] name='00' selectable
+++++++++++++[list box] name='Seconds'
+++++++++++++++[list item] name='01' selectable
+++++++++++++++[list item] name='02' selectable selected
+++++++++++++++[list item] name='03' selectable
+++++++++++++++[list item] name='04' selectable
+++++++++++++++[list item] name='05' selectable
+++++++++++++++[list item] name='06' selectable
+++++++++++++++[list item] name='07' selectable
+++++++++++++++[list item] name='08' selectable
+++++++++++++++[list item] name='09' selectable
+++++++++++++++[list item] name='10' selectable
+++++++++++++++[list item] name='11' selectable
+++++++++++++++[list item] name='12' selectable
+++++++++++++++[list item] name='13' selectable
+++++++++++++++[list item] name='14' selectable
+++++++++++++++[list item] name='15' selectable
+++++++++++++++[list item] name='16' selectable
+++++++++++++++[list item] name='17' selectable
+++++++++++++++[list item] name='18' selectable
+++++++++++++++[list item] name='19' selectable
+++++++++++++++[list item] name='20' selectable
+++++++++++++++[list item] name='21' selectable
+++++++++++++++[list item] name='22' selectable
+++++++++++++++[list item] name='23' selectable
+++++++++++++++[list item] name='24' selectable
+++++++++++++++[list item] name='25' selectable
+++++++++++++++[list item] name='26' selectable
+++++++++++++++[list item] name='27' selectable
+++++++++++++++[list item] name='28' selectable
+++++++++++++++[list item] name='29' selectable
+++++++++++++++[list item] name='30' selectable
+++++++++++++++[list item] name='31' selectable
+++++++++++++++[list item] name='32' selectable
+++++++++++++++[list item] name='33' selectable
+++++++++++++++[list item] name='34' selectable
+++++++++++++++[list item] name='35' selectable
+++++++++++++++[list item] name='36' selectable
+++++++++++++++[list item] name='37' selectable
+++++++++++++++[list item] name='38' selectable
+++++++++++++++[list item] name='39' selectable
+++++++++++++++[list item] name='40' selectable
+++++++++++++++[list item] name='41' selectable
+++++++++++++++[list item] name='42' selectable
+++++++++++++++[list item] name='43' selectable
+++++++++++++++[list item] name='44' selectable
+++++++++++++++[list item] name='45' selectable
+++++++++++++++[list item] name='46' selectable
+++++++++++++++[list item] name='47' selectable
+++++++++++++++[list item] name='48' selectable
+++++++++++++++[list item] name='49' selectable
+++++++++++++++[list item] name='50' selectable
+++++++++++++++[list item] name='51' selectable
+++++++++++++++[list item] name='52' selectable
+++++++++++++++[list item] name='53' selectable
+++++++++++++++[list item] name='54' selectable
+++++++++++++++[list item] name='55' selectable
+++++++++++++++[list item] name='56' selectable
+++++++++++++++[list item] name='57' selectable
+++++++++++++++[list item] name='58' selectable
+++++++++++++++[list item] name='59' selectable
+++++++++++++++[list item] name='00' selectable
+++++++++++++[list box] name='Milliseconds'
+++++++++++++++[list item] name='100' selectable
+++++++++++++++[list item] name='200' selectable
+++++++++++++++[list item] name='300' selectable
+++++++++++++++[list item] name='400' selectable
+++++++++++++++[list item] name='500' selectable
+++++++++++++++[list item] name='600' selectable
+++++++++++++++[list item] name='700' selectable
+++++++++++++++[list item] name='800' selectable
+++++++++++++++[list item] name='922' selectable selected
+++++++++++++++[list item] name='000' selectable
+++++++++++++[list box] name='AM/PM'
+++++++++++++++[list item] name='PM' selectable selected
+++++++++++++++[list item] name='AM' selectable
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt
new file mode 100644
index 0000000..83a99f7
--- /dev/null
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt
@@ -0,0 +1,183 @@
+rootWebArea
+++genericContainer
+++++inputTime inputType='time' value='13:50:02.922'
+++++++genericContainer
+++++++++genericContainer
+++++++++++spinButton name='Hours' value='01' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++staticText name='01'
+++++++++++++++inlineTextBox name='01'
+++++++++++staticText name=':'
+++++++++++++inlineTextBox name=':'
+++++++++++spinButton name='Minutes' value='50' valueForRange=50.00 minValueForRange=0.00 maxValueForRange=59.00
+++++++++++++staticText name='50'
+++++++++++++++inlineTextBox name='50'
+++++++++++staticText name=':'
+++++++++++++inlineTextBox name=':'
+++++++++++spinButton name='Seconds' value='02' valueForRange=2.00 minValueForRange=0.00 maxValueForRange=59.00
+++++++++++++staticText name='02'
+++++++++++++++inlineTextBox name='02'
+++++++++++staticText name='.'
+++++++++++++inlineTextBox name='.'
+++++++++++spinButton name='Milliseconds' value='922' valueForRange=922.00 minValueForRange=0.00 maxValueForRange=999.00
+++++++++++++staticText name='922'
+++++++++++++++inlineTextBox name='922'
+++++++++++staticText name=' '
+++++++++++++inlineTextBox name=' '
+++++++++++spinButton name='AM/PM' value='PM' valueForRange=2.00 minValueForRange=1.00 maxValueForRange=2.00
+++++++++++++staticText name='PM'
+++++++++++++++inlineTextBox name='PM'
+++++++popUpButton name='Show time picker'
+++++++rootWebArea
+++++++++genericContainer ignored
+++++++++++genericContainer
+++++++++++++genericContainer
+++++++++++++++genericContainer ignored
+++++++++++++++++listBox name='Hours' activedescendantId=listBoxOption
+++++++++++++++++++listBoxOption name='01' selected=true
+++++++++++++++++++listBoxOption name='02' selected=false
+++++++++++++++++++listBoxOption name='03' selected=false
+++++++++++++++++++listBoxOption name='04' selected=false
+++++++++++++++++++listBoxOption name='05' selected=false
+++++++++++++++++++listBoxOption name='06' selected=false
+++++++++++++++++++listBoxOption name='07' selected=false
+++++++++++++++++++listBoxOption name='08' selected=false
+++++++++++++++++++listBoxOption name='09' selected=false
+++++++++++++++++++listBoxOption name='10' selected=false
+++++++++++++++++++listBoxOption name='11' selected=false
+++++++++++++++++++listBoxOption name='12' selected=false
+++++++++++++++++listBox name='Minutes' activedescendantId=listBoxOption
+++++++++++++++++++listBoxOption name='01' selected=false
+++++++++++++++++++listBoxOption name='02' selected=false
+++++++++++++++++++listBoxOption name='03' selected=false
+++++++++++++++++++listBoxOption name='04' selected=false
+++++++++++++++++++listBoxOption name='05' selected=false
+++++++++++++++++++listBoxOption name='06' selected=false
+++++++++++++++++++listBoxOption name='07' selected=false
+++++++++++++++++++listBoxOption name='08' selected=false
+++++++++++++++++++listBoxOption name='09' selected=false
+++++++++++++++++++listBoxOption name='10' selected=false
+++++++++++++++++++listBoxOption name='11' selected=false
+++++++++++++++++++listBoxOption name='12' selected=false
+++++++++++++++++++listBoxOption name='13' selected=false
+++++++++++++++++++listBoxOption name='14' selected=false
+++++++++++++++++++listBoxOption name='15' selected=false
+++++++++++++++++++listBoxOption name='16' selected=false
+++++++++++++++++++listBoxOption name='17' selected=false
+++++++++++++++++++listBoxOption name='18' selected=false
+++++++++++++++++++listBoxOption name='19' selected=false
+++++++++++++++++++listBoxOption name='20' selected=false
+++++++++++++++++++listBoxOption name='21' selected=false
+++++++++++++++++++listBoxOption name='22' selected=false
+++++++++++++++++++listBoxOption name='23' selected=false
+++++++++++++++++++listBoxOption name='24' selected=false
+++++++++++++++++++listBoxOption name='25' selected=false
+++++++++++++++++++listBoxOption name='26' selected=false
+++++++++++++++++++listBoxOption name='27' selected=false
+++++++++++++++++++listBoxOption name='28' selected=false
+++++++++++++++++++listBoxOption name='29' selected=false
+++++++++++++++++++listBoxOption name='30' selected=false
+++++++++++++++++++listBoxOption name='31' selected=false
+++++++++++++++++++listBoxOption name='32' selected=false
+++++++++++++++++++listBoxOption name='33' selected=false
+++++++++++++++++++listBoxOption name='34' selected=false
+++++++++++++++++++listBoxOption name='35' selected=false
+++++++++++++++++++listBoxOption name='36' selected=false
+++++++++++++++++++listBoxOption name='37' selected=false
+++++++++++++++++++listBoxOption name='38' selected=false
+++++++++++++++++++listBoxOption name='39' selected=false
+++++++++++++++++++listBoxOption name='40' selected=false
+++++++++++++++++++listBoxOption name='41' selected=false
+++++++++++++++++++listBoxOption name='42' selected=false
+++++++++++++++++++listBoxOption name='43' selected=false
+++++++++++++++++++listBoxOption name='44' selected=false
+++++++++++++++++++listBoxOption name='45' selected=false
+++++++++++++++++++listBoxOption name='46' selected=false
+++++++++++++++++++listBoxOption name='47' selected=false
+++++++++++++++++++listBoxOption name='48' selected=false
+++++++++++++++++++listBoxOption name='49' selected=false
+++++++++++++++++++listBoxOption name='50' selected=true
+++++++++++++++++++listBoxOption name='51' selected=false
+++++++++++++++++++listBoxOption name='52' selected=false
+++++++++++++++++++listBoxOption name='53' selected=false
+++++++++++++++++++listBoxOption name='54' selected=false
+++++++++++++++++++listBoxOption name='55' selected=false
+++++++++++++++++++listBoxOption name='56' selected=false
+++++++++++++++++++listBoxOption name='57' selected=false
+++++++++++++++++++listBoxOption name='58' selected=false
+++++++++++++++++++listBoxOption name='59' selected=false
+++++++++++++++++++listBoxOption name='00' selected=false
+++++++++++++++++listBox name='Seconds' activedescendantId=listBoxOption
+++++++++++++++++++listBoxOption name='01' selected=false
+++++++++++++++++++listBoxOption name='02' selected=true
+++++++++++++++++++listBoxOption name='03' selected=false
+++++++++++++++++++listBoxOption name='04' selected=false
+++++++++++++++++++listBoxOption name='05' selected=false
+++++++++++++++++++listBoxOption name='06' selected=false
+++++++++++++++++++listBoxOption name='07' selected=false
+++++++++++++++++++listBoxOption name='08' selected=false
+++++++++++++++++++listBoxOption name='09' selected=false
+++++++++++++++++++listBoxOption name='10' selected=false
+++++++++++++++++++listBoxOption name='11' selected=false
+++++++++++++++++++listBoxOption name='12' selected=false
+++++++++++++++++++listBoxOption name='13' selected=false
+++++++++++++++++++listBoxOption name='14' selected=false
+++++++++++++++++++listBoxOption name='15' selected=false
+++++++++++++++++++listBoxOption name='16' selected=false
+++++++++++++++++++listBoxOption name='17' selected=false
+++++++++++++++++++listBoxOption name='18' selected=false
+++++++++++++++++++listBoxOption name='19' selected=false
+++++++++++++++++++listBoxOption name='20' selected=false
+++++++++++++++++++listBoxOption name='21' selected=false
+++++++++++++++++++listBoxOption name='22' selected=false
+++++++++++++++++++listBoxOption name='23' selected=false
+++++++++++++++++++listBoxOption name='24' selected=false
+++++++++++++++++++listBoxOption name='25' selected=false
+++++++++++++++++++listBoxOption name='26' selected=false
+++++++++++++++++++listBoxOption name='27' selected=false
+++++++++++++++++++listBoxOption name='28' selected=false
+++++++++++++++++++listBoxOption name='29' selected=false
+++++++++++++++++++listBoxOption name='30' selected=false
+++++++++++++++++++listBoxOption name='31' selected=false
+++++++++++++++++++listBoxOption name='32' selected=false
+++++++++++++++++++listBoxOption name='33' selected=false
+++++++++++++++++++listBoxOption name='34' selected=false
+++++++++++++++++++listBoxOption name='35' selected=false
+++++++++++++++++++listBoxOption name='36' selected=false
+++++++++++++++++++listBoxOption name='37' selected=false
+++++++++++++++++++listBoxOption name='38' selected=false
+++++++++++++++++++listBoxOption name='39' selected=false
+++++++++++++++++++listBoxOption name='40' selected=false
+++++++++++++++++++listBoxOption name='41' selected=false
+++++++++++++++++++listBoxOption name='42' selected=false
+++++++++++++++++++listBoxOption name='43' selected=false
+++++++++++++++++++listBoxOption name='44' selected=false
+++++++++++++++++++listBoxOption name='45' selected=false
+++++++++++++++++++listBoxOption name='46' selected=false
+++++++++++++++++++listBoxOption name='47' selected=false
+++++++++++++++++++listBoxOption name='48' selected=false
+++++++++++++++++++listBoxOption name='49' selected=false
+++++++++++++++++++listBoxOption name='50' selected=false
+++++++++++++++++++listBoxOption name='51' selected=false
+++++++++++++++++++listBoxOption name='52' selected=false
+++++++++++++++++++listBoxOption name='53' selected=false
+++++++++++++++++++listBoxOption name='54' selected=false
+++++++++++++++++++listBoxOption name='55' selected=false
+++++++++++++++++++listBoxOption name='56' selected=false
+++++++++++++++++++listBoxOption name='57' selected=false
+++++++++++++++++++listBoxOption name='58' selected=false
+++++++++++++++++++listBoxOption name='59' selected=false
+++++++++++++++++++listBoxOption name='00' selected=false
+++++++++++++++++listBox name='Milliseconds' activedescendantId=listBoxOption
+++++++++++++++++++listBoxOption name='100' selected=false
+++++++++++++++++++listBoxOption name='200' selected=false
+++++++++++++++++++listBoxOption name='300' selected=false
+++++++++++++++++++listBoxOption name='400' selected=false
+++++++++++++++++++listBoxOption name='500' selected=false
+++++++++++++++++++listBoxOption name='600' selected=false
+++++++++++++++++++listBoxOption name='700' selected=false
+++++++++++++++++++listBoxOption name='800' selected=false
+++++++++++++++++++listBoxOption name='922' selected=true
+++++++++++++++++++listBoxOption name='000' selected=false
+++++++++++++++++listBox name='AM/PM' activedescendantId=listBoxOption
+++++++++++++++++++listBoxOption name='PM' selected=true
+++++++++++++++++++listBoxOption name='AM' selected=false
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-mac.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-mac.txt
new file mode 100644
index 0000000..625f0a5
--- /dev/null
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-mac.txt
@@ -0,0 +1,172 @@
+AXWebArea AXRoleDescription='HTML content'
+++AXGroup AXRoleDescription='group'
+++++AXTimeField AXRoleDescription='time field' AXValue='13:50:02.922'
+++++++AXGroup AXRoleDescription='group'
+++++++++AXGroup AXRoleDescription='group'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='1' AXDescription='Hours'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='01'
+++++++++++AXStaticText AXRoleDescription='text' AXValue=':'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='50' AXDescription='Minutes'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='50'
+++++++++++AXStaticText AXRoleDescription='text' AXValue=':'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='2' AXDescription='Seconds'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='02'
+++++++++++AXStaticText AXRoleDescription='text' AXValue='.'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='922' AXDescription='Milliseconds'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='922'
+++++++++++AXStaticText AXRoleDescription='text' AXValue=' '
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='2' AXDescription='AM/PM'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='PM'
+++++++AXPopUpButton AXRoleDescription='pop up button' AXDescription='Show time picker'
+++++++AXWebArea AXRoleDescription='HTML content'
+++++++++AXGroup AXRoleDescription='group'
+++++++++++AXGroup AXRoleDescription='group'
+++++++++++++AXList AXRoleDescription='list' AXDescription='Hours'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='01'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='02'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='03'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='04'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='05'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='06'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='07'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='08'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='09'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='10'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='11'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='12'
+++++++++++++AXList AXRoleDescription='list' AXDescription='Minutes'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='01'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='02'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='03'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='04'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='05'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='06'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='07'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='08'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='09'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='10'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='11'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='12'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='13'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='14'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='15'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='16'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='17'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='18'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='19'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='20'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='21'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='22'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='23'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='24'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='25'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='26'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='27'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='28'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='29'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='30'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='31'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='32'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='33'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='34'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='35'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='36'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='37'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='38'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='39'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='40'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='41'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='42'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='43'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='44'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='45'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='46'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='47'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='48'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='49'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='50'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='51'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='52'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='53'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='54'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='55'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='56'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='57'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='58'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='59'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='00'
+++++++++++++AXList AXRoleDescription='list' AXDescription='Seconds'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='01'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='02'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='03'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='04'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='05'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='06'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='07'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='08'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='09'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='10'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='11'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='12'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='13'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='14'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='15'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='16'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='17'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='18'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='19'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='20'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='21'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='22'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='23'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='24'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='25'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='26'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='27'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='28'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='29'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='30'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='31'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='32'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='33'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='34'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='35'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='36'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='37'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='38'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='39'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='40'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='41'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='42'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='43'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='44'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='45'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='46'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='47'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='48'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='49'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='50'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='51'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='52'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='53'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='54'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='55'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='56'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='57'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='58'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='59'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='00'
+++++++++++++AXList AXRoleDescription='list' AXDescription='Milliseconds'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='100'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='200'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='300'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='400'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='500'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='600'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='700'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='800'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='922'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='000'
+++++++++++++AXList AXRoleDescription='list' AXDescription='AM/PM'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='PM'
+++++++++++++++AXStaticText AXRoleDescription='text' AXValue='AM'
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-uia-win.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-uia-win.txt
new file mode 100644
index 0000000..81a7e51
--- /dev/null
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-uia-win.txt
@@ -0,0 +1,173 @@
+Document
+++Group IsControlElement=false
+++++Group
+++++++Group IsControlElement=false
+++++++++Group IsControlElement=false
+++++++++++Spinner Name='Hours' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=12.00 RangeValue.Minimum=1.00 RangeValue.Value=1.00 Value.Value='01'
+++++++++++++Text Name='01'
+++++++++++Text Name=':'
+++++++++++Spinner Name='Minutes' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=59.00 RangeValue.Minimum=0.00 RangeValue.Value=50.00 Value.Value='50'
+++++++++++++Text Name='50'
+++++++++++Text Name=':'
+++++++++++Spinner Name='Seconds' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=59.00 RangeValue.Minimum=0.00 RangeValue.Value=2.00 Value.Value='02'
+++++++++++++Text Name='02'
+++++++++++Text Name='.'
+++++++++++Spinner Name='Milliseconds' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=999.00 RangeValue.Minimum=0.00 RangeValue.Value=922.00 Value.Value='922'
+++++++++++++Text Name='922'
+++++++++++Text Name=' '
+++++++++++Spinner Name='AM/PM' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=2.00 RangeValue.Minimum=1.00 RangeValue.Value=2.00 Value.Value='PM'
+++++++++++++Text Name='PM'
+++++++Button Name='Show time picker' ExpandCollapse.ExpandCollapseState='Collapsed'
+++++++Pane Name='Chrome Legacy Window' IsControlElement=false
+++++++++Document
+++++++++++Group IsControlElement=false
+++++++++++++Group
+++++++++++++++List Name='Hours' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false
+++++++++++++++++ListItem Name='01' SelectionItem.IsSelected=true SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='02' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='03' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='04' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='05' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='06' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='07' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='08' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='09' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='10' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='11' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++++ListItem Name='12' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Hours'
+++++++++++++++List Name='Minutes' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false
+++++++++++++++++ListItem Name='01' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='02' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='03' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='04' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='05' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='06' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='07' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='08' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='09' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='10' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='11' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='12' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='13' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='14' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='15' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='16' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='17' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='18' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='19' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='20' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='21' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='22' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='23' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='24' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='25' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='26' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='27' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='28' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='29' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='30' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='31' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='32' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='33' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='34' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='35' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='36' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='37' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='38' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='39' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='40' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='41' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='42' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='43' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='44' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='45' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='46' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='47' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='48' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='49' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='50' SelectionItem.IsSelected=true SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='51' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='52' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='53' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='54' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='55' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='56' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='57' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='58' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='59' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++++ListItem Name='00' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Minutes'
+++++++++++++++List Name='Seconds' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false
+++++++++++++++++ListItem Name='01' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='02' SelectionItem.IsSelected=true SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='03' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='04' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='05' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='06' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='07' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='08' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='09' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='10' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='11' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='12' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='13' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='14' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='15' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='16' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='17' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='18' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='19' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='20' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='21' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='22' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='23' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='24' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='25' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='26' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='27' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='28' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='29' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='30' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='31' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='32' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='33' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='34' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='35' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='36' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='37' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='38' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='39' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='40' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='41' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='42' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='43' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='44' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='45' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='46' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='47' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='48' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='49' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='50' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='51' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='52' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='53' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='54' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='55' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='56' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='57' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='58' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='59' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++++ListItem Name='00' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Seconds'
+++++++++++++++List Name='Milliseconds' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false
+++++++++++++++++ListItem Name='100' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Milliseconds'
+++++++++++++++++ListItem Name='200' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Milliseconds'
+++++++++++++++++ListItem Name='300' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Milliseconds'
+++++++++++++++++ListItem Name='400' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Milliseconds'
+++++++++++++++++ListItem Name='500' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Milliseconds'
+++++++++++++++++ListItem Name='600' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Milliseconds'
+++++++++++++++++ListItem Name='700' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Milliseconds'
+++++++++++++++++ListItem Name='800' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Milliseconds'
+++++++++++++++++ListItem Name='922' SelectionItem.IsSelected=true SelectionItem.SelectionContainer='Milliseconds'
+++++++++++++++++ListItem Name='000' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='Milliseconds'
+++++++++++++++List Name='AM/PM' Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false
+++++++++++++++++ListItem Name='PM' SelectionItem.IsSelected=true SelectionItem.SelectionContainer='AM/PM'
+++++++++++++++++ListItem Name='AM' SelectionItem.IsSelected=false SelectionItem.SelectionContainer='AM/PM'
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-win.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-win.txt
new file mode 100644
index 0000000..36465e0
--- /dev/null
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-win.txt
@@ -0,0 +1,172 @@
+ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>'
+++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
+++++ROLE_SYSTEM_GROUPING value='13:50:02.922' FOCUSABLE ia2_hypertext='<obj0><obj1><obj2>'
+++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
+++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>:<obj2>:<obj4>.<obj6> <obj8>'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Hours' value='01' FOCUSABLE ia2_hypertext='01'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='01' ia2_hypertext='01'
+++++++++++ROLE_SYSTEM_STATICTEXT name=':' ia2_hypertext=':'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Minutes' value='50' FOCUSABLE ia2_hypertext='50'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='50' ia2_hypertext='50'
+++++++++++ROLE_SYSTEM_STATICTEXT name=':' ia2_hypertext=':'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Seconds' value='02' ia2_hypertext='02'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='02' ia2_hypertext='02'
+++++++++++ROLE_SYSTEM_STATICTEXT name='.' ia2_hypertext='.'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Milliseconds' value='922' ia2_hypertext='922'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='922' ia2_hypertext='922'
+++++++++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' '
+++++++++++ROLE_SYSTEM_SPINBUTTON name='AM/PM' value='PM' FOCUSABLE ia2_hypertext='PM'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='PM' ia2_hypertext='PM'
+++++++ROLE_SYSTEM_BUTTONMENU name='Show time picker' FOCUSABLE HASPOPUP ia2_hypertext='Show time picker'
+++++++ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>'
+++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
+++++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0><obj1><obj2><obj3><obj4>'
+++++++++++++ROLE_SYSTEM_LIST name='Hours' FOCUSABLE ia2_hypertext='<obj0><obj1><obj2><obj3><obj4><obj5><obj6><obj7><obj8><obj9><obj10><obj11>'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='01' SELECTED FOCUSABLE ia2_hypertext='01'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='02' FOCUSABLE ia2_hypertext='02'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='03' FOCUSABLE ia2_hypertext='03'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='04' FOCUSABLE ia2_hypertext='04'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='05' FOCUSABLE ia2_hypertext='05'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='06' FOCUSABLE ia2_hypertext='06'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='07' FOCUSABLE ia2_hypertext='07'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='08' FOCUSABLE ia2_hypertext='08'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='09' FOCUSABLE ia2_hypertext='09'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='10' FOCUSABLE ia2_hypertext='10'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='11' FOCUSABLE ia2_hypertext='11'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='12' FOCUSABLE ia2_hypertext='12'
+++++++++++++ROLE_SYSTEM_LIST name='Minutes' FOCUSABLE ia2_hypertext='<obj0><obj1><obj2><obj3><obj4><obj5><obj6><obj7><obj8><obj9><obj10><obj11><obj12><obj13><obj14><obj15><obj16><obj17><obj18><obj19><obj20><obj21><obj22><obj23><obj24><obj25><obj26><obj27><obj28><obj29><obj30><obj31><obj32><obj33><obj34><obj35><obj36><obj37><obj38><obj39><obj40><obj41><obj42><obj43><obj44><obj45><obj46><obj47><obj48><obj49><obj50><obj51><obj52><obj53><obj54><obj55><obj56><obj57><obj58><obj59>'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='01' FOCUSABLE ia2_hypertext='01'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='02' FOCUSABLE ia2_hypertext='02'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='03' FOCUSABLE ia2_hypertext='03'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='04' FOCUSABLE ia2_hypertext='04'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='05' FOCUSABLE ia2_hypertext='05'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='06' FOCUSABLE ia2_hypertext='06'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='07' FOCUSABLE ia2_hypertext='07'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='08' FOCUSABLE ia2_hypertext='08'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='09' FOCUSABLE ia2_hypertext='09'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='10' FOCUSABLE ia2_hypertext='10'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='11' FOCUSABLE ia2_hypertext='11'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='12' FOCUSABLE ia2_hypertext='12'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='13' FOCUSABLE ia2_hypertext='13'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='14' FOCUSABLE ia2_hypertext='14'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='15' FOCUSABLE ia2_hypertext='15'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='16' FOCUSABLE ia2_hypertext='16'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='17' FOCUSABLE ia2_hypertext='17'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='18' FOCUSABLE ia2_hypertext='18'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='19' FOCUSABLE ia2_hypertext='19'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='20' FOCUSABLE ia2_hypertext='20'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='21' FOCUSABLE ia2_hypertext='21'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='22' FOCUSABLE ia2_hypertext='22'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='23' FOCUSABLE ia2_hypertext='23'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='24' FOCUSABLE ia2_hypertext='24'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='25' FOCUSABLE ia2_hypertext='25'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='26' FOCUSABLE ia2_hypertext='26'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='27' FOCUSABLE ia2_hypertext='27'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='28' FOCUSABLE ia2_hypertext='28'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='29' FOCUSABLE ia2_hypertext='29'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='30' FOCUSABLE ia2_hypertext='30'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='31' FOCUSABLE ia2_hypertext='31'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='32' FOCUSABLE ia2_hypertext='32'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='33' FOCUSABLE ia2_hypertext='33'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='34' FOCUSABLE ia2_hypertext='34'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='35' FOCUSABLE ia2_hypertext='35'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='36' FOCUSABLE ia2_hypertext='36'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='37' FOCUSABLE ia2_hypertext='37'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='38' FOCUSABLE ia2_hypertext='38'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='39' FOCUSABLE ia2_hypertext='39'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='40' FOCUSABLE ia2_hypertext='40'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='41' FOCUSABLE ia2_hypertext='41'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='42' FOCUSABLE ia2_hypertext='42'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='43' FOCUSABLE ia2_hypertext='43'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='44' FOCUSABLE ia2_hypertext='44'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='45' FOCUSABLE ia2_hypertext='45'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='46' FOCUSABLE ia2_hypertext='46'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='47' FOCUSABLE ia2_hypertext='47'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='48' FOCUSABLE ia2_hypertext='48'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='49' FOCUSABLE ia2_hypertext='49'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='50' SELECTED FOCUSABLE ia2_hypertext='50'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='51' FOCUSABLE ia2_hypertext='51'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='52' FOCUSABLE ia2_hypertext='52'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='53' FOCUSABLE ia2_hypertext='53'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='54' FOCUSABLE ia2_hypertext='54'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='55' FOCUSABLE ia2_hypertext='55'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='56' FOCUSABLE ia2_hypertext='56'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='57' FOCUSABLE ia2_hypertext='57'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='58' FOCUSABLE ia2_hypertext='58'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='59' FOCUSABLE ia2_hypertext='59'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='00' FOCUSABLE ia2_hypertext='00'
+++++++++++++ROLE_SYSTEM_LIST name='Seconds' FOCUSABLE ia2_hypertext='<obj0><obj1><obj2><obj3><obj4><obj5><obj6><obj7><obj8><obj9><obj10><obj11><obj12><obj13><obj14><obj15><obj16><obj17><obj18><obj19><obj20><obj21><obj22><obj23><obj24><obj25><obj26><obj27><obj28><obj29><obj30><obj31><obj32><obj33><obj34><obj35><obj36><obj37><obj38><obj39><obj40><obj41><obj42><obj43><obj44><obj45><obj46><obj47><obj48><obj49><obj50><obj51><obj52><obj53><obj54><obj55><obj56><obj57><obj58><obj59>'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='01' FOCUSABLE ia2_hypertext='01'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='02' SELECTED FOCUSABLE ia2_hypertext='02'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='03' FOCUSABLE ia2_hypertext='03'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='04' FOCUSABLE ia2_hypertext='04'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='05' FOCUSABLE ia2_hypertext='05'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='06' FOCUSABLE ia2_hypertext='06'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='07' FOCUSABLE ia2_hypertext='07'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='08' FOCUSABLE ia2_hypertext='08'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='09' FOCUSABLE ia2_hypertext='09'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='10' FOCUSABLE ia2_hypertext='10'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='11' FOCUSABLE ia2_hypertext='11'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='12' FOCUSABLE ia2_hypertext='12'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='13' FOCUSABLE ia2_hypertext='13'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='14' FOCUSABLE ia2_hypertext='14'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='15' FOCUSABLE ia2_hypertext='15'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='16' FOCUSABLE ia2_hypertext='16'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='17' FOCUSABLE ia2_hypertext='17'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='18' FOCUSABLE ia2_hypertext='18'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='19' FOCUSABLE ia2_hypertext='19'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='20' FOCUSABLE ia2_hypertext='20'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='21' FOCUSABLE ia2_hypertext='21'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='22' FOCUSABLE ia2_hypertext='22'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='23' FOCUSABLE ia2_hypertext='23'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='24' FOCUSABLE ia2_hypertext='24'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='25' FOCUSABLE ia2_hypertext='25'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='26' FOCUSABLE ia2_hypertext='26'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='27' FOCUSABLE ia2_hypertext='27'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='28' FOCUSABLE ia2_hypertext='28'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='29' FOCUSABLE ia2_hypertext='29'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='30' FOCUSABLE ia2_hypertext='30'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='31' FOCUSABLE ia2_hypertext='31'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='32' FOCUSABLE ia2_hypertext='32'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='33' FOCUSABLE ia2_hypertext='33'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='34' FOCUSABLE ia2_hypertext='34'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='35' FOCUSABLE ia2_hypertext='35'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='36' FOCUSABLE ia2_hypertext='36'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='37' FOCUSABLE ia2_hypertext='37'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='38' FOCUSABLE ia2_hypertext='38'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='39' FOCUSABLE ia2_hypertext='39'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='40' FOCUSABLE ia2_hypertext='40'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='41' FOCUSABLE ia2_hypertext='41'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='42' FOCUSABLE ia2_hypertext='42'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='43' FOCUSABLE ia2_hypertext='43'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='44' FOCUSABLE ia2_hypertext='44'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='45' FOCUSABLE ia2_hypertext='45'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='46' FOCUSABLE ia2_hypertext='46'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='47' FOCUSABLE ia2_hypertext='47'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='48' FOCUSABLE ia2_hypertext='48'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='49' FOCUSABLE ia2_hypertext='49'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='50' FOCUSABLE ia2_hypertext='50'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='51' FOCUSABLE ia2_hypertext='51'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='52' FOCUSABLE ia2_hypertext='52'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='53' FOCUSABLE ia2_hypertext='53'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='54' FOCUSABLE ia2_hypertext='54'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='55' FOCUSABLE ia2_hypertext='55'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='56' FOCUSABLE ia2_hypertext='56'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='57' FOCUSABLE ia2_hypertext='57'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='58' FOCUSABLE ia2_hypertext='58'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='59' FOCUSABLE ia2_hypertext='59'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='00' FOCUSABLE ia2_hypertext='00'
+++++++++++++ROLE_SYSTEM_LIST name='Milliseconds' FOCUSABLE ia2_hypertext='<obj0><obj1><obj2><obj3><obj4><obj5><obj6><obj7><obj8><obj9>'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='100' FOCUSABLE ia2_hypertext='100'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='200' FOCUSABLE ia2_hypertext='200'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='300' FOCUSABLE ia2_hypertext='300'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='400' FOCUSABLE ia2_hypertext='400'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='500' FOCUSABLE ia2_hypertext='500'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='600' FOCUSABLE ia2_hypertext='600'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='700' FOCUSABLE ia2_hypertext='700'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='800' FOCUSABLE ia2_hypertext='800'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='922' SELECTED FOCUSABLE ia2_hypertext='922'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='000' FOCUSABLE ia2_hypertext='000'
+++++++++++++ROLE_SYSTEM_LIST name='AM/PM' FOCUSABLE ia2_hypertext='<obj0><obj1>'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='PM' SELECTED FOCUSABLE ia2_hypertext='PM'
+++++++++++++++ROLE_SYSTEM_LISTITEM name='AM' FOCUSABLE ia2_hypertext='AM'
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open.html b/content/test/data/accessibility/html/input-time-with-popup-open.html
new file mode 100644
index 0000000..0cab304c
--- /dev/null
+++ b/content/test/data/accessibility/html/input-time-with-popup-open.html
@@ -0,0 +1,15 @@
+<!--
+@BLINK-ALLOW:inputType=*
+@MAC-ALLOW:AXRole*
+@WIN-ALLOW:ia2_hypertext=*
+@UIA-WIN-ALLOW:ControllerFor=*
+@UIA-WIN-ALLOW:LocalizedControlType='time picker'
+@DEFAULT-ACTION-ON:Show time picker
+@WIN-ALLOW:localized_extended_role='time picker'
+-->
+<!DOCTYPE html>
+<html>
+<body>
+  <input type="time" value="13:50:02.922">
+</body>
+</html>
diff --git a/content/test/storage_partition_test_utils.cc b/content/test/io_thread_shared_url_loader_factory_owner.cc
similarity index 98%
rename from content/test/storage_partition_test_utils.cc
rename to content/test/io_thread_shared_url_loader_factory_owner.cc
index 80ef039..a957bca 100644
--- a/content/test/storage_partition_test_utils.cc
+++ b/content/test/io_thread_shared_url_loader_factory_owner.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/test/storage_partition_test_utils.h"
+#include "content/test/io_thread_shared_url_loader_factory_owner.h"
 
 #include "base/bind.h"
 #include "base/run_loop.h"
diff --git a/content/test/storage_partition_test_utils.h b/content/test/io_thread_shared_url_loader_factory_owner.h
similarity index 90%
rename from content/test/storage_partition_test_utils.h
rename to content/test/io_thread_shared_url_loader_factory_owner.h
index 02d3776..693ff8dc 100644
--- a/content/test/storage_partition_test_utils.h
+++ b/content/test/io_thread_shared_url_loader_factory_owner.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_TEST_STORAGE_PARTITION_TEST_UTILS_H_
-#define CONTENT_TEST_STORAGE_PARTITION_TEST_UTILS_H_
+#ifndef CONTENT_TEST_IO_THREAD_SHARED_URL_LOADER_FACTORY_OWNER_H_
+#define CONTENT_TEST_IO_THREAD_SHARED_URL_LOADER_FACTORY_OWNER_H_
 
 #include <memory>
 
@@ -55,4 +55,4 @@
 
 }  // namespace content
 
-#endif  // CONTENT_TEST_STORAGE_PARTITION_TEST_UTILS_H_
+#endif  // CONTENT_TEST_IO_THREAD_SHARED_URL_LOADER_FACTORY_OWNER_H_
diff --git a/device/fido/cable/cable_discovery_data.h b/device/fido/cable/cable_discovery_data.h
index a3e7c3c..8fa8a08 100644
--- a/device/fido/cable/cable_discovery_data.h
+++ b/device/fido/cable/cable_discovery_data.h
@@ -17,6 +17,11 @@
 constexpr size_t kCableSessionPreKeySize = 32;
 constexpr size_t kCableQRSecretSize = 16;
 constexpr size_t kCableNonceSize = 8;
+constexpr size_t kCableIdentityKeySeedSize = 32;
+constexpr size_t kCableCompressedPublicKeySize =
+    /* type byte */ 1 + /* field element */ (256 / 8);
+constexpr size_t kCableQRDataSize =
+    kCableCompressedPublicKeySize + kCableQRSecretSize;
 
 using CableEidArray = std::array<uint8_t, kCableEphemeralIdSize>;
 using CableSessionPreKeyArray = std::array<uint8_t, kCableSessionPreKeySize>;
@@ -35,6 +40,8 @@
 // CableAuthenticatorIdentityKey is a P-256 public value used to authenticate a
 // paired phone.
 using CableAuthenticatorIdentityKey = std::array<uint8_t, 65>;
+using CableIdentityKeySeed = std::array<uint8_t, kCableIdentityKeySeedSize>;
+using CableQRData = std::array<uint8_t, kCableQRDataSize>;
 
 // Encapsulates information required to discover Cable device per single
 // credential. When multiple credentials are enrolled to a single account
@@ -54,14 +61,25 @@
                      const CableEidArray& client_eid,
                      const CableEidArray& authenticator_eid,
                      const CableSessionPreKeyArray& session_pre_key);
-  // Creates discovery data given a specific QR secret. See |DeriveQRSecret| for
-  // how to generate such secrets.
-  explicit CableDiscoveryData(
-      base::span<const uint8_t, kCableQRSecretSize> qr_secret);
+  // Creates discovery data given a specific QR secret and identity key seed.
+  // This will be used on the QR-displaying-side of a QR handshake. See
+  // |DeriveQRSecret| and |DeriveIdentityKeySeed| for how to generate such
+  // secrets.
+  CableDiscoveryData(
+      base::span<const uint8_t, kCableQRSecretSize> qr_secret,
+      base::span<const uint8_t, kCableIdentityKeySeedSize> identity_key_seed);
   CableDiscoveryData();
   CableDiscoveryData(const CableDiscoveryData& data);
   ~CableDiscoveryData();
 
+  // Creates discovery data given QR data, which contains a compressed public
+  // key and the QR secret. This will be used by the QR-scanning-side of a QR
+  // handshake. Returns |nullopt| if the embedded elliptic-curve point is
+  // invalid.
+  static base::Optional<CableDiscoveryData> FromQRData(
+      base::span<const uint8_t,
+                 kCableCompressedPublicKeySize + kCableQRSecretSize> qr_data);
+
   CableDiscoveryData& operator=(const CableDiscoveryData& other);
   bool operator==(const CableDiscoveryData& other) const;
 
@@ -82,6 +100,19 @@
       base::span<const uint8_t, 32> qr_generator_key,
       const int64_t tick);
 
+  // DeriveIdentityKeySeed returns a seed that can be used to create a P-256
+  // identity key for a handshake using |EC_KEY_derive_from_secret|.
+  static CableIdentityKeySeed DeriveIdentityKeySeed(
+      base::span<const uint8_t, 32> qr_generator_key,
+      const int64_t tick);
+
+  // DeriveQRData returns the QR data, a combination of QR secret and public
+  // identity key. This is base64url-encoded and placed in a caBLE v2 QR code
+  // with a prefix prepended.
+  static CableQRData DeriveQRData(
+      base::span<const uint8_t, 32> qr_generator_key,
+      const int64_t tick);
+
   // version indicates whether v1 or v2 data is contained in this object.
   // |INVALID| is not a valid version but is set as the default to catch any
   // cases where the version hasn't been set explicitly.
@@ -102,6 +133,7 @@
     CableEidGeneratorKey eid_gen_key;
     CablePskGeneratorKey psk_gen_key;
     base::Optional<CableAuthenticatorIdentityKey> peer_identity;
+    base::Optional<CableIdentityKeySeed> local_identity_seed;
     // peer_name is an authenticator-controlled, UTF8-valid string containing
     // the self-reported, human-friendly name of a v2 authenticator. This need
     // not be filled in when handshaking but an authenticator may provide it
@@ -109,6 +141,10 @@
     base::Optional<std::string> peer_name;
   };
   base::Optional<V2Data> v2;
+
+ private:
+  void InitFromQRSecret(
+      base::span<const uint8_t, kCableQRSecretSize> qr_secret);
 };
 
 }  // namespace device
diff --git a/device/fido/cable/fido_cable_discovery.cc b/device/fido/cable/fido_cable_discovery.cc
index 2c6fc27..4eda1b40 100644
--- a/device/fido/cable/fido_cable_discovery.cc
+++ b/device/fido/cable/fido_cable_discovery.cc
@@ -30,8 +30,10 @@
 #include "device/fido/fido_parsing_utils.h"
 #include "third_party/boringssl/src/include/openssl/aes.h"
 #include "third_party/boringssl/src/include/openssl/digest.h"
+#include "third_party/boringssl/src/include/openssl/ec.h"
 #include "third_party/boringssl/src/include/openssl/hkdf.h"
 #include "third_party/boringssl/src/include/openssl/mem.h"
+#include "third_party/boringssl/src/include/openssl/obj.h"
 
 namespace device {
 
@@ -104,6 +106,25 @@
   return advertisement_data;
 }
 
+enum class QRValue : uint8_t {
+  QR_SECRET = 0,
+  IDENTITY_KEY_SEED = 1,
+};
+
+void DeriveQRValue(base::span<const uint8_t, 32> qr_generator_key,
+                   const int64_t tick,
+                   QRValue type,
+                   base::span<uint8_t> out) {
+  uint8_t hkdf_input[sizeof(uint64_t) + 1];
+  memcpy(hkdf_input, &tick, sizeof(uint64_t));
+  hkdf_input[sizeof(uint64_t)] = base::strict_cast<uint8_t>(type);
+
+  bool ok = HKDF(out.data(), out.size(), EVP_sha256(), qr_generator_key.data(),
+                 qr_generator_key.size(),
+                 /*salt=*/nullptr, 0, hkdf_input, sizeof(hkdf_input));
+  DCHECK(ok);
+}
+
 }  // namespace
 
 // CableDiscoveryData -------------------------------------
@@ -124,22 +145,36 @@
 }
 
 CableDiscoveryData::CableDiscoveryData(
-    base::span<const uint8_t, kCableQRSecretSize> qr_secret) {
-  version = Version::V2;
-  v2.emplace();
+    base::span<const uint8_t, kCableQRSecretSize> qr_secret,
+    base::span<const uint8_t, kCableIdentityKeySeedSize> identity_key_seed) {
+  InitFromQRSecret(qr_secret);
+  v2->local_identity_seed = fido_parsing_utils::Materialize(identity_key_seed);
+}
 
-  static const char kEIDGen[] = "caBLE QR to EID generator key";
-  bool ok =
-      HKDF(v2->eid_gen_key.data(), v2->eid_gen_key.size(), EVP_sha256(),
-           qr_secret.data(), qr_secret.size(), /*salt=*/nullptr, 0,
-           reinterpret_cast<const uint8_t*>(kEIDGen), sizeof(kEIDGen) - 1);
-  DCHECK(ok);
+// static
+base::Optional<CableDiscoveryData> CableDiscoveryData::FromQRData(
+    base::span<const uint8_t,
+               kCableCompressedPublicKeySize + kCableQRSecretSize> qr_data) {
+  auto qr_secret = qr_data.subspan(kCableCompressedPublicKeySize);
+  CableDiscoveryData discovery_data;
+  discovery_data.InitFromQRSecret(base::span<const uint8_t, kCableQRSecretSize>(
+      qr_secret.data(), qr_secret.size()));
 
-  static const char kPSKGen[] = "caBLE QR to PSK generator key";
-  ok = HKDF(v2->psk_gen_key.data(), v2->psk_gen_key.size(), EVP_sha256(),
-            qr_secret.data(), qr_secret.size(), /*salt=*/nullptr, 0,
-            reinterpret_cast<const uint8_t*>(kPSKGen), sizeof(kPSKGen) - 1);
-  DCHECK(ok);
+  bssl::UniquePtr<EC_GROUP> p256(
+      EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1));
+  bssl::UniquePtr<EC_POINT> point(EC_POINT_new(p256.get()));
+  if (!EC_POINT_oct2point(p256.get(), point.get(), qr_data.data(),
+                          kCableCompressedPublicKeySize, /*ctx=*/nullptr)) {
+    return base::nullopt;
+  }
+  CableAuthenticatorIdentityKey& identity_key =
+      discovery_data.v2->peer_identity.emplace();
+  CHECK_EQ(identity_key.size(),
+           EC_POINT_point2oct(
+               p256.get(), point.get(), POINT_CONVERSION_UNCOMPRESSED,
+               identity_key.data(), identity_key.size(), /*ctx=*/nullptr));
+
+  return discovery_data;
 }
 
 CableDiscoveryData::CableDiscoveryData(const CableDiscoveryData& data) =
@@ -240,24 +275,69 @@
 std::array<uint8_t, kCableQRSecretSize> CableDiscoveryData::DeriveQRSecret(
     base::span<const uint8_t, 32> qr_generator_key,
     const int64_t tick) {
-  union {
-    int64_t i;
-    uint8_t bytes[8];
-  } current_tick;
-  current_tick.i = tick;
-
   std::array<uint8_t, kCableQRSecretSize> ret;
-  bool ok = HKDF(ret.data(), ret.size(), EVP_sha256(), qr_generator_key.data(),
-                 qr_generator_key.size(),
-                 /*salt=*/nullptr, 0, current_tick.bytes, sizeof(current_tick));
-  DCHECK(ok);
+  DeriveQRValue(qr_generator_key, tick, QRValue::QR_SECRET, ret);
   return ret;
 }
 
+// static
+CableIdentityKeySeed CableDiscoveryData::DeriveIdentityKeySeed(
+    base::span<const uint8_t, 32> qr_generator_key,
+    const int64_t tick) {
+  std::array<uint8_t, kCableIdentityKeySeedSize> ret;
+  DeriveQRValue(qr_generator_key, tick, QRValue::IDENTITY_KEY_SEED, ret);
+  return ret;
+}
+
+// static
+CableQRData CableDiscoveryData::DeriveQRData(
+    base::span<const uint8_t, 32> qr_generator_key,
+    const int64_t tick) {
+  auto identity_key_seed = DeriveIdentityKeySeed(qr_generator_key, tick);
+  bssl::UniquePtr<EC_GROUP> p256(
+      EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1));
+  bssl::UniquePtr<EC_KEY> identity_key(EC_KEY_derive_from_secret(
+      p256.get(), identity_key_seed.data(), identity_key_seed.size()));
+  const EC_POINT* public_key = EC_KEY_get0_public_key(identity_key.get());
+  CableQRData qr_data;
+  static_assert(
+      qr_data.size() == kCableCompressedPublicKeySize + kCableQRSecretSize,
+      "this code needs to be updated");
+  CHECK_EQ(kCableCompressedPublicKeySize,
+           EC_POINT_point2oct(p256.get(), public_key,
+                              POINT_CONVERSION_COMPRESSED, qr_data.data(),
+                              kCableCompressedPublicKeySize, /*ctx=*/nullptr));
+
+  auto qr_secret = CableDiscoveryData::DeriveQRSecret(qr_generator_key, tick);
+  memcpy(&qr_data.data()[kCableCompressedPublicKeySize], qr_secret.data(),
+         qr_secret.size());
+
+  return qr_data;
+}
+
 CableDiscoveryData::V2Data::V2Data() = default;
 CableDiscoveryData::V2Data::V2Data(const V2Data&) = default;
 CableDiscoveryData::V2Data::~V2Data() = default;
 
+void CableDiscoveryData::InitFromQRSecret(
+    base::span<const uint8_t, kCableQRSecretSize> qr_secret) {
+  version = Version::V2;
+  v2.emplace();
+
+  static const char kEIDGen[] = "caBLE QR to EID generator key";
+  bool ok =
+      HKDF(v2->eid_gen_key.data(), v2->eid_gen_key.size(), EVP_sha256(),
+           qr_secret.data(), qr_secret.size(), /*salt=*/nullptr, 0,
+           reinterpret_cast<const uint8_t*>(kEIDGen), sizeof(kEIDGen) - 1);
+  DCHECK(ok);
+
+  static const char kPSKGen[] = "caBLE QR to PSK generator key";
+  ok = HKDF(v2->psk_gen_key.data(), v2->psk_gen_key.size(), EVP_sha256(),
+            qr_secret.data(), qr_secret.size(), /*salt=*/nullptr, 0,
+            reinterpret_cast<const uint8_t*>(kPSKGen), sizeof(kPSKGen) - 1);
+  DCHECK(ok);
+}
+
 // FidoCableDiscovery::CableV1DiscoveryEvent  ---------------------------------
 
 // CableV1DiscoveryEvent enumerates several things that can occur during a caBLE
@@ -373,7 +453,8 @@
 
       handler.reset(new FidoCableV2HandshakeHandler(
           device, discovery_data.v2->psk_gen_key, nonce, eid,
-          discovery_data.v2->peer_identity, *pairing_callback_));
+          discovery_data.v2->peer_identity,
+          discovery_data.v2->local_identity_seed, *pairing_callback_));
       break;
     }
 
@@ -782,7 +863,9 @@
     for (int i = 0; i < kNumPreviousTicks; i++) {
       auto qr_secret = CableDiscoveryData::DeriveQRSecret(*qr_generator_key_,
                                                           current_tick - i);
-      CableDiscoveryData candidate(qr_secret);
+      auto identity_key_seed = CableDiscoveryData::DeriveIdentityKeySeed(
+          *qr_generator_key_, current_tick - i);
+      CableDiscoveryData candidate(qr_secret, identity_key_seed);
       auto maybe_nonce = candidate.Match(authenticator_eid);
       if (maybe_nonce) {
         return Result(candidate, *maybe_nonce, authenticator_eid, i);
@@ -790,10 +873,11 @@
     }
 
     if (base::Contains(noted_obsolete_eids_, authenticator_eid)) {
+      std::array<uint8_t, kCableIdentityKeySeedSize> dummy_seed;
       for (int i = kNumPreviousTicks; i < 2 * kNumPreviousTicks; i++) {
         auto qr_secret = CableDiscoveryData::DeriveQRSecret(*qr_generator_key_,
                                                             current_tick - i);
-        CableDiscoveryData candidate(qr_secret);
+        CableDiscoveryData candidate(qr_secret, dummy_seed);
         if (candidate.Match(authenticator_eid)) {
           noted_obsolete_eids_.insert(authenticator_eid);
           FIDO_LOG(DEBUG)
diff --git a/device/fido/cable/fido_cable_handshake_handler.cc b/device/fido/cable/fido_cable_handshake_handler.cc
index a4a6a4d0..07abf0c1 100644
--- a/device/fido/cable/fido_cable_handshake_handler.cc
+++ b/device/fido/cable/fido_cable_handshake_handler.cc
@@ -187,11 +187,13 @@
     base::span<const uint8_t, 8> nonce,
     base::span<const uint8_t, kCableEphemeralIdSize> eid,
     base::Optional<base::span<const uint8_t, kP256PointSize>> peer_identity,
+    base::Optional<base::span<const uint8_t, kCableIdentityKeySeedSize>>
+        local_seed,
     base::RepeatingCallback<void(std::unique_ptr<CableDiscoveryData>)>
         pairing_callback)
     : cable_device_(cable_device),
       pairing_callback_(std::move(pairing_callback)),
-      handshake_(psk_gen_key, nonce, eid, peer_identity) {}
+      handshake_(psk_gen_key, nonce, eid, peer_identity, local_seed) {}
 
 FidoCableV2HandshakeHandler::~FidoCableV2HandshakeHandler() = default;
 
diff --git a/device/fido/cable/fido_cable_handshake_handler.h b/device/fido/cable/fido_cable_handshake_handler.h
index ce0d80d1..1b43b09 100644
--- a/device/fido/cable/fido_cable_handshake_handler.h
+++ b/device/fido/cable/fido_cable_handshake_handler.h
@@ -87,6 +87,8 @@
       base::span<const uint8_t, 8> nonce,
       base::span<const uint8_t, kCableEphemeralIdSize> eid,
       base::Optional<base::span<const uint8_t, 65>> peer_identity,
+      base::Optional<base::span<const uint8_t, kCableIdentityKeySeedSize>>
+          local_seed,
       base::RepeatingCallback<void(std::unique_ptr<CableDiscoveryData>)>
           pairing_callback);
   ~FidoCableV2HandshakeHandler() override;
diff --git a/device/fido/cable/fido_cable_handshake_handler_v2_fuzzer.cc b/device/fido/cable/fido_cable_handshake_handler_v2_fuzzer.cc
index 5274eec..8a93c1e 100644
--- a/device/fido/cable/fido_cable_handshake_handler_v2_fuzzer.cc
+++ b/device/fido/cable/fido_cable_handshake_handler_v2_fuzzer.cc
@@ -36,6 +36,11 @@
     0x9c, 0xa5, 0x5c, 0x51, 0x2f, 0x9e, 0x4a, 0x00, 0x12, 0x66,
 };
 constexpr char kTestDeviceAddress[] = "Fake_Address";
+constexpr std::array<uint8_t, 32> kLocalSeed = {
+    0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+    0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+    0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+};
 
 }  // namespace
 
@@ -48,14 +53,17 @@
       device::FidoCableDevice::State::kDeviceError);
 
   base::Optional<base::span<const uint8_t, 65>> peer_identity;
+  base::Optional<base::span<const uint8_t, 32>> local_seed;
   if (!input.empty() && (input[0] & 1)) {
     peer_identity = kTestPeerIdentity;
     input = input.subspan(1);
+  } else {
+    local_seed = kLocalSeed;
   }
 
   device::FidoCableV2HandshakeHandler handshake_handler_v2(
       &test_cable_device, kTestPSKGeneratorKey, kTestNonce, kTestEphemeralID,
-      peer_identity, base::DoNothing());
+      peer_identity, local_seed, base::DoNothing());
   handshake_handler_v2.InitiateCableHandshake(base::DoNothing());
   handshake_handler_v2.ValidateAuthenticatorHandshakeMessage(input);
   return 0;
diff --git a/device/fido/cable/noise.cc b/device/fido/cable/noise.cc
index 3239819..43d8819 100644
--- a/device/fido/cable/noise.cc
+++ b/device/fido/cable/noise.cc
@@ -59,11 +59,11 @@
 
 void Noise::Init(Noise::HandshakeType type) {
   // See https://www.noiseprotocol.org/noise.html#the-handshakestate-object
-  static const char kNNProtocolName[] = "Noise_NNpsk0_P256_AESGCM_SHA256";
+  static const char kKNProtocolName[] = "Noise_KNpsk0_P256_AESGCM_SHA256";
   static const char kNKProtocolName[] = "Noise_NKpsk0_P256_AESGCM_SHA256";
-  static_assert(sizeof(kNKProtocolName) == sizeof(kNNProtocolName),
+  static_assert(sizeof(kNKProtocolName) == sizeof(kKNProtocolName),
                 "protocol names are different lengths");
-  static_assert(sizeof(kNNProtocolName) == crypto::kSHA256Length,
+  static_assert(sizeof(kKNProtocolName) == crypto::kSHA256Length,
                 "name may need padding if not HASHLEN bytes long");
   static_assert(
       std::tuple_size<decltype(chaining_key_)>::value == crypto::kSHA256Length,
@@ -76,8 +76,8 @@
       memcpy(chaining_key_.data(), kNKProtocolName, sizeof(kNKProtocolName));
       break;
 
-    case HandshakeType::kNNpsk0:
-      memcpy(chaining_key_.data(), kNNProtocolName, sizeof(kNNProtocolName));
+    case HandshakeType::kKNpsk0:
+      memcpy(chaining_key_.data(), kKNProtocolName, sizeof(kKNProtocolName));
       break;
   }
 
diff --git a/device/fido/cable/noise.h b/device/fido/cable/noise.h
index 12f9958..8bd4d8c 100644
--- a/device/fido/cable/noise.h
+++ b/device/fido/cable/noise.h
@@ -22,7 +22,7 @@
  public:
   // HandshakeType enumerates the supported handshake patterns.
   enum class HandshakeType {
-    kNNpsk0,  // https://noiseexplorer.com/patterns/NNpsk0/
+    kKNpsk0,  // https://noiseexplorer.com/patterns/KNpsk0/
     kNKpsk0,  // https://noiseexplorer.com/patterns/NKpsk0/
   };
 
diff --git a/device/fido/cable/v2_handshake.cc b/device/fido/cable/v2_handshake.cc
index 46c6f96..95947f7c 100644
--- a/device/fido/cable/v2_handshake.cc
+++ b/device/fido/cable/v2_handshake.cc
@@ -171,14 +171,20 @@
     base::span<const uint8_t, 32> psk_gen_key,
     base::span<const uint8_t, 8> nonce,
     base::span<const uint8_t, kCableEphemeralIdSize> eid,
-    base::Optional<base::span<const uint8_t, kP256PointSize>> peer_identity)
+    base::Optional<base::span<const uint8_t, kP256PointSize>> peer_identity,
+    base::Optional<base::span<const uint8_t, kCableIdentityKeySeedSize>>
+        local_seed)
     : eid_(fido_parsing_utils::Materialize(eid)) {
+  DCHECK(peer_identity.has_value() ^ local_seed.has_value());
   HKDF(psk_.data(), psk_.size(), EVP_sha256(), psk_gen_key.data(),
        psk_gen_key.size(), /*salt=*/nonce.data(), nonce.size(),
        /*info=*/nullptr, 0);
   if (peer_identity) {
     peer_identity_ = fido_parsing_utils::Materialize(*peer_identity);
   }
+  if (local_seed) {
+    local_seed_ = fido_parsing_utils::Materialize(*local_seed);
+  }
 }
 
 HandshakeInitiator::~HandshakeInitiator() = default;
@@ -188,7 +194,7 @@
     noise_.Init(Noise::HandshakeType::kNKpsk0);
     noise_.MixHash(kPairedPrologue);
   } else {
-    noise_.Init(Noise::HandshakeType::kNNpsk0);
+    noise_.Init(Noise::HandshakeType::kKNpsk0);
     noise_.MixHash(kQRPrologue);
   }
 
@@ -246,11 +252,11 @@
 
   bssl::UniquePtr<EC_POINT> peer_point(
       EC_POINT_new(EC_KEY_get0_group(ephemeral_key_.get())));
-  uint8_t shared_key[32];
+  uint8_t shared_key_ee[32];
   const EC_GROUP* group = EC_KEY_get0_group(ephemeral_key_.get());
   if (!EC_POINT_oct2point(group, peer_point.get(), peer_point_bytes.data(),
                           peer_point_bytes.size(), /*ctx=*/nullptr) ||
-      !ECDH_compute_key(shared_key, sizeof(shared_key), peer_point.get(),
+      !ECDH_compute_key(shared_key_ee, sizeof(shared_key_ee), peer_point.get(),
                         ephemeral_key_.get(), /*kdf=*/nullptr)) {
     FIDO_LOG(DEBUG) << "Peer's P-256 point not on curve.";
     return base::nullopt;
@@ -258,7 +264,19 @@
 
   noise_.MixHash(peer_point_bytes);
   noise_.MixKey(peer_point_bytes);
-  noise_.MixKey(shared_key);
+  noise_.MixKey(shared_key_ee);
+
+  if (local_seed_) {
+    uint8_t shared_key_se[32];
+    bssl::UniquePtr<EC_KEY> identity_key(EC_KEY_derive_from_secret(
+        group, local_seed_->data(), local_seed_->size()));
+    if (!ECDH_compute_key(shared_key_se, sizeof(shared_key_se),
+                          peer_point.get(), identity_key.get(),
+                          /*kdf=*/nullptr)) {
+      return base::nullopt;
+    }
+    noise_.MixKey(shared_key_se);
+  }
 
   auto plaintext = noise_.DecryptAndHash(ciphertext);
   if (!plaintext || plaintext->empty() != peer_identity_.has_value()) {
@@ -268,7 +286,7 @@
 
   base::Optional<std::unique_ptr<CableDiscoveryData>> discovery_data;
   if (!peer_identity_) {
-    // Handshakes without a peer identity (i.e. NNpsk0 handshakes setup from a
+    // Handshakes without a peer identity (i.e. KNpsk0 handshakes setup from a
     // QR code) send a padded message in the reply. This message can,
     // optionally, contain CBOR-encoded, long-term pairing information.
     const size_t padding_length = (*plaintext)[plaintext->size() - 1];
@@ -322,10 +340,12 @@
     base::span<const uint8_t, 32> psk_gen_key,
     const NonceAndEID& nonce_and_eid,
     const EC_KEY* identity,
+    const EC_POINT* peer_identity,
     const CableDiscoveryData* pairing_data,
     base::span<const uint8_t> in,
     std::vector<uint8_t>* out_response) {
   DCHECK(identity == nullptr || pairing_data == nullptr);
+  DCHECK(identity == nullptr ^ peer_identity == nullptr);
 
   CBS cbs = CBSFromSpan(in);
 
@@ -348,7 +368,7 @@
     noise.Init(device::Noise::HandshakeType::kNKpsk0);
     noise.MixHash(kPairedPrologue);
   } else {
-    noise.Init(device::Noise::HandshakeType::kNNpsk0);
+    noise.Init(device::Noise::HandshakeType::kKNpsk0);
     noise.MixHash(kQRPrologue);
   }
 
@@ -398,12 +418,21 @@
   noise.MixHash(ephemeral_key_public_bytes);
   noise.MixKey(ephemeral_key_public_bytes);
 
-  uint8_t shared_key[32];
-  if (!ECDH_compute_key(shared_key, sizeof(shared_key), peer_point.get(),
+  uint8_t shared_key_ee[32];
+  if (!ECDH_compute_key(shared_key_ee, sizeof(shared_key_ee), peer_point.get(),
                         ephemeral_key.get(), /*kdf=*/nullptr)) {
     return base::nullopt;
   }
-  noise.MixKey(shared_key);
+  noise.MixKey(shared_key_ee);
+
+  if (peer_identity) {
+    uint8_t shared_key_se[32];
+    if (!ECDH_compute_key(shared_key_se, sizeof(shared_key_se), peer_identity,
+                          ephemeral_key.get(), /*kdf=*/nullptr)) {
+      return base::nullopt;
+    }
+    noise.MixKey(shared_key_se);
+  }
 
   std::vector<uint8_t> my_ciphertext;
   if (!identity) {
diff --git a/device/fido/cable/v2_handshake.h b/device/fido/cable/v2_handshake.h
index fec9ba3..fdfdeb7 100644
--- a/device/fido/cable/v2_handshake.h
+++ b/device/fido/cable/v2_handshake.h
@@ -78,7 +78,11 @@
       // peer_identity, if given, specifies that this is a paired handshake
       // and then contains an X9.62, P-256 public key for the peer. Otherwise
       // this is a QR-code handshake.
-      base::Optional<base::span<const uint8_t, kP256PointSize>> peer_identity);
+      base::Optional<base::span<const uint8_t, kP256PointSize>> peer_identity,
+      // local_identity must be provided if |peer_identity| is not. It contains
+      // the seed for deriving the local identity key.
+      base::Optional<base::span<const uint8_t, kCableIdentityKeySeedSize>>
+          local_identity);
 
   ~HandshakeInitiator();
 
@@ -100,6 +104,7 @@
   std::array<uint8_t, 32> psk_;
 
   base::Optional<std::array<uint8_t, kP256PointSize>> peer_identity_;
+  base::Optional<std::array<uint8_t, kCableIdentityKeySeedSize>> local_seed_;
   bssl::UniquePtr<EC_KEY> ephemeral_key_;
 };
 
@@ -112,6 +117,9 @@
     // identity, if not nullptr, specifies that this is a paired handshake and
     // contains the long-term identity key for this authenticator.
     const EC_KEY* identity,
+    // peer_identity, which must be non-nullptr iff |identity| is nullptr,
+    // contains the peer's public key as derived from the QR-code data.
+    const EC_POINT* peer_identity,
     // pairing_data, if not nullptr, contains long-term pairing data that will
     // be shared with the peer. This is mutually exclusive with |identity|.
     const CableDiscoveryData* pairing_data,
diff --git a/device/fido/cable/v2_handshake_unittest.cc b/device/fido/cable/v2_handshake_unittest.cc
index ab498ab..0b78e85 100644
--- a/device/fido/cable/v2_handshake_unittest.cc
+++ b/device/fido/cable/v2_handshake_unittest.cc
@@ -19,6 +19,7 @@
     std::fill(psk_gen_key_.begin(), psk_gen_key_.end(), 0);
     std::fill(nonce_and_eid_.first.begin(), nonce_and_eid_.first.end(), 1);
     std::fill(nonce_and_eid_.second.begin(), nonce_and_eid_.second.end(), 2);
+    std::fill(local_seed_.begin(), local_seed_.end(), 3);
 
     p256_key_.reset(EC_KEY_new_by_curve_name(NID_X9_62_prime256v1));
     const EC_GROUP* group = EC_KEY_get0_group(p256_key_.get());
@@ -28,13 +29,19 @@
                                 POINT_CONVERSION_UNCOMPRESSED,
                                 p256_public_key_.data(),
                                 p256_public_key_.size(), /*ctx=*/nullptr));
+    bssl::UniquePtr<EC_KEY> qr_identity(EC_KEY_derive_from_secret(
+        group, local_seed_.data(), local_seed_.size()));
+    qr_identity_.reset(
+        EC_POINT_dup(EC_KEY_get0_public_key(qr_identity.get()), group));
   }
 
  protected:
   std::array<uint8_t, 32> psk_gen_key_;
   NonceAndEID nonce_and_eid_;
   bssl::UniquePtr<EC_KEY> p256_key_;
+  bssl::UniquePtr<EC_POINT> qr_identity_;
   std::array<uint8_t, kP256PointSize> p256_public_key_;
+  std::array<uint8_t, kCableIdentityKeySeedSize> local_seed_;
 };
 
 TEST_F(CableV2HandshakeTest, MessageEncrytion) {
@@ -73,12 +80,13 @@
     HandshakeInitiator initiator(
         use_correct_key ? psk_gen_key_ : wrong_psk_gen_key,
         nonce_and_eid_.first, nonce_and_eid_.second,
-        /*peer_identity=*/base::nullopt);
+        /*peer_identity=*/base::nullopt, local_seed_);
     std::vector<uint8_t> message = initiator.BuildInitialMessage();
     std::vector<uint8_t> response;
     base::Optional<std::unique_ptr<Crypter>> response_crypter(
         RespondToHandshake(psk_gen_key_, nonce_and_eid_, /*identity=*/nullptr,
-                           /*pairing_data=*/nullptr, message, &response));
+                           qr_identity_.get(), /*pairing_data=*/nullptr,
+                           message, &response));
     ASSERT_EQ(response_crypter.has_value(), use_correct_key);
     if (!use_correct_key) {
       continue;
@@ -105,12 +113,12 @@
 
   HandshakeInitiator initiator(psk_gen_key_, nonce_and_eid_.first,
                                nonce_and_eid_.second,
-                               /*peer_identity=*/base::nullopt);
+                               /*peer_identity=*/base::nullopt, local_seed_);
   std::vector<uint8_t> message = initiator.BuildInitialMessage();
   std::vector<uint8_t> response;
   base::Optional<std::unique_ptr<Crypter>> response_crypter(
       RespondToHandshake(psk_gen_key_, nonce_and_eid_, /*identity=*/nullptr,
-                         &pairing, message, &response));
+                         qr_identity_.get(), &pairing, message, &response));
   ASSERT_TRUE(response_crypter.has_value());
   base::Optional<std::pair<std::unique_ptr<Crypter>,
                            base::Optional<std::unique_ptr<CableDiscoveryData>>>>
@@ -138,12 +146,14 @@
     SCOPED_TRACE(use_correct_key);
 
     HandshakeInitiator initiator(psk_gen_key_, nonce_and_eid_.first,
-                                 nonce_and_eid_.second, p256_public_key_);
+                                 nonce_and_eid_.second, p256_public_key_,
+                                 /*local_seed=*/base::nullopt);
     std::vector<uint8_t> message = initiator.BuildInitialMessage();
     std::vector<uint8_t> response;
     base::Optional<std::unique_ptr<Crypter>> response_crypter(
         RespondToHandshake(psk_gen_key_, nonce_and_eid_,
                            use_correct_key ? p256_key_.get() : wrong_key.get(),
+                           /*peer_identity=*/nullptr,
                            /*pairing=*/nullptr, message, &response));
     ASSERT_EQ(response_crypter.has_value(), use_correct_key);
 
diff --git a/docs/speed/benchmark/benchmark_short_list.md b/docs/speed/benchmark/benchmark_short_list.md
index 11d4e9a..e2bd880 100644
--- a/docs/speed/benchmark/benchmark_short_list.md
+++ b/docs/speed/benchmark/benchmark_short_list.md
@@ -25,5 +25,5 @@
 
 
 Instructions for how to run these benchmarks:
-*   [Running them locally](https://github.com/catapult-project/catapult/blob/master/telemetry/docs/run_benchmarks_locally.md)
+*   [Running them locally](https://chromium.googlesource.com/catapult/+/master/telemetry/docs/run_benchmarks_locally.md)
 *   [Running on perf trybot](https://chromium.googlesource.com/chromium/src/+/master/docs/speed/perf_trybots.md)
diff --git a/docs/speed/images/pinpoint-perf-try-dialog.png b/docs/speed/images/pinpoint-perf-try-dialog.png
index 4492ef4..4507323 100644
--- a/docs/speed/images/pinpoint-perf-try-dialog.png
+++ b/docs/speed/images/pinpoint-perf-try-dialog.png
Binary files differ
diff --git a/docs/speed/perf_trybots.md b/docs/speed/perf_trybots.md
index 5d92382..137a87f 100644
--- a/docs/speed/perf_trybots.md
+++ b/docs/speed/perf_trybots.md
@@ -29,21 +29,25 @@
 
 ![Perf Try Dialog](images/pinpoint-perf-try-dialog.png)
 
-
-**Build Arguments**| **Description**
+**Benchmark Configuration**| **Description**
 --- | ---
-Bug ID | (optional) A bug ID. Pinpoint will post updates on the bug.
-Gerrit URL | The patch you want to run the benchmark on. Patches in dependent repos (e.g. v8, skia) are supported.
 Bot | The device type to run the test on. All hardware configurations in our perf lab are supported.
-
-<br>
-
-**Test Arguments**| **Description**
---- | ---
 Benchmark | A telemetry benchmark. E.g. `system_health.common_desktop`<br><br>All the telemetry benchmarks are supported by the perf trybots. To get a full list, run `tools/perf/run_benchmark list`<br><br>To learn more about the benchmarks, you can read about the [system health benchmarks](https://docs.google.com/document/d/1BM_6lBrPzpMNMtcyi2NFKGIzmzIQ1oH3OlNG27kDGNU/edit?ts=57e92782), which test Chrome's performance at a high level, and the [benchmark harnesses](https://docs.google.com/spreadsheets/d/1ZdQ9OHqEjF5v8dqNjd7lGUjJnK6sgi8MiqO7eZVMgD0/edit#gid=0), which cover more specific areas.
-Story | (optional) A specific story from the benchmark to run.
+Story | (optional) A specific story from the benchmark to run. Note that if the story you want isn't on the dropdown it could be because the story is new and so the Chromeperf dashboard database doesn't know about it yet. In that case you can still free-form type the exact story name into the field.
+Story Tags | (optional) A list of story tags. All stories in the given benchmark that match any of the tags will be run.
 Extra Test Arguments | (optional) Extra arguments for the test. E.g. `--extra-chrome-categories="foo,bar"`<br><br>To see all arguments, run `tools/perf/run_benchmark run --help`
 
+Note that you must provide either a Story or a Story Tag for Pinpoint to run.
+Per [this explanation](https://bugs.chromium.org/p/chromium/issues/detail?id=1017811#c6), running an entire benchmark on Pinpoint can cause significant problems if the benchmark is large. For this reason, some small benchmarks have an 'all' tag available that applies to all the stories in the benchmark, so please use that tag to run all the stories for a small benchmark. Please see [this bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1023451) for details on work to add the 'all' tag to more benchmarks. If you want to run a large benchmark, consider choosing one of the tags that benchmark provides to select a subset of the available stories for that benchmark.
+
+<br><br>
+
+**Job Configuration**| **Description**
+--- | ---
+Base Git Hash | The Git Hash that you want to put your Gerrit patch on top of.
+Gerrit URL | The patch you want to run the benchmark on. Patches in dependent repos (e.g. v8, skia) are supported. Pinpoint will also post updates on the Gerrit comment list.
+Bug ID | (optional) A bug ID. Pinpoint will post updates on the bug.
+
 ## Interpreting the results
 
 ### Detailed results
diff --git a/extensions/browser/api/declarative_net_request/file_sequence_helper.cc b/extensions/browser/api/declarative_net_request/file_sequence_helper.cc
index c600000..3e6a8af98 100644
--- a/extensions/browser/api/declarative_net_request/file_sequence_helper.cc
+++ b/extensions/browser/api/declarative_net_request/file_sequence_helper.cc
@@ -8,9 +8,11 @@
 #include <set>
 #include <utility>
 
+#include "base/barrier_closure.h"
 #include "base/bind.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/memory/ref_counted.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/stl_util.h"
@@ -34,49 +36,56 @@
 namespace dnr_api = extensions::api::declarative_net_request;
 
 // A class to help in re-indexing multiple rulesets.
-class ReindexHelper {
+class ReindexHelper : public base::RefCountedThreadSafe<ReindexHelper> {
  public:
-  // Starts re-indexing rulesets. Must be called on the extension file task
-  // runner.
   using ReindexCallback = base::OnceCallback<void(LoadRequestData)>;
-  static void Start(LoadRequestData data, ReindexCallback callback) {
-    auto* helper = new ReindexHelper(std::move(data), std::move(callback));
-    helper->Start();
-  }
-
- private:
-  // We manage our own lifetime.
   ReindexHelper(LoadRequestData data, ReindexCallback callback)
       : data_(std::move(data)), callback_(std::move(callback)) {}
-  ~ReindexHelper() = default;
 
+  // Starts re-indexing rulesets. Must be called on the extension file task
+  // runner.
   void Start() {
     DCHECK(GetExtensionFileTaskRunner()->RunsTasksInCurrentSequence());
 
-    // Post tasks to reindex individual rulesets.
-    bool did_post_task = false;
+    std::vector<RulesetInfo*> rulesets_to_reindex;
     for (auto& ruleset : data_.rulesets) {
       if (ruleset.did_load_successfully())
         continue;
 
-      // Using Unretained is safe since this class manages its own lifetime and
-      // |this| won't be deleted until the |callback| returns.
-      auto callback = base::BindOnce(&ReindexHelper::OnReindexCompleted,
-                                     base::Unretained(this), &ruleset);
-      callback_count_++;
-      did_post_task = true;
-      ruleset.source().IndexAndPersistJSONRuleset(&decoder_,
-                                                  std::move(callback));
+      rulesets_to_reindex.push_back(&ruleset);
     }
 
-    // It's possible that the callbacks return synchronously and we are deleted
-    // at this point. Hence don't use any member variables here. Also, if we
-    // don't post any task, we'll leak. Ensure that's not the case.
-    DCHECK(did_post_task);
+    // |done_closure| will be invoked once |barrier_closure| is run
+    // |rulesets_to_reindex.size()| times.
+    base::OnceClosure done_closure =
+        base::BindOnce(&ReindexHelper::OnAllRulesetsReindexed, this);
+    base::RepeatingClosure barrier_closure = base::BarrierClosure(
+        rulesets_to_reindex.size(), std::move(done_closure));
+
+    // Post tasks to reindex individual rulesets.
+    for (RulesetInfo* ruleset : rulesets_to_reindex) {
+      auto callback = base::BindOnce(&ReindexHelper::OnReindexCompleted, this,
+                                     ruleset, barrier_closure);
+      ruleset->source().IndexAndPersistJSONRuleset(&decoder_,
+                                                   std::move(callback));
+    }
+  }
+
+ private:
+  friend class base::RefCountedThreadSafe<ReindexHelper>;
+  ~ReindexHelper() = default;
+
+  // Callback invoked when reindexing of all rulesets is completed.
+  void OnAllRulesetsReindexed() {
+    DCHECK(GetExtensionFileTaskRunner()->RunsTasksInCurrentSequence());
+
+    // Our job is done.
+    std::move(callback_).Run(std::move(data_));
   }
 
   // Callback invoked when a single ruleset is re-indexed.
   void OnReindexCompleted(RulesetInfo* ruleset,
+                          base::OnceClosure done_closure,
                           IndexAndPersistJSONRulesetResult result) {
     DCHECK(ruleset);
 
@@ -108,19 +117,11 @@
         "Extensions.DeclarativeNetRequest.RulesetReindexSuccessful",
         reindexing_success);
 
-    callback_count_--;
-    DCHECK_GE(callback_count_, 0);
-
-    if (callback_count_ == 0) {
-      // Our job is done.
-      std::move(callback_).Run(std::move(data_));
-      delete this;
-    }
+    std::move(done_closure).Run();
   }
 
   LoadRequestData data_;
   ReindexCallback callback_;
-  int callback_count_ = 0;
 
   // We use a single shared Data Decoder service instance to process all of the
   // rulesets for this ReindexHelper.
@@ -393,7 +394,10 @@
   auto reindex_callback =
       base::BindOnce(&FileSequenceHelper::OnRulesetsReindexed,
                      weak_factory_.GetWeakPtr(), std::move(ui_callback));
-  ReindexHelper::Start(std::move(load_data), std::move(reindex_callback));
+
+  auto reindex_helper = base::MakeRefCounted<ReindexHelper>(
+      std::move(load_data), std::move(reindex_callback));
+  reindex_helper->Start();
 }
 
 void FileSequenceHelper::UpdateDynamicRules(
diff --git a/extensions/browser/api/declarative_net_request/file_sequence_helper_unittest.cc b/extensions/browser/api/declarative_net_request/file_sequence_helper_unittest.cc
index 42ec3af..1ff01fe 100644
--- a/extensions/browser/api/declarative_net_request/file_sequence_helper_unittest.cc
+++ b/extensions/browser/api/declarative_net_request/file_sequence_helper_unittest.cc
@@ -133,6 +133,7 @@
           ASSERT_EQ(data.rulesets.size(), test_cases.size());
 
           for (size_t i = 0; i < data.rulesets.size(); i++) {
+            SCOPED_TRACE(base::StringPrintf("Testing ruleset %" PRIuS, i));
             const RulesetInfo& ruleset = data.rulesets[i];
             const LoadRulesetResult& expected_result =
                 test_cases[i].expected_result;
@@ -142,7 +143,8 @@
             EXPECT_EQ(expected_result.reindexing_successful,
                       ruleset.reindexing_successful());
             EXPECT_EQ(expected_result.load_result,
-                      ruleset.load_ruleset_result());
+                      ruleset.load_ruleset_result())
+                << ruleset.load_ruleset_result();
           }
 
           run_loop->Quit();
@@ -158,6 +160,27 @@
     run_loop.Run();
   }
 
+  // Initialize |num_rulesets| rulesets and returns the corresponding test
+  // cases.
+  std::vector<TestCase> InitializeRulesets(size_t num_rulesets) const {
+    std::vector<TestCase> test_cases;
+    test_cases.reserve(num_rulesets);
+
+    for (size_t i = 0; i < num_rulesets; i++) {
+      test_cases.emplace_back(CreateTemporarySource());
+
+      auto& test_case = test_cases.back();
+
+      std::unique_ptr<RulesetMatcher> matcher;
+      EXPECT_TRUE(CreateVerifiedMatcher({CreateGenericRule()}, test_case.source,
+                                        &matcher, &test_case.checksum));
+
+      // Initially loading all the rulesets should succeed.
+      test_case.expected_result.load_result = RulesetMatcher::kLoadSuccess;
+    }
+    return test_cases;
+  }
+
  private:
   // Run this on the trunk channel to ensure the API is available.
   ScopedCurrentChannel channel_;
@@ -170,24 +193,9 @@
   DISALLOW_COPY_AND_ASSIGN(FileSequenceHelperTest);
 };
 
-// Tests loading and reindexing multiple rulesets.
-TEST_F(FileSequenceHelperTest, MultipleRulesets) {
-  const int kNumRulesets = 3;
-  std::vector<TestCase> test_cases;
-
-  // First create |kNumRulesets| indexed rulesets.
-  for (size_t i = 0; i < kNumRulesets; i++) {
-    test_cases.emplace_back(CreateTemporarySource());
-
-    auto& test_case = test_cases.back();
-
-    std::unique_ptr<RulesetMatcher> matcher;
-    ASSERT_TRUE(CreateVerifiedMatcher({CreateGenericRule()}, test_case.source,
-                                      &matcher, &test_case.checksum));
-
-    // Initially loading all the rulesets should succeed.
-    test_case.expected_result.load_result = RulesetMatcher::kLoadSuccess;
-  }
+TEST_F(FileSequenceHelperTest, IndexedRulesetDeleted) {
+  const size_t kNumRulesets = 3;
+  std::vector<TestCase> test_cases = InitializeRulesets(kNumRulesets);
 
   TestLoadRulesets(test_cases);
 
@@ -203,10 +211,13 @@
   // The files should have been re-indexed.
   EXPECT_TRUE(base::PathExists(test_cases[0].source.indexed_path()));
   EXPECT_TRUE(base::PathExists(test_cases[2].source.indexed_path()));
+}
 
-  // Reset state.
-  test_cases[0].expected_result.reindexing_successful = base::nullopt;
-  test_cases[2].expected_result.reindexing_successful = base::nullopt;
+TEST_F(FileSequenceHelperTest, ChecksumMismatch) {
+  const size_t kNumRulesets = 4;
+  std::vector<TestCase> test_cases = InitializeRulesets(kNumRulesets);
+
+  TestLoadRulesets(test_cases);
 
   // Change the expected checksum for rulesets 2 and 3. Loading both of the
   // rulesets should now fail due to a checksum mismatch.
@@ -220,10 +231,13 @@
   test_cases[2].expected_result.reindexing_successful = false;
 
   TestLoadRulesets(test_cases);
+}
 
-  // Reset checksums.
-  test_cases[1].checksum++;
-  test_cases[2].checksum++;
+TEST_F(FileSequenceHelperTest, RulesetFormatVersionMismatch) {
+  const size_t kNumRulesets = 4;
+  std::vector<TestCase> test_cases = InitializeRulesets(kNumRulesets);
+
+  TestLoadRulesets(test_cases);
 
   // Now simulate a flatbuffer version mismatch.
   const int kIndexedRulesetFormatVersion = 100;
@@ -241,6 +255,30 @@
   TestLoadRulesets(test_cases);
 }
 
+TEST_F(FileSequenceHelperTest, JSONAndIndexedRulesetDeleted) {
+  const size_t kNumRulesets = 3;
+  std::vector<TestCase> test_cases = InitializeRulesets(kNumRulesets);
+
+  TestLoadRulesets(test_cases);
+
+  base::DeleteFile(test_cases[0].source.json_path(), false /* recursive */);
+  base::DeleteFile(test_cases[1].source.json_path(), false /* recursive */);
+  base::DeleteFile(test_cases[0].source.indexed_path(), false /* recursive */);
+  base::DeleteFile(test_cases[1].source.indexed_path(), false /* recursive */);
+
+  // Reindexing will fail since the JSON ruleset is now deleted.
+  test_cases[0].expected_result.reindexing_successful = false;
+  test_cases[1].expected_result.reindexing_successful = false;
+
+  test_cases[0].expected_result.load_result =
+      RulesetMatcher::kLoadErrorInvalidPath;
+  test_cases[1].expected_result.load_result =
+      RulesetMatcher::kLoadErrorInvalidPath;
+  test_cases[2].expected_result.load_result = RulesetMatcher::kLoadSuccess;
+
+  TestLoadRulesets(test_cases);
+}
+
 // Tests updating dynamic rules.
 TEST_F(FileSequenceHelperTest, UpdateDynamicRules) {
   // Simulate adding rules for the first time i.e. with no JSON and indexed
diff --git a/extensions/browser/api/networking_private/networking_private_chromeos.cc b/extensions/browser/api/networking_private/networking_private_chromeos.cc
index 509c685..f7aea2c 100644
--- a/extensions/browser/api/networking_private/networking_private_chromeos.cc
+++ b/extensions/browser/api/networking_private/networking_private_chromeos.cc
@@ -354,7 +354,8 @@
     }
   }
 
-  NET_LOG(USER) << "networkingPrivate.setProperties. GUID=" << guid;
+  NET_LOG(USER) << "networkingPrivate.setProperties for: "
+                << NetworkId(network);
   GetManagedConfigurationHandler()->SetProperties(
       network->path(), *properties, success_callback,
       base::Bind(&NetworkHandlerFailureCallback, failure_callback));
diff --git a/extensions/browser/api/networking_private/networking_private_event_router_chromeos.cc b/extensions/browser/api/networking_private/networking_private_event_router_chromeos.cc
index 6074fa3..1fed7fd 100644
--- a/extensions/browser/api/networking_private/networking_private_event_router_chromeos.cc
+++ b/extensions/browser/api/networking_private/networking_private_event_router_chromeos.cc
@@ -208,11 +208,13 @@
   EventRouter* event_router = EventRouter::Get(context_);
   if (!event_router->HasEventListener(
           api::networking_private::OnNetworksChanged::kEventName)) {
-    NET_LOG_EVENT("NetworkingPrivate.NetworkPropertiesUpdated: No Listeners",
-                  network->path());
+    NET_LOG(EVENT)
+        << "NetworkingPrivate.NetworkPropertiesUpdated: No Listeners: "
+        << NetworkId(network);
     return;
   }
-  NET_LOG_EVENT("NetworkingPrivate.NetworkPropertiesUpdated", network->path());
+  NET_LOG(EVENT) << "NetworkingPrivate.NetworkPropertiesUpdated: "
+                 << NetworkId(network);
   std::unique_ptr<base::ListValue> args(
       api::networking_private::OnNetworksChanged::Create(
           std::vector<std::string>(1, network->guid())));
@@ -252,10 +254,10 @@
   EventRouter* event_router = EventRouter::Get(context_);
   if (!event_router->HasEventListener(
           api::networking_private::OnCertificateListsChanged::kEventName)) {
-    NET_LOG_EVENT("NetworkingPrivate.OnCertificatesChanged: No Listeners", "");
+    NET_LOG(EVENT) << "NetworkingPrivate.OnCertificatesChanged: No Listeners";
     return;
   }
-  NET_LOG_EVENT("NetworkingPrivate.OnCertificatesChanged", "");
+  NET_LOG(EVENT) << "NetworkingPrivate.OnCertificatesChanged";
 
   std::unique_ptr<base::ListValue> args(
       api::networking_private::OnCertificateListsChanged::Create());
@@ -269,16 +271,18 @@
 void NetworkingPrivateEventRouterImpl::OnPortalDetectionCompleted(
     const NetworkState* network,
     const NetworkPortalDetector::CaptivePortalState& state) {
-  const std::string path = network ? network->guid() : std::string();
+  const std::string guid = network ? network->guid() : std::string();
 
   EventRouter* event_router = EventRouter::Get(context_);
   if (!event_router->HasEventListener(
           api::networking_private::OnPortalDetectionCompleted::kEventName)) {
-    NET_LOG_EVENT("NetworkingPrivate.OnPortalDetectionCompleted: No Listeners",
-                  path);
+    NET_LOG(EVENT)
+        << "NetworkingPrivate.OnPortalDetectionCompleted: No Listeners: "
+        << (network ? NetworkId(network) : "");
     return;
   }
-  NET_LOG_EVENT("NetworkingPrivate.OnPortalDetectionCompleted", path);
+  NET_LOG(EVENT) << "NetworkingPrivate.OnPortalDetectionCompleted: "
+                 << (network ? NetworkId(network) : "");
 
   api::networking_private::CaptivePortalStatus status =
       api::networking_private::CAPTIVE_PORTAL_STATUS_UNKNOWN;
@@ -304,7 +308,7 @@
   }
 
   std::unique_ptr<base::ListValue> args(
-      api::networking_private::OnPortalDetectionCompleted::Create(path,
+      api::networking_private::OnPortalDetectionCompleted::Create(guid,
                                                                   status));
   std::unique_ptr<Event> extension_event(
       new Event(events::NETWORKING_PRIVATE_ON_PORTAL_DETECTION_COMPLETED,
diff --git a/extensions/browser/extension_function.cc b/extensions/browser/extension_function.cc
index 68931200..d4ebbcc5 100644
--- a/extensions/browser/extension_function.cc
+++ b/extensions/browser/extension_function.cc
@@ -4,6 +4,7 @@
 
 #include "extensions/browser/extension_function.h"
 
+#include <numeric>
 #include <utility>
 
 #include "base/bind.h"
@@ -14,6 +15,11 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/user_metrics.h"
 #include "base/synchronization/lock.h"
+#include "base/threading/thread_checker.h"
+#include "base/trace_event/memory_allocator_dump.h"
+#include "base/trace_event/memory_dump_manager.h"
+#include "base/trace_event/memory_dump_provider.h"
+#include "base/trace_event/trace_event.h"
 #include "content/public/browser/notification_source.h"
 #include "content/public/browser/notification_types.h"
 #include "content/public/browser/render_frame_host.h"
@@ -21,6 +27,7 @@
 #include "content/public/browser/web_contents_observer.h"
 #include "extensions/browser/bad_message.h"
 #include "extensions/browser/extension_function_dispatcher.h"
+#include "extensions/browser/extension_function_registry.h"
 #include "extensions/browser/extension_message_filter.h"
 #include "extensions/browser/extensions_browser_client.h"
 #include "extensions/common/constants.h"
@@ -37,6 +44,92 @@
 
 namespace {
 
+class ExtensionFunctionMemoryDumpProvider
+    : public base::trace_event::MemoryDumpProvider {
+ public:
+  ExtensionFunctionMemoryDumpProvider() {
+    base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
+        this, "ExtensionFunctions", base::ThreadTaskRunnerHandle::Get());
+  }
+
+  ExtensionFunctionMemoryDumpProvider(
+      const ExtensionFunctionMemoryDumpProvider&) = delete;
+  ExtensionFunctionMemoryDumpProvider& operator=(
+      const ExtensionFunctionMemoryDumpProvider&) = delete;
+  ~ExtensionFunctionMemoryDumpProvider() override {
+    base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
+        this);
+  }
+
+  void AddFunctionName(const char* function_name) {
+    DCHECK(thread_checker_.CalledOnValidThread());
+    DCHECK(function_name);
+    auto it = function_map_.emplace(function_name, 0);
+    it.first->second++;
+  }
+
+  void RemoveFunctionName(const char* function_name) {
+    DCHECK(thread_checker_.CalledOnValidThread());
+    DCHECK(function_name);
+    auto it = function_map_.find(function_name);
+    DCHECK(it != function_map_.end());
+    DCHECK_GE(it->second, static_cast<uint64_t>(1));
+    if (it->second == 1)
+      function_map_.erase(it);
+    else
+      it->second--;
+  }
+
+  static ExtensionFunctionMemoryDumpProvider& GetInstance() {
+    static base::NoDestructor<ExtensionFunctionMemoryDumpProvider> tracker;
+    return *tracker;
+  }
+
+ private:
+  // base::trace_event::MemoryDumpProvider:
+  bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
+                    base::trace_event::ProcessMemoryDump* pmd) override {
+    DCHECK(thread_checker_.CalledOnValidThread());
+    auto* dump = pmd->CreateAllocatorDump("extensions/functions");
+    uint64_t function_count =
+        std::accumulate(function_map_.begin(), function_map_.end(), 0,
+                        [](uint64_t total, auto& function_pair) {
+                          return total + function_pair.second;
+                        });
+    dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameObjectCount,
+                    base::trace_event::MemoryAllocatorDump::kUnitsObjects,
+                    function_count);
+    // Collects the top 5 ExtensionFunctions with the most instances on memory
+    // dump.
+    std::vector<std::pair<const char*, uint64_t>> results(5);
+    std::partial_sort_copy(function_map_.begin(), function_map_.end(),
+                           results.begin(), results.end(),
+                           [](const auto& lhs, const auto& rhs) {
+                             return lhs.second > rhs.second;
+                           });
+    for (const auto& function_pair : results) {
+      if (function_pair.first) {
+        TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("memory-infra"),
+                     "ExtensionFunction::OnMemoryDump", "function",
+                     function_pair.first, "count", function_pair.second);
+      }
+    }
+    return true;
+  }
+
+  // This map is keyed based on const char* pointer since all the strings used
+  // here are defined in the registry held by the caller. The value needs to be
+  // stored as pointer to be able to add privacy safe trace events.
+  std::map<const char*, uint64_t> function_map_;
+
+  // Makes sure all methods are called from the same thread.
+  base::ThreadChecker thread_checker_;
+};
+
+void EnsureMemoryDumpProviderExists() {
+  ALLOW_UNUSED_LOCAL(ExtensionFunctionMemoryDumpProvider::GetInstance());
+}
+
 // Logs UMA about the performance for a given extension function run.
 void LogUma(bool success,
             base::TimeDelta elapsed_time,
@@ -283,9 +376,14 @@
   DISALLOW_COPY_AND_ASSIGN(RenderFrameHostTracker);
 };
 
-ExtensionFunction::ExtensionFunction() = default;
+ExtensionFunction::ExtensionFunction() {
+  EnsureMemoryDumpProviderExists();
+}
 
 ExtensionFunction::~ExtensionFunction() {
+  if (name())  // name_ may not be set in unit tests.
+    ExtensionFunctionMemoryDumpProvider::GetInstance().RemoveFunctionName(
+        name());
   if (dispatcher() && (render_frame_host() || is_from_service_worker())) {
     dispatcher()->OnExtensionFunctionCompleted(
         extension(), is_from_service_worker(), name());
@@ -309,6 +407,10 @@
   return availability.is_available();
 }
 
+void ExtensionFunction::RespondWithError(const std::string& error) {
+  Respond(Error(error));
+}
+
 bool ExtensionFunction::PreRunValidation(std::string* error) {
   // TODO(crbug.com/625646) This is a partial fix to avoid crashes when certain
   // extension functions run during shutdown. Browser or Notification creation
@@ -345,8 +447,7 @@
 }
 
 void ExtensionFunction::OnQuotaExceeded(const std::string& violation_error) {
-  error_ = violation_error;
-  SendResponseImpl(false);
+  RespondWithError(violation_error);
 }
 
 void ExtensionFunction::SetArgs(base::Value args) {
@@ -363,6 +464,13 @@
   return error_;
 }
 
+void ExtensionFunction::SetName(const char* name) {
+  DCHECK_EQ(nullptr, name_) << "SetName() called twice!";
+  DCHECK_NE(nullptr, name) << "Passed in nullptr to SetName()!";
+  name_ = name;
+  ExtensionFunctionMemoryDumpProvider::GetInstance().AddFunctionName(name);
+}
+
 void ExtensionFunction::SetBadMessage() {
   bad_message_ = true;
 
diff --git a/extensions/browser/extension_function.h b/extensions/browser/extension_function.h
index 31986e0..d2dc7b3 100644
--- a/extensions/browser/extension_function.h
+++ b/extensions/browser/extension_function.h
@@ -112,6 +112,9 @@
   // checks in Run(), such as for specific host permissions or user gestures.
   bool HasPermission() const;
 
+  // Sends |error| as an error response.
+  void RespondWithError(const std::string& error);
+
   // The result of a function call.
   //
   // Use NoArguments(), OneArgument(), ArgumentList(), or Error()
@@ -225,7 +228,7 @@
 
   // Specifies the name of the function. A long-lived string (such as a string
   // literal) must be provided.
-  void set_name(const char* name) { name_ = name; }
+  virtual void SetName(const char* name);
   const char* name() const { return name_; }
 
   void set_profile_id(void* profile_id) { profile_id_ = profile_id; }
diff --git a/extensions/browser/extension_function_dispatcher.cc b/extensions/browser/extension_function_dispatcher.cc
index de55074..5b43dcfc 100644
--- a/extensions/browser/extension_function_dispatcher.cc
+++ b/extensions/browser/extension_function_dispatcher.cc
@@ -51,6 +51,8 @@
 namespace extensions {
 namespace {
 
+constexpr char kCreationFailed[] = "Access to extension API denied.";
+
 // Notifies the ApiActivityMonitor that an extension API function has been
 // called. May be called from any thread.
 void NotifyApiFunctionCalled(const std::string& extension_id,
@@ -460,7 +462,7 @@
     const ExtensionFunction::ResponseCallback& callback) {
   if (!function->HasPermission()) {
     LOG(ERROR) << "Permission denied for " << params.name;
-    SendAccessDenied(callback);
+    function->RespondWithError(kCreationFailed);
     return false;
   }
   return true;
@@ -481,7 +483,7 @@
       ExtensionFunctionRegistry::GetInstance().NewFunction(params.name);
   if (!function) {
     LOG(ERROR) << "Unknown Extension API - " << params.name;
-    SendAccessDenied(callback);
+    callback.Run(ExtensionFunction::FAILED, base::ListValue(), kCreationFailed);
     return nullptr;
   }
 
@@ -499,13 +501,4 @@
 
   return function;
 }
-
-// static
-void ExtensionFunctionDispatcher::SendAccessDenied(
-    const ExtensionFunction::ResponseCallback& callback) {
-  base::ListValue empty_list;
-  callback.Run(ExtensionFunction::FAILED, empty_list,
-               "Access to extension API denied.");
-}
-
 }  // namespace extensions
diff --git a/extensions/browser/extension_function_dispatcher.h b/extensions/browser/extension_function_dispatcher.h
index e5a060b..a29c6e1 100644
--- a/extensions/browser/extension_function_dispatcher.h
+++ b/extensions/browser/extension_function_dispatcher.h
@@ -135,11 +135,6 @@
       void* profile_id,
       const ExtensionFunction::ResponseCallback& callback);
 
-  // Helper to run the response callback with an access denied error. Can be
-  // called on any thread.
-  static void SendAccessDenied(
-      const ExtensionFunction::ResponseCallback& callback);
-
   void DispatchWithCallbackInternal(
       const ExtensionHostMsg_Request_Params& params,
       content::RenderFrameHost* render_frame_host,
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index d2aefe5..c587220 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1523,6 +1523,8 @@
   PASSWORDSPRIVATE_GETPASSWORDCHECKSTATUS = 1460,
   TERMINALPRIVATE_OPENVMSHELLPROCESS = 1461,
   PASSWORDSPRIVATE_OPTINFORACCOUNTSTORAGE = 1462,
+  CRYPTOTOKENPRIVATE_RECORDREGISTERREQUEST = 1463,
+  CRYPTOTOKENPRIVATE_RECORDSIGNREQUEST = 1464,
   // Last entry: Add new entries above, then run:
   // python tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/extensions/browser/extension_function_registry.cc b/extensions/browser/extension_function_registry.cc
index 77b57192..9830352 100644
--- a/extensions/browser/extension_function_registry.cc
+++ b/extensions/browser/extension_function_registry.cc
@@ -41,7 +41,7 @@
     return nullptr;
   }
   scoped_refptr<ExtensionFunction> function = iter->second.factory_();
-  function->set_name(iter->second.function_name_);
+  function->SetName(iter->second.function_name_);
   function->set_histogram_value(iter->second.histogram_value_);
   return function;
 }
diff --git a/extensions/browser/quota_service_unittest.cc b/extensions/browser/quota_service_unittest.cc
index 140284c..47bf638c 100644
--- a/extensions/browser/quota_service_unittest.cc
+++ b/extensions/browser/quota_service_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/strings/string_util.h"
 #include "content/public/test/browser_task_environment.h"
 #include "extensions/browser/extension_function.h"
+#include "extensions/browser/extension_function_registry.h"
 #include "extensions/browser/quota_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -59,7 +60,7 @@
 
 class MockFunction : public ExtensionFunction {
  public:
-  explicit MockFunction(const char* name) { set_name(name); }
+  explicit MockFunction(const char* name) { SetName(name); }
 
   ResponseAction Run() override { return RespondLater(); }
 
diff --git a/gpu/BUILD.gn b/gpu/BUILD.gn
index 151649f..2cc0c63f 100644
--- a/gpu/BUILD.gn
+++ b/gpu/BUILD.gn
@@ -294,7 +294,6 @@
     "command_buffer/tests/gl_bind_uniform_location_unittest.cc",
     "command_buffer/tests/gl_chromium_framebuffer_mixed_samples_unittest.cc",
     "command_buffer/tests/gl_chromium_framebuffer_multisample_unittest.cc",
-    "command_buffer/tests/gl_chromium_path_rendering_unittest.cc",
     "command_buffer/tests/gl_clear_framebuffer_unittest.cc",
     "command_buffer/tests/gl_copy_tex_image_2d_workaround_unittest.cc",
     "command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc",
@@ -513,7 +512,6 @@
     "command_buffer/service/memory_program_cache_unittest.cc",
     "command_buffer/service/multi_draw_manager_unittest.cc",
     "command_buffer/service/passthrough_program_cache_unittest.cc",
-    "command_buffer/service/path_manager_unittest.cc",
     "command_buffer/service/program_cache_unittest.cc",
     "command_buffer/service/program_manager_unittest.cc",
     "command_buffer/service/query_manager_unittest.cc",
diff --git a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_path_rendering.txt b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_path_rendering.txt
deleted file mode 100644
index 74f7632..0000000
--- a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_path_rendering.txt
+++ /dev/null
@@ -1,1404 +0,0 @@
-Name
-
-    CHROMIUM_path_rendering
-
-Name Strings
-
-    GL_CHROMIUM_path_rendering
-
-Version
-
-    Last Modifed Date: August 14, 2014
-
-Dependencies
-
-    OpenGL ES 3.0 is required.
-
-Overview
-
-    This extensions implements path rendering using
-    OpenGL API.
-
-New Tokens
-
-    Accepted by the <matrixMode> parameter of MatrixLoadfCHROMIUM and
-    MatrixLoadIdentityCHROMIUM:
-    PATH_MODELVIEW_CHROMIUM                           0x1700
-    PATH_PROJECTION_CHROMIUM                          0x1701
-
-    Accepted in elements of the <commands> array parameter of
-    PathCommandsCHROMIUM:
-    CLOSE_PATH_CHROMIUM                               0x00
-    MOVE_TO_CHROMIUM                                  0x02
-    LINE_TO_CHROMIUM                                  0x04
-    QUADRATIC_CURVE_TO_CHROMIUM                       0x0A
-    CUBIC_CURVE_TO_CHROMIUM                           0x0C
-    CONIC_CURVE_TO_CHROMIUM                           0x1A
-
-    Accepted by the <pname> parameter of GetIntegerv,
-    GetFloatv:
-    PATH_MODELVIEW_MATRIX_CHROMIUM                    0x0BA6
-    PATH_PROJECTION_MATRIX_CHROMIUM                   0x0BA7
-
-    Accepted by the <pname> parameter of PathParameter{if}CHROMIUM:
-    PATH_STROKE_WIDTH_CHROMIUM                        0x9075
-    PATH_END_CAPS_CHROMIUM                            0x9076
-    PATH_JOIN_STYLE_CHROMIUM                          0x9079
-    PATH_MITER_LIMIT_CHROMIUM                         0x907a
-    PATH_STROKE_BOUND_CHROMIUM                        0x9086
-
-    Accepted by the <value> parameter of PathParameter{if}CHROMIUM:
-    FLAT_CHROMIUM                                     0x1D00
-    SQUARE_CHROMIUM                                   0x90a3
-    ROUND_CHROMIUM                                    0x90a4
-    BEVEL_CHROMIUM                                    0x90A6
-    MITER_REVERT_CHROMIUM                             0x90A7
-
-    Accepted by the <fillMode> parameter of StencilFillPathCHROMIUM
-    StencilFillPathInstancedCHROMIUM and
-    StencilThenCoverFillPathInstancedCHROMIUM:
-    COUNT_UP_CHROMIUM                                 0x9088
-    COUNT_DOWN_CHROMIUM                               0x9089
-
-    Accepted by the <coverMode> parameter of CoverFillPathCHROMIUM,
-    CoverStrokePath, StencilThenCoverFillPathCHROMIUM and
-    StencilThenCoverStrokePathCHROMIUM:
-    CONVEX_HULL_CHROMIUM                              0x908B
-    BOUNDING_BOX_CHROMIUM                             0x908D
-
-    Accepted by the <coverMode> parameter of CoverFillPathInstancedCHROMIUM,
-    CoverStrokePathInstanced, StencilThenCoverFillPathInstancedCHROMIUM and
-    StencilThenCoverStrokePathInstancedCHROMIUM:
-    CONVEX_HULL_CHROMIUM                              see above
-    BOUNDING_BOX_CHROMIUM                             see above
-    BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM           0x909C
-
-    Accepted by the <genMode> parameter of ProgramPathFragmentInputGen:
-    EYE_LINEAR_CHROMIUM                               0x2400
-    OBJECT_LINEAR_CHROMIUM                            0x2401
-    CONSTANT_CHROMIUM                                 0x8576
-
-    Accepted by the <transformType> parameter of
-    StencilFillPathInstancedCHROMIUM, StencilStrokePathInstancedCHROMIUM,
-    CoverFillPathInstancedCHROMIUM, CoverStrokePathInstancedCHROMIUM,
-    StencilThenCoverFillPathInstancedCHROMIUM and
-    StencilThenCoverStrokePathInstancedCHROMIUM:
-    TRANSLATE_X_CHROMIUM                              0x908E
-    TRANSLATE_Y_CHROMIUM                              0x908F
-    TRANSLATE_2D_CHROMIUM                             0x9090
-    TRANSLATE_3D_CHROMIUM                             0x9091
-    AFFINE_2D_CHROMIUM                                0x9092
-    AFFINE_3D_CHROMIUM                                0x9094
-    TRANSPOSE_AFFINE_2D_CHROMIUM                      0x9096
-    TRANSPOSE_AFFINE_3D_CHROMIUM                      0x9098
-
-New Procedures and Functions
-
-    void MatrixLoadfCHROMIUM(enum matrixMode, float* matrix)
-
-    Takes a pointer to a 4x4 matrix stored in column-major order as 16
-    consecutive floating-point values. The matrixMode specifies which
-    matrix, PATH_MODELVIEW_CHROMIUM or PATH_PROJECTION_CHROMIUM is used.
-
-    The funcition specifies either modelview or projection matrix
-    to be used with path rendering API calls.
-
-    void MatrixLoadIdentityCHROMIUM(enum matrixMode)
-
-    Effectively calls MatrixLoadf with the identity matrix.
-
-    uint GenPathsCHROMIUM(sizei range)
-
-    Returns an integer /n/ such that names /n/, ..., /n+range-1/ are
-    previously unused (i.e. there are /range/ previously unused path object
-    names starting at /n/).  These names are marked as used, for the
-    purposes of subsequent GenPathsCHROMIUM only, but they do not acquire
-    path object state until each particular name is used to specify
-    a path object.
-
-    Returns 0 if no new path name was marked as used. Reasons for this
-    include lack of free path names or range being 0 or a GL error
-    was generated.
-
-    INVALID_VALUE error is generated if range is negative.
-
-    INVALID_OPERATION error is generated if range does not fit in
-    32-bit uint.
-
-    void DeletePathsCHROMIUM(uint path, sizei range)
-
-    Deletes a path object where /path/ contains /range/ names of path objects to
-    be delete. After a path object is deleted, its name is again unused.
-    Unused names in /paths/ are silently ignored.
-
-    INVALID_VALUE error is generated if /range/ is negative.
-
-    INVALID_OPERATION error is generated if /range/ does not
-    fit in 32-bit uint.
-
-    INVALID_OPERATION error is generated if /path/ + /range/ does not fit
-    32-bit uint.
-
-    boolean IsPathCHROMIUM(uint path);
-
-    The query returns TRUE if /path/ is the name of a path object.  If path is
-    not the name of a path object, or if an error condition occurs,
-    IsPathCHROMIUM returns FALSE.  A name retuned by GenPathsCHROMIUM, but
-    without a path specified for it yet, is not the name of a path object.
-
-    void PathCommandsCHROMIUM(uint path, sizei numCommands,
-                        const ubyte* commands, sizei numCoords,
-                        enum coordType, const GLvoid* coords)
-
-    Specifies a path object commands for /path/ where /numCommands/
-    indicates the number of path commands, read from the array
-    /commands/, with which to initialize that path's command sequence.
-    The type of the coordinates read from the /coords/ array is
-    determined by the /coordType/ parameter which must be one of BYTE,
-    UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT, or FLOAT, otherwise the
-    INVALID_ENUM error is generated.  These path commands reference
-    coordinates read sequentially from the /coords/ array.
-
-    The /numCommands/ elements of the /commands/ array must be tokens
-    in Table 5.pathCommands.  The command sequence matches
-    the element order of the /commands/ array.  Each command references
-    a number of coordinates specified by "Coordinate count" column of
-    Table 5.pathCommands, starting with the first (zero) element of
-    the /coords/ array and advancing by the coordinate count for each
-    command.  If any of these /numCommands/ command values are not
-    listed in the "Token" column of Table
-    5.pathCommands, the INVALID_ENUM error is generated.
-
-    The INVALID_OPERATION error is generated if /numCoords/ does not
-    equal the number of coordinates referenced by the command sequence
-    specified by /numCommands/ and /commands/ (so /numCoords/ provides a
-    sanity check that the /coords/ array is being interpreted properly).
-    The error INVALID_VALUE is generated if either /numCommands/ or
-    /numCoords/ is negative.
-
-    The error INVALID_OPERATION is generated if /path/ is
-    not an existing path object.
-
-    The error INVALID_OPERATION is generated if
-    /numCommands/ + (size of /coordType/ data type) * /numCoords/
-    does not fit in 32-bit uint.
-
-    If the PathCommandsCHROMIUM command results in an error, the path object
-    named /path/ is not changed; if there is no error, the prior contents
-    of /path/, if /path/ was an existent path object, are lost and the
-    path object name /path/ becomes used.
-
-    void PathParameterfCHROMIUM(uint path, enum pname, float value)
-    void PathParameteriCHROMIUM(uint path, enum pname, int value)
-
-    The commands specify the value of path parameters for the specified path
-    object named /path/.  The error INVALID_OPERATION is generated if /path/ is
-    not an existing path object.
-
-    Each parameter has a single (scalar) value.
-
-    /pname/ must be one of the tokens in the "Name" column of
-    Table 5.pathParameters.
-    The required values or range of each allowed parameter name token
-    is listed in Table 5.pathParameter's "Required Values/Range" column.
-
-    For values of /pname/ listed in Table 5.pathsParameters, the specified
-    parameter is specified by /value/ when /value/ is a float or int,
-    or if /value/ is a pointer to a float or int, accessed through that
-    pointer.  The error INVALID_VALUE is generated if the specified
-    value is negative for parameters required to be non-negative in
-    Table 5.pathParameters.
-
-    The error INVALID_VALUE is generated if the specified parameter value
-    is not within the require range for parameters typed float or integer.
-    The error INVALID_ENUM is generated if the specified parameter value
-    is not one of the listed tokens for parameters typed enum.
-
-    void PathStencilFuncCHROMIUM(enum func, int ref, uint mask)
-
-    Configures the stencil function, stencil reference value, and stencil read
-    mask to be used by the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM
-    commands described subsequently. The parameters accept the same values
-    allowed by the StencilFunc command.
-
-    void StencilFillPathCHROMIUM(uint path, enum fillMode, uint mask)
-
-    The function transforms into window space the outline of the path object
-    named /path/ based on the current modelview, projection and viewport,
-    transforms (ignoring any vertex and/or geometry shader or program that might
-    be active/enabled) and then updates the stencil values of all /accessible
-    samples/ (explained below) in the framebuffer.  Each sample's stencil buffer
-    value is updated based on the winding number of that sample with respect to
-    the transformed outline of the path object with any non-closed subpath
-    forced closed and the specified /fillMode/.
-
-    If /path/ does not name an existing path object, the command does
-    nothing (and no error is generated).
-
-    If the path's command sequence specifies unclosed subpaths (so not
-    contours) due to MOVE_TO_CHROMIUM commands, such subpaths are trivially
-    closed by connecting with a line segment the initial and terminal
-    control points of each such path command subsequence.
-
-    Transformation of a path's outline works by taking all positions on the
-    path's outline in 2D path space (x,y) and constructing an object space
-    position (x,y,0,1) that is then used similar to as with the (xo,yo,zo,wo)
-    position in section 2.12 ("Fixed-Function Vertex Transformation") of OpenGL
-    3.2 (unabridged) Specification (Special Functions) to compute corresponding
-    eye-space coordinates (xe,ye,ze,we) and clip-space coordinates
-    (xc,yc,zc,wc).  A path outline's clip-space coordinates are further
-    transformed into window space similar to as described in section 2.16
-    ("Coordinate Transformations").  This process provides a mapping 2D path
-    coordinates to 2D window coordinates.  The resulting 2D window coordinates
-    are undefined if any of the transformations involved are singular or may be
-    inaccurate if any of the transformations (or their combination) are
-    ill-conditioned.
-
-    The winding number for a sample with respect to the path outline,
-    transformed into window space, is computed by counting the (signed)
-    number of revolutions around the sample point when traversing each
-    (trivially closed if necessary) contour once in the transformed path.
-    This traversal is performed in the order of the path's command
-    sequence.  Starting from an initially zero winding count, each
-    counterclockwise revolution when the front face mode is CCW (or
-    clockwise revolution when the front face mode is CW) around the sample
-    point increments the winding count by one; while each clockwise
-    revolution when the front face mode is CCW (or counterclockwise
-    revolution when the front face mode is CW) around the sample point
-    decrements the winding count by one.
-
-    The /mask/ parameter controls what subset of stencil bits are affected
-    by the command.
-
-    The /fillMode/ parameter must be one of INVERT, COUNT_UP_CHROMIUM
-    or COUNT_DOWN_CHROMIUM; otherwise the INVALID_ENUM error
-    is generated.  INVERT inverts the bits set in the effective /mask/
-    value for each sample's stencil value if the winding number for the
-    given sample is odd.  COUNT_UP_CHROMIUM adds with modulo n arithmetic the
-    winding number of each sample with the sample's prior stencil buffer
-    value; the result of this addition is written into the sample's
-    stencil value but the bits of the stencil value not set in the
-    effective /mask/ value are left unchanged.  COUNT_DOWN_CHROMIUM subtracts
-    with modulo /n/ arithmetic the winding number of each sample with the
-    sample's prior stencil buffer value; the result of this subtraction is
-    written into the sample's stencil value but the bits of the stencil
-    value not set in the effective /mask/ value are left unchanged.
-
-    The value of /n/ for the modulo /n/ arithmetic used by COUNT_UP_CHROMIUM
-    and COUNT_DOWN_CHROMIUM is the effective /mask/+1.  The error INVALID_VALUE
-    is generated if /fillMode/ is COUNT_UP_CHROMIUM or COUNT_DOWN_CHROMIUM and
-    the effective /mask/+1 is not an integer power of two.
-
-    ACCESSIBLE SAMPLES WITH RESPECT TO A TRANSFORMED PATH
-
-    The accessible samples of a transformed path that are updated are
-    the samples that remain after discarding the following samples:
-
-        *   Any sample that would be clipped similar to as specified in section
-            2.22 ("Primitive Clipping") of OpenGL 3.2 (unabridged) Specification
-            (Special Functions) because its corresponding position in clip space
-            (xc,yc,zc,wc) or (xe,ye,ze,we) would be clipped by the clip volume
-            or enabled client-defined clip planes.
-
-        *   Any sample that would fail the pixel ownership test (section
-            4.1.1) if rasterized.
-
-        *   Any sample that would fail the scissor test (section 4.1.2)
-            if SCISSOR_TEST is enabled.
-
-    And for the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM commands
-    (so not applicable to the CoverFillPathCHROMIUM and CoverStrokePathCHROMIUM
-    commands):
-        *   Any sample that would fail the (implicitly enabled) stencil test
-            with the stencil function configured based on the path stencil
-            function state configured by PathStencilFuncCHROMIUM.  In the case
-            of the StencilFillPathCHROMIUM and StencilStrokePathCHROMIUM
-            commands and their instanced versions, the effective stencil read
-            mask for the stencil mask is treated as the value of
-            PATH_STENCIL_VALUE_MASK bit-wise ANDed with the bit-invert of the
-            effective /mask/ parameter value; otherwise, for the cover commands,
-            the stencil test operates normally.  In the case the stencil test
-            fails during a path stencil operation, the stencil fail operation is
-            ignored and the pixel's stencil value is left undisturbed (as if the
-            stencil operation was KEEP).
-
-        *   The state of the face culling (CULL_FACE) enable is ignored.
-
-    void StencilStrokePathCHROMIUM(uint path, int reference, uint mask)
-
-    Transforms into window space the stroked region of the path object named
-    /path/ based on the current modelview, projection and viewport transforms
-    (ignoring any vertex and/or geometry shader or program that might be
-    active/enabled) and then updates the stencil values of a subset of the
-    accessible samples (see above) in the framebuffer.
-
-    If /path/ does not name an existing path object, the command does
-    nothing (and no error is generated).
-
-    The path object's specified stroke width (in path space) determines
-    the width of the path's stroked region.
-
-    The stroke of a transformed path's outline
-    is the region of window space defined by the union of:
-
-        *   Sweeping an orthogonal centered line segment of the (above
-            determined) effective stroke width along each path segment
-            in the path's transformed outline.
-
-        *   End cap regions (explained below) appended to the initial
-            and terminal control points of non-closed command sequences
-            in the path.  For a sequence of commands that form a closed
-            contour, the end cap regions are ignored.
-
-        *   Join style regions (explained below) between connected path
-            segments meet.
-
-    Any accessible samples within the union of these three regions are
-    considered within the path object's stroke.
-
-    If the stroke width is zero, each of the regions in the union will
-    be empty and there are no accessible samples within the stroke.
-
-    The /mask/ parameter controls what subset of stencil bits are affected
-    by the command.
-
-    A sample's stencil bits that are set in the effective /mask/ value
-    are updated with the specified stencil /reference/ value if the
-    sample is accessible (as specified above) and within the stroke of
-    the transformed path's outline.
-
-    Every path object has an end caps parameter
-    PATH_END_CAPS_CHROMIUM) that is one of FLAT_CHROMIUM,
-    SQUARE_CHROMIUM or ROUND_CHROMIUM. This parameter defines the
-    initial and terminal caps type. There are no samples within a
-    FLAT_CHROMIUM cap.  The SQUARE_CHROMIUM cap extends centered and
-    tangent to the given end (initial or terminal) of the subpath for
-    half the effective stroke width; in other words, a square cap is a
-    half-square that kisses watertightly the end of a subpath.  The
-    ROUND_CHROMIUM cap appends a semi-circle, centered and tangent,
-    with the diameter of the effective stroke width to the given end
-    (initial or terminal) of the subpath; in other words, a round cap
-    is a semi-circle that kisses watertightly the end of a subpath.
-
-    Every path object has a join style that is one of BEVEL_CHROMIUM,
-    ROUND_CHROMIUM or MITER_REVERT_CHROMIUM.  Each path object also has a miter
-    limit value.  The BEVEL_CHROMIUM join style inserts a triangle with two
-    vertices at the outside corners where two connected path segments join and a
-    third vertex at the common end point shared by the two path segments.  The
-    ROUND_CHROMIUM join style inserts a wedge-shaped portion of a circle
-    centered at the common end point shared by the two path segments; the radius
-    of the circle is half the effective stroke width. The MITER_REVERT_CHROMIUM
-    join style inserts a quadrilateral with two opposite vertices at the outside
-    corners where the two connected path segments join and two opposite vertices
-    with one on the path's junction between the two joining path segments and
-    the other at the common end point shared by the two path segments.  However,
-    the MITER_REVERT_CHROMIUM join style behaves as the BEVEL_CHROMIUM style if
-    the sine of half the angle between the two joined segments is less than the
-    path object's PATH_STROKE_WIDTH value divided by the path's
-    PATH_MITER_LIMIT_CHROMIUM value.
-
-    Every path object has a stroke approximation bound parameter
-    (PATH_STROKE_BOUND_CHROMIUM) that is a floating-point value /sab/ clamped
-    between 0.0 and 1.0 and set and queried with the PATH_STROKE_BOUND_CHROMIUM
-    path parameter.  Exact determination of samples swept an orthogonal
-    centered line segment along cubic Bezier segments and rational
-    quadratic Bezier curves (so non-circular partial elliptical arcs) is
-    intractable for real-time rendering so an approximation is required;
-    /sab/ intuitively bounds the approximation error as a percentage of
-    the path object's stroke width.  Specifically, this path parameter
-    requests the implementation to stencil any samples within /sweep/
-    object space units of the exact sweep of the path's cubic Bezier
-    segments or partial elliptical arcs to be sampled by the stroke where
-
-      sweep = ((1-sab)*sw)/2
-
-    where /sw/ is the path object's stroke width.  The initial value
-    of /sab/ when a path is created is 0.2.  In practical terms, this
-    initial value means the stencil sample positions coverage within 80%
-    (100%-20%) of the stroke width of cubic and rational quadratic stroke
-    segments should be sampled.
-
-
-    void CoverFillPathCHROMIUM(uint path, enum coverMode)
-
-    The command transforms into window space the outline of the path object
-    named /path/ based on the current modelview, projection and viewport
-    transforms (ignoring any vertex and/or geometry shader or program that might
-    be active/enabled) and rasterizes a subset of the accessible samples in the
-    framebuffer guaranteed to include all samples that would have a net
-    stencil value change if StencilFillPathCHROMIUM were issued with the same
-    modelview, projection, and viewport state.  During this rasterization, the
-    stencil test operates normally and as configured; the expectation is the
-    stencil test will be used to discard samples not determined "covered" by a
-    prior StencilFillPathCHROMIUM command.
-
-    If /path/ does not name an existing path object, the command does
-    nothing (and no error is generated).
-
-    /coverMode/ must be one of CONVEX_HULL_CHROMIUM or BOUNDING_BOX_CHROMIUM.
-    Otherwise, INVALID_ENUM error is generated.
-
-    The subset of accessible pixels that are rasterized are within a bounding
-    box (expected to be reasonably tight) surrounding all the samples guaranteed
-    to be rasterized by CoverFillPathCHROMIUM.  The bounding box must be
-    orthogonally aligned to the path space coordinate system.  (The area of the
-    bounding box in path space is guaranteed to be greater than or equal the
-    area of the convex hull in path space.) Each rasterized sample will be
-    rasterized once and exactly once.
-
-    While samples with a net stencil change /must/ be rasterized,
-    implementations are explicitly allowed to vary in the rasterization
-    of samples for which StencilFillPathCHROMIUM would /not/ change sample's
-    net stencil value.  This means implementations are allowed to (and,
-    in fact, are expected to) conservatively "exceed" the region strictly
-    stenciled by the path object.
-
-    CoverFillPathCHROMIUM /requires/ the following rasterization invariance:
-    calling CoverFillPathCHROMIUM for the same (unchanged) path object with
-    fixed (unchanged) modelview, projection, and viewport transform state
-    with the same (unchanged) set of accessible samples will rasterize
-    the exact same set of samples with identical interpolated values
-    for respective fragment/sample locations.
-
-    void CoverStrokePathCHROMIUM(uint path, enum coverMode)
-
-    The command operates in the same manner as CoverFillPathCHROMIUM except the
-    region guaranteed to be rasterized is, rather than the region within
-    /path/'s filled outline, instead the region within the /path/'s stroked
-    region as determined by StencilStrokePathCHROMIUM.  During this
-    rasterization, the stencil test operates normally and as configured; the
-    expectation is the stencil test will be used to discard samples not
-    determined "covered" by a prior StencilStrokePathCHROMIUM command.
-
-    If /path/ does not name an existing path object, the command does
-    nothing (and no error is generated).
-
-    /coverMode/ must be one of CONVEX_HULL_CHROMIUM or BOUNDING_BOX_CHROMIUM.
-    Otherwise, INVALID_ENUM error is generated.
-
-    Analogous to the rasterization guarantee of CoverFillPathCHROMIUM with
-    respect to StencilFillPathCHROMIUM, CoverStrokePathCHROMIUM guarantees that
-    all samples rasterized by StencilStrokePathCHROMIUM, given the same
-    transforms and accessible pixels and stroke width, will also be rasterized
-    by the corresponding CoverStrokePathCHROMIUM.
-
-    CoverStrokePathCHROMIUM /requires/ the following rasterization invariance:
-    calling CoverStrokePathCHROMIUM for the same (unchanged) path object with
-    fixed (unchanged) modelview, projection, and viewport transform state and
-    with the same (unchanged) set of accessible samples will rasterize the exact
-    same set of samples with identical interpolated values for respective
-    fragment/sample locations.
-
-    void StencilThenCoverFillPathCHROMIUM(uint path, enum fillMode, uint mask, enum coverMode)
-
-    The command is equivalent to the two commands
-
-        StencilFillPathCHROMIUM(path, fillMode, mask);
-        CoverFillPathCHROMIUM(path, coverMode);
-
-    unless either command would generate an error; for any such error
-    other than OUT_OF_MEMORY, only that error is generated.
-
-    void StencilThenCoverStrokePathCHROMIUM(uint path, int reference, uint mask, enum coverMode)
-
-    The command is equivalent to the two commands
-
-        StencilStrokePathCHROMIUM(path, reference, mask);
-        CoverStrokePathCHROMIUM(path, coverMode);
-
-    unless either command would generate an error; for any such error
-    other than OUT_OF_MEMORY, only that error is generated.
-
-    void StencilFillPathInstancedCHROMIUM(sizei numPaths,
-                                          enum pathNameType,
-                                          const void *paths,
-                                          uint pathBase,
-                                          enum fillMode, uint mask,
-                                          enum transformType,
-                                          const float *transformValues);
-
-    The command stencils a sequence of filled paths.
-
-    The /numPaths/ has to be >= 0. Otherwise INVALID_VALUE error is
-    generated.
-
-    The /numPaths/ has to fit in 32-bit uint. Otherwise
-    INVALID_OPERATION is generated.
-
-    The /pathNameType/ determines the type of elements of the /paths/
-    array and must be one of UNSIGNED_BYTE, BYTE, UNSIGNED_SHORT, SHORT,
-    UNSIGNED_INT or INT. Otherwise INVALID_ENUM error is generated.
-
-    The /pathBase/ is an offset added to the /numPaths/ path names read
-    from the /paths/ array. Each result is 2's complement integer and it
-    is cast to uint path name..
-
-    The /transformType/ must be one of NONE, TRANSLATE_X_CHROMIUM,
-    TRANSLATE_Y_CHROMIUM, TRANSLATE_2D_CHROMIUM, TRANSLATE_3D_CHROMIUM,
-    AFFINE_2D_CHROMIUM, AFFINE_3D_CHROMIUM, TRANSPOSE_AFFINE_2D_CHROMIUM, or
-    TRANSPOSE_AFFINE_3D_CHROMIUM. Otherwise INVALID_ENUM error is generated.
-
-    The /fillMode/ and /mask/ are validated identically to the same-named
-    parameters of StencilFillPathCHROMIUM.
-
-    The /numPaths/ * (size of /pathNameType/ data type) + /numPaths/ *
-    (size of float) * (component count of /transformType/)  must fit to
-    32-bit uint. Otherwise INVALID_OPERATION is generated.
-
-    The StencilFillPathInstancedCHROMIUM command is equivalent to:
-
-        float dm[16];
-        GetFloatv(PATH_MODELVIEW_MATRIX, dm);
-        const float *v = transformValues;
-        for (int i = 0; i<numPaths; i++) {
-          if (!applyPathTransform(dm, transformType, &v)) {
-            return;
-          }
-          uint pathName;
-          if (!getPathName(pathNameType, &paths, pathBase, &pathName)) {
-            return;
-          }
-          if (IsPathCHROMIUM(pathName)) {
-            StencilFillPathCHROMIUM(pathName, fillMode, mask);
-          }
-        }
-        glMatrixLoadfCHROMIUM(PATH_MODELVIEW_CHROMIUM, dm);
-
-    assuming these helper functions for applyPathTransform and
-    getPathName:
-
-        bool applyPathTransform(const float dm[], enum transformType, const float** v)
-        {
-          float m[16] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
- 
-          switch (transformType) {
-          case NONE:
-            break;
-          case TRANSLATE_X_CHROMIUM:
-            m[12] = (*v)[0];
-            *v += 1;
-            break;
-          case TRANSLATE_Y_CHROMIUM:
-            m[13] = (*v)[0];
-            *v += 1;
-            break;
-          case TRANSLATE_2D_CHROMIUM:
-            m[12] = (*v)[0];
-            m[13] = (*v)[1];
-            *v += 2;
-            break;
-          case TRANSLATE_3D_CHROMIUM:
-            m[12] = (*v)[0];
-            m[13] = (*v)[1];
-            m[14] = (*v)[2];
-            *v += 3;
-            break;
-          case AFFINE_2D_CHROMIUM:
-            m[0] =(*v)[0]; m[4] =(*v)[2]; m[8] =0; m[12]=(*v)[4];
-            m[1] =(*v)[1]; m[5] =(*v)[3]; m[9] =0; m[13]=(*v)[5];
-            m[2] =0   ;    m[6] =0;       m[10]=1; m[14]=0;
-            m[3] =0;       m[7] =0;       m[11]=0; m[15]=1;
-            *v += 6;
-            break;
-          case TRANSPOSE_AFFINE_2D_CHROMIUM:
-            m[0] =(*v)[0]; m[4] =(*v)[1]; m[8] =0; m[12]=(*v)[2];
-            m[1] =(*v)[3]; m[5] =(*v)[4]; m[9] =0; m[13]=(*v)[5];
-            m[2] =0;       m[6] =0;       m[10]=1; m[14]=0;
-            m[3] =0;       m[7] =0;       m[11]=0; m[15]=1;
-            *v += 6;
-            break;
-          case AFFINE_3D_CHROMIUM:
-            m[0] =(*v)[0]; m[4] =(*v)[3]; m[8] =(*v)[6]; m[12]=(*v)[9];
-            m[1] =(*v)[1]; m[5] =(*v)[4]; m[9] =(*v)[7]; m[13]=(*v)[10];
-            m[2] =(*v)[2]; m[6] =(*v)[5]; m[10]=(*v)[8]; m[14]=(*v)[11];
-            m[3] =0;       m[7] =0;       m[11]=1;       m[15]=0;
-            *v += 12;
-            break;
-          case TRANSPOSE_AFFINE_3D_CHROMIUM:
-            m[0] =(*v)[0]; m[4] =(*v)[1]; m[8] =(*v)[2];  m[12]=(*v)[3];
-            m[1] =(*v)[4]; m[5] =(*v)[5]; m[9] =(*v)[6];  m[13]=(*v)[7];
-            m[2] =(*v)[8]; m[6] =(*v)[9]; m[10]=(*v)[10]; m[14]=(*v)[11];
-            m[3] =0;       m[7] =0;       m[11]=1;        m[15]=0;
-            *v += 12;
-            break;
-          default:
-            setError(INVALID_ENUM);
-            return FALSE;
-          }
-          multiplyMatrix(dm, m, m);  // Multiplies dm and m and stores result to m.
-          glMatrixLoadfCHROMIUM(PATH_MODELVIEW_CHROMIUM, m);
-          return TRUE;
-        }
-
-        bool getPathName(enum pathNameType, const void** paths,
-                         uint pathBase, uint* pathName)
-        {
-          switch (pathNameType) {
-          case BYTE:
-            {
-              const byte *p = (const byte*)*paths;
-              *pathName = pathBase + p[0];
-              *paths = p+1;
-              break;
-            }
-          case UNSIGNED_BYTE:
-            {
-              const ubyte *p = (const ubyte*)*paths;
-              *pathName = pathBase + p[0];
-              *paths = p+1;
-              break;
-            }
-          case SHORT:
-            {
-              const short *p = (const short*)*paths;
-              *pathName = pathBase + p[0];
-              *paths = p+1;
-              break;
-            }
-          case UNSIGNED_SHORT:
-            {
-              const ushort *p = (const ushort*)*paths;
-              *pathName = pathBase + p[0];
-              *paths = p+1;
-              break;
-            }
-          case INT:
-            {
-              const int *p = (const int*)*paths;
-              *pathName = pathBase + p[0];
-              *paths = p+1;
-              break;
-            }
-          case UNSIGNED_INT:
-            {
-              const uint *p = (const uint*)*paths;
-              *pathName = pathBase + p[0];
-              *paths = p+1;
-              break;
-            }
-          default:
-            setError(INVALID_ENUM);
-            return FALSE;
-        }
-        return TRUE;
-    }
-
-
-    void StencilStrokePathInstancedCHROMIUM(sizei numPaths,
-                                            enum pathNameType,
-                                            const void *paths,
-                                            uint pathBase,
-                                            int reference, uint mask,
-                                            enum transformType,
-                                            const float *transformValues);
-
-    The command stencils a sequence of stroked paths.
-
-    The command verifies /numPaths/, /pathNameType/ and
-    /transformType/ similarly to StencilFillPathInstancedCHROMIUM.
-
-    The command is equivalent to:
-
-        float dm[16];
-        GetFloatv(PATH_MODELVIEW_MATRIX, dm);
-        const float *v = transformValues;
-        for (int i = 0; i<numPaths; i++) {
-          if (!applyPathTransform(dm, transformType, &v)) {
-            return;
-          }
-          uint pathName;
-          if (!getPathName(pathNameType, &paths, pathBase, &pathName)) {
-            return;
-          }
-          if (IsPathCHROMIUM(pathName)) {
-            StencilStrokePathCHROMIUM(pathName, reference, mask);
-          }
-        }
-        glMatrixLoadfCHROMIUM(PATH_MODELVIEW_CHROMIUM, dm);
-
-    assume the helper functions for applyPathTransform and
-    getPathName defined above.
-
-    void CoverFillPathInstancedCHROMIUM(sizei numPaths,
-                                        enum pathNameType,
-                                        const void *paths,
-                                        uint pathBase,
-                                        enum coverMode,
-                                        enum transformType,
-                                        const float *transformValues);
-
-    The command covers a sequence of filled paths.
-
-    The command verifies /numPaths/, /pathNameType/ and
-    /transformType/ similarly to StencilFillPathInstancedCHROMIUM.
-
-    The command is equivalent to:
-
-        if (coverMode == BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM) {
-          renderBoundingBox(FALSE,
-                            numPaths,
-                            pathNameType,
-                            paths,
-                            pathBase,
-                            transformType, transformValues);
-        } else if (coverMode == CONVEX_HULL_CHROMIUM || coverMode == BOUNDING_BOX_CHROMIUM) {
-          float dm[16];
-          GetFloatv(PATH_MODELVIEW_MATRIX, dm);
-          const float *v = transformValues;
-          for (int i = 0; i<numPaths; i++) {
-            if (!applyPathTransform(dm, transformType, &v)) {
-              return;
-            }
-            uint pathName;
-            if (!getPathName(pathNameType, &paths, pathBase, &pathName)) {
-              return;
-            }
-            if (IsPathCHROMIUM(pathName)) {
-              CoverFillPathCHROMIUM(pathName, coverMode);
-            }
-          }
-          glMatrixLoadfCHROMIUM(PATH_MODELVIEW_CHROMIUM, dm);
-        } else {
-          setError(INVALID_ENUM);
-        }
-
-
-    assuming these helper functions for applyPathTransform and
-    getPathName defined above as well as:
-
-        void renderBoundingBox(bool shouldRenderStroke,
-                               sizei numPaths,
-                               enum pathNameType,
-                               const uint *paths,
-                               uint pathBase,
-                               enum transformType,
-                               const float *transformValues)
-        {
-          boolean hasBounds = FALSE;
-          float boundsUnion[4], bounds[4];
-
-          const float *v = transformValues;
-          for (int i = 0; i<numPaths; i++) {
-            uint pathName;
-            if (!getPathName(pathNameType, paths, pathBase, &pathName)) {
-              return;
-            }
-            if (IsPathCHROMIUM(pathName)) {
-              GetPathBoundingBox(pathName, shouldRenderStroke, bounds);
-              switch (transformType) {
-              case NONE:
-                break;
-              case TRANSLATE_X_CHROMIUM:
-                bounds[0] += v[0];
-                bounds[2] += v[0];
-                v += 1;
-                break;
-              case TRANSLATE_Y_CHROMIUM:
-                bounds[1] += v[0];
-                bounds[3] += v[0];
-                v += 1;
-                break;
-              case TRANSLATE_2D_CHROMIUM:
-                bounds[0] += v[0];
-                bounds[1] += v[1];
-                bounds[2] += v[0];
-                bounds[3] += v[1];
-                v += 2;
-                break;
-              case TRANSLATE_3D_CHROMIUM: // ignores v[2]
-                bounds[0] += v[0];
-                bounds[1] += v[1];
-                bounds[2] += v[0];
-                bounds[3] += v[1];
-                v += 3;
-                break;
-              case AFFINE_2D_CHROMIUM:
-                bounds[0] = bounds[0]*v[0] + bounds[0]*v[2] + v[4];
-                bounds[1] = bounds[1]*v[1] + bounds[1]*v[3] + v[5];
-                bounds[2] = bounds[2]*v[0] + bounds[2]*v[2] + v[4];
-                bounds[3] = bounds[3]*v[1] + bounds[3]*v[3] + v[5];
-                v += 6;
-                break;
-              case TRANSPOSE_AFFINE_2D_CHROMIUM:
-                bounds[0] = bounds[0]*v[0] + bounds[0]*v[1] + v[2];
-                bounds[1] = bounds[1]*v[3] + bounds[1]*v[4] + v[5];
-                bounds[2] = bounds[2]*v[0] + bounds[2]*v[1] + v[2];
-                bounds[3] = bounds[3]*v[3] + bounds[3]*v[4] + v[5];
-                v += 6;
-                break;
-              case AFFINE_3D_CHROMIUM:  // ignores v[2], v[5], v[6..8], v[11]
-                bounds[0] = bounds[0]*v[0] + bounds[0]*v[3] + v[9];
-                bounds[1] = bounds[1]*v[1] + bounds[1]*v[4] + v[10];
-                bounds[2] = bounds[2]*v[0] + bounds[2]*v[3] + v[9];
-                bounds[3] = bounds[3]*v[1] + bounds[3]*v[4] + v[10];
-                v += 12;
-                break;
-              case TRANSPOSE_AFFINE_3D_CHROMIUM:  // ignores v[2], v[6], v[8..11]
-                bounds[0] = bounds[0]*v[0] + bounds[0]*v[1] + v[3];
-                bounds[1] = bounds[1]*v[4] + bounds[1]*v[5] + v[7];
-                bounds[2] = bounds[2]*v[0] + bounds[2]*v[1] + v[3];
-                bounds[3] = bounds[3]*v[4] + bounds[3]*v[5] + v[7];
-                v += 12;
-                break;
-              default:
-                setError(INVALID_ENUM);
-                return;
-              }
-              if (bounds[0] > bounds[2]) {
-                float t = bounds[2];
-                bounds[2] = bounds[0];
-                bounds[0] = t;
-              }
-              if (bounds[1] > bounds[3]) {
-                float t = bounds[3];
-                bounds[3] = bounds[1];
-                bounds[1] = t;
-              }
-              if (hasBounds) {
-                if (bounds[0] < boundsUnion[0]) {
-                  boundsUnion[0] = bounds[0];
-                }
-                if (bounds[1] < boundsUnion[1]) {
-                  boundsUnion[1] = bounds[1];
-                }
-                if (bounds[2] > boundsUnion[2]) {
-                  boundsUnion[2] = bounds[2];
-                }
-                if (bounds[3] > boundsUnion[3]) {
-                  boundsUnion[3] = bounds[3];
-                }
-              } else {
-                for (int i=0; i<4; i++) {
-                  boundsUnion[i] = bounds[i];
-                }
-                hasBounds = TRUE;
-              }
-            }
-          }
-          if (hasBounds) {
-             Rectf(boundsUnion[0], boundsUnion[1], boundsUnion[2], boundsUnion[3]);
-          }
-        }
-
-    Where helper GetPathBoundingBox returns bounding box for the path with or without
-    stroking, and Rectf renders a rectangle.
-
-    /coverMode/ must be one of CONVEX_HULL_CHROMIUM or BOUNDING_BOX_CHROMIUM or
-    BOUNDING_BOX_OF_BOUNDING_BOXES. Otherwise, INVALID_ENUM error is generated.
-
-    void CoverStrokePathInstancedCHROMIUM(sizei numPaths,
-                                          enum pathNameType,
-                                          const void *paths,
-                                          uint pathBase,
-                                          enum coverMode,
-                                          enum transformType,
-                                          const float *transformValues);
-
-    The command covers a sequence of stroked paths.
-
-    The command verifies /numPaths/, /pathNameType/ and
-    /transformType/ similarly to StencilFillPathInstancedCHROMIUM.
-
-    The command is equivalent to:
-
-        if (coverage == BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM) {
-          renderBoundingBox(TRUE,
-                            numPaths,
-                            pathNameType, paths,
-                            pathBase,
-                            transformType, transformValues);
-        } else if (coverMode == CONVEX_HULL_CHROMIUM || coverMode == BOUNDING_BOX_CHROMIUM) {
-          float dm[16];
-          GetFloatv(PATH_MODELVIEW_MATRIX, dm);
-          const float *v = transformValues;
-          for (int i = 0; i<numPaths; i++) {
-            if (!applyPathTransform(dm, transformType, &v)) {
-              return;
-            }
-            uint pathName;
-            if (!getPathName(pathNameType, &paths, pathBase, &pathName)) {
-              return;
-            }
-            if (IsPathCHROMIUM(pathName)) {
-              CoverStrokePathCHROMIUM(pathName, coverMode);
-            }
-          }
-          glMatrixLoadfCHROMIUM(PATH_MODELVIEW_CHROMIUM, dm);
-        } else {
-          setError(INVALID_ENUM);
-        }
-
-    assuming these helper functions defined above.
-
-    /coverMode/ must be one of CONVEX_HULL_CHROMIUM or BOUNDING_BOX_CHROMIUM or
-    BOUNDING_BOX_OF_BOUNDING_BOXES. Otherwise, INVALID_ENUM error is generated.
-
-
-    void StencilThenCoverFillPathInstancedCHROMIUM(sizei numPaths,
-                                                   enum pathNameType,
-                                                   const void *paths,
-                                                   uint pathBase,
-                                                   enum coverMode,
-                                                   enum fillMode,
-                                                   uint mask,
-                                                   enum transformType,
-                                                   const float *transformValues);
-
-    The command is equivalent to the two commands
-
-        StencilFillPathInstancedCHROMIUM(numPaths
-                                         paths,
-                                         pathBase,
-                                         fillMode,
-                                         mask,
-                                         transformType,
-                                         transformValues);
-        CoverFillPathInstancedCHROMIUM(numPaths,
-                                       paths,
-                                       pathBase,
-                                       coverMode,
-                                       fillMode,
-                                       mask,
-                                       transformType,
-                                       transformValues);
-
-    unless either command would generate an error; for any such error
-    other than OUT_OF_MEMORY, only that error is generated.
-
-
-    void StencilThenCoverStrokePathInstancedCHROMIUM(sizei numPaths,
-                                                     enum pathNameType,
-                                                     const void *paths,
-                                                     uint pathBase,
-                                                     enum coverMode,
-                                                     int reference,
-                                                     uint mask,
-                                                     enum transformType,
-                                                     const float *transformValues);
-
-    The command is equivalent to the two commands
-
-        StencilStrokePathInstancedCHROMIUM(numPaths,
-                                           pathNameType,
-                                           paths,
-                                           pathBase,
-                                           reference,
-                                           mask,
-                                           transformType,
-                                           transformValues);
-        CoverStrokePathInstancedCHROMIUM(numPaths,
-                                         pathNameType,
-                                         paths,
-                                         pathBase,
-                                         coverMode,
-                                         transformType,
-                                         transformValues);
-
-    unless either command would generate an error; for any such error
-    other than OUT_OF_MEMORY, only that error is generated.
-
-    void BindFragmentInputLocationCHROMIUM(uint program, int location,
-                                           const char* name);
-
-    The call specifes that the fragment shader input varying named
-    /name/ in program /program/ should be bound to uniform location
-    /location/ when the program is next linked.  If /name/ was bound
-    previously, its assigned binding is replaced with /location/. The
-    /name/ must be a null terminated string. The error INVALID_VALUE
-    is generated if /location/ is equal or greater than
-
-    MAX_VARYING_VECTORS * 4
-
-    or less than 0. BindFragmentInputLocation has no effect until the
-    program is linked. In particular, it doesn't modify the bindings of active
-    uniforms variables in a program that has already been linked.
-
-    The error INVALID_OPERATION is generated if /program/ is not name for a
-    program object.
-
-    The error INVALID_OPERATION is generated if name starts with the reserved
-    "gl_" prefix.
-
-    When a program is linked, any active uniforms without a binding specified
-    through BindFragmentInputLocation will be automatically be bound to
-    locations by the GL. Such bindings can not be queried.
-
-    BindFragmentInputLocation may be issued before any shader objects are
-    attached to a program object. Hence it is allowed to bind any name (except
-    a name starting with "gl_") to an index, including a name that is never used
-    as a varying in the fragment shader object. Assigned bindings for varying
-    variables that do not exist or are not active are ignored. Using such bindings
-    behaves as if passed location was -1.
-
-    It is possible for an application to bind more than one fragment
-    input name to the same location.  This is referred to as aliasing.
-    This will only work if only one of the aliased fragment inputs is
-    active in the executable program, or if no path through the shader
-    consumes more than one fragment input of a set of fragment inputs
-    aliased to the same location.  If two statically used fragment
-    inputs in a program are bound to the name location, link must
-    fail.
-
-    void ProgramPathFragmentInputGenCHROMIUM(uint program,
-                                             int location,
-                                             enum genMode,
-                                             int components,
-                                             const float *coeffs);
-
-    The command controls how a user-defined (non-built-in) fragment input of
-    a GLSL program object is computed for fragment shading operations that occur
-    as a result of CoverFillPathCHROMIUM or CoverStrokePathCHROMIUM.
-
-    /program/ names a GLSL program object. If /program/ has not been
-    successfully linked, the error INVALID_OPERATION is generated.
-
-    The given fragment input generation state is loaded into the fragment
-    input variable location identified by /location/. This location
-    is a value bound with BindFragmentInputLocation.
-
-    If the value of location is -1, the ProgramPathFragmentInputGenCHROMIUM
-    command will silently ignore the command, and the program's path fragment
-    input generation state will not be changed.
-
-    If any of the following conditions occur, an INVALID_OPERATION error is
-    generated by the ProgramPathFragmentInputGenCHROMIUM, and no state is
-    changed:
-
-        * if the size indicated in the /components/ of the
-          ProgramPathFragmentInputGenCHROMIUM command used does not match the
-          size of the fragment input scalar or vector declared in the
-          shader,
-
-        * if the fragment input declared in the shader is not
-          single-precision floating-point scalar or vector, or
-
-        * if no fragment input variable with a location of /location/
-          exists in the program object named by /program/ and location
-          is not -1, or
-
-        * if the fragment input declared in the shader is a built-in
-          variables (i.e. prefixed by "gl_").
-
-    When covering paths, fragment input variables are interpolated at
-    each shaded fragment based on the corresponding fragment input
-    generation state specified by ProgramPathFragmentInputGenCHROMIUM for
-    each respective fragment input.
-
-    The /genMode/, /components/, and /coeffs/ parameters are used to
-    generate the fragment input variable values. This is described in
-    subsection FRAGMENT INPUT GENERATION FOR PATH COVER COMMANDS.
-
-    When covering paths, if a fragment input variable has not had its
-    path fragment input generation state successfully generated, it as
-    if the values of this variable are always initialized to zero when
-    the fragment shader is executing.
-
-    FRAGMENT INPUT GENERATION FOR PATH COVER COMMANDS
-
-    The /genMode/, /components/, and /coeffs/ parameters of
-    ProgramPathFragmentInputGenCHROMIUM control how fragment inputs are computed
-    for fragment shading operations that occur as a result of
-    CoverFillPathCHROMIUM and CoverStrokePathCHROMIUM and their StencilThenCover
-    and instanced variants.
-
-    /genMode/ must be one of NONE, OBJECT_LINEAR_CHROMIUM, EYE_LINEAR_CHROMIUM
-    or CONSTANT_CHROMIUM; otherwise INVALID_ENUM is generated.
-
-    NONE means that the fragment input is not generated. OBJECT_LINEAR_CHROMIUM
-    means that the specified input is generated from a linear combination of the
-    2D path coordinates (x,y). EYE_LINEAR_CHROMIUM means the specified input is
-    generated from a linear combination of path's 2D coordinates transformed in
-    eye space, with (xe, ye, ze, we) calculated as in section 2.12
-    ("Fixed-Function Vertex Transformation") of OpenGL 3.2 (unabridged)
-    Specification (Special Functions). CONSTANT_CHROMIUM means that the
-    specified input is set to corresponding constant value.
-
-    /components/ must be 0 if /genMode/ is NONE or for other allowed /genMode/
-    values must be one of 1, 2, 3, or 4; otherwise INVALID_VALUE is generated.
-    /components/ determines how many fragment input components, how many
-    coefficients read from the /coeffs/ array, and the linear equations used to
-    generate the s, t, r, and q coordinates of the fragment input specified by
-    /location/.
-
-    In the following equations, coeffs[i] is the /i/th element (base zero) of
-    the /coeffs/ array; x, y, z, and w are determined by the /genMode/.
-
-    When /genMode/ is EYE_LINEAR_CHROMIUM, xcoeffs[i] is the /i/th element (base
-    zero) of a /xcoeffs/ array generated by multiplying each respective vector
-    of four elements of coeffs by the current inverse modelview matrix when
-    ProgramPathFragmentInputGen is called.
-
-        xcoeffs[0..3]   = coeffs[0..3]   * MV^-1
-        xcoeffs[4..7]   = coeffs[4..7]   * MV^-1
-        xcoeffs[8..11]  = coeffs[8..11]  * MV^-1
-        xcoeffs[12..15] = coeffs[12..12] * MV^-1
-
-    [[ NOTATION:
-
-       xxx[0..3] is a vector form from xxx[0], xxx[1], xxx[2], and xxx[3]
-
-       MV^-1 is the inverse of the current PATH_MODELVIEW_CHROMIUM matrix when
-       ProgramPathFragmentInputGenCHROMIUM happens.
-
-    ]]
-
-    If the /components/ is 0, no values from the /coeffs/ array are
-    accessed and the s, t, r, and q coordinates of a covered fragment's
-    fragment input for /location/ are computed:
-
-        s = 0
-        t = 0
-        r = 0
-        q = 0
-
-    If the /components/ is 1 and /genMode/ is OBJECT_LINEAR_CHROMIUM
-    3 values from the /coeffs/ array are
-    accessed and the s, t, r, and q coordinates of a covered fragment's
-    fragment input for /location/ are computed:
-
-        s = coeffs[0] * x + coeffs[1] * y + coeffs[2]
-        t = 0
-        r = 0
-        q = 0
-
-    Alternatively if the /genMode/ is EYE_LINEAR_CHROMIUM, then 4 values are
-    accessed and the fragment input for /location/ are
-    computed:
-
-        s = xcoeffs[0] * xe + xcoeffs[1] * ye + xcoeffs[2] * ze + xcoeffs[3] * we
-        t = 0
-        r = 0
-        q = 0
-
-    Alternatively if the /genMode/ is CONSTANT_CHROMIUM, then:
-
-        s = xcoeffs[0]
-        t = 0
-        r = 0
-        q = 0
-
-    If the /components/ is 2 and /genMode/ is OBJECT_LINEAR_CHROMIUM,
-    6 values from the /coeffs/ array are accessed and the
-    s, t, r, and q coordinates of a covered fragment's fragment input
-    coordinates are computed:
-
-        s = coeffs[0] * x + coeffs[1] * y + coeffs[2]
-        t = coeffs[3] * x + coeffs[4] * y + coeffs[5]
-        r = 0
-        q = 0
-
-    Alternatively if the /genMode/ is EYE_LINEAR_CHROMIUM, then 8 values are
-    accessed and the fragment input coordinates are computed:
-
-        s = xcoeffs[0] * xe + xcoeffs[1] * ye + xcoeffs[2] * ze + xcoeffs[3] * we
-        t = xcoeffs[4] * xe + xcoeffs[5] * ye + xcoeffs[6] * ze + xcoeffs[7] * we
-        r = 0
-        q = 0
-
-    Alternatively if the /genMode/ is CONSTANT_CHROMIUM, then:
-
-        s = xcoeffs[0]
-        t = xcoeffs[1]
-        r = 0
-        q = 0
-
-    If the /components/ is 3 and /genMode/ is OBJECT_LINEAR_CHROMIUM 9 values
-    from the /coeffs/ array are accessed and the s, t, r, and q coordinates of a
-    covered fragment's fragment input coordinates for /location/ are computed:
-
-        s = coeffs[0] * x + coeffs[1] * y + coeffs[2]
-        t = coeffs[3] * x + coeffs[4] * y + coeffs[5]
-        r = coeffs[6] * x + coeffs[7] * y + coeffs[8]
-        q = 0
-
-    Alternatively if the /genMode/ is CONSTANT_CHROMIUM, then:
-
-        s = xcoeffs[0]
-        t = xcoeffs[1]
-        r = xcoeffs[2]
-        q = 0
-
-    Alternatively if the /genMode/ is EYE_LINEAR_CHROMIUM, then 12 values are
-    accessed and the fragment input coodinates for /location/ are computed:
-
-        s = xcoeffs[0] * xe + xcoeffs[1] * ye + xcoeffs[2]  * ze + xcoeffs[3]  * we
-        t = xcoeffs[4] * xe + xcoeffs[5] * ye + xcoeffs[6]  * ze + xcoeffs[7]  * we
-        r = xcoeffs[8] * xe + xcoeffs[9] * ye + xcoeffs[10] * ze + xcoeffs[11] * we
-        q = 0
-
-    If the /components/ is 4 and /genMode/ is OBJECT_LINEAR_CHROMIUM,
-    12 values from the /coeffs/ array are accessed and the
-    s, t, r, and q coordinates of a covered fragment's fragment input
-    coordinates  for /location/ are computed:
-
-        s = coeffs[0] * x + coeffs[1]  * y + coeffs[2]
-        t = coeffs[3] * x + coeffs[4]  * y + coeffs[5]
-        r = coeffs[6] * x + coeffs[7]  * y + coeffs[8]
-        q = coeffs[9] * x + coeffs[10] * y + coeffs[11]
-
-    Alternatively if the /genMode/ is EYE_LINEAR_CHROMIUM, then 16 values are
-    accessed and the fragment input coordinates for /location/ are
-    computed:
-
-        s = xcoeffs[0]  * xe + xcoeffs[1]  * ye + xcoeffs[2]  * ze + xcoeffs[3]  * we
-        t = xcoeffs[4]  * xe + xcoeffs[5]  * ye + xcoeffs[6]  * ze + xcoeffs[7]  * we
-        r = xcoeffs[8]  * xe + xcoeffs[9]  * ye + xcoeffs[10] * ze + xcoeffs[11] * we
-        q = xcoeffs[12] * xe + xcoeffs[13] * ye + xcoeffs[14] * ze + xcoeffs[15] * we
-
-    Alternatively if the /genMode/ is CONSTANT_CHROMIUM, then:
-
-        s = xcoeffs[0]
-        t = xcoeffs[1]
-        r = xcoeffs[2]
-        q = xcoeffs[3]
-
-    The initial mode is NONE and the coefficients are all initially zero.
-
-    PATH COVERING RASTERIZATION DETAILS
-
-    The GL processes fragments rasterized by path cover commands in
-    much the same manner as fragments generated by conventional polygon
-    rasterization.  However path rendering /ignores/ the following
-    operations:
-
-        *  Interpolation of per-vertex data (section 3.6.1).  Path
-           primitives have neither conventional vertices nor per-vertex
-           data.  Instead fragments generate interpolated per-fragment
-           colors, texture coordinate sets, as a
-           linear function of object-space or eye-space path coordinate's
-           or using the current color or texture coordinate set state
-           directly.
-
-    Depth offset (section 3.6.2) and polygon multisample rasterization
-    (3.6.3) do apply to path covering.
-
-    Front and back face determination (explained in section 3.6.1 for
-    polygons) operates somewhat differently for transformed paths than
-    polygons.  The path's convex hull or bounding box
-    (depending on the /coverMode/) is specified to wind counterclockwise
-    in object space, though the transformation of the convex hull into
-    window space could reverse this winding.  Whether the GL's front face
-    state is CW or CCW (as set by the FrontFace command) determines
-    if the path is front facing or not.  Because the specific vertices
-    that belong to the covering geometry are implementation-dependent,
-    when the signed area of the covering geometry (computed with equation
-    3.6) is sufficiently near zero, the facingness of the path in such
-    situations is ill-defined.
-
-    The determination of whether a path transformed into window space is
-    front facing or not affects face culling if enabled (section 3.6.1),
-    the gl_FrontFacing built-in variable (section 3.9.2), and separate
-    (two-sided) stencil testing (section 4.1.4).
-
-Errors
-
-    None.
-
-New State
-
-    Get Value                       Type   Get Command  Initial  Description
-    -----------------------------  -----  ------------ -------- -------------------
-    PATH_MODELVIEW_MATRIX_CHROMIUM  16xR   GetFloatv    all 0's  Current modelview
-                                                                 matrix for path rendering
-    PATH_PROJECTION_MATRIX_CHROMIUM 16xR   GetFloatv    all 0's  Current projection
-                                                                 matrix for path rendering
-    PATH_STENCIL_FUNC_CHROMIUM      Z8     GetIntegerv  ALWAYS   path stenciling function
-    PATH_STENCIL_REF_CHROMIUM       Z+     GetIntegerv  0        path stenciling
-                                                                 reference value
-    PATH_STENCIL_VALUE_MASK_CHROMIUM                             path stencil read
-                                    Z+     GetIntegerv  1's      mask
-
-Tables
-    Table 5.pathCommands: Path Commands
-
-                                                       Coordinate
-    Token                       Description            count
-    ==========================  =====================  ==========
-    MOVE_TO_CHROMIUM            Absolute move          2
-                                current point
-    --------------------------  ---------------------  ----------
-    CLOSE_PATH_CHROMIUM         Close path             0
-    --------------------------  ---------------------  ----------
-    LINE_TO_CHROMIUM            Absolute line          2
-    --------------------------  ---------------------  ----------
-    QUADRATIC_CURVE_TO_CHROMIUM Absolute quadratic     4
-    --------------------------  ---------------------  ----------
-    CUBIC_CURVE_TO_CHROMIUM     Absolute cubic         6
-                                Bezier segment
-    --------------------------  ---------------------  ----------
-    CONIC_CURVE_TO_CHROMIUM     Absolute conic         5
-                                (rational Bezier)
-                                segment
-
-
-    Table 5.pathParameters
-    Name                             Type     Required Values or Range
-    -------------------------------  -------  -----------------------------------------------
-    PATH_STROKE_WIDTH_CHROMIUM       float    non-negative
-    PATH_END_CAPS_CHROMIUM           enum     FLAT, SQUARE_CHROMIUM, ROUND_CHROMIUM
-    PATH_JOIN_STYLE_CHROMIUM         enum     MITER_REVERT_CHROMIUM, BEVEL_CHROMIUM, ROUND_CHROMIUM
-    PATH_MITER_LIMIT_CHROMIUM        float    non-negative
-    PATH_STROKE_BOUND_CHROMIUM       float    will be clamped to [0, 1.0], initially 0.2 (20%)
-
-
-Issues
-
-   1.   Should there be a distinct stencil function state for path
-        stenciling?
-
-        RESOLVED:  YES.  glPathStencilFunc sets the state.  How the
-        stencil state needs to be configured for path covering is
-        different than how the stencil function is configured typically
-        for path stenciling.
-
-        For example, stencil covering might use
-        StencilFunc(NOT_EQUAL,0,~0) while path stenciling would
-        use ALWAYS for the path stenciling stencil test.
-
-        However there are other situations such as path clipping where it
-        is useful to have the path stencil function configured differently
-        such as PathStencilFunc(NOT_EQUAL, 0x00, 0x80) or other
-        similar path clipping test.
-
-   2.   Since Cover*Path* skips the vertex shader, what does it mean exactly
-        wrt a fully linked program? What happens to the fragment shader's input
-        varyings that are not filled by the vertex shader + rasterizer?
-
-        It is possible that input varyings from a shader may not be written
-        as output varyings of a preceding shader.  In this case, the unwritten
-        input varying values are set to constant zeros.
-
-   3.   What is the defined behavior when stroking if PATH_STROKE_WIDTH is
-        zero?
-
-        There will not be any samples within the stroke. I.e. the stroke does
-        not produce any visible results.
-
-   4.   How do you define a program that's valid to use with these calls.
-
-        There is no change with respect to validity of the programs. All
-        programs that are valid before this extension are valid after.
-        All programs that are invalid before this extension is invalid
-        after.
-
-   5.   Can same programs be used to render regular GL primitives as well
-        as in covering paths?
-
-        Yes.
-
-   6.  How is the fragment shader called when covering paths, and with
-       which values for the inputs?
-
-        gl_FragCoord: Interpolated coordinate of the path coverage.
-
-        gl_FrontFacing:
-         * Paths wind by default counterclockwise
-         * Window space transform can reverse this winding
-         * GL front face state CW/CCW selects whether the variable is true
-           or false
-
-        user-defined varyings: constant zeros.
-
-Revision History
-
-    14/8/2014    Documented the extension
diff --git a/gpu/GLES2/gl2chromium_autogen.h b/gpu/GLES2/gl2chromium_autogen.h
index 6b4995e..2d5d43f 100644
--- a/gpu/GLES2/gl2chromium_autogen.h
+++ b/gpu/GLES2/gl2chromium_autogen.h
@@ -357,39 +357,6 @@
 #define glGetLastFlushIdCHROMIUM GLES2_GET_FUN(GetLastFlushIdCHROMIUM)
 #define glScheduleDCLayerCHROMIUM GLES2_GET_FUN(ScheduleDCLayerCHROMIUM)
 #define glSetActiveURLCHROMIUM GLES2_GET_FUN(SetActiveURLCHROMIUM)
-#define glMatrixLoadfCHROMIUM GLES2_GET_FUN(MatrixLoadfCHROMIUM)
-#define glMatrixLoadIdentityCHROMIUM GLES2_GET_FUN(MatrixLoadIdentityCHROMIUM)
-#define glGenPathsCHROMIUM GLES2_GET_FUN(GenPathsCHROMIUM)
-#define glDeletePathsCHROMIUM GLES2_GET_FUN(DeletePathsCHROMIUM)
-#define glIsPathCHROMIUM GLES2_GET_FUN(IsPathCHROMIUM)
-#define glPathCommandsCHROMIUM GLES2_GET_FUN(PathCommandsCHROMIUM)
-#define glPathParameterfCHROMIUM GLES2_GET_FUN(PathParameterfCHROMIUM)
-#define glPathParameteriCHROMIUM GLES2_GET_FUN(PathParameteriCHROMIUM)
-#define glPathStencilFuncCHROMIUM GLES2_GET_FUN(PathStencilFuncCHROMIUM)
-#define glStencilFillPathCHROMIUM GLES2_GET_FUN(StencilFillPathCHROMIUM)
-#define glStencilStrokePathCHROMIUM GLES2_GET_FUN(StencilStrokePathCHROMIUM)
-#define glCoverFillPathCHROMIUM GLES2_GET_FUN(CoverFillPathCHROMIUM)
-#define glCoverStrokePathCHROMIUM GLES2_GET_FUN(CoverStrokePathCHROMIUM)
-#define glStencilThenCoverFillPathCHROMIUM \
-  GLES2_GET_FUN(StencilThenCoverFillPathCHROMIUM)
-#define glStencilThenCoverStrokePathCHROMIUM \
-  GLES2_GET_FUN(StencilThenCoverStrokePathCHROMIUM)
-#define glStencilFillPathInstancedCHROMIUM \
-  GLES2_GET_FUN(StencilFillPathInstancedCHROMIUM)
-#define glStencilStrokePathInstancedCHROMIUM \
-  GLES2_GET_FUN(StencilStrokePathInstancedCHROMIUM)
-#define glCoverFillPathInstancedCHROMIUM \
-  GLES2_GET_FUN(CoverFillPathInstancedCHROMIUM)
-#define glCoverStrokePathInstancedCHROMIUM \
-  GLES2_GET_FUN(CoverStrokePathInstancedCHROMIUM)
-#define glStencilThenCoverFillPathInstancedCHROMIUM \
-  GLES2_GET_FUN(StencilThenCoverFillPathInstancedCHROMIUM)
-#define glStencilThenCoverStrokePathInstancedCHROMIUM \
-  GLES2_GET_FUN(StencilThenCoverStrokePathInstancedCHROMIUM)
-#define glBindFragmentInputLocationCHROMIUM \
-  GLES2_GET_FUN(BindFragmentInputLocationCHROMIUM)
-#define glProgramPathFragmentInputGenCHROMIUM \
-  GLES2_GET_FUN(ProgramPathFragmentInputGenCHROMIUM)
 #define glContextVisibilityHintCHROMIUM \
   GLES2_GET_FUN(ContextVisibilityHintCHROMIUM)
 #define glCoverageModulationCHROMIUM GLES2_GET_FUN(CoverageModulationCHROMIUM)
diff --git a/gpu/GLES2/gl2extchromium.h b/gpu/GLES2/gl2extchromium.h
index 353f168..b67d61d 100644
--- a/gpu/GLES2/gl2extchromium.h
+++ b/gpu/GLES2/gl2extchromium.h
@@ -814,348 +814,6 @@
 #endif
 #endif /* GL_CHROMIUM_nonblocking_readback */
 
-#ifndef GL_CHROMIUM_path_rendering
-#define GL_CHROMIUM_path_rendering 1
-
-#ifdef GL_GLEXT_PROTOTYPES
-GL_APICALL void GL_APIENTRY
-    glMatrixLoadfCHROMIUM(GLenum mode, const GLfloat* m);
-GL_APICALL void GL_APIENTRY glMatrixLoadIdentityCHROMIUM(GLenum mode);
-GL_APICALL GLuint GL_APIENTRY glGenPathsCHROMIUM(GLsizei range);
-GL_APICALL void GL_APIENTRY glDeletePathsCHROMIUM(GLuint path, GLsizei range);
-GL_APICALL GLboolean GL_APIENTRY glIsPathCHROMIUM(GLuint path);
-GL_APICALL void GL_APIENTRY glPathCommandsCHROMIUM(GLuint path,
-                                                   GLsizei numCommands,
-                                                   const GLubyte* commands,
-                                                   GLsizei numCoords,
-                                                   GLenum coordType,
-                                                   const void* coords);
-GL_APICALL void GL_APIENTRY
-glPathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value);
-GL_APICALL void GL_APIENTRY
-glPathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value);
-GL_APICALL void GL_APIENTRY
-glPathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask);
-GL_APICALL void GL_APIENTRY
-glStencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask);
-GL_APICALL void GL_APIENTRY
-glStencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask);
-GL_APICALL void GL_APIENTRY
-glCoverFillPathCHROMIUM(GLuint path, GLenum coverMode);
-GL_APICALL void GL_APIENTRY
-glCoverStrokePathCHROMIUM(GLuint name, GLenum coverMode);
-GL_APICALL void GL_APIENTRY
-glStencilThenCoverFillPathCHROMIUM(GLuint path,
-                                   GLenum fillMode,
-                                   GLuint mask,
-                                   GLenum coverMode);
-GL_APICALL void GL_APIENTRY
-glStencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                     GLint reference,
-                                     GLuint mask,
-                                     GLenum coverMode);
-
-GL_APICALL void GL_APIENTRY
-glStencilFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                   GLenum pathNameType,
-                                   const GLvoid* paths,
-                                   GLuint pathBase,
-                                   GLenum fillMode,
-                                   GLuint mask,
-                                   GLenum transformType,
-                                   const GLfloat* transformValues);
-GL_APICALL void GL_APIENTRY
-glStencilStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                     GLenum pathNameType,
-                                     const GLvoid* paths,
-                                     GLuint pathBase,
-                                     GLint ref,
-                                     GLuint mask,
-                                     GLenum transformType,
-                                     const GLfloat* transformValues);
-GL_APICALL void GL_APIENTRY
-glCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                 GLenum pathNameType,
-                                 const GLvoid* paths,
-                                 GLuint pathBase,
-                                 GLenum coverMode,
-                                 GLenum transformType,
-                                 const GLfloat* transformValues);
-GL_APICALL void GL_APIENTRY
-glCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                   GLenum pathNameType,
-                                   const GLvoid* paths,
-                                   GLuint pathBase,
-                                   GLenum coverMode,
-                                   GLenum transformType,
-                                   const GLfloat* transformValues);
-GL_APICALL void GL_APIENTRY
-glStencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                            GLenum pathNameType,
-                                            const GLvoid* paths,
-                                            GLuint pathBase,
-                                            GLenum fillMode,
-                                            GLuint mask,
-                                            GLenum coverMode,
-                                            GLenum transformType,
-                                            const GLfloat* transformValues);
-GL_APICALL void GL_APIENTRY
-glStencilThenCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                              GLenum pathNameType,
-                                              const GLvoid* paths,
-                                              GLuint pathBase,
-                                              GLint ref,
-                                              GLuint mask,
-                                              GLenum coverMode,
-                                              GLenum transformType,
-                                              const GLfloat* transformValues);
-GL_APICALL void GL_APIENTRY
-glBindFragmentInputLocationCHROMIUM(GLuint program,
-                                    GLint location,
-                                    const char* name);
-GL_APICALL void GL_APIENTRY
-glProgramPathFragmentInputGenCHROMIUM(GLuint program,
-                                      GLint location,
-                                      GLenum genMode,
-                                      GLint components,
-                                      const GLfloat* coeffs);
-
-#endif
-
-typedef void(GL_APIENTRYP PFNGLMATRIXLOADFCHROMIUMPROC)(GLenum matrixMode,
-                                                        const GLfloat* m);
-typedef void(GL_APIENTRYP PFNGLMATRIXLOADIDENTITYCHROMIUMPROC)(
-    GLenum matrixMode);
-typedef GLuint(GL_APIENTRYP* PFNGLGENPATHSCHROMIUMPROC)(GLsizei range);
-typedef void(GL_APIENTRYP* PFNGLDELETEPATHSCHROMIUMPROC)(GLuint path,
-                                                         GLsizei range);
-typedef GLboolean(GL_APIENTRYP* PFNGLISPATHCHROMIUMPROC)(GLuint path);
-typedef void(GL_APIENTRYP* PFNGLPATHCOMMANDSCHROMIUMPROC)(
-    GLuint path,
-    GLsizei numCommands,
-    const GLubyte* commands,
-    GLsizei numCoords,
-    GLenum coordType,
-    const GLvoid* coords);
-typedef void(GL_APIENTRYP* PFNGLPATHPARAMETERICHROMIUMPROC)(GLuint path,
-                                                            GLenum pname,
-                                                            GLint value);
-typedef void(GL_APIENTRYP* PFNGLPATHPARAMETERFCHROMIUMPROC)(GLuint path,
-                                                            GLenum pname,
-                                                            GLfloat value);
-typedef void(GL_APIENTRYP* PFNGLPATHSTENCILFUNCCHROMIUMPROC)(GLenum func,
-                                                             GLint ref,
-                                                             GLuint mask);
-typedef void(GL_APIENTRYP* PFNGLSTENCILFILLPATHCHROMIUMPROC)(GLuint path,
-                                                             GLenum fillMode,
-                                                             GLuint mask);
-typedef void(GL_APIENTRYP* PFNGLSTENCILSTROKEPATHCHROMIUMPROC)(GLuint path,
-                                                               GLint reference,
-                                                               GLuint mask);
-typedef void(GL_APIENTRYP* PFNGLCOVERFILLPATHCHROMIUMPROC)(GLuint path,
-                                                           GLenum coverMode);
-typedef void(GL_APIENTRYP* PFNGLCOVERSTROKEPATHCHROMIUMPROC)(GLuint name,
-                                                             GLenum coverMode);
-
-typedef void(GL_APIENTRYP* PFNGLSTENCILTHENCOVERFILLPATHCHROMIUMPROC)(
-    GLuint path,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode);
-typedef void(GL_APIENTRYP* PFNGLSTENCILTHENCOVERSTROKEPATHCHROMIUMPROC)(
-    GLuint path,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode);
-typedef void(GL_APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDCHROMIUMPROC)(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues);
-typedef void(GL_APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDCHROMIUMPROC)(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues);
-typedef void(GL_APIENTRYP PFNGLCOVERFILLPATHINSTANCEDCHROMIUMPROC)(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues);
-typedef void(GL_APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDCHROMIUMPROC)(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues);
-typedef void(GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDCHROMIUMPROC)(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues);
-typedef void(GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDCHROMIUMPROC)(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues);
-typedef void(GL_APIENTRYP PFNGLBINDFRAGMENTINPUTLOCATIONCHROMIUMPROC)(
-    GLuint program,
-    GLint location,
-    const char* name);
-typedef void(GL_APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENCHROMIUMPROC)(
-    GLuint program,
-    GLint location,
-    GLenum genMode,
-    GLint components,
-    const GLfloat* coeffs);
-
-#ifndef GL_CLOSE_PATH_CHROMIUM
-#define GL_CLOSE_PATH_CHROMIUM 0x00
-#endif
-#ifndef GL_MOVE_TO_CHROMIUM
-#define GL_MOVE_TO_CHROMIUM 0x02
-#endif
-#ifndef GL_LINE_TO_CHROMIUM
-#define GL_LINE_TO_CHROMIUM 0x04
-#endif
-#ifndef GL_QUADRATIC_CURVE_TO_CHROMIUM
-#define GL_QUADRATIC_CURVE_TO_CHROMIUM 0x0A
-#endif
-#ifndef GL_CUBIC_CURVE_TO_CHROMIUM
-#define GL_CUBIC_CURVE_TO_CHROMIUM 0x0C
-#endif
-#ifndef GL_CONIC_CURVE_TO_CHROMIUM
-#define GL_CONIC_CURVE_TO_CHROMIUM 0x1A
-#endif
-#ifndef GL_PATH_MODELVIEW_MATRIX_CHROMIUM
-#define GL_PATH_MODELVIEW_MATRIX_CHROMIUM 0x0BA6
-#endif
-#ifndef GL_PATH_PROJECTION_MATRIX_CHROMIUM
-#define GL_PATH_PROJECTION_MATRIX_CHROMIUM 0x0BA7
-#endif
-#ifndef GL_PATH_MODELVIEW_CHROMIUM
-#define GL_PATH_MODELVIEW_CHROMIUM 0x1700
-#endif
-#ifndef GL_PATH_PROJECTION_CHROMIUM
-#define GL_PATH_PROJECTION_CHROMIUM 0x1701
-#endif
-#ifndef GL_FLAT_CHROMIUM
-#define GL_FLAT_CHROMIUM 0x1D00
-#endif
-#ifndef GL_EYE_LINEAR_CHROMIUM
-#define GL_EYE_LINEAR_CHROMIUM 0x2400
-#endif
-#ifndef GL_OBJECT_LINEAR_CHROMIUM
-#define GL_OBJECT_LINEAR_CHROMIUM 0x2401
-#endif
-#ifndef GL_CONSTANT_CHROMIUM
-#define GL_CONSTANT_CHROMIUM 0x8576
-#endif
-#ifndef GL_PATH_STROKE_WIDTH_CHROMIUM
-#define GL_PATH_STROKE_WIDTH_CHROMIUM 0x9075
-#endif
-#ifndef GL_PATH_END_CAPS_CHROMIUM
-#define GL_PATH_END_CAPS_CHROMIUM 0x9076
-#endif
-#ifndef GL_PATH_JOIN_STYLE_CHROMIUM
-#define GL_PATH_JOIN_STYLE_CHROMIUM 0x9079
-#endif
-#ifndef GL_PATH_MITER_LIMIT_CHROMIUM
-#define GL_PATH_MITER_LIMIT_CHROMIUM 0x907a
-#endif
-#ifndef GL_PATH_STROKE_BOUND_CHROMIUM
-#define GL_PATH_STROKE_BOUND_CHROMIUM 0x9086
-#endif
-#ifndef GL_COUNT_UP_CHROMIUM
-#define GL_COUNT_UP_CHROMIUM 0x9088
-#endif
-#ifndef GL_COUNT_DOWN_CHROMIUM
-#define GL_COUNT_DOWN_CHROMIUM 0x9089
-#endif
-#ifndef GL_CONVEX_HULL_CHROMIUM
-#define GL_CONVEX_HULL_CHROMIUM 0x908B
-#endif
-#ifndef GL_BOUNDING_BOX_CHROMIUM
-#define GL_BOUNDING_BOX_CHROMIUM 0x908D
-#endif
-#ifndef GL_TRANSLATE_X_CHROMIUM
-#define GL_TRANSLATE_X_CHROMIUM 0x908E
-#endif
-#ifndef GL_TRANSLATE_Y_CHROMIUM
-#define GL_TRANSLATE_Y_CHROMIUM 0x908F
-#endif
-#ifndef GL_TRANSLATE_2D_CHROMIUM
-#define GL_TRANSLATE_2D_CHROMIUM 0x9090
-#endif
-#ifndef GL_TRANSLATE_3D_CHROMIUM
-#define GL_TRANSLATE_3D_CHROMIUM 0x9091
-#endif
-#ifndef GL_AFFINE_2D_CHROMIUM
-#define GL_AFFINE_2D_CHROMIUM 0x9092
-#endif
-#ifndef GL_AFFINE_3D_CHROMIUM
-#define GL_AFFINE_3D_CHROMIUM 0x9094
-#endif
-#ifndef GL_TRANSPOSE_AFFINE_2D_CHROMIUM
-#define GL_TRANSPOSE_AFFINE_2D_CHROMIUM 0x9096
-#endif
-#ifndef GL_TRANSPOSE_AFFINE_3D_CHROMIUM
-#define GL_TRANSPOSE_AFFINE_3D_CHROMIUM 0x9098
-#endif
-#ifndef GL_SQUARE_CHROMIUM
-#define GL_SQUARE_CHROMIUM 0x90a3
-#endif
-#ifndef GL_ROUND_CHROMIUM
-#define GL_ROUND_CHROMIUM 0x90a4
-#endif
-#ifndef GL_ROUND_CHROMIUM
-#define GL_ROUND_CHROMIUM 0x90A4
-#endif
-#ifndef GL_BEVEL_CHROMIUM
-#define GL_BEVEL_CHROMIUM 0x90A6
-#endif
-#ifndef GL_MITER_REVERT_CHROMIUM
-#define GL_MITER_REVERT_CHROMIUM 0x90A7
-#endif
-#ifndef GL_PATH_STENCIL_FUNC_CHROMIUM
-#define GL_PATH_STENCIL_FUNC_CHROMIUM 0x90B7
-#endif
-#ifndef GL_PATH_STENCIL_REF_CHROMIUM
-#define GL_PATH_STENCIL_REF_CHROMIUM 0x90B8
-#endif
-#ifndef GL_PATH_STENCIL_VALUE_MASK_CHROMIUM
-#define GL_PATH_STENCIL_VALUE_MASK_CHROMIUM 0x90B9
-#endif
-#ifndef GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM
-#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM 0x909C
-#endif
-
-#endif /* GL_CHROMIUM_path_rendering */
-
-
 #ifndef GL_EXT_multisample_compatibility
 #define GL_EXT_multisample_compatibility 1
 #define GL_MULTISAMPLE_EXT 0x809D
diff --git a/gpu/command_buffer/build_cmd_buffer_lib.py b/gpu/command_buffer/build_cmd_buffer_lib.py
index 1400425..2538596 100644
--- a/gpu/command_buffer/build_cmd_buffer_lib.py
+++ b/gpu/command_buffer/build_cmd_buffer_lib.py
@@ -626,61 +626,6 @@
       },
     ],
   },
-  'MatrixValuesCHROMIUM': {
-    'type': 'NamedParameter',
-    'func': 'MatrixLoadfEXT',
-    'states': [
-      { 'enum': 'GL_PATH_MODELVIEW_MATRIX_CHROMIUM',
-        'enum_set': 'GL_PATH_MODELVIEW_CHROMIUM',
-        'name': 'modelview_matrix',
-        'type': 'GLfloat',
-        'default': [
-          '1.0f', '0.0f','0.0f','0.0f',
-          '0.0f', '1.0f','0.0f','0.0f',
-          '0.0f', '0.0f','1.0f','0.0f',
-          '0.0f', '0.0f','0.0f','1.0f',
-        ],
-        'extension_flag': 'chromium_path_rendering',
-      },
-      { 'enum': 'GL_PATH_PROJECTION_MATRIX_CHROMIUM',
-        'enum_set': 'GL_PATH_PROJECTION_CHROMIUM',
-        'name': 'projection_matrix',
-        'type': 'GLfloat',
-        'default': [
-          '1.0f', '0.0f','0.0f','0.0f',
-          '0.0f', '1.0f','0.0f','0.0f',
-          '0.0f', '0.0f','1.0f','0.0f',
-          '0.0f', '0.0f','0.0f','1.0f',
-        ],
-        'extension_flag': 'chromium_path_rendering',
-      },
-    ],
-  },
-  'PathStencilFuncCHROMIUM': {
-    'type': 'Normal',
-    'func': 'PathStencilFuncNV',
-    'extension_flag': 'chromium_path_rendering',
-    'states': [
-      {
-        'name': 'stencil_path_func',
-        'type': 'GLenum',
-        'enum': 'GL_PATH_STENCIL_FUNC_CHROMIUM',
-        'default': 'GL_ALWAYS',
-       },
-      {
-        'name': 'stencil_path_ref',
-        'type': 'GLint',
-        'enum': 'GL_PATH_STENCIL_REF_CHROMIUM',
-        'default': '0',
-       },
-      {
-        'name': 'stencil_path_mask',
-        'type': 'GLuint',
-        'enum': 'GL_PATH_STENCIL_VALUE_MASK_CHROMIUM',
-        'default': '0xFFFFFFFFU',
-      },
-    ],
-  },
   'WindowRectanglesEXT': {
     'type': 'Normal',
     'func': 'WindowRectanglesEXT',
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index 9af8c78..653016c 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -684,14 +684,6 @@
     'type': 'GLenum',
     'valid' : [],
   },
-  'MatrixMode': {
-    'type': 'GLenum',
-    'is_complete': True,
-    'valid': [
-      'GL_PATH_PROJECTION_CHROMIUM',
-      'GL_PATH_MODELVIEW_CHROMIUM',
-    ],
-  },
   'ProgramParameter': {
     'type': 'GLenum',
     'valid': [
@@ -1056,109 +1048,6 @@
       'GL_UNSIGNED_BYTE_3_3_2',
     ],
   },
-  'PathCoordType': {
-    'type': 'GLenum',
-    'is_complete': True,
-    'valid': [
-      'GL_BYTE',
-      'GL_UNSIGNED_BYTE',
-      'GL_SHORT',
-      'GL_UNSIGNED_SHORT',
-      'GL_FLOAT',
-    ],
-  },
-  'PathCoverMode': {
-    'type': 'GLenum',
-    'is_complete': True,
-    'valid': [
-      'GL_CONVEX_HULL_CHROMIUM',
-      'GL_BOUNDING_BOX_CHROMIUM',
-    ],
-  },
-  'PathFillMode': {
-    'type': 'GLenum',
-    'is_complete': True,
-    'valid': [
-      'GL_INVERT',
-      'GL_COUNT_UP_CHROMIUM',
-      'GL_COUNT_DOWN_CHROMIUM',
-    ],
-  },
-  'PathInstancedCoverMode': {
-    'type': 'GLenum',
-    'is_complete': True,
-    'valid': [
-      'GL_CONVEX_HULL_CHROMIUM',
-      'GL_BOUNDING_BOX_CHROMIUM',
-      'GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM',
-    ],
-  },
-  'PathNameType': {
-    'type': 'GLenum',
-    'is_complete': True,
-    'valid': [
-      'GL_UNSIGNED_BYTE',
-      'GL_BYTE',
-      'GL_UNSIGNED_SHORT',
-      'GL_SHORT',
-      'GL_UNSIGNED_INT',
-      'GL_INT',
-    ],
-  },
-  'PathParameter': {
-    'type': 'GLenum',
-    'is_complete': True,
-    'valid': [
-      'GL_PATH_STROKE_WIDTH_CHROMIUM',
-      'GL_PATH_END_CAPS_CHROMIUM',
-      'GL_PATH_JOIN_STYLE_CHROMIUM',
-      'GL_PATH_MITER_LIMIT_CHROMIUM',
-      'GL_PATH_STROKE_BOUND_CHROMIUM',
-    ]
-  },
-  'PathParameterCapValues': {
-    'type': 'GLint',
-    'is_complete': True,
-    'valid': [
-      'GL_FLAT',
-      'GL_SQUARE_CHROMIUM',
-      'GL_ROUND_CHROMIUM',
-    ]
-  },
-  'PathParameterJoinValues': {
-    'type': 'GLint',
-    'is_complete': True,
-    'valid': [
-      'GL_MITER_REVERT_CHROMIUM',
-      'GL_BEVEL_CHROMIUM',
-      'GL_ROUND_CHROMIUM',
-    ]
-  },
-  'PathTransformType': {
-    'type': 'GLenum',
-    'is_complete': True,
-    'valid': [
-      'GL_NONE',
-      'GL_TRANSLATE_X_CHROMIUM',
-      'GL_TRANSLATE_Y_CHROMIUM',
-      'GL_TRANSLATE_2D_CHROMIUM',
-      'GL_TRANSLATE_3D_CHROMIUM',
-      'GL_AFFINE_2D_CHROMIUM',
-      'GL_AFFINE_3D_CHROMIUM',
-      'GL_TRANSPOSE_AFFINE_2D_CHROMIUM',
-      'GL_TRANSPOSE_AFFINE_3D_CHROMIUM',
-    ],
-  },
-  'PathFragmentInputGenMode': {
-    'type': 'GLenum',
-    'is_complete': True,
-    'valid': [
-      'GL_NONE',
-      'GL_EYE_LINEAR_CHROMIUM',
-      'GL_OBJECT_LINEAR_CHROMIUM',
-      'GL_CONSTANT_CHROMIUM',
-    ],
-  },
   'ReadPixelType': {
     'type': 'GLenum',
     'valid': [
@@ -4053,138 +3942,6 @@
     'client_test': False,
     'extension': 'CHROMIUM_commit_overlay_planes',
   },
-  'MatrixLoadfCHROMIUM': {
-    'type': 'PUT',
-    'count': 16,
-    'data_type': 'GLfloat',
-    'decoder_func': 'DoMatrixLoadfCHROMIUM',
-    'gl_test_func': 'glMatrixLoadfEXT',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'MatrixLoadIdentityCHROMIUM': {
-    'decoder_func': 'DoMatrixLoadIdentityCHROMIUM',
-    'gl_test_func': 'glMatrixLoadIdentityEXT',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'GenPathsCHROMIUM': {
-    'type': 'Custom',
-    'cmd_args': 'GLuint first_client_id, GLsizei range',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'DeletePathsCHROMIUM': {
-    'type': 'Custom',
-    'cmd_args': 'GLuint first_client_id, GLsizei range',
-    'impl_func': False,
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'IsPathCHROMIUM': {
-    'type': 'Is',
-    'decoder_func': 'DoIsPathCHROMIUM',
-    'gl_test_func': 'glIsPathNV',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'PathCommandsCHROMIUM': {
-    'type': 'Custom',
-    'impl_func': False,
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'PathParameterfCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'PathParameteriCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'PathStencilFuncCHROMIUM': {
-    'type': 'StateSet',
-    'state': 'PathStencilFuncCHROMIUM',
-    'decoder_func': 'glPathStencilFuncNV',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'StencilFillPathCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'StencilStrokePathCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'CoverFillPathCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'CoverStrokePathCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'StencilThenCoverFillPathCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'StencilThenCoverStrokePathCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'StencilFillPathInstancedCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'StencilStrokePathInstancedCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'CoverFillPathInstancedCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'CoverStrokePathInstancedCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'StencilThenCoverFillPathInstancedCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'StencilThenCoverStrokePathInstancedCHROMIUM': {
-    'type': 'Custom',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'BindFragmentInputLocationCHROMIUM': {
-    'type': 'GLchar',
-    'data_transfer_methods': ['bucket'],
-    'needs_size': True,
-    'gl_test_func': 'DoBindFragmentInputLocationCHROMIUM',
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
-  'ProgramPathFragmentInputGenCHROMIUM': {
-    'type': 'Custom',
-    'data_transfer_methods': ['shm'],
-    'extension': 'CHROMIUM_path_rendering',
-    'extension_flag': 'chromium_path_rendering',
-  },
   'SetDrawRectangleCHROMIUM': {
     'decoder_func': 'DoSetDrawRectangleCHROMIUM',
     'unit_test': False,
diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h
index b5a28fb5..76546b8 100644
--- a/gpu/command_buffer/client/gles2_c_lib_autogen.h
+++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h
@@ -1692,168 +1692,6 @@
 void GL_APIENTRY GLES2SetActiveURLCHROMIUM(const char* url) {
   gles2::GetGLContext()->SetActiveURLCHROMIUM(url);
 }
-void GL_APIENTRY GLES2MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) {
-  gles2::GetGLContext()->MatrixLoadfCHROMIUM(matrixMode, m);
-}
-void GL_APIENTRY GLES2MatrixLoadIdentityCHROMIUM(GLenum matrixMode) {
-  gles2::GetGLContext()->MatrixLoadIdentityCHROMIUM(matrixMode);
-}
-GLuint GL_APIENTRY GLES2GenPathsCHROMIUM(GLsizei range) {
-  return gles2::GetGLContext()->GenPathsCHROMIUM(range);
-}
-void GL_APIENTRY GLES2DeletePathsCHROMIUM(GLuint path, GLsizei range) {
-  gles2::GetGLContext()->DeletePathsCHROMIUM(path, range);
-}
-GLboolean GL_APIENTRY GLES2IsPathCHROMIUM(GLuint path) {
-  return gles2::GetGLContext()->IsPathCHROMIUM(path);
-}
-void GL_APIENTRY GLES2PathCommandsCHROMIUM(GLuint path,
-                                           GLsizei numCommands,
-                                           const GLubyte* commands,
-                                           GLsizei numCoords,
-                                           GLenum coordType,
-                                           const GLvoid* coords) {
-  gles2::GetGLContext()->PathCommandsCHROMIUM(path, numCommands, commands,
-                                              numCoords, coordType, coords);
-}
-void GL_APIENTRY GLES2PathParameterfCHROMIUM(GLuint path,
-                                             GLenum pname,
-                                             GLfloat value) {
-  gles2::GetGLContext()->PathParameterfCHROMIUM(path, pname, value);
-}
-void GL_APIENTRY GLES2PathParameteriCHROMIUM(GLuint path,
-                                             GLenum pname,
-                                             GLint value) {
-  gles2::GetGLContext()->PathParameteriCHROMIUM(path, pname, value);
-}
-void GL_APIENTRY GLES2PathStencilFuncCHROMIUM(GLenum func,
-                                              GLint ref,
-                                              GLuint mask) {
-  gles2::GetGLContext()->PathStencilFuncCHROMIUM(func, ref, mask);
-}
-void GL_APIENTRY GLES2StencilFillPathCHROMIUM(GLuint path,
-                                              GLenum fillMode,
-                                              GLuint mask) {
-  gles2::GetGLContext()->StencilFillPathCHROMIUM(path, fillMode, mask);
-}
-void GL_APIENTRY GLES2StencilStrokePathCHROMIUM(GLuint path,
-                                                GLint reference,
-                                                GLuint mask) {
-  gles2::GetGLContext()->StencilStrokePathCHROMIUM(path, reference, mask);
-}
-void GL_APIENTRY GLES2CoverFillPathCHROMIUM(GLuint path, GLenum coverMode) {
-  gles2::GetGLContext()->CoverFillPathCHROMIUM(path, coverMode);
-}
-void GL_APIENTRY GLES2CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode) {
-  gles2::GetGLContext()->CoverStrokePathCHROMIUM(path, coverMode);
-}
-void GL_APIENTRY GLES2StencilThenCoverFillPathCHROMIUM(GLuint path,
-                                                       GLenum fillMode,
-                                                       GLuint mask,
-                                                       GLenum coverMode) {
-  gles2::GetGLContext()->StencilThenCoverFillPathCHROMIUM(path, fillMode, mask,
-                                                          coverMode);
-}
-void GL_APIENTRY GLES2StencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                                         GLint reference,
-                                                         GLuint mask,
-                                                         GLenum coverMode) {
-  gles2::GetGLContext()->StencilThenCoverStrokePathCHROMIUM(path, reference,
-                                                            mask, coverMode);
-}
-void GL_APIENTRY
-GLES2StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                      GLenum pathNameType,
-                                      const GLvoid* paths,
-                                      GLuint pathBase,
-                                      GLenum fillMode,
-                                      GLuint mask,
-                                      GLenum transformType,
-                                      const GLfloat* transformValues) {
-  gles2::GetGLContext()->StencilFillPathInstancedCHROMIUM(
-      numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType,
-      transformValues);
-}
-void GL_APIENTRY
-GLES2StencilStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                        GLenum pathNameType,
-                                        const GLvoid* paths,
-                                        GLuint pathBase,
-                                        GLint reference,
-                                        GLuint mask,
-                                        GLenum transformType,
-                                        const GLfloat* transformValues) {
-  gles2::GetGLContext()->StencilStrokePathInstancedCHROMIUM(
-      numPaths, pathNameType, paths, pathBase, reference, mask, transformType,
-      transformValues);
-}
-void GL_APIENTRY
-GLES2CoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                    GLenum pathNameType,
-                                    const GLvoid* paths,
-                                    GLuint pathBase,
-                                    GLenum coverMode,
-                                    GLenum transformType,
-                                    const GLfloat* transformValues) {
-  gles2::GetGLContext()->CoverFillPathInstancedCHROMIUM(
-      numPaths, pathNameType, paths, pathBase, coverMode, transformType,
-      transformValues);
-}
-void GL_APIENTRY
-GLES2CoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                      GLenum pathNameType,
-                                      const GLvoid* paths,
-                                      GLuint pathBase,
-                                      GLenum coverMode,
-                                      GLenum transformType,
-                                      const GLfloat* transformValues) {
-  gles2::GetGLContext()->CoverStrokePathInstancedCHROMIUM(
-      numPaths, pathNameType, paths, pathBase, coverMode, transformType,
-      transformValues);
-}
-void GL_APIENTRY
-GLES2StencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                               GLenum pathNameType,
-                                               const GLvoid* paths,
-                                               GLuint pathBase,
-                                               GLenum fillMode,
-                                               GLuint mask,
-                                               GLenum coverMode,
-                                               GLenum transformType,
-                                               const GLfloat* transformValues) {
-  gles2::GetGLContext()->StencilThenCoverFillPathInstancedCHROMIUM(
-      numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode,
-      transformType, transformValues);
-}
-void GL_APIENTRY GLES2StencilThenCoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) {
-  gles2::GetGLContext()->StencilThenCoverStrokePathInstancedCHROMIUM(
-      numPaths, pathNameType, paths, pathBase, reference, mask, coverMode,
-      transformType, transformValues);
-}
-void GL_APIENTRY GLES2BindFragmentInputLocationCHROMIUM(GLuint program,
-                                                        GLint location,
-                                                        const char* name) {
-  gles2::GetGLContext()->BindFragmentInputLocationCHROMIUM(program, location,
-                                                           name);
-}
-void GL_APIENTRY
-GLES2ProgramPathFragmentInputGenCHROMIUM(GLuint program,
-                                         GLint location,
-                                         GLenum genMode,
-                                         GLint components,
-                                         const GLfloat* coeffs) {
-  gles2::GetGLContext()->ProgramPathFragmentInputGenCHROMIUM(
-      program, location, genMode, components, coeffs);
-}
 void GL_APIENTRY GLES2ContextVisibilityHintCHROMIUM(GLboolean visibility) {
   gles2::GetGLContext()->ContextVisibilityHintCHROMIUM(visibility);
 }
@@ -3302,108 +3140,6 @@
         reinterpret_cast<GLES2FunctionPointer>(glSetActiveURLCHROMIUM),
     },
     {
-        "glMatrixLoadfCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glMatrixLoadfCHROMIUM),
-    },
-    {
-        "glMatrixLoadIdentityCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glMatrixLoadIdentityCHROMIUM),
-    },
-    {
-        "glGenPathsCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glGenPathsCHROMIUM),
-    },
-    {
-        "glDeletePathsCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glDeletePathsCHROMIUM),
-    },
-    {
-        "glIsPathCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glIsPathCHROMIUM),
-    },
-    {
-        "glPathCommandsCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glPathCommandsCHROMIUM),
-    },
-    {
-        "glPathParameterfCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glPathParameterfCHROMIUM),
-    },
-    {
-        "glPathParameteriCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glPathParameteriCHROMIUM),
-    },
-    {
-        "glPathStencilFuncCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glPathStencilFuncCHROMIUM),
-    },
-    {
-        "glStencilFillPathCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glStencilFillPathCHROMIUM),
-    },
-    {
-        "glStencilStrokePathCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glStencilStrokePathCHROMIUM),
-    },
-    {
-        "glCoverFillPathCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glCoverFillPathCHROMIUM),
-    },
-    {
-        "glCoverStrokePathCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(glCoverStrokePathCHROMIUM),
-    },
-    {
-        "glStencilThenCoverFillPathCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(
-            glStencilThenCoverFillPathCHROMIUM),
-    },
-    {
-        "glStencilThenCoverStrokePathCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(
-            glStencilThenCoverStrokePathCHROMIUM),
-    },
-    {
-        "glStencilFillPathInstancedCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(
-            glStencilFillPathInstancedCHROMIUM),
-    },
-    {
-        "glStencilStrokePathInstancedCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(
-            glStencilStrokePathInstancedCHROMIUM),
-    },
-    {
-        "glCoverFillPathInstancedCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(
-            glCoverFillPathInstancedCHROMIUM),
-    },
-    {
-        "glCoverStrokePathInstancedCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(
-            glCoverStrokePathInstancedCHROMIUM),
-    },
-    {
-        "glStencilThenCoverFillPathInstancedCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(
-            glStencilThenCoverFillPathInstancedCHROMIUM),
-    },
-    {
-        "glStencilThenCoverStrokePathInstancedCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(
-            glStencilThenCoverStrokePathInstancedCHROMIUM),
-    },
-    {
-        "glBindFragmentInputLocationCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(
-            glBindFragmentInputLocationCHROMIUM),
-    },
-    {
-        "glProgramPathFragmentInputGenCHROMIUM",
-        reinterpret_cast<GLES2FunctionPointer>(
-            glProgramPathFragmentInputGenCHROMIUM),
-    },
-    {
         "glContextVisibilityHintCHROMIUM",
         reinterpret_cast<GLES2FunctionPointer>(glContextVisibilityHintCHROMIUM),
     },
diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
index a2274d3..7aa8069 100644
--- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
+++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
@@ -3139,284 +3139,6 @@
   }
 }
 
-void MatrixLoadfCHROMIUMImmediate(GLenum matrixMode, const GLfloat* m) {
-  const uint32_t size =
-      gles2::cmds::MatrixLoadfCHROMIUMImmediate::ComputeSize();
-  gles2::cmds::MatrixLoadfCHROMIUMImmediate* c =
-      GetImmediateCmdSpaceTotalSize<gles2::cmds::MatrixLoadfCHROMIUMImmediate>(
-          size);
-  if (c) {
-    c->Init(matrixMode, m);
-  }
-}
-
-void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) {
-  gles2::cmds::MatrixLoadIdentityCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::MatrixLoadIdentityCHROMIUM>();
-  if (c) {
-    c->Init(matrixMode);
-  }
-}
-
-void GenPathsCHROMIUM(GLuint first_client_id, GLsizei range) {
-  gles2::cmds::GenPathsCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::GenPathsCHROMIUM>();
-  if (c) {
-    c->Init(first_client_id, range);
-  }
-}
-
-void DeletePathsCHROMIUM(GLuint first_client_id, GLsizei range) {
-  gles2::cmds::DeletePathsCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::DeletePathsCHROMIUM>();
-  if (c) {
-    c->Init(first_client_id, range);
-  }
-}
-
-void IsPathCHROMIUM(GLuint path,
-                    uint32_t result_shm_id,
-                    uint32_t result_shm_offset) {
-  gles2::cmds::IsPathCHROMIUM* c = GetCmdSpace<gles2::cmds::IsPathCHROMIUM>();
-  if (c) {
-    c->Init(path, result_shm_id, result_shm_offset);
-  }
-}
-
-void PathCommandsCHROMIUM(GLuint path,
-                          GLsizei numCommands,
-                          uint32_t commands_shm_id,
-                          uint32_t commands_shm_offset,
-                          GLsizei numCoords,
-                          GLenum coordType,
-                          uint32_t coords_shm_id,
-                          uint32_t coords_shm_offset) {
-  gles2::cmds::PathCommandsCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::PathCommandsCHROMIUM>();
-  if (c) {
-    c->Init(path, numCommands, commands_shm_id, commands_shm_offset, numCoords,
-            coordType, coords_shm_id, coords_shm_offset);
-  }
-}
-
-void PathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value) {
-  gles2::cmds::PathParameterfCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::PathParameterfCHROMIUM>();
-  if (c) {
-    c->Init(path, pname, value);
-  }
-}
-
-void PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value) {
-  gles2::cmds::PathParameteriCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::PathParameteriCHROMIUM>();
-  if (c) {
-    c->Init(path, pname, value);
-  }
-}
-
-void PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask) {
-  gles2::cmds::PathStencilFuncCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::PathStencilFuncCHROMIUM>();
-  if (c) {
-    c->Init(func, ref, mask);
-  }
-}
-
-void StencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask) {
-  gles2::cmds::StencilFillPathCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::StencilFillPathCHROMIUM>();
-  if (c) {
-    c->Init(path, fillMode, mask);
-  }
-}
-
-void StencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask) {
-  gles2::cmds::StencilStrokePathCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::StencilStrokePathCHROMIUM>();
-  if (c) {
-    c->Init(path, reference, mask);
-  }
-}
-
-void CoverFillPathCHROMIUM(GLuint path, GLenum coverMode) {
-  gles2::cmds::CoverFillPathCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::CoverFillPathCHROMIUM>();
-  if (c) {
-    c->Init(path, coverMode);
-  }
-}
-
-void CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode) {
-  gles2::cmds::CoverStrokePathCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::CoverStrokePathCHROMIUM>();
-  if (c) {
-    c->Init(path, coverMode);
-  }
-}
-
-void StencilThenCoverFillPathCHROMIUM(GLuint path,
-                                      GLenum fillMode,
-                                      GLuint mask,
-                                      GLenum coverMode) {
-  gles2::cmds::StencilThenCoverFillPathCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::StencilThenCoverFillPathCHROMIUM>();
-  if (c) {
-    c->Init(path, fillMode, mask, coverMode);
-  }
-}
-
-void StencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                        GLint reference,
-                                        GLuint mask,
-                                        GLenum coverMode) {
-  gles2::cmds::StencilThenCoverStrokePathCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::StencilThenCoverStrokePathCHROMIUM>();
-  if (c) {
-    c->Init(path, reference, mask, coverMode);
-  }
-}
-
-void StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                      GLenum pathNameType,
-                                      uint32_t paths_shm_id,
-                                      uint32_t paths_shm_offset,
-                                      GLuint pathBase,
-                                      GLenum fillMode,
-                                      GLuint mask,
-                                      GLenum transformType,
-                                      uint32_t transformValues_shm_id,
-                                      uint32_t transformValues_shm_offset) {
-  gles2::cmds::StencilFillPathInstancedCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::StencilFillPathInstancedCHROMIUM>();
-  if (c) {
-    c->Init(numPaths, pathNameType, paths_shm_id, paths_shm_offset, pathBase,
-            fillMode, mask, transformType, transformValues_shm_id,
-            transformValues_shm_offset);
-  }
-}
-
-void StencilStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                        GLenum pathNameType,
-                                        uint32_t paths_shm_id,
-                                        uint32_t paths_shm_offset,
-                                        GLuint pathBase,
-                                        GLint reference,
-                                        GLuint mask,
-                                        GLenum transformType,
-                                        uint32_t transformValues_shm_id,
-                                        uint32_t transformValues_shm_offset) {
-  gles2::cmds::StencilStrokePathInstancedCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::StencilStrokePathInstancedCHROMIUM>();
-  if (c) {
-    c->Init(numPaths, pathNameType, paths_shm_id, paths_shm_offset, pathBase,
-            reference, mask, transformType, transformValues_shm_id,
-            transformValues_shm_offset);
-  }
-}
-
-void CoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                    GLenum pathNameType,
-                                    uint32_t paths_shm_id,
-                                    uint32_t paths_shm_offset,
-                                    GLuint pathBase,
-                                    GLenum coverMode,
-                                    GLenum transformType,
-                                    uint32_t transformValues_shm_id,
-                                    uint32_t transformValues_shm_offset) {
-  gles2::cmds::CoverFillPathInstancedCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::CoverFillPathInstancedCHROMIUM>();
-  if (c) {
-    c->Init(numPaths, pathNameType, paths_shm_id, paths_shm_offset, pathBase,
-            coverMode, transformType, transformValues_shm_id,
-            transformValues_shm_offset);
-  }
-}
-
-void CoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                      GLenum pathNameType,
-                                      uint32_t paths_shm_id,
-                                      uint32_t paths_shm_offset,
-                                      GLuint pathBase,
-                                      GLenum coverMode,
-                                      GLenum transformType,
-                                      uint32_t transformValues_shm_id,
-                                      uint32_t transformValues_shm_offset) {
-  gles2::cmds::CoverStrokePathInstancedCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::CoverStrokePathInstancedCHROMIUM>();
-  if (c) {
-    c->Init(numPaths, pathNameType, paths_shm_id, paths_shm_offset, pathBase,
-            coverMode, transformType, transformValues_shm_id,
-            transformValues_shm_offset);
-  }
-}
-
-void StencilThenCoverFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    uint32_t paths_shm_id,
-    uint32_t paths_shm_offset,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    uint32_t transformValues_shm_id,
-    uint32_t transformValues_shm_offset) {
-  gles2::cmds::StencilThenCoverFillPathInstancedCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::StencilThenCoverFillPathInstancedCHROMIUM>();
-  if (c) {
-    c->Init(numPaths, pathNameType, paths_shm_id, paths_shm_offset, pathBase,
-            fillMode, mask, coverMode, transformType, transformValues_shm_id,
-            transformValues_shm_offset);
-  }
-}
-
-void StencilThenCoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    uint32_t paths_shm_id,
-    uint32_t paths_shm_offset,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    uint32_t transformValues_shm_id,
-    uint32_t transformValues_shm_offset) {
-  gles2::cmds::StencilThenCoverStrokePathInstancedCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::StencilThenCoverStrokePathInstancedCHROMIUM>();
-  if (c) {
-    c->Init(numPaths, pathNameType, paths_shm_id, paths_shm_offset, pathBase,
-            reference, mask, coverMode, transformType, transformValues_shm_id,
-            transformValues_shm_offset);
-  }
-}
-
-void BindFragmentInputLocationCHROMIUMBucket(GLuint program,
-                                             GLint location,
-                                             uint32_t name_bucket_id) {
-  gles2::cmds::BindFragmentInputLocationCHROMIUMBucket* c =
-      GetCmdSpace<gles2::cmds::BindFragmentInputLocationCHROMIUMBucket>();
-  if (c) {
-    c->Init(program, location, name_bucket_id);
-  }
-}
-
-void ProgramPathFragmentInputGenCHROMIUM(GLuint program,
-                                         GLint location,
-                                         GLenum genMode,
-                                         GLint components,
-                                         uint32_t coeffs_shm_id,
-                                         uint32_t coeffs_shm_offset) {
-  gles2::cmds::ProgramPathFragmentInputGenCHROMIUM* c =
-      GetCmdSpace<gles2::cmds::ProgramPathFragmentInputGenCHROMIUM>();
-  if (c) {
-    c->Init(program, location, genMode, components, coeffs_shm_id,
-            coeffs_shm_offset);
-  }
-}
-
 void ContextVisibilityHintCHROMIUM(GLboolean visibility) {
   gles2::cmds::ContextVisibilityHintCHROMIUM* c =
       GetCmdSpace<gles2::cmds::ContextVisibilityHintCHROMIUM>();
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index e6aa3f651..c5d65e6 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -7370,547 +7370,6 @@
   CheckGLError();
 }
 
-GLuint GLES2Implementation::GenPathsCHROMIUM(GLsizei range) {
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenPathsCHROMIUM(" << range
-                     << ")");
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  static const char kFunctionName[] = "glGenPathsCHROMIUM";
-  if (range < 0) {
-    SetGLError(GL_INVALID_VALUE, kFunctionName, "range < 0");
-    return 0;
-  }
-  if (!base::IsValueInRangeForNumericType<int32_t>(range)) {
-    SetGLError(GL_INVALID_OPERATION, kFunctionName, "range more than 32-bit");
-    return 0;
-  }
-  if (range == 0)
-    return 0;
-
-  GLuint first_client_id = 0;
-  GetRangeIdHandler(id_namespaces::kPaths)
-      ->MakeIdRange(this, range, &first_client_id);
-
-  if (first_client_id == 0) {
-    // Ran out of id space. Is not specified to raise any gl errors.
-    return 0;
-  }
-
-  helper_->GenPathsCHROMIUM(first_client_id, range);
-
-  GPU_CLIENT_LOG_CODE_BLOCK({
-    for (GLsizei i = 0; i < range; ++i) {
-      GPU_CLIENT_LOG("  " << i << ": " << (first_client_id + i));
-    }
-  });
-  CheckGLError();
-  return first_client_id;
-}
-
-void GLES2Implementation::DeletePathsCHROMIUM(GLuint first_client_id,
-                                              GLsizei range) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeletePathsCHROMIUM("
-                     << first_client_id << ", " << range << ")");
-  static const char kFunctionName[] = "glDeletePathsCHROMIUM";
-
-  if (range < 0) {
-    SetGLError(GL_INVALID_VALUE, kFunctionName, "range < 0");
-    return;
-  }
-  if (!base::IsValueInRangeForNumericType<int32_t>(range)) {
-    SetGLError(GL_INVALID_OPERATION, kFunctionName, "range more than 32-bit");
-    return;
-  }
-  if (range == 0)
-    return;
-
-  GLuint last_client_id;
-  if (!base::CheckAdd(first_client_id, range - 1)
-           .AssignIfValid(&last_client_id)) {
-    SetGLError(GL_INVALID_OPERATION, kFunctionName, "overflow");
-    return;
-  }
-
-  GetRangeIdHandler(id_namespaces::kPaths)
-      ->FreeIdRange(this, first_client_id, range,
-                    &GLES2Implementation::DeletePathsCHROMIUMStub);
-  CheckGLError();
-}
-
-void GLES2Implementation::DeletePathsCHROMIUMStub(GLuint first_client_id,
-                                                  GLsizei range) {
-  helper_->DeletePathsCHROMIUM(first_client_id, range);
-}
-
-void GLES2Implementation::PathCommandsCHROMIUM(GLuint path,
-                                               GLsizei num_commands,
-                                               const GLubyte* commands,
-                                               GLsizei num_coords,
-                                               GLenum coord_type,
-                                               const void* coords) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPathCommandsCHROMIUM(" << path
-                     << ", " << num_commands << ", " << commands << ", "
-                     << num_coords << ", " << coords << ")");
-  static const char kFunctionName[] = "glPathCommandsCHROMIUM";
-  if (path == 0) {
-    SetGLError(GL_INVALID_VALUE, kFunctionName, "invalid path object");
-    return;
-  }
-  if (num_commands < 0) {
-    SetGLError(GL_INVALID_VALUE, kFunctionName, "numCommands < 0");
-    return;
-  }
-  if (num_commands != 0 && !commands) {
-    SetGLError(GL_INVALID_VALUE, kFunctionName, "missing commands");
-    return;
-  }
-  if (num_coords < 0) {
-    SetGLError(GL_INVALID_VALUE, kFunctionName, "numCoords < 0");
-    return;
-  }
-  if (num_coords != 0 && !coords) {
-    SetGLError(GL_INVALID_VALUE, kFunctionName, "missing coords");
-    return;
-  }
-  uint32_t coord_type_size =
-      GLES2Util::GetGLTypeSizeForPathCoordType(coord_type);
-  if (coord_type_size == 0) {
-    SetGLError(GL_INVALID_ENUM, kFunctionName, "invalid coordType");
-    return;
-  }
-  if (num_commands == 0) {
-    // No commands must mean no coords, thus nothing to memcpy. Let
-    // the service validate the call. Validate coord_type above, so
-    // that the parameters will be checked the in the same order
-    // regardless of num_commands.
-    helper_->PathCommandsCHROMIUM(path, num_commands, 0, 0, num_coords,
-                                  coord_type, 0, 0);
-    CheckGLError();
-    return;
-  }
-
-  uint32_t coords_size;
-  if (!base::CheckMul(num_coords, coord_type_size)
-           .AssignIfValid(&coords_size)) {
-    SetGLError(GL_INVALID_OPERATION, kFunctionName, "overflow");
-    return;
-  }
-
-  uint32_t required_buffer_size;
-  if (!base::CheckAdd(coords_size, num_commands)
-           .AssignIfValid(&required_buffer_size)) {
-    SetGLError(GL_INVALID_OPERATION, kFunctionName, "overflow");
-    return;
-  }
-
-  ScopedTransferBufferPtr buffer(required_buffer_size, helper_,
-                                 transfer_buffer_);
-  if (!buffer.valid() || buffer.size() < required_buffer_size) {
-    SetGLError(GL_OUT_OF_MEMORY, kFunctionName, "too large");
-    return;
-  }
-
-  uint32_t coords_shm_id = 0;
-  uint32_t coords_shm_offset = 0;
-  // Copy coords first because they need more strict alignment.
-  if (coords_size > 0) {
-    unsigned char* coords_addr = static_cast<unsigned char*>(buffer.address());
-    memcpy(coords_addr, coords, coords_size);
-    coords_shm_id = buffer.shm_id();
-    coords_shm_offset = buffer.offset();
-  }
-
-  DCHECK_GT(num_commands, 0);
-  unsigned char* commands_addr =
-      static_cast<unsigned char*>(buffer.address()) + coords_size;
-  memcpy(commands_addr, commands, num_commands);
-
-  helper_->PathCommandsCHROMIUM(path, num_commands, buffer.shm_id(),
-                                buffer.offset() + coords_size, num_coords,
-                                coord_type, coords_shm_id, coords_shm_offset);
-  CheckGLError();
-}
-
-bool GLES2Implementation::PrepareInstancedPathCommand(
-    const char* function_name,
-    GLsizei num_paths,
-    GLenum path_name_type,
-    const void* paths,
-    GLenum transform_type,
-    const GLfloat* transform_values,
-    ScopedTransferBufferPtr* buffer,
-    uint32_t* out_paths_shm_id,
-    uint32_t* out_paths_offset,
-    uint32_t* out_transforms_shm_id,
-    uint32_t* out_transforms_offset) {
-  if (num_paths < 0) {
-    SetGLError(GL_INVALID_VALUE, function_name, "numPaths < 0");
-    return false;
-  }
-  uint32_t path_name_size =
-      GLES2Util::GetGLTypeSizeForGLPathNameType(path_name_type);
-
-  if (path_name_size == 0) {
-    SetGLError(GL_INVALID_ENUM, function_name, "invalid pathNameType");
-    return false;
-  }
-
-  uint32_t transforms_component_count =
-      GLES2Util::GetComponentCountForGLTransformType(transform_type);
-
-  if (transform_type != GL_NONE && transforms_component_count == 0) {
-    SetGLError(GL_INVALID_ENUM, function_name, "invalid transformType");
-    return false;
-  }
-
-  if (num_paths == 0) {
-    // This might still be a valid or an invalid GL call. Make an empty call to
-    // the service side to check the rest of the parameters. We check the above
-    // parameters client-side, in order to get same GL errors whether num_paths
-    // == 0 or not. We do not check the parameters below, as they are anyway
-    // checked by the service side. We can not check all the parameters
-    // client-side, since the validators are not available.
-    *out_paths_shm_id = 0;
-    *out_paths_offset = 0;
-    *out_transforms_shm_id = 0;
-    *out_transforms_offset = 0;
-    return true;
-  }
-
-  if (!paths) {
-    SetGLError(GL_INVALID_VALUE, function_name, "missing paths");
-    return false;
-  }
-
-  if (transform_type != GL_NONE && !transform_values) {
-    SetGLError(GL_INVALID_VALUE, function_name, "missing transforms");
-    return false;
-  }
-
-  uint32_t paths_size;
-  if (!base::CheckMul(path_name_size, num_paths).AssignIfValid(&paths_size)) {
-    SetGLError(GL_INVALID_OPERATION, function_name, "overflow");
-    return false;
-  }
-
-  // The multiplication below will not overflow.
-  DCHECK_LE(transforms_component_count, 12U);
-  uint32_t one_transform_size = sizeof(GLfloat) * transforms_component_count;
-
-  uint32_t transforms_size;
-  if (!base::CheckMul(one_transform_size, num_paths)
-           .AssignIfValid(&transforms_size)) {
-    SetGLError(GL_INVALID_OPERATION, function_name, "overflow");
-    return false;
-  }
-
-  uint32_t required_buffer_size;
-  if (!base::CheckAdd(transforms_size, paths_size)
-           .AssignIfValid(&required_buffer_size)) {
-    SetGLError(GL_INVALID_OPERATION, function_name, "overflow");
-    return false;
-  }
-
-  buffer->Reset(required_buffer_size);
-
-  if (!buffer->valid() || buffer->size() < required_buffer_size) {
-    SetGLError(GL_OUT_OF_MEMORY, function_name, "too large");
-    return false;
-  }
-
-  // Copy transforms first, they may have more strict alignment.
-  if (transforms_size > 0) {
-    unsigned char* transforms_addr =
-        static_cast<unsigned char*>(buffer->address());
-    memcpy(transforms_addr, transform_values, transforms_size);
-    *out_transforms_shm_id = buffer->shm_id();
-    *out_transforms_offset = buffer->offset();
-  } else {
-    *out_transforms_shm_id = 0;
-    *out_transforms_offset = 0;
-  }
-
-  DCHECK_GT(paths_size, 0U);
-  unsigned char* paths_addr =
-      static_cast<unsigned char*>(buffer->address()) + transforms_size;
-  memcpy(paths_addr, paths, paths_size);
-  *out_paths_shm_id = buffer->shm_id();
-  *out_paths_offset = buffer->offset() + transforms_size;
-
-  return true;
-}
-
-void GLES2Implementation::StencilFillPathInstancedCHROMIUM(
-    GLsizei num_paths,
-    GLenum path_name_type,
-    const GLvoid* paths,
-    GLuint path_base,
-    GLenum fill_mode,
-    GLuint mask,
-    GLenum transform_type,
-    const GLfloat* transform_values) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix()
-                     << "] glStencilFillPathInstancedCHROMIUM(" << num_paths
-                     << ", " << path_name_type << ", " << paths << ", "
-                     << path_base << ", " << fill_mode << ", " << mask << ", "
-                     << transform_type << ", " << transform_values << ")");
-
-  ScopedTransferBufferPtr buffer(helper_, transfer_buffer_);
-  uint32_t paths_shm_id = 0;
-  uint32_t paths_offset = 0;
-  uint32_t transforms_shm_id = 0;
-  uint32_t transforms_offset = 0;
-  if (!PrepareInstancedPathCommand(
-          "glStencilFillPathInstancedCHROMIUM", num_paths, path_name_type,
-          paths, transform_type, transform_values, &buffer, &paths_shm_id,
-          &paths_offset, &transforms_shm_id, &transforms_offset)) {
-    return;
-  }
-
-  helper_->StencilFillPathInstancedCHROMIUM(
-      num_paths, path_name_type, paths_shm_id, paths_offset, path_base,
-      fill_mode, mask, transform_type, transforms_shm_id, transforms_offset);
-
-  CheckGLError();
-}
-
-void GLES2Implementation::StencilStrokePathInstancedCHROMIUM(
-    GLsizei num_paths,
-    GLenum path_name_type,
-    const GLvoid* paths,
-    GLuint path_base,
-    GLint ref,
-    GLuint mask,
-    GLenum transform_type,
-    const GLfloat* transform_values) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix()
-                     << "] glStencilStrokePathInstancedCHROMIUM(" << num_paths
-                     << ", " << path_name_type << ", " << paths << ", "
-                     << path_base << ", " << ref << ", " << mask << ", "
-                     << transform_type << ", " << transform_values << ")");
-
-  ScopedTransferBufferPtr buffer(helper_, transfer_buffer_);
-  uint32_t paths_shm_id = 0;
-  uint32_t paths_offset = 0;
-  uint32_t transforms_shm_id = 0;
-  uint32_t transforms_offset = 0;
-  if (!PrepareInstancedPathCommand(
-          "glStencilStrokePathInstancedCHROMIUM", num_paths, path_name_type,
-          paths, transform_type, transform_values, &buffer, &paths_shm_id,
-          &paths_offset, &transforms_shm_id, &transforms_offset)) {
-    return;
-  }
-
-  helper_->StencilStrokePathInstancedCHROMIUM(
-      num_paths, path_name_type, paths_shm_id, paths_offset, path_base, ref,
-      mask, transform_type, transforms_shm_id, transforms_offset);
-
-  CheckGLError();
-}
-
-void GLES2Implementation::CoverFillPathInstancedCHROMIUM(
-    GLsizei num_paths,
-    GLenum path_name_type,
-    const GLvoid* paths,
-    GLuint path_base,
-    GLenum cover_mode,
-    GLenum transform_type,
-    const GLfloat* transform_values) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCoverFillPathInstancedCHROMIUM("
-                     << num_paths << ", " << path_name_type << ", " << paths
-                     << ", " << path_base << ", " << cover_mode << ", "
-                     << transform_type << ", " << transform_values << ")");
-
-  ScopedTransferBufferPtr buffer(helper_, transfer_buffer_);
-  uint32_t paths_shm_id = 0;
-  uint32_t paths_offset = 0;
-  uint32_t transforms_shm_id = 0;
-  uint32_t transforms_offset = 0;
-  if (!PrepareInstancedPathCommand(
-          "glCoverFillPathInstancedCHROMIUM", num_paths, path_name_type, paths,
-          transform_type, transform_values, &buffer, &paths_shm_id,
-          &paths_offset, &transforms_shm_id, &transforms_offset)) {
-    return;
-  }
-
-  helper_->CoverFillPathInstancedCHROMIUM(
-      num_paths, path_name_type, paths_shm_id, paths_offset, path_base,
-      cover_mode, transform_type, transforms_shm_id, transforms_offset);
-
-  CheckGLError();
-}
-
-void GLES2Implementation::CoverStrokePathInstancedCHROMIUM(
-    GLsizei num_paths,
-    GLenum path_name_type,
-    const GLvoid* paths,
-    GLuint path_base,
-    GLenum cover_mode,
-    GLenum transform_type,
-    const GLfloat* transform_values) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix()
-                     << "] glCoverStrokePathInstancedCHROMIUM(" << num_paths
-                     << ", " << path_name_type << ", " << paths << ", "
-                     << path_base << ", " << cover_mode << ", "
-                     << transform_type << ", " << transform_values << ")");
-
-  ScopedTransferBufferPtr buffer(helper_, transfer_buffer_);
-  uint32_t paths_shm_id = 0;
-  uint32_t paths_offset = 0;
-  uint32_t transforms_shm_id = 0;
-  uint32_t transforms_offset = 0;
-  if (!PrepareInstancedPathCommand(
-          "glCoverStrokePathInstancedCHROMIUM", num_paths, path_name_type,
-          paths, transform_type, transform_values, &buffer, &paths_shm_id,
-          &paths_offset, &transforms_shm_id, &transforms_offset)) {
-    return;
-  }
-
-  helper_->CoverStrokePathInstancedCHROMIUM(
-      num_paths, path_name_type, paths_shm_id, paths_offset, path_base,
-      cover_mode, transform_type, transforms_shm_id, transforms_offset);
-
-  CheckGLError();
-}
-
-void GLES2Implementation::StencilThenCoverFillPathInstancedCHROMIUM(
-    GLsizei num_paths,
-    GLenum path_name_type,
-    const GLvoid* paths,
-    GLuint path_base,
-    GLenum fill_mode,
-    GLuint mask,
-    GLenum cover_mode,
-    GLenum transform_type,
-    const GLfloat* transform_values) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG(
-      "[" << GetLogPrefix() << "] glStencilThenCoverFillPathInstancedCHROMIUM("
-          << num_paths << ", " << path_name_type << ", " << paths << ", "
-          << path_base << ", " << cover_mode << ", " << fill_mode << ", "
-          << mask << ", " << transform_type << ", " << transform_values << ")");
-
-  ScopedTransferBufferPtr buffer(helper_, transfer_buffer_);
-  uint32_t paths_shm_id = 0;
-  uint32_t paths_offset = 0;
-  uint32_t transforms_shm_id = 0;
-  uint32_t transforms_offset = 0;
-  if (!PrepareInstancedPathCommand(
-          "glStencilThenCoverFillPathInstancedCHROMIUM", num_paths,
-          path_name_type, paths, transform_type, transform_values, &buffer,
-          &paths_shm_id, &paths_offset, &transforms_shm_id,
-          &transforms_offset)) {
-    return;
-  }
-
-  helper_->StencilThenCoverFillPathInstancedCHROMIUM(
-      num_paths, path_name_type, paths_shm_id, paths_offset, path_base,
-      fill_mode, mask, cover_mode, transform_type, transforms_shm_id,
-      transforms_offset);
-
-  CheckGLError();
-}
-
-void GLES2Implementation::StencilThenCoverStrokePathInstancedCHROMIUM(
-    GLsizei num_paths,
-    GLenum path_name_type,
-    const GLvoid* paths,
-    GLuint path_base,
-    GLint ref,
-    GLuint mask,
-    GLenum cover_mode,
-    GLenum transform_type,
-    const GLfloat* transform_values) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix()
-                     << "] glStencilThenCoverStrokePathInstancedCHROMIUM("
-                     << num_paths << ", " << path_name_type << ", " << paths
-                     << ", " << path_base << ", " << cover_mode << ", " << ref
-                     << ", " << mask << ", " << transform_type << ", "
-                     << transform_values << ")");
-
-  ScopedTransferBufferPtr buffer(helper_, transfer_buffer_);
-  uint32_t paths_shm_id = 0;
-  uint32_t paths_offset = 0;
-  uint32_t transforms_shm_id = 0;
-  uint32_t transforms_offset = 0;
-  if (!PrepareInstancedPathCommand(
-          "glStencilThenCoverStrokePathInstancedCHROMIUM", num_paths,
-          path_name_type, paths, transform_type, transform_values, &buffer,
-          &paths_shm_id, &paths_offset, &transforms_shm_id,
-          &transforms_offset)) {
-    return;
-  }
-
-  helper_->StencilThenCoverStrokePathInstancedCHROMIUM(
-      num_paths, path_name_type, paths_shm_id, paths_offset, path_base, ref,
-      mask, cover_mode, transform_type, transforms_shm_id, transforms_offset);
-
-  CheckGLError();
-}
-
-void GLES2Implementation::BindFragmentInputLocationCHROMIUM(GLuint program,
-                                                            GLint location,
-                                                            const char* name) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix()
-                     << "] glBindFragmentInputLocationCHROMIUM(" << program
-                     << ", " << location << ", " << name << ")");
-  SetBucketAsString(kResultBucketId, name);
-  helper_->BindFragmentInputLocationCHROMIUMBucket(program, location,
-                                                   kResultBucketId);
-  helper_->SetBucketSize(kResultBucketId, 0);
-  CheckGLError();
-}
-
-void GLES2Implementation::ProgramPathFragmentInputGenCHROMIUM(
-    GLuint program,
-    GLint location,
-    GLenum gen_mode,
-    GLint components,
-    const GLfloat* coeffs) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix()
-                     << "] glProgramPathFragmentInputGenCHROMIUM(" << program
-                     << ", " << gen_mode << ", " << components << ", " << coeffs
-                     << ")");
-
-  uint32_t coeffs_per_component =
-      GLES2Util::GetCoefficientCountForGLPathFragmentInputGenMode(gen_mode);
-
-  if (components <= 0 || components > 4 || gen_mode == GL_NONE ||
-      coeffs_per_component == 0 || location == -1) {
-    helper_->ProgramPathFragmentInputGenCHROMIUM(program, location, gen_mode,
-                                                 components, 0, 0);
-  } else {
-    // The multiplication below will not overflow.
-    DCHECK(coeffs_per_component > 0 && coeffs_per_component <= 4);
-    DCHECK(components > 0 && components <= 4);
-    uint32_t coeffs_size = sizeof(GLfloat) * coeffs_per_component * components;
-
-    ScopedTransferBufferPtr buffer(coeffs_size, helper_, transfer_buffer_);
-    if (!buffer.valid() || buffer.size() < coeffs_size) {
-      SetGLError(GL_OUT_OF_MEMORY, "glProgramPathFragmentInputGenCHROMIUM",
-                 "no room in transfer buffer");
-      return;
-    }
-
-    DCHECK_GT(coeffs_size, 0U);
-    unsigned char* addr = static_cast<unsigned char*>(buffer.address());
-    memcpy(addr, coeffs, coeffs_size);
-
-    helper_->ProgramPathFragmentInputGenCHROMIUM(program, location, gen_mode,
-                                                 components, buffer.shm_id(),
-                                                 buffer.offset());
-  }
-  CheckGLError();
-}
-
 void GLES2Implementation::InitializeDiscardableTextureCHROMIUM(
     GLuint texture_id) {
   ClientDiscardableTextureManager* manager =
diff --git a/gpu/command_buffer/client/gles2_implementation.h b/gpu/command_buffer/client/gles2_implementation.h
index ea262ee..e0db268 100644
--- a/gpu/command_buffer/client/gles2_implementation.h
+++ b/gpu/command_buffer/client/gles2_implementation.h
@@ -489,7 +489,6 @@
   void DeleteBuffersStub(GLsizei n, const GLuint* buffers);
   void DeleteRenderbuffersStub(GLsizei n, const GLuint* renderbuffers);
   void DeleteTexturesStub(GLsizei n, const GLuint* textures);
-  void DeletePathsCHROMIUMStub(GLuint first_client_id, GLsizei range);
   void DeleteProgramStub(GLsizei n, const GLuint* programs);
   void DeleteShaderStub(GLsizei n, const GLuint* shaders);
   void DeleteSamplersStub(GLsizei n, const GLuint* samplers);
@@ -671,18 +670,6 @@
 
   const std::string& GetLogPrefix() const;
 
-  bool PrepareInstancedPathCommand(const char* function_name,
-                                   GLsizei num_paths,
-                                   GLenum path_name_type,
-                                   const void* paths,
-                                   GLenum transform_type,
-                                   const GLfloat* transform_values,
-                                   ScopedTransferBufferPtr* buffer,
-                                   uint32_t* out_paths_shm_id,
-                                   uint32_t* out_paths_offset,
-                                   uint32_t* out_transforms_shm_id,
-                                   uint32_t* out_transforms_offset);
-
 // Set to 1 to have the client fail when a GL error is generated.
 // This helps find bugs in the renderer since the debugger stops on the error.
 #if DCHECK_IS_ON()
diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h
index dd28d18..6fb5046 100644
--- a/gpu/command_buffer/client/gles2_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -1198,118 +1198,6 @@
 
 void SetActiveURLCHROMIUM(const char* url) override;
 
-void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;
-
-void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) override;
-
-GLuint GenPathsCHROMIUM(GLsizei range) override;
-
-void DeletePathsCHROMIUM(GLuint path, GLsizei range) override;
-
-GLboolean IsPathCHROMIUM(GLuint path) override;
-
-void PathCommandsCHROMIUM(GLuint path,
-                          GLsizei numCommands,
-                          const GLubyte* commands,
-                          GLsizei numCoords,
-                          GLenum coordType,
-                          const GLvoid* coords) override;
-
-void PathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value) override;
-
-void PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value) override;
-
-void PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask) override;
-
-void StencilFillPathCHROMIUM(GLuint path,
-                             GLenum fillMode,
-                             GLuint mask) override;
-
-void StencilStrokePathCHROMIUM(GLuint path,
-                               GLint reference,
-                               GLuint mask) override;
-
-void CoverFillPathCHROMIUM(GLuint path, GLenum coverMode) override;
-
-void CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode) override;
-
-void StencilThenCoverFillPathCHROMIUM(GLuint path,
-                                      GLenum fillMode,
-                                      GLuint mask,
-                                      GLenum coverMode) override;
-
-void StencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                        GLint reference,
-                                        GLuint mask,
-                                        GLenum coverMode) override;
-
-void StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                      GLenum pathNameType,
-                                      const GLvoid* paths,
-                                      GLuint pathBase,
-                                      GLenum fillMode,
-                                      GLuint mask,
-                                      GLenum transformType,
-                                      const GLfloat* transformValues) override;
-
-void StencilStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues) override;
-
-void CoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                    GLenum pathNameType,
-                                    const GLvoid* paths,
-                                    GLuint pathBase,
-                                    GLenum coverMode,
-                                    GLenum transformType,
-                                    const GLfloat* transformValues) override;
-
-void CoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                      GLenum pathNameType,
-                                      const GLvoid* paths,
-                                      GLuint pathBase,
-                                      GLenum coverMode,
-                                      GLenum transformType,
-                                      const GLfloat* transformValues) override;
-
-void StencilThenCoverFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) override;
-
-void StencilThenCoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) override;
-
-void BindFragmentInputLocationCHROMIUM(GLuint program,
-                                       GLint location,
-                                       const char* name) override;
-
-void ProgramPathFragmentInputGenCHROMIUM(GLuint program,
-                                         GLint location,
-                                         GLenum genMode,
-                                         GLint components,
-                                         const GLfloat* coeffs) override;
-
 void ContextVisibilityHintCHROMIUM(GLboolean visibility) override;
 
 void CoverageModulationCHROMIUM(GLenum components) override;
diff --git a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
index 947254e..69cd2bd 100644
--- a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -3516,144 +3516,6 @@
   CheckGLError();
 }
 
-void GLES2Implementation::MatrixLoadfCHROMIUM(GLenum matrixMode,
-                                              const GLfloat* m) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMatrixLoadfCHROMIUM("
-                     << GLES2Util::GetStringMatrixMode(matrixMode) << ", "
-                     << static_cast<const void*>(m) << ")");
-  uint32_t count = 16;
-  for (uint32_t ii = 0; ii < count; ++ii)
-    GPU_CLIENT_LOG("value[" << ii << "]: " << m[ii]);
-  helper_->MatrixLoadfCHROMIUMImmediate(matrixMode, m);
-  CheckGLError();
-}
-
-void GLES2Implementation::MatrixLoadIdentityCHROMIUM(GLenum matrixMode) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMatrixLoadIdentityCHROMIUM("
-                     << GLES2Util::GetStringMatrixMode(matrixMode) << ")");
-  helper_->MatrixLoadIdentityCHROMIUM(matrixMode);
-  CheckGLError();
-}
-
-GLboolean GLES2Implementation::IsPathCHROMIUM(GLuint path) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  TRACE_EVENT0("gpu", "GLES2Implementation::IsPathCHROMIUM");
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsPathCHROMIUM(" << path << ")");
-  typedef cmds::IsPathCHROMIUM::Result Result;
-  ScopedResultPtr<Result> result = GetResultAs<Result>();
-  if (!result) {
-    return GL_FALSE;
-  }
-  *result = 0;
-  helper_->IsPathCHROMIUM(path, GetResultShmId(), result.offset());
-  WaitForCmd();
-  GLboolean result_value = *result != 0;
-  GPU_CLIENT_LOG("returned " << result_value);
-  CheckGLError();
-  return result_value;
-}
-
-void GLES2Implementation::PathParameterfCHROMIUM(GLuint path,
-                                                 GLenum pname,
-                                                 GLfloat value) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPathParameterfCHROMIUM(" << path
-                     << ", " << GLES2Util::GetStringPathParameter(pname) << ", "
-                     << value << ")");
-  helper_->PathParameterfCHROMIUM(path, pname, value);
-  CheckGLError();
-}
-
-void GLES2Implementation::PathParameteriCHROMIUM(GLuint path,
-                                                 GLenum pname,
-                                                 GLint value) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPathParameteriCHROMIUM(" << path
-                     << ", " << GLES2Util::GetStringPathParameter(pname) << ", "
-                     << value << ")");
-  helper_->PathParameteriCHROMIUM(path, pname, value);
-  CheckGLError();
-}
-
-void GLES2Implementation::PathStencilFuncCHROMIUM(GLenum func,
-                                                  GLint ref,
-                                                  GLuint mask) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPathStencilFuncCHROMIUM("
-                     << GLES2Util::GetStringCmpFunction(func) << ", " << ref
-                     << ", " << mask << ")");
-  helper_->PathStencilFuncCHROMIUM(func, ref, mask);
-  CheckGLError();
-}
-
-void GLES2Implementation::StencilFillPathCHROMIUM(GLuint path,
-                                                  GLenum fillMode,
-                                                  GLuint mask) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilFillPathCHROMIUM(" << path
-                     << ", " << GLES2Util::GetStringPathFillMode(fillMode)
-                     << ", " << mask << ")");
-  helper_->StencilFillPathCHROMIUM(path, fillMode, mask);
-  CheckGLError();
-}
-
-void GLES2Implementation::StencilStrokePathCHROMIUM(GLuint path,
-                                                    GLint reference,
-                                                    GLuint mask) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilStrokePathCHROMIUM("
-                     << path << ", " << reference << ", " << mask << ")");
-  helper_->StencilStrokePathCHROMIUM(path, reference, mask);
-  CheckGLError();
-}
-
-void GLES2Implementation::CoverFillPathCHROMIUM(GLuint path, GLenum coverMode) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCoverFillPathCHROMIUM(" << path
-                     << ", " << GLES2Util::GetStringPathCoverMode(coverMode)
-                     << ")");
-  helper_->CoverFillPathCHROMIUM(path, coverMode);
-  CheckGLError();
-}
-
-void GLES2Implementation::CoverStrokePathCHROMIUM(GLuint path,
-                                                  GLenum coverMode) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCoverStrokePathCHROMIUM(" << path
-                     << ", " << GLES2Util::GetStringPathCoverMode(coverMode)
-                     << ")");
-  helper_->CoverStrokePathCHROMIUM(path, coverMode);
-  CheckGLError();
-}
-
-void GLES2Implementation::StencilThenCoverFillPathCHROMIUM(GLuint path,
-                                                           GLenum fillMode,
-                                                           GLuint mask,
-                                                           GLenum coverMode) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG(
-      "[" << GetLogPrefix() << "] glStencilThenCoverFillPathCHROMIUM(" << path
-          << ", " << GLES2Util::GetStringPathFillMode(fillMode) << ", " << mask
-          << ", " << GLES2Util::GetStringPathCoverMode(coverMode) << ")");
-  helper_->StencilThenCoverFillPathCHROMIUM(path, fillMode, mask, coverMode);
-  CheckGLError();
-}
-
-void GLES2Implementation::StencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                                             GLint reference,
-                                                             GLuint mask,
-                                                             GLenum coverMode) {
-  GPU_CLIENT_SINGLE_THREAD_CHECK();
-  GPU_CLIENT_LOG("[" << GetLogPrefix()
-                     << "] glStencilThenCoverStrokePathCHROMIUM(" << path
-                     << ", " << reference << ", " << mask << ", "
-                     << GLES2Util::GetStringPathCoverMode(coverMode) << ")");
-  helper_->StencilThenCoverStrokePathCHROMIUM(path, reference, mask, coverMode);
-  CheckGLError();
-}
-
 void GLES2Implementation::ContextVisibilityHintCHROMIUM(GLboolean visibility) {
   GPU_CLIENT_SINGLE_THREAD_CHECK();
   GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glContextVisibilityHintCHROMIUM("
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
index 78abb0e..5205f3e 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
@@ -2990,163 +2990,6 @@
   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 }
 
-TEST_F(GLES2ImplementationTest, MatrixLoadfCHROMIUM) {
-  GLfloat data[16] = {0};
-  struct Cmds {
-    cmds::MatrixLoadfCHROMIUMImmediate cmd;
-    GLfloat data[16];
-  };
-
-  for (int jj = 0; jj < 16; ++jj) {
-    data[jj] = static_cast<GLfloat>(jj);
-  }
-  Cmds expected;
-  expected.cmd.Init(GL_PATH_PROJECTION_CHROMIUM, &data[0]);
-  gl_->MatrixLoadfCHROMIUM(GL_PATH_PROJECTION_CHROMIUM, &data[0]);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, MatrixLoadIdentityCHROMIUM) {
-  struct Cmds {
-    cmds::MatrixLoadIdentityCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(GL_PATH_PROJECTION_CHROMIUM);
-
-  gl_->MatrixLoadIdentityCHROMIUM(GL_PATH_PROJECTION_CHROMIUM);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, DeletePathsCHROMIUM) {
-  struct Cmds {
-    cmds::DeletePathsCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(1, 2);
-
-  gl_->DeletePathsCHROMIUM(1, 2);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, IsPathCHROMIUM) {
-  struct Cmds {
-    cmds::IsPathCHROMIUM cmd;
-  };
-
-  Cmds expected;
-  ExpectedMemoryInfo result1 =
-      GetExpectedResultMemory(sizeof(cmds::IsPathCHROMIUM::Result));
-  expected.cmd.Init(1, result1.id, result1.offset);
-
-  EXPECT_CALL(*command_buffer(), OnFlush())
-      .WillOnce(SetMemory(result1.ptr, uint32_t(GL_TRUE)))
-      .RetiresOnSaturation();
-
-  GLboolean result = gl_->IsPathCHROMIUM(1);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-  EXPECT_TRUE(result);
-}
-
-TEST_F(GLES2ImplementationTest, PathParameterfCHROMIUM) {
-  struct Cmds {
-    cmds::PathParameterfCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(1, GL_PATH_STROKE_WIDTH_CHROMIUM, 3);
-
-  gl_->PathParameterfCHROMIUM(1, GL_PATH_STROKE_WIDTH_CHROMIUM, 3);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, PathParameteriCHROMIUM) {
-  struct Cmds {
-    cmds::PathParameteriCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(1, GL_PATH_STROKE_WIDTH_CHROMIUM, 3);
-
-  gl_->PathParameteriCHROMIUM(1, GL_PATH_STROKE_WIDTH_CHROMIUM, 3);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, PathStencilFuncCHROMIUM) {
-  struct Cmds {
-    cmds::PathStencilFuncCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(GL_NEVER, 2, 3);
-
-  gl_->PathStencilFuncCHROMIUM(GL_NEVER, 2, 3);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, StencilFillPathCHROMIUM) {
-  struct Cmds {
-    cmds::StencilFillPathCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(1, GL_INVERT, 3);
-
-  gl_->StencilFillPathCHROMIUM(1, GL_INVERT, 3);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, StencilStrokePathCHROMIUM) {
-  struct Cmds {
-    cmds::StencilStrokePathCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(1, 2, 3);
-
-  gl_->StencilStrokePathCHROMIUM(1, 2, 3);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, CoverFillPathCHROMIUM) {
-  struct Cmds {
-    cmds::CoverFillPathCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(1, GL_CONVEX_HULL_CHROMIUM);
-
-  gl_->CoverFillPathCHROMIUM(1, GL_CONVEX_HULL_CHROMIUM);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, CoverStrokePathCHROMIUM) {
-  struct Cmds {
-    cmds::CoverStrokePathCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(1, GL_CONVEX_HULL_CHROMIUM);
-
-  gl_->CoverStrokePathCHROMIUM(1, GL_CONVEX_HULL_CHROMIUM);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, StencilThenCoverFillPathCHROMIUM) {
-  struct Cmds {
-    cmds::StencilThenCoverFillPathCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(1, GL_INVERT, 3, GL_CONVEX_HULL_CHROMIUM);
-
-  gl_->StencilThenCoverFillPathCHROMIUM(1, GL_INVERT, 3,
-                                        GL_CONVEX_HULL_CHROMIUM);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, StencilThenCoverStrokePathCHROMIUM) {
-  struct Cmds {
-    cmds::StencilThenCoverStrokePathCHROMIUM cmd;
-  };
-  Cmds expected;
-  expected.cmd.Init(1, 2, 3, GL_CONVEX_HULL_CHROMIUM);
-
-  gl_->StencilThenCoverStrokePathCHROMIUM(1, 2, 3, GL_CONVEX_HULL_CHROMIUM);
-  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
 TEST_F(GLES2ImplementationTest, CoverageModulationCHROMIUM) {
   struct Cmds {
     cmds::CoverageModulationCHROMIUM cmd;
diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h
index da277f5d..11954f6a 100644
--- a/gpu/command_buffer/client/gles2_interface_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_autogen.h
@@ -901,99 +901,6 @@
                                      GLint clip_height,
                                      GLuint protected_video_type) = 0;
 virtual void SetActiveURLCHROMIUM(const char* url) = 0;
-virtual void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) = 0;
-virtual void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) = 0;
-virtual GLuint GenPathsCHROMIUM(GLsizei range) = 0;
-virtual void DeletePathsCHROMIUM(GLuint path, GLsizei range) = 0;
-virtual GLboolean IsPathCHROMIUM(GLuint path) = 0;
-virtual void PathCommandsCHROMIUM(GLuint path,
-                                  GLsizei numCommands,
-                                  const GLubyte* commands,
-                                  GLsizei numCoords,
-                                  GLenum coordType,
-                                  const GLvoid* coords) = 0;
-virtual void PathParameterfCHROMIUM(GLuint path,
-                                    GLenum pname,
-                                    GLfloat value) = 0;
-virtual void PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value) = 0;
-virtual void PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask) = 0;
-virtual void StencilFillPathCHROMIUM(GLuint path,
-                                     GLenum fillMode,
-                                     GLuint mask) = 0;
-virtual void StencilStrokePathCHROMIUM(GLuint path,
-                                       GLint reference,
-                                       GLuint mask) = 0;
-virtual void CoverFillPathCHROMIUM(GLuint path, GLenum coverMode) = 0;
-virtual void CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode) = 0;
-virtual void StencilThenCoverFillPathCHROMIUM(GLuint path,
-                                              GLenum fillMode,
-                                              GLuint mask,
-                                              GLenum coverMode) = 0;
-virtual void StencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                                GLint reference,
-                                                GLuint mask,
-                                                GLenum coverMode) = 0;
-virtual void StencilFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues) = 0;
-virtual void StencilStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues) = 0;
-virtual void CoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                            GLenum pathNameType,
-                                            const GLvoid* paths,
-                                            GLuint pathBase,
-                                            GLenum coverMode,
-                                            GLenum transformType,
-                                            const GLfloat* transformValues) = 0;
-virtual void CoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) = 0;
-virtual void StencilThenCoverFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) = 0;
-virtual void StencilThenCoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) = 0;
-virtual void BindFragmentInputLocationCHROMIUM(GLuint program,
-                                               GLint location,
-                                               const char* name) = 0;
-virtual void ProgramPathFragmentInputGenCHROMIUM(GLuint program,
-                                                 GLint location,
-                                                 GLenum genMode,
-                                                 GLint components,
-                                                 const GLfloat* coeffs) = 0;
 virtual void ContextVisibilityHintCHROMIUM(GLboolean visibility) = 0;
 virtual void CoverageModulationCHROMIUM(GLenum components) = 0;
 virtual GLenum GetGraphicsResetStatusKHR() = 0;
diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
index 84b7468..af3f572 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -875,95 +875,6 @@
                              GLint clip_height,
                              GLuint protected_video_type) override;
 void SetActiveURLCHROMIUM(const char* url) override;
-void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;
-void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) override;
-GLuint GenPathsCHROMIUM(GLsizei range) override;
-void DeletePathsCHROMIUM(GLuint path, GLsizei range) override;
-GLboolean IsPathCHROMIUM(GLuint path) override;
-void PathCommandsCHROMIUM(GLuint path,
-                          GLsizei numCommands,
-                          const GLubyte* commands,
-                          GLsizei numCoords,
-                          GLenum coordType,
-                          const GLvoid* coords) override;
-void PathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value) override;
-void PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value) override;
-void PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask) override;
-void StencilFillPathCHROMIUM(GLuint path,
-                             GLenum fillMode,
-                             GLuint mask) override;
-void StencilStrokePathCHROMIUM(GLuint path,
-                               GLint reference,
-                               GLuint mask) override;
-void CoverFillPathCHROMIUM(GLuint path, GLenum coverMode) override;
-void CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode) override;
-void StencilThenCoverFillPathCHROMIUM(GLuint path,
-                                      GLenum fillMode,
-                                      GLuint mask,
-                                      GLenum coverMode) override;
-void StencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                        GLint reference,
-                                        GLuint mask,
-                                        GLenum coverMode) override;
-void StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                      GLenum pathNameType,
-                                      const GLvoid* paths,
-                                      GLuint pathBase,
-                                      GLenum fillMode,
-                                      GLuint mask,
-                                      GLenum transformType,
-                                      const GLfloat* transformValues) override;
-void StencilStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues) override;
-void CoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                    GLenum pathNameType,
-                                    const GLvoid* paths,
-                                    GLuint pathBase,
-                                    GLenum coverMode,
-                                    GLenum transformType,
-                                    const GLfloat* transformValues) override;
-void CoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                      GLenum pathNameType,
-                                      const GLvoid* paths,
-                                      GLuint pathBase,
-                                      GLenum coverMode,
-                                      GLenum transformType,
-                                      const GLfloat* transformValues) override;
-void StencilThenCoverFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) override;
-void StencilThenCoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) override;
-void BindFragmentInputLocationCHROMIUM(GLuint program,
-                                       GLint location,
-                                       const char* name) override;
-void ProgramPathFragmentInputGenCHROMIUM(GLuint program,
-                                         GLint location,
-                                         GLenum genMode,
-                                         GLint components,
-                                         const GLfloat* coeffs) override;
 void ContextVisibilityHintCHROMIUM(GLboolean visibility) override;
 void CoverageModulationCHROMIUM(GLenum components) override;
 GLenum GetGraphicsResetStatusKHR() override;
diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
index 5afce7ff..1ba3ccf0 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
@@ -1156,116 +1156,6 @@
     GLint /* clip_height */,
     GLuint /* protected_video_type */) {}
 void GLES2InterfaceStub::SetActiveURLCHROMIUM(const char* /* url */) {}
-void GLES2InterfaceStub::MatrixLoadfCHROMIUM(GLenum /* matrixMode */,
-                                             const GLfloat* /* m */) {}
-void GLES2InterfaceStub::MatrixLoadIdentityCHROMIUM(GLenum /* matrixMode */) {}
-GLuint GLES2InterfaceStub::GenPathsCHROMIUM(GLsizei /* range */) {
-  return 0;
-}
-void GLES2InterfaceStub::DeletePathsCHROMIUM(GLuint /* path */,
-                                             GLsizei /* range */) {}
-GLboolean GLES2InterfaceStub::IsPathCHROMIUM(GLuint /* path */) {
-  return 0;
-}
-void GLES2InterfaceStub::PathCommandsCHROMIUM(GLuint /* path */,
-                                              GLsizei /* numCommands */,
-                                              const GLubyte* /* commands */,
-                                              GLsizei /* numCoords */,
-                                              GLenum /* coordType */,
-                                              const GLvoid* /* coords */) {}
-void GLES2InterfaceStub::PathParameterfCHROMIUM(GLuint /* path */,
-                                                GLenum /* pname */,
-                                                GLfloat /* value */) {}
-void GLES2InterfaceStub::PathParameteriCHROMIUM(GLuint /* path */,
-                                                GLenum /* pname */,
-                                                GLint /* value */) {}
-void GLES2InterfaceStub::PathStencilFuncCHROMIUM(GLenum /* func */,
-                                                 GLint /* ref */,
-                                                 GLuint /* mask */) {}
-void GLES2InterfaceStub::StencilFillPathCHROMIUM(GLuint /* path */,
-                                                 GLenum /* fillMode */,
-                                                 GLuint /* mask */) {}
-void GLES2InterfaceStub::StencilStrokePathCHROMIUM(GLuint /* path */,
-                                                   GLint /* reference */,
-                                                   GLuint /* mask */) {}
-void GLES2InterfaceStub::CoverFillPathCHROMIUM(GLuint /* path */,
-                                               GLenum /* coverMode */) {}
-void GLES2InterfaceStub::CoverStrokePathCHROMIUM(GLuint /* path */,
-                                                 GLenum /* coverMode */) {}
-void GLES2InterfaceStub::StencilThenCoverFillPathCHROMIUM(
-    GLuint /* path */,
-    GLenum /* fillMode */,
-    GLuint /* mask */,
-    GLenum /* coverMode */) {}
-void GLES2InterfaceStub::StencilThenCoverStrokePathCHROMIUM(
-    GLuint /* path */,
-    GLint /* reference */,
-    GLuint /* mask */,
-    GLenum /* coverMode */) {}
-void GLES2InterfaceStub::StencilFillPathInstancedCHROMIUM(
-    GLsizei /* numPaths */,
-    GLenum /* pathNameType */,
-    const GLvoid* /* paths */,
-    GLuint /* pathBase */,
-    GLenum /* fillMode */,
-    GLuint /* mask */,
-    GLenum /* transformType */,
-    const GLfloat* /* transformValues */) {}
-void GLES2InterfaceStub::StencilStrokePathInstancedCHROMIUM(
-    GLsizei /* numPaths */,
-    GLenum /* pathNameType */,
-    const GLvoid* /* paths */,
-    GLuint /* pathBase */,
-    GLint /* reference */,
-    GLuint /* mask */,
-    GLenum /* transformType */,
-    const GLfloat* /* transformValues */) {}
-void GLES2InterfaceStub::CoverFillPathInstancedCHROMIUM(
-    GLsizei /* numPaths */,
-    GLenum /* pathNameType */,
-    const GLvoid* /* paths */,
-    GLuint /* pathBase */,
-    GLenum /* coverMode */,
-    GLenum /* transformType */,
-    const GLfloat* /* transformValues */) {}
-void GLES2InterfaceStub::CoverStrokePathInstancedCHROMIUM(
-    GLsizei /* numPaths */,
-    GLenum /* pathNameType */,
-    const GLvoid* /* paths */,
-    GLuint /* pathBase */,
-    GLenum /* coverMode */,
-    GLenum /* transformType */,
-    const GLfloat* /* transformValues */) {}
-void GLES2InterfaceStub::StencilThenCoverFillPathInstancedCHROMIUM(
-    GLsizei /* numPaths */,
-    GLenum /* pathNameType */,
-    const GLvoid* /* paths */,
-    GLuint /* pathBase */,
-    GLenum /* fillMode */,
-    GLuint /* mask */,
-    GLenum /* coverMode */,
-    GLenum /* transformType */,
-    const GLfloat* /* transformValues */) {}
-void GLES2InterfaceStub::StencilThenCoverStrokePathInstancedCHROMIUM(
-    GLsizei /* numPaths */,
-    GLenum /* pathNameType */,
-    const GLvoid* /* paths */,
-    GLuint /* pathBase */,
-    GLint /* reference */,
-    GLuint /* mask */,
-    GLenum /* coverMode */,
-    GLenum /* transformType */,
-    const GLfloat* /* transformValues */) {}
-void GLES2InterfaceStub::BindFragmentInputLocationCHROMIUM(
-    GLuint /* program */,
-    GLint /* location */,
-    const char* /* name */) {}
-void GLES2InterfaceStub::ProgramPathFragmentInputGenCHROMIUM(
-    GLuint /* program */,
-    GLint /* location */,
-    GLenum /* genMode */,
-    GLint /* components */,
-    const GLfloat* /* coeffs */) {}
 void GLES2InterfaceStub::ContextVisibilityHintCHROMIUM(
     GLboolean /* visibility */) {}
 void GLES2InterfaceStub::CoverageModulationCHROMIUM(GLenum /* components */) {}
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
index 449de54..5091689 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -875,95 +875,6 @@
                              GLint clip_height,
                              GLuint protected_video_type) override;
 void SetActiveURLCHROMIUM(const char* url) override;
-void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;
-void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) override;
-GLuint GenPathsCHROMIUM(GLsizei range) override;
-void DeletePathsCHROMIUM(GLuint path, GLsizei range) override;
-GLboolean IsPathCHROMIUM(GLuint path) override;
-void PathCommandsCHROMIUM(GLuint path,
-                          GLsizei numCommands,
-                          const GLubyte* commands,
-                          GLsizei numCoords,
-                          GLenum coordType,
-                          const GLvoid* coords) override;
-void PathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value) override;
-void PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value) override;
-void PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask) override;
-void StencilFillPathCHROMIUM(GLuint path,
-                             GLenum fillMode,
-                             GLuint mask) override;
-void StencilStrokePathCHROMIUM(GLuint path,
-                               GLint reference,
-                               GLuint mask) override;
-void CoverFillPathCHROMIUM(GLuint path, GLenum coverMode) override;
-void CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode) override;
-void StencilThenCoverFillPathCHROMIUM(GLuint path,
-                                      GLenum fillMode,
-                                      GLuint mask,
-                                      GLenum coverMode) override;
-void StencilThenCoverStrokePathCHROMIUM(GLuint path,
-                                        GLint reference,
-                                        GLuint mask,
-                                        GLenum coverMode) override;
-void StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                      GLenum pathNameType,
-                                      const GLvoid* paths,
-                                      GLuint pathBase,
-                                      GLenum fillMode,
-                                      GLuint mask,
-                                      GLenum transformType,
-                                      const GLfloat* transformValues) override;
-void StencilStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues) override;
-void CoverFillPathInstancedCHROMIUM(GLsizei numPaths,
-                                    GLenum pathNameType,
-                                    const GLvoid* paths,
-                                    GLuint pathBase,
-                                    GLenum coverMode,
-                                    GLenum transformType,
-                                    const GLfloat* transformValues) override;
-void CoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
-                                      GLenum pathNameType,
-                                      const GLvoid* paths,
-                                      GLuint pathBase,
-                                      GLenum coverMode,
-                                      GLenum transformType,
-                                      const GLfloat* transformValues) override;
-void StencilThenCoverFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) override;
-void StencilThenCoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) override;
-void BindFragmentInputLocationCHROMIUM(GLuint program,
-                                       GLint location,
-                                       const char* name) override;
-void ProgramPathFragmentInputGenCHROMIUM(GLuint program,
-                                         GLint location,
-                                         GLenum genMode,
-                                         GLint components,
-                                         const GLfloat* coeffs) override;
 void ContextVisibilityHintCHROMIUM(GLboolean visibility) override;
 void CoverageModulationCHROMIUM(GLenum components) override;
 GLenum GetGraphicsResetStatusKHR() override;
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
index dfd74ba3..ce0e76e 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
@@ -2421,228 +2421,6 @@
   gl_->SetActiveURLCHROMIUM(url);
 }
 
-void GLES2TraceImplementation::MatrixLoadfCHROMIUM(GLenum matrixMode,
-                                                   const GLfloat* m) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::MatrixLoadfCHROMIUM");
-  gl_->MatrixLoadfCHROMIUM(matrixMode, m);
-}
-
-void GLES2TraceImplementation::MatrixLoadIdentityCHROMIUM(GLenum matrixMode) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu",
-                                "GLES2Trace::MatrixLoadIdentityCHROMIUM");
-  gl_->MatrixLoadIdentityCHROMIUM(matrixMode);
-}
-
-GLuint GLES2TraceImplementation::GenPathsCHROMIUM(GLsizei range) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GenPathsCHROMIUM");
-  return gl_->GenPathsCHROMIUM(range);
-}
-
-void GLES2TraceImplementation::DeletePathsCHROMIUM(GLuint path, GLsizei range) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DeletePathsCHROMIUM");
-  gl_->DeletePathsCHROMIUM(path, range);
-}
-
-GLboolean GLES2TraceImplementation::IsPathCHROMIUM(GLuint path) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::IsPathCHROMIUM");
-  return gl_->IsPathCHROMIUM(path);
-}
-
-void GLES2TraceImplementation::PathCommandsCHROMIUM(GLuint path,
-                                                    GLsizei numCommands,
-                                                    const GLubyte* commands,
-                                                    GLsizei numCoords,
-                                                    GLenum coordType,
-                                                    const GLvoid* coords) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::PathCommandsCHROMIUM");
-  gl_->PathCommandsCHROMIUM(path, numCommands, commands, numCoords, coordType,
-                            coords);
-}
-
-void GLES2TraceImplementation::PathParameterfCHROMIUM(GLuint path,
-                                                      GLenum pname,
-                                                      GLfloat value) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::PathParameterfCHROMIUM");
-  gl_->PathParameterfCHROMIUM(path, pname, value);
-}
-
-void GLES2TraceImplementation::PathParameteriCHROMIUM(GLuint path,
-                                                      GLenum pname,
-                                                      GLint value) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::PathParameteriCHROMIUM");
-  gl_->PathParameteriCHROMIUM(path, pname, value);
-}
-
-void GLES2TraceImplementation::PathStencilFuncCHROMIUM(GLenum func,
-                                                       GLint ref,
-                                                       GLuint mask) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::PathStencilFuncCHROMIUM");
-  gl_->PathStencilFuncCHROMIUM(func, ref, mask);
-}
-
-void GLES2TraceImplementation::StencilFillPathCHROMIUM(GLuint path,
-                                                       GLenum fillMode,
-                                                       GLuint mask) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::StencilFillPathCHROMIUM");
-  gl_->StencilFillPathCHROMIUM(path, fillMode, mask);
-}
-
-void GLES2TraceImplementation::StencilStrokePathCHROMIUM(GLuint path,
-                                                         GLint reference,
-                                                         GLuint mask) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::StencilStrokePathCHROMIUM");
-  gl_->StencilStrokePathCHROMIUM(path, reference, mask);
-}
-
-void GLES2TraceImplementation::CoverFillPathCHROMIUM(GLuint path,
-                                                     GLenum coverMode) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CoverFillPathCHROMIUM");
-  gl_->CoverFillPathCHROMIUM(path, coverMode);
-}
-
-void GLES2TraceImplementation::CoverStrokePathCHROMIUM(GLuint path,
-                                                       GLenum coverMode) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CoverStrokePathCHROMIUM");
-  gl_->CoverStrokePathCHROMIUM(path, coverMode);
-}
-
-void GLES2TraceImplementation::StencilThenCoverFillPathCHROMIUM(
-    GLuint path,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu",
-                                "GLES2Trace::StencilThenCoverFillPathCHROMIUM");
-  gl_->StencilThenCoverFillPathCHROMIUM(path, fillMode, mask, coverMode);
-}
-
-void GLES2TraceImplementation::StencilThenCoverStrokePathCHROMIUM(
-    GLuint path,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode) {
-  TRACE_EVENT_BINARY_EFFICIENT0(
-      "gpu", "GLES2Trace::StencilThenCoverStrokePathCHROMIUM");
-  gl_->StencilThenCoverStrokePathCHROMIUM(path, reference, mask, coverMode);
-}
-
-void GLES2TraceImplementation::StencilFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu",
-                                "GLES2Trace::StencilFillPathInstancedCHROMIUM");
-  gl_->StencilFillPathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase,
-                                        fillMode, mask, transformType,
-                                        transformValues);
-}
-
-void GLES2TraceImplementation::StencilStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues) {
-  TRACE_EVENT_BINARY_EFFICIENT0(
-      "gpu", "GLES2Trace::StencilStrokePathInstancedCHROMIUM");
-  gl_->StencilStrokePathInstancedCHROMIUM(numPaths, pathNameType, paths,
-                                          pathBase, reference, mask,
-                                          transformType, transformValues);
-}
-
-void GLES2TraceImplementation::CoverFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu",
-                                "GLES2Trace::CoverFillPathInstancedCHROMIUM");
-  gl_->CoverFillPathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase,
-                                      coverMode, transformType,
-                                      transformValues);
-}
-
-void GLES2TraceImplementation::CoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) {
-  TRACE_EVENT_BINARY_EFFICIENT0("gpu",
-                                "GLES2Trace::CoverStrokePathInstancedCHROMIUM");
-  gl_->CoverStrokePathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase,
-                                        coverMode, transformType,
-                                        transformValues);
-}
-
-void GLES2TraceImplementation::StencilThenCoverFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) {
-  TRACE_EVENT_BINARY_EFFICIENT0(
-      "gpu", "GLES2Trace::StencilThenCoverFillPathInstancedCHROMIUM");
-  gl_->StencilThenCoverFillPathInstancedCHROMIUM(
-      numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode,
-      transformType, transformValues);
-}
-
-void GLES2TraceImplementation::StencilThenCoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues) {
-  TRACE_EVENT_BINARY_EFFICIENT0(
-      "gpu", "GLES2Trace::StencilThenCoverStrokePathInstancedCHROMIUM");
-  gl_->StencilThenCoverStrokePathInstancedCHROMIUM(
-      numPaths, pathNameType, paths, pathBase, reference, mask, coverMode,
-      transformType, transformValues);
-}
-
-void GLES2TraceImplementation::BindFragmentInputLocationCHROMIUM(
-    GLuint program,
-    GLint location,
-    const char* name) {
-  TRACE_EVENT_BINARY_EFFICIENT0(
-      "gpu", "GLES2Trace::BindFragmentInputLocationCHROMIUM");
-  gl_->BindFragmentInputLocationCHROMIUM(program, location, name);
-}
-
-void GLES2TraceImplementation::ProgramPathFragmentInputGenCHROMIUM(
-    GLuint program,
-    GLint location,
-    GLenum genMode,
-    GLint components,
-    const GLfloat* coeffs) {
-  TRACE_EVENT_BINARY_EFFICIENT0(
-      "gpu", "GLES2Trace::ProgramPathFragmentInputGenCHROMIUM");
-  gl_->ProgramPathFragmentInputGenCHROMIUM(program, location, genMode,
-                                           components, coeffs);
-}
-
 void GLES2TraceImplementation::ContextVisibilityHintCHROMIUM(
     GLboolean visibility) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu",
diff --git a/gpu/command_buffer/common/gles2_cmd_format.h b/gpu/command_buffer/common/gles2_cmd_format.h
index e5a18782..6bcbe51 100644
--- a/gpu/command_buffer/common/gles2_cmd_format.h
+++ b/gpu/command_buffer/common/gles2_cmd_format.h
@@ -55,7 +55,7 @@
   kNumIdNamespaces
 };
 
-enum RangeIdNamespaces { kPaths, kNumRangeIdNamespaces };
+enum RangeIdNamespaces { kNumRangeIdNamespaces = 1 };
 
 // These numbers must not change
 static_assert(static_cast<int>(SharedIdNamespaces::kBuffers) == 0,
@@ -80,7 +80,8 @@
               "kTransformFeedbacks should equal 3");
 static_assert(static_cast<int>(IdNamespaces::kGpuFences) == 4,
               "kGpuFences should equal 4");
-static_assert(kPaths == 0, "kPaths should equal 0");
+static_assert(kNumRangeIdNamespaces == 1,
+              "kNumRangeIdNamespaces should equal 1");
 
 }  // namespace id_namespaces
 
diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
index 955916c..05a4897 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
@@ -15537,1419 +15537,6 @@
 static_assert(offsetof(SetActiveURLCHROMIUM, url_bucket_id) == 4,
               "offset of SetActiveURLCHROMIUM url_bucket_id should be 4");
 
-struct MatrixLoadfCHROMIUMImmediate {
-  typedef MatrixLoadfCHROMIUMImmediate ValueType;
-  static const CommandId kCmdId = kMatrixLoadfCHROMIUMImmediate;
-  static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeDataSize() {
-    return static_cast<uint32_t>(sizeof(GLfloat) * 16);
-  }
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType) + ComputeDataSize());
-  }
-
-  void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
-
-  void Init(GLenum _matrixMode, const GLfloat* _m) {
-    SetHeader();
-    matrixMode = _matrixMode;
-    memcpy(ImmediateDataAddress(this), _m, ComputeDataSize());
-  }
-
-  void* Set(void* cmd, GLenum _matrixMode, const GLfloat* _m) {
-    static_cast<ValueType*>(cmd)->Init(_matrixMode, _m);
-    const uint32_t size = ComputeSize();
-    return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t matrixMode;
-};
-
-static_assert(sizeof(MatrixLoadfCHROMIUMImmediate) == 8,
-              "size of MatrixLoadfCHROMIUMImmediate should be 8");
-static_assert(offsetof(MatrixLoadfCHROMIUMImmediate, header) == 0,
-              "offset of MatrixLoadfCHROMIUMImmediate header should be 0");
-static_assert(offsetof(MatrixLoadfCHROMIUMImmediate, matrixMode) == 4,
-              "offset of MatrixLoadfCHROMIUMImmediate matrixMode should be 4");
-
-struct MatrixLoadIdentityCHROMIUM {
-  typedef MatrixLoadIdentityCHROMIUM ValueType;
-  static const CommandId kCmdId = kMatrixLoadIdentityCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLenum _matrixMode) {
-    SetHeader();
-    matrixMode = _matrixMode;
-  }
-
-  void* Set(void* cmd, GLenum _matrixMode) {
-    static_cast<ValueType*>(cmd)->Init(_matrixMode);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t matrixMode;
-};
-
-static_assert(sizeof(MatrixLoadIdentityCHROMIUM) == 8,
-              "size of MatrixLoadIdentityCHROMIUM should be 8");
-static_assert(offsetof(MatrixLoadIdentityCHROMIUM, header) == 0,
-              "offset of MatrixLoadIdentityCHROMIUM header should be 0");
-static_assert(offsetof(MatrixLoadIdentityCHROMIUM, matrixMode) == 4,
-              "offset of MatrixLoadIdentityCHROMIUM matrixMode should be 4");
-
-struct GenPathsCHROMIUM {
-  typedef GenPathsCHROMIUM ValueType;
-  static const CommandId kCmdId = kGenPathsCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _first_client_id, GLsizei _range) {
-    SetHeader();
-    first_client_id = _first_client_id;
-    range = _range;
-  }
-
-  void* Set(void* cmd, GLuint _first_client_id, GLsizei _range) {
-    static_cast<ValueType*>(cmd)->Init(_first_client_id, _range);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t first_client_id;
-  int32_t range;
-};
-
-static_assert(sizeof(GenPathsCHROMIUM) == 12,
-              "size of GenPathsCHROMIUM should be 12");
-static_assert(offsetof(GenPathsCHROMIUM, header) == 0,
-              "offset of GenPathsCHROMIUM header should be 0");
-static_assert(offsetof(GenPathsCHROMIUM, first_client_id) == 4,
-              "offset of GenPathsCHROMIUM first_client_id should be 4");
-static_assert(offsetof(GenPathsCHROMIUM, range) == 8,
-              "offset of GenPathsCHROMIUM range should be 8");
-
-struct DeletePathsCHROMIUM {
-  typedef DeletePathsCHROMIUM ValueType;
-  static const CommandId kCmdId = kDeletePathsCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _first_client_id, GLsizei _range) {
-    SetHeader();
-    first_client_id = _first_client_id;
-    range = _range;
-  }
-
-  void* Set(void* cmd, GLuint _first_client_id, GLsizei _range) {
-    static_cast<ValueType*>(cmd)->Init(_first_client_id, _range);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t first_client_id;
-  int32_t range;
-};
-
-static_assert(sizeof(DeletePathsCHROMIUM) == 12,
-              "size of DeletePathsCHROMIUM should be 12");
-static_assert(offsetof(DeletePathsCHROMIUM, header) == 0,
-              "offset of DeletePathsCHROMIUM header should be 0");
-static_assert(offsetof(DeletePathsCHROMIUM, first_client_id) == 4,
-              "offset of DeletePathsCHROMIUM first_client_id should be 4");
-static_assert(offsetof(DeletePathsCHROMIUM, range) == 8,
-              "offset of DeletePathsCHROMIUM range should be 8");
-
-struct IsPathCHROMIUM {
-  typedef IsPathCHROMIUM ValueType;
-  static const CommandId kCmdId = kIsPathCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  typedef uint32_t Result;
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _path,
-            uint32_t _result_shm_id,
-            uint32_t _result_shm_offset) {
-    SetHeader();
-    path = _path;
-    result_shm_id = _result_shm_id;
-    result_shm_offset = _result_shm_offset;
-  }
-
-  void* Set(void* cmd,
-            GLuint _path,
-            uint32_t _result_shm_id,
-            uint32_t _result_shm_offset) {
-    static_cast<ValueType*>(cmd)->Init(_path, _result_shm_id,
-                                       _result_shm_offset);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t path;
-  uint32_t result_shm_id;
-  uint32_t result_shm_offset;
-};
-
-static_assert(sizeof(IsPathCHROMIUM) == 16,
-              "size of IsPathCHROMIUM should be 16");
-static_assert(offsetof(IsPathCHROMIUM, header) == 0,
-              "offset of IsPathCHROMIUM header should be 0");
-static_assert(offsetof(IsPathCHROMIUM, path) == 4,
-              "offset of IsPathCHROMIUM path should be 4");
-static_assert(offsetof(IsPathCHROMIUM, result_shm_id) == 8,
-              "offset of IsPathCHROMIUM result_shm_id should be 8");
-static_assert(offsetof(IsPathCHROMIUM, result_shm_offset) == 12,
-              "offset of IsPathCHROMIUM result_shm_offset should be 12");
-
-struct PathCommandsCHROMIUM {
-  typedef PathCommandsCHROMIUM ValueType;
-  static const CommandId kCmdId = kPathCommandsCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _path,
-            GLsizei _numCommands,
-            uint32_t _commands_shm_id,
-            uint32_t _commands_shm_offset,
-            GLsizei _numCoords,
-            GLenum _coordType,
-            uint32_t _coords_shm_id,
-            uint32_t _coords_shm_offset) {
-    SetHeader();
-    path = _path;
-    numCommands = _numCommands;
-    commands_shm_id = _commands_shm_id;
-    commands_shm_offset = _commands_shm_offset;
-    numCoords = _numCoords;
-    coordType = _coordType;
-    coords_shm_id = _coords_shm_id;
-    coords_shm_offset = _coords_shm_offset;
-  }
-
-  void* Set(void* cmd,
-            GLuint _path,
-            GLsizei _numCommands,
-            uint32_t _commands_shm_id,
-            uint32_t _commands_shm_offset,
-            GLsizei _numCoords,
-            GLenum _coordType,
-            uint32_t _coords_shm_id,
-            uint32_t _coords_shm_offset) {
-    static_cast<ValueType*>(cmd)->Init(
-        _path, _numCommands, _commands_shm_id, _commands_shm_offset, _numCoords,
-        _coordType, _coords_shm_id, _coords_shm_offset);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t path;
-  int32_t numCommands;
-  uint32_t commands_shm_id;
-  uint32_t commands_shm_offset;
-  int32_t numCoords;
-  uint32_t coordType;
-  uint32_t coords_shm_id;
-  uint32_t coords_shm_offset;
-};
-
-static_assert(sizeof(PathCommandsCHROMIUM) == 36,
-              "size of PathCommandsCHROMIUM should be 36");
-static_assert(offsetof(PathCommandsCHROMIUM, header) == 0,
-              "offset of PathCommandsCHROMIUM header should be 0");
-static_assert(offsetof(PathCommandsCHROMIUM, path) == 4,
-              "offset of PathCommandsCHROMIUM path should be 4");
-static_assert(offsetof(PathCommandsCHROMIUM, numCommands) == 8,
-              "offset of PathCommandsCHROMIUM numCommands should be 8");
-static_assert(offsetof(PathCommandsCHROMIUM, commands_shm_id) == 12,
-              "offset of PathCommandsCHROMIUM commands_shm_id should be 12");
-static_assert(
-    offsetof(PathCommandsCHROMIUM, commands_shm_offset) == 16,
-    "offset of PathCommandsCHROMIUM commands_shm_offset should be 16");
-static_assert(offsetof(PathCommandsCHROMIUM, numCoords) == 20,
-              "offset of PathCommandsCHROMIUM numCoords should be 20");
-static_assert(offsetof(PathCommandsCHROMIUM, coordType) == 24,
-              "offset of PathCommandsCHROMIUM coordType should be 24");
-static_assert(offsetof(PathCommandsCHROMIUM, coords_shm_id) == 28,
-              "offset of PathCommandsCHROMIUM coords_shm_id should be 28");
-static_assert(offsetof(PathCommandsCHROMIUM, coords_shm_offset) == 32,
-              "offset of PathCommandsCHROMIUM coords_shm_offset should be 32");
-
-struct PathParameterfCHROMIUM {
-  typedef PathParameterfCHROMIUM ValueType;
-  static const CommandId kCmdId = kPathParameterfCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _path, GLenum _pname, GLfloat _value) {
-    SetHeader();
-    path = _path;
-    pname = _pname;
-    value = _value;
-  }
-
-  void* Set(void* cmd, GLuint _path, GLenum _pname, GLfloat _value) {
-    static_cast<ValueType*>(cmd)->Init(_path, _pname, _value);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t path;
-  uint32_t pname;
-  float value;
-};
-
-static_assert(sizeof(PathParameterfCHROMIUM) == 16,
-              "size of PathParameterfCHROMIUM should be 16");
-static_assert(offsetof(PathParameterfCHROMIUM, header) == 0,
-              "offset of PathParameterfCHROMIUM header should be 0");
-static_assert(offsetof(PathParameterfCHROMIUM, path) == 4,
-              "offset of PathParameterfCHROMIUM path should be 4");
-static_assert(offsetof(PathParameterfCHROMIUM, pname) == 8,
-              "offset of PathParameterfCHROMIUM pname should be 8");
-static_assert(offsetof(PathParameterfCHROMIUM, value) == 12,
-              "offset of PathParameterfCHROMIUM value should be 12");
-
-struct PathParameteriCHROMIUM {
-  typedef PathParameteriCHROMIUM ValueType;
-  static const CommandId kCmdId = kPathParameteriCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _path, GLenum _pname, GLint _value) {
-    SetHeader();
-    path = _path;
-    pname = _pname;
-    value = _value;
-  }
-
-  void* Set(void* cmd, GLuint _path, GLenum _pname, GLint _value) {
-    static_cast<ValueType*>(cmd)->Init(_path, _pname, _value);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t path;
-  uint32_t pname;
-  int32_t value;
-};
-
-static_assert(sizeof(PathParameteriCHROMIUM) == 16,
-              "size of PathParameteriCHROMIUM should be 16");
-static_assert(offsetof(PathParameteriCHROMIUM, header) == 0,
-              "offset of PathParameteriCHROMIUM header should be 0");
-static_assert(offsetof(PathParameteriCHROMIUM, path) == 4,
-              "offset of PathParameteriCHROMIUM path should be 4");
-static_assert(offsetof(PathParameteriCHROMIUM, pname) == 8,
-              "offset of PathParameteriCHROMIUM pname should be 8");
-static_assert(offsetof(PathParameteriCHROMIUM, value) == 12,
-              "offset of PathParameteriCHROMIUM value should be 12");
-
-struct PathStencilFuncCHROMIUM {
-  typedef PathStencilFuncCHROMIUM ValueType;
-  static const CommandId kCmdId = kPathStencilFuncCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLenum _func, GLint _ref, GLuint _mask) {
-    SetHeader();
-    func = _func;
-    ref = _ref;
-    mask = _mask;
-  }
-
-  void* Set(void* cmd, GLenum _func, GLint _ref, GLuint _mask) {
-    static_cast<ValueType*>(cmd)->Init(_func, _ref, _mask);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t func;
-  int32_t ref;
-  uint32_t mask;
-};
-
-static_assert(sizeof(PathStencilFuncCHROMIUM) == 16,
-              "size of PathStencilFuncCHROMIUM should be 16");
-static_assert(offsetof(PathStencilFuncCHROMIUM, header) == 0,
-              "offset of PathStencilFuncCHROMIUM header should be 0");
-static_assert(offsetof(PathStencilFuncCHROMIUM, func) == 4,
-              "offset of PathStencilFuncCHROMIUM func should be 4");
-static_assert(offsetof(PathStencilFuncCHROMIUM, ref) == 8,
-              "offset of PathStencilFuncCHROMIUM ref should be 8");
-static_assert(offsetof(PathStencilFuncCHROMIUM, mask) == 12,
-              "offset of PathStencilFuncCHROMIUM mask should be 12");
-
-struct StencilFillPathCHROMIUM {
-  typedef StencilFillPathCHROMIUM ValueType;
-  static const CommandId kCmdId = kStencilFillPathCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _path, GLenum _fillMode, GLuint _mask) {
-    SetHeader();
-    path = _path;
-    fillMode = _fillMode;
-    mask = _mask;
-  }
-
-  void* Set(void* cmd, GLuint _path, GLenum _fillMode, GLuint _mask) {
-    static_cast<ValueType*>(cmd)->Init(_path, _fillMode, _mask);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t path;
-  uint32_t fillMode;
-  uint32_t mask;
-};
-
-static_assert(sizeof(StencilFillPathCHROMIUM) == 16,
-              "size of StencilFillPathCHROMIUM should be 16");
-static_assert(offsetof(StencilFillPathCHROMIUM, header) == 0,
-              "offset of StencilFillPathCHROMIUM header should be 0");
-static_assert(offsetof(StencilFillPathCHROMIUM, path) == 4,
-              "offset of StencilFillPathCHROMIUM path should be 4");
-static_assert(offsetof(StencilFillPathCHROMIUM, fillMode) == 8,
-              "offset of StencilFillPathCHROMIUM fillMode should be 8");
-static_assert(offsetof(StencilFillPathCHROMIUM, mask) == 12,
-              "offset of StencilFillPathCHROMIUM mask should be 12");
-
-struct StencilStrokePathCHROMIUM {
-  typedef StencilStrokePathCHROMIUM ValueType;
-  static const CommandId kCmdId = kStencilStrokePathCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _path, GLint _reference, GLuint _mask) {
-    SetHeader();
-    path = _path;
-    reference = _reference;
-    mask = _mask;
-  }
-
-  void* Set(void* cmd, GLuint _path, GLint _reference, GLuint _mask) {
-    static_cast<ValueType*>(cmd)->Init(_path, _reference, _mask);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t path;
-  int32_t reference;
-  uint32_t mask;
-};
-
-static_assert(sizeof(StencilStrokePathCHROMIUM) == 16,
-              "size of StencilStrokePathCHROMIUM should be 16");
-static_assert(offsetof(StencilStrokePathCHROMIUM, header) == 0,
-              "offset of StencilStrokePathCHROMIUM header should be 0");
-static_assert(offsetof(StencilStrokePathCHROMIUM, path) == 4,
-              "offset of StencilStrokePathCHROMIUM path should be 4");
-static_assert(offsetof(StencilStrokePathCHROMIUM, reference) == 8,
-              "offset of StencilStrokePathCHROMIUM reference should be 8");
-static_assert(offsetof(StencilStrokePathCHROMIUM, mask) == 12,
-              "offset of StencilStrokePathCHROMIUM mask should be 12");
-
-struct CoverFillPathCHROMIUM {
-  typedef CoverFillPathCHROMIUM ValueType;
-  static const CommandId kCmdId = kCoverFillPathCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _path, GLenum _coverMode) {
-    SetHeader();
-    path = _path;
-    coverMode = _coverMode;
-  }
-
-  void* Set(void* cmd, GLuint _path, GLenum _coverMode) {
-    static_cast<ValueType*>(cmd)->Init(_path, _coverMode);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t path;
-  uint32_t coverMode;
-};
-
-static_assert(sizeof(CoverFillPathCHROMIUM) == 12,
-              "size of CoverFillPathCHROMIUM should be 12");
-static_assert(offsetof(CoverFillPathCHROMIUM, header) == 0,
-              "offset of CoverFillPathCHROMIUM header should be 0");
-static_assert(offsetof(CoverFillPathCHROMIUM, path) == 4,
-              "offset of CoverFillPathCHROMIUM path should be 4");
-static_assert(offsetof(CoverFillPathCHROMIUM, coverMode) == 8,
-              "offset of CoverFillPathCHROMIUM coverMode should be 8");
-
-struct CoverStrokePathCHROMIUM {
-  typedef CoverStrokePathCHROMIUM ValueType;
-  static const CommandId kCmdId = kCoverStrokePathCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _path, GLenum _coverMode) {
-    SetHeader();
-    path = _path;
-    coverMode = _coverMode;
-  }
-
-  void* Set(void* cmd, GLuint _path, GLenum _coverMode) {
-    static_cast<ValueType*>(cmd)->Init(_path, _coverMode);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t path;
-  uint32_t coverMode;
-};
-
-static_assert(sizeof(CoverStrokePathCHROMIUM) == 12,
-              "size of CoverStrokePathCHROMIUM should be 12");
-static_assert(offsetof(CoverStrokePathCHROMIUM, header) == 0,
-              "offset of CoverStrokePathCHROMIUM header should be 0");
-static_assert(offsetof(CoverStrokePathCHROMIUM, path) == 4,
-              "offset of CoverStrokePathCHROMIUM path should be 4");
-static_assert(offsetof(CoverStrokePathCHROMIUM, coverMode) == 8,
-              "offset of CoverStrokePathCHROMIUM coverMode should be 8");
-
-struct StencilThenCoverFillPathCHROMIUM {
-  typedef StencilThenCoverFillPathCHROMIUM ValueType;
-  static const CommandId kCmdId = kStencilThenCoverFillPathCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _path, GLenum _fillMode, GLuint _mask, GLenum _coverMode) {
-    SetHeader();
-    path = _path;
-    fillMode = _fillMode;
-    mask = _mask;
-    coverMode = _coverMode;
-  }
-
-  void* Set(void* cmd,
-            GLuint _path,
-            GLenum _fillMode,
-            GLuint _mask,
-            GLenum _coverMode) {
-    static_cast<ValueType*>(cmd)->Init(_path, _fillMode, _mask, _coverMode);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t path;
-  uint32_t fillMode;
-  uint32_t mask;
-  uint32_t coverMode;
-};
-
-static_assert(sizeof(StencilThenCoverFillPathCHROMIUM) == 20,
-              "size of StencilThenCoverFillPathCHROMIUM should be 20");
-static_assert(offsetof(StencilThenCoverFillPathCHROMIUM, header) == 0,
-              "offset of StencilThenCoverFillPathCHROMIUM header should be 0");
-static_assert(offsetof(StencilThenCoverFillPathCHROMIUM, path) == 4,
-              "offset of StencilThenCoverFillPathCHROMIUM path should be 4");
-static_assert(
-    offsetof(StencilThenCoverFillPathCHROMIUM, fillMode) == 8,
-    "offset of StencilThenCoverFillPathCHROMIUM fillMode should be 8");
-static_assert(offsetof(StencilThenCoverFillPathCHROMIUM, mask) == 12,
-              "offset of StencilThenCoverFillPathCHROMIUM mask should be 12");
-static_assert(
-    offsetof(StencilThenCoverFillPathCHROMIUM, coverMode) == 16,
-    "offset of StencilThenCoverFillPathCHROMIUM coverMode should be 16");
-
-struct StencilThenCoverStrokePathCHROMIUM {
-  typedef StencilThenCoverStrokePathCHROMIUM ValueType;
-  static const CommandId kCmdId = kStencilThenCoverStrokePathCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _path, GLint _reference, GLuint _mask, GLenum _coverMode) {
-    SetHeader();
-    path = _path;
-    reference = _reference;
-    mask = _mask;
-    coverMode = _coverMode;
-  }
-
-  void* Set(void* cmd,
-            GLuint _path,
-            GLint _reference,
-            GLuint _mask,
-            GLenum _coverMode) {
-    static_cast<ValueType*>(cmd)->Init(_path, _reference, _mask, _coverMode);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t path;
-  int32_t reference;
-  uint32_t mask;
-  uint32_t coverMode;
-};
-
-static_assert(sizeof(StencilThenCoverStrokePathCHROMIUM) == 20,
-              "size of StencilThenCoverStrokePathCHROMIUM should be 20");
-static_assert(
-    offsetof(StencilThenCoverStrokePathCHROMIUM, header) == 0,
-    "offset of StencilThenCoverStrokePathCHROMIUM header should be 0");
-static_assert(offsetof(StencilThenCoverStrokePathCHROMIUM, path) == 4,
-              "offset of StencilThenCoverStrokePathCHROMIUM path should be 4");
-static_assert(
-    offsetof(StencilThenCoverStrokePathCHROMIUM, reference) == 8,
-    "offset of StencilThenCoverStrokePathCHROMIUM reference should be 8");
-static_assert(offsetof(StencilThenCoverStrokePathCHROMIUM, mask) == 12,
-              "offset of StencilThenCoverStrokePathCHROMIUM mask should be 12");
-static_assert(
-    offsetof(StencilThenCoverStrokePathCHROMIUM, coverMode) == 16,
-    "offset of StencilThenCoverStrokePathCHROMIUM coverMode should be 16");
-
-struct StencilFillPathInstancedCHROMIUM {
-  typedef StencilFillPathInstancedCHROMIUM ValueType;
-  static const CommandId kCmdId = kStencilFillPathInstancedCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLenum _fillMode,
-            GLuint _mask,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    SetHeader();
-    numPaths = _numPaths;
-    pathNameType = _pathNameType;
-    paths_shm_id = _paths_shm_id;
-    paths_shm_offset = _paths_shm_offset;
-    pathBase = _pathBase;
-    fillMode = _fillMode;
-    mask = _mask;
-    transformType = _transformType;
-    transformValues_shm_id = _transformValues_shm_id;
-    transformValues_shm_offset = _transformValues_shm_offset;
-  }
-
-  void* Set(void* cmd,
-            GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLenum _fillMode,
-            GLuint _mask,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    static_cast<ValueType*>(cmd)->Init(
-        _numPaths, _pathNameType, _paths_shm_id, _paths_shm_offset, _pathBase,
-        _fillMode, _mask, _transformType, _transformValues_shm_id,
-        _transformValues_shm_offset);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  int32_t numPaths;
-  uint32_t pathNameType;
-  uint32_t paths_shm_id;
-  uint32_t paths_shm_offset;
-  uint32_t pathBase;
-  uint32_t fillMode;
-  uint32_t mask;
-  uint32_t transformType;
-  uint32_t transformValues_shm_id;
-  uint32_t transformValues_shm_offset;
-};
-
-static_assert(sizeof(StencilFillPathInstancedCHROMIUM) == 44,
-              "size of StencilFillPathInstancedCHROMIUM should be 44");
-static_assert(offsetof(StencilFillPathInstancedCHROMIUM, header) == 0,
-              "offset of StencilFillPathInstancedCHROMIUM header should be 0");
-static_assert(
-    offsetof(StencilFillPathInstancedCHROMIUM, numPaths) == 4,
-    "offset of StencilFillPathInstancedCHROMIUM numPaths should be 4");
-static_assert(
-    offsetof(StencilFillPathInstancedCHROMIUM, pathNameType) == 8,
-    "offset of StencilFillPathInstancedCHROMIUM pathNameType should be 8");
-static_assert(
-    offsetof(StencilFillPathInstancedCHROMIUM, paths_shm_id) == 12,
-    "offset of StencilFillPathInstancedCHROMIUM paths_shm_id should be 12");
-static_assert(
-    offsetof(StencilFillPathInstancedCHROMIUM, paths_shm_offset) == 16,
-    "offset of StencilFillPathInstancedCHROMIUM paths_shm_offset should be 16");
-static_assert(
-    offsetof(StencilFillPathInstancedCHROMIUM, pathBase) == 20,
-    "offset of StencilFillPathInstancedCHROMIUM pathBase should be 20");
-static_assert(
-    offsetof(StencilFillPathInstancedCHROMIUM, fillMode) == 24,
-    "offset of StencilFillPathInstancedCHROMIUM fillMode should be 24");
-static_assert(offsetof(StencilFillPathInstancedCHROMIUM, mask) == 28,
-              "offset of StencilFillPathInstancedCHROMIUM mask should be 28");
-static_assert(
-    offsetof(StencilFillPathInstancedCHROMIUM, transformType) == 32,
-    "offset of StencilFillPathInstancedCHROMIUM transformType should be 32");
-static_assert(offsetof(StencilFillPathInstancedCHROMIUM,
-                       transformValues_shm_id) == 36,
-              "offset of StencilFillPathInstancedCHROMIUM "
-              "transformValues_shm_id should be 36");
-static_assert(offsetof(StencilFillPathInstancedCHROMIUM,
-                       transformValues_shm_offset) == 40,
-              "offset of StencilFillPathInstancedCHROMIUM "
-              "transformValues_shm_offset should be 40");
-
-struct StencilStrokePathInstancedCHROMIUM {
-  typedef StencilStrokePathInstancedCHROMIUM ValueType;
-  static const CommandId kCmdId = kStencilStrokePathInstancedCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLint _reference,
-            GLuint _mask,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    SetHeader();
-    numPaths = _numPaths;
-    pathNameType = _pathNameType;
-    paths_shm_id = _paths_shm_id;
-    paths_shm_offset = _paths_shm_offset;
-    pathBase = _pathBase;
-    reference = _reference;
-    mask = _mask;
-    transformType = _transformType;
-    transformValues_shm_id = _transformValues_shm_id;
-    transformValues_shm_offset = _transformValues_shm_offset;
-  }
-
-  void* Set(void* cmd,
-            GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLint _reference,
-            GLuint _mask,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    static_cast<ValueType*>(cmd)->Init(
-        _numPaths, _pathNameType, _paths_shm_id, _paths_shm_offset, _pathBase,
-        _reference, _mask, _transformType, _transformValues_shm_id,
-        _transformValues_shm_offset);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  int32_t numPaths;
-  uint32_t pathNameType;
-  uint32_t paths_shm_id;
-  uint32_t paths_shm_offset;
-  uint32_t pathBase;
-  int32_t reference;
-  uint32_t mask;
-  uint32_t transformType;
-  uint32_t transformValues_shm_id;
-  uint32_t transformValues_shm_offset;
-};
-
-static_assert(sizeof(StencilStrokePathInstancedCHROMIUM) == 44,
-              "size of StencilStrokePathInstancedCHROMIUM should be 44");
-static_assert(
-    offsetof(StencilStrokePathInstancedCHROMIUM, header) == 0,
-    "offset of StencilStrokePathInstancedCHROMIUM header should be 0");
-static_assert(
-    offsetof(StencilStrokePathInstancedCHROMIUM, numPaths) == 4,
-    "offset of StencilStrokePathInstancedCHROMIUM numPaths should be 4");
-static_assert(
-    offsetof(StencilStrokePathInstancedCHROMIUM, pathNameType) == 8,
-    "offset of StencilStrokePathInstancedCHROMIUM pathNameType should be 8");
-static_assert(
-    offsetof(StencilStrokePathInstancedCHROMIUM, paths_shm_id) == 12,
-    "offset of StencilStrokePathInstancedCHROMIUM paths_shm_id should be 12");
-static_assert(offsetof(StencilStrokePathInstancedCHROMIUM, paths_shm_offset) ==
-                  16,
-              "offset of StencilStrokePathInstancedCHROMIUM paths_shm_offset "
-              "should be 16");
-static_assert(
-    offsetof(StencilStrokePathInstancedCHROMIUM, pathBase) == 20,
-    "offset of StencilStrokePathInstancedCHROMIUM pathBase should be 20");
-static_assert(
-    offsetof(StencilStrokePathInstancedCHROMIUM, reference) == 24,
-    "offset of StencilStrokePathInstancedCHROMIUM reference should be 24");
-static_assert(offsetof(StencilStrokePathInstancedCHROMIUM, mask) == 28,
-              "offset of StencilStrokePathInstancedCHROMIUM mask should be 28");
-static_assert(
-    offsetof(StencilStrokePathInstancedCHROMIUM, transformType) == 32,
-    "offset of StencilStrokePathInstancedCHROMIUM transformType should be 32");
-static_assert(offsetof(StencilStrokePathInstancedCHROMIUM,
-                       transformValues_shm_id) == 36,
-              "offset of StencilStrokePathInstancedCHROMIUM "
-              "transformValues_shm_id should be 36");
-static_assert(offsetof(StencilStrokePathInstancedCHROMIUM,
-                       transformValues_shm_offset) == 40,
-              "offset of StencilStrokePathInstancedCHROMIUM "
-              "transformValues_shm_offset should be 40");
-
-struct CoverFillPathInstancedCHROMIUM {
-  typedef CoverFillPathInstancedCHROMIUM ValueType;
-  static const CommandId kCmdId = kCoverFillPathInstancedCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLenum _coverMode,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    SetHeader();
-    numPaths = _numPaths;
-    pathNameType = _pathNameType;
-    paths_shm_id = _paths_shm_id;
-    paths_shm_offset = _paths_shm_offset;
-    pathBase = _pathBase;
-    coverMode = _coverMode;
-    transformType = _transformType;
-    transformValues_shm_id = _transformValues_shm_id;
-    transformValues_shm_offset = _transformValues_shm_offset;
-  }
-
-  void* Set(void* cmd,
-            GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLenum _coverMode,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    static_cast<ValueType*>(cmd)->Init(_numPaths, _pathNameType, _paths_shm_id,
-                                       _paths_shm_offset, _pathBase, _coverMode,
-                                       _transformType, _transformValues_shm_id,
-                                       _transformValues_shm_offset);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  int32_t numPaths;
-  uint32_t pathNameType;
-  uint32_t paths_shm_id;
-  uint32_t paths_shm_offset;
-  uint32_t pathBase;
-  uint32_t coverMode;
-  uint32_t transformType;
-  uint32_t transformValues_shm_id;
-  uint32_t transformValues_shm_offset;
-};
-
-static_assert(sizeof(CoverFillPathInstancedCHROMIUM) == 40,
-              "size of CoverFillPathInstancedCHROMIUM should be 40");
-static_assert(offsetof(CoverFillPathInstancedCHROMIUM, header) == 0,
-              "offset of CoverFillPathInstancedCHROMIUM header should be 0");
-static_assert(offsetof(CoverFillPathInstancedCHROMIUM, numPaths) == 4,
-              "offset of CoverFillPathInstancedCHROMIUM numPaths should be 4");
-static_assert(
-    offsetof(CoverFillPathInstancedCHROMIUM, pathNameType) == 8,
-    "offset of CoverFillPathInstancedCHROMIUM pathNameType should be 8");
-static_assert(
-    offsetof(CoverFillPathInstancedCHROMIUM, paths_shm_id) == 12,
-    "offset of CoverFillPathInstancedCHROMIUM paths_shm_id should be 12");
-static_assert(
-    offsetof(CoverFillPathInstancedCHROMIUM, paths_shm_offset) == 16,
-    "offset of CoverFillPathInstancedCHROMIUM paths_shm_offset should be 16");
-static_assert(offsetof(CoverFillPathInstancedCHROMIUM, pathBase) == 20,
-              "offset of CoverFillPathInstancedCHROMIUM pathBase should be 20");
-static_assert(
-    offsetof(CoverFillPathInstancedCHROMIUM, coverMode) == 24,
-    "offset of CoverFillPathInstancedCHROMIUM coverMode should be 24");
-static_assert(
-    offsetof(CoverFillPathInstancedCHROMIUM, transformType) == 28,
-    "offset of CoverFillPathInstancedCHROMIUM transformType should be 28");
-static_assert(offsetof(CoverFillPathInstancedCHROMIUM,
-                       transformValues_shm_id) == 32,
-              "offset of CoverFillPathInstancedCHROMIUM transformValues_shm_id "
-              "should be 32");
-static_assert(offsetof(CoverFillPathInstancedCHROMIUM,
-                       transformValues_shm_offset) == 36,
-              "offset of CoverFillPathInstancedCHROMIUM "
-              "transformValues_shm_offset should be 36");
-
-struct CoverStrokePathInstancedCHROMIUM {
-  typedef CoverStrokePathInstancedCHROMIUM ValueType;
-  static const CommandId kCmdId = kCoverStrokePathInstancedCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLenum _coverMode,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    SetHeader();
-    numPaths = _numPaths;
-    pathNameType = _pathNameType;
-    paths_shm_id = _paths_shm_id;
-    paths_shm_offset = _paths_shm_offset;
-    pathBase = _pathBase;
-    coverMode = _coverMode;
-    transformType = _transformType;
-    transformValues_shm_id = _transformValues_shm_id;
-    transformValues_shm_offset = _transformValues_shm_offset;
-  }
-
-  void* Set(void* cmd,
-            GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLenum _coverMode,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    static_cast<ValueType*>(cmd)->Init(_numPaths, _pathNameType, _paths_shm_id,
-                                       _paths_shm_offset, _pathBase, _coverMode,
-                                       _transformType, _transformValues_shm_id,
-                                       _transformValues_shm_offset);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  int32_t numPaths;
-  uint32_t pathNameType;
-  uint32_t paths_shm_id;
-  uint32_t paths_shm_offset;
-  uint32_t pathBase;
-  uint32_t coverMode;
-  uint32_t transformType;
-  uint32_t transformValues_shm_id;
-  uint32_t transformValues_shm_offset;
-};
-
-static_assert(sizeof(CoverStrokePathInstancedCHROMIUM) == 40,
-              "size of CoverStrokePathInstancedCHROMIUM should be 40");
-static_assert(offsetof(CoverStrokePathInstancedCHROMIUM, header) == 0,
-              "offset of CoverStrokePathInstancedCHROMIUM header should be 0");
-static_assert(
-    offsetof(CoverStrokePathInstancedCHROMIUM, numPaths) == 4,
-    "offset of CoverStrokePathInstancedCHROMIUM numPaths should be 4");
-static_assert(
-    offsetof(CoverStrokePathInstancedCHROMIUM, pathNameType) == 8,
-    "offset of CoverStrokePathInstancedCHROMIUM pathNameType should be 8");
-static_assert(
-    offsetof(CoverStrokePathInstancedCHROMIUM, paths_shm_id) == 12,
-    "offset of CoverStrokePathInstancedCHROMIUM paths_shm_id should be 12");
-static_assert(
-    offsetof(CoverStrokePathInstancedCHROMIUM, paths_shm_offset) == 16,
-    "offset of CoverStrokePathInstancedCHROMIUM paths_shm_offset should be 16");
-static_assert(
-    offsetof(CoverStrokePathInstancedCHROMIUM, pathBase) == 20,
-    "offset of CoverStrokePathInstancedCHROMIUM pathBase should be 20");
-static_assert(
-    offsetof(CoverStrokePathInstancedCHROMIUM, coverMode) == 24,
-    "offset of CoverStrokePathInstancedCHROMIUM coverMode should be 24");
-static_assert(
-    offsetof(CoverStrokePathInstancedCHROMIUM, transformType) == 28,
-    "offset of CoverStrokePathInstancedCHROMIUM transformType should be 28");
-static_assert(offsetof(CoverStrokePathInstancedCHROMIUM,
-                       transformValues_shm_id) == 32,
-              "offset of CoverStrokePathInstancedCHROMIUM "
-              "transformValues_shm_id should be 32");
-static_assert(offsetof(CoverStrokePathInstancedCHROMIUM,
-                       transformValues_shm_offset) == 36,
-              "offset of CoverStrokePathInstancedCHROMIUM "
-              "transformValues_shm_offset should be 36");
-
-struct StencilThenCoverFillPathInstancedCHROMIUM {
-  typedef StencilThenCoverFillPathInstancedCHROMIUM ValueType;
-  static const CommandId kCmdId = kStencilThenCoverFillPathInstancedCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLenum _fillMode,
-            GLuint _mask,
-            GLenum _coverMode,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    SetHeader();
-    numPaths = _numPaths;
-    pathNameType = _pathNameType;
-    paths_shm_id = _paths_shm_id;
-    paths_shm_offset = _paths_shm_offset;
-    pathBase = _pathBase;
-    fillMode = _fillMode;
-    mask = _mask;
-    coverMode = _coverMode;
-    transformType = _transformType;
-    transformValues_shm_id = _transformValues_shm_id;
-    transformValues_shm_offset = _transformValues_shm_offset;
-  }
-
-  void* Set(void* cmd,
-            GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLenum _fillMode,
-            GLuint _mask,
-            GLenum _coverMode,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    static_cast<ValueType*>(cmd)->Init(
-        _numPaths, _pathNameType, _paths_shm_id, _paths_shm_offset, _pathBase,
-        _fillMode, _mask, _coverMode, _transformType, _transformValues_shm_id,
-        _transformValues_shm_offset);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  int32_t numPaths;
-  uint32_t pathNameType;
-  uint32_t paths_shm_id;
-  uint32_t paths_shm_offset;
-  uint32_t pathBase;
-  uint32_t fillMode;
-  uint32_t mask;
-  uint32_t coverMode;
-  uint32_t transformType;
-  uint32_t transformValues_shm_id;
-  uint32_t transformValues_shm_offset;
-};
-
-static_assert(sizeof(StencilThenCoverFillPathInstancedCHROMIUM) == 48,
-              "size of StencilThenCoverFillPathInstancedCHROMIUM should be 48");
-static_assert(
-    offsetof(StencilThenCoverFillPathInstancedCHROMIUM, header) == 0,
-    "offset of StencilThenCoverFillPathInstancedCHROMIUM header should be 0");
-static_assert(
-    offsetof(StencilThenCoverFillPathInstancedCHROMIUM, numPaths) == 4,
-    "offset of StencilThenCoverFillPathInstancedCHROMIUM numPaths should be 4");
-static_assert(offsetof(StencilThenCoverFillPathInstancedCHROMIUM,
-                       pathNameType) == 8,
-              "offset of StencilThenCoverFillPathInstancedCHROMIUM "
-              "pathNameType should be 8");
-static_assert(offsetof(StencilThenCoverFillPathInstancedCHROMIUM,
-                       paths_shm_id) == 12,
-              "offset of StencilThenCoverFillPathInstancedCHROMIUM "
-              "paths_shm_id should be 12");
-static_assert(offsetof(StencilThenCoverFillPathInstancedCHROMIUM,
-                       paths_shm_offset) == 16,
-              "offset of StencilThenCoverFillPathInstancedCHROMIUM "
-              "paths_shm_offset should be 16");
-static_assert(offsetof(StencilThenCoverFillPathInstancedCHROMIUM, pathBase) ==
-                  20,
-              "offset of StencilThenCoverFillPathInstancedCHROMIUM pathBase "
-              "should be 20");
-static_assert(offsetof(StencilThenCoverFillPathInstancedCHROMIUM, fillMode) ==
-                  24,
-              "offset of StencilThenCoverFillPathInstancedCHROMIUM fillMode "
-              "should be 24");
-static_assert(
-    offsetof(StencilThenCoverFillPathInstancedCHROMIUM, mask) == 28,
-    "offset of StencilThenCoverFillPathInstancedCHROMIUM mask should be 28");
-static_assert(offsetof(StencilThenCoverFillPathInstancedCHROMIUM, coverMode) ==
-                  32,
-              "offset of StencilThenCoverFillPathInstancedCHROMIUM coverMode "
-              "should be 32");
-static_assert(offsetof(StencilThenCoverFillPathInstancedCHROMIUM,
-                       transformType) == 36,
-              "offset of StencilThenCoverFillPathInstancedCHROMIUM "
-              "transformType should be 36");
-static_assert(offsetof(StencilThenCoverFillPathInstancedCHROMIUM,
-                       transformValues_shm_id) == 40,
-              "offset of StencilThenCoverFillPathInstancedCHROMIUM "
-              "transformValues_shm_id should be 40");
-static_assert(offsetof(StencilThenCoverFillPathInstancedCHROMIUM,
-                       transformValues_shm_offset) == 44,
-              "offset of StencilThenCoverFillPathInstancedCHROMIUM "
-              "transformValues_shm_offset should be 44");
-
-struct StencilThenCoverStrokePathInstancedCHROMIUM {
-  typedef StencilThenCoverStrokePathInstancedCHROMIUM ValueType;
-  static const CommandId kCmdId = kStencilThenCoverStrokePathInstancedCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLint _reference,
-            GLuint _mask,
-            GLenum _coverMode,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    SetHeader();
-    numPaths = _numPaths;
-    pathNameType = _pathNameType;
-    paths_shm_id = _paths_shm_id;
-    paths_shm_offset = _paths_shm_offset;
-    pathBase = _pathBase;
-    reference = _reference;
-    mask = _mask;
-    coverMode = _coverMode;
-    transformType = _transformType;
-    transformValues_shm_id = _transformValues_shm_id;
-    transformValues_shm_offset = _transformValues_shm_offset;
-  }
-
-  void* Set(void* cmd,
-            GLsizei _numPaths,
-            GLenum _pathNameType,
-            uint32_t _paths_shm_id,
-            uint32_t _paths_shm_offset,
-            GLuint _pathBase,
-            GLint _reference,
-            GLuint _mask,
-            GLenum _coverMode,
-            GLenum _transformType,
-            uint32_t _transformValues_shm_id,
-            uint32_t _transformValues_shm_offset) {
-    static_cast<ValueType*>(cmd)->Init(
-        _numPaths, _pathNameType, _paths_shm_id, _paths_shm_offset, _pathBase,
-        _reference, _mask, _coverMode, _transformType, _transformValues_shm_id,
-        _transformValues_shm_offset);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  int32_t numPaths;
-  uint32_t pathNameType;
-  uint32_t paths_shm_id;
-  uint32_t paths_shm_offset;
-  uint32_t pathBase;
-  int32_t reference;
-  uint32_t mask;
-  uint32_t coverMode;
-  uint32_t transformType;
-  uint32_t transformValues_shm_id;
-  uint32_t transformValues_shm_offset;
-};
-
-static_assert(
-    sizeof(StencilThenCoverStrokePathInstancedCHROMIUM) == 48,
-    "size of StencilThenCoverStrokePathInstancedCHROMIUM should be 48");
-static_assert(
-    offsetof(StencilThenCoverStrokePathInstancedCHROMIUM, header) == 0,
-    "offset of StencilThenCoverStrokePathInstancedCHROMIUM header should be 0");
-static_assert(offsetof(StencilThenCoverStrokePathInstancedCHROMIUM, numPaths) ==
-                  4,
-              "offset of StencilThenCoverStrokePathInstancedCHROMIUM numPaths "
-              "should be 4");
-static_assert(offsetof(StencilThenCoverStrokePathInstancedCHROMIUM,
-                       pathNameType) == 8,
-              "offset of StencilThenCoverStrokePathInstancedCHROMIUM "
-              "pathNameType should be 8");
-static_assert(offsetof(StencilThenCoverStrokePathInstancedCHROMIUM,
-                       paths_shm_id) == 12,
-              "offset of StencilThenCoverStrokePathInstancedCHROMIUM "
-              "paths_shm_id should be 12");
-static_assert(offsetof(StencilThenCoverStrokePathInstancedCHROMIUM,
-                       paths_shm_offset) == 16,
-              "offset of StencilThenCoverStrokePathInstancedCHROMIUM "
-              "paths_shm_offset should be 16");
-static_assert(offsetof(StencilThenCoverStrokePathInstancedCHROMIUM, pathBase) ==
-                  20,
-              "offset of StencilThenCoverStrokePathInstancedCHROMIUM pathBase "
-              "should be 20");
-static_assert(offsetof(StencilThenCoverStrokePathInstancedCHROMIUM,
-                       reference) == 24,
-              "offset of StencilThenCoverStrokePathInstancedCHROMIUM reference "
-              "should be 24");
-static_assert(
-    offsetof(StencilThenCoverStrokePathInstancedCHROMIUM, mask) == 28,
-    "offset of StencilThenCoverStrokePathInstancedCHROMIUM mask should be 28");
-static_assert(offsetof(StencilThenCoverStrokePathInstancedCHROMIUM,
-                       coverMode) == 32,
-              "offset of StencilThenCoverStrokePathInstancedCHROMIUM coverMode "
-              "should be 32");
-static_assert(offsetof(StencilThenCoverStrokePathInstancedCHROMIUM,
-                       transformType) == 36,
-              "offset of StencilThenCoverStrokePathInstancedCHROMIUM "
-              "transformType should be 36");
-static_assert(offsetof(StencilThenCoverStrokePathInstancedCHROMIUM,
-                       transformValues_shm_id) == 40,
-              "offset of StencilThenCoverStrokePathInstancedCHROMIUM "
-              "transformValues_shm_id should be 40");
-static_assert(offsetof(StencilThenCoverStrokePathInstancedCHROMIUM,
-                       transformValues_shm_offset) == 44,
-              "offset of StencilThenCoverStrokePathInstancedCHROMIUM "
-              "transformValues_shm_offset should be 44");
-
-struct BindFragmentInputLocationCHROMIUMBucket {
-  typedef BindFragmentInputLocationCHROMIUMBucket ValueType;
-  static const CommandId kCmdId = kBindFragmentInputLocationCHROMIUMBucket;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _program, GLint _location, uint32_t _name_bucket_id) {
-    SetHeader();
-    program = _program;
-    location = _location;
-    name_bucket_id = _name_bucket_id;
-  }
-
-  void* Set(void* cmd,
-            GLuint _program,
-            GLint _location,
-            uint32_t _name_bucket_id) {
-    static_cast<ValueType*>(cmd)->Init(_program, _location, _name_bucket_id);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t program;
-  int32_t location;
-  uint32_t name_bucket_id;
-};
-
-static_assert(sizeof(BindFragmentInputLocationCHROMIUMBucket) == 16,
-              "size of BindFragmentInputLocationCHROMIUMBucket should be 16");
-static_assert(
-    offsetof(BindFragmentInputLocationCHROMIUMBucket, header) == 0,
-    "offset of BindFragmentInputLocationCHROMIUMBucket header should be 0");
-static_assert(
-    offsetof(BindFragmentInputLocationCHROMIUMBucket, program) == 4,
-    "offset of BindFragmentInputLocationCHROMIUMBucket program should be 4");
-static_assert(
-    offsetof(BindFragmentInputLocationCHROMIUMBucket, location) == 8,
-    "offset of BindFragmentInputLocationCHROMIUMBucket location should be 8");
-static_assert(offsetof(BindFragmentInputLocationCHROMIUMBucket,
-                       name_bucket_id) == 12,
-              "offset of BindFragmentInputLocationCHROMIUMBucket "
-              "name_bucket_id should be 12");
-
-struct ProgramPathFragmentInputGenCHROMIUM {
-  typedef ProgramPathFragmentInputGenCHROMIUM ValueType;
-  static const CommandId kCmdId = kProgramPathFragmentInputGenCHROMIUM;
-  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
-
-  static uint32_t ComputeSize() {
-    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
-  }
-
-  void SetHeader() { header.SetCmd<ValueType>(); }
-
-  void Init(GLuint _program,
-            GLint _location,
-            GLenum _genMode,
-            GLint _components,
-            uint32_t _coeffs_shm_id,
-            uint32_t _coeffs_shm_offset) {
-    SetHeader();
-    program = _program;
-    location = _location;
-    genMode = _genMode;
-    components = _components;
-    coeffs_shm_id = _coeffs_shm_id;
-    coeffs_shm_offset = _coeffs_shm_offset;
-  }
-
-  void* Set(void* cmd,
-            GLuint _program,
-            GLint _location,
-            GLenum _genMode,
-            GLint _components,
-            uint32_t _coeffs_shm_id,
-            uint32_t _coeffs_shm_offset) {
-    static_cast<ValueType*>(cmd)->Init(_program, _location, _genMode,
-                                       _components, _coeffs_shm_id,
-                                       _coeffs_shm_offset);
-    return NextCmdAddress<ValueType>(cmd);
-  }
-
-  gpu::CommandHeader header;
-  uint32_t program;
-  int32_t location;
-  uint32_t genMode;
-  int32_t components;
-  uint32_t coeffs_shm_id;
-  uint32_t coeffs_shm_offset;
-};
-
-static_assert(sizeof(ProgramPathFragmentInputGenCHROMIUM) == 28,
-              "size of ProgramPathFragmentInputGenCHROMIUM should be 28");
-static_assert(
-    offsetof(ProgramPathFragmentInputGenCHROMIUM, header) == 0,
-    "offset of ProgramPathFragmentInputGenCHROMIUM header should be 0");
-static_assert(
-    offsetof(ProgramPathFragmentInputGenCHROMIUM, program) == 4,
-    "offset of ProgramPathFragmentInputGenCHROMIUM program should be 4");
-static_assert(
-    offsetof(ProgramPathFragmentInputGenCHROMIUM, location) == 8,
-    "offset of ProgramPathFragmentInputGenCHROMIUM location should be 8");
-static_assert(
-    offsetof(ProgramPathFragmentInputGenCHROMIUM, genMode) == 12,
-    "offset of ProgramPathFragmentInputGenCHROMIUM genMode should be 12");
-static_assert(
-    offsetof(ProgramPathFragmentInputGenCHROMIUM, components) == 16,
-    "offset of ProgramPathFragmentInputGenCHROMIUM components should be 16");
-static_assert(
-    offsetof(ProgramPathFragmentInputGenCHROMIUM, coeffs_shm_id) == 20,
-    "offset of ProgramPathFragmentInputGenCHROMIUM coeffs_shm_id should be 20");
-static_assert(offsetof(ProgramPathFragmentInputGenCHROMIUM,
-                       coeffs_shm_offset) == 24,
-              "offset of ProgramPathFragmentInputGenCHROMIUM coeffs_shm_offset "
-              "should be 24");
-
 struct ContextVisibilityHintCHROMIUM {
   typedef ContextVisibilityHintCHROMIUM ValueType;
   static const CommandId kCmdId = kContextVisibilityHintCHROMIUM;
diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
index e6a3014..791783b 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
@@ -5106,426 +5106,6 @@
   CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
 }
 
-TEST_F(GLES2FormatTest, MatrixLoadfCHROMIUMImmediate) {
-  const int kSomeBaseValueToTestWith = 51;
-  static GLfloat data[] = {
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 8),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 9),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 10),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 11),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 12),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 13),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 14),
-      static_cast<GLfloat>(kSomeBaseValueToTestWith + 15),
-  };
-  cmds::MatrixLoadfCHROMIUMImmediate& cmd =
-      *GetBufferAs<cmds::MatrixLoadfCHROMIUMImmediate>();
-  void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11), data);
-  EXPECT_EQ(static_cast<uint32_t>(cmds::MatrixLoadfCHROMIUMImmediate::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
-            cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLenum>(11), cmd.matrixMode);
-  CheckBytesWrittenMatchesExpectedSize(
-      next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
-}
-
-TEST_F(GLES2FormatTest, MatrixLoadIdentityCHROMIUM) {
-  cmds::MatrixLoadIdentityCHROMIUM& cmd =
-      *GetBufferAs<cmds::MatrixLoadIdentityCHROMIUM>();
-  void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::MatrixLoadIdentityCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLenum>(11), cmd.matrixMode);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, GenPathsCHROMIUM) {
-  cmds::GenPathsCHROMIUM& cmd = *GetBufferAs<cmds::GenPathsCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLsizei>(12));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::GenPathsCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.first_client_id);
-  EXPECT_EQ(static_cast<GLsizei>(12), cmd.range);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, DeletePathsCHROMIUM) {
-  cmds::DeletePathsCHROMIUM& cmd = *GetBufferAs<cmds::DeletePathsCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLsizei>(12));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::DeletePathsCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.first_client_id);
-  EXPECT_EQ(static_cast<GLsizei>(12), cmd.range);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, IsPathCHROMIUM) {
-  cmds::IsPathCHROMIUM& cmd = *GetBufferAs<cmds::IsPathCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<uint32_t>(12),
-              static_cast<uint32_t>(13));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::IsPathCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.path);
-  EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, PathCommandsCHROMIUM) {
-  cmds::PathCommandsCHROMIUM& cmd = *GetBufferAs<cmds::PathCommandsCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLsizei>(12),
-              static_cast<uint32_t>(13), static_cast<uint32_t>(14),
-              static_cast<GLsizei>(15), static_cast<GLenum>(16),
-              static_cast<uint32_t>(17), static_cast<uint32_t>(18));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::PathCommandsCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.path);
-  EXPECT_EQ(static_cast<GLsizei>(12), cmd.numCommands);
-  EXPECT_EQ(static_cast<uint32_t>(13), cmd.commands_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(14), cmd.commands_shm_offset);
-  EXPECT_EQ(static_cast<GLsizei>(15), cmd.numCoords);
-  EXPECT_EQ(static_cast<GLenum>(16), cmd.coordType);
-  EXPECT_EQ(static_cast<uint32_t>(17), cmd.coords_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(18), cmd.coords_shm_offset);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, PathParameterfCHROMIUM) {
-  cmds::PathParameterfCHROMIUM& cmd =
-      *GetBufferAs<cmds::PathParameterfCHROMIUM>();
-  void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11),
-                           static_cast<GLenum>(12), static_cast<GLfloat>(13));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::PathParameterfCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.path);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
-  EXPECT_EQ(static_cast<GLfloat>(13), cmd.value);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, PathParameteriCHROMIUM) {
-  cmds::PathParameteriCHROMIUM& cmd =
-      *GetBufferAs<cmds::PathParameteriCHROMIUM>();
-  void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11),
-                           static_cast<GLenum>(12), static_cast<GLint>(13));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::PathParameteriCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.path);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
-  EXPECT_EQ(static_cast<GLint>(13), cmd.value);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, PathStencilFuncCHROMIUM) {
-  cmds::PathStencilFuncCHROMIUM& cmd =
-      *GetBufferAs<cmds::PathStencilFuncCHROMIUM>();
-  void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11),
-                           static_cast<GLint>(12), static_cast<GLuint>(13));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::PathStencilFuncCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLenum>(11), cmd.func);
-  EXPECT_EQ(static_cast<GLint>(12), cmd.ref);
-  EXPECT_EQ(static_cast<GLuint>(13), cmd.mask);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, StencilFillPathCHROMIUM) {
-  cmds::StencilFillPathCHROMIUM& cmd =
-      *GetBufferAs<cmds::StencilFillPathCHROMIUM>();
-  void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11),
-                           static_cast<GLenum>(12), static_cast<GLuint>(13));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::StencilFillPathCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.path);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.fillMode);
-  EXPECT_EQ(static_cast<GLuint>(13), cmd.mask);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, StencilStrokePathCHROMIUM) {
-  cmds::StencilStrokePathCHROMIUM& cmd =
-      *GetBufferAs<cmds::StencilStrokePathCHROMIUM>();
-  void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11),
-                           static_cast<GLint>(12), static_cast<GLuint>(13));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::StencilStrokePathCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.path);
-  EXPECT_EQ(static_cast<GLint>(12), cmd.reference);
-  EXPECT_EQ(static_cast<GLuint>(13), cmd.mask);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, CoverFillPathCHROMIUM) {
-  cmds::CoverFillPathCHROMIUM& cmd =
-      *GetBufferAs<cmds::CoverFillPathCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLenum>(12));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::CoverFillPathCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.path);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.coverMode);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, CoverStrokePathCHROMIUM) {
-  cmds::CoverStrokePathCHROMIUM& cmd =
-      *GetBufferAs<cmds::CoverStrokePathCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLenum>(12));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::CoverStrokePathCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.path);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.coverMode);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, StencilThenCoverFillPathCHROMIUM) {
-  cmds::StencilThenCoverFillPathCHROMIUM& cmd =
-      *GetBufferAs<cmds::StencilThenCoverFillPathCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLenum>(12),
-              static_cast<GLuint>(13), static_cast<GLenum>(14));
-  EXPECT_EQ(
-      static_cast<uint32_t>(cmds::StencilThenCoverFillPathCHROMIUM::kCmdId),
-      cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.path);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.fillMode);
-  EXPECT_EQ(static_cast<GLuint>(13), cmd.mask);
-  EXPECT_EQ(static_cast<GLenum>(14), cmd.coverMode);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, StencilThenCoverStrokePathCHROMIUM) {
-  cmds::StencilThenCoverStrokePathCHROMIUM& cmd =
-      *GetBufferAs<cmds::StencilThenCoverStrokePathCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLint>(12),
-              static_cast<GLuint>(13), static_cast<GLenum>(14));
-  EXPECT_EQ(
-      static_cast<uint32_t>(cmds::StencilThenCoverStrokePathCHROMIUM::kCmdId),
-      cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.path);
-  EXPECT_EQ(static_cast<GLint>(12), cmd.reference);
-  EXPECT_EQ(static_cast<GLuint>(13), cmd.mask);
-  EXPECT_EQ(static_cast<GLenum>(14), cmd.coverMode);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, StencilFillPathInstancedCHROMIUM) {
-  cmds::StencilFillPathInstancedCHROMIUM& cmd =
-      *GetBufferAs<cmds::StencilFillPathInstancedCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLsizei>(11), static_cast<GLenum>(12),
-              static_cast<uint32_t>(13), static_cast<uint32_t>(14),
-              static_cast<GLuint>(15), static_cast<GLenum>(16),
-              static_cast<GLuint>(17), static_cast<GLenum>(18),
-              static_cast<uint32_t>(19), static_cast<uint32_t>(20));
-  EXPECT_EQ(
-      static_cast<uint32_t>(cmds::StencilFillPathInstancedCHROMIUM::kCmdId),
-      cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLsizei>(11), cmd.numPaths);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.pathNameType);
-  EXPECT_EQ(static_cast<uint32_t>(13), cmd.paths_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(14), cmd.paths_shm_offset);
-  EXPECT_EQ(static_cast<GLuint>(15), cmd.pathBase);
-  EXPECT_EQ(static_cast<GLenum>(16), cmd.fillMode);
-  EXPECT_EQ(static_cast<GLuint>(17), cmd.mask);
-  EXPECT_EQ(static_cast<GLenum>(18), cmd.transformType);
-  EXPECT_EQ(static_cast<uint32_t>(19), cmd.transformValues_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(20), cmd.transformValues_shm_offset);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, StencilStrokePathInstancedCHROMIUM) {
-  cmds::StencilStrokePathInstancedCHROMIUM& cmd =
-      *GetBufferAs<cmds::StencilStrokePathInstancedCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLsizei>(11), static_cast<GLenum>(12),
-              static_cast<uint32_t>(13), static_cast<uint32_t>(14),
-              static_cast<GLuint>(15), static_cast<GLint>(16),
-              static_cast<GLuint>(17), static_cast<GLenum>(18),
-              static_cast<uint32_t>(19), static_cast<uint32_t>(20));
-  EXPECT_EQ(
-      static_cast<uint32_t>(cmds::StencilStrokePathInstancedCHROMIUM::kCmdId),
-      cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLsizei>(11), cmd.numPaths);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.pathNameType);
-  EXPECT_EQ(static_cast<uint32_t>(13), cmd.paths_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(14), cmd.paths_shm_offset);
-  EXPECT_EQ(static_cast<GLuint>(15), cmd.pathBase);
-  EXPECT_EQ(static_cast<GLint>(16), cmd.reference);
-  EXPECT_EQ(static_cast<GLuint>(17), cmd.mask);
-  EXPECT_EQ(static_cast<GLenum>(18), cmd.transformType);
-  EXPECT_EQ(static_cast<uint32_t>(19), cmd.transformValues_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(20), cmd.transformValues_shm_offset);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, CoverFillPathInstancedCHROMIUM) {
-  cmds::CoverFillPathInstancedCHROMIUM& cmd =
-      *GetBufferAs<cmds::CoverFillPathInstancedCHROMIUM>();
-  void* next_cmd = cmd.Set(
-      &cmd, static_cast<GLsizei>(11), static_cast<GLenum>(12),
-      static_cast<uint32_t>(13), static_cast<uint32_t>(14),
-      static_cast<GLuint>(15), static_cast<GLenum>(16), static_cast<GLenum>(17),
-      static_cast<uint32_t>(18), static_cast<uint32_t>(19));
-  EXPECT_EQ(static_cast<uint32_t>(cmds::CoverFillPathInstancedCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLsizei>(11), cmd.numPaths);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.pathNameType);
-  EXPECT_EQ(static_cast<uint32_t>(13), cmd.paths_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(14), cmd.paths_shm_offset);
-  EXPECT_EQ(static_cast<GLuint>(15), cmd.pathBase);
-  EXPECT_EQ(static_cast<GLenum>(16), cmd.coverMode);
-  EXPECT_EQ(static_cast<GLenum>(17), cmd.transformType);
-  EXPECT_EQ(static_cast<uint32_t>(18), cmd.transformValues_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(19), cmd.transformValues_shm_offset);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, CoverStrokePathInstancedCHROMIUM) {
-  cmds::CoverStrokePathInstancedCHROMIUM& cmd =
-      *GetBufferAs<cmds::CoverStrokePathInstancedCHROMIUM>();
-  void* next_cmd = cmd.Set(
-      &cmd, static_cast<GLsizei>(11), static_cast<GLenum>(12),
-      static_cast<uint32_t>(13), static_cast<uint32_t>(14),
-      static_cast<GLuint>(15), static_cast<GLenum>(16), static_cast<GLenum>(17),
-      static_cast<uint32_t>(18), static_cast<uint32_t>(19));
-  EXPECT_EQ(
-      static_cast<uint32_t>(cmds::CoverStrokePathInstancedCHROMIUM::kCmdId),
-      cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLsizei>(11), cmd.numPaths);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.pathNameType);
-  EXPECT_EQ(static_cast<uint32_t>(13), cmd.paths_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(14), cmd.paths_shm_offset);
-  EXPECT_EQ(static_cast<GLuint>(15), cmd.pathBase);
-  EXPECT_EQ(static_cast<GLenum>(16), cmd.coverMode);
-  EXPECT_EQ(static_cast<GLenum>(17), cmd.transformType);
-  EXPECT_EQ(static_cast<uint32_t>(18), cmd.transformValues_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(19), cmd.transformValues_shm_offset);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, StencilThenCoverFillPathInstancedCHROMIUM) {
-  cmds::StencilThenCoverFillPathInstancedCHROMIUM& cmd =
-      *GetBufferAs<cmds::StencilThenCoverFillPathInstancedCHROMIUM>();
-  void* next_cmd = cmd.Set(
-      &cmd, static_cast<GLsizei>(11), static_cast<GLenum>(12),
-      static_cast<uint32_t>(13), static_cast<uint32_t>(14),
-      static_cast<GLuint>(15), static_cast<GLenum>(16), static_cast<GLuint>(17),
-      static_cast<GLenum>(18), static_cast<GLenum>(19),
-      static_cast<uint32_t>(20), static_cast<uint32_t>(21));
-  EXPECT_EQ(static_cast<uint32_t>(
-                cmds::StencilThenCoverFillPathInstancedCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLsizei>(11), cmd.numPaths);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.pathNameType);
-  EXPECT_EQ(static_cast<uint32_t>(13), cmd.paths_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(14), cmd.paths_shm_offset);
-  EXPECT_EQ(static_cast<GLuint>(15), cmd.pathBase);
-  EXPECT_EQ(static_cast<GLenum>(16), cmd.fillMode);
-  EXPECT_EQ(static_cast<GLuint>(17), cmd.mask);
-  EXPECT_EQ(static_cast<GLenum>(18), cmd.coverMode);
-  EXPECT_EQ(static_cast<GLenum>(19), cmd.transformType);
-  EXPECT_EQ(static_cast<uint32_t>(20), cmd.transformValues_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(21), cmd.transformValues_shm_offset);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, StencilThenCoverStrokePathInstancedCHROMIUM) {
-  cmds::StencilThenCoverStrokePathInstancedCHROMIUM& cmd =
-      *GetBufferAs<cmds::StencilThenCoverStrokePathInstancedCHROMIUM>();
-  void* next_cmd = cmd.Set(
-      &cmd, static_cast<GLsizei>(11), static_cast<GLenum>(12),
-      static_cast<uint32_t>(13), static_cast<uint32_t>(14),
-      static_cast<GLuint>(15), static_cast<GLint>(16), static_cast<GLuint>(17),
-      static_cast<GLenum>(18), static_cast<GLenum>(19),
-      static_cast<uint32_t>(20), static_cast<uint32_t>(21));
-  EXPECT_EQ(static_cast<uint32_t>(
-                cmds::StencilThenCoverStrokePathInstancedCHROMIUM::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLsizei>(11), cmd.numPaths);
-  EXPECT_EQ(static_cast<GLenum>(12), cmd.pathNameType);
-  EXPECT_EQ(static_cast<uint32_t>(13), cmd.paths_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(14), cmd.paths_shm_offset);
-  EXPECT_EQ(static_cast<GLuint>(15), cmd.pathBase);
-  EXPECT_EQ(static_cast<GLint>(16), cmd.reference);
-  EXPECT_EQ(static_cast<GLuint>(17), cmd.mask);
-  EXPECT_EQ(static_cast<GLenum>(18), cmd.coverMode);
-  EXPECT_EQ(static_cast<GLenum>(19), cmd.transformType);
-  EXPECT_EQ(static_cast<uint32_t>(20), cmd.transformValues_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(21), cmd.transformValues_shm_offset);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, BindFragmentInputLocationCHROMIUMBucket) {
-  cmds::BindFragmentInputLocationCHROMIUMBucket& cmd =
-      *GetBufferAs<cmds::BindFragmentInputLocationCHROMIUMBucket>();
-  void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11),
-                           static_cast<GLint>(12), static_cast<uint32_t>(13));
-  EXPECT_EQ(static_cast<uint32_t>(
-                cmds::BindFragmentInputLocationCHROMIUMBucket::kCmdId),
-            cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
-  EXPECT_EQ(static_cast<GLint>(12), cmd.location);
-  EXPECT_EQ(static_cast<uint32_t>(13), cmd.name_bucket_id);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, ProgramPathFragmentInputGenCHROMIUM) {
-  cmds::ProgramPathFragmentInputGenCHROMIUM& cmd =
-      *GetBufferAs<cmds::ProgramPathFragmentInputGenCHROMIUM>();
-  void* next_cmd =
-      cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLint>(12),
-              static_cast<GLenum>(13), static_cast<GLint>(14),
-              static_cast<uint32_t>(15), static_cast<uint32_t>(16));
-  EXPECT_EQ(
-      static_cast<uint32_t>(cmds::ProgramPathFragmentInputGenCHROMIUM::kCmdId),
-      cmd.header.command);
-  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
-  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
-  EXPECT_EQ(static_cast<GLint>(12), cmd.location);
-  EXPECT_EQ(static_cast<GLenum>(13), cmd.genMode);
-  EXPECT_EQ(static_cast<GLint>(14), cmd.components);
-  EXPECT_EQ(static_cast<uint32_t>(15), cmd.coeffs_shm_id);
-  EXPECT_EQ(static_cast<uint32_t>(16), cmd.coeffs_shm_offset);
-  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
-}
-
 TEST_F(GLES2FormatTest, ContextVisibilityHintCHROMIUM) {
   cmds::ContextVisibilityHintCHROMIUM& cmd =
       *GetBufferAs<cmds::ContextVisibilityHintCHROMIUM>();
diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
index c0bc61d6..5ed67e6 100644
--- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
@@ -319,57 +319,34 @@
   OP(FlushDriverCachesCHROMIUM)                                /* 560 */ \
   OP(ScheduleDCLayerCHROMIUM)                                  /* 561 */ \
   OP(SetActiveURLCHROMIUM)                                     /* 562 */ \
-  OP(MatrixLoadfCHROMIUMImmediate)                             /* 563 */ \
-  OP(MatrixLoadIdentityCHROMIUM)                               /* 564 */ \
-  OP(GenPathsCHROMIUM)                                         /* 565 */ \
-  OP(DeletePathsCHROMIUM)                                      /* 566 */ \
-  OP(IsPathCHROMIUM)                                           /* 567 */ \
-  OP(PathCommandsCHROMIUM)                                     /* 568 */ \
-  OP(PathParameterfCHROMIUM)                                   /* 569 */ \
-  OP(PathParameteriCHROMIUM)                                   /* 570 */ \
-  OP(PathStencilFuncCHROMIUM)                                  /* 571 */ \
-  OP(StencilFillPathCHROMIUM)                                  /* 572 */ \
-  OP(StencilStrokePathCHROMIUM)                                /* 573 */ \
-  OP(CoverFillPathCHROMIUM)                                    /* 574 */ \
-  OP(CoverStrokePathCHROMIUM)                                  /* 575 */ \
-  OP(StencilThenCoverFillPathCHROMIUM)                         /* 576 */ \
-  OP(StencilThenCoverStrokePathCHROMIUM)                       /* 577 */ \
-  OP(StencilFillPathInstancedCHROMIUM)                         /* 578 */ \
-  OP(StencilStrokePathInstancedCHROMIUM)                       /* 579 */ \
-  OP(CoverFillPathInstancedCHROMIUM)                           /* 580 */ \
-  OP(CoverStrokePathInstancedCHROMIUM)                         /* 581 */ \
-  OP(StencilThenCoverFillPathInstancedCHROMIUM)                /* 582 */ \
-  OP(StencilThenCoverStrokePathInstancedCHROMIUM)              /* 583 */ \
-  OP(BindFragmentInputLocationCHROMIUMBucket)                  /* 584 */ \
-  OP(ProgramPathFragmentInputGenCHROMIUM)                      /* 585 */ \
-  OP(ContextVisibilityHintCHROMIUM)                            /* 586 */ \
-  OP(CoverageModulationCHROMIUM)                               /* 587 */ \
-  OP(BlendBarrierKHR)                                          /* 588 */ \
-  OP(BindFragDataLocationIndexedEXTBucket)                     /* 589 */ \
-  OP(BindFragDataLocationEXTBucket)                            /* 590 */ \
-  OP(GetFragDataIndexEXT)                                      /* 591 */ \
-  OP(UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate)     /* 592 */ \
-  OP(OverlayPromotionHintCHROMIUM)                             /* 593 */ \
-  OP(SwapBuffersWithBoundsCHROMIUMImmediate)                   /* 594 */ \
-  OP(SetDrawRectangleCHROMIUM)                                 /* 595 */ \
-  OP(SetEnableDCLayersCHROMIUM)                                /* 596 */ \
-  OP(InitializeDiscardableTextureCHROMIUM)                     /* 597 */ \
-  OP(UnlockDiscardableTextureCHROMIUM)                         /* 598 */ \
-  OP(LockDiscardableTextureCHROMIUM)                           /* 599 */ \
-  OP(TexStorage2DImageCHROMIUM)                                /* 600 */ \
-  OP(SetColorSpaceMetadataCHROMIUM)                            /* 601 */ \
-  OP(WindowRectanglesEXTImmediate)                             /* 602 */ \
-  OP(CreateGpuFenceINTERNAL)                                   /* 603 */ \
-  OP(WaitGpuFenceCHROMIUM)                                     /* 604 */ \
-  OP(DestroyGpuFenceCHROMIUM)                                  /* 605 */ \
-  OP(SetReadbackBufferShadowAllocationINTERNAL)                /* 606 */ \
-  OP(FramebufferTextureMultiviewOVR)                           /* 607 */ \
-  OP(MaxShaderCompilerThreadsKHR)                              /* 608 */ \
-  OP(CreateAndTexStorage2DSharedImageINTERNALImmediate)        /* 609 */ \
-  OP(BeginSharedImageAccessDirectCHROMIUM)                     /* 610 */ \
-  OP(EndSharedImageAccessDirectCHROMIUM)                       /* 611 */ \
-  OP(BeginBatchReadAccessSharedImageCHROMIUM)                  /* 612 */ \
-  OP(EndBatchReadAccessSharedImageCHROMIUM)                    /* 613 */
+  OP(ContextVisibilityHintCHROMIUM)                            /* 563 */ \
+  OP(CoverageModulationCHROMIUM)                               /* 564 */ \
+  OP(BlendBarrierKHR)                                          /* 565 */ \
+  OP(BindFragDataLocationIndexedEXTBucket)                     /* 566 */ \
+  OP(BindFragDataLocationEXTBucket)                            /* 567 */ \
+  OP(GetFragDataIndexEXT)                                      /* 568 */ \
+  OP(UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate)     /* 569 */ \
+  OP(OverlayPromotionHintCHROMIUM)                             /* 570 */ \
+  OP(SwapBuffersWithBoundsCHROMIUMImmediate)                   /* 571 */ \
+  OP(SetDrawRectangleCHROMIUM)                                 /* 572 */ \
+  OP(SetEnableDCLayersCHROMIUM)                                /* 573 */ \
+  OP(InitializeDiscardableTextureCHROMIUM)                     /* 574 */ \
+  OP(UnlockDiscardableTextureCHROMIUM)                         /* 575 */ \
+  OP(LockDiscardableTextureCHROMIUM)                           /* 576 */ \
+  OP(TexStorage2DImageCHROMIUM)                                /* 577 */ \
+  OP(SetColorSpaceMetadataCHROMIUM)                            /* 578 */ \
+  OP(WindowRectanglesEXTImmediate)                             /* 579 */ \
+  OP(CreateGpuFenceINTERNAL)                                   /* 580 */ \
+  OP(WaitGpuFenceCHROMIUM)                                     /* 581 */ \
+  OP(DestroyGpuFenceCHROMIUM)                                  /* 582 */ \
+  OP(SetReadbackBufferShadowAllocationINTERNAL)                /* 583 */ \
+  OP(FramebufferTextureMultiviewOVR)                           /* 584 */ \
+  OP(MaxShaderCompilerThreadsKHR)                              /* 585 */ \
+  OP(CreateAndTexStorage2DSharedImageINTERNALImmediate)        /* 586 */ \
+  OP(BeginSharedImageAccessDirectCHROMIUM)                     /* 587 */ \
+  OP(EndSharedImageAccessDirectCHROMIUM)                       /* 588 */ \
+  OP(BeginBatchReadAccessSharedImageCHROMIUM)                  /* 589 */ \
+  OP(EndBatchReadAccessSharedImageCHROMIUM)                    /* 590 */
 
 enum CommandId {
   kOneBeforeStartPoint =
diff --git a/gpu/command_buffer/common/gles2_cmd_utils.cc b/gpu/command_buffer/common/gles2_cmd_utils.cc
index 73a4429..109097b 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils.cc
+++ b/gpu/command_buffer/common/gles2_cmd_utils.cc
@@ -933,77 +933,6 @@
   return type_size * count;
 }
 
-uint32_t GLES2Util::GetComponentCountForGLTransformType(uint32_t type) {
-  switch (type) {
-    case GL_TRANSLATE_X_CHROMIUM:
-    case GL_TRANSLATE_Y_CHROMIUM:
-      return 1;
-    case GL_TRANSLATE_2D_CHROMIUM:
-      return 2;
-    case GL_TRANSLATE_3D_CHROMIUM:
-      return 3;
-    case GL_AFFINE_2D_CHROMIUM:
-    case GL_TRANSPOSE_AFFINE_2D_CHROMIUM:
-      return 6;
-    case GL_AFFINE_3D_CHROMIUM:
-    case GL_TRANSPOSE_AFFINE_3D_CHROMIUM:
-      return 12;
-    default:
-      return 0;
-  }
-}
-
-uint32_t GLES2Util::GetCoefficientCountForGLPathFragmentInputGenMode(
-    uint32_t gen_mode) {
-  switch (gen_mode) {
-    case GL_EYE_LINEAR_CHROMIUM:
-      return 4;
-    case GL_OBJECT_LINEAR_CHROMIUM:
-      return 3;
-    case GL_CONSTANT_CHROMIUM:
-      return 1;
-    case GL_NONE:
-    default:
-      return 0;
-  }
-}
-
-uint32_t GLES2Util::GetGLTypeSizeForPathCoordType(uint32_t type) {
-  switch (type) {
-    case GL_BYTE:
-      return sizeof(GLbyte);  // NOLINT
-    case GL_UNSIGNED_BYTE:
-      return sizeof(GLubyte);  // NOLINT
-    case GL_SHORT:
-      return sizeof(GLshort);  // NOLINT
-    case GL_UNSIGNED_SHORT:
-      return sizeof(GLushort);  // NOLINT
-    case GL_FLOAT:
-      return sizeof(GLfloat);  // NOLINT
-    default:
-      return 0;
-  }
-}
-
-uint32_t GLES2Util::GetGLTypeSizeForGLPathNameType(uint32_t type) {
-  switch (type) {
-    case GL_BYTE:
-      return sizeof(GLbyte);  // NOLINT
-    case GL_UNSIGNED_BYTE:
-      return sizeof(GLubyte);  // NOLINT
-    case GL_SHORT:
-      return sizeof(GLshort);  // NOLINT
-    case GL_UNSIGNED_SHORT:
-      return sizeof(GLushort);  // NOLINT
-    case GL_INT:
-      return sizeof(GLint);  // NOLINT
-    case GL_UNSIGNED_INT:
-      return sizeof(GLuint);  // NOLINT
-    default:
-      return 0;
-  }
-}
-
 uint32_t GLES2Util::GLErrorToErrorBit(uint32_t error) {
   switch (error) {
     case GL_INVALID_ENUM:
diff --git a/gpu/command_buffer/common/gles2_cmd_utils.h b/gpu/command_buffer/common/gles2_cmd_utils.h
index 7ec260b..238fce0 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils.h
@@ -157,15 +157,6 @@
 
   static uint32_t GetGroupSizeForBufferType(uint32_t count, uint32_t type);
 
-  static uint32_t GetComponentCountForGLTransformType(uint32_t type);
-
-  static uint32_t GetCoefficientCountForGLPathFragmentInputGenMode(
-      uint32_t gen_mode);
-
-  static uint32_t GetGLTypeSizeForPathCoordType(uint32_t type);
-
-  static uint32_t GetGLTypeSizeForGLPathNameType(uint32_t type);
-
   static uint32_t GLErrorToErrorBit(uint32_t gl_error);
 
   static uint32_t GLErrorBitToGLError(uint32_t error_bit);
diff --git a/gpu/command_buffer/common/gles2_cmd_utils_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
index 9a32ac220..652ff7bd 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
@@ -49,15 +49,6 @@
 static std::string GetStringIndexedStringType(uint32_t value);
 static std::string GetStringInternalFormatParameter(uint32_t value);
 static std::string GetStringMapBufferAccess(uint32_t value);
-static std::string GetStringMatrixMode(uint32_t value);
-static std::string GetStringPathCoordType(uint32_t value);
-static std::string GetStringPathCoverMode(uint32_t value);
-static std::string GetStringPathFillMode(uint32_t value);
-static std::string GetStringPathFragmentInputGenMode(uint32_t value);
-static std::string GetStringPathInstancedCoverMode(uint32_t value);
-static std::string GetStringPathNameType(uint32_t value);
-static std::string GetStringPathParameter(uint32_t value);
-static std::string GetStringPathTransformType(uint32_t value);
 static std::string GetStringPixelStore(uint32_t value);
 static std::string GetStringPixelType(uint32_t value);
 static std::string GetStringProgramParameter(uint32_t value);
diff --git a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
index d0bf909..f7510c5 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
@@ -829,10 +829,6 @@
         "GL_FILL_NV",
     },
     {
-        0x1D00,
-        "GL_FLAT_CHROMIUM",
-    },
-    {
         0x1E00,
         "GL_KEEP",
     },
@@ -877,14 +873,6 @@
         "GL_FONT_NUM_GLYPH_INDICES_BIT_NV",
     },
     {
-        0x2400,
-        "GL_EYE_LINEAR_CHROMIUM",
-    },
-    {
-        0x2401,
-        "GL_OBJECT_LINEAR_CHROMIUM",
-    },
-    {
         0x2600,
         "GL_NEAREST",
     },
@@ -2053,10 +2041,6 @@
         "GL_MAX_CUBE_MAP_TEXTURE_SIZE",
     },
     {
-        0x8576,
-        "GL_CONSTANT_CHROMIUM",
-    },
-    {
         0x8589,
         "GL_SRC1_ALPHA_EXT",
     },
@@ -4629,10 +4613,6 @@
         "GL_PATH_CLIENT_LENGTH_NV",
     },
     {
-        0x907a,
-        "GL_PATH_MITER_LIMIT_CHROMIUM",
-    },
-    {
         0x9080,
         "GL_PATH_FILL_MODE_NV",
     },
@@ -4653,10 +4633,6 @@
         "GL_PATH_STROKE_MASK_NV",
     },
     {
-        0x9086,
-        "GL_PATH_STROKE_BOUND_CHROMIUM",
-    },
-    {
         0x9088,
         "GL_COUNT_UP_NV",
     },
@@ -4965,14 +4941,6 @@
         "GL_CONTEXT_ROBUST_ACCESS_KHR",
     },
     {
-        0x90a3,
-        "GL_SQUARE_CHROMIUM",
-    },
-    {
-        0x90a4,
-        "GL_ROUND_CHROMIUM",
-    },
-    {
         0x9100,
         "GL_TEXTURE_2D_MULTISAMPLE",
     },
@@ -7514,104 +7482,6 @@
                                            base::size(string_table), value);
 }
 
-std::string GLES2Util::GetStringMatrixMode(uint32_t value) {
-  static const EnumToString string_table[] = {
-      {GL_PATH_PROJECTION_CHROMIUM, "GL_PATH_PROJECTION_CHROMIUM"},
-      {GL_PATH_MODELVIEW_CHROMIUM, "GL_PATH_MODELVIEW_CHROMIUM"},
-  };
-  return GLES2Util::GetQualifiedEnumString(string_table,
-                                           base::size(string_table), value);
-}
-
-std::string GLES2Util::GetStringPathCoordType(uint32_t value) {
-  static const EnumToString string_table[] = {
-      {GL_BYTE, "GL_BYTE"},   {GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE"},
-      {GL_SHORT, "GL_SHORT"}, {GL_UNSIGNED_SHORT, "GL_UNSIGNED_SHORT"},
-      {GL_FLOAT, "GL_FLOAT"},
-  };
-  return GLES2Util::GetQualifiedEnumString(string_table,
-                                           base::size(string_table), value);
-}
-
-std::string GLES2Util::GetStringPathCoverMode(uint32_t value) {
-  static const EnumToString string_table[] = {
-      {GL_CONVEX_HULL_CHROMIUM, "GL_CONVEX_HULL_CHROMIUM"},
-      {GL_BOUNDING_BOX_CHROMIUM, "GL_BOUNDING_BOX_CHROMIUM"},
-  };
-  return GLES2Util::GetQualifiedEnumString(string_table,
-                                           base::size(string_table), value);
-}
-
-std::string GLES2Util::GetStringPathFillMode(uint32_t value) {
-  static const EnumToString string_table[] = {
-      {GL_INVERT, "GL_INVERT"},
-      {GL_COUNT_UP_CHROMIUM, "GL_COUNT_UP_CHROMIUM"},
-      {GL_COUNT_DOWN_CHROMIUM, "GL_COUNT_DOWN_CHROMIUM"},
-  };
-  return GLES2Util::GetQualifiedEnumString(string_table,
-                                           base::size(string_table), value);
-}
-
-std::string GLES2Util::GetStringPathFragmentInputGenMode(uint32_t value) {
-  static const EnumToString string_table[] = {
-      {GL_NONE, "GL_NONE"},
-      {GL_EYE_LINEAR_CHROMIUM, "GL_EYE_LINEAR_CHROMIUM"},
-      {GL_OBJECT_LINEAR_CHROMIUM, "GL_OBJECT_LINEAR_CHROMIUM"},
-      {GL_CONSTANT_CHROMIUM, "GL_CONSTANT_CHROMIUM"},
-  };
-  return GLES2Util::GetQualifiedEnumString(string_table,
-                                           base::size(string_table), value);
-}
-
-std::string GLES2Util::GetStringPathInstancedCoverMode(uint32_t value) {
-  static const EnumToString string_table[] = {
-      {GL_CONVEX_HULL_CHROMIUM, "GL_CONVEX_HULL_CHROMIUM"},
-      {GL_BOUNDING_BOX_CHROMIUM, "GL_BOUNDING_BOX_CHROMIUM"},
-      {GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM,
-       "GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM"},
-  };
-  return GLES2Util::GetQualifiedEnumString(string_table,
-                                           base::size(string_table), value);
-}
-
-std::string GLES2Util::GetStringPathNameType(uint32_t value) {
-  static const EnumToString string_table[] = {
-      {GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE"},   {GL_BYTE, "GL_BYTE"},
-      {GL_UNSIGNED_SHORT, "GL_UNSIGNED_SHORT"}, {GL_SHORT, "GL_SHORT"},
-      {GL_UNSIGNED_INT, "GL_UNSIGNED_INT"},     {GL_INT, "GL_INT"},
-  };
-  return GLES2Util::GetQualifiedEnumString(string_table,
-                                           base::size(string_table), value);
-}
-
-std::string GLES2Util::GetStringPathParameter(uint32_t value) {
-  static const EnumToString string_table[] = {
-      {GL_PATH_STROKE_WIDTH_CHROMIUM, "GL_PATH_STROKE_WIDTH_CHROMIUM"},
-      {GL_PATH_END_CAPS_CHROMIUM, "GL_PATH_END_CAPS_CHROMIUM"},
-      {GL_PATH_JOIN_STYLE_CHROMIUM, "GL_PATH_JOIN_STYLE_CHROMIUM"},
-      {GL_PATH_MITER_LIMIT_CHROMIUM, "GL_PATH_MITER_LIMIT_CHROMIUM"},
-      {GL_PATH_STROKE_BOUND_CHROMIUM, "GL_PATH_STROKE_BOUND_CHROMIUM"},
-  };
-  return GLES2Util::GetQualifiedEnumString(string_table,
-                                           base::size(string_table), value);
-}
-
-std::string GLES2Util::GetStringPathTransformType(uint32_t value) {
-  static const EnumToString string_table[] = {
-      {GL_NONE, "GL_NONE"},
-      {GL_TRANSLATE_X_CHROMIUM, "GL_TRANSLATE_X_CHROMIUM"},
-      {GL_TRANSLATE_Y_CHROMIUM, "GL_TRANSLATE_Y_CHROMIUM"},
-      {GL_TRANSLATE_2D_CHROMIUM, "GL_TRANSLATE_2D_CHROMIUM"},
-      {GL_TRANSLATE_3D_CHROMIUM, "GL_TRANSLATE_3D_CHROMIUM"},
-      {GL_AFFINE_2D_CHROMIUM, "GL_AFFINE_2D_CHROMIUM"},
-      {GL_AFFINE_3D_CHROMIUM, "GL_AFFINE_3D_CHROMIUM"},
-      {GL_TRANSPOSE_AFFINE_2D_CHROMIUM, "GL_TRANSPOSE_AFFINE_2D_CHROMIUM"},
-      {GL_TRANSPOSE_AFFINE_3D_CHROMIUM, "GL_TRANSPOSE_AFFINE_3D_CHROMIUM"},
-  };
-  return GLES2Util::GetQualifiedEnumString(string_table,
-                                           base::size(string_table), value);
-}
-
 std::string GLES2Util::GetStringPixelStore(uint32_t value) {
   static const EnumToString string_table[] = {
       {GL_PACK_ALIGNMENT, "GL_PACK_ALIGNMENT"},
diff --git a/gpu/command_buffer/gles2_cmd_buffer_functions.txt b/gpu/command_buffer/gles2_cmd_buffer_functions.txt
index a2f7bc8..6115cb03 100644
--- a/gpu/command_buffer/gles2_cmd_buffer_functions.txt
+++ b/gpu/command_buffer/gles2_cmd_buffer_functions.txt
@@ -346,31 +346,6 @@
 GL_APICALL void         GL_APIENTRY glScheduleDCLayerCHROMIUM (GLuint texture_0, GLuint texture_1, GLint z_order, GLint content_x, GLint content_y, GLint content_width, GLint content_height, GLint quad_x, GLint quad_y, GLint quad_width, GLint quad_height, GLfloat transform_c1r1, GLfloat transform_c2r1, GLfloat transform_c1r2, GLfloat transform_c2r2, GLfloat transform_tx, GLfloat transform_ty, GLboolean is_clipped, GLint clip_x, GLint clip_y, GLint clip_width, GLint clip_height, GLuint protected_video_type);
 GL_APICALL void         GL_APIENTRY glSetActiveURLCHROMIUM (const char* url);
 
-// Extension CHROMIUM_path_rendering.
-GL_APICALL void         GL_APIENTRY glMatrixLoadfCHROMIUM (GLenumMatrixMode matrixMode, const GLfloat* m);
-GL_APICALL void         GL_APIENTRY glMatrixLoadIdentityCHROMIUM (GLenumMatrixMode matrixMode);
-GL_APICALL GLuint       GL_APIENTRY glGenPathsCHROMIUM (GLsizei range);
-GL_APICALL void         GL_APIENTRY glDeletePathsCHROMIUM (GLidPath path, GLsizei range);
-GL_APICALL GLboolean    GL_APIENTRY glIsPathCHROMIUM (GLidPath path);
-GL_APICALL void         GL_APIENTRY glPathCommandsCHROMIUM (GLidPath path, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenumPathCoordType coordType, const GLvoid* coords);
-GL_APICALL void         GL_APIENTRY glPathParameterfCHROMIUM (GLidPath path, GLenumPathParameter pname, GLfloat value);
-GL_APICALL void         GL_APIENTRY glPathParameteriCHROMIUM (GLidPath path, GLenumPathParameter pname, GLint value);
-GL_APICALL void         GL_APIENTRY glPathStencilFuncCHROMIUM (GLenumCmpFunction func, GLint ref, GLuint mask);
-GL_APICALL void         GL_APIENTRY glStencilFillPathCHROMIUM (GLidPath path, GLenumPathFillMode fillMode, GLuint mask);
-GL_APICALL void         GL_APIENTRY glStencilStrokePathCHROMIUM (GLidPath path, GLint reference, GLuint mask);
-GL_APICALL void         GL_APIENTRY glCoverFillPathCHROMIUM (GLidPath path, GLenumPathCoverMode coverMode);
-GL_APICALL void         GL_APIENTRY glCoverStrokePathCHROMIUM (GLidPath path, GLenumPathCoverMode coverMode);
-GL_APICALL void         GL_APIENTRY glStencilThenCoverFillPathCHROMIUM (GLidPath path, GLenumPathFillMode fillMode, GLuint mask, GLenumPathCoverMode coverMode);
-GL_APICALL void         GL_APIENTRY glStencilThenCoverStrokePathCHROMIUM (GLidPath path, GLint reference, GLuint mask, GLenumPathCoverMode coverMode);
-GL_APICALL void         GL_APIENTRY glStencilFillPathInstancedCHROMIUM (GLsizei numPaths, GLenum pathNameType, const GLvoid* paths, GLuint pathBase, GLenumPathFillMode fillMode, GLuint mask, GLenumPathTransformType transformType, const GLfloat* transformValues);
-GL_APICALL void         GL_APIENTRY glStencilStrokePathInstancedCHROMIUM (GLsizei numPaths, GLenum pathNameType, const GLvoid* paths, GLuint pathBase, GLint reference, GLuint mask, GLenumPathTransformType transformType, const GLfloat* transformValues);
-GL_APICALL void         GL_APIENTRY glCoverFillPathInstancedCHROMIUM (GLsizei numPaths, GLenum pathNameType, const GLvoid* paths, GLuint pathBase, GLenumPathInstancedCoverMode coverMode, GLenumPathTransformType transformType, const GLfloat* transformValues);
-GL_APICALL void         GL_APIENTRY glCoverStrokePathInstancedCHROMIUM (GLsizei numPaths, GLenum pathNameType, const GLvoid* paths, GLuint pathBase, GLenumPathInstancedCoverMode coverMode, GLenumPathTransformType transformType, const GLfloat* transformValues);
-GL_APICALL void         GL_APIENTRY glStencilThenCoverFillPathInstancedCHROMIUM (GLsizei numPaths, GLenum pathNameType, const GLvoid* paths, GLuint pathBase, GLenumPathFillMode fillMode, GLuint mask, GLenumPathInstancedCoverMode coverMode, GLenumPathTransformType transformType, const GLfloat* transformValues);
-GL_APICALL void         GL_APIENTRY glStencilThenCoverStrokePathInstancedCHROMIUM (GLsizei numPaths, GLenum pathNameType, const GLvoid* paths, GLuint pathBase, GLint reference, GLuint mask, GLenumPathInstancedCoverMode coverMode, GLenumPathTransformType transformType, const GLfloat* transformValues);
-GL_APICALL void         GL_APIENTRY glBindFragmentInputLocationCHROMIUM (GLidProgram program, GLint location, const char* name);
-GL_APICALL void         GL_APIENTRY glProgramPathFragmentInputGenCHROMIUM (GLidProgram program, GLint location, GLenumPathFragmentInputGenMode genMode, GLint components, const GLfloat* coeffs);
-
 // Extension CHROMIUM_context_visibility_hint
 GL_APICALL void         GL_APIENTRY glContextVisibilityHintCHROMIUM (GLboolean visibility);
 
diff --git a/gpu/command_buffer/service/BUILD.gn b/gpu/command_buffer/service/BUILD.gn
index 5a9194d5..94edc91 100644
--- a/gpu/command_buffer/service/BUILD.gn
+++ b/gpu/command_buffer/service/BUILD.gn
@@ -190,8 +190,6 @@
     "passthrough_discardable_manager.h",
     "passthrough_program_cache.cc",
     "passthrough_program_cache.h",
-    "path_manager.cc",
-    "path_manager.h",
     "program_cache.cc",
     "program_cache.h",
     "program_manager.cc",
diff --git a/gpu/command_buffer/service/context_group.cc b/gpu/command_buffer/service/context_group.cc
index b94286e..83759c17 100644
--- a/gpu/command_buffer/service/context_group.cc
+++ b/gpu/command_buffer/service/context_group.cc
@@ -16,7 +16,6 @@
 #include "gpu/command_buffer/service/framebuffer_manager.h"
 #include "gpu/command_buffer/service/gles2_cmd_decoder_passthrough.h"
 #include "gpu/command_buffer/service/passthrough_discardable_manager.h"
-#include "gpu/command_buffer/service/path_manager.h"
 #include "gpu/command_buffer/service/program_manager.h"
 #include "gpu/command_buffer/service/renderbuffer_manager.h"
 #include "gpu/command_buffer/service/sampler_manager.h"
@@ -534,8 +533,6 @@
   // Managers are not used by the passthrough command decoder. Save memory by
   // not allocating them.
   if (!use_passthrough_cmd_decoder_) {
-    path_manager_ = std::make_unique<PathManager>();
-
     program_manager_ = std::make_unique<ProgramManager>(
         program_cache_, max_varying_vectors_, max_draw_buffers_,
         max_dual_source_draw_buffers_, max_vertex_attribs_, gpu_preferences_,
@@ -610,12 +607,6 @@
     ReportProgress();
   }
 
-  if (path_manager_ != nullptr) {
-    path_manager_->Destroy(have_context);
-    path_manager_.reset();
-    ReportProgress();
-  }
-
   if (program_manager_ != nullptr) {
     program_manager_->Destroy(have_context);
     program_manager_.reset();
diff --git a/gpu/command_buffer/service/context_group.h b/gpu/command_buffer/service/context_group.h
index f657350..deb51af 100644
--- a/gpu/command_buffer/service/context_group.h
+++ b/gpu/command_buffer/service/context_group.h
@@ -46,7 +46,6 @@
 class BufferManager;
 class ImageManager;
 class RenderbufferManager;
-class PathManager;
 class ProgramManager;
 class SamplerManager;
 class ShaderManager;
@@ -184,8 +183,6 @@
     return texture_manager_.get();
   }
 
-  PathManager* path_manager() const { return path_manager_.get(); }
-
   ProgramManager* program_manager() const {
     return program_manager_.get();
   }
@@ -305,8 +302,6 @@
 
   std::unique_ptr<TextureManager> texture_manager_;
 
-  std::unique_ptr<PathManager> path_manager_;
-
   std::unique_ptr<ProgramManager> program_manager_;
 
   std::unique_ptr<ShaderManager> shader_manager_;
diff --git a/gpu/command_buffer/service/context_state_autogen.h b/gpu/command_buffer/service/context_state_autogen.h
index 966fa290..4f42f96 100644
--- a/gpu/command_buffer/service/context_state_autogen.h
+++ b/gpu/command_buffer/service/context_state_autogen.h
@@ -80,11 +80,6 @@
 GLenum hint_fragment_shader_derivative;
 GLenum hint_texture_filtering;
 GLfloat line_width;
-GLfloat modelview_matrix[16];
-GLfloat projection_matrix[16];
-GLenum stencil_path_func;
-GLint stencil_path_ref;
-GLuint stencil_path_mask;
 GLint pack_alignment;
 GLint unpack_alignment;
 GLint pack_row_length;
diff --git a/gpu/command_buffer/service/context_state_impl_autogen.h b/gpu/command_buffer/service/context_state_impl_autogen.h
index 64b2938..d3f7e22 100644
--- a/gpu/command_buffer/service/context_state_impl_autogen.h
+++ b/gpu/command_buffer/service/context_state_impl_autogen.h
@@ -79,41 +79,6 @@
   hint_fragment_shader_derivative = GL_DONT_CARE;
   hint_texture_filtering = GL_NICEST;
   line_width = 1.0f;
-  modelview_matrix[0] = 1.0f;
-  modelview_matrix[1] = 0.0f;
-  modelview_matrix[2] = 0.0f;
-  modelview_matrix[3] = 0.0f;
-  modelview_matrix[4] = 0.0f;
-  modelview_matrix[5] = 1.0f;
-  modelview_matrix[6] = 0.0f;
-  modelview_matrix[7] = 0.0f;
-  modelview_matrix[8] = 0.0f;
-  modelview_matrix[9] = 0.0f;
-  modelview_matrix[10] = 1.0f;
-  modelview_matrix[11] = 0.0f;
-  modelview_matrix[12] = 0.0f;
-  modelview_matrix[13] = 0.0f;
-  modelview_matrix[14] = 0.0f;
-  modelview_matrix[15] = 1.0f;
-  projection_matrix[0] = 1.0f;
-  projection_matrix[1] = 0.0f;
-  projection_matrix[2] = 0.0f;
-  projection_matrix[3] = 0.0f;
-  projection_matrix[4] = 0.0f;
-  projection_matrix[5] = 1.0f;
-  projection_matrix[6] = 0.0f;
-  projection_matrix[7] = 0.0f;
-  projection_matrix[8] = 0.0f;
-  projection_matrix[9] = 0.0f;
-  projection_matrix[10] = 1.0f;
-  projection_matrix[11] = 0.0f;
-  projection_matrix[12] = 0.0f;
-  projection_matrix[13] = 0.0f;
-  projection_matrix[14] = 0.0f;
-  projection_matrix[15] = 1.0f;
-  stencil_path_func = GL_ALWAYS;
-  stencil_path_ref = 0;
-  stencil_path_mask = 0xFFFFFFFFU;
   pack_alignment = 4;
   unpack_alignment = 4;
   pack_row_length = 0;
@@ -314,25 +279,6 @@
     }
     if ((line_width != prev_state->line_width))
       DoLineWidth(line_width);
-    if (feature_info_->feature_flags().chromium_path_rendering) {
-      if (memcmp(prev_state->modelview_matrix, modelview_matrix,
-                 sizeof(GLfloat) * 16)) {
-        api()->glMatrixLoadfEXTFn(GL_PATH_MODELVIEW_CHROMIUM, modelview_matrix);
-      }
-    }
-    if (feature_info_->feature_flags().chromium_path_rendering) {
-      if (memcmp(prev_state->projection_matrix, projection_matrix,
-                 sizeof(GLfloat) * 16)) {
-        api()->glMatrixLoadfEXTFn(GL_PATH_PROJECTION_CHROMIUM,
-                                  projection_matrix);
-      }
-    }
-    if (feature_info_->feature_flags().chromium_path_rendering)
-      if ((stencil_path_func != prev_state->stencil_path_func) ||
-          (stencil_path_ref != prev_state->stencil_path_ref) ||
-          (stencil_path_mask != prev_state->stencil_path_mask))
-        api()->glPathStencilFuncNVFn(stencil_path_func, stencil_path_ref,
-                                     stencil_path_mask);
     if (prev_state->pack_alignment != pack_alignment) {
       api()->glPixelStoreiFn(GL_PACK_ALIGNMENT, pack_alignment);
     }
@@ -415,15 +361,6 @@
                       hint_texture_filtering);
     }
     DoLineWidth(line_width);
-    if (feature_info_->feature_flags().chromium_path_rendering) {
-      api()->glMatrixLoadfEXTFn(GL_PATH_MODELVIEW_CHROMIUM, modelview_matrix);
-    }
-    if (feature_info_->feature_flags().chromium_path_rendering) {
-      api()->glMatrixLoadfEXTFn(GL_PATH_PROJECTION_CHROMIUM, projection_matrix);
-    }
-    if (feature_info_->feature_flags().chromium_path_rendering)
-      api()->glPathStencilFuncNVFn(stencil_path_func, stencil_path_ref,
-                                   stencil_path_mask);
     api()->glPixelStoreiFn(GL_PACK_ALIGNMENT, pack_alignment);
     api()->glPixelStoreiFn(GL_UNPACK_ALIGNMENT, unpack_alignment);
     api()->glPolygonOffsetFn(polygon_offset_factor, polygon_offset_units);
@@ -622,40 +559,6 @@
         params[0] = static_cast<GLint>(line_width);
       }
       return true;
-    case GL_PATH_MODELVIEW_MATRIX_CHROMIUM:
-      *num_written = 16;
-      if (params) {
-        for (size_t i = 0; i < 16; ++i) {
-          params[i] = static_cast<GLint>(round(modelview_matrix[i]));
-        }
-      }
-      return true;
-    case GL_PATH_PROJECTION_MATRIX_CHROMIUM:
-      *num_written = 16;
-      if (params) {
-        for (size_t i = 0; i < 16; ++i) {
-          params[i] = static_cast<GLint>(round(projection_matrix[i]));
-        }
-      }
-      return true;
-    case GL_PATH_STENCIL_FUNC_CHROMIUM:
-      *num_written = 1;
-      if (params) {
-        params[0] = static_cast<GLint>(stencil_path_func);
-      }
-      return true;
-    case GL_PATH_STENCIL_REF_CHROMIUM:
-      *num_written = 1;
-      if (params) {
-        params[0] = static_cast<GLint>(stencil_path_ref);
-      }
-      return true;
-    case GL_PATH_STENCIL_VALUE_MASK_CHROMIUM:
-      *num_written = 1;
-      if (params) {
-        params[0] = static_cast<GLint>(stencil_path_mask);
-      }
-      return true;
     case GL_PACK_ALIGNMENT:
       *num_written = 1;
       if (params) {
@@ -1084,36 +987,6 @@
         params[0] = static_cast<GLfloat>(line_width);
       }
       return true;
-    case GL_PATH_MODELVIEW_MATRIX_CHROMIUM:
-      *num_written = 16;
-      if (params) {
-        memcpy(params, modelview_matrix, sizeof(GLfloat) * 16);
-      }
-      return true;
-    case GL_PATH_PROJECTION_MATRIX_CHROMIUM:
-      *num_written = 16;
-      if (params) {
-        memcpy(params, projection_matrix, sizeof(GLfloat) * 16);
-      }
-      return true;
-    case GL_PATH_STENCIL_FUNC_CHROMIUM:
-      *num_written = 1;
-      if (params) {
-        params[0] = static_cast<GLfloat>(stencil_path_func);
-      }
-      return true;
-    case GL_PATH_STENCIL_REF_CHROMIUM:
-      *num_written = 1;
-      if (params) {
-        params[0] = static_cast<GLfloat>(stencil_path_ref);
-      }
-      return true;
-    case GL_PATH_STENCIL_VALUE_MASK_CHROMIUM:
-      *num_written = 1;
-      if (params) {
-        params[0] = static_cast<GLfloat>(stencil_path_mask);
-      }
-      return true;
     case GL_PACK_ALIGNMENT:
       *num_written = 1;
       if (params) {
diff --git a/gpu/command_buffer/service/context_state_test_helpers_autogen.h b/gpu/command_buffer/service/context_state_test_helpers_autogen.h
index 6fa1c493..cd9d25eb 100644
--- a/gpu/command_buffer/service/context_state_test_helpers_autogen.h
+++ b/gpu/command_buffer/service/context_state_test_helpers_autogen.h
@@ -83,21 +83,6 @@
         .RetiresOnSaturation();
   }
   SetupInitStateManualExpectationsForDoLineWidth(gl, 1.0f);
-  if (feature_info->feature_flags().chromium_path_rendering) {
-    EXPECT_CALL(*gl, MatrixLoadfEXT(GL_PATH_MODELVIEW_CHROMIUM, _))
-        .Times(1)
-        .RetiresOnSaturation();
-  }
-  if (feature_info->feature_flags().chromium_path_rendering) {
-    EXPECT_CALL(*gl, MatrixLoadfEXT(GL_PATH_PROJECTION_CHROMIUM, _))
-        .Times(1)
-        .RetiresOnSaturation();
-  }
-  if (feature_info->feature_flags().chromium_path_rendering) {
-    EXPECT_CALL(*gl, PathStencilFuncNV(GL_ALWAYS, 0, 0xFFFFFFFFU))
-        .Times(1)
-        .RetiresOnSaturation();
-  }
   EXPECT_CALL(*gl, PixelStorei(GL_PACK_ALIGNMENT, 4))
       .Times(1)
       .RetiresOnSaturation();
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index 22809e442..a47b5da 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -1419,26 +1419,6 @@
     validators_.g_l_state.AddValue(GL_COVERAGE_MODULATION_CHROMIUM);
   }
 
-  if (gfx::HasExtension(extensions, "GL_NV_path_rendering")) {
-    bool has_dsa = gl_version_info_->IsAtLeastGL(4, 5) ||
-                   gfx::HasExtension(extensions, "GL_EXT_direct_state_access");
-    bool has_piq =
-        gl_version_info_->IsAtLeastGL(4, 3) ||
-        gfx::HasExtension(extensions, "GL_ARB_program_interface_query");
-    bool has_fms = feature_flags_.chromium_framebuffer_mixed_samples;
-    if ((gl_version_info_->IsAtLeastGLES(3, 1) ||
-         (gl_version_info_->IsAtLeastGL(3, 2) && has_dsa && has_piq)) &&
-        has_fms) {
-      AddExtensionString("GL_CHROMIUM_path_rendering");
-      feature_flags_.chromium_path_rendering = true;
-      validators_.g_l_state.AddValue(GL_PATH_MODELVIEW_MATRIX_CHROMIUM);
-      validators_.g_l_state.AddValue(GL_PATH_PROJECTION_MATRIX_CHROMIUM);
-      validators_.g_l_state.AddValue(GL_PATH_STENCIL_FUNC_CHROMIUM);
-      validators_.g_l_state.AddValue(GL_PATH_STENCIL_REF_CHROMIUM);
-      validators_.g_l_state.AddValue(GL_PATH_STENCIL_VALUE_MASK_CHROMIUM);
-    }
-  }
-
   if ((gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile ||
        gfx::HasExtension(extensions, "GL_EXT_texture_rg") ||
        gfx::HasExtension(extensions, "GL_ARB_texture_rg")) &&
diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h
index aa9dbdf1..1b73d38f 100644
--- a/gpu/command_buffer/service/feature_info.h
+++ b/gpu/command_buffer/service/feature_info.h
@@ -95,7 +95,6 @@
     bool chromium_texture_filtering_hint = false;
     bool angle_texture_usage = false;
     bool ext_texture_storage = false;
-    bool chromium_path_rendering = false;
     bool chromium_raster_transport = false;
     bool chromium_framebuffer_mixed_samples = false;
     bool blend_equation_advanced = false;
diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc
index d33b76f..e032a4dc 100644
--- a/gpu/command_buffer/service/feature_info_unittest.cc
+++ b/gpu/command_buffer/service/feature_info_unittest.cc
@@ -1596,49 +1596,6 @@
   EXPECT_FALSE(info_->feature_flags().blend_equation_advanced_coherent);
 }
 
-TEST_P(FeatureInfoTest, InitializeCHROMIUM_path_rendering) {
-  SetupInitExpectationsWithGLVersion(
-      "GL_ARB_compatibility GL_NV_path_rendering GL_EXT_direct_state_access "
-      "GL_NV_framebuffer_mixed_samples",
-      "", "4.3");
-  EXPECT_TRUE(info_->feature_flags().chromium_path_rendering);
-  EXPECT_TRUE(
-      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
-}
-
-TEST_P(FeatureInfoTest, InitializeCHROMIUM_path_rendering2) {
-  SetupInitExpectationsWithGLVersion(
-      "GL_NV_path_rendering GL_NV_framebuffer_mixed_samples", "",
-      "OpenGL ES 3.1");
-  EXPECT_TRUE(info_->feature_flags().chromium_path_rendering);
-  EXPECT_TRUE(
-      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
-}
-
-TEST_P(FeatureInfoTest, InitializeNoCHROMIUM_path_rendering) {
-  SetupInitExpectationsWithGLVersion("GL_ARB_compatibility", "", "4.3");
-  EXPECT_FALSE(info_->feature_flags().chromium_path_rendering);
-  EXPECT_FALSE(
-      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
-}
-
-TEST_P(FeatureInfoTest, InitializeNoCHROMIUM_path_rendering2) {
-  SetupInitExpectationsWithGLVersion(
-      "GL_ARB_compatibility GL_NV_path_rendering", "", "4.3");
-  EXPECT_FALSE(info_->feature_flags().chromium_path_rendering);
-  EXPECT_FALSE(
-      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
-}
-
-TEST_P(FeatureInfoTest, InitializeNoCHROMIUM_path_rendering3) {
-  // Missing framebuffer mixed samples.
-  SetupInitExpectationsWithGLVersion("GL_NV_path_rendering", "",
-                                     "OpenGL ES 3.1");
-  EXPECT_FALSE(info_->feature_flags().chromium_path_rendering);
-  EXPECT_FALSE(
-      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
-}
-
 TEST_P(FeatureInfoTest, InitializeNoKHR_blend_equation_advanced) {
   SetupInitExpectationsWithGLVersion("GL_ARB_compatibility", "", "4.3");
   EXPECT_FALSE(info_->feature_flags().blend_equation_advanced);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index ea43a05..b04a2e2 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -72,7 +72,6 @@
 #include "gpu/command_buffer/service/mailbox_manager.h"
 #include "gpu/command_buffer/service/memory_tracking.h"
 #include "gpu/command_buffer/service/multi_draw_manager.h"
-#include "gpu/command_buffer/service/path_manager.h"
 #include "gpu/command_buffer/service/program_manager.h"
 #include "gpu/command_buffer/service/renderbuffer_manager.h"
 #include "gpu/command_buffer/service/sampler_manager.h"
@@ -798,8 +797,6 @@
                                                ForcedMultisampleMode mode);
   bool RegenerateRenderbufferIfNeeded(Renderbuffer* renderbuffer);
 
-  PathManager* path_manager() { return group_->path_manager(); }
-
   void SetCopyTextureResourceManagerForTest(
       CopyTextureCHROMIUMResourceManager* copy_texture_resource_manager)
       override {
@@ -875,8 +872,6 @@
   bool GenVertexArraysOESHelper(GLsizei n, const GLuint* client_ids);
   void DeleteVertexArraysOESHelper(GLsizei n,
                                    const volatile GLuint* client_ids);
-  bool GenPathsCHROMIUMHelper(GLuint first_client_id, GLsizei range);
-  bool DeletePathsCHROMIUMHelper(GLuint first_client_id, GLsizei range);
   bool GenSamplersHelper(GLsizei n, const GLuint* client_ids);
   void DeleteSamplersHelper(GLsizei n, const volatile GLuint* client_ids);
   bool GenTransformFeedbacksHelper(GLsizei n, const GLuint* client_ids);
@@ -1232,9 +1227,6 @@
 
   void DoFlushDriverCachesCHROMIUM(void);
 
-  void DoMatrixLoadfCHROMIUM(GLenum matrix_mode,
-                             const volatile GLfloat* matrix);
-  void DoMatrixLoadIdentityCHROMIUM(GLenum matrix_mode);
   void DoScheduleCALayerInUseQueryCHROMIUM(GLsizei count,
                                            const volatile GLuint* textures);
 
@@ -1931,7 +1923,6 @@
   bool DoIsSampler(GLuint client_id);
   bool DoIsTransformFeedback(GLuint client_id);
   bool DoIsVertexArrayOES(GLuint client_id);
-  bool DoIsPathCHROMIUM(GLuint client_id);
   bool DoIsSync(GLuint client_id);
 
   void DoLineWidth(GLfloat width);
@@ -2487,10 +2478,6 @@
   // Checks to see if the inserted fence has completed.
   void ProcessDescheduleUntilFinished();
 
-  void DoBindFragmentInputLocationCHROMIUM(GLuint program_id,
-                                           GLint location,
-                                           const std::string& name);
-
   // If |texture_manager_version_| doesn't match the current version, then this
   // will rebind all external textures to match their current service_id.
   void RestoreAllExternalTextureBindingsIfNeeded() override;
@@ -4685,44 +4672,6 @@
   return true;
 }
 
-bool GLES2DecoderImpl::GenPathsCHROMIUMHelper(GLuint first_client_id,
-                                              GLsizei range) {
-  GLuint last_client_id;
-  if (range < 1 || !base::CheckAdd(first_client_id, range - 1)
-                        .AssignIfValid(&last_client_id))
-    return false;
-
-  if (path_manager()->HasPathsInRange(first_client_id, last_client_id))
-    return false;
-
-  GLuint first_service_id = api()->glGenPathsNVFn(range);
-  if (first_service_id == 0) {
-    // We have to fail the connection here, because client has already
-    // succeeded in allocating the ids. This happens if we allocate
-    // the whole path id space (two allocations of 0x7FFFFFFF paths, for
-    // example).
-    return false;
-  }
-  // GenPathsNV does not wrap.
-  DCHECK(first_service_id + range - 1 >= first_service_id);
-
-  path_manager()->CreatePathRange(first_client_id, last_client_id,
-                                  first_service_id);
-
-  return true;
-}
-
-bool GLES2DecoderImpl::DeletePathsCHROMIUMHelper(GLuint first_client_id,
-                                                 GLsizei range) {
-  GLuint last_client_id;
-  if (range < 1 || !base::CheckAdd(first_client_id, range - 1)
-                        .AssignIfValid(&last_client_id))
-    return false;
-
-  path_manager()->RemovePaths(first_client_id, last_client_id);
-  return true;
-}
-
 void GLES2DecoderImpl::DeleteBuffersHelper(GLsizei n,
                                            const volatile GLuint* client_ids) {
   for (GLsizei ii = 0; ii < n; ++ii) {
@@ -17985,12 +17934,6 @@
   return vao && vao->IsValid() && !vao->IsDeleted();
 }
 
-bool GLES2DecoderImpl::DoIsPathCHROMIUM(GLuint client_id) {
-  GLuint service_id = 0;
-  return path_manager()->GetPath(client_id, &service_id) &&
-         api()->glIsPathNVFn(service_id) == GL_TRUE;
-}
-
 bool GLES2DecoderImpl::DoIsSync(GLuint client_id) {
   GLsync service_sync = 0;
   return group_->GetSyncServiceId(client_id, &service_sync);
@@ -19323,34 +19266,6 @@
   }
 }
 
-void GLES2DecoderImpl::DoMatrixLoadfCHROMIUM(GLenum matrix_mode,
-                                             const volatile GLfloat* matrix) {
-  DCHECK(matrix_mode == GL_PATH_PROJECTION_CHROMIUM ||
-         matrix_mode == GL_PATH_MODELVIEW_CHROMIUM);
-
-  GLfloat* target_matrix = matrix_mode == GL_PATH_PROJECTION_CHROMIUM
-                               ? state_.projection_matrix
-                               : state_.modelview_matrix;
-  memcpy(target_matrix, const_cast<const GLfloat*>(matrix),
-         sizeof(GLfloat) * 16);
-  // The matrix_mode is either GL_PATH_MODELVIEW_NV or GL_PATH_PROJECTION_NV
-  // since the values of the _NV and _CHROMIUM tokens match.
-  api()->glMatrixLoadfEXTFn(matrix_mode, target_matrix);
-}
-
-void GLES2DecoderImpl::DoMatrixLoadIdentityCHROMIUM(GLenum matrix_mode) {
-  DCHECK(matrix_mode == GL_PATH_PROJECTION_CHROMIUM ||
-         matrix_mode == GL_PATH_MODELVIEW_CHROMIUM);
-
-  GLfloat* target_matrix = matrix_mode == GL_PATH_PROJECTION_CHROMIUM
-                               ? state_.projection_matrix
-                               : state_.modelview_matrix;
-  memcpy(target_matrix, kIdentityMatrix, sizeof(kIdentityMatrix));
-  // The matrix_mode is either GL_PATH_MODELVIEW_NV or GL_PATH_PROJECTION_NV
-  // since the values of the _NV and _CHROMIUM tokens match.
-  api()->glMatrixLoadIdentityEXTFn(matrix_mode);
-}
-
 error::Error GLES2DecoderImpl::HandleUniformBlockBinding(
     uint32_t immediate_data_size,
     const volatile void* cmd_data) {
@@ -19943,945 +19858,6 @@
   }
 }
 
-// Class to validate path rendering command parameters. Contains validation
-// for the common parameters that are used in multiple different commands.
-// The individual functions are needed in order to control the order of the
-// validation.
-// The Get* functions will return false if the function call should be stopped.
-// In this case, PathCommandValidatorContext::error() will return the command
-// buffer error that should be returned. The decoder error state will be set to
-// appropriate GL error if needed.
-// The Get* functions will return true if the function call should
-// continue as-is.
-class PathCommandValidatorContext {
- public:
-  PathCommandValidatorContext(GLES2DecoderImpl* decoder,
-                              const char* function_name)
-      : decoder_(decoder),
-        error_state_(decoder->GetErrorState()),
-        validators_(decoder->GetContextGroup()->feature_info()->validators()),
-        function_name_(function_name),
-        error_(error::kNoError) {}
-
-  error::Error error() const { return error_; }
-
-  template <typename Cmd>
-  bool GetPathRange(const Cmd& cmd, GLsizei* out_range) {
-    GLsizei range = static_cast<GLsizei>(cmd.range);
-    if (range < 0) {
-      ERRORSTATE_SET_GL_ERROR(error_state_, GL_INVALID_VALUE, function_name_,
-                              "range < 0");
-      return false;
-    }
-    *out_range = range;
-    return true;
-  }
-  template <typename Cmd>
-  bool GetPathCountAndType(const Cmd& cmd,
-                           GLuint* out_num_paths,
-                           GLenum* out_path_name_type) {
-    int32_t numPaths = cmd.numPaths;
-    if (numPaths < 0) {
-      ERRORSTATE_SET_GL_ERROR(error_state_, GL_INVALID_VALUE, function_name_,
-                              "numPaths < 0");
-      return false;
-    }
-    GLenum path_name_type = static_cast<GLenum>(cmd.pathNameType);
-    if (!validators_->path_name_type.IsValid(path_name_type)) {
-      ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(error_state_, function_name_,
-                                           path_name_type, "pathNameType");
-      return false;
-    }
-    *out_num_paths = static_cast<GLsizei>(numPaths);
-    *out_path_name_type = path_name_type;
-    return true;
-  }
-  template <typename Cmd>
-  bool GetFillMode(const Cmd& cmd, GLenum* out_fill_mode) {
-    GLenum fill_mode = static_cast<GLenum>(cmd.fillMode);
-    if (!validators_->path_fill_mode.IsValid(fill_mode)) {
-      ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(error_state_, function_name_,
-                                           fill_mode, "fillMode");
-      return false;
-    }
-    *out_fill_mode = fill_mode;
-    return true;
-  }
-  template <typename Cmd>
-  bool GetFillModeAndMask(const Cmd& cmd,
-                          GLenum* out_fill_mode,
-                          GLuint* out_mask) {
-    GLenum fill_mode;
-    if (!GetFillMode(cmd, &fill_mode))
-      return false;
-    GLuint mask = static_cast<GLuint>(cmd.mask);
-    /*  The error INVALID_VALUE is generated if /fillMode/ is COUNT_UP_CHROMIUM
-        or COUNT_DOWN_CHROMIUM and the effective /mask/+1 is not an integer
-        power of two */
-    if ((fill_mode == GL_COUNT_UP_CHROMIUM ||
-         fill_mode == GL_COUNT_DOWN_CHROMIUM) &&
-        GLES2Util::IsNPOT(mask + 1)) {
-      ERRORSTATE_SET_GL_ERROR(error_state_, GL_INVALID_VALUE, function_name_,
-                              "mask+1 is not power of two");
-      return false;
-    }
-    *out_fill_mode = fill_mode;
-    *out_mask = mask;
-    return true;
-  }
-  template <typename Cmd>
-  bool GetTransformType(const Cmd& cmd, GLenum* out_transform_type) {
-    GLenum transform_type = static_cast<GLenum>(cmd.transformType);
-    if (!validators_->path_transform_type.IsValid(transform_type)) {
-      ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(error_state_, function_name_,
-                                           transform_type, "transformType");
-      return false;
-    }
-    *out_transform_type = transform_type;
-    return true;
-  }
-  template <typename Cmd>
-  bool GetPathNameData(const Cmd& cmd,
-                       GLuint num_paths,
-                       GLenum path_name_type,
-                       std::unique_ptr<GLuint[]>* out_buffer) {
-    DCHECK(validators_->path_name_type.IsValid(path_name_type));
-    GLuint path_base = static_cast<GLuint>(cmd.pathBase);
-    uint32_t shm_id = static_cast<uint32_t>(cmd.paths_shm_id);
-    uint32_t shm_offset = static_cast<uint32_t>(cmd.paths_shm_offset);
-    if (shm_id == 0 && shm_offset == 0) {
-      error_ = error::kOutOfBounds;
-      return false;
-    }
-    switch (path_name_type) {
-      case GL_BYTE:
-        return GetPathNameDataImpl<GLbyte>(num_paths, path_base, shm_id,
-                                           shm_offset, out_buffer);
-      case GL_UNSIGNED_BYTE:
-        return GetPathNameDataImpl<GLubyte>(num_paths, path_base, shm_id,
-                                            shm_offset, out_buffer);
-      case GL_SHORT:
-        return GetPathNameDataImpl<GLshort>(num_paths, path_base, shm_id,
-                                            shm_offset, out_buffer);
-      case GL_UNSIGNED_SHORT:
-        return GetPathNameDataImpl<GLushort>(num_paths, path_base, shm_id,
-                                             shm_offset, out_buffer);
-      case GL_INT:
-        return GetPathNameDataImpl<GLint>(num_paths, path_base, shm_id,
-                                          shm_offset, out_buffer);
-      case GL_UNSIGNED_INT:
-        return GetPathNameDataImpl<GLuint>(num_paths, path_base, shm_id,
-                                           shm_offset, out_buffer);
-      default:
-        break;
-    }
-    NOTREACHED();
-    error_ = error::kOutOfBounds;
-    return false;
-  }
-  template <typename Cmd>
-  bool GetTransforms(const Cmd& cmd,
-                     GLuint num_paths,
-                     GLenum transform_type,
-                     const GLfloat** out_transforms) {
-    if (transform_type == GL_NONE) {
-      *out_transforms = nullptr;
-      return true;
-    }
-    uint32_t transforms_shm_id =
-        static_cast<uint32_t>(cmd.transformValues_shm_id);
-    uint32_t transforms_shm_offset =
-        static_cast<uint32_t>(cmd.transformValues_shm_offset);
-    uint32_t transforms_component_count =
-        GLES2Util::GetComponentCountForGLTransformType(transform_type);
-    // Below multiplication will not overflow.
-    DCHECK_LE(transforms_component_count, 12U);
-    uint32_t one_transform_size = sizeof(GLfloat) * transforms_component_count;
-    uint32_t transforms_size = 0;
-    if (!base::CheckMul(one_transform_size, num_paths)
-             .AssignIfValid(&transforms_size)) {
-      error_ = error::kOutOfBounds;
-      return false;
-    }
-    const GLfloat* transforms = nullptr;
-    if (transforms_shm_id != 0 || transforms_shm_offset != 0)
-      transforms = decoder_->GetSharedMemoryAs<const GLfloat*>(
-          transforms_shm_id, transforms_shm_offset, transforms_size);
-    if (!transforms) {
-      error_ = error::kOutOfBounds;
-      return false;
-    }
-    *out_transforms = transforms;
-    return true;
-  }
-  template <typename Cmd>
-  bool GetCoverMode(const Cmd& cmd, GLenum* out_cover_mode) {
-    GLenum cover_mode = static_cast<GLuint>(cmd.coverMode);
-    if (!validators_->path_instanced_cover_mode.IsValid(cover_mode)) {
-      ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(error_state_, function_name_,
-                                           cover_mode, "coverMode");
-      return false;
-    }
-    *out_cover_mode = cover_mode;
-    return true;
-  }
-
- private:
-  template <typename T>
-  bool GetPathNameDataImpl(GLuint num_paths,
-                           GLuint path_base,
-                           uint32_t shm_id,
-                           uint32_t shm_offset,
-                           std::unique_ptr<GLuint[]>* out_buffer) {
-    uint32_t paths_size = 0;
-    if (!base::CheckMul(num_paths, sizeof(T)).AssignIfValid(&paths_size)) {
-      error_ = error::kOutOfBounds;
-      return false;
-    }
-    T* paths = decoder_->GetSharedMemoryAs<T*>(shm_id, shm_offset, paths_size);
-    if (!paths) {
-      error_ = error::kOutOfBounds;
-      return false;
-    }
-    std::unique_ptr<GLuint[]> result_paths(new GLuint[num_paths]);
-    bool has_paths = false;
-    for (GLuint i = 0; i < num_paths; ++i) {
-      GLuint service_id = 0;
-      // The below addition is ok even with over- and underflows.
-      // There is no difference if client passes:
-      //  * base==4, T=GLbyte, paths[0]==0xfa (-6)
-      //  * base==0xffffffff, T=GLuint, paths[0]==0xffffffff
-      //  * base==0, T=GLuint, paths[0]==0xfffffffe
-      // For the all the cases, the interpretation is that
-      // client intends to use the path 0xfffffffe.
-      // The client_id verification is only done after the addition.
-      uint32_t client_id = path_base + paths[i];
-      if (decoder_->path_manager()->GetPath(client_id, &service_id))
-        has_paths = true;
-      // Will use path 0 if the path is not found. This is in line
-      // of the spec: missing paths will produce nothing, let
-      // the instanced draw continue.
-      result_paths[i] = service_id;
-    }
-    out_buffer->reset(result_paths.release());
-
-    return has_paths;
-  }
-  GLES2DecoderImpl* decoder_;
-  ErrorState* error_state_;
-  const Validators* validators_;
-  const char* function_name_;
-  error::Error error_;
-};
-
-error::Error GLES2DecoderImpl::HandleGenPathsCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::GenPathsCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::GenPathsCHROMIUM*>(cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  PathCommandValidatorContext v(this, "glGenPathsCHROMIUM");
-  GLsizei range = 0;
-  if (!v.GetPathRange(c, &range))
-    return v.error();
-
-  GLuint first_client_id = static_cast<GLuint>(c.first_client_id);
-  if (first_client_id == 0)
-    return error::kInvalidArguments;
-
-  if (range == 0)
-    return error::kNoError;
-
-  if (!GenPathsCHROMIUMHelper(first_client_id, range))
-    return error::kInvalidArguments;
-
-  return error::kNoError;
-}
-error::Error GLES2DecoderImpl::HandleDeletePathsCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::DeletePathsCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::DeletePathsCHROMIUM*>(cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  PathCommandValidatorContext v(this, "glDeletePathsCHROMIUM");
-  GLsizei range = 0;
-  if (!v.GetPathRange(c, &range))
-    return v.error();
-
-  if (range == 0)
-    return error::kNoError;
-
-  GLuint first_client_id = c.first_client_id;
-  // first_client_id can be 0, because non-existing path ids are skipped.
-
-  if (!DeletePathsCHROMIUMHelper(first_client_id, range))
-    return error::kInvalidArguments;
-
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandlePathCommandsCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glPathCommandsCHROMIUM";
-  const volatile gles2::cmds::PathCommandsCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::PathCommandsCHROMIUM*>(cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  GLuint service_id = 0;
-  if (!path_manager()->GetPath(static_cast<GLuint>(c.path), &service_id)) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
-                       "invalid path name");
-    return error::kNoError;
-  }
-
-  GLsizei num_commands = static_cast<GLsizei>(c.numCommands);
-  if (num_commands < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "numCommands < 0");
-    return error::kNoError;
-  }
-
-  GLsizei num_coords = static_cast<uint32_t>(c.numCoords);
-  if (num_coords < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "numCoords < 0");
-    return error::kNoError;
-  }
-
-  GLenum coord_type = static_cast<uint32_t>(c.coordType);
-  if (!validators_->path_coord_type.IsValid(static_cast<GLint>(coord_type))) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_ENUM, kFunctionName, "invalid coordType");
-    return error::kNoError;
-  }
-
-  std::unique_ptr<GLubyte[]> commands;
-  base::CheckedNumeric<GLsizei> num_coords_expected = 0;
-
-  if (num_commands > 0) {
-    uint32_t commands_shm_id = static_cast<uint32_t>(c.commands_shm_id);
-    uint32_t commands_shm_offset = static_cast<uint32_t>(c.commands_shm_offset);
-    if (commands_shm_id != 0 || commands_shm_offset != 0) {
-      const GLubyte* shared_commands = GetSharedMemoryAs<const GLubyte*>(
-          commands_shm_id, commands_shm_offset, num_commands);
-      if (shared_commands) {
-        commands.reset(new GLubyte[num_commands]);
-        memcpy(commands.get(), shared_commands, num_commands);
-      }
-    }
-    if (!commands)
-      return error::kOutOfBounds;
-
-    for (GLsizei i = 0; i < num_commands; ++i) {
-      switch (commands[i]) {
-        case GL_CLOSE_PATH_CHROMIUM:
-          // Close has no coords.
-          break;
-        case GL_MOVE_TO_CHROMIUM:
-        // Fallthrough.
-        case GL_LINE_TO_CHROMIUM:
-          num_coords_expected += 2;
-          break;
-        case GL_QUADRATIC_CURVE_TO_CHROMIUM:
-          num_coords_expected += 4;
-          break;
-        case GL_CUBIC_CURVE_TO_CHROMIUM:
-          num_coords_expected += 6;
-          break;
-        case GL_CONIC_CURVE_TO_CHROMIUM:
-          num_coords_expected += 5;
-          break;
-        default:
-          LOCAL_SET_GL_ERROR(GL_INVALID_ENUM, kFunctionName, "invalid command");
-          return error::kNoError;
-      }
-    }
-  }
-
-  if (!num_coords_expected.IsValid() ||
-      num_coords != num_coords_expected.ValueOrDefault(0)) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
-                       "numCoords does not match commands");
-    return error::kNoError;
-  }
-
-  const void* coords = nullptr;
-
-  if (num_coords > 0) {
-    uint32_t coords_size = 0;
-    uint32_t coord_type_size =
-        GLES2Util::GetGLTypeSizeForPathCoordType(coord_type);
-    if (!base::CheckMul(num_coords, coord_type_size)
-             .AssignIfValid(&coords_size))
-      return error::kOutOfBounds;
-
-    uint32_t coords_shm_id = static_cast<uint32_t>(c.coords_shm_id);
-    uint32_t coords_shm_offset = static_cast<uint32_t>(c.coords_shm_offset);
-    if (coords_shm_id != 0 || coords_shm_offset != 0)
-      coords = GetSharedMemoryAs<const void*>(coords_shm_id, coords_shm_offset,
-                                              coords_size);
-
-    if (!coords)
-      return error::kOutOfBounds;
-  }
-
-  api()->glPathCommandsNVFn(service_id, num_commands, commands.get(),
-                            num_coords, coord_type, coords);
-
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandlePathParameterfCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glPathParameterfCHROMIUM";
-  const volatile gles2::cmds::PathParameterfCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::PathParameterfCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  GLuint service_id = 0;
-  if (!path_manager()->GetPath(static_cast<GLuint>(c.path), &service_id)) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
-                       "invalid path name");
-    return error::kNoError;
-  }
-
-  GLenum pname = static_cast<GLenum>(c.pname);
-  GLfloat value = static_cast<GLfloat>(c.value);
-  bool hasValueError = false;
-
-  switch (pname) {
-    case GL_PATH_STROKE_WIDTH_CHROMIUM:
-    case GL_PATH_MITER_LIMIT_CHROMIUM:
-      hasValueError = std::isnan(value) || !std::isfinite(value) || value < 0;
-      break;
-    case GL_PATH_STROKE_BOUND_CHROMIUM:
-      value = base::ClampToRange(value, 0.0f, 1.0f);
-      break;
-    case GL_PATH_END_CAPS_CHROMIUM:
-      hasValueError = !validators_->path_parameter_cap_values.IsValid(
-          static_cast<GLint>(value));
-      break;
-    case GL_PATH_JOIN_STYLE_CHROMIUM:
-      hasValueError = !validators_->path_parameter_join_values.IsValid(
-          static_cast<GLint>(value));
-      break;
-    default:
-      DCHECK(!validators_->path_parameter.IsValid(pname));
-      LOCAL_SET_GL_ERROR_INVALID_ENUM(kFunctionName, pname, "pname");
-      return error::kNoError;
-  }
-  DCHECK(validators_->path_parameter.IsValid(pname));
-
-  if (hasValueError) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "value not correct");
-    return error::kNoError;
-  }
-
-  api()->glPathParameterfNVFn(service_id, pname, value);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandlePathParameteriCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glPathParameteriCHROMIUM";
-  const volatile gles2::cmds::PathParameteriCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::PathParameteriCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  GLuint service_id = 0;
-  if (!path_manager()->GetPath(static_cast<GLuint>(c.path), &service_id)) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
-                       "invalid path name");
-    return error::kNoError;
-  }
-
-  GLenum pname = static_cast<GLenum>(c.pname);
-  GLint value = static_cast<GLint>(c.value);
-  bool hasValueError = false;
-
-  switch (pname) {
-    case GL_PATH_STROKE_WIDTH_CHROMIUM:
-    case GL_PATH_MITER_LIMIT_CHROMIUM:
-      hasValueError = value < 0;
-      break;
-    case GL_PATH_STROKE_BOUND_CHROMIUM:
-      value = base::ClampToRange(value, 0, 1);
-      break;
-    case GL_PATH_END_CAPS_CHROMIUM:
-      hasValueError = !validators_->path_parameter_cap_values.IsValid(value);
-      break;
-    case GL_PATH_JOIN_STYLE_CHROMIUM:
-      hasValueError = !validators_->path_parameter_join_values.IsValid(value);
-      break;
-    default:
-      DCHECK(!validators_->path_parameter.IsValid(pname));
-      LOCAL_SET_GL_ERROR_INVALID_ENUM(kFunctionName, pname, "pname");
-      return error::kNoError;
-  }
-  DCHECK(validators_->path_parameter.IsValid(pname));
-
-  if (hasValueError) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "value not correct");
-    return error::kNoError;
-  }
-
-  api()->glPathParameteriNVFn(service_id, pname, value);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleStencilFillPathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glStencilFillPathCHROMIUM";
-  const volatile gles2::cmds::StencilFillPathCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::StencilFillPathCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-  PathCommandValidatorContext v(this, kFunctionName);
-  GLenum fill_mode = GL_COUNT_UP_CHROMIUM;
-  GLuint mask = 0;
-  if (!v.GetFillModeAndMask(c, &fill_mode, &mask))
-    return v.error();
-  GLuint service_id = 0;
-  if (!path_manager()->GetPath(static_cast<GLuint>(c.path), &service_id)) {
-    // "If /path/ does not name an existing path object, the command does
-    // nothing (and no error is generated)."
-    // This holds for other rendering functions, too.
-    return error::kNoError;
-  }
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glStencilFillPathNVFn(service_id, fill_mode, mask);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleStencilStrokePathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glStencilStrokePathCHROMIUM";
-  const volatile gles2::cmds::StencilStrokePathCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::StencilStrokePathCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  GLuint service_id = 0;
-  if (!path_manager()->GetPath(static_cast<GLuint>(c.path), &service_id)) {
-    return error::kNoError;
-  }
-  GLint reference = static_cast<GLint>(c.reference);
-  GLuint mask = static_cast<GLuint>(c.mask);
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glStencilStrokePathNVFn(service_id, reference, mask);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleCoverFillPathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glCoverFillPathCHROMIUM";
-  const volatile gles2::cmds::CoverFillPathCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::CoverFillPathCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  PathCommandValidatorContext v(this, kFunctionName);
-  GLenum cover_mode = GL_BOUNDING_BOX_CHROMIUM;
-  if (!v.GetCoverMode(c, &cover_mode))
-    return v.error();
-
-  GLuint service_id = 0;
-  if (!path_manager()->GetPath(static_cast<GLuint>(c.path), &service_id))
-    return error::kNoError;
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glCoverFillPathNVFn(service_id, cover_mode);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleCoverStrokePathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glCoverStrokePathCHROMIUM";
-  const volatile gles2::cmds::CoverStrokePathCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::CoverStrokePathCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  PathCommandValidatorContext v(this, kFunctionName);
-  GLenum cover_mode = GL_BOUNDING_BOX_CHROMIUM;
-  if (!v.GetCoverMode(c, &cover_mode))
-    return v.error();
-
-  GLuint service_id = 0;
-  if (!path_manager()->GetPath(static_cast<GLuint>(c.path), &service_id))
-    return error::kNoError;
-
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glCoverStrokePathNVFn(service_id, cover_mode);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleStencilThenCoverFillPathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glStencilThenCoverFillPathCHROMIUM";
-  const volatile gles2::cmds::StencilThenCoverFillPathCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::StencilThenCoverFillPathCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  PathCommandValidatorContext v(this, kFunctionName);
-  GLenum fill_mode = GL_COUNT_UP_CHROMIUM;
-  GLuint mask = 0;
-  GLenum cover_mode = GL_BOUNDING_BOX_CHROMIUM;
-  if (!v.GetFillModeAndMask(c, &fill_mode, &mask) ||
-      !v.GetCoverMode(c, &cover_mode))
-    return v.error();
-
-  GLuint service_id = 0;
-  if (!path_manager()->GetPath(static_cast<GLuint>(c.path), &service_id))
-    return error::kNoError;
-
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glStencilThenCoverFillPathNVFn(service_id, fill_mode, mask,
-                                        cover_mode);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleStencilThenCoverStrokePathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glStencilThenCoverStrokePathCHROMIUM";
-  const volatile gles2::cmds::StencilThenCoverStrokePathCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::StencilThenCoverStrokePathCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  PathCommandValidatorContext v(this, kFunctionName);
-  GLenum cover_mode = GL_BOUNDING_BOX_CHROMIUM;
-  if (!v.GetCoverMode(c, &cover_mode))
-    return v.error();
-
-  GLuint service_id = 0;
-  if (!path_manager()->GetPath(static_cast<GLuint>(c.path), &service_id))
-    return error::kNoError;
-
-  GLint reference = static_cast<GLint>(c.reference);
-  GLuint mask = static_cast<GLuint>(c.mask);
-
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glStencilThenCoverStrokePathNVFn(service_id, reference, mask,
-                                          cover_mode);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleStencilFillPathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glStencilFillPathInstancedCHROMIUM";
-  const volatile gles2::cmds::StencilFillPathInstancedCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::StencilFillPathInstancedCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  PathCommandValidatorContext v(this, kFunctionName);
-  GLuint num_paths = 0;
-  GLenum path_name_type = GL_NONE;
-  GLenum fill_mode = GL_COUNT_UP_CHROMIUM;
-  GLuint mask = 0;
-  GLenum transform_type = GL_NONE;
-  if (!v.GetPathCountAndType(c, &num_paths, &path_name_type) ||
-      !v.GetFillModeAndMask(c, &fill_mode, &mask) ||
-      !v.GetTransformType(c, &transform_type))
-    return v.error();
-
-  if (num_paths == 0)
-    return error::kNoError;
-
-  std::unique_ptr<GLuint[]> paths;
-  if (!v.GetPathNameData(c, num_paths, path_name_type, &paths))
-    return v.error();
-
-  const GLfloat* transforms = nullptr;
-  if (!v.GetTransforms(c, num_paths, transform_type, &transforms))
-    return v.error();
-
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glStencilFillPathInstancedNVFn(num_paths, GL_UNSIGNED_INT, paths.get(),
-                                        0, fill_mode, mask, transform_type,
-                                        transforms);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleStencilStrokePathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glStencilStrokePathInstancedCHROMIUM";
-  const volatile gles2::cmds::StencilStrokePathInstancedCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::StencilStrokePathInstancedCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  PathCommandValidatorContext v(this, kFunctionName);
-  GLuint num_paths = 0;
-  GLenum path_name_type = GL_NONE;
-  GLenum transform_type = GL_NONE;
-  if (!v.GetPathCountAndType(c, &num_paths, &path_name_type) ||
-      !v.GetTransformType(c, &transform_type))
-    return v.error();
-
-  if (num_paths == 0)
-    return error::kNoError;
-
-  std::unique_ptr<GLuint[]> paths;
-  if (!v.GetPathNameData(c, num_paths, path_name_type, &paths))
-    return v.error();
-
-  const GLfloat* transforms = nullptr;
-  if (!v.GetTransforms(c, num_paths, transform_type, &transforms))
-    return v.error();
-
-  GLint reference = static_cast<GLint>(c.reference);
-  GLuint mask = static_cast<GLuint>(c.mask);
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glStencilStrokePathInstancedNVFn(num_paths, GL_UNSIGNED_INT,
-                                          paths.get(), 0, reference, mask,
-                                          transform_type, transforms);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleCoverFillPathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glCoverFillPathInstancedCHROMIUM";
-  const volatile gles2::cmds::CoverFillPathInstancedCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::CoverFillPathInstancedCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  PathCommandValidatorContext v(this, kFunctionName);
-  GLuint num_paths = 0;
-  GLenum path_name_type = GL_NONE;
-  GLenum cover_mode = GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM;
-  GLenum transform_type = GL_NONE;
-  if (!v.GetPathCountAndType(c, &num_paths, &path_name_type) ||
-      !v.GetCoverMode(c, &cover_mode) ||
-      !v.GetTransformType(c, &transform_type))
-    return v.error();
-
-  if (num_paths == 0)
-    return error::kNoError;
-
-  std::unique_ptr<GLuint[]> paths;
-  if (!v.GetPathNameData(c, num_paths, path_name_type, &paths))
-    return v.error();
-
-  const GLfloat* transforms = nullptr;
-  if (!v.GetTransforms(c, num_paths, transform_type, &transforms))
-    return v.error();
-
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glCoverFillPathInstancedNVFn(num_paths, GL_UNSIGNED_INT, paths.get(),
-                                      0, cover_mode, transform_type,
-                                      transforms);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleCoverStrokePathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glCoverStrokePathInstancedCHROMIUM";
-  const volatile gles2::cmds::CoverStrokePathInstancedCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::CoverStrokePathInstancedCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-
-  PathCommandValidatorContext v(this, kFunctionName);
-  GLuint num_paths = 0;
-  GLenum path_name_type = GL_NONE;
-  GLenum cover_mode = GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM;
-  GLenum transform_type = GL_NONE;
-  if (!v.GetPathCountAndType(c, &num_paths, &path_name_type) ||
-      !v.GetCoverMode(c, &cover_mode) ||
-      !v.GetTransformType(c, &transform_type))
-    return v.error();
-
-  if (num_paths == 0)
-    return error::kNoError;
-
-  std::unique_ptr<GLuint[]> paths;
-  if (!v.GetPathNameData(c, num_paths, path_name_type, &paths))
-    return v.error();
-
-  const GLfloat* transforms = nullptr;
-  if (!v.GetTransforms(c, num_paths, transform_type, &transforms))
-    return v.error();
-
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glCoverStrokePathInstancedNVFn(num_paths, GL_UNSIGNED_INT, paths.get(),
-                                        0, cover_mode, transform_type,
-                                        transforms);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleStencilThenCoverFillPathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] =
-      "glStencilThenCoverFillPathInstancedCHROMIUM";
-  const volatile gles2::cmds::StencilThenCoverFillPathInstancedCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::
-                       StencilThenCoverFillPathInstancedCHROMIUM*>(cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-  PathCommandValidatorContext v(this, kFunctionName);
-
-  GLuint num_paths = 0;
-  GLenum path_name_type = GL_NONE;
-  GLenum fill_mode = GL_COUNT_UP_CHROMIUM;
-  GLuint mask = 0;
-  GLenum cover_mode = GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM;
-  GLenum transform_type = GL_NONE;
-  if (!v.GetPathCountAndType(c, &num_paths, &path_name_type) ||
-      !v.GetFillModeAndMask(c, &fill_mode, &mask) ||
-      !v.GetCoverMode(c, &cover_mode) ||
-      !v.GetTransformType(c, &transform_type))
-    return v.error();
-
-  if (num_paths == 0)
-    return error::kNoError;
-
-  std::unique_ptr<GLuint[]> paths;
-  if (!v.GetPathNameData(c, num_paths, path_name_type, &paths))
-    return v.error();
-
-  const GLfloat* transforms = nullptr;
-  if (!v.GetTransforms(c, num_paths, transform_type, &transforms))
-    return v.error();
-
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glStencilThenCoverFillPathInstancedNVFn(
-      num_paths, GL_UNSIGNED_INT, paths.get(), 0, fill_mode, mask, cover_mode,
-      transform_type, transforms);
-  return error::kNoError;
-}
-
-error::Error
-GLES2DecoderImpl::HandleStencilThenCoverStrokePathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] =
-      "glStencilThenCoverStrokeInstancedCHROMIUM";
-  const volatile gles2::cmds::StencilThenCoverStrokePathInstancedCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::
-                       StencilThenCoverStrokePathInstancedCHROMIUM*>(cmd_data);
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-  PathCommandValidatorContext v(this, kFunctionName);
-  GLuint num_paths = 0;
-  GLenum path_name_type = GL_NONE;
-  GLenum cover_mode = GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM;
-  GLenum transform_type = GL_NONE;
-  if (!v.GetPathCountAndType(c, &num_paths, &path_name_type) ||
-      !v.GetCoverMode(c, &cover_mode) ||
-      !v.GetTransformType(c, &transform_type))
-    return v.error();
-
-  if (num_paths == 0)
-    return error::kNoError;
-
-  std::unique_ptr<GLuint[]> paths;
-  if (!v.GetPathNameData(c, num_paths, path_name_type, &paths))
-    return v.error();
-
-  const GLfloat* transforms = nullptr;
-  if (!v.GetTransforms(c, num_paths, transform_type, &transforms))
-    return v.error();
-
-  GLint reference = static_cast<GLint>(c.reference);
-  GLuint mask = static_cast<GLuint>(c.mask);
-
-  if (!CheckBoundDrawFramebufferValid(kFunctionName))
-    return error::kNoError;
-  ApplyDirtyState();
-  api()->glStencilThenCoverStrokePathInstancedNVFn(
-      num_paths, GL_UNSIGNED_INT, paths.get(), 0, reference, mask, cover_mode,
-      transform_type, transforms);
-  return error::kNoError;
-}
-
-void GLES2DecoderImpl::DoBindFragmentInputLocationCHROMIUM(
-    GLuint program_id,
-    GLint location,
-    const std::string& name) {
-  static const char kFunctionName[] = "glBindFragmentInputLocationCHROMIUM";
-  if (!StringIsValidForGLES(name)) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "invalid character");
-    return;
-  }
-  if (ProgramManager::HasBuiltInPrefix(name)) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName, "reserved prefix");
-    return;
-  }
-  Program* program = GetProgram(program_id);
-  if (!program || program->IsDeleted()) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName, "invalid program");
-    return;
-  }
-  if (location < 0 ||
-      static_cast<uint32_t>(location) >= group_->max_varying_vectors() * 4) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
-                       "location out of range");
-    return;
-  }
-
-  program->SetFragmentInputLocationBinding(name, location);
-}
-
 const SamplerState& GLES2DecoderImpl::GetSamplerStateForTextureUnit(
     GLenum target, GLuint unit) {
   if (features().enable_samplers) {
@@ -20958,137 +19934,6 @@
       state_.color_clear_alpha, state_.depth_clear, state_.stencil_clear);
 }
 
-error::Error GLES2DecoderImpl::HandleBindFragmentInputLocationCHROMIUMBucket(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::BindFragmentInputLocationCHROMIUMBucket& c =
-      *static_cast<
-          const volatile gles2::cmds::BindFragmentInputLocationCHROMIUMBucket*>(
-          cmd_data);
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-
-  GLuint program = static_cast<GLuint>(c.program);
-  GLint location = static_cast<GLint>(c.location);
-  Bucket* bucket = GetBucket(c.name_bucket_id);
-  if (!bucket || bucket->size() == 0) {
-    return error::kInvalidArguments;
-  }
-  std::string name_str;
-  if (!bucket->GetAsString(&name_str)) {
-    return error::kInvalidArguments;
-  }
-  DoBindFragmentInputLocationCHROMIUM(program, location, name_str);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleProgramPathFragmentInputGenCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  static const char kFunctionName[] = "glProgramPathFragmentInputGenCHROMIUM";
-  const volatile gles2::cmds::ProgramPathFragmentInputGenCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::ProgramPathFragmentInputGenCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-
-  GLint program_id = static_cast<GLint>(c.program);
-
-  Program* program = GetProgram(program_id);
-  if (!program || !program->IsValid() || program->IsDeleted()) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName, "invalid program");
-    return error::kNoError;
-  }
-
-  GLenum gen_mode = static_cast<GLint>(c.genMode);
-  if (!validators_->path_fragment_input_gen_mode.IsValid(gen_mode)) {
-    LOCAL_SET_GL_ERROR_INVALID_ENUM(kFunctionName, gen_mode, "genMode");
-    return error::kNoError;
-  }
-
-  GLint components = static_cast<GLint>(c.components);
-  if (components < 0 || components > 4) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
-                       "components out of range");
-    return error::kNoError;
-  }
-
-  if ((components != 0 && gen_mode == GL_NONE) ||
-      (components == 0 && gen_mode != GL_NONE)) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
-                       "components and genMode do not match");
-    return error::kNoError;
-  }
-
-  GLint location = static_cast<GLint>(c.location);
-  if (program->IsInactiveFragmentInputLocationByFakeLocation(location))
-    return error::kNoError;
-
-  const Program::FragmentInputInfo* fragment_input_info =
-      program->GetFragmentInputInfoByFakeLocation(location);
-  if (!fragment_input_info) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName, "unknown location");
-    return error::kNoError;
-  }
-  GLint real_location = fragment_input_info->location;
-
-  const GLfloat* coeffs = nullptr;
-
-  if (components > 0) {
-    GLint components_needed = -1;
-
-    switch (fragment_input_info->type) {
-      case GL_FLOAT:
-        components_needed = 1;
-        break;
-      case GL_FLOAT_VEC2:
-        components_needed = 2;
-        break;
-      case GL_FLOAT_VEC3:
-        components_needed = 3;
-        break;
-      case GL_FLOAT_VEC4:
-        components_needed = 4;
-        break;
-      default:
-        LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
-                           "fragment input type is not single-precision "
-                           "floating-point scalar or vector");
-        return error::kNoError;
-    }
-
-    if (components_needed != components) {
-      LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
-                         "components does not match fragment input type");
-      return error::kNoError;
-    }
-    uint32_t coeffs_per_component =
-        GLES2Util::GetCoefficientCountForGLPathFragmentInputGenMode(gen_mode);
-    // The multiplication below will not overflow.
-    DCHECK(coeffs_per_component > 0 && coeffs_per_component <= 4);
-    DCHECK(components > 0 && components <= 4);
-    uint32_t coeffs_size = sizeof(GLfloat) * coeffs_per_component * components;
-
-    uint32_t coeffs_shm_id = static_cast<uint32_t>(c.coeffs_shm_id);
-    uint32_t coeffs_shm_offset = static_cast<uint32_t>(c.coeffs_shm_offset);
-
-    if (coeffs_shm_id != 0 || coeffs_shm_offset != 0) {
-      coeffs = GetSharedMemoryAs<const GLfloat*>(
-          coeffs_shm_id, coeffs_shm_offset, coeffs_size);
-    }
-
-    if (!coeffs) {
-      return error::kOutOfBounds;
-    }
-  }
-  api()->glProgramPathFragmentInputGenNVFn(program->service_id(), real_location,
-                                           gen_mode, components, coeffs);
-  return error::kNoError;
-}
-
 void GLES2DecoderImpl::RestoreAllExternalTextureBindingsIfNeeded() {
   if (texture_manager()->GetServiceIdGeneration() ==
       texture_manager_service_id_generation_)
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
index 64f70e4..f8be401 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -5263,105 +5263,6 @@
   return error::kNoError;
 }
 
-error::Error GLES2DecoderImpl::HandleMatrixLoadfCHROMIUMImmediate(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::MatrixLoadfCHROMIUMImmediate& c =
-      *static_cast<const volatile gles2::cmds::MatrixLoadfCHROMIUMImmediate*>(
-          cmd_data);
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-
-  GLenum matrixMode = static_cast<GLenum>(c.matrixMode);
-  uint32_t m_size;
-  if (!GLES2Util::ComputeDataSize<GLfloat, 16>(1, &m_size)) {
-    return error::kOutOfBounds;
-  }
-  if (m_size > immediate_data_size) {
-    return error::kOutOfBounds;
-  }
-  volatile const GLfloat* m = GetImmediateDataAs<volatile const GLfloat*>(
-      c, m_size, immediate_data_size);
-  if (!validators_->matrix_mode.IsValid(matrixMode)) {
-    LOCAL_SET_GL_ERROR_INVALID_ENUM("glMatrixLoadfCHROMIUM", matrixMode,
-                                    "matrixMode");
-    return error::kNoError;
-  }
-  if (m == nullptr) {
-    return error::kOutOfBounds;
-  }
-  DoMatrixLoadfCHROMIUM(matrixMode, m);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleMatrixLoadIdentityCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::MatrixLoadIdentityCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::MatrixLoadIdentityCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-
-  GLenum matrixMode = static_cast<GLenum>(c.matrixMode);
-  if (!validators_->matrix_mode.IsValid(matrixMode)) {
-    LOCAL_SET_GL_ERROR_INVALID_ENUM("glMatrixLoadIdentityCHROMIUM", matrixMode,
-                                    "matrixMode");
-    return error::kNoError;
-  }
-  DoMatrixLoadIdentityCHROMIUM(matrixMode);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleIsPathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::IsPathCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::IsPathCHROMIUM*>(cmd_data);
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-
-  GLuint path = c.path;
-  typedef cmds::IsPathCHROMIUM::Result Result;
-  Result* result_dst = GetSharedMemoryAs<Result*>(
-      c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
-  if (!result_dst) {
-    return error::kOutOfBounds;
-  }
-  *result_dst = DoIsPathCHROMIUM(path);
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandlePathStencilFuncCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::PathStencilFuncCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::PathStencilFuncCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-
-  GLenum func = static_cast<GLenum>(c.func);
-  GLint ref = static_cast<GLint>(c.ref);
-  GLuint mask = static_cast<GLuint>(c.mask);
-  if (!validators_->cmp_function.IsValid(func)) {
-    LOCAL_SET_GL_ERROR_INVALID_ENUM("glPathStencilFuncCHROMIUM", func, "func");
-    return error::kNoError;
-  }
-  if (state_.stencil_path_func != func || state_.stencil_path_ref != ref ||
-      state_.stencil_path_mask != mask) {
-    state_.stencil_path_func = func;
-    state_.stencil_path_ref = ref;
-    state_.stencil_path_mask = mask;
-    glPathStencilFuncNV(func, ref, mask);
-  }
-  return error::kNoError;
-}
-
 error::Error GLES2DecoderImpl::HandleContextVisibilityHintCHROMIUM(
     uint32_t immediate_data_size,
     const volatile void* cmd_data) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
index bc1be8b..ecad6a4 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -5008,232 +5008,6 @@
   return error::kNoError;
 }
 
-error::Error GLES2DecoderPassthroughImpl::DoMatrixLoadfCHROMIUM(
-    GLenum matrixMode,
-    const volatile GLfloat* m) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoMatrixLoadIdentityCHROMIUM(
-    GLenum matrixMode) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoGenPathsCHROMIUM(GLuint path,
-                                                             GLsizei range) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoDeletePathsCHROMIUM(GLuint path,
-                                                                GLsizei range) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoIsPathCHROMIUM(GLuint path,
-                                                           uint32_t* result) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoPathCommandsCHROMIUM(
-    GLuint path,
-    GLsizei numCommands,
-    const GLubyte* commands,
-    GLsizei numCoords,
-    GLenum coordType,
-    const GLvoid* coords,
-    GLsizei coords_bufsize) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoPathParameterfCHROMIUM(
-    GLuint path,
-    GLenum pname,
-    GLfloat value) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoPathParameteriCHROMIUM(
-    GLuint path,
-    GLenum pname,
-    GLint value) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoPathStencilFuncCHROMIUM(
-    GLenum func,
-    GLint ref,
-    GLuint mask) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoStencilFillPathCHROMIUM(
-    GLuint path,
-    GLenum fillMode,
-    GLuint mask) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoStencilStrokePathCHROMIUM(
-    GLuint path,
-    GLint reference,
-    GLuint mask) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoCoverFillPathCHROMIUM(
-    GLuint path,
-    GLenum coverMode) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoCoverStrokePathCHROMIUM(
-    GLuint path,
-    GLenum coverMode) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoStencilThenCoverFillPathCHROMIUM(
-    GLuint path,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoStencilThenCoverStrokePathCHROMIUM(
-    GLuint path,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoStencilFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLsizei pathsBufsize,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues,
-    GLsizei transformValuesBufsize) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoStencilStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLsizei pathsBufsize,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum transformType,
-    const GLfloat* transformValues,
-    GLsizei transformValuesBufsize) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoCoverFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLsizei pathsBufsize,
-    GLuint pathBase,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues,
-    GLsizei transformValuesBufsize) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoCoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLsizei pathsBufsize,
-    GLuint pathBase,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues,
-    GLsizei transformValuesBufsize) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::DoStencilThenCoverFillPathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLsizei pathsBufsize,
-    GLuint pathBase,
-    GLenum fillMode,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues,
-    GLsizei transformValuesBufsize) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::DoStencilThenCoverStrokePathInstancedCHROMIUM(
-    GLsizei numPaths,
-    GLenum pathNameType,
-    const GLvoid* paths,
-    GLsizei pathsBufsize,
-    GLuint pathBase,
-    GLint reference,
-    GLuint mask,
-    GLenum coverMode,
-    GLenum transformType,
-    const GLfloat* transformValues,
-    GLsizei transformValuesBufsize) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoBindFragmentInputLocationCHROMIUM(
-    GLuint program,
-    GLint location,
-    const char* name) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::DoProgramPathFragmentInputGenCHROMIUM(
-    GLuint program,
-    GLint location,
-    GLenum genMode,
-    GLint components,
-    const GLfloat* coeffs,
-    GLsizei coeffsBufsize) {
-  NOTIMPLEMENTED();
-  return error::kNoError;
-}
-
 error::Error GLES2DecoderPassthroughImpl::DoCoverageModulationCHROMIUM(
     GLenum components) {
   NOTIMPLEMENTED();
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
index 25fac805..d681ee6 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
@@ -2316,586 +2316,6 @@
   return DoSetColorSpaceMetadataCHROMIUM(texture_id, color_space);
 }
 
-error::Error GLES2DecoderPassthroughImpl::HandleGenPathsCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::GenPathsCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::GenPathsCHROMIUM*>(cmd_data);
-  GLuint path = static_cast<GLuint>(c.first_client_id);
-  GLsizei range = static_cast<GLsizei>(c.range);
-
-  return DoGenPathsCHROMIUM(path, range);
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandleDeletePathsCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::DeletePathsCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::DeletePathsCHROMIUM*>(cmd_data);
-  GLuint path = static_cast<GLuint>(c.first_client_id);
-  GLsizei range = static_cast<GLsizei>(c.range);
-
-  return DoDeletePathsCHROMIUM(path, range);
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandlePathCommandsCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::PathCommandsCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::PathCommandsCHROMIUM*>(cmd_data);
-  GLuint path = static_cast<GLuint>(c.path);
-  GLsizei num_commands = static_cast<GLsizei>(c.numCommands);
-  GLsizei num_coords = static_cast<GLsizei>(c.numCoords);
-  GLenum coord_type = static_cast<GLenum>(c.coordType);
-  uint32_t commands_shm_id = c.commands_shm_id;
-  uint32_t commands_shm_offset = c.commands_shm_offset;
-  uint32_t coords_shm_id = c.coords_shm_id;
-  uint32_t coords_shm_offset = c.coords_shm_offset;
-
-  const GLubyte* commands = nullptr;
-  if (num_commands > 0) {
-    if (commands_shm_id != 0 || commands_shm_offset != 0) {
-      commands = GetSharedMemoryAs<const GLubyte*>(
-          commands_shm_id, commands_shm_offset, num_commands);
-    }
-    if (!commands) {
-      return error::kOutOfBounds;
-    }
-  }
-  const GLvoid* coords = nullptr;
-  GLsizei coords_bufsize = 0;
-  if (num_coords > 0) {
-    if (coords_shm_id != 0 || coords_shm_offset != 0) {
-      unsigned int memory_size = 0;
-      coords = GetSharedMemoryAndSizeAs<const GLvoid*>(
-          coords_shm_id, coords_shm_offset, 0, &memory_size);
-      coords_bufsize = static_cast<GLsizei>(memory_size);
-    }
-
-    if (!coords) {
-      return error::kOutOfBounds;
-    }
-  }
-
-  return DoPathCommandsCHROMIUM(path, num_commands, commands, num_coords,
-                                coord_type, coords, coords_bufsize);
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandlePathParameterfCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::PathParameterfCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::PathParameterfCHROMIUM*>(
-          cmd_data);
-  GLuint path = static_cast<GLuint>(c.path);
-  GLenum pname = static_cast<GLenum>(c.pname);
-  GLfloat value = static_cast<GLfloat>(c.value);
-
-  return DoPathParameterfCHROMIUM(path, pname, value);
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandlePathParameteriCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::PathParameteriCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::PathParameteriCHROMIUM*>(
-          cmd_data);
-  GLuint path = static_cast<GLuint>(c.path);
-  GLenum pname = static_cast<GLenum>(c.pname);
-  GLint value = static_cast<GLint>(c.value);
-
-  return DoPathParameteriCHROMIUM(path, pname, value);
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandleStencilFillPathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-  const volatile gles2::cmds::StencilFillPathCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::StencilFillPathCHROMIUM*>(
-          cmd_data);
-  GLuint path = static_cast<GLuint>(c.path);
-  GLenum fill_mode = static_cast<GLenum>(c.fillMode);
-  GLuint mask = static_cast<GLuint>(c.mask);
-
-  return DoStencilFillPathCHROMIUM(path, fill_mode, mask);
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandleStencilStrokePathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::StencilStrokePathCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::StencilStrokePathCHROMIUM*>(
-          cmd_data);
-  GLuint path = static_cast<GLuint>(c.path);
-  GLint reference = static_cast<GLint>(c.reference);
-  GLuint mask = static_cast<GLuint>(c.mask);
-
-  return DoStencilStrokePathCHROMIUM(path, reference, mask);
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandleCoverFillPathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-  const volatile gles2::cmds::CoverFillPathCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::CoverFillPathCHROMIUM*>(
-          cmd_data);
-  GLuint path = static_cast<GLuint>(c.path);
-  GLenum cover_mode = static_cast<GLenum>(c.coverMode);
-
-  return DoCoverFillPathCHROMIUM(path, cover_mode);
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandleCoverStrokePathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::CoverStrokePathCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::CoverStrokePathCHROMIUM*>(
-          cmd_data);
-  GLuint path = static_cast<GLuint>(c.path);
-  GLenum cover_mode = static_cast<GLenum>(c.coverMode);
-
-  return DoCoverStrokePathCHROMIUM(path, cover_mode);
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::HandleStencilThenCoverFillPathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering)
-    return error::kUnknownCommand;
-  const volatile gles2::cmds::StencilThenCoverFillPathCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::StencilThenCoverFillPathCHROMIUM*>(
-          cmd_data);
-  GLuint path = static_cast<GLuint>(c.path);
-  GLenum fill_mode = static_cast<GLenum>(c.fillMode);
-  GLuint mask = static_cast<GLuint>(c.mask);
-  GLenum cover_mode = static_cast<GLenum>(c.coverMode);
-
-  return DoStencilThenCoverFillPathCHROMIUM(path, fill_mode, mask, cover_mode);
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::HandleStencilThenCoverStrokePathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::StencilThenCoverStrokePathCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::StencilThenCoverStrokePathCHROMIUM*>(
-          cmd_data);
-  GLuint path = static_cast<GLuint>(c.path);
-  GLint reference = static_cast<GLint>(c.reference);
-  GLuint mask = static_cast<GLuint>(c.mask);
-  GLenum cover_mode = static_cast<GLenum>(c.coverMode);
-
-  return DoStencilThenCoverStrokePathCHROMIUM(path, reference, mask,
-                                              cover_mode);
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::HandleStencilFillPathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::StencilFillPathInstancedCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::StencilFillPathInstancedCHROMIUM*>(
-          cmd_data);
-  GLsizei num_paths = static_cast<GLsizei>(c.numPaths);
-  GLenum path_name_type = static_cast<GLuint>(c.pathNameType);
-  GLuint path_base = static_cast<GLuint>(c.pathBase);
-  GLenum fill_mode = static_cast<GLenum>(c.fillMode);
-  GLuint mask = static_cast<GLuint>(c.mask);
-  GLenum transform_type = static_cast<GLuint>(c.transformType);
-  uint32_t paths_shm_id = c.paths_shm_id;
-  uint32_t paths_shm_offset = c.paths_shm_offset;
-  uint32_t transform_values_shm_id = c.transformValues_shm_id;
-  uint32_t transform_values_shm_offset = c.transformValues_shm_offset;
-
-  const GLvoid* paths = nullptr;
-  GLsizei paths_bufsize = 0;
-  if (num_paths > 0) {
-    if (paths_shm_id != 0 || paths_shm_offset != 0) {
-      unsigned int memory_size = 0;
-      paths = GetSharedMemoryAndSizeAs<const GLvoid*>(
-          paths_shm_id, paths_shm_offset, 0, &memory_size);
-      paths_bufsize = static_cast<GLsizei>(memory_size);
-    }
-
-    if (!paths) {
-      return error::kOutOfBounds;
-    }
-  }
-  const GLfloat* transform_values = nullptr;
-  GLsizei transform_values_bufsize = 0;
-  if (transform_values_shm_id != 0 || transform_values_shm_offset != 0) {
-    unsigned int memory_size = 0;
-    transform_values = GetSharedMemoryAndSizeAs<const GLfloat*>(
-        transform_values_shm_id, transform_values_shm_offset, 0, &memory_size);
-    transform_values_bufsize = static_cast<GLsizei>(memory_size);
-  }
-  if (!transform_values) {
-    return error::kOutOfBounds;
-  }
-
-  return DoStencilFillPathInstancedCHROMIUM(
-      num_paths, path_name_type, paths, paths_bufsize, path_base, fill_mode,
-      mask, transform_type, transform_values, transform_values_bufsize);
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::HandleStencilStrokePathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::StencilStrokePathInstancedCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::StencilStrokePathInstancedCHROMIUM*>(
-          cmd_data);
-  GLsizei num_paths = static_cast<GLsizei>(c.numPaths);
-  GLenum path_name_type = static_cast<GLuint>(c.pathNameType);
-  GLuint path_base = static_cast<GLuint>(c.pathBase);
-  GLint reference = static_cast<GLint>(c.reference);
-  GLuint mask = static_cast<GLuint>(c.mask);
-  GLenum transform_type = static_cast<GLuint>(c.transformType);
-  uint32_t paths_shm_id = c.paths_shm_id;
-  uint32_t paths_shm_offset = c.paths_shm_offset;
-  uint32_t transform_values_shm_id = c.transformValues_shm_id;
-  uint32_t transform_values_shm_offset = c.transformValues_shm_offset;
-
-  const GLvoid* paths = nullptr;
-  GLsizei paths_bufsize = 0;
-  if (num_paths > 0) {
-    if (paths_shm_id != 0 || paths_shm_offset != 0) {
-      unsigned int memory_size = 0;
-      paths = GetSharedMemoryAndSizeAs<const GLvoid*>(
-          paths_shm_id, paths_shm_offset, 0, &memory_size);
-      paths_bufsize = static_cast<GLsizei>(memory_size);
-    }
-
-    if (!paths) {
-      return error::kOutOfBounds;
-    }
-  }
-  const GLfloat* transform_values = nullptr;
-  GLsizei transform_values_bufsize = 0;
-  if (transform_values_shm_id != 0 || transform_values_shm_offset != 0) {
-    unsigned int memory_size = 0;
-    transform_values = GetSharedMemoryAndSizeAs<const GLfloat*>(
-        transform_values_shm_id, transform_values_shm_offset, 0, &memory_size);
-    transform_values_bufsize = static_cast<GLsizei>(memory_size);
-  }
-  if (!transform_values) {
-    return error::kOutOfBounds;
-  }
-
-  return DoStencilStrokePathInstancedCHROMIUM(
-      num_paths, path_name_type, paths, paths_bufsize, path_base, reference,
-      mask, transform_type, transform_values, transform_values_bufsize);
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandleCoverFillPathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::CoverFillPathInstancedCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::CoverFillPathInstancedCHROMIUM*>(
-          cmd_data);
-  GLsizei num_paths = static_cast<GLsizei>(c.numPaths);
-  GLenum path_name_type = static_cast<GLuint>(c.pathNameType);
-  GLuint path_base = static_cast<GLuint>(c.pathBase);
-  GLenum cover_mode = static_cast<GLenum>(c.coverMode);
-  GLenum transform_type = static_cast<GLuint>(c.transformType);
-  uint32_t paths_shm_id = c.paths_shm_id;
-  uint32_t paths_shm_offset = c.paths_shm_offset;
-  uint32_t transform_values_shm_id = c.transformValues_shm_id;
-  uint32_t transform_values_shm_offset = c.transformValues_shm_offset;
-
-  const GLvoid* paths = nullptr;
-  GLsizei paths_bufsize = 0;
-  if (num_paths > 0) {
-    if (paths_shm_id != 0 || paths_shm_offset != 0) {
-      unsigned int memory_size = 0;
-      paths = GetSharedMemoryAndSizeAs<const GLvoid*>(
-          paths_shm_id, paths_shm_offset, 0, &memory_size);
-      paths_bufsize = static_cast<GLsizei>(memory_size);
-    }
-
-    if (!paths) {
-      return error::kOutOfBounds;
-    }
-  }
-  const GLfloat* transform_values = nullptr;
-  GLsizei transform_values_bufsize = 0;
-  if (transform_values_shm_id != 0 || transform_values_shm_offset != 0) {
-    unsigned int memory_size = 0;
-    transform_values = GetSharedMemoryAndSizeAs<const GLfloat*>(
-        transform_values_shm_id, transform_values_shm_offset, 0, &memory_size);
-    transform_values_bufsize = static_cast<GLsizei>(memory_size);
-  }
-  if (!transform_values) {
-    return error::kOutOfBounds;
-  }
-
-  return DoCoverFillPathInstancedCHROMIUM(
-      num_paths, path_name_type, paths, paths_bufsize, path_base, cover_mode,
-      transform_type, transform_values, transform_values_bufsize);
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::HandleCoverStrokePathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::CoverStrokePathInstancedCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::CoverStrokePathInstancedCHROMIUM*>(
-          cmd_data);
-  GLsizei num_paths = static_cast<GLsizei>(c.numPaths);
-  GLenum path_name_type = static_cast<GLuint>(c.pathNameType);
-  GLuint path_base = static_cast<GLuint>(c.pathBase);
-  GLenum cover_mode = static_cast<GLenum>(c.coverMode);
-  GLenum transform_type = static_cast<GLuint>(c.transformType);
-  uint32_t paths_shm_id = c.paths_shm_id;
-  uint32_t paths_shm_offset = c.paths_shm_offset;
-  uint32_t transform_values_shm_id = c.transformValues_shm_id;
-  uint32_t transform_values_shm_offset = c.transformValues_shm_offset;
-
-  const GLvoid* paths = nullptr;
-  GLsizei paths_bufsize = 0;
-  if (num_paths > 0) {
-    if (paths_shm_id != 0 || paths_shm_offset != 0) {
-      unsigned int memory_size = 0;
-      paths = GetSharedMemoryAndSizeAs<const GLvoid*>(
-          paths_shm_id, paths_shm_offset, 0, &memory_size);
-      paths_bufsize = static_cast<GLsizei>(memory_size);
-    }
-
-    if (!paths) {
-      return error::kOutOfBounds;
-    }
-  }
-  const GLfloat* transform_values = nullptr;
-  GLsizei transform_values_bufsize = 0;
-  if (transform_values_shm_id != 0 || transform_values_shm_offset != 0) {
-    unsigned int memory_size = 0;
-    transform_values = GetSharedMemoryAndSizeAs<const GLfloat*>(
-        transform_values_shm_id, transform_values_shm_offset, 0, &memory_size);
-    transform_values_bufsize = static_cast<GLsizei>(memory_size);
-  }
-  if (!transform_values) {
-    return error::kOutOfBounds;
-  }
-
-  return DoCoverStrokePathInstancedCHROMIUM(
-      num_paths, path_name_type, paths, paths_bufsize, path_base, cover_mode,
-      transform_type, transform_values, transform_values_bufsize);
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::HandleStencilThenCoverFillPathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::StencilThenCoverFillPathInstancedCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::
-                       StencilThenCoverFillPathInstancedCHROMIUM*>(cmd_data);
-  GLsizei num_paths = static_cast<GLsizei>(c.numPaths);
-  GLenum path_name_type = static_cast<GLuint>(c.pathNameType);
-  GLuint path_base = static_cast<GLuint>(c.pathBase);
-  GLenum cover_mode = static_cast<GLenum>(c.coverMode);
-  GLenum fill_mode = static_cast<GLenum>(c.fillMode);
-  GLuint mask = static_cast<GLuint>(c.mask);
-  GLenum transform_type = static_cast<GLuint>(c.transformType);
-  uint32_t paths_shm_id = c.paths_shm_id;
-  uint32_t paths_shm_offset = c.paths_shm_offset;
-  uint32_t transform_values_shm_id = c.transformValues_shm_id;
-  uint32_t transform_values_shm_offset = c.transformValues_shm_offset;
-
-  const GLvoid* paths = nullptr;
-  GLsizei paths_bufsize = 0;
-  if (num_paths > 0) {
-    if (paths_shm_id != 0 || paths_shm_offset != 0) {
-      unsigned int memory_size = 0;
-      paths = GetSharedMemoryAndSizeAs<const GLvoid*>(
-          paths_shm_id, paths_shm_offset, 0, &memory_size);
-      paths_bufsize = static_cast<GLsizei>(memory_size);
-    }
-
-    if (!paths) {
-      return error::kOutOfBounds;
-    }
-  }
-  const GLfloat* transform_values = nullptr;
-  GLsizei transform_values_bufsize = 0;
-  if (transform_values_shm_id != 0 || transform_values_shm_offset != 0) {
-    unsigned int memory_size = 0;
-    transform_values = GetSharedMemoryAndSizeAs<const GLfloat*>(
-        transform_values_shm_id, transform_values_shm_offset, 0, &memory_size);
-    transform_values_bufsize = static_cast<GLsizei>(memory_size);
-  }
-  if (!transform_values) {
-    return error::kOutOfBounds;
-  }
-
-  return DoStencilThenCoverFillPathInstancedCHROMIUM(
-      num_paths, path_name_type, paths, paths_bufsize, path_base, cover_mode,
-      fill_mode, mask, transform_type, transform_values,
-      transform_values_bufsize);
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::HandleStencilThenCoverStrokePathInstancedCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::StencilThenCoverStrokePathInstancedCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::
-                       StencilThenCoverStrokePathInstancedCHROMIUM*>(cmd_data);
-  GLsizei num_paths = static_cast<GLsizei>(c.numPaths);
-  GLenum path_name_type = static_cast<GLuint>(c.pathNameType);
-  GLuint path_base = static_cast<GLuint>(c.pathBase);
-  GLenum cover_mode = static_cast<GLenum>(c.coverMode);
-  GLint reference = static_cast<GLint>(c.reference);
-  GLuint mask = static_cast<GLuint>(c.mask);
-  GLenum transform_type = static_cast<GLuint>(c.transformType);
-  uint32_t paths_shm_id = c.paths_shm_id;
-  uint32_t paths_shm_offset = c.paths_shm_offset;
-  uint32_t transform_values_shm_id = c.transformValues_shm_id;
-  uint32_t transform_values_shm_offset = c.transformValues_shm_offset;
-
-  const GLvoid* paths = nullptr;
-  GLsizei paths_bufsize = 0;
-  if (num_paths > 0) {
-    if (paths_shm_id != 0 || paths_shm_offset != 0) {
-      unsigned int memory_size = 0;
-      paths = GetSharedMemoryAndSizeAs<const GLvoid*>(
-          paths_shm_id, paths_shm_offset, 0, &memory_size);
-      paths_bufsize = static_cast<GLsizei>(memory_size);
-    }
-
-    if (!paths) {
-      return error::kOutOfBounds;
-    }
-  }
-  const GLfloat* transform_values = nullptr;
-  GLsizei transform_values_bufsize = 0;
-  if (transform_values_shm_id != 0 || transform_values_shm_offset != 0) {
-    unsigned int memory_size = 0;
-    transform_values = GetSharedMemoryAndSizeAs<const GLfloat*>(
-        transform_values_shm_id, transform_values_shm_offset, 0, &memory_size);
-    transform_values_bufsize = static_cast<GLsizei>(memory_size);
-  }
-  if (!transform_values) {
-    return error::kOutOfBounds;
-  }
-
-  return DoStencilThenCoverStrokePathInstancedCHROMIUM(
-      num_paths, path_name_type, paths, paths_bufsize, path_base, cover_mode,
-      reference, mask, transform_type, transform_values,
-      transform_values_bufsize);
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::HandleBindFragmentInputLocationCHROMIUMBucket(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::BindFragmentInputLocationCHROMIUMBucket& c =
-      *static_cast<
-          const volatile gles2::cmds::BindFragmentInputLocationCHROMIUMBucket*>(
-          cmd_data);
-  GLuint program = static_cast<GLuint>(c.program);
-  GLint location = static_cast<GLint>(c.location);
-  uint32_t name_bucket_id = c.name_bucket_id;
-
-  Bucket* bucket = GetBucket(name_bucket_id);
-  if (!bucket || bucket->size() == 0) {
-    return error::kInvalidArguments;
-  }
-  std::string name_str;
-  if (!bucket->GetAsString(&name_str)) {
-    return error::kInvalidArguments;
-  }
-  return DoBindFragmentInputLocationCHROMIUM(program, location,
-                                             name_str.c_str());
-}
-
-error::Error
-GLES2DecoderPassthroughImpl::HandleProgramPathFragmentInputGenCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-  const volatile gles2::cmds::ProgramPathFragmentInputGenCHROMIUM& c =
-      *static_cast<
-          const volatile gles2::cmds::ProgramPathFragmentInputGenCHROMIUM*>(
-          cmd_data);
-  GLint program = static_cast<GLint>(c.program);
-  GLint location = static_cast<GLint>(c.location);
-  GLenum gen_mode = static_cast<GLint>(c.genMode);
-  GLint components = static_cast<GLint>(c.components);
-  uint32_t coeffs_shm_id = c.coeffs_shm_id;
-  uint32_t coeffs_shm_offset = c.coeffs_shm_offset;
-
-  const GLfloat* coeffs = nullptr;
-  GLsizei coeffs_bufsize = 0;
-  if (coeffs_shm_id != 0 || coeffs_shm_offset != 0) {
-    unsigned int memory_size = 0;
-    coeffs = GetSharedMemoryAndSizeAs<const GLfloat*>(
-        coeffs_shm_id, coeffs_shm_offset, 0, &memory_size);
-    coeffs_bufsize = static_cast<GLsizei>(memory_size);
-  }
-  if (!coeffs) {
-    return error::kOutOfBounds;
-  }
-  return DoProgramPathFragmentInputGenCHROMIUM(
-      program, location, gen_mode, components, coeffs, coeffs_bufsize);
-}
-
 error::Error
 GLES2DecoderPassthroughImpl::HandleBindFragDataLocationIndexedEXTBucket(
     uint32_t immediate_data_size,
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
index e37bafd..7e7ca53 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
@@ -4522,97 +4522,6 @@
   return error::kNoError;
 }
 
-error::Error GLES2DecoderPassthroughImpl::HandleMatrixLoadfCHROMIUMImmediate(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::MatrixLoadfCHROMIUMImmediate& c =
-      *static_cast<const volatile gles2::cmds::MatrixLoadfCHROMIUMImmediate*>(
-          cmd_data);
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-
-  GLenum matrixMode = static_cast<GLenum>(c.matrixMode);
-  uint32_t m_size;
-  if (!GLES2Util::ComputeDataSize<GLfloat, 16>(1, &m_size)) {
-    return error::kOutOfBounds;
-  }
-  if (m_size > immediate_data_size) {
-    return error::kOutOfBounds;
-  }
-  volatile const GLfloat* m = GetImmediateDataAs<volatile const GLfloat*>(
-      c, m_size, immediate_data_size);
-  if (m == nullptr) {
-    return error::kOutOfBounds;
-  }
-  error::Error error = DoMatrixLoadfCHROMIUM(matrixMode, m);
-  if (error != error::kNoError) {
-    return error;
-  }
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandleMatrixLoadIdentityCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::MatrixLoadIdentityCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::MatrixLoadIdentityCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-
-  GLenum matrixMode = static_cast<GLenum>(c.matrixMode);
-  error::Error error = DoMatrixLoadIdentityCHROMIUM(matrixMode);
-  if (error != error::kNoError) {
-    return error;
-  }
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandleIsPathCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::IsPathCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::IsPathCHROMIUM*>(cmd_data);
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-
-  GLuint path = c.path;
-  typedef cmds::IsPathCHROMIUM::Result Result;
-  Result* result = GetSharedMemoryAs<Result*>(
-      c.result_shm_id, c.result_shm_offset, sizeof(*result));
-  if (!result) {
-    return error::kOutOfBounds;
-  }
-  error::Error error = DoIsPathCHROMIUM(path, result);
-  if (error != error::kNoError) {
-    return error;
-  }
-  return error::kNoError;
-}
-
-error::Error GLES2DecoderPassthroughImpl::HandlePathStencilFuncCHROMIUM(
-    uint32_t immediate_data_size,
-    const volatile void* cmd_data) {
-  const volatile gles2::cmds::PathStencilFuncCHROMIUM& c =
-      *static_cast<const volatile gles2::cmds::PathStencilFuncCHROMIUM*>(
-          cmd_data);
-  if (!features().chromium_path_rendering) {
-    return error::kUnknownCommand;
-  }
-
-  GLenum func = static_cast<GLenum>(c.func);
-  GLint ref = static_cast<GLint>(c.ref);
-  GLuint mask = static_cast<GLuint>(c.mask);
-  error::Error error = DoPathStencilFuncCHROMIUM(func, ref, mask);
-  if (error != error::kNoError) {
-    return error;
-  }
-  return error::kNoError;
-}
-
 error::Error GLES2DecoderPassthroughImpl::HandleContextVisibilityHintCHROMIUM(
     uint32_t immediate_data_size,
     const volatile void* cmd_data) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions.cc
index 6477d34..978a837 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions.cc
@@ -34,453 +34,6 @@
                          GLES2DecoderTestDisabledExtensions,
                          ::testing::Bool());
 
-TEST_P(GLES2DecoderTestDisabledExtensions, CHROMIUMPathRenderingDisabled) {
-  const GLuint kClientPathId = 0;
-  {
-    cmds::MatrixLoadfCHROMIUMImmediate& cmd =
-        *GetImmediateAs<cmds::MatrixLoadfCHROMIUMImmediate>();
-    GLfloat temp[16] = {
-        0,
-    };
-    cmd.Init(GL_PATH_MODELVIEW_CHROMIUM, temp);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp)));
-  }
-  {
-    cmds::MatrixLoadIdentityCHROMIUM cmd;
-    cmd.Init(GL_PATH_PROJECTION_CHROMIUM);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::GenPathsCHROMIUM cmd;
-    cmd.Init(0, 0);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::DeletePathsCHROMIUM cmd;
-    cmd.Init(0, 0);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::IsPathCHROMIUM cmd;
-    cmd.Init(kClientPathId, shared_memory_id_, shared_memory_offset_);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::PathCommandsCHROMIUM cmd;
-    cmd.Init(kClientPathId, 0, 0, 0, 0, GL_FLOAT, 0, 0);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::PathParameterfCHROMIUM cmd;
-    cmd.Init(kClientPathId, GL_PATH_STROKE_WIDTH_CHROMIUM, 1.0f);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::PathParameteriCHROMIUM cmd;
-    cmd.Init(kClientPathId, GL_PATH_STROKE_WIDTH_CHROMIUM, 1);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::PathStencilFuncCHROMIUM cmd;
-    cmd.Init(GL_NEVER, 2, 3);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::StencilFillPathCHROMIUM cmd;
-    cmd.Init(kClientPathId, GL_COUNT_UP_CHROMIUM, 1);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::StencilStrokePathCHROMIUM cmd;
-    cmd.Init(kClientPathId, 1, 2);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::CoverFillPathCHROMIUM cmd;
-    cmd.Init(kClientPathId, GL_BOUNDING_BOX_CHROMIUM);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::CoverStrokePathCHROMIUM cmd;
-    cmd.Init(kClientPathId, GL_BOUNDING_BOX_CHROMIUM);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::StencilThenCoverFillPathCHROMIUM cmd;
-    cmd.Init(kClientPathId, GL_COUNT_UP_CHROMIUM, 1, GL_BOUNDING_BOX_CHROMIUM);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::StencilThenCoverStrokePathCHROMIUM cmd;
-    cmd.Init(kClientPathId, 1, 2, GL_BOUNDING_BOX_CHROMIUM);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::StencilFillPathInstancedCHROMIUM cmd;
-    GLuint* paths = GetSharedMemoryAs<GLuint*>();
-    paths[0] = kClientPathId;
-    cmd.Init(1, GL_UNSIGNED_INT, shared_memory_id_, shared_memory_offset_, 0,
-             GL_COUNT_UP_CHROMIUM, 1, GL_NONE, 0, 0);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::StencilStrokePathInstancedCHROMIUM cmd;
-    GLuint* paths = GetSharedMemoryAs<GLuint*>();
-    paths[0] = kClientPathId;
-    cmd.Init(1, GL_UNSIGNED_INT, shared_memory_id_, shared_memory_offset_, 0,
-             0x80, 0x80, GL_NONE, 0, 0);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::CoverFillPathInstancedCHROMIUM cmd;
-    GLuint* paths = GetSharedMemoryAs<GLuint*>();
-    paths[0] = kClientPathId;
-    cmd.Init(1, GL_UNSIGNED_INT, shared_memory_id_, shared_memory_offset_, 0,
-             GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_NONE, 0, 0);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::CoverStrokePathInstancedCHROMIUM cmd;
-    GLuint* paths = GetSharedMemoryAs<GLuint*>();
-    paths[0] = kClientPathId;
-    cmd.Init(1, GL_UNSIGNED_INT, shared_memory_id_, shared_memory_offset_, 0,
-             GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_NONE, 0, 0);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::StencilThenCoverFillPathInstancedCHROMIUM cmd;
-    GLuint* paths = GetSharedMemoryAs<GLuint*>();
-    paths[0] = kClientPathId;
-    cmd.Init(1, GL_UNSIGNED_INT, shared_memory_id_, shared_memory_offset_, 0,
-             GL_COUNT_UP_CHROMIUM, 1,
-             GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_NONE, 0, 0);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::StencilThenCoverStrokePathInstancedCHROMIUM cmd;
-    GLuint* paths = GetSharedMemoryAs<GLuint*>();
-    paths[0] = kClientPathId;
-    cmd.Init(1, GL_UNSIGNED_INT, shared_memory_id_, shared_memory_offset_, 0,
-             0x80, 0x80, GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_NONE, 0,
-             0);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::BindFragmentInputLocationCHROMIUMBucket cmd;
-    const uint32_t kBucketId = 123;
-    const GLint kLocation = 2;
-    const char* kName = "testing";
-    SetBucketAsCString(kBucketId, kName);
-    cmd.Init(client_program_id_, kLocation, kBucketId);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-  {
-    cmds::ProgramPathFragmentInputGenCHROMIUM cmd;
-    const GLint kLocation = 2;
-    cmd.Init(client_program_id_, kLocation, 0, GL_NONE, 0, 0);
-    EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
-  }
-}
-
-class GLES2DecoderTestWithCHROMIUMPathRendering : public GLES2DecoderTest {
- public:
-  GLES2DecoderTestWithCHROMIUMPathRendering() : client_path_id_(125) {}
-
-  void SetUp() override {
-    InitState init;
-    init.gl_version = "OpenGL ES 3.1";
-    init.has_alpha = true;
-    init.has_depth = true;
-    init.request_alpha = true;
-    init.request_depth = true;
-    init.bind_generates_resource = true;
-    init.extensions = "GL_NV_path_rendering GL_NV_framebuffer_mixed_samples";
-    InitDecoder(init);
-
-    EXPECT_CALL(*gl_, GenPathsNV(1))
-        .WillOnce(Return(kServicePathId))
-        .RetiresOnSaturation();
-    cmds::GenPathsCHROMIUM cmd;
-    cmd.Init(client_path_id_, 1);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-
-    // The tests use client_path_id_ to test all sorts of drawing. The NVPR API
-    // behaves differently with a path name that is "used" but not which does
-    // not "allocate path object state" and a path name that is a name of a real
-    // path object. The drawing with former causes GL error while latter works
-    // ok, even if there is nothing in the actual path object. To remain
-    // compatible with the API, we allocate path object state even when using
-    // the mock API.
-    EXPECT_CALL(
-        *gl_, PathCommandsNV(kServicePathId, 0, nullptr, 0, GL_FLOAT, nullptr))
-        .RetiresOnSaturation();
-    cmds::PathCommandsCHROMIUM pcmd;
-    pcmd.Init(client_path_id_, 0, 0, 0, 0, GL_FLOAT, 0, 0);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(pcmd));
-  }
-
- protected:
-  template <typename TypeParam>
-  void TestPathCommandsCHROMIUMCoordTypes();
-
-  struct InstancedTestcase {
-    GLsizei num_paths;
-    GLenum path_name_type;
-    const void* paths;
-    GLuint path_base;
-    GLenum fill_mode;
-    GLuint reference;
-    GLuint mask;
-    GLenum transform_type;
-    const GLfloat* transform_values;
-    size_t sizeof_paths;             // Used for copying to shm buffer.
-    size_t sizeof_transform_values;  // Used for copying to shm buffer.
-    error::Error expected_error;
-    GLint expected_gl_error;
-    bool expect_gl_call;
-  };
-
-  void CallAllInstancedCommands(const InstancedTestcase& testcase) {
-    // Note: for testcases that expect a call, We do not compare the 'paths'
-    // array during EXPECT_CALL due to it being void*. Instead, we rely on the
-    // fact that if the path base was not added correctly, the paths wouldn't
-    // exists and the call wouldn't come through.
-
-    bool copy_paths = false;  // Paths are copied for each call that has paths,
-                              // since the implementation modifies the memory
-                              // area.
-    void* paths = nullptr;
-    uint32_t paths_shm_id = 0;
-    uint32_t paths_shm_offset = 0;
-    GLfloat* transforms = nullptr;
-    uint32_t transforms_shm_id = 0;
-    uint32_t transforms_shm_offset = 0;
-
-    if (testcase.transform_values) {
-      transforms = GetSharedMemoryAs<GLfloat*>();
-      transforms_shm_id = shared_memory_id_;
-      transforms_shm_offset = shared_memory_offset_;
-      memcpy(transforms, testcase.transform_values,
-             testcase.sizeof_transform_values);
-    } else {
-      DCHECK(testcase.sizeof_transform_values == 0);
-    }
-    if (testcase.paths) {
-      paths =
-          GetSharedMemoryAsWithOffset<void*>(testcase.sizeof_transform_values);
-      paths_shm_id = shared_memory_id_;
-      paths_shm_offset =
-          shared_memory_offset_ + testcase.sizeof_transform_values;
-      copy_paths = true;
-    } else {
-      DCHECK(testcase.sizeof_paths == 0);
-    }
-
-    if (testcase.expect_gl_call) {
-      EXPECT_CALL(*gl_, StencilFillPathInstancedNV(
-                            testcase.num_paths, GL_UNSIGNED_INT, _, 0,
-                            testcase.fill_mode, testcase.mask,
-                            testcase.transform_type, transforms))
-          .RetiresOnSaturation();
-    }
-    if (copy_paths) {
-      memcpy(paths, testcase.paths, testcase.sizeof_paths);
-    }
-    {
-      cmds::StencilFillPathInstancedCHROMIUM sfi_cmd;
-      sfi_cmd.Init(testcase.num_paths, testcase.path_name_type, paths_shm_id,
-                   paths_shm_offset, testcase.path_base, testcase.fill_mode,
-                   testcase.mask, testcase.transform_type, transforms_shm_id,
-                   transforms_shm_offset);
-      EXPECT_EQ(testcase.expected_error, ExecuteCmd(sfi_cmd));
-      EXPECT_EQ(testcase.expected_gl_error, GetGLError());
-    }
-
-    if (testcase.expect_gl_call) {
-      EXPECT_CALL(*gl_, StencilStrokePathInstancedNV(
-                            testcase.num_paths, GL_UNSIGNED_INT, _, 0,
-                            testcase.reference, testcase.mask,
-                            testcase.transform_type, transforms))
-          .RetiresOnSaturation();
-    }
-    if (copy_paths) {
-      memcpy(paths, testcase.paths, testcase.sizeof_paths);
-    }
-    {
-      cmds::StencilStrokePathInstancedCHROMIUM ssi_cmd;
-      ssi_cmd.Init(testcase.num_paths, testcase.path_name_type, paths_shm_id,
-                   paths_shm_offset, testcase.path_base, testcase.reference,
-                   testcase.mask, testcase.transform_type, transforms_shm_id,
-                   transforms_shm_offset);
-      EXPECT_EQ(testcase.expected_error, ExecuteCmd(ssi_cmd));
-      EXPECT_EQ(testcase.expected_gl_error, GetGLError());
-    }
-
-    if (testcase.expect_gl_call) {
-      EXPECT_CALL(*gl_, CoverFillPathInstancedNV(
-                            testcase.num_paths, GL_UNSIGNED_INT, _, 0,
-                            GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV,
-                            testcase.transform_type, transforms))
-          .RetiresOnSaturation();
-    }
-    if (copy_paths) {
-      memcpy(paths, testcase.paths, testcase.sizeof_paths);
-    }
-    {
-      cmds::CoverFillPathInstancedCHROMIUM cfi_cmd;
-      cfi_cmd.Init(testcase.num_paths, testcase.path_name_type, paths_shm_id,
-                   paths_shm_offset, testcase.path_base,
-                   GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM,
-                   testcase.transform_type, transforms_shm_id,
-                   transforms_shm_offset);
-      EXPECT_EQ(testcase.expected_error, ExecuteCmd(cfi_cmd));
-      EXPECT_EQ(testcase.expected_gl_error, GetGLError());
-    }
-    if (testcase.expect_gl_call) {
-      EXPECT_CALL(*gl_, CoverStrokePathInstancedNV(
-                            testcase.num_paths, GL_UNSIGNED_INT, _, 0,
-                            GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV,
-                            testcase.transform_type, transforms))
-          .RetiresOnSaturation();
-    }
-    if (copy_paths) {
-      memcpy(paths, testcase.paths, testcase.sizeof_paths);
-    }
-
-    {
-      cmds::CoverStrokePathInstancedCHROMIUM csi_cmd;
-      csi_cmd.Init(testcase.num_paths, testcase.path_name_type, paths_shm_id,
-                   paths_shm_offset, testcase.path_base,
-                   GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM,
-                   testcase.transform_type, transforms_shm_id,
-                   transforms_shm_offset);
-      EXPECT_EQ(testcase.expected_error, ExecuteCmd(csi_cmd));
-      EXPECT_EQ(testcase.expected_gl_error, GetGLError());
-    }
-
-    if (testcase.expect_gl_call) {
-      EXPECT_CALL(*gl_, StencilThenCoverFillPathInstancedNV(
-                            testcase.num_paths, GL_UNSIGNED_INT, _, 0,
-                            testcase.fill_mode, testcase.mask,
-                            GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV,
-                            testcase.transform_type, transforms))
-          .RetiresOnSaturation();
-    }
-    if (copy_paths) {
-      memcpy(paths, testcase.paths, testcase.sizeof_paths);
-    }
-    {
-      cmds::StencilThenCoverFillPathInstancedCHROMIUM stcfi_cmd;
-      stcfi_cmd.Init(testcase.num_paths, testcase.path_name_type, paths_shm_id,
-                     paths_shm_offset, testcase.path_base, testcase.fill_mode,
-                     testcase.mask, GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM,
-                     testcase.transform_type, transforms_shm_id,
-                     transforms_shm_offset);
-      EXPECT_EQ(testcase.expected_error, ExecuteCmd(stcfi_cmd));
-      EXPECT_EQ(testcase.expected_gl_error, GetGLError());
-    }
-
-    if (testcase.expect_gl_call) {
-      EXPECT_CALL(*gl_, StencilThenCoverStrokePathInstancedNV(
-                            testcase.num_paths, GL_UNSIGNED_INT, _, 0,
-                            testcase.reference, testcase.mask,
-                            GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV,
-                            testcase.transform_type, transforms))
-          .RetiresOnSaturation();
-    }
-    if (copy_paths) {
-      memcpy(paths, testcase.paths, testcase.sizeof_paths);
-    }
-    {
-      cmds::StencilThenCoverStrokePathInstancedCHROMIUM stcsi_cmd;
-      stcsi_cmd.Init(testcase.num_paths, testcase.path_name_type, paths_shm_id,
-                     paths_shm_offset, testcase.path_base, testcase.reference,
-                     testcase.mask, GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM,
-                     testcase.transform_type, transforms_shm_id,
-                     transforms_shm_offset);
-      EXPECT_EQ(testcase.expected_error, ExecuteCmd(stcsi_cmd));
-      EXPECT_EQ(testcase.expected_gl_error, GetGLError());
-    }
-  }
-
-  void CallAllInstancedCommandsWithInvalidSHM(GLsizei num_paths,
-                                              const GLuint* paths,
-                                              GLuint* paths_shm,
-                                              uint32_t paths_shm_id,
-                                              uint32_t paths_shm_offset,
-                                              uint32_t transforms_shm_id,
-                                              uint32_t transforms_shm_offset) {
-    const GLuint kPathBase = 0;
-    const GLenum kFillMode = GL_INVERT;
-    const GLuint kMask = 0x80;
-    const GLuint kReference = 0xFF;
-    const GLuint kTransformType = GL_AFFINE_3D_CHROMIUM;
-    memcpy(paths_shm, paths, sizeof(GLuint) * num_paths);
-    {
-      cmds::StencilFillPathInstancedCHROMIUM sfi_cmd;
-      sfi_cmd.Init(num_paths, GL_UNSIGNED_INT, paths_shm_id, paths_shm_offset,
-                   kPathBase, kFillMode, kMask, kTransformType,
-                   transforms_shm_id, transforms_shm_offset);
-      EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(sfi_cmd));
-      EXPECT_EQ(GL_NO_ERROR, GetGLError());
-    }
-    memcpy(paths_shm, paths, sizeof(GLuint) * num_paths);
-    {
-      cmds::StencilStrokePathInstancedCHROMIUM ssi_cmd;
-      ssi_cmd.Init(num_paths, GL_UNSIGNED_INT, paths_shm_id, paths_shm_offset,
-                   kPathBase, kReference, kMask, kTransformType,
-                   transforms_shm_id, transforms_shm_offset);
-      EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(ssi_cmd));
-      EXPECT_EQ(GL_NO_ERROR, GetGLError());
-    }
-    memcpy(paths_shm, paths, sizeof(GLuint) * num_paths);
-    {
-      cmds::CoverFillPathInstancedCHROMIUM cfi_cmd;
-      cfi_cmd.Init(num_paths, GL_UNSIGNED_INT, paths_shm_id, paths_shm_offset,
-                   kPathBase, GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM,
-                   kTransformType, transforms_shm_id, transforms_shm_offset);
-      EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cfi_cmd));
-      EXPECT_EQ(GL_NO_ERROR, GetGLError());
-    }
-    memcpy(paths_shm, paths, sizeof(GLuint) * num_paths);
-    {
-      cmds::CoverStrokePathInstancedCHROMIUM csi_cmd;
-      csi_cmd.Init(num_paths, GL_UNSIGNED_INT, paths_shm_id, paths_shm_offset,
-                   kPathBase, GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM,
-                   kTransformType, transforms_shm_id, transforms_shm_offset);
-      EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(csi_cmd));
-      EXPECT_EQ(GL_NO_ERROR, GetGLError());
-    }
-    memcpy(paths_shm, paths, sizeof(GLuint) * num_paths);
-    {
-      cmds::StencilThenCoverFillPathInstancedCHROMIUM stcfi_cmd;
-      stcfi_cmd.Init(num_paths, GL_UNSIGNED_INT, paths_shm_id, paths_shm_offset,
-                     kPathBase, kFillMode, kMask,
-                     GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, kTransformType,
-                     transforms_shm_id, transforms_shm_offset);
-      EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(stcfi_cmd));
-      EXPECT_EQ(GL_NO_ERROR, GetGLError());
-    }
-    memcpy(paths_shm, paths, sizeof(GLuint) * num_paths);
-    {
-      cmds::StencilThenCoverStrokePathInstancedCHROMIUM stcsi_cmd;
-      stcsi_cmd.Init(num_paths, GL_UNSIGNED_INT, paths_shm_id, paths_shm_offset,
-                     kPathBase, kReference, kMask,
-                     GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, kTransformType,
-                     transforms_shm_id, transforms_shm_offset);
-      EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(stcsi_cmd));
-      EXPECT_EQ(GL_NO_ERROR, GetGLError());
-    }
-  }
-
-  GLuint client_path_id_;
-  static const GLuint kServicePathId = 311;
-};
-
-INSTANTIATE_TEST_SUITE_P(Service,
-                         GLES2DecoderTestWithCHROMIUMPathRendering,
-                         ::testing::Bool());
-
 class GLES2DecoderTestWithBlendEquationAdvanced : public GLES2DecoderTest {
  public:
   GLES2DecoderTestWithBlendEquationAdvanced() = default;
@@ -553,7 +106,7 @@
     init.request_alpha = true;
     init.request_depth = true;
     init.bind_generates_resource = true;
-    init.extensions = "GL_NV_path_rendering GL_NV_framebuffer_mixed_samples ";
+    init.extensions = "GL_NV_framebuffer_mixed_samples ";
     InitDecoder(init);
   }
 };
@@ -562,1170 +115,6 @@
                          GLES2DecoderTestWithCHROMIUMFramebufferMixedSamples,
                          ::testing::Bool());
 
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, GenDeletePaths) {
-  static GLuint kFirstClientID = client_path_id_ + 88;
-  static GLsizei kPathCount = 58;
-  static GLuint kFirstCreatedServiceID = 8000;
-
-  // GenPaths range 0 causes no calls.
-  cmds::GenPathsCHROMIUM gen_cmd;
-  gen_cmd.Init(kFirstClientID, 0);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // DeletePaths range 0 causes no calls.
-  cmds::DeletePathsCHROMIUM delete_cmd;
-  delete_cmd.Init(kFirstClientID, 0);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // DeletePaths client id 0 causes no calls and no errors.
-  delete_cmd.Init(0, 1);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // DeletePaths with a big range should not cause any deletes.
-  delete_cmd.Init(client_path_id_ + 1,
-                  std::numeric_limits<GLsizei>::max() - client_path_id_ - 1);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  delete_cmd.Init(static_cast<GLuint>(std::numeric_limits<GLsizei>::max()) + 1,
-                  std::numeric_limits<GLsizei>::max());
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Normal Gen and Delete should cause the normal calls.
-  EXPECT_CALL(*gl_, GenPathsNV(kPathCount))
-      .WillOnce(Return(kFirstCreatedServiceID))
-      .RetiresOnSaturation();
-
-  gen_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstCreatedServiceID, kPathCount))
-      .RetiresOnSaturation();
-
-  delete_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, GenDeleteRanges) {
-  static GLuint kFirstClientID = client_path_id_ + 77;
-  static GLsizei kPathCount = 5800;
-  static GLuint kFirstCreatedServiceID = 8000;
-
-  // Create a range of path names, delete one in middle and then
-  // the rest. Expect 3 DeletePath calls.
-  EXPECT_CALL(*gl_, GenPathsNV(kPathCount))
-      .WillOnce(Return(kFirstCreatedServiceID))
-      .RetiresOnSaturation();
-  cmds::GenPathsCHROMIUM gen_cmd;
-  gen_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstCreatedServiceID + (kPathCount / 2), 1))
-      .RetiresOnSaturation();
-
-  cmds::DeletePathsCHROMIUM delete_cmd;
-  delete_cmd.Init(kFirstClientID + (kPathCount / 2), 1);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstCreatedServiceID, (kPathCount / 2)))
-      .RetiresOnSaturation();
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstCreatedServiceID + (kPathCount / 2) + 1,
-                                  (kPathCount / 2) - 1)).RetiresOnSaturation();
-
-  delete_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, GenDeleteManyPaths) {
-  static GLuint kFirstClientID = client_path_id_ + 1;
-  static GLsizei kPathCount = std::numeric_limits<GLsizei>::max();
-  static GLuint kFirstCreatedServiceID = 8000;
-
-  EXPECT_CALL(*gl_, GenPathsNV(kPathCount))
-      .WillOnce(Return(kFirstCreatedServiceID))
-      .RetiresOnSaturation();
-
-  // GenPaths with big range.
-  cmds::GenPathsCHROMIUM gen_cmd;
-  gen_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Path range wraps, so we get connection error.
-  gen_cmd.Init(kFirstClientID + kPathCount, kPathCount);
-  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstCreatedServiceID, kPathCount))
-      .RetiresOnSaturation();
-
-  cmds::DeletePathsCHROMIUM delete_cmd;
-  delete_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Delete every possible path.
-  // We run into the one created for client_path_id_.
-  EXPECT_CALL(*gl_, DeletePathsNV(kServicePathId, 1)).RetiresOnSaturation();
-
-  delete_cmd.Init(1u, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  delete_cmd.Init(static_cast<GLuint>(kPathCount) + 1u, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Allocate every possible path, delete few, allocate them back and
-  // expect minimum amount of calls.
-  EXPECT_CALL(*gl_, GenPathsNV(kPathCount))
-      .WillOnce(Return(static_cast<GLuint>(1u)))
-      .WillOnce(Return(static_cast<GLuint>(kPathCount) + 1u))
-      .RetiresOnSaturation();
-
-  gen_cmd.Init(1u, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  gen_cmd.Init(static_cast<GLuint>(kPathCount) + 1u, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  gen_cmd.Init(static_cast<GLuint>(kPathCount) * 2u + 2u, kPathCount);
-  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstClientID, 4)).RetiresOnSaturation();
-
-  delete_cmd.Init(kFirstClientID, 4);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstClientID * 3, 1)).RetiresOnSaturation();
-
-  delete_cmd.Init(kFirstClientID * 3, 1);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, GenPathsNV(1))
-      .WillOnce(Return(kFirstClientID))
-      .WillOnce(Return(kFirstClientID + 1))
-      .WillOnce(Return(kFirstClientID + 2))
-      .WillOnce(Return(kFirstClientID + 3))
-      .RetiresOnSaturation();
-
-  for (int i = 0; i < 4; ++i) {
-    gen_cmd.Init(kFirstClientID + i, 1);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-    EXPECT_EQ(GL_NO_ERROR, GetGLError());
-  }
-
-  EXPECT_CALL(*gl_, GenPathsNV(1))
-      .WillOnce(Return(kFirstClientID * 3))
-      .RetiresOnSaturation();
-  gen_cmd.Init(kFirstClientID * 3, 1);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, DeletePathsNV(1u, kPathCount)).RetiresOnSaturation();
-  EXPECT_CALL(*gl_, DeletePathsNV(static_cast<GLuint>(kPathCount) + 1u,
-                                  kPathCount)).RetiresOnSaturation();
-
-  delete_cmd.Init(1u, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  delete_cmd.Init(static_cast<GLuint>(kPathCount) + 1u, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Cleanup: return the client_path_id_ as a path.
-  EXPECT_CALL(*gl_, GenPathsNV(1))
-      .WillOnce(Return(static_cast<GLuint>(kServicePathId)))
-      .RetiresOnSaturation();
-
-  gen_cmd.Init(client_path_id_, 1);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       GenPathsCHROMIUMInvalidCalls) {
-  static GLuint kFirstClientID = client_path_id_ + 88;
-  static GLsizei kPathCount = 5800;
-  static GLuint kFirstCreatedServiceID = 8000;
-
-  // Range < 0 is causes gl error.
-  cmds::GenPathsCHROMIUM gen_cmd;
-  gen_cmd.Init(kFirstClientID, -1);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
-  // Path 0 is invalid client id, connection error.
-  gen_cmd.Init(0, kPathCount);
-  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Too big range causes client id to wrap, connection error.
-  gen_cmd.Init(static_cast<GLuint>(std::numeric_limits<GLsizei>::max()) + 3,
-               std::numeric_limits<GLsizei>::max());
-  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Creating duplicate client_ids cause connection error.
-  EXPECT_CALL(*gl_, GenPathsNV(kPathCount))
-      .WillOnce(Return(kFirstCreatedServiceID))
-      .RetiresOnSaturation();
-
-  gen_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Create duplicate by executing the same cmd.
-  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Create duplicate by creating a range that contains
-  // an already existing client path id.
-  gen_cmd.Init(kFirstClientID - 1, 2);
-  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Cleanup.
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstCreatedServiceID, kPathCount))
-      .RetiresOnSaturation();
-  cmds::DeletePathsCHROMIUM delete_cmd;
-  delete_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       DeletePathsCHROMIUMInvalidCalls) {
-  static GLuint kFirstClientID = client_path_id_ + 88;
-
-  // Range < 0 is causes gl error.
-  cmds::DeletePathsCHROMIUM delete_cmd;
-  delete_cmd.Init(kFirstClientID, -1);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
-  // Too big range causes client id to wrap, connection error.
-  delete_cmd.Init(static_cast<GLuint>(std::numeric_limits<GLsizei>::max()) + 3,
-                  std::numeric_limits<GLsizei>::max());
-  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       PathCommandsCHROMIUMInvalidCalls) {
-  static const GLsizei kCorrectCoordCount = 19;
-  static const GLsizei kCorrectCommandCount = 6;
-  static const GLenum kInvalidCoordType = GL_NONE;
-
-  GLfloat* coords = GetSharedMemoryAs<GLfloat*>();
-  unsigned commands_offset = sizeof(GLfloat) * kCorrectCoordCount;
-  GLubyte* commands = GetSharedMemoryAsWithOffset<GLubyte*>(commands_offset);
-  for (int i = 0; i < kCorrectCoordCount; ++i) {
-    coords[i] = 5.0f * i;
-  }
-  commands[0] = GL_MOVE_TO_CHROMIUM;
-  commands[1] = GL_CLOSE_PATH_CHROMIUM;
-  commands[2] = GL_LINE_TO_CHROMIUM;
-  commands[3] = GL_QUADRATIC_CURVE_TO_CHROMIUM;
-  commands[4] = GL_CUBIC_CURVE_TO_CHROMIUM;
-  commands[5] = GL_CONIC_CURVE_TO_CHROMIUM;
-
-  EXPECT_CALL(*gl_, PathCommandsNV(kServicePathId, kCorrectCommandCount, _,
-                                   kCorrectCoordCount, GL_FLOAT, coords))
-      .RetiresOnSaturation();
-
-  cmds::PathCommandsCHROMIUM cmd;
-
-  // Reference call -- this succeeds.
-  cmd.Init(client_path_id_, kCorrectCommandCount, shared_memory_id_,
-           shared_memory_offset_ + commands_offset, kCorrectCoordCount,
-           GL_FLOAT, shared_memory_id_, shared_memory_offset_);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, PathCommandsNV(_, _, _, _, _, _)).Times(0);
-
-  // Invalid client id fails.
-  cmd.Init(client_path_id_ - 1, kCorrectCommandCount, shared_memory_id_,
-           shared_memory_offset_, kCorrectCoordCount, GL_FLOAT,
-           shared_memory_id_, shared_memory_offset_);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
-  // The numCommands < 0.
-  cmd.Init(client_path_id_, -1, shared_memory_id_, shared_memory_offset_,
-           kCorrectCoordCount, GL_FLOAT, shared_memory_id_,
-           shared_memory_offset_);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
-  // The numCoords < 0.
-  cmd.Init(client_path_id_, kCorrectCommandCount, shared_memory_id_,
-           shared_memory_offset_, -1, GL_FLOAT, shared_memory_id_,
-           shared_memory_offset_);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
-  // Invalid coordType fails.
-  cmd.Init(client_path_id_, kCorrectCommandCount, shared_memory_id_,
-           shared_memory_offset_, kCorrectCoordCount, kInvalidCoordType,
-           shared_memory_id_, shared_memory_offset_);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-
-  // Big command counts.
-  cmd.Init(client_path_id_, std::numeric_limits<GLsizei>::max(),
-           shared_memory_id_, shared_memory_offset_ + commands_offset,
-           kCorrectCoordCount, GL_FLOAT, shared_memory_id_,
-           shared_memory_offset_);
-  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Invalid SHM cases.
-  cmd.Init(client_path_id_, kCorrectCommandCount, kInvalidSharedMemoryId,
-           shared_memory_offset_ + commands_offset, kCorrectCoordCount,
-           GL_FLOAT, shared_memory_id_, shared_memory_offset_);
-  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  cmd.Init(client_path_id_, kCorrectCommandCount, shared_memory_id_,
-           kInvalidSharedMemoryOffset, kCorrectCoordCount, GL_FLOAT,
-           shared_memory_id_, shared_memory_offset_);
-  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  cmd.Init(client_path_id_, kCorrectCommandCount, shared_memory_id_,
-           shared_memory_offset_ + commands_offset, kCorrectCoordCount,
-           GL_FLOAT, kInvalidSharedMemoryId, shared_memory_offset_);
-  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  cmd.Init(client_path_id_, kCorrectCommandCount, shared_memory_id_,
-           shared_memory_offset_ + commands_offset, kCorrectCoordCount,
-           GL_FLOAT, shared_memory_id_, kInvalidSharedMemoryOffset);
-  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // NULL shm command id with non-zero command count.
-  cmd.Init(client_path_id_, kCorrectCommandCount, 0, 0, kCorrectCoordCount,
-           GL_FLOAT, shared_memory_id_, shared_memory_offset_);
-  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // NULL shm coord id with non-zero coord count.
-  cmd.Init(client_path_id_, kCorrectCommandCount, shared_memory_id_,
-           shared_memory_offset_ + commands_offset, kCorrectCoordCount,
-           GL_FLOAT, 0, 0);
-  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // The coordCount not matching what is in commands.
-  // Expects kCorrectCoordCount+2 coords.
-  commands[1] = GL_MOVE_TO_CHROMIUM;
-  cmd.Init(client_path_id_, kCorrectCommandCount, shared_memory_id_,
-           shared_memory_offset_ + commands_offset, kCorrectCoordCount,
-           GL_FLOAT, shared_memory_id_, shared_memory_offset_);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
-  // The coordCount not matching what is in commands.
-  // Expects kCorrectCoordCount-2 coords.
-  commands[0] = GL_CLOSE_PATH_CHROMIUM;
-  commands[1] = GL_CLOSE_PATH_CHROMIUM;
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
-  // NULL shm coord ids. Currently causes gl error, though client should not let
-  // this through.
-  cmd.Init(client_path_id_, kCorrectCommandCount, shared_memory_id_,
-           shared_memory_offset_ + commands_offset, kCorrectCoordCount,
-           GL_FLOAT, 0, 0);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       PathCommandsCHROMIUMEmptyCommands) {
-  EXPECT_CALL(*gl_,
-              PathCommandsNV(kServicePathId, 0, nullptr, 0, GL_FLOAT, nullptr))
-      .RetiresOnSaturation();
-  cmds::PathCommandsCHROMIUM cmd;
-  cmd.Init(client_path_id_, 0, 0, 0, 0, GL_FLOAT, 0, 0);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       PathCommandsCHROMIUMInvalidCommands) {
-  EXPECT_CALL(*gl_, PathCommandsNV(_, _, _, _, _, _)).Times(0);
-
-  cmds::PathCommandsCHROMIUM cmd;
-
-  {
-    const GLsizei kCoordCount = 2;
-    const GLsizei kCommandCount = 2;
-    GLfloat* coords = GetSharedMemoryAs<GLfloat*>();
-    unsigned commands_offset = sizeof(GLfloat) * kCoordCount;
-    GLubyte* commands = GetSharedMemoryAsWithOffset<GLubyte*>(commands_offset);
-
-    coords[0] = 5.0f;
-    coords[1] = 5.0f;
-    commands[0] = 0x3;  // Token MOVE_TO_RELATIVE in NV_path_rendering.
-    commands[1] = GL_CLOSE_PATH_CHROMIUM;
-
-    cmd.Init(client_path_id_ - 1, kCommandCount, shared_memory_id_,
-             shared_memory_offset_, kCoordCount, GL_FLOAT, shared_memory_id_,
-             shared_memory_offset_);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-    EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-  }
-  {
-    const GLsizei kCoordCount = 8;
-    const GLsizei kCommandCount = 4;
-    GLfloat* coords = GetSharedMemoryAs<GLfloat*>();
-    unsigned commands_offset = sizeof(GLfloat) * kCoordCount;
-    GLubyte* commands = GetSharedMemoryAsWithOffset<GLubyte*>(commands_offset);
-
-    for (int i = 0; i < kCoordCount; ++i) {
-      coords[i] = 5.0f * i;
-    }
-    commands[0] = GL_MOVE_TO_CHROMIUM;
-    commands[1] = GL_MOVE_TO_CHROMIUM;
-    commands[2] = 'M';  // Synonym to MOVE_TO in NV_path_rendering.
-    commands[3] = GL_MOVE_TO_CHROMIUM;
-
-    cmd.Init(client_path_id_ - 1, kCommandCount, shared_memory_id_,
-             shared_memory_offset_, kCoordCount, GL_FLOAT, shared_memory_id_,
-             shared_memory_offset_);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-    EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-  }
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, PathParameterXCHROMIUM) {
-  static GLuint kFirstClientID = client_path_id_ + 88;
-  static GLsizei kPathCount = 2;
-  static GLuint kFirstCreatedServiceID = 8000;
-
-  // Create a paths so that we do not modify client_path_id_
-  EXPECT_CALL(*gl_, GenPathsNV(kPathCount))
-      .WillOnce(Return(kFirstCreatedServiceID))
-      .RetiresOnSaturation();
-  cmds::GenPathsCHROMIUM gen_cmd;
-  gen_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  cmds::PathParameterfCHROMIUM fcmd;
-  cmds::PathParameteriCHROMIUM icmd;
-  const struct {
-    GLenum pname;
-    GLfloat value;
-    GLfloat expected_value;
-  } kTestcases[] = {
-      {GL_PATH_STROKE_WIDTH_CHROMIUM, 1.0f, 1.0f},
-      {GL_PATH_STROKE_WIDTH_CHROMIUM, 0.0f, 0.0f},
-      {GL_PATH_MITER_LIMIT_CHROMIUM, 500.0f, 500.0f},
-      {GL_PATH_STROKE_BOUND_CHROMIUM, .80f, .80f},
-      {GL_PATH_STROKE_BOUND_CHROMIUM, 1.80f, 1.0f},
-      {GL_PATH_STROKE_BOUND_CHROMIUM, -1.0f, 0.0f},
-      {GL_PATH_END_CAPS_CHROMIUM, GL_FLAT_CHROMIUM, GL_FLAT_CHROMIUM},
-      {GL_PATH_END_CAPS_CHROMIUM, GL_SQUARE_CHROMIUM, GL_SQUARE_CHROMIUM},
-      {GL_PATH_JOIN_STYLE_CHROMIUM,
-       GL_MITER_REVERT_CHROMIUM,
-       GL_MITER_REVERT_CHROMIUM},
-  };
-
-  for (auto& testcase : kTestcases) {
-    EXPECT_CALL(*gl_, PathParameterfNV(kFirstCreatedServiceID, testcase.pname,
-                                       testcase.expected_value))
-        .Times(1)
-        .RetiresOnSaturation();
-    fcmd.Init(kFirstClientID, testcase.pname, testcase.value);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(fcmd));
-    EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-    EXPECT_CALL(*gl_,
-                PathParameteriNV(kFirstCreatedServiceID + 1, testcase.pname,
-                                 static_cast<GLint>(testcase.expected_value)))
-        .Times(1)
-        .RetiresOnSaturation();
-    icmd.Init(kFirstClientID + 1, testcase.pname,
-              static_cast<GLint>(testcase.value));
-    EXPECT_EQ(error::kNoError, ExecuteCmd(icmd));
-    EXPECT_EQ(GL_NO_ERROR, GetGLError());
-  }
-
-  // Cleanup.
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstCreatedServiceID, kPathCount))
-      .RetiresOnSaturation();
-
-  cmds::DeletePathsCHROMIUM delete_cmd;
-  delete_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       PathParameterXCHROMIUMInvalidArgs) {
-  static GLuint kFirstClientID = client_path_id_ + 88;
-  static GLsizei kPathCount = 2;
-  static GLuint kFirstCreatedServiceID = 8000;
-
-  // Create a paths so that we do not modify client_path_id_
-  EXPECT_CALL(*gl_, GenPathsNV(kPathCount))
-      .WillOnce(Return(kFirstCreatedServiceID))
-      .RetiresOnSaturation();
-  cmds::GenPathsCHROMIUM gen_cmd;
-  gen_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(gen_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  cmds::PathParameterfCHROMIUM fcmd;
-  cmds::PathParameteriCHROMIUM icmd;
-  const struct {
-    GLenum pname;
-    GLfloat value;
-    bool try_int_version;
-    GLint error;
-  } kTestcases[] = {
-      {GL_PATH_STROKE_WIDTH_CHROMIUM, -1.0f, true, GL_INVALID_VALUE},
-      {GL_PATH_MITER_LIMIT_CHROMIUM,
-       std::numeric_limits<float>::infinity(),
-       false,
-       GL_INVALID_VALUE},
-      {GL_PATH_MITER_LIMIT_CHROMIUM,
-       std::numeric_limits<float>::quiet_NaN(),
-       false,
-       GL_INVALID_VALUE},
-      {GL_PATH_END_CAPS_CHROMIUM, 0x4, true, GL_INVALID_VALUE},
-      {GL_PATH_END_CAPS_CHROMIUM,
-       GL_MITER_REVERT_CHROMIUM,
-       true,
-       GL_INVALID_VALUE},
-      {GL_PATH_JOIN_STYLE_CHROMIUM, GL_FLAT_CHROMIUM, true, GL_INVALID_VALUE},
-      {GL_PATH_MODELVIEW_CHROMIUM, GL_FLAT_CHROMIUM, true, GL_INVALID_ENUM},
-  };
-
-  EXPECT_CALL(*gl_, PathParameterfNV(_, _, _)).Times(0);
-  EXPECT_CALL(*gl_, PathParameteriNV(_, _, _)).Times(0);
-
-  for (auto& testcase : kTestcases) {
-    fcmd.Init(kFirstClientID, testcase.pname, testcase.value);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(fcmd));
-    EXPECT_EQ(testcase.error, GetGLError());
-    if (!testcase.try_int_version)
-      continue;
-
-    icmd.Init(kFirstClientID + 1, testcase.pname,
-              static_cast<GLint>(testcase.value));
-    EXPECT_EQ(error::kNoError, ExecuteCmd(icmd));
-    EXPECT_EQ(testcase.error, GetGLError());
-  }
-
-  // Cleanup.
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstCreatedServiceID, kPathCount))
-      .RetiresOnSaturation();
-
-  cmds::DeletePathsCHROMIUM delete_cmd;
-  delete_cmd.Init(kFirstClientID, kPathCount);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(delete_cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, StencilFillPathCHROMIUM) {
-  SetupExpectationsForApplyingDefaultDirtyState();
-
-  cmds::StencilFillPathCHROMIUM cmd;
-  cmds::StencilThenCoverFillPathCHROMIUM tcmd;
-
-  static const GLenum kFillModes[] = {
-      GL_INVERT, GL_COUNT_UP_CHROMIUM, GL_COUNT_DOWN_CHROMIUM};
-  static const GLuint kMask = 0x7F;
-
-  for (auto& fill_mode : kFillModes) {
-    EXPECT_CALL(*gl_, StencilFillPathNV(kServicePathId, fill_mode, kMask))
-        .RetiresOnSaturation();
-    cmd.Init(client_path_id_, fill_mode, kMask);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-    EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-    EXPECT_CALL(*gl_, StencilThenCoverFillPathNV(kServicePathId, fill_mode,
-                                                 kMask, GL_BOUNDING_BOX_NV))
-        .RetiresOnSaturation();
-    tcmd.Init(client_path_id_, fill_mode, kMask, GL_BOUNDING_BOX_CHROMIUM);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(tcmd));
-    EXPECT_EQ(GL_NO_ERROR, GetGLError());
-  }
-
-  // Non-existent path: no error, no call.
-  cmd.Init(client_path_id_ - 1, GL_INVERT, 0x80);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  tcmd.Init(client_path_id_ - 1, GL_INVERT, 0x80, GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(tcmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       StencilFillPathCHROMIUMInvalidArgs) {
-  EXPECT_CALL(*gl_, StencilFillPathNV(_, _, _)).Times(0);
-  EXPECT_CALL(*gl_, StencilThenCoverFillPathNV(_, _, _, GL_BOUNDING_BOX_NV))
-      .Times(0);
-
-  cmds::StencilFillPathCHROMIUM cmd;
-  cmds::StencilThenCoverFillPathCHROMIUM tcmd;
-
-  cmd.Init(client_path_id_, GL_INVERT - 1, 0x80);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-
-  tcmd.Init(client_path_id_, GL_INVERT - 1, 0x80, GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(tcmd));
-  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-
-  // The /mask/+1 is not power of two -> invalid value.
-  cmd.Init(client_path_id_, GL_COUNT_UP_CHROMIUM, 0x80);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
-  tcmd.Init(client_path_id_, GL_COUNT_UP_CHROMIUM, 0x80,
-            GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(tcmd));
-  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
-  cmd.Init(client_path_id_, GL_COUNT_DOWN_CHROMIUM, 5);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
-  tcmd.Init(client_path_id_, GL_COUNT_DOWN_CHROMIUM, 5,
-            GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(tcmd));
-  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, StencilStrokePathCHROMIUM) {
-  SetupExpectationsForApplyingDefaultDirtyState();
-
-  EXPECT_CALL(*gl_, StencilStrokePathNV(kServicePathId, 1, 0x80))
-      .RetiresOnSaturation();
-  EXPECT_CALL(*gl_, StencilThenCoverStrokePathNV(kServicePathId, 1, 0x80,
-                                                 GL_BOUNDING_BOX_NV))
-      .RetiresOnSaturation();
-
-  cmds::StencilStrokePathCHROMIUM cmd;
-  cmds::StencilThenCoverStrokePathCHROMIUM tcmd;
-
-  cmd.Init(client_path_id_, 1, 0x80);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  tcmd.Init(client_path_id_, 1, 0x80, GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(tcmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, StencilThenCoverStrokePathNV(kServicePathId, 1, 0x80,
-                                                 GL_CONVEX_HULL_NV))
-      .RetiresOnSaturation();
-
-  tcmd.Init(client_path_id_, 1, 0x80, GL_CONVEX_HULL_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(tcmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Non-existent path: no error, no call.
-  cmd.Init(client_path_id_ - 1, 1, 0x80);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  tcmd.Init(client_path_id_ - 1, 1, 0x80, GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(tcmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, CoverFillPathCHROMIUM) {
-  SetupExpectationsForApplyingDefaultDirtyState();
-
-  EXPECT_CALL(*gl_, CoverFillPathNV(kServicePathId, GL_BOUNDING_BOX_NV))
-      .RetiresOnSaturation();
-  cmds::CoverFillPathCHROMIUM cmd;
-  cmd.Init(client_path_id_, GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, CoverFillPathNV(kServicePathId, GL_CONVEX_HULL_NV))
-      .RetiresOnSaturation();
-  cmd.Init(client_path_id_, GL_CONVEX_HULL_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Non-existent path: no error, no call.
-  cmd.Init(client_path_id_ - 1, GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, CoverStrokePathCHROMIUM) {
-  SetupExpectationsForApplyingDefaultDirtyState();
-  EXPECT_CALL(*gl_, CoverStrokePathNV(kServicePathId, GL_BOUNDING_BOX_NV))
-      .RetiresOnSaturation();
-  cmds::CoverStrokePathCHROMIUM cmd;
-  cmd.Init(client_path_id_, GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  EXPECT_CALL(*gl_, CoverStrokePathNV(kServicePathId, GL_CONVEX_HULL_NV))
-      .RetiresOnSaturation();
-  cmd.Init(client_path_id_, GL_CONVEX_HULL_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-  // Non-existent path: no error, no call.
-  cmd.Init(client_path_id_ - 1, GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-namespace {
-template <typename T>
-struct gl_type_enum {};
-template <>
-struct gl_type_enum<GLbyte> {
-  enum { kGLType = GL_BYTE };
-};
-template <>
-struct gl_type_enum<GLubyte> {
-  enum { kGLType = GL_UNSIGNED_BYTE };
-};
-template <>
-struct gl_type_enum<GLshort> {
-  enum { kGLType = GL_SHORT };
-};
-template <>
-struct gl_type_enum<GLushort> {
-  enum { kGLType = GL_UNSIGNED_SHORT };
-};
-template <>
-struct gl_type_enum<GLfloat> {
-  enum { kGLType = GL_FLOAT };
-};
-}
-
-template <typename TypeParam>
-void GLES2DecoderTestWithCHROMIUMPathRendering::
-    TestPathCommandsCHROMIUMCoordTypes() {
-  static const GLsizei kCorrectCoordCount = 19;
-  static const GLsizei kCorrectCommandCount = 6;
-
-  TypeParam* coords = GetSharedMemoryAs<TypeParam*>();
-  unsigned commands_offset = sizeof(TypeParam) * kCorrectCoordCount;
-  GLubyte* commands = GetSharedMemoryAsWithOffset<GLubyte*>(commands_offset);
-  for (int i = 0; i < kCorrectCoordCount; ++i) {
-    coords[i] = static_cast<TypeParam>(5 * i);
-  }
-  commands[0] = GL_MOVE_TO_CHROMIUM;
-  commands[1] = GL_CLOSE_PATH_CHROMIUM;
-  commands[2] = GL_LINE_TO_CHROMIUM;
-  commands[3] = GL_QUADRATIC_CURVE_TO_CHROMIUM;
-  commands[4] = GL_CUBIC_CURVE_TO_CHROMIUM;
-  commands[5] = GL_CONIC_CURVE_TO_CHROMIUM;
-
-  EXPECT_CALL(*gl_, PathCommandsNV(kServicePathId, kCorrectCommandCount, _,
-                                   kCorrectCoordCount,
-                                   gl_type_enum<TypeParam>::kGLType, coords))
-      .RetiresOnSaturation();
-
-  cmds::PathCommandsCHROMIUM cmd;
-
-  cmd.Init(client_path_id_, kCorrectCommandCount, shared_memory_id_,
-           shared_memory_offset_ + commands_offset, kCorrectCoordCount,
-           gl_type_enum<TypeParam>::kGLType, shared_memory_id_,
-           shared_memory_offset_);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       PathCommandsCHROMIUMCoordTypes) {
-  // Not using a typed test case, because the base class is already parametrized
-  // test case and uses GetParam.
-  TestPathCommandsCHROMIUMCoordTypes<GLbyte>();
-  TestPathCommandsCHROMIUMCoordTypes<GLubyte>();
-  TestPathCommandsCHROMIUMCoordTypes<GLshort>();
-  TestPathCommandsCHROMIUMCoordTypes<GLushort>();
-  TestPathCommandsCHROMIUMCoordTypes<GLfloat>();
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       StencilXFillPathInstancedCHROMIUMInvalidArgs) {
-  cmds::StencilFillPathInstancedCHROMIUM sfi_cmd;
-  cmds::StencilThenCoverFillPathInstancedCHROMIUM stcfi_cmd;
-
-  const GLuint kPaths[] = {client_path_id_, client_path_id_ + 5,
-                           client_path_id_, client_path_id_ + 18};
-  const GLsizei kPathCount = base::size(kPaths);
-
-  struct {
-    GLenum fill_mode;
-    GLuint mask;
-    GLint expected_error;
-  } testcases[] = {
-      // Using invalid fill mode produces invalid enum.
-      {GL_COUNT_UP_CHROMIUM - 1, 0x7F, GL_INVALID_ENUM},
-      {GL_COUNT_DOWN_CHROMIUM + 1, 0x7F, GL_INVALID_ENUM},
-      // Using /mask/+1 which is not power of two produces invalid value.
-      {GL_COUNT_UP_CHROMIUM, 0x80, GL_INVALID_VALUE},
-      {GL_COUNT_DOWN_CHROMIUM, 4, GL_INVALID_VALUE}};
-
-  GLuint* paths = GetSharedMemoryAs<GLuint*>();
-
-  for (size_t i = 0; i < base::size(testcases); ++i) {
-    memcpy(paths, kPaths, sizeof(kPaths));
-    sfi_cmd.Init(kPathCount, GL_UNSIGNED_INT, shared_memory_id_,
-                 shared_memory_offset_, 0, testcases[i].fill_mode,
-                 testcases[i].mask, GL_NONE, 0, 0);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(sfi_cmd));
-    EXPECT_EQ(testcases[i].expected_error, GetGLError());
-
-    memcpy(paths, kPaths, sizeof(kPaths));
-    stcfi_cmd.Init(kPathCount, GL_UNSIGNED_INT, shared_memory_id_,
-                   shared_memory_offset_, 0, testcases[i].fill_mode,
-                   testcases[i].mask,
-                   GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_NONE, 0, 0);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(stcfi_cmd));
-    EXPECT_EQ(testcases[i].expected_error, GetGLError());
-  }
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       StencilXFillPathInstancedCHROMIUMFillMode) {
-  SetupExpectationsForApplyingDefaultDirtyState();
-
-  // Test different fill modes.
-  cmds::StencilFillPathInstancedCHROMIUM sfi_cmd;
-  cmds::StencilThenCoverFillPathInstancedCHROMIUM stcfi_cmd;
-
-  const GLuint kPaths[] = {client_path_id_, client_path_id_ + 5,
-                           client_path_id_, client_path_id_ + 18};
-  const GLsizei kPathCount = base::size(kPaths);
-
-  static const GLenum kFillModes[] = {GL_INVERT, GL_COUNT_UP_CHROMIUM,
-                                      GL_COUNT_DOWN_CHROMIUM};
-  const GLuint kMask = 0x7F;
-
-  GLuint* paths = GetSharedMemoryAs<GLuint*>();
-
-  for (size_t i = 0; i < base::size(kFillModes); ++i) {
-    memcpy(paths, kPaths, sizeof(kPaths));
-    EXPECT_CALL(*gl_, StencilFillPathInstancedNV(kPathCount, GL_UNSIGNED_INT, _,
-                                                 0, kFillModes[i], kMask,
-                                                 GL_NONE, nullptr))
-        .RetiresOnSaturation();
-    sfi_cmd.Init(kPathCount, GL_UNSIGNED_INT, shared_memory_id_,
-                 shared_memory_offset_, 0, kFillModes[i], kMask, GL_NONE, 0, 0);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(sfi_cmd));
-    EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
-    memcpy(paths, kPaths, sizeof(kPaths));
-    EXPECT_CALL(*gl_,
-                StencilThenCoverFillPathInstancedNV(
-                    kPathCount, GL_UNSIGNED_INT, _, 0, kFillModes[i], kMask,
-                    GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV, GL_NONE, nullptr))
-        .RetiresOnSaturation();
-    stcfi_cmd.Init(kPathCount, GL_UNSIGNED_INT, shared_memory_id_,
-                   shared_memory_offset_, 0, kFillModes[i], kMask,
-                   GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_NONE, 0, 0);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(stcfi_cmd));
-    EXPECT_EQ(GL_NO_ERROR, GetGLError());
-  }
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, InstancedCalls) {
-  SetupExpectationsForApplyingDefaultDirtyState();
-
-  const GLuint kPaths[] = {0, client_path_id_, 15, client_path_id_};
-  const GLsizei kPathCount = base::size(kPaths);
-
-  // The path base will be client_path_id_, and so 0 is a
-  // valid path.
-  const GLuint kPathBase = client_path_id_;
-  const GLuint kPathsWithBase[] = {0, 5, 0, 18};
-
-  const GLshort kShortPathBase = client_path_id_ * 2;
-  const GLshort kShortPathsWithBase[] = {
-      -static_cast<GLshort>(client_path_id_), 5,
-      -static_cast<GLshort>(client_path_id_), 18};
-
-  const GLenum kFillMode = GL_INVERT;
-  const GLuint kMask = 0x80;
-  const GLuint kReference = 0xFF;
-
-  GLfloat transform_values[12 * kPathCount];
-  for (GLsizei i = 0; i < kPathCount; ++i) {
-    for (int j = 0; j < 12; ++j) {
-      transform_values[i * 12 + j] = 0.1f * j + i;
-    }
-  }
-
-  // Path name overflows to correct path.
-  const GLuint kBigPathBase = std::numeric_limits<GLuint>::max();
-  const GLuint kPathsWithBigBase[] = {client_path_id_ + 1, 5,
-                                      client_path_id_ + 1, 18};
-
-  // Path name underflows. As a technical limitation, we can not get to correct
-  // path,
-  // so test just tests that there is no GL error.
-  const GLuint kNegativePathBase = 1;
-  const GLbyte kNegativePathsWithBaseByte[] = {-1, -2, -5, -18};
-  const GLint kNegativePathsWithBaseInt[] = {-2, -3, -4, -5};
-
-  InstancedTestcase testcases[] = {
-      // Test a normal call.
-      {kPathCount, GL_UNSIGNED_INT, kPaths, 0, kFillMode, kReference, kMask,
-       GL_NONE, nullptr, sizeof(kPaths), 0, error::kNoError, GL_NO_ERROR, true},
-      // Test that the path base is applied correctly for each instanced call.
-      {kPathCount, GL_UNSIGNED_INT, kPathsWithBase, kPathBase, kFillMode,
-       kReference, kMask, GL_NONE, nullptr, sizeof(kPaths), 0, error::kNoError,
-       GL_NO_ERROR, true},
-      {kPathCount, GL_UNSIGNED_INT, kPathsWithBase, kPathBase, kFillMode,
-       kReference, kMask,
-
-       // Test all possible transform types. The float array is big enough for
-       // all the variants.  The contents of the array in call is not checked,
-       // though.
-       GL_TRANSLATE_X_CHROMIUM, transform_values, sizeof(kPaths),
-       sizeof(transform_values), error::kNoError, GL_NO_ERROR, true},
-      {kPathCount, GL_UNSIGNED_INT, kPathsWithBase, kPathBase, kFillMode,
-       kReference, kMask, GL_TRANSLATE_Y_CHROMIUM, transform_values,
-       sizeof(kPaths), sizeof(transform_values), error::kNoError, GL_NO_ERROR,
-       true},
-      {kPathCount, GL_UNSIGNED_INT, kPathsWithBase, kPathBase, kFillMode,
-       kReference, kMask, GL_TRANSLATE_2D_CHROMIUM, transform_values,
-       sizeof(kPaths), sizeof(transform_values), error::kNoError, GL_NO_ERROR,
-       true},
-      {kPathCount, GL_UNSIGNED_INT, kPathsWithBase, kPathBase, kFillMode,
-       kReference, kMask, GL_TRANSLATE_3D_CHROMIUM, transform_values,
-       sizeof(kPaths), sizeof(transform_values), error::kNoError, GL_NO_ERROR,
-       true},
-      {kPathCount, GL_UNSIGNED_INT, kPathsWithBase, kPathBase, kFillMode,
-       kReference, kMask, GL_AFFINE_2D_CHROMIUM, transform_values,
-       sizeof(kPaths), sizeof(transform_values), error::kNoError, GL_NO_ERROR,
-       true},
-      {kPathCount, GL_UNSIGNED_INT, kPathsWithBase, kPathBase, kFillMode,
-       kReference, kMask, GL_AFFINE_3D_CHROMIUM, transform_values,
-       sizeof(kPaths), sizeof(transform_values), error::kNoError, GL_NO_ERROR,
-       true},
-      {kPathCount, GL_UNSIGNED_INT, kPathsWithBase, kPathBase, kFillMode,
-       kReference, kMask, GL_TRANSPOSE_AFFINE_2D_CHROMIUM, transform_values,
-       sizeof(kPaths), sizeof(transform_values), error::kNoError, GL_NO_ERROR,
-       true},
-      {kPathCount, GL_UNSIGNED_INT, kPathsWithBase, kPathBase, kFillMode,
-       kReference, kMask, GL_TRANSPOSE_AFFINE_3D_CHROMIUM, transform_values,
-       sizeof(kPaths), sizeof(transform_values), error::kNoError, GL_NO_ERROR,
-       true},
-      {kPathCount, GL_SHORT, kShortPathsWithBase, kShortPathBase, kFillMode,
-       kReference, kMask, GL_TRANSPOSE_AFFINE_3D_CHROMIUM, transform_values,
-       sizeof(kShortPathsWithBase), sizeof(transform_values), error::kNoError,
-       GL_NO_ERROR, true},
-
-      // Test that if using path base causes path id to overflow, we get no
-      // error.
-      {kPathCount, GL_UNSIGNED_INT, kPathsWithBigBase, kBigPathBase, kFillMode,
-       kReference, kMask, GL_TRANSLATE_X_CHROMIUM, transform_values,
-       sizeof(kPathsWithBigBase), sizeof(transform_values), error::kNoError,
-       GL_NO_ERROR, true},
-      // Test that if using path base causes path id to underflow, we get no
-      // error.
-      {kPathCount, GL_BYTE, kNegativePathsWithBaseByte, kNegativePathBase,
-       kFillMode, kReference, kMask, GL_TRANSLATE_X_CHROMIUM, transform_values,
-       sizeof(kNegativePathsWithBaseByte), sizeof(transform_values),
-       error::kNoError, GL_NO_ERROR, false},
-      {kPathCount, GL_INT, kNegativePathsWithBaseInt, kNegativePathBase,
-       kFillMode, kReference, kMask, GL_TRANSLATE_X_CHROMIUM, transform_values,
-       sizeof(kNegativePathsWithBaseInt), sizeof(transform_values),
-       error::kNoError, GL_NO_ERROR, false},
-
-  };
-
-  for (size_t i = 0; i < base::size(testcases); ++i) {
-    SCOPED_TRACE(testing::Message() << "InstancedCalls testcase " << i);
-    CallAllInstancedCommands(testcases[i]);
-  }
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, InstancedNoCalls) {
-  const GLuint kPaths[] = {1, client_path_id_, 5, client_path_id_};
-  const GLsizei kPathCount = base::size(kPaths);
-
-  const GLenum kFillMode = GL_INVERT;
-  const GLuint kMask = 0x80;
-  const GLuint kReference = 0xFF;
-  GLfloat transform_values[12 * kPathCount];
-  for (GLsizei i = 0; i < kPathCount; ++i) {
-    for (int j = 0; j < 12; ++j) {
-      transform_values[i * 12 + j] = 0.1f * j + i;
-    }
-  }
-
-  // The path base will be client_path_id_, and so 0 is a valid path and others
-  // should be invalid.
-  const GLuint kInvalidPathBase = client_path_id_;
-  const GLuint kInvalidPathsWithBase[] = {1, client_path_id_, 5, 18};
-
-  InstancedTestcase testcases[] = {
-      // Zero path count produces no error, no call.
-      {0, GL_UNSIGNED_INT, nullptr, 0, kFillMode, kReference, kMask, GL_NONE,
-       nullptr, 0, 0, error::kNoError, GL_NO_ERROR, false},
-
-      // Zero path count, even with path data, produces no error, no call.
-      {0, GL_UNSIGNED_INT, kPaths, 0, kFillMode, kReference, kMask,
-       GL_TRANSLATE_X_CHROMIUM, transform_values, sizeof(kPaths),
-       sizeof(transform_values), error::kNoError, GL_NO_ERROR, false},
-
-      // Negative path count produces error.
-      {-1, GL_UNSIGNED_INT, kPaths, 0, kFillMode, kReference, kMask,
-       GL_TRANSLATE_X_CHROMIUM, transform_values, sizeof(kPaths),
-       sizeof(transform_values), error::kNoError, GL_INVALID_VALUE, false},
-
-      // Passing paths count but not having the shm data is a connection error.
-      {kPathCount, GL_UNSIGNED_INT, nullptr, 0, kFillMode, kReference, kMask,
-       GL_TRANSLATE_X_CHROMIUM, transform_values, 0, sizeof(transform_values),
-       error::kOutOfBounds, GL_NO_ERROR, false},
-
-      // Huge path count would cause huge transfer buffer, it does not go
-      // through.
-      {std::numeric_limits<GLsizei>::max() - 3, GL_UNSIGNED_INT, kPaths, 0,
-       kFillMode, kReference, kMask, GL_TRANSLATE_X_CHROMIUM, transform_values,
-       sizeof(kPaths), sizeof(transform_values), error::kOutOfBounds,
-       GL_NO_ERROR, false},
-
-      // Test that the path base is applied correctly for each instanced call.
-      // In this case no path is marked as used, and so no GL function should be
-      // called and no error should be generated.
-      {kPathCount, GL_UNSIGNED_INT, kInvalidPathsWithBase, kInvalidPathBase,
-       kFillMode, kReference, kMask, GL_TRANSLATE_X_CHROMIUM, transform_values,
-       sizeof(kInvalidPathsWithBase), sizeof(transform_values), error::kNoError,
-       GL_NO_ERROR, false},
-
-      // Test that using correct paths but invalid transform type produces
-      // invalid enum.
-      {kPathCount, GL_UNSIGNED_INT, kPaths, 0, kFillMode, kReference, kMask,
-       GL_TRANSLATE_X_CHROMIUM - 1, transform_values, sizeof(kPaths),
-       sizeof(transform_values), error::kNoError, GL_INVALID_ENUM, false},
-
-      // Test that if we have transform, not having the shm data is a connection
-      // error.
-      {kPathCount, GL_UNSIGNED_INT, kPaths, 0, kFillMode, kReference, kMask,
-       GL_TRANSLATE_X_CHROMIUM, nullptr, sizeof(kPaths), 0, error::kOutOfBounds,
-       GL_NO_ERROR, false},
-
-  };
-  for (size_t i = 0; i < base::size(testcases); ++i) {
-    SCOPED_TRACE(testing::Message() << "InstancedNoCalls testcase " << i);
-    CallAllInstancedCommands(testcases[i]);
-  }
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, InstancedInvalidSHMValues) {
-  const GLuint kPaths[] = {1, client_path_id_, 5, client_path_id_};
-  const GLsizei kPathCount = base::size(kPaths);
-  GLfloat transform_values[12 * kPathCount];
-  for (GLsizei i = 0; i < kPathCount; ++i) {
-    for (int j = 0; j < 12; ++j) {
-      transform_values[i * 12 + j] = 0.1f * j + i;
-    }
-  }
-  enum {
-    kPathsSHMIdInvalid = 1,
-    kPathsSHMOffsetInvalid = 1 << 1,
-    kTransformsHMIdInvalid = 1 << 2,
-    kTransformsHMOffsetInvalid = 1 << 3,
-    kFirstTestcase = kPathsSHMIdInvalid,
-    kLastTestcase = kTransformsHMOffsetInvalid
-  };
-
-  for (int testcase = kFirstTestcase; testcase <= kLastTestcase; ++testcase) {
-    GLfloat* transforms = GetSharedMemoryAs<GLfloat*>();
-    uint32_t transforms_shm_id = shared_memory_id_;
-    uint32_t transforms_shm_offset = shared_memory_offset_;
-    memcpy(transforms, transform_values, sizeof(transform_values));
-
-    GLuint* paths =
-        GetSharedMemoryAsWithOffset<GLuint*>(sizeof(transform_values));
-    uint32_t paths_shm_id = shared_memory_id_;
-    uint32_t paths_shm_offset =
-        shared_memory_offset_ + sizeof(transform_values);
-
-    if (testcase & kPathsSHMIdInvalid) {
-      paths_shm_id = kInvalidSharedMemoryId;
-    }
-    if (testcase & kPathsSHMOffsetInvalid) {
-      paths_shm_offset = kInvalidSharedMemoryOffset;
-    }
-    if (testcase & kTransformsHMIdInvalid) {
-      transforms_shm_id = kInvalidSharedMemoryId;
-    }
-    if (testcase & kTransformsHMOffsetInvalid) {
-      transforms_shm_offset = kInvalidSharedMemoryOffset;
-    }
-    SCOPED_TRACE(testing::Message() << "InstancedInvalidSHMValues testcase "
-                                    << testcase);
-    CallAllInstancedCommandsWithInvalidSHM(
-        kPathCount, kPaths, paths, paths_shm_id, paths_shm_offset,
-        transforms_shm_id, transforms_shm_offset);
-  }
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       BindFragmentInputLocationCHROMIUM) {
-  const uint32_t kBucketId = 123;
-  const GLint kLocation = 2;
-  const char* kName = "testing";
-  const char* kBadName1 = "gl_testing";
-
-  SetBucketAsCString(kBucketId, kName);
-  cmds::BindFragmentInputLocationCHROMIUMBucket cmd;
-  cmd.Init(client_program_id_, kLocation, kBucketId);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-  // Check negative location.
-  SetBucketAsCString(kBucketId, kName);
-  cmd.Init(client_program_id_, -1, kBucketId);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-  // Check the highest location.
-  SetBucketAsCString(kBucketId, kName);
-  const GLint kMaxLocation = kMaxVaryingVectors * 4 - 1;
-  cmd.Init(client_program_id_, kMaxLocation, kBucketId);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-  // Check too high location.
-  SetBucketAsCString(kBucketId, kName);
-  cmd.Init(client_program_id_, kMaxLocation + 1, kBucketId);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-  // Check bad name "gl_...".
-  SetBucketAsCString(kBucketId, kBadName1);
-  cmd.Init(client_program_id_, kLocation, kBucketId);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
 class GLES2DecoderTestWithCHROMIUMRasterTransport : public GLES2DecoderTest {
  public:
   GLES2DecoderTestWithCHROMIUMRasterTransport() = default;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions_autogen.h
index 4bf38b4..3f767a9d 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions_autogen.h
@@ -12,61 +12,6 @@
 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_EXTENSIONS_AUTOGEN_H_
 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_EXTENSIONS_AUTOGEN_H_
 
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       MatrixLoadfCHROMIUMImmediateValidArgs) {
-  cmds::MatrixLoadfCHROMIUMImmediate& cmd =
-      *GetImmediateAs<cmds::MatrixLoadfCHROMIUMImmediate>();
-  SpecializedSetup<cmds::MatrixLoadfCHROMIUMImmediate, 0>(true);
-  GLfloat temp[16] = {
-      0,
-  };
-  cmd.Init(GL_PATH_PROJECTION_CHROMIUM, &temp[0]);
-  EXPECT_CALL(*gl_, MatrixLoadfEXT(GL_PATH_PROJECTION_CHROMIUM,
-                                   PointsToArray(temp, 16)));
-  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       MatrixLoadIdentityCHROMIUMValidArgs) {
-  EXPECT_CALL(*gl_, MatrixLoadIdentityEXT(GL_PATH_PROJECTION_CHROMIUM));
-  SpecializedSetup<cmds::MatrixLoadIdentityCHROMIUM, 0>(true);
-  cmds::MatrixLoadIdentityCHROMIUM cmd;
-  cmd.Init(GL_PATH_PROJECTION_CHROMIUM);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, IsPathCHROMIUMValidArgs) {
-  EXPECT_CALL(*gl_, IsPathNV(kServicePathId));
-  SpecializedSetup<cmds::IsPathCHROMIUM, 0>(true);
-  cmds::IsPathCHROMIUM cmd;
-  cmd.Init(client_path_id_, shared_memory_id_, shared_memory_offset_);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       IsPathCHROMIUMInvalidArgsBadSharedMemoryId) {
-  EXPECT_CALL(*gl_, IsPathNV(kServicePathId)).Times(0);
-  SpecializedSetup<cmds::IsPathCHROMIUM, 0>(false);
-  cmds::IsPathCHROMIUM cmd;
-  cmd.Init(client_path_id_, kInvalidSharedMemoryId, shared_memory_offset_);
-  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-  cmd.Init(client_path_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
-  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering,
-       PathStencilFuncCHROMIUMValidArgs) {
-  EXPECT_CALL(*gl_, PathStencilFuncNV(GL_NEVER, 2, 3));
-  SpecializedSetup<cmds::PathStencilFuncCHROMIUM, 0>(true);
-  cmds::PathStencilFuncCHROMIUM cmd;
-  cmd.Init(GL_NEVER, 2, 3);
-  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
 TEST_P(GLES2DecoderTestWithCHROMIUMFramebufferMixedSamples,
        CoverageModulationCHROMIUMValidArgs) {
   EXPECT_CALL(*gl_, CoverageModulationNV(GL_RGB));
diff --git a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
index 6673fea..9b0a479 100644
--- a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
@@ -152,72 +152,6 @@
 };
 MapBufferAccessValidator map_buffer_access;
 
-class MatrixModeValidator {
- public:
-  bool IsValid(const GLenum value) const;
-};
-MatrixModeValidator matrix_mode;
-
-class PathCoordTypeValidator {
- public:
-  bool IsValid(const GLenum value) const;
-};
-PathCoordTypeValidator path_coord_type;
-
-class PathCoverModeValidator {
- public:
-  bool IsValid(const GLenum value) const;
-};
-PathCoverModeValidator path_cover_mode;
-
-class PathFillModeValidator {
- public:
-  bool IsValid(const GLenum value) const;
-};
-PathFillModeValidator path_fill_mode;
-
-class PathFragmentInputGenModeValidator {
- public:
-  bool IsValid(const GLenum value) const;
-};
-PathFragmentInputGenModeValidator path_fragment_input_gen_mode;
-
-class PathInstancedCoverModeValidator {
- public:
-  bool IsValid(const GLenum value) const;
-};
-PathInstancedCoverModeValidator path_instanced_cover_mode;
-
-class PathNameTypeValidator {
- public:
-  bool IsValid(const GLenum value) const;
-};
-PathNameTypeValidator path_name_type;
-
-class PathParameterValidator {
- public:
-  bool IsValid(const GLenum value) const;
-};
-PathParameterValidator path_parameter;
-
-class PathParameterCapValuesValidator {
- public:
-  bool IsValid(const GLint value) const;
-};
-PathParameterCapValuesValidator path_parameter_cap_values;
-
-class PathParameterJoinValuesValidator {
- public:
-  bool IsValid(const GLint value) const;
-};
-PathParameterJoinValuesValidator path_parameter_join_values;
-
-class PathTransformTypeValidator {
- public:
-  bool IsValid(const GLenum value) const;
-};
-PathTransformTypeValidator path_transform_type;
-
 ValueValidator<GLenum> pixel_store;
 class PixelStoreAlignmentValidator {
  public:
diff --git a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
index efc505e..5284cc8 100644
--- a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
@@ -537,132 +537,6 @@
   return false;
 }
 
-bool Validators::MatrixModeValidator::IsValid(const GLenum value) const {
-  switch (value) {
-    case GL_PATH_PROJECTION_CHROMIUM:
-    case GL_PATH_MODELVIEW_CHROMIUM:
-      return true;
-  }
-  return false;
-}
-
-bool Validators::PathCoordTypeValidator::IsValid(const GLenum value) const {
-  switch (value) {
-    case GL_BYTE:
-    case GL_UNSIGNED_BYTE:
-    case GL_SHORT:
-    case GL_UNSIGNED_SHORT:
-    case GL_FLOAT:
-      return true;
-  }
-  return false;
-}
-
-bool Validators::PathCoverModeValidator::IsValid(const GLenum value) const {
-  switch (value) {
-    case GL_CONVEX_HULL_CHROMIUM:
-    case GL_BOUNDING_BOX_CHROMIUM:
-      return true;
-  }
-  return false;
-}
-
-bool Validators::PathFillModeValidator::IsValid(const GLenum value) const {
-  switch (value) {
-    case GL_INVERT:
-    case GL_COUNT_UP_CHROMIUM:
-    case GL_COUNT_DOWN_CHROMIUM:
-      return true;
-  }
-  return false;
-}
-
-bool Validators::PathFragmentInputGenModeValidator::IsValid(
-    const GLenum value) const {
-  switch (value) {
-    case GL_NONE:
-    case GL_EYE_LINEAR_CHROMIUM:
-    case GL_OBJECT_LINEAR_CHROMIUM:
-    case GL_CONSTANT_CHROMIUM:
-      return true;
-  }
-  return false;
-}
-
-bool Validators::PathInstancedCoverModeValidator::IsValid(
-    const GLenum value) const {
-  switch (value) {
-    case GL_CONVEX_HULL_CHROMIUM:
-    case GL_BOUNDING_BOX_CHROMIUM:
-    case GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM:
-      return true;
-  }
-  return false;
-}
-
-bool Validators::PathNameTypeValidator::IsValid(const GLenum value) const {
-  switch (value) {
-    case GL_UNSIGNED_BYTE:
-    case GL_BYTE:
-    case GL_UNSIGNED_SHORT:
-    case GL_SHORT:
-    case GL_UNSIGNED_INT:
-    case GL_INT:
-      return true;
-  }
-  return false;
-}
-
-bool Validators::PathParameterValidator::IsValid(const GLenum value) const {
-  switch (value) {
-    case GL_PATH_STROKE_WIDTH_CHROMIUM:
-    case GL_PATH_END_CAPS_CHROMIUM:
-    case GL_PATH_JOIN_STYLE_CHROMIUM:
-    case GL_PATH_MITER_LIMIT_CHROMIUM:
-    case GL_PATH_STROKE_BOUND_CHROMIUM:
-      return true;
-  }
-  return false;
-}
-
-bool Validators::PathParameterCapValuesValidator::IsValid(
-    const GLint value) const {
-  switch (value) {
-    case GL_FLAT:
-    case GL_SQUARE_CHROMIUM:
-    case GL_ROUND_CHROMIUM:
-      return true;
-  }
-  return false;
-}
-
-bool Validators::PathParameterJoinValuesValidator::IsValid(
-    const GLint value) const {
-  switch (value) {
-    case GL_MITER_REVERT_CHROMIUM:
-    case GL_BEVEL_CHROMIUM:
-    case GL_ROUND_CHROMIUM:
-      return true;
-  }
-  return false;
-}
-
-bool Validators::PathTransformTypeValidator::IsValid(const GLenum value) const {
-  switch (value) {
-    case GL_NONE:
-    case GL_TRANSLATE_X_CHROMIUM:
-    case GL_TRANSLATE_Y_CHROMIUM:
-    case GL_TRANSLATE_2D_CHROMIUM:
-    case GL_TRANSLATE_3D_CHROMIUM:
-    case GL_AFFINE_2D_CHROMIUM:
-    case GL_AFFINE_3D_CHROMIUM:
-    case GL_TRANSPOSE_AFFINE_2D_CHROMIUM:
-    case GL_TRANSPOSE_AFFINE_3D_CHROMIUM:
-      return true;
-  }
-  return false;
-}
-
 static const GLenum valid_pixel_store_table[] = {
     GL_PACK_ALIGNMENT,
     GL_UNPACK_ALIGNMENT,
diff --git a/gpu/command_buffer/service/path_manager.cc b/gpu/command_buffer/service/path_manager.cc
deleted file mode 100644
index e215527..0000000
--- a/gpu/command_buffer/service/path_manager.cc
+++ /dev/null
@@ -1,251 +0,0 @@
-// Copyright (c) 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 "gpu/command_buffer/service/path_manager.h"
-
-#include <algorithm>
-
-#include "base/logging.h"
-#include "gpu/command_buffer/common/gles2_cmd_utils.h"
-#include "ui/gl/gl_bindings.h"
-
-namespace gpu {
-namespace gles2 {
-
-namespace {
-void CallDeletePaths(GLuint first_id, GLuint range) {
-  while (range > 0) {
-    GLsizei irange;
-    if (range > static_cast<GLuint>(std::numeric_limits<GLsizei>::max()))
-      irange = std::numeric_limits<GLsizei>::max();
-    else
-      irange = static_cast<GLsizei>(range);
-
-    glDeletePathsNV(first_id, irange);
-    range -= irange;
-    first_id += irange;
-  }
-}
-
-template <typename RangeIterator>
-static GLuint RangeSize(const RangeIterator& it) {
-  return it->second.last_client_id - it->first + 1;
-}
-template <typename RangeIterator>
-static GLuint FirstClientId(const RangeIterator& it) {
-  return it->first;
-}
-template <typename RangeIterator>
-static GLuint FirstServiceId(const RangeIterator& it) {
-  return it->second.first_service_id;
-}
-template <typename RangeIterator>
-static GLuint LastServiceId(const RangeIterator& it) {
-  return FirstServiceId(it) + RangeSize(it) - 1;
-}
-static GLuint LastClientId(PathManager::PathRangeMap::const_iterator& it) {
-  return it->second.last_client_id;
-}
-// Note: this one can be assigned to.
-static GLuint& LastClientId(PathManager::PathRangeMap::iterator& it) {
-  return it->second.last_client_id;
-}
-
-template <typename T>
-struct IteratorSelector {
-  typedef typename T::iterator iterator;
-};
-template <typename T>
-struct IteratorSelector<const T> {
-  typedef typename T::const_iterator iterator;
-};
-
-// Returns the range position that contains |client_id| or
-// |PathRangeMap::iterator::end()| if |client_id| is not found.
-template <typename MapType>
-static typename IteratorSelector<MapType>::iterator GetContainingRange(
-    MapType& path_map,
-    GLuint client_id) {
-  auto it = path_map.lower_bound(client_id);
-  if (it != path_map.end() && FirstClientId(it) == client_id)
-    return it;
-  if (it != path_map.begin()) {
-    --it;
-    if (LastClientId(it) >= client_id)
-      return it;
-  }
-  return path_map.end();
-}
-
-// Returns the range position that contains |client_id|. If that is
-// not available, returns the range that has smallest
-// |first_client_id| that is bigger than |client_id|. Returns
-// |PathRangeMap::iterator::end()| if there is no such range.
-template <typename MapType>
-static typename IteratorSelector<MapType>::iterator GetContainingOrNextRange(
-    MapType& path_map,
-    GLuint client_id) {
-  auto it = path_map.lower_bound(client_id);
-  if (it != path_map.end() && FirstClientId(it) == client_id) {
-    return it;
-  }
-  if (it != path_map.begin()) {
-    --it;
-    if (LastClientId(it) >= client_id)
-      return it;
-    ++it;
-  }
-  return it;
-}
-
-}  // anonymous namespace
-
-PathManager::PathManager() = default;
-
-PathManager::~PathManager() {
-  DCHECK(path_map_.empty());
-}
-
-void PathManager::Destroy(bool have_context) {
-  if (have_context) {
-    for (PathRangeMap::const_iterator it = path_map_.begin();
-         it != path_map_.end(); ++it)
-      CallDeletePaths(FirstServiceId(it), RangeSize(it));
-  }
-  path_map_.clear();
-}
-
-void PathManager::CreatePathRange(GLuint first_client_id,
-                                  GLuint last_client_id,
-                                  GLuint first_service_id) {
-  DCHECK(first_service_id > 0u);
-  DCHECK(first_client_id > 0u);
-  DCHECK(!HasPathsInRange(first_client_id, last_client_id));
-  DCHECK(CheckConsistency());
-
-  PathRangeMap::iterator range =
-      GetContainingRange(path_map_, first_client_id - 1u);
-
-  if (range != path_map_.end() &&
-      LastServiceId(range) == first_service_id - 1u) {
-    DCHECK_EQ(LastClientId(range), first_client_id - 1u);
-    LastClientId(range) = last_client_id;
-  } else {
-    auto result = path_map_.insert(
-        std::make_pair(first_client_id,
-                       PathRangeDescription(last_client_id, first_service_id)));
-    DCHECK(result.second);
-    range = result.first;
-  }
-
-  PathRangeMap::iterator next_range = range;
-  ++next_range;
-  if (next_range != path_map_.end()) {
-    if (LastClientId(range) == FirstClientId(next_range) - 1u &&
-        LastServiceId(range) == FirstServiceId(next_range) - 1u) {
-      LastClientId(range) = LastClientId(next_range);
-      path_map_.erase(next_range);
-    }
-  }
-  DCHECK(CheckConsistency());
-}
-
-bool PathManager::HasPathsInRange(GLuint first_client_id,
-                                  GLuint last_client_id) const {
-  PathRangeMap::const_iterator it =
-      GetContainingOrNextRange(path_map_, first_client_id);
-  if (it == path_map_.end())
-    return false;
-
-  return FirstClientId(it) <= last_client_id;
-}
-
-bool PathManager::GetPath(GLuint client_id, GLuint* service_id) const {
-  PathRangeMap::const_iterator range = GetContainingRange(path_map_, client_id);
-  if (range == path_map_.end())
-    return false;
-
-  *service_id = FirstServiceId(range) + client_id - FirstClientId(range);
-  return true;
-}
-
-void PathManager::RemovePaths(GLuint first_client_id, GLuint last_client_id) {
-  DCHECK(CheckConsistency());
-  PathRangeMap::iterator it =
-      GetContainingOrNextRange(path_map_, first_client_id);
-
-  while (it != path_map_.end() && FirstClientId(it) <= last_client_id) {
-    GLuint delete_first_client_id =
-        std::max(first_client_id, FirstClientId(it));
-    GLuint delete_last_client_id = std::min(last_client_id, LastClientId(it));
-    GLuint delete_first_service_id =
-        FirstServiceId(it) + delete_first_client_id - FirstClientId(it);
-    GLuint delete_range = delete_last_client_id - delete_first_client_id + 1u;
-
-    CallDeletePaths(delete_first_service_id, delete_range);
-
-    PathRangeMap::iterator current = it;
-    ++it;
-
-    GLuint current_last_client_id = LastClientId(current);
-
-    if (FirstClientId(current) < delete_first_client_id)
-      LastClientId(current) = delete_first_client_id - 1u;
-    else
-      path_map_.erase(current);
-
-    if (current_last_client_id > delete_last_client_id) {
-      path_map_.insert(std::make_pair(
-          delete_last_client_id + 1u,
-          PathRangeDescription(current_last_client_id,
-                               delete_first_service_id + delete_range)));
-      DCHECK(delete_last_client_id == last_client_id);
-      // This is necessarily the last range to check. Return early due to
-      // consistency. Iterator increment would skip the inserted range. The
-      // algorithm would work ok, but it looks weird.
-      DCHECK(CheckConsistency());
-      return;
-    }
-  }
-  DCHECK(CheckConsistency());
-}
-
-bool PathManager::CheckConsistency() {
-  GLuint prev_first_client_id = 0u;
-  GLuint prev_last_client_id = 0u;
-  GLuint prev_first_service_id = 0u;
-  for (PathRangeMap::iterator range = path_map_.begin();
-       range != path_map_.end(); ++range) {
-    // Code relies on ranges not starting at 0. Also, the above initialization
-    // is only
-    // correct then.
-    if (FirstClientId(range) == 0u || FirstServiceId(range) == 0u)
-      return false;
-
-    // Each range is consistent.
-    if (FirstClientId(range) > LastClientId(range))
-      return false;
-
-    if (prev_first_client_id != 0u) {
-      // No overlapping ranges. (The iteration is sorted).
-      if (FirstClientId(range) <= prev_last_client_id)
-        return false;
-
-      // No mergeable ranges.
-      bool is_mergeable_client =
-          FirstClientId(range) - 1u == prev_last_client_id;
-      bool is_mergeable_service =
-          FirstServiceId(range) - 1u == prev_first_service_id;
-      if (is_mergeable_client && is_mergeable_service)
-        return false;
-    }
-    prev_first_client_id = FirstClientId(range);
-    prev_last_client_id = LastClientId(range);
-    prev_first_service_id = FirstServiceId(range);
-  }
-  return true;
-}
-
-}  // namespace gles2
-}  // namespace gpu
diff --git a/gpu/command_buffer/service/path_manager.h b/gpu/command_buffer/service/path_manager.h
deleted file mode 100644
index 840f621..0000000
--- a/gpu/command_buffer/service/path_manager.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 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 GPU_COMMAND_BUFFER_SERVICE_PATH_MANAGER_H_
-#define GPU_COMMAND_BUFFER_SERVICE_PATH_MANAGER_H_
-
-#include <map>
-
-#include "base/macros.h"
-#include "gpu/command_buffer/service/gl_utils.h"
-#include "gpu/gpu_gles2_export.h"
-
-namespace gpu {
-namespace gles2 {
-
-// This class keeps track of paths and their client and service ids
-// so we can correctly clear them.
-class GPU_GLES2_EXPORT PathManager {
- public:
-  PathManager();
-  ~PathManager();
-
-  // Must call before destruction.
-  void Destroy(bool have_context);
-
-  // Creates a path mapping between closed intervals
-  // [first_client_id, last_client_id] -> [first_service_id, ...].
-  void CreatePathRange(GLuint first_client_id,
-                       GLuint last_client_id,
-                       GLuint first_service_id);
-
-  // Returns true if any path exists in the closed interval
-  // [first_client_id, last_client_id].
-  bool HasPathsInRange(GLuint first_client_id, GLuint last_client_id) const;
-
-  // Gets the path id corresponding the client path id.
-  // Returns false if no such service path id was not found.
-  bool GetPath(GLuint client_id, GLuint* service_id) const;
-
-  // Removes a closed interval of paths [first_client_id, last_client_id].
-  void RemovePaths(GLuint first_client_id, GLuint last_client_id);
-
-  // Mapping between client id and service id.
-  // Should be used only by the implementation.
-  struct PathRangeDescription {
-    PathRangeDescription(GLuint last_client, GLuint first_service)
-        : last_client_id(last_client), first_service_id(first_service) {}
-    GLuint last_client_id;
-    GLuint first_service_id;
-    typedef GLuint ServiceIdType;
-  };
-  typedef std::map<GLuint, PathRangeDescription> PathRangeMap;
-
- private:
-  // Checks for consistency inside the book-keeping structures. Used as
-  // DCHECK pre/post condition in mutating functions.
-  bool CheckConsistency();
-
-  PathRangeMap path_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(PathManager);
-};
-
-}  // namespace gles2
-}  // namespace gpu
-
-#endif  // GPU_COMMAND_BUFFER_SERVICE_PATH_MANAGER_H_
diff --git a/gpu/command_buffer/service/path_manager_unittest.cc b/gpu/command_buffer/service/path_manager_unittest.cc
deleted file mode 100644
index e1173d2..0000000
--- a/gpu/command_buffer/service/path_manager_unittest.cc
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright (c) 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 "gpu/command_buffer/service/path_manager.h"
-
-#include <memory>
-
-#include "gpu/command_buffer/service/gpu_service_test.h"
-#include "gpu/command_buffer/service/mocks.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gl/gl_mock.h"
-
-namespace gpu {
-namespace gles2 {
-
-class PathManagerTest : public GpuServiceTest {
- public:
-  PathManagerTest() = default;
-
- protected:
-  void SetUp() override {
-    SetUpWithGLVersion("3.0", "GL_NV_path_rendering");
-    manager_.reset(new PathManager());
-  }
-
-  void TearDown() override {
-    manager_->Destroy(true);
-    manager_.reset();
-    GpuServiceTest::TearDown();
-  }
-
-  std::unique_ptr<PathManager> manager_;
-};
-
-TEST_F(PathManagerTest, Basic) {
-  const GLuint kClient1Id = 1;
-  const GLuint kService1Id = 11;
-  const GLuint kClient2Id = 2;
-  GLuint service_id = 0;
-  manager_->CreatePathRange(kClient1Id, kClient1Id, kService1Id);
-  ASSERT_TRUE(manager_->HasPathsInRange(kClient1Id, kClient1Id));
-  EXPECT_TRUE(manager_->GetPath(kClient1Id, &service_id));
-  EXPECT_EQ(kService1Id, service_id);
-
-  // Check we get nothing for a non-existent path.
-  service_id = 123u;
-  ASSERT_FALSE(manager_->HasPathsInRange(kClient2Id, kClient2Id));
-  EXPECT_FALSE(manager_->GetPath(kClient2Id, &service_id));
-  EXPECT_EQ(123u, service_id);
-
-  // Check trying to remove non-existent paths does not crash.
-  manager_->RemovePaths(kClient2Id, kClient2Id);
-
-  // Check that it gets deleted when the last reference is released.
-  EXPECT_CALL(*gl_, DeletePathsNV(kService1Id, 1))
-      .Times(1)
-      .RetiresOnSaturation();
-
-  // Check we can't get the path after we remove it.
-  manager_->RemovePaths(kClient1Id, kClient1Id);
-  ASSERT_FALSE(manager_->HasPathsInRange(kClient1Id, kClient1Id));
-  EXPECT_FALSE(manager_->GetPath(kClient1Id, &service_id));
-}
-
-// Tests that path manager does not merge ranges that contain service ids that
-//  prevent the merging. Path ranges A and B can be merged if
-// * client ids of B start immediately after the last client id of A
-// * service ids of B start immediately after the last service id of A
-// and similarly for the 'before' case.
-TEST_F(PathManagerTest, NonContiguousServiceIds) {
-  const GLuint kMergeCheckRange = 54;
-
-  const struct {
-    GLuint first_client_id;
-    GLuint last_client_id;
-    GLuint first_service_id;
-  } kIdRanges[] = {{500, 1000, 900}, {1001, 1155, 1}, {200, 499, 4888}};
-  for (auto& range : kIdRanges) {
-    manager_->CreatePathRange(range.first_client_id, range.last_client_id,
-                              range.first_service_id);
-    ASSERT_TRUE(manager_->HasPathsInRange(range.first_client_id,
-                                          range.first_client_id));
-    ASSERT_TRUE(
-        manager_->HasPathsInRange(range.last_client_id, range.last_client_id));
-    ASSERT_TRUE(
-        manager_->HasPathsInRange(range.first_client_id, range.last_client_id));
-    GLuint service_id = 0u;
-    EXPECT_TRUE(manager_->GetPath(range.first_client_id + 5u, &service_id));
-    EXPECT_EQ(range.first_service_id + 5u, service_id);
-  }
-
-  // Insert a mergeable range last, to check that merges
-  // work. Otherwise the test could succeed because merges were not
-  // working.
-  auto& merge_candidate = kIdRanges[1];
-  GLuint merge_candidate_range =
-      merge_candidate.last_client_id - merge_candidate.first_client_id + 1;
-  manager_->CreatePathRange(
-      merge_candidate.last_client_id + 1,
-      merge_candidate.last_client_id + kMergeCheckRange,
-      merge_candidate.first_service_id + merge_candidate_range);
-
-  // We detect that ranges were not merged accidentally by detecting individual
-  // deletes.
-  for (auto& range : kIdRanges) {
-    if (&range == &merge_candidate)
-      continue;
-    GLsizei range_amount = range.last_client_id - range.first_client_id + 1;
-    EXPECT_CALL(*gl_, DeletePathsNV(range.first_service_id, range_amount))
-        .Times(1)
-        .RetiresOnSaturation();
-  }
-
-  // Just a check that merges work.
-  EXPECT_CALL(*gl_, DeletePathsNV(merge_candidate.first_service_id,
-                                  merge_candidate_range + kMergeCheckRange))
-      .Times(1)
-      .RetiresOnSaturation();
-
-  // Remove all ids. This should cause the expected amount of DeletePathsNV
-  // calls.
-  manager_->RemovePaths(1, std::numeric_limits<GLsizei>::max());
-
-  for (auto& range : kIdRanges) {
-    ASSERT_FALSE(
-        manager_->HasPathsInRange(range.first_client_id, range.last_client_id));
-  }
-}
-
-TEST_F(PathManagerTest, DeleteBigRange) {
-  // Allocates two ranges which in path manager end up merging as one
-  // big range. The range will be too big to fit in one DeletePaths
-  // call.  Test that the range is deleted correctly with two calls.
-  const GLuint kFirstClientId1 = 1;
-  const GLsizei kRange1 = std::numeric_limits<GLsizei>::max() - 3;
-  const GLuint kLastClientId1 = kFirstClientId1 + kRange1 - 1;
-  const GLuint kFirstServiceId1 = 77;
-  const GLuint kLastServiceId1 = kFirstServiceId1 + kRange1 - 1;
-
-  const GLuint kFirstClientId2 = kLastClientId1 + 1;
-  const GLsizei kRange2 = 15;
-  const GLuint kLastClientId2 = kFirstClientId2 + kRange2 - 1;
-  const GLuint kFirstServiceId2 = kLastServiceId1 + 1;
-
-  const GLsizei kFirstDeleteRange = std::numeric_limits<GLsizei>::max();
-  const GLsizei kSecondDeleteRange = kRange2 - (kFirstDeleteRange - kRange1);
-  const GLuint kSecondDeleteFirstServiceId =
-      kFirstServiceId1 + kFirstDeleteRange;
-
-  EXPECT_CALL(*gl_, DeletePathsNV(kFirstServiceId1,
-                                  std::numeric_limits<GLsizei>::max()))
-      .RetiresOnSaturation();
-
-  EXPECT_CALL(*gl_, DeletePathsNV(kSecondDeleteFirstServiceId,
-                                  kSecondDeleteRange)).RetiresOnSaturation();
-
-  manager_->CreatePathRange(kFirstClientId1, kLastClientId1, kFirstServiceId1);
-  manager_->CreatePathRange(kFirstClientId2, kLastClientId2, kFirstServiceId2);
-  manager_->RemovePaths(0, std::numeric_limits<GLuint>::max());
-}
-
-}  // namespace gles2
-
-}  // namespace gpu
diff --git a/gpu/command_buffer/service/program_manager.cc b/gpu/command_buffer/service/program_manager.cc
index 8c1ff02..4574d33 100644
--- a/gpu/command_buffer/service/program_manager.cc
+++ b/gpu/command_buffer/service/program_manager.cc
@@ -430,8 +430,6 @@
   attrib_infos_.clear();
   uniform_infos_.clear();
   uniform_locations_.clear();
-  fragment_input_infos_.clear();
-  fragment_input_locations_.clear();
   program_output_infos_.clear();
   sampler_indices_.clear();
   attrib_location_to_index_map_.clear();
@@ -853,7 +851,6 @@
     }
   }
 
-  UpdateFragmentInputs();
   UpdateProgramOutputs();
   UpdateFragmentOutputBaseTypes();
   UpdateVertexInputBaseTypes();
@@ -1042,134 +1039,6 @@
   return true;
 }
 
-void Program::UpdateFragmentInputs() {
-  if (!feature_info().feature_flags().chromium_path_rendering)
-    return;
-  for (const auto& binding : bind_fragment_input_location_map_) {
-    if (binding.second < 0)
-      continue;
-    size_t client_location = static_cast<size_t>(binding.second);
-    if (fragment_input_locations_.size() <= client_location)
-      fragment_input_locations_.resize(client_location + 1);
-    fragment_input_locations_[client_location].SetInactive();
-  }
-
-  GLint num_fragment_inputs = 0;
-  glGetProgramInterfaceiv(service_id_, GL_FRAGMENT_INPUT_NV,
-                          GL_ACTIVE_RESOURCES, &num_fragment_inputs);
-  if (num_fragment_inputs <= 0)
-    return;
-
-  GLint max_len = 0;
-  glGetProgramInterfaceiv(service_id_, GL_FRAGMENT_INPUT_NV, GL_MAX_NAME_LENGTH,
-                          &max_len);
-  DCHECK(max_len > 0);
-
-  std::unique_ptr<char[]> name_buffer(new char[max_len]);
-
-  Shader* fragment_shader =
-      shaders_from_last_successful_link_[ShaderTypeToIndex(GL_FRAGMENT_SHADER)]
-          .get();
-
-  const GLenum kQueryProperties[] = {GL_LOCATION, GL_TYPE, GL_ARRAY_SIZE};
-
-  std::vector<size_t> client_location_indices;
-  for (GLint ii = 0; ii < num_fragment_inputs; ++ii) {
-    GLsizei name_length = 0;
-    glGetProgramResourceName(service_id_, GL_FRAGMENT_INPUT_NV, ii, max_len,
-                             &name_length, name_buffer.get());
-    DCHECK(name_length < max_len);
-    DCHECK(name_length == 0 || name_buffer[name_length] == '\0');
-    // A fragment shader can have gl_FragCoord, gl_FrontFacing or gl_PointCoord
-    // built-ins as its input, as well as custom varyings. We are interested in
-    // custom varyings, client is allowed to bind only them.
-    std::string service_name(name_buffer.get(), name_length);
-    if (ProgramManager::HasBuiltInPrefix(service_name))
-      continue;
-    // Unlike when binding uniforms, we expect the driver to give correct
-    // names: "name" for simple variable, "name[0]" for an array.
-    GLsizei query_length = 0;
-    GLint query_results[base::size(kQueryProperties)] = {
-        0,
-    };
-    glGetProgramResourceiv(service_id_, GL_FRAGMENT_INPUT_NV, ii,
-                           base::size(kQueryProperties), kQueryProperties,
-                           base::size(query_results), &query_length,
-                           query_results);
-    DCHECK(query_length == base::size(kQueryProperties));
-
-    GLenum type = static_cast<GLenum>(query_results[1]);
-    GLsizei size = static_cast<GLsizei>(query_results[2]);
-    std::string client_name;
-
-    const sh::Varying* varying = fragment_shader->GetVaryingInfo(service_name);
-    const sh::ShaderVariable* info = nullptr;
-    if (varying &&
-        varying->findInfoByMappedName(service_name, &info, &client_name)) {
-      type = info->type;
-      size = std::max(1u, info->getOutermostArraySize());
-    } else {
-      // Should only happen if there are major bugs in the driver, ANGLE or if
-      // the shader translator is disabled.
-      DCHECK(feature_info().disable_shader_translator());
-      client_name = service_name;
-      if (size <= 0)
-        continue;
-    }
-
-    auto it = bind_fragment_input_location_map_.find(client_name);
-    if (it != bind_fragment_input_location_map_.end() && it->second >= 0 &&
-        query_results[0] >= 0) {
-      size_t client_location = static_cast<size_t>(it->second);
-      GLuint service_location = static_cast<GLuint>(query_results[0]);
-      fragment_input_infos_.push_back(
-          FragmentInputInfo(type, service_location));
-      client_location_indices.push_back(client_location);
-    }
-
-    if (size <= 1)
-      continue;
-    GLSLArrayName parsed_client_name(client_name);
-    GLSLArrayName parsed_service_name(service_name);
-    if (!parsed_client_name.IsArrayName() ||
-        parsed_client_name.element_index() != 0 ||
-        !parsed_service_name.IsArrayName() ||
-        parsed_service_name.element_index() != 0) {
-      NOTREACHED() << "GLSL array variable names should end with \"[0]\". "
-                      "Likely driver or ANGLE error.";
-      continue;
-    }
-
-    for (GLsizei jj = 1; jj < size; ++jj) {
-      std::string array_spec(std::string("[") + base::NumberToString(jj) + "]");
-      std::string client_element_name =
-          parsed_client_name.base_name() + array_spec;
-
-      it = bind_fragment_input_location_map_.find(client_element_name);
-      if (it != bind_fragment_input_location_map_.end() && it->second >= 0) {
-        size_t client_location = static_cast<size_t>(it->second);
-        std::string service_element_name =
-            parsed_service_name.base_name() + array_spec;
-        GLint service_location = glGetProgramResourceLocation(
-            service_id_, GL_FRAGMENT_INPUT_NV, service_element_name.c_str());
-        if (service_location >= 0) {
-          fragment_input_infos_.push_back(
-              FragmentInputInfo(type, static_cast<GLuint>(service_location)));
-          client_location_indices.push_back(client_location);
-        }
-      }
-    }
-  }
-  for (size_t i = 0; i < client_location_indices.size(); ++i) {
-    size_t client_location = client_location_indices[i];
-    // Before linking, we already validated that no two statically used fragment
-    // inputs are bound to the same location.
-    DCHECK(!fragment_input_locations_[client_location].IsActive());
-    fragment_input_locations_[client_location].SetActive(
-        &fragment_input_infos_[i]);
-  }
-}
-
 void Program::UpdateProgramOutputs() {
   if (!feature_info().gl_version_info().is_es3_capable ||
       feature_info().disable_shader_translator())
@@ -1443,10 +1312,6 @@
       set_log_info(ProcessLogInfo(info_log).c_str());
       return false;
     }
-    if (DetectFragmentInputLocationBindingConflicts()) {
-      set_log_info("glBindFragmentInputLocationCHROMIUM() conflicts");
-      return false;
-    }
     if (DetectProgramOutputLocationBindingConflicts()) {
       set_log_info("glBindFragDataLocation() conflicts");
       return false;
@@ -1686,28 +1551,6 @@
   return nullptr;
 }
 
-const Program::FragmentInputInfo* Program::GetFragmentInputInfoByFakeLocation(
-    GLint fake_location) const {
-  if (fake_location < 0)
-    return nullptr;
-  size_t location_index = static_cast<size_t>(fake_location);
-  if (location_index >= fragment_input_locations_.size())
-    return nullptr;
-  if (!fragment_input_locations_[location_index].IsActive())
-    return nullptr;
-  return fragment_input_locations_[location_index].shader_variable();
-}
-
-bool Program::IsInactiveFragmentInputLocationByFakeLocation(
-    GLint fake_location) const {
-  if (fake_location < 0)
-    return true;
-  size_t location_index = static_cast<size_t>(fake_location);
-  if (location_index >= fragment_input_locations_.size())
-    return false;
-  return fragment_input_locations_[location_index].IsInactive();
-}
-
 bool Program::SetUniformLocationBinding(
     const std::string& name, GLint location) {
   std::string short_name;
@@ -1720,21 +1563,6 @@
   return true;
 }
 
-void Program::SetFragmentInputLocationBinding(const std::string& name,
-                                              GLint location) {
-  // The client wants to bind either "name" or "name[0]".
-  // GL ES 3.1 spec refers to active array names with language such as:
-  // "if the string identifies the base name of an active array, where the
-  // string would exactly match the name of the variable if the suffix "[0]"
-  // were appended to the string".
-
-  // At this point we can not know if the string identifies a simple variable,
-  // a base name of an array, or nothing.  Store both, so if user overwrites
-  // either, both still work correctly.
-  bind_fragment_input_location_map_[name] = location;
-  bind_fragment_input_location_map_[name + "[0]"] = location;
-}
-
 void Program::SetProgramOutputLocationBinding(const std::string& name,
                                               GLuint color_name) {
   SetProgramOutputLocationIndexedBinding(name, color_name, 0);
@@ -2067,28 +1895,6 @@
   return false;
 }
 
-bool Program::DetectFragmentInputLocationBindingConflicts() const {
-  auto* shader = attached_shaders_[ShaderTypeToIndex(GL_FRAGMENT_SHADER)].get();
-  if (!shader || !shader->valid())
-    return false;
-
-  std::set<GLint> location_binding_used;
-  for (auto it : bind_fragment_input_location_map_) {
-    // Find out if an fragment input is statically used in this program's
-    // shaders.
-    const std::string* mapped_name = shader->GetVaryingMappedName(it.first);
-    if (!mapped_name)
-      continue;
-    const sh::Varying* fragment_input = shader->GetVaryingInfo(*mapped_name);
-    if (fragment_input && fragment_input->staticUse) {
-      auto result = location_binding_used.insert(it.second);
-      if (!result.second)
-        return true;
-    }
-  }
-  return false;
-}
-
 bool Program::DetectProgramOutputLocationBindingConflicts() const {
   if (feature_info().disable_shader_translator()) {
     return false;
diff --git a/gpu/command_buffer/service/program_manager.h b/gpu/command_buffer/service/program_manager.h
index 6c7d57b..800de93 100644
--- a/gpu/command_buffer/service/program_manager.h
+++ b/gpu/command_buffer/service/program_manager.h
@@ -77,13 +77,6 @@
 
   enum VaryingsPackingOption { kCountOnlyStaticallyUsed, kCountAll };
 
-  struct FragmentInputInfo {
-    FragmentInputInfo(GLenum _type, GLuint _location)
-        : type(_type), location(_location) {}
-    FragmentInputInfo() : type(GL_NONE), location(0) {}
-    GLenum type;
-    GLuint location;
-  };
   struct ProgramOutputInfo {
     ProgramOutputInfo(GLuint _color_name,
                       GLuint _index,
@@ -195,9 +188,6 @@
   typedef std::vector<ShaderVariableLocationEntry<UniformInfo>>
       UniformLocationVector;
   typedef std::vector<VertexAttrib> AttribInfoVector;
-  typedef std::vector<FragmentInputInfo> FragmentInputInfoVector;
-  typedef std::vector<ShaderVariableLocationEntry<FragmentInputInfo>>
-      FragmentInputLocationVector;
   typedef std::vector<ProgramOutputInfo> ProgramOutputInfoVector;
   typedef std::vector<int> SamplerIndices;
   typedef std::map<std::string, GLint> LocationMap;
@@ -258,11 +248,6 @@
   const sh::InterfaceBlock* GetInterfaceBlockInfo(
       const std::string& hashed_name) const;
 
-  const FragmentInputInfo* GetFragmentInputInfoByFakeLocation(
-      GLint fake_location) const;
-
-  bool IsInactiveFragmentInputLocationByFakeLocation(GLint fake_location) const;
-
   // Gets the fake location of a uniform by name.
   GLint GetUniformFakeLocation(const std::string& name) const;
 
@@ -360,10 +345,6 @@
   // Detects if the shader version combination is not valid.
   bool DetectShaderVersionMismatch() const;
 
-  // Sets fragment input-location binding from a
-  // glBindFragmentInputLocationCHROMIUM() call.
-  void SetFragmentInputLocationBinding(const std::string& name, GLint location);
-
   // Sets program output variable location. Also sets color index to zero.
   void SetProgramOutputLocationBinding(const std::string& name,
                                        GLuint colorName);
@@ -397,11 +378,6 @@
   // is not declared in vertex shader.
   bool DetectVaryingsMismatch(std::string* conflicting_name) const;
 
-  // Detects if there are fragment input location conflicts from
-  // glBindFragmentInputLocationCHROMIUM() calls.
-  // We only consider the statically used fragment inputs in the program.
-  bool DetectFragmentInputLocationBindingConflicts() const;
-
   // Detects if there are program output location conflicts from
   // glBindFragDataLocation and ..LocationIndexedEXT calls.
   // We only consider the statically used program outputs in the program.
@@ -510,7 +486,6 @@
   // Updates the program info after a successful link.
   void Update();
   bool UpdateUniforms();
-  void UpdateFragmentInputs();
   void UpdateProgramOutputs();
   void UpdateFragmentOutputBaseTypes();
   void UpdateVertexInputBaseTypes();
@@ -589,9 +564,6 @@
   // The indices of the uniforms that are samplers.
   SamplerIndices sampler_indices_;
 
-  FragmentInputInfoVector fragment_input_infos_;
-  FragmentInputLocationVector fragment_input_locations_;
-
   ProgramOutputInfoVector program_output_infos_;
 
   // The program this Program is tracking.
@@ -642,10 +614,6 @@
   // is calculated at DrawArrays{Instanced} time by multiplying vertex count.
   std::vector<GLsizeiptr> transform_feedback_data_size_per_vertex_;
 
-  // Fragment input-location binding map from
-  // glBindFragmentInputLocationCHROMIUM() calls.
-  LocationMap bind_fragment_input_location_map_;
-
   // output variable - (location,index) binding map from
   // glBindFragDataLocation() and ..IndexedEXT() calls.
   LocationIndexMap bind_program_output_location_index_map_;
diff --git a/gpu/command_buffer/service/program_manager_unittest.cc b/gpu/command_buffer/service/program_manager_unittest.cc
index adc6541..a3476cb36a 100644
--- a/gpu/command_buffer/service/program_manager_unittest.cc
+++ b/gpu/command_buffer/service/program_manager_unittest.cc
@@ -2402,140 +2402,6 @@
   EXPECT_TRUE(program_->Link(nullptr, Program::kCountOnlyStaticallyUsed, this));
 }
 
-class ProgramManagerWithPathRenderingTest
-    : public ProgramManagerWithShaderTest,
-      public testing::WithParamInterface<
-          testing::tuple<const char*, const char*>> {
- protected:
-  void SetUp() override {
-    SetUpBase(testing::get<0>(GetParam()), testing::get<1>(GetParam()));
-  }
-  static const char* kFragmentInput1Name;
-  static const char* kFragmentInput2Name;
-  // Name that GL reports for input 2. Needed because input 2 is an
-  // array.
-  static const char* kFragmentInput2GLName;
-  static const char* kFragmentInput3Name;
-  static const char* kFragmentInput3GLName;
-  static const GLint kFragmentInput1Size = 1;
-  static const GLint kFragmentInput2Size = 3;
-  static const GLint kFragmentInput3Size = 2;
-  static const int kFragmentInput1Precision = GL_LOW_FLOAT;
-  static const int kFragmentInput2Precision = GL_MEDIUM_INT;
-  static const int kFragmentInput3Precision = GL_HIGH_FLOAT;
-  static const int kFragmentInput1StaticUse = 1;
-  static const int kFragmentInput2StaticUse = 1;
-  static const int kFragmentInput3StaticUse = 1;
-  static const GLint kFragmentInput1FakeLocation = 0;
-  static const GLint kFragmentInput2FakeLocation = 1;
-  static const GLint kFragmentInput3FakeLocation = 2;
-  static const GLint kFragmentInput1RealLocation = 11;
-  static const GLint kFragmentInput2RealLocation = 22;
-  static const GLint kFragmentInput3RealLocation = 33;
-  static const GLenum kFragmentInput1Type = GL_FLOAT_VEC4;
-  static const GLenum kFragmentInput2Type = GL_INT_VEC2;
-  static const GLenum kFragmentInput3Type = GL_FLOAT_VEC3;
-};
-#ifndef COMPILER_MSVC
-const GLint ProgramManagerWithPathRenderingTest::kFragmentInput1Size;
-const GLint ProgramManagerWithPathRenderingTest::kFragmentInput2Size;
-const GLint ProgramManagerWithPathRenderingTest::kFragmentInput3Size;
-const int ProgramManagerWithPathRenderingTest::kFragmentInput1Precision;
-const int ProgramManagerWithPathRenderingTest::kFragmentInput2Precision;
-const int ProgramManagerWithPathRenderingTest::kFragmentInput3Precision;
-const int ProgramManagerWithPathRenderingTest::kFragmentInput1StaticUse;
-const int ProgramManagerWithPathRenderingTest::kFragmentInput2StaticUse;
-const int ProgramManagerWithPathRenderingTest::kFragmentInput3StaticUse;
-const GLint ProgramManagerWithPathRenderingTest::kFragmentInput1FakeLocation;
-const GLint ProgramManagerWithPathRenderingTest::kFragmentInput2FakeLocation;
-const GLint ProgramManagerWithPathRenderingTest::kFragmentInput3FakeLocation;
-const GLint ProgramManagerWithPathRenderingTest::kFragmentInput1RealLocation;
-const GLint ProgramManagerWithPathRenderingTest::kFragmentInput2RealLocation;
-const GLint ProgramManagerWithPathRenderingTest::kFragmentInput3RealLocation;
-const GLenum ProgramManagerWithPathRenderingTest::kFragmentInput1Type;
-const GLenum ProgramManagerWithPathRenderingTest::kFragmentInput2Type;
-const GLenum ProgramManagerWithPathRenderingTest::kFragmentInput3Type;
-#endif
-
-const char* ProgramManagerWithPathRenderingTest::kFragmentInput1Name = "color1";
-const char* ProgramManagerWithPathRenderingTest::kFragmentInput2Name = "color2";
-const char* ProgramManagerWithPathRenderingTest::kFragmentInput2GLName =
-    "color2[0]";
-const char* ProgramManagerWithPathRenderingTest::kFragmentInput3Name = "color3";
-const char* ProgramManagerWithPathRenderingTest::kFragmentInput3GLName =
-    "color3[0]";
-
-TEST_P(ProgramManagerWithPathRenderingTest, BindFragmentInputLocation) {
-  const GLint kFragmentInput1DesiredLocation = 10;
-  const GLint kFragmentInput2DesiredLocation = -1;
-  const GLint kFragmentInput3DesiredLocation = 5;
-
-  Shader* vshader = shader_manager_.CreateShader(
-      kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER);
-  ASSERT_TRUE(vshader != nullptr);
-  Shader* fshader = shader_manager_.CreateShader(
-      kFragmentShaderClientId, kFragmentShaderServiceId, GL_FRAGMENT_SHADER);
-  ASSERT_TRUE(fshader != nullptr);
-  VaryingMap varying_map;
-  varying_map[kFragmentInput1Name] = TestHelper::ConstructVarying(
-      kFragmentInput1Type, kFragmentInput1Size, kFragmentInput1Precision,
-      kFragmentInput1StaticUse, kFragmentInput1Name);
-  varying_map[kFragmentInput2Name] = TestHelper::ConstructVarying(
-      kFragmentInput2Type, kFragmentInput2Size, kFragmentInput2Precision,
-      kFragmentInput2StaticUse, kFragmentInput2Name);
-  varying_map[kFragmentInput3Name] = TestHelper::ConstructVarying(
-      kFragmentInput3Type, kFragmentInput3Size, kFragmentInput3Precision,
-      kFragmentInput3StaticUse, kFragmentInput3Name);
-  TestHelper::SetShaderStates(gl_.get(), vshader, true, nullptr, nullptr,
-                              nullptr, nullptr, nullptr, &varying_map, nullptr,
-                              nullptr, nullptr);
-  TestHelper::SetShaderStates(gl_.get(), fshader, true, nullptr, nullptr,
-                              nullptr, nullptr, nullptr, &varying_map, nullptr,
-                              nullptr, nullptr);
-  Program* program =
-      manager_->CreateProgram(kClientProgramId, kServiceProgramId);
-  ASSERT_TRUE(program != nullptr);
-  EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
-  EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
-  program->SetFragmentInputLocationBinding(kFragmentInput1Name,
-                                           kFragmentInput1DesiredLocation);
-  program->SetFragmentInputLocationBinding(kFragmentInput3Name,
-                                           kFragmentInput3DesiredLocation);
-  TestHelper::VaryingInfo kFragmentInputExpectationInfos[] = {
-      {
-          kFragmentInput1Name, kFragmentInput1Size, kFragmentInput1Type,
-          kFragmentInput1FakeLocation, kFragmentInput1RealLocation,
-          kFragmentInput1DesiredLocation,
-      },
-      {
-          kFragmentInput2GLName, kFragmentInput2Size, kFragmentInput2Type,
-          kFragmentInput2FakeLocation, kFragmentInput2RealLocation,
-          kFragmentInput2DesiredLocation,
-      },
-      {
-          kFragmentInput3GLName, kFragmentInput3Size, kFragmentInput3Type,
-          kFragmentInput3FakeLocation, kFragmentInput3RealLocation,
-          kFragmentInput3DesiredLocation,
-      },
-  };
-  TestHelper::SetupShaderExpectationsWithVaryings(
-      gl_.get(), feature_info_.get(), nullptr, 0, nullptr, 0,
-      kFragmentInputExpectationInfos,
-      base::size(kFragmentInputExpectationInfos), nullptr, 0,
-      kServiceProgramId);
-  program->Link(nullptr, Program::kCountOnlyStaticallyUsed, this);
-  const Program::FragmentInputInfo* info1 =
-      program->GetFragmentInputInfoByFakeLocation(
-          kFragmentInput1DesiredLocation);
-  ASSERT_NE(info1, nullptr);
-  EXPECT_EQ(kFragmentInput1RealLocation, static_cast<GLint>(info1->location));
-  const Program::FragmentInputInfo* info3 =
-      program->GetFragmentInputInfoByFakeLocation(
-          kFragmentInput3DesiredLocation);
-  ASSERT_NE(info3, nullptr);
-  EXPECT_EQ(kFragmentInput3RealLocation, static_cast<GLint>(info3->location));
-}
-
 // For some compilers, using make_tuple("a", "bb") would end up
 // instantiating make_tuple<char[1], char[2]>. This does not work.
 namespace {
@@ -2546,21 +2412,6 @@
 }
 }
 
-INSTANTIATE_TEST_SUITE_P(
-    SupportedContexts,
-    ProgramManagerWithPathRenderingTest,
-    testing::Values(
-        make_gl_ext_tuple("3.2",
-                          "GL_ARB_program_interface_query "
-                          "GL_EXT_direct_state_access GL_NV_path_rendering "
-                          "GL_NV_framebuffer_mixed_samples"),
-        make_gl_ext_tuple("4.5",
-                          "GL_NV_path_rendering "
-                          "GL_NV_framebuffer_mixed_samples"),
-        make_gl_ext_tuple("OpenGL ES 3.1",
-                          "GL_NV_path_rendering "
-                          "GL_NV_framebuffer_mixed_samples")));
-
 class ProgramManagerDualSourceBlendingTest
     : public ProgramManagerWithShaderTest,
       public testing::WithParamInterface<
diff --git a/gpu/command_buffer/service/test_helper.cc b/gpu/command_buffer/service/test_helper.cc
index 8ccc0b7..75c6fa01 100644
--- a/gpu/command_buffer/service/test_helper.cc
+++ b/gpu/command_buffer/service/test_helper.cc
@@ -928,49 +928,6 @@
     }
   }
 
-  if (feature_info->feature_flags().chromium_path_rendering) {
-    EXPECT_CALL(*gl, GetProgramInterfaceiv(service_id, GL_FRAGMENT_INPUT_NV,
-                                           GL_ACTIVE_RESOURCES, _))
-        .WillOnce(SetArgPointee<3>(int(num_varyings)))
-        .RetiresOnSaturation();
-    size_t max_varying_len = 0;
-    for (size_t ii = 0; ii < num_varyings; ++ii) {
-      size_t len = strlen(varyings[ii].name) + 1;
-      max_varying_len = std::max(max_varying_len, len);
-    }
-    EXPECT_CALL(*gl, GetProgramInterfaceiv(service_id, GL_FRAGMENT_INPUT_NV,
-                                           GL_MAX_NAME_LENGTH, _))
-        .WillOnce(SetArgPointee<3>(int(max_varying_len)))
-        .RetiresOnSaturation();
-    for (size_t ii = 0; ii < num_varyings; ++ii) {
-      VaryingInfo& info = varyings[ii];
-      EXPECT_CALL(*gl, GetProgramResourceName(service_id, GL_FRAGMENT_INPUT_NV,
-                                              ii, max_varying_len, _, _))
-          .WillOnce(DoAll(SetArgPointee<4>(strlen(info.name)),
-                          SetArrayArgument<5>(
-                              info.name, info.name + strlen(info.name) + 1)))
-          .RetiresOnSaturation();
-      if (ProgramManager::HasBuiltInPrefix(info.name))
-        continue;
-
-      static const GLenum kPropsArray[] = {GL_LOCATION, GL_TYPE, GL_ARRAY_SIZE};
-      static const size_t kPropsSize = base::size(kPropsArray);
-      EXPECT_CALL(*gl,
-                  GetProgramResourceiv(
-                      service_id, GL_FRAGMENT_INPUT_NV, ii, kPropsSize,
-                      _ /*testing::ElementsAreArray(kPropsArray, kPropsSize)*/,
-                      kPropsSize, _, _))
-          .WillOnce(testing::Invoke([info](GLuint, GLenum, GLuint, GLsizei,
-                                           const GLenum*, GLsizei,
-                                           GLsizei* length, GLint* params) {
-            *length = kPropsSize;
-            params[0] = info.real_location;
-            params[1] = info.type;
-            params[2] = info.size;
-          }))
-          .RetiresOnSaturation();
-      }
-  }
   if (feature_info->gl_version_info().is_es3_capable &&
       !feature_info->disable_shader_translator()) {
     for (size_t ii = 0; ii < num_program_outputs; ++ii) {
diff --git a/gpu/command_buffer/tests/gl_chromium_path_rendering_unittest.cc b/gpu/command_buffer/tests/gl_chromium_path_rendering_unittest.cc
deleted file mode 100644
index 9c233d2..0000000
--- a/gpu/command_buffer/tests/gl_chromium_path_rendering_unittest.cc
+++ /dev/null
@@ -1,1786 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-#include <GLES2/gl2extchromium.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <cmath>
-
-#include "base/command_line.h"
-#include "base/stl_util.h"
-#include "gpu/command_buffer/service/gpu_switches.h"
-#include "gpu/command_buffer/tests/gl_manager.h"
-#include "gpu/command_buffer/tests/gl_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-#define SHADER(Src) #Src
-
-namespace {
-void ExpectEqualMatrix(const GLfloat* expected, const GLfloat* actual) {
-  for (size_t i = 0; i < 16; ++i) {
-    EXPECT_EQ(expected[i], actual[i]);
-  }
-}
-void ExpectEqualMatrix(const GLfloat* expected, const GLint* actual) {
-  for (size_t i = 0; i < 16; ++i) {
-    EXPECT_EQ(static_cast<GLint>(roundf(expected[i])), actual[i]);
-  }
-}
-}
-namespace gpu {
-
-class CHROMIUMPathRenderingTest : public testing::Test {
- protected:
-  static const GLsizei kResolution = 300;
-
-  void SetUp() override {
-    GLManager::Options options;
-    InitializeContextFeatures(&options);
-    gl_.Initialize(options);
-  }
-
-  virtual void InitializeContextFeatures(GLManager::Options* options) {
-    options->size = gfx::Size(kResolution, kResolution);
-  }
-
-  void TearDown() override { gl_.Destroy(); }
-
-  bool IsApplicable() const {
-    return GLTestHelper::HasExtension("GL_CHROMIUM_path_rendering");
-  }
-
-  void TryAllDrawFunctions(GLuint path, GLenum expected_error) {
-    glStencilFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM, 0x7F);
-    EXPECT_EQ(expected_error, glGetError());
-
-    glStencilFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM, 0x7F);
-    EXPECT_EQ(expected_error, glGetError());
-
-    glStencilStrokePathCHROMIUM(path, 0x80, 0x80);
-    EXPECT_EQ(expected_error, glGetError());
-
-    glCoverFillPathCHROMIUM(path, GL_BOUNDING_BOX_CHROMIUM);
-    EXPECT_EQ(expected_error, glGetError());
-
-    glCoverStrokePathCHROMIUM(path, GL_BOUNDING_BOX_CHROMIUM);
-    EXPECT_EQ(expected_error, glGetError());
-
-    glStencilThenCoverStrokePathCHROMIUM(path, 0x80, 0x80,
-                                         GL_BOUNDING_BOX_CHROMIUM);
-    EXPECT_EQ(expected_error, glGetError());
-
-    glStencilThenCoverFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM, 0x7F,
-                                       GL_BOUNDING_BOX_CHROMIUM);
-    EXPECT_EQ(expected_error, glGetError());
-  }
-
-  GLManager gl_;
-};
-
-class CHROMIUMPathRenderingDrawTest : public CHROMIUMPathRenderingTest {
- protected:
-  void SetupStateForTestPattern() {
-    glViewport(0, 0, kResolution, kResolution);
-    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
-    glStencilMask(0xffffffff);
-    glClearStencil(0);
-    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
-
-    static const char* kVertexShaderSource =
-        SHADER(void main() { gl_Position = vec4(1); });
-    static const char* kFragmentShaderSource =
-        SHADER(precision mediump float; uniform vec4 color;
-               void main() { gl_FragColor = color; });
-
-    GLuint program =
-        GLTestHelper::LoadProgram(kVertexShaderSource, kFragmentShaderSource);
-    glUseProgram(program);
-    color_loc_ = glGetUniformLocation(program, "color");
-    glDeleteProgram(program);
-
-    // Set up orthogonal projection with near/far plane distance of 2.
-    glMatrixLoadfCHROMIUM(GL_PATH_PROJECTION_CHROMIUM, kProjectionMatrix);
-    glMatrixLoadIdentityCHROMIUM(GL_PATH_MODELVIEW_CHROMIUM);
-
-    glEnable(GL_STENCIL_TEST);
-
-    GLTestHelper::CheckGLError("no errors at state setup", __LINE__);
-  }
-
-  void SetupPathStateForTestPattern(GLuint path) {
-    static const GLubyte kCommands[] = {GL_MOVE_TO_CHROMIUM,
-                                        GL_LINE_TO_CHROMIUM,
-                                        GL_QUADRATIC_CURVE_TO_CHROMIUM,
-                                        GL_CUBIC_CURVE_TO_CHROMIUM,
-                                        GL_CLOSE_PATH_CHROMIUM};
-
-    static const GLfloat kCoords[] = {50.0f,
-                                      50.0f,
-                                      75.0f,
-                                      75.0f,
-                                      100.0f,
-                                      62.5f,
-                                      50.0f,
-                                      25.5f,
-                                      0.0f,
-                                      62.5f,
-                                      50.0f,
-                                      50.0f,
-                                      25.0f,
-                                      75.0f};
-
-    glPathCommandsCHROMIUM(path, base::size(kCommands), kCommands,
-                           base::size(kCoords), GL_FLOAT, kCoords);
-
-    glPathParameterfCHROMIUM(path, GL_PATH_STROKE_WIDTH_CHROMIUM, 5.0f);
-    glPathParameterfCHROMIUM(path, GL_PATH_MITER_LIMIT_CHROMIUM, 1.0f);
-    glPathParameterfCHROMIUM(path, GL_PATH_STROKE_BOUND_CHROMIUM, .02f);
-    glPathParameteriCHROMIUM(path, GL_PATH_JOIN_STYLE_CHROMIUM,
-                             GL_ROUND_CHROMIUM);
-    glPathParameteriCHROMIUM(path, GL_PATH_END_CAPS_CHROMIUM,
-                             GL_SQUARE_CHROMIUM);
-  }
-
-  void VerifyTestPatternFill(float x, float y) {
-    SCOPED_TRACE(testing::Message() << "Verifying fill at " << x << "," << y);
-    static const float kFillCoords[] = {55.0f, 54.0f, 50.0f,
-                                        28.0f, 66.0f, 63.0f};
-    static const uint8_t kBlue[] = {0, 0, 255, 255};
-
-    for (size_t i = 0; i < base::size(kFillCoords); i += 2) {
-      float fx = kFillCoords[i];
-      float fy = kFillCoords[i + 1];
-
-      EXPECT_TRUE(
-          GLTestHelper::CheckPixels(x + fx, y + fy, 1, 1, 0, kBlue, nullptr));
-    }
-  }
-
-  void VerifyTestPatternBg(float x, float y) {
-    SCOPED_TRACE(testing::Message() << "Verifying background at " << x << ","
-                                    << y);
-    const float kBackgroundCoords[] = {80.0f, 80.0f, 20.0f, 20.0f, 90.0f, 1.0f};
-    const uint8_t kExpectedColor[] = {0, 0, 0, 0};
-
-    for (size_t i = 0; i < base::size(kBackgroundCoords); i += 2) {
-      float bx = kBackgroundCoords[i];
-      float by = kBackgroundCoords[i + 1];
-
-      EXPECT_TRUE(GLTestHelper::CheckPixels(x + bx, y + by, 1, 1, 0,
-                                            kExpectedColor, nullptr));
-    }
-  }
-
-  void VerifyTestPatternStroke(float x, float y) {
-    SCOPED_TRACE(testing::Message() << "Verifying stroke at " << x << "," << y);
-    // Inside the stroke we should have green.
-    const uint8_t kGreen[] = {0, 255, 0, 255};
-    EXPECT_TRUE(
-        GLTestHelper::CheckPixels(x + 50, y + 53, 1, 1, 0, kGreen, nullptr));
-    EXPECT_TRUE(
-        GLTestHelper::CheckPixels(x + 26, y + 76, 1, 1, 0, kGreen, nullptr));
-
-    // Outside the path we should have black.
-    const uint8_t black[] = {0, 0, 0, 0};
-    EXPECT_TRUE(
-        GLTestHelper::CheckPixels(x + 10, y + 10, 1, 1, 0, black, nullptr));
-    EXPECT_TRUE(
-        GLTestHelper::CheckPixels(x + 80, y + 80, 1, 1, 0, black, nullptr));
-  }
-  static const GLfloat kProjectionMatrix[16];
-  GLint color_loc_;
-};
-
-const GLfloat CHROMIUMPathRenderingDrawTest::kProjectionMatrix[16] = {
-    2.0f / (CHROMIUMPathRenderingTest::kResolution - 1),
-    0.0f,
-    0.0f,
-    0.0f,
-    0.0f,
-    2.0f / (CHROMIUMPathRenderingTest::kResolution - 1),
-    0.0f,
-    0.0f,
-    0.0f,
-    0.0f,
-    -1.0f,
-    0.0f,
-    -1.0f,
-    -1.0f,
-    0.0f,
-    1.0f};
-
-TEST_F(CHROMIUMPathRenderingTest, TestMatrix) {
-  if (!IsApplicable())
-    return;
-
-  static const GLfloat kIdentityMatrix[16] = {
-      1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
-      0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-  static const GLfloat kSeqMatrix[16] = {
-      0.5f, -0.5f, -0.1f,  -0.8f,  4.4f,   5.5f,   6.6f,   7.7f,
-      8.8f, 9.9f,  10.11f, 11.22f, 12.33f, 13.44f, 14.55f, 15.66f};
-  static const GLenum kMatrixModes[] = {GL_PATH_MODELVIEW_CHROMIUM,
-                                        GL_PATH_PROJECTION_CHROMIUM};
-  static const GLenum kGetMatrixModes[] = {GL_PATH_MODELVIEW_MATRIX_CHROMIUM,
-                                           GL_PATH_PROJECTION_MATRIX_CHROMIUM};
-
-  for (size_t i = 0; i < base::size(kMatrixModes); ++i) {
-    GLfloat mf[16];
-    GLint mi[16];
-    memset(mf, 0, sizeof(mf));
-    memset(mi, 0, sizeof(mi));
-    glGetFloatv(kGetMatrixModes[i], mf);
-    glGetIntegerv(kGetMatrixModes[i], mi);
-    ExpectEqualMatrix(kIdentityMatrix, mf);
-    ExpectEqualMatrix(kIdentityMatrix, mi);
-
-    glMatrixLoadfCHROMIUM(kMatrixModes[i], kSeqMatrix);
-    memset(mf, 0, sizeof(mf));
-    memset(mi, 0, sizeof(mi));
-    glGetFloatv(kGetMatrixModes[i], mf);
-    glGetIntegerv(kGetMatrixModes[i], mi);
-    ExpectEqualMatrix(kSeqMatrix, mf);
-    ExpectEqualMatrix(kSeqMatrix, mi);
-
-    glMatrixLoadIdentityCHROMIUM(kMatrixModes[i]);
-    memset(mf, 0, sizeof(mf));
-    memset(mi, 0, sizeof(mi));
-    glGetFloatv(kGetMatrixModes[i], mf);
-    glGetIntegerv(kGetMatrixModes[i], mi);
-    ExpectEqualMatrix(kIdentityMatrix, mf);
-    ExpectEqualMatrix(kIdentityMatrix, mi);
-
-    EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  }
-}
-
-TEST_F(CHROMIUMPathRenderingTest, TestMatrixErrors) {
-  if (!IsApplicable())
-    return;
-
-  GLfloat mf[16];
-  memset(mf, 0, sizeof(mf));
-
-  glMatrixLoadfCHROMIUM(GL_PATH_MODELVIEW_CHROMIUM, mf);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  glMatrixLoadIdentityCHROMIUM(GL_PATH_PROJECTION_CHROMIUM);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  // Test that invalid matrix targets fail.
-  glMatrixLoadfCHROMIUM(GL_PATH_MODELVIEW_CHROMIUM - 1, mf);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-
-  // Test that invalid matrix targets fail.
-  glMatrixLoadIdentityCHROMIUM(GL_PATH_PROJECTION_CHROMIUM + 1);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-}
-
-TEST_F(CHROMIUMPathRenderingTest, TestSimpleCalls) {
-  if (!IsApplicable())
-    return;
-
-  // This is unspecified in NV_path_rendering.
-  EXPECT_EQ(0u, glGenPathsCHROMIUM(0));
-
-  GLuint path = glGenPathsCHROMIUM(1);
-  EXPECT_NE(path, 0u);
-  glDeletePathsCHROMIUM(path, 1);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  GLuint first_path = glGenPathsCHROMIUM(5);
-  EXPECT_NE(first_path, 0u);
-  glDeletePathsCHROMIUM(first_path, 5);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  // Test deleting paths that are not actually allocated:
-  // "unused names in /paths/ are silently ignored".
-  first_path = glGenPathsCHROMIUM(5);
-  EXPECT_NE(first_path, 0u);
-  glDeletePathsCHROMIUM(first_path, 6);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  GLsizei big_range = 0xffff;
-  // Setting big_range = std::numeric_limits<GLsizei>::max() should go through
-  // too, as far as NV_path_rendering is concerned. Current chromium side id
-  // allocator will use too much memory.
-  first_path = glGenPathsCHROMIUM(big_range);
-  EXPECT_NE(first_path, 0u);
-  glDeletePathsCHROMIUM(first_path, big_range);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  // Test glIsPathCHROMIUM().
-  path = glGenPathsCHROMIUM(1);
-  EXPECT_FALSE(glIsPathCHROMIUM(path));
-  GLubyte commands[] = {GL_MOVE_TO_CHROMIUM, GL_CLOSE_PATH_CHROMIUM};
-  GLfloat coords[] = {50.0f, 50.0f};
-  glPathCommandsCHROMIUM(path, base::size(commands), commands,
-                         base::size(coords), GL_FLOAT, coords);
-  EXPECT_TRUE(glIsPathCHROMIUM(path));
-  glDeletePathsCHROMIUM(path, 1);
-  EXPECT_FALSE(glIsPathCHROMIUM(path));
-}
-
-TEST_F(CHROMIUMPathRenderingTest, TestGenDeleteErrors) {
-  if (!IsApplicable())
-    return;
-
-  // GenPaths / DeletePaths tests.
-  // std::numeric_limits<GLuint>::max() is wrong for GLsizei.
-  GLuint first_path = glGenPathsCHROMIUM(std::numeric_limits<GLuint>::max());
-  EXPECT_EQ(first_path, 0u);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-
-  first_path = glGenPathsCHROMIUM(-1);
-  EXPECT_EQ(first_path, 0u);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-
-  glDeletePathsCHROMIUM(1, -5);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-
-  first_path = glGenPathsCHROMIUM(-1);
-  EXPECT_EQ(first_path, 0u);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-
-  // Test that delete with first_id and range such that first_id + range
-  // overflows the GLuint. Example:
-  // Range is 0x7fffffff. First id is X. Last id will be X + 0x7ffffffe.
-  // X = 0x80000001 would succeed, where as X = 0x80000002 would fail.
-  // To get 0x80000002, we need to allocate first 0x7fffffff and then
-  // 3 (0x80000000, 0x80000001 and 0x80000002).
-  // While not guaranteed by the API, we expect the implementation
-  // hands us deterministic ids.
-  first_path = glGenPathsCHROMIUM(std::numeric_limits<GLsizei>::max());
-  EXPECT_EQ(first_path, 1u);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  GLuint additional_paths = glGenPathsCHROMIUM(3);
-  EXPECT_EQ(additional_paths,
-            static_cast<GLuint>(std::numeric_limits<GLsizei>::max()) + 1u);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  // Test that passing a range so big that it would overflow client_id
-  // + range - 1 check causes an error.
-  glDeletePathsCHROMIUM(additional_paths + 2u,
-                        std::numeric_limits<GLsizei>::max());
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-
-  // Cleanup the above allocations. Also test that passing max value still
-  // works.
-  glDeletePathsCHROMIUM(1, std::numeric_limits<GLsizei>::max());
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  glDeletePathsCHROMIUM(std::numeric_limits<GLsizei>::max(),
-                        std::numeric_limits<GLsizei>::max());
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-}
-
-TEST_F(CHROMIUMPathRenderingTest, TestPathParameterErrors) {
-  if (!IsApplicable())
-    return;
-
-  GLuint path = glGenPathsCHROMIUM(1);
-  // PathParameter*: Wrong value for the pname should fail.
-  glPathParameteriCHROMIUM(path, GL_PATH_JOIN_STYLE_CHROMIUM, GL_FLAT_CHROMIUM);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-  glPathParameterfCHROMIUM(path, GL_PATH_END_CAPS_CHROMIUM,
-                           GL_MITER_REVERT_CHROMIUM);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-
-  // PathParameter*: Wrong floating-point value should fail.
-  glPathParameterfCHROMIUM(path, GL_PATH_STROKE_WIDTH_CHROMIUM, -0.1f);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-  glPathParameterfCHROMIUM(path, GL_PATH_MITER_LIMIT_CHROMIUM,
-                           std::numeric_limits<float>::quiet_NaN());
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-  glPathParameterfCHROMIUM(path, GL_PATH_MITER_LIMIT_CHROMIUM,
-                           std::numeric_limits<float>::infinity());
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-
-  // PathParameter*: Wrong pname should fail.
-  glPathParameteriCHROMIUM(path, GL_PATH_STROKE_WIDTH_CHROMIUM - 1, 5);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-  glDeletePathsCHROMIUM(path, 1);
-}
-
-TEST_F(CHROMIUMPathRenderingTest, TestPathObjectState) {
-  if (!IsApplicable())
-    return;
-
-  glViewport(0, 0, kResolution, kResolution);
-  glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
-  glStencilMask(0xffffffff);
-  glClearStencil(0);
-  glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
-  glPathStencilFuncCHROMIUM(GL_ALWAYS, 0, 0xFF);
-  glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
-
-  // Test that trying to draw non-existing paths does not produce errors or
-  // results.
-  GLuint non_existing_paths[] = {0, 55, 74744};
-  for (auto& p : non_existing_paths) {
-    EXPECT_FALSE(glIsPathCHROMIUM(p));
-    EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-    TryAllDrawFunctions(p, GL_NO_ERROR);
-  }
-
-  // Path name marked as used but without path object state causes
-  // a GL error upon any draw command.
-  GLuint path = glGenPathsCHROMIUM(1);
-  EXPECT_FALSE(glIsPathCHROMIUM(path));
-  TryAllDrawFunctions(path, GL_INVALID_OPERATION);
-  glDeletePathsCHROMIUM(path, 1);
-
-  // Document a bit of an inconsistency: path name marked as used but without
-  // path object state causes a GL error upon any draw command (tested above).
-  // Path name that had path object state, but then was "cleared", still has a
-  // path object state, even though the state is empty.
-  path = glGenPathsCHROMIUM(1);
-  EXPECT_FALSE(glIsPathCHROMIUM(path));
-  GLubyte commands[] = {GL_MOVE_TO_CHROMIUM, GL_CLOSE_PATH_CHROMIUM};
-  GLfloat coords[] = {50.0f, 50.0f};
-  glPathCommandsCHROMIUM(path, base::size(commands), commands,
-                         base::size(coords), GL_FLOAT, coords);
-  EXPECT_TRUE(glIsPathCHROMIUM(path));
-  glPathCommandsCHROMIUM(path, 0, nullptr, 0, GL_FLOAT, nullptr);
-  EXPECT_TRUE(glIsPathCHROMIUM(path));  // The surprise.
-  TryAllDrawFunctions(path, GL_NO_ERROR);
-  glDeletePathsCHROMIUM(path, 1);
-
-  // Document a bit of an inconsistency: "clearing" a used path name causes
-  // path to acquire state.
-  path = glGenPathsCHROMIUM(1);
-  EXPECT_FALSE(glIsPathCHROMIUM(path));
-  glPathCommandsCHROMIUM(path, 0, nullptr, 0, GL_FLOAT, nullptr);
-  EXPECT_TRUE(glIsPathCHROMIUM(path));  // The surprise.
-  glDeletePathsCHROMIUM(path, 1);
-
-  // Make sure nothing got drawn by the drawing commands that should not produce
-  // anything.
-  const uint8_t black[] = {0, 0, 0, 0};
-  EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kResolution, kResolution, 0,
-                                        black, nullptr));
-}
-
-TEST_F(CHROMIUMPathRenderingTest, TestUnnamedPathsErrors) {
-  if (!IsApplicable())
-    return;
-
-  // Unnamed paths: Trying to create a path object with non-existing path name
-  // produces error.  (Not a error in real NV_path_rendering).
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  GLubyte commands[] = {GL_MOVE_TO_CHROMIUM, GL_CLOSE_PATH_CHROMIUM};
-  GLfloat coords[] = {50.0f, 50.0f};
-  glPathCommandsCHROMIUM(555, base::size(commands), commands,
-                         base::size(coords), GL_FLOAT, coords);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-
-  // PathParameter*: Using non-existing path object produces error.
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  glPathParameterfCHROMIUM(555, GL_PATH_STROKE_WIDTH_CHROMIUM, 5.0f);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  glPathParameteriCHROMIUM(555, GL_PATH_JOIN_STYLE_CHROMIUM, GL_ROUND_CHROMIUM);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-}
-
-TEST_F(CHROMIUMPathRenderingTest, TestPathCommandsErrors) {
-  if (!IsApplicable())
-    return;
-
-  static const GLenum kInvalidCoordType = GL_NONE;
-
-  GLuint path = glGenPathsCHROMIUM(1);
-  GLubyte commands[] = {GL_MOVE_TO_CHROMIUM, GL_CLOSE_PATH_CHROMIUM};
-  GLfloat coords[] = {50.0f, 50.0f};
-
-  glPathCommandsCHROMIUM(path, base::size(commands), commands, -4, GL_FLOAT,
-                         coords);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-
-  glPathCommandsCHROMIUM(path, -1, commands, base::size(coords), GL_FLOAT,
-                         coords);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-
-  glPathCommandsCHROMIUM(path, base::size(commands), commands,
-                         base::size(coords), kInvalidCoordType, coords);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-
-  // These can not distinquish between the check that should fail them.
-  // This should fail due to coord count * float size overflow.
-  glPathCommandsCHROMIUM(path, base::size(commands), commands,
-                         std::numeric_limits<GLsizei>::max(), GL_FLOAT, coords);
-  // This should fail due to cmd count + coord count * short size.
-  glPathCommandsCHROMIUM(path, base::size(commands), commands,
-                         std::numeric_limits<GLsizei>::max(), GL_SHORT, coords);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-
-  glDeletePathsCHROMIUM(path, 1);
-}
-
-TEST_F(CHROMIUMPathRenderingTest, TestPathRenderingInvalidArgs) {
-  if (!IsApplicable())
-    return;
-
-  GLuint path = glGenPathsCHROMIUM(1);
-  glPathCommandsCHROMIUM(path, 0, nullptr, 0, GL_FLOAT, nullptr);
-
-  // Verify that normal calls work.
-  glStencilFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM, 0x7F);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  glStencilThenCoverFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM, 0x7F,
-                                     GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  // Using invalid fill mode causes INVALID_ENUM.
-  glStencilFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM - 1, 0x7F);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-  glStencilThenCoverFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM - 1, 0x7F,
-                                     GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-
-  // Using invalid cover mode causes INVALID_ENUM.
-  glCoverFillPathCHROMIUM(path, GL_CONVEX_HULL_CHROMIUM - 1);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-  glStencilThenCoverFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM, 0x7F,
-                                     GL_BOUNDING_BOX_CHROMIUM + 1);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-  // For instanced variants, we need this to error the same way
-  // regardless of whether # of paths == 0 would cause an early return.
-  for (int path_count = 0; path_count <= 1; ++path_count) {
-    SCOPED_TRACE(testing::Message()
-                 << "Invalid fillmode instanced test for path count "
-                 << path_count);
-    glStencilFillPathInstancedCHROMIUM(path_count, GL_UNSIGNED_INT, &path, 0,
-                                       GL_COUNT_UP_CHROMIUM - 1, 0x7F, GL_NONE,
-                                       nullptr);
-    EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-    glStencilThenCoverFillPathInstancedCHROMIUM(
-        path_count, GL_UNSIGNED_INT, &path, 0, GL_COUNT_UP_CHROMIUM - 1, 0x7F,
-        GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_NONE, nullptr);
-    EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-  }
-
-  // Using mask+1 not being power of two causes INVALID_VALUE with up/down fill
-  // mode.
-  glStencilFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM, 0x40);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-  glStencilThenCoverFillPathCHROMIUM(path, GL_COUNT_DOWN_CHROMIUM, 12,
-                                     GL_BOUNDING_BOX_CHROMIUM);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-  for (int path_count = 0; path_count <= 1; ++path_count) {
-    SCOPED_TRACE(testing::Message()
-                 << "Invalid mask instanced test for path count "
-                 << path_count);
-    glStencilFillPathInstancedCHROMIUM(path_count, GL_UNSIGNED_INT, &path, 0,
-                                       GL_COUNT_UP_CHROMIUM, 0x30, GL_NONE,
-                                       nullptr);
-    EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-    glStencilThenCoverFillPathInstancedCHROMIUM(
-        path_count, GL_UNSIGNED_INT, &path, 0, GL_COUNT_DOWN_CHROMIUM, 0xFE,
-        GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_NONE, nullptr);
-    EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-  }
-
-  glDeletePathsCHROMIUM(path, 1);
-}
-
-// Tests that drawing with CHROMIUM_path_rendering functions work.
-TEST_F(CHROMIUMPathRenderingDrawTest, TestPathRendering) {
-  if (!IsApplicable())
-    return;
-
-  static const float kBlue[] = {0.0f, 0.0f, 1.0f, 1.0f};
-  static const float kGreen[] = {0.0f, 1.0f, 0.0f, 1.0f};
-
-  SetupStateForTestPattern();
-
-  GLuint path = glGenPathsCHROMIUM(1);
-  SetupPathStateForTestPattern(path);
-
-  // Do the stencil fill, cover fill, stencil stroke, cover stroke
-  // in unconventional order:
-  // 1) stencil the stroke in stencil high bit
-  // 2) stencil the fill in low bits
-  // 3) cover the fill
-  // 4) cover the stroke
-  // This is done to check that glPathStencilFunc works, eg the mask
-  // goes through. Stencil func is not tested ATM, for simplicity.
-
-  glPathStencilFuncCHROMIUM(GL_ALWAYS, 0, 0xFF);
-  glStencilStrokePathCHROMIUM(path, 0x80, 0x80);
-
-  glPathStencilFuncCHROMIUM(GL_ALWAYS, 0, 0x7F);
-  glStencilFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM, 0x7F);
-
-  glStencilFunc(GL_LESS, 0, 0x7F);
-  glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
-  glUniform4fv(color_loc_, 1, kBlue);
-  glCoverFillPathCHROMIUM(path, GL_BOUNDING_BOX_CHROMIUM);
-
-  glStencilFunc(GL_EQUAL, 0x80, 0x80);
-  glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
-  glUniform4fv(color_loc_, 1, kGreen);
-  glCoverStrokePathCHROMIUM(path, GL_CONVEX_HULL_CHROMIUM);
-
-  glDeletePathsCHROMIUM(path, 1);
-
-  // Verify the image.
-  VerifyTestPatternFill(0.0f, 0.0f);
-  VerifyTestPatternBg(0.0f, 0.0f);
-  VerifyTestPatternStroke(0.0f, 0.0f);
-}
-
-// Tests that drawing with CHROMIUM_path_rendering
-// StencilThenCover{Stroke,Fill}Path functions work.
-TEST_F(CHROMIUMPathRenderingDrawTest, TestPathRenderingThenFunctions) {
-  if (!IsApplicable())
-    return;
-
-  static float kBlue[] = {0.0f, 0.0f, 1.0f, 1.0f};
-  static float kGreen[] = {0.0f, 1.0f, 0.0f, 1.0f};
-
-  SetupStateForTestPattern();
-
-  GLuint path = glGenPathsCHROMIUM(1);
-  SetupPathStateForTestPattern(path);
-
-  glPathStencilFuncCHROMIUM(GL_ALWAYS, 0, 0xFF);
-  glStencilFunc(GL_EQUAL, 0x80, 0x80);
-  glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
-  glUniform4fv(color_loc_, 1, kGreen);
-  glStencilThenCoverStrokePathCHROMIUM(path, 0x80, 0x80,
-                                       GL_BOUNDING_BOX_CHROMIUM);
-
-  glPathStencilFuncCHROMIUM(GL_ALWAYS, 0, 0x7F);
-  glStencilFunc(GL_LESS, 0, 0x7F);
-  glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
-  glUniform4fv(color_loc_, 1, kBlue);
-  glStencilThenCoverFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM, 0x7F,
-                                     GL_CONVEX_HULL_CHROMIUM);
-
-  glDeletePathsCHROMIUM(path, 1);
-
-  // Verify the image.
-  VerifyTestPatternFill(0.0f, 0.0f);
-  VerifyTestPatternBg(0.0f, 0.0f);
-  VerifyTestPatternStroke(0.0f, 0.0f);
-}
-
-// Tests that drawing with *Instanced functions work.
-TEST_F(CHROMIUMPathRenderingDrawTest, TestPathRenderingInstanced) {
-  if (!IsApplicable())
-    return;
-
-  static const float kBlue[] = {0.0f, 0.0f, 1.0f, 1.0f};
-  static const float kGreen[] = {0.0f, 1.0f, 0.0f, 1.0f};
-
-  SetupStateForTestPattern();
-
-  GLuint path = glGenPathsCHROMIUM(1);
-  SetupPathStateForTestPattern(path);
-
-  const GLuint kPaths[] = {1, 1, 1, 1, 1};
-  const GLsizei kPathCount = base::size(kPaths);
-  const GLfloat kShapeSize = 80.0f;
-  static const GLfloat kTransforms[kPathCount * 12] = {
-      1.0f, 0.0f, 0.0f, 0.0f,           1.0f,       0.0f,
-      0.0f, 0.0f, 1.0f, 0.0f,           0.0f,       0.0f,
-      1.0f, 0.0f, 0.0f, 0.0f,           1.0f,       0.0f,
-      0.0f, 0.0f, 1.0f, kShapeSize,     0.0f,       0.0f,
-      1.0f, 0.0f, 0.0f, 0.0f,           1.0f,       0.0f,
-      0.0f, 0.0f, 1.0f, kShapeSize * 2, 0.0f,       0.0f,
-      1.0f, 0.0f, 0.0f, 0.0f,           1.0f,       0.0f,
-      0.0f, 0.0f, 1.0f, 0.0f,           kShapeSize, 0.0f,
-      1.0f, 0.0f, 0.0f, 0.0f,           1.0f,       0.0f,
-      0.0f, 0.0f, 1.0f, kShapeSize,     kShapeSize, 0.0f};
-
-  // The test pattern is the same as in the simple draw case above,
-  // except that the path is drawn kPathCount times with different offsets.
-  glPathStencilFuncCHROMIUM(GL_ALWAYS, 0, 0xFF);
-  glStencilStrokePathInstancedCHROMIUM(kPathCount, GL_UNSIGNED_INT, kPaths,
-                                       path - 1, 0x80, 0x80,
-                                       GL_AFFINE_3D_CHROMIUM, kTransforms);
-
-  glPathStencilFuncCHROMIUM(GL_ALWAYS, 0, 0x7F);
-  glUniform4fv(color_loc_, 1, kBlue);
-  glStencilFillPathInstancedCHROMIUM(kPathCount, GL_UNSIGNED_INT, kPaths,
-                                     path - 1, GL_COUNT_UP_CHROMIUM, 0x7F,
-                                     GL_AFFINE_3D_CHROMIUM, kTransforms);
-  glStencilFunc(GL_LESS, 0, 0x7F);
-  glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
-  glCoverFillPathInstancedCHROMIUM(kPathCount, GL_UNSIGNED_INT, kPaths,
-                                   path - 1,
-                                   GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM,
-                                   GL_AFFINE_3D_CHROMIUM, kTransforms);
-  glStencilFunc(GL_EQUAL, 0x80, 0x80);
-  glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
-  glUniform4fv(color_loc_, 1, kGreen);
-  glCoverStrokePathInstancedCHROMIUM(kPathCount, GL_UNSIGNED_INT, kPaths,
-                                     path - 1,
-                                     GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM,
-                                     GL_AFFINE_3D_CHROMIUM, kTransforms);
-
-  glDeletePathsCHROMIUM(path, 1);
-
-  // Verify the image.
-  VerifyTestPatternFill(0.0f, 0.0f);
-  VerifyTestPatternBg(0.0f, 0.0f);
-  VerifyTestPatternStroke(0.0f, 0.0f);
-
-  VerifyTestPatternFill(kShapeSize, 0.0f);
-  VerifyTestPatternBg(kShapeSize, 0.0f);
-  VerifyTestPatternStroke(kShapeSize, 0.0f);
-
-  VerifyTestPatternFill(kShapeSize * 2, 0.0f);
-  VerifyTestPatternBg(kShapeSize * 2, 0.0f);
-  VerifyTestPatternStroke(kShapeSize * 2, 0.0f);
-
-  VerifyTestPatternFill(0.0f, kShapeSize);
-  VerifyTestPatternBg(0.0f, kShapeSize);
-  VerifyTestPatternStroke(0.0f, kShapeSize);
-
-  VerifyTestPatternFill(kShapeSize, kShapeSize);
-  VerifyTestPatternBg(kShapeSize, kShapeSize);
-  VerifyTestPatternStroke(kShapeSize, kShapeSize);
-}
-
-TEST_F(CHROMIUMPathRenderingDrawTest, TestPathRenderingThenFunctionsInstanced) {
-  if (!IsApplicable())
-    return;
-
-  static const float kBlue[] = {0.0f, 0.0f, 1.0f, 1.0f};
-  static const float kGreen[] = {0.0f, 1.0f, 0.0f, 1.0f};
-
-  SetupStateForTestPattern();
-
-  GLuint path = glGenPathsCHROMIUM(1);
-  SetupPathStateForTestPattern(path);
-
-  const GLuint kPaths[] = {1, 1, 1, 1, 1};
-  const GLsizei kPathCount = base::size(kPaths);
-  const GLfloat kShapeSize = 80.0f;
-  static const GLfloat kTransforms[] = {
-      0.0f, 0.0f, kShapeSize, 0.0f,       kShapeSize * 2,
-      0.0f, 0.0f, kShapeSize, kShapeSize, kShapeSize,
-  };
-
-  glPathStencilFuncCHROMIUM(GL_ALWAYS, 0, 0xFF);
-  glStencilFunc(GL_EQUAL, 0x80, 0x80);
-  glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
-  glUniform4fv(color_loc_, 1, kGreen);
-  glStencilThenCoverStrokePathInstancedCHROMIUM(
-      kPathCount, GL_UNSIGNED_INT, kPaths, path - 1, 0x80, 0x80,
-      GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_TRANSLATE_2D_CHROMIUM,
-      kTransforms);
-
-  glPathStencilFuncCHROMIUM(GL_ALWAYS, 0, 0x7F);
-  glStencilFunc(GL_LESS, 0, 0x7F);
-  glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
-  glUniform4fv(color_loc_, 1, kBlue);
-  glStencilThenCoverFillPathInstancedCHROMIUM(
-      kPathCount, GL_UNSIGNED_INT, kPaths, path - 1, GL_COUNT_UP_CHROMIUM, 0x7F,
-      GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_TRANSLATE_2D_CHROMIUM,
-      kTransforms);
-
-  glDeletePathsCHROMIUM(path, 1);
-
-  // Verify the image.
-  VerifyTestPatternFill(0.0f, 0.0f);
-  VerifyTestPatternBg(0.0f, 0.0f);
-  VerifyTestPatternStroke(0.0f, 0.0f);
-
-  VerifyTestPatternFill(kShapeSize, 0.0f);
-  VerifyTestPatternBg(kShapeSize, 0.0f);
-  VerifyTestPatternStroke(kShapeSize, 0.0f);
-
-  VerifyTestPatternFill(kShapeSize * 2, 0.0f);
-  VerifyTestPatternBg(kShapeSize * 2, 0.0f);
-  VerifyTestPatternStroke(kShapeSize * 2, 0.0f);
-
-  VerifyTestPatternFill(0.0f, kShapeSize);
-  VerifyTestPatternBg(0.0f, kShapeSize);
-  VerifyTestPatternStroke(0.0f, kShapeSize);
-
-  VerifyTestPatternFill(kShapeSize, kShapeSize);
-  VerifyTestPatternBg(kShapeSize, kShapeSize);
-  VerifyTestPatternStroke(kShapeSize, kShapeSize);
-}
-
-// This class implements a test that draws a grid of v-shapes. The grid is
-// drawn so that even rows (from the bottom) are drawn with DrawArrays and odd
-// rows are drawn with path rendering.  It can be used to test various texturing
-// modes, comparing how the fill would work in normal GL rendering and how to
-// setup same sort of fill with path rendering.
-// The texturing test is parametrized to run the test with and without
-// ANGLE name hashing.
-class CHROMIUMPathRenderingWithTexturingTest
-    : public CHROMIUMPathRenderingTest,
-      public ::testing::WithParamInterface<bool> {
- protected:
-  void InitializeContextFeatures(GLManager::Options* options) override {
-    CHROMIUMPathRenderingTest::InitializeContextFeatures(options);
-    options->force_shader_name_hashing = GetParam();
-  }
-
-  /** Sets up the GL program state for the test.
-     Vertex shader needs at least following variables:
-      uniform mat4 view_matrix;
-      uniform mat? color_matrix; (accessible with kColorMatrixLocation)
-      uniform vec2 model_translate;
-      attribute vec2 position;
-      varying vec4 color;
-
-     Fragment shader needs at least following variables:
-      varying vec4 color;
-
-      (? can be anything)
-  */
-  void SetupProgramForTestPattern(const char* vertex_shader_source,
-                                  const char* fragment_shader_source) {
-    glViewport(0, 0, kResolution, kResolution);
-    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
-    glStencilMask(0xffffffff);
-    glClearStencil(0);
-    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
-    glEnable(GL_BLEND);
-    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
-    GLuint vs =
-        GLTestHelper::LoadShader(GL_VERTEX_SHADER, vertex_shader_source);
-    GLuint fs =
-        GLTestHelper::LoadShader(GL_FRAGMENT_SHADER, fragment_shader_source);
-
-    program_ = glCreateProgram();
-    glBindAttribLocation(program_, kPositionLocation, "position");
-    glBindUniformLocationCHROMIUM(program_, kViewMatrixLocation, "view_matrix");
-    glBindUniformLocationCHROMIUM(program_, kColorMatrixLocation,
-                                  "color_matrix");
-    glBindUniformLocationCHROMIUM(program_, kModelTranslateLocation,
-                                  "model_translate");
-    glBindFragmentInputLocationCHROMIUM(program_, kColorFragmentInputLocation,
-                                        "color");
-    glAttachShader(program_, fs);
-    glAttachShader(program_, vs);
-    glDeleteShader(vs);
-    glDeleteShader(fs);
-  }
-
-  void LinkProgramForTestPattern() {
-    glLinkProgram(program_);
-    GLint linked = 0;
-    glGetProgramiv(program_, GL_LINK_STATUS, &linked);
-    EXPECT_TRUE(linked == GL_TRUE);
-    glUseProgram(program_);
-
-    glUniformMatrix4fv(kViewMatrixLocation, 1, GL_FALSE, kProjectionMatrix);
-  }
-
-  void DrawTestPattern() {
-    // Setup state for drawing the shape with DrawArrays.
-
-    // This v-shape is used both for DrawArrays and path rendering.
-    static const GLfloat kVertices[] = {75.0f, 75.0f, 50.0f, 25.5f,
-                                        50.0f, 50.0f, 25.0f, 75.0f};
-
-    GLuint vbo = 0;
-    glGenBuffers(1, &vbo);
-    glBindBuffer(GL_ARRAY_BUFFER, vbo);
-    glBufferData(GL_ARRAY_BUFFER, sizeof(kVertices), kVertices, GL_STATIC_DRAW);
-    glEnableVertexAttribArray(kPositionLocation);
-    glVertexAttribPointer(kPositionLocation, 2, GL_FLOAT, GL_FALSE, 0, 0);
-
-    // Setup state for drawing the shape with path rendering.
-    glPathStencilFuncCHROMIUM(GL_ALWAYS, 0, 0x7F);
-    glStencilFunc(GL_LESS, 0, 0x7F);
-    glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
-    glMatrixLoadfCHROMIUM(GL_PATH_PROJECTION_CHROMIUM, kProjectionMatrix);
-    glMatrixLoadIdentityCHROMIUM(GL_PATH_MODELVIEW_CHROMIUM);
-
-    static const GLubyte kCommands[] = {
-        GL_MOVE_TO_CHROMIUM, GL_LINE_TO_CHROMIUM, GL_LINE_TO_CHROMIUM,
-        GL_LINE_TO_CHROMIUM, GL_CLOSE_PATH_CHROMIUM};
-
-    static const GLfloat kCoords[] = {
-        kVertices[0], kVertices[1], kVertices[2], kVertices[3],
-        kVertices[6], kVertices[7], kVertices[4], kVertices[5],
-    };
-
-    GLuint path = glGenPathsCHROMIUM(1);
-    glPathCommandsCHROMIUM(path, base::size(kCommands), kCommands,
-                           base::size(kCoords), GL_FLOAT, kCoords);
-    EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-    GLfloat path_model_translate[16] = {
-        1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
-        0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f,
-    };
-
-    // Draws the shapes. Every even row from the bottom is drawn with
-    // DrawArrays, odd row with path rendering. The shader program is
-    // the same for the both draws.
-    for (int j = 0; j < kTestRows; ++j) {
-      for (int i = 0; i < kTestColumns; ++i) {
-        if (j % 2 == 0) {
-          glDisable(GL_STENCIL_TEST);
-          glUniform2f(kModelTranslateLocation, i * kShapeWidth,
-                      j * kShapeHeight);
-          glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-        } else {
-          glEnable(GL_STENCIL_TEST);
-          path_model_translate[12] = i * kShapeWidth;
-          path_model_translate[13] = j * kShapeHeight;
-          glMatrixLoadfCHROMIUM(GL_PATH_MODELVIEW_CHROMIUM,
-                                path_model_translate);
-          glStencilThenCoverFillPathCHROMIUM(path, GL_COUNT_UP_CHROMIUM, 0x7F,
-                                             GL_BOUNDING_BOX_CHROMIUM);
-        }
-      }
-    }
-
-    glDisableVertexAttribArray(kPositionLocation);
-    glDeleteBuffers(1, &vbo);
-    glDeletePathsCHROMIUM(path, 1);
-  }
-
-  void TeardownStateForTestPattern() { glDeleteProgram(program_); }
-
-  static const GLfloat kProjectionMatrix[16];
-
-  // This uniform be can set by the test. It should be used to set the color for
-  // drawing with DrawArrays.
-  static const GLint kColorMatrixLocation = 4;
-
-  // This fragment input can be set by the test. It should be used to set the
-  // color for drawing with path rendering.
-  static const GLint kColorFragmentInputLocation = 7;
-
-  enum {
-    kShapeWidth = 75,
-    kShapeHeight = 75,
-    kTestRows = kResolution / kShapeHeight,
-    kTestColumns = kResolution / kShapeWidth,
-  };
-
-  // These coordinates are inside the shape fill. This can be used to verífy
-  // fill color.
-  static const float kFillCoords[6];
-
-  GLint program_;
-
-  static const GLint kModelTranslateLocation = 3;
-  static const GLint kPositionLocation = 0;
-  static const GLint kViewMatrixLocation = 7;
-};
-
-const GLfloat CHROMIUMPathRenderingWithTexturingTest::kProjectionMatrix[16] = {
-    2.0f / (CHROMIUMPathRenderingWithTexturingTest::kResolution - 1),
-    0.0f,
-    0.0f,
-    0.0f,
-    0.0f,
-    2.0f / (CHROMIUMPathRenderingWithTexturingTest::kResolution - 1),
-    0.0f,
-    0.0f,
-    0.0f,
-    0.0f,
-    -1.0f,
-    0.0f,
-    -1.0f,
-    -1.0f,
-    0.0f,
-    1.0f};
-
-const GLfloat CHROMIUMPathRenderingWithTexturingTest::kFillCoords[6] = {
-    59.0f, 50.0f, 50.0f, 28.0f, 66.0f, 63.0f};
-
-// This test tests ProgramPathFragmentInputGenCHROMIUM and
-// BindFragmentInputLocationCHROMIUM. The test draws a shape multiple times as a
-// grid. Each shape is filled with a color pattern that has projection-space
-// gradient of the fragment coordinates in r and g components of the color. The
-// color slides as function of coordinates: x=0..kResolution --> r=0..1,
-// y=0..kResolution --> g=0..1
-TEST_P(CHROMIUMPathRenderingWithTexturingTest,
-       TestProgramPathFragmentInputGenCHROMIUM_EYE) {
-  if (!IsApplicable())
-    return;
-
-  // clang-format off
-  static const char* kVertexShaderSource = SHADER(
-      uniform mat4 view_matrix;
-      uniform mat4 color_matrix;
-      uniform vec2 model_translate;
-      attribute vec2 position;
-      varying vec3 color;
-      void main() {
-        vec4 p = vec4(model_translate + position, 1, 1);
-        color = (color_matrix * p).rgb;
-        gl_Position = view_matrix * p;
-      }
-  );
-
-  static const char* kFragmentShaderSource = SHADER(
-      precision mediump float;
-      varying vec3 color;
-      void main() {
-        gl_FragColor = vec4(color, 1.0);
-      }
-  );
-  // clang-format on
-
-  SetupProgramForTestPattern(kVertexShaderSource, kFragmentShaderSource);
-  LinkProgramForTestPattern();
-  static const GLfloat kColorMatrix[16] = {
-      1.0f / kResolution,
-      0.0f,
-      0.0f,
-      0.0f,
-      0.0f,
-      1.0f / kResolution,
-      0.0f,
-      0.0f,
-      0.0f,
-      0.0f,
-      0.0f,
-      0.0f,
-      0.0f,
-      0.0f,
-      0.0f,
-      0.0f,
-  };
-  glUniformMatrix4fv(kColorMatrixLocation, 1, GL_FALSE, kColorMatrix);
-  // This is the functionality we are testing: ProgramPathFragmentInputGen
-  // does the same work as the color transform in vertex shader.
-  static const GLfloat kColorCoefficients[12] = {1.0f / kResolution,
-                                                 0.0f,
-                                                 0.0f,
-                                                 0.0f,
-                                                 0.0f,
-                                                 1.0f / kResolution,
-                                                 0.0f,
-                                                 0.0f,
-                                                 0.0f,
-                                                 0.0f,
-                                                 0.0f,
-                                                 0.0f};
-  glProgramPathFragmentInputGenCHROMIUM(program_, kColorFragmentInputLocation,
-                                        GL_EYE_LINEAR_CHROMIUM, 3,
-                                        kColorCoefficients);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  DrawTestPattern();
-
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  for (int j = 0; j < kTestRows; ++j) {
-    for (int i = 0; i < kTestColumns; ++i) {
-      for (size_t k = 0; k < base::size(kFillCoords); k += 2) {
-        SCOPED_TRACE(testing::Message() << "Verifying fill for shape " << i
-                                        << ", " << j << " coord " << k);
-        float fx = kFillCoords[k];
-        float fy = kFillCoords[k + 1];
-        float px = i * kShapeWidth;
-        float py = j * kShapeHeight;
-
-        uint8_t color[4];
-        color[0] = roundf((px + fx) / kResolution * 255.0f);
-        color[1] = roundf((py + fy) / kResolution * 255.0f);
-        color[2] = 0;
-        color[3] = 255;
-
-        EXPECT_TRUE(GLTestHelper::CheckPixels(px + fx, py + fy, 1, 1, 2, color,
-                                              nullptr));
-      }
-    }
-  }
-
-  TeardownStateForTestPattern();
-
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-}
-
-// This test tests ProgramPathFragmentInputGenCHROMIUM and
-// BindFragmentInputLocationCHROMIUM, same as above test.
-// Each shape is filled with a color pattern that has object-space
-// gradient of the fragment coordinates in r and g components of the color. The
-// color slides as function of object coordinates: x=0..kShapeWidth --> r=0..1,
-// y=0..kShapeWidth --> g=0..1
-TEST_P(CHROMIUMPathRenderingWithTexturingTest,
-       TestProgramPathFragmentInputGenCHROMIUM_OBJECT) {
-  if (!IsApplicable())
-    return;
-
-  // clang-format off
-  static const char* kVertexShaderSource = SHADER(
-      uniform mat4 view_matrix;
-      uniform mat4 color_matrix;
-      uniform vec2 model_translate;
-      attribute vec2 position;
-      varying vec3 color;
-      void main() {
-        color = (color_matrix * vec4(position, 1, 1)).rgb;
-        vec4 p = vec4(model_translate + position, 1, 1);
-        gl_Position = view_matrix * p;
-      }
-  );
-
-  static const char* kFragmentShaderSource = SHADER(
-      precision mediump float;
-      varying vec3 color;
-      void main() {
-        gl_FragColor = vec4(color.rgb, 1.0);
-      }
-  );
-  // clang-format on
-
-  SetupProgramForTestPattern(kVertexShaderSource, kFragmentShaderSource);
-  LinkProgramForTestPattern();
-  static const GLfloat kColorMatrix[16] = {1.0f / kShapeWidth,
-                                           0.0f,
-                                           0.0f,
-                                           0.0f,
-                                           0.0f,
-                                           1.0f / kShapeHeight,
-                                           0.0f,
-                                           0.0f,
-                                           0.0f,
-                                           0.0f,
-                                           0.0f,
-                                           0.0f,
-                                           0.0f,
-                                           0.0f,
-                                           0.0f,
-                                           0.0f};
-  glUniformMatrix4fv(kColorMatrixLocation, 1, GL_FALSE, kColorMatrix);
-
-  // This is the functionality we are testing: ProgramPathFragmentInputGen
-  // does the same work as the color transform in vertex shader.
-  static const GLfloat kColorCoefficients[9] = {1.0f / kShapeWidth,
-                                                0.0f,
-                                                0.0f,
-                                                0.0f,
-                                                1.0f / kShapeHeight,
-                                                0.0f,
-                                                0.0f,
-                                                0.0f,
-                                                0.0f};
-  glProgramPathFragmentInputGenCHROMIUM(program_, kColorFragmentInputLocation,
-                                        GL_OBJECT_LINEAR_CHROMIUM, 3,
-                                        kColorCoefficients);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  DrawTestPattern();
-
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  for (int j = 0; j < kTestRows; ++j) {
-    for (int i = 0; i < kTestColumns; ++i) {
-      for (size_t k = 0; k < base::size(kFillCoords); k += 2) {
-        SCOPED_TRACE(testing::Message() << "Verifying fill for shape " << i
-                                        << ", " << j << " coord " << k);
-        float fx = kFillCoords[k];
-        float fy = kFillCoords[k + 1];
-        float px = i * kShapeWidth;
-        float py = j * kShapeHeight;
-
-        uint8_t color[4];
-        color[0] = roundf(fx / kShapeWidth * 255.0f);
-        color[1] = roundf(fy / kShapeHeight * 255.0f);
-        color[2] = 0;
-        color[3] = 255;
-
-        EXPECT_TRUE(GLTestHelper::CheckPixels(px + fx, py + fy, 1, 1, 2, color,
-                                              nullptr));
-      }
-    }
-  }
-
-  TeardownStateForTestPattern();
-
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-}
-
-TEST_P(CHROMIUMPathRenderingWithTexturingTest,
-       TestProgramPathFragmentInputGenArgs) {
-  if (!IsApplicable())
-    return;
-
-  // clang-format off
-  static const char* kVertexShaderSource = SHADER(
-      varying vec2 vec2_var; varying vec3 vec3_var; varying vec4 vec4_var;
-      varying float float_var; varying mat2 mat2_var; varying mat3 mat3_var;
-      varying mat4 mat4_var; attribute float avoid_opt; void main() {
-        vec2_var = vec2(1.0, 2.0 + avoid_opt);
-        vec3_var = vec3(1.0, 2.0, 3.0 + avoid_opt);
-        vec4_var = vec4(1.0, 2.0, 3.0, 4.0 + avoid_opt);
-        float_var = 5.0 + avoid_opt;
-        mat2_var = mat2(2.0 + avoid_opt);
-        mat3_var = mat3(3.0 + avoid_opt);
-        mat4_var = mat4(4.0 + avoid_opt);
-        gl_Position = vec4(1.0);
-      }
-  );
-
-  static const char* kFragmentShaderSource = SHADER(
-      precision mediump float; varying vec2 vec2_var; varying vec3 vec3_var;
-      varying vec4 vec4_var; varying float float_var; varying mat2 mat2_var;
-      varying mat3 mat3_var; varying mat4 mat4_var; void main() {
-        gl_FragColor = vec4(vec2_var, 0, 0) + vec4(vec3_var, 0) + vec4_var +
-                       vec4(float_var) +
-                       vec4(mat2_var[0][0], mat3_var[1][1], mat4_var[2][2], 1);
-      }
-  );
-  // clang-format on
-  GLuint vs = GLTestHelper::LoadShader(GL_VERTEX_SHADER, kVertexShaderSource);
-  GLuint fs =
-      GLTestHelper::LoadShader(GL_FRAGMENT_SHADER, kFragmentShaderSource);
-  enum {
-    kVec2Location = 0,
-    kVec3Location,
-    kVec4Location,
-    kFloatLocation,
-    kMat2Location,
-    kMat3Location,
-    kMat4Location,
-  };
-  struct {
-    GLint location;
-    const char* name;
-    GLint components;
-  } variables[] = {
-      {kVec2Location, "vec2_var", 2},
-      {kVec3Location, "vec3_var", 3},
-      {kVec4Location, "vec4_var", 4},
-      {kFloatLocation, "float_var", 1},
-      // If a varying is not single-precision floating-point scalar or
-      // vector, it always causes an invalid operation.
-      {kMat2Location, "mat2_var", -1},
-      {kMat3Location, "mat3_var", -1},
-      {kMat4Location, "mat4_var", -1},
-  };
-
-  GLint program = glCreateProgram();
-  for (size_t i = 0; i < sizeof(variables) / sizeof(variables[0]); ++i) {
-    glBindFragmentInputLocationCHROMIUM(program, variables[i].location,
-                                        variables[i].name);
-  }
-  glAttachShader(program, fs);
-  glAttachShader(program, vs);
-  glDeleteShader(vs);
-  glDeleteShader(fs);
-
-  // Test that using invalid (not linked) program is an invalid operation.
-  // See similar calls at the end of the test for discussion about the
-  // arguments.
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, GL_NONE, 0, nullptr);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-
-  glLinkProgram(program);
-
-  GLint linked = 0;
-  glGetProgramiv(program, GL_LINK_STATUS, &linked);
-  EXPECT_TRUE(linked == GL_TRUE);
-  glUseProgram(program);
-
-  const GLfloat kCoefficients16[] = {1.0f,  2.0f,  3.0f,  4.0f,  5.0f,  6.0f,
-                                     7.0f,  8.0f,  9.0f,  10.0f, 11.0f, 12.0f,
-                                     13.0f, 14.0f, 15.0f, 16.0f};
-  const GLenum kGenModes[] = {GL_NONE, GL_EYE_LINEAR_CHROMIUM,
-                              GL_OBJECT_LINEAR_CHROMIUM, GL_CONSTANT_CHROMIUM};
-
-  for (size_t ii = 0; ii < sizeof(variables) / sizeof(variables[0]); ++ii) {
-    for (GLint components = 0; components <= 4; ++components) {
-      for (size_t jj = 0; jj < base::size(kGenModes); ++jj) {
-        GLenum gen_mode = kGenModes[jj];
-        SCOPED_TRACE(testing::Message()
-                     << "Testing glProgramPathFragmentInputGenCHROMIUM "
-                     << "for fragment input '" << variables[ii].name
-                     << "' with " << variables[ii].components << " components "
-                     << " using genMode " << gen_mode << " and components "
-                     << components);
-
-        glProgramPathFragmentInputGenCHROMIUM(program, variables[ii].location,
-                                              gen_mode, components,
-                                              kCoefficients16);
-
-        if (components == 0 && gen_mode == GL_NONE) {
-          if (variables[ii].components == -1) {
-            // Clearing a fragment input that is not single-precision floating
-            // point scalar or vector is an invalid operation.
-            EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-          } else {
-            // Clearing a valid fragment input is ok.
-            EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-          }
-        } else if (components == 0 || gen_mode == GL_NONE) {
-          EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-        } else {
-          if (components == variables[ii].components) {
-            // Setting a generator for a single-precision floating point
-            // scalar or vector fragment input is ok.
-            EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-          } else {
-            // Setting a generator when components do not match is an invalid
-            // operation.
-            EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-          }
-        }
-      }
-    }
-  }
-
-  // The location == -1 would mean fragment input was optimized away. At the
-  // time of writing, -1 can not happen because the only way to obtain the
-  // location numbers is through bind. Test just to be consistent.
-
-  enum {
-    kValidGenMode = GL_CONSTANT_CHROMIUM,
-    kValidComponents = 3,
-    kInvalidGenMode = 0xAB,
-    kInvalidComponents = 5,
-  };
-
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, kValidGenMode,
-                                        kValidComponents, kCoefficients16);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  // Test that even though the spec says location == -1 causes the operation to
-  // be skipped, the verification of other parameters is still done. This is a
-  // GL policy.
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, kInvalidGenMode,
-                                        kValidComponents, kCoefficients16);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, kInvalidGenMode,
-                                        kInvalidComponents, kCoefficients16);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError());
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, kValidGenMode,
-                                        kInvalidComponents, kCoefficients16);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), glGetError());
-
-  EXPECT_TRUE(glIsProgram(program));
-
-  glDeleteProgram(program);
-
-  EXPECT_FALSE(glIsProgram(program));
-
-  // Test that using invalid (deleted) program is an invalid operation.
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, kValidGenMode,
-                                        kValidComponents, kCoefficients16);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, kInvalidGenMode,
-                                        kValidComponents, kCoefficients16);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, kInvalidGenMode,
-                                        kInvalidComponents, kCoefficients16);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, kValidGenMode,
-                                        kInvalidComponents, kCoefficients16);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-}
-
-// This test uses gl_FragCoord in a fragment shader. It is used to ensure
-// that the internal implementation runs codepaths related to built-ins.
-TEST_P(CHROMIUMPathRenderingWithTexturingTest,
-       TestProgramPathFragmentInputGenBuiltinInFragShader) {
-  if (!IsApplicable())
-    return;
-
-  static const int kColorLocation = 5;
-  static const int kFragColorLocation = 6;
-
-  // clang-format off
-  static const char* kVertexShaderSource = SHADER(
-      varying vec4 color;
-      void main() {
-        color = vec4(1.0);
-        gl_Position = vec4(1.0);
-      }
-  );
-
-  static const char* kFragmentShaderSource = SHADER(
-      precision mediump float;
-      varying vec4 color;
-      void main() {
-        gl_FragColor = gl_FragCoord + color;
-      }
-  );
-  // clang-format on
-
-  GLuint vs = GLTestHelper::LoadShader(GL_VERTEX_SHADER, kVertexShaderSource);
-  GLuint fs =
-      GLTestHelper::LoadShader(GL_FRAGMENT_SHADER, kFragmentShaderSource);
-
-  GLint program = glCreateProgram();
-  glBindFragmentInputLocationCHROMIUM(program, kColorLocation, "color");
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  glBindFragmentInputLocationCHROMIUM(program, kFragColorLocation,
-                                      "gl_FragColor");
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-
-  glAttachShader(program, fs);
-  glAttachShader(program, vs);
-  glDeleteShader(vs);
-  glDeleteShader(fs);
-
-  glLinkProgram(program);
-
-  GLint linked = 0;
-  glGetProgramiv(program, GL_LINK_STATUS, &linked);
-  if (linked == 0) {
-    char buffer[1024];
-    GLsizei length = 0;
-    glGetProgramInfoLog(program, sizeof(buffer), &length, buffer);
-    std::string log(buffer, length);
-    EXPECT_EQ(1, linked) << "Error linking program: " << log;
-    glDeleteProgram(program);
-    program = 0;
-  }
-  ASSERT_EQ(GL_TRUE, linked);
-
-  glUseProgram(program);
-
-  const GLfloat kCoefficients16[] = {1.0f,  2.0f,  3.0f,  4.0f,  5.0f,  6.0f,
-                                     7.0f,  8.0f,  9.0f,  10.0f, 11.0f, 12.0f,
-                                     13.0f, 14.0f, 15.0f, 16.0f};
-
-  glProgramPathFragmentInputGenCHROMIUM(
-      program, kColorLocation, GL_EYE_LINEAR_CHROMIUM, 4, kCoefficients16);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  glProgramPathFragmentInputGenCHROMIUM(
-      program, kFragColorLocation, GL_EYE_LINEAR_CHROMIUM, 4, kCoefficients16);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-}
-
-TEST_P(CHROMIUMPathRenderingWithTexturingTest,
-       BindFragmentInputConflictsDetection) {
-  if (!IsApplicable())
-    return;
-
-  // clang-format off
-  static const char* kVertexShaderSource = SHADER(
-      attribute vec4 position;
-      varying vec4 colorA;
-      varying vec4 colorB;
-      void main()
-      {
-         gl_Position = position;
-         colorA = position + vec4(1);
-         colorB = position + vec4(2);
-      }
-  );
-  static const char* kFragmentShaderSource = SHADER(
-      precision mediump float;
-      varying vec4 colorA;
-      varying vec4 colorB;
-      void main()
-      {
-        gl_FragColor = colorA + colorB;
-      }
-  );
-  // clang-format on
-  const GLint kColorALocation = 3;
-  const GLint kColorBLocation = 4;
-
-  GLuint vertex_shader =
-      GLTestHelper::LoadShader(GL_VERTEX_SHADER, kVertexShaderSource);
-  GLuint fragment_shader =
-      GLTestHelper::LoadShader(GL_FRAGMENT_SHADER, kFragmentShaderSource);
-
-  GLuint program = glCreateProgram();
-  glAttachShader(program, vertex_shader);
-  glAttachShader(program, fragment_shader);
-
-  glBindFragmentInputLocationCHROMIUM(program, kColorALocation, "colorA");
-  // Bind colorB to location a, causing conflicts, link should fail.
-  glBindFragmentInputLocationCHROMIUM(program, kColorALocation, "colorB");
-  glLinkProgram(program);
-  GLint linked = 0;
-  glGetProgramiv(program, GL_LINK_STATUS, &linked);
-  EXPECT_EQ(0, linked);
-
-  // Bind colorB to location b, no conflicts, link should succeed.
-  glBindFragmentInputLocationCHROMIUM(program, kColorBLocation, "colorB");
-  glLinkProgram(program);
-  linked = 0;
-  glGetProgramiv(program, GL_LINK_STATUS, &linked);
-  EXPECT_EQ(1, linked);
-
-  GLTestHelper::CheckGLError("no errors", __LINE__);
-}
-
-// Test binding with array variables, using zero indices. Tests that
-// binding colorA[0] with explicit "colorA[0]" as well as "colorA" produces
-// a correct location that can be used with PathProgramFragmentInputGen.
-// For path rendering, colorA[0] is bound to a location. The input generator for
-// the location is set to produce vec4(0, 0.1, 0, 0.1).
-// The default varying, color, is bound to a location and its generator
-// will produce vec4(10.0).  The shader program produces green pixels.
-// For vertex-based rendering, the vertex shader produces the same effect as
-// the input generator for path rendering.
-TEST_P(CHROMIUMPathRenderingWithTexturingTest,
-       BindFragmentInputSimpleArrayHandling) {
-  if (!IsApplicable())
-    return;
-
-  // clang-format off
-  static const char* kVertexShaderSource = SHADER(
-      uniform mat4 view_matrix;
-      uniform mat4 color_matrix;
-      uniform vec2 model_translate;
-      attribute vec2 position;
-      varying vec4 color;
-
-      varying vec4 colorA[4];
-      void main()
-      {
-        vec4 p = vec4(model_translate + position, 1, 1);
-        gl_Position = view_matrix * p;
-        colorA[0] = vec4(0.0, 0.1, 0, 0.1);
-        colorA[1] = vec4(0.2);
-        colorA[2] = vec4(0.3);
-        colorA[3] = vec4(0.4);
-        color = vec4(10.0);
-      }
-  );
-  static const char* kFragmentShaderSource = SHADER(
-      precision mediump float;
-      varying vec4 color;
-
-      varying vec4 colorA[4];
-      void main()
-      {
-        gl_FragColor = colorA[0] * color;
-      }
-  );
-  // clang-format on
-  const GLint kColorA0Location = 4;
-  const GLint kUnusedLocation = 5;
-  const GLfloat kColorA0[] = {0.0f, 0.1f, 0.0f, 0.1f};
-  const GLfloat kColor[] = {10.0f, 10.0f, 10.0f, 10.0f};
-
-  for (int pass = 0; pass < 2; ++pass) {
-    SetupProgramForTestPattern(kVertexShaderSource, kFragmentShaderSource);
-    if (pass == 0) {
-      glBindFragmentInputLocationCHROMIUM(program_, kUnusedLocation,
-                                          "colorA[0]");
-      glBindFragmentInputLocationCHROMIUM(program_, kColorA0Location, "colorA");
-    } else {
-      glBindFragmentInputLocationCHROMIUM(program_, kUnusedLocation, "colorA");
-      glBindFragmentInputLocationCHROMIUM(program_, kColorA0Location,
-                                          "colorA[0]");
-    }
-    LinkProgramForTestPattern();
-    glProgramPathFragmentInputGenCHROMIUM(program_, kColorA0Location,
-                                          GL_CONSTANT_CHROMIUM, 4, kColorA0);
-    glProgramPathFragmentInputGenCHROMIUM(program_, kColorFragmentInputLocation,
-                                          GL_CONSTANT_CHROMIUM, 4, kColor);
-
-    DrawTestPattern();
-    for (int j = 0; j < kTestRows; ++j) {
-      for (int i = 0; i < kTestColumns; ++i) {
-        for (size_t k = 0; k < base::size(kFillCoords); k += 2) {
-          SCOPED_TRACE(testing::Message() << "Verifying fill for shape " << i
-                                          << ", " << j << " coord " << k);
-          float fx = kFillCoords[k];
-          float fy = kFillCoords[k + 1];
-          float px = i * kShapeWidth;
-          float py = j * kShapeHeight;
-
-          uint8_t color[4] = {0, 255, 0, 255};
-
-          EXPECT_TRUE(GLTestHelper::CheckPixels(px + fx, py + fy, 1, 1, 2,
-                                                color, nullptr));
-        }
-      }
-    }
-    TeardownStateForTestPattern();
-  }
-
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-}
-
-// Test binding with non-zero indices.
-// Currently this is disabled, as the drivers seem to have a bug with the
-// behavior.
-TEST_P(CHROMIUMPathRenderingWithTexturingTest,
-       DISABLED_BindFragmentInputArrayHandling) {
-  if (!IsApplicable())
-    return;
-
-  // clang-format off
-  static const char* kVertexShaderSource = SHADER(
-      uniform mat4 view_matrix;
-      uniform mat4 color_matrix;
-      uniform vec2 model_translate;
-      attribute vec2 position;
-      varying vec4 color;
-
-      varying vec4 colorA[4];
-      void main()
-      {
-        vec4 p = vec4(model_translate + position, 1, 1);
-        gl_Position = view_matrix * p;
-
-        colorA[0] = vec4(0, 0.1, 0, 0.1);
-        colorA[1] = vec4(0, 1, 0, 1);
-        colorA[2] = vec4(0, 0.8, 0, 0.8);
-        colorA[3] = vec4(0, 0.5, 0, 0.5);
-        color = vec4(0.2);
-      }
-  );
-  static const char* kFragmentShaderSource = SHADER(
-      precision mediump float;
-      varying vec4 colorA[4];
-      varying vec4 color;
-      void main()
-      {
-        gl_FragColor = (colorA[0] * colorA[1]) +
-            colorA[2] + (colorA[3] * color);
-      }
-  );
-  // clang-format on
-  const GLint kColorA0Location = 4;
-  const GLint kColorA1Location = 1;
-  const GLint kColorA2Location = 2;
-  const GLint kColorA3Location = 3;
-  const GLint kUnusedLocation = 5;
-  const GLfloat kColorA0[] = {0.0f, 0.1f, 0.0f, 0.1f};
-  const GLfloat kColorA1[] = {0.0f, 1.0f, 0.0f, 1.0f};
-  const GLfloat kColorA2[] = {0.0f, 0.8f, 0.0f, 0.8f};
-  const GLfloat kColorA3[] = {0.0f, 0.5f, 0.0f, 0.5f};
-  const GLfloat kColor[] = {0.2f, 0.2f, 0.2f, 0.2f};
-
-  SetupProgramForTestPattern(kVertexShaderSource, kFragmentShaderSource);
-  glBindFragmentInputLocationCHROMIUM(program_, kUnusedLocation, "colorA[0]");
-  glBindFragmentInputLocationCHROMIUM(program_, kColorA1Location, "colorA[1]");
-  glBindFragmentInputLocationCHROMIUM(program_, kColorA2Location, "colorA[2]");
-  glBindFragmentInputLocationCHROMIUM(program_, kColorA3Location, "colorA[3]");
-  glBindFragmentInputLocationCHROMIUM(program_, kColorA0Location, "colorA");
-  LinkProgramForTestPattern();
-
-  glProgramPathFragmentInputGenCHROMIUM(program_, kColorA0Location,
-                                        GL_CONSTANT_CHROMIUM, 4, kColorA0);
-  glProgramPathFragmentInputGenCHROMIUM(program_, kColorA1Location,
-                                        GL_CONSTANT_CHROMIUM, 4, kColorA1);
-  glProgramPathFragmentInputGenCHROMIUM(program_, kColorA2Location,
-                                        GL_CONSTANT_CHROMIUM, 4, kColorA2);
-  glProgramPathFragmentInputGenCHROMIUM(program_, kColorA3Location,
-                                        GL_CONSTANT_CHROMIUM, 4, kColorA3);
-  glProgramPathFragmentInputGenCHROMIUM(program_, kColorFragmentInputLocation,
-                                        GL_CONSTANT_CHROMIUM, 4, kColor);
-  DrawTestPattern();
-
-  for (int j = 0; j < kTestRows; ++j) {
-    for (int i = 0; i < kTestColumns; ++i) {
-      for (size_t k = 0; k < base::size(kFillCoords); k += 2) {
-        SCOPED_TRACE(testing::Message() << "Verifying fill for shape " << i
-                                        << ", " << j << " coord " << k);
-        float fx = kFillCoords[k];
-        float fy = kFillCoords[k + 1];
-        float px = i * kShapeWidth;
-        float py = j * kShapeHeight;
-
-        uint8_t color[4] = {0, 255, 0, 255};
-
-        EXPECT_TRUE(GLTestHelper::CheckPixels(px + fx, py + fy, 1, 1, 2, color,
-                                              nullptr));
-      }
-    }
-  }
-
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  TeardownStateForTestPattern();
-}
-
-TEST_P(CHROMIUMPathRenderingWithTexturingTest, UnusedFragmentInputUpdate) {
-  if (!IsApplicable())
-    return;
-
-  // clang-format off
-  static const char* kVertexShaderString = SHADER(
-      attribute vec4 a_position;
-      void main() {
-        gl_Position = a_position;
-      }
-  );
-  static const char* kFragmentShaderString = SHADER(
-      precision mediump float;
-      uniform vec4 u_colorA;
-      uniform float u_colorU;
-      uniform vec4 u_colorC;
-      void main() {
-        gl_FragColor = u_colorA + u_colorC;
-      }
-  );
-  // clang-format on
-  const GLint kColorULocation = 1;
-  const GLint kNonexistingLocation = 5;
-  const GLint kUnboundLocation = 6;
-
-  GLuint vertex_shader =
-      GLTestHelper::LoadShader(GL_VERTEX_SHADER, kVertexShaderString);
-  GLuint fragment_shader =
-      GLTestHelper::LoadShader(GL_FRAGMENT_SHADER, kFragmentShaderString);
-  GLuint program = glCreateProgram();
-  glBindFragmentInputLocationCHROMIUM(program, kColorULocation, "u_colorU");
-  // The non-existing uniform should behave like existing, but optimized away
-  // uniform.
-  glBindFragmentInputLocationCHROMIUM(program, kNonexistingLocation,
-                                      "nonexisting");
-  // Let A and C be assigned automatic locations.
-  glAttachShader(program, vertex_shader);
-  glAttachShader(program, fragment_shader);
-  glLinkProgram(program);
-  GLint linked = 0;
-  glGetProgramiv(program, GL_LINK_STATUS, &linked);
-  EXPECT_EQ(1, linked);
-  glUseProgram(program);
-
-  GLfloat kColor[16] = {
-      0.0f,
-  };
-  // No errors on bound locations, since caller does not know
-  // if the driver optimizes them away or not.
-  glProgramPathFragmentInputGenCHROMIUM(program, kColorULocation,
-                                        GL_CONSTANT_CHROMIUM, 1, kColor);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  // No errors on bound locations of names that do not exist
-  // in the shader. Otherwise it would be inconsistent wrt the
-  // optimization case.
-  glProgramPathFragmentInputGenCHROMIUM(program, kNonexistingLocation,
-                                        GL_CONSTANT_CHROMIUM, 1, kColor);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  // The above are equal to updating -1.
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, GL_CONSTANT_CHROMIUM, 1,
-                                        kColor);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  // No errors when updating with other type either.
-  // The type can not be known with the non-existing case.
-  glProgramPathFragmentInputGenCHROMIUM(program, kColorULocation,
-                                        GL_CONSTANT_CHROMIUM, 4, kColor);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  glProgramPathFragmentInputGenCHROMIUM(program, kNonexistingLocation,
-                                        GL_CONSTANT_CHROMIUM, 4, kColor);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  glProgramPathFragmentInputGenCHROMIUM(program, -1, GL_CONSTANT_CHROMIUM, 4,
-                                        kColor);
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-  EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
-
-  // Updating an unbound, non-existing location still causes
-  // an error.
-  glProgramPathFragmentInputGenCHROMIUM(program, kUnboundLocation,
-                                        GL_CONSTANT_CHROMIUM, 4, kColor);
-  EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError());
-}
-
-INSTANTIATE_TEST_SUITE_P(WithAndWithoutShaderNameMapping,
-                         CHROMIUMPathRenderingWithTexturingTest,
-                         ::testing::Bool());
-
-}  // namespace gpu
diff --git a/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc b/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc
index a6d8044..12bef6d 100644
--- a/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc
+++ b/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc
@@ -376,58 +376,6 @@
       &GLES2Interface::BlitFramebufferCHROMIUM, impl, context_support);
   functions->fGenerateMipmap =
       gles_bind(&GLES2Interface::GenerateMipmap, impl, context_support);
-  functions->fMatrixLoadf =
-      gles_bind(&GLES2Interface::MatrixLoadfCHROMIUM, impl, context_support);
-  functions->fMatrixLoadIdentity = gles_bind(
-      &GLES2Interface::MatrixLoadIdentityCHROMIUM, impl, context_support);
-  functions->fPathCommands =
-      gles_bind(&GLES2Interface::PathCommandsCHROMIUM, impl, context_support);
-  functions->fPathParameteri =
-      gles_bind(&GLES2Interface::PathParameteriCHROMIUM, impl, context_support);
-  functions->fPathParameterf =
-      gles_bind(&GLES2Interface::PathParameterfCHROMIUM, impl, context_support);
-  functions->fGenPaths =
-      gles_bind(&GLES2Interface::GenPathsCHROMIUM, impl, context_support);
-  functions->fIsPath =
-      gles_bind(&GLES2Interface::IsPathCHROMIUM, impl, context_support);
-  functions->fDeletePaths =
-      gles_bind(&GLES2Interface::DeletePathsCHROMIUM, impl, context_support);
-  functions->fPathStencilFunc = gles_bind(
-      &GLES2Interface::PathStencilFuncCHROMIUM, impl, context_support);
-  functions->fStencilFillPath = gles_bind(
-      &GLES2Interface::StencilFillPathCHROMIUM, impl, context_support);
-  functions->fStencilStrokePath = gles_bind(
-      &GLES2Interface::StencilStrokePathCHROMIUM, impl, context_support);
-  functions->fCoverFillPath =
-      gles_bind(&GLES2Interface::CoverFillPathCHROMIUM, impl, context_support);
-  functions->fCoverStrokePath = gles_bind(
-      &GLES2Interface::CoverStrokePathCHROMIUM, impl, context_support);
-  functions->fStencilThenCoverFillPath = gles_bind(
-      &GLES2Interface::StencilThenCoverFillPathCHROMIUM, impl, context_support);
-  functions->fStencilThenCoverStrokePath =
-      gles_bind(&GLES2Interface::StencilThenCoverStrokePathCHROMIUM, impl,
-                context_support);
-  functions->fStencilFillPathInstanced = gles_bind(
-      &GLES2Interface::StencilFillPathInstancedCHROMIUM, impl, context_support);
-  functions->fStencilStrokePathInstanced =
-      gles_bind(&GLES2Interface::StencilStrokePathInstancedCHROMIUM, impl,
-                context_support);
-  functions->fCoverFillPathInstanced = gles_bind(
-      &GLES2Interface::CoverFillPathInstancedCHROMIUM, impl, context_support);
-  functions->fCoverStrokePathInstanced = gles_bind(
-      &GLES2Interface::CoverStrokePathInstancedCHROMIUM, impl, context_support);
-  functions->fStencilThenCoverFillPathInstanced =
-      gles_bind(&GLES2Interface::StencilThenCoverFillPathInstancedCHROMIUM,
-                impl, context_support);
-  functions->fStencilThenCoverStrokePathInstanced =
-      gles_bind(&GLES2Interface::StencilThenCoverStrokePathInstancedCHROMIUM,
-                impl, context_support);
-  functions->fProgramPathFragmentInputGen =
-      gles_bind(&GLES2Interface::ProgramPathFragmentInputGenCHROMIUM, impl,
-                context_support);
-  functions->fBindFragmentInputLocation =
-      gles_bind(&GLES2Interface::BindFragmentInputLocationCHROMIUM, impl,
-                context_support);
   functions->fCoverageModulation = gles_bind(
       &GLES2Interface::CoverageModulationCHROMIUM, impl, context_support);
   functions->fWindowRectangles =
diff --git a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc
index 1d1e0c6..1954b772 100644
--- a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc
+++ b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc
@@ -394,21 +394,6 @@
   ResetGrContextIfNeeded(kMisc_GrGLBackendState);
 }
 
-// Calls that invalidate kPathRendering_GrGLBackendState
-void GLES2ImplementationWithGrContextSupport::PathStencilFuncCHROMIUM(
-    GLenum func,
-    GLint ref,
-    GLuint mask) {
-  BaseClass::PathStencilFuncCHROMIUM(func, ref, mask);
-  ResetGrContextIfNeeded(kPathRendering_GrGLBackendState);
-}
-void GLES2ImplementationWithGrContextSupport::MatrixLoadfCHROMIUM(
-    GLenum matrixMode,
-    const GLfloat* m) {
-  BaseClass::MatrixLoadfCHROMIUM(matrixMode, m);
-  ResetGrContextIfNeeded(kPathRendering_GrGLBackendState);
-}
-
 // Calls that invalidate many flags
 void GLES2ImplementationWithGrContextSupport::BindBuffer(GLenum target,
                                                          GLuint buffer) {
diff --git a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h
index 01cacea..2538ac3 100644
--- a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h
+++ b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h
@@ -162,11 +162,6 @@
                  GLboolean blue,
                  GLboolean alpha) override;
 
-  // Calls that invalidate kPathRendering_GrGLBackendState
-  void PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask) override;
-  void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) override;
-  // Note: MatrixLoadIdentity omitted on purpose
-
   // Calls that invalidate different bits, depending on args
   void BindBuffer(GLenum target, GLuint buffer) override;
   void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override;
diff --git a/infra/config/generated/luci-scheduler.cfg b/infra/config/generated/luci-scheduler.cfg
index e939abf..67169174 100644
--- a/infra/config/generated/luci-scheduler.cfg
+++ b/infra/config/generated/luci-scheduler.cfg
@@ -10002,156 +10002,6 @@
   >
 >
 job: <
-  id: "ANGLE GPU Linux Release (Intel HD 630)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "ANGLE GPU Linux Release (NVIDIA)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "ANGLE GPU Mac Release (Intel)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "ANGLE GPU Mac Retina Release (AMD)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "ANGLE GPU Mac Retina Release (NVIDIA)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "ANGLE GPU Win10 x64 Release (Intel HD 630)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "ANGLE GPU Win10 x64 Release (NVIDIA)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "Optional Linux Release (Intel HD 630)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "Optional Linux Release (NVIDIA)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "Optional Mac Release (Intel)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "Optional Mac Retina Release (AMD)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "Optional Mac Retina Release (NVIDIA)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "Optional Win10 x64 Release (Intel HD 630)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "Optional Win10 x64 Release (NVIDIA)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
-  id: "Win7 ANGLE Tryserver (AMD)"
-  schedule: "triggered"
-  acls: <
-    role: TRIGGERER
-    granted_to: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com"
-  >
-  acl_sets: "ci"
-  noop: <>
->
-job: <
   id: "ci-m80-Android WebView L (dbg)"
   schedule: "triggered"
   acls: <
diff --git a/infra/config/generators/scheduler-noop-jobs.star b/infra/config/generators/scheduler-noop-jobs.star
index 479ccad..8ced9a2 100644
--- a/infra/config/generators/scheduler-noop-jobs.star
+++ b/infra/config/generators/scheduler-noop-jobs.star
@@ -1,33 +1,6 @@
 # Don't make a habit of this - it isn't public API
 load('@stdlib//internal/luci/proto.star', 'scheduler_pb')
 
-_GPU_NOOP_JOBS = [scheduler_pb.Job(
-    id = builder,
-    schedule = 'triggered',
-    acl_sets = ['ci'],
-    acls = [scheduler_pb.Acl(
-        role = scheduler_pb.Acl.TRIGGERER,
-        granted_to = 'chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com',
-    )],
-    noop = scheduler_pb.NoopTask(),
-) for builder in (
-    'ANGLE GPU Linux Release (Intel HD 630)',
-    'ANGLE GPU Linux Release (NVIDIA)',
-    'ANGLE GPU Mac Release (Intel)',
-    'ANGLE GPU Mac Retina Release (AMD)',
-    'ANGLE GPU Mac Retina Release (NVIDIA)',
-    'ANGLE GPU Win10 x64 Release (Intel HD 630)',
-    'ANGLE GPU Win10 x64 Release (NVIDIA)',
-    'Optional Linux Release (Intel HD 630)',
-    'Optional Linux Release (NVIDIA)',
-    'Optional Mac Release (Intel)',
-    'Optional Mac Retina Release (AMD)',
-    'Optional Mac Retina Release (NVIDIA)',
-    'Optional Win10 x64 Release (Intel HD 630)',
-    'Optional Win10 x64 Release (NVIDIA)',
-    'Win7 ANGLE Tryserver (AMD)',
-)]
-
 # Android testers which are triggered by Android arm Builder (dbg)
 # on master, but not on branches.
 _ANDROID_NON_BRANCHED_TESTERS = (
@@ -55,7 +28,7 @@
 
 def _add_noop_jobs(ctx):
   cfg = ctx.output['luci-scheduler.cfg']
-  for j in _GPU_NOOP_JOBS + _ANDROID_TEST_NOOP_JOBS:
+  for j in _ANDROID_TEST_NOOP_JOBS:
     cfg.job.append(j)
 
 lucicfg.generator(_add_noop_jobs)
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 0c33cc33..abad193f 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -399,11 +399,6 @@
     {"find-in-page-iframe", flag_descriptions::kFindInPageiFrameName,
      flag_descriptions::kFindInPageiFrameDescription, flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(kFindInPageiFrame)},
-    {"enable-clipboard-provider-text-suggestions",
-     flag_descriptions::kEnableClipboardProviderTextSuggestionsName,
-     flag_descriptions::kEnableClipboardProviderTextSuggestionsDescription,
-     flags_ui::kOsIos,
-     FEATURE_VALUE_TYPE(omnibox::kEnableClipboardProviderTextSuggestions)},
     {"enable-clipboard-provider-image-suggestions",
      flag_descriptions::kEnableClipboardProviderImageSuggestionsName,
      flag_descriptions::kEnableClipboardProviderImageSuggestionsDescription,
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
index 3d38215..b4d31c7 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -205,11 +205,6 @@
 const char kEnableClipboardProviderImageSuggestionsDescription[] =
     "Enable suggesting a search for the image copied to the clipboard";
 
-const char kEnableClipboardProviderTextSuggestionsName[] =
-    "Enable copied text provider";
-const char kEnableClipboardProviderTextSuggestionsDescription[] =
-    "Enable suggesting a search for text copied to the clipboard";
-
 const char kUseJSForErrorPageName[] = "Enable new error page workflow";
 const char kUseJSForErrorPageDescription[] =
     "Use JavaScript for the error pages";
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
index 054474d4..2ccff2f 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -172,11 +172,6 @@
 extern const char kEnableClipboardProviderImageSuggestionsName[];
 extern const char kEnableClipboardProviderImageSuggestionsDescription[];
 
-// Title and description for the flag to enable the clipboard provider to
-// suggest copied text
-extern const char kEnableClipboardProviderTextSuggestionsName[];
-extern const char kEnableClipboardProviderTextSuggestionsDescription[];
-
 // Title and description for the flag to enable the new error page workflow.
 extern const char kUseJSForErrorPageName[];
 extern const char kUseJSForErrorPageDescription[];
diff --git a/ios/chrome/browser/ui/browser_view/BUILD.gn b/ios/chrome/browser/ui/browser_view/BUILD.gn
index de16651..5827a38 100644
--- a/ios/chrome/browser/ui/browser_view/BUILD.gn
+++ b/ios/chrome/browser/ui/browser_view/BUILD.gn
@@ -231,6 +231,7 @@
     "//ios/chrome/browser/ui/browser_container:ui",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/download:features",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/browser/ui/toolbar/public",
     "//ios/chrome/browser/ui/toolbar/test",
     "//ios/chrome/browser/ui/util",
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator_unittest.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator_unittest.mm
index ddba79d..422481d 100644
--- a/ios/chrome/browser/ui/browser_view/browser_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_coordinator_unittest.mm
@@ -12,6 +12,7 @@
 #import "ios/chrome/browser/ui/commands/browser_coordinator_commands.h"
 #import "ios/chrome/browser/ui/commands/command_dispatcher.h"
 #import "ios/chrome/browser/ui/download/features.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/url_loading/url_loading_notifier_browser_agent.h"
 #include "ios/web/public/test/web_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -47,7 +48,10 @@
 // Tests if the URL to open the downlads directory from files.app is valid.
 TEST_F(BrowserCoordinatorTest, ShowDownloadsFolder) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(kOpenDownloadsInFilesApp);
+  feature_list.InitWithFeaturesAndParameters(
+      {{kOpenDownloadsInFilesApp, {}},
+       {fullscreen::features::kFullscreenControllerBrowserScoped, {}}},
+      {});
 
   base::FilePath download_dir;
   GetDownloadsDirectory(&download_dir);
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.h b/ios/chrome/browser/ui/browser_view/browser_view_controller.h
index 6255bd8..7acc169 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.h
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.h
@@ -16,6 +16,7 @@
 
 class Browser;
 class ChromeBrowserState;
+class FullscreenController;
 @protocol ApplicationCommands;
 @protocol BrowserCommands;
 @protocol BrowsingDataCommands;
@@ -88,6 +89,9 @@
 // The Browser's ChromeBrowserState.
 @property(nonatomic, assign, readonly) ChromeBrowserState* browserState;
 
+// The FullscreenController.
+@property(nonatomic, assign) FullscreenController* fullscreenController;
+
 // The container used for infobar banner overlays.
 @property(nonatomic, strong)
     UIViewController* infobarBannerOverlayContainerViewController;
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
index 173ff136..fffd326 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -767,6 +767,13 @@
     _webStateDelegate.reset(new web::WebStateDelegateBridge(self));
     _inNewTabAnimation = NO;
 
+    if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+      _fullscreenController = FullscreenController::FromBrowser(browser);
+    } else {
+      _fullscreenController =
+          FullscreenController::FromBrowserState(browser->GetBrowserState());
+    }
+
     _footerFullscreenProgress = 1.0;
 
     _observer = [[KeyboardObserverHelper alloc] init];
@@ -935,11 +942,7 @@
     return;
   }
 
-  // TODO(crbug.com/790886): Use the Browser's broadcaster once Browsers are
-  // supported.
-  FullscreenController* fullscreenController =
-      FullscreenController::FromBrowserState(self.browserState);
-  ChromeBroadcaster* broadcaster = fullscreenController->broadcaster();
+  ChromeBroadcaster* broadcaster = self.fullscreenController->broadcaster();
   if (_broadcasting) {
     _toolbarUIUpdater = [[LegacyToolbarUIUpdater alloc]
         initWithToolbarUI:[[ToolbarUIState alloc] init]
@@ -955,11 +958,11 @@
            webStateList:self.browser->GetWebStateList()];
     StartBroadcastingMainContentUI(self, broadcaster);
 
-    fullscreenController->SetWebStateList(self.browser->GetWebStateList());
+    self.fullscreenController->SetWebStateList(self.browser->GetWebStateList());
 
     _fullscreenUIUpdater =
-        std::make_unique<FullscreenUIUpdater>(fullscreenController, self);
-    [self updateForFullscreenProgress:fullscreenController->GetProgress()];
+        std::make_unique<FullscreenUIUpdater>(self.fullscreenController, self);
+    [self updateForFullscreenProgress:self.fullscreenController->GetProgress()];
   } else {
     StopBroadcastingToolbarUI(broadcaster);
     StopBroadcastingMainContentUI(broadcaster);
@@ -971,7 +974,7 @@
 
     _fullscreenUIUpdater = nullptr;
 
-    fullscreenController->SetWebStateList(nullptr);
+    self.fullscreenController->SetWebStateList(nullptr);
   }
 }
 
@@ -1331,7 +1334,7 @@
   } else {
     self.inNewTabAnimation = YES;
     // Exit fullscreen if needed.
-    FullscreenController::FromBrowserState(self.browserState)->ExitFullscreen();
+    self.fullscreenController->ExitFullscreen();
     const CGFloat kAnimatedViewSize = 50;
     BackgroundTabAnimationView* animatedView =
         [[BackgroundTabAnimationView alloc]
@@ -1641,8 +1644,7 @@
   if (!self.browserState || _isShutdown)
     return;
 
-  FullscreenController::FromBrowserState(self.browserState)
-      ->BrowserTraitCollectionChangedBegin();
+  self.fullscreenController->BrowserTraitCollectionChangedBegin();
 
   // TODO(crbug.com/527092): - traitCollectionDidChange: is not always forwarded
   // because in some cases the presented view controller isn't a child of the
@@ -1689,8 +1691,7 @@
 
   [self setNeedsStatusBarAppearanceUpdate];
 
-  FullscreenController::FromBrowserState(self.browserState)
-      ->BrowserTraitCollectionChangedEnd();
+  self.fullscreenController->BrowserTraitCollectionChangedEnd();
 }
 
 - (void)viewWillTransitionToSize:(CGSize)size
@@ -2357,8 +2358,7 @@
       // the provider is not initialized, viewport insets resize the webview, so
       // they should be accounted for here to prevent animation jitter.
       UIEdgeInsets viewportInsets =
-          FullscreenController::FromBrowserState(self.browserState)
-              ->GetCurrentViewportInsets();
+          self.fullscreenController->GetCurrentViewportInsets();
       webStateViewFrame =
           UIEdgeInsetsInsetRect(webStateViewFrame, viewportInsets);
     }
@@ -2812,9 +2812,8 @@
     snapshotEdgeInsetsForWebState:(web::WebState*)webState {
   DCHECK(webState);
 
-  FullscreenController* fullscreenController =
-      FullscreenController::FromBrowserState(self.browserState);
-  UIEdgeInsets maxViewportInsets = fullscreenController->GetMaxViewportInsets();
+  UIEdgeInsets maxViewportInsets =
+      self.fullscreenController->GetMaxViewportInsets();
 
   NewTabPageTabHelper* NTPHelper = NewTabPageTabHelper::FromWebState(webState);
   if (NTPHelper && NTPHelper->IsActive()) {
@@ -2836,8 +2835,8 @@
     // and doesn't need to be inset.  If fullscreen uses the content inset, then
     // the WebState view is laid out fullscreen and should be inset by the
     // viewport insets.
-    return fullscreenController->ResizesScrollView() ? UIEdgeInsetsZero
-                                                     : maxViewportInsets;
+    return self.fullscreenController->ResizesScrollView() ? UIEdgeInsetsZero
+                                                          : maxViewportInsets;
   }
 }
 
@@ -3649,9 +3648,7 @@
 
 - (void)updateForFullscreenMinViewportInsets:(UIEdgeInsets)minViewportInsets
                            maxViewportInsets:(UIEdgeInsets)maxViewportInsets {
-  FullscreenController* controller =
-      FullscreenController::FromBrowserState(self.browserState);
-  [self updateForFullscreenProgress:controller->GetProgress()];
+  [self updateForFullscreenProgress:self.fullscreenController->GetProgress()];
 }
 
 #pragma mark - FullscreenUIElement helpers
@@ -3659,10 +3656,10 @@
 // Returns the height difference between the fully expanded and fully collapsed
 // primary toolbar.
 - (CGFloat)primaryToolbarHeightDelta {
-  FullscreenController* controller =
-      FullscreenController::FromBrowserState(self.browserState);
-  CGFloat fullyExpandedHeight = controller->GetMaxViewportInsets().top;
-  CGFloat fullyCollapsedHeight = controller->GetMinViewportInsets().top;
+  CGFloat fullyExpandedHeight =
+      self.fullscreenController->GetMaxViewportInsets().top;
+  CGFloat fullyCollapsedHeight =
+      self.fullscreenController->GetMinViewportInsets().top;
   return std::max(0.0, fullyExpandedHeight - fullyCollapsedHeight);
 }
 
@@ -3785,8 +3782,7 @@
 - (UIEdgeInsets)viewportInsetsForView:(UIView*)view {
   DCHECK(view);
   UIEdgeInsets viewportInsets =
-      FullscreenController::FromBrowserState(self.browserState)
-          ->GetCurrentViewportInsets();
+      self.fullscreenController->GetCurrentViewportInsets();
   // TODO(crbug.com/917548): Use BVC for viewport inset coordinate space rather
   // than the content area.
   CGRect viewportFrame = [view
diff --git a/ios/chrome/browser/ui/dialogs/non_modal/BUILD.gn b/ios/chrome/browser/ui/dialogs/non_modal/BUILD.gn
index 2c97712..b590550 100644
--- a/ios/chrome/browser/ui/dialogs/non_modal/BUILD.gn
+++ b/ios/chrome/browser/ui/dialogs/non_modal/BUILD.gn
@@ -16,6 +16,7 @@
     "//ios/chrome/browser/ui/alert_coordinator",
     "//ios/chrome/browser/ui/fullscreen",
     "//ios/chrome/browser/ui/fullscreen:coordinators",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
   ]
 }
 
diff --git a/ios/chrome/browser/ui/dialogs/non_modal/non_modal_alert_coordinator.mm b/ios/chrome/browser/ui/dialogs/non_modal/non_modal_alert_coordinator.mm
index 1b5ec37b..bb888abe 100644
--- a/ios/chrome/browser/ui/dialogs/non_modal/non_modal_alert_coordinator.mm
+++ b/ios/chrome/browser/ui/dialogs/non_modal/non_modal_alert_coordinator.mm
@@ -10,6 +10,7 @@
 #import "ios/chrome/browser/ui/dialogs/non_modal/non_modal_alert_presentation_updater.h"
 #import "ios/chrome/browser/ui/fullscreen/chrome_coordinator+fullscreen_disabling.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_updater.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -44,8 +45,14 @@
     (NonModalAlertPresentationUpdater*)nonModalPresentationUpdater {
   if (_nonModalPresentationUpdater == nonModalPresentationUpdater)
     return;
-  FullscreenController* fullscreenController =
-      FullscreenController::FromBrowserState(self.browserState);
+
+  FullscreenController* fullscreenController;
+  if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+    fullscreenController = FullscreenController::FromBrowser(self.browser);
+  } else {
+    fullscreenController =
+        FullscreenController::FromBrowserState(self.browserState);
+  }
   _fullscreenUIUpdater = nullptr;
 
   _nonModalPresentationUpdater = nonModalPresentationUpdater;
diff --git a/ios/chrome/browser/ui/fullscreen/BUILD.gn b/ios/chrome/browser/ui/fullscreen/BUILD.gn
index 8a8242d..42e4cf73 100644
--- a/ios/chrome/browser/ui/fullscreen/BUILD.gn
+++ b/ios/chrome/browser/ui/fullscreen/BUILD.gn
@@ -22,6 +22,7 @@
     "//base",
     "//components/keyed_service/core",
     "//components/keyed_service/ios",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/browser/web_state_list",
     "//ios/chrome/common",
   ]
@@ -53,6 +54,7 @@
     ":fullscreen",
     "//base",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
   ]
 }
 
diff --git a/ios/chrome/browser/ui/fullscreen/chrome_coordinator+fullscreen_disabling.mm b/ios/chrome/browser/ui/fullscreen/chrome_coordinator+fullscreen_disabling.mm
index a21366e..c657ab5 100644
--- a/ios/chrome/browser/ui/fullscreen/chrome_coordinator+fullscreen_disabling.mm
+++ b/ios/chrome/browser/ui/fullscreen/chrome_coordinator+fullscreen_disabling.mm
@@ -10,6 +10,7 @@
 
 #include "base/logging.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/ui/fullscreen/scoped_fullscreen_disabler.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -61,8 +62,12 @@
   ScopedFullscreenDisablerWrapper* wrapper =
       objc_getAssociatedObject(coordinator, kFullscreenDisablerKey);
   if (!wrapper) {
-    FullscreenController* controller =
-        FullscreenController::FromBrowserState(browserState);
+    FullscreenController* controller;
+    if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+      controller = FullscreenController::FromBrowser(coordinator.browser);
+    } else {
+      controller = FullscreenController::FromBrowserState(browserState);
+    }
     wrapper = [[ScopedFullscreenDisablerWrapper alloc]
         initWithFullscreenController:controller];
     objc_setAssociatedObject(coordinator, kFullscreenDisablerKey, wrapper,
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_controller_impl.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_controller_impl.mm
index 087dc80..c6b028c 100644
--- a/ios/chrome/browser/ui/fullscreen/fullscreen_controller_impl.mm
+++ b/ios/chrome/browser/ui/fullscreen/fullscreen_controller_impl.mm
@@ -138,9 +138,11 @@
                 forSelector:@selector(broadcastExpandedToolbarHeight:)];
   [broadcaster_ addObserver:bridge_
                 forSelector:@selector(broadcastBottomToolbarHeight:)];
-  ios::GetChromeBrowserProvider()
-      ->GetFullscreenProvider()
-      ->InitializeFullscreen(this);
+  if (!fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+    ios::GetChromeBrowserProvider()
+        ->GetFullscreenProvider()
+        ->InitializeFullscreen(this);
+  }
 }
 
 FullscreenControllerImpl::~FullscreenControllerImpl() {
@@ -174,6 +176,10 @@
 }
 
 void FullscreenControllerImpl::SetWebStateList(WebStateList* web_state_list) {
+  if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser())
+    // If FullscreenController is Browser-scoped, then WebStateList observation
+    // should last the entire lifetime of the Browser.
+    return;
   web_state_list_observer_.SetWebStateList(web_state_list);
 }
 
diff --git a/ios/chrome/browser/ui/fullscreen/test/BUILD.gn b/ios/chrome/browser/ui/fullscreen/test/BUILD.gn
index 44e056f..60c66112 100644
--- a/ios/chrome/browser/ui/fullscreen/test/BUILD.gn
+++ b/ios/chrome/browser/ui/fullscreen/test/BUILD.gn
@@ -39,7 +39,9 @@
   ]
   deps = [
     "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/main:public",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/test/app:test_support",
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/ui",
@@ -56,7 +58,9 @@
   ]
   deps = [
     "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/main:public",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/test/app:test_support",
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/ui",
diff --git a/ios/chrome/browser/ui/fullscreen/test/fullscreen_app_interface.mm b/ios/chrome/browser/ui/fullscreen/test/fullscreen_app_interface.mm
index ddac0c8..39e49144 100644
--- a/ios/chrome/browser/ui/fullscreen/test/fullscreen_app_interface.mm
+++ b/ios/chrome/browser/ui/fullscreen/test/fullscreen_app_interface.mm
@@ -5,7 +5,10 @@
 #import "ios/chrome/browser/ui/fullscreen/test/fullscreen_app_interface.h"
 
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#import "ios/chrome/browser/main/browser_list.h"
+#import "ios/chrome/browser/main/browser_list_factory.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/test/app/tab_test_util.h"
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/public/provider/chrome/browser/ui/fullscreen_provider.h"
@@ -29,8 +32,18 @@
     return UIEdgeInsetsZero;
   ChromeBrowserState* browserState =
       ChromeBrowserState::FromBrowserState(webState->GetBrowserState());
-  FullscreenController* fullscreenController =
-      FullscreenController::FromBrowserState(browserState);
+  FullscreenController* fullscreenController;
+  if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+    // TODO: (crbug.com/1063516): Retrieve Browser-scoped FullscreenController
+    // in a better way.
+    std::set<Browser*> browsers =
+        BrowserListFactory::GetForBrowserState(browserState)
+            ->AllRegularBrowsers();
+    DCHECK(browsers.size() == 1);
+    fullscreenController = FullscreenController::FromBrowser(*browsers.begin());
+  } else {
+    fullscreenController = FullscreenController::FromBrowserState(browserState);
+  }
   if (!fullscreenController)
     return UIEdgeInsetsZero;
   return fullscreenController->GetCurrentViewportInsets();
diff --git a/ios/chrome/browser/ui/infobars/BUILD.gn b/ios/chrome/browser/ui/infobars/BUILD.gn
index 25cc2ae..188dd71 100644
--- a/ios/chrome/browser/ui/infobars/BUILD.gn
+++ b/ios/chrome/browser/ui/infobars/BUILD.gn
@@ -23,6 +23,7 @@
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/browser/ui/infobars/banners:public",
     "//ios/chrome/browser/ui/infobars/coordinators",
     "//ios/chrome/browser/upgrade",
diff --git a/ios/chrome/browser/ui/infobars/coordinators/BUILD.gn b/ios/chrome/browser/ui/infobars/coordinators/BUILD.gn
index fffe703..3429652 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/BUILD.gn
+++ b/ios/chrome/browser/ui/infobars/coordinators/BUILD.gn
@@ -31,6 +31,7 @@
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/browser/ui/infobars:infobars_ui",
     "//ios/chrome/browser/ui/infobars:public",
     "//ios/chrome/browser/ui/infobars/banners",
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm b/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm
index 46d1fa5..954e2bb6 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm
@@ -8,6 +8,7 @@
 #include "base/mac/foundation_util.h"
 #import "ios/chrome/browser/ui/fullscreen/animated_scoped_fullscreen_disabler.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/ui/infobars/banners/infobar_banner_accessibility_util.h"
 #import "ios/chrome/browser/ui/infobars/banners/infobar_banner_presentation_state.h"
 #import "ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator_implementation.h"
@@ -104,9 +105,15 @@
   }
 
   // Make sure to display the Toolbar/s before presenting the Banner.
-  _animatedFullscreenDisabler =
-      std::make_unique<AnimatedScopedFullscreenDisabler>(
-          FullscreenController::FromBrowserState(self.browserState));
+  if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+    _animatedFullscreenDisabler =
+        std::make_unique<AnimatedScopedFullscreenDisabler>(
+            FullscreenController::FromBrowser(self.browser));
+  } else {
+    _animatedFullscreenDisabler =
+        std::make_unique<AnimatedScopedFullscreenDisabler>(
+            FullscreenController::FromBrowserState(self.browserState));
+  }
   _animatedFullscreenDisabler->StartAnimation();
 
   [self.bannerViewController
diff --git a/ios/chrome/browser/ui/infobars/infobar_container_coordinator.mm b/ios/chrome/browser/ui/infobars/infobar_container_coordinator.mm
index d26f3bc..fa24b90 100644
--- a/ios/chrome/browser/ui/infobars/infobar_container_coordinator.mm
+++ b/ios/chrome/browser/ui/infobars/infobar_container_coordinator.mm
@@ -13,6 +13,7 @@
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/command_dispatcher.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/ui/infobars/banners/infobar_banner_container.h"
 #import "ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.h"
 #import "ios/chrome/browser/ui/infobars/infobar_container.h"
@@ -73,10 +74,16 @@
   DCHECK(self.positioner);
 
   // Creates the LegacyInfobarContainerVC.
+  FullscreenController* controller;
+  if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+    controller = FullscreenController::FromBrowser(self.browser);
+  } else {
+    controller =
+        FullscreenController::FromBrowserState(self.browser->GetBrowserState());
+  }
   LegacyInfobarContainerViewController* legacyContainer =
       [[LegacyInfobarContainerViewController alloc]
-          initWithFullscreenController:FullscreenController::FromBrowserState(
-                                           self.browser->GetBrowserState())];
+          initWithFullscreenController:controller];
   [self.baseViewController addChildViewController:legacyContainer];
   // TODO(crbug.com/892376): Shouldn't modify the BaseVC hierarchy, BVC
   // needs to handle this.
diff --git a/ios/chrome/browser/ui/location_bar/BUILD.gn b/ios/chrome/browser/ui/location_bar/BUILD.gn
index 367110a..c3d0a70d 100644
--- a/ios/chrome/browser/ui/location_bar/BUILD.gn
+++ b/ios/chrome/browser/ui/location_bar/BUILD.gn
@@ -54,6 +54,7 @@
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/elements",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/browser/ui/fullscreen:ui",
     "//ios/chrome/browser/ui/infobars:feature_flags",
     "//ios/chrome/browser/ui/infobars/badge",
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm b/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm
index 5f85d10..dfa06d0 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm
@@ -31,6 +31,7 @@
 #import "ios/chrome/browser/ui/commands/command_dispatcher.h"
 #import "ios/chrome/browser/ui/commands/load_query_commands.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_updater.h"
 #import "ios/chrome/browser/ui/infobars/infobar_feature.h"
 #import "ios/chrome/browser/ui/location_bar/location_bar_constants.h"
@@ -190,8 +191,13 @@
       static_cast<id<InfobarCommands, BrowserCoordinatorCommands>>(
           self.browser->GetCommandDispatcher());
   buttonFactory.delegate = self.badgeMediator;
-  FullscreenController* fullscreenController =
-      FullscreenController::FromBrowserState(self.browserState);
+  FullscreenController* fullscreenController;
+  if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+    fullscreenController = FullscreenController::FromBrowser(self.browser);
+  } else {
+    fullscreenController =
+        FullscreenController::FromBrowserState(self.browserState);
+  }
   _badgeFullscreenUIUpdater = std::make_unique<FullscreenUIUpdater>(
       fullscreenController, self.badgeViewController);
 
diff --git a/ios/chrome/browser/ui/overlays/BUILD.gn b/ios/chrome/browser/ui/overlays/BUILD.gn
index 67f7f5a..c64c4d0e 100644
--- a/ios/chrome/browser/ui/overlays/BUILD.gn
+++ b/ios/chrome/browser/ui/overlays/BUILD.gn
@@ -39,6 +39,7 @@
     "//ios/chrome/browser/overlays",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/browser/ui/overlays/infobar_banner",
     "//ios/chrome/browser/ui/overlays/infobar_modal",
     "//ios/chrome/browser/ui/overlays/web_content_area",
@@ -136,6 +137,7 @@
     "//ios/chrome/browser/overlays/public/web_content_area",
     "//ios/chrome/browser/overlays/test",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/browser/ui/overlays/test",
     "//ios/chrome/browser/ui/overlays/test_modality",
     "//ios/chrome/browser/web_state_list",
diff --git a/ios/chrome/browser/ui/overlays/overlay_presentation_context_fullscreen_disabler.mm b/ios/chrome/browser/ui/overlays/overlay_presentation_context_fullscreen_disabler.mm
index 8a663ae6..eb1ad74 100644
--- a/ios/chrome/browser/ui/overlays/overlay_presentation_context_fullscreen_disabler.mm
+++ b/ios/chrome/browser/ui/overlays/overlay_presentation_context_fullscreen_disabler.mm
@@ -8,6 +8,7 @@
 #import "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/ui/fullscreen/animated_scoped_fullscreen_disabler.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -19,7 +20,10 @@
     Browser* browser,
     OverlayModality modality)
     : fullscreen_disabler_(
-          FullscreenController::FromBrowserState(browser->GetBrowserState()),
+          fullscreen::features::ShouldScopeFullscreenControllerToBrowser()
+              ? FullscreenController::FromBrowser(browser)
+              : FullscreenController::FromBrowserState(
+                    browser->GetBrowserState()),
           OverlayPresenter::FromBrowser(browser, modality)) {}
 
 OverlayContainerFullscreenDisabler::~OverlayContainerFullscreenDisabler() =
diff --git a/ios/chrome/browser/ui/overlays/overlay_presentation_context_fullscreen_disabler_unittest.mm b/ios/chrome/browser/ui/overlays/overlay_presentation_context_fullscreen_disabler_unittest.mm
index 5677f6b..3515414 100644
--- a/ios/chrome/browser/ui/overlays/overlay_presentation_context_fullscreen_disabler_unittest.mm
+++ b/ios/chrome/browser/ui/overlays/overlay_presentation_context_fullscreen_disabler_unittest.mm
@@ -10,6 +10,7 @@
 #include "ios/chrome/browser/overlays/test/fake_overlay_presentation_context.h"
 #include "ios/chrome/browser/overlays/test/overlay_test_macros.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/web_state_list/web_state_list.h"
 #import "ios/chrome/browser/web_state_list/web_state_opener.h"
 #import "ios/web/public/test/fakes/test_web_state.h"
@@ -45,8 +46,12 @@
   }
 
   bool fullscreen_enabled() {
-    return FullscreenController::FromBrowserState(browser_.GetBrowserState())
-        ->IsEnabled();
+    if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+      return FullscreenController::FromBrowser(&browser_)->IsEnabled();
+    } else {
+      return FullscreenController::FromBrowserState(browser_.GetBrowserState())
+          ->IsEnabled();
+    }
   }
   OverlayPresenter* overlay_presenter() {
     return OverlayPresenter::FromBrowser(&browser_, kModality);
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
index 25eb025..8901045 100644
--- a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
+++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
@@ -876,6 +876,8 @@
   // as when an overscroll that begins just as the last incognito tab is closed.
   if (!disablingFullscreen || !self.browserState)
     return;
+
+  // TODO: (crbug.com/1063521): Retrieve FullscreenController using Browser.
   FullscreenController* fullscreenController =
       FullscreenController::FromBrowserState(self.browserState);
   // Disabling fullscreen will show the toolbars, which may potentially produce
diff --git a/ios/chrome/browser/ui/sad_tab/BUILD.gn b/ios/chrome/browser/ui/sad_tab/BUILD.gn
index 44ba834..73661c2 100644
--- a/ios/chrome/browser/ui/sad_tab/BUILD.gn
+++ b/ios/chrome/browser/ui/sad_tab/BUILD.gn
@@ -43,6 +43,7 @@
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
+    "//ios/chrome/browser/ui/fullscreen:coordinators",
     "//ios/chrome/browser/ui/overscroll_actions",
     "//ios/chrome/browser/ui/util",
     "//ios/chrome/browser/web",
diff --git a/ios/chrome/browser/ui/sad_tab/sad_tab_coordinator.mm b/ios/chrome/browser/ui/sad_tab/sad_tab_coordinator.mm
index 95bf1b1..31e64ab 100644
--- a/ios/chrome/browser/ui/sad_tab/sad_tab_coordinator.mm
+++ b/ios/chrome/browser/ui/sad_tab/sad_tab_coordinator.mm
@@ -10,6 +10,7 @@
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/browser_commands.h"
 #import "ios/chrome/browser/ui/commands/open_new_tab_command.h"
+#import "ios/chrome/browser/ui/fullscreen/chrome_coordinator+fullscreen_disabling.h"
 #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h"
 #import "ios/chrome/browser/ui/sad_tab/sad_tab_view_controller.h"
 #import "ios/chrome/browser/ui/util/layout_guide_names.h"
@@ -43,6 +44,9 @@
                               ui_metrics::SadTabEvent::MAX_SAD_TAB_EVENT);
   }
 
+  // Creates a fullscreen disabler.
+  [self didStartFullscreenDisablingUI];
+
   _viewController = [[SadTabViewController alloc] init];
   _viewController.delegate = self;
   _viewController.overscrollDelegate = self.overscrollDelegate;
@@ -63,6 +67,8 @@
   if (!_viewController)
     return;
 
+  [self didStopFullscreenDisablingUI];
+
   [_viewController willMoveToParentViewController:nil];
   [_viewController.view removeFromSuperview];
   [_viewController removeFromParentViewController];
diff --git a/ios/chrome/browser/ui/sad_tab/sad_tab_coordinator_unittest.mm b/ios/chrome/browser/ui/sad_tab/sad_tab_coordinator_unittest.mm
index addd812..bf41422 100644
--- a/ios/chrome/browser/ui/sad_tab/sad_tab_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/sad_tab/sad_tab_coordinator_unittest.mm
@@ -53,6 +53,7 @@
   // Verify SadTabViewController state.
   EXPECT_FALSE(view_controller.offTheRecord);
   EXPECT_FALSE(view_controller.repeatedFailure);
+  [coordinator stop];
 }
 
 // Tests stopping coordinator.
@@ -79,6 +80,7 @@
 
   [coordinator sadTabTabHelperDismissSadTab:nullptr];
   EXPECT_EQ(0U, base_view_controller_.childViewControllers.count);
+  [coordinator stop];
 }
 
 // Tests hiding Sad Tab.
@@ -92,6 +94,7 @@
 
   [coordinator sadTabTabHelperDidHide:nullptr];
   EXPECT_EQ(0U, base_view_controller_.childViewControllers.count);
+  [coordinator stop];
 }
 
 // Tests SadTabViewController state for the first failure in non-incognito mode.
@@ -115,6 +118,7 @@
   // Verify SadTabViewController state.
   EXPECT_FALSE(view_controller.offTheRecord);
   EXPECT_FALSE(view_controller.repeatedFailure);
+  [coordinator stop];
 }
 
 // Tests SadTabViewController state for the repeated failure in incognito mode.
@@ -140,6 +144,7 @@
   // Verify SadTabViewController state.
   EXPECT_TRUE(view_controller.offTheRecord);
   EXPECT_TRUE(view_controller.repeatedFailure);
+  [coordinator stop];
 }
 
 // Tests SadTabViewController state for the repeated failure in incognito mode.
@@ -161,6 +166,7 @@
   // Verify SadTabViewController state.
   EXPECT_TRUE(view_controller.offTheRecord);
   EXPECT_TRUE(view_controller.repeatedFailure);
+  [coordinator stop];
 }
 
 // Tests action button tap for the first failure.
@@ -187,6 +193,7 @@
   [view_controller.actionButton
       sendActionsForControlEvents:UIControlEventTouchUpInside];
   EXPECT_OCMOCK_VERIFY(coordinator.dispatcher);
+  [coordinator stop];
 }
 
 // Tests action button tap for the repeated failure.
@@ -215,6 +222,7 @@
   [view_controller.actionButton
       sendActionsForControlEvents:UIControlEventTouchUpInside];
   EXPECT_OCMOCK_VERIFY(coordinator.dispatcher);
+  [coordinator stop];
 }
 
 // Tests that view controller is not presented for the hidden web state.
@@ -230,4 +238,5 @@
 
   // Verify that view controller was not presented for the hidden web state.
   EXPECT_EQ(0U, base_view_controller_.childViewControllers.count);
+  [coordinator stop];
 }
diff --git a/ios/chrome/browser/ui/side_swipe/BUILD.gn b/ios/chrome/browser/ui/side_swipe/BUILD.gn
index eac6515..7e270e9 100644
--- a/ios/chrome/browser/ui/side_swipe/BUILD.gn
+++ b/ios/chrome/browser/ui/side_swipe/BUILD.gn
@@ -31,6 +31,7 @@
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/elements",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/browser/ui/ntp",
     "//ios/chrome/browser/ui/ntp:util",
     "//ios/chrome/browser/ui/tab_grid/grid:grid_ui_constants",
diff --git a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h
index 563f26a..91030b29 100644
--- a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h
+++ b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h
@@ -20,6 +20,7 @@
 @protocol SideSwipeToolbarSnapshotProviding;
 @protocol TabStripHighlighting;
 class Browser;
+class FullscreenController;
 
 // Notification sent when the user starts a side swipe (on tablet).
 extern NSString* const kSideSwipeWillStartNotification;
@@ -76,6 +77,8 @@
 @property(nonatomic, weak) id<SnapshotGeneratorDelegate> snapshotDelegate;
 @property(nonatomic, weak) id<TabStripHighlighting> tabStripDelegate;
 
+@property(nonatomic, assign) FullscreenController* fullscreenController;
+
 // Initializer.
 - (instancetype)initWithBrowser:(Browser*)browser;
 
diff --git a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm
index fc87d78..2db7622 100644
--- a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm
+++ b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm
@@ -17,6 +17,7 @@
 #import "ios/chrome/browser/snapshots/snapshot_tab_helper.h"
 #import "ios/chrome/browser/ui/fullscreen/animated_scoped_fullscreen_disabler.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/ui/fullscreen/scoped_fullscreen_disabler.h"
 #import "ios/chrome/browser/ui/side_swipe/card_side_swipe_view.h"
 #import "ios/chrome/browser/ui/side_swipe/side_swipe_gesture_recognizer.h"
@@ -186,6 +187,12 @@
     _scopedWebStateObserver =
         std::make_unique<ScopedObserver<web::WebState, web::WebStateObserver>>(
             _webStateObserverBridge.get());
+    if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+      _fullscreenController = FullscreenController::FromBrowser(self.browser);
+    } else {
+      _fullscreenController =
+          FullscreenController::FromBrowserState(self.browserState);
+    }
     if (self.activeWebState)
       _scopedWebStateObserver->Add(self.activeWebState);
   }
@@ -392,8 +399,8 @@
 
   if (gesture.state == UIGestureRecognizerStateBegan) {
     // Disable fullscreen while the side swipe gesture is occurring.
-    _fullscreenDisabler = std::make_unique<ScopedFullscreenDisabler>(
-        FullscreenController::FromBrowserState(self.browserState));
+    _fullscreenDisabler =
+        std::make_unique<ScopedFullscreenDisabler>(self.fullscreenController);
     SnapshotTabHelper::FromWebState(self.activeWebState)
         ->UpdateSnapshotWithCallback(nil);
     [[NSNotificationCenter defaultCenter]
@@ -485,7 +492,7 @@
     // Make sure the Toolbar is visible by disabling Fullscreen.
     _animatedFullscreenDisabler =
         std::make_unique<AnimatedScopedFullscreenDisabler>(
-            FullscreenController::FromBrowserState(self.browserState));
+            self.fullscreenController);
     _animatedFullscreenDisabler->StartAnimation();
 
     _inSwipe = YES;
@@ -557,9 +564,7 @@
 
     // Add horizontal stack view controller.
     CGFloat headerHeight =
-        FullscreenController::FromBrowserState(self.browserState)
-            ->GetMaxViewportInsets()
-            .top;
+        self.fullscreenController->GetMaxViewportInsets().top;
 
     if (_tabSideSwipeView) {
       [_tabSideSwipeView setFrame:frame];
diff --git a/ios/chrome/browser/ui/tabs/BUILD.gn b/ios/chrome/browser/ui/tabs/BUILD.gn
index 215af88b..9d4a582c 100644
--- a/ios/chrome/browser/ui/tabs/BUILD.gn
+++ b/ios/chrome/browser/ui/tabs/BUILD.gn
@@ -50,6 +50,7 @@
     "//ios/chrome/browser/ui/elements",
     "//ios/chrome/browser/ui/favicon/resources:default_world_favicon",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/browser/ui/image_util",
     "//ios/chrome/browser/ui/ntp:util",
     "//ios/chrome/browser/ui/open_in",
diff --git a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm
index 1393954..1d6cd843 100644
--- a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm
+++ b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm
@@ -30,6 +30,7 @@
 #import "ios/chrome/browser/ui/commands/open_new_tab_command.h"
 #import "ios/chrome/browser/ui/commands/popup_menu_commands.h"
 #include "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #include "ios/chrome/browser/ui/fullscreen/scoped_fullscreen_disabler.h"
 #import "ios/chrome/browser/ui/ntp/ntp_util.h"
 #import "ios/chrome/browser/ui/popup_menu/public/popup_menu_long_press_delegate.h"
@@ -805,8 +806,13 @@
     [self removeAutoscrollTimer];
 
   // Disable fullscreen during drags.
-  _fullscreenDisabler = std::make_unique<ScopedFullscreenDisabler>(
-      FullscreenController::FromBrowserState(_browser->GetBrowserState()));
+  if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+    _fullscreenDisabler = std::make_unique<ScopedFullscreenDisabler>(
+        FullscreenController::FromBrowser(_browser));
+  } else {
+    _fullscreenDisabler = std::make_unique<ScopedFullscreenDisabler>(
+        FullscreenController::FromBrowserState(_browser->GetBrowserState()));
+  }
 }
 
 - (void)continueDrag:(UILongPressGestureRecognizer*)gesture {
diff --git a/ios/chrome/browser/ui/toolbar/BUILD.gn b/ios/chrome/browser/ui/toolbar/BUILD.gn
index 7a33986..7dacd19 100644
--- a/ios/chrome/browser/ui/toolbar/BUILD.gn
+++ b/ios/chrome/browser/ui/toolbar/BUILD.gn
@@ -39,6 +39,7 @@
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
     "//ios/chrome/browser/ui/location_bar",
     "//ios/chrome/browser/ui/ntp",
     "//ios/chrome/browser/ui/ntp:util",
diff --git a/ios/chrome/browser/ui/toolbar/primary_toolbar_coordinator.mm b/ios/chrome/browser/ui/toolbar/primary_toolbar_coordinator.mm
index 9792296..2b837db 100644
--- a/ios/chrome/browser/ui/toolbar/primary_toolbar_coordinator.mm
+++ b/ios/chrome/browser/ui/toolbar/primary_toolbar_coordinator.mm
@@ -14,6 +14,7 @@
 #import "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/ui/commands/command_dispatcher.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_updater.h"
 #import "ios/chrome/browser/ui/location_bar/location_bar_coordinator.h"
 #import "ios/chrome/browser/ui/ntp/ntp_util.h"
@@ -90,9 +91,14 @@
   self.orchestrator.editViewAnimatee =
       [self.locationBarCoordinator editViewAnimatee];
 
-  _fullscreenUIUpdater = std::make_unique<FullscreenUIUpdater>(
-      FullscreenController::FromBrowserState(self.browserState),
-      self.viewController);
+  if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+    _fullscreenUIUpdater = std::make_unique<FullscreenUIUpdater>(
+        FullscreenController::FromBrowser(self.browser), self.viewController);
+  } else {
+    _fullscreenUIUpdater = std::make_unique<FullscreenUIUpdater>(
+        FullscreenController::FromBrowserState(self.browserState),
+        self.viewController);
+  }
 
   [super start];
   self.started = YES;
@@ -154,7 +160,11 @@
 }
 
 - (void)exitFullscreen {
-  FullscreenController::FromBrowserState(self.browserState)->ExitFullscreen();
+  if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+    FullscreenController::FromBrowser(self.browser)->ExitFullscreen();
+  } else {
+    FullscreenController::FromBrowserState(self.browserState)->ExitFullscreen();
+  }
 }
 
 #pragma mark - FakeboxFocuser
diff --git a/ios/chrome/browser/ui/toolbar_container/BUILD.gn b/ios/chrome/browser/ui/toolbar_container/BUILD.gn
index 6ac93c9..b1dd3e7f 100644
--- a/ios/chrome/browser/ui/toolbar_container/BUILD.gn
+++ b/ios/chrome/browser/ui/toolbar_container/BUILD.gn
@@ -15,6 +15,7 @@
     "//base",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/fullscreen",
+    "//ios/chrome/browser/ui/fullscreen:feature_flags",
   ]
 }
 
diff --git a/ios/chrome/browser/ui/toolbar_container/toolbar_container_coordinator.mm b/ios/chrome/browser/ui/toolbar_container/toolbar_container_coordinator.mm
index 67c4d9f..0d80498 100644
--- a/ios/chrome/browser/ui/toolbar_container/toolbar_container_coordinator.mm
+++ b/ios/chrome/browser/ui/toolbar_container/toolbar_container_coordinator.mm
@@ -7,6 +7,7 @@
 #include <memory>
 
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
+#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_updater.h"
 #import "ios/chrome/browser/ui/toolbar_container/toolbar_container_view_controller.h"
 #import "ios/chrome/browser/ui/toolbar_container/toolbar_height_range.h"
@@ -85,9 +86,15 @@
   self.containerViewController.collapsesSafeArea = !isPrimary;
   [self startToolbarCoordinators];
   // Start observing fullscreen events.
-  _fullscreenUIUpdater = std::make_unique<FullscreenUIUpdater>(
-      FullscreenController::FromBrowserState(self.browserState),
-      self.containerViewController);
+  if (fullscreen::features::ShouldScopeFullscreenControllerToBrowser()) {
+    _fullscreenUIUpdater = std::make_unique<FullscreenUIUpdater>(
+        FullscreenController::FromBrowser(self.browser),
+        self.containerViewController);
+  } else {
+    _fullscreenUIUpdater = std::make_unique<FullscreenUIUpdater>(
+        FullscreenController::FromBrowserState(self.browserState),
+        self.containerViewController);
+  }
   self.started = YES;
 }
 
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper.h b/ios/chrome/browser/web/sad_tab_tab_helper.h
index b739d29..282d7c7 100644
--- a/ios/chrome/browser/web/sad_tab_tab_helper.h
+++ b/ios/chrome/browser/web/sad_tab_tab_helper.h
@@ -13,7 +13,6 @@
 #import "ios/web/public/web_state_user_data.h"
 
 @protocol SadTabTabHelperDelegate;
-class ScopedFullscreenDisabler;
 
 // SadTabTabHelper listens to RenderProcessGone events and presents a
 // SadTabView view appropriately.
@@ -77,10 +76,6 @@
   // Removes UIApplicationDidBecomeActiveNotification observer.
   void RemoveApplicationDidBecomeActiveObserver();
 
-  // Creates or resets the fullscreen disabler depending on whether the sad tab
-  // is currently visible.
-  void UpdateFullscreenDisabler();
-
   // WebStateObserver:
   void WasShown(web::WebState* web_state) override;
   void WasHidden(web::WebState* web_state) override;
@@ -113,9 +108,6 @@
   // true if Sad Tab is presented and presented for repeated load failure.
   bool repeated_failure_ = false;
 
-  // The fullscreen disabler for when the sad tab is visible.
-  std::unique_ptr<ScopedFullscreenDisabler> fullscreen_disabler_;
-
   // Stores the interval window in seconds during which a second
   // RenderProcessGone failure will be considered a repeat failure.
   double repeat_failure_interval_ = kDefaultRepeatFailureInterval;
diff --git a/ios/chrome/browser/web/sad_tab_tab_helper.mm b/ios/chrome/browser/web/sad_tab_tab_helper.mm
index fd33b3e..64a7f85 100644
--- a/ios/chrome/browser/web/sad_tab_tab_helper.mm
+++ b/ios/chrome/browser/web/sad_tab_tab_helper.mm
@@ -74,7 +74,6 @@
 void SadTabTabHelper::SetDelegate(id<SadTabTabHelperDelegate> delegate) {
   delegate_ = delegate;
   if (delegate_ && showing_sad_tab_ && web_state_->IsVisible()) {
-    UpdateFullscreenDisabler();
     [delegate_ sadTabTabHelper:this
         didShowForRepeatedFailure:repeated_failure_];
   }
@@ -86,7 +85,6 @@
     ReloadTab();
     requires_reload_on_becoming_visible_ = false;
   }
-  UpdateFullscreenDisabler();
   if (showing_sad_tab_) {
     DCHECK(delegate_);
     [delegate_ sadTabTabHelper:this
@@ -95,7 +93,6 @@
 }
 
 void SadTabTabHelper::WasHidden(web::WebState* web_state) {
-  UpdateFullscreenDisabler();
   if (showing_sad_tab_) {
     DCHECK(delegate_);
     [delegate_ sadTabTabHelperDidHide:this];
@@ -193,7 +190,6 @@
 void SadTabTabHelper::SetIsShowingSadTab(bool showing_sad_tab) {
   if (showing_sad_tab_ != showing_sad_tab) {
     showing_sad_tab_ = showing_sad_tab;
-    UpdateFullscreenDisabler();
   }
 }
 
@@ -233,19 +229,4 @@
   }
 }
 
-void SadTabTabHelper::UpdateFullscreenDisabler() {
-  if (showing_sad_tab_ && web_state_->IsVisible()) {
-    ChromeBrowserState* browser_state =
-        ChromeBrowserState::FromBrowserState(web_state_->GetBrowserState());
-    FullscreenController* fullscreen_controller =
-        FullscreenController::FromBrowserState(browser_state);
-    if (fullscreen_controller) {
-      fullscreen_disabler_ =
-          std::make_unique<ScopedFullscreenDisabler>(fullscreen_controller);
-    }
-  } else {
-    fullscreen_disabler_ = nullptr;
-  }
-}
-
 WEB_STATE_USER_DATA_KEY_IMPL(SadTabTabHelper)
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_af.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_af.xtb
index 2e47da8..e078543 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_af.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_af.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="af">
+<translation id="1211920912879022906">Jy het onlangs by jou Google-rekening afgemeld, wat jou gesinkroniseerde wagwoorde verwyder het. Meld by Chrome aan en skakel sinkronisering aan om hulle hier te sien.</translation>
+<translation id="2488806977964805203">Stel 'n wagkode</translation>
+<translation id="2492201814011227831">Stoor sommige wagwoorde in Chrome om te begin. Meld by Chrome aan en skakel sinkronisering aan om jou wagwoord hier te sien as jy reeds wagwoorde in jou Google-rekening geberg het.</translation>
 <translation id="3378542047369517508">Kry toegang tot al die wagwoorde wat jy in Chrome stoor. In enige program. Enige tyd.</translation>
 <translation id="3660601625129812825">Vul Chrome-wagwoorde outomaties in</translation>
+<translation id="4695654165345019650">Kry toegang tot wagwoorde …</translation>
 <translation id="5313485577007399362">Aktiveer outovul …</translation>
 <translation id="6494101196118320406">Geen Chrome-wagwoorde nie</translation>
+<translation id="6846906712230932330">Om wagwoorde te gebruik, moet jy eers 'n wagkode op jou toestel stel.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Geen Chrome-wagwoorde nie</translation>
+<translation id="8602573493531049509">Vind uit hoe</translation>
 <translation id="9087836967653912639">Kanselleer</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb
index 13ea0631..61e9a048 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="am">
+<translation id="1211920912879022906">በቅርቡ ከGoogle መለያዎ ወጥተዋል፣ ይህም የሰመሩ ይለፍ ቃላትዎን አስወግዶታል። እነሱን እዚህ ለማየት በመለያ ወደ Chrome ይግቡና ስምረትን ያብሩ።</translation>
+<translation id="2488806977964805203">የይለፍ ኮድ ያዘጋጁ</translation>
+<translation id="2492201814011227831">ለመጀመር በChrome ውስጥ አንዳንድ የይለፍ ቃላትን ያስቀምጡ። በGoogle መለያዎ ላይ አስቀድመው የተመጡ የይለፍ ቃላት ካለዎት እነሱን እዚይ ለማየት ወደ Chrome ይግቡና ስምረትን ያብሩ።</translation>
 <translation id="3378542047369517508">በChrome ውስጥ ያስቀመጧቸው የሁሉም ይለፍ ቃላት መዳረሻ ያግኙ። በማንኛውም መተግበሪያ ውስጥ። በማንኛውም ጊዜ።</translation>
 <translation id="3660601625129812825">የChrome ይለፍ ቃላትን በራስ-ሙላ</translation>
+<translation id="4695654165345019650">የይለፍ ቃላትን መድረስ...</translation>
 <translation id="5313485577007399362">ራስ-ሙላን ያንቁ...</translation>
 <translation id="6494101196118320406">የChrome ይለፍ ቃላት የሉም</translation>
+<translation id="6846906712230932330">የይለፍ ቃላትን ለመጠቀም በመጀመሪያ በመሣሪያዎ ላይ የይለፍ ኮድ ማቀናበር አለብዎት።</translation>
 <translation id="6965382102122355670">እሺ</translation>
 <translation id="7870350829250847712">የChrome ይለፍ ቃላት የሉም</translation>
+<translation id="8602573493531049509">እንዴት እንደሆነ ይወቁ</translation>
 <translation id="9087836967653912639">ይቅር</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bg.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bg.xtb
index 33b03efd..6d222df 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bg.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bg.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="bg">
+<translation id="1211920912879022906">Наскоро излязохте от профила си в Google, при което синхронизираните ви пароли бяха премахнати. За да ги видите тук, влезте в профила си в Chrome и включете синхронизирането.</translation>
+<translation id="2488806977964805203">Задаване на код за достъп</translation>
+<translation id="2492201814011227831">За да започнете, запазете пароли в Chrome. Ако в профила ви в Google вече има запазени пароли, влезте в профила си в Chrome и включете синхронизирането, за да ги видите тук.</translation>
 <translation id="3378542047369517508">Получете достъп до всички пароли, които запазвате в Chrome. Във всяко приложение и по всяко време.</translation>
 <translation id="3660601625129812825">Автоматично попълване на пароли в Chrome</translation>
+<translation id="4695654165345019650">Осъществяване на достъп до паролите...</translation>
 <translation id="5313485577007399362">Активиране на автоматичното попълване...</translation>
 <translation id="6494101196118320406">Няма пароли в Chrome</translation>
+<translation id="6846906712230932330">За да използвате паролите, трябва първо да зададете код за достъп на устройството си.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Няма пароли в Chrome</translation>
+<translation id="8602573493531049509">Научете как</translation>
 <translation id="9087836967653912639">Отказ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb
index 8d29964..1bab586 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="bs">
+<translation id="1211920912879022906">Nedavno ste se odjavili sa svog Google računa, čime ste uklonili sinhronizirane lozinke. Prijavite se na Chrome i uključite sinhronizaciju da se lozinke prikažu ovdje.</translation>
+<translation id="2488806977964805203">Postavite šifru</translation>
+<translation id="2492201814011227831">Sačuvajte lozinke u Chromeu da započnete. Ako ste već pohranili lozinke na svom Google računu, prijavite se na Chrome i uključite sinhronizaciju da se lozinke prikažu ovdje.</translation>
 <translation id="3378542047369517508">Dobijte pristup svim lozinkama koje sačuvate u Chromeu. U bilo kojoj aplikaciji. Bilo kada.</translation>
 <translation id="3660601625129812825">Automatsko popunjavanje lozinki u Chromeu</translation>
+<translation id="4695654165345019650">Pristup lozinkama...</translation>
 <translation id="5313485577007399362">Omogući automatsko popunjavanje...</translation>
 <translation id="6494101196118320406">Nema Chrome lozinki</translation>
+<translation id="6846906712230932330">Postavite šifru na uređaju da koristite lozinke.</translation>
 <translation id="6965382102122355670">Uredu</translation>
 <translation id="7870350829250847712">Nema Chrome lozinki</translation>
+<translation id="8602573493531049509">Saznajte kako</translation>
 <translation id="9087836967653912639">Otkaži</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb
index defd29578..b34d0e17 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ca">
+<translation id="1211920912879022906">Fa poc has tancat la sessió del teu Compte de Google. Amb aquesta acció, s'han suprimit les contrasenyes sincronitzades. Inicia la sessió a Chrome i activa la sincronització perquè es mostrin aquí.</translation>
+<translation id="2488806977964805203">Estableix una contrasenya</translation>
+<translation id="2492201814011227831">Desa alguna contrasenya a Chrome per començar. Si ja tens contrasenyes desades al Compte de Google, inicia la sessió a Chrome i activa la sincronització perquè es mostrin aquí.</translation>
 <translation id="3378542047369517508">Obtén accés a totes les contrasenyes que desis a Chrome. En qualsevol aplicació. En qualsevol moment.</translation>
 <translation id="3660601625129812825">Autocompleta les contrasenyes de Chrome</translation>
+<translation id="4695654165345019650">Accedeix a les contrasenyes...</translation>
 <translation id="5313485577007399362">Activa Autocompletar...</translation>
 <translation id="6494101196118320406">No hi ha cap contrasenya de Chrome</translation>
+<translation id="6846906712230932330">Per utilitzar les contrasenyes, primer has d'establir una contrasenya al dispositiu.</translation>
 <translation id="6965382102122355670">D'acord</translation>
 <translation id="7870350829250847712">No hi ha cap contrasenya de Chrome</translation>
+<translation id="8602573493531049509">Més informació</translation>
 <translation id="9087836967653912639">Cancel·la</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb
index 2d22cede..49a5e22 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="da">
+<translation id="1211920912879022906">Du loggede for nylig ud af din Google-konto, hvilket har medført, at dine synkroniserede adgangskoder er blevet fjernet. Log ind i Chrome, og aktivér synkronisering for at se dem her.</translation>
+<translation id="2488806977964805203">Angiv en adgangskode</translation>
+<translation id="2492201814011227831">Gem nogle adgangskoder i Chrome for at komme i gang. Hvis du allerede har gemt adgangskoder på din Google-konto, kan du logge ind i Chrome og aktivere synkronisering for at se dem her.</translation>
 <translation id="3378542047369517508">Få adgang til alle de adgangskoder, du har gemt i Chrome. I enhver app og til enhver tid.</translation>
 <translation id="3660601625129812825">Udfyld Chrome-adgangskoder automatisk</translation>
+<translation id="4695654165345019650">Adgang til adgangskoder…</translation>
 <translation id="5313485577007399362">Aktivér autofyld...</translation>
 <translation id="6494101196118320406">Ingen Chrome-adgangskoder</translation>
+<translation id="6846906712230932330">Før du kan bruge adgangskoder, skal du angive en adgangskode på din enhed.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Ingen Chrome-adgangskoder</translation>
+<translation id="8602573493531049509">Se, hvordan du gør</translation>
 <translation id="9087836967653912639">Annuller</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_el.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_el.xtb
index 6df133a..5c57e0fb 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_el.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_el.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="el">
+<translation id="1211920912879022906">Κατά την πρόσφατη αποσύνδεσή σας από τον Λογαριασμό σας Google, καταργήθηκαν οι συγχρονισμένοι κωδικοί πρόσβασης. Συνδεθείτε στο Chrome και ενεργοποιήστε τον συγχρονισμό για να εμφανιστούν εδώ.</translation>
+<translation id="2488806977964805203">Ορισμός κωδικού πρόσβασης</translation>
+<translation id="2492201814011227831">Αποθηκεύστε ορισμένους κωδικούς πρόσβασης στο Chrome για να ξεκινήσετε. Εάν έχετε αποθηκεύσει ήδη κωδικούς πρόσβασης στον Λογαριασμό σας Google, συνδεθείτε στο Chrome και ενεργοποιήστε τον συγχρονισμό για να εμφανιστούν εδώ.</translation>
 <translation id="3378542047369517508">Αποκτήστε πρόσβαση σε όλους τους κωδικούς πρόσβασης που αποθηκεύετε στο Chrome. Σε οποιαδήποτε εφαρμογή ανά πάσα στιγμή.</translation>
 <translation id="3660601625129812825">Κωδικοί πρόσβασης αυτόματης συμπλήρωσης Chrome</translation>
+<translation id="4695654165345019650">Πρόσβαση σε κωδικούς πρόσβασης…</translation>
 <translation id="5313485577007399362">Ενεργοποίηση Αυτόματης συμπλήρωσης…</translation>
 <translation id="6494101196118320406">Δεν υπάρχουν κωδικοί πρόσβασης Chrome</translation>
+<translation id="6846906712230932330">Για να χρησιμοποιήσετε κωδικούς πρόσβασης, θα πρέπει πρώτα να ορίσετε έναν κωδικό πρόσβασης στη συσκευή σας.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Δεν υπάρχουν κωδικοί πρόσβασης Chrome</translation>
+<translation id="8602573493531049509">Μάθετε πώς</translation>
 <translation id="9087836967653912639">Ακύρωση</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb
index 5aabc182..1163de0 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="et">
+<translation id="1211920912879022906">Logisite hiljuti oma Google'i kontolt välja ja teie sünkroonitud paroolid eemaldati. Logige Chrome'i sisse ja lülitage sünkroonimine nende siin nägemiseks sisse.</translation>
+<translation id="2488806977964805203">Pääsukoodi seadistamine</translation>
+<translation id="2492201814011227831">Alustamiseks salvestage mõned paroolid Chrome'i. Kui olete paroolid juba oma Google'i kontole salvestanud, logige Chrome'i sisse ja lülitage sünkroonimine nende siin nägemiseks sisse.</translation>
 <translation id="3378542047369517508">Hankige juurdepääs kõigile paroolidele, mille Chrome'is salvestate. Igas rakenduses, igal ajal.</translation>
 <translation id="3660601625129812825">Chrome'i paroolide automaatne täitmine</translation>
+<translation id="4695654165345019650">Juurdepääs paroolidele …</translation>
 <translation id="5313485577007399362">Automaatse täitmise lubamine …</translation>
 <translation id="6494101196118320406">Chrome'i paroole pole</translation>
+<translation id="6846906712230932330">Paroolide kasutamiseks peate oma seadmes esmalt pääsukoodi seadistama.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Chrome'i paroole pole</translation>
+<translation id="8602573493531049509">Juhised</translation>
 <translation id="9087836967653912639">Tühista</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb
index 8beaa8c..a3f6d292 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="fi">
+<translation id="1211920912879022906">Kirjauduit äskettäin ulos Google-tililtäsi, ja synkronoidut salasanasi poistettiin. Kirjaudu Chromeen ja laita synkronointi päälle, niin näet salasanat tässä.</translation>
+<translation id="2488806977964805203">Aseta tunnuskoodi</translation>
+<translation id="2492201814011227831">Aloita tallentamalla salasanoja Chromeen. Jos olet jo tallentanut salasanoja Google-tilillesi, kirjaudu Chromeen ja laita synkronointi päälle, niin näet ne tässä.</translation>
 <translation id="3378542047369517508">Saat kaikki Chromessa tallentamasi salasanat käyttöön. Kaikissa sovelluksissa. Milloin tahansa.</translation>
 <translation id="3660601625129812825">Chromen automaattisen täytön salasanat</translation>
+<translation id="4695654165345019650">Käytä salasanoja…</translation>
 <translation id="5313485577007399362">Ota automaattinen täyttö käyttöön…</translation>
 <translation id="6494101196118320406">Ei Chrome-salasanoja</translation>
+<translation id="6846906712230932330">Salasanojen käyttöä varten sinun on ensin asetettava laitteellesi tunnuskoodi.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Ei Chrome-salasanoja</translation>
+<translation id="8602573493531049509">Lisätietoja</translation>
 <translation id="9087836967653912639">Peruuta</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb
index 986f549..742bfdc 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="fr-CA">
+<translation id="1211920912879022906">Vous vous êtes récemment déconnecté de votre compte Google, ce qui a entraîné la suppression de vos mots de passe synchronisés. Connectez-vous à Chrome et activez la synchronisation pour les afficher ici.</translation>
+<translation id="2488806977964805203">Définir un mot de passe</translation>
+<translation id="2492201814011227831">Enregistrez quelques mots de passe dans Chrome pour commencer. Si vous avez déjà stocké des mots de passe dans votre compte Google, connectez-vous à Chrome et activez la synchronisation pour les afficher ici.</translation>
 <translation id="3378542047369517508">Obtenez l'accès à tous les mots de passe que vous enregistrez dans Chrome. Dans toutes les applications. En tout temps.</translation>
 <translation id="3660601625129812825">Remplir automatiquement les mots de passe de Chrome</translation>
+<translation id="4695654165345019650">Accès aux mots de passe en cours…</translation>
 <translation id="5313485577007399362">Activer le remplissage automatique</translation>
 <translation id="6494101196118320406">Aucun mot de passe Chrome</translation>
+<translation id="6846906712230932330">Pour utiliser vos mots de passe, vous devez d'abord définir un mot de passe sur votre appareil.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Aucun mot de passe Chrome</translation>
+<translation id="8602573493531049509">Découvrir comment</translation>
 <translation id="9087836967653912639">Annuler</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gu.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gu.xtb
index 80bbca4..798d0f9 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gu.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gu.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="gu">
+<translation id="1211920912879022906">તમે તાજેતરમાં તમારા Google એકાઉન્ટમાંથી સાઇન આઉટ થયા હતા, જેને કારણે તમારા સિંક કરેલા પાસવર્ડ કાઢી નાખવામાં આવ્યા છે. Chromeમાં સાઇન ઇન કરો અને તેને અહીં જોવા માટે સિંકની સુવિધા ચાલુ કરો.</translation>
+<translation id="2488806977964805203">પાસકોડ સેટ કરો</translation>
+<translation id="2492201814011227831">શરૂ કરવા માટે, Chromeમાં થોડા પાસવર્ડ સાચવો. જો તમે પહેલેથી તમારા Google એકાઉન્ટમાં પાસવર્ડ સ્ટોર કર્યા હોય, તો Chromeમાં સાઇન ઇન કરો અને તેને અહીં જોવા માટે સિંકની સુવિધા ચાલુ કરો.</translation>
 <translation id="3378542047369517508">તમે Chromeમાં સાચવો તે બધા પાસવર્ડનો ઍક્સેસ મેળવો. કોઈપણ ઍપમાં. કોઈપણ સમયે.</translation>
 <translation id="3660601625129812825">Chromeના પાસવર્ડ ઑટોમૅટિક રીતે ભરાય</translation>
+<translation id="4695654165345019650">ઍક્સેસ માટેના પાસવર્ડ...</translation>
 <translation id="5313485577007399362">ઑટોમૅટિક રીતે ભરાવાનું ચાલુ કરો…</translation>
 <translation id="6494101196118320406">Chromeમાં કોઈ પાસવર્ડ નથી</translation>
+<translation id="6846906712230932330">પાસવર્ડનો ઉપયોગ કરવા માટે, તમારે પહેલાં તમારા ડિવાઇસ પર પાસકોડ સેટ કરવો આવશ્યક છે.</translation>
 <translation id="6965382102122355670">બરાબર, સમજાઇ ગયું</translation>
 <translation id="7870350829250847712">Chromeમાં કોઈ પાસવર્ડ નથી</translation>
+<translation id="8602573493531049509">જાણો કેવી રીતે</translation>
 <translation id="9087836967653912639">રદ કરો</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hr.xtb
index 7d606d50..176e9b8 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hr.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hr.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="hr">
+<translation id="1211920912879022906">Nedavno ste se odjavili sa svojeg Google računa, čime su uklonjene vaše sinkronizirane zaporke. Prijavite se u Chrome i uključite sinkronizaciju kako biste ih tamo vidjeli.</translation>
+<translation id="2488806977964805203">Postavite šifru zaporke</translation>
+<translation id="2492201814011227831">Spremite neke zaporke u Chromeu kako biste počeli. Ako na svojem Google računu već imate spremljene zaporke, prijavite se u Chrome i uključite sinkronizaciju kako biste ih vidjeli tamo.</translation>
 <translation id="3378542047369517508">Pristupajte svim zaporkama koje spremate u Chromeu. U bilo kojoj aplikaciji. U bilo kojem trenutku.</translation>
 <translation id="3660601625129812825">Automatsko popunjavanje zaporki u Chromeu</translation>
+<translation id="4695654165345019650">Pristupite zaporkama…</translation>
 <translation id="5313485577007399362">Omogući automatsko popunjavanje...</translation>
 <translation id="6494101196118320406">Nema zaporki za Chrome</translation>
+<translation id="6846906712230932330">Da biste koristili zaporke, najprije morate postaviti šifru na uređaju.</translation>
 <translation id="6965382102122355670">U redu</translation>
 <translation id="7870350829250847712">Nema zaporki za Chrome</translation>
+<translation id="8602573493531049509">Saznajte kako</translation>
 <translation id="9087836967653912639">Otkaži</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hy.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hy.xtb
index 7c1a4a9..0b52df8 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hy.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hy.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="hy">
+<translation id="1211920912879022906">Դուք վերջերս դուրս եք եկել ձեր Google հաշվից, ինչի արդյունքում ձեր համաժամացված գաղտնաբառերը հեռացվել են։ Մուտք գործեք Chrome և միացրեք համաժամացումը՝ դրանք այստեղ տեսնելու համար։</translation>
+<translation id="2488806977964805203">Սահմանեք անցակոդ</translation>
+<translation id="2492201814011227831">Սկսելու համար Chrome-ում մի քանի գաղտնաբառ պահեք։ Եթե ձեր Google հաշվում արդեն պահած գաղտնաբառեր ունեք, մուտք գործեք Chrome և միացրեք համաժամացումը՝ դրանք այստեղ տեսնելու համար։</translation>
 <translation id="3378542047369517508">Դուք կկարողանաք օգտագործել Chrome-ում պահված բոլոր գաղտնաբառերը՝ ցանկացած ժամանակ, ցանկացած հավելվածում։</translation>
 <translation id="3660601625129812825">Chrome-ի գաղտնաբառերի ինքնալրացում</translation>
+<translation id="4695654165345019650">Հասանելիություն գաղտնաբառերին...</translation>
 <translation id="5313485577007399362">Միացնել ինքնալրացնումը</translation>
 <translation id="6494101196118320406">Chrome-ի գաղտնաբառեր չկան</translation>
+<translation id="6846906712230932330">Գաղտնաբառերն օգտագործելու համար ձեր սարքում նախ պետք է անցակոդ սահմանեք։</translation>
 <translation id="6965382102122355670">Եղավ</translation>
 <translation id="7870350829250847712">Chrome-ի գաղտնաբառեր չկան</translation>
+<translation id="8602573493531049509">Իմանալ ավելին</translation>
 <translation id="9087836967653912639">Չեղարկել</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_it.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_it.xtb
index 581d32a..1ac2b93 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_it.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_it.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="it">
+<translation id="1211920912879022906">Di recente hai scollegato il tuo Account Google, pertanto sono state rimosse le tue password sincronizzate. Accedi a Chrome e attiva la sincronizzazione per vederle nel browser.</translation>
+<translation id="2488806977964805203">Imposta un passcode</translation>
+<translation id="2492201814011227831">Per iniziare, salva alcune password in Chrome. Se hai già memorizzato delle password nel tuo Account Google, accedi a Chrome e attiva la sincronizzazione per vederle nel browser.</translation>
 <translation id="3378542047369517508">Accedi a tutte le password che salvi in Chrome, in qualsiasi app e in qualsiasi momento.</translation>
 <translation id="3660601625129812825">Usa Riempimento automatico per password di Chrome</translation>
+<translation id="4695654165345019650">Accesso password…</translation>
 <translation id="5313485577007399362">Attiva Riempimento automatico…</translation>
 <translation id="6494101196118320406">Nessuna password di Chrome</translation>
+<translation id="6846906712230932330">Per utilizzare le password, devi innanzitutto impostare un passcode sul dispositivo.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Nessuna password di Chrome</translation>
+<translation id="8602573493531049509">Ulteriori informazioni</translation>
 <translation id="9087836967653912639">Annulla</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb
index 9b6d04bf..003389f 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="iw">
+<translation id="1211920912879022906">‏לאחרונה יצאת מחשבון Google. פעולה זו הסירה את הסיסמאות המסונכרנות שלך. כדי להציג את הסיסמאות כאן, עליך להיכנס אל Chrome ולהפעיל את הסנכרון.</translation>
+<translation id="2488806977964805203">עליך להגדיר קוד גישה</translation>
+<translation id="2492201814011227831">‏כדי להתחיל, צריך לשמור מספר סיסמאות ב-Chrome. אם כבר שמרת סיסמאות בחשבון Google שלך, עליך להיכנס אל Chrome ולהפעיל את הסנכרון כדי להציג אותן כאן.</translation>
 <translation id="3378542047369517508">‏גישה לכל הסיסמאות ששמרת ב-Chrome. בכל האפליקציות, ללא הגבלה.</translation>
 <translation id="3660601625129812825">‏מילוי אוטומטי של סיסמאות ב-Chrome</translation>
+<translation id="4695654165345019650">גישה לסיסמאות...</translation>
 <translation id="5313485577007399362">הפעלת המילוי האוטומטי…</translation>
 <translation id="6494101196118320406">‏אין סיסמאות של Chrome</translation>
+<translation id="6846906712230932330">כדי שניתן יהיה להשתמש בסיסמאות, יש להגדיר קוד גישה במכשיר.</translation>
 <translation id="6965382102122355670">אישור</translation>
 <translation id="7870350829250847712">‏אין סיסמאות של Chrome</translation>
+<translation id="8602573493531049509">איך עושים זאת?</translation>
 <translation id="9087836967653912639">ביטול</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lo.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lo.xtb
index 99b5170..c6181444 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lo.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lo.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="lo">
+<translation id="1211920912879022906">ທ່ານໄດ້ອອກຈາກລະບົບບັນຊີ Google ຂອງທ່ານເມື່ອບໍ່ດົນນີ້, ເຊິ່ງໄດ້ລຶບລະຫັດຜ່ານທີ່ຊິ້ງຂໍ້ມູນຂອງທ່ານອອກແລ້ວ. ເຂົ້າສູ່ລະບົບ Chrome ແລະ ເປີດການຊິ້ງຂໍ້ມູນເພື່ອເຫັນພວກມັນຢູ່ບ່ອນນີ້.</translation>
+<translation id="2488806977964805203">ຕັ້ງຄ່າລະຫັດຜ່ານ</translation>
+<translation id="2492201814011227831">ບັນທຶກບາງລະຫັດຜ່ານໄວ້ໃນ Chrome ເພື່ອເລີ່ມຕົ້ນ. ຖ້າທ່ານມີລະຫັດຜ່ານທີ່ເກັບໄວ້ໃນບັນຊີ Google ຂອງທ່ານ, ກະລຸນາເຂົ້າສູ່ລະບົບ Chrome ແລ້ວເປີດການຊິ້ງຂໍ້ມູນເພື່ອເຫັນພວກມັນຢູ່ບ່ອນນີ້.</translation>
 <translation id="3378542047369517508">ຮັບສິດເຂົ້າເຖິງລະຫັດຜ່ານທັງໝົດທີ່ທ່ານບັນທຶກໄວ້ໃນ Chrome. ໃນແອັບໃດໆກໍໄດ້. ໃນທຸກເວລາ.</translation>
 <translation id="3660601625129812825">ລະຫັດຜ່ານການຕື່ມຂໍ້ມູນອັດຕະໂນມັດໃນ Chrome</translation>
+<translation id="4695654165345019650">ເຂົ້າເຖິງລະຫັດຜ່ານ...</translation>
 <translation id="5313485577007399362">ເປີດການນຳໃຊ້ການຕື່ມຂໍ້ມູນອັດຕະໂນມັດ...</translation>
 <translation id="6494101196118320406">ບໍ່ມີລະຫັດຜ່ານ Chrome</translation>
+<translation id="6846906712230932330">ເພື່ອໃຊ້ລະຫັດຜ່ານ, ທ່ານຕ້ອງຕັ້ງລະຫັດຜ່ານໃນອຸປະກອນຂອງທ່ານກ່ອນ.</translation>
 <translation id="6965382102122355670">ຕົກລົງ</translation>
 <translation id="7870350829250847712">ບໍ່ມີລະຫັດຜ່ານ Chrome</translation>
+<translation id="8602573493531049509">ສຶກສາວິທີການ</translation>
 <translation id="9087836967653912639">ຍົກເລີກ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lt.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lt.xtb
index 6d9f3b1..83607c0 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lt.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lt.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="lt">
+<translation id="1211920912879022906">Neseniai atsijungėte nuo „Google“ paskyros, iš kurios pašalinti jūsų sinchronizuoti slaptažodžiai. Prisijunkite prie „Chrome“ ir įjunkite sinchronizavimą, kad galėtumėte juos peržiūrėti čia.</translation>
+<translation id="2488806977964805203">Slaptažodžio nustatymas</translation>
+<translation id="2492201814011227831">Išsaugokite kai kuriuos slaptažodžius naršyklėje „Chrome“, kad galėtumėte pradėti. Jei „Google“ paskyroje jau turite išsaugotų slaptažodžių, prisijunkite prie „Chrome“ ir įjunkite sinchronizavimą, kad galėtumėte juos peržiūrėti.</translation>
 <translation id="3378542047369517508">Gaukite prieigą prie visų naršyklėje „Chrome“ išsaugotų slaptažodžių. Bet kurioje programoje. Bet kuriuo metu.</translation>
 <translation id="3660601625129812825">Automatinis „Chrome“ slaptažodžių pildymas</translation>
+<translation id="4695654165345019650">Pasiekti slaptažodžius...</translation>
 <translation id="5313485577007399362">Įgalinti automatinį pildymą...</translation>
 <translation id="6494101196118320406">„Chrome“ slaptažodžių nėra</translation>
+<translation id="6846906712230932330">Jei norite naudoti slaptažodžius, pirmiausia turite nustatyti įrenginio slaptažodį.</translation>
 <translation id="6965382102122355670">Gerai</translation>
 <translation id="7870350829250847712">„Chrome“ slaptažodžių nėra</translation>
+<translation id="8602573493531049509">Sužinoti, kaip tai padaryti</translation>
 <translation id="9087836967653912639">Atšaukti</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb
index e112e21..23851b8 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_lv.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="lv">
+<translation id="1211920912879022906">Nesen jūs izrakstījāties no sava Google konta un tādējādi noņēmāt sinhronizētās paroles. Pierakstieties pārlūkprogrammā Chrome un ieslēdziet sinhronizāciju, lai skatītu paroles šeit.</translation>
+<translation id="2488806977964805203">Piekļuves koda iestatīšana</translation>
+<translation id="2492201814011227831">Lai sāktu darbu, saglabājiet dažas paroles pārlūkprogrammā Chrome. Ja esat jau saglabājis paroles savā Google kontā, pierakstieties pārlūkprogrammā Chrome un ieslēdziet sinhronizāciju, lai skatītu paroles šeit.</translation>
 <translation id="3378542047369517508">Varēsiet jebkurā laikā piekļūt visām savām pārlūkā Chrome saglabātajām parolēm jebkurā lietotnē.</translation>
 <translation id="3660601625129812825">Chrome paroļu automātiskā aizpilde</translation>
+<translation id="4695654165345019650">Notiek piekļūšana parolēm...</translation>
 <translation id="5313485577007399362">Iespējot automātisko aizpildi...</translation>
 <translation id="6494101196118320406">Nav Chrome paroļu</translation>
+<translation id="6846906712230932330">Lai izmantotu paroles, vispirms ierīcei ir jāiestata piekļuves kods.</translation>
 <translation id="6965382102122355670">Labi</translation>
 <translation id="7870350829250847712">Nav Chrome paroļu</translation>
+<translation id="8602573493531049509">Uzzināt, kā to izdarīt</translation>
 <translation id="9087836967653912639">Atcelt</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mk.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mk.xtb
index 7bcd500c..36a9faea 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mk.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mk.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="mk">
+<translation id="1211920912879022906">Неодамна се одјавивте од вашата сметка на Google, а тоа ги отстрани вашите синхронизирани лозинки. Најавете се на Chrome и вклучете синхронизација за да ги видите тука.</translation>
+<translation id="2488806977964805203">Поставете лозинка</translation>
+<translation id="2492201814011227831">Зачувајте некои лозинки во Chrome за да започнете. Ако веќе имате лозинки складирани во сметката на Google, најавете се на Chrome и вклучете синхронизација за да ги видите тука.</translation>
 <translation id="3378542047369517508">Добијте пристап до сите лозинки што ги зачувувате во Chrome. Во секоја апликација. Во секое време.</translation>
 <translation id="3660601625129812825">Автоматско пополнување лозинки на Chrome</translation>
+<translation id="4695654165345019650">Пристап до лозинките…</translation>
 <translation id="5313485577007399362">Овозможи автоматско пополнување…</translation>
 <translation id="6494101196118320406">Нема лозинки за Chrome</translation>
+<translation id="6846906712230932330">За да ги користите лозинките, прво мора да поставите лозинка на вашиот уред.</translation>
 <translation id="6965382102122355670">Во ред</translation>
 <translation id="7870350829250847712">Нема лозинки за Chrome</translation>
+<translation id="8602573493531049509">Дознајте како</translation>
 <translation id="9087836967653912639">Откажи</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ml.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ml.xtb
index bee52b8..b062915 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ml.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ml.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ml">
+<translation id="1211920912879022906">സമന്വയിപ്പിച്ച പാസ്‌വേഡുകൾ നീക്കം ചെയ്‌ത Google അക്കൗണ്ടിൽ നിന്ന് നിങ്ങൾ അടുത്തിടെ സൈൻ ഔട്ട് ചെയ്‌തു. Chrome-ലേക്ക് സൈൻ ഇൻ ചെയ്‌ത് അവ ഇവിടെ കാണാൻ സമന്വയിപ്പിക്കൽ ഓണാക്കുക.</translation>
+<translation id="2488806977964805203">പാസ്‌കോഡ് സജ്ജീകരിക്കുക</translation>
+<translation id="2492201814011227831">ആരംഭിക്കുന്നതിന് Chrome-ൽ ചില പാസ്‌വേഡുകൾ സംരക്ഷിക്കുക. നിങ്ങളുടെ Google അക്കൗണ്ടിൽ നിലവിൽ പാസ്‌വേഡുകൾ‌ സംഭരിച്ചിട്ടുണ്ടെങ്കിൽ‌, Chrome-ലേക്ക് സൈൻ ഇൻ ചെയ്‌ത് അവ ഇവിടെ കാണാൻ സമന്വയിപ്പിക്കൽ ഓണാക്കുക.</translation>
 <translation id="3378542047369517508">നിങ്ങൾ Chrome-ൽ സംരക്ഷിക്കുന്ന എല്ലാ പാസ്‌വേഡുകളിലേക്കും ആക്‌സസ് നേടുക. ഏത് ആപ്പിലും. ഏതുസമയത്തും.</translation>
 <translation id="3660601625129812825">Chrome പാസ്‌വേഡുകൾ സ്വയമേവ പൂരിപ്പിക്കൽ</translation>
+<translation id="4695654165345019650">പാസ്‌വേഡുകൾ ആക്‌സസ് ചെയ്യുക...</translation>
 <translation id="5313485577007399362">സ്വയമേവ പൂരിപ്പിക്കൽ പ്രവർത്തനക്ഷമമാക്കുക...</translation>
 <translation id="6494101196118320406">Chrome പാസ്‌വേഡുകളൊന്നുമില്ല</translation>
+<translation id="6846906712230932330">പാസ്‍വേഡുകൾ ഉപയോഗിക്കാൻ, ആദ്യം നിങ്ങളുടെ ഉപകരണത്തിൽ പാസ്‌കോഡ് സജ്ജീകരിക്കുക.</translation>
 <translation id="6965382102122355670">ശരി</translation>
 <translation id="7870350829250847712">Chrome പാസ്‌വേഡുകളൊന്നുമില്ല</translation>
+<translation id="8602573493531049509">എങ്ങനെയെന്നറിയുക</translation>
 <translation id="9087836967653912639">റദ്ദാക്കുക</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb
index b5925f9..df1b50c 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ms">
+<translation id="1211920912879022906">Baru-baru ini anda telah log keluar daripada Akaun Google anda dan itu telah menyebabkan kata laluan anda yang disegerakkan dialih keluar. Log masuk ke Chrome dan hidupkan penyegerakan untuk melihat kata laluan anda di sini.</translation>
+<translation id="2488806977964805203">Tetapkan Kod Laluan</translation>
+<translation id="2492201814011227831">Simpan beberapa kata laluan dalam Chrome untuk bermula. Jika anda sudah menyimpan kata laluan dalam Akaun Google anda, log masuk ke Chrome dan hidupkan penyegerakan untuk melihat kata laluan tersebut di sini.</translation>
 <translation id="3378542047369517508">Dapatkan akses kepada semua kata laluan yang anda simpan dalam Chrome. Dalam mana-mana apl. Pada bila-bila masa.</translation>
 <translation id="3660601625129812825">Autolengkap Kata Laluan Chrome</translation>
+<translation id="4695654165345019650">Akses Kata Laluan...</translation>
 <translation id="5313485577007399362">Dayakan Autolengkap...</translation>
 <translation id="6494101196118320406">Tiada Kata Laluan Chrome</translation>
+<translation id="6846906712230932330">Untuk menggunakan kata laluan, anda mesti menetapkan kod laluan pada peranti anda dahulu.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Tiada Kata Laluan Chrome</translation>
+<translation id="8602573493531049509">Ketahui Caranya</translation>
 <translation id="9087836967653912639">Batal</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_my.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_my.xtb
index 1c2e8eb..f79ca7a 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_my.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_my.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="my">
+<translation id="1211920912879022906">သင့် Google Account မှ လတ်တလော ထွက်ထားပါသည်၊ ၎င်းက သင်စင့်ခ်လုပ်ထားသော စကားဝှက်များကို ဖယ်ရှားလိုက်သည်။ ၎င်းတို့ကို ဤနေရာတွင်မြင်ရရန် Chrome သို့ လက်မှတ်ထိုးဝင်ပြီး စင့်ခ်လုပ်ခြင်းကို ဖွင့်ပါ။</translation>
+<translation id="2488806977964805203">လျှို့ဝှက်ကုဒ်တစ်ခု သတ်မှတ်ခြင်း</translation>
+<translation id="2492201814011227831">စတင်ရန်အတွက် Chrome တွင် စကားဝှက်အချို့ကို သိမ်းပါ။ သင့် Google Account တွင် စကားဝှက်များ သိမ်းပြီးပါက ၎င်းတို့ကို ဤနေရာတွင်မြင်ရရန် Chrome သို့ လက်မှတ်ထိုးဝင်ပြီး စင့်ခ်လုပ်ခြင်းကို ဖွင့်ပါ။</translation>
 <translation id="3378542047369517508">Chrome တွင် သင်သိမ်းထားသော စကားဝှက်အားလုံးကို ကြည့်ခွင့်ရယူပါ။ နှစ်သက်ရာအက်ပ်တွင်။ အချိန်မရွေး။</translation>
 <translation id="3660601625129812825">Chrome စကားဝှက်များ အော်တိုဖြည့်ခြင်း</translation>
+<translation id="4695654165345019650">စကားဝှက်များ သုံးရန်...</translation>
 <translation id="5313485577007399362">အော်တိုဖြည့် ဖွင့်ရန်...</translation>
 <translation id="6494101196118320406">Chrome စကားဝှက်များ မရှိပါ</translation>
+<translation id="6846906712230932330">စကားဝှက်များသုံးရန် သင့်စက်တွင် လျှို့ဝှက်ကုဒ်တစ်ခုကို ဦးစွာ သတ်မှတ်ရပါမည်။</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Chrome စကားဝှက်များ မရှိပါ</translation>
+<translation id="8602573493531049509">လုပ်ဆောင်ပုံ လေ့လာရန်</translation>
 <translation id="9087836967653912639">ပယ်ရန်</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb
index 3879227..790d3a0e 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_nl.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="nl">
+<translation id="1211920912879022906">Je bent onlangs uitgelogd van je Google-account. Hierdoor zijn je gesynchroniseerde wachtwoorden verwijderd. Log in bij Chrome en schakel synchronisatie in om de wachtwoorden hier weer te geven.</translation>
+<translation id="2488806977964805203">Een toegangscode instellen</translation>
+<translation id="2492201814011227831">Sla eerst een aantal wachtwoorden op in Chrome. Als je al wachtwoorden hebt opgeslagen in je Google-account, log je in bij Chrome en schakel je synchronisatie in om de wachtwoorden hier weer te geven.</translation>
 <translation id="3378542047369517508">Krijg toegang tot alle wachtwoorden die je in Chrome hebt opgeslagen, in elke app en op elk moment.</translation>
 <translation id="3660601625129812825">Chrome-wachtwoorden automatisch aanvullen</translation>
+<translation id="4695654165345019650">Toegang krijgen tot wachtwoorden...</translation>
 <translation id="5313485577007399362">Automatisch aanvullen inschakelen…</translation>
 <translation id="6494101196118320406">Geen Chrome-wachtwoorden</translation>
+<translation id="6846906712230932330">Als je wachtwoorden wilt exporteren, moet je eerst een toegangscode instellen op je apparaat.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Geen Chrome-wachtwoorden</translation>
+<translation id="8602573493531049509">Meer informatie</translation>
 <translation id="9087836967653912639">Annuleren</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb
index 93283834..acdf88ff 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_no.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="no">
+<translation id="1211920912879022906">Du har nylig logget av Google-kontoen din, så de synkroniserte passordene dine er fjernet. Logg på Chrome og slå på synkronisering for å se dem her.</translation>
+<translation id="2488806977964805203">Angi en adgangskode</translation>
+<translation id="2492201814011227831">Lagre noen passord i Chrome for å komme i gang. Hvis du allerede har lagrede passord i Google-kontoen din, logger du på Chrome og slår på synkronisering for å se dem her.</translation>
 <translation id="3378542047369517508">Få tilgang til alle passordene du lagrer i Chrome. I alle apper. Når som helst.</translation>
 <translation id="3660601625129812825">Autofyll Chrome-passord</translation>
+<translation id="4695654165345019650">Få tilgang til passord</translation>
 <translation id="5313485577007399362">Aktiver Autofyll</translation>
 <translation id="6494101196118320406">Ingen Chrome-passord</translation>
+<translation id="6846906712230932330">For å bruke passordene må du først angi en adgangskode på enheten din.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Ingen Chrome-passord</translation>
+<translation id="8602573493531049509">Finn ut hvordan</translation>
 <translation id="9087836967653912639">Avbryt</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb
index 847ad07..f9b0f6a 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="pl">
+<translation id="1211920912879022906">Niedawno nastąpiło wylogowanie z konta Google, dlatego Twoje zsynchronizowane hasła zostały usunięte. Aby je tu zobaczyć, zaloguj się w Chrome i włącz synchronizację.</translation>
+<translation id="2488806977964805203">Ustaw kod dostępu</translation>
+<translation id="2492201814011227831">Na początek zapisz w Chrome jakieś hasła. Jeśli masz już zapisane hasła na koncie Google, zaloguj się w Chrome i włącz synchronizację, by je tu zobaczyć.</translation>
 <translation id="3378542047369517508">Korzystaj ze wszystkich haseł zapisanych w Chrome – w dowolnej aplikacji i w dowolnym momencie.</translation>
 <translation id="3660601625129812825">Wypełniaj hasła w Chrome</translation>
+<translation id="4695654165345019650">Dostęp do haseł…</translation>
 <translation id="5313485577007399362">Włącz Wypełnianie…</translation>
 <translation id="6494101196118320406">Brak haseł w Chrome</translation>
+<translation id="6846906712230932330">Aby użyć haseł, musisz najpierw ustawić kod dostępu na urządzeniu.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Brak haseł w Chrome</translation>
+<translation id="8602573493531049509">Instrukcje</translation>
 <translation id="9087836967653912639">Anuluj</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb
index 835d9da..7b9d627 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-BR">
+<translation id="1211920912879022906">Você saiu da Conta do Google recentemente. Por isso, suas senhas sincronizadas foram removidas. Faça login no Chrome e ative a sincronização para vê-las aqui.</translation>
+<translation id="2488806977964805203">Defina uma senha</translation>
+<translation id="2492201814011227831">Salve algumas senhas no Chrome para começar. Se você já tem senhas armazenadas na Conta do Google, faça login no Chrome e ative a sincronização para vê-las aqui.</translation>
 <translation id="3378542047369517508">Tenha acesso a todas as senhas que você salvou no Chrome. Em qualquer app, sempre que quiser.</translation>
 <translation id="3660601625129812825">Preenchimento automático de senhas do Chrome</translation>
+<translation id="4695654165345019650">Acessar senhas…</translation>
 <translation id="5313485577007399362">Ativar o preenchimento automático…</translation>
 <translation id="6494101196118320406">Não há nenhuma senha no Chrome</translation>
+<translation id="6846906712230932330">Para usar senhas, defina uma no dispositivo primeiro.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Não há nenhuma senha no Chrome</translation>
+<translation id="8602573493531049509">Saiba como</translation>
 <translation id="9087836967653912639">Cancelar</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb
index 0c272ae..021ccd3 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ro">
+<translation id="1211920912879022906">Deoarece te-ai deconectat recent de la Contul Google, au fost eliminate parolele sincronizate. Conectează-te la Chrome și activează sincronizarea ca să le vezi aici.</translation>
+<translation id="2488806977964805203">Setează o parolă</translation>
+<translation id="2492201814011227831">Pentru început, salvează câteva parole în Chrome. Dacă ai stocat deja parole în Contul Google, conectează-te la Chrome și activează sincronizarea ca să le vezi aici.</translation>
 <translation id="3378542047369517508">Obține acces la toate parolele pe care le salvezi în Chrome. În orice aplicație. Oricând.</translation>
 <translation id="3660601625129812825">Completează automat parolele Chrome</translation>
+<translation id="4695654165345019650">Accesează parolele...</translation>
 <translation id="5313485577007399362">Activează completarea automată...</translation>
 <translation id="6494101196118320406">Nu există parole în Chrome</translation>
+<translation id="6846906712230932330">Pentru a folosi parolele, trebuie mai întâi să setezi o parolă pe dispozitiv.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Nu există parole în Chrome</translation>
+<translation id="8602573493531049509">Află cum</translation>
 <translation id="9087836967653912639">Anulează</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb
index d755fda..829190a 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sk">
+<translation id="1211920912879022906">Nedávno ste sa odhlásili zo svojho účtu Google, čím ste odstránili synchronizované heslá. Ak si ich tu chcete zobraziť, prihláste sa do Chromu a zapnite synchronizáciu.</translation>
+<translation id="2488806977964805203">Nastavenie vstupného kódu</translation>
+<translation id="2492201814011227831">Začnite uložením niekoľkých hesiel v Chrome. Ak už máte heslá uložené v účte Google, prihláste sa do Chromu a zapnite synchronizáciu, aby sa vám tu zobrazili.</translation>
 <translation id="3378542047369517508">Získajte prístup k všetkým heslám, ktoré ste si uložili v Chrome. V ľubovoľnej aplikácii a hocikedy.</translation>
 <translation id="3660601625129812825">Automatické dopĺňanie hesiel Chromu</translation>
+<translation id="4695654165345019650">Prístup k heslám…</translation>
 <translation id="5313485577007399362">Povoliť automatické dopĺňanie…</translation>
 <translation id="6494101196118320406">Žiadne heslá Chromu</translation>
+<translation id="6846906712230932330">Ak chcete používať heslá, najprv musíte v zariadení nastaviť vstupný kód.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Žiadne heslá Chromu</translation>
+<translation id="8602573493531049509">Postup</translation>
 <translation id="9087836967653912639">Zrušiť</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb
index fe2e4c93..4329ce9 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sl">
+<translation id="1211920912879022906">Nedavno ste se odjavili iz računa Google, s čimer so bila odstranjena sinhronizirana gesla. Prijavite se v Chrome, če želite vklopiti sinhronizacijo in si jih ogledati tam.</translation>
+<translation id="2488806977964805203">Nastavitev gesla</translation>
+<translation id="2492201814011227831">Shranite nekatera gesla v Chromu, če želite začeti. Če imate v računu Google že shranjena gesla, se prijavite v Chrome in vklopite sinhronizacijo, če si jih želite ogledati tam.</translation>
 <translation id="3378542047369517508">Imejte dostop do vseh gesel, ki jih shranite v Chromu. V kateri koli aplikaciji. Kadar koli.</translation>
 <translation id="3660601625129812825">Samodejno izpolnjevanje gesel v Chromu</translation>
+<translation id="4695654165345019650">Dostop do gesel …</translation>
 <translation id="5313485577007399362">Omogoči samodejno izpolnjevanje …</translation>
 <translation id="6494101196118320406">Ni gesel v Chromu</translation>
+<translation id="6846906712230932330">Če želite uporabiti gesla, morate najprej nastaviti geslo v napravi.</translation>
 <translation id="6965382102122355670">V redu</translation>
 <translation id="7870350829250847712">Ni gesel v Chromu</translation>
+<translation id="8602573493531049509">Več o tem</translation>
 <translation id="9087836967653912639">Prekliči</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb
index e964ccd..6a9f226 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sw">
+<translation id="1211920912879022906">Uliondoka kwenye Akaunti yako ya Google hivi majuzi, hatua ambayo iliondoa manenosiri yako yaliyosawazishwa. Ingia katika akaunti ya Chrome na uwashe usawazishaji ili uyaone hapa.</translation>
+<translation id="2488806977964805203">Weka Nambari ya Siri</translation>
+<translation id="2492201814011227831">Hifadhi baadhi ya manenosiri kwenye Chrome ili uanze. Iwapo tayari umehifadhi manenosiri kwenye Akaunti yako ya Google, ingia katika akaunti ya Chrome na uwashe kipengele cha kusawazisha ili uyaone hapa.</translation>
 <translation id="3378542047369517508">Pata uwezo wa kufikia manenosiri yote unayohifadhi kwenye Chrome. Kwenye programu yoyote. Wakati wowote.</translation>
 <translation id="3660601625129812825">Jaza Kiotomatiki Manenosiri ya Chrome</translation>
+<translation id="4695654165345019650">Fikia Manenosiri...</translation>
 <translation id="5313485577007399362">Washa Kipengele cha Kujaza Kiotomatiki...</translation>
 <translation id="6494101196118320406">Hamna Manenosiri ya Chrome</translation>
+<translation id="6846906712230932330">Ili utumie manenosiri, ni lazima kwanza uweke nambari ya siri kwenye kifaa chako.</translation>
 <translation id="6965382102122355670">Sawa</translation>
 <translation id="7870350829250847712">Hamna Manenosiri ya Chrome</translation>
+<translation id="8602573493531049509">Pata Maelezo Zaidi</translation>
 <translation id="9087836967653912639">Ghairi</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_th.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_th.xtb
index 374ea37..4bed8a9c 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_th.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_th.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="th">
+<translation id="1211920912879022906">คุณเพิ่งออกจากระบบบัญชี Google ระบบจึงนำรหัสผ่านที่ซิงค์ออก ลงชื่อเข้าใช้ Chrome แล้วเปิดการซิงค์เพื่อดูรหัสผ่านที่นี่</translation>
+<translation id="2488806977964805203">ตั้งรหัสผ่าน</translation>
+<translation id="2492201814011227831">บันทึกรหัสผ่านใน Chrome เพื่อเริ่มต้นใช้งาน หากคุณมีรหัสผ่านที่จัดเก็บไว้ในบัญชี Google อยู่แล้ว ให้ลงชื่อเข้าใช้ Chrome แล้วเปิดการซิงค์เพื่อดูรหัสผ่านที่นี่</translation>
 <translation id="3378542047369517508">เข้าถึงรหัสผ่านทั้งหมดที่คุณบันทึกไว้ใน Chrome ได้ทุกเมื่อจากทุกๆ แอป</translation>
 <translation id="3660601625129812825">ป้อนรหัสผ่านของ Chrome โดยอัตโนมัติ</translation>
+<translation id="4695654165345019650">เข้าถึงรหัสผ่าน...</translation>
 <translation id="5313485577007399362">เปิดใช้การป้อนข้อความอัตโนมัติ...</translation>
 <translation id="6494101196118320406">ไม่มีรหัสผ่านของ Chrome</translation>
+<translation id="6846906712230932330">หากต้องการใช้รหัสผ่าน คุณต้องตั้งรหัสผ่านในอุปกรณ์ก่อน</translation>
 <translation id="6965382102122355670">ตกลง</translation>
 <translation id="7870350829250847712">ไม่มีรหัสผ่านของ Chrome</translation>
+<translation id="8602573493531049509">ดูวิธี</translation>
 <translation id="9087836967653912639">ยกเลิก</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb
index 2e117ba..3a3c4a24 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="uk">
+<translation id="1211920912879022906">Нещодавно ви вийшли з облікового запису Google, через що ваші синхронізовані паролі було видалено. Увійдіть у Chrome і ввімкніть синхронізацію, щоб бачити їх тут.</translation>
+<translation id="2488806977964805203">Налаштуйте код доступу</translation>
+<translation id="2492201814011227831">Щоб почати, збережіть кілька паролів у Chrome. Якщо ви вже зберігаєте паролі в обліковому записі Google, увійдіть у Chrome і ввімкніть синхронізацію, щоб побачити їх тут.</translation>
 <translation id="3378542047369517508">Доступ до всіх паролів, які ви зберегли в Chrome. У будь-якому додатку. Будь-коли.</translation>
 <translation id="3660601625129812825">Aвтоматично заповнювати паролі в Chrome</translation>
+<translation id="4695654165345019650">Паролі доступу…</translation>
 <translation id="5313485577007399362">Увімкнути автозаповнення…</translation>
 <translation id="6494101196118320406">Немає паролів Chrome</translation>
+<translation id="6846906712230932330">Щоб використовувати паролі, спершу потрібно налаштувати код доступу на пристрої.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Немає паролів Chrome</translation>
+<translation id="8602573493531049509">Докладніше</translation>
 <translation id="9087836967653912639">Скасувати</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-CN.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-CN.xtb
index 576906c7..e909d780 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-CN.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-CN.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-CN">
+<translation id="1211920912879022906">您最近退出过自己的 Google 帐号,导致系统移除了您的已同步密码。您只需登录 Chrome 并开启同步功能,便可在此处看到那些密码。</translation>
+<translation id="2488806977964805203">设置密码</translation>
+<translation id="2492201814011227831">您需要在 Chrome 中保存一些密码,才能开始使用。如果您已将一些密码存储到自己的 Google 帐号中,请登录 Chrome 并开启同步功能,然后您便可在此处看到那些密码了。</translation>
 <translation id="3378542047369517508">获取您在 Chrome 中保存的所有密码。不限应用。不限时间。</translation>
 <translation id="3660601625129812825">自动填充 Chrome 中存储的密码</translation>
+<translation id="4695654165345019650">获取密码…</translation>
 <translation id="5313485577007399362">启用自动填充…</translation>
 <translation id="6494101196118320406">您未在 Chrome 中存储任何密码</translation>
+<translation id="6846906712230932330">要使用密码,您必须先在设备上设置密码。</translation>
 <translation id="6965382102122355670">确定</translation>
 <translation id="7870350829250847712">您未在 Chrome 中存储任何密码</translation>
+<translation id="8602573493531049509">了解如何操作</translation>
 <translation id="9087836967653912639">取消</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zu.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zu.xtb
index e6a2a19..33516b2 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zu.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zu.xtb
@@ -1,11 +1,17 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="zu">
+<translation id="1211920912879022906">Usanda kuphuma ngemvume ku-akhawunti yakho ye-Google, okususe amaphasiwedi akho avunyelanisiwe. Ngena ngemvume ku-Chrome bese uvula ukuvumelanisa ukuwabona lapha.</translation>
+<translation id="2488806977964805203">Setha ikhodi yokudlula</translation>
+<translation id="2492201814011227831">Londoloza amanye amaphasiwedi ku-Chrome ukuqalisa. Uma usunawo kakade amaphasiwedi agcinwe ku-akhawunti yakho ye-Google, ngena ngemvume ku-Chrome bese uvula ukuvumelanisa ukuwabona lapha.</translation>
 <translation id="3378542047369517508">Thola ukufinyelela kuwo wonke amaphasiwedi owalondoloze ku-Chrome. Kunoma iluphi uhlelo lokusebenza. Noma kunini.</translation>
 <translation id="3660601625129812825">Gcwalisa Ngokuzenzakalela Amaphasiwedi e-Chrome</translation>
+<translation id="4695654165345019650">Finyelela kumaphasiwedi...</translation>
 <translation id="5313485577007399362">Nika amandla Ukugcwalisa Ngokuzenzakalela...</translation>
 <translation id="6494101196118320406">Awekho amaphasiwedi we-Chrome</translation>
+<translation id="6846906712230932330">Ukuze usebenzise amaphasiwedi, kuzomele uqale usethe ikhodi yokudlula kudivayisi yakho.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7870350829250847712">Awekho amaphasiwedi we-Chrome</translation>
+<translation id="8602573493531049509">Funda ukuthi kanjani</translation>
 <translation id="9087836967653912639">Khansela</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/test/earl_grey/BUILD.gn b/ios/chrome/test/earl_grey/BUILD.gn
index d2cfff5..c87f2f4 100644
--- a/ios/chrome/test/earl_grey/BUILD.gn
+++ b/ios/chrome/test/earl_grey/BUILD.gn
@@ -39,6 +39,8 @@
     "//ios/chrome/browser/ui/autofill/manual_fill:eg_tests",
     "//ios/chrome/browser/ui/content_suggestions:eg_tests",
   ]
+
+  xctest = false
 }
 
 chrome_ios_eg_test("ios_chrome_autofill_automation_egtests") {
@@ -71,6 +73,12 @@
     "//ios/chrome/browser/ui/settings/language:eg_tests",
     "//ios/chrome/browser/ui/settings/password:eg_tests",
   ]
+
+  executable_args = [
+    "--args-json",
+    "{\"test_args\": [\"--enable-features=ClearSyncedData\",]}",
+  ]
+  xctest = false
 }
 
 chrome_ios_eg_test("ios_chrome_ui_egtests") {
@@ -103,6 +111,7 @@
   ]
 
   shards = 2
+  xctest = false
 }
 
 chrome_ios_eg_test("ios_chrome_web_egtests") {
diff --git a/ios/web_view/PRESUBMIT.py b/ios/web_view/PRESUBMIT.py
new file mode 100644
index 0000000..14c85d8a
--- /dev/null
+++ b/ios/web_view/PRESUBMIT.py
@@ -0,0 +1,69 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Presubmit script for ios/web_view.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details about the presubmit API built into depot_tools.
+"""
+
+import os
+
+INCLUSION_PREFIXES = ('#import "', '#include "')
+
+
+def _CheckAbsolutePathInclusionInPublicHeaders(input_api, output_api):
+  """Checks if all affected headers under //ios/web_view/public only include
+     the headers in the same directory by using relative path inclusions.
+
+     Because only these headers will be exported to the client side code,
+     and path above public/ will be changed, the clients will not find the
+     headers that are not in that public directory, and relative path
+     inclusions should be used.
+  """
+  error_items = []  # [(file_path, lineno, corrected_inclusion_path)]
+  normpath = os.path.normpath
+
+  public_dir = normpath('%s/public/' % input_api.PresubmitLocalPath())
+  files_under_public_dir = list(filter(
+    lambda f: normpath(f.AbsoluteLocalPath()).startswith(public_dir),
+    input_api.change.AffectedFiles()))
+
+  for f in files_under_public_dir:
+    _, ext = os.path.splitext(f.LocalPath())
+    if ext != '.h':
+      continue
+
+    for idx, line in enumerate(f.NewContents()):
+      lineno = idx + 1
+      if line.startswith(INCLUSION_PREFIXES) and '/' in line:
+        error_items.append((f.AbsoluteLocalPath(),
+                            lineno,
+                            line[line.rfind('/')+1:-1]))  # :-1 to exclude "
+
+  if len(error_items) == 0:
+    return []
+
+  plural_suffix = '' if len(error_items) == 1 else 's'
+  error_message = '\n'.join([
+      'Found header file%(plural)s with absolute path inclusion%(plural)s '
+      'in //ios/web_view/public.\n'
+      'You can only include header files in //ios/web_view/public (no '
+      'subdirectory) using relative path inclusions in the following '
+      'file%(plural)s:\n' % {'plural': plural_suffix}
+  ])
+  error_message += '\n'.join([
+    '    %(file_path)s [line %(lineno)d]:\n'
+    '        Do you mean "%(corrected)s"?' % {
+      'file_path': i[0], 'lineno': i[1], 'corrected': i[2]
+    } for i in error_items
+  ]) + '\n'
+  return [output_api.PresubmitError(error_message)]
+
+
+def CheckChangeOnCommit(input_api, output_api):
+  results = []
+  results.extend(
+    _CheckAbsolutePathInclusionInPublicHeaders(input_api, output_api))
+  return results
diff --git a/ios/web_view/PRESUBMIT_test.py b/ios/web_view/PRESUBMIT_test.py
new file mode 100644
index 0000000..f72d8ea
--- /dev/null
+++ b/ios/web_view/PRESUBMIT_test.py
@@ -0,0 +1,74 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+import unittest
+
+import PRESUBMIT
+
+
+# append the path of src/ to sys.path to import PRESUBMIT_test_mocks
+SRC_IOS_WEB_VIEW_PATH = os.path.dirname(os.path.abspath(__file__))
+SRC_PATH = os.path.dirname(os.path.dirname(SRC_IOS_WEB_VIEW_PATH))
+sys.path.append(SRC_PATH)
+import PRESUBMIT_test_mocks
+
+
+class InclusionPathCheckerTest(unittest.TestCase):
+  """Test the _CheckAbsolutePathInclusionInPublicHeaders presubmit check."""
+
+  def testInclusionPathChecker(self):
+    bads = [
+        ('#import "ios/web_view/aaa_imported.h"', 'ios/web_view/public/aaa.h'),
+        ('#include "ios/web_view/eee_imported.h"', 'ios/web_view/public/eee.h'),
+        ('#include "base/logging.h"', 'ios/web_view/public/fff.h'),
+        ('#import "ios/web_view/public/ggg_imported.h"',
+         'ios/web_view/public/ggg.h'),
+        ('#import "subdirectory/hhh_imported.h"', 'ios/web_view/public/hhh.h'),
+    ]
+    goods = [
+        ('#import "ios/web_view/bbb_imported.h"', 'ios/web_view/shell/bbb.h'),
+        ('#import "ccc_imported.h"', 'ios/web_view/public/ccc.h'),
+        ('#import <UIKit/UIKit.h>', 'ios/web_view/public/ddd.h'),
+    ]
+    normal_code = '''
+
+        /**
+         *  Some random comments here.
+         *  Write #include "base/logging.h" to use logging functions.
+         */
+
+        int main() {
+            double a = 1.0 / 2.0;
+            const char* str = "Hello, World!"; // a string to print
+            printf(str);
+        }'''
+    bads = [((code + normal_code).split('\n'),
+             SRC_PATH + '/' + path) for code, path in bads]
+    goods = [((code + normal_code).split('\n'),
+              SRC_PATH + '/' + path) for code, path in goods]
+
+    mock_input = PRESUBMIT_test_mocks.MockInputApi()
+    mock_input.presubmit_local_path = SRC_IOS_WEB_VIEW_PATH
+    mock_input.change = PRESUBMIT_test_mocks.MockChange([
+                            PRESUBMIT_test_mocks.MockFile(file_path, code)
+                            for code, file_path in (bads + goods)])
+    mock_output = PRESUBMIT_test_mocks.MockOutputApi()
+
+    errors = PRESUBMIT._CheckAbsolutePathInclusionInPublicHeaders(mock_input,
+                                                                  mock_output)
+
+    self.assertEqual(len(errors), 1)
+    self.assertEqual('error', errors[0].type)
+    self.assertTrue('with absolute path inclusion' in errors[0].message)
+
+    for _, file_path in bads:
+        self.assertTrue(file_path in errors[0].message)
+    for _, file_path in goods:
+        self.assertFalse(file_path in errors[0].message)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/media/audio/win/core_audio_util_win.cc b/media/audio/win/core_audio_util_win.cc
index 676959a..4759784 100644
--- a/media/audio/win/core_audio_util_win.cc
+++ b/media/audio/win/core_audio_util_win.cc
@@ -360,21 +360,15 @@
     bool allow_reinitialize,
     const UMALogCallback& uma_log_cb) {
   ComPtr<IMMDeviceEnumerator> device_enumerator;
-  HRESULT hr = ::CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
+  HRESULT hr = ::CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr,
                                   CLSCTX_INPROC_SERVER,
                                   IID_PPV_ARGS(&device_enumerator));
   if (hr == CO_E_NOTINITIALIZED && allow_reinitialize) {
     LOG(ERROR) << "CoCreateInstance fails with CO_E_NOTINITIALIZED";
-    // We have seen crashes which indicates that this method can in fact
-    // fail with CO_E_NOTINITIALIZED in combination with certain 3rd party
-    // modules. Calling CoInitializeEx is an attempt to resolve the reported
-    // issues. See http://crbug.com/378465 for details.
-    hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
-    if (SUCCEEDED(hr)) {
-      hr = ::CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
-                              CLSCTX_INPROC_SERVER,
-                              IID_PPV_ARGS(&device_enumerator));
-    }
+    // Buggy third-party DLLs can uninitialize COM out from under us.  Attempt
+    // to re-initialize it.  See http://crbug.com/378465 for more details.
+    CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
+    return CreateDeviceEnumeratorInternal(false, uma_log_cb);
   }
   uma_log_cb.Run(UmaLogStep::CREATE_DEVICE_ENUMERATOR, hr);
   return device_enumerator;
diff --git a/net/quic/mock_crypto_client_stream.cc b/net/quic/mock_crypto_client_stream.cc
index bcc95a9..2eba680 100644
--- a/net/quic/mock_crypto_client_stream.cc
+++ b/net/quic/mock_crypto_client_stream.cc
@@ -142,7 +142,10 @@
             ENCRYPTION_ZERO_RTT,
             std::make_unique<NullEncrypter>(Perspective::IS_CLIENT));
       }
+      if (session()->connection()->version().handshake_protocol ==
+          quic::PROTOCOL_QUIC_CRYPTO) {
         session()->SetDefaultEncryptionLevel(ENCRYPTION_ZERO_RTT);
+      }
       break;
     }
 
@@ -183,7 +186,12 @@
             ENCRYPTION_FORWARD_SECURE,
             std::make_unique<NullEncrypter>(Perspective::IS_CLIENT));
       }
+      if (session()->connection()->version().handshake_protocol ==
+          quic::PROTOCOL_TLS1_3) {
+        session()->OnOneRttKeysAvailable();
+      } else {
         session()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
+      }
         session()->DiscardOldEncryptionKey(ENCRYPTION_INITIAL);
         session()->NeuterHandshakeData();
       break;
@@ -260,9 +268,14 @@
           ENCRYPTION_FORWARD_SECURE,
           std::make_unique<NullEncrypter>(Perspective::IS_CLIENT));
     }
+    if (session()->connection()->version().handshake_protocol ==
+        quic::PROTOCOL_TLS1_3) {
+      session()->OnOneRttKeysAvailable();
+    } else {
       session()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
-      session()->DiscardOldEncryptionKey(ENCRYPTION_INITIAL);
-      session()->NeuterHandshakeData();
+    }
+    session()->DiscardOldEncryptionKey(ENCRYPTION_INITIAL);
+    session()->NeuterHandshakeData();
 }
 
 // static
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc
index fd967c828..a97b4181 100644
--- a/net/quic/quic_chromium_client_session.cc
+++ b/net/quic/quic_chromium_client_session.cc
@@ -1553,6 +1553,18 @@
   quic::QuicSpdySession::SetDefaultEncryptionLevel(level);
 }
 
+void QuicChromiumClientSession::OnOneRttKeysAvailable() {
+  if (!callback_.is_null()) {
+    // TODO(rtenneti): Currently for all CryptoHandshakeEvent events, callback_
+    // could be called because there are no error events in CryptoHandshakeEvent
+    // enum. If error events are added to CryptoHandshakeEvent, then the
+    // following code needs to changed.
+    std::move(callback_).Run(OK);
+  }
+  OnCryptoHandshakeComplete();
+  quic::QuicSpdySession::OnOneRttKeysAvailable();
+}
+
 void QuicChromiumClientSession::OnCryptoHandshakeMessageSent(
     const quic::CryptoHandshakeMessage& message) {
   logger_->OnCryptoHandshakeMessageSent(message);
diff --git a/net/quic/quic_chromium_client_session.h b/net/quic/quic_chromium_client_session.h
index 6dcf07bf..34ea4fda 100644
--- a/net/quic/quic_chromium_client_session.h
+++ b/net/quic/quic_chromium_client_session.h
@@ -495,6 +495,7 @@
                      quic::QuicRstStreamErrorCode error,
                      quic::QuicStreamOffset bytes_written) override;
   void SetDefaultEncryptionLevel(quic::EncryptionLevel level) override;
+  void OnOneRttKeysAvailable() override;
   void OnCryptoHandshakeMessageSent(
       const quic::CryptoHandshakeMessage& message) override;
   void OnCryptoHandshakeMessageReceived(
diff --git a/net/quic/quic_flags_list.h b/net/quic/quic_flags_list.h
index a999210d..5627d474 100644
--- a/net/quic/quic_flags_list.h
+++ b/net/quic/quic_flags_list.h
@@ -386,3 +386,9 @@
     bool,
     FLAGS_quic_reloadable_flag_quic_ignore_one_write_error_after_mtu_probe,
     false)
+
+// If true, send H3 SETTINGs when 1-RTT write key is available (rather then both
+// keys are available).
+QUIC_FLAG(bool,
+          FLAGS_quic_restart_flag_quic_send_settings_on_write_key_available,
+          false)
diff --git a/services/network/public/cpp/resource_request.cc b/services/network/public/cpp/resource_request.cc
index 8f5527a..df39f28 100644
--- a/services/network/public/cpp/resource_request.cc
+++ b/services/network/public/cpp/resource_request.cc
@@ -75,7 +75,7 @@
          is_signed_exchange_prefetch_cache_enabled ==
              request.is_signed_exchange_prefetch_cache_enabled &&
          obey_origin_policy == request.obey_origin_policy &&
-         trusted_params == trusted_params &&
+         trusted_params == request.trusted_params &&
          recursive_prefetch_token == request.recursive_prefetch_token &&
          trust_token_params == request.trust_token_params;
 }
diff --git a/testing/buildbot/chromium.ci.json b/testing/buildbot/chromium.ci.json
index c9eca15..a544b6ad 100644
--- a/testing/buildbot/chromium.ci.json
+++ b/testing/buildbot/chromium.ci.json
@@ -130624,10 +130624,364 @@
     ]
   },
   "Win10 FYI x64 Exp Release (Intel HD 630)": {
+    "gtest_tests": [
+      {
+        "args": [
+          "--test-launcher-retry-limit=0",
+          "--test-launcher-batch-limit=256",
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 4
+        },
+        "test": "angle_end2end_tests",
+        "test_target": "//third_party/angle/src/tests:angle_end2end_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "angle_gles1_conformance_tests",
+        "test_target": "//third_party/angle/src/tests:angle_gles1_conformance_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--test-launcher-retry-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "angle_unittests",
+        "test_target": "//third_party/angle/src/tests:angle_unittests"
+      },
+      {
+        "args": [
+          "--test-launcher-retry-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "angle_white_box_tests",
+        "test_target": "//third_party/angle/src/tests:angle_white_box_tests"
+      },
+      {
+        "args": [
+          "--enable-gpu",
+          "--test-launcher-bot-mode",
+          "--test-launcher-jobs=1",
+          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "tab_capture_end2end_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "browser_tests",
+        "test_target": "//chrome/test:browser_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gl_tests",
+        "test_target": "//gpu:gl_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gl_unittests",
+        "test_target": "//ui/gl:gl_unittests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gles2_conform_test",
+        "test_target": "//gpu/gles2_conform_support:gles2_conform_test"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-angle=d3d9"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "gles2_conform_d3d9_test",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gles2_conform_test",
+        "test_target": "//gpu/gles2_conform_support:gles2_conform_test"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-angle=gl",
+          "--disable-gpu-sandbox"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "gles2_conform_gl_test",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gles2_conform_test",
+        "test_target": "//gpu/gles2_conform_support:gles2_conform_test"
+      },
+      {
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gpu_unittests",
+        "test_target": "//gpu:gpu_unittests"
+      },
+      {
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "swiftshader_unittests",
+        "test_target": "//third_party/swiftshader/tests/GLESUnitTests:swiftshader_unittests"
+      },
+      {
+        "args": [
+          "--ignore-runtime-requirements=*"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "xr_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "xr_browser_tests",
+        "test_target": "//chrome/test:xr_browser_tests"
+      }
+    ],
     "isolated_scripts": [
       {
         "args": [
-          "noop_sleep",
+          "--gtest-benchmark-name=angle_perftests",
+          "-v",
+          "--one-frame-only"
+        ],
+        "isolate_name": "angle_perftests",
+        "merge": {
+          "args": [
+            "--smoke-test-mode"
+          ],
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "angle_perftests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test_target": "//chrome/test:angle_perftests"
+      },
+      {
+        "args": [
+          "context_lost",
           "--show-stdout",
           "--browser=release_x64",
           "--passthrough",
@@ -130639,14 +130993,14 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "noop_sleep_tests",
+        "name": "context_lost_tests",
         "should_retry_with_patch": false,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "containment_type": "AUTO",
           "dimension_sets": [
             {
-              "gpu": "intel-hd-630-win10-stable",
+              "gpu": "8086:5912-26.20.100.7870",
               "os": "Windows-10",
               "pool": "chromium.tests.gpu.template"
             }
@@ -130655,6 +131009,540 @@
           "idempotent": false,
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         }
+      },
+      {
+        "args": [
+          "depth_capture",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "depth_capture_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "gpu_process",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "gpu_process_launch_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "hardware_accelerated_feature",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "hardware_accelerated_feature_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "info_collection",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--expected-vendor-id",
+          "8086",
+          "--expected-device-id",
+          "5912"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "info_collection_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "maps",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "maps_pixel_test",
+        "precommit_args": [
+          "--review-patch-issue",
+          "${patch_issue}",
+          "--review-patch-set",
+          "${patch_set}",
+          "--buildbucket-build-id",
+          "${buildbucket_build_id}"
+        ],
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "pixel",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "pixel_skia_gold_test",
+        "precommit_args": [
+          "--review-patch-issue",
+          "${patch_issue}",
+          "--review-patch-set",
+          "${patch_set}",
+          "--buildbucket-build-id",
+          "${buildbucket_build_id}"
+        ],
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "power",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "power_measurement_test",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "../../tools/perf/run_benchmark",
+          "--benchmarks=rendering.desktop",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "rendering_representative_perf_tests",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "rendering_representative_perf_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test_target": "//chrome/test:rendering_representative_perf_tests"
+      },
+      {
+        "args": [
+          "screenshot_sync",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "screenshot_sync_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "trace_test",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "trace_test",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
+          "--webgl-conformance-version=2.0.1",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl2_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 20
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--webgl-conformance-version=2.0.1",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl2_conformance_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 20
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough --force_high_performance_gpu"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_d3d9_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough --force_high_performance_gpu"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_vulkan_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 2
+        }
       }
     ]
   },
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index a6dcd73a..f61b0e0 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -19927,10 +19927,364 @@
     ]
   },
   "Win10 FYI x64 Exp Release (Intel HD 630)": {
+    "gtest_tests": [
+      {
+        "args": [
+          "--test-launcher-retry-limit=0",
+          "--test-launcher-batch-limit=256",
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 4
+        },
+        "test": "angle_end2end_tests",
+        "test_target": "//third_party/angle/src/tests:angle_end2end_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "angle_gles1_conformance_tests",
+        "test_target": "//third_party/angle/src/tests:angle_gles1_conformance_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--test-launcher-retry-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "angle_unittests",
+        "test_target": "//third_party/angle/src/tests:angle_unittests"
+      },
+      {
+        "args": [
+          "--test-launcher-retry-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "angle_white_box_tests",
+        "test_target": "//third_party/angle/src/tests:angle_white_box_tests"
+      },
+      {
+        "args": [
+          "--enable-gpu",
+          "--test-launcher-bot-mode",
+          "--test-launcher-jobs=1",
+          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "tab_capture_end2end_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "browser_tests",
+        "test_target": "//chrome/test:browser_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gl_tests",
+        "test_target": "//gpu:gl_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gl_unittests",
+        "test_target": "//ui/gl:gl_unittests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gles2_conform_test",
+        "test_target": "//gpu/gles2_conform_support:gles2_conform_test"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-angle=d3d9"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "gles2_conform_d3d9_test",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gles2_conform_test",
+        "test_target": "//gpu/gles2_conform_support:gles2_conform_test"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-angle=gl",
+          "--disable-gpu-sandbox"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "gles2_conform_gl_test",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gles2_conform_test",
+        "test_target": "//gpu/gles2_conform_support:gles2_conform_test"
+      },
+      {
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "gpu_unittests",
+        "test_target": "//gpu:gpu_unittests"
+      },
+      {
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "swiftshader_unittests",
+        "test_target": "//third_party/swiftshader/tests/GLESUnitTests:swiftshader_unittests"
+      },
+      {
+        "args": [
+          "--ignore-runtime-requirements=*"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "xr_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test": "xr_browser_tests",
+        "test_target": "//chrome/test:xr_browser_tests"
+      }
+    ],
     "isolated_scripts": [
       {
         "args": [
-          "noop_sleep",
+          "--gtest-benchmark-name=angle_perftests",
+          "-v",
+          "--one-frame-only"
+        ],
+        "isolate_name": "angle_perftests",
+        "merge": {
+          "args": [
+            "--smoke-test-mode"
+          ],
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "angle_perftests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test_target": "//chrome/test:angle_perftests"
+      },
+      {
+        "args": [
+          "context_lost",
           "--show-stdout",
           "--browser=release_x64",
           "--passthrough",
@@ -19942,14 +20296,14 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "noop_sleep_tests",
+        "name": "context_lost_tests",
         "should_retry_with_patch": false,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "containment_type": "AUTO",
           "dimension_sets": [
             {
-              "gpu": "intel-hd-630-win10-stable",
+              "gpu": "8086:5912-26.20.100.7870",
               "os": "Windows-10",
               "pool": "chromium.tests.gpu.template"
             }
@@ -19958,6 +20312,540 @@
           "idempotent": false,
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         }
+      },
+      {
+        "args": [
+          "depth_capture",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "depth_capture_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "gpu_process",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "gpu_process_launch_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "hardware_accelerated_feature",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "hardware_accelerated_feature_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "info_collection",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--expected-vendor-id",
+          "8086",
+          "--expected-device-id",
+          "5912"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "info_collection_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "maps",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "maps_pixel_test",
+        "precommit_args": [
+          "--review-patch-issue",
+          "${patch_issue}",
+          "--review-patch-set",
+          "${patch_set}",
+          "--buildbucket-build-id",
+          "${buildbucket_build_id}"
+        ],
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "pixel",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "pixel_skia_gold_test",
+        "precommit_args": [
+          "--review-patch-issue",
+          "${patch_issue}",
+          "--review-patch-set",
+          "${patch_set}",
+          "--buildbucket-build-id",
+          "${buildbucket_build_id}"
+        ],
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "power",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "power_measurement_test",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "../../tools/perf/run_benchmark",
+          "--benchmarks=rendering.desktop",
+          "--browser=release_x64"
+        ],
+        "isolate_name": "rendering_representative_perf_tests",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "rendering_representative_perf_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "test_target": "//chrome/test:rendering_representative_perf_tests"
+      },
+      {
+        "args": [
+          "screenshot_sync",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "screenshot_sync_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "trace_test",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "trace_test",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
+          "--webgl-conformance-version=2.0.1",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl2_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 20
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--webgl-conformance-version=2.0.1",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl2_conformance_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 20
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough --force_high_performance_gpu"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_d3d9_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough --force_high_performance_gpu"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_vulkan_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:5912-26.20.100.7870",
+              "os": "Windows-10",
+              "pool": "chromium.tests.gpu.template"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 2
+        }
       }
     ]
   },
diff --git a/testing/buildbot/filters/android.emulator.content_browsertests.filter b/testing/buildbot/filters/android.emulator.content_browsertests.filter
index 510a01d..7ed82ec 100644
--- a/testing/buildbot/filters/android.emulator.content_browsertests.filter
+++ b/testing/buildbot/filters/android.emulator.content_browsertests.filter
@@ -2,6 +2,7 @@
 -All/TouchActionBrowserTest.PanXAtYAreaWithTimeout/*
 -All/TouchActionBrowserTest.TouchActionNone/*
 -All/TouchActionBrowserTest.TwoFingerPanXAtYAreaWithTimeout/*
+-All/TouchActionBrowserTest.BlockDoubleTapDragZoom/*
 
 # crbug.com/1056878
 -BackForwardCacheBrowserTest.VideoSuspendAndResume
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl
index 0d1e456..67b89cfb 100644
--- a/testing/buildbot/mixins.pyl
+++ b/testing/buildbot/mixins.pyl
@@ -678,17 +678,15 @@
       },
     },
   },
-  # TODO(https://crbug.com/1053803): Re-add once the machines are upgraded to
-  # the newer driver version.
-  # 'win10_intel_hd_630_experimental': {
-  #   'swarming': {
-  #     'dimensions': {
-  #       'gpu': '8086:5912-26.20.100.7323',
-  #       'os': 'Windows-10',
-  #       'pool': 'chromium.tests.gpu.template',
-  #     },
-  #   },
-  # },
+  'win10_intel_hd_630_experimental': {
+    'swarming': {
+      'dimensions': {
+        'gpu': '8086:5912-26.20.100.7870',
+        'os': 'Windows-10',
+        'pool': 'chromium.tests.gpu.template',
+      },
+    },
+  },
   'win10_intel_hd_630_stable': {
     'swarming': {
       'dimensions': {
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index cad6762..2760089 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -3462,15 +3462,12 @@
         'browser_config': 'release_x64',
         'mixins': [
           'limited_capacity_bot',
-          'win10_intel_hd_630_stable',
+          'win10_intel_hd_630_experimental',
         ],
         'test_suites': {
-          'gpu_telemetry_tests': 'gpu_noop_sleep_telemetry_test',
-          # TODO(https://crbug.com/1053803): Re-enable tests once the machines
-          # are updated  to the target driver version.
-          # 'gtest_tests': 'gpu_fyi_win_gtests',
-          # 'isolated_scripts': 'gpu_angle_and_desktop_representative_perf_fyi_isolated_scripts',
-          # 'gpu_telemetry_tests': 'gpu_fyi_win_intel_release_telemetry_tests',
+          'gtest_tests': 'gpu_fyi_win_gtests',
+          'isolated_scripts': 'gpu_angle_and_desktop_representative_perf_fyi_isolated_scripts',
+          'gpu_telemetry_tests': 'gpu_fyi_win_intel_release_telemetry_tests',
         },
       },
       'Win10 FYI x64 Exp Release (NVIDIA)': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index e1a61a3..8a2a3997 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -3557,7 +3557,6 @@
                         "NtpRealboxMatchOmniboxTheme",
                         "OmniboxDisplayTitleForCurrentUrl",
                         "OmniboxDocumentProvider",
-                        "OmniboxEnableClipboardProviderTextSuggestions",
                         "OmniboxLocalEntitySuggestions",
                         "OmniboxMaxURLMatches",
                         "OmniboxOnFocusSuggestions",
@@ -5331,28 +5330,6 @@
             ]
         }
     ],
-    "SyncButterWallet": [
-        {
-            "platforms": [
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled_DownstreamBehindButton",
-                    "enable_features": [
-                        "AutofillEnableAccountWalletStorage",
-                        "AutofillSaveCardImprovedUserConsent",
-                        "SyncSupportSecondaryAccount"
-                    ],
-                    "disable_features": [
-                        "AlwaysShowServerCardsInSyncTransport"
-                    ]
-                }
-            ]
-        }
-    ],
     "SyncInstanceIDTokenTTL": [
         {
             "platforms": [
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.cc b/third_party/blink/renderer/core/animation/css/css_animations.cc
index 0556a83..e2ae7cf 100644
--- a/third_party/blink/renderer/core/animation/css/css_animations.cc
+++ b/third_party/blink/renderer/core/animation/css/css_animations.cc
@@ -1191,8 +1191,11 @@
                   event_type_names::kAnimationiteration, elapsed_time);
   }
 
+  previous_iteration_ = current_iteration;
+
   if (previous_phase_ == current_phase)
     return;
+  previous_phase_ = current_phase;
 
   if (current_phase == Timing::kPhaseAfter) {
     MaybeDispatch(Document::kAnimationEndListener,
@@ -1209,9 +1212,6 @@
                   event_type_names::kAnimationcancel,
                   AnimationTimeDelta::FromSecondsD(cancel_time));
   }
-
-  previous_phase_ = current_phase;
-  previous_iteration_ = current_iteration;
 }
 
 void CSSAnimations::AnimationEventDelegate::Trace(Visitor* visitor) {
diff --git a/third_party/blink/renderer/core/css/css_style_sheet.cc b/third_party/blink/renderer/core/css/css_style_sheet.cc
index 837913d..096dc27 100644
--- a/third_party/blink/renderer/core/css/css_style_sheet.cc
+++ b/third_party/blink/renderer/core/css/css_style_sheet.cc
@@ -452,15 +452,16 @@
 }
 
 ScriptPromise CSSStyleSheet::replace(ScriptState* script_state,
-                                     const String& text,
-                                     ExceptionState& exception_state) {
+                                     const String& text) {
   if (!is_constructed_) {
-    exception_state.ThrowDOMException(
-        DOMExceptionCode::kNotAllowedError,
-        "Can't call replace on non-constructed CSSStyleSheets.");
+    return ScriptPromise::RejectWithDOMException(
+        script_state,
+        MakeGarbageCollected<DOMException>(
+            DOMExceptionCode::kNotAllowedError,
+            "Can't call replace on non-constructed CSSStyleSheets."));
   }
   // Parses the text synchronously, loads import rules asynchronously.
-  SetText(text, true /* allow_import_rules */, exception_state);
+  SetText(text, true /* allow_import_rules */, nullptr);
   if (!IsLoading())
     return ScriptPromise::Cast(script_state, ToV8(this, script_state));
   // We're loading a stylesheet that contains @import rules. This is deprecated.
@@ -473,11 +474,11 @@
 void CSSStyleSheet::replaceSync(const String& text,
                                 ExceptionState& exception_state) {
   if (!is_constructed_) {
-    exception_state.ThrowDOMException(
+    return exception_state.ThrowDOMException(
         DOMExceptionCode::kNotAllowedError,
         "Can't call replaceSync on non-constructed CSSStyleSheets.");
   }
-  SetText(text, false /* allow_import_rules */, exception_state);
+  SetText(text, false /* allow_import_rules */, &exception_state);
 }
 
 void CSSStyleSheet::ResolveReplacePromiseIfNeeded(bool load_error_occured) {
@@ -570,16 +571,17 @@
 
 void CSSStyleSheet::SetText(const String& text,
                             bool allow_import_rules,
-                            ExceptionState& exception_state) {
+                            ExceptionState* exception_state) {
   child_rule_cssom_wrappers_.clear();
 
   CSSStyleSheet::RuleMutationScope mutation_scope(this);
   contents_->ClearRules();
   if (contents_->ParseString(text, allow_import_rules) ==
       ParseSheetResult::kHasUnallowedImportRule) {
-    exception_state.ThrowDOMException(DOMExceptionCode::kNotAllowedError,
-                                      "@import rules are not allowed when "
-                                      "creating stylesheet synchronously.");
+    DCHECK(exception_state);
+    exception_state->ThrowDOMException(DOMExceptionCode::kNotAllowedError,
+                                       "@import rules are not allowed when "
+                                       "creating stylesheet synchronously.");
   }
 }
 
diff --git a/third_party/blink/renderer/core/css/css_style_sheet.h b/third_party/blink/renderer/core/css/css_style_sheet.h
index fc7a14e..84d5355 100644
--- a/third_party/blink/renderer/core/css/css_style_sheet.h
+++ b/third_party/blink/renderer/core/css/css_style_sheet.h
@@ -100,9 +100,7 @@
     deleteRule(index, exception_state);
   }
 
-  ScriptPromise replace(ScriptState* script_state,
-                        const String& text,
-                        ExceptionState&);
+  ScriptPromise replace(ScriptState* script_state, const String& text);
   void replaceSync(const String& text, ExceptionState&);
   void ResolveReplacePromiseIfNeeded(bool load_error_occured);
 
@@ -191,7 +189,9 @@
   bool SheetLoaded();
   bool LoadCompleted() const { return load_completed_; }
   void StartLoadingDynamicSheet();
-  void SetText(const String&, bool allow_import_rules, ExceptionState&);
+  // If `allow_import_rules` is false, an ExceptionState pointer must be
+  // provided, otherwise it can be null.
+  void SetText(const String&, bool allow_import_rules, ExceptionState*);
   void SetMedia(MediaList*);
   void SetAlternateFromConstructor(bool);
   bool CanBeActivated(const String& current_preferrable_name) const;
diff --git a/third_party/blink/renderer/core/css/css_style_sheet.idl b/third_party/blink/renderer/core/css/css_style_sheet.idl
index 8057a34..7f075cf 100644
--- a/third_party/blink/renderer/core/css/css_style_sheet.idl
+++ b/third_party/blink/renderer/core/css/css_style_sheet.idl
@@ -29,7 +29,7 @@
     [RaisesException] unsigned long insertRule(DOMString rule, optional unsigned long index = 0);
     [RaisesException] void deleteRule(unsigned long index);
 
-    [MeasureAs=CSSStyleSheetReplace, CallWith=ScriptState, RaisesException] Promise<CSSStyleSheet> replace(DOMString text);
+    [MeasureAs=CSSStyleSheetReplace, CallWith=ScriptState] Promise<CSSStyleSheet> replace(DOMString text);
     [MeasureAs=CSSStyleSheetReplaceSync, RaisesException] void replaceSync(DOMString text);
 
     // Non-standard APIs
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index 8fce10a7..ca2cb03 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -8664,15 +8664,16 @@
     }
   }
 
-  // Don't count or report usage of WebComponentsV0 for chrome:// URLs.
+  // Don't count usage of WebComponentsV0 for chrome:// URLs, but still report
+  // the deprecation messages.
   if (Url().ProtocolIs("chrome") &&
       (feature == WebFeature::kHTMLImports ||
        feature == WebFeature::kElementCreateShadowRoot ||
        feature == WebFeature::kDocumentRegisterElement)) {
-    return;
+    Deprecation::DeprecationWarningOnly(Loader(), feature);
+  } else {
+    Deprecation::CountDeprecation(Loader(), feature);
   }
-
-  Deprecation::CountDeprecation(Loader(), feature);
 }
 
 void Document::CountProperty(CSSPropertyID property) const {
diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/blink/renderer/core/frame/deprecation.cc
index 97f6fa60..c1e426e 100644
--- a/third_party/blink/renderer/core/frame/deprecation.cc
+++ b/third_party/blink/renderer/core/frame/deprecation.cc
@@ -611,6 +611,17 @@
 }
 
 void Deprecation::CountDeprecation(DocumentLoader* loader, WebFeature feature) {
+  Deprecation::CountDeprecation(loader, feature, /*count_usage=*/true);
+}
+
+void Deprecation::DeprecationWarningOnly(DocumentLoader* loader,
+                                         WebFeature feature) {
+  Deprecation::CountDeprecation(loader, feature, /*count_usage=*/false);
+}
+
+void Deprecation::CountDeprecation(DocumentLoader* loader,
+                                   WebFeature feature,
+                                   bool count_usage) {
   if (!loader)
     return;
   LocalFrame* frame = loader->GetFrame();
@@ -622,7 +633,8 @@
     return;
 
   page->GetDeprecation().SetReported(feature);
-  UseCounter::Count(loader, feature);
+  if (count_usage)
+    UseCounter::Count(loader, feature);
   GenerateReport(frame, feature);
 }
 
diff --git a/third_party/blink/renderer/core/frame/deprecation.h b/third_party/blink/renderer/core/frame/deprecation.h
index 72cff4f..eaf82b6 100644
--- a/third_party/blink/renderer/core/frame/deprecation.h
+++ b/third_party/blink/renderer/core/frame/deprecation.h
@@ -44,6 +44,7 @@
   static void CountDeprecation(ExecutionContext*, WebFeature);
   static void CountDeprecation(const Document&, WebFeature);
   static void CountDeprecation(DocumentLoader*, WebFeature);
+  static void DeprecationWarningOnly(DocumentLoader*, WebFeature);
 
   // TODO(crbug.com/1029822): Temporary helpers to ease migrating
   // ExecutionContext to LocalDOMWindow.
@@ -69,6 +70,8 @@
   // ReportingObservers. Also sends the deprecation message to the console.
   static void GenerateReport(const LocalFrame*, WebFeature);
 
+  static void CountDeprecation(DocumentLoader*, WebFeature, bool count_usage);
+
   // To minimize the report/console spam from frames coming and going, report
   // each deprecation at most once per page load per renderer process.
   std::bitset<static_cast<size_t>(WebFeature::kNumberOfFeatures)>
diff --git a/third_party/blink/renderer/core/html/forms/date_time_chooser_impl.cc b/third_party/blink/renderer/core/html/forms/date_time_chooser_impl.cc
index 9db64c8..beb631c 100644
--- a/third_party/blink/renderer/core/html/forms/date_time_chooser_impl.cc
+++ b/third_party/blink/renderer/core/html/forms/date_time_chooser_impl.cc
@@ -170,6 +170,16 @@
   AddProperty("axShowPreviousMonth",
               GetLocale().QueryString(IDS_AX_CALENDAR_SHOW_PREVIOUS_MONTH),
               data);
+  AddProperty("axHourLabel", GetLocale().QueryString(IDS_AX_HOUR_FIELD_TEXT),
+              data);
+  AddProperty("axMinuteLabel",
+              GetLocale().QueryString(IDS_AX_MINUTE_FIELD_TEXT), data);
+  AddProperty("axSecondLabel",
+              GetLocale().QueryString(IDS_AX_SECOND_FIELD_TEXT), data);
+  AddProperty("axMillisecondLabel",
+              GetLocale().QueryString(IDS_AX_MILLISECOND_FIELD_TEXT), data);
+  AddProperty("axAmPmLabel", GetLocale().QueryString(IDS_AX_AM_PM_FIELD_TEXT),
+              data);
   AddProperty("weekStartDay", locale_->FirstDayOfWeek(), data);
   AddProperty("shortMonthLabels", locale_->ShortMonthLabels(), data);
   AddProperty("dayLabels", locale_->WeekDayShortLabels(), data);
diff --git a/third_party/blink/renderer/core/html/forms/resources/time_picker.js b/third_party/blink/renderer/core/html/forms/resources/time_picker.js
index 01e1b999..6228083 100644
--- a/third_party/blink/renderer/core/html/forms/resources/time_picker.js
+++ b/third_party/blink/renderer/core/html/forms/resources/time_picker.js
@@ -27,7 +27,6 @@
   AMPM: 5,
 };
 
-
 /**
  * Supported label types.
  * @enum {number}
@@ -427,6 +426,19 @@
     this.className = TimeColumn.ClassName;
     this.tabIndex = 0;
     this.columnType_ = columnType;
+    this.setAttribute('role', 'listbox');
+    if (this.columnType_ === TimeColumnType.HOUR) {
+      this.setAttribute('aria-label', global.params.axHourLabel);
+    } else if (this.columnType_ === TimeColumnType.MINUTE) {
+      this.setAttribute('aria-label', global.params.axMinuteLabel);
+    } else if (this.columnType_ === TimeColumnType.SECOND) {
+      this.setAttribute('aria-label', global.params.axSecondLabel);
+    } else if (this.columnType_ === TimeColumnType.MILLISECOND) {
+      this.setAttribute('aria-label', global.params.axMillisecondLabel);
+    } else {
+      this.setAttribute('aria-label', global.params.axAmPmLabel);
+    }
+
     if (this.columnType_ == TimeColumnType.AMPM) {
       this.createAndInitializeAMPMCells_(timePicker);
     } else {
@@ -456,7 +468,7 @@
           (100 * Math.floor((Number(millisecondValue) + 50.0) / 100.0)) % 1000;
     }
 
-    let time = new Time(1, 1, 1, 0);
+    let time = new Time(1, 1, 1, 100);
     let cells = [];
     let initialCellIndex = -1;
     for (let i = 0; i < totalCells; i++) {
@@ -464,7 +476,7 @@
 
       if (this.columnType_ === TimeColumnType.MILLISECOND &&
           Number(value) === roundedMillisecondValue) {
-        // Set this cell to the exat ms value of the in-page control
+        // Set this cell to the exact ms value of the in-page control
         value =
             currentTime.value(TimeColumnType.MILLISECOND, timePicker.hasAMPM);
         initialCellIndex = i;
@@ -691,9 +703,12 @@
   set selectedTimeCell(timeCell) {
     if (this.selectedTimeCell_) {
       this.selectedTimeCell_.classList.remove('selected');
+      this.selectedTimeCell_.removeAttribute('aria-selected');
     }
     this.selectedTimeCell_ = timeCell;
+    this.setAttribute('aria-activedescendant', timeCell.id);
     this.selectedTimeCell_.classList.add('selected');
+    this.selectedTimeCell_.setAttribute('aria-selected', 'true');
   }
 
   resetToInitialValue = () => {
@@ -721,7 +736,16 @@
     this.className = TimeCell.ClassName;
     this.textContent = localizedValue;
     this.value = value;
+
+    this.setAttribute('role', 'option');
+    this.id = TimeCell.getNextUniqueId();
   };
+
+  static getNextUniqueId() {
+    return `timeCell${TimeCell.idCount++}`;
+  }
+
+  static idCount = 0;
 }
 TimeCell.ClassName = 'time-cell';
 window.customElements.define('time-cell', TimeCell, {extends: 'li'});
diff --git a/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc b/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc
index c0e6532..7769a1aa1 100644
--- a/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc
@@ -997,8 +997,7 @@
 bool InspectorStyleSheet::SetText(const String& text,
                                   ExceptionState& exception_state) {
   InnerSetText(text, true);
-  page_style_sheet_->SetText(text, true /* allow_import_rules */,
-                             exception_state);
+  page_style_sheet_->SetText(text, true /* allow_import_rules */, nullptr);
   OnStyleSheetTextChanged();
   return true;
 }
diff --git a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.cc
index a5d4cd5..9deb2e3c 100644
--- a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.cc
@@ -28,7 +28,7 @@
 FractionParameters GetFractionParameters(const ComputedStyle& style) {
   FractionParameters parameters;
 
-  // TODO(rbuis): Implement displaystyle.
+  bool has_display_style = HasDisplayStyle(style);
 
   // We try and read constants to draw the fraction from the OpenType MATH and
   // use fallback values otherwise.
@@ -37,23 +37,37 @@
   parameters.numerator_gap_min = LayoutUnit(
       MathConstant(
           style,
-          OpenTypeMathSupport::MathConstants::kFractionNumDisplayStyleGapMin)
-          .value_or(3 * RuleThicknessFallback(style)));
+          has_display_style
+              ? OpenTypeMathSupport::MathConstants::
+                    kFractionNumDisplayStyleGapMin
+              : OpenTypeMathSupport::MathConstants::kFractionNumeratorGapMin)
+          .value_or((has_display_style ? 3 : 1) *
+                    RuleThicknessFallback(style)));
   parameters.denominator_gap_min = LayoutUnit(
       MathConstant(
           style,
-          OpenTypeMathSupport::MathConstants::kFractionDenomDisplayStyleGapMin)
+          has_display_style
+              ? OpenTypeMathSupport::MathConstants::
+                    kFractionDenomDisplayStyleGapMin
+              : OpenTypeMathSupport::MathConstants::kFractionDenominatorGapMin)
           .value_or(parameters.numerator_gap_min));
 
   // TODO(crbug.com/1058369): The MATH table specification does not suggest
   // any values for shifts, so we leave them at zero for now.
-  parameters.numerator_min_shift_up =
-      LayoutUnit(MathConstant(style, OpenTypeMathSupport::MathConstants::
-                                         kFractionNumeratorDisplayStyleShiftUp)
-                     .value_or(0));
+  parameters.numerator_min_shift_up = LayoutUnit(
+      MathConstant(
+          style,
+          has_display_style
+              ? OpenTypeMathSupport::MathConstants::
+                    kFractionNumeratorDisplayStyleShiftUp
+              : OpenTypeMathSupport::MathConstants::kFractionNumeratorShiftUp)
+          .value_or(0));
   parameters.denominator_min_shift_down = LayoutUnit(
-      MathConstant(style, OpenTypeMathSupport::MathConstants::
-                              kFractionDenominatorDisplayStyleShiftDown)
+      MathConstant(style, has_display_style
+                              ? OpenTypeMathSupport::MathConstants::
+                                    kFractionDenominatorDisplayStyleShiftDown
+                              : OpenTypeMathSupport::MathConstants::
+                                    kFractionDenominatorShiftDown)
           .value_or(0));
 
   return parameters;
@@ -72,26 +86,35 @@
 FractionStackParameters GetFractionStackParameters(const ComputedStyle& style) {
   FractionStackParameters parameters;
 
-  // TODO(rbuis): Implement displaystyle.
+  bool has_display_style = HasDisplayStyle(style);
 
   // We try and read constants to draw the stack from the OpenType MATH and use
   // fallback values otherwise.
   // We use the fallback values suggested in the MATH table specification.
   parameters.gap_min = LayoutUnit(
-      MathConstant(style,
-                   OpenTypeMathSupport::MathConstants::kStackDisplayStyleGapMin)
-          .value_or(7 * RuleThicknessFallback(style)));
+      MathConstant(
+          style,
+          has_display_style
+              ? OpenTypeMathSupport::MathConstants::kStackDisplayStyleGapMin
+              : OpenTypeMathSupport::MathConstants::kStackGapMin)
+          .value_or((has_display_style ? 7 : 3) *
+                    RuleThicknessFallback(style)));
   // The MATH table specification does not suggest any values for shifts, so
   // we leave them at zero.
   parameters.top_shift_up = LayoutUnit(
       MathConstant(
           style,
-          OpenTypeMathSupport::MathConstants::kStackTopDisplayStyleShiftUp)
+          has_display_style
+              ? OpenTypeMathSupport::MathConstants::kStackTopDisplayStyleShiftUp
+              : OpenTypeMathSupport::MathConstants::kStackTopShiftUp)
           .value_or(0));
   parameters.bottom_shift_down = LayoutUnit(
       MathConstant(
           style,
-          OpenTypeMathSupport::MathConstants::kStackBottomDisplayStyleShiftDown)
+          has_display_style
+              ? OpenTypeMathSupport::MathConstants::
+                    kStackBottomDisplayStyleShiftDown
+              : OpenTypeMathSupport::MathConstants::kStackBottomShiftDown)
           .value_or(0));
 
   return parameters;
diff --git a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_layout_utils.h b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_layout_utils.h
index dd1f5a64..366e1a811 100644
--- a/third_party/blink/renderer/core/layout/ng/mathml/ng_math_layout_utils.h
+++ b/third_party/blink/renderer/core/layout/ng/mathml/ng_math_layout_utils.h
@@ -45,6 +45,10 @@
 
 LayoutUnit FractionLineThickness(const ComputedStyle& style);
 
+inline bool HasDisplayStyle(const ComputedStyle& style) {
+  return style.MathStyle() == EMathStyle::kDisplay;
+}
+
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATH_LAYOUT_UTILS_H_
diff --git a/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc
index f91954f..1b3d327 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc
@@ -326,7 +326,8 @@
 
 NGConstraintSpace NGFlexLayoutAlgorithm::BuildSpaceForIntrinsicBlockSize(
     const NGBlockNode& flex_item,
-    const NGPhysicalBoxStrut& physical_margins) const {
+    const NGPhysicalBoxStrut& physical_margins,
+    const MinMaxSizes& cross_axis_min_max) const {
   const ComputedStyle& child_style = flex_item.Style();
   NGConstraintSpaceBuilder space_builder(ConstraintSpace(),
                                          child_style.GetWritingMode(),
@@ -341,19 +342,16 @@
   if (ShouldItemShrinkToFit(flex_item)) {
     space_builder.SetIsShrinkToFit(true);
   } else if (WillChildCrossSizeBeContainerCrossSize(flex_item)) {
-    // TODO(dgrogan): Do you need to further adjust available size by item's min
-    // and max cross sizes before SetIsFixed{Inline,Block}Size(true) ?
     if (is_column_) {
       space_builder.SetIsFixedInlineSize(true);
       child_available_size.inline_size =
-          (child_available_size.inline_size - margins.InlineSum())
-              .ClampNegativeToZero();
+          cross_axis_min_max.ClampSizeToMinAndMax(
+              child_available_size.inline_size - margins.InlineSum());
     } else {
       space_builder.SetIsFixedBlockSize(true);
       DCHECK_NE(content_box_size_.block_size, kIndefiniteSize);
-      child_available_size.block_size =
-          (child_available_size.block_size - margins.BlockSum())
-              .ClampNegativeToZero();
+      child_available_size.block_size = cross_axis_min_max.ClampSizeToMinAndMax(
+          child_available_size.block_size - margins.BlockSum());
     }
   }
 
@@ -422,33 +420,19 @@
         is_horizontal_flow_ ? physical_border_padding.VerticalSum()
                             : physical_border_padding.HorizontalSum();
 
-    base::Optional<LayoutUnit> intrinsic_block_size;
-    auto IntrinsicBlockSizeFunc = [&]() -> LayoutUnit {
-      if (!intrinsic_block_size) {
-        NGConstraintSpace child_space =
-            BuildSpaceForIntrinsicBlockSize(child, physical_child_margins);
-        intrinsic_block_size =
-            child.Layout(child_space, /* break_token */ nullptr)
-                ->IntrinsicBlockSize();
-      }
-      return *intrinsic_block_size;
-    };
-
     base::Optional<MinMaxSizes> min_max_size;
     auto MinMaxSizesFunc = [&]() -> MinMaxSizes {
       if (!min_max_size) {
-        NGConstraintSpace child_space =
-            BuildSpaceForIntrinsicBlockSize(child, physical_child_margins);
         if (child.Style().OverflowBlockDirection() == EOverflow::kAuto) {
           // Ensure this child has been laid out so its auto scrollbars are
           // included in its intrinsic sizes.
-          IntrinsicBlockSizeFunc();
+          child.Layout(flex_basis_space);
         }
         // We want the child's min/max size in its writing mode, not ours.
         // We'll only ever use it if the child's inline axis is our main axis.
         min_max_size = child.ComputeMinMaxSizes(
             child_style.GetWritingMode(),
-            MinMaxSizesInput(content_box_size_.block_size), &child_space);
+            MinMaxSizesInput(content_box_size_.block_size), &flex_basis_space);
       }
       return *min_max_size;
     };
@@ -491,6 +475,19 @@
           LengthResolvePhase::kLayout);
     }
 
+    base::Optional<LayoutUnit> intrinsic_block_size;
+    auto IntrinsicBlockSizeFunc = [&]() -> LayoutUnit {
+      if (!intrinsic_block_size) {
+        NGConstraintSpace child_space = BuildSpaceForIntrinsicBlockSize(
+            child, physical_child_margins,
+            min_max_sizes_in_cross_axis_direction);
+        scoped_refptr<const NGLayoutResult> layout_result =
+            child.Layout(child_space, /* break_token */ nullptr);
+        intrinsic_block_size = layout_result->IntrinsicBlockSize();
+      }
+      return *intrinsic_block_size;
+    };
+
     // The logic that calculates flex_base_border_box assumes that the used
     // value of the flex-basis property is either definite or 'content'.
     LayoutUnit flex_base_border_box;
@@ -813,6 +810,8 @@
         space_builder.SetIsFixedInlineSize(true);
       }
       if (WillChildCrossSizeBeContainerCrossSize(flex_item.ng_input_node)) {
+        // TODO(dgrogan): These need margins subtracted and min/max sizes
+        // applied, like in BuildSpaceForIntrinsicBlockSize.
         if (is_column_)
           space_builder.SetIsFixedInlineSize(true);
         else
diff --git a/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.h
index b7a0338..066277e 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.h
@@ -53,7 +53,8 @@
   NGConstraintSpace BuildSpaceForFlexBasis(const NGBlockNode& flex_item) const;
   NGConstraintSpace BuildSpaceForIntrinsicBlockSize(
       const NGBlockNode& flex_item,
-      const NGPhysicalBoxStrut& physical_margins) const;
+      const NGPhysicalBoxStrut& physical_margins,
+      const MinMaxSizes& cross_axis) const;
   void ConstructAndAppendFlexItems();
   void ApplyStretchAlignmentToChild(FlexItem& flex_item);
   void GiveLinesAndItemsFinalPositionAndSize();
diff --git a/third_party/blink/renderer/core/mathml/mathml_attribute_names.json5 b/third_party/blink/renderer/core/mathml/mathml_attribute_names.json5
index 01a1e765b..8d4a666 100644
--- a/third_party/blink/renderer/core/mathml/mathml_attribute_names.json5
+++ b/third_party/blink/renderer/core/mathml/mathml_attribute_names.json5
@@ -10,6 +10,7 @@
     "definitionURL",
     "depth",
     "display",
+    "displaystyle",
     "encoding",
     "height",
     "linethickness",
diff --git a/third_party/blink/renderer/core/mathml/mathml_element.cc b/third_party/blink/renderer/core/mathml/mathml_element.cc
index 2db4644..43705b9 100644
--- a/third_party/blink/renderer/core/mathml/mathml_element.cc
+++ b/third_party/blink/renderer/core/mathml/mathml_element.cc
@@ -38,7 +38,8 @@
   if (name == html_names::kDirAttr || name == mathml_names::kMathsizeAttr ||
       name == mathml_names::kMathcolorAttr ||
       name == mathml_names::kMathbackgroundAttr ||
-      name == mathml_names::kDisplayAttr)
+      name == mathml_names::kDisplayAttr ||
+      name == mathml_names::kDisplaystyleAttr)
     return true;
   return Element::IsPresentationAttribute(name);
 }
@@ -78,6 +79,14 @@
       AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kMathStyle,
                                               CSSValueID::kDisplay);
     }
+  } else if (name == mathml_names::kDisplaystyleAttr) {
+    if (EqualIgnoringASCIICase(value, "false")) {
+      AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kMathStyle,
+                                              CSSValueID::kInline);
+    } else if (EqualIgnoringASCIICase(value, "true")) {
+      AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kMathStyle,
+                                              CSSValueID::kDisplay);
+    }
   } else {
     Element::CollectStyleForPresentationAttribute(name, value, style);
   }
diff --git a/third_party/blink/renderer/core/messaging/message_port.cc b/third_party/blink/renderer/core/messaging/message_port.cc
index 3f6c716..3e71122 100644
--- a/third_party/blink/renderer/core/messaging/message_port.cc
+++ b/third_party/blink/renderer/core/messaging/message_port.cc
@@ -48,13 +48,6 @@
 
 namespace blink {
 
-// TODO(altimin): Remove these after per-task mojo dispatching.
-// The maximum number of MessageEvents to dispatch from one task.
-constexpr int kMaximumMessagesPerTask = 200;
-// The threshold to stop processing new tasks.
-constexpr base::TimeDelta kYieldThreshold =
-    base::TimeDelta::FromMilliseconds(50);
-
 MessagePort::MessagePort(ExecutionContext& execution_context)
     : ExecutionContextLifecycleObserver(&execution_context),
       task_runner_(execution_context.GetTaskRunner(TaskType::kPostedMessage)) {}
@@ -266,21 +259,6 @@
 bool MessagePort::Accept(mojo::Message* mojo_message) {
   TRACE_EVENT0("blink", "MessagePort::Accept");
 
-  // Connector repeatedly calls Accept as long as any messages are available. To
-  // avoid completely starving the event loop and give some time for other tasks
-  // the connector is temporarily paused after |kMaximumMessagesPerTask| have
-  // been received without other tasks having had a chance to run (in particular
-  // the ResetMessageCount task posted here).
-  // TODO(altimin): Remove this after per-task mojo dispatching lands[1].
-  // [1] https://chromium-review.googlesource.com/c/chromium/src/+/1145692
-  if (messages_in_current_task_ == 0) {
-    task_runner_->PostTask(FROM_HERE, WTF::Bind(&MessagePort::ResetMessageCount,
-                                                WrapWeakPersistent(this)));
-  }
-  if (ShouldYieldAfterNewMessage()) {
-    connector_->PauseIncomingMethodCallProcessing();
-  }
-
   BlinkTransferableMessage message;
   if (!mojom::blink::TransferableMessage::DeserializeFromMessage(
           std::move(*mojo_message), &message)) {
@@ -348,23 +326,4 @@
                               user_activation);
 }
 
-void MessagePort::ResetMessageCount() {
-  DCHECK_GT(messages_in_current_task_, 0);
-  messages_in_current_task_ = 0;
-  task_start_time_ = base::nullopt;
-  // No-op if not paused already.
-  if (connector_)
-    connector_->ResumeIncomingMethodCallProcessing();
-}
-
-bool MessagePort::ShouldYieldAfterNewMessage() {
-  ++messages_in_current_task_;
-  if (messages_in_current_task_ > kMaximumMessagesPerTask)
-    return true;
-  base::TimeTicks now = base::TimeTicks::Now();
-  if (!task_start_time_)
-    task_start_time_ = now;
-  return now - task_start_time_.value() > kYieldThreshold;
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/messaging/message_port.h b/third_party/blink/renderer/core/messaging/message_port.h
index b291c3f..d248044 100644
--- a/third_party/blink/renderer/core/messaging/message_port.h
+++ b/third_party/blink/renderer/core/messaging/message_port.h
@@ -135,18 +135,13 @@
  private:
   // mojo::MessageReceiver implementation.
   bool Accept(mojo::Message*) override;
-  void ResetMessageCount();
-  bool ShouldYieldAfterNewMessage();
   Event* CreateMessageEvent(BlinkTransferableMessage& message);
 
   std::unique_ptr<mojo::Connector> connector_;
-  int messages_in_current_task_ = 0;
 
   bool started_ = false;
   bool closed_ = false;
 
-  base::Optional<base::TimeTicks> task_start_time_;
-
   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
 };
 
diff --git a/third_party/blink/renderer/core/paint/box_painter.cc b/third_party/blink/renderer/core/paint/box_painter.cc
index 1027a56..be14cf8 100644
--- a/third_party/blink/renderer/core/paint/box_painter.cc
+++ b/third_party/blink/renderer/core/paint/box_painter.cc
@@ -118,20 +118,6 @@
     RecordScrollHitTestData(paint_info, *background_client);
 }
 
-bool BoxPainter::BackgroundIsKnownToBeOpaque(const PaintInfo& paint_info) {
-  // If the box has multiple fragments, its VisualRect is the bounding box of
-  // all fragments' visual rects, which is likely to cover areas that are not
-  // covered by painted background.
-  if (layout_box_.FirstFragment().NextFragment())
-    return false;
-
-  PhysicalRect bounds =
-      BoxDecorationData::IsPaintingScrollingBackground(paint_info, layout_box_)
-          ? layout_box_.PhysicalLayoutOverflowRect()
-          : layout_box_.PhysicalSelfVisualOverflowRect();
-  return layout_box_.BackgroundIsKnownToBeOpaqueInRect(bounds);
-}
-
 void BoxPainter::PaintBoxDecorationBackgroundWithRect(
     const PaintInfo& paint_info,
     const PhysicalRect& paint_rect,
@@ -156,11 +142,6 @@
                            DisplayItem::kBoxDecorationBackground);
   GraphicsContextStateSaver state_saver(paint_info.context, false);
 
-  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled() &&
-      paint_rect.EdgesOnPixelBoundaries() &&
-      BackgroundIsKnownToBeOpaque(paint_info))
-    recorder.SetKnownToBeOpaque();
-
   bool needs_end_layer = false;
   // FIXME: Should eventually give the theme control over whether the box
   // shadow should paint, since controls could have custom shadows of their
diff --git a/third_party/blink/renderer/core/paint/box_painter.h b/third_party/blink/renderer/core/paint/box_painter.h
index 0207198..1832298 100644
--- a/third_party/blink/renderer/core/paint/box_painter.h
+++ b/third_party/blink/renderer/core/paint/box_painter.h
@@ -51,7 +51,6 @@
                                const DisplayItemClient& background_client);
 
  private:
-  bool BackgroundIsKnownToBeOpaque(const PaintInfo&);
   void PaintBackground(const PaintInfo&,
                        const PhysicalRect&,
                        const Color& background_color,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
index a7fbafc..e8ff0f43f 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -833,24 +833,6 @@
 
 // TODO(kojii): This logic is kept in sync with BoxPainter. Not much efforts to
 // eliminate LayoutObject dependency were done yet.
-bool NGBoxFragmentPainter::BackgroundIsKnownToBeOpaque(
-    const PaintInfo& paint_info) {
-  const LayoutBox& layout_box = ToLayoutBox(*box_fragment_.GetLayoutObject());
-
-  // If the box has multiple fragments, its VisualRect is the bounding box of
-  // all fragments' visual rects, which is likely to cover areas that are not
-  // covered by painted background.
-  if (layout_box.FirstFragment().NextFragment())
-    return false;
-
-  PhysicalRect bounds = IsPaintingScrollingBackground(paint_info)
-                            ? layout_box.PhysicalLayoutOverflowRect()
-                            : layout_box.PhysicalSelfVisualOverflowRect();
-  return layout_box.BackgroundIsKnownToBeOpaqueInRect(bounds);
-}
-
-// TODO(kojii): This logic is kept in sync with BoxPainter. Not much efforts to
-// eliminate LayoutObject dependency were done yet.
 void NGBoxFragmentPainter::PaintBoxDecorationBackgroundWithRect(
     const PaintInfo& paint_info,
     const PhysicalRect& paint_rect,
@@ -878,11 +860,6 @@
                            DisplayItem::kBoxDecorationBackground);
   GraphicsContextStateSaver state_saver(paint_info.context, false);
 
-  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled() &&
-      paint_rect.EdgesOnPixelBoundaries() &&
-      BackgroundIsKnownToBeOpaque(paint_info))
-    recorder.SetKnownToBeOpaque();
-
   const NGBorderEdges& border_edges = BorderEdges();
   if (box_decoration_data.ShouldPaintShadow()) {
     PaintNormalBoxShadow(paint_info, paint_rect, style, border_edges.line_left,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h
index 4d1401b..5fe1f5f 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h
+++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h
@@ -110,7 +110,6 @@
                                             const PhysicalRect&,
                                             const DisplayItemClient&);
   void PaintColumnRules(const PaintInfo&, const PhysicalOffset& paint_offset);
-  bool BackgroundIsKnownToBeOpaque(const PaintInfo&);
 
   void PaintInternal(const PaintInfo&);
   void PaintAllPhasesAtomically(const PaintInfo&);
diff --git a/third_party/blink/renderer/core/paint/view_painter.cc b/third_party/blink/renderer/core/paint/view_painter.cc
index 598bc0e..1ce2481e 100644
--- a/third_party/blink/renderer/core/paint/view_painter.cc
+++ b/third_party/blink/renderer/core/paint/view_painter.cc
@@ -358,9 +358,6 @@
     context.GetPaintController().SetFirstPainted();
 
   if (combined_background_color.Alpha()) {
-    if (!combined_background_color.HasAlpha() &&
-        RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
-      recorder.SetKnownToBeOpaque();
     context.FillRect(
         paint_rect, combined_background_color,
         (should_draw_background_in_separate_buffer || should_clear_canvas)
diff --git a/third_party/blink/renderer/modules/canvas/htmlcanvas/html_canvas_element_module_test.cc b/third_party/blink/renderer/modules/canvas/htmlcanvas/html_canvas_element_module_test.cc
index 557a5eb0..d20b64e 100644
--- a/third_party/blink/renderer/modules/canvas/htmlcanvas/html_canvas_element_module_test.cc
+++ b/third_party/blink/renderer/modules/canvas/htmlcanvas/html_canvas_element_module_test.cc
@@ -96,11 +96,8 @@
 // Verifies that a desynchronized canvas has the appropriate opacity/blending
 // information sent to the CompositorFrameSink.
 TEST_P(HTMLCanvasElementModuleTest, LowLatencyCanvasCompositorFrameOpacity) {
-#if defined(OS_MACOSX)
   // TODO(crbug.com/922218): enable desynchronized on Mac.
-  return;
-#endif
-
+#if !defined(OS_MACOSX)
   // This test relies on GpuMemoryBuffers being supported and enabled for low
   // latency canvas.  The latter is true only on ChromeOS in production.
   ScopedTestingPlatformSupport<LowLatencyTestPlatform> platform;
@@ -165,6 +162,7 @@
   platform->RunUntilIdle();
 
   SharedGpuContext::ResetForTesting();
+#endif
 }
 
 INSTANTIATE_TEST_SUITE_P(All, HTMLCanvasElementModuleTest, Values(true, false));
diff --git a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc
index ad4ed9a..506b0ab 100644
--- a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc
+++ b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc
@@ -59,11 +59,11 @@
 
 namespace {
 
-using mojom::blink::CredentialManagerError;
+using mojom::blink::AuthenticatorStatus;
 using mojom::blink::CredentialInfo;
 using mojom::blink::CredentialInfoPtr;
+using mojom::blink::CredentialManagerError;
 using mojom::blink::CredentialMediationRequirement;
-using mojom::blink::AuthenticatorStatus;
 using MojoPublicKeyCredentialCreationOptions =
     mojom::blink::PublicKeyCredentialCreationOptions;
 using mojom::blink::MakeCredentialAuthenticatorResponsePtr;
@@ -531,11 +531,10 @@
 
   if (options->hasPublicKey()) {
     auto cryptotoken_origin = SecurityOrigin::Create(KURL(kCryptotokenOrigin));
-    if (cryptotoken_origin->IsSameOriginWith(
+    if (!cryptotoken_origin->IsSameOriginWith(
             resolver->GetFrame()->GetSecurityContext()->GetSecurityOrigin())) {
-      UseCounter::Count(resolver->GetExecutionContext(),
-                        WebFeature::kU2FCryptotokenSign);
-    } else {
+      // Cryptotoken requests are recorded as kU2FCryptotokenSign from within
+      // the extension.
       UseCounter::Count(resolver->GetExecutionContext(),
                         WebFeature::kCredentialManagerGetPublicKeyCredential);
     }
@@ -764,11 +763,10 @@
   } else {
     DCHECK(options->hasPublicKey());
     auto cryptotoken_origin = SecurityOrigin::Create(KURL(kCryptotokenOrigin));
-    if (cryptotoken_origin->IsSameOriginWith(
+    if (!cryptotoken_origin->IsSameOriginWith(
             resolver->GetFrame()->GetSecurityContext()->GetSecurityOrigin())) {
-      UseCounter::Count(resolver->GetExecutionContext(),
-                        WebFeature::kU2FCryptotokenRegister);
-    } else {
+      // Cryptotoken requests are recorded as kU2FCryptotokenRegister from
+      // within the extension.
       UseCounter::Count(
           resolver->GetExecutionContext(),
           WebFeature::kCredentialManagerCreatePublicKeyCredential);
diff --git a/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.cc b/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.cc
index 487a99c..ddb46cf 100644
--- a/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.cc
+++ b/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.cc
@@ -547,6 +547,23 @@
   }
 }
 
+void P2PQuicTransportImpl::OnOneRttKeysAvailable() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  QuicSession::OnOneRttKeysAvailable();
+  DCHECK(IsEncryptionEstablished());
+  DCHECK(OneRttKeysAvailable());
+  P2PQuicNegotiatedParams negotiated_params;
+  // The guaranteed largest message payload will not change throughout the
+  // connection.
+  uint16_t max_datagram_length =
+      quic::QuicSession::GetGuaranteedLargestMessagePayload();
+  if (max_datagram_length > 0) {
+    // Datagrams are supported in this case.
+    negotiated_params.set_max_datagram_length(max_datagram_length);
+  }
+  delegate_->OnConnected(negotiated_params);
+}
+
 void P2PQuicTransportImpl::OnCanWrite() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   while (!datagram_buffer_.empty()) {
diff --git a/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.h b/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.h
index 15866ac..376cecb 100644
--- a/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.h
+++ b/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_impl.h
@@ -140,6 +140,7 @@
   P2PQuicStreamImpl* CreateOutgoingBidirectionalStream();
 
   void SetDefaultEncryptionLevel(quic::EncryptionLevel level) override;
+  void OnOneRttKeysAvailable() override;
 
  private:
   // This is for testing connection failures and handshake failures.
diff --git a/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_test.cc b/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_test.cc
index 3052a70..94a1c8e 100644
--- a/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/adapters/p2p_quic_transport_test.cc
@@ -482,7 +482,12 @@
     session()->config()->ProcessPeerHello(message, quic::CLIENT,
                                           &error_details);
     session()->OnConfigNegotiated();
-    session()->SetDefaultEncryptionLevel(quic::ENCRYPTION_FORWARD_SECURE);
+    if (session()->connection()->version().handshake_protocol ==
+        quic::PROTOCOL_TLS1_3) {
+      session()->OnOneRttKeysAvailable();
+    } else {
+      session()->SetDefaultEncryptionLevel(quic::ENCRYPTION_FORWARD_SECURE);
+    }
     session()->DiscardOldEncryptionKey(quic::ENCRYPTION_INITIAL);
     session()->NeuterHandshakeData();
     return true;
diff --git a/third_party/blink/renderer/platform/geometry/region.cc b/third_party/blink/renderer/platform/geometry/region.cc
index a90abdc..54a4ce33 100644
--- a/third_party/blink/renderer/platform/geometry/region.cc
+++ b/third_party/blink/renderer/platform/geometry/region.cc
@@ -327,7 +327,7 @@
   return segments_.data() + segment_index;
 }
 
-#ifndef NDEBUG
+#if DCHECK_IS_ON()
 void Region::Shape::Dump() const {
   for (Shape::SpanIterator span = SpansBegin(), end = SpansEnd(); span != end;
        ++span) {
@@ -570,7 +570,7 @@
   return ShapeOperation<SubtractOperation>(shape1, shape2);
 }
 
-#ifndef NDEBUG
+#if DCHECK_IS_ON()
 void Region::Dump() const {
   printf("Bounds: (%d, %d, %d, %d)\n", bounds_.X(), bounds_.Y(),
          bounds_.Width(), bounds_.Height());
diff --git a/third_party/blink/renderer/platform/geometry/region.h b/third_party/blink/renderer/platform/geometry/region.h
index d34815c..581d4df4 100644
--- a/third_party/blink/renderer/platform/geometry/region.h
+++ b/third_party/blink/renderer/platform/geometry/region.h
@@ -73,7 +73,11 @@
 
   uint64_t Area() const;
 
-#ifndef NDEBUG
+  wtf_size_t Complexity() const {
+    return shape_.SpansSize() + shape_.SegmentsSize();
+  }
+
+#if DCHECK_IS_ON()
   void Dump() const;
 #endif
 
@@ -130,7 +134,7 @@
     static bool CompareShapes(const Shape& shape1, const Shape& shape2);
     void TrimCapacities();
 
-#ifndef NDEBUG
+#if DCHECK_IS_ON()
     void Dump() const;
 #endif
 
diff --git a/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image.cc b/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image.cc
index 0038f56e..08d74cb 100644
--- a/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image.cc
+++ b/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image.cc
@@ -10,6 +10,7 @@
 #include "components/viz/common/resources/single_release_callback.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
+#include "gpu/command_buffer/client/raster_interface.h"
 #include "gpu/command_buffer/client/shared_image_interface.h"
 #include "gpu/command_buffer/common/sync_token.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -74,10 +75,10 @@
   auto* release_ctx = static_cast<ReleaseContext*>(ctx);
   if (release_ctx->context_provider_wrapper) {
     if (release_ctx->texture_id) {
-      auto* gl =
-          release_ctx->context_provider_wrapper->ContextProvider()->ContextGL();
-      gl->EndSharedImageAccessDirectCHROMIUM(release_ctx->texture_id);
-      gl->DeleteTextures(1u, &release_ctx->texture_id);
+      auto* ri = release_ctx->context_provider_wrapper->ContextProvider()
+                     ->RasterInterface();
+      ri->EndSharedImageAccessDirectCHROMIUM(release_ctx->texture_id);
+      ri->DeleteGpuRasterTexture(release_ctx->texture_id);
     }
   }
 
@@ -274,11 +275,11 @@
   if (!context_provider_wrapper)
     return;
 
-  gpu::gles2::GLES2Interface* shared_gl =
-      context_provider_wrapper->ContextProvider()->ContextGL();
+  gpu::raster::RasterInterface* shared_ri =
+      context_provider_wrapper->ContextProvider()->RasterInterface();
   GrContext* shared_gr_context =
       context_provider_wrapper->ContextProvider()->GetGrContext();
-  DCHECK(shared_gl &&
+  DCHECK(shared_ri &&
          shared_gr_context);  // context isValid already checked in callers
 
   GLuint shared_context_texture_id = 0u;
@@ -288,12 +289,12 @@
     shared_context_texture_id = shared_image_texture_id;
     should_delete_texture_on_release = false;
   } else {
-    shared_gl->WaitSyncTokenCHROMIUM(
+    shared_ri->WaitSyncTokenCHROMIUM(
         mailbox_ref_->GetOrCreateSyncToken(context_provider_wrapper)
             .GetConstData());
     shared_context_texture_id =
-        shared_gl->CreateAndTexStorage2DSharedImageCHROMIUM(mailbox_.name);
-    shared_gl->BeginSharedImageAccessDirectCHROMIUM(
+        shared_ri->CreateAndConsumeForGpuRaster(mailbox_);
+    shared_ri->BeginSharedImageAccessDirectCHROMIUM(
         shared_context_texture_id, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
   }
 
diff --git a/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.cc b/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.cc
index 0ab4e34..5e150bb 100644
--- a/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.cc
@@ -11,14 +11,9 @@
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkData.h"
 
-namespace blink {
+#include "third_party/blink/renderer/platform/graphics/logging_canvas.h"
 
-#if DCHECK_IS_ON()
-void DrawingDisplayItem::PropertiesAsJSON(JSONObject& json) const {
-  DisplayItem::PropertiesAsJSON(json);
-  json.SetBoolean("opaque", known_to_be_opaque_);
-}
-#endif
+namespace blink {
 
 static SkBitmap RecordToBitmap(sk_sp<const PaintRecord> record,
                                const IntRect& bounds) {
@@ -83,4 +78,114 @@
   return BitmapsEqual(std::move(record), std::move(other_record), bounds);
 }
 
+SkColor DrawingDisplayItem::BackgroundColor() const {
+  if (GetType() != DisplayItem::kBoxDecorationBackground &&
+      GetType() != DisplayItem::kDocumentBackground)
+    return SK_ColorTRANSPARENT;
+
+  if (!record_)
+    return SK_ColorTRANSPARENT;
+
+  for (cc::PaintOpBuffer::Iterator it(record_.get()); it; ++it) {
+    const auto* op = *it;
+    if (op->GetType() == cc::PaintOpType::DrawRect ||
+        op->GetType() == cc::PaintOpType::DrawRRect) {
+      const auto& flags = static_cast<const cc::PaintOpWithFlags*>(op)->flags;
+      // Skip op with looper or shader which may modify the color.
+      if (!flags.getLooper() && !flags.getShader() &&
+          flags.getStyle() == cc::PaintFlags::kFill_Style)
+        return flags.getColor();
+    }
+  }
+  return SK_ColorTRANSPARENT;
+}
+
+// This is not a PaintRecord method because it's not a general opaqueness
+// detection algorithm (which might be more complex and slower), but works well
+// and fast for most blink painted results.
+bool DrawingDisplayItem::CalculateKnownToBeOpaque(
+    const PaintRecord* record) const {
+  if (!record)
+    return false;
+
+  // This limit keeps the algorithm fast, while allowing check of enough paint
+  // operations for most blink painted results.
+  constexpr wtf_size_t kOpCountLimit = 4;
+  wtf_size_t op_count = 0;
+  for (cc::PaintOpBuffer::Iterator it(record); it; ++it) {
+    if (++op_count > kOpCountLimit)
+      return false;
+
+    const auto* op = *it;
+    // Deal with the common pattern of clipped bleed avoiding images like:
+    // Save, ClipRect, Draw..., Restore.
+    if (op->GetType() == cc::PaintOpType::Save)
+      continue;
+    if (op->GetType() == cc::PaintOpType::ClipRect) {
+      const auto* clip_rect_op = static_cast<const cc::ClipRectOp*>(op);
+      if (!EnclosedIntRect(clip_rect_op->rect).Contains(VisualRect()))
+        return false;
+      continue;
+    }
+
+    if (!op->IsDrawOp())
+      return false;
+
+    if (op->GetType() == cc::PaintOpType::DrawRecord) {
+      return CalculateKnownToBeOpaque(
+          static_cast<const cc::DrawRecordOp*>(op)->record.get());
+    }
+
+    if (!op->IsPaintOpWithFlags())
+      continue;
+
+    const auto& flags = static_cast<const cc::PaintOpWithFlags*>(op)->flags;
+    if (flags.getStyle() != cc::PaintFlags::kFill_Style || flags.getLooper() ||
+        (flags.getBlendMode() != SkBlendMode::kSrc &&
+         flags.getBlendMode() != SkBlendMode::kSrcOver) ||
+        flags.getMaskFilter() || flags.getColorFilter() ||
+        flags.getImageFilter() || flags.getAlpha() != SK_AlphaOPAQUE ||
+        (flags.getShader() && !flags.getShader()->IsOpaque()))
+      continue;
+
+    IntRect opaque_rect;
+    switch (op->GetType()) {
+      case cc::PaintOpType::DrawRect:
+        opaque_rect =
+            EnclosedIntRect(static_cast<const cc::DrawRectOp*>(op)->rect);
+        break;
+      case cc::PaintOpType::DrawIRect:
+        opaque_rect = IntRect(static_cast<const cc::DrawIRectOp*>(op)->rect);
+        break;
+      case cc::PaintOpType::DrawImage: {
+        const auto* draw_image_op = static_cast<const cc::DrawImageOp*>(op);
+        const auto& image = draw_image_op->image;
+        if (!image.IsOpaque())
+          continue;
+        opaque_rect = IntRect(draw_image_op->left, draw_image_op->top,
+                              image.width(), image.height());
+        break;
+      }
+      case cc::PaintOpType::DrawImageRect: {
+        const auto* draw_image_rect_op =
+            static_cast<const cc::DrawImageRectOp*>(op);
+        const auto& image = draw_image_rect_op->image;
+        DCHECK(SkRect::MakeWH(image.width(), image.height())
+                   .contains(draw_image_rect_op->src));
+        if (!image.IsOpaque())
+          continue;
+        opaque_rect = EnclosedIntRect(draw_image_rect_op->dst);
+        break;
+      }
+      default:
+        continue;
+    }
+
+    // We should never paint outside of the visual rect.
+    if (opaque_rect.Contains(VisualRect()))
+      return true;
+  }
+  return false;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.h b/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.h
index bd7b35f..636a26c 100644
--- a/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.h
+++ b/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.h
@@ -30,41 +30,38 @@
   DISABLE_CFI_PERF
   DrawingDisplayItem(const DisplayItemClient& client,
                      Type type,
-                     sk_sp<const PaintRecord> record,
-                     bool known_to_be_opaque = false);
+                     sk_sp<const PaintRecord> record);
 
   const sk_sp<const PaintRecord>& GetPaintRecord() const { return record_; }
 
-  bool KnownToBeOpaque() const {
-    DCHECK(RuntimeEnabledFeatures::CompositeAfterPaintEnabled());
-    return known_to_be_opaque_;
-  }
-
   bool Equals(const DisplayItem& other) const final;
 
+  bool KnownToBeOpaque() const {
+    if (!known_to_be_opaque_.has_value())
+      known_to_be_opaque_.emplace(CalculateKnownToBeOpaque(record_.get()));
+    return *known_to_be_opaque_;
+  }
+  void SetKnownToBeOpaqueForTesting() { known_to_be_opaque_.emplace(true); }
+
+  SkColor BackgroundColor() const;
+
  private:
-#if DCHECK_IS_ON()
-  void PropertiesAsJSON(JSONObject&) const final;
-#endif
+  bool CalculateKnownToBeOpaque(const PaintRecord*) const;
 
   sk_sp<const PaintRecord> record_;
-
-  // True if there are no transparent areas. Only used for CompositeAfterPaint.
-  const bool known_to_be_opaque_;
+  mutable base::Optional<bool> known_to_be_opaque_;
 };
 
 // TODO(dcheng): Move this ctor back inline once the clang plugin is fixed.
 DISABLE_CFI_PERF
 inline DrawingDisplayItem::DrawingDisplayItem(const DisplayItemClient& client,
                                               Type type,
-                                              sk_sp<const PaintRecord> record,
-                                              bool known_to_be_opaque)
+                                              sk_sp<const PaintRecord> record)
     : DisplayItem(client,
                   type,
                   sizeof(*this),
                   /* draws_content*/ record && record->size()),
-      record_(DrawsContent() ? std::move(record) : nullptr),
-      known_to_be_opaque_(known_to_be_opaque) {
+      record_(DrawsContent() ? std::move(record) : nullptr) {
   DCHECK(IsDrawingType(type));
 }
 
diff --git a/third_party/blink/renderer/platform/graphics/paint/drawing_recorder.cc b/third_party/blink/renderer/platform/graphics/paint/drawing_recorder.cc
index ef5b55b..837a65d 100644
--- a/third_party/blink/renderer/platform/graphics/paint/drawing_recorder.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/drawing_recorder.cc
@@ -23,8 +23,7 @@
                                  DisplayItem::Type display_item_type)
     : context_(context),
       client_(display_item_client),
-      type_(display_item_type),
-      known_to_be_opaque_(false)
+      type_(display_item_type)
 #if DCHECK_IS_ON()
       ,
       initial_display_item_list_size_(
@@ -65,7 +64,7 @@
 #endif
 
   context_.GetPaintController().CreateAndAppend<DrawingDisplayItem>(
-      client_, type_, context_.EndRecording(), known_to_be_opaque_);
+      client_, type_, context_.EndRecording());
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h b/third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h
index 31b052f..3437f8d 100644
--- a/third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h
+++ b/third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h
@@ -50,20 +50,12 @@
 
   ~DrawingRecorder();
 
-  void SetKnownToBeOpaque() {
-    DCHECK(RuntimeEnabledFeatures::CompositeAfterPaintEnabled());
-    known_to_be_opaque_ = true;
-  }
-
  private:
   GraphicsContext& context_;
   const DisplayItemClient& client_;
   const DisplayItem::Type type_;
   base::Optional<DOMNodeId> dom_node_id_to_restore_;
 
-  // True if there are no transparent areas. Only used for CompositeAfterPaint.
-  bool known_to_be_opaque_;
-
 #if DCHECK_IS_ON()
   // Ensures the list size does not change during the recorder's scope.
   wtf_size_t initial_display_item_list_size_;
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_artifact.cc b/third_party/blink/renderer/platform/graphics/paint/paint_artifact.cc
index 63718d8..648cba4a 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_artifact.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_artifact.cc
@@ -15,29 +15,6 @@
 
 namespace {
 
-static SkColor DisplayItemBackgroundColor(const DisplayItem& item) {
-  if (item.GetType() != DisplayItem::kBoxDecorationBackground &&
-      item.GetType() != DisplayItem::kDocumentBackground)
-    return SK_ColorTRANSPARENT;
-
-  const auto& drawing_item = static_cast<const DrawingDisplayItem&>(item);
-  const auto record = drawing_item.GetPaintRecord();
-  if (!record)
-    return SK_ColorTRANSPARENT;
-
-  for (cc::PaintOpBuffer::Iterator it(record.get()); it; ++it) {
-    const auto* op = *it;
-    if (op->GetType() == cc::PaintOpType::DrawRect ||
-        op->GetType() == cc::PaintOpType::DrawRRect) {
-      const auto& flags = static_cast<const cc::PaintOpWithFlags*>(op)->flags;
-      // Skip op with looper which may modify the color.
-      if (!flags.getLooper() && flags.getStyle() == cc::PaintFlags::kFill_Style)
-        return flags.getColor();
-    }
-  }
-  return SK_ColorTRANSPARENT;
-}
-
 // For PaintArtifact::AppendDebugDrawing().
 class DebugDrawingClient final : public DisplayItemClient {
  public:
@@ -119,11 +96,11 @@
 
 SkColor PaintArtifact::SafeOpaqueBackgroundColor(
     const PaintChunkSubset& chunks) const {
-  // Find the background color from the first drawable display item.
+  // Find the background color from the first drawing display item.
   for (const auto& chunk : chunks) {
     for (const auto& item : display_item_list_.ItemsInPaintChunk(chunk)) {
-      if (item.DrawsContent())
-        return DisplayItemBackgroundColor(item);
+      if (item.IsDrawing() && item.DrawsContent())
+        return static_cast<const DrawingDisplayItem&>(item).BackgroundColor();
     }
   }
   return SK_ColorTRANSPARENT;
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_chunker.cc b/third_party/blink/renderer/platform/graphics/paint/paint_chunker.cc
index 65776c3..87669274 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_chunker.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_chunker.cc
@@ -82,9 +82,10 @@
   if (item.DrawsContent())
     chunk.drawable_bounds.Unite(item.VisualRect());
 
-  if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled() &&
-      item.IsDrawing() &&
-      static_cast<const DrawingDisplayItem&>(item).KnownToBeOpaque())
+  constexpr wtf_size_t kMaxRegionComplexity = 10;
+  if (item.IsDrawing() &&
+      static_cast<const DrawingDisplayItem&>(item).KnownToBeOpaque() &&
+      last_chunk_known_to_be_opaque_region_.Complexity() < kMaxRegionComplexity)
     last_chunk_known_to_be_opaque_region_.Unite(item.VisualRect());
 
   chunk.outset_for_raster_effects =
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_chunker_test.cc b/third_party/blink/renderer/platform/graphics/paint/paint_chunker_test.cc
index e8d7b04..d474d4e 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_chunker_test.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_chunker_test.cc
@@ -44,7 +44,8 @@
   explicit TestChunkerOpaqueDisplayItem(
       const DisplayItemClient& client,
       DisplayItem::Type type = DisplayItem::kDrawingFirst)
-      : DrawingDisplayItem(client, type, nullptr, /*known_to_be_opaque*/ true) {
+      : DrawingDisplayItem(client, type, nullptr) {
+    SetKnownToBeOpaqueForTesting();
   }
 };
 
diff --git a/third_party/blink/web_tests/FlagExpectations/composite-after-paint b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
index 4f2e9ce..827587d 100644
--- a/third_party/blink/web_tests/FlagExpectations/composite-after-paint
+++ b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
@@ -132,9 +132,6 @@
 # Missing WheelEventHandler
 http/tests/devtools/layers/layer-scroll-rects-get.js [ Failure ]
 
-# Wrong contentsOpaque of the scrollbar layer with transparent track.
-fast/frames/transparent-scrollbar.html [ Failure ]
-
 # Crash on non-contiguous effect on multiple columns
 fast/multicol/composited-layer-will-change.html [ Crash ]
 paint/clipath/change-mask-clip-path-multicol-crash.html [ Crash ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 48eda45..baf3476 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -2949,8 +2949,6 @@
 crbug.com/947951 [ Win ] external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html [ Pass Timeout ]
 
 # ====== New tests from wpt-importer added here ======
-crbug.com/626703 external/wpt/paint-timing/fcp-only/fcp-video-frame.html [ Timeout Failure Crash Pass ]
-crbug.com/626703 virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-video-frame.html [ Timeout Failure Crash Pass ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-text/line-break/line-break-strict-015.xht [ Failure ]
 crbug.com/626703 [ Mac ] external/wpt/css/css-text/line-break/line-break-strict-015.xht [ Failure ]
 crbug.com/626703 [ Win ] external/wpt/css/css-text/line-break/line-break-strict-015.xht [ Failure ]
@@ -5547,6 +5545,12 @@
 crbug.com/1062984 virtual/paint-timing/external/wpt/paint-timing/replaced-content-image.html [ Pass Failure ]
 crbug.com/1062984 external/wpt/paint-timing/mask-image.html [ Pass Failure ]
 crbug.com/1062984 virtual/paint-timing/external/wpt/paint-timing/mask-image.html [ Pass Failure ]
+crbug.com/1062984 external/wpt/paint-timing/fcp-only/fcp-video-frame.html [ Timeout Failure Pass ]
+crbug.com/1062984 virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-video-frame.html [ Timeout Failure Pass ]
+crbug.com/1062984 virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-gradient.html [ Pass Failure ]
+crbug.com/1062984 virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-canvas-context.html [ Pass Failure ]
+crbug.com/1062984 external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html [ Pass Failure ]
+crbug.com/1062984 virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html [ Pass Failure ]
 
 # Sheriff 2019-03-01
 crbug.com/937416 http/tests/devtools/resource-tree/resource-tree-htmlimports.js [ Pass Failure ]
diff --git a/third_party/blink/web_tests/animations/events/animation-iteration-event.html b/third_party/blink/web_tests/animations/events/animation-iteration-event.html
new file mode 100644
index 0000000..36699b0
--- /dev/null
+++ b/third_party/blink/web_tests/animations/events/animation-iteration-event.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<title>Tests that correct number of iteration events is fired.</title>
+<style>
+  #box {
+    position: relative;
+    left: 100px;
+    top: 10px;
+    height: 100px;
+    width: 100px;
+    animation-duration: 0.1s;
+    animation-name: anim;
+    background-color: #999;
+    animation-iteration-count: 2;
+  }
+  @keyframes anim {
+      from { left: 200px; }
+      to   { left: 300px; }
+  }
+</style>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script>
+var count = 0;
+async_test(t => {
+  window.addEventListener("load", t.step_func(() => {
+    document.addEventListener('animationiteration', t.step_func(() => {
+      ++count;
+    }));
+
+    document.addEventListener('animationend', t.step_func_done(() => {
+      assert_equals(count, 1, 'Got correct number of animationCount events');
+    }));
+
+    // Animation begins once we append the DOM node to the document.
+    var boxNode = document.createElement('div');
+    boxNode.id = 'box';
+    document.body.appendChild(boxNode);
+  }));
+}, "Tests that correct number of iteration events is fired");
+</script>
diff --git a/third_party/blink/web_tests/css3/flexbox/align-baseline.html b/third_party/blink/web_tests/css3/flexbox/align-baseline.html
deleted file mode 100644
index 2073104..0000000
--- a/third_party/blink/web_tests/css3/flexbox/align-baseline.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html>
-<link href="resources/flexbox.css" rel="stylesheet">
-<style>
-body {
-    margin: 0;
-}
-</style>
-
-<body>
-<div class='flexbox column align-items-baseline'>
-    <h1>This text</h1>
-    <p>should be left aligned.</p>
-</div>
-
-<div class='flexbox column align-items-baseline wrap-reverse'>
-    <h1>This text</h1>
-    <p>should be right aligned.</p>
-</div>
-</body>
-
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-baseline.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-baseline.html
new file mode 100644
index 0000000..31bcca6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/align-baseline.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<link href="support/flexbox.css" rel="stylesheet">
+<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#valdef-align-items-baseline">
+<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#valdef-flex-direction-column">
+<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#valdef-flex-wrap-wrap-reverse">
+<link rel="match" href="reference/align-baseline-ref.html">
+<style>
+body {
+    margin: 0;
+}
+</style>
+
+<body>
+<div class='flexbox column align-items-baseline'>
+    <h1>This text</h1>
+    <p>should be left aligned.</p>
+</div>
+
+<div class='flexbox column align-items-baseline wrap-reverse'>
+    <h1>This text</h1>
+    <p>should be right aligned.</p>
+</div>
+</body>
+
+</html>
diff --git a/third_party/blink/web_tests/css3/flexbox/align-baseline-expected.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/reference/align-baseline-ref.html
similarity index 85%
rename from third_party/blink/web_tests/css3/flexbox/align-baseline-expected.html
rename to third_party/blink/web_tests/external/wpt/css/css-flexbox/reference/align-baseline-ref.html
index 074433d..d5b88e8 100644
--- a/third_party/blink/web_tests/css3/flexbox/align-baseline-expected.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/reference/align-baseline-ref.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <html>
-<link href="resources/flexbox.css" rel="stylesheet">
+<link href="../support/flexbox.css" rel="stylesheet">
 <style>
 body {
     margin: 0;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/stretch-obeys-min-max-001.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/stretch-obeys-min-max-001.html
new file mode 100644
index 0000000..4b7eb5a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/stretch-obeys-min-max-001.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>item's min/max cross sizes</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#definite-sizes" title="Bullet 1">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<meta name="flags" content="" />
+<meta name="assert" content="specified max cross size on stretched items is honored pre-flexing" />
+
+<style>
+.inline-block {
+  display: inline-block;
+  width: 40px;
+  height: 50px;
+}
+
+#reference-overlapped-red {
+  position: absolute;
+  background-color: red;
+  width: 100px;
+  height: 100px;
+  z-index: -1;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div id="reference-overlapped-red"></div>
+
+<div style="display:flex; flex-direction: column; width: 100px; background: green">
+  <div style="max-width: 50px; line-height: 0px;">
+    <!-- An engine where these inline blocks don't wrap will give green height 50px. -->
+    <div class=inline-block></div><div class=inline-block></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/stretch-obeys-min-max-002.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/stretch-obeys-min-max-002.html
new file mode 100644
index 0000000..339b68a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/stretch-obeys-min-max-002.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<title>item's min/max cross sizes</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#definite-sizes" title="Bullet 1">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<meta name="flags" content="" />
+<meta name="assert" content="specified max cross size on ortho stretched items is honored pre-flexing" />
+
+<style>
+.inline-block {
+  display: inline-block;
+  width: 50px;
+  height: 55px;
+}
+
+#reference-overlapped-red {
+  position: absolute;
+  background-color: red;
+  width: 100px;
+  height: 100px;
+  z-index: -1;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div id="reference-overlapped-red"></div>
+
+<div style="display:flex; height: 110px;">
+  <div style="writing-mode: vertical-lr; max-height: 100px; line-height: 0px; background: green;">
+    <div class=inline-block></div><div class=inline-block></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/stretch-obeys-min-max-003.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/stretch-obeys-min-max-003.html
new file mode 100644
index 0000000..626cb2f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/stretch-obeys-min-max-003.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<title>item's min/max cross sizes</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#definite-sizes" title="Bullet 1">
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
+<meta name="flags" content="" />
+<meta name="assert" content="specified min cross size on stretched items is honored pre-flexing" />
+
+<style>
+.inline-block {
+  display: inline-block;
+  width: 1px;
+  height: 100px;
+}
+
+</style>
+
+<p>Test passes if there is a filled green square.</p>
+
+<div style="display:flex; flex-direction: column; width: 0px;">
+  <div style="background: green; min-width: 100px; line-height: 0px;">
+    <div class=inline-block></div><div class=inline-block></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom/CSSStyleSheet-constructable-replace-on-regular-sheet.html b/third_party/blink/web_tests/external/wpt/css/cssom/CSSStyleSheet-constructable-replace-on-regular-sheet.html
new file mode 100644
index 0000000..d059258
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/cssom/CSSStyleSheet-constructable-replace-on-regular-sheet.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>replace / replaceSync on non-constructed stylesheet</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="help" href="https://wicg.github.io/construct-stylesheets/">
+<script src = '/resources/testharness.js'></script>
+<script src = '/resources/testharnessreport.js'></script>
+<style>:root { background-color: lime }</style>
+<script>
+promise_test(async function(t) {
+  assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
+  let sheet = document.styleSheets[0];
+  assert_throws_dom("NotAllowedError", () => sheet.replaceSync(":root { background-color: red }"), "replaceSync on non-constructed sheet should throw");
+  assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
+
+  await promise_rejects_dom(t, "NotAllowedError", sheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise");
+  assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
+});
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1-expected.txt b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1-expected.txt
deleted file mode 100644
index eccd329..0000000
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-This is a testharness.js-based test.
-PASS AxisHeight
-PASS DenominatorDisplayStyleGapMin
-PASS DenominatorDisplayStyleShiftDown
-FAIL DenominatorGapMin assert_approx_equals: mfrac: denominator gap expected 40 +/- 1 but got -0.015625
-FAIL DenominatorShiftDown assert_approx_equals: mfrac: denominator shift expected 30 +/- 1 but got 0
-PASS NumeratorDisplayStyleGapMin
-PASS NumeratorDisplayStyleShiftDown
-FAIL NumeratorGapMin assert_approx_equals: mfrac: numerator gap expected 90 +/- 1 but got -0.015625
-FAIL NumeratorShiftDown assert_approx_equals: mfrac: numerator shift expected 110 +/- 1 but got 14.96875
-PASS FractionRuleThickness
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html
index b7efbc78..57b35fde 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html
@@ -93,6 +93,31 @@
     test(function() {
       assert_true(MathMLFeatureDetection.has_mspace());
 
+      var v1 = 5000 * emToPx;
+      assert_approx_equals(getBox("den0002b").top - getBox("ref0002b").bottom,
+                           v1, epsilon, "mfrac: denominator gap");
+    }, "DenominatorDisplayStyleGapMin Displaystyle");
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+      var v1 = 6000 * emToPx;
+      assert_approx_equals(getBox("den0003b").top - getBox("ref0003b").bottom,
+                           v1, epsilon, "mfrac: denominator shift");
+    }, "DenominatorDisplayStyleShiftDown Displaystyle");
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+      var v1 = 5000 * emToPx;
+      assert_approx_equals(getBox("den0002c").top - getBox("ref0002c").bottom,
+                           v1, epsilon, "mfrac: denominator gap");
+    }, "DenominatorDisplayStyleGapMin Displaystyle on fraction");
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+      var v1 = 6000 * emToPx;
+      assert_approx_equals(getBox("den0003c").top - getBox("ref0003c").bottom,
+                           v1, epsilon, "mfrac: denominator shift");
+    }, "DenominatorDisplayStyleShiftDown Displaystyle on fraction");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
       var v1 = 4000 * emToPx;
       assert_approx_equals(getBox("den0004").top - getBox("ref0004").bottom,
                            v1, epsilon, "mfrac: denominator gap");
@@ -108,6 +133,21 @@
 
     test(function() {
       assert_true(MathMLFeatureDetection.has_mspace());
+      var v1 = 4000 * emToPx;
+      assert_approx_equals(getBox("den0004b").top - getBox("ref0004b").bottom,
+                           v1, epsilon, "mfrac: denominator gap");
+    }, "DenominatorGapMin Displaystyle on fraction");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
+      var v1 = 3000 * emToPx;
+      assert_approx_equals(getBox("den0005b").top - getBox("ref0005b").bottom,
+                           v1, epsilon, "mfrac: denominator shift");
+    }, "DenominatorShiftDown Displaystyle on fraction");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
 
       var v1 = 8000 * emToPx;
       assert_approx_equals(getBox("ref0006").top - getBox("num0006").bottom,
@@ -125,6 +165,38 @@
     test(function() {
       assert_true(MathMLFeatureDetection.has_mspace());
 
+      var v1 = 8000 * emToPx;
+      assert_approx_equals(getBox("ref0006b").top - getBox("num0006b").bottom,
+                           v1, epsilon, "mfrac: numerator gap");
+    }, "NumeratorDisplayStyleGapMin Displaystyle");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
+      var v1 = 2000 * emToPx;
+      assert_approx_equals(getBox("ref0007b").top - getBox("num0007b").bottom,
+                           v1, epsilon, "mfrac: numerator shift");
+    }, "NumeratorDisplayStyleShiftDown Displaystyle");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
+      var v1 = 8000 * emToPx;
+      assert_approx_equals(getBox("ref0006c").top - getBox("num0006c").bottom,
+                           v1, epsilon, "mfrac: numerator gap");
+    }, "NumeratorDisplayStyleGapMin Displaystyle on fraction");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
+      var v1 = 2000 * emToPx;
+      assert_approx_equals(getBox("ref0007c").top - getBox("num0007c").bottom,
+                           v1, epsilon, "mfrac: numerator shift");
+    }, "NumeratorDisplayStyleShiftDown Displaystyle on fraction");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
       var v1 = 9000 * emToPx;
       assert_approx_equals(getBox("ref0008").top - getBox("num0008").bottom,
                            v1, epsilon, "mfrac: numerator gap");
@@ -184,6 +256,48 @@
   </p>
   <hr/>
   <p>
+    <math displaystyle="true" style="font-family: denominatordisplaystylegapmin5000-rulethickness1000;">
+      <mspace id="ref0002b" width="3em"
+              height=".5em" depth=".5em" style="background: green"/>
+      <mfrac>
+        <mspace width="3em"/>
+        <mspace width="3em" height="1em" id="den0002b" style="background: blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math displaystyle="true" style="font-family: denominatordisplaystyleshiftdown6000-axisheight1000-rulethickness1000;">
+      <mspace id="ref0003b" width="3em" height="1em" style="background: green"/>
+      <mfrac>
+        <mspace width="3em"/>
+        <mspace width="3em" depth="1em" id="den0003b" style="background: blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: denominatordisplaystylegapmin5000-rulethickness1000;">
+      <mspace id="ref0002c" width="3em"
+              height=".5em" depth=".5em" style="background: green"/>
+      <mfrac displaystyle="true">
+        <mspace width="3em"/>
+        <mspace width="3em" height="1em" id="den0002c" style="background: blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: denominatordisplaystyleshiftdown6000-axisheight1000-rulethickness1000;">
+      <mspace id="ref0003c" width="3em" height="1em" style="background: green"/>
+      <mfrac displaystyle="true">
+        <mspace width="3em"/>
+        <mspace width="3em" depth="1em" id="den0003c" style="background: blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
     <math style="font-family: denominatorgapmin4000-rulethickness1000;">
       <mspace id="ref0004" width="3em"
               height=".5em" depth=".5em" style="background: green"/>
@@ -205,6 +319,27 @@
   </p>
   <hr/>
   <p>
+    <math displaystyle="true" style="font-family: denominatorgapmin4000-rulethickness1000;">
+      <mspace id="ref0004b" width="3em"
+              height=".5em" depth=".5em" style="background: green"/>
+      <mfrac displaystyle="false">
+        <mspace width="3em"/>
+        <mspace width="3em" height="1em" id="den0004b" style="background: blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math displaystyle="true" style="font-family: denominatorshiftdown3000-axisheight1000-rulethickness1000;">
+      <mspace id="ref0005b" width="3em" height="1em" style="background: green"/>
+      <mfrac displaystyle="false">
+        <mspace width="3em"/>
+        <mspace width="3em" depth="1em" id="den0005b" style="background: blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
     <math display="block" style="font-family: numeratordisplaystylegapmin8000-rulethickness1000;">
       <mspace id="ref0006" width="3em"
               height=".5em" depth=".5em" style="background: green"/>
@@ -227,6 +362,50 @@
   </p>
   <hr/>
   <p>
+    <math displaystyle="true" style="font-family: numeratordisplaystylegapmin8000-rulethickness1000;">
+      <mspace id="ref0006b" width="3em"
+              height=".5em" depth=".5em" style="background: green"/>
+      <mfrac>
+        <mspace width="3em" depth="1em" id="num0006b" style="background: blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math displaystyle="true" style="font-family: numeratordisplaystyleshiftup2000-axisheight1000-rulethickness1000;">
+      <mspace id="ref0007b" width="3em"
+              depth="1em" style="background: green"/>
+      <mfrac>
+        <mspace width="3em" height="1em" id="num0007b" style="background: blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: numeratordisplaystylegapmin8000-rulethickness1000;">
+      <mspace id="ref0006c" width="3em"
+              height=".5em" depth=".5em" style="background: green"/>
+      <mfrac displaystyle="true">
+        <mspace width="3em" depth="1em" id="num0006c" style="background: blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: numeratordisplaystyleshiftup2000-axisheight1000-rulethickness1000;">
+      <mspace id="ref0007c" width="3em"
+              depth="1em" style="background: green"/>
+      <mfrac displaystyle="true">
+        <mspace width="3em" height="1em" id="num0007c" style="background: blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
     <math style="font-family: numeratorgapmin9000-rulethickness1000;">
       <mspace id="ref0008" width="3em"
               height=".5em" depth=".5em" style="background: green"/>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2-expected.txt b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2-expected.txt
deleted file mode 100644
index eb6b9a9..0000000
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2-expected.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-This is a testharness.js-based test.
-PASS BottomDisplayStyleShiftDown
-FAIL BottomShiftDown assert_approx_equals: mfrac: denominator shift expected 60 +/- 1 but got 0
-PASS DisplayStyleGapMin
-FAIL GapMin assert_approx_equals: mfrac: gap expected 80 +/- 1 but got 0
-PASS TopDisplayStyleShiftUp
-FAIL ToShiftUp assert_approx_equals: mfrac: numerator shift expected 90 +/- 1 but got 0
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html
index 368fc06..b913a34 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html
@@ -61,6 +61,22 @@
     test(function() {
       assert_true(MathMLFeatureDetection.has_mspace());
 
+      var v = 5000 * emToPx;
+      assert_approx_equals(getBox("den0002b").top - getBox("ref0002b").bottom,
+                           v, epsilon, "mfrac: denominator shift");
+    }, "BottomDisplayStyleShiftDown Displaystyle");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
+      var v = 5000 * emToPx;
+      assert_approx_equals(getBox("den0002c").top - getBox("ref0002c").bottom,
+                           v, epsilon, "mfrac: denominator shift");
+    }, "BottomDisplayStyleShiftDown Displaystyle om fraction");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
       var v = 6000 * emToPx;
       assert_approx_equals(getBox("den0003").top - getBox("ref0003").bottom,
                            v, epsilon, "mfrac: denominator shift");
@@ -77,6 +93,22 @@
     test(function() {
       assert_true(MathMLFeatureDetection.has_mspace());
 
+      var v = 4000 * emToPx;
+      assert_approx_equals(getBox("den0004b").top - getBox("num0004b").bottom,
+                           v, epsilon, "mfrac: gap");
+    }, "DisplayStyleGapMin Dsiplaystyle");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
+      var v = 4000 * emToPx;
+      assert_approx_equals(getBox("den0004c").top - getBox("num0004c").bottom,
+                           v, epsilon, "mfrac: gap");
+    }, "DisplayStyleGapMin Dsiplaystyle on fraction");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
       var v = 8000 * emToPx;
       assert_approx_equals(getBox("den0005").top - getBox("num0005").bottom,
                            v, epsilon, "mfrac: gap");
@@ -93,11 +125,35 @@
     test(function() {
       assert_true(MathMLFeatureDetection.has_mspace());
 
+      var v = 3000 * emToPx;
+      assert_approx_equals(getBox("ref0006b").top - getBox("num0006b").bottom,
+                           v, epsilon, "mfrac: numerator shift");
+    }, "TopDisplayStyleShiftUp Displaystyle");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
+      var v = 3000 * emToPx;
+      assert_approx_equals(getBox("ref0006c").top - getBox("num0006c").bottom,
+                           v, epsilon, "mfrac: numerator shift");
+    }, "TopDisplayStyleShiftUp Displaystyle on fraction");
+
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
       var v = 9000 * emToPx;
       assert_approx_equals(getBox("ref0007").top - getBox("num0007").bottom,
                            v, epsilon, "mfrac: numerator shift");
     }, "ToShiftUp");
 
+    test(function() {
+      assert_true(MathMLFeatureDetection.has_mspace());
+
+      var v = 9000 * emToPx;
+      assert_approx_equals(getBox("ref0007b").top - getBox("num0007b").bottom,
+                           v, epsilon, "mfrac: numerator shift");
+    }, "ToShiftUp with Displaystyle on fraction");
+
     done();
   }
 </script>
@@ -115,6 +171,26 @@
   </p>
   <hr/>
   <p>
+    <math displaystyle="true" style="font-family: bottomdisplaystyleshiftdown5000-axisheight1000;">
+      <mspace id="ref0002b" width="3em" height="1em" style="background: green"/>
+      <mfrac linethickness="0px">
+        <mspace width="3em"/>
+        <mspace width="3em" depth="1em" id="den0002b" style="background: blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: bottomdisplaystyleshiftdown5000-axisheight1000;">
+      <mspace id="ref0002c" width="3em" height="1em" style="background: green"/>
+      <mfrac displaystyle="true" linethickness="0px">
+        <mspace width="3em"/>
+        <mspace width="3em" depth="1em" id="den0002c" style="background: blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
     <math style="font-family: bottomshiftdown6000-axisheight1000;">
       <mspace id="ref0003" width="3em" height="1em" style="background: green"/>
       <mfrac linethickness="0px">
@@ -134,6 +210,24 @@
   </p>
   <hr/>
   <p>
+    <math displaystyle="true" style="font-family: displaystylegapmin4000;">
+      <mfrac linethickness="0px">
+        <mspace width="3em" height="1em" id="num0004b" style="background: blue"/>
+        <mspace width="3em" depth="1em" id="den0004b" style="background: green"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: displaystylegapmin4000;">
+      <mfrac displaystyle="true" linethickness="0px">
+        <mspace width="3em" height="1em" id="num0004c" style="background: blue"/>
+        <mspace width="3em" depth="1em" id="den0004c" style="background: green"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
     <math style="font-family: gapmin8000;">
       <mfrac linethickness="0px">
         <mspace width="3em" height="1em" id="num0005" style="background: blue"/>
@@ -153,6 +247,26 @@
   </p>
   <hr/>
   <p>
+    <math displaystyle="true" style="font-family: topdisplaystyleshiftup3000-axisheight1000;">
+      <mspace id="ref0006b" width="3em" depth="1em" style="background: green"/>
+      <mfrac linethickness="0px">
+        <mspace width="3em" height="1em" id="num0006b" style="background: blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: topdisplaystyleshiftup3000-axisheight1000;">
+      <mspace id="ref0006c" width="3em" depth="1em" style="background: green"/>
+      <mfrac displaystyle="true" linethickness="0px">
+        <mspace width="3em" height="1em" id="num0006c" style="background: blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
     <math style="font-family: topshiftup9000-axisheight1000;">
       <mspace id="ref0007" width="3em" depth="1em" style="background: green"/>
       <mfrac linethickness="0px">
@@ -161,5 +275,15 @@
       </mfrac>
     </math>
   </p>
+  <hr/>
+  <p>
+    <math displaystyle="true" style="font-family: topshiftup9000-axisheight1000;">
+      <mspace id="ref0007b" width="3em" depth="1em" style="background: green"/>
+      <mfrac displaystyle="false" linethickness="0px">
+        <mspace width="3em" height="1em" id="num0007b" style="background: blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/fast/compositor-wheel-scroll-latching/animated-scroll/touchpad-scroll-impl-to-main.html b/third_party/blink/web_tests/fast/compositor-wheel-scroll-latching/animated-scroll/touchpad-scroll-impl-to-main.html
index 4c3c741..19f294a4 100644
--- a/third_party/blink/web_tests/fast/compositor-wheel-scroll-latching/animated-scroll/touchpad-scroll-impl-to-main.html
+++ b/third_party/blink/web_tests/fast/compositor-wheel-scroll-latching/animated-scroll/touchpad-scroll-impl-to-main.html
@@ -1,4 +1,5 @@
 <!DOCTYPE HTML>
+<script src='../../../resources/gesture-util.js'></script>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <style>
@@ -26,7 +27,7 @@
 <script>
 var div = document.getElementById('div');
 var rect = div.getBoundingClientRect();
-const GESTURE_SOURCE_TYPE = 2; // MOUSE_INPUT from synthetic_gesture_params.h
+const GESTURE_SOURCE_TYPE = GestureSourceType.MOUSE_INPUT;
 
 function changeStyleToScrollOnMain() {
   if(div.scrollTop > 100)
@@ -59,17 +60,10 @@
 }
 
 promise_test(() => {
-  return new Promise((resolve, reject) => {
-    chrome.gpuBenchmarking.smoothScrollBy(500,
-                                          resolve,
-                                          (rect.left + rect.right) / 2,
-                                          (rect.top + rect.bottom) / 2,
-                                          GESTURE_SOURCE_TYPE,
-                                          'down',
-                                          2000);
-  }).then(waitForAnimationEnd)
-  .then(() => {
-    assert_equals(div.scrollTop, div.scrollHeight - div.clientHeight,
+  return smoothScroll(500, (rect.left + rect.right) / 2, (rect.top + rect.bottom) / 2, GESTURE_SOURCE_TYPE, 'down', 2000)
+    .then(waitForAnimationEnd)
+    .then(() => {
+      assert_equals(div.scrollTop, div.scrollHeight - div.clientHeight,
         "div must be fully scrolled");
   });
 }, "Scroller should continue to scroll when MT takes over scroll handling.");
diff --git a/third_party/blink/web_tests/fast/compositor-wheel-scroll-latching/non-animated-scroll/subpixel-accumulation.html b/third_party/blink/web_tests/fast/compositor-wheel-scroll-latching/non-animated-scroll/subpixel-accumulation.html
index bc27e0e..0400047 100644
--- a/third_party/blink/web_tests/fast/compositor-wheel-scroll-latching/non-animated-scroll/subpixel-accumulation.html
+++ b/third_party/blink/web_tests/fast/compositor-wheel-scroll-latching/non-animated-scroll/subpixel-accumulation.html
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
+<script src='../../../resources/gesture-util.js'></script>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <script>
@@ -32,22 +33,10 @@
     });
   }
 
-  async function scroll(pixels_to_scroll, direction, start_x, start_y, speed_in_pixels_s) {
-    return new Promise((resolve, reject) => {
-      const WHEEL_SOURCE_TYPE = 2; // MOUSE_INPUT from synthetic_gesture_params.h
-      chrome.gpuBenchmarking.smoothScrollBy(pixels_to_scroll,
-                                            resolve,
-                                            start_x,
-                                            start_y,
-                                            WHEEL_SOURCE_TYPE,
-                                            direction,
-                                            speed_in_pixels_s);
-    });
-  }
-
   async function runTest() {
     if (!chrome.gpuBenchmarking)
       return;
+    const WHEEL_SOURCE_TYPE = GestureSourceType.MOUSE_INPUT;
 
     // Wait a bit to ensure we don't start sending scroll gestures to the
     // compositor before the page layers have fully propagated to the CC active
@@ -57,7 +46,7 @@
     // Scroll horizontally first. Ensure we scrolled the div since otherwise we
     // may pass the test vacuously. See crbug.com/801381 for the case we're
     // guarding against.
-    await scroll(10, 'right', 50, 50, 1000);
+    await smoothScroll(10, 50, 50, WHEEL_SOURCE_TYPE, 'right', 1000);
 
     // Wait a bit since the scroll gesture resolves when the ScrollEnd is sent
     // from the browser, not when it's processed by the renderer.
@@ -72,7 +61,7 @@
 
     // Now scroll vertically. The scroller shouldn't have any vertical scroll
     // extent so the window should scroll.
-    await scroll(10, 'down', 50, 50, 1000);
+    await smoothScroll(10, 50, 50, WHEEL_SOURCE_TYPE, 'down', 1000);
     await nFrames(2);
     t.step(() => {
       assert_approx_equals(window.scrollY, 10, 1);
diff --git a/third_party/blink/web_tests/fast/events/wheel/mouse-wheel-scroll-latching.html b/third_party/blink/web_tests/fast/events/wheel/mouse-wheel-scroll-latching.html
index c1fab4c..0c6fc49 100644
--- a/third_party/blink/web_tests/fast/events/wheel/mouse-wheel-scroll-latching.html
+++ b/third_party/blink/web_tests/fast/events/wheel/mouse-wheel-scroll-latching.html
@@ -1,4 +1,5 @@
 <!DOCTYPE HTML>
+<script src='../../../resources/gesture-util.js'></script>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <style>
@@ -45,19 +46,7 @@
 var parentDiv = document.getElementById('parentDiv');
 var childDiv = document.getElementById('childDiv');
 
-const WHEEL_SOURCE_TYPE = 2; // MOUSE_INPUT from synthetic_gesture_params.h
-function scrollDown(pixels_to_scroll, start_x, start_y, speed_in_pixels_s) {
-  return new Promise((resolve, reject) => {
-    chrome.gpuBenchmarking.smoothScrollBy(pixels_to_scroll,
-                                          resolve,
-                                          start_x,
-                                          start_y,
-                                          WHEEL_SOURCE_TYPE,
-                                          'down',
-                                          speed_in_pixels_s);
-  });
-}
-
+const WHEEL_SOURCE_TYPE = GestureSourceType.MOUSE_INPUT;
 const MAX_RAF = 1000;
 var last_child_scroll_offset = childDiv.scrollTop;
 var last_parent_scroll_offset = parentDiv.scrollTop;
@@ -85,7 +74,7 @@
 
 var rect = childDiv.getBoundingClientRect();
 function testWheelScrollLatching() {
-  return scrollDown(400, (rect.left + rect.right) / 2, (rect.top + rect.bottom) / 2, 1000)
+  return smoothScroll(400, (rect.left + rect.right) / 2, (rect.top + rect.bottom) / 2, WHEEL_SOURCE_TYPE, 'down', 1000)
   .then(waitForAnimationEnd)
   .then(() => {
     assert_equals(childDiv.scrollTop, 10, "childDiv must be fully scrolled");
diff --git a/third_party/blink/web_tests/fast/events/wheel/wheel-scroll-latching-on-scrollbar.html b/third_party/blink/web_tests/fast/events/wheel/wheel-scroll-latching-on-scrollbar.html
index 49a9a5c..cc0964c 100644
--- a/third_party/blink/web_tests/fast/events/wheel/wheel-scroll-latching-on-scrollbar.html
+++ b/third_party/blink/web_tests/fast/events/wheel/wheel-scroll-latching-on-scrollbar.html
@@ -1,4 +1,5 @@
 <!DOCTYPE HTML>
+<script src='../../../resources/gesture-util.js'></script>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <style>
@@ -43,19 +44,7 @@
 var childDiv = document.getElementById('childDiv');
 var parentDiv = document.getElementById('parentDiv');
 var rect = childDiv.getBoundingClientRect();
-const GESTURE_SOURCE_TYPE = 2; // MOUSE_INPUT from synthetic_gesture_params.h
-
-function scrollDown(pixels_to_scroll, start_x, start_y, speed_in_pixels_s) {
-  return new Promise((resolve, reject) => {
-    chrome.gpuBenchmarking.smoothScrollBy(pixels_to_scroll,
-                                          resolve,
-                                          start_x,
-                                          start_y,
-                                          GESTURE_SOURCE_TYPE,
-                                          'down',
-                                          speed_in_pixels_s);
-  });
-}
+const GESTURE_SOURCE_TYPE = GestureSourceType.MOUSE_INPUT;
 
 const MAX_RAF = 1000;
 function waitForAnimationEnd() {
@@ -83,7 +72,7 @@
 }
 
 promise_test(t => {
-  return scrollDown(1000, rect.right - 5, rect.bottom - 5, 4000)
+  return smoothScroll(1000, rect.right - 5, rect.bottom - 5, GESTURE_SOURCE_TYPE, 'down', 4000)
   .then(waitForAnimationEnd)
   .then(() => {
     assert_equals(childDiv.scrollTop, childDiv.scrollHeight - childDiv.clientHeight,
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/contents-opaque/hidden-with-visible-text-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/contents-opaque/hidden-with-visible-text-expected.txt
index 620ee38..176ddb26 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/contents-opaque/hidden-with-visible-text-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/contents-opaque/hidden-with-visible-text-expected.txt
@@ -10,6 +10,7 @@
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='caption'",
       "bounds": [50, 19],
+      "contentsOpaque": true,
       "backgroundColor": "#0000FF",
       "transform": 1
     }
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/fixed-body-background-positioned-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/fixed-body-background-positioned-expected.txt
index 8da775b..86e896e 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/fixed-body-background-positioned-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/fixed-body-background-positioned-expected.txt
@@ -3,7 +3,6 @@
     {
       "name": "LayoutView #document",
       "bounds": [800, 600],
-      "contentsOpaque": true,
       "backgroundColor": "#FFFFFF"
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
index e4cdf7d..1046e2e 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
@@ -22,6 +22,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [135, 135],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
index e4cdf7d..1046e2e 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
@@ -22,6 +22,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [135, 135],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/geometry/bounds-ignores-hidden-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/geometry/bounds-ignores-hidden-expected.txt
index 1e7aa4c..796d999 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/geometry/bounds-ignores-hidden-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/geometry/bounds-ignores-hidden-expected.txt
@@ -19,7 +19,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutImage (positioned) IMG",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
index bb66087..d6fd7b9 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -32,7 +32,6 @@
       "position": [1, 1],
       "bounds": [285, 800],
       "contentsOpaque": true,
-      "backgroundColor": "#000000",
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
index fcd0a69..15c30cc 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
@@ -26,7 +26,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='positionedAndTransformed fixed'",
@@ -73,7 +74,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='positionedAndTransformed fixed'",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/content-gains-scrollbars-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/content-gains-scrollbars-expected.txt
index c1ae24d..ea92280f 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/content-gains-scrollbars-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/content-gains-scrollbars-expected.txt
@@ -82,6 +82,7 @@
       "name": "Scroll corner of LayoutNGBlockFlow (positioned) DIV class='container'",
       "position": [85, 85],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "transform": 3
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/overflow-scrollbar-layers-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/overflow-scrollbar-layers-expected.txt
index 2642241..d906e01487 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/overflow-scrollbar-layers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/overflow-scrollbar-layers-expected.txt
@@ -82,6 +82,7 @@
       "name": "Scroll corner of LayoutNGBlockFlow (positioned) DIV class='container'",
       "position": [85, 85],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "transform": 3
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/overflow-visible-with-touch-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/overflow-visible-with-touch-expected.txt
index b47c2b6..06b20aee5 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/overflow-visible-with-touch-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/overflow/overflow-visible-with-touch-expected.txt
@@ -19,7 +19,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-absolute-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-absolute-overflow-expected.txt
index db9b7d62..3966ac7 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-absolute-overflow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-absolute-overflow-expected.txt
@@ -20,7 +20,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='positioned layer'",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
index e347001a..0a4cf5d1 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
@@ -20,7 +20,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='layer' class='positioned'",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-fixed-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-fixed-overflow-expected.txt
index 7a335f6..d0fd140 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-fixed-overflow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-fixed-overflow-expected.txt
@@ -20,7 +20,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='positioned indicator'",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
index 88faf97..514a26d 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
@@ -20,7 +20,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='positioned indicator'",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
index adb225a..38c791e 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
@@ -26,7 +26,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [0, 385],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV id='layer' class='positioned'",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
index faa4652c..b63fedb 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
@@ -26,7 +26,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [0, 385],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV class='positioned indicator'",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-composited-layers-expected.txt
index 98bcf053..3c9171d 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-composited-layers-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -2,7 +2,8 @@
   "layers": [
     {
       "name": "Scrolling background of LayoutView #document",
-      "bounds": [800, 600]
+      "bounds": [800, 600],
+      "contentsOpaque": true
     },
     {
       "name": "Scrolling background of LayoutView #document",
@@ -13,6 +14,7 @@
       "name": "LayoutNGBlockFlow DIV",
       "position": [8, 18],
       "bounds": [10, 10],
+      "contentsOpaque": true,
       "backgroundColor": "#0000FF"
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-composited-reason-children-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-composited-reason-children-expected.txt
index 673df02c..8988b91 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-composited-reason-children-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-composited-reason-children-expected.txt
@@ -17,6 +17,7 @@
       "name": "LayoutNGBlockFlow DIV class='blended'",
       "position": [8, 8],
       "bounds": [160, 90],
+      "contentsOpaque": true,
       "backgroundColor": "#0000FF"
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-isolation-remove-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-isolation-remove-expected.txt
index e99679d..90a7db0c 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-isolation-remove-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/css3/blending/mix-blend-mode-isolation-remove-expected.txt
@@ -9,7 +9,6 @@
     {
       "name": "LayoutNGBlockFlow DIV class='accelerated-stacking-context'",
       "bounds": [784, 90],
-      "contentsOpaque": true,
       "drawsContent": false,
       "transform": 1
     },
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
index 70b1f96..3f1963f 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
@@ -10,7 +10,6 @@
       "name": "LayoutNGBlockFlow DIV id='content'",
       "bounds": [285, 1000],
       "contentsOpaque": true,
-      "backgroundColor": "#000000",
       "transform": 1
     }
   ],
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt
index 22f776d..92dcf381 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt
@@ -20,7 +20,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ],
   "transforms": [
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/background-image-paint-invalidation-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/background-image-paint-invalidation-expected.txt
index ac9eb1f7..ed86ce7 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/background-image-paint-invalidation-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/background-image-paint-invalidation-expected.txt
@@ -22,7 +22,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/background-resize-height-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/background-resize-height-expected.txt
index 1cac3199..44c7e3d3 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/background-resize-height-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/background/background-resize-height-expected.txt
@@ -10,8 +10,6 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='test image'",
       "position": [8, 8],
       "bounds": [110, 44],
-      "contentsOpaque": true,
-      "backgroundColor": "#000000",
       "invalidations": [
         [50, 0, 60, 44],
         [0, 40, 60, 4]
@@ -21,8 +19,6 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='test image size-contain'",
       "position": [108, 8],
       "bounds": [110, 44],
-      "contentsOpaque": true,
-      "backgroundColor": "#000000",
       "invalidations": [
         [0, 0, 60, 44],
         [50, 40, 60, 4]
@@ -32,8 +28,6 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='test image percent-height'",
       "position": [208, 8],
       "bounds": [110, 44],
-      "contentsOpaque": true,
-      "backgroundColor": "#000000",
       "invalidations": [
         [0, 0, 60, 44],
         [50, 40, 60, 4]
@@ -43,8 +37,6 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='test image bottom'",
       "position": [308, 8],
       "bounds": [110, 44],
-      "contentsOpaque": true,
-      "backgroundColor": "#000000",
       "invalidations": [
         [50, 0, 60, 44],
         [0, 0, 60, 44]
@@ -63,7 +55,6 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='test image repeat-round'",
       "position": [508, 8],
       "bounds": [60, 44],
-      "contentsOpaque": true,
       "backfaceVisibility": "hidden",
       "invalidations": [
         [0, 0, 60, 44]
@@ -74,7 +65,6 @@
       "position": [8, 108],
       "bounds": [110, 44],
       "contentsOpaque": true,
-      "backgroundColor": "#000000",
       "invalidations": [
         [50, 0, 60, 44],
         [0, 0, 60, 44]
@@ -84,7 +74,6 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='test generated size-contain'",
       "position": [108, 108],
       "bounds": [160, 44],
-      "backgroundColor": "#000000",
       "invalidations": [
         [100, 0, 60, 44],
         [0, 0, 60, 44]
@@ -94,8 +83,6 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='test generated top'",
       "position": [258, 108],
       "bounds": [110, 44],
-      "contentsOpaque": true,
-      "backgroundColor": "#000000",
       "invalidations": [
         [50, 0, 60, 44],
         [0, 0, 60, 44]
@@ -105,7 +92,7 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='test generated center'",
       "position": [358, 108],
       "bounds": [110, 44],
-      "backgroundColor": "#000000",
+      "contentsOpaque": true,
       "invalidations": [
         [50, 0, 60, 44],
         [0, 0, 60, 44]
@@ -115,7 +102,7 @@
       "name": "LayoutNGBlockFlow (positioned) DIV class='test generated repeat-space'",
       "position": [458, 108],
       "bounds": [110, 44],
-      "backgroundColor": "#000000",
+      "contentsOpaque": true,
       "invalidations": [
         [50, 0, 60, 44],
         [0, 0, 60, 44]
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/clip/clip-path-in-mask-layer-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/clip/clip-path-in-mask-layer-expected.txt
index 2351f8d..db23b4d5 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/clip/clip-path-in-mask-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/clip/clip-path-in-mask-layer-expected.txt
@@ -9,6 +9,7 @@
     {
       "name": "LayoutNGBlockFlow DIV",
       "bounds": [200, 200],
+      "contentsOpaque": true,
       "backgroundColor": "#0000FF",
       "invalidations": [
         [0, 0, 200, 200]
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/background-attachment-local-composited-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
index 2933025..fefa15aa 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
@@ -21,6 +21,7 @@
     {
       "name": "LayoutNGBlockFlow DIV id='container'",
       "bounds": [400, 2000],
+      "contentsOpaque": true,
       "backgroundColor": "#0000FF",
       "invalidations": [
         [0, 500, 400, 1500]
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
index 21aea2f..0e555276 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
@@ -15,6 +15,7 @@
     {
       "name": "LayoutNGBlockFlow DIV id='container'",
       "bounds": [400, 2000],
+      "contentsOpaque": true,
       "backgroundColor": "#0000FF",
       "invalidations": [
         [0, 500, 400, 1500]
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt
index 5b0b8e4..7781432 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt
@@ -19,7 +19,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow (positioned) DIV",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
index f9baaf0..da31a82 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
@@ -19,7 +19,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow DIV",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
index e8bd8101..ab73de1 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
@@ -28,6 +28,7 @@
       "name": "Scroll corner of LayoutNGBlockFlow DIV id='container'",
       "position": [385, 285],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
index 9b7b8c6..78b3bd0 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
@@ -23,7 +23,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ],
   "transforms": [
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
index 16f506a..a809f145 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
@@ -34,6 +34,7 @@
       "name": "Scroll corner of LayoutNGBlockFlow DIV id='container'",
       "position": [285, 285],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-repaint-scrolling-contents-outline-change-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-repaint-scrolling-contents-outline-change-expected.txt
index e7e0950e..62bec84 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-repaint-scrolling-contents-outline-change-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/compositing/should-not-repaint-scrolling-contents-outline-change-expected.txt
@@ -21,6 +21,7 @@
     {
       "name": "LayoutNGBlockFlow DIV id='target'",
       "bounds": [185, 2000],
+      "contentsOpaque": true,
       "backgroundColor": "#0000FF",
       "transform": 1
     },
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/filters/filter-on-html-element-with-fixed-position-child-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/filters/filter-on-html-element-with-fixed-position-child-expected.txt
index 34cbd41..cfa4de5 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/filters/filter-on-html-element-with-fixed-position-child-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/filters/filter-on-html-element-with-fixed-position-child-expected.txt
@@ -3,6 +3,7 @@
     {
       "name": "Scrolling background of LayoutView #document",
       "bounds": [785, 10016],
+      "contentsOpaque": true,
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt
index 56325d2..72347d5 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt
@@ -21,6 +21,7 @@
     {
       "name": "LayoutNGBlockFlow DIV",
       "bounds": [300, 300],
+      "contentsOpaque": true,
       "backgroundColor": "#D3D3D3",
       "transform": 1
     },
@@ -40,6 +41,7 @@
       "name": "Scroll corner of LayoutNGBlockFlow DIV",
       "position": [185, 185],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "transform": 1
     },
     {
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/overflow/composited-overflow-with-local-background-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/overflow/composited-overflow-with-local-background-expected.txt
index 71c070d..9685518 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/overflow/composited-overflow-with-local-background-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/overflow/composited-overflow-with-local-background-expected.txt
@@ -21,6 +21,7 @@
     {
       "name": "LayoutNGBlockFlow DIV id='scroller'",
       "bounds": [185, 300],
+      "contentsOpaque": true,
       "backgroundColor": "#008000",
       "invalidations": [
         [0, 0, 185, 300]
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/overflow/resize-child-within-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/overflow/resize-child-within-overflow-expected.txt
index 89505a6c..9f43ae5 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/overflow/resize-child-within-overflow-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/overflow/resize-child-within-overflow-expected.txt
@@ -22,7 +22,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
index b88c90e..6ec06a1 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -23,7 +23,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ],
   "transforms": [
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt
index 52701ed4..74a1fe0 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt
@@ -23,6 +23,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "invalidations": [
         [0, 0, 15, 15]
       ]
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
index 6c3c5e3..5906968 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
@@ -21,6 +21,7 @@
     {
       "name": "LayoutNGBlockFlow DIV id='scroller'",
       "bounds": [185, 552],
+      "contentsOpaque": true,
       "backgroundColor": "#0000FF",
       "invalidations": [
         [0, 0, 185, 552]
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
index e89ef25..41f86b19 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -21,6 +21,7 @@
     {
       "name": "LayoutNGBlockFlow DIV id='scroller'",
       "bounds": [200, 1620],
+      "contentsOpaque": true,
       "backgroundColor": "#D3D3D3",
       "invalidations": [
         [0, 610, 22, 20]
@@ -43,6 +44,7 @@
       "name": "Scroll corner of LayoutNGBlockFlow DIV id='scroller'",
       "position": [185, 185],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "transform": 1
     }
   ],
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt
index 22f776d..92dcf381 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt
@@ -20,7 +20,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ],
   "transforms": [
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt
index 22f776d..92dcf381 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt
@@ -20,7 +20,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ],
   "transforms": [
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-transformed-offscreen-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-transformed-offscreen-expected.txt
index 62f27b7..8ca1e711 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-transformed-offscreen-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/animated-svg-as-image-transformed-offscreen-expected.txt
@@ -19,7 +19,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     },
     {
       "name": "LayoutNGBlockFlow DIV id='targetDiv'",
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/color-stop-properties-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/color-stop-properties-expected.txt
index 75d7771..5d8a55a 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/color-stop-properties-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/color-stop-properties-expected.txt
@@ -45,7 +45,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt
index 1be7a94..04c6e04 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt
@@ -23,7 +23,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ],
   "transforms": [
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt
index 9a913998..ef8f7c2 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt
@@ -10,6 +10,7 @@
       "name": "LayoutSVGRoot svg",
       "position": [50, 0],
       "bounds": [500, 400],
+      "contentsOpaque": true,
       "transform": 1
     }
   ],
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index f0d1694c..49ab14f 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -27,7 +27,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ],
   "transforms": [
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
index 151be098..427f819 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
@@ -23,7 +23,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ]
 }
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
index 1f01b59..88e0bf4 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
@@ -24,7 +24,8 @@
     {
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
-      "bounds": [15, 15]
+      "bounds": [15, 15],
+      "contentsOpaque": true
     }
   ],
   "transforms": [
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/video-paint-invalidation-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/video-paint-invalidation-expected.txt
index e1792d2..14502cb 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/video-paint-invalidation-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/video-paint-invalidation-expected.txt
@@ -12,9 +12,8 @@
       "transform": 1
     },
     {
-      "name": "LayoutFlexibleBox (relative positioned) DIV class='sizing-small test-mode phase-ready state-scrubbing'",
+      "name": "LayoutNGFlexibleBox (relative positioned) DIV class='sizing-small test-mode phase-ready state-scrubbing'",
       "bounds": [320, 240],
-      "backgroundColor": "#000000",
       "transform": 1
     }
   ],
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/window-resize/window-resize-child-background-image-fixed-centered-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/window-resize/window-resize-child-background-image-fixed-centered-expected.txt
index 3f6fa5b..95dcb89bc 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/window-resize/window-resize-child-background-image-fixed-centered-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/window-resize/window-resize-child-background-image-fixed-centered-expected.txt
@@ -23,6 +23,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [585, 235],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "invalidations": [
         [0, 0, 15, 15]
       ]
@@ -54,6 +55,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [385, 235],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "invalidations": [
         [0, 0, 15, 15]
       ]
@@ -85,6 +87,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [385, 585],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "invalidations": [
         [0, 0, 15, 15]
       ]
@@ -116,6 +119,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "invalidations": [
         [0, 0, 15, 15]
       ]
diff --git a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/window-resize/window-resize-child-background-image-fixed-tiled-expected.txt b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/window-resize/window-resize-child-background-image-fixed-tiled-expected.txt
index 3f6fa5b..95dcb89bc 100644
--- a/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/window-resize/window-resize-child-background-image-fixed-tiled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/composite-after-paint/paint/invalidation/window-resize/window-resize-child-background-image-fixed-tiled-expected.txt
@@ -23,6 +23,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [585, 235],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "invalidations": [
         [0, 0, 15, 15]
       ]
@@ -54,6 +55,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [385, 235],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "invalidations": [
         [0, 0, 15, 15]
       ]
@@ -85,6 +87,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [385, 585],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "invalidations": [
         [0, 0, 15, 15]
       ]
@@ -116,6 +119,7 @@
       "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
       "bounds": [15, 15],
+      "contentsOpaque": true,
       "invalidations": [
         [0, 0, 15, 15]
       ]
diff --git a/third_party/blink/web_tests/rootscroller/gesture-scroll-document-not-root-scroller.html b/third_party/blink/web_tests/rootscroller/gesture-scroll-document-not-root-scroller.html
index ea0e3d13..cc1dad1 100644
--- a/third_party/blink/web_tests/rootscroller/gesture-scroll-document-not-root-scroller.html
+++ b/third_party/blink/web_tests/rootscroller/gesture-scroll-document-not-root-scroller.html
@@ -56,19 +56,6 @@
   if (window.internals)
     internals.settings.setScrollAnimatorEnabled(false);
 
-  function scrollDown(pixels_to_scroll, start_x, start_y,
-      gesture_source_type, speed_in_pixels_s) {
-    return new Promise((resolve, reject) => {
-      chrome.gpuBenchmarking.smoothScrollBy(pixels_to_scroll,
-                                            resolve,
-                                            start_x,
-                                            start_y,
-                                            gesture_source_type,
-                                            'down',
-                                            speed_in_pixels_s);
-    });
-  }
-
   function waitForScroll() {
     const MAX_FRAME = 500;
     return new Promise((resolve, reject) => {
@@ -99,8 +86,8 @@
                       rootscroller,
                       "#rootscroller must be the effective root scroller");
       }
-      const GESTURE_SOURCE_TYPE = 2; // MOUSE_INPUT from synthetic_gesture_params.h
-      return scrollDown(500, 100, 100, GESTURE_SOURCE_TYPE, 1000)
+      const GESTURE_SOURCE_TYPE = GestureSourceType.MOUSE_INPUT;
+      return smoothScroll(500, 100, 100, GESTURE_SOURCE_TYPE, 'down', 1000)
         .then(waitForScroll)
         .then(() => {
           assert_greater_than(document.scrollingElement.scrollTop,
diff --git a/third_party/blink/web_tests/serial/serialPort_close.html b/third_party/blink/web_tests/serial/serialPort_close.html
index 37119d043b..e102bc0 100644
--- a/third_party/blink/web_tests/serial/serialPort_close.html
+++ b/third_party/blink/web_tests/serial/serialPort_close.html
@@ -10,7 +10,7 @@
 serial_test(async (t, fake) => {
   const { port, fakePort } = await getFakeSerialPort(fake);
 
-  await promise_rejects(t, 'InvalidStateError', port.close());
+  await promise_rejects_dom(t, 'InvalidStateError', port.close());
 }, 'A SerialPort cannot be closed if it was never opened.');
 
 serial_test(async (t, fake) => {
@@ -18,7 +18,7 @@
 
   await port.open({ baudrate: 9600 });
   await port.close();
-  await promise_rejects(t, 'InvalidStateError', port.close());
+  await promise_rejects_dom(t, 'InvalidStateError', port.close());
 }, 'A SerialPort cannot be closed if it is already closed.');
 
 serial_test(async (t, fake) => {
@@ -26,7 +26,7 @@
 
   await port.open({ baudrate: 9600 });
   const closePromise = port.close();
-  await promise_rejects(t, 'InvalidStateError', port.close());
+  await promise_rejects_dom(t, 'InvalidStateError', port.close());
   await closePromise;
 }, 'A SerialPort cannot be closed if it is being closed.');
 
diff --git a/third_party/blink/web_tests/serial/serialPort_getSignals.html b/third_party/blink/web_tests/serial/serialPort_getSignals.html
index 277a118..25edd0e 100644
--- a/third_party/blink/web_tests/serial/serialPort_getSignals.html
+++ b/third_party/blink/web_tests/serial/serialPort_getSignals.html
@@ -8,7 +8,7 @@
 <script>
 serial_test(async (t, fake) => {
   const { port, fakePort } = await getFakeSerialPort(fake);
-  await promise_rejects(t, 'InvalidStateError', port.getSignals());
+  await promise_rejects_dom(t, 'InvalidStateError', port.getSignals());
 }, 'getSignals() rejects if the port is not open');
 
 serial_test(async (t, fake) => {
diff --git a/third_party/blink/web_tests/serial/serialPort_open.html b/third_party/blink/web_tests/serial/serialPort_open.html
index ab92d77..75556fc 100644
--- a/third_party/blink/web_tests/serial/serialPort_open.html
+++ b/third_party/blink/web_tests/serial/serialPort_open.html
@@ -11,24 +11,24 @@
   const { port, fakePort } = await getFakeSerialPort(fake);
 
   await port.open({ baudrate: 9600 });
-  return promise_rejects(t, 'InvalidStateError', port.open({ baudrate: 9600 }));
+  return promise_rejects_dom(t, 'InvalidStateError', port.open({ baudrate: 9600 }));
 }, 'A SerialPort cannot be opened if it is already open.');
 
 serial_test(async (t, fake) => {
   const { port, fakePort } = await getFakeSerialPort(fake);
 
   const firstRequest = port.open({ baudrate: 9600 });
-  await promise_rejects(t, 'InvalidStateError', port.open({ baudrate: 9600 }));
+  await promise_rejects_dom(t, 'InvalidStateError', port.open({ baudrate: 9600 }));
   await firstRequest;
 }, 'Simultaneous calls to open() are disallowed.');
 
 serial_test(async (t, fake) => {
   const { port, fakePort } = await getFakeSerialPort(fake);
 
-  await promise_rejects(t, new TypeError(), port.open({}));
+  await promise_rejects_js(t, TypeError, port.open({}));
 
   await Promise.all([-1, 0].map(baudrate => {
-      return promise_rejects(t, new TypeError(), port.open({ baudrate }))
+      return promise_rejects_js(t, TypeError, port.open({ baudrate }))
   }));
 }, 'Baud rate is required and must be greater than zero.');
 
@@ -36,8 +36,8 @@
   const { port, fakePort } = await getFakeSerialPort(fake);
 
   await Promise.all([-1, 0, 6, 9].map(databits => {
-    return promise_rejects(
-        t, new TypeError(), port.open({ baudrate: 9600, databits }));
+    return promise_rejects_js(
+        t, TypeError, port.open({ baudrate: 9600, databits }));
   }));
 
   await [undefined, 7, 8].reduce(async (previousTest, databits) => {
@@ -51,8 +51,8 @@
   const { port, fakePort } = await getFakeSerialPort(fake);
 
   await Promise.all([0, null, "cats"].map(parity => {
-    return promise_rejects(
-        t, new TypeError(), port.open({ baudrate: 9600, parity }),
+    return promise_rejects_js(
+        t, TypeError, port.open({ baudrate: 9600, parity }),
         `Should reject parity option "${parity}"`);
   }));
 
@@ -68,8 +68,8 @@
   const { port, fakePort } = await getFakeSerialPort(fake);
 
   await Promise.all([-1, 0, 3, 4].map(stopbits => {
-    return promise_rejects(
-        t, new TypeError(), port.open({ baudrate: 9600, stopbits }));
+    return promise_rejects_js(
+        t, TypeError, port.open({ baudrate: 9600, stopbits }));
   }));
 
   await [undefined, 1, 2].reduce(async (previousTest, stopbits) => {
@@ -82,18 +82,18 @@
 serial_test(async (t, fake) => {
   const { port, fakePort } = await getFakeSerialPort(fake);
 
-  await promise_rejects(
-      t, new TypeError(), port.open({ baudrate: 9600, buffersize: -1 }));
-  await promise_rejects(
-      t, new TypeError(), port.open({ baudrate: 9600, buffersize: 0 }));
+  await promise_rejects_js(
+      t, TypeError, port.open({ baudrate: 9600, buffersize: -1 }));
+  await promise_rejects_js(
+      t, TypeError, port.open({ baudrate: 9600, buffersize: 0 }));
 }, 'Buffer size must be greater than zero.');
 
 serial_test(async (t, fake) => {
   const { port, fakePort } = await getFakeSerialPort(fake);
 
   const buffersize = 1 * 1024 * 1024 * 1024 /* 1 GiB */;
-  return promise_rejects(
-      t, new TypeError(), port.open({ baudrate: 9600, buffersize }));
+  return promise_rejects_js(
+      t, TypeError, port.open({ baudrate: 9600, buffersize }));
 }, 'Unreasonably large buffer sizes are rejected.');
 
 </script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable.html b/third_party/blink/web_tests/serial/serialPort_readable.html
index 4152def..31fd156 100644
--- a/third_party/blink/web_tests/serial/serialPort_readable.html
+++ b/third_party/blink/web_tests/serial/serialPort_readable.html
@@ -32,7 +32,7 @@
   assert_true(port.readable instanceof ReadableStream);
 
   const reader = port.readable.getReader();
-  await promise_rejects(t, new TypeError(), port.close());
+  await promise_rejects_js(t, TypeError, port.close());
 
   reader.releaseLock();
   await port.close();
@@ -56,6 +56,17 @@
   await port.close();
 }, 'Can read a small amount of data');
 
+// ParityError is not (as of 2020/03/23) a valid DOMException, so cannot use
+// promise_rejects_dom for it.
+async function promise_rejects_with_parity_error(t, promise) {
+  return promise.then(() => {
+    assert_false('Should have rejected');
+  }).catch(e => {
+    assert_equals(e.constructor, DOMException);
+    assert_equals(e.name, "ParityError");
+  });
+}
+
 serial_test(async (t, fake) => {
   const { port, fakePort } = await getFakeSerialPort(fake);
   // Select a buffer size smaller than the amount of data transferred.
@@ -89,7 +100,7 @@
   assert_false(done);
   compareArrays(data, value);
 
-  await promise_rejects(t, new DOMException('', 'ParityError'), reader.read());
+  await promise_rejects_with_parity_error(t, reader.read());
   assert_not_equals(port.readable, readable);
 
   readable = port.readable;
@@ -122,7 +133,7 @@
   assert_false(done);
   compareArrays(data, value);
 
-  await promise_rejects(t, 'NetworkError', reader.read());
+  await promise_rejects_dom(t, 'NetworkError', reader.read());
   assert_equals(port.readable, null);
 
   await port.close();
diff --git a/third_party/blink/web_tests/serial/serialPort_setSignals.html b/third_party/blink/web_tests/serial/serialPort_setSignals.html
index cbba3df..ddeae273 100644
--- a/third_party/blink/web_tests/serial/serialPort_setSignals.html
+++ b/third_party/blink/web_tests/serial/serialPort_setSignals.html
@@ -8,7 +8,7 @@
 <script>
 serial_test(async (t, fake) => {
   const { port, fakePort } = await getFakeSerialPort(fake);
-  await promise_rejects(t, 'InvalidStateError', port.setSignals({}));
+  await promise_rejects_dom(t, 'InvalidStateError', port.setSignals({}));
 }, 'setSignals() rejects if the port is not open');
 
 serial_test(async (t, fake) => {
diff --git a/third_party/blink/web_tests/serial/serialPort_writable.html b/third_party/blink/web_tests/serial/serialPort_writable.html
index dfd2ac7..64da03d 100644
--- a/third_party/blink/web_tests/serial/serialPort_writable.html
+++ b/third_party/blink/web_tests/serial/serialPort_writable.html
@@ -21,7 +21,7 @@
 
   const writer = writable.getWriter();
   const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
-  await promise_rejects(t, 'InvalidStateError', writer.write(data));
+  await promise_rejects_dom(t, 'InvalidStateError', writer.write(data));
 }, 'open() and close() set and unset SerialPort.writable');
 
 serial_test(async (t, fake) => {
@@ -31,7 +31,7 @@
   assert_true(port.writable instanceof WritableStream);
 
   const writer = port.writable.getWriter();
-  await promise_rejects(t, new TypeError(), port.close());
+  await promise_rejects_js(t, TypeError, port.close());
 
   writer.releaseLock();
   await port.close();
@@ -86,7 +86,7 @@
 
   fakePort.simulateSystemErrorOnWrite();
   const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
-  await promise_rejects(t, 'UnknownError', writer.write(data));
+  await promise_rejects_dom(t, 'UnknownError', writer.write(data));
 
   assert_true(port.writable instanceof WritableStream);
   assert_not_equals(port.writable, writable);
@@ -112,7 +112,7 @@
 
   fakePort.simulateDisconnectOnWrite();
   const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
-  await promise_rejects(t, 'NetworkError', writer.write(data));
+  await promise_rejects_dom(t, 'NetworkError', writer.write(data));
   assert_equals(port.writable, null);
 
   await port.close();
diff --git a/third_party/blink/web_tests/serial/serial_requestPort.html b/third_party/blink/web_tests/serial/serial_requestPort.html
index 059eca8..4673269d 100644
--- a/third_party/blink/web_tests/serial/serial_requestPort.html
+++ b/third_party/blink/web_tests/serial/serial_requestPort.html
@@ -11,7 +11,7 @@
 <script>
 
 promise_test((t) => {
-  return promise_rejects(t, 'SecurityError', navigator.serial.requestPort());
+  return promise_rejects_dom(t, 'SecurityError', navigator.serial.requestPort());
 }, 'requestPort() rejects without a user gesture');
 
 promise_test(async (t) => {
@@ -22,7 +22,7 @@
 
   await trustedClick();
   try {
-    await promise_rejects(t, 'NotFoundError', navigator.serial.requestPort());
+    await promise_rejects_dom(t, 'NotFoundError', navigator.serial.requestPort());
   } finally {
     interceptor.stop();
   }
@@ -30,7 +30,7 @@
 
 serial_test(async (t, fake) => {
   await trustedClick();
-  return promise_rejects(t, 'NotFoundError', navigator.serial.requestPort());
+  return promise_rejects_dom(t, 'NotFoundError', navigator.serial.requestPort());
 }, 'requestPort() rejects if no port has been selected');
 
 serial_test(async (t, fake) => {
@@ -69,7 +69,7 @@
   fake.setSelectedPort(guid);
 
   await trustedClick();
-  return promise_rejects(t, new TypeError(), navigator.serial.requestPort({
+  return promise_rejects_js(t, TypeError, navigator.serial.requestPort({
     filters: [{}],
   }));
 }, 'An empty filter is not valid');
@@ -79,7 +79,7 @@
   fake.setSelectedPort(guid);
 
   await trustedClick();
-  return promise_rejects(t, new TypeError(), navigator.serial.requestPort({
+  return promise_rejects_js(t, TypeError, navigator.serial.requestPort({
     filters: [{ usbProductId: 0x0001 }],
   }));
 }, 'requestPort() requires a USB vendor ID if a product ID specified');
diff --git a/third_party/closure_compiler/externs/input_method_private.js b/third_party/closure_compiler/externs/input_method_private.js
index cdef0e4..429c74be 100644
--- a/third_party/closure_compiler/externs/input_method_private.js
+++ b/third_party/closure_compiler/externs/input_method_private.js
@@ -114,15 +114,16 @@
 /**
  * User preference settings for a specific input method. Japanese input methods are not included because they are managed separately by Mozc module.
  * @typedef {{
- *   autoCorrectionLevelPK: (number|undefined),
- *   autoCorrectionLevelVK: (number|undefined),
- *   enableCapitalizationPK: (boolean|undefined),
- *   enableCapitalizationVK: (boolean|undefined),
  *   enableCompletion: (boolean|undefined),
  *   enableDoubleSpacePeriod: (boolean|undefined),
  *   enableGestureTyping: (boolean|undefined),
  *   enablePrediction: (boolean|undefined),
  *   enableSoundOnKeypress: (boolean|undefined),
+ *   physicalKeyboardAutoCorrectionLevel: (number|undefined),
+ *   physicalKeyboardEnableCapitalization: (boolean|undefined),
+ *   virtualKeyboardAutoCorrectionLevel: (number|undefined),
+ *   virtualKeyboardEnableCapitalization: (boolean|undefined),
+ *   xkbLayout: (string|undefined),
  *   koreanEnableSyllableInput: (boolean|undefined),
  *   koreanKeyboardLayout: (string|undefined),
  *   koreanShowHangulCandidate: (boolean|undefined),
@@ -146,10 +147,9 @@
  *     uan_uang: (boolean|undefined),
  *     z_zh: (boolean|undefined)
  *   }|undefined),
- *   xkbLayout: (string|undefined),
  *   zhuyinKeyboardLayout: (string|undefined),
  *   zhuyinPageSize: (number|undefined),
- *   zhuyinSelectionKeys: (string|undefined)
+ *   zhuyinSelectKeys: (string|undefined)
  * }}
  */
 chrome.inputMethodPrivate.InputMethodSettings;
diff --git a/third_party/crashpad/README.chromium b/third_party/crashpad/README.chromium
index fbc4a6a..fef2682 100644
--- a/third_party/crashpad/README.chromium
+++ b/third_party/crashpad/README.chromium
@@ -37,3 +37,4 @@
 Local Modifications:
  - codereview.settings has been excluded.
  - elf_image_reader_fuzzer is enabled only when use_fuzzing_engine is true.
+ - cherry-pick upstream 296501351816
diff --git a/third_party/crashpad/crashpad/util/BUILD.gn b/third_party/crashpad/crashpad/util/BUILD.gn
index aa890264..bd0d2427 100644
--- a/third_party/crashpad/crashpad/util/BUILD.gn
+++ b/third_party/crashpad/crashpad/util/BUILD.gn
@@ -75,6 +75,17 @@
       rebase_path("../compat/mac", root_build_dir),
     ]
   }
+
+  source_set("mig_output") {
+    deps = [ ":mig" ]
+    sources = get_target_outputs(":mig")
+    if (crashpad_is_in_chromium) {
+      # mig output contains unreachable code, which irks -Wunreachable-code.
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+    }
+    public_configs = [ "..:crashpad_config" ]
+  }
 }
 
 static_library("util") {
@@ -281,7 +292,6 @@
       "process/process_memory_mac.h",
       "synchronization/semaphore_mac.cc",
     ]
-    sources += get_target_outputs(":mig")
   }
 
   deps = []
@@ -483,7 +493,7 @@
       "IOKit.framework",
     ]
     deps += [
-      ":mig",
+      ":mig_output",
       "../third_party/apple_cf:apple_cf",
     ]
     include_dirs += [ "$root_build_dir/gen" ]
diff --git a/third_party/metrics_proto/README.chromium b/third_party/metrics_proto/README.chromium
index 9013205..607d0ab9 100644
--- a/third_party/metrics_proto/README.chromium
+++ b/third_party/metrics_proto/README.chromium
@@ -1,8 +1,8 @@
-Name: Metrics Protos
+ Name: Metrics Protos
 Short Name: metrics_proto
 URL: This is the canonical public repository
-Version: 300778659
-Date: 2020/03/13 UTC
+Version: 302542136
+Date: 2020/03/23 UTC
 License: BSD
 Security Critical: Yes
 
diff --git a/third_party/metrics_proto/extension_install.proto b/third_party/metrics_proto/extension_install.proto
index 5471e9c..1b513fe 100644
--- a/third_party/metrics_proto/extension_install.proto
+++ b/third_party/metrics_proto/extension_install.proto
@@ -142,6 +142,9 @@
     // Deprecated: The extension is disabled because it's blocked due to mature
     // content for supervised users.
     DEPRECATED_BLOCKED_MATURE = 14;
+    // The extension is disabled due to having a malware attribute in the Omaha
+    // config.
+    DISABLE_REMOTELY_FOR_MALWARE = 15;
   }
   // Any DisableReasons in effect for the extension. An empty list means the
   // extension is not disabled. Note that an extension that is not disabled may
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 14310da..fdee79b2 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -14,13 +14,13 @@
   # below). MB uses this dict to look up which config to use for a given bot.
   'masters': {
     'chrome': {
-      'chromeos-arm-generic-cfi-thin-lto-chrome': 'cros_chrome_sdk_cfi_thin_lto',
-      'chromeos-betty-cfi-thin-lto-chrome': 'chromeos_betty_cfi_thin_lto',
-      'chromeos-betty-chrome': 'chromeos_betty_include_unwind_tables',
-      'chromeos-betty-pi-arc-cfi-thin-lto-chrome': 'cros_chrome_sdk_cfi_thin_lto',
-      'chromeos-betty-pi-arc-chrome': 'cros_chrome_sdk_include_unwind_tables',
-      'chromeos-eve-chrome': 'chromeos_eve_include_unwind_tables',
-      'chromeos-kevin-chrome': 'chromeos_kevin_include_unwind_tables',
+      'chromeos-arm-generic-cfi-thin-lto-chrome': 'chromeos_arm-generic_cfi_thin_lto_official',
+      'chromeos-betty-cfi-thin-lto-chrome': 'chromeos_betty_cfi_thin_lto_official',
+      'chromeos-betty-chrome': 'chromeos_betty_include_unwind_tables_official',
+      'chromeos-betty-pi-arc-cfi-thin-lto-chrome': 'chromeos_betty-pi-arc_cfi_thin_lto_official',
+      'chromeos-betty-pi-arc-chrome': 'chromeos_betty-pi-arc_include_unwind_tables_official',
+      'chromeos-eve-chrome': 'chromeos_eve_include_unwind_tables_official',
+      'chromeos-kevin-chrome': 'chromeos_kevin_include_unwind_tables_official',
       # Don't include unwind tables for the remaining three builders since
       # they monitor binary size growth, which may be affected by the tables.
       'linux-chrome': 'official_goma',
@@ -744,15 +744,15 @@
     },
 
     'tryserver.chrome': {
-      'chromeos-arm-generic-cfi-thin-lto-chrome': 'cros_chrome_sdk_cfi_thin_lto',
-      'chromeos-betty-cfi-thin-lto-chrome': 'chromeos_betty_cfi_thin_lto',
-      'chromeos-betty-chrome': 'chromeos_betty_include_unwind_tables',
-      'chromeos-betty-pi-arc-cfi-thin-lto-chrome': 'cros_chrome_sdk_cfi_thin_lto',
-      'chromeos-betty-pi-arc-chrome': 'cros_chrome_sdk_include_unwind_tables',
-      'chromeos-eve-chrome': 'chromeos_eve_include_unwind_tables',
-      'chromeos-eve-compile-chrome': 'chromeos_eve_include_unwind_tables',
-      'chromeos-kevin-chrome': 'chromeos_kevin_include_unwind_tables',
-      'chromeos-kevin-compile-chrome': 'chromeos_kevin_include_unwind_tables',
+      'chromeos-arm-generic-cfi-thin-lto-chrome': 'chromeos_arm-generic_cfi_thin_lto_official',
+      'chromeos-betty-cfi-thin-lto-chrome': 'chromeos_betty_cfi_thin_lto_official',
+      'chromeos-betty-chrome': 'chromeos_betty_include_unwind_tables_official',
+      'chromeos-betty-pi-arc-cfi-thin-lto-chrome': 'chromeos_betty-pi-arc_cfi_thin_lto_official',
+      'chromeos-betty-pi-arc-chrome': 'chromeos_betty-pi-arc_include_unwind_tables_official',
+      'chromeos-eve-chrome': 'chromeos_eve_include_unwind_tables_official',
+      'chromeos-eve-compile-chrome': 'chromeos_eve_include_unwind_tables_official',
+      'chromeos-kevin-chrome': 'chromeos_kevin_include_unwind_tables_official',
+      'chromeos-kevin-compile-chrome': 'chromeos_kevin_include_unwind_tables_official',
       'linux-chrome': 'official_goma',
       'linux-chromeos-chrome': 'official_goma_chromeos_include_unwind_tables',
       'win_chrome_official': 'official_goma_x86',
@@ -1378,6 +1378,10 @@
       'chromeos_device', 'arm-generic',
     ],
 
+    'chromeos_arm-generic_cfi_thin_lto_official': [
+      'chromeos_device', 'arm-generic', 'cfi_full', 'thin_lto', 'official',
+    ],
+
     'chromeos_arm-generic_dcheck_always_on': [
       'chromeos_device', 'arm-generic', 'dcheck_always_on',
     ],
@@ -1390,24 +1394,32 @@
       'chromeos', 'asan', 'lsan', 'fuzzer', 'v8_heap', 'release_bot',
     ],
 
-    'chromeos_betty_cfi_thin_lto': [
-      'chromeos_device', 'betty', 'cfi_full', 'thin_lto',
+    'chromeos_betty_cfi_thin_lto_official': [
+      'chromeos_device', 'betty', 'cfi_full', 'thin_lto', 'official',
     ],
 
-    'chromeos_betty_include_unwind_tables': [
-      'chromeos_device', 'betty', 'include_unwind_tables',
+    'chromeos_betty_include_unwind_tables_official': [
+      'chromeos_device', 'betty', 'include_unwind_tables', 'official',
     ],
 
-    'chromeos_eve_include_unwind_tables': [
-      'chromeos_device', 'eve', 'include_unwind_tables',
+    'chromeos_betty-pi-arc_cfi_thin_lto_official': [
+      'chromeos_device', 'betty-pi-arc', 'cfi_full', 'thin_lto', 'official',
+    ],
+
+    'chromeos_betty-pi-arc_include_unwind_tables_official': [
+      'chromeos_device', 'betty-pi-arc', 'include_unwind_tables', 'official',
+    ],
+
+    'chromeos_eve_include_unwind_tables_official': [
+      'chromeos_device', 'eve', 'include_unwind_tables', 'official',
     ],
 
     'chromeos_kevin': [
       'chromeos_device', 'kevin',
     ],
 
-    'chromeos_kevin_include_unwind_tables': [
-      'chromeos_device', 'kevin', 'include_unwind_tables',
+    'chromeos_kevin_include_unwind_tables_official': [
+      'chromeos_device', 'kevin', 'include_unwind_tables', 'official',
     ],
 
     'chromeos_msan_release_bot': [
@@ -1553,14 +1565,6 @@
       'codesearch',
     ],
 
-    'cros_chrome_sdk_cfi_thin_lto': [
-      'cros_chrome_sdk', 'cfi_full', 'thin_lto',
-    ],
-
-    'cros_chrome_sdk_include_unwind_tables': [
-      'cros_chrome_sdk', 'include_unwind_tables',
-    ],
-
     'dawn_tests_release_trybot': [
       'dawn_tests', 'release_trybot',
     ],
@@ -2189,6 +2193,10 @@
       'args_file': '//build/args/chromeos/betty.gni',
     },
 
+    'betty-pi-arc': {
+      'args_file': '//build/args/chromeos/betty-pi-arc.gni',
+    },
+
     'cast': {
       'gn_args': 'is_chromecast=true'
     },
@@ -2282,18 +2290,6 @@
       'gn_args': ('disable_brotli_filter=false is_cronet_build=true'),
     },
 
-    'cros_chrome_sdk': {
-      # This is used so that the cros chrome_sdk (simplechrome) builders
-      # can manage the list of GN args in their .ebuild
-      # files and just pass through the desired arguments, hence not
-      # really using MB. If a bot uses this mixin, we expect that
-      # both GYP_DEFINES and GN_ARGS are set in the environment,
-      # and that GYP_DEFINES has chromeos=1 and GN_ARGS has
-      # target_os="chromeos" in it.
-      'cros_passthrough': True,
-      'gn_args': 'ozone_platform_headless=true',
-    },
-
     'dawn_tests': {
       'gn_args': 'use_dawn=true',
     },
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index 68396ae..346c98d 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -19398,6 +19398,63 @@
   </description>
 </action>
 
+<action name="SharingQRCode.DownloadQRCode">
+  <owner>src/components/send_tab_to_self/OWNERS</owner>
+  <description>
+    User attempted to download a QR code from the share hub generator.
+  </description>
+</action>
+
+<action name="SharingQRCode.DownloadQRCode.Failed">
+  <owner>src/components/send_tab_to_self/OWNERS</owner>
+  <description>
+    Downloading a QR Code from the sharing dialog failed.
+  </description>
+</action>
+
+<action name="SharingQRCode.DownloadQRCode.Succeeded">
+  <owner>src/components/send_tab_to_self/OWNERS</owner>
+  <description>
+    Downloading a QR Code from the sharing dialog succeeded.
+  </description>
+</action>
+
+<action name="SharingQRCode.DownloadQRCodeMultipleAttempts">
+  <owner>src/components/send_tab_to_self/OWNERS</owner>
+  <description>
+    User attempted to download a QR code from the share hub generator two or
+    more times.
+  </description>
+</action>
+
+<action name="SharingQRCode.ScannedNonURL">
+  <owner>src/components/send_tab_to_self/OWNERS</owner>
+  <description>
+    QR code scanner scanned a QR code that did not contain a URL.
+  </description>
+</action>
+
+<action name="SharingQRCode.ScannedURL">
+  <owner>src/components/send_tab_to_self/OWNERS</owner>
+  <description>
+    QR code scanner scanned a QR code that contained a URL.
+  </description>
+</action>
+
+<action name="SharingQRCode.TabVisible.Scan">
+  <owner>src/components/send_tab_to_self/OWNERS</owner>
+  <description>
+    User launched, foregrounded, or switched to the QR feature's scan tab.
+  </description>
+</action>
+
+<action name="SharingQRCode.TabVisible.Share">
+  <owner>src/components/send_tab_to_self/OWNERS</owner>
+  <description>
+    User launched, foregrounded, or switched to the QR feature's generator tab.
+  </description>
+</action>
+
 <action name="Shelf_AlignmentSetBottom">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 1c0c499b..3632dfb 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -20539,7 +20539,8 @@
 </enum>
 
 <enum name="ExtensionEvents">
-<!-- Generated from extensions/browser/extension_event_histogram_value.h.-->
+<!-- Generated from extensions/browser/extension_event_histogram_value.h.
+Called by update_extension_histograms.py.-->
 
   <int value="0" label="UNKNOWN"/>
   <int value="1" label="FOR_TEST"/>
@@ -21038,7 +21039,8 @@
 </enum>
 
 <enum name="ExtensionFunctions">
-<!-- Generated from extensions/browser/extension_function_histogram_value.h.-->
+<!-- Generated from extensions/browser/extension_function_histogram_value.h.
+Called by update_extension_histograms.py.-->
 
   <int value="0" label="UNKNOWN"/>
   <int value="1" label="WEBNAVIGATION_GETALLFRAMES"/>
@@ -22549,6 +22551,8 @@
   <int value="1460" label="PASSWORDSPRIVATE_GETPASSWORDCHECKSTATUS"/>
   <int value="1461" label="TERMINALPRIVATE_OPENVMSHELLPROCESS"/>
   <int value="1462" label="PASSWORDSPRIVATE_OPTINFORACCOUNTSTORAGE"/>
+  <int value="1463" label="CRYPTOTOKENPRIVATE_RECORDREGISTERREQUEST"/>
+  <int value="1464" label="CRYPTOTOKENPRIVATE_RECORDSIGNREQUEST"/>
 </enum>
 
 <enum name="ExtensionIconState">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index e08fc67..f132ecf 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -33780,6 +33780,16 @@
   </summary>
 </histogram>
 
+<histogram name="DataReductionProxy.ReportSaveDataSavings.ParseResult"
+    enum="Boolean" expires_after="2021-04-01">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Whether the save-data savings JSON retrieved from field trial was parsed as
+    a dictionary. Recorded on startup.
+  </summary>
+</histogram>
+
 <histogram name="DataReductionProxy.RequestCompletionErrorCodes"
     enum="NetErrorCodes" expires_after="2016-03-11">
   <obsolete>
@@ -98613,13 +98623,13 @@
 </histogram>
 
 <histogram name="Network.Shill.WiFi.RegulatoryDomain" enum="RegulatoryDomain"
-    expires_after="2020-08-01">
-  <owner>mwiitala@google.com</owner>
+    expires_after="2020-12-01">
+  <owner>briannorris@chromium.org</owner>
   <owner>cros-network-metrics@google.com</owner>
   <summary>
     Chrome OS network usage metric that tracks which country the WiFi regulatory
     domain is set to. Recorded every time a WiFi regulatory domain change is
-    triggered.
+    triggered or determined initially (Shill startup).
   </summary>
 </histogram>
 
@@ -106926,8 +106936,29 @@
     deferral until next keystroke, provider timeouts, etc.
 
     This metric is designed to be normalized by the True count of
-    Omnibox.Start.WantAsyncMatches, which will yield the number of times the
+    Omnibox.Start.WantAsyncMatches, which will yield the number of match changes
+    asynchronously per keystroke or other user gesture.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.MatchStability.AsyncMatchChangedInAnyPosition"
+    enum="BooleanChanged" expires_after="2021-03-01">
+  <owner>tommycli@chromium.org</owner>
+  <owner>jdonnelly@chromium.org</owner>
+  <summary>
+    This tracks how unstable our matches are due to asynchronous updates.
+
+    For each asynchronous autocomplete update, this histogram logs whether any
+    match in any position has changed. Note: if the only change is new matches
+    appended to the end of the list, that does not count as a change, since it's
+    not very disruptive to the user.
+
+    This metric is designed to be normalized by the True count of
+    Omnibox.Start.WantAsyncMatches, which will yield the number of times any
     match changes asynchronously per keystroke or other user gesture.
+
+    This histogram can be considered a boolean analogue to
+    Omnibox.MatchStability.AsyncMatchChange2.
   </summary>
 </histogram>
 
@@ -189310,6 +189341,13 @@
   <affected-histogram name="DNS.PrefetchResolution"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="IsOnBattery" separator=".">
+  <suffix name="NotOnBattery" label="System is on external power."/>
+  <suffix name="OnBattery" label="System is on battery power."/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="JankyIntervalsPerThirtySeconds" separator=".">
   <obsolete>
     This metric is now only recorded after the main message loop starts and no
@@ -195318,6 +195356,8 @@
       label="Only counting memory used by GL command buffers."/>
   <suffix name="Discardable"
       label="Only counting memory used by Discardable manager."/>
+  <suffix name="ExtensionFunctions"
+      label="Only counting memory used by ExtensionFunctions."/>
   <suffix name="Extensions.ValueStore"
       label="Only counting memory used by Extension value store database."/>
   <suffix name="GpuMemory" label="Only counting memory allocated for the GPU."/>
diff --git a/tools/perf/process_perf_results.py b/tools/perf/process_perf_results.py
index bdd026b..45dc3f60 100755
--- a/tools/perf/process_perf_results.py
+++ b/tools/perf/process_perf_results.py
@@ -163,6 +163,11 @@
 
 def _handle_perf_json_test_results(
     benchmark_directory_map, test_results_list):
+  """Checks the test_results.json under each folder:
+
+  1. mark the benchmark 'enabled' if tests results are found
+  2. add the json content to a list for non-ref.
+  """
   begin_time = time.time()
   benchmark_enabled_map = {}
   for benchmark_name, directories in benchmark_directory_map.iteritems():
@@ -256,9 +261,36 @@
   return os.path.basename(directory).replace(" benchmark", "")
 
 
-def process_perf_results(output_json, configuration_name,
-                         build_properties, task_output_dir,
-                         smoke_test_mode, output_results_dir):
+def _scan_output_dir(task_output_dir):
+  benchmark_directory_map = {}
+  benchmarks_shard_map_file = None
+
+  directory_list = [
+      f for f in os.listdir(task_output_dir)
+      if not os.path.isfile(os.path.join(task_output_dir, f))
+  ]
+  benchmark_directory_list = []
+  for directory in directory_list:
+    for f in os.listdir(os.path.join(task_output_dir, directory)):
+      path = os.path.join(task_output_dir, directory, f)
+      if os.path.isdir(path):
+        benchmark_directory_list.append(path)
+      elif path.endswith('benchmarks_shard_map.json'):
+        benchmarks_shard_map_file = path
+  # Now create a map of benchmark name to the list of directories
+  # the lists were written to.
+  for directory in benchmark_directory_list:
+    benchmark_name = _get_benchmark_name(directory)
+    if benchmark_name in benchmark_directory_map.keys():
+      benchmark_directory_map[benchmark_name].append(directory)
+    else:
+      benchmark_directory_map[benchmark_name] = [directory]
+
+  return benchmark_directory_map, benchmarks_shard_map_file
+
+
+def process_perf_results(output_json, configuration_name, build_properties,
+                         task_output_dir, smoke_test_mode, output_results_dir):
   """Process perf results.
 
   Consists of merging the json-test-format output, uploading the perf test
@@ -280,38 +312,11 @@
   begin_time = time.time()
   return_code = 0
   benchmark_upload_result_map = {}
-  directory_list = [
-      f for f in os.listdir(task_output_dir)
-      if not os.path.isfile(os.path.join(task_output_dir, f))
-  ]
 
-  benchmark_directory_list = []
-  benchmarks_shard_map_file = None
-  for directory in directory_list:
-    for f in os.listdir(os.path.join(task_output_dir, directory)):
-      path = os.path.join(task_output_dir, directory, f)
-      if os.path.isdir(path):
-        benchmark_directory_list.append(path)
-      elif path.endswith('benchmarks_shard_map.json'):
-        benchmarks_shard_map_file = path
-
-  # Now create a map of benchmark name to the list of directories
-  # the lists were written to.
-  benchmark_directory_map = {}
-  for directory in benchmark_directory_list:
-    benchmark_name = _get_benchmark_name(directory)
-    if benchmark_name in benchmark_directory_map.keys():
-      benchmark_directory_map[benchmark_name].append(directory)
-    else:
-      benchmark_directory_map[benchmark_name] = [directory]
+  benchmark_directory_map, benchmarks_shard_map_file = _scan_output_dir(
+      task_output_dir)
 
   test_results_list = []
-
-  build_properties = json.loads(build_properties)
-  if not configuration_name:
-    # we are deprecating perf-id crbug.com/817823
-    configuration_name = build_properties['buildername']
-
   extra_links = {}
 
   # First, upload benchmarks shard map to logdog and add a page
@@ -330,6 +335,11 @@
 
   if not smoke_test_mode:
     try:
+      build_properties = json.loads(build_properties)
+      if not configuration_name:
+        # we are deprecating perf-id crbug.com/817823
+        configuration_name = build_properties['buildername']
+
       return_code, benchmark_upload_result_map = _handle_perf_results(
           benchmark_enabled_map, benchmark_directory_map,
           configuration_name, build_properties, extra_links, output_results_dir)
@@ -340,6 +350,7 @@
   # Finally, merge all test results json, add the extra links and write out to
   # output location
   _merge_json_output(output_json, test_results_list, extra_links)
+
   end_time = time.time()
   print_duration('Total process_perf_results', begin_time, end_time)
   return return_code, benchmark_upload_result_map
@@ -624,9 +635,8 @@
   output_results_dir = tempfile.mkdtemp('outputresults')
   try:
     return_code, _ = process_perf_results(
-        args.output_json, args.configuration_name,
-        args.build_properties, args.task_output_dir,
-        args.smoke_test_mode, output_results_dir)
+        args.output_json, args.configuration_name, args.build_properties,
+        args.task_output_dir, args.smoke_test_mode, output_results_dir)
     return return_code
   finally:
     shutil.rmtree(output_results_dir)
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml
index 07e0c7e..b1eb863 100644
--- a/tools/traffic_annotation/summary/annotations.xml
+++ b/tools/traffic_annotation/summary/annotations.xml
@@ -227,6 +227,7 @@
  <item id="proxy_config_system" hash_code="11258689" type="0" content_hash_code="77057929" os_list="linux,windows" file_path="net/proxy_resolution/configured_proxy_resolution_service.cc"/>
  <item id="proxy_script_fetcher" hash_code="37531401" type="0" deprecated="2018-03-16" content_hash_code="31866133" file_path=""/>
  <item id="puch_client_channel" hash_code="34459548" type="0" deprecated="2020-01-23" content_hash_code="92475475" file_path=""/>
+ <item id="query_tiles_image_loader" hash_code="95103115" type="0" content_hash_code="75070538" os_list="linux,windows" file_path="chrome/browser/upboarding/query_tiles/cached_image_loader.cc"/>
  <item id="quic_chromium_incoming_pending_session" hash_code="120830730" type="0" content_hash_code="52904665" os_list="linux,windows" file_path="net/quic/quic_chromium_client_session.cc"/>
  <item id="quic_chromium_incoming_session" hash_code="87635401" type="0" content_hash_code="78573093" os_list="linux,windows" file_path="net/quic/quic_chromium_client_session.cc"/>
  <item id="quic_chromium_packet_writer" hash_code="20153177" type="0" content_hash_code="29657765" os_list="linux,windows" file_path="net/quic/quic_chromium_packet_writer.cc"/>
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc
index f506b13c..6f4e876 100644
--- a/ui/accessibility/platform/ax_platform_node_auralinux.cc
+++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
@@ -3755,7 +3755,6 @@
 void AXPlatformNodeAuraLinux::OnNameChanged() {
   AtkObject* atk_object = GetOrCreateAtkObject();
   if (!atk_object) {
-    CHECK(false);
     return;
   }
   std::string previous_accessible_name = accessible_name_;
diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn
index aaa4232..ef3c22f 100644
--- a/ui/aura/BUILD.gn
+++ b/ui/aura/BUILD.gn
@@ -176,8 +176,6 @@
   sources = [
     "test/aura_test_base.cc",
     "test/aura_test_base.h",
-    "test/aura_test_context_factory.cc",
-    "test/aura_test_context_factory.h",
     "test/aura_test_helper.cc",
     "test/aura_test_helper.h",
     "test/aura_test_utils.cc",
diff --git a/ui/aura/native_window_occlusion_tracker_win_interactive_test.cc b/ui/aura/native_window_occlusion_tracker_win_interactive_test.cc
index ca627f7..467a505 100644
--- a/ui/aura/native_window_occlusion_tracker_win_interactive_test.cc
+++ b/ui/aura/native_window_occlusion_tracker_win_interactive_test.cc
@@ -26,7 +26,6 @@
 #include "ui/aura/window_occlusion_tracker.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/aura/window_tree_host_platform.h"
-#include "ui/base/ime/init/input_method_initializer.h"
 #include "ui/base/ui_base_features.h"
 #include "ui/display/win/dpi.h"
 #include "ui/gfx/geometry/rect.h"
@@ -119,7 +118,6 @@
         features::kCalculateNativeWinOcclusion);
 
     AuraTestBase::SetUp();
-    ui::InitializeInputMethodForTesting();
 
     display::Screen::SetScreenInstance(test_screen());
 
diff --git a/ui/aura/test/aura_test_base.cc b/ui/aura/test/aura_test_base.cc
index dec8059..67c27ad 100644
--- a/ui/aura/test/aura_test_base.cc
+++ b/ui/aura/test/aura_test_base.cc
@@ -6,7 +6,6 @@
 
 #include "base/command_line.h"
 #include "ui/aura/client/window_parenting_client.h"
-#include "ui/aura/test/aura_test_context_factory.h"
 #include "ui/aura/test/test_window_delegate.h"
 #include "ui/aura/test/test_windows.h"
 #include "ui/aura/window.h"
diff --git a/ui/aura/test/aura_test_base.h b/ui/aura/test/aura_test_base.h
index 8f215fb..dfd9724 100644
--- a/ui/aura/test/aura_test_base.h
+++ b/ui/aura/test/aura_test_base.h
@@ -29,8 +29,6 @@
 
 namespace test {
 
-class AuraTestContextFactory;
-
 // A base class for aura unit tests.
 // TODO(beng): Instances of this test will create and own a RootWindow.
 class AuraTestBase : public testing::Test {
@@ -71,7 +69,6 @@
   bool setup_called_ = false;
   bool teardown_called_ = false;
   std::unique_ptr<AuraTestHelper> helper_;
-  std::unique_ptr<AuraTestContextFactory> mus_context_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(AuraTestBase);
 };
diff --git a/ui/aura/test/aura_test_context_factory.cc b/ui/aura/test/aura_test_context_factory.cc
deleted file mode 100644
index 096f2675..0000000
--- a/ui/aura/test/aura_test_context_factory.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/aura/test/aura_test_context_factory.h"
-
-#include "cc/test/test_layer_tree_frame_sink.h"
-#include "components/viz/test/fake_output_surface.h"
-#include "components/viz/test/fake_skia_output_surface.h"
-#include "components/viz/test/test_context_provider.h"
-
-namespace aura {
-namespace test {
-namespace {
-
-class FrameSinkClient : public cc::TestLayerTreeFrameSinkClient {
- public:
-  explicit FrameSinkClient(
-      scoped_refptr<viz::ContextProvider> display_context_provider)
-      : display_context_provider_(std::move(display_context_provider)) {}
-
-  // cc::TestLayerTreeFrameSinkClient:
-  std::unique_ptr<viz::SkiaOutputSurface> CreateDisplaySkiaOutputSurface()
-      override {
-    return viz::FakeSkiaOutputSurface::Create3d();
-  }
-
-  std::unique_ptr<viz::OutputSurface> CreateDisplayOutputSurface(
-      scoped_refptr<viz::ContextProvider> compositor_context_provider)
-      override {
-    return viz::FakeOutputSurface::Create3d(
-        std::move(display_context_provider_));
-  }
-  void DisplayReceivedLocalSurfaceId(
-      const viz::LocalSurfaceId& local_surface_id) override {}
-  void DisplayReceivedCompositorFrame(
-      const viz::CompositorFrame& frame) override {}
-  void DisplayWillDrawAndSwap(bool will_draw_and_swap,
-                              viz::RenderPassList* render_passes) override {}
-  void DisplayDidDrawAndSwap() override {}
-
- private:
-  scoped_refptr<viz::ContextProvider> display_context_provider_;
-
-  DISALLOW_COPY_AND_ASSIGN(FrameSinkClient);
-};
-
-}  // namespace
-
-AuraTestContextFactory::AuraTestContextFactory() = default;
-
-AuraTestContextFactory::~AuraTestContextFactory() = default;
-
-void AuraTestContextFactory::CreateLayerTreeFrameSink(
-    base::WeakPtr<ui::Compositor> compositor) {
-  scoped_refptr<viz::TestContextProvider> context_provider =
-      viz::TestContextProvider::Create();
-  std::unique_ptr<FrameSinkClient> frame_sink_client =
-      std::make_unique<FrameSinkClient>(context_provider);
-  constexpr bool synchronous_composite = false;
-  constexpr bool disable_display_vsync = false;
-  const double refresh_rate = 200.0;
-  auto frame_sink = std::make_unique<cc::TestLayerTreeFrameSink>(
-      context_provider, viz::TestContextProvider::CreateWorker(),
-      GetGpuMemoryBufferManager(), renderer_settings(),
-      base::ThreadTaskRunnerHandle::Get().get(), synchronous_composite,
-      disable_display_vsync, refresh_rate);
-  frame_sink->SetClient(frame_sink_client.get());
-  compositor->SetLayerTreeFrameSink(std::move(frame_sink), nullptr);
-  frame_sink_clients_.insert(std::move(frame_sink_client));
-}
-
-}  // namespace test
-}  // namespace aura
diff --git a/ui/aura/test/aura_test_context_factory.h b/ui/aura/test/aura_test_context_factory.h
deleted file mode 100644
index d4cad6c..0000000
--- a/ui/aura/test/aura_test_context_factory.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_AURA_TEST_AURA_TEST_CONTEXT_FACTORY_H_
-#define UI_AURA_TEST_AURA_TEST_CONTEXT_FACTORY_H_
-
-#include <memory>
-
-#include "base/macros.h"
-#include "ui/compositor/test/fake_context_factory.h"
-
-namespace cc {
-class TestLayerTreeFrameSinkClient;
-}
-
-namespace aura {
-namespace test {
-
-class AuraTestContextFactory : public ui::FakeContextFactory {
- public:
-  AuraTestContextFactory();
-  ~AuraTestContextFactory() override;
-
-  // ui::FakeContextFactory
-  void CreateLayerTreeFrameSink(
-      base::WeakPtr<ui::Compositor> compositor) override;
-
- private:
-  std::set<std::unique_ptr<cc::TestLayerTreeFrameSinkClient>>
-      frame_sink_clients_;
-
-  DISALLOW_COPY_AND_ASSIGN(AuraTestContextFactory);
-};
-
-}  // namespace test
-}  // namespace aura
-
-#endif  // UI_AURA_TEST_AURA_TEST_CONTEXT_FACTORY_H_<
diff --git a/ui/base/clipboard/clipboard_win.cc b/ui/base/clipboard/clipboard_win.cc
index 23681d4..7a80d2f 100644
--- a/ui/base/clipboard/clipboard_win.cc
+++ b/ui/base/clipboard/clipboard_win.cc
@@ -178,7 +178,8 @@
 void MakeBitmapOpaque(SkPixmap* pixmap) {
   for (int x = 0; x < pixmap->width(); ++x) {
     for (int y = 0; y < pixmap->height(); ++y) {
-      *pixmap->writable_addr32(x, y) = SkColorSetA(*pixmap->addr32(x, y), 0xFF);
+      *pixmap->writable_addr32(x, y) =
+          SkColorSetA(*pixmap->addr32(x, y), SK_AlphaOPAQUE);
     }
   }
 }
diff --git a/ui/base/ime/init/input_method_initializer.cc b/ui/base/ime/init/input_method_initializer.cc
index 18250fb..e903d1b 100644
--- a/ui/base/ime/init/input_method_initializer.cc
+++ b/ui/base/ime/init/input_method_initializer.cc
@@ -58,8 +58,6 @@
   LinuxInputMethodContextFactory::SetInstance(
       g_linux_input_method_context_factory_for_testing);
 #elif defined(OS_WIN)
-  // Make sure COM is initialized because TSF depends on COM.
-  CoInitialize(nullptr);
   TSFBridge::Initialize();
 #endif
 }
@@ -72,12 +70,11 @@
       LinuxInputMethodContextFactory::instance();
   CHECK(!factory || factory == g_linux_input_method_context_factory_for_testing)
       << "An unknown LinuxInputMethodContextFactory was set.";
-  LinuxInputMethodContextFactory::SetInstance(NULL);
+  LinuxInputMethodContextFactory::SetInstance(nullptr);
   delete g_linux_input_method_context_factory_for_testing;
-  g_linux_input_method_context_factory_for_testing = NULL;
+  g_linux_input_method_context_factory_for_testing = nullptr;
 #elif defined(OS_WIN)
   TSFBridge::Shutdown();
-  CoUninitialize();
 #endif
 }
 
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
index 180bf1add..2330ddf 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -187,7 +187,7 @@
 <translation id="3197563288998582412">UK – Dvorak</translation>
 <translation id="3202131003361292969">Pfad</translation>
 <translation id="3224239078034945833">Kanadisch – mehrsprachig</translation>
-<translation id="3236289833370040187">Die Inhaberschaft wird übertragen an <ph name="DESTINATION_DOMAIN" />.</translation>
+<translation id="3236289833370040187">Die Eigentümerschaft geht auf <ph name="DESTINATION_DOMAIN" /> über.</translation>
 <translation id="3241720467332021590">Irisch</translation>
 <translation id="3245321423178950146">Unbekannter Musiker</translation>
 <translation id="3252266817569339921">Französisch</translation>
diff --git a/ui/compositor/test/test_suite.h b/ui/compositor/test/test_suite.h
index 062e1f6d..388ba38 100644
--- a/ui/compositor/test/test_suite.h
+++ b/ui/compositor/test/test_suite.h
@@ -5,9 +5,12 @@
 #ifndef UI_COMPOSITOR_TEST_TEST_SUITE_H_
 #define UI_COMPOSITOR_TEST_TEST_SUITE_H_
 
-#include "base/compiler_specific.h"
-#include "base/macros.h"
 #include "base/test/test_suite.h"
+#include "build/build_config.h"
+
+#if defined(OS_WIN)
+#include "base/win/scoped_com_initializer.h"
+#endif
 
 namespace ui {
 namespace test {
@@ -18,10 +21,14 @@
   ~CompositorTestSuite() override;
 
  protected:
-  // Overridden from base::TestSuite:
+  // base::TestSuite:
   void Initialize() override;
 
  private:
+#if defined(OS_WIN)
+  base::win::ScopedCOMInitializer com_initializer_;
+#endif
+
   DISALLOW_COPY_AND_ASSIGN(CompositorTestSuite);
 };
 
diff --git a/ui/display/win/screen_win.cc b/ui/display/win/screen_win.cc
index 73625f9a..a087d37 100644
--- a/ui/display/win/screen_win.cc
+++ b/ui/display/win/screen_win.cc
@@ -13,6 +13,7 @@
 #include "base/bind_helpers.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/numerics/ranges.h"
+#include "base/optional.h"
 #include "base/stl_util.h"
 #include "base/win/win_util.h"
 #include "base/win/windows_version.h"
@@ -25,6 +26,7 @@
 #include "ui/display/win/screen_win_display.h"
 #include "ui/gfx/geometry/point_conversions.h"
 #include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/rect_f.h"
 #include "ui/gfx/geometry/safe_integer_conversions.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/geometry/vector2d.h"
@@ -39,9 +41,9 @@
 ScreenWin* g_instance = nullptr;
 
 // Gets the DPI for a particular monitor.
-int GetPerMonitorDPI(HMONITOR monitor) {
+base::Optional<int> GetPerMonitorDPI(HMONITOR monitor) {
   if (!base::win::IsProcessPerMonitorDpiAware())
-    return 0;
+    return base::nullopt;
 
   static auto get_dpi_for_monitor_func = []() {
     const HMODULE shcore_dll = ::LoadLibrary(L"shcore.dll");
@@ -53,12 +55,19 @@
   if (!get_dpi_for_monitor_func ||
       !SUCCEEDED(
           get_dpi_for_monitor_func(monitor, MDT_EFFECTIVE_DPI, &dpi_x, &dpi_y)))
-    return 0;
+    return base::nullopt;
 
   DCHECK_EQ(dpi_x, dpi_y);
   return int{dpi_x};
 }
 
+float GetScaleFactorForDPI(int dpi, bool include_accessibility) {
+  const float scale = display::win::internal::GetScalingFactorFromDPI(dpi);
+  return include_accessibility
+             ? (scale * UwpTextScaleFactor::Instance()->GetTextScaleFactor())
+             : scale;
+}
+
 // Gets the raw monitor scale factor.
 //
 // Respects the forced device scale factor, and will fall back to the global
@@ -69,29 +78,20 @@
   if (Display::HasForceDeviceScaleFactor())
     return Display::GetForcedDeviceScaleFactor();
 
-  const int dpi = GetPerMonitorDPI(monitor);
-  if (!dpi)
-    return GetDPIScale();
-
-  float scale_factor = display::win::internal::GetScalingFactorFromDPI(dpi);
-  if (include_accessibility) {
-    float text_scale_factor =
-        UwpTextScaleFactor::Instance()->GetTextScaleFactor();
-    scale_factor *= text_scale_factor;
-  }
-  return scale_factor;
+  const auto dpi = GetPerMonitorDPI(monitor);
+  return dpi ? GetScaleFactorForDPI(dpi.value(), include_accessibility)
+             : GetDPIScale();
 }
 
 std::vector<DISPLAYCONFIG_PATH_INFO> GetPathInfos() {
-  LONG result;
-  std::vector<DISPLAYCONFIG_PATH_INFO> path_infos;
-  do {
+  for (LONG result = ERROR_INSUFFICIENT_BUFFER;
+       result == ERROR_INSUFFICIENT_BUFFER;) {
     uint32_t path_elements, mode_elements;
     if (GetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS, &path_elements,
                                     &mode_elements) != ERROR_SUCCESS) {
       return {};
     }
-    path_infos.resize(path_elements);
+    std::vector<DISPLAYCONFIG_PATH_INFO> path_infos(path_elements);
     std::vector<DISPLAYCONFIG_MODE_INFO> mode_infos(mode_elements);
     result = QueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS, &path_elements,
                                 path_infos.data(), &mode_elements,
@@ -100,16 +100,16 @@
       path_infos.resize(path_elements);
       return path_infos;
     }
-  } while (result == ERROR_INSUFFICIENT_BUFFER);
+  }
   return {};
 }
 
-bool GetPathInfo(HMONITOR monitor, DISPLAYCONFIG_PATH_INFO* path_info) {
+base::Optional<DISPLAYCONFIG_PATH_INFO> GetPathInfo(HMONITOR monitor) {
   // Get the monitor name.
   MONITORINFOEX monitor_info = {};
   monitor_info.cbSize = sizeof(monitor_info);
   if (!GetMonitorInfo(monitor, &monitor_info))
-    return false;
+    return base::nullopt;
 
   // Look for a path info with a matching name.
   std::vector<DISPLAYCONFIG_PATH_INFO> path_infos = GetPathInfos();
@@ -120,22 +120,19 @@
     device_name.header.adapterId = info.sourceInfo.adapterId;
     device_name.header.id = info.sourceInfo.id;
     if ((DisplayConfigGetDeviceInfo(&device_name.header) == ERROR_SUCCESS) &&
-        (wcscmp(monitor_info.szDevice, device_name.viewGdiDeviceName) == 0)) {
-      *path_info = info;
-      return true;
-    }
+        (wcscmp(monitor_info.szDevice, device_name.viewGdiDeviceName) == 0))
+      return info;
   }
-  return false;
+  return base::nullopt;
 }
 
 float GetMonitorSDRWhiteLevel(HMONITOR monitor) {
-  DISPLAYCONFIG_PATH_INFO path_info = {};
-  if (GetPathInfo(monitor, &path_info)) {
+  if (auto path_info = GetPathInfo(monitor)) {
     DISPLAYCONFIG_SDR_WHITE_LEVEL white_level = {};
     white_level.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_SDR_WHITE_LEVEL;
     white_level.header.size = sizeof(white_level);
-    white_level.header.adapterId = path_info.targetInfo.adapterId;
-    white_level.header.id = path_info.targetInfo.id;
+    white_level.header.adapterId = path_info->targetInfo.adapterId;
+    white_level.header.id = path_info->targetInfo.id;
     if (DisplayConfigGetDeviceInfo(&white_level.header) == ERROR_SUCCESS)
       return white_level.SDRWhiteLevel * 80.0 / 1000.0;
   }
@@ -158,17 +155,17 @@
   }
 }
 
-void GetDisplaySettingsForDevice(const wchar_t* device_name,
-                                 Display::Rotation* rotation,
-                                 int* frequency) {
-  *rotation = Display::ROTATE_0;
-  *frequency = 0;
+struct DisplaySettings {
+  Display::Rotation rotation;
+  int frequency;
+};
+DisplaySettings GetDisplaySettingsForDevice(const wchar_t* device_name) {
   DEVMODE mode = {};
   mode.dmSize = sizeof(mode);
   if (!::EnumDisplaySettings(device_name, ENUM_CURRENT_SETTINGS, &mode))
-    return;
-  *rotation = OrientationToRotation(mode.dmDisplayOrientation);
-  *frequency = mode.dmDisplayFrequency;
+    return {Display::ROTATE_0, 0};
+  return {OrientationToRotation(mode.dmDisplayOrientation),
+          mode.dmDisplayFrequency};
 }
 
 std::vector<DisplayInfo> FindAndRemoveTouchingDisplayInfos(
@@ -185,14 +182,22 @@
   return touching_display_infos;
 }
 
+gfx::DisplayColorSpaces GetSourceColorSpaces(
+    const Display& display,
+    ColorProfileReader* color_profile_reader,
+    bool hdr_enabled) {
+  if (Display::HasForceDisplayColorProfile())
+    return display.color_spaces();
+  if (hdr_enabled)
+    return gfx::DisplayColorSpaces();
+  return gfx::DisplayColorSpaces(
+      color_profile_reader->GetDisplayColorSpace(display.id()));
+}
+
 void ConfigureColorSpacesForHdr(float sdr_white_level,
                                 gfx::DisplayColorSpaces* color_spaces) {
   color_spaces->SetSDRWhiteLevel(sdr_white_level);
 
-  // This will map to DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 with
-  // DXGI_FORMAT_B8G8R8A8_UNORM.
-  const auto srgb = gfx::ColorSpace::CreateSRGB();
-
   // This will map to DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709. In that space,
   // the brightness of (1,1,1) is 80 nits.
   constexpr float kScrgbWhiteLevel = 80.0f;
@@ -203,16 +208,8 @@
   // (1,1,1) mapping to the specified number of nits.
   const auto hdr10 = gfx::ColorSpace::CreateHDR10(sdr_white_level);
 
-  // For sRGB content, use 8-bit formats.
-  constexpr bool kNeedsAlpha = true;
-  color_spaces->SetOutputColorSpaceAndBufferFormat(
-      gfx::ContentColorUsage::kSRGB, !kNeedsAlpha, srgb,
-      gfx::BufferFormat::BGRX_8888);
-  color_spaces->SetOutputColorSpaceAndBufferFormat(
-      gfx::ContentColorUsage::kSRGB, kNeedsAlpha, srgb,
-      gfx::BufferFormat::BGRA_8888);
-
   // Use HDR color spaces only when there is WCG or HDR content on the screen.
+  constexpr bool kNeedsAlpha = true;
   for (const auto& usage : {gfx::ContentColorUsage::kWideColorGamut,
                             gfx::ContentColorUsage::kHDR}) {
     // Using RGBA F16 backbuffers required by SCRGB linear causes stuttering on
@@ -245,23 +242,18 @@
   display.set_display_frequency(display_info.display_frequency());
 
   // Compute the DisplayColorSpace for this configuration.
+  gfx::DisplayColorSpaces color_spaces =
+      GetSourceColorSpaces(display, color_profile_reader, hdr_enabled);
   // When alpha is not needed, specify BGRX_8888 to get DXGI_ALPHA_MODE_IGNORE.
   // This saves significant power (see https://crbug.com/1057163).
-  gfx::DisplayColorSpaces color_spaces = display.color_spaces();
-  if (Display::HasForceDisplayColorProfile()) {
-    color_spaces.SetOutputBufferFormats(gfx::BufferFormat::BGRX_8888,
-                                        gfx::BufferFormat::BGRA_8888);
-  } else if (hdr_enabled) {
+  color_spaces.SetOutputBufferFormats(gfx::BufferFormat::BGRX_8888,
+                                      gfx::BufferFormat::BGRA_8888);
+  if (hdr_enabled && !Display::HasForceDisplayColorProfile()) {
     ConfigureColorSpacesForHdr(display_info.sdr_white_level(), &color_spaces);
 
     // These are (ab)used by pages via media query APIs to detect HDR support.
     display.set_color_depth(Display::kHDR10BitsPerPixel);
     display.set_depth_per_component(Display::kHDR10BitsPerComponent);
-  } else {
-    color_spaces = gfx::DisplayColorSpaces(
-        color_profile_reader->GetDisplayColorSpace(display_info.id()));
-    color_spaces.SetOutputBufferFormats(gfx::BufferFormat::BGRX_8888,
-                                        gfx::BufferFormat::BGRA_8888);
   }
   display.set_color_spaces(color_spaces);
 
@@ -341,21 +333,21 @@
   return monitor_info;
 }
 
-gfx::Vector2dF GetPixelsPerInchForPointerDevice(HANDLE source_device) {
+base::Optional<gfx::Vector2dF> GetPixelsPerInchForPointerDevice(
+    HANDLE source_device) {
   static const auto get_pointer_device_rects =
       reinterpret_cast<decltype(&::GetPointerDeviceRects)>(
           base::win::GetUser32FunctionPointer("GetPointerDeviceRects"));
-  RECT screen = {};
-  RECT device = {};
+  RECT device_rect, screen_rect;
   if (!get_pointer_device_rects ||
-      !get_pointer_device_rects(source_device, &device, &screen))
-    return gfx::Vector2dF();
+      !get_pointer_device_rects(source_device, &device_rect, &screen_rect))
+    return base::nullopt;
 
+  const gfx::RectF device{gfx::Rect(device_rect)};
+  const gfx::RectF screen{gfx::Rect(screen_rect)};
   constexpr float kHimetricPerInch = 2540.0f;
-  float himetric_per_pixel_x =
-      float{device.right - device.left} / float{screen.right - screen.left};
-  float himetric_per_pixel_y =
-      float{device.bottom - device.top} / float{screen.bottom - screen.top};
+  const float himetric_per_pixel_x = device.width() / screen.width();
+  const float himetric_per_pixel_y = device.height() / screen.height();
   return gfx::Vector2dF(kHimetricPerInch / himetric_per_pixel_x,
                         kHimetricPerInch / himetric_per_pixel_y);
 }
@@ -366,29 +358,28 @@
   return gfx::Vector2dF(default_dpi, default_dpi);
 }
 
-// Retrieve PPI for |monitor| based on touch pointer device handles.
-gfx::Vector2dF GetMonitorPixelsPerInch(HMONITOR monitor) {
+// Retrieves PPI for |monitor| based on touch pointer device handles.  Returns
+// nullopt if a pointer device for |monitor| can't be found.
+base::Optional<gfx::Vector2dF> GetMonitorPixelsPerInch(HMONITOR monitor) {
   static const auto get_pointer_devices =
       reinterpret_cast<decltype(&::GetPointerDevices)>(
           base::win::GetUser32FunctionPointer("GetPointerDevices"));
   uint32_t pointer_device_count = 0;
-  if (get_pointer_devices)
-    get_pointer_devices(&pointer_device_count, nullptr);
+  if (!get_pointer_devices ||
+      !get_pointer_devices(&pointer_device_count, nullptr) ||
+      (pointer_device_count == 0))
+    return base::nullopt;
 
-  gfx::Vector2dF pixels_per_inch = GetDefaultMonitorPhysicalPixelsPerInch();
-  if (pointer_device_count != 0) {
-    std::vector<POINTER_DEVICE_INFO> pointer_devices(pointer_device_count);
-    if (get_pointer_devices(&pointer_device_count, &pointer_devices.front())) {
-      for (const auto& device : pointer_devices) {
-        if (device.pointerDeviceType == POINTER_DEVICE_TYPE_TOUCH &&
-            device.monitor == monitor) {
-          pixels_per_inch = GetPixelsPerInchForPointerDevice(device.device);
-          break;
-        }
-      }
-    }
+  std::vector<POINTER_DEVICE_INFO> pointer_devices(pointer_device_count);
+  if (!get_pointer_devices(&pointer_device_count, pointer_devices.data()))
+    return base::nullopt;
+
+  for (const auto& device : pointer_devices) {
+    if (device.pointerDeviceType == POINTER_DEVICE_TYPE_TOUCH &&
+        device.monitor == monitor)
+      return GetPixelsPerInchForPointerDevice(device.device);
   }
-  return pixels_per_inch;
+  return base::nullopt;
 }
 
 BOOL CALLBACK EnumMonitorForDisplayInfoCallback(HMONITOR monitor,
@@ -396,17 +387,18 @@
                                                 LPRECT rect,
                                                 LPARAM data) {
   const MONITORINFOEX monitor_info = MonitorInfoFromHMONITOR(monitor);
-  Display::Rotation rotation;
-  int display_frequency;
-  GetDisplaySettingsForDevice(monitor_info.szDevice, &rotation,
-                              &display_frequency);
-  gfx::Vector2dF pixels_per_inch = GetMonitorPixelsPerInch(monitor);
+  const auto display_settings =
+      GetDisplaySettingsForDevice(monitor_info.szDevice);
+  const gfx::Vector2dF pixels_per_inch =
+      GetMonitorPixelsPerInch(monitor).value_or(
+          GetDefaultMonitorPhysicalPixelsPerInch());
 
   auto* display_infos = reinterpret_cast<std::vector<DisplayInfo>*>(data);
   DCHECK(display_infos);
   display_infos->emplace_back(monitor_info, GetMonitorScaleFactor(monitor),
-                              GetMonitorSDRWhiteLevel(monitor), rotation,
-                              display_frequency, pixels_per_inch);
+                              GetMonitorSDRWhiteLevel(monitor),
+                              display_settings.rotation,
+                              display_settings.frequency, pixels_per_inch);
   return TRUE;
 }
 
@@ -461,14 +453,14 @@
   const ScreenWinDisplay screen_win_display =
       GetScreenWinDisplayVia(&ScreenWin::GetScreenWinDisplayNearestScreenPoint,
                              gfx::ToFlooredPoint(pixel_point));
-  return ::display::win::ScreenToDIPPoint(pixel_point, screen_win_display);
+  return display::win::ScreenToDIPPoint(pixel_point, screen_win_display);
 }
 
 // static
 gfx::Point ScreenWin::DIPToScreenPoint(const gfx::Point& dip_point) {
   const ScreenWinDisplay screen_win_display = GetScreenWinDisplayVia(
       &ScreenWin::GetScreenWinDisplayNearestDIPPoint, dip_point);
-  return ::display::win::DIPToScreenPoint(dip_point, screen_win_display);
+  return display::win::DIPToScreenPoint(dip_point, screen_win_display);
 }
 
 // static
@@ -488,12 +480,11 @@
       ? GetScreenWinDisplayVia(&ScreenWin::GetScreenWinDisplayNearestHWND, hwnd)
       : GetScreenWinDisplayVia(
             &ScreenWin::GetScreenWinDisplayNearestScreenRect, pixel_bounds);
+  const gfx::Point origin = gfx::ToFlooredPoint(display::win::ScreenToDIPPoint(
+      gfx::PointF(pixel_bounds.origin()), screen_win_display));
   const float scale_factor =
       1.0f / screen_win_display.display().device_scale_factor();
-  gfx::Rect dip_rect = ScaleToEnclosingRect(pixel_bounds, scale_factor);
-  dip_rect.set_origin(gfx::ToFlooredPoint(::display::win::ScreenToDIPPoint(
-      gfx::PointF(pixel_bounds.origin()), screen_win_display)));
-  return dip_rect;
+  return {origin, ScaleToEnclosingRect(pixel_bounds, scale_factor).size()};
 }
 
 // static
@@ -502,11 +493,10 @@
       ? GetScreenWinDisplayVia(&ScreenWin::GetScreenWinDisplayNearestHWND, hwnd)
       : GetScreenWinDisplayVia(
             &ScreenWin::GetScreenWinDisplayNearestDIPRect, dip_bounds);
-  float scale_factor = screen_win_display.display().device_scale_factor();
-  gfx::Rect screen_rect = ScaleToEnclosingRect(dip_bounds, scale_factor);
-  screen_rect.set_origin(::display::win::DIPToScreenPoint(dip_bounds.origin(),
-                                                          screen_win_display));
-  return screen_rect;
+  const gfx::Point origin =
+      display::win::DIPToScreenPoint(dip_bounds.origin(), screen_win_display);
+  const float scale_factor = screen_win_display.display().device_scale_factor();
+  return {origin, ScaleToEnclosingRect(dip_bounds, scale_factor).size()};
 }
 
 // static
@@ -562,13 +552,9 @@
 
 // static
 float ScreenWin::GetScaleFactorForHWND(HWND hwnd) {
-  if (!g_instance)
-    return ScreenWinDisplay().display().device_scale_factor();
-
-  DCHECK(hwnd);
-  HWND root_hwnd = g_instance->GetRootWindow(hwnd);
-  ScreenWinDisplay screen_win_display =
-      g_instance->GetScreenWinDisplayNearestHWND(root_hwnd);
+  const HWND root_hwnd = g_instance ? g_instance->GetRootWindow(hwnd) : hwnd;
+  const ScreenWinDisplay screen_win_display = GetScreenWinDisplayVia(
+      &ScreenWin::GetScreenWinDisplayNearestHWND, root_hwnd);
   return screen_win_display.display().device_scale_factor();
 }
 
@@ -586,14 +572,13 @@
     return GetDPIFromScalingFactor(Display::GetForcedDeviceScaleFactor());
 
   const HMONITOR monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
-  int dpi = GetPerMonitorDPI(monitor);
-  return dpi ? dpi : display::win::internal::GetDefaultSystemDPI();
+  return GetPerMonitorDPI(monitor).value_or(
+      display::win::internal::GetDefaultSystemDPI());
 }
 
 // static
 float ScreenWin::GetScaleFactorForDPI(int dpi) {
-  return display::win::internal::GetScalingFactorFromDPI(dpi) *
-         UwpTextScaleFactor::Instance()->GetTextScaleFactor();
+  return display::win::GetScaleFactorForDPI(dpi, true);
 }
 
 // static
diff --git a/ui/file_manager/file_manager/foreground/js/ui/breadcrumb.js b/ui/file_manager/file_manager/foreground/js/ui/breadcrumb.js
index b3a3c74..9d7a2e5 100644
--- a/ui/file_manager/file_manager/foreground/js/ui/breadcrumb.js
+++ b/ui/file_manager/file_manager/foreground/js/ui/breadcrumb.js
@@ -101,10 +101,15 @@
       background-color: rgba(0, 0, 0, 12%);
     }
 
-    button:not([disabled]):hover {
+    button:not([disabled]):not(:active):hover {
       background-color: rgba(0, 0, 0, 4%);
     }
 
+    :host-context(:root.pointer-active) button:not(:active):hover {
+      background-color: unset;
+      cursor: default;
+    }
+
     button[id]:focus, button[elider]:focus {
       background-color: unset;
       border: 1px solid var(--google-blue-600);
diff --git a/ui/file_manager/file_manager/main.html b/ui/file_manager/file_manager/main.html
index 6352bd8..3491637 100644
--- a/ui/file_manager/file_manager/main.html
+++ b/ui/file_manager/file_manager/main.html
@@ -30,7 +30,7 @@
     <script src="foreground/js/main_scripts.js" defer></script>
   </head>
 
-  <body aria-label="$i18n{FILEMANAGER_APP_NAME}" tabindex="-1">
+  <body aria-label="$i18n{FILEMANAGER_APP_NAME}" tabindex="-1" class="files-ng">
     <custom-style>
       <style>
         .dialog-footer cr-input {
@@ -337,7 +337,7 @@
       </cr-menu>
     </menus>
 
-    <div class="dialog-header" role="contentinfo">
+    <div class="dialog-header files-ng" role="contentinfo">
       <div id="location-breadcrumbs" class="breadcrumbs"></div>
       <div id="read-only-indicator" hidden>
         <span id="read-only-icon"></span>
@@ -477,7 +477,7 @@
     <div class="dialog-container">
       <div class="dialog-navigation-list">
         <div class="dialog-navigation-list-contents" role="navigation">
-          <tree id="directory-tree" role="tree" tabindex="0"></tree>
+          <tree id="directory-tree" role="tree" tabindex="0" files-ng></tree>
         </div>
         <div class="dialog-navigation-list-footer" hidden>
           <div id="progress-center" hidden>
diff --git a/ui/gfx/animation/tween.cc b/ui/gfx/animation/tween.cc
index 245a0b65..c3ce04de 100644
--- a/ui/gfx/animation/tween.cc
+++ b/ui/gfx/animation/tween.cc
@@ -109,7 +109,7 @@
   float target_a = SkColorGetA(target) / 255.f;
   float blended_a = FloatValueBetween(value, start_a, target_a);
   if (blended_a <= 0.f)
-    return SkColorSetARGB(0, 0, 0, 0);
+    return SK_ColorTRANSPARENT;
   blended_a = std::min(blended_a, 1.f);
 
   uint8_t blended_r =
diff --git a/ui/gfx/canvas_paint_mac.mm b/ui/gfx/canvas_paint_mac.mm
index 6123d915..cf22d3a1 100644
--- a/ui/gfx/canvas_paint_mac.mm
+++ b/ui/gfx/canvas_paint_mac.mm
@@ -62,10 +62,10 @@
   gfx::Size size(NSWidth(rectangle_), NSHeight(rectangle_));
   RecreateBackingCanvas(size, scale, opaque);
   cc::PaintCanvas* canvas = sk_canvas();
-  canvas->clear(SkColorSetARGB(0, 0, 0, 0));
+  canvas->clear(SK_ColorTRANSPARENT);
 
-    // Need to translate so that the dirty region appears at the origin of the
-    // surface.
+  // Need to translate so that the dirty region appears at the origin of the
+  // surface.
   canvas->translate(-SkDoubleToScalar(NSMinX(rectangle_)),
                     -SkDoubleToScalar(NSMinY(rectangle_)));
 }
diff --git a/ui/gfx/image/image_skia_operations.cc b/ui/gfx/image/image_skia_operations.cc
index a190ece..5ed1336 100644
--- a/ui/gfx/image/image_skia_operations.cc
+++ b/ui/gfx/image/image_skia_operations.cc
@@ -168,7 +168,7 @@
     SkBitmap alpha;
     alpha.allocN32Pixels(image_rep.pixel_width(),
                          image_rep.pixel_height());
-    alpha.eraseColor(SkColorSetARGB(alpha_ * 255, 0, 0, 0));
+    alpha.eraseColor(SkColorSetA(SK_ColorBLACK, SK_AlphaOPAQUE * alpha_));
     return ImageSkiaRep(
         SkBitmapOperations::CreateMaskedBitmap(image_rep.GetBitmap(), alpha),
         image_rep.scale());
diff --git a/ui/message_center/views/message_view.cc b/ui/message_center/views/message_view.cc
index bcadf5c5..f82e7db 100644
--- a/ui/message_center/views/message_view.cc
+++ b/ui/message_center/views/message_view.cc
@@ -38,8 +38,6 @@
 
 namespace {
 
-constexpr SkColor kBorderColor = SkColorSetARGB(0x1F, 0x0, 0x0, 0x0);
-
 // Creates a text for spoken feedback from the data contained in the
 // notification.
 base::string16 CreateAccessibleName(const Notification& notification) {
@@ -136,8 +134,7 @@
   slide_out_controller_.set_slide_mode(CalculateSlideMode());
   slide_out_controller_.set_update_opacity(false);
 
-  SetBorder(views::CreateRoundedRectBorder(
-      kNotificationBorderThickness, kNotificationCornerRadius, kBorderColor));
+  SetNestedBorderIfNecessary();
   if (GetControlButtonsView())
     GetControlButtonsView()->ShowCloseButton(GetMode() != Mode::PINNED);
 }
@@ -323,6 +320,11 @@
     focus_manager_->AddFocusChangeListener(this);
 }
 
+void MessageView::OnThemeChanged() {
+  InkDropHostView::OnThemeChanged();
+  SetNestedBorderIfNecessary();
+}
+
 ui::Layer* MessageView::GetSlideOutLayer() {
   return is_nested_ ? layer() : GetWidget()->GetLayer();
 }
@@ -456,6 +458,14 @@
 #endif
 }
 
+void MessageView::SetNestedBorderIfNecessary() {
+  if (is_nested_) {
+    SkColor border_color = SkColorSetARGB(0x1F, 0x0, 0x0, 0x0);
+    SetBorder(views::CreateRoundedRectBorder(
+        kNotificationBorderThickness, kNotificationCornerRadius, border_color));
+  }
+}
+
 void MessageView::UpdateControlButtonsVisibility() {
   auto* control_buttons_view = GetControlButtonsView();
   if (control_buttons_view)
diff --git a/ui/message_center/views/message_view.h b/ui/message_center/views/message_view.h
index 228cab40..d3b822db 100644
--- a/ui/message_center/views/message_view.h
+++ b/ui/message_center/views/message_view.h
@@ -130,6 +130,7 @@
   void RemovedFromWidget() override;
   void AddedToWidget() override;
   const char* GetClassName() const final;
+  void OnThemeChanged() override;
 
   // views::SlideOutControllerDelegate:
   ui::Layer* GetSlideOutLayer() override;
@@ -192,6 +193,9 @@
   // Returns if the control buttons should be shown.
   bool ShouldShowControlButtons() const;
 
+  // Sets the border if |is_nested_| is true.
+  void SetNestedBorderIfNecessary();
+
   std::string notification_id_;
   views::ScrollView* scroller_ = nullptr;
 
diff --git a/ui/native_theme/native_theme_unittest.cc b/ui/native_theme/native_theme_unittest.cc
index 12c112e..820fe4d 100644
--- a/ui/native_theme/native_theme_unittest.cc
+++ b/ui/native_theme/native_theme_unittest.cc
@@ -4,6 +4,9 @@
 
 #include "ui/native_theme/native_theme.h"
 
+#include <ostream>
+
+#include "base/strings/stringprintf.h"
 #include "base/test/scoped_feature_list.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/ui_base_features.h"
@@ -19,6 +22,25 @@
 #undef OP
 };
 
+struct PrintableSkColor {
+  bool operator==(const PrintableSkColor& other) const {
+    return color == other.color;
+  }
+
+  bool operator!=(const PrintableSkColor& other) const {
+    return !operator==(other);
+  }
+
+  const SkColor color;
+};
+
+std::ostream& operator<<(std::ostream& os, PrintableSkColor printable_color) {
+  SkColor color = printable_color.color;
+  return os << base::StringPrintf("SkColorARGB(0x%02x, 0x%02x, 0x%02x, 0x%02x)",
+                                  SkColorGetA(color), SkColorGetR(color),
+                                  SkColorGetG(color), SkColorGetB(color));
+}
+
 class NativeThemeRedirectedEquivalenceTest
     : public testing::TestWithParam<NativeTheme::ColorId> {
  public:
@@ -42,11 +64,11 @@
   NativeTheme* native_theme = NativeTheme::GetInstanceForNativeUi();
   NativeTheme::ColorId color_id = GetParam();
 
-  SkColor original = native_theme->GetSystemColor(color_id);
+  PrintableSkColor original{native_theme->GetSystemColor(color_id)};
 
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(features::kColorProviderRedirection);
-  SkColor redirected = native_theme->GetSystemColor(color_id);
+  PrintableSkColor redirected{native_theme->GetSystemColor(color_id)};
 
   EXPECT_EQ(original, redirected);
 }
diff --git a/ui/strings/translations/ui_strings_da.xtb b/ui/strings/translations/ui_strings_da.xtb
index 6bf77071..beb30e5 100644
--- a/ui/strings/translations/ui_strings_da.xtb
+++ b/ui/strings/translations/ui_strings_da.xtb
@@ -188,7 +188,7 @@
 <translation id="6974053822202609517">Højre til venstre</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="7130207228079676353">HØJST SANDSYNLIGT</translation>
-<translation id="7170202025028120564">Din apps skærmindstillinger træder i kraft, efter den næste genstart.</translation>
+<translation id="7170202025028120564">Din apps skærmindstillinger træder i kraft efter den næste genstart.</translation>
 <translation id="7222373446505536781">F11</translation>
 <translation id="7238427729722629793">{MINUTES,plural, =1{1 min. tilbage}one{# min. tilbage}other{# min. tilbage}}</translation>
 <translation id="7319740667687257810">Appliste, delvis visning</translation>
diff --git a/ui/strings/translations/ui_strings_gu.xtb b/ui/strings/translations/ui_strings_gu.xtb
index 2abe14d..1599523 100644
--- a/ui/strings/translations/ui_strings_gu.xtb
+++ b/ui/strings/translations/ui_strings_gu.xtb
@@ -162,7 +162,7 @@
 <translation id="6394627529324717982">અલ્પવિરામ</translation>
 <translation id="6397363302884558537">બોલવાનું રોકો</translation>
 <translation id="6404817160109697034">{SECONDS,plural, =1{1 સે પહેલાં}one{# સે પહેલાં}other{# સે પહેલાં}}</translation>
-<translation id="6417265370957905582">Google સહાયક</translation>
+<translation id="6417265370957905582">Google Assistant</translation>
 <translation id="6430678249303439055">આ ઍપના બધા નોટિફિકેશનો અવરોધિત કરો</translation>
 <translation id="6483402905448010557">{SECONDS,plural, =1{1 સેકંડ પહેલાં}one{# સેકંડ પહેલાં}other{# સેકંડ પહેલાં}}</translation>
 <translation id="6539092367496845964">કંઈક ખોટું થયું હતું. થોડીવાર પછી ફરી પ્રયાસ કરો.</translation>
diff --git a/ui/strings/translations/ui_strings_hi.xtb b/ui/strings/translations/ui_strings_hi.xtb
index c73f3502..94ec14c 100644
--- a/ui/strings/translations/ui_strings_hi.xtb
+++ b/ui/strings/translations/ui_strings_hi.xtb
@@ -21,6 +21,7 @@
 <translation id="1398853756734560583">बड़ा करें</translation>
 <translation id="1414271762428216854"><ph name="APP_NAME" />, इंस्टॉल किए गए ऐप्लिकेशन</translation>
 <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> शेयर नहीं किया जा सकता</translation>
+<translation id="1487931858675166540"><ph name="FIRST_ITEM_TITLE" /> की <ph name="SECOND_ITEM_TITLE" /> के साथ अदला-बदली की गई</translation>
 <translation id="1498028757988366001">आपने पहले इसे खोजा है. अगर आप "<ph name="QUERY" />" को अपने इतिहास से मिटा देते हैं, तो यह सभी डिवाइस पर मौजूद आपके खाते से हटा दिया जाएगा.</translation>
 <translation id="1591184457164800433">{MINUTES,plural, =1{1 मिनट और }one{# मिनट और }other{# मिनट और }}</translation>
 <translation id="1643823602425662293">सूचना</translation>
@@ -187,6 +188,7 @@
 <translation id="6974053822202609517">दाएं से बाएं</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="7130207228079676353">सबसे ज़्यादा संभावना है</translation>
+<translation id="7170202025028120564">आपके ऐप्लिकेशन की डिसप्ले सेटिंग अगली बार रीस्टार्ट होने पर लागू होंगी.</translation>
 <translation id="7222373446505536781">F11</translation>
 <translation id="7238427729722629793">{MINUTES,plural, =1{1 मिनट शेष}one{# मिनट शेष}other{# मिनट शेष}}</translation>
 <translation id="7319740667687257810">लॉन्चर, आंशिक व्यू</translation>
diff --git a/ui/strings/translations/ui_strings_ja.xtb b/ui/strings/translations/ui_strings_ja.xtb
index 0f6cb90..832ab9e 100644
--- a/ui/strings/translations/ui_strings_ja.xtb
+++ b/ui/strings/translations/ui_strings_ja.xtb
@@ -21,6 +21,7 @@
 <translation id="1398853756734560583">最大化</translation>
 <translation id="1414271762428216854"><ph name="APP_NAME" />、インストール済みアプリ</translation>
 <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> を共有できません</translation>
+<translation id="1487931858675166540"><ph name="FIRST_ITEM_TITLE" /> と <ph name="SECOND_ITEM_TITLE" /> が置き換わりました</translation>
 <translation id="1498028757988366001">このキーワードは以前に検索したことがあります。「<ph name="QUERY" />」を履歴から削除すると、アカウントから完全に(つまりすべてのデバイスから)削除されます。</translation>
 <translation id="1591184457164800433">{MINUTES,plural, =1{1 分 }other{# 分 }}</translation>
 <translation id="1643823602425662293">通知</translation>
@@ -187,6 +188,7 @@
 <translation id="6974053822202609517">右から左</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="7130207228079676353">これですか?</translation>
+<translation id="7170202025028120564">アプリケーションの表示設定は、再起動すると有効になります。</translation>
 <translation id="7222373446505536781">F11</translation>
 <translation id="7238427729722629793">{MINUTES,plural, =1{残り 1 分}other{残り # 分}}</translation>
 <translation id="7319740667687257810">ランチャー、一部のみ表示</translation>
diff --git a/ui/strings/translations/ui_strings_te.xtb b/ui/strings/translations/ui_strings_te.xtb
index e8f4d49..e7f605875 100644
--- a/ui/strings/translations/ui_strings_te.xtb
+++ b/ui/strings/translations/ui_strings_te.xtb
@@ -21,6 +21,7 @@
 <translation id="1398853756734560583">గరిష్ఠీకరించు</translation>
 <translation id="1414271762428216854"><ph name="APP_NAME" />, ఇన్‌స్టాల్ చేసిన యాప్</translation>
 <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> షేర్ చేయడం సాధ్యపడలేదు</translation>
+<translation id="1487931858675166540"><ph name="FIRST_ITEM_TITLE" />, <ph name="SECOND_ITEM_TITLE" />గా మార్చబడింది</translation>
 <translation id="1498028757988366001">మీరు దీని కోసం గతంలో వెతికారు. మీ చరిత్ర నుండి "<ph name="QUERY" />"ను తొలగిస్తే, మీ ఖాతాతో సైన్ ఇన్ చేసి ఉన్న మీ పరికరాలు అన్నింటిలో అది శాశ్వతంగా తీసివేయబడుతుంది.</translation>
 <translation id="1591184457164800433">{MINUTES,plural, =1{1 నిమిషం మరియు }other{# నిమిషాలు మరియు }}</translation>
 <translation id="1643823602425662293">నోటిఫికేషన్</translation>
@@ -187,6 +188,7 @@
 <translation id="6974053822202609517">కుడి నుండి ఎడమకు</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="7130207228079676353">అత్యంత ఇష్టపడేవి</translation>
+<translation id="7170202025028120564">మీ యాప్‌ను రీస్టార్ట్ చేసినప్పుడు, దాని ప్రదర్శన సెట్టింగ్‌లు అమలు అవుతాయి.</translation>
 <translation id="7222373446505536781">F11</translation>
 <translation id="7238427729722629793">{MINUTES,plural, =1{1 నిమి. మిగిలి ఉంది}other{# నిమి. మిగిలి ఉన్నాయి}}</translation>
 <translation id="7319740667687257810">లాంఛ‌ర్‌, పాక్షిక వీక్షణ</translation>
diff --git a/ui/strings/translations/ui_strings_vi.xtb b/ui/strings/translations/ui_strings_vi.xtb
index 7b900f7..1e8cf55 100644
--- a/ui/strings/translations/ui_strings_vi.xtb
+++ b/ui/strings/translations/ui_strings_vi.xtb
@@ -21,6 +21,7 @@
 <translation id="1398853756734560583">Phóng to</translation>
 <translation id="1414271762428216854"><ph name="APP_NAME" />, Ứng dụng đã được cài đặt</translation>
 <translation id="1450753235335490080">Không thể chia sẻ <ph name="CONTENT_TYPE" /></translation>
+<translation id="1487931858675166540">Đã hoán đổi <ph name="FIRST_ITEM_TITLE" /> bằng <ph name="SECOND_ITEM_TITLE" /></translation>
 <translation id="1498028757988366001">Bạn đã tìm kiếm nội dung này trước đây. Việc xóa "<ph name="QUERY" />" khỏi lịch sử sẽ xóa vĩnh viễn cụm từ tìm kiếm này khỏi tài khoản của bạn trên tất cả các thiết bị.</translation>
 <translation id="1591184457164800433">{MINUTES,plural, =1{1 phút và }other{# phút và }}</translation>
 <translation id="1643823602425662293">Thông báo</translation>
@@ -187,6 +188,7 @@
 <translation id="6974053822202609517">Phải sang Trái</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="7130207228079676353">RẤT CÓ THỂ</translation>
+<translation id="7170202025028120564">Các tùy chọn cài đặt hiển thị của ứng dụng sẽ có hiệu lực khi bạn khởi động lại ứng dụng vào lần sau.</translation>
 <translation id="7222373446505536781">F11</translation>
 <translation id="7238427729722629793">{MINUTES,plural, =1{Còn 1 phút}other{Còn # phút}}</translation>
 <translation id="7319740667687257810">Trình khởi chạy, chế độ xem một phần</translation>
diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc
index 2809978..ea653f1 100644
--- a/ui/views/bubble/bubble_frame_view.cc
+++ b/ui/views/bubble/bubble_frame_view.cc
@@ -87,7 +87,7 @@
   default_title_->SetVisible(false);
   AddChildView(default_title_);
 
-  auto close = CreateCloseButton(this, GetNativeTheme()->ShouldUseDarkColors());
+  auto close = CreateCloseButton(this);
   close->SetVisible(false);
 #if defined(OS_WIN)
   // Windows will automatically create a tooltip for the close button based on
@@ -119,13 +119,9 @@
 
 // static
 std::unique_ptr<Button> BubbleFrameView::CreateCloseButton(
-    ButtonListener* listener,
-    bool should_use_dark_colors) {
-  auto close_button = CreateVectorImageButton(listener);
-  SetImageFromVectorIconWithColor(
-      close_button.get(), vector_icons::kCloseRoundedIcon,
-      should_use_dark_colors ? SkColorSetA(SK_ColorWHITE, 0xDD)
-                             : gfx::kGoogleGrey700);
+    ButtonListener* listener) {
+  auto close_button = CreateVectorImageButtonWithNativeTheme(
+      listener, vector_icons::kCloseRoundedIcon);
   close_button->SetTooltipText(l10n_util::GetStringUTF16(IDS_APP_CLOSE));
   close_button->SizeToPreferredSize();
   close_button->SetFocusForPlatform();
diff --git a/ui/views/bubble/bubble_frame_view.h b/ui/views/bubble/bubble_frame_view.h
index 871782f..c841b13 100644
--- a/ui/views/bubble/bubble_frame_view.h
+++ b/ui/views/bubble/bubble_frame_view.h
@@ -42,8 +42,7 @@
       const base::string16& title_text);
 
   // Creates a close button used in the corner of the dialog.
-  static std::unique_ptr<Button> CreateCloseButton(ButtonListener* listener,
-                                                   bool should_use_dark_colors);
+  static std::unique_ptr<Button> CreateCloseButton(ButtonListener* listener);
 
   // NonClientFrameView:
   gfx::Rect GetBoundsForClientView() const override;
diff --git a/ui/views/controls/combobox/combobox.cc b/ui/views/controls/combobox/combobox.cc
index 99617cf..a1fcb3b 100644
--- a/ui/views/controls/combobox/combobox.cc
+++ b/ui/views/controls/combobox/combobox.cc
@@ -47,11 +47,8 @@
 constexpr int kNoSelection = -1;
 
 SkColor GetTextColorForEnableState(const Combobox& combobox, bool enabled) {
-  SkColor color =
-      style::GetColor(combobox, style::CONTEXT_TEXTFIELD, style::STYLE_PRIMARY);
-  if (!enabled)
-    color = SkColorSetA(color, gfx::kDisabledControlAlpha);
-  return color;
+  const int style = enabled ? style::STYLE_PRIMARY : style::STYLE_DISABLED;
+  return style::GetColor(combobox, style::CONTEXT_TEXTFIELD, style);
 }
 
 // The transparent button which holds a button state but is not rendered.
diff --git a/ui/views/examples/dialog_example.cc b/ui/views/examples/dialog_example.cc
index 3261305..b73bd012 100644
--- a/ui/views/examples/dialog_example.cc
+++ b/ui/views/examples/dialog_example.cc
@@ -49,7 +49,6 @@
     Label* body = new Label(parent_->body_->GetText());
     body->SetMultiLine(true);
     body->SetHorizontalAlignment(gfx::ALIGN_LEFT);
-    body->SetBackground(CreateSolidBackground(SkColorSetRGB(0, 255, 255)));
     this->AddChildView(body);
 
     if (parent_->has_extra_button_->GetChecked()) {
diff --git a/ui/views/touchui/touch_selection_menu_views.cc b/ui/views/touchui/touch_selection_menu_views.cc
index c41d4ae..ca02bef4 100644
--- a/ui/views/touchui/touch_selection_menu_views.cc
+++ b/ui/views/touchui/touch_selection_menu_views.cc
@@ -155,9 +155,9 @@
   for (auto i = children().cbegin(); i != std::prev(children().cend()); ++i) {
     const View* child = *i;
     int x = child->bounds().right() + kSpacingBetweenButtons / 2;
-    constexpr SkColor kButtonSeparatorColor = SkColorSetA(SK_ColorBLACK, 13);
     canvas->FillRect(gfx::Rect(x, 0, 1, child->height()),
-                     kButtonSeparatorColor);
+                     GetNativeTheme()->GetSystemColor(
+                         ui::NativeTheme::kColorId_SeparatorColor));
   }
 }
 
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_config.js b/ui/webui/resources/cr_components/chromeos/network/network_config.js
index 66669ee..7f6b7b9 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_config.js
+++ b/ui/webui/resources/cr_components/chromeos/network/network_config.js
@@ -491,8 +491,9 @@
   /** NetworkListenerBehavior override */
   onNetworkCertificatesChanged() {
     this.networkConfig_.getNetworkCertificates().then(response => {
-      const isOpenVpn = !!this.configProperties_.typeConfig.vpn &&
-          this.configProperties_.typeConfig.vpn.type === mojom.VpnType.kOpenVPN;
+      const vpn = this.configProperties_.typeConfig.vpn;
+      const isOpenVpn =
+          !!vpn && !!vpn.type && vpn.type.value === mojom.VpnType.kOpenVPN;
 
       const caCerts = response.serverCas.slice();
       if (!isOpenVpn) {
@@ -596,9 +597,10 @@
     if (this.mojoType_ === mojom.NetworkType.kVPN) {
       let saveCredentials = false;
       const vpn = managedProperties.typeProperties.vpn;
-      if (vpn.type === mojom.VpnType.kOpenVPN) {
+      const vpnType = vpn.type && vpn.type.value;
+      if (vpnType === mojom.VpnType.kOpenVPN) {
         saveCredentials = this.getActiveBoolean_(vpn.openVpn.saveCredentials);
-      } else if (vpn.type === mojom.VpnType.kL2TPIPsec) {
+      } else if (vpnType === mojom.VpnType.kL2TPIPsec) {
         saveCredentials = this.getActiveBoolean_(vpn.ipSec.saveCredentials) ||
             this.getActiveBoolean_(vpn.l2tp.saveCredentials);
       }
@@ -789,7 +791,7 @@
         const vpnType = vpn.type;
         const configVpn = configProperties.typeConfig.vpn;
         configVpn.host = OncMojo.getActiveString(vpn.host);
-        configVpn.type = vpnType;
+        configVpn.type = {value: vpnType};
         if (vpnType === mojom.VpnType.kL2TPIPsec) {
           assert(vpn.ipSec);
           configVpn.ipSec = this.getIPSecConfigProperties_(vpn.ipSec);
@@ -978,7 +980,7 @@
   getVpnTypeFromProperties_(properties) {
     const vpn = properties.typeConfig.vpn;
     assert(vpn);
-    if (vpn.type === mojom.VpnType.kL2TPIPsec) {
+    if (!!vpn.type && vpn.type.value === mojom.VpnType.kL2TPIPsec) {
       return vpn.ipSec.authenticationType === 'Cert' ?
           VPNConfigType.L2TP_IPSEC_CERT :
           VPNConfigType.L2TP_IPSEC_PSK;
@@ -1000,7 +1002,7 @@
     }
     switch (this.vpnType_) {
       case VPNConfigType.L2TP_IPSEC_PSK:
-        vpn.type = mojom.VpnType.kL2TPIPsec;
+        vpn.type = {value: mojom.VpnType.kL2TPIPsec};
         if (vpn.ipSec) {
           vpn.ipSec.authenticationType = 'PSK';
         } else {
@@ -1014,7 +1016,7 @@
         delete vpn.openVpn;
         break;
       case VPNConfigType.L2TP_IPSEC_CERT:
-        vpn.type = mojom.VpnType.kL2TPIPsec;
+        vpn.type = {value: mojom.VpnType.kL2TPIPsec};
         if (vpn.ipSec) {
           vpn.ipSec.authenticationType = 'Cert';
         } else {
@@ -1028,14 +1030,16 @@
         this.showVpn_ = {Cert: true, OpenVPN: false};
         break;
       case VPNConfigType.OPEN_VPN:
-        vpn.type = mojom.VpnType.kOpenVPN;
+        vpn.type = {value: mojom.VpnType.kOpenVPN};
         vpn.openVpn = vpn.openVpn || {saveCredentials: false};
         this.showVpn_ = {Cert: true, OpenVPN: true};
         delete vpn.l2tp;
         delete vpn.ipSec;
         break;
+      default:
+        assertNotReached();
     }
-    if (vpn.type === mojom.VpnType.kL2TPIPsec && !vpn.l2tp) {
+    if (vpn.type.value === mojom.VpnType.kL2TPIPsec && !vpn.l2tp) {
       vpn.l2tp = {
         lcpEchoDisabled: false,
         password: '',
@@ -1443,11 +1447,12 @@
       if (vpnConfig.host !== undefined) {
         vpnConfig.host = vpnConfig.host.trim();
       }
-      if (vpnConfig.type === mojom.VpnType.kOpenVPN) {
+      const vpnType = vpnConfig.type.value;
+      if (vpnType === mojom.VpnType.kOpenVPN) {
         this.setOpenVPNProperties_(propertiesToSet);
         delete propertiesToSet.typeConfig.vpn.ipSec;
         delete propertiesToSet.typeConfig.vpn.l2tp;
-      } else if (vpnConfig.type === mojom.VpnType.kL2TPIPsec) {
+      } else if (vpnType === mojom.VpnType.kL2TPIPsec) {
         this.setVpnIPsecProperties_(propertiesToSet);
         delete propertiesToSet.typeConfig.vpn.openVpn;
       }
diff --git a/ui/webui/resources/cr_components/chromeos/network/onc_mojo.js b/ui/webui/resources/cr_components/chromeos/network/onc_mojo.js
index 132413b..25016e162ae3 100644
--- a/ui/webui/resources/cr_components/chromeos/network/onc_mojo.js
+++ b/ui/webui/resources/cr_components/chromeos/network/onc_mojo.js
@@ -747,15 +747,15 @@
         return {typeConfig: {cellular: {}}};
         break;
       case mojom.NetworkType.kEthernet:
-        return {typeConfig: {ethernet: {authentication: 'None'}}};
+        return {typeConfig: {ethernet: {}}};
         break;
       case mojom.NetworkType.kVPN:
-        return {typeConfig: {vpn: {type: mojom.VpnType.kOpenVPN}}};
+        return {typeConfig: {vpn: {}}};
         break;
       case mojom.NetworkType.kWiFi:
-        return {
-          typeConfig: {wifi: {ssid: '', security: mojom.SecurityType.kNone}}
-        };
+        // Note: wifi.security can not be changed, so |security| will be ignored
+        // for existing configurations.
+        return {typeConfig: {wifi: {security: mojom.SecurityType.kNone}}};
         break;
     }
     assertNotReached('Unexpected type: ' + type.toString());
diff --git a/ui/webui/resources/cr_elements/search_highlight_style_css.html b/ui/webui/resources/cr_elements/search_highlight_style_css.html
index fd83632f..37feccd 100644
--- a/ui/webui/resources/cr_elements/search_highlight_style_css.html
+++ b/ui/webui/resources/cr_elements/search_highlight_style_css.html
@@ -18,9 +18,11 @@
         color: var(--google-grey-900);
         max-width: 100px;
         min-width: 64px;
+        overflow: hidden;
         padding: 4px 10px;
         text-align: center;
-        @apply --cr-text-elide;
+        text-overflow: ellipsis;
+        white-space: nowrap;
       }
 
       /* Provides the arrow which points at the anchor element. */
diff --git a/ui/webui/resources/cr_elements/shared_vars_css.html b/ui/webui/resources/cr_elements/shared_vars_css.html
index 1add20c9..7698040 100644
--- a/ui/webui/resources/cr_elements/shared_vars_css.html
+++ b/ui/webui/resources/cr_elements/shared_vars_css.html
@@ -178,12 +178,6 @@
       width: calc(100% * var(--cr-centered-card-width-percentage));
     }
 
-    --cr-text-elide: {
-      overflow: hidden;
-      text-overflow: ellipsis;
-      white-space: nowrap;
-    }
-
     --cr-tooltip: {
       font-size: 92.31%;  /* Effectively 12px if the host default is 13px. */
       font-weight: 500;
diff --git a/weblayer/shell/android/BUILD.gn b/weblayer/shell/android/BUILD.gn
index e6e0e99..16b72ac98 100644
--- a/weblayer/shell/android/BUILD.gn
+++ b/weblayer/shell/android/BUILD.gn
@@ -70,6 +70,8 @@
     target_sdk_version = 28
     android_manifest_dep = ":$_manifest_target"
 
+    command_line_flags_file = "weblayer-command-line"
+
     # Add a native lib so the ABI is compatible with the implementation APK.
     native_lib_placeholders = [ "libdummy.so" ]
   }